import { encodeAbiParameters, type Address, type Transport, type Client, type EncodeFunctionDataParameters, type Chain, type Hex, type ReadContractReturnType } from 'viem'; import { type SmartContractAccount, type GetAccountParameter, type SendUserOperationResult, type GetEntryPointFromAccount, type UserOperationOverridesParameter, type UserOperationContext, type GetContextParameter } from '@alchemy/aa-core'; import { type Plugin } from '../types.js'; import { type FunctionReference } from '../../account-loupe/types.js'; type ExecutionActions = GetEntryPointFromAccount> = { updateOwners: (args: Pick, 'args'> & UserOperationOverridesParameter & GetAccountParameter & GetContextParameter) => Promise>; }; type InstallArgs = [{ type: 'address[]'; }]; export type InstallMultiOwnerPluginParams = { args: Parameters>[1]; pluginAddress?: Address; dependencyOverrides?: FunctionReference[]; }; type ManagementActions = GetEntryPointFromAccount> = { installMultiOwnerPlugin: (args: UserOperationOverridesParameter & InstallMultiOwnerPluginParams & GetAccountParameter & GetContextParameter) => Promise>; }; type ReadAndEncodeActions = { encodeUpdateOwners: (args: Pick, 'args'>) => Hex; encodeEip712Domain: (args: Pick, 'args'>) => Hex; readEip712Domain: (args: GetAccountParameter) => Promise>; encodeIsValidSignature: (args: Pick, 'args'>) => Hex; readIsValidSignature: (args: Pick, 'args'> & GetAccountParameter) => Promise>; }; export type MultiOwnerPluginActions = ExecutionActions & ManagementActions & ReadAndEncodeActions; export declare const MultiOwnerPlugin: Plugin; export declare const multiOwnerPluginActions: (client: Client) => MultiOwnerPluginActions; export declare const MultiOwnerPluginExecutionFunctionAbi: readonly [{ readonly stateMutability: "nonpayable"; readonly type: "function"; readonly inputs: readonly [{ readonly name: "ownersToAdd"; readonly internalType: "address[]"; readonly type: "address[]"; }, { readonly name: "ownersToRemove"; readonly internalType: "address[]"; readonly type: "address[]"; }]; readonly name: "updateOwners"; readonly outputs: readonly []; }, { readonly stateMutability: "view"; readonly type: "function"; readonly inputs: readonly []; readonly name: "eip712Domain"; readonly outputs: readonly [{ readonly name: "fields"; readonly internalType: "bytes1"; readonly type: "bytes1"; }, { readonly name: "name"; readonly internalType: "string"; readonly type: "string"; }, { readonly name: "version"; readonly internalType: "string"; readonly type: "string"; }, { readonly name: "chainId"; readonly internalType: "uint256"; readonly type: "uint256"; }, { readonly name: "verifyingContract"; readonly internalType: "address"; readonly type: "address"; }, { readonly name: "salt"; readonly internalType: "bytes32"; readonly type: "bytes32"; }, { readonly name: "extensions"; readonly internalType: "uint256[]"; readonly type: "uint256[]"; }]; }, { readonly stateMutability: "view"; readonly type: "function"; readonly inputs: readonly [{ readonly name: "digest"; readonly internalType: "bytes32"; readonly type: "bytes32"; }, { readonly name: "signature"; readonly internalType: "bytes"; readonly type: "bytes"; }]; readonly name: "isValidSignature"; readonly outputs: readonly [{ readonly name: ""; readonly internalType: "bytes4"; readonly type: "bytes4"; }]; }]; export declare const MultiOwnerPluginAbi: readonly [{ readonly stateMutability: "view"; readonly type: "function"; readonly inputs: readonly []; readonly name: "eip712Domain"; readonly outputs: readonly [{ readonly name: "fields"; readonly internalType: "bytes1"; readonly type: "bytes1"; }, { readonly name: "name"; readonly internalType: "string"; readonly type: "string"; }, { readonly name: "version"; readonly internalType: "string"; readonly type: "string"; }, { readonly name: "chainId"; readonly internalType: "uint256"; readonly type: "uint256"; }, { readonly name: "verifyingContract"; readonly internalType: "address"; readonly type: "address"; }, { readonly name: "salt"; readonly internalType: "bytes32"; readonly type: "bytes32"; }, { readonly name: "extensions"; readonly internalType: "uint256[]"; readonly type: "uint256[]"; }]; }, { readonly stateMutability: "view"; readonly type: "function"; readonly inputs: readonly [{ readonly name: "account"; readonly internalType: "address"; readonly type: "address"; }, { readonly name: "message"; readonly internalType: "bytes"; readonly type: "bytes"; }]; readonly name: "encodeMessageData"; readonly outputs: readonly [{ readonly name: ""; readonly internalType: "bytes"; readonly type: "bytes"; }]; }, { readonly stateMutability: "view"; readonly type: "function"; readonly inputs: readonly [{ readonly name: "account"; readonly internalType: "address"; readonly type: "address"; }, { readonly name: "message"; readonly internalType: "bytes"; readonly type: "bytes"; }]; readonly name: "getMessageHash"; readonly outputs: readonly [{ readonly name: ""; readonly internalType: "bytes32"; readonly type: "bytes32"; }]; }, { readonly stateMutability: "view"; readonly type: "function"; readonly inputs: readonly [{ readonly name: "account"; readonly internalType: "address"; readonly type: "address"; }, { readonly name: "ownerToCheck"; readonly internalType: "address"; readonly type: "address"; }]; readonly name: "isOwnerOf"; readonly outputs: readonly [{ readonly name: ""; readonly internalType: "bool"; readonly type: "bool"; }]; }, { readonly stateMutability: "view"; readonly type: "function"; readonly inputs: readonly [{ readonly name: "digest"; readonly internalType: "bytes32"; readonly type: "bytes32"; }, { readonly name: "signature"; readonly internalType: "bytes"; readonly type: "bytes"; }]; readonly name: "isValidSignature"; readonly outputs: readonly [{ readonly name: ""; readonly internalType: "bytes4"; readonly type: "bytes4"; }]; }, { readonly stateMutability: "nonpayable"; readonly type: "function"; readonly inputs: readonly [{ readonly name: "data"; readonly internalType: "bytes"; readonly type: "bytes"; }]; readonly name: "onInstall"; readonly outputs: readonly []; }, { readonly stateMutability: "nonpayable"; readonly type: "function"; readonly inputs: readonly [{ readonly name: ""; readonly internalType: "bytes"; readonly type: "bytes"; }]; readonly name: "onUninstall"; readonly outputs: readonly []; }, { readonly stateMutability: "view"; readonly type: "function"; readonly inputs: readonly [{ readonly name: "account"; readonly internalType: "address"; readonly type: "address"; }]; readonly name: "ownersOf"; readonly outputs: readonly [{ readonly name: ""; readonly internalType: "address[]"; readonly type: "address[]"; }]; }, { readonly stateMutability: "pure"; readonly type: "function"; readonly inputs: readonly []; readonly name: "pluginManifest"; readonly outputs: readonly [{ readonly name: ""; readonly internalType: "struct PluginManifest"; readonly type: "tuple"; readonly components: readonly [{ readonly name: "interfaceIds"; readonly internalType: "bytes4[]"; readonly type: "bytes4[]"; }, { readonly name: "dependencyInterfaceIds"; readonly internalType: "bytes4[]"; readonly type: "bytes4[]"; }, { readonly name: "executionFunctions"; readonly internalType: "bytes4[]"; readonly type: "bytes4[]"; }, { readonly name: "permittedExecutionSelectors"; readonly internalType: "bytes4[]"; readonly type: "bytes4[]"; }, { readonly name: "permitAnyExternalAddress"; readonly internalType: "bool"; readonly type: "bool"; }, { readonly name: "canSpendNativeToken"; readonly internalType: "bool"; readonly type: "bool"; }, { readonly name: "permittedExternalCalls"; readonly internalType: "struct ManifestExternalCallPermission[]"; readonly type: "tuple[]"; readonly components: readonly [{ readonly name: "externalAddress"; readonly internalType: "address"; readonly type: "address"; }, { readonly name: "permitAnySelector"; readonly internalType: "bool"; readonly type: "bool"; }, { readonly name: "selectors"; readonly internalType: "bytes4[]"; readonly type: "bytes4[]"; }]; }, { readonly name: "userOpValidationFunctions"; readonly internalType: "struct ManifestAssociatedFunction[]"; readonly type: "tuple[]"; readonly components: readonly [{ readonly name: "executionSelector"; readonly internalType: "bytes4"; readonly type: "bytes4"; }, { readonly name: "associatedFunction"; readonly internalType: "struct ManifestFunction"; readonly type: "tuple"; readonly components: readonly [{ readonly name: "functionType"; readonly internalType: "enum ManifestAssociatedFunctionType"; readonly type: "uint8"; }, { readonly name: "functionId"; readonly internalType: "uint8"; readonly type: "uint8"; }, { readonly name: "dependencyIndex"; readonly internalType: "uint256"; readonly type: "uint256"; }]; }]; }, { readonly name: "runtimeValidationFunctions"; readonly internalType: "struct ManifestAssociatedFunction[]"; readonly type: "tuple[]"; readonly components: readonly [{ readonly name: "executionSelector"; readonly internalType: "bytes4"; readonly type: "bytes4"; }, { readonly name: "associatedFunction"; readonly internalType: "struct ManifestFunction"; readonly type: "tuple"; readonly components: readonly [{ readonly name: "functionType"; readonly internalType: "enum ManifestAssociatedFunctionType"; readonly type: "uint8"; }, { readonly name: "functionId"; readonly internalType: "uint8"; readonly type: "uint8"; }, { readonly name: "dependencyIndex"; readonly internalType: "uint256"; readonly type: "uint256"; }]; }]; }, { readonly name: "preUserOpValidationHooks"; readonly internalType: "struct ManifestAssociatedFunction[]"; readonly type: "tuple[]"; readonly components: readonly [{ readonly name: "executionSelector"; readonly internalType: "bytes4"; readonly type: "bytes4"; }, { readonly name: "associatedFunction"; readonly internalType: "struct ManifestFunction"; readonly type: "tuple"; readonly components: readonly [{ readonly name: "functionType"; readonly internalType: "enum ManifestAssociatedFunctionType"; readonly type: "uint8"; }, { readonly name: "functionId"; readonly internalType: "uint8"; readonly type: "uint8"; }, { readonly name: "dependencyIndex"; readonly internalType: "uint256"; readonly type: "uint256"; }]; }]; }, { readonly name: "preRuntimeValidationHooks"; readonly internalType: "struct ManifestAssociatedFunction[]"; readonly type: "tuple[]"; readonly components: readonly [{ readonly name: "executionSelector"; readonly internalType: "bytes4"; readonly type: "bytes4"; }, { readonly name: "associatedFunction"; readonly internalType: "struct ManifestFunction"; readonly type: "tuple"; readonly components: readonly [{ readonly name: "functionType"; readonly internalType: "enum ManifestAssociatedFunctionType"; readonly type: "uint8"; }, { readonly name: "functionId"; readonly internalType: "uint8"; readonly type: "uint8"; }, { readonly name: "dependencyIndex"; readonly internalType: "uint256"; readonly type: "uint256"; }]; }]; }, { readonly name: "executionHooks"; readonly internalType: "struct ManifestExecutionHook[]"; readonly type: "tuple[]"; readonly components: readonly [{ readonly name: "executionSelector"; readonly internalType: "bytes4"; readonly type: "bytes4"; }, { readonly name: "preExecHook"; readonly internalType: "struct ManifestFunction"; readonly type: "tuple"; readonly components: readonly [{ readonly name: "functionType"; readonly internalType: "enum ManifestAssociatedFunctionType"; readonly type: "uint8"; }, { readonly name: "functionId"; readonly internalType: "uint8"; readonly type: "uint8"; }, { readonly name: "dependencyIndex"; readonly internalType: "uint256"; readonly type: "uint256"; }]; }, { readonly name: "postExecHook"; readonly internalType: "struct ManifestFunction"; readonly type: "tuple"; readonly components: readonly [{ readonly name: "functionType"; readonly internalType: "enum ManifestAssociatedFunctionType"; readonly type: "uint8"; }, { readonly name: "functionId"; readonly internalType: "uint8"; readonly type: "uint8"; }, { readonly name: "dependencyIndex"; readonly internalType: "uint256"; readonly type: "uint256"; }]; }]; }]; }]; }, { readonly stateMutability: "pure"; readonly type: "function"; readonly inputs: readonly []; readonly name: "pluginMetadata"; readonly outputs: readonly [{ readonly name: ""; readonly internalType: "struct PluginMetadata"; readonly type: "tuple"; readonly components: readonly [{ readonly name: "name"; readonly internalType: "string"; readonly type: "string"; }, { readonly name: "version"; readonly internalType: "string"; readonly type: "string"; }, { readonly name: "author"; readonly internalType: "string"; readonly type: "string"; }, { readonly name: "permissionDescriptors"; readonly internalType: "struct SelectorPermission[]"; readonly type: "tuple[]"; readonly components: readonly [{ readonly name: "functionSelector"; readonly internalType: "bytes4"; readonly type: "bytes4"; }, { readonly name: "permissionDescription"; readonly internalType: "string"; readonly type: "string"; }]; }]; }]; }, { readonly stateMutability: "nonpayable"; readonly type: "function"; readonly inputs: readonly [{ readonly name: "functionId"; readonly internalType: "uint8"; readonly type: "uint8"; }, { readonly name: "preExecHookData"; readonly internalType: "bytes"; readonly type: "bytes"; }]; readonly name: "postExecutionHook"; readonly outputs: readonly []; }, { readonly stateMutability: "nonpayable"; readonly type: "function"; readonly inputs: readonly [{ readonly name: "functionId"; readonly internalType: "uint8"; readonly type: "uint8"; }, { readonly name: "sender"; readonly internalType: "address"; readonly type: "address"; }, { readonly name: "value"; readonly internalType: "uint256"; readonly type: "uint256"; }, { readonly name: "data"; readonly internalType: "bytes"; readonly type: "bytes"; }]; readonly name: "preExecutionHook"; readonly outputs: readonly [{ readonly name: ""; readonly internalType: "bytes"; readonly type: "bytes"; }]; }, { readonly stateMutability: "nonpayable"; readonly type: "function"; readonly inputs: readonly [{ readonly name: "functionId"; readonly internalType: "uint8"; readonly type: "uint8"; }, { readonly name: "sender"; readonly internalType: "address"; readonly type: "address"; }, { readonly name: "value"; readonly internalType: "uint256"; readonly type: "uint256"; }, { readonly name: "data"; readonly internalType: "bytes"; readonly type: "bytes"; }]; readonly name: "preRuntimeValidationHook"; readonly outputs: readonly []; }, { readonly stateMutability: "nonpayable"; readonly type: "function"; readonly inputs: readonly [{ readonly name: "functionId"; readonly internalType: "uint8"; readonly type: "uint8"; }, { readonly name: "userOp"; readonly internalType: "struct UserOperation"; readonly type: "tuple"; readonly components: readonly [{ readonly name: "sender"; readonly internalType: "address"; readonly type: "address"; }, { readonly name: "nonce"; readonly internalType: "uint256"; readonly type: "uint256"; }, { readonly name: "initCode"; readonly internalType: "bytes"; readonly type: "bytes"; }, { readonly name: "callData"; readonly internalType: "bytes"; readonly type: "bytes"; }, { readonly name: "callGasLimit"; readonly internalType: "uint256"; readonly type: "uint256"; }, { readonly name: "verificationGasLimit"; readonly internalType: "uint256"; readonly type: "uint256"; }, { readonly name: "preVerificationGas"; readonly internalType: "uint256"; readonly type: "uint256"; }, { readonly name: "maxFeePerGas"; readonly internalType: "uint256"; readonly type: "uint256"; }, { readonly name: "maxPriorityFeePerGas"; readonly internalType: "uint256"; readonly type: "uint256"; }, { readonly name: "paymasterAndData"; readonly internalType: "bytes"; readonly type: "bytes"; }, { readonly name: "signature"; readonly internalType: "bytes"; readonly type: "bytes"; }]; }, { readonly name: "userOpHash"; readonly internalType: "bytes32"; readonly type: "bytes32"; }]; readonly name: "preUserOpValidationHook"; readonly outputs: readonly [{ readonly name: ""; readonly internalType: "uint256"; readonly type: "uint256"; }]; }, { readonly stateMutability: "view"; readonly type: "function"; readonly inputs: readonly [{ readonly name: "functionId"; readonly internalType: "uint8"; readonly type: "uint8"; }, { readonly name: "sender"; readonly internalType: "address"; readonly type: "address"; }, { readonly name: ""; readonly internalType: "uint256"; readonly type: "uint256"; }, { readonly name: ""; readonly internalType: "bytes"; readonly type: "bytes"; }]; readonly name: "runtimeValidationFunction"; readonly outputs: readonly []; }, { readonly stateMutability: "view"; readonly type: "function"; readonly inputs: readonly [{ readonly name: "interfaceId"; readonly internalType: "bytes4"; readonly type: "bytes4"; }]; readonly name: "supportsInterface"; readonly outputs: readonly [{ readonly name: ""; readonly internalType: "bool"; readonly type: "bool"; }]; }, { readonly stateMutability: "nonpayable"; readonly type: "function"; readonly inputs: readonly [{ readonly name: "ownersToAdd"; readonly internalType: "address[]"; readonly type: "address[]"; }, { readonly name: "ownersToRemove"; readonly internalType: "address[]"; readonly type: "address[]"; }]; readonly name: "updateOwners"; readonly outputs: readonly []; }, { readonly stateMutability: "view"; readonly type: "function"; readonly inputs: readonly [{ readonly name: "functionId"; readonly internalType: "uint8"; readonly type: "uint8"; }, { readonly name: "userOp"; readonly internalType: "struct UserOperation"; readonly type: "tuple"; readonly components: readonly [{ readonly name: "sender"; readonly internalType: "address"; readonly type: "address"; }, { readonly name: "nonce"; readonly internalType: "uint256"; readonly type: "uint256"; }, { readonly name: "initCode"; readonly internalType: "bytes"; readonly type: "bytes"; }, { readonly name: "callData"; readonly internalType: "bytes"; readonly type: "bytes"; }, { readonly name: "callGasLimit"; readonly internalType: "uint256"; readonly type: "uint256"; }, { readonly name: "verificationGasLimit"; readonly internalType: "uint256"; readonly type: "uint256"; }, { readonly name: "preVerificationGas"; readonly internalType: "uint256"; readonly type: "uint256"; }, { readonly name: "maxFeePerGas"; readonly internalType: "uint256"; readonly type: "uint256"; }, { readonly name: "maxPriorityFeePerGas"; readonly internalType: "uint256"; readonly type: "uint256"; }, { readonly name: "paymasterAndData"; readonly internalType: "bytes"; readonly type: "bytes"; }, { readonly name: "signature"; readonly internalType: "bytes"; readonly type: "bytes"; }]; }, { readonly name: "userOpHash"; readonly internalType: "bytes32"; readonly type: "bytes32"; }]; readonly name: "userOpValidationFunction"; readonly outputs: readonly [{ readonly name: ""; readonly internalType: "uint256"; readonly type: "uint256"; }]; }, { readonly type: "event"; readonly anonymous: false; readonly inputs: readonly [{ readonly name: "account"; readonly internalType: "address"; readonly type: "address"; readonly indexed: true; }, { readonly name: "addedOwners"; readonly internalType: "address[]"; readonly type: "address[]"; readonly indexed: false; }, { readonly name: "removedOwners"; readonly internalType: "address[]"; readonly type: "address[]"; readonly indexed: false; }]; readonly name: "OwnerUpdated"; }, { readonly type: "error"; readonly inputs: readonly []; readonly name: "AlreadyInitialized"; }, { readonly type: "error"; readonly inputs: readonly []; readonly name: "EmptyOwnersNotAllowed"; }, { readonly type: "error"; readonly inputs: readonly []; readonly name: "InvalidAction"; }, { readonly type: "error"; readonly inputs: readonly [{ readonly name: "owner"; readonly internalType: "address"; readonly type: "address"; }]; readonly name: "InvalidOwner"; }, { readonly type: "error"; readonly inputs: readonly []; readonly name: "NotAuthorized"; }, { readonly type: "error"; readonly inputs: readonly [{ readonly name: "caller"; readonly internalType: "address"; readonly type: "address"; }]; readonly name: "NotContractCaller"; }, { readonly type: "error"; readonly inputs: readonly [{ readonly name: "selector"; readonly internalType: "bytes4"; readonly type: "bytes4"; }, { readonly name: "functionId"; readonly internalType: "uint8"; readonly type: "uint8"; }]; readonly name: "NotImplemented"; }, { readonly type: "error"; readonly inputs: readonly []; readonly name: "NotInitialized"; }, { readonly type: "error"; readonly inputs: readonly [{ readonly name: "owner"; readonly internalType: "address"; readonly type: "address"; }]; readonly name: "OwnerDoesNotExist"; }]; export {};