import type { Address, Hex } from "viem"; import type { LucidlyClient } from "./client.js"; import type { TxResult } from "./types.js"; /** * LucidlyPolicyManager — one instance per vault, deployed by the factory. Gives the vault's * STRATEGIST the ability to self-enable policies the Registry has whitelisted (no Lucidly signature * needed), and to publicly request non-whitelisted ones for owner review. This is the only path by * which a strategist's manage root changes. * * SDK surface: * • add() — addRegistryPolicy(templateId, packedArgs) → strategist only * • remove() — removePolicy(leaf) → strategist only * • request() — requestPolicy(protocolId, target, selector, argsHash, note) → strategist only * • root() — current Merkle root the strategist's vault enforces * • count() — number of enabled leaves * • clones() — per-protocol {decoder, tvlAdapter, oracle} this vault is bound to */ export declare const POLICY_MANAGER_ABI: readonly [{ readonly type: "function"; readonly name: "addRegistryPolicy"; readonly stateMutability: "nonpayable"; readonly inputs: readonly [{ readonly name: "templateId"; readonly type: "bytes32"; }, { readonly name: "packedArgs"; readonly type: "bytes"; }]; readonly outputs: readonly [{ readonly type: "bytes32"; }]; }, { readonly type: "function"; readonly name: "removePolicy"; readonly stateMutability: "nonpayable"; readonly inputs: readonly [{ readonly name: "leaf"; readonly type: "bytes32"; }]; readonly outputs: readonly []; }, { readonly type: "function"; readonly name: "requestPolicy"; readonly stateMutability: "nonpayable"; readonly inputs: readonly [{ readonly name: "protocolId"; readonly type: "bytes32"; }, { readonly name: "target"; readonly type: "address"; }, { readonly name: "selector"; readonly type: "bytes4"; }, { readonly name: "argsHash"; readonly type: "bytes32"; }, { readonly name: "note"; readonly type: "string"; }]; readonly outputs: readonly []; }, { readonly type: "function"; readonly name: "currentRoot"; readonly stateMutability: "view"; readonly inputs: readonly []; readonly outputs: readonly [{ readonly type: "bytes32"; }]; }, { readonly type: "function"; readonly name: "enabledCount"; readonly stateMutability: "view"; readonly inputs: readonly []; readonly outputs: readonly [{ readonly type: "uint256"; }]; }, { readonly type: "function"; readonly name: "enabledLeavesList"; readonly stateMutability: "view"; readonly inputs: readonly []; readonly outputs: readonly [{ readonly type: "bytes32[]"; }]; }, { readonly type: "function"; readonly name: "usedProtocolsList"; readonly stateMutability: "view"; readonly inputs: readonly []; readonly outputs: readonly [{ readonly type: "bytes32[]"; }]; }, { readonly type: "function"; readonly name: "strategist"; readonly stateMutability: "view"; readonly inputs: readonly []; readonly outputs: readonly [{ readonly type: "address"; }]; }, { readonly type: "function"; readonly name: "vault"; readonly stateMutability: "view"; readonly inputs: readonly []; readonly outputs: readonly [{ readonly type: "address"; }]; }, { readonly type: "function"; readonly name: "clonesOf"; readonly stateMutability: "view"; readonly inputs: readonly [{ readonly name: "protocolId"; readonly type: "bytes32"; }]; readonly outputs: readonly [{ readonly name: "decoder"; readonly type: "address"; }, { readonly name: "tvlAdapter"; readonly type: "address"; }, { readonly name: "oracle"; readonly type: "address"; }, { readonly name: "exists"; readonly type: "bool"; }]; }]; export interface PolicyClones { decoder: Address; tvlAdapter: Address; oracle: Address; exists: boolean; } export declare class PolicyManagerModule { private readonly client; constructor(client: LucidlyClient); /** addRegistryPolicy(templateId, packedArgs). Returns tx hash + a wait() helper. */ add(opts: { policyManager: Address; templateId: Hex; packedArgs: Hex; }): Promise; remove(opts: { policyManager: Address; leaf: Hex; }): Promise; /** Publicly request a non-whitelisted policy → emits PolicyRequested → indexer review queue. */ request(opts: { policyManager: Address; protocolId: Hex; target: Address; selector: Hex; argsHash: Hex; note: string; }): Promise; root(policyManager: Address): Promise; count(policyManager: Address): Promise; leaves(policyManager: Address): Promise; usedProtocols(policyManager: Address): Promise; strategist(policyManager: Address): Promise
; clones(policyManager: Address, protocolId: Hex): Promise; }