@zerodev/sdk 4.0.27 → 4.0.28

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 (29) hide show
  1. package/dist/cjs/index.js.map +1 -1
  2. package/dist/cjs/kernel-zerodev/account.d.ts +1 -0
  3. package/dist/cjs/kernel-zerodev/account.js +27 -5
  4. package/dist/cjs/kernel-zerodev/account.js.map +1 -1
  5. package/dist/cjs/kernel-zerodev/ethers-provider/account-signer.d.ts +1 -0
  6. package/dist/cjs/kernel-zerodev/ethers-provider/account-signer.js +6 -0
  7. package/dist/cjs/kernel-zerodev/ethers-provider/account-signer.js.map +1 -1
  8. package/dist/cjs/kernel-zerodev/paymaster/token-paymaster.js +3 -1
  9. package/dist/cjs/kernel-zerodev/paymaster/token-paymaster.js.map +1 -1
  10. package/dist/esm/index.js.map +1 -1
  11. package/dist/esm/kernel-zerodev/account.d.ts +1 -0
  12. package/dist/esm/kernel-zerodev/account.js +29 -7
  13. package/dist/esm/kernel-zerodev/account.js.map +1 -1
  14. package/dist/esm/kernel-zerodev/ethers-provider/account-signer.d.ts +1 -0
  15. package/dist/esm/kernel-zerodev/ethers-provider/account-signer.js +6 -0
  16. package/dist/esm/kernel-zerodev/ethers-provider/account-signer.js.map +1 -1
  17. package/dist/esm/kernel-zerodev/paymaster/token-paymaster.js +4 -2
  18. package/dist/esm/kernel-zerodev/paymaster/token-paymaster.js.map +1 -1
  19. package/dist/types/index.d.ts.map +1 -1
  20. package/dist/types/kernel-zerodev/account.d.ts +1 -0
  21. package/dist/types/kernel-zerodev/account.d.ts.map +1 -1
  22. package/dist/types/kernel-zerodev/ethers-provider/account-signer.d.ts +1 -0
  23. package/dist/types/kernel-zerodev/ethers-provider/account-signer.d.ts.map +1 -1
  24. package/dist/types/kernel-zerodev/paymaster/token-paymaster.d.ts.map +1 -1
  25. package/package.json +1 -1
  26. package/src/index.ts +1 -0
  27. package/src/kernel-zerodev/account.ts +30 -9
  28. package/src/kernel-zerodev/ethers-provider/account-signer.ts +9 -0
  29. package/src/kernel-zerodev/paymaster/token-paymaster.ts +12 -2
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,iEAA+C;AAG/C,8DAG4C;AAF1C,wGAAA,aAAa,OAAA;AACb,8GAAA,mBAAmB,OAAA;AAErB,sEAAoD;AAGpD,gGAAqF;AAA5E,0HAAA,cAAc,OAAA;AAGvB,uEAAgF;AAAvE,4GAAA,iBAAiB,OAAA;AAO1B,+EAA6D;AAI7D,0DAAyE;AAAhE,wHAAA,0BAA0B,OAAA;AAEnC,4DAA0E;AAAjE,8GAAA,eAAe,OAAA;AAAE,wGAAA,SAAS,OAAA;AAGnC,4DAA0C;AAC1C,0DAA2D;AAAlD,sGAAA,UAAU,OAAA;AACnB,0FAA4F;AAAnF,2HAAA,qBAAqB,OAAA;AAC9B,wFAA0F;AAAjF,yHAAA,oBAAoB,OAAA;AAC7B,6EAA8E;AAArE,sHAAA,kBAAkB,OAAA;AAE3B,2EAA2D;AAG3D,kEAAgD","sourcesContent":["// Add you exports here, make sure to export types separately from impls and use the `type` keyword when exporting them\n// Don't use wildcard exports, instead use named exports\n\n//kernel exports\nexport * from \"./kernel-zerodev/abis/index.js\";\n\n// Validator exports\nexport {\n ValidatorMode,\n KernelBaseValidator,\n} from \"./kernel-zerodev/validator/base.js\";\nexport * from \"./kernel-zerodev/validator/index.js\";\nexport type * from \"./kernel-zerodev/validator/types.js\";\nexport type { KernelBaseValidatorParams } from \"./kernel-zerodev/validator/base.js\";\nexport { ParamCondition } from \"./kernel-zerodev/validator/session-key-validator.js\";\n\n// Validator Provider exports\nexport { ValidatorProvider } from \"./kernel-zerodev/validator-provider/base.js\";\nexport type {\n ValidatorProviderParams,\n ValidatorProviderParamsOpts,\n ExtendedValidatorProviderParams,\n} from \"./kernel-zerodev/validator-provider/base.js\";\nexport type * from \"./kernel-zerodev/validator-provider/types.js\";\nexport * from \"./kernel-zerodev/validator-provider/index.js\";\n\n// Core exports\nexport type * from \"./kernel-zerodev/paymaster/types.js\";\nexport { KernelSmartContractAccount } from \"./kernel-zerodev/account.js\";\nexport type { KernelSmartAccountParams } from \"./kernel-zerodev/account.js\";\nexport { ZeroDevProvider, Operation } from \"./kernel-zerodev/provider.js\";\n\n// Utils exports\nexport * from \"./kernel-zerodev/utils.js\";\nexport { getChainId } from \"./kernel-zerodev/api/index.js\";\nexport { ZeroDevEthersProvider } from \"./kernel-zerodev/ethers-provider/ethers-provider.js\";\nexport { ZeroDevAccountSigner } from \"./kernel-zerodev/ethers-provider/account-signer.js\";\nexport { EmptyAccountSigner } from \"./kernel-zerodev/signer/empty-account.js\";\n\nexport * as constants from \"./kernel-zerodev/constants.js\";\n\n// Owner exports\nexport * from \"./kernel-zerodev/owner/index.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,iEAA+C;AAG/C,8DAG4C;AAF1C,wGAAA,aAAa,OAAA;AACb,8GAAA,mBAAmB,OAAA;AAErB,sEAAoD;AAGpD,gGAAqF;AAA5E,0HAAA,cAAc,OAAA;AAGvB,uEAAgF;AAAvE,4GAAA,iBAAiB,OAAA;AAO1B,+EAA6D;AAI7D,0DAAyE;AAAhE,wHAAA,0BAA0B,OAAA;AAEnC,4DAA0E;AAAjE,8GAAA,eAAe,OAAA;AAAE,wGAAA,SAAS,OAAA;AAGnC,4DAA0C;AAC1C,0DAA2D;AAAlD,sGAAA,UAAU,OAAA;AACnB,0FAA4F;AAAnF,2HAAA,qBAAqB,OAAA;AAC9B,wFAA0F;AAAjF,yHAAA,oBAAoB,OAAA;AAC7B,6EAA8E;AAArE,sHAAA,kBAAkB,OAAA;AAG3B,2EAA2D;AAG3D,kEAAgD","sourcesContent":["// Add you exports here, make sure to export types separately from impls and use the `type` keyword when exporting them\n// Don't use wildcard exports, instead use named exports\n\n//kernel exports\nexport * from \"./kernel-zerodev/abis/index.js\";\n\n// Validator exports\nexport {\n ValidatorMode,\n KernelBaseValidator,\n} from \"./kernel-zerodev/validator/base.js\";\nexport * from \"./kernel-zerodev/validator/index.js\";\nexport type * from \"./kernel-zerodev/validator/types.js\";\nexport type { KernelBaseValidatorParams } from \"./kernel-zerodev/validator/base.js\";\nexport { ParamCondition } from \"./kernel-zerodev/validator/session-key-validator.js\";\n\n// Validator Provider exports\nexport { ValidatorProvider } from \"./kernel-zerodev/validator-provider/base.js\";\nexport type {\n ValidatorProviderParams,\n ValidatorProviderParamsOpts,\n ExtendedValidatorProviderParams,\n} from \"./kernel-zerodev/validator-provider/base.js\";\nexport type * from \"./kernel-zerodev/validator-provider/types.js\";\nexport * from \"./kernel-zerodev/validator-provider/index.js\";\n\n// Core exports\nexport type * from \"./kernel-zerodev/paymaster/types.js\";\nexport { KernelSmartContractAccount } from \"./kernel-zerodev/account.js\";\nexport type { KernelSmartAccountParams } from \"./kernel-zerodev/account.js\";\nexport { ZeroDevProvider, Operation } from \"./kernel-zerodev/provider.js\";\n\n// Utils exports\nexport * from \"./kernel-zerodev/utils.js\";\nexport { getChainId } from \"./kernel-zerodev/api/index.js\";\nexport { ZeroDevEthersProvider } from \"./kernel-zerodev/ethers-provider/ethers-provider.js\";\nexport { ZeroDevAccountSigner } from \"./kernel-zerodev/ethers-provider/account-signer.js\";\nexport { EmptyAccountSigner } from \"./kernel-zerodev/signer/empty-account.js\";\n\n// Constant exports\nexport * as constants from \"./kernel-zerodev/constants.js\";\n\n// Owner exports\nexport * from \"./kernel-zerodev/owner/index.js\";\n"]}
@@ -37,6 +37,7 @@ export declare class KernelSmartContractAccount<TTransport extends Transport | F
37
37
  encodeExecuteDelegate(target: Hex, value: bigint, data: Hex): Promise<Hex>;
38
38
  encodeSetExection(): Promise<`0x${string}`>;
39
39
  signMessageWith6492(msg: string | Uint8Array): Promise<Hex>;
40
+ signTypedDataWith6492(params: SignTypedDataParams): Promise<Hex>;
40
41
  signMessage(msg: Uint8Array | string): Promise<Hex>;
41
42
  signTypedData(params: SignTypedDataParams): Promise<Hex>;
42
43
  signUserOp(userOp: UserOperationRequest): Promise<Hex>;
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.KernelSmartContractAccount = exports.isKernelAccount = exports.DeploymentState = void 0;
4
4
  const viem_1 = require("viem");
5
- const abitype_1 = require("abitype");
6
5
  const KernelAccountAbi_js_1 = require("./abis/KernelAccountAbi.js");
7
6
  const KernelFactoryAbi_js_1 = require("./abis/KernelFactoryAbi.js");
8
7
  const aa_core_1 = require("@alchemy/aa-core");
@@ -175,12 +174,35 @@ class KernelSmartContractAccount extends aa_core_1.BaseSmartContractAccount {
175
174
  throw new Error("Validator not connected");
176
175
  }
177
176
  const formattedMessage = typeof msg === "string" ? (0, viem_1.toBytes)(msg) : msg;
178
- let sig = await this.validator.signMessage((0, viem_1.toBytes)((0, viem_1.hashMessage)({ raw: formattedMessage })));
177
+ let signature = await this.validator.signMessage((0, viem_1.toBytes)((0, viem_1.hashMessage)({ raw: formattedMessage })));
179
178
  if (!(await this.isAccountDeployed())) {
180
- sig = ((0, viem_1.encodeAbiParameters)((0, abitype_1.parseAbiParameters)("address, bytes, bytes"), [this.factoryAddress, await this.getFactoryInitCode(), sig]) +
181
- "6492649264926492649264926492649264926492649264926492649264926492");
179
+ signature = (0, aa_core_1.wrapWith6492)({
180
+ factoryAddress: this.factoryAddress,
181
+ initCode: await this.getFactoryInitCode(),
182
+ signature,
183
+ });
182
184
  }
183
- return sig;
185
+ return signature;
186
+ }
187
+ catch (err) {
188
+ console.error("Got Error - ", err.message);
189
+ throw new Error("Message Signing with EIP6492 failed");
190
+ }
191
+ }
192
+ async signTypedDataWith6492(params) {
193
+ try {
194
+ if (!this.validator) {
195
+ throw new Error("Validator not connected");
196
+ }
197
+ let signature = await this.validator.signTypedData(params);
198
+ if (!(await this.isAccountDeployed())) {
199
+ signature = (0, aa_core_1.wrapWith6492)({
200
+ factoryAddress: this.factoryAddress,
201
+ initCode: await this.getFactoryInitCode(),
202
+ signature,
203
+ });
204
+ }
205
+ return signature;
184
206
  }
185
207
  catch (err) {
186
208
  console.error("Got Error - ", err.message);
@@ -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 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"]}
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 encodeFunctionData,\n type FallbackTransport,\n hashMessage,\n type Hex,\n toBytes,\n type Transport,\n} from \"viem\";\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 wrapWith6492,\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 signature = 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 signature = wrapWith6492({\n factoryAddress: this.factoryAddress,\n initCode: await this.getFactoryInitCode(),\n signature,\n });\n }\n\n return signature;\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 signTypedDataWith6492(params: SignTypedDataParams): Promise<Hex> {\n try {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n let signature = await this.validator.signTypedData(params);\n // If the account is undeployed, use ERC-6492\n if (!(await this.isAccountDeployed())) {\n signature = wrapWith6492({\n factoryAddress: this.factoryAddress,\n initCode: await this.getFactoryInitCode(),\n signature,\n });\n }\n\n return signature;\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"]}
@@ -16,6 +16,7 @@ export declare class ZeroDevAccountSigner<V extends SupportedValidators> extends
16
16
  signTypedData(params: SignTypedDataParams): Promise<string>;
17
17
  _signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): Promise<string>;
18
18
  signMessageWith6492(_msg: string | Uint8Array): Promise<Hex>;
19
+ signTypedDataWith6492(params: SignTypedDataParams): Promise<Hex>;
19
20
  withPaymasterMiddleware: (overrides: {
20
21
  dummyPaymasterDataMiddleware?: PaymasterAndDataMiddleware;
21
22
  paymasterDataMiddleware?: PaymasterAndDataMiddleware;
@@ -117,6 +117,12 @@ class ZeroDevAccountSigner extends abstract_signer_1.Signer {
117
117
  }
118
118
  return this.account.signMessageWith6492(_msg);
119
119
  }
120
+ async signTypedDataWith6492(params) {
121
+ if (!this.account) {
122
+ throw new Error("connect the signer to a provider that has a connected account");
123
+ }
124
+ return this.account.signTypedDataWith6492(params);
125
+ }
120
126
  async sendTransaction(transaction) {
121
127
  const resolved = await (0, aa_core_1.resolveProperties)(transaction);
122
128
  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\";\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"]}
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 async signTypedDataWith6492(params: SignTypedDataParams): 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.signTypedDataWith6492(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"]}
@@ -143,7 +143,9 @@ class TokenPaymaster extends base_js_1.Paymaster {
143
143
  }
144
144
  const gasTokenAddress = (0, utils_js_1.getGasTokenAddress)(this.paymasterConfig.gasToken, chainId);
145
145
  let paymasterAddress = await this.getPaymasterAddress(paymasterProvider);
146
- if (gasTokenAddress !== undefined && paymasterAddress !== undefined) {
146
+ if (gasTokenAddress !== undefined &&
147
+ paymasterAddress !== undefined &&
148
+ (0, viem_1.isAddress)(paymasterAddress)) {
147
149
  const erc20UserOp = await this.getERC20UserOp(struct, mainCall, gasTokenAddress, paymasterAddress);
148
150
  if (!erc20UserOp) {
149
151
  return struct;
@@ -1 +1 @@
1
- {"version":3,"file":"token-paymaster.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/paymaster/token-paymaster.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type PromiseOrValue,\n type BytesLike,\n type UserOperationCallData,\n type UserOperationStruct,\n} from \"@alchemy/aa-core\";\nimport axios from \"axios\";\nimport { type Hex, toHex, decodeFunctionData, encodeFunctionData } from \"viem\";\nimport { ERC20Abi } from \"../abis/ERC20Abi.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { MultiSendAbi } from \"../abis/MultiSendAbi.js\";\nimport {\n PAYMASTER_URL,\n ENTRYPOINT_ADDRESS,\n MULTISEND_ADDR,\n ERC20_APPROVAL_AMOUNT,\n} from \"../constants.js\";\nimport {\n AccountNotConnected,\n IncorrectCallDataForTokenPaymaster,\n} from \"../errors.js\";\nimport type { ZeroDevProvider } from \"../provider.js\";\nimport {\n getGasTokenAddress,\n type UserOperationCallDataWithDelegate,\n} from \"../utils.js\";\nimport { Paymaster } from \"./base.js\";\nimport {\n type PaymasterAndBundlerProviders,\n type PaymasterConfig,\n} from \"./types.js\";\nimport { getChainId } from \"../api/index.js\";\n\nexport class TokenPaymaster extends Paymaster {\n constructor(\n provider: ZeroDevProvider,\n protected paymasterConfig: PaymasterConfig<\"TOKEN_PAYMASTER\">\n ) {\n super(provider);\n }\n async getPaymasterAddress(\n paymasterProvider?: PaymasterAndBundlerProviders\n ): Promise<Hex | undefined> {\n const chainId = await getChainId(this.provider.getProjectId());\n\n try {\n const { data: paymasterResp } = await axios.post(\n `${PAYMASTER_URL}/getPaymasterAddress`,\n {\n chainId,\n entryPointAddress: ENTRYPOINT_ADDRESS,\n paymasterProvider,\n },\n { headers: { \"Content-Type\": \"application/json\" } }\n );\n return paymasterResp as Hex;\n } catch (e) {\n console.log(e);\n return undefined;\n }\n }\n async decodeMainCallFromCallData(\n kernelAddress: PromiseOrValue<string>,\n callData: PromiseOrValue<BytesLike>\n ): Promise<UserOperationCallDataWithDelegate | undefined> {\n let data: Hex = \"0x\";\n if (callData instanceof Promise) {\n const _data = await callData;\n if (_data instanceof Uint8Array) {\n data = toHex(_data);\n } else {\n data = _data as Hex;\n }\n } else if (callData instanceof Uint8Array) {\n data = toHex(callData);\n } else {\n data = callData as Hex;\n }\n\n try {\n const { functionName, args } = decodeFunctionData({\n abi: KernelAccountAbi,\n data: data,\n });\n if (functionName === \"execute\") {\n const [target, value, data] = args;\n let msFuntionName;\n try {\n ({ functionName: msFuntionName } = decodeFunctionData({\n abi: MultiSendAbi,\n data,\n }));\n } catch (error) {}\n let mainCall:\n | UserOperationCallData\n | UserOperationCallDataWithDelegate = {\n target,\n value: value ?? 0n,\n data,\n };\n if (msFuntionName === \"multiSend\") {\n mainCall = {\n ...mainCall,\n target: MULTISEND_ADDR,\n delegateCall: true,\n data,\n };\n }\n return mainCall;\n }\n } catch (error) {\n return {\n target: (kernelAddress instanceof Promise\n ? await kernelAddress\n : kernelAddress) as Hex,\n data,\n value: 0n,\n delegateCall: true,\n };\n }\n return;\n }\n\n async getERC20UserOp(\n struct: UserOperationStruct,\n mainCall: UserOperationCallDataWithDelegate,\n gasTokenAddress: Hex,\n paymasterAddress: Hex\n ): Promise<UserOperationStruct | undefined> {\n try {\n const approveData: UserOperationCallData = {\n target: gasTokenAddress,\n value: BigInt(0),\n data: encodeFunctionData({\n abi: ERC20Abi,\n functionName: \"approve\",\n args: [paymasterAddress, ERC20_APPROVAL_AMOUNT[gasTokenAddress]],\n }),\n };\n if (!this.provider.account) {\n throw AccountNotConnected;\n }\n const erc20CallData = await this.provider.account.encodeBatchExecute([\n approveData,\n mainCall,\n ]);\n return {\n ...struct,\n callData: erc20CallData,\n callGasLimit: await this.provider.rpcClient.estimateGas({\n account: ENTRYPOINT_ADDRESS,\n to: await this.provider.getAddress(),\n data: erc20CallData,\n }),\n };\n } catch (error) {\n return;\n }\n }\n\n async getPaymasterResponse(\n struct: UserOperationStruct,\n paymasterProvider?: PaymasterAndBundlerProviders,\n shouldOverrideFee?: boolean\n ): Promise<UserOperationStruct | undefined> {\n try {\n const mainCall = await this.decodeMainCallFromCallData(\n struct.sender,\n struct.callData\n );\n if (!mainCall) {\n throw IncorrectCallDataForTokenPaymaster;\n }\n const chainId = await getChainId(this.provider.getProjectId());\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const gasTokenAddress = getGasTokenAddress(\n this.paymasterConfig.gasToken,\n chainId\n );\n let paymasterAddress = await this.getPaymasterAddress(paymasterProvider);\n if (gasTokenAddress !== undefined && paymasterAddress !== undefined) {\n const erc20UserOp = await this.getERC20UserOp(\n struct,\n mainCall,\n gasTokenAddress,\n paymasterAddress\n );\n if (!erc20UserOp) {\n return struct;\n }\n const paymasterResp = await this.signUserOp({\n userOp: struct,\n callData: struct.callData,\n gasTokenAddress,\n erc20UserOp,\n erc20CallData: erc20UserOp.callData,\n paymasterProvider,\n shouldOverrideFee,\n });\n if (paymasterResp) {\n return paymasterResp;\n }\n }\n } catch (error) {\n console.log(error);\n }\n return;\n }\n}\n"]}
1
+ {"version":3,"file":"token-paymaster.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/paymaster/token-paymaster.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type PromiseOrValue,\n type BytesLike,\n type UserOperationCallData,\n type UserOperationStruct,\n} from \"@alchemy/aa-core\";\nimport axios from \"axios\";\nimport {\n type Hex,\n toHex,\n decodeFunctionData,\n encodeFunctionData,\n isAddress,\n} from \"viem\";\nimport { ERC20Abi } from \"../abis/ERC20Abi.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { MultiSendAbi } from \"../abis/MultiSendAbi.js\";\nimport {\n PAYMASTER_URL,\n ENTRYPOINT_ADDRESS,\n MULTISEND_ADDR,\n ERC20_APPROVAL_AMOUNT,\n} from \"../constants.js\";\nimport {\n AccountNotConnected,\n IncorrectCallDataForTokenPaymaster,\n} from \"../errors.js\";\nimport type { ZeroDevProvider } from \"../provider.js\";\nimport {\n getGasTokenAddress,\n type UserOperationCallDataWithDelegate,\n} from \"../utils.js\";\nimport { Paymaster } from \"./base.js\";\nimport {\n type PaymasterAndBundlerProviders,\n type PaymasterConfig,\n} from \"./types.js\";\nimport { getChainId } from \"../api/index.js\";\n\nexport class TokenPaymaster extends Paymaster {\n constructor(\n provider: ZeroDevProvider,\n protected paymasterConfig: PaymasterConfig<\"TOKEN_PAYMASTER\">\n ) {\n super(provider);\n }\n async getPaymasterAddress(\n paymasterProvider?: PaymasterAndBundlerProviders\n ): Promise<Hex | undefined> {\n const chainId = await getChainId(this.provider.getProjectId());\n\n try {\n const { data: paymasterResp } = await axios.post(\n `${PAYMASTER_URL}/getPaymasterAddress`,\n {\n chainId,\n entryPointAddress: ENTRYPOINT_ADDRESS,\n paymasterProvider,\n },\n { headers: { \"Content-Type\": \"application/json\" } }\n );\n return paymasterResp as Hex;\n } catch (e) {\n console.log(e);\n return undefined;\n }\n }\n async decodeMainCallFromCallData(\n kernelAddress: PromiseOrValue<string>,\n callData: PromiseOrValue<BytesLike>\n ): Promise<UserOperationCallDataWithDelegate | undefined> {\n let data: Hex = \"0x\";\n if (callData instanceof Promise) {\n const _data = await callData;\n if (_data instanceof Uint8Array) {\n data = toHex(_data);\n } else {\n data = _data as Hex;\n }\n } else if (callData instanceof Uint8Array) {\n data = toHex(callData);\n } else {\n data = callData as Hex;\n }\n\n try {\n const { functionName, args } = decodeFunctionData({\n abi: KernelAccountAbi,\n data: data,\n });\n if (functionName === \"execute\") {\n const [target, value, data] = args;\n let msFuntionName;\n try {\n ({ functionName: msFuntionName } = decodeFunctionData({\n abi: MultiSendAbi,\n data,\n }));\n } catch (error) {}\n let mainCall:\n | UserOperationCallData\n | UserOperationCallDataWithDelegate = {\n target,\n value: value ?? 0n,\n data,\n };\n if (msFuntionName === \"multiSend\") {\n mainCall = {\n ...mainCall,\n target: MULTISEND_ADDR,\n delegateCall: true,\n data,\n };\n }\n return mainCall;\n }\n } catch (error) {\n return {\n target: (kernelAddress instanceof Promise\n ? await kernelAddress\n : kernelAddress) as Hex,\n data,\n value: 0n,\n delegateCall: true,\n };\n }\n return;\n }\n\n async getERC20UserOp(\n struct: UserOperationStruct,\n mainCall: UserOperationCallDataWithDelegate,\n gasTokenAddress: Hex,\n paymasterAddress: Hex\n ): Promise<UserOperationStruct | undefined> {\n try {\n const approveData: UserOperationCallData = {\n target: gasTokenAddress,\n value: BigInt(0),\n data: encodeFunctionData({\n abi: ERC20Abi,\n functionName: \"approve\",\n args: [paymasterAddress, ERC20_APPROVAL_AMOUNT[gasTokenAddress]],\n }),\n };\n if (!this.provider.account) {\n throw AccountNotConnected;\n }\n const erc20CallData = await this.provider.account.encodeBatchExecute([\n approveData,\n mainCall,\n ]);\n return {\n ...struct,\n callData: erc20CallData,\n callGasLimit: await this.provider.rpcClient.estimateGas({\n account: ENTRYPOINT_ADDRESS,\n to: await this.provider.getAddress(),\n data: erc20CallData,\n }),\n };\n } catch (error) {\n return;\n }\n }\n\n async getPaymasterResponse(\n struct: UserOperationStruct,\n paymasterProvider?: PaymasterAndBundlerProviders,\n shouldOverrideFee?: boolean\n ): Promise<UserOperationStruct | undefined> {\n try {\n const mainCall = await this.decodeMainCallFromCallData(\n struct.sender,\n struct.callData\n );\n if (!mainCall) {\n throw IncorrectCallDataForTokenPaymaster;\n }\n const chainId = await getChainId(this.provider.getProjectId());\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const gasTokenAddress = getGasTokenAddress(\n this.paymasterConfig.gasToken,\n chainId\n );\n let paymasterAddress = await this.getPaymasterAddress(paymasterProvider);\n if (\n gasTokenAddress !== undefined &&\n paymasterAddress !== undefined &&\n isAddress(paymasterAddress)\n ) {\n const erc20UserOp = await this.getERC20UserOp(\n struct,\n mainCall,\n gasTokenAddress,\n paymasterAddress\n );\n if (!erc20UserOp) {\n return struct;\n }\n const paymasterResp = await this.signUserOp({\n userOp: struct,\n callData: struct.callData,\n gasTokenAddress,\n erc20UserOp,\n erc20CallData: erc20UserOp.callData,\n paymasterProvider,\n shouldOverrideFee,\n });\n if (paymasterResp) {\n return paymasterResp;\n }\n }\n } catch (error) {\n console.log(error);\n }\n return;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,gCAAgC,CAAC;AAG/C,OAAO,EACL,aAAa,EACb,mBAAmB,GACpB,MAAM,oCAAoC,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AAGpD,OAAO,EAAE,cAAc,EAAE,MAAM,qDAAqD,CAAC;AAGrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAOhF,cAAc,8CAA8C,CAAC;AAI7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAEzE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAG1E,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qDAAqD,CAAC;AAC5F,OAAO,EAAE,oBAAoB,EAAE,MAAM,oDAAoD,CAAC;AAC1F,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAE9E,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAC;AAG3D,cAAc,iCAAiC,CAAC","sourcesContent":["// Add you exports here, make sure to export types separately from impls and use the `type` keyword when exporting them\n// Don't use wildcard exports, instead use named exports\n\n//kernel exports\nexport * from \"./kernel-zerodev/abis/index.js\";\n\n// Validator exports\nexport {\n ValidatorMode,\n KernelBaseValidator,\n} from \"./kernel-zerodev/validator/base.js\";\nexport * from \"./kernel-zerodev/validator/index.js\";\nexport type * from \"./kernel-zerodev/validator/types.js\";\nexport type { KernelBaseValidatorParams } from \"./kernel-zerodev/validator/base.js\";\nexport { ParamCondition } from \"./kernel-zerodev/validator/session-key-validator.js\";\n\n// Validator Provider exports\nexport { ValidatorProvider } from \"./kernel-zerodev/validator-provider/base.js\";\nexport type {\n ValidatorProviderParams,\n ValidatorProviderParamsOpts,\n ExtendedValidatorProviderParams,\n} from \"./kernel-zerodev/validator-provider/base.js\";\nexport type * from \"./kernel-zerodev/validator-provider/types.js\";\nexport * from \"./kernel-zerodev/validator-provider/index.js\";\n\n// Core exports\nexport type * from \"./kernel-zerodev/paymaster/types.js\";\nexport { KernelSmartContractAccount } from \"./kernel-zerodev/account.js\";\nexport type { KernelSmartAccountParams } from \"./kernel-zerodev/account.js\";\nexport { ZeroDevProvider, Operation } from \"./kernel-zerodev/provider.js\";\n\n// Utils exports\nexport * from \"./kernel-zerodev/utils.js\";\nexport { getChainId } from \"./kernel-zerodev/api/index.js\";\nexport { ZeroDevEthersProvider } from \"./kernel-zerodev/ethers-provider/ethers-provider.js\";\nexport { ZeroDevAccountSigner } from \"./kernel-zerodev/ethers-provider/account-signer.js\";\nexport { EmptyAccountSigner } from \"./kernel-zerodev/signer/empty-account.js\";\n\nexport * as constants from \"./kernel-zerodev/constants.js\";\n\n// Owner exports\nexport * from \"./kernel-zerodev/owner/index.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,gCAAgC,CAAC;AAG/C,OAAO,EACL,aAAa,EACb,mBAAmB,GACpB,MAAM,oCAAoC,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AAGpD,OAAO,EAAE,cAAc,EAAE,MAAM,qDAAqD,CAAC;AAGrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAOhF,cAAc,8CAA8C,CAAC;AAI7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAEzE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAG1E,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qDAAqD,CAAC;AAC5F,OAAO,EAAE,oBAAoB,EAAE,MAAM,oDAAoD,CAAC;AAC1F,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAG9E,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAC;AAG3D,cAAc,iCAAiC,CAAC","sourcesContent":["// Add you exports here, make sure to export types separately from impls and use the `type` keyword when exporting them\n// Don't use wildcard exports, instead use named exports\n\n//kernel exports\nexport * from \"./kernel-zerodev/abis/index.js\";\n\n// Validator exports\nexport {\n ValidatorMode,\n KernelBaseValidator,\n} from \"./kernel-zerodev/validator/base.js\";\nexport * from \"./kernel-zerodev/validator/index.js\";\nexport type * from \"./kernel-zerodev/validator/types.js\";\nexport type { KernelBaseValidatorParams } from \"./kernel-zerodev/validator/base.js\";\nexport { ParamCondition } from \"./kernel-zerodev/validator/session-key-validator.js\";\n\n// Validator Provider exports\nexport { ValidatorProvider } from \"./kernel-zerodev/validator-provider/base.js\";\nexport type {\n ValidatorProviderParams,\n ValidatorProviderParamsOpts,\n ExtendedValidatorProviderParams,\n} from \"./kernel-zerodev/validator-provider/base.js\";\nexport type * from \"./kernel-zerodev/validator-provider/types.js\";\nexport * from \"./kernel-zerodev/validator-provider/index.js\";\n\n// Core exports\nexport type * from \"./kernel-zerodev/paymaster/types.js\";\nexport { KernelSmartContractAccount } from \"./kernel-zerodev/account.js\";\nexport type { KernelSmartAccountParams } from \"./kernel-zerodev/account.js\";\nexport { ZeroDevProvider, Operation } from \"./kernel-zerodev/provider.js\";\n\n// Utils exports\nexport * from \"./kernel-zerodev/utils.js\";\nexport { getChainId } from \"./kernel-zerodev/api/index.js\";\nexport { ZeroDevEthersProvider } from \"./kernel-zerodev/ethers-provider/ethers-provider.js\";\nexport { ZeroDevAccountSigner } from \"./kernel-zerodev/ethers-provider/account-signer.js\";\nexport { EmptyAccountSigner } from \"./kernel-zerodev/signer/empty-account.js\";\n\n// Constant exports\nexport * as constants from \"./kernel-zerodev/constants.js\";\n\n// Owner exports\nexport * from \"./kernel-zerodev/owner/index.js\";\n"]}
@@ -37,6 +37,7 @@ export declare class KernelSmartContractAccount<TTransport extends Transport | F
37
37
  encodeExecuteDelegate(target: Hex, value: bigint, data: Hex): Promise<Hex>;
38
38
  encodeSetExection(): Promise<`0x${string}`>;
39
39
  signMessageWith6492(msg: string | Uint8Array): Promise<Hex>;
40
+ signTypedDataWith6492(params: SignTypedDataParams): Promise<Hex>;
40
41
  signMessage(msg: Uint8Array | string): Promise<Hex>;
41
42
  signTypedData(params: SignTypedDataParams): Promise<Hex>;
42
43
  signUserOp(userOp: UserOperationRequest): Promise<Hex>;
@@ -1,9 +1,8 @@
1
- import { concatHex, encodeAbiParameters, encodeFunctionData, hashMessage, toBytes, } from "viem";
2
- import { parseAbiParameters } from "abitype";
1
+ import { concatHex, encodeFunctionData, hashMessage, toBytes, } from "viem";
3
2
  import { KernelBaseValidator } from "./validator/base.js";
4
3
  import { KernelAccountAbi } from "./abis/KernelAccountAbi.js";
5
4
  import { KernelFactoryAbi } from "./abis/KernelFactoryAbi.js";
6
- import { BaseSmartContractAccount, defineReadOnly, getChain, } from "@alchemy/aa-core";
5
+ import { BaseSmartContractAccount, defineReadOnly, getChain, wrapWith6492, } from "@alchemy/aa-core";
7
6
  import { BUNDLER_URL, ENTRYPOINT_ADDRESS, KERNEL_FACTORY_ADDRESS, KERNEL_IMPL_ADDRESS, MULTISEND_ADDR, } from "./constants.js";
8
7
  import { encodeMultiSend } from "./utils.js";
9
8
  import { MultiSendAbi } from "./abis/MultiSendAbi.js";
@@ -172,12 +171,35 @@ export class KernelSmartContractAccount extends BaseSmartContractAccount {
172
171
  throw new Error("Validator not connected");
173
172
  }
174
173
  const formattedMessage = typeof msg === "string" ? toBytes(msg) : msg;
175
- let sig = await this.validator.signMessage(toBytes(hashMessage({ raw: formattedMessage })));
174
+ let signature = await this.validator.signMessage(toBytes(hashMessage({ raw: formattedMessage })));
176
175
  if (!(await this.isAccountDeployed())) {
177
- sig = (encodeAbiParameters(parseAbiParameters("address, bytes, bytes"), [this.factoryAddress, await this.getFactoryInitCode(), sig]) +
178
- "6492649264926492649264926492649264926492649264926492649264926492");
176
+ signature = wrapWith6492({
177
+ factoryAddress: this.factoryAddress,
178
+ initCode: await this.getFactoryInitCode(),
179
+ signature,
180
+ });
179
181
  }
180
- return sig;
182
+ return signature;
183
+ }
184
+ catch (err) {
185
+ console.error("Got Error - ", err.message);
186
+ throw new Error("Message Signing with EIP6492 failed");
187
+ }
188
+ }
189
+ async signTypedDataWith6492(params) {
190
+ try {
191
+ if (!this.validator) {
192
+ throw new Error("Validator not connected");
193
+ }
194
+ let signature = await this.validator.signTypedData(params);
195
+ if (!(await this.isAccountDeployed())) {
196
+ signature = wrapWith6492({
197
+ factoryAddress: this.factoryAddress,
198
+ initCode: await this.getFactoryInitCode(),
199
+ signature,
200
+ });
201
+ }
202
+ return signature;
181
203
  }
182
204
  catch (err) {
183
205
  console.error("Got Error - ", err.message);
@@ -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 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"]}
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 encodeFunctionData,\n type FallbackTransport,\n hashMessage,\n type Hex,\n toBytes,\n type Transport,\n} from \"viem\";\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 wrapWith6492,\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 signature = 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 signature = wrapWith6492({\n factoryAddress: this.factoryAddress,\n initCode: await this.getFactoryInitCode(),\n signature,\n });\n }\n\n return signature;\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 signTypedDataWith6492(params: SignTypedDataParams): Promise<Hex> {\n try {\n if (!this.validator) {\n throw new Error(\"Validator not connected\");\n }\n let signature = await this.validator.signTypedData(params);\n // If the account is undeployed, use ERC-6492\n if (!(await this.isAccountDeployed())) {\n signature = wrapWith6492({\n factoryAddress: this.factoryAddress,\n initCode: await this.getFactoryInitCode(),\n signature,\n });\n }\n\n return signature;\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"]}
@@ -16,6 +16,7 @@ export declare class ZeroDevAccountSigner<V extends SupportedValidators> extends
16
16
  signTypedData(params: SignTypedDataParams): Promise<string>;
17
17
  _signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): Promise<string>;
18
18
  signMessageWith6492(_msg: string | Uint8Array): Promise<Hex>;
19
+ signTypedDataWith6492(params: SignTypedDataParams): Promise<Hex>;
19
20
  withPaymasterMiddleware: (overrides: {
20
21
  dummyPaymasterDataMiddleware?: PaymasterAndDataMiddleware;
21
22
  paymasterDataMiddleware?: PaymasterAndDataMiddleware;
@@ -116,6 +116,12 @@ export class ZeroDevAccountSigner extends Signer {
116
116
  }
117
117
  return this.account.signMessageWith6492(_msg);
118
118
  }
119
+ async signTypedDataWith6492(params) {
120
+ if (!this.account) {
121
+ throw new Error("connect the signer to a provider that has a connected account");
122
+ }
123
+ return this.account.signTypedDataWith6492(params);
124
+ }
119
125
  async sendTransaction(transaction) {
120
126
  const resolved = await resolveProperties(transaction);
121
127
  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\";\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"]}
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 async signTypedDataWith6492(params: SignTypedDataParams): 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.signTypedDataWith6492(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,6 +1,6 @@
1
1
  import {} from "@alchemy/aa-core";
2
2
  import axios from "axios";
3
- import { toHex, decodeFunctionData, encodeFunctionData } from "viem";
3
+ import { toHex, decodeFunctionData, encodeFunctionData, isAddress, } from "viem";
4
4
  import { ERC20Abi } from "../abis/ERC20Abi.js";
5
5
  import { KernelAccountAbi } from "../abis/KernelAccountAbi.js";
6
6
  import { MultiSendAbi } from "../abis/MultiSendAbi.js";
@@ -139,7 +139,9 @@ export class TokenPaymaster extends Paymaster {
139
139
  }
140
140
  const gasTokenAddress = getGasTokenAddress(this.paymasterConfig.gasToken, chainId);
141
141
  let paymasterAddress = await this.getPaymasterAddress(paymasterProvider);
142
- if (gasTokenAddress !== undefined && paymasterAddress !== undefined) {
142
+ if (gasTokenAddress !== undefined &&
143
+ paymasterAddress !== undefined &&
144
+ isAddress(paymasterAddress)) {
143
145
  const erc20UserOp = await this.getERC20UserOp(struct, mainCall, gasTokenAddress, paymasterAddress);
144
146
  if (!erc20UserOp) {
145
147
  return struct;
@@ -1 +1 @@
1
- {"version":3,"file":"token-paymaster.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/paymaster/token-paymaster.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type PromiseOrValue,\n type BytesLike,\n type UserOperationCallData,\n type UserOperationStruct,\n} from \"@alchemy/aa-core\";\nimport axios from \"axios\";\nimport { type Hex, toHex, decodeFunctionData, encodeFunctionData } from \"viem\";\nimport { ERC20Abi } from \"../abis/ERC20Abi.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { MultiSendAbi } from \"../abis/MultiSendAbi.js\";\nimport {\n PAYMASTER_URL,\n ENTRYPOINT_ADDRESS,\n MULTISEND_ADDR,\n ERC20_APPROVAL_AMOUNT,\n} from \"../constants.js\";\nimport {\n AccountNotConnected,\n IncorrectCallDataForTokenPaymaster,\n} from \"../errors.js\";\nimport type { ZeroDevProvider } from \"../provider.js\";\nimport {\n getGasTokenAddress,\n type UserOperationCallDataWithDelegate,\n} from \"../utils.js\";\nimport { Paymaster } from \"./base.js\";\nimport {\n type PaymasterAndBundlerProviders,\n type PaymasterConfig,\n} from \"./types.js\";\nimport { getChainId } from \"../api/index.js\";\n\nexport class TokenPaymaster extends Paymaster {\n constructor(\n provider: ZeroDevProvider,\n protected paymasterConfig: PaymasterConfig<\"TOKEN_PAYMASTER\">\n ) {\n super(provider);\n }\n async getPaymasterAddress(\n paymasterProvider?: PaymasterAndBundlerProviders\n ): Promise<Hex | undefined> {\n const chainId = await getChainId(this.provider.getProjectId());\n\n try {\n const { data: paymasterResp } = await axios.post(\n `${PAYMASTER_URL}/getPaymasterAddress`,\n {\n chainId,\n entryPointAddress: ENTRYPOINT_ADDRESS,\n paymasterProvider,\n },\n { headers: { \"Content-Type\": \"application/json\" } }\n );\n return paymasterResp as Hex;\n } catch (e) {\n console.log(e);\n return undefined;\n }\n }\n async decodeMainCallFromCallData(\n kernelAddress: PromiseOrValue<string>,\n callData: PromiseOrValue<BytesLike>\n ): Promise<UserOperationCallDataWithDelegate | undefined> {\n let data: Hex = \"0x\";\n if (callData instanceof Promise) {\n const _data = await callData;\n if (_data instanceof Uint8Array) {\n data = toHex(_data);\n } else {\n data = _data as Hex;\n }\n } else if (callData instanceof Uint8Array) {\n data = toHex(callData);\n } else {\n data = callData as Hex;\n }\n\n try {\n const { functionName, args } = decodeFunctionData({\n abi: KernelAccountAbi,\n data: data,\n });\n if (functionName === \"execute\") {\n const [target, value, data] = args;\n let msFuntionName;\n try {\n ({ functionName: msFuntionName } = decodeFunctionData({\n abi: MultiSendAbi,\n data,\n }));\n } catch (error) {}\n let mainCall:\n | UserOperationCallData\n | UserOperationCallDataWithDelegate = {\n target,\n value: value ?? 0n,\n data,\n };\n if (msFuntionName === \"multiSend\") {\n mainCall = {\n ...mainCall,\n target: MULTISEND_ADDR,\n delegateCall: true,\n data,\n };\n }\n return mainCall;\n }\n } catch (error) {\n return {\n target: (kernelAddress instanceof Promise\n ? await kernelAddress\n : kernelAddress) as Hex,\n data,\n value: 0n,\n delegateCall: true,\n };\n }\n return;\n }\n\n async getERC20UserOp(\n struct: UserOperationStruct,\n mainCall: UserOperationCallDataWithDelegate,\n gasTokenAddress: Hex,\n paymasterAddress: Hex\n ): Promise<UserOperationStruct | undefined> {\n try {\n const approveData: UserOperationCallData = {\n target: gasTokenAddress,\n value: BigInt(0),\n data: encodeFunctionData({\n abi: ERC20Abi,\n functionName: \"approve\",\n args: [paymasterAddress, ERC20_APPROVAL_AMOUNT[gasTokenAddress]],\n }),\n };\n if (!this.provider.account) {\n throw AccountNotConnected;\n }\n const erc20CallData = await this.provider.account.encodeBatchExecute([\n approveData,\n mainCall,\n ]);\n return {\n ...struct,\n callData: erc20CallData,\n callGasLimit: await this.provider.rpcClient.estimateGas({\n account: ENTRYPOINT_ADDRESS,\n to: await this.provider.getAddress(),\n data: erc20CallData,\n }),\n };\n } catch (error) {\n return;\n }\n }\n\n async getPaymasterResponse(\n struct: UserOperationStruct,\n paymasterProvider?: PaymasterAndBundlerProviders,\n shouldOverrideFee?: boolean\n ): Promise<UserOperationStruct | undefined> {\n try {\n const mainCall = await this.decodeMainCallFromCallData(\n struct.sender,\n struct.callData\n );\n if (!mainCall) {\n throw IncorrectCallDataForTokenPaymaster;\n }\n const chainId = await getChainId(this.provider.getProjectId());\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const gasTokenAddress = getGasTokenAddress(\n this.paymasterConfig.gasToken,\n chainId\n );\n let paymasterAddress = await this.getPaymasterAddress(paymasterProvider);\n if (gasTokenAddress !== undefined && paymasterAddress !== undefined) {\n const erc20UserOp = await this.getERC20UserOp(\n struct,\n mainCall,\n gasTokenAddress,\n paymasterAddress\n );\n if (!erc20UserOp) {\n return struct;\n }\n const paymasterResp = await this.signUserOp({\n userOp: struct,\n callData: struct.callData,\n gasTokenAddress,\n erc20UserOp,\n erc20CallData: erc20UserOp.callData,\n paymasterProvider,\n shouldOverrideFee,\n });\n if (paymasterResp) {\n return paymasterResp;\n }\n }\n } catch (error) {\n console.log(error);\n }\n return;\n }\n}\n"]}
1
+ {"version":3,"file":"token-paymaster.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/paymaster/token-paymaster.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type PromiseOrValue,\n type BytesLike,\n type UserOperationCallData,\n type UserOperationStruct,\n} from \"@alchemy/aa-core\";\nimport axios from \"axios\";\nimport {\n type Hex,\n toHex,\n decodeFunctionData,\n encodeFunctionData,\n isAddress,\n} from \"viem\";\nimport { ERC20Abi } from \"../abis/ERC20Abi.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { MultiSendAbi } from \"../abis/MultiSendAbi.js\";\nimport {\n PAYMASTER_URL,\n ENTRYPOINT_ADDRESS,\n MULTISEND_ADDR,\n ERC20_APPROVAL_AMOUNT,\n} from \"../constants.js\";\nimport {\n AccountNotConnected,\n IncorrectCallDataForTokenPaymaster,\n} from \"../errors.js\";\nimport type { ZeroDevProvider } from \"../provider.js\";\nimport {\n getGasTokenAddress,\n type UserOperationCallDataWithDelegate,\n} from \"../utils.js\";\nimport { Paymaster } from \"./base.js\";\nimport {\n type PaymasterAndBundlerProviders,\n type PaymasterConfig,\n} from \"./types.js\";\nimport { getChainId } from \"../api/index.js\";\n\nexport class TokenPaymaster extends Paymaster {\n constructor(\n provider: ZeroDevProvider,\n protected paymasterConfig: PaymasterConfig<\"TOKEN_PAYMASTER\">\n ) {\n super(provider);\n }\n async getPaymasterAddress(\n paymasterProvider?: PaymasterAndBundlerProviders\n ): Promise<Hex | undefined> {\n const chainId = await getChainId(this.provider.getProjectId());\n\n try {\n const { data: paymasterResp } = await axios.post(\n `${PAYMASTER_URL}/getPaymasterAddress`,\n {\n chainId,\n entryPointAddress: ENTRYPOINT_ADDRESS,\n paymasterProvider,\n },\n { headers: { \"Content-Type\": \"application/json\" } }\n );\n return paymasterResp as Hex;\n } catch (e) {\n console.log(e);\n return undefined;\n }\n }\n async decodeMainCallFromCallData(\n kernelAddress: PromiseOrValue<string>,\n callData: PromiseOrValue<BytesLike>\n ): Promise<UserOperationCallDataWithDelegate | undefined> {\n let data: Hex = \"0x\";\n if (callData instanceof Promise) {\n const _data = await callData;\n if (_data instanceof Uint8Array) {\n data = toHex(_data);\n } else {\n data = _data as Hex;\n }\n } else if (callData instanceof Uint8Array) {\n data = toHex(callData);\n } else {\n data = callData as Hex;\n }\n\n try {\n const { functionName, args } = decodeFunctionData({\n abi: KernelAccountAbi,\n data: data,\n });\n if (functionName === \"execute\") {\n const [target, value, data] = args;\n let msFuntionName;\n try {\n ({ functionName: msFuntionName } = decodeFunctionData({\n abi: MultiSendAbi,\n data,\n }));\n } catch (error) {}\n let mainCall:\n | UserOperationCallData\n | UserOperationCallDataWithDelegate = {\n target,\n value: value ?? 0n,\n data,\n };\n if (msFuntionName === \"multiSend\") {\n mainCall = {\n ...mainCall,\n target: MULTISEND_ADDR,\n delegateCall: true,\n data,\n };\n }\n return mainCall;\n }\n } catch (error) {\n return {\n target: (kernelAddress instanceof Promise\n ? await kernelAddress\n : kernelAddress) as Hex,\n data,\n value: 0n,\n delegateCall: true,\n };\n }\n return;\n }\n\n async getERC20UserOp(\n struct: UserOperationStruct,\n mainCall: UserOperationCallDataWithDelegate,\n gasTokenAddress: Hex,\n paymasterAddress: Hex\n ): Promise<UserOperationStruct | undefined> {\n try {\n const approveData: UserOperationCallData = {\n target: gasTokenAddress,\n value: BigInt(0),\n data: encodeFunctionData({\n abi: ERC20Abi,\n functionName: \"approve\",\n args: [paymasterAddress, ERC20_APPROVAL_AMOUNT[gasTokenAddress]],\n }),\n };\n if (!this.provider.account) {\n throw AccountNotConnected;\n }\n const erc20CallData = await this.provider.account.encodeBatchExecute([\n approveData,\n mainCall,\n ]);\n return {\n ...struct,\n callData: erc20CallData,\n callGasLimit: await this.provider.rpcClient.estimateGas({\n account: ENTRYPOINT_ADDRESS,\n to: await this.provider.getAddress(),\n data: erc20CallData,\n }),\n };\n } catch (error) {\n return;\n }\n }\n\n async getPaymasterResponse(\n struct: UserOperationStruct,\n paymasterProvider?: PaymasterAndBundlerProviders,\n shouldOverrideFee?: boolean\n ): Promise<UserOperationStruct | undefined> {\n try {\n const mainCall = await this.decodeMainCallFromCallData(\n struct.sender,\n struct.callData\n );\n if (!mainCall) {\n throw IncorrectCallDataForTokenPaymaster;\n }\n const chainId = await getChainId(this.provider.getProjectId());\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const gasTokenAddress = getGasTokenAddress(\n this.paymasterConfig.gasToken,\n chainId\n );\n let paymasterAddress = await this.getPaymasterAddress(paymasterProvider);\n if (\n gasTokenAddress !== undefined &&\n paymasterAddress !== undefined &&\n isAddress(paymasterAddress)\n ) {\n const erc20UserOp = await this.getERC20UserOp(\n struct,\n mainCall,\n gasTokenAddress,\n paymasterAddress\n );\n if (!erc20UserOp) {\n return struct;\n }\n const paymasterResp = await this.signUserOp({\n userOp: struct,\n callData: struct.callData,\n gasTokenAddress,\n erc20UserOp,\n erc20CallData: erc20UserOp.callData,\n paymasterProvider,\n shouldOverrideFee,\n });\n if (paymasterResp) {\n return paymasterResp;\n }\n }\n } catch (error) {\n console.log(error);\n }\n return;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,gCAAgC,CAAC;AAG/C,OAAO,EACL,aAAa,EACb,mBAAmB,GACpB,MAAM,oCAAoC,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AACpD,mBAAmB,qCAAqC,CAAC;AACzD,YAAY,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,qDAAqD,CAAC;AAGrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAChF,YAAY,EACV,uBAAuB,EACvB,2BAA2B,EAC3B,+BAA+B,GAChC,MAAM,6CAA6C,CAAC;AACrD,mBAAmB,8CAA8C,CAAC;AAClE,cAAc,8CAA8C,CAAC;AAG7D,mBAAmB,qCAAqC,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,YAAY,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAG1E,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qDAAqD,CAAC;AAC5F,OAAO,EAAE,oBAAoB,EAAE,MAAM,oDAAoD,CAAC;AAC1F,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAE9E,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAC;AAG3D,cAAc,iCAAiC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,gCAAgC,CAAC;AAG/C,OAAO,EACL,aAAa,EACb,mBAAmB,GACpB,MAAM,oCAAoC,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AACpD,mBAAmB,qCAAqC,CAAC;AACzD,YAAY,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AACpF,OAAO,EAAE,cAAc,EAAE,MAAM,qDAAqD,CAAC;AAGrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAChF,YAAY,EACV,uBAAuB,EACvB,2BAA2B,EAC3B,+BAA+B,GAChC,MAAM,6CAA6C,CAAC;AACrD,mBAAmB,8CAA8C,CAAC;AAClE,cAAc,8CAA8C,CAAC;AAG7D,mBAAmB,qCAAqC,CAAC;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,YAAY,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAG1E,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qDAAqD,CAAC;AAC5F,OAAO,EAAE,oBAAoB,EAAE,MAAM,oDAAoD,CAAC;AAC1F,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAG9E,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAC;AAG3D,cAAc,iCAAiC,CAAC"}
@@ -37,6 +37,7 @@ export declare class KernelSmartContractAccount<TTransport extends Transport | F
37
37
  encodeExecuteDelegate(target: Hex, value: bigint, data: Hex): Promise<Hex>;
38
38
  encodeSetExection(): Promise<`0x${string}`>;
39
39
  signMessageWith6492(msg: string | Uint8Array): Promise<Hex>;
40
+ signTypedDataWith6492(params: SignTypedDataParams): Promise<Hex>;
40
41
  signMessage(msg: Uint8Array | string): Promise<Hex>;
41
42
  signTypedData(params: SignTypedDataParams): Promise<Hex>;
42
43
  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":"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"}
@@ -16,6 +16,7 @@ export declare class ZeroDevAccountSigner<V extends SupportedValidators> extends
16
16
  signTypedData(params: SignTypedDataParams): Promise<string>;
17
17
  _signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): Promise<string>;
18
18
  signMessageWith6492(_msg: string | Uint8Array): Promise<Hex>;
19
+ signTypedDataWith6492(params: SignTypedDataParams): Promise<Hex>;
19
20
  withPaymasterMiddleware: (overrides: {
20
21
  dummyPaymasterDataMiddleware?: PaymasterAndDataMiddleware;
21
22
  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;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
+ {"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;IAS5D,qBAAqB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC;IAStE,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":"token-paymaster.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/paymaster/token-paymaster.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,SAAS,EAEd,KAAK,mBAAmB,EACzB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,KAAK,GAAG,EAAiD,MAAM,MAAM,CAAC;AAc/E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAEL,KAAK,iCAAiC,EACvC,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EACL,KAAK,4BAA4B,EACjC,KAAK,eAAe,EACrB,MAAM,YAAY,CAAC;AAGpB,qBAAa,cAAe,SAAQ,SAAS;IAGzC,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC,iBAAiB,CAAC;gBAD7D,QAAQ,EAAE,eAAe,EACf,eAAe,EAAE,eAAe,CAAC,iBAAiB,CAAC;IAIzD,mBAAmB,CACvB,iBAAiB,CAAC,EAAE,4BAA4B,GAC/C,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;IAmBrB,0BAA0B,CAC9B,aAAa,EAAE,cAAc,CAAC,MAAM,CAAC,EACrC,QAAQ,EAAE,cAAc,CAAC,SAAS,CAAC,GAClC,OAAO,CAAC,iCAAiC,GAAG,SAAS,CAAC;IA2DnD,cAAc,CAClB,MAAM,EAAE,mBAAmB,EAC3B,QAAQ,EAAE,iCAAiC,EAC3C,eAAe,EAAE,GAAG,EACpB,gBAAgB,EAAE,GAAG,GACpB,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;IAgCrC,oBAAoB,CACxB,MAAM,EAAE,mBAAmB,EAC3B,iBAAiB,CAAC,EAAE,4BAA4B,EAChD,iBAAiB,CAAC,EAAE,OAAO,GAC1B,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;CA8C5C"}
1
+ {"version":3,"file":"token-paymaster.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/paymaster/token-paymaster.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,SAAS,EAEd,KAAK,mBAAmB,EACzB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,KAAK,GAAG,EAKT,MAAM,MAAM,CAAC;AAcd,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAEL,KAAK,iCAAiC,EACvC,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EACL,KAAK,4BAA4B,EACjC,KAAK,eAAe,EACrB,MAAM,YAAY,CAAC;AAGpB,qBAAa,cAAe,SAAQ,SAAS;IAGzC,SAAS,CAAC,eAAe,EAAE,eAAe,CAAC,iBAAiB,CAAC;gBAD7D,QAAQ,EAAE,eAAe,EACf,eAAe,EAAE,eAAe,CAAC,iBAAiB,CAAC;IAIzD,mBAAmB,CACvB,iBAAiB,CAAC,EAAE,4BAA4B,GAC/C,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;IAmBrB,0BAA0B,CAC9B,aAAa,EAAE,cAAc,CAAC,MAAM,CAAC,EACrC,QAAQ,EAAE,cAAc,CAAC,SAAS,CAAC,GAClC,OAAO,CAAC,iCAAiC,GAAG,SAAS,CAAC;IA2DnD,cAAc,CAClB,MAAM,EAAE,mBAAmB,EAC3B,QAAQ,EAAE,iCAAiC,EAC3C,eAAe,EAAE,GAAG,EACpB,gBAAgB,EAAE,GAAG,GACpB,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;IAgCrC,oBAAoB,CACxB,MAAM,EAAE,mBAAmB,EAC3B,iBAAiB,CAAC,EAAE,4BAA4B,EAChD,iBAAiB,CAAC,EAAE,OAAO,GAC1B,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;CAkD5C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zerodev/sdk",
3
- "version": "4.0.27",
3
+ "version": "4.0.28",
4
4
  "description": "A collection of ERC-4337 compliant smart contract account interfaces",
5
5
  "author": "ZeroDev",
6
6
  "license": "MIT",
package/src/index.ts CHANGED
@@ -37,6 +37,7 @@ export { ZeroDevEthersProvider } from "./kernel-zerodev/ethers-provider/ethers-p
37
37
  export { ZeroDevAccountSigner } from "./kernel-zerodev/ethers-provider/account-signer.js";
38
38
  export { EmptyAccountSigner } from "./kernel-zerodev/signer/empty-account.js";
39
39
 
40
+ // Constant exports
40
41
  export * as constants from "./kernel-zerodev/constants.js";
41
42
 
42
43
  // Owner exports
@@ -1,7 +1,6 @@
1
1
  import type { Address } from "abitype";
2
2
  import {
3
3
  concatHex,
4
- encodeAbiParameters,
5
4
  encodeFunctionData,
6
5
  type FallbackTransport,
7
6
  hashMessage,
@@ -9,7 +8,6 @@ import {
9
8
  toBytes,
10
9
  type Transport,
11
10
  } from "viem";
12
- import { parseAbiParameters } from "abitype";
13
11
  import { KernelBaseValidator } from "./validator/base.js";
14
12
  import { KernelAccountAbi } from "./abis/KernelAccountAbi.js";
15
13
  import { KernelFactoryAbi } from "./abis/KernelFactoryAbi.js";
@@ -21,6 +19,7 @@ import {
21
19
  defineReadOnly,
22
20
  getChain,
23
21
  type SignTypedDataParams,
22
+ wrapWith6492,
24
23
  } from "@alchemy/aa-core";
25
24
  import {
26
25
  BUNDLER_URL,
@@ -228,19 +227,41 @@ export class KernelSmartContractAccount<
228
227
  throw new Error("Validator not connected");
229
228
  }
230
229
  const formattedMessage = typeof msg === "string" ? toBytes(msg) : msg;
231
- let sig = await this.validator.signMessage(
230
+ let signature = await this.validator.signMessage(
232
231
  toBytes(hashMessage({ raw: formattedMessage }))
233
232
  );
234
233
  // If the account is undeployed, use ERC-6492
235
234
  if (!(await this.isAccountDeployed())) {
236
- sig = (encodeAbiParameters(
237
- parseAbiParameters("address, bytes, bytes"),
238
- [this.factoryAddress, await this.getFactoryInitCode(), sig]
239
- ) +
240
- "6492649264926492649264926492649264926492649264926492649264926492") as Hex; // magic suffix
235
+ signature = wrapWith6492({
236
+ factoryAddress: this.factoryAddress,
237
+ initCode: await this.getFactoryInitCode(),
238
+ signature,
239
+ });
241
240
  }
242
241
 
243
- return sig;
242
+ return signature;
243
+ } catch (err: any) {
244
+ console.error("Got Error - ", err.message);
245
+ throw new Error("Message Signing with EIP6492 failed");
246
+ }
247
+ }
248
+
249
+ async signTypedDataWith6492(params: SignTypedDataParams): Promise<Hex> {
250
+ try {
251
+ if (!this.validator) {
252
+ throw new Error("Validator not connected");
253
+ }
254
+ let signature = await this.validator.signTypedData(params);
255
+ // If the account is undeployed, use ERC-6492
256
+ if (!(await this.isAccountDeployed())) {
257
+ signature = wrapWith6492({
258
+ factoryAddress: this.factoryAddress,
259
+ initCode: await this.getFactoryInitCode(),
260
+ signature,
261
+ });
262
+ }
263
+
264
+ return signature;
244
265
  } catch (err: any) {
245
266
  console.error("Got Error - ", err.message);
246
267
  throw new Error("Message Signing with EIP6492 failed");
@@ -120,6 +120,15 @@ export class ZeroDevAccountSigner<V extends SupportedValidators>
120
120
  return this.account.signMessageWith6492(_msg);
121
121
  }
122
122
 
123
+ async signTypedDataWith6492(params: SignTypedDataParams): Promise<Hex> {
124
+ if (!this.account) {
125
+ throw new Error(
126
+ "connect the signer to a provider that has a connected account"
127
+ );
128
+ }
129
+ return this.account.signTypedDataWith6492(params);
130
+ }
131
+
123
132
  withPaymasterMiddleware = (overrides: {
124
133
  dummyPaymasterDataMiddleware?: PaymasterAndDataMiddleware;
125
134
  paymasterDataMiddleware?: PaymasterAndDataMiddleware;
@@ -5,7 +5,13 @@ import {
5
5
  type UserOperationStruct,
6
6
  } from "@alchemy/aa-core";
7
7
  import axios from "axios";
8
- import { type Hex, toHex, decodeFunctionData, encodeFunctionData } from "viem";
8
+ import {
9
+ type Hex,
10
+ toHex,
11
+ decodeFunctionData,
12
+ encodeFunctionData,
13
+ isAddress,
14
+ } from "viem";
9
15
  import { ERC20Abi } from "../abis/ERC20Abi.js";
10
16
  import { KernelAccountAbi } from "../abis/KernelAccountAbi.js";
11
17
  import { MultiSendAbi } from "../abis/MultiSendAbi.js";
@@ -180,7 +186,11 @@ export class TokenPaymaster extends Paymaster {
180
186
  chainId
181
187
  );
182
188
  let paymasterAddress = await this.getPaymasterAddress(paymasterProvider);
183
- if (gasTokenAddress !== undefined && paymasterAddress !== undefined) {
189
+ if (
190
+ gasTokenAddress !== undefined &&
191
+ paymasterAddress !== undefined &&
192
+ isAddress(paymasterAddress)
193
+ ) {
184
194
  const erc20UserOp = await this.getERC20UserOp(
185
195
  struct,
186
196
  mainCall,