@zerodev/sdk 4.0.14 → 4.0.15

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 (31) hide show
  1. package/dist/cjs/kernel-zerodev/ethers-provider/ethers-provider.js +13 -4
  2. package/dist/cjs/kernel-zerodev/ethers-provider/ethers-provider.js.map +1 -1
  3. package/dist/cjs/kernel-zerodev/paymaster/token-paymaster.d.ts +1 -1
  4. package/dist/cjs/kernel-zerodev/paymaster/token-paymaster.js +3 -2
  5. package/dist/cjs/kernel-zerodev/paymaster/token-paymaster.js.map +1 -1
  6. package/dist/cjs/kernel-zerodev/validator/base.d.ts +0 -3
  7. package/dist/cjs/kernel-zerodev/validator/base.js +0 -7
  8. package/dist/cjs/kernel-zerodev/validator/base.js.map +1 -1
  9. package/dist/cjs/kernel-zerodev/validator-provider/base.js +11 -5
  10. package/dist/cjs/kernel-zerodev/validator-provider/base.js.map +1 -1
  11. package/dist/esm/kernel-zerodev/ethers-provider/ethers-provider.js +13 -4
  12. package/dist/esm/kernel-zerodev/ethers-provider/ethers-provider.js.map +1 -1
  13. package/dist/esm/kernel-zerodev/paymaster/token-paymaster.d.ts +1 -1
  14. package/dist/esm/kernel-zerodev/paymaster/token-paymaster.js +3 -2
  15. package/dist/esm/kernel-zerodev/paymaster/token-paymaster.js.map +1 -1
  16. package/dist/esm/kernel-zerodev/validator/base.d.ts +0 -3
  17. package/dist/esm/kernel-zerodev/validator/base.js +0 -7
  18. package/dist/esm/kernel-zerodev/validator/base.js.map +1 -1
  19. package/dist/esm/kernel-zerodev/validator-provider/base.js +11 -5
  20. package/dist/esm/kernel-zerodev/validator-provider/base.js.map +1 -1
  21. package/dist/types/kernel-zerodev/ethers-provider/ethers-provider.d.ts.map +1 -1
  22. package/dist/types/kernel-zerodev/paymaster/token-paymaster.d.ts +1 -1
  23. package/dist/types/kernel-zerodev/paymaster/token-paymaster.d.ts.map +1 -1
  24. package/dist/types/kernel-zerodev/validator/base.d.ts +0 -3
  25. package/dist/types/kernel-zerodev/validator/base.d.ts.map +1 -1
  26. package/dist/types/kernel-zerodev/validator-provider/base.d.ts.map +1 -1
  27. package/package.json +1 -1
  28. package/src/kernel-zerodev/ethers-provider/ethers-provider.ts +16 -4
  29. package/src/kernel-zerodev/paymaster/token-paymaster.ts +5 -2
  30. package/src/kernel-zerodev/validator/base.ts +0 -4
  31. package/src/kernel-zerodev/validator-provider/base.ts +14 -5
@@ -52,15 +52,24 @@ class ZeroDevEthersProvider extends providers_1.JsonRpcProvider {
52
52
  return this;
53
53
  }
54
54
  });
55
- let accountProvider = new index_js_2.ValidatorProviders[validatorType](params);
56
- if (params.usePaymaster === undefined || params.usePaymaster) {
55
+ let bundlerProvider = params.bundlerProvider;
56
+ const shouldUsePaymaster = params.usePaymaster === undefined || params.usePaymaster;
57
+ if (params.opts?.paymasterConfig &&
58
+ params.opts?.paymasterConfig.policy === "TOKEN_PAYMASTER" &&
59
+ shouldUsePaymaster) {
60
+ bundlerProvider = "STACKUP";
61
+ }
62
+ let accountProvider = new index_js_2.ValidatorProviders[validatorType]({
63
+ ...params,
64
+ bundlerProvider,
65
+ });
66
+ if (shouldUsePaymaster) {
57
67
  let paymasterConfig = params.opts?.paymasterConfig ?? {
58
68
  policy: "VERIFYING_PAYMASTER",
59
69
  };
60
70
  paymasterConfig = {
61
71
  ...paymasterConfig,
62
- paymasterProvider: params.opts?.paymasterConfig?.paymasterProvider ??
63
- params.bundlerProvider,
72
+ paymasterProvider: params.opts?.paymasterConfig?.paymasterProvider ?? bundlerProvider,
64
73
  };
65
74
  accountProvider = (0, paymaster_js_1.withZeroDevPaymasterAndData)(accountProvider, paymasterConfig);
66
75
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ethers-provider.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/ethers-provider/ethers-provider.ts"],"names":[],"mappings":"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","sourcesContent":["import { getChainId } from \"../api/index.js\";\nimport {\n getChain,\n BaseSmartContractAccount,\n defineReadOnly,\n type AccountMiddlewareFn,\n type FeeDataMiddleware,\n type GasEstimatorMiddleware,\n type PaymasterAndDataMiddleware,\n type PublicErc4337Client,\n} from \"@alchemy/aa-core\";\nimport { ZeroDevAccountSigner } from \"./account-signer.js\";\nimport { JsonRpcProvider } from \"@ethersproject/providers\";\nimport type { SupportedValidators } from \"../validator/types.js\";\nimport type {\n ValidatorProviderParamsMap,\n ValidatorProviderTypeMap,\n} from \"../validator-provider/types.js\";\nimport { ValidatorProviders } from \"../validator-provider/index.js\";\nimport { withZeroDevPaymasterAndData } from \"../middleware/paymaster.js\";\n\nexport class ZeroDevEthersProvider<\n V extends SupportedValidators\n> extends JsonRpcProvider {\n readonly accountProvider: ValidatorProviderTypeMap[V];\n constructor(validatorType: V, params: ValidatorProviderParamsMap[V]) {\n super();\n let accountProvider = new ValidatorProviders[validatorType](params);\n if (params.usePaymaster === undefined || params.usePaymaster) {\n let paymasterConfig = params.opts?.paymasterConfig ?? {\n policy: \"VERIFYING_PAYMASTER\",\n };\n paymasterConfig = {\n ...paymasterConfig,\n paymasterProvider:\n params.opts?.paymasterConfig?.paymasterProvider ??\n params.bundlerProvider,\n };\n accountProvider = withZeroDevPaymasterAndData(\n accountProvider,\n paymasterConfig\n ) as ValidatorProviderTypeMap[V];\n }\n this.accountProvider = accountProvider;\n }\n\n public static async init<V extends SupportedValidators>(\n validatorType: V,\n params: ValidatorProviderParamsMap[V]\n ): Promise<ZeroDevEthersProvider<V>> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n const instance = new ZeroDevEthersProvider(validatorType, {\n ...params,\n opts: {\n ...params.opts,\n providerConfig: {\n chain,\n ...params.opts?.providerConfig,\n },\n },\n });\n\n return instance;\n }\n\n getAccountProvider(): ValidatorProviderTypeMap[V] {\n return this.accountProvider;\n }\n\n /**\n * Rewrites the send method to use the account provider's EIP-1193\n * compliant request method\n *\n * @param method - the RPC method to call\n * @param params - the params required by the RPC method\n * @returns the result of the RPC call\n */\n send(method: string, params: any[]): Promise<any> {\n return this.accountProvider.request({ method, params });\n }\n\n /**\n * Connects the Provider to an Account and returns a Signer\n *\n * @param fn - a function that takes the account provider's rpcClient and returns a BaseSmartContractAccount\n * @returns an {@link ZeroDevAccountSigner} that can be used to sign and send user operations\n */\n connectToAccount(\n fn: (rpcClient: PublicErc4337Client) => BaseSmartContractAccount\n ): ZeroDevAccountSigner<V> {\n defineReadOnly(\n this,\n \"accountProvider\",\n this.accountProvider.connect(fn) as ValidatorProviderTypeMap[V]\n );\n return this.getAccountSigner();\n }\n\n /**\n * @returns an {@link ZeroDevAccountSigner} using this as the underlying provider\n */\n getAccountSigner(): ZeroDevAccountSigner<V> {\n return new ZeroDevAccountSigner(this);\n }\n\n withPaymasterMiddleware = (overrides: {\n dummyPaymasterDataMiddleware?: PaymasterAndDataMiddleware;\n paymasterDataMiddleware?: PaymasterAndDataMiddleware;\n }): this => {\n this.accountProvider.withPaymasterMiddleware(overrides);\n return this;\n };\n\n withGasEstimator = (override: GasEstimatorMiddleware): this => {\n this.accountProvider.withGasEstimator(override);\n return this;\n };\n\n withFeeDataGetter = (override: FeeDataMiddleware): this => {\n this.accountProvider.withFeeDataGetter(override);\n return this;\n };\n\n withCustomMiddleware = (override: AccountMiddlewareFn): this => {\n this.accountProvider.withCustomMiddleware(override);\n return this;\n };\n\n getPublicErc4337Client(): PublicErc4337Client {\n return this.accountProvider.rpcClient;\n }\n}\n"]}
1
+ {"version":3,"file":"ethers-provider.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/ethers-provider/ethers-provider.ts"],"names":[],"mappings":"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","sourcesContent":["import { getChainId } from \"../api/index.js\";\nimport {\n getChain,\n BaseSmartContractAccount,\n defineReadOnly,\n type AccountMiddlewareFn,\n type FeeDataMiddleware,\n type GasEstimatorMiddleware,\n type PaymasterAndDataMiddleware,\n type PublicErc4337Client,\n} from \"@alchemy/aa-core\";\nimport { ZeroDevAccountSigner } from \"./account-signer.js\";\nimport { JsonRpcProvider } from \"@ethersproject/providers\";\nimport type { SupportedValidators } from \"../validator/types.js\";\nimport type {\n ValidatorProviderParamsMap,\n ValidatorProviderTypeMap,\n} from \"../validator-provider/types.js\";\nimport { ValidatorProviders } from \"../validator-provider/index.js\";\nimport { withZeroDevPaymasterAndData } from \"../middleware/paymaster.js\";\n\nexport class ZeroDevEthersProvider<\n V extends SupportedValidators\n> extends JsonRpcProvider {\n readonly accountProvider: ValidatorProviderTypeMap[V];\n constructor(validatorType: V, params: ValidatorProviderParamsMap[V]) {\n super();\n let bundlerProvider = params.bundlerProvider;\n const shouldUsePaymaster =\n params.usePaymaster === undefined || params.usePaymaster;\n if (\n params.opts?.paymasterConfig &&\n params.opts?.paymasterConfig.policy === \"TOKEN_PAYMASTER\" &&\n shouldUsePaymaster\n ) {\n bundlerProvider = \"STACKUP\";\n }\n let accountProvider = new ValidatorProviders[validatorType]({\n ...params,\n bundlerProvider,\n });\n if (shouldUsePaymaster) {\n let paymasterConfig = params.opts?.paymasterConfig ?? {\n policy: \"VERIFYING_PAYMASTER\",\n };\n paymasterConfig = {\n ...paymasterConfig,\n paymasterProvider:\n params.opts?.paymasterConfig?.paymasterProvider ?? bundlerProvider,\n };\n accountProvider = withZeroDevPaymasterAndData(\n accountProvider,\n paymasterConfig\n ) as ValidatorProviderTypeMap[V];\n }\n this.accountProvider = accountProvider;\n }\n\n public static async init<V extends SupportedValidators>(\n validatorType: V,\n params: ValidatorProviderParamsMap[V]\n ): Promise<ZeroDevEthersProvider<V>> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n const instance = new ZeroDevEthersProvider(validatorType, {\n ...params,\n opts: {\n ...params.opts,\n providerConfig: {\n chain,\n ...params.opts?.providerConfig,\n },\n },\n });\n\n return instance;\n }\n\n getAccountProvider(): ValidatorProviderTypeMap[V] {\n return this.accountProvider;\n }\n\n /**\n * Rewrites the send method to use the account provider's EIP-1193\n * compliant request method\n *\n * @param method - the RPC method to call\n * @param params - the params required by the RPC method\n * @returns the result of the RPC call\n */\n send(method: string, params: any[]): Promise<any> {\n return this.accountProvider.request({ method, params });\n }\n\n /**\n * Connects the Provider to an Account and returns a Signer\n *\n * @param fn - a function that takes the account provider's rpcClient and returns a BaseSmartContractAccount\n * @returns an {@link ZeroDevAccountSigner} that can be used to sign and send user operations\n */\n connectToAccount(\n fn: (rpcClient: PublicErc4337Client) => BaseSmartContractAccount\n ): ZeroDevAccountSigner<V> {\n defineReadOnly(\n this,\n \"accountProvider\",\n this.accountProvider.connect(fn) as ValidatorProviderTypeMap[V]\n );\n return this.getAccountSigner();\n }\n\n /**\n * @returns an {@link ZeroDevAccountSigner} using this as the underlying provider\n */\n getAccountSigner(): ZeroDevAccountSigner<V> {\n return new ZeroDevAccountSigner(this);\n }\n\n withPaymasterMiddleware = (overrides: {\n dummyPaymasterDataMiddleware?: PaymasterAndDataMiddleware;\n paymasterDataMiddleware?: PaymasterAndDataMiddleware;\n }): this => {\n this.accountProvider.withPaymasterMiddleware(overrides);\n return this;\n };\n\n withGasEstimator = (override: GasEstimatorMiddleware): this => {\n this.accountProvider.withGasEstimator(override);\n return this;\n };\n\n withFeeDataGetter = (override: FeeDataMiddleware): this => {\n this.accountProvider.withFeeDataGetter(override);\n return this;\n };\n\n withCustomMiddleware = (override: AccountMiddlewareFn): this => {\n this.accountProvider.withCustomMiddleware(override);\n return this;\n };\n\n getPublicErc4337Client(): PublicErc4337Client {\n return this.accountProvider.rpcClient;\n }\n}\n"]}
@@ -7,7 +7,7 @@ import { type PaymasterAndBundlerProviders, type PaymasterConfig } from "./types
7
7
  export declare class TokenPaymaster extends Paymaster {
8
8
  protected paymasterConfig: PaymasterConfig<"TOKEN_PAYMASTER">;
9
9
  constructor(provider: ZeroDevProvider, paymasterConfig: PaymasterConfig<"TOKEN_PAYMASTER">);
10
- getPaymasterAddress(): Promise<Hex | undefined>;
10
+ getPaymasterAddress(paymasterProvider?: PaymasterAndBundlerProviders): Promise<Hex | undefined>;
11
11
  decodeMainCallFromCallData(kernelAddress: PromiseOrValue<string>, callData: PromiseOrValue<BytesLike>): Promise<UserOperationCallDataWithDelegate | undefined>;
12
12
  getERC20UserOp(struct: UserOperationStruct, mainCall: UserOperationCallDataWithDelegate, gasTokenAddress: Hex, paymasterAddress: Hex): Promise<UserOperationStruct | undefined>;
13
13
  getPaymasterResponse(struct: UserOperationStruct, paymasterProvider?: PaymasterAndBundlerProviders, shouldOverrideFee?: boolean): Promise<UserOperationStruct | undefined>;
@@ -24,12 +24,13 @@ class TokenPaymaster extends base_js_1.Paymaster {
24
24
  value: paymasterConfig
25
25
  });
26
26
  }
27
- async getPaymasterAddress() {
27
+ async getPaymasterAddress(paymasterProvider) {
28
28
  const chainId = await (0, index_js_1.getChainId)(this.provider.getProjectId());
29
29
  try {
30
30
  const { data: paymasterResp } = await axios_1.default.post(`${constants_js_1.PAYMASTER_URL}/getPaymasterAddress`, {
31
31
  chainId,
32
32
  entryPointAddress: constants_js_1.ENTRYPOINT_ADDRESS,
33
+ paymasterProvider,
33
34
  }, { headers: { "Content-Type": "application/json" } });
34
35
  return paymasterResp;
35
36
  }
@@ -141,7 +142,7 @@ class TokenPaymaster extends base_js_1.Paymaster {
141
142
  throw new Error("ChainId not found");
142
143
  }
143
144
  const gasTokenAddress = (0, utils_js_1.getGasTokenAddress)(this.paymasterConfig.gasToken, chainId);
144
- let paymasterAddress = await this.getPaymasterAddress();
145
+ let paymasterAddress = await this.getPaymasterAddress(paymasterProvider);
145
146
  if (gasTokenAddress !== undefined && paymasterAddress !== undefined) {
146
147
  const erc20UserOp = await this.getERC20UserOp(struct, mainCall, gasTokenAddress, paymasterAddress);
147
148
  if (!erc20UserOp) {
@@ -1 +1 @@
1
- {"version":3,"file":"token-paymaster.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/paymaster/token-paymaster.ts"],"names":[],"mappings":";;;;;;AAMA,kDAA0B;AAC1B,+BAA+E;AAC/E,qDAA+C;AAC/C,qEAA+D;AAC/D,6DAAuD;AACvD,kDAKyB;AACzB,4CAGsB;AAEtB,0CAGqB;AACrB,uCAAsC;AAKtC,8CAA6C;AAE7C,MAAa,cAAe,SAAQ,mBAAS;IAC3C,YACE,QAAyB,EACf,eAAmD;QAE7D,KAAK,CAAC,QAAQ,CAAC,CAAC;QAFhB;;;;mBAAU,eAAe;WAAoC;IAG/D,CAAC;IACD,KAAK,CAAC,mBAAmB;QACvB,MAAM,OAAO,GAAG,MAAM,IAAA,qBAAU,EAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;QAE/D,IAAI;YACF,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,MAAM,eAAK,CAAC,IAAI,CAC9C,GAAG,4BAAa,sBAAsB,EACtC;gBACE,OAAO;gBACP,iBAAiB,EAAE,iCAAkB;aACtC,EACD,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,CACpD,CAAC;YACF,OAAO,aAAoB,CAAC;SAC7B;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACf,OAAO,SAAS,CAAC;SAClB;IACH,CAAC;IACD,KAAK,CAAC,0BAA0B,CAC9B,aAAqC,EACrC,QAAmC;QAEnC,IAAI,IAAI,GAAQ,IAAI,CAAC;QACrB,IAAI,QAAQ,YAAY,OAAO,EAAE;YAC/B,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC;YAC7B,IAAI,KAAK,YAAY,UAAU,EAAE;gBAC/B,IAAI,GAAG,IAAA,YAAK,EAAC,KAAK,CAAC,CAAC;aACrB;iBAAM;gBACL,IAAI,GAAG,KAAY,CAAC;aACrB;SACF;aAAM,IAAI,QAAQ,YAAY,UAAU,EAAE;YACzC,IAAI,GAAG,IAAA,YAAK,EAAC,QAAQ,CAAC,CAAC;SACxB;aAAM;YACL,IAAI,GAAG,QAAe,CAAC;SACxB;QAED,IAAI;YACF,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,GAAG,IAAA,yBAAkB,EAAC;gBAChD,GAAG,EAAE,sCAAgB;gBACrB,IAAI,EAAE,IAAI;aACX,CAAC,CAAC;YACH,IAAI,YAAY,KAAK,SAAS,EAAE;gBAC9B,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC;gBACnC,IAAI,aAAa,CAAC;gBAClB,IAAI;oBACF,CAAC,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,IAAA,yBAAkB,EAAC;wBACpD,GAAG,EAAE,8BAAY;wBACjB,IAAI;qBACL,CAAC,CAAC,CAAC;iBACL;gBAAC,OAAO,KAAK,EAAE,GAAE;gBAClB,IAAI,QAAQ,GAE4B;oBACtC,MAAM;oBACN,KAAK,EAAE,KAAK,IAAI,EAAE;oBAClB,IAAI;iBACL,CAAC;gBACF,IAAI,aAAa,KAAK,WAAW,EAAE;oBACjC,QAAQ,GAAG;wBACT,GAAG,QAAQ;wBACX,MAAM,EAAE,6BAAc;wBACtB,YAAY,EAAE,IAAI;wBAClB,IAAI;qBACL,CAAC;iBACH;gBACD,OAAO,QAAQ,CAAC;aACjB;SACF;QAAC,OAAO,KAAK,EAAE;YACd,OAAO;gBACL,MAAM,EAAE,CAAC,aAAa,YAAY,OAAO;oBACvC,CAAC,CAAC,MAAM,aAAa;oBACrB,CAAC,CAAC,aAAa,CAAQ;gBACzB,IAAI;gBACJ,KAAK,EAAE,EAAE;gBACT,YAAY,EAAE,IAAI;aACnB,CAAC;SACH;QACD,OAAO;IACT,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,MAA2B,EAC3B,QAA2C,EAC3C,eAAoB,EACpB,gBAAqB;QAErB,IAAI;YACF,MAAM,WAAW,GAA0B;gBACzC,MAAM,EAAE,eAAe;gBACvB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;gBAChB,IAAI,EAAE,IAAA,yBAAkB,EAAC;oBACvB,GAAG,EAAE,sBAAQ;oBACb,YAAY,EAAE,SAAS;oBACvB,IAAI,EAAE,CAAC,gBAAgB,EAAE,oCAAqB,CAAC,eAAe,CAAC,CAAC;iBACjE,CAAC;aACH,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;gBAC1B,MAAM,+BAAmB,CAAC;aAC3B;YACD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC;gBACnE,WAAW;gBACX,QAAQ;aACT,CAAC,CAAC;YACH,OAAO;gBACL,GAAG,MAAM;gBACT,QAAQ,EAAE,aAAa;gBACvB,YAAY,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC;oBACtD,OAAO,EAAE,iCAAkB;oBAC3B,EAAE,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;oBACpC,IAAI,EAAE,aAAa;iBACpB,CAAC;aACH,CAAC;SACH;QAAC,OAAO,KAAK,EAAE;YACd,OAAO;SACR;IACH,CAAC;IAED,KAAK,CAAC,oBAAoB,CACxB,MAA2B,EAC3B,iBAAgD,EAChD,iBAA2B;QAE3B,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,0BAA0B,CACpD,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,QAAQ,CAChB,CAAC;YACF,IAAI,CAAC,QAAQ,EAAE;gBACb,MAAM,8CAAkC,CAAC;aAC1C;YACD,MAAM,OAAO,GAAG,MAAM,IAAA,qBAAU,EAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;YAC/D,IAAI,CAAC,OAAO,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;aACtC;YACD,MAAM,eAAe,GAAG,IAAA,6BAAkB,EACxC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAC7B,OAAO,CACR,CAAC;YACF,IAAI,gBAAgB,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACxD,IAAI,eAAe,KAAK,SAAS,IAAI,gBAAgB,KAAK,SAAS,EAAE;gBACnE,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAC3C,MAAM,EACN,QAAQ,EACR,eAAe,EACf,gBAAgB,CACjB,CAAC;gBACF,IAAI,CAAC,WAAW,EAAE;oBAChB,OAAO,MAAM,CAAC;iBACf;gBACD,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC;oBAC1C,MAAM,EAAE,MAAM;oBACd,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,eAAe;oBACf,WAAW;oBACX,aAAa,EAAE,WAAW,CAAC,QAAQ;oBACnC,iBAAiB;oBACjB,iBAAiB;iBAClB,CAAC,CAAC;gBACH,IAAI,aAAa,EAAE;oBACjB,OAAO,aAAa,CAAC;iBACtB;aACF;SACF;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SACpB;QACD,OAAO;IACT,CAAC;CACF;AA9KD,wCA8KC","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(): 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 },\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();\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 { 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,6 +1,5 @@
1
1
  import { type SignTypedDataParams, type SmartAccountSigner, type UserOperationRequest } from "@alchemy/aa-core";
2
2
  import { type Chain, type Hex, type Address, type PublicClient, type Transport } from "viem";
3
- import type { PaymasterAndBundlerProviders } from "../paymaster/types.js";
4
3
  export declare enum ValidatorMode {
5
4
  sudo = "0x00000000",
6
5
  plugin = "0x00000001",
@@ -18,7 +17,6 @@ export interface KernelBaseValidatorParams {
18
17
  executor?: Address;
19
18
  selector?: Hex;
20
19
  rpcUrl?: string;
21
- bundlerProvider?: PaymasterAndBundlerProviders;
22
20
  }
23
21
  export type ValidatorPluginData = Required<Pick<KernelBaseValidatorParams, "executor" | "selector" | "validAfter" | "validUntil">>;
24
22
  export declare abstract class KernelBaseValidator {
@@ -33,7 +31,6 @@ export declare abstract class KernelBaseValidator {
33
31
  protected executor?: Address;
34
32
  protected selector?: Hex;
35
33
  protected rpcUrl?: string;
36
- protected bundlerProvider?: PaymasterAndBundlerProviders;
37
34
  publicClient?: PublicClient<Transport, Chain>;
38
35
  constructor(params: KernelBaseValidatorParams);
39
36
  abstract encodeEnable(enableData: Hex): Hex;
@@ -79,12 +79,6 @@ class KernelBaseValidator {
79
79
  writable: true,
80
80
  value: void 0
81
81
  });
82
- Object.defineProperty(this, "bundlerProvider", {
83
- enumerable: true,
84
- configurable: true,
85
- writable: true,
86
- value: void 0
87
- });
88
82
  Object.defineProperty(this, "publicClient", {
89
83
  enumerable: true,
90
84
  configurable: true,
@@ -102,7 +96,6 @@ class KernelBaseValidator {
102
96
  this.selector = params.selector;
103
97
  this.chain = params.chain;
104
98
  this.rpcUrl = params.rpcUrl ?? constants_js_1.BUNDLER_URL;
105
- this.bundlerProvider = params.bundlerProvider;
106
99
  this.publicClient = (0, viem_1.createPublicClient)({
107
100
  transport: (0, viem_1.http)(constants_js_1.CHAIN_ID_TO_NODE[this.chain?.id ?? chains_1.polygonMumbai.id]),
108
101
  chain: this.chain ?? chains_1.polygonMumbai,
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/base.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type SignTypedDataParams,\n type SmartAccountSigner,\n type UserOperationRequest,\n} from \"@alchemy/aa-core\";\nimport {\n concat,\n type Chain,\n type Hex,\n pad,\n toHex,\n type Address,\n concatHex,\n hexToBigInt,\n type PublicClient,\n type Transport,\n createPublicClient,\n http,\n} from \"viem\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport {\n BUNDLER_URL,\n CHAIN_ID_TO_NODE,\n ECDSA_VALIDATOR_ADDRESS,\n ENTRYPOINT_ADDRESS,\n} from \"../constants.js\";\nimport type { PaymasterAndBundlerProviders } from \"../paymaster/types.js\";\nimport { polygonMumbai } from \"viem/chains\";\n\nexport enum ValidatorMode {\n sudo = \"0x00000000\",\n plugin = \"0x00000001\",\n enable = \"0x00000002\",\n}\n\nexport interface KernelBaseValidatorParams {\n projectId: string;\n validatorAddress?: Hex;\n mode?: ValidatorMode;\n chain?: Chain;\n entryPointAddress?: Address;\n enableSignature?: Hex;\n validUntil?: number;\n validAfter?: number;\n executor?: Address;\n selector?: Hex;\n rpcUrl?: string;\n bundlerProvider?: PaymasterAndBundlerProviders;\n}\n\nexport type ValidatorPluginData = Required<\n Pick<\n KernelBaseValidatorParams,\n \"executor\" | \"selector\" | \"validAfter\" | \"validUntil\"\n >\n>;\n\n//Kernel wallet implementation separates out validation and execution phase. It allows you to have\n// custom wrapper logic for the validation phase in addition to signature of choice.\nexport abstract class KernelBaseValidator {\n readonly validatorAddress: Hex;\n mode: ValidatorMode;\n protected projectId: string;\n protected chain?: Chain;\n protected entryPointAddress: Address;\n protected enableSignature?: Hex;\n protected validUntil: number;\n protected validAfter: number;\n protected executor?: Address;\n protected selector?: Hex;\n protected rpcUrl?: string;\n protected bundlerProvider?: PaymasterAndBundlerProviders;\n publicClient?: PublicClient<Transport, Chain>;\n\n constructor(params: KernelBaseValidatorParams) {\n this.projectId = params.projectId;\n this.validatorAddress = params.validatorAddress ?? ECDSA_VALIDATOR_ADDRESS;\n this.mode = params.mode ?? ValidatorMode.sudo;\n this.entryPointAddress = params.entryPointAddress ?? ENTRYPOINT_ADDRESS;\n this.enableSignature = params.enableSignature;\n this.validUntil = params.validUntil ?? 0;\n this.validAfter = params.validAfter ?? 0;\n this.executor = params.executor;\n this.selector = params.selector;\n this.chain = params.chain;\n this.rpcUrl = params.rpcUrl ?? BUNDLER_URL;\n this.bundlerProvider = params.bundlerProvider;\n this.publicClient = createPublicClient({\n transport: http(CHAIN_ID_TO_NODE[this.chain?.id ?? polygonMumbai.id]),\n chain: this.chain ?? polygonMumbai,\n });\n }\n\n abstract encodeEnable(enableData: Hex): Hex;\n\n abstract encodeDisable(enableData: Hex): Hex;\n\n abstract getEnableData(): Promise<Hex>;\n\n abstract signMessage(message: Uint8Array | string | Hex): Promise<Hex>;\n\n abstract signTypedData(params: SignTypedDataParams): Promise<Hex>;\n\n abstract signUserOp(userOp: UserOperationRequest): Promise<Hex>;\n\n abstract signer(): Promise<SmartAccountSigner>;\n\n abstract getDummyUserOpSignature(callData?: Hex): Promise<Hex>;\n\n abstract isPluginEnabled(\n kernelAccountAddress: Address,\n selector: Hex\n ): Promise<boolean>;\n\n shouldDelegateViaFallback(): boolean {\n return true;\n }\n\n getPluginValidatorData(): ValidatorPluginData {\n if (!this.selector || !this.executor) {\n throw Error(\"Plugin Validator data params uninitialised\");\n }\n return {\n selector: this.selector,\n executor: this.executor,\n validAfter: this.validAfter,\n validUntil: this.validUntil,\n };\n }\n\n async getDynamicDummySignature(\n kernelAccountAddress: Address,\n calldata: Hex\n ): Promise<Hex> {\n const dummyECDSASig =\n \"0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c\";\n const validatorMode = await this.resolveValidatorMode(\n kernelAccountAddress,\n calldata\n );\n if (validatorMode === ValidatorMode.enable) {\n const enableData = await this.getEnableData();\n const enableDataLength = enableData.length / 2 - 1;\n const enableSigLength = 65;\n const staticDummySig = concatHex([\n \"0x000000000000000000000000\",\n this.getAddress(),\n this.executor!,\n ]);\n\n return concatHex([\n ValidatorMode.enable,\n staticDummySig,\n pad(toHex(enableDataLength), { size: 32 }),\n enableData,\n pad(toHex(enableSigLength), { size: 32 }),\n dummyECDSASig,\n await this.getDummyUserOpSignature(calldata),\n ]);\n }\n return concatHex([\n validatorMode,\n await this.getDummyUserOpSignature(calldata),\n ]);\n }\n\n setEnableSignature(enableSignature: Hex) {\n this.enableSignature = enableSignature;\n }\n\n getEnableSignature(): Hex | undefined {\n return this.enableSignature;\n }\n\n getAddress(): Hex {\n return this.validatorAddress;\n }\n\n async approveExecutor(\n kernel: Address,\n selector: Hex,\n executor: Address,\n validUntil: number,\n validAfter: number,\n validator: KernelBaseValidator\n ): Promise<Hex> {\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n const sender = kernel;\n const signer = await this.signer();\n const ownerSig = await signer.signTypedData({\n domain: {\n name: \"Kernel\",\n version: \"0.2.1\",\n chainId: this.chain.id,\n verifyingContract: sender,\n },\n types: {\n ValidatorApproved: [\n { name: \"sig\", type: \"bytes4\" },\n { name: \"validatorData\", type: \"uint256\" },\n { name: \"executor\", type: \"address\" },\n { name: \"enableData\", type: \"bytes\" },\n ],\n },\n message: {\n sig: selector as Hex,\n validatorData: hexToBigInt(\n concatHex([\n pad(toHex(validUntil), { size: 6 }),\n pad(toHex(validAfter), { size: 6 }),\n validator.getAddress(),\n ]),\n { size: 32 }\n ),\n executor: executor as Address,\n enableData: await validator.getEnableData(),\n },\n primaryType: \"ValidatorApproved\",\n });\n return ownerSig;\n }\n\n async resolveValidatorMode(\n kernelAccountAddress: Address,\n callData: Hex\n ): Promise<ValidatorMode> {\n if (!this.chain || !this.publicClient) {\n throw new Error(\"Validator uninitialized\");\n }\n\n let mode: ValidatorMode;\n try {\n const defaultValidatorAddress = await this.publicClient.readContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n functionName: \"getDefaultValidator\",\n });\n if (\n defaultValidatorAddress?.toLowerCase() ===\n this.validatorAddress.toLowerCase() ||\n this.mode === ValidatorMode.sudo\n ) {\n mode = ValidatorMode.sudo;\n } else if (\n await this.isPluginEnabled(\n kernelAccountAddress,\n callData.toString().slice(0, 10) as Hex\n )\n ) {\n mode = ValidatorMode.plugin;\n } else {\n mode = ValidatorMode.enable;\n }\n } catch (error) {\n if (this.mode === ValidatorMode.plugin) {\n mode = ValidatorMode.enable;\n } else {\n mode = this.mode;\n }\n }\n return mode;\n }\n\n async getSignature(userOp: UserOperationRequest): Promise<Hex> {\n const mode = await this.resolveValidatorMode(\n userOp.sender,\n userOp.callData\n );\n if (mode === ValidatorMode.sudo || mode === ValidatorMode.plugin) {\n return concatHex([this.mode, await this.signUserOp(userOp)]);\n } else {\n const enableData = await this.getEnableData();\n const enableDataLength = enableData.length / 2 - 1;\n const enableSignature = this.getEnableSignature();\n if (!enableSignature) {\n throw new Error(\"Enable signature not set\");\n }\n return concat([\n mode, // 4 bytes 0 - 4\n pad(toHex(this.validUntil), { size: 6 }), // 6 bytes 4 - 10\n pad(toHex(this.validAfter), { size: 6 }), // 6 bytes 10 - 16\n pad(this.validatorAddress, { size: 20 }), // 20 bytes 16 - 36\n pad(this.executor!, { size: 20 }), // 20 bytes 36 - 56\n pad(toHex(enableDataLength), { size: 32 }), // 32 bytes 56 - 88\n enableData, // 88 - 88 + enableData.length\n pad(toHex(enableSignature.length / 2 - 1), { size: 32 }), // 32 bytes 88 + enableData.length - 120 + enableData.length\n enableSignature, // 120 + enableData.length - 120 + enableData.length + enableSignature.length\n await this.signUserOp(userOp), // 120 + enableData.length + enableSignature.length - 120 + enableData.length + enableSignature.length + userOperation.length\n ]);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/base.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type SignTypedDataParams,\n type SmartAccountSigner,\n type UserOperationRequest,\n} from \"@alchemy/aa-core\";\nimport {\n concat,\n type Chain,\n type Hex,\n pad,\n toHex,\n type Address,\n concatHex,\n hexToBigInt,\n type PublicClient,\n type Transport,\n createPublicClient,\n http,\n} from \"viem\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport {\n BUNDLER_URL,\n CHAIN_ID_TO_NODE,\n ECDSA_VALIDATOR_ADDRESS,\n ENTRYPOINT_ADDRESS,\n} from \"../constants.js\";\nimport { polygonMumbai } from \"viem/chains\";\n\nexport enum ValidatorMode {\n sudo = \"0x00000000\",\n plugin = \"0x00000001\",\n enable = \"0x00000002\",\n}\n\nexport interface KernelBaseValidatorParams {\n projectId: string;\n validatorAddress?: Hex;\n mode?: ValidatorMode;\n chain?: Chain;\n entryPointAddress?: Address;\n enableSignature?: Hex;\n validUntil?: number;\n validAfter?: number;\n executor?: Address;\n selector?: Hex;\n rpcUrl?: string;\n}\n\nexport type ValidatorPluginData = Required<\n Pick<\n KernelBaseValidatorParams,\n \"executor\" | \"selector\" | \"validAfter\" | \"validUntil\"\n >\n>;\n\n//Kernel wallet implementation separates out validation and execution phase. It allows you to have\n// custom wrapper logic for the validation phase in addition to signature of choice.\nexport abstract class KernelBaseValidator {\n readonly validatorAddress: Hex;\n mode: ValidatorMode;\n protected projectId: string;\n protected chain?: Chain;\n protected entryPointAddress: Address;\n protected enableSignature?: Hex;\n protected validUntil: number;\n protected validAfter: number;\n protected executor?: Address;\n protected selector?: Hex;\n protected rpcUrl?: string;\n publicClient?: PublicClient<Transport, Chain>;\n\n constructor(params: KernelBaseValidatorParams) {\n this.projectId = params.projectId;\n this.validatorAddress = params.validatorAddress ?? ECDSA_VALIDATOR_ADDRESS;\n this.mode = params.mode ?? ValidatorMode.sudo;\n this.entryPointAddress = params.entryPointAddress ?? ENTRYPOINT_ADDRESS;\n this.enableSignature = params.enableSignature;\n this.validUntil = params.validUntil ?? 0;\n this.validAfter = params.validAfter ?? 0;\n this.executor = params.executor;\n this.selector = params.selector;\n this.chain = params.chain;\n this.rpcUrl = params.rpcUrl ?? BUNDLER_URL;\n this.publicClient = createPublicClient({\n transport: http(CHAIN_ID_TO_NODE[this.chain?.id ?? polygonMumbai.id]),\n chain: this.chain ?? polygonMumbai,\n });\n }\n\n abstract encodeEnable(enableData: Hex): Hex;\n\n abstract encodeDisable(enableData: Hex): Hex;\n\n abstract getEnableData(): Promise<Hex>;\n\n abstract signMessage(message: Uint8Array | string | Hex): Promise<Hex>;\n\n abstract signTypedData(params: SignTypedDataParams): Promise<Hex>;\n\n abstract signUserOp(userOp: UserOperationRequest): Promise<Hex>;\n\n abstract signer(): Promise<SmartAccountSigner>;\n\n abstract getDummyUserOpSignature(callData?: Hex): Promise<Hex>;\n\n abstract isPluginEnabled(\n kernelAccountAddress: Address,\n selector: Hex\n ): Promise<boolean>;\n\n shouldDelegateViaFallback(): boolean {\n return true;\n }\n\n getPluginValidatorData(): ValidatorPluginData {\n if (!this.selector || !this.executor) {\n throw Error(\"Plugin Validator data params uninitialised\");\n }\n return {\n selector: this.selector,\n executor: this.executor,\n validAfter: this.validAfter,\n validUntil: this.validUntil,\n };\n }\n\n async getDynamicDummySignature(\n kernelAccountAddress: Address,\n calldata: Hex\n ): Promise<Hex> {\n const dummyECDSASig =\n \"0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c\";\n const validatorMode = await this.resolveValidatorMode(\n kernelAccountAddress,\n calldata\n );\n if (validatorMode === ValidatorMode.enable) {\n const enableData = await this.getEnableData();\n const enableDataLength = enableData.length / 2 - 1;\n const enableSigLength = 65;\n const staticDummySig = concatHex([\n \"0x000000000000000000000000\",\n this.getAddress(),\n this.executor!,\n ]);\n\n return concatHex([\n ValidatorMode.enable,\n staticDummySig,\n pad(toHex(enableDataLength), { size: 32 }),\n enableData,\n pad(toHex(enableSigLength), { size: 32 }),\n dummyECDSASig,\n await this.getDummyUserOpSignature(calldata),\n ]);\n }\n return concatHex([\n validatorMode,\n await this.getDummyUserOpSignature(calldata),\n ]);\n }\n\n setEnableSignature(enableSignature: Hex) {\n this.enableSignature = enableSignature;\n }\n\n getEnableSignature(): Hex | undefined {\n return this.enableSignature;\n }\n\n getAddress(): Hex {\n return this.validatorAddress;\n }\n\n async approveExecutor(\n kernel: Address,\n selector: Hex,\n executor: Address,\n validUntil: number,\n validAfter: number,\n validator: KernelBaseValidator\n ): Promise<Hex> {\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n const sender = kernel;\n const signer = await this.signer();\n const ownerSig = await signer.signTypedData({\n domain: {\n name: \"Kernel\",\n version: \"0.2.1\",\n chainId: this.chain.id,\n verifyingContract: sender,\n },\n types: {\n ValidatorApproved: [\n { name: \"sig\", type: \"bytes4\" },\n { name: \"validatorData\", type: \"uint256\" },\n { name: \"executor\", type: \"address\" },\n { name: \"enableData\", type: \"bytes\" },\n ],\n },\n message: {\n sig: selector as Hex,\n validatorData: hexToBigInt(\n concatHex([\n pad(toHex(validUntil), { size: 6 }),\n pad(toHex(validAfter), { size: 6 }),\n validator.getAddress(),\n ]),\n { size: 32 }\n ),\n executor: executor as Address,\n enableData: await validator.getEnableData(),\n },\n primaryType: \"ValidatorApproved\",\n });\n return ownerSig;\n }\n\n async resolveValidatorMode(\n kernelAccountAddress: Address,\n callData: Hex\n ): Promise<ValidatorMode> {\n if (!this.chain || !this.publicClient) {\n throw new Error(\"Validator uninitialized\");\n }\n\n let mode: ValidatorMode;\n try {\n const defaultValidatorAddress = await this.publicClient.readContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n functionName: \"getDefaultValidator\",\n });\n if (\n defaultValidatorAddress?.toLowerCase() ===\n this.validatorAddress.toLowerCase() ||\n this.mode === ValidatorMode.sudo\n ) {\n mode = ValidatorMode.sudo;\n } else if (\n await this.isPluginEnabled(\n kernelAccountAddress,\n callData.toString().slice(0, 10) as Hex\n )\n ) {\n mode = ValidatorMode.plugin;\n } else {\n mode = ValidatorMode.enable;\n }\n } catch (error) {\n if (this.mode === ValidatorMode.plugin) {\n mode = ValidatorMode.enable;\n } else {\n mode = this.mode;\n }\n }\n return mode;\n }\n\n async getSignature(userOp: UserOperationRequest): Promise<Hex> {\n const mode = await this.resolveValidatorMode(\n userOp.sender,\n userOp.callData\n );\n if (mode === ValidatorMode.sudo || mode === ValidatorMode.plugin) {\n return concatHex([this.mode, await this.signUserOp(userOp)]);\n } else {\n const enableData = await this.getEnableData();\n const enableDataLength = enableData.length / 2 - 1;\n const enableSignature = this.getEnableSignature();\n if (!enableSignature) {\n throw new Error(\"Enable signature not set\");\n }\n return concat([\n mode, // 4 bytes 0 - 4\n pad(toHex(this.validUntil), { size: 6 }), // 6 bytes 4 - 10\n pad(toHex(this.validAfter), { size: 6 }), // 6 bytes 10 - 16\n pad(this.validatorAddress, { size: 20 }), // 20 bytes 16 - 36\n pad(this.executor!, { size: 20 }), // 20 bytes 36 - 56\n pad(toHex(enableDataLength), { size: 32 }), // 32 bytes 56 - 88\n enableData, // 88 - 88 + enableData.length\n pad(toHex(enableSignature.length / 2 - 1), { size: 32 }), // 32 bytes 88 + enableData.length - 120 + enableData.length\n enableSignature, // 120 + enableData.length - 120 + enableData.length + enableSignature.length\n await this.signUserOp(userOp), // 120 + enableData.length + enableSignature.length - 120 + enableData.length + enableSignature.length + userOperation.length\n ]);\n }\n }\n}\n"]}
@@ -7,12 +7,19 @@ const chains_1 = require("viem/chains");
7
7
  const paymaster_js_1 = require("../middleware/paymaster.js");
8
8
  class ValidatorProvider extends provider_js_1.ZeroDevProvider {
9
9
  constructor(params, validator) {
10
+ let bundlerProvider = params.bundlerProvider;
11
+ const shouldUsePaymaster = params.usePaymaster === undefined || params.usePaymaster;
12
+ if (params.opts?.paymasterConfig &&
13
+ params.opts?.paymasterConfig.policy === "TOKEN_PAYMASTER" &&
14
+ shouldUsePaymaster) {
15
+ bundlerProvider = "STACKUP";
16
+ }
10
17
  super({
11
18
  ...params.opts?.providerConfig,
12
19
  chain: params.opts?.providerConfig?.chain ?? chains_1.polygonMumbai,
13
20
  rpcUrl: params.opts?.providerConfig?.rpcUrl,
14
21
  projectId: params.projectId,
15
- bundlerProvider: params.bundlerProvider,
22
+ bundlerProvider,
16
23
  });
17
24
  Object.defineProperty(this, "defaultProvider", {
18
25
  enumerable: true,
@@ -88,18 +95,17 @@ class ValidatorProvider extends provider_js_1.ZeroDevProvider {
88
95
  validator,
89
96
  defaultValidator: params.defaultProvider?.getValidator(),
90
97
  rpcClient: this.rpcClient,
91
- bundlerProvider: params.bundlerProvider,
98
+ bundlerProvider,
92
99
  index: params.defaultProvider?.getAccount().getIndex(),
93
100
  ...params.opts?.accountConfig,
94
101
  }));
95
- if (params.usePaymaster === undefined || params.usePaymaster) {
102
+ if (shouldUsePaymaster) {
96
103
  let paymasterConfig = params.opts?.paymasterConfig ?? {
97
104
  policy: "VERIFYING_PAYMASTER",
98
105
  };
99
106
  paymasterConfig = {
100
107
  ...paymasterConfig,
101
- paymasterProvider: params.opts?.paymasterConfig?.paymasterProvider ??
102
- params.bundlerProvider,
108
+ paymasterProvider: params.opts?.paymasterConfig?.paymasterProvider ?? bundlerProvider,
103
109
  };
104
110
  (0, paymaster_js_1.withZeroDevPaymasterAndData)(this, paymasterConfig);
105
111
  }
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator-provider/base.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Hex, type SendUserOperationResult } from \"@alchemy/aa-core\";\nimport { ZeroDevProvider, type ZeroDevProviderConfig } from \"../provider.js\";\nimport type {\n KernelBaseValidator,\n KernelBaseValidatorParams,\n} from \"../validator/base.js\";\nimport type {\n PaymasterAndBundlerProviders,\n PaymasterConfig,\n PaymasterPolicy,\n} from \"../paymaster/types.js\";\nimport {\n KernelSmartContractAccount,\n type KernelSmartAccountParams,\n isKernelAccount,\n} from \"../account.js\";\nimport { polygonMumbai } from \"viem/chains\";\nimport { withZeroDevPaymasterAndData } from \"../middleware/paymaster.js\";\nimport type { RequiredProps } from \"../types.js\";\n\nexport type ValidatorProviderParamsOpts<P extends KernelBaseValidatorParams> = {\n paymasterConfig?: PaymasterConfig<PaymasterPolicy>;\n providerConfig?: Partial<ZeroDevProviderConfig>;\n accountConfig?: Omit<\n KernelSmartAccountParams,\n keyof ExtendedValidatorProviderParams<P>\n >;\n validatorConfig?: Omit<P, keyof ExtendedValidatorProviderParams<P>>;\n};\n\nexport interface ValidatorProviderParams<P extends KernelBaseValidatorParams> {\n projectId: string;\n bundlerProvider?: PaymasterAndBundlerProviders;\n opts?: ValidatorProviderParamsOpts<P>;\n usePaymaster?: boolean;\n defaultProvider?: ValidatorProvider<\n KernelBaseValidator,\n KernelBaseValidatorParams\n >;\n}\n\nexport type ExtendedValidatorProviderParams<\n P extends KernelBaseValidatorParams\n> = ValidatorProviderParams<P> & RequiredProps<P>;\n\n// A simple facade abstraction for validator related provider operations\n// Needs to be implemented for each validator plugin\nexport abstract class ValidatorProvider<\n V extends KernelBaseValidator,\n P extends KernelBaseValidatorParams\n> extends ZeroDevProvider {\n protected defaultProvider?: ValidatorProvider<\n KernelBaseValidator,\n KernelBaseValidatorParams\n >;\n constructor(\n params: ExtendedValidatorProviderParams<P>,\n validator: KernelBaseValidator\n ) {\n super({\n ...params.opts?.providerConfig,\n chain: params.opts?.providerConfig?.chain ?? polygonMumbai,\n rpcUrl: params.opts?.providerConfig?.rpcUrl,\n projectId: params.projectId,\n bundlerProvider: params.bundlerProvider,\n });\n this.connect(\n () =>\n new KernelSmartContractAccount({\n projectId: params.projectId,\n validator,\n defaultValidator: params.defaultProvider?.getValidator(),\n rpcClient: this.rpcClient,\n bundlerProvider: params.bundlerProvider,\n index: params.defaultProvider?.getAccount().getIndex(),\n ...params.opts?.accountConfig,\n })\n );\n if (params.usePaymaster === undefined || params.usePaymaster) {\n let paymasterConfig = params.opts?.paymasterConfig ?? {\n policy: \"VERIFYING_PAYMASTER\",\n };\n paymasterConfig = {\n ...paymasterConfig,\n paymasterProvider:\n params.opts?.paymasterConfig?.paymasterProvider ??\n params.bundlerProvider,\n };\n withZeroDevPaymasterAndData(this, paymasterConfig);\n }\n }\n\n getValidator = (): V => {\n if (!isKernelAccount(this.account) || !this.account.validator) {\n throw new Error(\n \"ValidatorProvider: account with validator is not set, did you call all connects first?\"\n );\n }\n return this.account.getValidator() as unknown as V;\n };\n\n getEncodedEnableData = async (enableData: Hex): Promise<Hex> => {\n if (!isKernelAccount(this.account) || !this.account.validator) {\n throw new Error(\n \"ValidatorProvider: account with validator is not set, did you call all connects first?\"\n );\n }\n return await this.account.validator.encodeEnable(enableData);\n };\n\n getEncodedDisableData = async (disableData: Hex): Promise<Hex> => {\n if (!isKernelAccount(this.account) || !this.account.validator) {\n throw new Error(\n \"ValidatorProvider: account with validator is not set, did you call all connects first?\"\n );\n }\n return await this.account.validator.encodeDisable(disableData);\n };\n\n sendEnableUserOperation = async (\n enableData: Hex\n ): Promise<SendUserOperationResult> => {\n const encodedEnableData = await this.getEncodedEnableData(enableData);\n if (!isKernelAccount(this.account) || !this.account.validator) {\n throw new Error(\n \"ValidatorProvider: account with validator is not set, did you call all connects first?\"\n );\n }\n\n return await this.sendUserOperation({\n target: this.account.validator.validatorAddress,\n data: encodedEnableData,\n });\n };\n\n sendDisableUserOperation = async (\n disableData: Hex\n ): Promise<SendUserOperationResult> => {\n const encodedDisableData = await this.getEncodedDisableData(disableData);\n if (!isKernelAccount(this.account) || !this.account.validator) {\n throw new Error(\n \"ValidatorProvider: account with validator is not set, did you call all connects first?\"\n );\n }\n\n return await this.sendUserOperation({\n target: this.account.validator.validatorAddress,\n data: encodedDisableData,\n });\n };\n}\n"]}
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator-provider/base.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Hex, type SendUserOperationResult } from \"@alchemy/aa-core\";\nimport { ZeroDevProvider, type ZeroDevProviderConfig } from \"../provider.js\";\nimport type {\n KernelBaseValidator,\n KernelBaseValidatorParams,\n} from \"../validator/base.js\";\nimport type {\n PaymasterAndBundlerProviders,\n PaymasterConfig,\n PaymasterPolicy,\n} from \"../paymaster/types.js\";\nimport {\n KernelSmartContractAccount,\n type KernelSmartAccountParams,\n isKernelAccount,\n} from \"../account.js\";\nimport { polygonMumbai } from \"viem/chains\";\nimport { withZeroDevPaymasterAndData } from \"../middleware/paymaster.js\";\nimport type { RequiredProps } from \"../types.js\";\n\nexport type ValidatorProviderParamsOpts<P extends KernelBaseValidatorParams> = {\n paymasterConfig?: PaymasterConfig<PaymasterPolicy>;\n providerConfig?: Partial<ZeroDevProviderConfig>;\n accountConfig?: Omit<\n KernelSmartAccountParams,\n keyof ExtendedValidatorProviderParams<P>\n >;\n validatorConfig?: Omit<P, keyof ExtendedValidatorProviderParams<P>>;\n};\n\nexport interface ValidatorProviderParams<P extends KernelBaseValidatorParams> {\n projectId: string;\n bundlerProvider?: PaymasterAndBundlerProviders;\n opts?: ValidatorProviderParamsOpts<P>;\n usePaymaster?: boolean;\n defaultProvider?: ValidatorProvider<\n KernelBaseValidator,\n KernelBaseValidatorParams\n >;\n}\n\nexport type ExtendedValidatorProviderParams<\n P extends KernelBaseValidatorParams\n> = ValidatorProviderParams<P> & RequiredProps<P>;\n\n// A simple facade abstraction for validator related provider operations\n// Needs to be implemented for each validator plugin\nexport abstract class ValidatorProvider<\n V extends KernelBaseValidator,\n P extends KernelBaseValidatorParams\n> extends ZeroDevProvider {\n protected defaultProvider?: ValidatorProvider<\n KernelBaseValidator,\n KernelBaseValidatorParams\n >;\n constructor(\n params: ExtendedValidatorProviderParams<P>,\n validator: KernelBaseValidator\n ) {\n let bundlerProvider = params.bundlerProvider;\n const shouldUsePaymaster =\n params.usePaymaster === undefined || params.usePaymaster;\n if (\n params.opts?.paymasterConfig &&\n params.opts?.paymasterConfig.policy === \"TOKEN_PAYMASTER\" &&\n shouldUsePaymaster\n ) {\n bundlerProvider = \"STACKUP\";\n }\n super({\n ...params.opts?.providerConfig,\n chain: params.opts?.providerConfig?.chain ?? polygonMumbai,\n rpcUrl: params.opts?.providerConfig?.rpcUrl,\n projectId: params.projectId,\n bundlerProvider,\n });\n this.connect(\n () =>\n new KernelSmartContractAccount({\n projectId: params.projectId,\n validator,\n defaultValidator: params.defaultProvider?.getValidator(),\n rpcClient: this.rpcClient,\n bundlerProvider,\n index: params.defaultProvider?.getAccount().getIndex(),\n ...params.opts?.accountConfig,\n })\n );\n if (shouldUsePaymaster) {\n let paymasterConfig = params.opts?.paymasterConfig ?? {\n policy: \"VERIFYING_PAYMASTER\",\n };\n paymasterConfig = {\n ...paymasterConfig,\n paymasterProvider:\n params.opts?.paymasterConfig?.paymasterProvider ?? bundlerProvider,\n };\n withZeroDevPaymasterAndData(this, paymasterConfig);\n }\n }\n\n getValidator = (): V => {\n if (!isKernelAccount(this.account) || !this.account.validator) {\n throw new Error(\n \"ValidatorProvider: account with validator is not set, did you call all connects first?\"\n );\n }\n return this.account.getValidator() as unknown as V;\n };\n\n getEncodedEnableData = async (enableData: Hex): Promise<Hex> => {\n if (!isKernelAccount(this.account) || !this.account.validator) {\n throw new Error(\n \"ValidatorProvider: account with validator is not set, did you call all connects first?\"\n );\n }\n return await this.account.validator.encodeEnable(enableData);\n };\n\n getEncodedDisableData = async (disableData: Hex): Promise<Hex> => {\n if (!isKernelAccount(this.account) || !this.account.validator) {\n throw new Error(\n \"ValidatorProvider: account with validator is not set, did you call all connects first?\"\n );\n }\n return await this.account.validator.encodeDisable(disableData);\n };\n\n sendEnableUserOperation = async (\n enableData: Hex\n ): Promise<SendUserOperationResult> => {\n const encodedEnableData = await this.getEncodedEnableData(enableData);\n if (!isKernelAccount(this.account) || !this.account.validator) {\n throw new Error(\n \"ValidatorProvider: account with validator is not set, did you call all connects first?\"\n );\n }\n\n return await this.sendUserOperation({\n target: this.account.validator.validatorAddress,\n data: encodedEnableData,\n });\n };\n\n sendDisableUserOperation = async (\n disableData: Hex\n ): Promise<SendUserOperationResult> => {\n const encodedDisableData = await this.getEncodedDisableData(disableData);\n if (!isKernelAccount(this.account) || !this.account.validator) {\n throw new Error(\n \"ValidatorProvider: account with validator is not set, did you call all connects first?\"\n );\n }\n\n return await this.sendUserOperation({\n target: this.account.validator.validatorAddress,\n data: encodedDisableData,\n });\n };\n}\n"]}
@@ -49,15 +49,24 @@ export class ZeroDevEthersProvider extends JsonRpcProvider {
49
49
  return this;
50
50
  }
51
51
  });
52
- let accountProvider = new ValidatorProviders[validatorType](params);
53
- if (params.usePaymaster === undefined || params.usePaymaster) {
52
+ let bundlerProvider = params.bundlerProvider;
53
+ const shouldUsePaymaster = params.usePaymaster === undefined || params.usePaymaster;
54
+ if (params.opts?.paymasterConfig &&
55
+ params.opts?.paymasterConfig.policy === "TOKEN_PAYMASTER" &&
56
+ shouldUsePaymaster) {
57
+ bundlerProvider = "STACKUP";
58
+ }
59
+ let accountProvider = new ValidatorProviders[validatorType]({
60
+ ...params,
61
+ bundlerProvider,
62
+ });
63
+ if (shouldUsePaymaster) {
54
64
  let paymasterConfig = params.opts?.paymasterConfig ?? {
55
65
  policy: "VERIFYING_PAYMASTER",
56
66
  };
57
67
  paymasterConfig = {
58
68
  ...paymasterConfig,
59
- paymasterProvider: params.opts?.paymasterConfig?.paymasterProvider ??
60
- params.bundlerProvider,
69
+ paymasterProvider: params.opts?.paymasterConfig?.paymasterProvider ?? bundlerProvider,
61
70
  };
62
71
  accountProvider = withZeroDevPaymasterAndData(accountProvider, paymasterConfig);
63
72
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ethers-provider.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/ethers-provider/ethers-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EACL,QAAQ,EACR,wBAAwB,EACxB,cAAc,GAMf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAM3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AAEzE,MAAM,OAAO,qBAEX,SAAQ,eAAe;IAEvB,YAAY,aAAgB,EAAE,MAAqC;QACjE,KAAK,EAAE,CAAC;QAFD;;;;;WAA6C;QAqFtD;;;;mBAA0B,CAAC,SAG1B,EAAQ,EAAE;gBACT,IAAI,CAAC,eAAe,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;gBACxD,OAAO,IAAI,CAAC;YACd,CAAC;WAAC;QAEF;;;;mBAAmB,CAAC,QAAgC,EAAQ,EAAE;gBAC5D,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;gBAChD,OAAO,IAAI,CAAC;YACd,CAAC;WAAC;QAEF;;;;mBAAoB,CAAC,QAA2B,EAAQ,EAAE;gBACxD,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;gBACjD,OAAO,IAAI,CAAC;YACd,CAAC;WAAC;QAEF;;;;mBAAuB,CAAC,QAA6B,EAAQ,EAAE;gBAC7D,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;gBACpD,OAAO,IAAI,CAAC;YACd,CAAC;WAAC;QAvGA,IAAI,eAAe,GAAG,IAAI,kBAAkB,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;QACpE,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,IAAI,MAAM,CAAC,YAAY,EAAE;YAC5D,IAAI,eAAe,GAAG,MAAM,CAAC,IAAI,EAAE,eAAe,IAAI;gBACpD,MAAM,EAAE,qBAAqB;aAC9B,CAAC;YACF,eAAe,GAAG;gBAChB,GAAG,eAAe;gBAClB,iBAAiB,EACf,MAAM,CAAC,IAAI,EAAE,eAAe,EAAE,iBAAiB;oBAC/C,MAAM,CAAC,eAAe;aACzB,CAAC;YACF,eAAe,GAAG,2BAA2B,CAC3C,eAAe,EACf,eAAe,CACe,CAAC;SAClC;QACD,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IACzC,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,IAAI,CACtB,aAAgB,EAChB,MAAqC;QAErC,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;SACtC;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,qBAAqB,CAAC,aAAa,EAAE;YACxD,GAAG,MAAM;YACT,IAAI,EAAE;gBACJ,GAAG,MAAM,CAAC,IAAI;gBACd,cAAc,EAAE;oBACd,KAAK;oBACL,GAAG,MAAM,CAAC,IAAI,EAAE,cAAc;iBAC/B;aACF;SACF,CAAC,CAAC;QAEH,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAUD,IAAI,CAAC,MAAc,EAAE,MAAa;QAChC,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1D,CAAC;IAQD,gBAAgB,CACd,EAAgE;QAEhE,cAAc,CACZ,IAAI,EACJ,iBAAiB,EACjB,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,CAAgC,CAChE,CAAC;QACF,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACjC,CAAC;IAKD,gBAAgB;QACd,OAAO,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAyBD,sBAAsB;QACpB,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC;IACxC,CAAC;CACF","sourcesContent":["import { getChainId } from \"../api/index.js\";\nimport {\n getChain,\n BaseSmartContractAccount,\n defineReadOnly,\n type AccountMiddlewareFn,\n type FeeDataMiddleware,\n type GasEstimatorMiddleware,\n type PaymasterAndDataMiddleware,\n type PublicErc4337Client,\n} from \"@alchemy/aa-core\";\nimport { ZeroDevAccountSigner } from \"./account-signer.js\";\nimport { JsonRpcProvider } from \"@ethersproject/providers\";\nimport type { SupportedValidators } from \"../validator/types.js\";\nimport type {\n ValidatorProviderParamsMap,\n ValidatorProviderTypeMap,\n} from \"../validator-provider/types.js\";\nimport { ValidatorProviders } from \"../validator-provider/index.js\";\nimport { withZeroDevPaymasterAndData } from \"../middleware/paymaster.js\";\n\nexport class ZeroDevEthersProvider<\n V extends SupportedValidators\n> extends JsonRpcProvider {\n readonly accountProvider: ValidatorProviderTypeMap[V];\n constructor(validatorType: V, params: ValidatorProviderParamsMap[V]) {\n super();\n let accountProvider = new ValidatorProviders[validatorType](params);\n if (params.usePaymaster === undefined || params.usePaymaster) {\n let paymasterConfig = params.opts?.paymasterConfig ?? {\n policy: \"VERIFYING_PAYMASTER\",\n };\n paymasterConfig = {\n ...paymasterConfig,\n paymasterProvider:\n params.opts?.paymasterConfig?.paymasterProvider ??\n params.bundlerProvider,\n };\n accountProvider = withZeroDevPaymasterAndData(\n accountProvider,\n paymasterConfig\n ) as ValidatorProviderTypeMap[V];\n }\n this.accountProvider = accountProvider;\n }\n\n public static async init<V extends SupportedValidators>(\n validatorType: V,\n params: ValidatorProviderParamsMap[V]\n ): Promise<ZeroDevEthersProvider<V>> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n const instance = new ZeroDevEthersProvider(validatorType, {\n ...params,\n opts: {\n ...params.opts,\n providerConfig: {\n chain,\n ...params.opts?.providerConfig,\n },\n },\n });\n\n return instance;\n }\n\n getAccountProvider(): ValidatorProviderTypeMap[V] {\n return this.accountProvider;\n }\n\n /**\n * Rewrites the send method to use the account provider's EIP-1193\n * compliant request method\n *\n * @param method - the RPC method to call\n * @param params - the params required by the RPC method\n * @returns the result of the RPC call\n */\n send(method: string, params: any[]): Promise<any> {\n return this.accountProvider.request({ method, params });\n }\n\n /**\n * Connects the Provider to an Account and returns a Signer\n *\n * @param fn - a function that takes the account provider's rpcClient and returns a BaseSmartContractAccount\n * @returns an {@link ZeroDevAccountSigner} that can be used to sign and send user operations\n */\n connectToAccount(\n fn: (rpcClient: PublicErc4337Client) => BaseSmartContractAccount\n ): ZeroDevAccountSigner<V> {\n defineReadOnly(\n this,\n \"accountProvider\",\n this.accountProvider.connect(fn) as ValidatorProviderTypeMap[V]\n );\n return this.getAccountSigner();\n }\n\n /**\n * @returns an {@link ZeroDevAccountSigner} using this as the underlying provider\n */\n getAccountSigner(): ZeroDevAccountSigner<V> {\n return new ZeroDevAccountSigner(this);\n }\n\n withPaymasterMiddleware = (overrides: {\n dummyPaymasterDataMiddleware?: PaymasterAndDataMiddleware;\n paymasterDataMiddleware?: PaymasterAndDataMiddleware;\n }): this => {\n this.accountProvider.withPaymasterMiddleware(overrides);\n return this;\n };\n\n withGasEstimator = (override: GasEstimatorMiddleware): this => {\n this.accountProvider.withGasEstimator(override);\n return this;\n };\n\n withFeeDataGetter = (override: FeeDataMiddleware): this => {\n this.accountProvider.withFeeDataGetter(override);\n return this;\n };\n\n withCustomMiddleware = (override: AccountMiddlewareFn): this => {\n this.accountProvider.withCustomMiddleware(override);\n return this;\n };\n\n getPublicErc4337Client(): PublicErc4337Client {\n return this.accountProvider.rpcClient;\n }\n}\n"]}
1
+ {"version":3,"file":"ethers-provider.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/ethers-provider/ethers-provider.ts"],"names":[],"mappings":"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","sourcesContent":["import { getChainId } from \"../api/index.js\";\nimport {\n getChain,\n BaseSmartContractAccount,\n defineReadOnly,\n type AccountMiddlewareFn,\n type FeeDataMiddleware,\n type GasEstimatorMiddleware,\n type PaymasterAndDataMiddleware,\n type PublicErc4337Client,\n} from \"@alchemy/aa-core\";\nimport { ZeroDevAccountSigner } from \"./account-signer.js\";\nimport { JsonRpcProvider } from \"@ethersproject/providers\";\nimport type { SupportedValidators } from \"../validator/types.js\";\nimport type {\n ValidatorProviderParamsMap,\n ValidatorProviderTypeMap,\n} from \"../validator-provider/types.js\";\nimport { ValidatorProviders } from \"../validator-provider/index.js\";\nimport { withZeroDevPaymasterAndData } from \"../middleware/paymaster.js\";\n\nexport class ZeroDevEthersProvider<\n V extends SupportedValidators\n> extends JsonRpcProvider {\n readonly accountProvider: ValidatorProviderTypeMap[V];\n constructor(validatorType: V, params: ValidatorProviderParamsMap[V]) {\n super();\n let bundlerProvider = params.bundlerProvider;\n const shouldUsePaymaster =\n params.usePaymaster === undefined || params.usePaymaster;\n if (\n params.opts?.paymasterConfig &&\n params.opts?.paymasterConfig.policy === \"TOKEN_PAYMASTER\" &&\n shouldUsePaymaster\n ) {\n bundlerProvider = \"STACKUP\";\n }\n let accountProvider = new ValidatorProviders[validatorType]({\n ...params,\n bundlerProvider,\n });\n if (shouldUsePaymaster) {\n let paymasterConfig = params.opts?.paymasterConfig ?? {\n policy: \"VERIFYING_PAYMASTER\",\n };\n paymasterConfig = {\n ...paymasterConfig,\n paymasterProvider:\n params.opts?.paymasterConfig?.paymasterProvider ?? bundlerProvider,\n };\n accountProvider = withZeroDevPaymasterAndData(\n accountProvider,\n paymasterConfig\n ) as ValidatorProviderTypeMap[V];\n }\n this.accountProvider = accountProvider;\n }\n\n public static async init<V extends SupportedValidators>(\n validatorType: V,\n params: ValidatorProviderParamsMap[V]\n ): Promise<ZeroDevEthersProvider<V>> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n const instance = new ZeroDevEthersProvider(validatorType, {\n ...params,\n opts: {\n ...params.opts,\n providerConfig: {\n chain,\n ...params.opts?.providerConfig,\n },\n },\n });\n\n return instance;\n }\n\n getAccountProvider(): ValidatorProviderTypeMap[V] {\n return this.accountProvider;\n }\n\n /**\n * Rewrites the send method to use the account provider's EIP-1193\n * compliant request method\n *\n * @param method - the RPC method to call\n * @param params - the params required by the RPC method\n * @returns the result of the RPC call\n */\n send(method: string, params: any[]): Promise<any> {\n return this.accountProvider.request({ method, params });\n }\n\n /**\n * Connects the Provider to an Account and returns a Signer\n *\n * @param fn - a function that takes the account provider's rpcClient and returns a BaseSmartContractAccount\n * @returns an {@link ZeroDevAccountSigner} that can be used to sign and send user operations\n */\n connectToAccount(\n fn: (rpcClient: PublicErc4337Client) => BaseSmartContractAccount\n ): ZeroDevAccountSigner<V> {\n defineReadOnly(\n this,\n \"accountProvider\",\n this.accountProvider.connect(fn) as ValidatorProviderTypeMap[V]\n );\n return this.getAccountSigner();\n }\n\n /**\n * @returns an {@link ZeroDevAccountSigner} using this as the underlying provider\n */\n getAccountSigner(): ZeroDevAccountSigner<V> {\n return new ZeroDevAccountSigner(this);\n }\n\n withPaymasterMiddleware = (overrides: {\n dummyPaymasterDataMiddleware?: PaymasterAndDataMiddleware;\n paymasterDataMiddleware?: PaymasterAndDataMiddleware;\n }): this => {\n this.accountProvider.withPaymasterMiddleware(overrides);\n return this;\n };\n\n withGasEstimator = (override: GasEstimatorMiddleware): this => {\n this.accountProvider.withGasEstimator(override);\n return this;\n };\n\n withFeeDataGetter = (override: FeeDataMiddleware): this => {\n this.accountProvider.withFeeDataGetter(override);\n return this;\n };\n\n withCustomMiddleware = (override: AccountMiddlewareFn): this => {\n this.accountProvider.withCustomMiddleware(override);\n return this;\n };\n\n getPublicErc4337Client(): PublicErc4337Client {\n return this.accountProvider.rpcClient;\n }\n}\n"]}
@@ -7,7 +7,7 @@ import { type PaymasterAndBundlerProviders, type PaymasterConfig } from "./types
7
7
  export declare class TokenPaymaster extends Paymaster {
8
8
  protected paymasterConfig: PaymasterConfig<"TOKEN_PAYMASTER">;
9
9
  constructor(provider: ZeroDevProvider, paymasterConfig: PaymasterConfig<"TOKEN_PAYMASTER">);
10
- getPaymasterAddress(): Promise<Hex | undefined>;
10
+ getPaymasterAddress(paymasterProvider?: PaymasterAndBundlerProviders): Promise<Hex | undefined>;
11
11
  decodeMainCallFromCallData(kernelAddress: PromiseOrValue<string>, callData: PromiseOrValue<BytesLike>): Promise<UserOperationCallDataWithDelegate | undefined>;
12
12
  getERC20UserOp(struct: UserOperationStruct, mainCall: UserOperationCallDataWithDelegate, gasTokenAddress: Hex, paymasterAddress: Hex): Promise<UserOperationStruct | undefined>;
13
13
  getPaymasterResponse(struct: UserOperationStruct, paymasterProvider?: PaymasterAndBundlerProviders, shouldOverrideFee?: boolean): Promise<UserOperationStruct | undefined>;
@@ -20,12 +20,13 @@ export class TokenPaymaster extends Paymaster {
20
20
  value: paymasterConfig
21
21
  });
22
22
  }
23
- async getPaymasterAddress() {
23
+ async getPaymasterAddress(paymasterProvider) {
24
24
  const chainId = await getChainId(this.provider.getProjectId());
25
25
  try {
26
26
  const { data: paymasterResp } = await axios.post(`${PAYMASTER_URL}/getPaymasterAddress`, {
27
27
  chainId,
28
28
  entryPointAddress: ENTRYPOINT_ADDRESS,
29
+ paymasterProvider,
29
30
  }, { headers: { "Content-Type": "application/json" } });
30
31
  return paymasterResp;
31
32
  }
@@ -137,7 +138,7 @@ export class TokenPaymaster extends Paymaster {
137
138
  throw new Error("ChainId not found");
138
139
  }
139
140
  const gasTokenAddress = getGasTokenAddress(this.paymasterConfig.gasToken, chainId);
140
- let paymasterAddress = await this.getPaymasterAddress();
141
+ let paymasterAddress = await this.getPaymasterAddress(paymasterProvider);
141
142
  if (gasTokenAddress !== undefined && paymasterAddress !== undefined) {
142
143
  const erc20UserOp = await this.getERC20UserOp(struct, mainCall, gasTokenAddress, paymasterAddress);
143
144
  if (!erc20UserOp) {
@@ -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(): 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 },\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();\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 { 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,6 +1,5 @@
1
1
  import { type SignTypedDataParams, type SmartAccountSigner, type UserOperationRequest } from "@alchemy/aa-core";
2
2
  import { type Chain, type Hex, type Address, type PublicClient, type Transport } from "viem";
3
- import type { PaymasterAndBundlerProviders } from "../paymaster/types.js";
4
3
  export declare enum ValidatorMode {
5
4
  sudo = "0x00000000",
6
5
  plugin = "0x00000001",
@@ -18,7 +17,6 @@ export interface KernelBaseValidatorParams {
18
17
  executor?: Address;
19
18
  selector?: Hex;
20
19
  rpcUrl?: string;
21
- bundlerProvider?: PaymasterAndBundlerProviders;
22
20
  }
23
21
  export type ValidatorPluginData = Required<Pick<KernelBaseValidatorParams, "executor" | "selector" | "validAfter" | "validUntil">>;
24
22
  export declare abstract class KernelBaseValidator {
@@ -33,7 +31,6 @@ export declare abstract class KernelBaseValidator {
33
31
  protected executor?: Address;
34
32
  protected selector?: Hex;
35
33
  protected rpcUrl?: string;
36
- protected bundlerProvider?: PaymasterAndBundlerProviders;
37
34
  publicClient?: PublicClient<Transport, Chain>;
38
35
  constructor(params: KernelBaseValidatorParams);
39
36
  abstract encodeEnable(enableData: Hex): Hex;
@@ -77,12 +77,6 @@ export class KernelBaseValidator {
77
77
  writable: true,
78
78
  value: void 0
79
79
  });
80
- Object.defineProperty(this, "bundlerProvider", {
81
- enumerable: true,
82
- configurable: true,
83
- writable: true,
84
- value: void 0
85
- });
86
80
  Object.defineProperty(this, "publicClient", {
87
81
  enumerable: true,
88
82
  configurable: true,
@@ -100,7 +94,6 @@ export class KernelBaseValidator {
100
94
  this.selector = params.selector;
101
95
  this.chain = params.chain;
102
96
  this.rpcUrl = params.rpcUrl ?? BUNDLER_URL;
103
- this.bundlerProvider = params.bundlerProvider;
104
97
  this.publicClient = createPublicClient({
105
98
  transport: http(CHAIN_ID_TO_NODE[this.chain?.id ?? polygonMumbai.id]),
106
99
  chain: this.chain ?? polygonMumbai,
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/base.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type SignTypedDataParams,\n type SmartAccountSigner,\n type UserOperationRequest,\n} from \"@alchemy/aa-core\";\nimport {\n concat,\n type Chain,\n type Hex,\n pad,\n toHex,\n type Address,\n concatHex,\n hexToBigInt,\n type PublicClient,\n type Transport,\n createPublicClient,\n http,\n} from \"viem\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport {\n BUNDLER_URL,\n CHAIN_ID_TO_NODE,\n ECDSA_VALIDATOR_ADDRESS,\n ENTRYPOINT_ADDRESS,\n} from \"../constants.js\";\nimport type { PaymasterAndBundlerProviders } from \"../paymaster/types.js\";\nimport { polygonMumbai } from \"viem/chains\";\n\nexport enum ValidatorMode {\n sudo = \"0x00000000\",\n plugin = \"0x00000001\",\n enable = \"0x00000002\",\n}\n\nexport interface KernelBaseValidatorParams {\n projectId: string;\n validatorAddress?: Hex;\n mode?: ValidatorMode;\n chain?: Chain;\n entryPointAddress?: Address;\n enableSignature?: Hex;\n validUntil?: number;\n validAfter?: number;\n executor?: Address;\n selector?: Hex;\n rpcUrl?: string;\n bundlerProvider?: PaymasterAndBundlerProviders;\n}\n\nexport type ValidatorPluginData = Required<\n Pick<\n KernelBaseValidatorParams,\n \"executor\" | \"selector\" | \"validAfter\" | \"validUntil\"\n >\n>;\n\n//Kernel wallet implementation separates out validation and execution phase. It allows you to have\n// custom wrapper logic for the validation phase in addition to signature of choice.\nexport abstract class KernelBaseValidator {\n readonly validatorAddress: Hex;\n mode: ValidatorMode;\n protected projectId: string;\n protected chain?: Chain;\n protected entryPointAddress: Address;\n protected enableSignature?: Hex;\n protected validUntil: number;\n protected validAfter: number;\n protected executor?: Address;\n protected selector?: Hex;\n protected rpcUrl?: string;\n protected bundlerProvider?: PaymasterAndBundlerProviders;\n publicClient?: PublicClient<Transport, Chain>;\n\n constructor(params: KernelBaseValidatorParams) {\n this.projectId = params.projectId;\n this.validatorAddress = params.validatorAddress ?? ECDSA_VALIDATOR_ADDRESS;\n this.mode = params.mode ?? ValidatorMode.sudo;\n this.entryPointAddress = params.entryPointAddress ?? ENTRYPOINT_ADDRESS;\n this.enableSignature = params.enableSignature;\n this.validUntil = params.validUntil ?? 0;\n this.validAfter = params.validAfter ?? 0;\n this.executor = params.executor;\n this.selector = params.selector;\n this.chain = params.chain;\n this.rpcUrl = params.rpcUrl ?? BUNDLER_URL;\n this.bundlerProvider = params.bundlerProvider;\n this.publicClient = createPublicClient({\n transport: http(CHAIN_ID_TO_NODE[this.chain?.id ?? polygonMumbai.id]),\n chain: this.chain ?? polygonMumbai,\n });\n }\n\n abstract encodeEnable(enableData: Hex): Hex;\n\n abstract encodeDisable(enableData: Hex): Hex;\n\n abstract getEnableData(): Promise<Hex>;\n\n abstract signMessage(message: Uint8Array | string | Hex): Promise<Hex>;\n\n abstract signTypedData(params: SignTypedDataParams): Promise<Hex>;\n\n abstract signUserOp(userOp: UserOperationRequest): Promise<Hex>;\n\n abstract signer(): Promise<SmartAccountSigner>;\n\n abstract getDummyUserOpSignature(callData?: Hex): Promise<Hex>;\n\n abstract isPluginEnabled(\n kernelAccountAddress: Address,\n selector: Hex\n ): Promise<boolean>;\n\n shouldDelegateViaFallback(): boolean {\n return true;\n }\n\n getPluginValidatorData(): ValidatorPluginData {\n if (!this.selector || !this.executor) {\n throw Error(\"Plugin Validator data params uninitialised\");\n }\n return {\n selector: this.selector,\n executor: this.executor,\n validAfter: this.validAfter,\n validUntil: this.validUntil,\n };\n }\n\n async getDynamicDummySignature(\n kernelAccountAddress: Address,\n calldata: Hex\n ): Promise<Hex> {\n const dummyECDSASig =\n \"0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c\";\n const validatorMode = await this.resolveValidatorMode(\n kernelAccountAddress,\n calldata\n );\n if (validatorMode === ValidatorMode.enable) {\n const enableData = await this.getEnableData();\n const enableDataLength = enableData.length / 2 - 1;\n const enableSigLength = 65;\n const staticDummySig = concatHex([\n \"0x000000000000000000000000\",\n this.getAddress(),\n this.executor!,\n ]);\n\n return concatHex([\n ValidatorMode.enable,\n staticDummySig,\n pad(toHex(enableDataLength), { size: 32 }),\n enableData,\n pad(toHex(enableSigLength), { size: 32 }),\n dummyECDSASig,\n await this.getDummyUserOpSignature(calldata),\n ]);\n }\n return concatHex([\n validatorMode,\n await this.getDummyUserOpSignature(calldata),\n ]);\n }\n\n setEnableSignature(enableSignature: Hex) {\n this.enableSignature = enableSignature;\n }\n\n getEnableSignature(): Hex | undefined {\n return this.enableSignature;\n }\n\n getAddress(): Hex {\n return this.validatorAddress;\n }\n\n async approveExecutor(\n kernel: Address,\n selector: Hex,\n executor: Address,\n validUntil: number,\n validAfter: number,\n validator: KernelBaseValidator\n ): Promise<Hex> {\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n const sender = kernel;\n const signer = await this.signer();\n const ownerSig = await signer.signTypedData({\n domain: {\n name: \"Kernel\",\n version: \"0.2.1\",\n chainId: this.chain.id,\n verifyingContract: sender,\n },\n types: {\n ValidatorApproved: [\n { name: \"sig\", type: \"bytes4\" },\n { name: \"validatorData\", type: \"uint256\" },\n { name: \"executor\", type: \"address\" },\n { name: \"enableData\", type: \"bytes\" },\n ],\n },\n message: {\n sig: selector as Hex,\n validatorData: hexToBigInt(\n concatHex([\n pad(toHex(validUntil), { size: 6 }),\n pad(toHex(validAfter), { size: 6 }),\n validator.getAddress(),\n ]),\n { size: 32 }\n ),\n executor: executor as Address,\n enableData: await validator.getEnableData(),\n },\n primaryType: \"ValidatorApproved\",\n });\n return ownerSig;\n }\n\n async resolveValidatorMode(\n kernelAccountAddress: Address,\n callData: Hex\n ): Promise<ValidatorMode> {\n if (!this.chain || !this.publicClient) {\n throw new Error(\"Validator uninitialized\");\n }\n\n let mode: ValidatorMode;\n try {\n const defaultValidatorAddress = await this.publicClient.readContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n functionName: \"getDefaultValidator\",\n });\n if (\n defaultValidatorAddress?.toLowerCase() ===\n this.validatorAddress.toLowerCase() ||\n this.mode === ValidatorMode.sudo\n ) {\n mode = ValidatorMode.sudo;\n } else if (\n await this.isPluginEnabled(\n kernelAccountAddress,\n callData.toString().slice(0, 10) as Hex\n )\n ) {\n mode = ValidatorMode.plugin;\n } else {\n mode = ValidatorMode.enable;\n }\n } catch (error) {\n if (this.mode === ValidatorMode.plugin) {\n mode = ValidatorMode.enable;\n } else {\n mode = this.mode;\n }\n }\n return mode;\n }\n\n async getSignature(userOp: UserOperationRequest): Promise<Hex> {\n const mode = await this.resolveValidatorMode(\n userOp.sender,\n userOp.callData\n );\n if (mode === ValidatorMode.sudo || mode === ValidatorMode.plugin) {\n return concatHex([this.mode, await this.signUserOp(userOp)]);\n } else {\n const enableData = await this.getEnableData();\n const enableDataLength = enableData.length / 2 - 1;\n const enableSignature = this.getEnableSignature();\n if (!enableSignature) {\n throw new Error(\"Enable signature not set\");\n }\n return concat([\n mode, // 4 bytes 0 - 4\n pad(toHex(this.validUntil), { size: 6 }), // 6 bytes 4 - 10\n pad(toHex(this.validAfter), { size: 6 }), // 6 bytes 10 - 16\n pad(this.validatorAddress, { size: 20 }), // 20 bytes 16 - 36\n pad(this.executor!, { size: 20 }), // 20 bytes 36 - 56\n pad(toHex(enableDataLength), { size: 32 }), // 32 bytes 56 - 88\n enableData, // 88 - 88 + enableData.length\n pad(toHex(enableSignature.length / 2 - 1), { size: 32 }), // 32 bytes 88 + enableData.length - 120 + enableData.length\n enableSignature, // 120 + enableData.length - 120 + enableData.length + enableSignature.length\n await this.signUserOp(userOp), // 120 + enableData.length + enableSignature.length - 120 + enableData.length + enableSignature.length + userOperation.length\n ]);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/base.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type SignTypedDataParams,\n type SmartAccountSigner,\n type UserOperationRequest,\n} from \"@alchemy/aa-core\";\nimport {\n concat,\n type Chain,\n type Hex,\n pad,\n toHex,\n type Address,\n concatHex,\n hexToBigInt,\n type PublicClient,\n type Transport,\n createPublicClient,\n http,\n} from \"viem\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport {\n BUNDLER_URL,\n CHAIN_ID_TO_NODE,\n ECDSA_VALIDATOR_ADDRESS,\n ENTRYPOINT_ADDRESS,\n} from \"../constants.js\";\nimport { polygonMumbai } from \"viem/chains\";\n\nexport enum ValidatorMode {\n sudo = \"0x00000000\",\n plugin = \"0x00000001\",\n enable = \"0x00000002\",\n}\n\nexport interface KernelBaseValidatorParams {\n projectId: string;\n validatorAddress?: Hex;\n mode?: ValidatorMode;\n chain?: Chain;\n entryPointAddress?: Address;\n enableSignature?: Hex;\n validUntil?: number;\n validAfter?: number;\n executor?: Address;\n selector?: Hex;\n rpcUrl?: string;\n}\n\nexport type ValidatorPluginData = Required<\n Pick<\n KernelBaseValidatorParams,\n \"executor\" | \"selector\" | \"validAfter\" | \"validUntil\"\n >\n>;\n\n//Kernel wallet implementation separates out validation and execution phase. It allows you to have\n// custom wrapper logic for the validation phase in addition to signature of choice.\nexport abstract class KernelBaseValidator {\n readonly validatorAddress: Hex;\n mode: ValidatorMode;\n protected projectId: string;\n protected chain?: Chain;\n protected entryPointAddress: Address;\n protected enableSignature?: Hex;\n protected validUntil: number;\n protected validAfter: number;\n protected executor?: Address;\n protected selector?: Hex;\n protected rpcUrl?: string;\n publicClient?: PublicClient<Transport, Chain>;\n\n constructor(params: KernelBaseValidatorParams) {\n this.projectId = params.projectId;\n this.validatorAddress = params.validatorAddress ?? ECDSA_VALIDATOR_ADDRESS;\n this.mode = params.mode ?? ValidatorMode.sudo;\n this.entryPointAddress = params.entryPointAddress ?? ENTRYPOINT_ADDRESS;\n this.enableSignature = params.enableSignature;\n this.validUntil = params.validUntil ?? 0;\n this.validAfter = params.validAfter ?? 0;\n this.executor = params.executor;\n this.selector = params.selector;\n this.chain = params.chain;\n this.rpcUrl = params.rpcUrl ?? BUNDLER_URL;\n this.publicClient = createPublicClient({\n transport: http(CHAIN_ID_TO_NODE[this.chain?.id ?? polygonMumbai.id]),\n chain: this.chain ?? polygonMumbai,\n });\n }\n\n abstract encodeEnable(enableData: Hex): Hex;\n\n abstract encodeDisable(enableData: Hex): Hex;\n\n abstract getEnableData(): Promise<Hex>;\n\n abstract signMessage(message: Uint8Array | string | Hex): Promise<Hex>;\n\n abstract signTypedData(params: SignTypedDataParams): Promise<Hex>;\n\n abstract signUserOp(userOp: UserOperationRequest): Promise<Hex>;\n\n abstract signer(): Promise<SmartAccountSigner>;\n\n abstract getDummyUserOpSignature(callData?: Hex): Promise<Hex>;\n\n abstract isPluginEnabled(\n kernelAccountAddress: Address,\n selector: Hex\n ): Promise<boolean>;\n\n shouldDelegateViaFallback(): boolean {\n return true;\n }\n\n getPluginValidatorData(): ValidatorPluginData {\n if (!this.selector || !this.executor) {\n throw Error(\"Plugin Validator data params uninitialised\");\n }\n return {\n selector: this.selector,\n executor: this.executor,\n validAfter: this.validAfter,\n validUntil: this.validUntil,\n };\n }\n\n async getDynamicDummySignature(\n kernelAccountAddress: Address,\n calldata: Hex\n ): Promise<Hex> {\n const dummyECDSASig =\n \"0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c\";\n const validatorMode = await this.resolveValidatorMode(\n kernelAccountAddress,\n calldata\n );\n if (validatorMode === ValidatorMode.enable) {\n const enableData = await this.getEnableData();\n const enableDataLength = enableData.length / 2 - 1;\n const enableSigLength = 65;\n const staticDummySig = concatHex([\n \"0x000000000000000000000000\",\n this.getAddress(),\n this.executor!,\n ]);\n\n return concatHex([\n ValidatorMode.enable,\n staticDummySig,\n pad(toHex(enableDataLength), { size: 32 }),\n enableData,\n pad(toHex(enableSigLength), { size: 32 }),\n dummyECDSASig,\n await this.getDummyUserOpSignature(calldata),\n ]);\n }\n return concatHex([\n validatorMode,\n await this.getDummyUserOpSignature(calldata),\n ]);\n }\n\n setEnableSignature(enableSignature: Hex) {\n this.enableSignature = enableSignature;\n }\n\n getEnableSignature(): Hex | undefined {\n return this.enableSignature;\n }\n\n getAddress(): Hex {\n return this.validatorAddress;\n }\n\n async approveExecutor(\n kernel: Address,\n selector: Hex,\n executor: Address,\n validUntil: number,\n validAfter: number,\n validator: KernelBaseValidator\n ): Promise<Hex> {\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n const sender = kernel;\n const signer = await this.signer();\n const ownerSig = await signer.signTypedData({\n domain: {\n name: \"Kernel\",\n version: \"0.2.1\",\n chainId: this.chain.id,\n verifyingContract: sender,\n },\n types: {\n ValidatorApproved: [\n { name: \"sig\", type: \"bytes4\" },\n { name: \"validatorData\", type: \"uint256\" },\n { name: \"executor\", type: \"address\" },\n { name: \"enableData\", type: \"bytes\" },\n ],\n },\n message: {\n sig: selector as Hex,\n validatorData: hexToBigInt(\n concatHex([\n pad(toHex(validUntil), { size: 6 }),\n pad(toHex(validAfter), { size: 6 }),\n validator.getAddress(),\n ]),\n { size: 32 }\n ),\n executor: executor as Address,\n enableData: await validator.getEnableData(),\n },\n primaryType: \"ValidatorApproved\",\n });\n return ownerSig;\n }\n\n async resolveValidatorMode(\n kernelAccountAddress: Address,\n callData: Hex\n ): Promise<ValidatorMode> {\n if (!this.chain || !this.publicClient) {\n throw new Error(\"Validator uninitialized\");\n }\n\n let mode: ValidatorMode;\n try {\n const defaultValidatorAddress = await this.publicClient.readContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n functionName: \"getDefaultValidator\",\n });\n if (\n defaultValidatorAddress?.toLowerCase() ===\n this.validatorAddress.toLowerCase() ||\n this.mode === ValidatorMode.sudo\n ) {\n mode = ValidatorMode.sudo;\n } else if (\n await this.isPluginEnabled(\n kernelAccountAddress,\n callData.toString().slice(0, 10) as Hex\n )\n ) {\n mode = ValidatorMode.plugin;\n } else {\n mode = ValidatorMode.enable;\n }\n } catch (error) {\n if (this.mode === ValidatorMode.plugin) {\n mode = ValidatorMode.enable;\n } else {\n mode = this.mode;\n }\n }\n return mode;\n }\n\n async getSignature(userOp: UserOperationRequest): Promise<Hex> {\n const mode = await this.resolveValidatorMode(\n userOp.sender,\n userOp.callData\n );\n if (mode === ValidatorMode.sudo || mode === ValidatorMode.plugin) {\n return concatHex([this.mode, await this.signUserOp(userOp)]);\n } else {\n const enableData = await this.getEnableData();\n const enableDataLength = enableData.length / 2 - 1;\n const enableSignature = this.getEnableSignature();\n if (!enableSignature) {\n throw new Error(\"Enable signature not set\");\n }\n return concat([\n mode, // 4 bytes 0 - 4\n pad(toHex(this.validUntil), { size: 6 }), // 6 bytes 4 - 10\n pad(toHex(this.validAfter), { size: 6 }), // 6 bytes 10 - 16\n pad(this.validatorAddress, { size: 20 }), // 20 bytes 16 - 36\n pad(this.executor!, { size: 20 }), // 20 bytes 36 - 56\n pad(toHex(enableDataLength), { size: 32 }), // 32 bytes 56 - 88\n enableData, // 88 - 88 + enableData.length\n pad(toHex(enableSignature.length / 2 - 1), { size: 32 }), // 32 bytes 88 + enableData.length - 120 + enableData.length\n enableSignature, // 120 + enableData.length - 120 + enableData.length + enableSignature.length\n await this.signUserOp(userOp), // 120 + enableData.length + enableSignature.length - 120 + enableData.length + enableSignature.length + userOperation.length\n ]);\n }\n }\n}\n"]}
@@ -5,12 +5,19 @@ import { polygonMumbai } from "viem/chains";
5
5
  import { withZeroDevPaymasterAndData } from "../middleware/paymaster.js";
6
6
  export class ValidatorProvider extends ZeroDevProvider {
7
7
  constructor(params, validator) {
8
+ let bundlerProvider = params.bundlerProvider;
9
+ const shouldUsePaymaster = params.usePaymaster === undefined || params.usePaymaster;
10
+ if (params.opts?.paymasterConfig &&
11
+ params.opts?.paymasterConfig.policy === "TOKEN_PAYMASTER" &&
12
+ shouldUsePaymaster) {
13
+ bundlerProvider = "STACKUP";
14
+ }
8
15
  super({
9
16
  ...params.opts?.providerConfig,
10
17
  chain: params.opts?.providerConfig?.chain ?? polygonMumbai,
11
18
  rpcUrl: params.opts?.providerConfig?.rpcUrl,
12
19
  projectId: params.projectId,
13
- bundlerProvider: params.bundlerProvider,
20
+ bundlerProvider,
14
21
  });
15
22
  Object.defineProperty(this, "defaultProvider", {
16
23
  enumerable: true,
@@ -86,18 +93,17 @@ export class ValidatorProvider extends ZeroDevProvider {
86
93
  validator,
87
94
  defaultValidator: params.defaultProvider?.getValidator(),
88
95
  rpcClient: this.rpcClient,
89
- bundlerProvider: params.bundlerProvider,
96
+ bundlerProvider,
90
97
  index: params.defaultProvider?.getAccount().getIndex(),
91
98
  ...params.opts?.accountConfig,
92
99
  }));
93
- if (params.usePaymaster === undefined || params.usePaymaster) {
100
+ if (shouldUsePaymaster) {
94
101
  let paymasterConfig = params.opts?.paymasterConfig ?? {
95
102
  policy: "VERIFYING_PAYMASTER",
96
103
  };
97
104
  paymasterConfig = {
98
105
  ...paymasterConfig,
99
- paymasterProvider: params.opts?.paymasterConfig?.paymasterProvider ??
100
- params.bundlerProvider,
106
+ paymasterProvider: params.opts?.paymasterConfig?.paymasterProvider ?? bundlerProvider,
101
107
  };
102
108
  withZeroDevPaymasterAndData(this, paymasterConfig);
103
109
  }
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator-provider/base.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Hex, type SendUserOperationResult } from \"@alchemy/aa-core\";\nimport { ZeroDevProvider, type ZeroDevProviderConfig } from \"../provider.js\";\nimport type {\n KernelBaseValidator,\n KernelBaseValidatorParams,\n} from \"../validator/base.js\";\nimport type {\n PaymasterAndBundlerProviders,\n PaymasterConfig,\n PaymasterPolicy,\n} from \"../paymaster/types.js\";\nimport {\n KernelSmartContractAccount,\n type KernelSmartAccountParams,\n isKernelAccount,\n} from \"../account.js\";\nimport { polygonMumbai } from \"viem/chains\";\nimport { withZeroDevPaymasterAndData } from \"../middleware/paymaster.js\";\nimport type { RequiredProps } from \"../types.js\";\n\nexport type ValidatorProviderParamsOpts<P extends KernelBaseValidatorParams> = {\n paymasterConfig?: PaymasterConfig<PaymasterPolicy>;\n providerConfig?: Partial<ZeroDevProviderConfig>;\n accountConfig?: Omit<\n KernelSmartAccountParams,\n keyof ExtendedValidatorProviderParams<P>\n >;\n validatorConfig?: Omit<P, keyof ExtendedValidatorProviderParams<P>>;\n};\n\nexport interface ValidatorProviderParams<P extends KernelBaseValidatorParams> {\n projectId: string;\n bundlerProvider?: PaymasterAndBundlerProviders;\n opts?: ValidatorProviderParamsOpts<P>;\n usePaymaster?: boolean;\n defaultProvider?: ValidatorProvider<\n KernelBaseValidator,\n KernelBaseValidatorParams\n >;\n}\n\nexport type ExtendedValidatorProviderParams<\n P extends KernelBaseValidatorParams\n> = ValidatorProviderParams<P> & RequiredProps<P>;\n\n// A simple facade abstraction for validator related provider operations\n// Needs to be implemented for each validator plugin\nexport abstract class ValidatorProvider<\n V extends KernelBaseValidator,\n P extends KernelBaseValidatorParams\n> extends ZeroDevProvider {\n protected defaultProvider?: ValidatorProvider<\n KernelBaseValidator,\n KernelBaseValidatorParams\n >;\n constructor(\n params: ExtendedValidatorProviderParams<P>,\n validator: KernelBaseValidator\n ) {\n super({\n ...params.opts?.providerConfig,\n chain: params.opts?.providerConfig?.chain ?? polygonMumbai,\n rpcUrl: params.opts?.providerConfig?.rpcUrl,\n projectId: params.projectId,\n bundlerProvider: params.bundlerProvider,\n });\n this.connect(\n () =>\n new KernelSmartContractAccount({\n projectId: params.projectId,\n validator,\n defaultValidator: params.defaultProvider?.getValidator(),\n rpcClient: this.rpcClient,\n bundlerProvider: params.bundlerProvider,\n index: params.defaultProvider?.getAccount().getIndex(),\n ...params.opts?.accountConfig,\n })\n );\n if (params.usePaymaster === undefined || params.usePaymaster) {\n let paymasterConfig = params.opts?.paymasterConfig ?? {\n policy: \"VERIFYING_PAYMASTER\",\n };\n paymasterConfig = {\n ...paymasterConfig,\n paymasterProvider:\n params.opts?.paymasterConfig?.paymasterProvider ??\n params.bundlerProvider,\n };\n withZeroDevPaymasterAndData(this, paymasterConfig);\n }\n }\n\n getValidator = (): V => {\n if (!isKernelAccount(this.account) || !this.account.validator) {\n throw new Error(\n \"ValidatorProvider: account with validator is not set, did you call all connects first?\"\n );\n }\n return this.account.getValidator() as unknown as V;\n };\n\n getEncodedEnableData = async (enableData: Hex): Promise<Hex> => {\n if (!isKernelAccount(this.account) || !this.account.validator) {\n throw new Error(\n \"ValidatorProvider: account with validator is not set, did you call all connects first?\"\n );\n }\n return await this.account.validator.encodeEnable(enableData);\n };\n\n getEncodedDisableData = async (disableData: Hex): Promise<Hex> => {\n if (!isKernelAccount(this.account) || !this.account.validator) {\n throw new Error(\n \"ValidatorProvider: account with validator is not set, did you call all connects first?\"\n );\n }\n return await this.account.validator.encodeDisable(disableData);\n };\n\n sendEnableUserOperation = async (\n enableData: Hex\n ): Promise<SendUserOperationResult> => {\n const encodedEnableData = await this.getEncodedEnableData(enableData);\n if (!isKernelAccount(this.account) || !this.account.validator) {\n throw new Error(\n \"ValidatorProvider: account with validator is not set, did you call all connects first?\"\n );\n }\n\n return await this.sendUserOperation({\n target: this.account.validator.validatorAddress,\n data: encodedEnableData,\n });\n };\n\n sendDisableUserOperation = async (\n disableData: Hex\n ): Promise<SendUserOperationResult> => {\n const encodedDisableData = await this.getEncodedDisableData(disableData);\n if (!isKernelAccount(this.account) || !this.account.validator) {\n throw new Error(\n \"ValidatorProvider: account with validator is not set, did you call all connects first?\"\n );\n }\n\n return await this.sendUserOperation({\n target: this.account.validator.validatorAddress,\n data: encodedDisableData,\n });\n };\n}\n"]}
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator-provider/base.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Hex, type SendUserOperationResult } from \"@alchemy/aa-core\";\nimport { ZeroDevProvider, type ZeroDevProviderConfig } from \"../provider.js\";\nimport type {\n KernelBaseValidator,\n KernelBaseValidatorParams,\n} from \"../validator/base.js\";\nimport type {\n PaymasterAndBundlerProviders,\n PaymasterConfig,\n PaymasterPolicy,\n} from \"../paymaster/types.js\";\nimport {\n KernelSmartContractAccount,\n type KernelSmartAccountParams,\n isKernelAccount,\n} from \"../account.js\";\nimport { polygonMumbai } from \"viem/chains\";\nimport { withZeroDevPaymasterAndData } from \"../middleware/paymaster.js\";\nimport type { RequiredProps } from \"../types.js\";\n\nexport type ValidatorProviderParamsOpts<P extends KernelBaseValidatorParams> = {\n paymasterConfig?: PaymasterConfig<PaymasterPolicy>;\n providerConfig?: Partial<ZeroDevProviderConfig>;\n accountConfig?: Omit<\n KernelSmartAccountParams,\n keyof ExtendedValidatorProviderParams<P>\n >;\n validatorConfig?: Omit<P, keyof ExtendedValidatorProviderParams<P>>;\n};\n\nexport interface ValidatorProviderParams<P extends KernelBaseValidatorParams> {\n projectId: string;\n bundlerProvider?: PaymasterAndBundlerProviders;\n opts?: ValidatorProviderParamsOpts<P>;\n usePaymaster?: boolean;\n defaultProvider?: ValidatorProvider<\n KernelBaseValidator,\n KernelBaseValidatorParams\n >;\n}\n\nexport type ExtendedValidatorProviderParams<\n P extends KernelBaseValidatorParams\n> = ValidatorProviderParams<P> & RequiredProps<P>;\n\n// A simple facade abstraction for validator related provider operations\n// Needs to be implemented for each validator plugin\nexport abstract class ValidatorProvider<\n V extends KernelBaseValidator,\n P extends KernelBaseValidatorParams\n> extends ZeroDevProvider {\n protected defaultProvider?: ValidatorProvider<\n KernelBaseValidator,\n KernelBaseValidatorParams\n >;\n constructor(\n params: ExtendedValidatorProviderParams<P>,\n validator: KernelBaseValidator\n ) {\n let bundlerProvider = params.bundlerProvider;\n const shouldUsePaymaster =\n params.usePaymaster === undefined || params.usePaymaster;\n if (\n params.opts?.paymasterConfig &&\n params.opts?.paymasterConfig.policy === \"TOKEN_PAYMASTER\" &&\n shouldUsePaymaster\n ) {\n bundlerProvider = \"STACKUP\";\n }\n super({\n ...params.opts?.providerConfig,\n chain: params.opts?.providerConfig?.chain ?? polygonMumbai,\n rpcUrl: params.opts?.providerConfig?.rpcUrl,\n projectId: params.projectId,\n bundlerProvider,\n });\n this.connect(\n () =>\n new KernelSmartContractAccount({\n projectId: params.projectId,\n validator,\n defaultValidator: params.defaultProvider?.getValidator(),\n rpcClient: this.rpcClient,\n bundlerProvider,\n index: params.defaultProvider?.getAccount().getIndex(),\n ...params.opts?.accountConfig,\n })\n );\n if (shouldUsePaymaster) {\n let paymasterConfig = params.opts?.paymasterConfig ?? {\n policy: \"VERIFYING_PAYMASTER\",\n };\n paymasterConfig = {\n ...paymasterConfig,\n paymasterProvider:\n params.opts?.paymasterConfig?.paymasterProvider ?? bundlerProvider,\n };\n withZeroDevPaymasterAndData(this, paymasterConfig);\n }\n }\n\n getValidator = (): V => {\n if (!isKernelAccount(this.account) || !this.account.validator) {\n throw new Error(\n \"ValidatorProvider: account with validator is not set, did you call all connects first?\"\n );\n }\n return this.account.getValidator() as unknown as V;\n };\n\n getEncodedEnableData = async (enableData: Hex): Promise<Hex> => {\n if (!isKernelAccount(this.account) || !this.account.validator) {\n throw new Error(\n \"ValidatorProvider: account with validator is not set, did you call all connects first?\"\n );\n }\n return await this.account.validator.encodeEnable(enableData);\n };\n\n getEncodedDisableData = async (disableData: Hex): Promise<Hex> => {\n if (!isKernelAccount(this.account) || !this.account.validator) {\n throw new Error(\n \"ValidatorProvider: account with validator is not set, did you call all connects first?\"\n );\n }\n return await this.account.validator.encodeDisable(disableData);\n };\n\n sendEnableUserOperation = async (\n enableData: Hex\n ): Promise<SendUserOperationResult> => {\n const encodedEnableData = await this.getEncodedEnableData(enableData);\n if (!isKernelAccount(this.account) || !this.account.validator) {\n throw new Error(\n \"ValidatorProvider: account with validator is not set, did you call all connects first?\"\n );\n }\n\n return await this.sendUserOperation({\n target: this.account.validator.validatorAddress,\n data: encodedEnableData,\n });\n };\n\n sendDisableUserOperation = async (\n disableData: Hex\n ): Promise<SendUserOperationResult> => {\n const encodedDisableData = await this.getEncodedDisableData(disableData);\n if (!isKernelAccount(this.account) || !this.account.validator) {\n throw new Error(\n \"ValidatorProvider: account with validator is not set, did you call all connects first?\"\n );\n }\n\n return await this.sendUserOperation({\n target: this.account.validator.validatorAddress,\n data: encodedDisableData,\n });\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ethers-provider.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/ethers-provider/ethers-provider.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,wBAAwB,EAExB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAC/B,KAAK,mBAAmB,EACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,EACV,0BAA0B,EAC1B,wBAAwB,EACzB,MAAM,gCAAgC,CAAC;AAIxC,qBAAa,qBAAqB,CAChC,CAAC,SAAS,mBAAmB,CAC7B,SAAQ,eAAe;IACvB,QAAQ,CAAC,eAAe,EAAE,wBAAwB,CAAC,CAAC,CAAC,CAAC;gBAC1C,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,0BAA0B,CAAC,CAAC,CAAC;WAqB/C,IAAI,CAAC,CAAC,SAAS,mBAAmB,EACpD,aAAa,EAAE,CAAC,EAChB,MAAM,EAAE,0BAA0B,CAAC,CAAC,CAAC,GACpC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAoBpC,kBAAkB,IAAI,wBAAwB,CAAC,CAAC,CAAC;IAIjD;;;;;;;OAOG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAIjD;;;;;OAKG;IACH,gBAAgB,CACd,EAAE,EAAE,CAAC,SAAS,EAAE,mBAAmB,KAAK,wBAAwB,GAC/D,oBAAoB,CAAC,CAAC,CAAC;IAS1B;;OAEG;IACH,gBAAgB,IAAI,oBAAoB,CAAC,CAAC,CAAC;IAI3C,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;IAEF,sBAAsB,IAAI,mBAAmB;CAG9C"}
1
+ {"version":3,"file":"ethers-provider.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/ethers-provider/ethers-provider.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,wBAAwB,EAExB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,0BAA0B,EAC/B,KAAK,mBAAmB,EACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,EACV,0BAA0B,EAC1B,wBAAwB,EACzB,MAAM,gCAAgC,CAAC;AAIxC,qBAAa,qBAAqB,CAChC,CAAC,SAAS,mBAAmB,CAC7B,SAAQ,eAAe;IACvB,QAAQ,CAAC,eAAe,EAAE,wBAAwB,CAAC,CAAC,CAAC,CAAC;gBAC1C,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,0BAA0B,CAAC,CAAC,CAAC;WAiC/C,IAAI,CAAC,CAAC,SAAS,mBAAmB,EACpD,aAAa,EAAE,CAAC,EAChB,MAAM,EAAE,0BAA0B,CAAC,CAAC,CAAC,GACpC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAoBpC,kBAAkB,IAAI,wBAAwB,CAAC,CAAC,CAAC;IAIjD;;;;;;;OAOG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAIjD;;;;;OAKG;IACH,gBAAgB,CACd,EAAE,EAAE,CAAC,SAAS,EAAE,mBAAmB,KAAK,wBAAwB,GAC/D,oBAAoB,CAAC,CAAC,CAAC;IAS1B;;OAEG;IACH,gBAAgB,IAAI,oBAAoB,CAAC,CAAC,CAAC;IAI3C,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;IAEF,sBAAsB,IAAI,mBAAmB;CAG9C"}
@@ -7,7 +7,7 @@ import { type PaymasterAndBundlerProviders, type PaymasterConfig } from "./types
7
7
  export declare class TokenPaymaster extends Paymaster {
8
8
  protected paymasterConfig: PaymasterConfig<"TOKEN_PAYMASTER">;
9
9
  constructor(provider: ZeroDevProvider, paymasterConfig: PaymasterConfig<"TOKEN_PAYMASTER">);
10
- getPaymasterAddress(): Promise<Hex | undefined>;
10
+ getPaymasterAddress(paymasterProvider?: PaymasterAndBundlerProviders): Promise<Hex | undefined>;
11
11
  decodeMainCallFromCallData(kernelAddress: PromiseOrValue<string>, callData: PromiseOrValue<BytesLike>): Promise<UserOperationCallDataWithDelegate | undefined>;
12
12
  getERC20UserOp(struct: UserOperationStruct, mainCall: UserOperationCallDataWithDelegate, gasTokenAddress: Hex, paymasterAddress: Hex): Promise<UserOperationStruct | undefined>;
13
13
  getPaymasterResponse(struct: UserOperationStruct, paymasterProvider?: PaymasterAndBundlerProviders, shouldOverrideFee?: boolean): Promise<UserOperationStruct | undefined>;
@@ -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,IAAI,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC;IAkB/C,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,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,6 +1,5 @@
1
1
  import { type SignTypedDataParams, type SmartAccountSigner, type UserOperationRequest } from "@alchemy/aa-core";
2
2
  import { type Chain, type Hex, type Address, type PublicClient, type Transport } from "viem";
3
- import type { PaymasterAndBundlerProviders } from "../paymaster/types.js";
4
3
  export declare enum ValidatorMode {
5
4
  sudo = "0x00000000",
6
5
  plugin = "0x00000001",
@@ -18,7 +17,6 @@ export interface KernelBaseValidatorParams {
18
17
  executor?: Address;
19
18
  selector?: Hex;
20
19
  rpcUrl?: string;
21
- bundlerProvider?: PaymasterAndBundlerProviders;
22
20
  }
23
21
  export type ValidatorPluginData = Required<Pick<KernelBaseValidatorParams, "executor" | "selector" | "validAfter" | "validUntil">>;
24
22
  export declare abstract class KernelBaseValidator {
@@ -33,7 +31,6 @@ export declare abstract class KernelBaseValidator {
33
31
  protected executor?: Address;
34
32
  protected selector?: Hex;
35
33
  protected rpcUrl?: string;
36
- protected bundlerProvider?: PaymasterAndBundlerProviders;
37
34
  publicClient?: PublicClient<Transport, Chain>;
38
35
  constructor(params: KernelBaseValidatorParams);
39
36
  abstract encodeEnable(enableData: Hex): Hex;
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/base.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator-provider/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,KAAK,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,KAAK,EACV,mBAAmB,EACnB,yBAAyB,EAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EACV,4BAA4B,EAC5B,eAAe,EACf,eAAe,EAChB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEL,KAAK,wBAAwB,EAE9B,MAAM,eAAe,CAAC;AAGvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,MAAM,2BAA2B,CAAC,CAAC,SAAS,yBAAyB,IAAI;IAC7E,eAAe,CAAC,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC;IACnD,cAAc,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAChD,aAAa,CAAC,EAAE,IAAI,CAClB,wBAAwB,EACxB,MAAM,+BAA+B,CAAC,CAAC,CAAC,CACzC,CAAC;IACF,eAAe,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,MAAM,+BAA+B,CAAC,CAAC,CAAC,CAAC,CAAC;CACrE,CAAC;AAEF,MAAM,WAAW,uBAAuB,CAAC,CAAC,SAAS,yBAAyB;IAC1E,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,4BAA4B,CAAC;IAC/C,IAAI,CAAC,EAAE,2BAA2B,CAAC,CAAC,CAAC,CAAC;IACtC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,iBAAiB,CACjC,mBAAmB,EACnB,yBAAyB,CAC1B,CAAC;CACH;AAED,MAAM,MAAM,+BAA+B,CACzC,CAAC,SAAS,yBAAyB,IACjC,uBAAuB,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;AAIlD,8BAAsB,iBAAiB,CACrC,CAAC,SAAS,mBAAmB,EAC7B,CAAC,SAAS,yBAAyB,CACnC,SAAQ,eAAe;IACvB,SAAS,CAAC,eAAe,CAAC,EAAE,iBAAiB,CAC3C,mBAAmB,EACnB,yBAAyB,CAC1B,CAAC;gBAEA,MAAM,EAAE,+BAA+B,CAAC,CAAC,CAAC,EAC1C,SAAS,EAAE,mBAAmB;IAmChC,YAAY,QAAO,CAAC,CAOlB;IAEF,oBAAoB,eAAsB,GAAG,KAAG,QAAQ,GAAG,CAAC,CAO1D;IAEF,qBAAqB,gBAAuB,GAAG,KAAG,QAAQ,GAAG,CAAC,CAO5D;IAEF,uBAAuB,eACT,GAAG,KACd,QAAQ,uBAAuB,CAAC,CAYjC;IAEF,wBAAwB,gBACT,GAAG,KACf,QAAQ,uBAAuB,CAAC,CAYjC;CACH"}
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator-provider/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,GAAG,EAAE,KAAK,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,KAAK,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,KAAK,EACV,mBAAmB,EACnB,yBAAyB,EAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EACV,4BAA4B,EAC5B,eAAe,EACf,eAAe,EAChB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAEL,KAAK,wBAAwB,EAE9B,MAAM,eAAe,CAAC;AAGvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,MAAM,2BAA2B,CAAC,CAAC,SAAS,yBAAyB,IAAI;IAC7E,eAAe,CAAC,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC;IACnD,cAAc,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAChD,aAAa,CAAC,EAAE,IAAI,CAClB,wBAAwB,EACxB,MAAM,+BAA+B,CAAC,CAAC,CAAC,CACzC,CAAC;IACF,eAAe,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,MAAM,+BAA+B,CAAC,CAAC,CAAC,CAAC,CAAC;CACrE,CAAC;AAEF,MAAM,WAAW,uBAAuB,CAAC,CAAC,SAAS,yBAAyB;IAC1E,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,4BAA4B,CAAC;IAC/C,IAAI,CAAC,EAAE,2BAA2B,CAAC,CAAC,CAAC,CAAC;IACtC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,iBAAiB,CACjC,mBAAmB,EACnB,yBAAyB,CAC1B,CAAC;CACH;AAED,MAAM,MAAM,+BAA+B,CACzC,CAAC,SAAS,yBAAyB,IACjC,uBAAuB,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;AAIlD,8BAAsB,iBAAiB,CACrC,CAAC,SAAS,mBAAmB,EAC7B,CAAC,SAAS,yBAAyB,CACnC,SAAQ,eAAe;IACvB,SAAS,CAAC,eAAe,CAAC,EAAE,iBAAiB,CAC3C,mBAAmB,EACnB,yBAAyB,CAC1B,CAAC;gBAEA,MAAM,EAAE,+BAA+B,CAAC,CAAC,CAAC,EAC1C,SAAS,EAAE,mBAAmB;IA4ChC,YAAY,QAAO,CAAC,CAOlB;IAEF,oBAAoB,eAAsB,GAAG,KAAG,QAAQ,GAAG,CAAC,CAO1D;IAEF,qBAAqB,gBAAuB,GAAG,KAAG,QAAQ,GAAG,CAAC,CAO5D;IAEF,uBAAuB,eACT,GAAG,KACd,QAAQ,uBAAuB,CAAC,CAYjC;IAEF,wBAAwB,gBACT,GAAG,KACf,QAAQ,uBAAuB,CAAC,CAYjC;CACH"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zerodev/sdk",
3
- "version": "4.0.14",
3
+ "version": "4.0.15",
4
4
  "description": "A collection of ERC-4337 compliant smart contract account interfaces",
5
5
  "author": "ZeroDev",
6
6
  "license": "MIT",
@@ -25,16 +25,28 @@ export class ZeroDevEthersProvider<
25
25
  readonly accountProvider: ValidatorProviderTypeMap[V];
26
26
  constructor(validatorType: V, params: ValidatorProviderParamsMap[V]) {
27
27
  super();
28
- let accountProvider = new ValidatorProviders[validatorType](params);
29
- if (params.usePaymaster === undefined || params.usePaymaster) {
28
+ let bundlerProvider = params.bundlerProvider;
29
+ const shouldUsePaymaster =
30
+ params.usePaymaster === undefined || params.usePaymaster;
31
+ if (
32
+ params.opts?.paymasterConfig &&
33
+ params.opts?.paymasterConfig.policy === "TOKEN_PAYMASTER" &&
34
+ shouldUsePaymaster
35
+ ) {
36
+ bundlerProvider = "STACKUP";
37
+ }
38
+ let accountProvider = new ValidatorProviders[validatorType]({
39
+ ...params,
40
+ bundlerProvider,
41
+ });
42
+ if (shouldUsePaymaster) {
30
43
  let paymasterConfig = params.opts?.paymasterConfig ?? {
31
44
  policy: "VERIFYING_PAYMASTER",
32
45
  };
33
46
  paymasterConfig = {
34
47
  ...paymasterConfig,
35
48
  paymasterProvider:
36
- params.opts?.paymasterConfig?.paymasterProvider ??
37
- params.bundlerProvider,
49
+ params.opts?.paymasterConfig?.paymasterProvider ?? bundlerProvider,
38
50
  };
39
51
  accountProvider = withZeroDevPaymasterAndData(
40
52
  accountProvider,
@@ -38,7 +38,9 @@ export class TokenPaymaster extends Paymaster {
38
38
  ) {
39
39
  super(provider);
40
40
  }
41
- async getPaymasterAddress(): Promise<Hex | undefined> {
41
+ async getPaymasterAddress(
42
+ paymasterProvider?: PaymasterAndBundlerProviders
43
+ ): Promise<Hex | undefined> {
42
44
  const chainId = await getChainId(this.provider.getProjectId());
43
45
 
44
46
  try {
@@ -47,6 +49,7 @@ export class TokenPaymaster extends Paymaster {
47
49
  {
48
50
  chainId,
49
51
  entryPointAddress: ENTRYPOINT_ADDRESS,
52
+ paymasterProvider,
50
53
  },
51
54
  { headers: { "Content-Type": "application/json" } }
52
55
  );
@@ -176,7 +179,7 @@ export class TokenPaymaster extends Paymaster {
176
179
  this.paymasterConfig.gasToken,
177
180
  chainId
178
181
  );
179
- let paymasterAddress = await this.getPaymasterAddress();
182
+ let paymasterAddress = await this.getPaymasterAddress(paymasterProvider);
180
183
  if (gasTokenAddress !== undefined && paymasterAddress !== undefined) {
181
184
  const erc20UserOp = await this.getERC20UserOp(
182
185
  struct,
@@ -24,7 +24,6 @@ import {
24
24
  ECDSA_VALIDATOR_ADDRESS,
25
25
  ENTRYPOINT_ADDRESS,
26
26
  } from "../constants.js";
27
- import type { PaymasterAndBundlerProviders } from "../paymaster/types.js";
28
27
  import { polygonMumbai } from "viem/chains";
29
28
 
30
29
  export enum ValidatorMode {
@@ -45,7 +44,6 @@ export interface KernelBaseValidatorParams {
45
44
  executor?: Address;
46
45
  selector?: Hex;
47
46
  rpcUrl?: string;
48
- bundlerProvider?: PaymasterAndBundlerProviders;
49
47
  }
50
48
 
51
49
  export type ValidatorPluginData = Required<
@@ -69,7 +67,6 @@ export abstract class KernelBaseValidator {
69
67
  protected executor?: Address;
70
68
  protected selector?: Hex;
71
69
  protected rpcUrl?: string;
72
- protected bundlerProvider?: PaymasterAndBundlerProviders;
73
70
  publicClient?: PublicClient<Transport, Chain>;
74
71
 
75
72
  constructor(params: KernelBaseValidatorParams) {
@@ -84,7 +81,6 @@ export abstract class KernelBaseValidator {
84
81
  this.selector = params.selector;
85
82
  this.chain = params.chain;
86
83
  this.rpcUrl = params.rpcUrl ?? BUNDLER_URL;
87
- this.bundlerProvider = params.bundlerProvider;
88
84
  this.publicClient = createPublicClient({
89
85
  transport: http(CHAIN_ID_TO_NODE[this.chain?.id ?? polygonMumbai.id]),
90
86
  chain: this.chain ?? polygonMumbai,
@@ -57,12 +57,22 @@ export abstract class ValidatorProvider<
57
57
  params: ExtendedValidatorProviderParams<P>,
58
58
  validator: KernelBaseValidator
59
59
  ) {
60
+ let bundlerProvider = params.bundlerProvider;
61
+ const shouldUsePaymaster =
62
+ params.usePaymaster === undefined || params.usePaymaster;
63
+ if (
64
+ params.opts?.paymasterConfig &&
65
+ params.opts?.paymasterConfig.policy === "TOKEN_PAYMASTER" &&
66
+ shouldUsePaymaster
67
+ ) {
68
+ bundlerProvider = "STACKUP";
69
+ }
60
70
  super({
61
71
  ...params.opts?.providerConfig,
62
72
  chain: params.opts?.providerConfig?.chain ?? polygonMumbai,
63
73
  rpcUrl: params.opts?.providerConfig?.rpcUrl,
64
74
  projectId: params.projectId,
65
- bundlerProvider: params.bundlerProvider,
75
+ bundlerProvider,
66
76
  });
67
77
  this.connect(
68
78
  () =>
@@ -71,20 +81,19 @@ export abstract class ValidatorProvider<
71
81
  validator,
72
82
  defaultValidator: params.defaultProvider?.getValidator(),
73
83
  rpcClient: this.rpcClient,
74
- bundlerProvider: params.bundlerProvider,
84
+ bundlerProvider,
75
85
  index: params.defaultProvider?.getAccount().getIndex(),
76
86
  ...params.opts?.accountConfig,
77
87
  })
78
88
  );
79
- if (params.usePaymaster === undefined || params.usePaymaster) {
89
+ if (shouldUsePaymaster) {
80
90
  let paymasterConfig = params.opts?.paymasterConfig ?? {
81
91
  policy: "VERIFYING_PAYMASTER",
82
92
  };
83
93
  paymasterConfig = {
84
94
  ...paymasterConfig,
85
95
  paymasterProvider:
86
- params.opts?.paymasterConfig?.paymasterProvider ??
87
- params.bundlerProvider,
96
+ params.opts?.paymasterConfig?.paymasterProvider ?? bundlerProvider,
88
97
  };
89
98
  withZeroDevPaymasterAndData(this, paymasterConfig);
90
99
  }