@metamask/delegation-toolkit
Version:
The Delegation Toolkit built on top of Viem - a library for interacting with DeleGator Smart Accounts
1 lines • 22.3 kB
Source Map (JSON)
{"version":3,"sources":["../src/toMetaMaskSmartAccount.ts","../src/signatory.ts","../src/signatures.ts","../src/actions/caveatEnforcerClient.ts"],"sourcesContent":["import {\n EIP7702StatelessDeleGator,\n HybridDeleGator,\n MultiSigDeleGator,\n} from '@metamask/delegation-abis';\nimport { type Address, type Hex } from 'viem';\nimport {\n entryPoint07Abi,\n toPackedUserOperation,\n toSmartAccount,\n} from 'viem/account-abstraction';\n\nimport { isValid7702Implementation } from './actions/isValid7702Implementation';\nimport { Implementation } from './constants';\nimport { getCounterfactualAccountData } from './counterfactualAccountData';\nimport {\n SIGNABLE_DELEGATION_TYPED_DATA,\n toDelegationStruct,\n} from './delegation';\nimport { entryPointGetNonce as _getNonce } from './DelegationFramework/EntryPoint/read';\nimport { getDeleGatorEnvironment } from './delegatorEnvironment';\nimport { encodeCallsForCaller } from './encodeCalls';\nimport { resolveSignatory } from './signatory';\nimport type {\n Call,\n ToMetaMaskSmartAccountParameters,\n ToMetaMaskSmartAccountReturnType,\n SignDelegationParams,\n SignUserOperationParams,\n AbiByImplementation,\n} from './types';\nimport { SIGNABLE_USER_OP_TYPED_DATA } from './userOp';\n\nconst ENTRYPOINT_VERSION = '0.7' as const;\n\n/**\n * Creates a MetaMask DeleGator smart account instance.\n *\n * @template TImplementation - The type of implementation, extending Implementation.\n * @param params - The parameters for creating the smart account.\n * @returns A promise that resolves to a MetaMask DeleGator smart account instance.\n * @description\n * This function sets up a MetaMask DeleGator smart account with the specified implementation.\n * It handles both deployed accounts, and counterfactual accounts.\n * A caller may specify a DeleGator environment, otherwise the environment will be inferred from the chain.\n */\nexport async function toMetaMaskSmartAccount<\n TImplementation extends Implementation,\n>(\n params: ToMetaMaskSmartAccountParameters<TImplementation>,\n): Promise<ToMetaMaskSmartAccountReturnType<TImplementation>> {\n const {\n client,\n client: { chain },\n implementation,\n } = params;\n\n if (!chain) {\n throw new Error('Chain not specified');\n }\n\n const signatory = resolveSignatory({\n implementation,\n signatory: params.signatory,\n });\n\n const environment = params.environment ?? getDeleGatorEnvironment(chain.id);\n\n let address: Address, factoryData: Hex | undefined;\n\n if (params.address) {\n factoryData = undefined;\n address = params.address;\n } else {\n if (implementation === Implementation.Stateless7702) {\n throw new Error('Stateless7702 does not support counterfactual accounts');\n }\n\n const accountData = await getCounterfactualAccountData({\n factory: environment.SimpleFactory,\n implementations: environment.implementations,\n implementation,\n deployParams: params.deployParams,\n deploySalt: params.deploySalt,\n });\n\n address = accountData.address;\n factoryData = accountData.factoryData;\n }\n\n const entryPoint = {\n abi: entryPoint07Abi,\n address: environment.EntryPoint,\n version: ENTRYPOINT_VERSION,\n } as const;\n\n const { abi, contractName } = {\n [Implementation.Hybrid]: {\n contractName: 'HybridDeleGator',\n abi: HybridDeleGator.abi,\n },\n [Implementation.MultiSig]: {\n contractName: 'MultiSigDeleGator',\n abi: MultiSigDeleGator.abi,\n },\n [Implementation.Stateless7702]: {\n contractName: 'EIP7702StatelessDeleGator',\n abi: EIP7702StatelessDeleGator.abi,\n },\n }[implementation] as {\n contractName: string;\n abi: AbiByImplementation[TImplementation];\n };\n\n const getFactoryArgs = async () => {\n if (factoryData === undefined) {\n throw new Error(\n 'Deploy params were not provided, so factory args cannot be inferred',\n );\n }\n return {\n factoryData,\n factory: environment.SimpleFactory,\n };\n };\n\n const signDelegation = async (delegationParams: SignDelegationParams) => {\n const { delegation, chainId } = delegationParams;\n\n const delegationStruct = toDelegationStruct({\n ...delegation,\n signature: '0x',\n });\n\n const signature = signatory.signTypedData({\n domain: {\n chainId: chainId ?? chain.id,\n name: 'DelegationManager',\n version: '1',\n verifyingContract: environment.DelegationManager,\n },\n types: SIGNABLE_DELEGATION_TYPED_DATA,\n primaryType: 'Delegation',\n message: delegationStruct,\n });\n\n return signature;\n };\n\n const signUserOperation = async (userOpParams: SignUserOperationParams) => {\n const { chainId } = userOpParams;\n\n const packedUserOp = toPackedUserOperation({\n sender: address,\n ...userOpParams,\n signature: '0x',\n });\n\n const signature = await signatory.signTypedData({\n domain: {\n chainId: chainId ?? chain.id,\n name: contractName,\n version: '1',\n verifyingContract: address,\n },\n types: SIGNABLE_USER_OP_TYPED_DATA,\n primaryType: 'PackedUserOperation',\n message: { ...packedUserOp, entryPoint: entryPoint.address },\n });\n\n return signature;\n };\n\n const getAddress = async () => address;\n\n const getNonce = async () =>\n _getNonce({\n client,\n entryPoint: environment.EntryPoint,\n contractAddress: address,\n key: 0n,\n });\n\n const encodeCalls = async (calls: readonly Call[]) =>\n encodeCallsForCaller(address, calls);\n\n const smartAccount = await toSmartAccount({\n abi,\n client,\n entryPoint,\n environment,\n getAddress,\n getFactoryArgs,\n encodeCalls,\n getNonce,\n signUserOperation,\n signDelegation,\n ...signatory,\n });\n\n // Override isDeployed only for EIP-7702 implementation to check proper delegation code\n if (implementation === Implementation.Stateless7702) {\n return {\n ...smartAccount,\n isDeployed: async () =>\n isValid7702Implementation({\n client,\n accountAddress: address,\n environment,\n }),\n };\n }\n\n // For other implementations, use the default isDeployed behavior\n return smartAccount;\n}\n","import { concat } from 'viem';\nimport type {\n Address,\n SignableMessage,\n TypedData,\n TypedDataDefinition,\n} from 'viem';\nimport type { SignReturnType as WebAuthnSignReturnType } from 'webauthn-p256';\n\nimport { Implementation } from './constants';\nimport { aggregateSignature } from './signatures';\nimport type {\n AccountSignatoryConfig,\n HybridSignatoryConfig,\n InternalSignatory,\n MultiSigSignatoryConfig,\n SignatoryConfigByImplementation,\n Stateless7702SignatoryConfig,\n WalletSignatoryConfig,\n} from './types';\nimport {\n createDummyWebAuthnSignature,\n encodeDeleGatorSignature,\n} from './webAuthn';\n\n// A valid ECDSA signature, this must be able to ecrecover an address, otherwise the contracts will revert in isValidSignature\nconst EOA_STUB_SIGNATURE =\n '0x000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011b' as const;\n\nconst resolveSignatoryFromWalletConfig = (\n config: WalletSignatoryConfig,\n): InternalSignatory => {\n return {\n signMessage: config.walletClient.signMessage,\n signTypedData: async (typedData) => {\n // todo: figure out this type so that we don't need the type assertion\n return config.walletClient.signTypedData(typedData as any);\n },\n getStubSignature: async () => EOA_STUB_SIGNATURE,\n };\n};\n\nconst resolveSignatoryFromAccountConfig = (config: AccountSignatoryConfig) => {\n return {\n signMessage: config.account.signMessage,\n signTypedData: config.account.signTypedData,\n getStubSignature: async () => EOA_STUB_SIGNATURE,\n };\n};\n\nconst resolveHybridSignatory = (\n config: HybridSignatoryConfig,\n): InternalSignatory => {\n if ('walletClient' in config) {\n return resolveSignatoryFromWalletConfig(config);\n } else if ('account' in config) {\n const { signMessage, signTypedData, getStubSignature } =\n resolveSignatoryFromAccountConfig(config);\n if (!signMessage) {\n throw new Error('Account does not support signMessage');\n }\n if (!signTypedData) {\n throw new Error('Account does not support signTypedData');\n }\n return {\n signMessage,\n signTypedData,\n getStubSignature,\n };\n }\n const { keyId, webAuthnAccount } = config;\n\n if (webAuthnAccount.type !== 'webAuthn') {\n throw new Error('Account is not a webAuthn account');\n }\n\n const encodeSignature = ({ signature, webauthn }: WebAuthnSignReturnType) =>\n encodeDeleGatorSignature(\n keyId,\n signature,\n webauthn.clientDataJSON,\n webauthn.authenticatorData,\n );\n\n const signMessage = async (args: { message: SignableMessage }) =>\n webAuthnAccount.signMessage(args).then(encodeSignature);\n const signTypedData = async <\n const TTypedData extends TypedData | Record<string, unknown>,\n TPrimaryType extends keyof TTypedData | 'EIP712Domain' = keyof TTypedData,\n >(\n typedDataDefinition: TypedDataDefinition<TTypedData, TPrimaryType>,\n ) => webAuthnAccount.signTypedData(typedDataDefinition).then(encodeSignature);\n\n const getStubSignature = async () => createDummyWebAuthnSignature(keyId);\n\n return {\n signMessage,\n signTypedData,\n getStubSignature,\n };\n};\n\nconst resolveMultiSigSignatory = (\n config: MultiSigSignatoryConfig,\n): InternalSignatory => {\n const resolvedSignatories = config.map((signatory) => {\n let individualSignMessage: InternalSignatory['signMessage'];\n let individualSignTypedData: InternalSignatory['signTypedData'];\n let address: Address;\n if ('walletClient' in signatory) {\n const { signMessage, signTypedData } =\n resolveSignatoryFromWalletConfig(signatory);\n individualSignMessage = signMessage;\n individualSignTypedData = signTypedData;\n\n address = signatory.walletClient.account.address;\n } else {\n const { signMessage, signTypedData } =\n resolveSignatoryFromAccountConfig(signatory);\n if (!signMessage) {\n throw new Error('Account does not support signMessage');\n }\n if (!signTypedData) {\n throw new Error('Account does not support signTypedData');\n }\n\n individualSignMessage = signMessage;\n individualSignTypedData = signTypedData;\n\n address = signatory.account.address;\n }\n return {\n address,\n individualSignMessage,\n individualSignTypedData,\n };\n });\n\n const signMessage = async (args: { message: SignableMessage }) => {\n const addressAndSignatures = resolvedSignatories.map(\n async ({ individualSignMessage, address }) => ({\n signature: await individualSignMessage(args),\n signer: address,\n type: 'ECDSA' as const,\n }),\n );\n\n const signatures = await Promise.all(addressAndSignatures);\n\n return aggregateSignature({\n signatures,\n });\n };\n\n const signTypedData = async <\n const TTypedData extends TypedData | Record<string, unknown>,\n TPrimaryType extends keyof TTypedData | 'EIP712Domain' = keyof TTypedData,\n >(\n typedDataDefinition: TypedDataDefinition<TTypedData, TPrimaryType>,\n ) => {\n const addressAndSignatures = resolvedSignatories.map(\n async ({ individualSignTypedData, address }) => ({\n signature: await individualSignTypedData(typedDataDefinition),\n signer: address,\n type: 'ECDSA' as const,\n }),\n );\n\n const signatures = await Promise.all(addressAndSignatures);\n\n return aggregateSignature({\n signatures,\n });\n };\n\n const getStubSignature = async () =>\n concat(resolvedSignatories.map(() => EOA_STUB_SIGNATURE));\n\n return {\n signMessage,\n signTypedData,\n getStubSignature,\n };\n};\n\nconst resolveStateless7702Signatory = (\n config: Stateless7702SignatoryConfig,\n): InternalSignatory => {\n if ('walletClient' in config) {\n return resolveSignatoryFromWalletConfig(config);\n } else if ('account' in config) {\n const { signMessage, signTypedData, getStubSignature } =\n resolveSignatoryFromAccountConfig(config);\n if (!signMessage) {\n throw new Error('Account does not support signMessage');\n }\n if (!signTypedData) {\n throw new Error('Account does not support signTypedData');\n }\n\n return {\n signMessage,\n signTypedData,\n getStubSignature,\n };\n }\n\n throw new Error('Invalid signatory config');\n};\n\nexport const resolveSignatory = <\n TImplementation extends Implementation,\n>(config: {\n implementation: TImplementation;\n signatory: SignatoryConfigByImplementation<TImplementation>;\n}): InternalSignatory => {\n const { implementation } = config;\n\n if (implementation === Implementation.Hybrid) {\n return resolveHybridSignatory(config.signatory as HybridSignatoryConfig);\n } else if (implementation === Implementation.MultiSig) {\n return resolveMultiSigSignatory(\n config.signatory as MultiSigSignatoryConfig,\n );\n } else if (implementation === Implementation.Stateless7702) {\n return resolveStateless7702Signatory(\n config.signatory as Stateless7702SignatoryConfig,\n );\n }\n throw new Error(`Implementation type '${implementation}' not supported`);\n};\n","import type { Address, Hex } from 'viem';\nimport { concat } from 'viem';\n\nconst signatureTypes = ['ECDSA'] as const;\n\nexport type SignatureType = (typeof signatureTypes)[number];\n\n/**\n * Represents a partial signature that can be aggregated with others.\n */\nexport type PartialSignature = {\n signer: Address;\n signature: Hex;\n type: SignatureType;\n};\n\n/**\n * Aggregates signatures into a single signature as expected by the MultiSig implementation.\n * @param params - The parameters for signature aggregation.\n * @param params.signatures - The array of partial signatures to aggregate.\n * @returns The aggregated signature.\n */\nexport const aggregateSignature = ({\n signatures,\n}: {\n signatures: PartialSignature[];\n}): Hex => {\n if (signatures.length === 0) {\n return '0x';\n }\n\n for (const { type } of signatures) {\n if (!signatureTypes.includes(type)) {\n throw new Error(`Invalid signature type: ${type}`);\n }\n }\n\n // Sort signatures by signer address as required by MultiSig implementation\n const sortedSignatures = [...signatures].sort((a, b) =>\n a.signer.localeCompare(b.signer),\n );\n\n // Concatenate all signatures\n return concat(sortedSignatures.map(({ signature }) => signature));\n};\n\n/**\n * Type definition for the aggregateSignature function parameters.\n */\nexport type AggregateSignatureParams = {\n signatures: PartialSignature[];\n};\n","import type { PublicClient } from 'viem';\n\nimport type { DeleGatorEnvironment } from '../types';\nimport {\n caveatEnforcerActions,\n type CaveatEnforcerParams,\n type PeriodTransferResult,\n type StreamingResult,\n} from './getCaveatAvailableAmount';\n\n/**\n * Type for client extended with caveat enforcer actions.\n */\nexport type CaveatEnforcerClient = PublicClient &\n ReturnType<ReturnType<typeof caveatEnforcerActions>>;\n\n/**\n * Create a viem client extended with caveat enforcer actions.\n *\n * @param params - The parameters object.\n * @param params.client - The viem public client.\n * @param params.environment - The delegator environment.\n * @returns The extended client with caveat enforcer actions.\n */\nexport function createCaveatEnforcerClient({\n client,\n environment,\n}: {\n client: PublicClient;\n environment: DeleGatorEnvironment;\n}): CaveatEnforcerClient {\n return client.extend(caveatEnforcerActions({ environment }));\n}\n\n// Re-export types for convenience\nexport type { CaveatEnforcerParams, PeriodTransferResult, StreamingResult };\n"],"mappings":"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","names":["concat","signMessage","signTypedData","getStubSignature","concat","signDelegation","signUserOperation"]}