@zerodev/sdk 4.0.20 → 4.0.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/dist/cjs/kernel-zerodev/account.d.ts +1 -1
  2. package/dist/cjs/kernel-zerodev/account.js +1 -1
  3. package/dist/cjs/kernel-zerodev/account.js.map +1 -1
  4. package/dist/cjs/kernel-zerodev/ethers-provider/account-signer.d.ts +2 -0
  5. package/dist/cjs/kernel-zerodev/ethers-provider/account-signer.js +6 -0
  6. package/dist/cjs/kernel-zerodev/ethers-provider/account-signer.js.map +1 -1
  7. package/dist/cjs/kernel-zerodev/validator/session-key-validator.js +3 -0
  8. package/dist/cjs/kernel-zerodev/validator/session-key-validator.js.map +1 -1
  9. package/dist/esm/kernel-zerodev/account.d.ts +1 -1
  10. package/dist/esm/kernel-zerodev/account.js +1 -1
  11. package/dist/esm/kernel-zerodev/account.js.map +1 -1
  12. package/dist/esm/kernel-zerodev/ethers-provider/account-signer.d.ts +2 -0
  13. package/dist/esm/kernel-zerodev/ethers-provider/account-signer.js +6 -0
  14. package/dist/esm/kernel-zerodev/ethers-provider/account-signer.js.map +1 -1
  15. package/dist/esm/kernel-zerodev/validator/session-key-validator.js +3 -0
  16. package/dist/esm/kernel-zerodev/validator/session-key-validator.js.map +1 -1
  17. package/dist/types/kernel-zerodev/account.d.ts +1 -1
  18. package/dist/types/kernel-zerodev/account.d.ts.map +1 -1
  19. package/dist/types/kernel-zerodev/ethers-provider/account-signer.d.ts +2 -0
  20. package/dist/types/kernel-zerodev/ethers-provider/account-signer.d.ts.map +1 -1
  21. package/dist/types/kernel-zerodev/validator/session-key-validator.d.ts.map +1 -1
  22. package/package.json +1 -1
  23. package/src/kernel-zerodev/account.ts +1 -1
  24. package/src/kernel-zerodev/ethers-provider/account-signer.ts +10 -0
  25. package/src/kernel-zerodev/validator/session-key-validator.ts +3 -0
@@ -36,7 +36,7 @@ export declare class KernelSmartContractAccount<TTransport extends Transport | F
36
36
  encodeBatchExecute(_txs: BatchUserOperationCallData): Promise<`0x${string}`>;
37
37
  encodeExecuteDelegate(target: Hex, value: bigint, data: Hex): Promise<Hex>;
38
38
  encodeSetExection(): Promise<`0x${string}`>;
39
- signWithEip6492(msg: string | Uint8Array): Promise<Hex>;
39
+ signMessageWith6492(msg: string | Uint8Array): Promise<Hex>;
40
40
  signMessage(msg: Uint8Array | string): Promise<Hex>;
41
41
  signTypedData(params: SignTypedDataParams): Promise<Hex>;
42
42
  signUserOp(userOp: UserOperationRequest): Promise<Hex>;
@@ -169,7 +169,7 @@ class KernelSmartContractAccount extends aa_core_1.BaseSmartContractAccount {
169
169
  ],
170
170
  });
171
171
  }
172
- async signWithEip6492(msg) {
172
+ async signMessageWith6492(msg) {
173
173
  try {
174
174
  if (!this.validator) {
175
175
  throw new Error("Validator not connected");
@@ -1 +1 @@
1
- {"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/kernel-zerodev/account.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Address } from \"abitype\";\nimport {\n concatHex,\n encodeAbiParameters,\n encodeFunctionData,\n type FallbackTransport,\n hashMessage,\n type Hex,\n toBytes,\n type Transport,\n} from \"viem\";\nimport { parseAbiParameters } from \"abitype\";\nimport { KernelBaseValidator } from \"./validator/base.js\";\nimport { KernelAccountAbi } from \"./abis/KernelAccountAbi.js\";\nimport { KernelFactoryAbi } from \"./abis/KernelFactoryAbi.js\";\nimport {\n type BaseSmartAccountParams,\n BaseSmartContractAccount,\n type BatchUserOperationCallData,\n type UserOperationRequest,\n defineReadOnly,\n getChain,\n type SignTypedDataParams,\n} from \"@alchemy/aa-core\";\nimport {\n BUNDLER_URL,\n ENTRYPOINT_ADDRESS,\n KERNEL_FACTORY_ADDRESS,\n KERNEL_IMPL_ADDRESS,\n MULTISEND_ADDR,\n} from \"./constants.js\";\nimport { encodeMultiSend } from \"./utils.js\";\nimport { MultiSendAbi } from \"./abis/MultiSendAbi.js\";\nimport { polygonMumbai } from \"viem/chains\";\nimport { getChainId } from \"./api/index.js\";\nimport { createZeroDevPublicErc4337Client } from \"./client/create-client.js\";\nimport type { PaymasterAndBundlerProviders } from \"./paymaster/types.js\";\n\nexport enum DeploymentState {\n UNDEFINED = \"0x0\",\n NOT_DEPLOYED = \"0x1\",\n DEPLOYED = \"0x2\",\n}\nexport interface KernelSmartAccountParams<\n TTransport extends Transport | FallbackTransport = Transport\n> extends Partial<BaseSmartAccountParams<TTransport>> {\n projectId: string;\n factoryAddress?: Address;\n index?: bigint;\n validator?: KernelBaseValidator;\n bundlerProvider?: PaymasterAndBundlerProviders;\n defaultValidator?: KernelBaseValidator;\n initCode?: Hex;\n}\n\nexport function isKernelAccount(\n account: any\n): account is KernelSmartContractAccount {\n return account && account.connectValidator !== undefined;\n}\n\nexport class KernelSmartContractAccount<\n TTransport extends Transport | FallbackTransport = Transport\n> extends BaseSmartContractAccount<TTransport> {\n private readonly factoryAddress: Address;\n private readonly index: bigint;\n private initCode?: Hex;\n validator?: KernelBaseValidator;\n defaultValidator?: KernelBaseValidator;\n\n constructor(params: KernelSmartAccountParams) {\n super({\n ...params,\n entryPointAddress: params.entryPointAddress ?? ENTRYPOINT_ADDRESS,\n chain: params.chain ?? polygonMumbai,\n rpcClient: params.rpcClient ?? BUNDLER_URL,\n });\n this.index = params.index ?? 0n;\n this.factoryAddress = params.factoryAddress ?? KERNEL_FACTORY_ADDRESS;\n this.validator = params.validator;\n this.defaultValidator = params.defaultValidator;\n this.initCode = params.initCode;\n }\n\n public static async init(\n params: KernelSmartAccountParams\n ): Promise<KernelSmartContractAccount> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n const rpcClient =\n typeof params.rpcClient === \"string\"\n ? createZeroDevPublicErc4337Client({\n chain,\n rpcUrl: params.rpcClient ?? BUNDLER_URL,\n projectId: params.projectId,\n bundlerProvider: params.bundlerProvider,\n })\n : params.rpcClient;\n const instance = new KernelSmartContractAccount({\n ...params,\n chain,\n rpcClient,\n });\n return instance;\n }\n\n connectValidator(validator: KernelBaseValidator): this {\n defineReadOnly(this, \"validator\", validator);\n return this;\n }\n\n getValidator(): KernelBaseValidator {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n return this.validator;\n }\n\n getDummySignature(): Hex {\n return \"0x00000000870fe151d548a1c527c3804866fab30abf28ed17b79d5fc5149f19ca0819fefc3c57f3da4fdf9b10fab3f2f3dca536467ae44943b9dbb8433efe7760ddd72aaa1c\";\n }\n\n async getInitCode(): Promise<Hex> {\n if (this.deploymentState === DeploymentState.DEPLOYED) {\n return \"0x\";\n }\n const contractCode = await this.rpcProvider.getContractCode(\n await this.getAddress()\n );\n\n if ((contractCode?.length ?? 0) > 2) {\n this.deploymentState = DeploymentState.DEPLOYED;\n return \"0x\";\n } else {\n this.deploymentState = DeploymentState.NOT_DEPLOYED;\n }\n\n return this.initCode ?? this.getAccountInitCode();\n }\n\n getIndex(): bigint {\n return this.index;\n }\n\n async approvePlugin() {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n if (this.defaultValidator && !this.validator.getEnableSignature()) {\n const { executor, selector, validAfter, validUntil } =\n this.validator.getPluginValidatorData();\n const enableSig = await this.defaultValidator.approveExecutor(\n await this.getAddress(),\n selector,\n executor,\n validUntil,\n validAfter,\n this.validator\n );\n this.validator.setEnableSignature(enableSig);\n }\n }\n\n async encodeExecute(target: Hex, value: bigint, data: Hex): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n if (\n target.toLowerCase() === (await this.getAddress()).toLowerCase() &&\n this.validator.shouldDelegateViaFallback()\n ) {\n return data;\n } else {\n return this.encodeExecuteAction(target, value, data, 0);\n }\n }\n\n async encodeBatchExecute(\n _txs: BatchUserOperationCallData\n ): Promise<`0x${string}`> {\n const multiSendCalldata = encodeFunctionData({\n abi: MultiSendAbi,\n functionName: \"multiSend\",\n args: [encodeMultiSend(_txs)],\n });\n return await this.encodeExecuteDelegate(\n MULTISEND_ADDR,\n BigInt(0),\n multiSendCalldata\n );\n }\n\n async encodeExecuteDelegate(\n target: Hex,\n value: bigint,\n data: Hex\n ): Promise<Hex> {\n return this.encodeExecuteAction(target, value, data, 1);\n }\n\n async encodeSetExection() {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n const { executor, selector, validAfter, validUntil } =\n await this.validator.getPluginValidatorData();\n const enableData = await this.validator.getEnableData();\n return encodeFunctionData({\n abi: KernelAccountAbi,\n functionName: \"setExecution\",\n args: [\n selector,\n executor,\n this.validator.validatorAddress,\n validUntil,\n validAfter,\n enableData,\n ],\n });\n }\n\n async signWithEip6492(msg: string | Uint8Array): Promise<Hex> {\n try {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n const formattedMessage = typeof msg === \"string\" ? toBytes(msg) : msg;\n let sig = await this.validator.signMessage(\n toBytes(hashMessage({ raw: formattedMessage }))\n );\n // If the account is undeployed, use ERC-6492\n if (!(await this.isAccountDeployed())) {\n sig = (encodeAbiParameters(\n parseAbiParameters(\"address, bytes, bytes\"),\n [this.factoryAddress, await this.getFactoryInitCode(), sig]\n ) +\n \"6492649264926492649264926492649264926492649264926492649264926492\") as Hex; // magic suffix\n }\n\n return sig;\n } catch (err: any) {\n console.error(\"Got Error - \", err.message);\n throw new Error(\"Message Signing with EIP6492 failed\");\n }\n }\n\n async signMessage(msg: Uint8Array | string): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n const formattedMessage = typeof msg === \"string\" ? toBytes(msg) : msg;\n return await this.validator.signMessage(formattedMessage);\n }\n\n async signTypedData(params: SignTypedDataParams): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n return await this.validator.signTypedData(params);\n }\n\n signUserOp(userOp: UserOperationRequest): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n return this.validator.signUserOp(userOp);\n }\n\n protected encodeExecuteAction(\n target: Hex,\n value: bigint,\n data: Hex,\n code: number\n ): Hex {\n return encodeFunctionData({\n abi: KernelAccountAbi,\n functionName: \"execute\",\n args: [target, value, data, code],\n });\n }\n protected async getAccountInitCode(): Promise<Hex> {\n return concatHex([this.factoryAddress, await this.getFactoryInitCode()]);\n }\n\n async getNonce(): Promise<bigint> {\n if (!(await this.isAccountDeployed())) {\n return 0n;\n }\n if (!this.validator) {\n throw Error(\"Validator unintialized\");\n }\n const address = await this.getAddress();\n const key = this.validator.getNonceKey();\n return this.entryPoint.read.getNonce([address, key]);\n }\n\n protected async getFactoryInitCode(): Promise<Hex> {\n const validator = this.defaultValidator ?? this.validator;\n if (!validator) {\n throw new Error(\"Validator not connected\");\n }\n try {\n return encodeFunctionData({\n abi: KernelFactoryAbi,\n functionName: \"createAccount\",\n args: [\n KERNEL_IMPL_ADDRESS,\n encodeFunctionData({\n abi: KernelAccountAbi,\n functionName: \"initialize\",\n args: [validator.getAddress(), await validator.getEnableData()],\n }),\n this.index,\n ],\n });\n } catch (err: any) {\n console.error(\"err occurred:\", err.message);\n throw new Error(\"Factory Code generation failed\");\n }\n }\n}\n"]}
1
+ {"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/kernel-zerodev/account.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Address } from \"abitype\";\nimport {\n concatHex,\n encodeAbiParameters,\n encodeFunctionData,\n type FallbackTransport,\n hashMessage,\n type Hex,\n toBytes,\n type Transport,\n} from \"viem\";\nimport { parseAbiParameters } from \"abitype\";\nimport { KernelBaseValidator } from \"./validator/base.js\";\nimport { KernelAccountAbi } from \"./abis/KernelAccountAbi.js\";\nimport { KernelFactoryAbi } from \"./abis/KernelFactoryAbi.js\";\nimport {\n type BaseSmartAccountParams,\n BaseSmartContractAccount,\n type BatchUserOperationCallData,\n type UserOperationRequest,\n defineReadOnly,\n getChain,\n type SignTypedDataParams,\n} from \"@alchemy/aa-core\";\nimport {\n BUNDLER_URL,\n ENTRYPOINT_ADDRESS,\n KERNEL_FACTORY_ADDRESS,\n KERNEL_IMPL_ADDRESS,\n MULTISEND_ADDR,\n} from \"./constants.js\";\nimport { encodeMultiSend } from \"./utils.js\";\nimport { MultiSendAbi } from \"./abis/MultiSendAbi.js\";\nimport { polygonMumbai } from \"viem/chains\";\nimport { getChainId } from \"./api/index.js\";\nimport { createZeroDevPublicErc4337Client } from \"./client/create-client.js\";\nimport type { PaymasterAndBundlerProviders } from \"./paymaster/types.js\";\n\nexport enum DeploymentState {\n UNDEFINED = \"0x0\",\n NOT_DEPLOYED = \"0x1\",\n DEPLOYED = \"0x2\",\n}\nexport interface KernelSmartAccountParams<\n TTransport extends Transport | FallbackTransport = Transport\n> extends Partial<BaseSmartAccountParams<TTransport>> {\n projectId: string;\n factoryAddress?: Address;\n index?: bigint;\n validator?: KernelBaseValidator;\n bundlerProvider?: PaymasterAndBundlerProviders;\n defaultValidator?: KernelBaseValidator;\n initCode?: Hex;\n}\n\nexport function isKernelAccount(\n account: any\n): account is KernelSmartContractAccount {\n return account && account.connectValidator !== undefined;\n}\n\nexport class KernelSmartContractAccount<\n TTransport extends Transport | FallbackTransport = Transport\n> extends BaseSmartContractAccount<TTransport> {\n private readonly factoryAddress: Address;\n private readonly index: bigint;\n private initCode?: Hex;\n validator?: KernelBaseValidator;\n defaultValidator?: KernelBaseValidator;\n\n constructor(params: KernelSmartAccountParams) {\n super({\n ...params,\n entryPointAddress: params.entryPointAddress ?? ENTRYPOINT_ADDRESS,\n chain: params.chain ?? polygonMumbai,\n rpcClient: params.rpcClient ?? BUNDLER_URL,\n });\n this.index = params.index ?? 0n;\n this.factoryAddress = params.factoryAddress ?? KERNEL_FACTORY_ADDRESS;\n this.validator = params.validator;\n this.defaultValidator = params.defaultValidator;\n this.initCode = params.initCode;\n }\n\n public static async init(\n params: KernelSmartAccountParams\n ): Promise<KernelSmartContractAccount> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n const rpcClient =\n typeof params.rpcClient === \"string\"\n ? createZeroDevPublicErc4337Client({\n chain,\n rpcUrl: params.rpcClient ?? BUNDLER_URL,\n projectId: params.projectId,\n bundlerProvider: params.bundlerProvider,\n })\n : params.rpcClient;\n const instance = new KernelSmartContractAccount({\n ...params,\n chain,\n rpcClient,\n });\n return instance;\n }\n\n connectValidator(validator: KernelBaseValidator): this {\n defineReadOnly(this, \"validator\", validator);\n return this;\n }\n\n getValidator(): KernelBaseValidator {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n return this.validator;\n }\n\n getDummySignature(): Hex {\n return \"0x00000000870fe151d548a1c527c3804866fab30abf28ed17b79d5fc5149f19ca0819fefc3c57f3da4fdf9b10fab3f2f3dca536467ae44943b9dbb8433efe7760ddd72aaa1c\";\n }\n\n async getInitCode(): Promise<Hex> {\n if (this.deploymentState === DeploymentState.DEPLOYED) {\n return \"0x\";\n }\n const contractCode = await this.rpcProvider.getContractCode(\n await this.getAddress()\n );\n\n if ((contractCode?.length ?? 0) > 2) {\n this.deploymentState = DeploymentState.DEPLOYED;\n return \"0x\";\n } else {\n this.deploymentState = DeploymentState.NOT_DEPLOYED;\n }\n\n return this.initCode ?? this.getAccountInitCode();\n }\n\n getIndex(): bigint {\n return this.index;\n }\n\n async approvePlugin() {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n if (this.defaultValidator && !this.validator.getEnableSignature()) {\n const { executor, selector, validAfter, validUntil } =\n this.validator.getPluginValidatorData();\n const enableSig = await this.defaultValidator.approveExecutor(\n await this.getAddress(),\n selector,\n executor,\n validUntil,\n validAfter,\n this.validator\n );\n this.validator.setEnableSignature(enableSig);\n }\n }\n\n async encodeExecute(target: Hex, value: bigint, data: Hex): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n if (\n target.toLowerCase() === (await this.getAddress()).toLowerCase() &&\n this.validator.shouldDelegateViaFallback()\n ) {\n return data;\n } else {\n return this.encodeExecuteAction(target, value, data, 0);\n }\n }\n\n async encodeBatchExecute(\n _txs: BatchUserOperationCallData\n ): Promise<`0x${string}`> {\n const multiSendCalldata = encodeFunctionData({\n abi: MultiSendAbi,\n functionName: \"multiSend\",\n args: [encodeMultiSend(_txs)],\n });\n return await this.encodeExecuteDelegate(\n MULTISEND_ADDR,\n BigInt(0),\n multiSendCalldata\n );\n }\n\n async encodeExecuteDelegate(\n target: Hex,\n value: bigint,\n data: Hex\n ): Promise<Hex> {\n return this.encodeExecuteAction(target, value, data, 1);\n }\n\n async encodeSetExection() {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n const { executor, selector, validAfter, validUntil } =\n await this.validator.getPluginValidatorData();\n const enableData = await this.validator.getEnableData();\n return encodeFunctionData({\n abi: KernelAccountAbi,\n functionName: \"setExecution\",\n args: [\n selector,\n executor,\n this.validator.validatorAddress,\n validUntil,\n validAfter,\n enableData,\n ],\n });\n }\n\n async signMessageWith6492(msg: string | Uint8Array): Promise<Hex> {\n try {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n const formattedMessage = typeof msg === \"string\" ? toBytes(msg) : msg;\n let sig = await this.validator.signMessage(\n toBytes(hashMessage({ raw: formattedMessage }))\n );\n // If the account is undeployed, use ERC-6492\n if (!(await this.isAccountDeployed())) {\n sig = (encodeAbiParameters(\n parseAbiParameters(\"address, bytes, bytes\"),\n [this.factoryAddress, await this.getFactoryInitCode(), sig]\n ) +\n \"6492649264926492649264926492649264926492649264926492649264926492\") as Hex; // magic suffix\n }\n\n return sig;\n } catch (err: any) {\n console.error(\"Got Error - \", err.message);\n throw new Error(\"Message Signing with EIP6492 failed\");\n }\n }\n\n async signMessage(msg: Uint8Array | string): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n const formattedMessage = typeof msg === \"string\" ? toBytes(msg) : msg;\n return await this.validator.signMessage(formattedMessage);\n }\n\n async signTypedData(params: SignTypedDataParams): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n return await this.validator.signTypedData(params);\n }\n\n signUserOp(userOp: UserOperationRequest): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n return this.validator.signUserOp(userOp);\n }\n\n protected encodeExecuteAction(\n target: Hex,\n value: bigint,\n data: Hex,\n code: number\n ): Hex {\n return encodeFunctionData({\n abi: KernelAccountAbi,\n functionName: \"execute\",\n args: [target, value, data, code],\n });\n }\n protected async getAccountInitCode(): Promise<Hex> {\n return concatHex([this.factoryAddress, await this.getFactoryInitCode()]);\n }\n\n async getNonce(): Promise<bigint> {\n if (!(await this.isAccountDeployed())) {\n return 0n;\n }\n if (!this.validator) {\n throw Error(\"Validator unintialized\");\n }\n const address = await this.getAddress();\n const key = this.validator.getNonceKey();\n return this.entryPoint.read.getNonce([address, key]);\n }\n\n protected async getFactoryInitCode(): Promise<Hex> {\n const validator = this.defaultValidator ?? this.validator;\n if (!validator) {\n throw new Error(\"Validator not connected\");\n }\n try {\n return encodeFunctionData({\n abi: KernelFactoryAbi,\n functionName: \"createAccount\",\n args: [\n KERNEL_IMPL_ADDRESS,\n encodeFunctionData({\n abi: KernelAccountAbi,\n functionName: \"initialize\",\n args: [validator.getAddress(), await validator.getEnableData()],\n }),\n this.index,\n ],\n });\n } catch (err: any) {\n console.error(\"err occurred:\", err.message);\n throw new Error(\"Factory Code generation failed\");\n }\n }\n}\n"]}
@@ -4,6 +4,7 @@ import type { Deferrable } from "@ethersproject/properties";
4
4
  import { type TransactionRequest, type TransactionResponse } from "@ethersproject/providers";
5
5
  import { ZeroDevEthersProvider } from "./ethers-provider.js";
6
6
  import type { SupportedValidators } from "../validator/types.js";
7
+ import type { Hex } from "viem";
7
8
  export declare class ZeroDevAccountSigner<V extends SupportedValidators> extends Signer implements TypedDataSigner {
8
9
  readonly provider: ZeroDevEthersProvider<V>;
9
10
  private account?;
@@ -14,6 +15,7 @@ export declare class ZeroDevAccountSigner<V extends SupportedValidators> extends
14
15
  signMessage(message: string | Uint8Array): Promise<string>;
15
16
  signTypedData(params: SignTypedDataParams): Promise<string>;
16
17
  _signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): Promise<string>;
18
+ signMessageWith6492(_msg: string | Uint8Array): Promise<Hex>;
17
19
  withPaymasterMiddleware: (overrides: {
18
20
  dummyPaymasterDataMiddleware?: PaymasterAndDataMiddleware;
19
21
  paymasterDataMiddleware?: PaymasterAndDataMiddleware;
@@ -111,6 +111,12 @@ class ZeroDevAccountSigner extends abstract_signer_1.Signer {
111
111
  }
112
112
  return this.signTypedData(params);
113
113
  }
114
+ async signMessageWith6492(_msg) {
115
+ if (!this.account) {
116
+ throw new Error("connect the signer to a provider that has a connected account");
117
+ }
118
+ return this.account.signMessageWith6492(_msg);
119
+ }
114
120
  async sendTransaction(transaction) {
115
121
  const resolved = await (0, aa_core_1.resolveProperties)(transaction);
116
122
  const txHash = await this.provider.accountProvider.sendTransaction({
@@ -1 +1 @@
1
- {"version":3,"file":"account-signer.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/ethers-provider/account-signer.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n resolveProperties,\n type AccountMiddlewareFn,\n type FeeDataMiddleware,\n type GasEstimatorMiddleware,\n type PaymasterAndDataMiddleware,\n type PublicErc4337Client,\n type SignTypedDataParams,\n} from \"@alchemy/aa-core\";\nimport {\n Signer,\n type TypedDataSigner,\n type TypedDataDomain,\n type TypedDataField,\n} from \"@ethersproject/abstract-signer\";\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { _TypedDataEncoder } from \"@ethersproject/hash\";\nimport type { Deferrable } from \"@ethersproject/properties\";\nimport {\n type TransactionRequest,\n type TransactionResponse,\n} from \"@ethersproject/providers\";\nimport { ZeroDevEthersProvider } from \"./ethers-provider.js\";\nimport type { SupportedValidators } from \"../validator/types.js\";\nimport type { KernelSmartContractAccount } from \"../account.js\";\n\nconst hexlifyOptional = (value: any): `0x${string}` | undefined => {\n if (value == null) {\n return undefined;\n }\n\n return hexlify(value) as `0x${string}`;\n};\n\nexport class ZeroDevAccountSigner<V extends SupportedValidators>\n extends Signer\n implements TypedDataSigner\n{\n private account?: KernelSmartContractAccount;\n\n sendUserOperation;\n waitForUserOperationTransaction;\n\n constructor(readonly provider: ZeroDevEthersProvider<V>) {\n super();\n this.account = this.provider.accountProvider.getAccount();\n\n this.sendUserOperation =\n this.provider.accountProvider.sendUserOperation.bind(\n this.provider.accountProvider\n );\n this.waitForUserOperationTransaction =\n this.provider.accountProvider.waitForUserOperationTransaction.bind(\n this.provider.accountProvider\n );\n }\n\n getAddress(): Promise<string> {\n if (!this.account) {\n throw new Error(\n \"connect the signer to a provider that has a connected account\"\n );\n }\n\n return this.account.getAddress();\n }\n\n signMessage(message: string | Uint8Array): Promise<string> {\n if (!this.account) {\n throw new Error(\n \"connect the signer to a provider that has a connected account\"\n );\n }\n\n return this.account.signMessage(message);\n }\n\n signTypedData(params: SignTypedDataParams): Promise<string> {\n if (!this.account) {\n throw new Error(\n \"connect the signer to a provider that has a connected account\"\n );\n }\n if (params.types) {\n delete params.types[\"EIP712Domain\"];\n }\n\n return this.account.signTypedData(params);\n }\n\n _signTypedData(\n domain: TypedDataDomain,\n types: Record<string, Array<TypedDataField>>,\n value: Record<string, any>\n ): Promise<string> {\n if (!this.account) {\n throw new Error(\n \"connect the signer to a provider that has a connected account\"\n );\n }\n const params = _TypedDataEncoder.getPayload(\n domain,\n types,\n value\n ) as SignTypedDataParams;\n if (params.types) {\n delete params.types[\"EIP712Domain\"];\n }\n\n return this.signTypedData(params);\n }\n\n withPaymasterMiddleware = (overrides: {\n dummyPaymasterDataMiddleware?: PaymasterAndDataMiddleware;\n paymasterDataMiddleware?: PaymasterAndDataMiddleware;\n }): this => {\n this.provider.withPaymasterMiddleware(overrides);\n return this;\n };\n\n withGasEstimator = (override: GasEstimatorMiddleware): this => {\n this.provider.withGasEstimator(override);\n return this;\n };\n\n withFeeDataGetter = (override: FeeDataMiddleware): this => {\n this.provider.withFeeDataGetter(override);\n return this;\n };\n\n withCustomMiddleware = (override: AccountMiddlewareFn): this => {\n this.provider.withCustomMiddleware(override);\n return this;\n };\n\n async sendTransaction(\n transaction: Deferrable<TransactionRequest>\n ): Promise<TransactionResponse> {\n const resolved = await resolveProperties(transaction);\n const txHash = await this.provider.accountProvider.sendTransaction({\n // TODO: need to support gas fields as well\n from: (await this.getAddress()) as `0x${string}`,\n to: resolved.to as `0x${string}` | undefined,\n data: hexlifyOptional(resolved.data),\n });\n\n return this.provider.getTransaction(txHash);\n }\n\n signTransaction(\n _transaction: Deferrable<TransactionRequest>\n ): Promise<string> {\n throw new Error(\n \"Transaction signing is not supported, use sendUserOperation instead\"\n );\n }\n\n getPublicErc4337Client(): PublicErc4337Client {\n return this.provider.getPublicErc4337Client();\n }\n\n connect(provider: ZeroDevEthersProvider<V>): ZeroDevAccountSigner<V> {\n return new ZeroDevAccountSigner(provider);\n }\n}\n"]}
1
+ {"version":3,"file":"account-signer.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/ethers-provider/account-signer.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n resolveProperties,\n type AccountMiddlewareFn,\n type FeeDataMiddleware,\n type GasEstimatorMiddleware,\n type PaymasterAndDataMiddleware,\n type PublicErc4337Client,\n type SignTypedDataParams,\n} from \"@alchemy/aa-core\";\nimport {\n Signer,\n type TypedDataSigner,\n type TypedDataDomain,\n type TypedDataField,\n} from \"@ethersproject/abstract-signer\";\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { _TypedDataEncoder } from \"@ethersproject/hash\";\nimport type { Deferrable } from \"@ethersproject/properties\";\nimport {\n type TransactionRequest,\n type TransactionResponse,\n} from \"@ethersproject/providers\";\nimport { ZeroDevEthersProvider } from \"./ethers-provider.js\";\nimport type { SupportedValidators } from \"../validator/types.js\";\nimport type { KernelSmartContractAccount } from \"../account.js\";\nimport type { Hex } from \"viem\";\n\nconst hexlifyOptional = (value: any): `0x${string}` | undefined => {\n if (value == null) {\n return undefined;\n }\n\n return hexlify(value) as `0x${string}`;\n};\n\nexport class ZeroDevAccountSigner<V extends SupportedValidators>\n extends Signer\n implements TypedDataSigner\n{\n private account?: KernelSmartContractAccount;\n\n sendUserOperation;\n waitForUserOperationTransaction;\n\n constructor(readonly provider: ZeroDevEthersProvider<V>) {\n super();\n this.account = this.provider.accountProvider.getAccount();\n\n this.sendUserOperation =\n this.provider.accountProvider.sendUserOperation.bind(\n this.provider.accountProvider\n );\n this.waitForUserOperationTransaction =\n this.provider.accountProvider.waitForUserOperationTransaction.bind(\n this.provider.accountProvider\n );\n }\n\n getAddress(): Promise<string> {\n if (!this.account) {\n throw new Error(\n \"connect the signer to a provider that has a connected account\"\n );\n }\n\n return this.account.getAddress();\n }\n\n signMessage(message: string | Uint8Array): Promise<string> {\n if (!this.account) {\n throw new Error(\n \"connect the signer to a provider that has a connected account\"\n );\n }\n\n return this.account.signMessage(message);\n }\n\n signTypedData(params: SignTypedDataParams): Promise<string> {\n if (!this.account) {\n throw new Error(\n \"connect the signer to a provider that has a connected account\"\n );\n }\n if (params.types) {\n delete params.types[\"EIP712Domain\"];\n }\n\n return this.account.signTypedData(params);\n }\n\n _signTypedData(\n domain: TypedDataDomain,\n types: Record<string, Array<TypedDataField>>,\n value: Record<string, any>\n ): Promise<string> {\n if (!this.account) {\n throw new Error(\n \"connect the signer to a provider that has a connected account\"\n );\n }\n const params = _TypedDataEncoder.getPayload(\n domain,\n types,\n value\n ) as SignTypedDataParams;\n if (params.types) {\n delete params.types[\"EIP712Domain\"];\n }\n\n return this.signTypedData(params);\n }\n\n async signMessageWith6492(_msg: string | Uint8Array): Promise<Hex> {\n if (!this.account) {\n throw new Error(\n \"connect the signer to a provider that has a connected account\"\n );\n }\n return this.account.signMessageWith6492(_msg);\n }\n\n withPaymasterMiddleware = (overrides: {\n dummyPaymasterDataMiddleware?: PaymasterAndDataMiddleware;\n paymasterDataMiddleware?: PaymasterAndDataMiddleware;\n }): this => {\n this.provider.withPaymasterMiddleware(overrides);\n return this;\n };\n\n withGasEstimator = (override: GasEstimatorMiddleware): this => {\n this.provider.withGasEstimator(override);\n return this;\n };\n\n withFeeDataGetter = (override: FeeDataMiddleware): this => {\n this.provider.withFeeDataGetter(override);\n return this;\n };\n\n withCustomMiddleware = (override: AccountMiddlewareFn): this => {\n this.provider.withCustomMiddleware(override);\n return this;\n };\n\n async sendTransaction(\n transaction: Deferrable<TransactionRequest>\n ): Promise<TransactionResponse> {\n const resolved = await resolveProperties(transaction);\n const txHash = await this.provider.accountProvider.sendTransaction({\n // TODO: need to support gas fields as well\n from: (await this.getAddress()) as `0x${string}`,\n to: resolved.to as `0x${string}` | undefined,\n data: hexlifyOptional(resolved.data),\n });\n\n return this.provider.getTransaction(txHash);\n }\n\n signTransaction(\n _transaction: Deferrable<TransactionRequest>\n ): Promise<string> {\n throw new Error(\n \"Transaction signing is not supported, use sendUserOperation instead\"\n );\n }\n\n getPublicErc4337Client(): PublicErc4337Client {\n return this.provider.getPublicErc4337Client();\n }\n\n connect(provider: ZeroDevEthersProvider<V>): ZeroDevAccountSigner<V> {\n return new ZeroDevAccountSigner(provider);\n }\n}\n"]}
@@ -49,6 +49,9 @@ class SessionKeyValidator extends base_js_1.KernelBaseValidator {
49
49
  paymaster: params.sessionKeyData.paymaster ?? viem_1.zeroAddress,
50
50
  };
51
51
  this.merkleTree = this.getMerkleTree();
52
+ if (this.shouldDelegateViaFallback()) {
53
+ throw Error("Session key permissions not set");
54
+ }
52
55
  this.selector =
53
56
  params.selector ??
54
57
  (0, viem_1.getFunctionSelector)("execute(address, uint256, bytes, uint8)");
@@ -1 +1 @@
1
- {"version":3,"file":"session-key-validator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/session-key-validator.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getUserOperationHash,\n type Address,\n type Hex,\n type SmartAccountSigner,\n type UserOperationRequest,\n getChain,\n type SignTypedDataParams,\n} from \"@alchemy/aa-core\";\nimport {\n KernelBaseValidator,\n ValidatorMode,\n type KernelBaseValidatorParams,\n type ValidatorPluginData,\n} from \"./base.js\";\nimport {\n encodeFunctionData,\n toBytes,\n concat,\n pad,\n toHex,\n keccak256,\n encodeAbiParameters,\n concatHex,\n zeroAddress,\n decodeFunctionData,\n isHex,\n getFunctionSelector,\n} from \"viem\";\nimport { SessionKeyValidatorAbi } from \"../abis/SessionKeyValidatorAbi.js\";\nimport { DUMMY_ECDSA_SIG } from \"../constants.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { MerkleTree } from \"merkletreejs\";\nimport type { Operation } from \"../provider.js\";\nimport { getChainId } from \"../api/index.js\";\nimport { fixSignedData } from \"../utils.js\";\n\n// We need to be able to serialize bigint to transmit session key over\n// the network.\n// Using this trick: https://github.com/GoogleChromeLabs/jsbi/issues/30#issuecomment-1006086291\n(BigInt.prototype as any).toJSON = function () {\n return this.toString();\n};\n\nexport interface SessionKeyValidatorParams extends KernelBaseValidatorParams {\n sessionKey: SmartAccountSigner;\n sessionKeyData: SessionKeyData;\n}\n\nexport type SessionKeyParams = Pick<\n SessionKeyValidatorParams,\n \"sessionKeyData\" | \"enableSignature\"\n> &\n ValidatorPluginData & {\n sessionPrivateKey?: Hex;\n initCode?: Hex;\n accountAddress?: Address;\n };\n\nexport enum ParamCondition {\n EQUAL = 0,\n GREATER_THAN = 1,\n LESS_THAN = 2,\n GREATER_THAN_OR_EQUAL = 3,\n LESS_THAN_OR_EQUAL = 4,\n NOT_EQUAL = 5,\n}\n\nexport interface ParamRules {\n offset: number;\n condition: ParamCondition;\n param: Hex;\n}\n\nexport interface Permission {\n target: Address;\n valueLimit: bigint;\n sig: Hex;\n rules: ParamRules[];\n operation: Operation;\n}\n\nexport interface SessionKeyData {\n validUntil: number;\n validAfter: number;\n paymaster?: Address;\n permissions?: Permission[];\n}\n\nexport class SessionKeyValidator extends KernelBaseValidator {\n protected sessionKey: SmartAccountSigner;\n sessionKeyData: SessionKeyData;\n merkleTree: MerkleTree;\n\n constructor(params: SessionKeyValidatorParams) {\n super(params);\n this.sessionKey = params.sessionKey;\n this.sessionKeyData = {\n ...params.sessionKeyData,\n paymaster: params.sessionKeyData.paymaster ?? zeroAddress,\n };\n this.merkleTree = this.getMerkleTree();\n this.selector =\n params.selector ??\n getFunctionSelector(\"execute(address, uint256, bytes, uint8)\");\n this.executor = params.executor ?? zeroAddress;\n this.mode = params.mode ?? ValidatorMode.plugin;\n }\n\n public static async init(\n params: SessionKeyValidatorParams\n ): Promise<SessionKeyValidator> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n const instance = new SessionKeyValidator({ ...params, chain });\n return instance;\n }\n\n shouldDelegateViaFallback(): boolean {\n return this.merkleTree.getHexRoot() === pad(\"0x00\", { size: 32 });\n }\n\n findMatchingPermission(callData: Hex): Permission | undefined {\n try {\n const { functionName, args } = decodeFunctionData({\n abi: KernelAccountAbi,\n data: callData,\n });\n\n if (functionName !== \"execute\") return undefined;\n\n const permissionsList = this.sessionKeyData.permissions;\n if (!permissionsList || !permissionsList.length) return undefined;\n\n const targetToMatch = args[0].toLowerCase();\n\n // Filter permissions by target\n let targetPermissions = permissionsList.filter(\n (permission) => permission.target.toLowerCase() === targetToMatch\n );\n\n // If no permissions match the exact target, check for generic permissions (using zero address)\n if (!targetPermissions.length) {\n targetPermissions = permissionsList.filter(\n (permission) =>\n permission.target.toLowerCase() === zeroAddress.toLowerCase()\n );\n }\n\n if (!targetPermissions.length) return undefined;\n\n const operationPermissions = this.filterByOperation(\n targetPermissions,\n args[3]\n );\n\n if (!operationPermissions.length) return undefined;\n\n const signaturePermissions = this.filterBySignature(\n operationPermissions,\n args[2].slice(0, 10).toLowerCase()\n );\n\n const valueLimitPermissions = signaturePermissions.filter(\n (permission) => permission.valueLimit >= args[1]\n );\n\n if (!valueLimitPermissions.length) return undefined;\n\n const sortedPermissions = valueLimitPermissions.sort((a, b) => {\n if (b.valueLimit > a.valueLimit) {\n return 1;\n } else if (b.valueLimit < a.valueLimit) {\n return -1;\n } else {\n return 0;\n }\n });\n\n return this.findPermissionByRule(sortedPermissions, args[2]);\n } catch (error) {\n return undefined;\n }\n }\n\n private filterByOperation(\n permissions: Permission[],\n operation: Operation\n ): Permission[] {\n return permissions.filter(\n (permission) => permission.operation === operation\n );\n }\n\n private filterBySignature(\n permissions: Permission[],\n signature: string\n ): Permission[] {\n return permissions.filter(\n (permission) => permission.sig.toLowerCase() === signature\n );\n }\n\n private findPermissionByRule(\n permissions: Permission[],\n data: string\n ): Permission | undefined {\n return permissions.find((permission) => {\n for (const rule of permission.rules) {\n const dataParam: Hex = this.getFormattedHex(\n \"0x\" + data.slice(10 + rule.offset * 2, 10 + rule.offset * 2 + 64)\n );\n const ruleParam: Hex = this.getFormattedHex(rule.param);\n\n if (!this.evaluateRuleCondition(dataParam, ruleParam, rule.condition)) {\n return false;\n }\n }\n return true;\n });\n }\n\n private getFormattedHex(value: string): Hex {\n return pad(isHex(value) ? value : toHex(value), {\n size: 32,\n }).toLowerCase() as Hex;\n }\n\n private evaluateRuleCondition(\n dataParam: Hex,\n ruleParam: Hex,\n condition: ParamCondition\n ): boolean {\n switch (condition) {\n case ParamCondition.EQUAL:\n return dataParam === ruleParam;\n case ParamCondition.GREATER_THAN:\n return dataParam > ruleParam;\n case ParamCondition.LESS_THAN:\n return dataParam < ruleParam;\n case ParamCondition.GREATER_THAN_OR_EQUAL:\n return dataParam >= ruleParam;\n case ParamCondition.LESS_THAN_OR_EQUAL:\n return dataParam <= ruleParam;\n case ParamCondition.NOT_EQUAL:\n return dataParam !== ruleParam;\n default:\n return false;\n }\n }\n\n getMerkleTree(): MerkleTree {\n const permissionPacked = this.sessionKeyData.permissions?.map(\n (permission) => this.encodePermissionData(permission)\n );\n\n // Having one leaf returns empty array in getProof(). To hack it we push the leaf twice\n // issue - https://github.com/merkletreejs/merkletreejs/issues/58\n if (permissionPacked?.length === 1)\n permissionPacked.push(permissionPacked[0]);\n\n return permissionPacked && permissionPacked.length !== 0\n ? new MerkleTree(permissionPacked, keccak256, {\n sortPairs: true,\n hashLeaves: true,\n })\n : new MerkleTree([pad(\"0x00\", { size: 32 })], keccak256, {\n hashLeaves: false,\n });\n }\n\n encodePermissionData(permission: Permission, merkleProof?: string[]): Hex {\n let permissionParam = {\n components: [\n {\n name: \"target\",\n type: \"address\",\n },\n {\n name: \"valueLimit\",\n type: \"uint256\",\n },\n {\n name: \"sig\",\n type: \"bytes4\",\n },\n {\n components: [\n {\n name: \"offset\",\n type: \"uint256\",\n },\n {\n internalType: \"enum ParamCondition\",\n name: \"condition\",\n type: \"uint8\",\n },\n {\n name: \"param\",\n type: \"bytes32\",\n },\n ],\n name: \"rules\",\n type: \"tuple[]\",\n },\n {\n internalType: \"enum Operation\",\n name: \"operation\",\n type: \"uint8\",\n },\n ],\n name: \"permission\",\n type: \"tuple\",\n };\n let params;\n let values;\n if (merkleProof) {\n params = [\n permissionParam,\n {\n name: \"merkleProof\",\n type: \"bytes32[]\",\n },\n ];\n values = [permission, merkleProof];\n } else {\n params = [permissionParam];\n values = [permission];\n }\n return encodeAbiParameters(params, values);\n }\n\n getSessionData(): SessionKeyParams {\n if (!this.selector || !this.executor) {\n throw Error(\"Plugin Validator data params uninitialised\");\n }\n return {\n selector: this.selector,\n executor: this.executor,\n validUntil: this.validUntil,\n validAfter: this.validAfter,\n sessionKeyData: this.sessionKeyData,\n enableSignature: this.enableSignature,\n };\n }\n\n async signer(): Promise<SmartAccountSigner> {\n return await Promise.resolve(this.sessionKey);\n }\n\n async getEnableData(): Promise<Hex> {\n if (!this.merkleTree) {\n throw Error(\"SessionKeyValidator: MerkleTree not generated\");\n }\n return concat([\n await this.sessionKey.getAddress(),\n pad(this.merkleTree.getHexRoot() as Hex, { size: 32 }),\n pad(toHex(this.sessionKeyData.validAfter), { size: 6 }),\n pad(toHex(this.sessionKeyData.validUntil), { size: 6 }),\n this.sessionKeyData.paymaster!,\n ]);\n }\n\n async isPluginEnabled(\n kernelAccountAddress: Address,\n selector: Hex\n ): Promise<boolean> {\n if (!this.publicClient) {\n throw new Error(\"Validator uninitialized: PublicClient missing\");\n }\n const execDetail = await this.publicClient.readContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n functionName: \"getExecution\",\n args: [selector],\n });\n const enableData = await this.publicClient.readContract({\n abi: SessionKeyValidatorAbi,\n address: this.validatorAddress,\n functionName: \"sessionData\",\n args: [await this.sessionKey.getAddress(), kernelAccountAddress],\n });\n const enableDataHex = concatHex([\n await this.sessionKey.getAddress(),\n pad(enableData[0], { size: 4 }),\n pad(toHex(enableData[1]), { size: 6 }),\n pad(toHex(enableData[2]), { size: 6 }),\n enableData[3],\n ]);\n return (\n execDetail.validator.toLowerCase() ===\n this.validatorAddress.toLowerCase() &&\n enableData[4] &&\n enableDataHex.toLowerCase() === (await this.getEnableData()).toLowerCase()\n );\n }\n\n async getDummyUserOpSignature(callData: Hex): Promise<Hex> {\n const matchingPermission = this.findMatchingPermission(callData);\n if (!matchingPermission && !this.shouldDelegateViaFallback()) {\n throw Error(\n \"SessionKeyValidator: No matching permission found for the userOp\"\n );\n }\n const encodedPermissionData =\n this.sessionKeyData.permissions &&\n this.sessionKeyData.permissions.length !== 0 &&\n matchingPermission\n ? this.encodePermissionData(matchingPermission)\n : \"0x\";\n const merkleProof = this.merkleTree.getHexProof(\n keccak256(encodedPermissionData)\n );\n const encodedData =\n this.sessionKeyData.permissions &&\n this.sessionKeyData.permissions.length !== 0 &&\n matchingPermission\n ? this.encodePermissionData(matchingPermission, merkleProof)\n : \"0x\";\n return concatHex([\n await this.sessionKey.getAddress(),\n DUMMY_ECDSA_SIG,\n encodedData,\n ]);\n }\n\n encodeEnable(sessionKeyEnableData: Hex): Hex {\n return encodeFunctionData({\n abi: SessionKeyValidatorAbi,\n functionName: \"enable\",\n args: [sessionKeyEnableData],\n });\n }\n\n encodeDisable(sessionKey: Hex): Hex {\n return encodeFunctionData({\n abi: SessionKeyValidatorAbi,\n functionName: \"disable\",\n args: [sessionKey],\n });\n }\n\n async signMessage(message: string | Uint8Array): Promise<Hex> {\n return await this.sessionKey.signMessage(message);\n }\n\n async signTypedData(params: SignTypedDataParams): Promise<Hex> {\n return fixSignedData(await this.sessionKey.signTypedData(params));\n }\n\n async signUserOp(userOp: UserOperationRequest): Promise<Hex> {\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n const hash = getUserOperationHash(\n {\n ...userOp,\n signature: \"0x\",\n },\n this.entryPointAddress,\n BigInt(this.chain.id)\n );\n const formattedMessage = typeof hash === \"string\" ? toBytes(hash) : hash;\n\n const matchingPermission = this.findMatchingPermission(userOp.callData);\n if (!matchingPermission && !this.shouldDelegateViaFallback()) {\n throw Error(\n \"SessionKeyValidator: No matching permission found for the userOp\"\n );\n }\n const encodedPermissionData =\n this.sessionKeyData.permissions &&\n this.sessionKeyData.permissions.length !== 0 &&\n matchingPermission\n ? this.encodePermissionData(matchingPermission)\n : \"0x\";\n const merkleProof = this.merkleTree.getHexProof(\n keccak256(encodedPermissionData)\n );\n const encodedData =\n this.sessionKeyData.permissions &&\n this.sessionKeyData.permissions.length !== 0 &&\n matchingPermission\n ? this.encodePermissionData(matchingPermission, merkleProof)\n : \"0x\";\n const signature = concat([\n await this.sessionKey.getAddress(),\n await this.sessionKey.signMessage(formattedMessage),\n encodedData,\n ]);\n return signature;\n }\n}\n"]}
1
+ {"version":3,"file":"session-key-validator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/session-key-validator.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getUserOperationHash,\n type Address,\n type Hex,\n type SmartAccountSigner,\n type UserOperationRequest,\n getChain,\n type SignTypedDataParams,\n} from \"@alchemy/aa-core\";\nimport {\n KernelBaseValidator,\n ValidatorMode,\n type KernelBaseValidatorParams,\n type ValidatorPluginData,\n} from \"./base.js\";\nimport {\n encodeFunctionData,\n toBytes,\n concat,\n pad,\n toHex,\n keccak256,\n encodeAbiParameters,\n concatHex,\n zeroAddress,\n decodeFunctionData,\n isHex,\n getFunctionSelector,\n} from \"viem\";\nimport { SessionKeyValidatorAbi } from \"../abis/SessionKeyValidatorAbi.js\";\nimport { DUMMY_ECDSA_SIG } from \"../constants.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { MerkleTree } from \"merkletreejs\";\nimport type { Operation } from \"../provider.js\";\nimport { getChainId } from \"../api/index.js\";\nimport { fixSignedData } from \"../utils.js\";\n\n// We need to be able to serialize bigint to transmit session key over\n// the network.\n// Using this trick: https://github.com/GoogleChromeLabs/jsbi/issues/30#issuecomment-1006086291\n(BigInt.prototype as any).toJSON = function () {\n return this.toString();\n};\n\nexport interface SessionKeyValidatorParams extends KernelBaseValidatorParams {\n sessionKey: SmartAccountSigner;\n sessionKeyData: SessionKeyData;\n}\n\nexport type SessionKeyParams = Pick<\n SessionKeyValidatorParams,\n \"sessionKeyData\" | \"enableSignature\"\n> &\n ValidatorPluginData & {\n sessionPrivateKey?: Hex;\n initCode?: Hex;\n accountAddress?: Address;\n };\n\nexport enum ParamCondition {\n EQUAL = 0,\n GREATER_THAN = 1,\n LESS_THAN = 2,\n GREATER_THAN_OR_EQUAL = 3,\n LESS_THAN_OR_EQUAL = 4,\n NOT_EQUAL = 5,\n}\n\nexport interface ParamRules {\n offset: number;\n condition: ParamCondition;\n param: Hex;\n}\n\nexport interface Permission {\n target: Address;\n valueLimit: bigint;\n sig: Hex;\n rules: ParamRules[];\n operation: Operation;\n}\n\nexport interface SessionKeyData {\n validUntil: number;\n validAfter: number;\n paymaster?: Address;\n permissions?: Permission[];\n}\n\nexport class SessionKeyValidator extends KernelBaseValidator {\n protected sessionKey: SmartAccountSigner;\n sessionKeyData: SessionKeyData;\n merkleTree: MerkleTree;\n\n constructor(params: SessionKeyValidatorParams) {\n super(params);\n this.sessionKey = params.sessionKey;\n this.sessionKeyData = {\n ...params.sessionKeyData,\n paymaster: params.sessionKeyData.paymaster ?? zeroAddress,\n };\n this.merkleTree = this.getMerkleTree();\n if (this.shouldDelegateViaFallback()) {\n throw Error(\"Session key permissions not set\");\n }\n this.selector =\n params.selector ??\n getFunctionSelector(\"execute(address, uint256, bytes, uint8)\");\n this.executor = params.executor ?? zeroAddress;\n this.mode = params.mode ?? ValidatorMode.plugin;\n }\n\n public static async init(\n params: SessionKeyValidatorParams\n ): Promise<SessionKeyValidator> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n const instance = new SessionKeyValidator({ ...params, chain });\n return instance;\n }\n\n shouldDelegateViaFallback(): boolean {\n return this.merkleTree.getHexRoot() === pad(\"0x00\", { size: 32 });\n }\n\n findMatchingPermission(callData: Hex): Permission | undefined {\n try {\n const { functionName, args } = decodeFunctionData({\n abi: KernelAccountAbi,\n data: callData,\n });\n\n if (functionName !== \"execute\") return undefined;\n\n const permissionsList = this.sessionKeyData.permissions;\n if (!permissionsList || !permissionsList.length) return undefined;\n\n const targetToMatch = args[0].toLowerCase();\n\n // Filter permissions by target\n let targetPermissions = permissionsList.filter(\n (permission) => permission.target.toLowerCase() === targetToMatch\n );\n\n // If no permissions match the exact target, check for generic permissions (using zero address)\n if (!targetPermissions.length) {\n targetPermissions = permissionsList.filter(\n (permission) =>\n permission.target.toLowerCase() === zeroAddress.toLowerCase()\n );\n }\n\n if (!targetPermissions.length) return undefined;\n\n const operationPermissions = this.filterByOperation(\n targetPermissions,\n args[3]\n );\n\n if (!operationPermissions.length) return undefined;\n\n const signaturePermissions = this.filterBySignature(\n operationPermissions,\n args[2].slice(0, 10).toLowerCase()\n );\n\n const valueLimitPermissions = signaturePermissions.filter(\n (permission) => permission.valueLimit >= args[1]\n );\n\n if (!valueLimitPermissions.length) return undefined;\n\n const sortedPermissions = valueLimitPermissions.sort((a, b) => {\n if (b.valueLimit > a.valueLimit) {\n return 1;\n } else if (b.valueLimit < a.valueLimit) {\n return -1;\n } else {\n return 0;\n }\n });\n\n return this.findPermissionByRule(sortedPermissions, args[2]);\n } catch (error) {\n return undefined;\n }\n }\n\n private filterByOperation(\n permissions: Permission[],\n operation: Operation\n ): Permission[] {\n return permissions.filter(\n (permission) => permission.operation === operation\n );\n }\n\n private filterBySignature(\n permissions: Permission[],\n signature: string\n ): Permission[] {\n return permissions.filter(\n (permission) => permission.sig.toLowerCase() === signature\n );\n }\n\n private findPermissionByRule(\n permissions: Permission[],\n data: string\n ): Permission | undefined {\n return permissions.find((permission) => {\n for (const rule of permission.rules) {\n const dataParam: Hex = this.getFormattedHex(\n \"0x\" + data.slice(10 + rule.offset * 2, 10 + rule.offset * 2 + 64)\n );\n const ruleParam: Hex = this.getFormattedHex(rule.param);\n\n if (!this.evaluateRuleCondition(dataParam, ruleParam, rule.condition)) {\n return false;\n }\n }\n return true;\n });\n }\n\n private getFormattedHex(value: string): Hex {\n return pad(isHex(value) ? value : toHex(value), {\n size: 32,\n }).toLowerCase() as Hex;\n }\n\n private evaluateRuleCondition(\n dataParam: Hex,\n ruleParam: Hex,\n condition: ParamCondition\n ): boolean {\n switch (condition) {\n case ParamCondition.EQUAL:\n return dataParam === ruleParam;\n case ParamCondition.GREATER_THAN:\n return dataParam > ruleParam;\n case ParamCondition.LESS_THAN:\n return dataParam < ruleParam;\n case ParamCondition.GREATER_THAN_OR_EQUAL:\n return dataParam >= ruleParam;\n case ParamCondition.LESS_THAN_OR_EQUAL:\n return dataParam <= ruleParam;\n case ParamCondition.NOT_EQUAL:\n return dataParam !== ruleParam;\n default:\n return false;\n }\n }\n\n getMerkleTree(): MerkleTree {\n const permissionPacked = this.sessionKeyData.permissions?.map(\n (permission) => this.encodePermissionData(permission)\n );\n\n // Having one leaf returns empty array in getProof(). To hack it we push the leaf twice\n // issue - https://github.com/merkletreejs/merkletreejs/issues/58\n if (permissionPacked?.length === 1)\n permissionPacked.push(permissionPacked[0]);\n\n return permissionPacked && permissionPacked.length !== 0\n ? new MerkleTree(permissionPacked, keccak256, {\n sortPairs: true,\n hashLeaves: true,\n })\n : new MerkleTree([pad(\"0x00\", { size: 32 })], keccak256, {\n hashLeaves: false,\n });\n }\n\n encodePermissionData(permission: Permission, merkleProof?: string[]): Hex {\n let permissionParam = {\n components: [\n {\n name: \"target\",\n type: \"address\",\n },\n {\n name: \"valueLimit\",\n type: \"uint256\",\n },\n {\n name: \"sig\",\n type: \"bytes4\",\n },\n {\n components: [\n {\n name: \"offset\",\n type: \"uint256\",\n },\n {\n internalType: \"enum ParamCondition\",\n name: \"condition\",\n type: \"uint8\",\n },\n {\n name: \"param\",\n type: \"bytes32\",\n },\n ],\n name: \"rules\",\n type: \"tuple[]\",\n },\n {\n internalType: \"enum Operation\",\n name: \"operation\",\n type: \"uint8\",\n },\n ],\n name: \"permission\",\n type: \"tuple\",\n };\n let params;\n let values;\n if (merkleProof) {\n params = [\n permissionParam,\n {\n name: \"merkleProof\",\n type: \"bytes32[]\",\n },\n ];\n values = [permission, merkleProof];\n } else {\n params = [permissionParam];\n values = [permission];\n }\n return encodeAbiParameters(params, values);\n }\n\n getSessionData(): SessionKeyParams {\n if (!this.selector || !this.executor) {\n throw Error(\"Plugin Validator data params uninitialised\");\n }\n return {\n selector: this.selector,\n executor: this.executor,\n validUntil: this.validUntil,\n validAfter: this.validAfter,\n sessionKeyData: this.sessionKeyData,\n enableSignature: this.enableSignature,\n };\n }\n\n async signer(): Promise<SmartAccountSigner> {\n return await Promise.resolve(this.sessionKey);\n }\n\n async getEnableData(): Promise<Hex> {\n if (!this.merkleTree) {\n throw Error(\"SessionKeyValidator: MerkleTree not generated\");\n }\n return concat([\n await this.sessionKey.getAddress(),\n pad(this.merkleTree.getHexRoot() as Hex, { size: 32 }),\n pad(toHex(this.sessionKeyData.validAfter), { size: 6 }),\n pad(toHex(this.sessionKeyData.validUntil), { size: 6 }),\n this.sessionKeyData.paymaster!,\n ]);\n }\n\n async isPluginEnabled(\n kernelAccountAddress: Address,\n selector: Hex\n ): Promise<boolean> {\n if (!this.publicClient) {\n throw new Error(\"Validator uninitialized: PublicClient missing\");\n }\n const execDetail = await this.publicClient.readContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n functionName: \"getExecution\",\n args: [selector],\n });\n const enableData = await this.publicClient.readContract({\n abi: SessionKeyValidatorAbi,\n address: this.validatorAddress,\n functionName: \"sessionData\",\n args: [await this.sessionKey.getAddress(), kernelAccountAddress],\n });\n const enableDataHex = concatHex([\n await this.sessionKey.getAddress(),\n pad(enableData[0], { size: 4 }),\n pad(toHex(enableData[1]), { size: 6 }),\n pad(toHex(enableData[2]), { size: 6 }),\n enableData[3],\n ]);\n return (\n execDetail.validator.toLowerCase() ===\n this.validatorAddress.toLowerCase() &&\n enableData[4] &&\n enableDataHex.toLowerCase() === (await this.getEnableData()).toLowerCase()\n );\n }\n\n async getDummyUserOpSignature(callData: Hex): Promise<Hex> {\n const matchingPermission = this.findMatchingPermission(callData);\n if (!matchingPermission && !this.shouldDelegateViaFallback()) {\n throw Error(\n \"SessionKeyValidator: No matching permission found for the userOp\"\n );\n }\n const encodedPermissionData =\n this.sessionKeyData.permissions &&\n this.sessionKeyData.permissions.length !== 0 &&\n matchingPermission\n ? this.encodePermissionData(matchingPermission)\n : \"0x\";\n const merkleProof = this.merkleTree.getHexProof(\n keccak256(encodedPermissionData)\n );\n const encodedData =\n this.sessionKeyData.permissions &&\n this.sessionKeyData.permissions.length !== 0 &&\n matchingPermission\n ? this.encodePermissionData(matchingPermission, merkleProof)\n : \"0x\";\n return concatHex([\n await this.sessionKey.getAddress(),\n DUMMY_ECDSA_SIG,\n encodedData,\n ]);\n }\n\n encodeEnable(sessionKeyEnableData: Hex): Hex {\n return encodeFunctionData({\n abi: SessionKeyValidatorAbi,\n functionName: \"enable\",\n args: [sessionKeyEnableData],\n });\n }\n\n encodeDisable(sessionKey: Hex): Hex {\n return encodeFunctionData({\n abi: SessionKeyValidatorAbi,\n functionName: \"disable\",\n args: [sessionKey],\n });\n }\n\n async signMessage(message: string | Uint8Array): Promise<Hex> {\n return await this.sessionKey.signMessage(message);\n }\n\n async signTypedData(params: SignTypedDataParams): Promise<Hex> {\n return fixSignedData(await this.sessionKey.signTypedData(params));\n }\n\n async signUserOp(userOp: UserOperationRequest): Promise<Hex> {\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n const hash = getUserOperationHash(\n {\n ...userOp,\n signature: \"0x\",\n },\n this.entryPointAddress,\n BigInt(this.chain.id)\n );\n const formattedMessage = typeof hash === \"string\" ? toBytes(hash) : hash;\n\n const matchingPermission = this.findMatchingPermission(userOp.callData);\n if (!matchingPermission && !this.shouldDelegateViaFallback()) {\n throw Error(\n \"SessionKeyValidator: No matching permission found for the userOp\"\n );\n }\n const encodedPermissionData =\n this.sessionKeyData.permissions &&\n this.sessionKeyData.permissions.length !== 0 &&\n matchingPermission\n ? this.encodePermissionData(matchingPermission)\n : \"0x\";\n const merkleProof = this.merkleTree.getHexProof(\n keccak256(encodedPermissionData)\n );\n const encodedData =\n this.sessionKeyData.permissions &&\n this.sessionKeyData.permissions.length !== 0 &&\n matchingPermission\n ? this.encodePermissionData(matchingPermission, merkleProof)\n : \"0x\";\n const signature = concat([\n await this.sessionKey.getAddress(),\n await this.sessionKey.signMessage(formattedMessage),\n encodedData,\n ]);\n return signature;\n }\n}\n"]}
@@ -36,7 +36,7 @@ export declare class KernelSmartContractAccount<TTransport extends Transport | F
36
36
  encodeBatchExecute(_txs: BatchUserOperationCallData): Promise<`0x${string}`>;
37
37
  encodeExecuteDelegate(target: Hex, value: bigint, data: Hex): Promise<Hex>;
38
38
  encodeSetExection(): Promise<`0x${string}`>;
39
- signWithEip6492(msg: string | Uint8Array): Promise<Hex>;
39
+ signMessageWith6492(msg: string | Uint8Array): Promise<Hex>;
40
40
  signMessage(msg: Uint8Array | string): Promise<Hex>;
41
41
  signTypedData(params: SignTypedDataParams): Promise<Hex>;
42
42
  signUserOp(userOp: UserOperationRequest): Promise<Hex>;
@@ -166,7 +166,7 @@ export class KernelSmartContractAccount extends BaseSmartContractAccount {
166
166
  ],
167
167
  });
168
168
  }
169
- async signWithEip6492(msg) {
169
+ async signMessageWith6492(msg) {
170
170
  try {
171
171
  if (!this.validator) {
172
172
  throw new Error("Validator not connected");
@@ -1 +1 @@
1
- {"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/kernel-zerodev/account.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Address } from \"abitype\";\nimport {\n concatHex,\n encodeAbiParameters,\n encodeFunctionData,\n type FallbackTransport,\n hashMessage,\n type Hex,\n toBytes,\n type Transport,\n} from \"viem\";\nimport { parseAbiParameters } from \"abitype\";\nimport { KernelBaseValidator } from \"./validator/base.js\";\nimport { KernelAccountAbi } from \"./abis/KernelAccountAbi.js\";\nimport { KernelFactoryAbi } from \"./abis/KernelFactoryAbi.js\";\nimport {\n type BaseSmartAccountParams,\n BaseSmartContractAccount,\n type BatchUserOperationCallData,\n type UserOperationRequest,\n defineReadOnly,\n getChain,\n type SignTypedDataParams,\n} from \"@alchemy/aa-core\";\nimport {\n BUNDLER_URL,\n ENTRYPOINT_ADDRESS,\n KERNEL_FACTORY_ADDRESS,\n KERNEL_IMPL_ADDRESS,\n MULTISEND_ADDR,\n} from \"./constants.js\";\nimport { encodeMultiSend } from \"./utils.js\";\nimport { MultiSendAbi } from \"./abis/MultiSendAbi.js\";\nimport { polygonMumbai } from \"viem/chains\";\nimport { getChainId } from \"./api/index.js\";\nimport { createZeroDevPublicErc4337Client } from \"./client/create-client.js\";\nimport type { PaymasterAndBundlerProviders } from \"./paymaster/types.js\";\n\nexport enum DeploymentState {\n UNDEFINED = \"0x0\",\n NOT_DEPLOYED = \"0x1\",\n DEPLOYED = \"0x2\",\n}\nexport interface KernelSmartAccountParams<\n TTransport extends Transport | FallbackTransport = Transport\n> extends Partial<BaseSmartAccountParams<TTransport>> {\n projectId: string;\n factoryAddress?: Address;\n index?: bigint;\n validator?: KernelBaseValidator;\n bundlerProvider?: PaymasterAndBundlerProviders;\n defaultValidator?: KernelBaseValidator;\n initCode?: Hex;\n}\n\nexport function isKernelAccount(\n account: any\n): account is KernelSmartContractAccount {\n return account && account.connectValidator !== undefined;\n}\n\nexport class KernelSmartContractAccount<\n TTransport extends Transport | FallbackTransport = Transport\n> extends BaseSmartContractAccount<TTransport> {\n private readonly factoryAddress: Address;\n private readonly index: bigint;\n private initCode?: Hex;\n validator?: KernelBaseValidator;\n defaultValidator?: KernelBaseValidator;\n\n constructor(params: KernelSmartAccountParams) {\n super({\n ...params,\n entryPointAddress: params.entryPointAddress ?? ENTRYPOINT_ADDRESS,\n chain: params.chain ?? polygonMumbai,\n rpcClient: params.rpcClient ?? BUNDLER_URL,\n });\n this.index = params.index ?? 0n;\n this.factoryAddress = params.factoryAddress ?? KERNEL_FACTORY_ADDRESS;\n this.validator = params.validator;\n this.defaultValidator = params.defaultValidator;\n this.initCode = params.initCode;\n }\n\n public static async init(\n params: KernelSmartAccountParams\n ): Promise<KernelSmartContractAccount> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n const rpcClient =\n typeof params.rpcClient === \"string\"\n ? createZeroDevPublicErc4337Client({\n chain,\n rpcUrl: params.rpcClient ?? BUNDLER_URL,\n projectId: params.projectId,\n bundlerProvider: params.bundlerProvider,\n })\n : params.rpcClient;\n const instance = new KernelSmartContractAccount({\n ...params,\n chain,\n rpcClient,\n });\n return instance;\n }\n\n connectValidator(validator: KernelBaseValidator): this {\n defineReadOnly(this, \"validator\", validator);\n return this;\n }\n\n getValidator(): KernelBaseValidator {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n return this.validator;\n }\n\n getDummySignature(): Hex {\n return \"0x00000000870fe151d548a1c527c3804866fab30abf28ed17b79d5fc5149f19ca0819fefc3c57f3da4fdf9b10fab3f2f3dca536467ae44943b9dbb8433efe7760ddd72aaa1c\";\n }\n\n async getInitCode(): Promise<Hex> {\n if (this.deploymentState === DeploymentState.DEPLOYED) {\n return \"0x\";\n }\n const contractCode = await this.rpcProvider.getContractCode(\n await this.getAddress()\n );\n\n if ((contractCode?.length ?? 0) > 2) {\n this.deploymentState = DeploymentState.DEPLOYED;\n return \"0x\";\n } else {\n this.deploymentState = DeploymentState.NOT_DEPLOYED;\n }\n\n return this.initCode ?? this.getAccountInitCode();\n }\n\n getIndex(): bigint {\n return this.index;\n }\n\n async approvePlugin() {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n if (this.defaultValidator && !this.validator.getEnableSignature()) {\n const { executor, selector, validAfter, validUntil } =\n this.validator.getPluginValidatorData();\n const enableSig = await this.defaultValidator.approveExecutor(\n await this.getAddress(),\n selector,\n executor,\n validUntil,\n validAfter,\n this.validator\n );\n this.validator.setEnableSignature(enableSig);\n }\n }\n\n async encodeExecute(target: Hex, value: bigint, data: Hex): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n if (\n target.toLowerCase() === (await this.getAddress()).toLowerCase() &&\n this.validator.shouldDelegateViaFallback()\n ) {\n return data;\n } else {\n return this.encodeExecuteAction(target, value, data, 0);\n }\n }\n\n async encodeBatchExecute(\n _txs: BatchUserOperationCallData\n ): Promise<`0x${string}`> {\n const multiSendCalldata = encodeFunctionData({\n abi: MultiSendAbi,\n functionName: \"multiSend\",\n args: [encodeMultiSend(_txs)],\n });\n return await this.encodeExecuteDelegate(\n MULTISEND_ADDR,\n BigInt(0),\n multiSendCalldata\n );\n }\n\n async encodeExecuteDelegate(\n target: Hex,\n value: bigint,\n data: Hex\n ): Promise<Hex> {\n return this.encodeExecuteAction(target, value, data, 1);\n }\n\n async encodeSetExection() {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n const { executor, selector, validAfter, validUntil } =\n await this.validator.getPluginValidatorData();\n const enableData = await this.validator.getEnableData();\n return encodeFunctionData({\n abi: KernelAccountAbi,\n functionName: \"setExecution\",\n args: [\n selector,\n executor,\n this.validator.validatorAddress,\n validUntil,\n validAfter,\n enableData,\n ],\n });\n }\n\n async signWithEip6492(msg: string | Uint8Array): Promise<Hex> {\n try {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n const formattedMessage = typeof msg === \"string\" ? toBytes(msg) : msg;\n let sig = await this.validator.signMessage(\n toBytes(hashMessage({ raw: formattedMessage }))\n );\n // If the account is undeployed, use ERC-6492\n if (!(await this.isAccountDeployed())) {\n sig = (encodeAbiParameters(\n parseAbiParameters(\"address, bytes, bytes\"),\n [this.factoryAddress, await this.getFactoryInitCode(), sig]\n ) +\n \"6492649264926492649264926492649264926492649264926492649264926492\") as Hex; // magic suffix\n }\n\n return sig;\n } catch (err: any) {\n console.error(\"Got Error - \", err.message);\n throw new Error(\"Message Signing with EIP6492 failed\");\n }\n }\n\n async signMessage(msg: Uint8Array | string): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n const formattedMessage = typeof msg === \"string\" ? toBytes(msg) : msg;\n return await this.validator.signMessage(formattedMessage);\n }\n\n async signTypedData(params: SignTypedDataParams): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n return await this.validator.signTypedData(params);\n }\n\n signUserOp(userOp: UserOperationRequest): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n return this.validator.signUserOp(userOp);\n }\n\n protected encodeExecuteAction(\n target: Hex,\n value: bigint,\n data: Hex,\n code: number\n ): Hex {\n return encodeFunctionData({\n abi: KernelAccountAbi,\n functionName: \"execute\",\n args: [target, value, data, code],\n });\n }\n protected async getAccountInitCode(): Promise<Hex> {\n return concatHex([this.factoryAddress, await this.getFactoryInitCode()]);\n }\n\n async getNonce(): Promise<bigint> {\n if (!(await this.isAccountDeployed())) {\n return 0n;\n }\n if (!this.validator) {\n throw Error(\"Validator unintialized\");\n }\n const address = await this.getAddress();\n const key = this.validator.getNonceKey();\n return this.entryPoint.read.getNonce([address, key]);\n }\n\n protected async getFactoryInitCode(): Promise<Hex> {\n const validator = this.defaultValidator ?? this.validator;\n if (!validator) {\n throw new Error(\"Validator not connected\");\n }\n try {\n return encodeFunctionData({\n abi: KernelFactoryAbi,\n functionName: \"createAccount\",\n args: [\n KERNEL_IMPL_ADDRESS,\n encodeFunctionData({\n abi: KernelAccountAbi,\n functionName: \"initialize\",\n args: [validator.getAddress(), await validator.getEnableData()],\n }),\n this.index,\n ],\n });\n } catch (err: any) {\n console.error(\"err occurred:\", err.message);\n throw new Error(\"Factory Code generation failed\");\n }\n }\n}\n"]}
1
+ {"version":3,"file":"account.js","sourceRoot":"","sources":["../../../src/kernel-zerodev/account.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Address } from \"abitype\";\nimport {\n concatHex,\n encodeAbiParameters,\n encodeFunctionData,\n type FallbackTransport,\n hashMessage,\n type Hex,\n toBytes,\n type Transport,\n} from \"viem\";\nimport { parseAbiParameters } from \"abitype\";\nimport { KernelBaseValidator } from \"./validator/base.js\";\nimport { KernelAccountAbi } from \"./abis/KernelAccountAbi.js\";\nimport { KernelFactoryAbi } from \"./abis/KernelFactoryAbi.js\";\nimport {\n type BaseSmartAccountParams,\n BaseSmartContractAccount,\n type BatchUserOperationCallData,\n type UserOperationRequest,\n defineReadOnly,\n getChain,\n type SignTypedDataParams,\n} from \"@alchemy/aa-core\";\nimport {\n BUNDLER_URL,\n ENTRYPOINT_ADDRESS,\n KERNEL_FACTORY_ADDRESS,\n KERNEL_IMPL_ADDRESS,\n MULTISEND_ADDR,\n} from \"./constants.js\";\nimport { encodeMultiSend } from \"./utils.js\";\nimport { MultiSendAbi } from \"./abis/MultiSendAbi.js\";\nimport { polygonMumbai } from \"viem/chains\";\nimport { getChainId } from \"./api/index.js\";\nimport { createZeroDevPublicErc4337Client } from \"./client/create-client.js\";\nimport type { PaymasterAndBundlerProviders } from \"./paymaster/types.js\";\n\nexport enum DeploymentState {\n UNDEFINED = \"0x0\",\n NOT_DEPLOYED = \"0x1\",\n DEPLOYED = \"0x2\",\n}\nexport interface KernelSmartAccountParams<\n TTransport extends Transport | FallbackTransport = Transport\n> extends Partial<BaseSmartAccountParams<TTransport>> {\n projectId: string;\n factoryAddress?: Address;\n index?: bigint;\n validator?: KernelBaseValidator;\n bundlerProvider?: PaymasterAndBundlerProviders;\n defaultValidator?: KernelBaseValidator;\n initCode?: Hex;\n}\n\nexport function isKernelAccount(\n account: any\n): account is KernelSmartContractAccount {\n return account && account.connectValidator !== undefined;\n}\n\nexport class KernelSmartContractAccount<\n TTransport extends Transport | FallbackTransport = Transport\n> extends BaseSmartContractAccount<TTransport> {\n private readonly factoryAddress: Address;\n private readonly index: bigint;\n private initCode?: Hex;\n validator?: KernelBaseValidator;\n defaultValidator?: KernelBaseValidator;\n\n constructor(params: KernelSmartAccountParams) {\n super({\n ...params,\n entryPointAddress: params.entryPointAddress ?? ENTRYPOINT_ADDRESS,\n chain: params.chain ?? polygonMumbai,\n rpcClient: params.rpcClient ?? BUNDLER_URL,\n });\n this.index = params.index ?? 0n;\n this.factoryAddress = params.factoryAddress ?? KERNEL_FACTORY_ADDRESS;\n this.validator = params.validator;\n this.defaultValidator = params.defaultValidator;\n this.initCode = params.initCode;\n }\n\n public static async init(\n params: KernelSmartAccountParams\n ): Promise<KernelSmartContractAccount> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n const rpcClient =\n typeof params.rpcClient === \"string\"\n ? createZeroDevPublicErc4337Client({\n chain,\n rpcUrl: params.rpcClient ?? BUNDLER_URL,\n projectId: params.projectId,\n bundlerProvider: params.bundlerProvider,\n })\n : params.rpcClient;\n const instance = new KernelSmartContractAccount({\n ...params,\n chain,\n rpcClient,\n });\n return instance;\n }\n\n connectValidator(validator: KernelBaseValidator): this {\n defineReadOnly(this, \"validator\", validator);\n return this;\n }\n\n getValidator(): KernelBaseValidator {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n return this.validator;\n }\n\n getDummySignature(): Hex {\n return \"0x00000000870fe151d548a1c527c3804866fab30abf28ed17b79d5fc5149f19ca0819fefc3c57f3da4fdf9b10fab3f2f3dca536467ae44943b9dbb8433efe7760ddd72aaa1c\";\n }\n\n async getInitCode(): Promise<Hex> {\n if (this.deploymentState === DeploymentState.DEPLOYED) {\n return \"0x\";\n }\n const contractCode = await this.rpcProvider.getContractCode(\n await this.getAddress()\n );\n\n if ((contractCode?.length ?? 0) > 2) {\n this.deploymentState = DeploymentState.DEPLOYED;\n return \"0x\";\n } else {\n this.deploymentState = DeploymentState.NOT_DEPLOYED;\n }\n\n return this.initCode ?? this.getAccountInitCode();\n }\n\n getIndex(): bigint {\n return this.index;\n }\n\n async approvePlugin() {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n if (this.defaultValidator && !this.validator.getEnableSignature()) {\n const { executor, selector, validAfter, validUntil } =\n this.validator.getPluginValidatorData();\n const enableSig = await this.defaultValidator.approveExecutor(\n await this.getAddress(),\n selector,\n executor,\n validUntil,\n validAfter,\n this.validator\n );\n this.validator.setEnableSignature(enableSig);\n }\n }\n\n async encodeExecute(target: Hex, value: bigint, data: Hex): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n if (\n target.toLowerCase() === (await this.getAddress()).toLowerCase() &&\n this.validator.shouldDelegateViaFallback()\n ) {\n return data;\n } else {\n return this.encodeExecuteAction(target, value, data, 0);\n }\n }\n\n async encodeBatchExecute(\n _txs: BatchUserOperationCallData\n ): Promise<`0x${string}`> {\n const multiSendCalldata = encodeFunctionData({\n abi: MultiSendAbi,\n functionName: \"multiSend\",\n args: [encodeMultiSend(_txs)],\n });\n return await this.encodeExecuteDelegate(\n MULTISEND_ADDR,\n BigInt(0),\n multiSendCalldata\n );\n }\n\n async encodeExecuteDelegate(\n target: Hex,\n value: bigint,\n data: Hex\n ): Promise<Hex> {\n return this.encodeExecuteAction(target, value, data, 1);\n }\n\n async encodeSetExection() {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n const { executor, selector, validAfter, validUntil } =\n await this.validator.getPluginValidatorData();\n const enableData = await this.validator.getEnableData();\n return encodeFunctionData({\n abi: KernelAccountAbi,\n functionName: \"setExecution\",\n args: [\n selector,\n executor,\n this.validator.validatorAddress,\n validUntil,\n validAfter,\n enableData,\n ],\n });\n }\n\n async signMessageWith6492(msg: string | Uint8Array): Promise<Hex> {\n try {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n const formattedMessage = typeof msg === \"string\" ? toBytes(msg) : msg;\n let sig = await this.validator.signMessage(\n toBytes(hashMessage({ raw: formattedMessage }))\n );\n // If the account is undeployed, use ERC-6492\n if (!(await this.isAccountDeployed())) {\n sig = (encodeAbiParameters(\n parseAbiParameters(\"address, bytes, bytes\"),\n [this.factoryAddress, await this.getFactoryInitCode(), sig]\n ) +\n \"6492649264926492649264926492649264926492649264926492649264926492\") as Hex; // magic suffix\n }\n\n return sig;\n } catch (err: any) {\n console.error(\"Got Error - \", err.message);\n throw new Error(\"Message Signing with EIP6492 failed\");\n }\n }\n\n async signMessage(msg: Uint8Array | string): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n const formattedMessage = typeof msg === \"string\" ? toBytes(msg) : msg;\n return await this.validator.signMessage(formattedMessage);\n }\n\n async signTypedData(params: SignTypedDataParams): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n return await this.validator.signTypedData(params);\n }\n\n signUserOp(userOp: UserOperationRequest): Promise<Hex> {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n return this.validator.signUserOp(userOp);\n }\n\n protected encodeExecuteAction(\n target: Hex,\n value: bigint,\n data: Hex,\n code: number\n ): Hex {\n return encodeFunctionData({\n abi: KernelAccountAbi,\n functionName: \"execute\",\n args: [target, value, data, code],\n });\n }\n protected async getAccountInitCode(): Promise<Hex> {\n return concatHex([this.factoryAddress, await this.getFactoryInitCode()]);\n }\n\n async getNonce(): Promise<bigint> {\n if (!(await this.isAccountDeployed())) {\n return 0n;\n }\n if (!this.validator) {\n throw Error(\"Validator unintialized\");\n }\n const address = await this.getAddress();\n const key = this.validator.getNonceKey();\n return this.entryPoint.read.getNonce([address, key]);\n }\n\n protected async getFactoryInitCode(): Promise<Hex> {\n const validator = this.defaultValidator ?? this.validator;\n if (!validator) {\n throw new Error(\"Validator not connected\");\n }\n try {\n return encodeFunctionData({\n abi: KernelFactoryAbi,\n functionName: \"createAccount\",\n args: [\n KERNEL_IMPL_ADDRESS,\n encodeFunctionData({\n abi: KernelAccountAbi,\n functionName: \"initialize\",\n args: [validator.getAddress(), await validator.getEnableData()],\n }),\n this.index,\n ],\n });\n } catch (err: any) {\n console.error(\"err occurred:\", err.message);\n throw new Error(\"Factory Code generation failed\");\n }\n }\n}\n"]}
@@ -4,6 +4,7 @@ import type { Deferrable } from "@ethersproject/properties";
4
4
  import { type TransactionRequest, type TransactionResponse } from "@ethersproject/providers";
5
5
  import { ZeroDevEthersProvider } from "./ethers-provider.js";
6
6
  import type { SupportedValidators } from "../validator/types.js";
7
+ import type { Hex } from "viem";
7
8
  export declare class ZeroDevAccountSigner<V extends SupportedValidators> extends Signer implements TypedDataSigner {
8
9
  readonly provider: ZeroDevEthersProvider<V>;
9
10
  private account?;
@@ -14,6 +15,7 @@ export declare class ZeroDevAccountSigner<V extends SupportedValidators> extends
14
15
  signMessage(message: string | Uint8Array): Promise<string>;
15
16
  signTypedData(params: SignTypedDataParams): Promise<string>;
16
17
  _signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): Promise<string>;
18
+ signMessageWith6492(_msg: string | Uint8Array): Promise<Hex>;
17
19
  withPaymasterMiddleware: (overrides: {
18
20
  dummyPaymasterDataMiddleware?: PaymasterAndDataMiddleware;
19
21
  paymasterDataMiddleware?: PaymasterAndDataMiddleware;
@@ -110,6 +110,12 @@ export class ZeroDevAccountSigner extends Signer {
110
110
  }
111
111
  return this.signTypedData(params);
112
112
  }
113
+ async signMessageWith6492(_msg) {
114
+ if (!this.account) {
115
+ throw new Error("connect the signer to a provider that has a connected account");
116
+ }
117
+ return this.account.signMessageWith6492(_msg);
118
+ }
113
119
  async sendTransaction(transaction) {
114
120
  const resolved = await resolveProperties(transaction);
115
121
  const txHash = await this.provider.accountProvider.sendTransaction({
@@ -1 +1 @@
1
- {"version":3,"file":"account-signer.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/ethers-provider/account-signer.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n resolveProperties,\n type AccountMiddlewareFn,\n type FeeDataMiddleware,\n type GasEstimatorMiddleware,\n type PaymasterAndDataMiddleware,\n type PublicErc4337Client,\n type SignTypedDataParams,\n} from \"@alchemy/aa-core\";\nimport {\n Signer,\n type TypedDataSigner,\n type TypedDataDomain,\n type TypedDataField,\n} from \"@ethersproject/abstract-signer\";\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { _TypedDataEncoder } from \"@ethersproject/hash\";\nimport type { Deferrable } from \"@ethersproject/properties\";\nimport {\n type TransactionRequest,\n type TransactionResponse,\n} from \"@ethersproject/providers\";\nimport { ZeroDevEthersProvider } from \"./ethers-provider.js\";\nimport type { SupportedValidators } from \"../validator/types.js\";\nimport type { KernelSmartContractAccount } from \"../account.js\";\n\nconst hexlifyOptional = (value: any): `0x${string}` | undefined => {\n if (value == null) {\n return undefined;\n }\n\n return hexlify(value) as `0x${string}`;\n};\n\nexport class ZeroDevAccountSigner<V extends SupportedValidators>\n extends Signer\n implements TypedDataSigner\n{\n private account?: KernelSmartContractAccount;\n\n sendUserOperation;\n waitForUserOperationTransaction;\n\n constructor(readonly provider: ZeroDevEthersProvider<V>) {\n super();\n this.account = this.provider.accountProvider.getAccount();\n\n this.sendUserOperation =\n this.provider.accountProvider.sendUserOperation.bind(\n this.provider.accountProvider\n );\n this.waitForUserOperationTransaction =\n this.provider.accountProvider.waitForUserOperationTransaction.bind(\n this.provider.accountProvider\n );\n }\n\n getAddress(): Promise<string> {\n if (!this.account) {\n throw new Error(\n \"connect the signer to a provider that has a connected account\"\n );\n }\n\n return this.account.getAddress();\n }\n\n signMessage(message: string | Uint8Array): Promise<string> {\n if (!this.account) {\n throw new Error(\n \"connect the signer to a provider that has a connected account\"\n );\n }\n\n return this.account.signMessage(message);\n }\n\n signTypedData(params: SignTypedDataParams): Promise<string> {\n if (!this.account) {\n throw new Error(\n \"connect the signer to a provider that has a connected account\"\n );\n }\n if (params.types) {\n delete params.types[\"EIP712Domain\"];\n }\n\n return this.account.signTypedData(params);\n }\n\n _signTypedData(\n domain: TypedDataDomain,\n types: Record<string, Array<TypedDataField>>,\n value: Record<string, any>\n ): Promise<string> {\n if (!this.account) {\n throw new Error(\n \"connect the signer to a provider that has a connected account\"\n );\n }\n const params = _TypedDataEncoder.getPayload(\n domain,\n types,\n value\n ) as SignTypedDataParams;\n if (params.types) {\n delete params.types[\"EIP712Domain\"];\n }\n\n return this.signTypedData(params);\n }\n\n withPaymasterMiddleware = (overrides: {\n dummyPaymasterDataMiddleware?: PaymasterAndDataMiddleware;\n paymasterDataMiddleware?: PaymasterAndDataMiddleware;\n }): this => {\n this.provider.withPaymasterMiddleware(overrides);\n return this;\n };\n\n withGasEstimator = (override: GasEstimatorMiddleware): this => {\n this.provider.withGasEstimator(override);\n return this;\n };\n\n withFeeDataGetter = (override: FeeDataMiddleware): this => {\n this.provider.withFeeDataGetter(override);\n return this;\n };\n\n withCustomMiddleware = (override: AccountMiddlewareFn): this => {\n this.provider.withCustomMiddleware(override);\n return this;\n };\n\n async sendTransaction(\n transaction: Deferrable<TransactionRequest>\n ): Promise<TransactionResponse> {\n const resolved = await resolveProperties(transaction);\n const txHash = await this.provider.accountProvider.sendTransaction({\n // TODO: need to support gas fields as well\n from: (await this.getAddress()) as `0x${string}`,\n to: resolved.to as `0x${string}` | undefined,\n data: hexlifyOptional(resolved.data),\n });\n\n return this.provider.getTransaction(txHash);\n }\n\n signTransaction(\n _transaction: Deferrable<TransactionRequest>\n ): Promise<string> {\n throw new Error(\n \"Transaction signing is not supported, use sendUserOperation instead\"\n );\n }\n\n getPublicErc4337Client(): PublicErc4337Client {\n return this.provider.getPublicErc4337Client();\n }\n\n connect(provider: ZeroDevEthersProvider<V>): ZeroDevAccountSigner<V> {\n return new ZeroDevAccountSigner(provider);\n }\n}\n"]}
1
+ {"version":3,"file":"account-signer.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/ethers-provider/account-signer.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n resolveProperties,\n type AccountMiddlewareFn,\n type FeeDataMiddleware,\n type GasEstimatorMiddleware,\n type PaymasterAndDataMiddleware,\n type PublicErc4337Client,\n type SignTypedDataParams,\n} from \"@alchemy/aa-core\";\nimport {\n Signer,\n type TypedDataSigner,\n type TypedDataDomain,\n type TypedDataField,\n} from \"@ethersproject/abstract-signer\";\nimport { hexlify } from \"@ethersproject/bytes\";\nimport { _TypedDataEncoder } from \"@ethersproject/hash\";\nimport type { Deferrable } from \"@ethersproject/properties\";\nimport {\n type TransactionRequest,\n type TransactionResponse,\n} from \"@ethersproject/providers\";\nimport { ZeroDevEthersProvider } from \"./ethers-provider.js\";\nimport type { SupportedValidators } from \"../validator/types.js\";\nimport type { KernelSmartContractAccount } from \"../account.js\";\nimport type { Hex } from \"viem\";\n\nconst hexlifyOptional = (value: any): `0x${string}` | undefined => {\n if (value == null) {\n return undefined;\n }\n\n return hexlify(value) as `0x${string}`;\n};\n\nexport class ZeroDevAccountSigner<V extends SupportedValidators>\n extends Signer\n implements TypedDataSigner\n{\n private account?: KernelSmartContractAccount;\n\n sendUserOperation;\n waitForUserOperationTransaction;\n\n constructor(readonly provider: ZeroDevEthersProvider<V>) {\n super();\n this.account = this.provider.accountProvider.getAccount();\n\n this.sendUserOperation =\n this.provider.accountProvider.sendUserOperation.bind(\n this.provider.accountProvider\n );\n this.waitForUserOperationTransaction =\n this.provider.accountProvider.waitForUserOperationTransaction.bind(\n this.provider.accountProvider\n );\n }\n\n getAddress(): Promise<string> {\n if (!this.account) {\n throw new Error(\n \"connect the signer to a provider that has a connected account\"\n );\n }\n\n return this.account.getAddress();\n }\n\n signMessage(message: string | Uint8Array): Promise<string> {\n if (!this.account) {\n throw new Error(\n \"connect the signer to a provider that has a connected account\"\n );\n }\n\n return this.account.signMessage(message);\n }\n\n signTypedData(params: SignTypedDataParams): Promise<string> {\n if (!this.account) {\n throw new Error(\n \"connect the signer to a provider that has a connected account\"\n );\n }\n if (params.types) {\n delete params.types[\"EIP712Domain\"];\n }\n\n return this.account.signTypedData(params);\n }\n\n _signTypedData(\n domain: TypedDataDomain,\n types: Record<string, Array<TypedDataField>>,\n value: Record<string, any>\n ): Promise<string> {\n if (!this.account) {\n throw new Error(\n \"connect the signer to a provider that has a connected account\"\n );\n }\n const params = _TypedDataEncoder.getPayload(\n domain,\n types,\n value\n ) as SignTypedDataParams;\n if (params.types) {\n delete params.types[\"EIP712Domain\"];\n }\n\n return this.signTypedData(params);\n }\n\n async signMessageWith6492(_msg: string | Uint8Array): Promise<Hex> {\n if (!this.account) {\n throw new Error(\n \"connect the signer to a provider that has a connected account\"\n );\n }\n return this.account.signMessageWith6492(_msg);\n }\n\n withPaymasterMiddleware = (overrides: {\n dummyPaymasterDataMiddleware?: PaymasterAndDataMiddleware;\n paymasterDataMiddleware?: PaymasterAndDataMiddleware;\n }): this => {\n this.provider.withPaymasterMiddleware(overrides);\n return this;\n };\n\n withGasEstimator = (override: GasEstimatorMiddleware): this => {\n this.provider.withGasEstimator(override);\n return this;\n };\n\n withFeeDataGetter = (override: FeeDataMiddleware): this => {\n this.provider.withFeeDataGetter(override);\n return this;\n };\n\n withCustomMiddleware = (override: AccountMiddlewareFn): this => {\n this.provider.withCustomMiddleware(override);\n return this;\n };\n\n async sendTransaction(\n transaction: Deferrable<TransactionRequest>\n ): Promise<TransactionResponse> {\n const resolved = await resolveProperties(transaction);\n const txHash = await this.provider.accountProvider.sendTransaction({\n // TODO: need to support gas fields as well\n from: (await this.getAddress()) as `0x${string}`,\n to: resolved.to as `0x${string}` | undefined,\n data: hexlifyOptional(resolved.data),\n });\n\n return this.provider.getTransaction(txHash);\n }\n\n signTransaction(\n _transaction: Deferrable<TransactionRequest>\n ): Promise<string> {\n throw new Error(\n \"Transaction signing is not supported, use sendUserOperation instead\"\n );\n }\n\n getPublicErc4337Client(): PublicErc4337Client {\n return this.provider.getPublicErc4337Client();\n }\n\n connect(provider: ZeroDevEthersProvider<V>): ZeroDevAccountSigner<V> {\n return new ZeroDevAccountSigner(provider);\n }\n}\n"]}
@@ -46,6 +46,9 @@ export class SessionKeyValidator extends KernelBaseValidator {
46
46
  paymaster: params.sessionKeyData.paymaster ?? zeroAddress,
47
47
  };
48
48
  this.merkleTree = this.getMerkleTree();
49
+ if (this.shouldDelegateViaFallback()) {
50
+ throw Error("Session key permissions not set");
51
+ }
49
52
  this.selector =
50
53
  params.selector ??
51
54
  getFunctionSelector("execute(address, uint256, bytes, uint8)");
@@ -1 +1 @@
1
- {"version":3,"file":"session-key-validator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/session-key-validator.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getUserOperationHash,\n type Address,\n type Hex,\n type SmartAccountSigner,\n type UserOperationRequest,\n getChain,\n type SignTypedDataParams,\n} from \"@alchemy/aa-core\";\nimport {\n KernelBaseValidator,\n ValidatorMode,\n type KernelBaseValidatorParams,\n type ValidatorPluginData,\n} from \"./base.js\";\nimport {\n encodeFunctionData,\n toBytes,\n concat,\n pad,\n toHex,\n keccak256,\n encodeAbiParameters,\n concatHex,\n zeroAddress,\n decodeFunctionData,\n isHex,\n getFunctionSelector,\n} from \"viem\";\nimport { SessionKeyValidatorAbi } from \"../abis/SessionKeyValidatorAbi.js\";\nimport { DUMMY_ECDSA_SIG } from \"../constants.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { MerkleTree } from \"merkletreejs\";\nimport type { Operation } from \"../provider.js\";\nimport { getChainId } from \"../api/index.js\";\nimport { fixSignedData } from \"../utils.js\";\n\n// We need to be able to serialize bigint to transmit session key over\n// the network.\n// Using this trick: https://github.com/GoogleChromeLabs/jsbi/issues/30#issuecomment-1006086291\n(BigInt.prototype as any).toJSON = function () {\n return this.toString();\n};\n\nexport interface SessionKeyValidatorParams extends KernelBaseValidatorParams {\n sessionKey: SmartAccountSigner;\n sessionKeyData: SessionKeyData;\n}\n\nexport type SessionKeyParams = Pick<\n SessionKeyValidatorParams,\n \"sessionKeyData\" | \"enableSignature\"\n> &\n ValidatorPluginData & {\n sessionPrivateKey?: Hex;\n initCode?: Hex;\n accountAddress?: Address;\n };\n\nexport enum ParamCondition {\n EQUAL = 0,\n GREATER_THAN = 1,\n LESS_THAN = 2,\n GREATER_THAN_OR_EQUAL = 3,\n LESS_THAN_OR_EQUAL = 4,\n NOT_EQUAL = 5,\n}\n\nexport interface ParamRules {\n offset: number;\n condition: ParamCondition;\n param: Hex;\n}\n\nexport interface Permission {\n target: Address;\n valueLimit: bigint;\n sig: Hex;\n rules: ParamRules[];\n operation: Operation;\n}\n\nexport interface SessionKeyData {\n validUntil: number;\n validAfter: number;\n paymaster?: Address;\n permissions?: Permission[];\n}\n\nexport class SessionKeyValidator extends KernelBaseValidator {\n protected sessionKey: SmartAccountSigner;\n sessionKeyData: SessionKeyData;\n merkleTree: MerkleTree;\n\n constructor(params: SessionKeyValidatorParams) {\n super(params);\n this.sessionKey = params.sessionKey;\n this.sessionKeyData = {\n ...params.sessionKeyData,\n paymaster: params.sessionKeyData.paymaster ?? zeroAddress,\n };\n this.merkleTree = this.getMerkleTree();\n this.selector =\n params.selector ??\n getFunctionSelector(\"execute(address, uint256, bytes, uint8)\");\n this.executor = params.executor ?? zeroAddress;\n this.mode = params.mode ?? ValidatorMode.plugin;\n }\n\n public static async init(\n params: SessionKeyValidatorParams\n ): Promise<SessionKeyValidator> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n const instance = new SessionKeyValidator({ ...params, chain });\n return instance;\n }\n\n shouldDelegateViaFallback(): boolean {\n return this.merkleTree.getHexRoot() === pad(\"0x00\", { size: 32 });\n }\n\n findMatchingPermission(callData: Hex): Permission | undefined {\n try {\n const { functionName, args } = decodeFunctionData({\n abi: KernelAccountAbi,\n data: callData,\n });\n\n if (functionName !== \"execute\") return undefined;\n\n const permissionsList = this.sessionKeyData.permissions;\n if (!permissionsList || !permissionsList.length) return undefined;\n\n const targetToMatch = args[0].toLowerCase();\n\n // Filter permissions by target\n let targetPermissions = permissionsList.filter(\n (permission) => permission.target.toLowerCase() === targetToMatch\n );\n\n // If no permissions match the exact target, check for generic permissions (using zero address)\n if (!targetPermissions.length) {\n targetPermissions = permissionsList.filter(\n (permission) =>\n permission.target.toLowerCase() === zeroAddress.toLowerCase()\n );\n }\n\n if (!targetPermissions.length) return undefined;\n\n const operationPermissions = this.filterByOperation(\n targetPermissions,\n args[3]\n );\n\n if (!operationPermissions.length) return undefined;\n\n const signaturePermissions = this.filterBySignature(\n operationPermissions,\n args[2].slice(0, 10).toLowerCase()\n );\n\n const valueLimitPermissions = signaturePermissions.filter(\n (permission) => permission.valueLimit >= args[1]\n );\n\n if (!valueLimitPermissions.length) return undefined;\n\n const sortedPermissions = valueLimitPermissions.sort((a, b) => {\n if (b.valueLimit > a.valueLimit) {\n return 1;\n } else if (b.valueLimit < a.valueLimit) {\n return -1;\n } else {\n return 0;\n }\n });\n\n return this.findPermissionByRule(sortedPermissions, args[2]);\n } catch (error) {\n return undefined;\n }\n }\n\n private filterByOperation(\n permissions: Permission[],\n operation: Operation\n ): Permission[] {\n return permissions.filter(\n (permission) => permission.operation === operation\n );\n }\n\n private filterBySignature(\n permissions: Permission[],\n signature: string\n ): Permission[] {\n return permissions.filter(\n (permission) => permission.sig.toLowerCase() === signature\n );\n }\n\n private findPermissionByRule(\n permissions: Permission[],\n data: string\n ): Permission | undefined {\n return permissions.find((permission) => {\n for (const rule of permission.rules) {\n const dataParam: Hex = this.getFormattedHex(\n \"0x\" + data.slice(10 + rule.offset * 2, 10 + rule.offset * 2 + 64)\n );\n const ruleParam: Hex = this.getFormattedHex(rule.param);\n\n if (!this.evaluateRuleCondition(dataParam, ruleParam, rule.condition)) {\n return false;\n }\n }\n return true;\n });\n }\n\n private getFormattedHex(value: string): Hex {\n return pad(isHex(value) ? value : toHex(value), {\n size: 32,\n }).toLowerCase() as Hex;\n }\n\n private evaluateRuleCondition(\n dataParam: Hex,\n ruleParam: Hex,\n condition: ParamCondition\n ): boolean {\n switch (condition) {\n case ParamCondition.EQUAL:\n return dataParam === ruleParam;\n case ParamCondition.GREATER_THAN:\n return dataParam > ruleParam;\n case ParamCondition.LESS_THAN:\n return dataParam < ruleParam;\n case ParamCondition.GREATER_THAN_OR_EQUAL:\n return dataParam >= ruleParam;\n case ParamCondition.LESS_THAN_OR_EQUAL:\n return dataParam <= ruleParam;\n case ParamCondition.NOT_EQUAL:\n return dataParam !== ruleParam;\n default:\n return false;\n }\n }\n\n getMerkleTree(): MerkleTree {\n const permissionPacked = this.sessionKeyData.permissions?.map(\n (permission) => this.encodePermissionData(permission)\n );\n\n // Having one leaf returns empty array in getProof(). To hack it we push the leaf twice\n // issue - https://github.com/merkletreejs/merkletreejs/issues/58\n if (permissionPacked?.length === 1)\n permissionPacked.push(permissionPacked[0]);\n\n return permissionPacked && permissionPacked.length !== 0\n ? new MerkleTree(permissionPacked, keccak256, {\n sortPairs: true,\n hashLeaves: true,\n })\n : new MerkleTree([pad(\"0x00\", { size: 32 })], keccak256, {\n hashLeaves: false,\n });\n }\n\n encodePermissionData(permission: Permission, merkleProof?: string[]): Hex {\n let permissionParam = {\n components: [\n {\n name: \"target\",\n type: \"address\",\n },\n {\n name: \"valueLimit\",\n type: \"uint256\",\n },\n {\n name: \"sig\",\n type: \"bytes4\",\n },\n {\n components: [\n {\n name: \"offset\",\n type: \"uint256\",\n },\n {\n internalType: \"enum ParamCondition\",\n name: \"condition\",\n type: \"uint8\",\n },\n {\n name: \"param\",\n type: \"bytes32\",\n },\n ],\n name: \"rules\",\n type: \"tuple[]\",\n },\n {\n internalType: \"enum Operation\",\n name: \"operation\",\n type: \"uint8\",\n },\n ],\n name: \"permission\",\n type: \"tuple\",\n };\n let params;\n let values;\n if (merkleProof) {\n params = [\n permissionParam,\n {\n name: \"merkleProof\",\n type: \"bytes32[]\",\n },\n ];\n values = [permission, merkleProof];\n } else {\n params = [permissionParam];\n values = [permission];\n }\n return encodeAbiParameters(params, values);\n }\n\n getSessionData(): SessionKeyParams {\n if (!this.selector || !this.executor) {\n throw Error(\"Plugin Validator data params uninitialised\");\n }\n return {\n selector: this.selector,\n executor: this.executor,\n validUntil: this.validUntil,\n validAfter: this.validAfter,\n sessionKeyData: this.sessionKeyData,\n enableSignature: this.enableSignature,\n };\n }\n\n async signer(): Promise<SmartAccountSigner> {\n return await Promise.resolve(this.sessionKey);\n }\n\n async getEnableData(): Promise<Hex> {\n if (!this.merkleTree) {\n throw Error(\"SessionKeyValidator: MerkleTree not generated\");\n }\n return concat([\n await this.sessionKey.getAddress(),\n pad(this.merkleTree.getHexRoot() as Hex, { size: 32 }),\n pad(toHex(this.sessionKeyData.validAfter), { size: 6 }),\n pad(toHex(this.sessionKeyData.validUntil), { size: 6 }),\n this.sessionKeyData.paymaster!,\n ]);\n }\n\n async isPluginEnabled(\n kernelAccountAddress: Address,\n selector: Hex\n ): Promise<boolean> {\n if (!this.publicClient) {\n throw new Error(\"Validator uninitialized: PublicClient missing\");\n }\n const execDetail = await this.publicClient.readContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n functionName: \"getExecution\",\n args: [selector],\n });\n const enableData = await this.publicClient.readContract({\n abi: SessionKeyValidatorAbi,\n address: this.validatorAddress,\n functionName: \"sessionData\",\n args: [await this.sessionKey.getAddress(), kernelAccountAddress],\n });\n const enableDataHex = concatHex([\n await this.sessionKey.getAddress(),\n pad(enableData[0], { size: 4 }),\n pad(toHex(enableData[1]), { size: 6 }),\n pad(toHex(enableData[2]), { size: 6 }),\n enableData[3],\n ]);\n return (\n execDetail.validator.toLowerCase() ===\n this.validatorAddress.toLowerCase() &&\n enableData[4] &&\n enableDataHex.toLowerCase() === (await this.getEnableData()).toLowerCase()\n );\n }\n\n async getDummyUserOpSignature(callData: Hex): Promise<Hex> {\n const matchingPermission = this.findMatchingPermission(callData);\n if (!matchingPermission && !this.shouldDelegateViaFallback()) {\n throw Error(\n \"SessionKeyValidator: No matching permission found for the userOp\"\n );\n }\n const encodedPermissionData =\n this.sessionKeyData.permissions &&\n this.sessionKeyData.permissions.length !== 0 &&\n matchingPermission\n ? this.encodePermissionData(matchingPermission)\n : \"0x\";\n const merkleProof = this.merkleTree.getHexProof(\n keccak256(encodedPermissionData)\n );\n const encodedData =\n this.sessionKeyData.permissions &&\n this.sessionKeyData.permissions.length !== 0 &&\n matchingPermission\n ? this.encodePermissionData(matchingPermission, merkleProof)\n : \"0x\";\n return concatHex([\n await this.sessionKey.getAddress(),\n DUMMY_ECDSA_SIG,\n encodedData,\n ]);\n }\n\n encodeEnable(sessionKeyEnableData: Hex): Hex {\n return encodeFunctionData({\n abi: SessionKeyValidatorAbi,\n functionName: \"enable\",\n args: [sessionKeyEnableData],\n });\n }\n\n encodeDisable(sessionKey: Hex): Hex {\n return encodeFunctionData({\n abi: SessionKeyValidatorAbi,\n functionName: \"disable\",\n args: [sessionKey],\n });\n }\n\n async signMessage(message: string | Uint8Array): Promise<Hex> {\n return await this.sessionKey.signMessage(message);\n }\n\n async signTypedData(params: SignTypedDataParams): Promise<Hex> {\n return fixSignedData(await this.sessionKey.signTypedData(params));\n }\n\n async signUserOp(userOp: UserOperationRequest): Promise<Hex> {\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n const hash = getUserOperationHash(\n {\n ...userOp,\n signature: \"0x\",\n },\n this.entryPointAddress,\n BigInt(this.chain.id)\n );\n const formattedMessage = typeof hash === \"string\" ? toBytes(hash) : hash;\n\n const matchingPermission = this.findMatchingPermission(userOp.callData);\n if (!matchingPermission && !this.shouldDelegateViaFallback()) {\n throw Error(\n \"SessionKeyValidator: No matching permission found for the userOp\"\n );\n }\n const encodedPermissionData =\n this.sessionKeyData.permissions &&\n this.sessionKeyData.permissions.length !== 0 &&\n matchingPermission\n ? this.encodePermissionData(matchingPermission)\n : \"0x\";\n const merkleProof = this.merkleTree.getHexProof(\n keccak256(encodedPermissionData)\n );\n const encodedData =\n this.sessionKeyData.permissions &&\n this.sessionKeyData.permissions.length !== 0 &&\n matchingPermission\n ? this.encodePermissionData(matchingPermission, merkleProof)\n : \"0x\";\n const signature = concat([\n await this.sessionKey.getAddress(),\n await this.sessionKey.signMessage(formattedMessage),\n encodedData,\n ]);\n return signature;\n }\n}\n"]}
1
+ {"version":3,"file":"session-key-validator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/session-key-validator.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getUserOperationHash,\n type Address,\n type Hex,\n type SmartAccountSigner,\n type UserOperationRequest,\n getChain,\n type SignTypedDataParams,\n} from \"@alchemy/aa-core\";\nimport {\n KernelBaseValidator,\n ValidatorMode,\n type KernelBaseValidatorParams,\n type ValidatorPluginData,\n} from \"./base.js\";\nimport {\n encodeFunctionData,\n toBytes,\n concat,\n pad,\n toHex,\n keccak256,\n encodeAbiParameters,\n concatHex,\n zeroAddress,\n decodeFunctionData,\n isHex,\n getFunctionSelector,\n} from \"viem\";\nimport { SessionKeyValidatorAbi } from \"../abis/SessionKeyValidatorAbi.js\";\nimport { DUMMY_ECDSA_SIG } from \"../constants.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { MerkleTree } from \"merkletreejs\";\nimport type { Operation } from \"../provider.js\";\nimport { getChainId } from \"../api/index.js\";\nimport { fixSignedData } from \"../utils.js\";\n\n// We need to be able to serialize bigint to transmit session key over\n// the network.\n// Using this trick: https://github.com/GoogleChromeLabs/jsbi/issues/30#issuecomment-1006086291\n(BigInt.prototype as any).toJSON = function () {\n return this.toString();\n};\n\nexport interface SessionKeyValidatorParams extends KernelBaseValidatorParams {\n sessionKey: SmartAccountSigner;\n sessionKeyData: SessionKeyData;\n}\n\nexport type SessionKeyParams = Pick<\n SessionKeyValidatorParams,\n \"sessionKeyData\" | \"enableSignature\"\n> &\n ValidatorPluginData & {\n sessionPrivateKey?: Hex;\n initCode?: Hex;\n accountAddress?: Address;\n };\n\nexport enum ParamCondition {\n EQUAL = 0,\n GREATER_THAN = 1,\n LESS_THAN = 2,\n GREATER_THAN_OR_EQUAL = 3,\n LESS_THAN_OR_EQUAL = 4,\n NOT_EQUAL = 5,\n}\n\nexport interface ParamRules {\n offset: number;\n condition: ParamCondition;\n param: Hex;\n}\n\nexport interface Permission {\n target: Address;\n valueLimit: bigint;\n sig: Hex;\n rules: ParamRules[];\n operation: Operation;\n}\n\nexport interface SessionKeyData {\n validUntil: number;\n validAfter: number;\n paymaster?: Address;\n permissions?: Permission[];\n}\n\nexport class SessionKeyValidator extends KernelBaseValidator {\n protected sessionKey: SmartAccountSigner;\n sessionKeyData: SessionKeyData;\n merkleTree: MerkleTree;\n\n constructor(params: SessionKeyValidatorParams) {\n super(params);\n this.sessionKey = params.sessionKey;\n this.sessionKeyData = {\n ...params.sessionKeyData,\n paymaster: params.sessionKeyData.paymaster ?? zeroAddress,\n };\n this.merkleTree = this.getMerkleTree();\n if (this.shouldDelegateViaFallback()) {\n throw Error(\"Session key permissions not set\");\n }\n this.selector =\n params.selector ??\n getFunctionSelector(\"execute(address, uint256, bytes, uint8)\");\n this.executor = params.executor ?? zeroAddress;\n this.mode = params.mode ?? ValidatorMode.plugin;\n }\n\n public static async init(\n params: SessionKeyValidatorParams\n ): Promise<SessionKeyValidator> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n const instance = new SessionKeyValidator({ ...params, chain });\n return instance;\n }\n\n shouldDelegateViaFallback(): boolean {\n return this.merkleTree.getHexRoot() === pad(\"0x00\", { size: 32 });\n }\n\n findMatchingPermission(callData: Hex): Permission | undefined {\n try {\n const { functionName, args } = decodeFunctionData({\n abi: KernelAccountAbi,\n data: callData,\n });\n\n if (functionName !== \"execute\") return undefined;\n\n const permissionsList = this.sessionKeyData.permissions;\n if (!permissionsList || !permissionsList.length) return undefined;\n\n const targetToMatch = args[0].toLowerCase();\n\n // Filter permissions by target\n let targetPermissions = permissionsList.filter(\n (permission) => permission.target.toLowerCase() === targetToMatch\n );\n\n // If no permissions match the exact target, check for generic permissions (using zero address)\n if (!targetPermissions.length) {\n targetPermissions = permissionsList.filter(\n (permission) =>\n permission.target.toLowerCase() === zeroAddress.toLowerCase()\n );\n }\n\n if (!targetPermissions.length) return undefined;\n\n const operationPermissions = this.filterByOperation(\n targetPermissions,\n args[3]\n );\n\n if (!operationPermissions.length) return undefined;\n\n const signaturePermissions = this.filterBySignature(\n operationPermissions,\n args[2].slice(0, 10).toLowerCase()\n );\n\n const valueLimitPermissions = signaturePermissions.filter(\n (permission) => permission.valueLimit >= args[1]\n );\n\n if (!valueLimitPermissions.length) return undefined;\n\n const sortedPermissions = valueLimitPermissions.sort((a, b) => {\n if (b.valueLimit > a.valueLimit) {\n return 1;\n } else if (b.valueLimit < a.valueLimit) {\n return -1;\n } else {\n return 0;\n }\n });\n\n return this.findPermissionByRule(sortedPermissions, args[2]);\n } catch (error) {\n return undefined;\n }\n }\n\n private filterByOperation(\n permissions: Permission[],\n operation: Operation\n ): Permission[] {\n return permissions.filter(\n (permission) => permission.operation === operation\n );\n }\n\n private filterBySignature(\n permissions: Permission[],\n signature: string\n ): Permission[] {\n return permissions.filter(\n (permission) => permission.sig.toLowerCase() === signature\n );\n }\n\n private findPermissionByRule(\n permissions: Permission[],\n data: string\n ): Permission | undefined {\n return permissions.find((permission) => {\n for (const rule of permission.rules) {\n const dataParam: Hex = this.getFormattedHex(\n \"0x\" + data.slice(10 + rule.offset * 2, 10 + rule.offset * 2 + 64)\n );\n const ruleParam: Hex = this.getFormattedHex(rule.param);\n\n if (!this.evaluateRuleCondition(dataParam, ruleParam, rule.condition)) {\n return false;\n }\n }\n return true;\n });\n }\n\n private getFormattedHex(value: string): Hex {\n return pad(isHex(value) ? value : toHex(value), {\n size: 32,\n }).toLowerCase() as Hex;\n }\n\n private evaluateRuleCondition(\n dataParam: Hex,\n ruleParam: Hex,\n condition: ParamCondition\n ): boolean {\n switch (condition) {\n case ParamCondition.EQUAL:\n return dataParam === ruleParam;\n case ParamCondition.GREATER_THAN:\n return dataParam > ruleParam;\n case ParamCondition.LESS_THAN:\n return dataParam < ruleParam;\n case ParamCondition.GREATER_THAN_OR_EQUAL:\n return dataParam >= ruleParam;\n case ParamCondition.LESS_THAN_OR_EQUAL:\n return dataParam <= ruleParam;\n case ParamCondition.NOT_EQUAL:\n return dataParam !== ruleParam;\n default:\n return false;\n }\n }\n\n getMerkleTree(): MerkleTree {\n const permissionPacked = this.sessionKeyData.permissions?.map(\n (permission) => this.encodePermissionData(permission)\n );\n\n // Having one leaf returns empty array in getProof(). To hack it we push the leaf twice\n // issue - https://github.com/merkletreejs/merkletreejs/issues/58\n if (permissionPacked?.length === 1)\n permissionPacked.push(permissionPacked[0]);\n\n return permissionPacked && permissionPacked.length !== 0\n ? new MerkleTree(permissionPacked, keccak256, {\n sortPairs: true,\n hashLeaves: true,\n })\n : new MerkleTree([pad(\"0x00\", { size: 32 })], keccak256, {\n hashLeaves: false,\n });\n }\n\n encodePermissionData(permission: Permission, merkleProof?: string[]): Hex {\n let permissionParam = {\n components: [\n {\n name: \"target\",\n type: \"address\",\n },\n {\n name: \"valueLimit\",\n type: \"uint256\",\n },\n {\n name: \"sig\",\n type: \"bytes4\",\n },\n {\n components: [\n {\n name: \"offset\",\n type: \"uint256\",\n },\n {\n internalType: \"enum ParamCondition\",\n name: \"condition\",\n type: \"uint8\",\n },\n {\n name: \"param\",\n type: \"bytes32\",\n },\n ],\n name: \"rules\",\n type: \"tuple[]\",\n },\n {\n internalType: \"enum Operation\",\n name: \"operation\",\n type: \"uint8\",\n },\n ],\n name: \"permission\",\n type: \"tuple\",\n };\n let params;\n let values;\n if (merkleProof) {\n params = [\n permissionParam,\n {\n name: \"merkleProof\",\n type: \"bytes32[]\",\n },\n ];\n values = [permission, merkleProof];\n } else {\n params = [permissionParam];\n values = [permission];\n }\n return encodeAbiParameters(params, values);\n }\n\n getSessionData(): SessionKeyParams {\n if (!this.selector || !this.executor) {\n throw Error(\"Plugin Validator data params uninitialised\");\n }\n return {\n selector: this.selector,\n executor: this.executor,\n validUntil: this.validUntil,\n validAfter: this.validAfter,\n sessionKeyData: this.sessionKeyData,\n enableSignature: this.enableSignature,\n };\n }\n\n async signer(): Promise<SmartAccountSigner> {\n return await Promise.resolve(this.sessionKey);\n }\n\n async getEnableData(): Promise<Hex> {\n if (!this.merkleTree) {\n throw Error(\"SessionKeyValidator: MerkleTree not generated\");\n }\n return concat([\n await this.sessionKey.getAddress(),\n pad(this.merkleTree.getHexRoot() as Hex, { size: 32 }),\n pad(toHex(this.sessionKeyData.validAfter), { size: 6 }),\n pad(toHex(this.sessionKeyData.validUntil), { size: 6 }),\n this.sessionKeyData.paymaster!,\n ]);\n }\n\n async isPluginEnabled(\n kernelAccountAddress: Address,\n selector: Hex\n ): Promise<boolean> {\n if (!this.publicClient) {\n throw new Error(\"Validator uninitialized: PublicClient missing\");\n }\n const execDetail = await this.publicClient.readContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n functionName: \"getExecution\",\n args: [selector],\n });\n const enableData = await this.publicClient.readContract({\n abi: SessionKeyValidatorAbi,\n address: this.validatorAddress,\n functionName: \"sessionData\",\n args: [await this.sessionKey.getAddress(), kernelAccountAddress],\n });\n const enableDataHex = concatHex([\n await this.sessionKey.getAddress(),\n pad(enableData[0], { size: 4 }),\n pad(toHex(enableData[1]), { size: 6 }),\n pad(toHex(enableData[2]), { size: 6 }),\n enableData[3],\n ]);\n return (\n execDetail.validator.toLowerCase() ===\n this.validatorAddress.toLowerCase() &&\n enableData[4] &&\n enableDataHex.toLowerCase() === (await this.getEnableData()).toLowerCase()\n );\n }\n\n async getDummyUserOpSignature(callData: Hex): Promise<Hex> {\n const matchingPermission = this.findMatchingPermission(callData);\n if (!matchingPermission && !this.shouldDelegateViaFallback()) {\n throw Error(\n \"SessionKeyValidator: No matching permission found for the userOp\"\n );\n }\n const encodedPermissionData =\n this.sessionKeyData.permissions &&\n this.sessionKeyData.permissions.length !== 0 &&\n matchingPermission\n ? this.encodePermissionData(matchingPermission)\n : \"0x\";\n const merkleProof = this.merkleTree.getHexProof(\n keccak256(encodedPermissionData)\n );\n const encodedData =\n this.sessionKeyData.permissions &&\n this.sessionKeyData.permissions.length !== 0 &&\n matchingPermission\n ? this.encodePermissionData(matchingPermission, merkleProof)\n : \"0x\";\n return concatHex([\n await this.sessionKey.getAddress(),\n DUMMY_ECDSA_SIG,\n encodedData,\n ]);\n }\n\n encodeEnable(sessionKeyEnableData: Hex): Hex {\n return encodeFunctionData({\n abi: SessionKeyValidatorAbi,\n functionName: \"enable\",\n args: [sessionKeyEnableData],\n });\n }\n\n encodeDisable(sessionKey: Hex): Hex {\n return encodeFunctionData({\n abi: SessionKeyValidatorAbi,\n functionName: \"disable\",\n args: [sessionKey],\n });\n }\n\n async signMessage(message: string | Uint8Array): Promise<Hex> {\n return await this.sessionKey.signMessage(message);\n }\n\n async signTypedData(params: SignTypedDataParams): Promise<Hex> {\n return fixSignedData(await this.sessionKey.signTypedData(params));\n }\n\n async signUserOp(userOp: UserOperationRequest): Promise<Hex> {\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n const hash = getUserOperationHash(\n {\n ...userOp,\n signature: \"0x\",\n },\n this.entryPointAddress,\n BigInt(this.chain.id)\n );\n const formattedMessage = typeof hash === \"string\" ? toBytes(hash) : hash;\n\n const matchingPermission = this.findMatchingPermission(userOp.callData);\n if (!matchingPermission && !this.shouldDelegateViaFallback()) {\n throw Error(\n \"SessionKeyValidator: No matching permission found for the userOp\"\n );\n }\n const encodedPermissionData =\n this.sessionKeyData.permissions &&\n this.sessionKeyData.permissions.length !== 0 &&\n matchingPermission\n ? this.encodePermissionData(matchingPermission)\n : \"0x\";\n const merkleProof = this.merkleTree.getHexProof(\n keccak256(encodedPermissionData)\n );\n const encodedData =\n this.sessionKeyData.permissions &&\n this.sessionKeyData.permissions.length !== 0 &&\n matchingPermission\n ? this.encodePermissionData(matchingPermission, merkleProof)\n : \"0x\";\n const signature = concat([\n await this.sessionKey.getAddress(),\n await this.sessionKey.signMessage(formattedMessage),\n encodedData,\n ]);\n return signature;\n }\n}\n"]}
@@ -36,7 +36,7 @@ export declare class KernelSmartContractAccount<TTransport extends Transport | F
36
36
  encodeBatchExecute(_txs: BatchUserOperationCallData): Promise<`0x${string}`>;
37
37
  encodeExecuteDelegate(target: Hex, value: bigint, data: Hex): Promise<Hex>;
38
38
  encodeSetExection(): Promise<`0x${string}`>;
39
- signWithEip6492(msg: string | Uint8Array): Promise<Hex>;
39
+ signMessageWith6492(msg: string | Uint8Array): Promise<Hex>;
40
40
  signMessage(msg: Uint8Array | string): Promise<Hex>;
41
41
  signTypedData(params: SignTypedDataParams): Promise<Hex>;
42
42
  signUserOp(userOp: UserOperationRequest): Promise<Hex>;
@@ -1 +1 @@
1
- {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../src/kernel-zerodev/account.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../src/kernel-zerodev/account.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAIL,KAAK,iBAAiB,EAEtB,KAAK,GAAG,EAER,KAAK,SAAS,EACf,MAAM,MAAM,CAAC;AAEd,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG1D,OAAO,EACL,KAAK,sBAAsB,EAC3B,wBAAwB,EACxB,KAAK,0BAA0B,EAC/B,KAAK,oBAAoB,EAGzB,KAAK,mBAAmB,EACzB,MAAM,kBAAkB,CAAC;AAa1B,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AAEzE,oBAAY,eAAe;IACzB,SAAS,QAAQ;IACjB,YAAY,QAAQ;IACpB,QAAQ,QAAQ;CACjB;AACD,MAAM,WAAW,wBAAwB,CACvC,UAAU,SAAS,SAAS,GAAG,iBAAiB,GAAG,SAAS,CAC5D,SAAQ,OAAO,CAAC,sBAAsB,CAAC,UAAU,CAAC,CAAC;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,eAAe,CAAC,EAAE,4BAA4B,CAAC;IAC/C,gBAAgB,CAAC,EAAE,mBAAmB,CAAC;IACvC,QAAQ,CAAC,EAAE,GAAG,CAAC;CAChB;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,GAAG,GACX,OAAO,IAAI,0BAA0B,CAEvC;AAED,qBAAa,0BAA0B,CACrC,UAAU,SAAS,SAAS,GAAG,iBAAiB,GAAG,SAAS,CAC5D,SAAQ,wBAAwB,CAAC,UAAU,CAAC;IAC5C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAU;IACzC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,CAAM;IACvB,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,gBAAgB,CAAC,EAAE,mBAAmB,CAAC;gBAE3B,MAAM,EAAE,wBAAwB;WAcxB,IAAI,CACtB,MAAM,EAAE,wBAAwB,GAC/B,OAAO,CAAC,0BAA0B,CAAC;IAuBtC,gBAAgB,CAAC,SAAS,EAAE,mBAAmB,GAAG,IAAI;IAKtD,YAAY,IAAI,mBAAmB;IAOnC,iBAAiB,IAAI,GAAG;IAIlB,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC;IAkBjC,QAAQ,IAAI,MAAM;IAIZ,aAAa;IAmBb,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAclE,kBAAkB,CACtB,IAAI,EAAE,0BAA0B,GAC/B,OAAO,CAAC,KAAK,MAAM,EAAE,CAAC;IAanB,qBAAqB,CACzB,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,GAAG,GACR,OAAO,CAAC,GAAG,CAAC;IAIT,iBAAiB;IAqBjB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC;IAyB3D,WAAW,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAQnD,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC;IAO9D,UAAU,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,GAAG,CAAC;IAOtD,SAAS,CAAC,mBAAmB,CAC3B,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,GAAG,EACT,IAAI,EAAE,MAAM,GACX,GAAG;cAOU,kBAAkB,IAAI,OAAO,CAAC,GAAG,CAAC;IAI5C,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;cAYjB,kBAAkB,IAAI,OAAO,CAAC,GAAG,CAAC;CAwBnD"}
@@ -4,6 +4,7 @@ import type { Deferrable } from "@ethersproject/properties";
4
4
  import { type TransactionRequest, type TransactionResponse } from "@ethersproject/providers";
5
5
  import { ZeroDevEthersProvider } from "./ethers-provider.js";
6
6
  import type { SupportedValidators } from "../validator/types.js";
7
+ import type { Hex } from "viem";
7
8
  export declare class ZeroDevAccountSigner<V extends SupportedValidators> extends Signer implements TypedDataSigner {
8
9
  readonly provider: ZeroDevEthersProvider<V>;
9
10
  private account?;
@@ -14,6 +15,7 @@ export declare class ZeroDevAccountSigner<V extends SupportedValidators> extends
14
15
  signMessage(message: string | Uint8Array): Promise<string>;
15
16
  signTypedData(params: SignTypedDataParams): Promise<string>;
16
17
  _signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): Promise<string>;
18
+ signMessageWith6492(_msg: string | Uint8Array): Promise<Hex>;
17
19
  withPaymasterMiddleware: (overrides: {
18
20
  dummyPaymasterDataMiddleware?: PaymasterAndDataMiddleware;
19
21
  paymasterDataMiddleware?: PaymasterAndDataMiddleware;
@@ -1 +1 @@
1
- {"version":3,"file":"account-signer.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/ethers-provider/account-signer.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAC/B,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,MAAM,EACN,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAWjE,qBAAa,oBAAoB,CAAC,CAAC,SAAS,mBAAmB,CAC7D,SAAQ,MACR,YAAW,eAAe;IAOd,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC,CAAC;IALvD,OAAO,CAAC,OAAO,CAAC,CAA6B;IAE7C,iBAAiB,i8EAAC;IAClB,+BAA+B,kDAAC;gBAEX,QAAQ,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAcvD,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAU7B,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAU1D,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC;IAa3D,cAAc,CACZ,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,EAC5C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACzB,OAAO,CAAC,MAAM,CAAC;IAkBlB,uBAAuB,cAAe;QACpC,4BAA4B,CAAC,EAAE,0BAA0B,CAAC;QAC1D,uBAAuB,CAAC,EAAE,0BAA0B,CAAC;KACtD,KAAG,IAAI,CAGN;IAEF,gBAAgB,aAAc,sBAAsB,KAAG,IAAI,CAGzD;IAEF,iBAAiB,aAAc,iBAAiB,KAAG,IAAI,CAGrD;IAEF,oBAAoB,aAAc,mBAAmB,KAAG,IAAI,CAG1D;IAEI,eAAe,CACnB,WAAW,EAAE,UAAU,CAAC,kBAAkB,CAAC,GAC1C,OAAO,CAAC,mBAAmB,CAAC;IAY/B,eAAe,CACb,YAAY,EAAE,UAAU,CAAC,kBAAkB,CAAC,GAC3C,OAAO,CAAC,MAAM,CAAC;IAMlB,sBAAsB,IAAI,mBAAmB;IAI7C,OAAO,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC;CAGrE"}
1
+ {"version":3,"file":"account-signer.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/ethers-provider/account-signer.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAC/B,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,MAAM,EACN,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACzB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAEjE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAUhC,qBAAa,oBAAoB,CAAC,CAAC,SAAS,mBAAmB,CAC7D,SAAQ,MACR,YAAW,eAAe;IAOd,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC,CAAC;IALvD,OAAO,CAAC,OAAO,CAAC,CAA6B;IAE7C,iBAAiB,i8EAAC;IAClB,+BAA+B,kDAAC;gBAEX,QAAQ,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAcvD,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAU7B,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAU1D,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC;IAa3D,cAAc,CACZ,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,EAC5C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACzB,OAAO,CAAC,MAAM,CAAC;IAkBZ,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC;IASlE,uBAAuB,cAAe;QACpC,4BAA4B,CAAC,EAAE,0BAA0B,CAAC;QAC1D,uBAAuB,CAAC,EAAE,0BAA0B,CAAC;KACtD,KAAG,IAAI,CAGN;IAEF,gBAAgB,aAAc,sBAAsB,KAAG,IAAI,CAGzD;IAEF,iBAAiB,aAAc,iBAAiB,KAAG,IAAI,CAGrD;IAEF,oBAAoB,aAAc,mBAAmB,KAAG,IAAI,CAG1D;IAEI,eAAe,CACnB,WAAW,EAAE,UAAU,CAAC,kBAAkB,CAAC,GAC1C,OAAO,CAAC,mBAAmB,CAAC;IAY/B,eAAe,CACb,YAAY,EAAE,UAAU,CAAC,kBAAkB,CAAC,GAC3C,OAAO,CAAC,MAAM,CAAC;IAMlB,sBAAsB,IAAI,mBAAmB;IAI7C,OAAO,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC;CAGrE"}
@@ -1 +1 @@
1
- {"version":3,"file":"session-key-validator.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/session-key-validator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-key-validator.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/session-key-validator.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zerodev/sdk",
3
- "version": "4.0.20",
3
+ "version": "4.0.22",
4
4
  "description": "A collection of ERC-4337 compliant smart contract account interfaces",
5
5
  "author": "ZeroDev",
6
6
  "license": "MIT",
@@ -222,7 +222,7 @@ export class KernelSmartContractAccount<
222
222
  });
223
223
  }
224
224
 
225
- async signWithEip6492(msg: string | Uint8Array): Promise<Hex> {
225
+ async signMessageWith6492(msg: string | Uint8Array): Promise<Hex> {
226
226
  try {
227
227
  if (!this.validator) {
228
228
  throw new Error("Validator not connected");
@@ -23,6 +23,7 @@ import {
23
23
  import { ZeroDevEthersProvider } from "./ethers-provider.js";
24
24
  import type { SupportedValidators } from "../validator/types.js";
25
25
  import type { KernelSmartContractAccount } from "../account.js";
26
+ import type { Hex } from "viem";
26
27
 
27
28
  const hexlifyOptional = (value: any): `0x${string}` | undefined => {
28
29
  if (value == null) {
@@ -110,6 +111,15 @@ export class ZeroDevAccountSigner<V extends SupportedValidators>
110
111
  return this.signTypedData(params);
111
112
  }
112
113
 
114
+ async signMessageWith6492(_msg: string | Uint8Array): Promise<Hex> {
115
+ if (!this.account) {
116
+ throw new Error(
117
+ "connect the signer to a provider that has a connected account"
118
+ );
119
+ }
120
+ return this.account.signMessageWith6492(_msg);
121
+ }
122
+
113
123
  withPaymasterMiddleware = (overrides: {
114
124
  dummyPaymasterDataMiddleware?: PaymasterAndDataMiddleware;
115
125
  paymasterDataMiddleware?: PaymasterAndDataMiddleware;
@@ -100,6 +100,9 @@ export class SessionKeyValidator extends KernelBaseValidator {
100
100
  paymaster: params.sessionKeyData.paymaster ?? zeroAddress,
101
101
  };
102
102
  this.merkleTree = this.getMerkleTree();
103
+ if (this.shouldDelegateViaFallback()) {
104
+ throw Error("Session key permissions not set");
105
+ }
103
106
  this.selector =
104
107
  params.selector ??
105
108
  getFunctionSelector("execute(address, uint256, bytes, uint8)");