@zerodev/sdk 4.3.2 → 4.3.4

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 (119) hide show
  1. package/dist/cjs/kernel-zerodev/account.js +1 -1
  2. package/dist/cjs/kernel-zerodev/account.js.map +1 -1
  3. package/dist/cjs/kernel-zerodev/constants.js +2 -0
  4. package/dist/cjs/kernel-zerodev/constants.js.map +1 -1
  5. package/dist/cjs/kernel-zerodev/ethers-provider/ethers-provider.js +4 -2
  6. package/dist/cjs/kernel-zerodev/ethers-provider/ethers-provider.js.map +1 -1
  7. package/dist/cjs/kernel-zerodev/middleware/gas-estimator.js +11 -5
  8. package/dist/cjs/kernel-zerodev/middleware/gas-estimator.js.map +1 -1
  9. package/dist/cjs/kernel-zerodev/paymaster/types.d.ts +1 -1
  10. package/dist/cjs/kernel-zerodev/paymaster/types.js.map +1 -1
  11. package/dist/cjs/kernel-zerodev/provider.js +19 -9
  12. package/dist/cjs/kernel-zerodev/provider.js.map +1 -1
  13. package/dist/cjs/kernel-zerodev/utils/custom-chains.d.ts +58 -0
  14. package/dist/cjs/kernel-zerodev/utils/custom-chains.js +57 -0
  15. package/dist/cjs/kernel-zerodev/utils/custom-chains.js.map +1 -0
  16. package/dist/cjs/kernel-zerodev/utils.d.ts +2 -0
  17. package/dist/cjs/kernel-zerodev/utils.js +35 -1
  18. package/dist/cjs/kernel-zerodev/utils.js.map +1 -1
  19. package/dist/cjs/kernel-zerodev/validator/ecdsa-validator.js +1 -1
  20. package/dist/cjs/kernel-zerodev/validator/ecdsa-validator.js.map +1 -1
  21. package/dist/cjs/kernel-zerodev/validator/erc165-session-key-validator.js +1 -1
  22. package/dist/cjs/kernel-zerodev/validator/erc165-session-key-validator.js.map +1 -1
  23. package/dist/cjs/kernel-zerodev/validator/kill-switch-validator.js +1 -1
  24. package/dist/cjs/kernel-zerodev/validator/kill-switch-validator.js.map +1 -1
  25. package/dist/cjs/kernel-zerodev/validator/recovery-validator.js +1 -2
  26. package/dist/cjs/kernel-zerodev/validator/recovery-validator.js.map +1 -1
  27. package/dist/cjs/kernel-zerodev/validator/session-key-validator.js +1 -1
  28. package/dist/cjs/kernel-zerodev/validator/session-key-validator.js.map +1 -1
  29. package/dist/cjs/kernel-zerodev/validator-provider/base.js +2 -1
  30. package/dist/cjs/kernel-zerodev/validator-provider/base.js.map +1 -1
  31. package/dist/cjs/kernel-zerodev/validator-provider/ecdsa-provider.js +3 -3
  32. package/dist/cjs/kernel-zerodev/validator-provider/ecdsa-provider.js.map +1 -1
  33. package/dist/cjs/kernel-zerodev/validator-provider/erc165-session-key-provider.js +3 -3
  34. package/dist/cjs/kernel-zerodev/validator-provider/erc165-session-key-provider.js.map +1 -1
  35. package/dist/cjs/kernel-zerodev/validator-provider/kill-switch-provider.js +3 -3
  36. package/dist/cjs/kernel-zerodev/validator-provider/kill-switch-provider.js.map +1 -1
  37. package/dist/cjs/kernel-zerodev/validator-provider/recovery-provider.js +2 -3
  38. package/dist/cjs/kernel-zerodev/validator-provider/recovery-provider.js.map +1 -1
  39. package/dist/cjs/kernel-zerodev/validator-provider/session-key-provider.js +2 -2
  40. package/dist/cjs/kernel-zerodev/validator-provider/session-key-provider.js.map +1 -1
  41. package/dist/esm/kernel-zerodev/account.js +2 -2
  42. package/dist/esm/kernel-zerodev/account.js.map +1 -1
  43. package/dist/esm/kernel-zerodev/constants.js +2 -0
  44. package/dist/esm/kernel-zerodev/constants.js.map +1 -1
  45. package/dist/esm/kernel-zerodev/ethers-provider/ethers-provider.js +4 -2
  46. package/dist/esm/kernel-zerodev/ethers-provider/ethers-provider.js.map +1 -1
  47. package/dist/esm/kernel-zerodev/middleware/gas-estimator.js +11 -5
  48. package/dist/esm/kernel-zerodev/middleware/gas-estimator.js.map +1 -1
  49. package/dist/esm/kernel-zerodev/paymaster/types.d.ts +1 -1
  50. package/dist/esm/kernel-zerodev/paymaster/types.js.map +1 -1
  51. package/dist/esm/kernel-zerodev/provider.js +19 -9
  52. package/dist/esm/kernel-zerodev/provider.js.map +1 -1
  53. package/dist/esm/kernel-zerodev/utils/custom-chains.d.ts +58 -0
  54. package/dist/esm/kernel-zerodev/utils/custom-chains.js +54 -0
  55. package/dist/esm/kernel-zerodev/utils/custom-chains.js.map +1 -0
  56. package/dist/esm/kernel-zerodev/utils.d.ts +2 -0
  57. package/dist/esm/kernel-zerodev/utils.js +10 -0
  58. package/dist/esm/kernel-zerodev/utils.js.map +1 -1
  59. package/dist/esm/kernel-zerodev/validator/ecdsa-validator.js +2 -2
  60. package/dist/esm/kernel-zerodev/validator/ecdsa-validator.js.map +1 -1
  61. package/dist/esm/kernel-zerodev/validator/erc165-session-key-validator.js +2 -2
  62. package/dist/esm/kernel-zerodev/validator/erc165-session-key-validator.js.map +1 -1
  63. package/dist/esm/kernel-zerodev/validator/kill-switch-validator.js +2 -2
  64. package/dist/esm/kernel-zerodev/validator/kill-switch-validator.js.map +1 -1
  65. package/dist/esm/kernel-zerodev/validator/recovery-validator.js +2 -2
  66. package/dist/esm/kernel-zerodev/validator/recovery-validator.js.map +1 -1
  67. package/dist/esm/kernel-zerodev/validator/session-key-validator.js +2 -2
  68. package/dist/esm/kernel-zerodev/validator/session-key-validator.js.map +1 -1
  69. package/dist/esm/kernel-zerodev/validator-provider/base.js +2 -1
  70. package/dist/esm/kernel-zerodev/validator-provider/base.js.map +1 -1
  71. package/dist/esm/kernel-zerodev/validator-provider/ecdsa-provider.js +1 -1
  72. package/dist/esm/kernel-zerodev/validator-provider/ecdsa-provider.js.map +1 -1
  73. package/dist/esm/kernel-zerodev/validator-provider/erc165-session-key-provider.js +1 -1
  74. package/dist/esm/kernel-zerodev/validator-provider/erc165-session-key-provider.js.map +1 -1
  75. package/dist/esm/kernel-zerodev/validator-provider/kill-switch-provider.js +1 -1
  76. package/dist/esm/kernel-zerodev/validator-provider/kill-switch-provider.js.map +1 -1
  77. package/dist/esm/kernel-zerodev/validator-provider/recovery-provider.js +2 -2
  78. package/dist/esm/kernel-zerodev/validator-provider/recovery-provider.js.map +1 -1
  79. package/dist/esm/kernel-zerodev/validator-provider/session-key-provider.js +2 -2
  80. package/dist/esm/kernel-zerodev/validator-provider/session-key-provider.js.map +1 -1
  81. package/dist/types/kernel-zerodev/account.d.ts.map +1 -1
  82. package/dist/types/kernel-zerodev/constants.d.ts.map +1 -1
  83. package/dist/types/kernel-zerodev/ethers-provider/ethers-provider.d.ts.map +1 -1
  84. package/dist/types/kernel-zerodev/middleware/gas-estimator.d.ts.map +1 -1
  85. package/dist/types/kernel-zerodev/paymaster/types.d.ts +1 -1
  86. package/dist/types/kernel-zerodev/paymaster/types.d.ts.map +1 -1
  87. package/dist/types/kernel-zerodev/provider.d.ts.map +1 -1
  88. package/dist/types/kernel-zerodev/utils/custom-chains.d.ts +59 -0
  89. package/dist/types/kernel-zerodev/utils/custom-chains.d.ts.map +1 -0
  90. package/dist/types/kernel-zerodev/utils.d.ts +2 -0
  91. package/dist/types/kernel-zerodev/utils.d.ts.map +1 -1
  92. package/dist/types/kernel-zerodev/validator/ecdsa-validator.d.ts.map +1 -1
  93. package/dist/types/kernel-zerodev/validator/erc165-session-key-validator.d.ts.map +1 -1
  94. package/dist/types/kernel-zerodev/validator/kill-switch-validator.d.ts.map +1 -1
  95. package/dist/types/kernel-zerodev/validator/recovery-validator.d.ts.map +1 -1
  96. package/dist/types/kernel-zerodev/validator/session-key-validator.d.ts.map +1 -1
  97. package/dist/types/kernel-zerodev/validator-provider/base.d.ts.map +1 -1
  98. package/dist/types/kernel-zerodev/validator-provider/recovery-provider.d.ts.map +1 -1
  99. package/dist/types/kernel-zerodev/validator-provider/session-key-provider.d.ts.map +1 -1
  100. package/package.json +1 -1
  101. package/src/kernel-zerodev/account.ts +1 -2
  102. package/src/kernel-zerodev/constants.ts +2 -0
  103. package/src/kernel-zerodev/ethers-provider/ethers-provider.ts +3 -2
  104. package/src/kernel-zerodev/middleware/gas-estimator.ts +13 -7
  105. package/src/kernel-zerodev/paymaster/types.ts +5 -1
  106. package/src/kernel-zerodev/provider.ts +22 -9
  107. package/src/kernel-zerodev/utils/custom-chains.ts +55 -0
  108. package/src/kernel-zerodev/utils.ts +21 -0
  109. package/src/kernel-zerodev/validator/ecdsa-validator.ts +1 -2
  110. package/src/kernel-zerodev/validator/erc165-session-key-validator.ts +1 -2
  111. package/src/kernel-zerodev/validator/kill-switch-validator.ts +1 -2
  112. package/src/kernel-zerodev/validator/recovery-validator.ts +1 -2
  113. package/src/kernel-zerodev/validator/session-key-validator.ts +1 -2
  114. package/src/kernel-zerodev/validator-provider/base.ts +2 -1
  115. package/src/kernel-zerodev/validator-provider/ecdsa-provider.ts +1 -1
  116. package/src/kernel-zerodev/validator-provider/erc165-session-key-provider.ts +1 -1
  117. package/src/kernel-zerodev/validator-provider/kill-switch-provider.ts +1 -1
  118. package/src/kernel-zerodev/validator-provider/recovery-provider.ts +2 -6
  119. package/src/kernel-zerodev/validator-provider/session-key-provider.ts +1 -2
@@ -0,0 +1,54 @@
1
+ import { defineChain } from "viem";
2
+ export const gelatoOPTestnet = defineChain({
3
+ id: 42069,
4
+ name: "Gelato OPTestnet",
5
+ network: "gelatoOPTestnet",
6
+ nativeCurrency: {
7
+ decimals: 18,
8
+ name: "Ether",
9
+ symbol: "ETH",
10
+ },
11
+ rpcUrls: {
12
+ default: {
13
+ http: ["https://rpc.op-testnet.gelato.digital"],
14
+ webSocket: [],
15
+ },
16
+ public: {
17
+ http: ["https://rpc.op-testnet.gelato.digital"],
18
+ webSocket: [],
19
+ },
20
+ },
21
+ blockExplorers: {
22
+ default: {
23
+ name: "Explorer",
24
+ url: "https://blockscout.op-testnet.gelato.digital",
25
+ },
26
+ },
27
+ });
28
+ export const astarZKatana = defineChain({
29
+ id: 1261120,
30
+ name: "Astar zKatana",
31
+ network: "astarZKatana",
32
+ nativeCurrency: {
33
+ decimals: 18,
34
+ name: "Ether",
35
+ symbol: "ETH",
36
+ },
37
+ rpcUrls: {
38
+ default: {
39
+ http: ["https://rpc.zkatana.gelato.digital"],
40
+ webSocket: ["https://ws.zkatana.gelato.digital"],
41
+ },
42
+ public: {
43
+ http: ["https://rpc.zkatana.gelato.digital"],
44
+ webSocket: ["https://ws.zkatana.gelato.digital"],
45
+ },
46
+ },
47
+ blockExplorers: {
48
+ default: {
49
+ name: "Explorer",
50
+ url: "https://zkatana.blockscout.com",
51
+ },
52
+ },
53
+ });
54
+ //# sourceMappingURL=custom-chains.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-chains.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/utils/custom-chains.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AAEnC,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAC;IACzC,EAAE,EAAE,KAAK;IACT,IAAI,EAAE,kBAAkB;IACxB,OAAO,EAAE,iBAAiB;IAC1B,cAAc,EAAE;QACd,QAAQ,EAAE,EAAE;QACZ,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,KAAK;KACd;IACD,OAAO,EAAE;QACP,OAAO,EAAE;YACP,IAAI,EAAE,CAAC,uCAAuC,CAAC;YAC/C,SAAS,EAAE,EAAE;SACd;QACD,MAAM,EAAE;YACN,IAAI,EAAE,CAAC,uCAAuC,CAAC;YAC/C,SAAS,EAAE,EAAE;SACd;KACF;IACD,cAAc,EAAE;QACd,OAAO,EAAE;YACP,IAAI,EAAE,UAAU;YAChB,GAAG,EAAE,8CAA8C;SACpD;KACF;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAC;IACtC,EAAE,EAAE,OAAO;IACX,IAAI,EAAE,eAAe;IACrB,OAAO,EAAE,cAAc;IACvB,cAAc,EAAE;QACd,QAAQ,EAAE,EAAE;QACZ,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,KAAK;KACd;IACD,OAAO,EAAE;QACP,OAAO,EAAE;YACP,IAAI,EAAE,CAAC,oCAAoC,CAAC;YAC5C,SAAS,EAAE,CAAC,mCAAmC,CAAC;SACjD;QACD,MAAM,EAAE;YACN,IAAI,EAAE,CAAC,oCAAoC,CAAC;YAC5C,SAAS,EAAE,CAAC,mCAAmC,CAAC;SACjD;KACF;IACD,cAAc,EAAE;QACd,OAAO,EAAE;YACP,IAAI,EAAE,UAAU;YAChB,GAAG,EAAE,gCAAgC;SACtC;KACF;CACF,CAAC,CAAC","sourcesContent":["import { defineChain } from \"viem\";\n\nexport const gelatoOPTestnet = defineChain({\n id: 42069,\n name: \"Gelato OPTestnet\",\n network: \"gelatoOPTestnet\",\n nativeCurrency: {\n decimals: 18,\n name: \"Ether\",\n symbol: \"ETH\",\n },\n rpcUrls: {\n default: {\n http: [\"https://rpc.op-testnet.gelato.digital\"],\n webSocket: [],\n },\n public: {\n http: [\"https://rpc.op-testnet.gelato.digital\"],\n webSocket: [],\n },\n },\n blockExplorers: {\n default: {\n name: \"Explorer\",\n url: \"https://blockscout.op-testnet.gelato.digital\",\n },\n },\n});\n\nexport const astarZKatana = defineChain({\n id: 1261120,\n name: \"Astar zKatana\",\n network: \"astarZKatana\",\n nativeCurrency: {\n decimals: 18,\n name: \"Ether\",\n symbol: \"ETH\",\n },\n rpcUrls: {\n default: {\n http: [\"https://rpc.zkatana.gelato.digital\"],\n webSocket: [\"https://ws.zkatana.gelato.digital\"],\n },\n public: {\n http: [\"https://rpc.zkatana.gelato.digital\"],\n webSocket: [\"https://ws.zkatana.gelato.digital\"],\n },\n },\n blockExplorers: {\n default: {\n name: \"Explorer\",\n url: \"https://zkatana.blockscout.com\",\n },\n },\n});\n"]}
@@ -1,4 +1,5 @@
1
1
  import { type Hex, type WalletClient } from "viem";
2
+ import * as chains from "viem/chains";
2
3
  import type { SmartAccountSigner, UserOperationCallData } from "@alchemy/aa-core";
3
4
  import { Signer } from "@ethersproject/abstract-signer";
4
5
  import { Wallet } from "@ethersproject/wallet";
@@ -16,3 +17,4 @@ export declare const isWallet: (signer: any) => signer is Wallet;
16
17
  export declare const convertEthersSignerToAccountSigner: (signer: Signer | Wallet) => SmartAccountSigner;
17
18
  export declare const randomHexString: (length: number) => Hex;
18
19
  export declare const fixSignedData: (sig: Hex) => Hex;
20
+ export declare const getChain: (chainId: number) => chains.Chain;
@@ -1,4 +1,6 @@
1
1
  import { encodePacked, fromBytes, toBytes, toHex, isHex, hexToSignature, signatureToHex, } from "viem";
2
+ import * as chains from "viem/chains";
3
+ import * as customChains from "./utils/custom-chains.js";
2
4
  import { Signer } from "@ethersproject/abstract-signer";
3
5
  import { Wallet } from "@ethersproject/wallet";
4
6
  import { gasTokenChainAddresses } from "./constants.js";
@@ -72,4 +74,12 @@ export const fixSignedData = (sig) => {
72
74
  const joined = signatureToHex({ r, s, v });
73
75
  return joined;
74
76
  };
77
+ export const getChain = (chainId) => {
78
+ for (const chain of Object.values(chains).concat(Object.values(customChains))) {
79
+ if (chain.id === chainId) {
80
+ return chain;
81
+ }
82
+ }
83
+ throw new Error("could not find chain");
84
+ };
75
85
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/kernel-zerodev/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n encodePacked,\n fromBytes,\n toBytes,\n type Hex,\n type WalletClient,\n toHex,\n isHex,\n hexToSignature,\n signatureToHex,\n} from \"viem\";\nimport type {\n SignTypedDataParams,\n SmartAccountSigner,\n UserOperationCallData,\n} from \"@alchemy/aa-core\";\nimport { Signer, type TypedDataField } from \"@ethersproject/abstract-signer\";\nimport { Wallet } from \"@ethersproject/wallet\";\nimport type { SupportedGasToken } from \"./paymaster/types.js\";\nimport { gasTokenChainAddresses } from \"./constants.js\";\n\nexport type UserOperationCallDataWithDelegate = UserOperationCallData & {\n delegateCall?: boolean;\n};\n\nexport type BatchUserOperationCallDataWithDelegate =\n UserOperationCallDataWithDelegate[];\n\nconst encodeCall = (_tx: UserOperationCallDataWithDelegate): string => {\n const data = toBytes(_tx.data);\n const encoded = encodePacked(\n [\"uint8\", \"address\", \"uint256\", \"uint256\", \"bytes\"],\n [\n _tx.delegateCall ? 1 : 0,\n _tx.target,\n _tx.value || BigInt(0),\n BigInt(data.length),\n fromBytes(data, \"hex\"),\n ]\n );\n return encoded.slice(2);\n};\nexport const encodeMultiSend = (\n _txs: BatchUserOperationCallDataWithDelegate\n): Hex => {\n return (\"0x\" + _txs.map((tx) => encodeCall(tx)).join(\"\")) as Hex;\n};\n\nexport function base64ToBytes(base64: string) {\n const binString = atob(base64);\n return Uint8Array.from(binString, (m) => m.codePointAt(0) as number);\n}\n\nexport function bytesToBase64(bytes: Uint8Array) {\n const binString = Array.from(bytes, (x) => String.fromCodePoint(x)).join(\"\");\n return btoa(binString);\n}\n\nexport function getGasTokenAddress(\n gasToken: SupportedGasToken,\n chainId: number\n): Hex | undefined {\n if (gasToken === \"TEST_ERC20\") {\n return \"0x3870419Ba2BBf0127060bCB37f69A1b1C090992B\";\n }\n return gasTokenChainAddresses[gasToken][chainId] || undefined;\n}\n\nexport const convertWalletClientToAccountSigner = (\n client: WalletClient\n): SmartAccountSigner => {\n return {\n getAddress: async () =>\n Promise.resolve((await client.getAddresses())[0] as `0x${string}`),\n signMessage: async (message: Uint8Array | string) =>\n (await client.signMessage({\n account: client.account!,\n message:\n typeof message === \"string\"\n ? message\n : {\n raw: message,\n },\n })) as `0x${string}`,\n signTypedData: async (params: SignTypedDataParams) =>\n await client.signTypedData({ ...params, account: client.account! }),\n };\n};\n\nexport const isWallet = (signer: any): signer is Wallet =>\n signer && signer._signTypedData !== undefined;\n\nexport const convertEthersSignerToAccountSigner = (\n signer: Signer | Wallet\n): SmartAccountSigner => {\n return {\n getAddress: async () =>\n Promise.resolve((await signer.getAddress()) as `0x${string}`),\n signMessage: async (msg: Uint8Array | string) =>\n (await signer.signMessage(msg)) as `0x${string}`,\n signTypedData: async (params: SignTypedDataParams) => {\n if (!isWallet(signer)) {\n throw Error(\"signTypedData method not implemented in signer\");\n }\n return (await signer._signTypedData(\n params.domain!,\n params.types as unknown as Record<string, TypedDataField[]>,\n params.message\n )) as Hex;\n },\n };\n};\n\nexport const randomHexString = (length: number): Hex =>\n toHex(\n Array.from({ length }, () =>\n Math.floor(Math.random() * 16).toString(16)\n ).join(\"\")\n );\n\nexport const fixSignedData = (sig: Hex): Hex => {\n let signature = sig;\n if (!isHex(signature)) {\n signature = `0x${signature}`;\n if (!isHex(signature)) {\n throw new Error(\"Invalid signed data \" + sig);\n }\n }\n\n let { r, s, v } = hexToSignature(signature);\n if (v === 0n || v === 1n) v += 27n;\n const joined = signatureToHex({ r, s, v });\n return joined;\n};\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/kernel-zerodev/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n encodePacked,\n fromBytes,\n toBytes,\n type Hex,\n type WalletClient,\n toHex,\n isHex,\n hexToSignature,\n signatureToHex,\n} from \"viem\";\nimport * as chains from \"viem/chains\";\nimport * as customChains from \"./utils/custom-chains.js\";\nimport type {\n SignTypedDataParams,\n SmartAccountSigner,\n UserOperationCallData,\n} from \"@alchemy/aa-core\";\nimport { Signer, type TypedDataField } from \"@ethersproject/abstract-signer\";\nimport { Wallet } from \"@ethersproject/wallet\";\nimport type { SupportedGasToken } from \"./paymaster/types.js\";\nimport { gasTokenChainAddresses } from \"./constants.js\";\n\nexport type UserOperationCallDataWithDelegate = UserOperationCallData & {\n delegateCall?: boolean;\n};\n\nexport type BatchUserOperationCallDataWithDelegate =\n UserOperationCallDataWithDelegate[];\n\nconst encodeCall = (_tx: UserOperationCallDataWithDelegate): string => {\n const data = toBytes(_tx.data);\n const encoded = encodePacked(\n [\"uint8\", \"address\", \"uint256\", \"uint256\", \"bytes\"],\n [\n _tx.delegateCall ? 1 : 0,\n _tx.target,\n _tx.value || BigInt(0),\n BigInt(data.length),\n fromBytes(data, \"hex\"),\n ]\n );\n return encoded.slice(2);\n};\nexport const encodeMultiSend = (\n _txs: BatchUserOperationCallDataWithDelegate\n): Hex => {\n return (\"0x\" + _txs.map((tx) => encodeCall(tx)).join(\"\")) as Hex;\n};\n\nexport function base64ToBytes(base64: string) {\n const binString = atob(base64);\n return Uint8Array.from(binString, (m) => m.codePointAt(0) as number);\n}\n\nexport function bytesToBase64(bytes: Uint8Array) {\n const binString = Array.from(bytes, (x) => String.fromCodePoint(x)).join(\"\");\n return btoa(binString);\n}\n\nexport function getGasTokenAddress(\n gasToken: SupportedGasToken,\n chainId: number\n): Hex | undefined {\n if (gasToken === \"TEST_ERC20\") {\n return \"0x3870419Ba2BBf0127060bCB37f69A1b1C090992B\";\n }\n return gasTokenChainAddresses[gasToken][chainId] || undefined;\n}\n\nexport const convertWalletClientToAccountSigner = (\n client: WalletClient\n): SmartAccountSigner => {\n return {\n getAddress: async () =>\n Promise.resolve((await client.getAddresses())[0] as `0x${string}`),\n signMessage: async (message: Uint8Array | string) =>\n (await client.signMessage({\n account: client.account!,\n message:\n typeof message === \"string\"\n ? message\n : {\n raw: message,\n },\n })) as `0x${string}`,\n signTypedData: async (params: SignTypedDataParams) =>\n await client.signTypedData({ ...params, account: client.account! }),\n };\n};\n\nexport const isWallet = (signer: any): signer is Wallet =>\n signer && signer._signTypedData !== undefined;\n\nexport const convertEthersSignerToAccountSigner = (\n signer: Signer | Wallet\n): SmartAccountSigner => {\n return {\n getAddress: async () =>\n Promise.resolve((await signer.getAddress()) as `0x${string}`),\n signMessage: async (msg: Uint8Array | string) =>\n (await signer.signMessage(msg)) as `0x${string}`,\n signTypedData: async (params: SignTypedDataParams) => {\n if (!isWallet(signer)) {\n throw Error(\"signTypedData method not implemented in signer\");\n }\n return (await signer._signTypedData(\n params.domain!,\n params.types as unknown as Record<string, TypedDataField[]>,\n params.message\n )) as Hex;\n },\n };\n};\n\nexport const randomHexString = (length: number): Hex =>\n toHex(\n Array.from({ length }, () =>\n Math.floor(Math.random() * 16).toString(16)\n ).join(\"\")\n );\n\nexport const fixSignedData = (sig: Hex): Hex => {\n let signature = sig;\n if (!isHex(signature)) {\n signature = `0x${signature}`;\n if (!isHex(signature)) {\n throw new Error(\"Invalid signed data \" + sig);\n }\n }\n\n let { r, s, v } = hexToSignature(signature);\n if (v === 0n || v === 1n) v += 27n;\n const joined = signatureToHex({ r, s, v });\n return joined;\n};\n\n// Modified from @alchemy/aa-core\n/**\n * Utility method for converting a chainId to a {@link chains.Chain} object\n *\n * @param chainId\n * @returns a {@link chains.Chain} object for the given chainId\n * @throws if the chainId is not found\n */\nexport const getChain = (chainId: number): chains.Chain => {\n for (const chain of Object.values(chains).concat(\n Object.values(customChains)\n )) {\n if (chain.id === chainId) {\n return chain;\n }\n }\n throw new Error(\"could not find chain\");\n};\n"]}
@@ -1,11 +1,11 @@
1
- import { getChain, getUserOperationHash, } from "@alchemy/aa-core";
1
+ import { getUserOperationHash, } from "@alchemy/aa-core";
2
2
  import { KernelBaseValidator } from "./base.js";
3
3
  import { encodeFunctionData, toBytes } from "viem";
4
4
  import { ECDSAValidatorAbi } from "../abis/ESCDAValidatorAbi.js";
5
5
  import { getChainId } from "../api/index.js";
6
6
  import { DUMMY_ECDSA_SIG } from "../constants.js";
7
7
  import { KernelAccountAbi } from "../abis/KernelAccountAbi.js";
8
- import { fixSignedData } from "../utils.js";
8
+ import { fixSignedData, getChain } from "../utils.js";
9
9
  export class ECDSAValidator extends KernelBaseValidator {
10
10
  constructor(params) {
11
11
  super(params);
@@ -1 +1 @@
1
- {"version":3,"file":"ecdsa-validator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/ecdsa-validator.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getChain,\n getUserOperationHash,\n type Address,\n type Hex,\n type SmartAccountSigner,\n type UserOperationRequest,\n type SignTypedDataParams,\n} from \"@alchemy/aa-core\";\nimport { KernelBaseValidator, type KernelBaseValidatorParams } from \"./base.js\";\nimport { encodeFunctionData, toBytes } from \"viem\";\nimport { ECDSAValidatorAbi } from \"../abis/ESCDAValidatorAbi.js\";\nimport { getChainId } from \"../api/index.js\";\nimport { DUMMY_ECDSA_SIG } from \"../constants.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { fixSignedData } from \"../utils.js\";\n\nexport interface ECDSAValidatorParams extends KernelBaseValidatorParams {\n owner: SmartAccountSigner;\n}\n\nexport class ECDSAValidator extends KernelBaseValidator {\n protected owner: SmartAccountSigner;\n\n constructor(params: ECDSAValidatorParams) {\n super(params);\n this.owner = params.owner;\n }\n\n public static async init(\n params: ECDSAValidatorParams\n ): Promise<ECDSAValidator> {\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 ECDSAValidator({ ...params, chain });\n return instance;\n }\n\n async signer(): Promise<SmartAccountSigner> {\n return await Promise.resolve(this.owner);\n }\n\n async getOwner(): Promise<Hex> {\n return this.owner.getAddress();\n }\n\n async getEnableData(): Promise<Hex> {\n return this.getOwner();\n }\n\n encodeEnable(newOwner: Hex): Hex {\n return encodeFunctionData({\n abi: ECDSAValidatorAbi,\n functionName: \"enable\",\n args: [newOwner],\n });\n }\n\n encodeDisable(disableData: Hex = \"0x\"): Hex {\n return encodeFunctionData({\n abi: ECDSAValidatorAbi,\n functionName: \"disable\",\n args: [disableData],\n });\n }\n\n async getDummyUserOpSignature(): Promise<Hex> {\n return DUMMY_ECDSA_SIG;\n }\n\n async isPluginEnabled(\n kernelAccountAddress: Address,\n selector: Hex\n ): Promise<boolean> {\n if (!this.publicClient) {\n throw new Error(\"Validator uninitialized: PublicClient missing\");\n }\n const execDetail = await this.publicClient.readContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n functionName: \"getExecution\",\n args: [selector],\n });\n const enableData = await this.publicClient.readContract({\n abi: ECDSAValidatorAbi,\n address: this.validatorAddress,\n functionName: \"ecdsaValidatorStorage\",\n args: [kernelAccountAddress],\n });\n return (\n execDetail.validator.toLowerCase() ===\n this.validatorAddress.toLowerCase() &&\n enableData.toLowerCase() === (await this.getEnableData()).toLowerCase()\n );\n }\n\n async signMessage(message: string | Uint8Array): Promise<Hex> {\n return await this.owner.signMessage(message);\n }\n\n async signTypedData(params: SignTypedDataParams): Promise<Hex> {\n return fixSignedData(await this.owner.signTypedData(params));\n }\n\n async signUserOp(userOp: UserOperationRequest): Promise<Hex> {\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n const hash = getUserOperationHash(\n {\n ...userOp,\n signature: \"0x\",\n },\n this.entryPointAddress,\n BigInt(this.chain.id)\n );\n const formattedMessage = typeof hash === \"string\" ? toBytes(hash) : hash;\n return await this.owner.signMessage(formattedMessage);\n }\n}\n"]}
1
+ {"version":3,"file":"ecdsa-validator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/ecdsa-validator.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getUserOperationHash,\n type Address,\n type Hex,\n type SmartAccountSigner,\n type UserOperationRequest,\n type SignTypedDataParams,\n} from \"@alchemy/aa-core\";\nimport { KernelBaseValidator, type KernelBaseValidatorParams } from \"./base.js\";\nimport { encodeFunctionData, toBytes } from \"viem\";\nimport { ECDSAValidatorAbi } from \"../abis/ESCDAValidatorAbi.js\";\nimport { getChainId } from \"../api/index.js\";\nimport { DUMMY_ECDSA_SIG } from \"../constants.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { fixSignedData, getChain } from \"../utils.js\";\n\nexport interface ECDSAValidatorParams extends KernelBaseValidatorParams {\n owner: SmartAccountSigner;\n}\n\nexport class ECDSAValidator extends KernelBaseValidator {\n protected owner: SmartAccountSigner;\n\n constructor(params: ECDSAValidatorParams) {\n super(params);\n this.owner = params.owner;\n }\n\n public static async init(\n params: ECDSAValidatorParams\n ): Promise<ECDSAValidator> {\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 ECDSAValidator({ ...params, chain });\n return instance;\n }\n\n async signer(): Promise<SmartAccountSigner> {\n return await Promise.resolve(this.owner);\n }\n\n async getOwner(): Promise<Hex> {\n return this.owner.getAddress();\n }\n\n async getEnableData(): Promise<Hex> {\n return this.getOwner();\n }\n\n encodeEnable(newOwner: Hex): Hex {\n return encodeFunctionData({\n abi: ECDSAValidatorAbi,\n functionName: \"enable\",\n args: [newOwner],\n });\n }\n\n encodeDisable(disableData: Hex = \"0x\"): Hex {\n return encodeFunctionData({\n abi: ECDSAValidatorAbi,\n functionName: \"disable\",\n args: [disableData],\n });\n }\n\n async getDummyUserOpSignature(): Promise<Hex> {\n return DUMMY_ECDSA_SIG;\n }\n\n async isPluginEnabled(\n kernelAccountAddress: Address,\n selector: Hex\n ): Promise<boolean> {\n if (!this.publicClient) {\n throw new Error(\"Validator uninitialized: PublicClient missing\");\n }\n const execDetail = await this.publicClient.readContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n functionName: \"getExecution\",\n args: [selector],\n });\n const enableData = await this.publicClient.readContract({\n abi: ECDSAValidatorAbi,\n address: this.validatorAddress,\n functionName: \"ecdsaValidatorStorage\",\n args: [kernelAccountAddress],\n });\n return (\n execDetail.validator.toLowerCase() ===\n this.validatorAddress.toLowerCase() &&\n enableData.toLowerCase() === (await this.getEnableData()).toLowerCase()\n );\n }\n\n async signMessage(message: string | Uint8Array): Promise<Hex> {\n return await this.owner.signMessage(message);\n }\n\n async signTypedData(params: SignTypedDataParams): Promise<Hex> {\n return fixSignedData(await this.owner.signTypedData(params));\n }\n\n async signUserOp(userOp: UserOperationRequest): Promise<Hex> {\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n const hash = getUserOperationHash(\n {\n ...userOp,\n signature: \"0x\",\n },\n this.entryPointAddress,\n BigInt(this.chain.id)\n );\n const formattedMessage = typeof hash === \"string\" ? toBytes(hash) : hash;\n return await this.owner.signMessage(formattedMessage);\n }\n}\n"]}
@@ -1,11 +1,11 @@
1
- import { getUserOperationHash, getChain, } from "@alchemy/aa-core";
1
+ import { getUserOperationHash, } from "@alchemy/aa-core";
2
2
  import { KernelBaseValidator, ValidatorMode, } from "./base.js";
3
3
  import { encodeFunctionData, toBytes, concat, pad, toHex } from "viem";
4
4
  import { ERC165SessionKeyValidatorAbi } from "../abis/ERC165SessionKeyValidatorAbi.js";
5
5
  import { DUMMY_ECDSA_SIG } from "../constants.js";
6
6
  import { KernelAccountAbi } from "../abis/KernelAccountAbi.js";
7
7
  import { getChainId } from "../api/index.js";
8
- import { fixSignedData } from "../utils.js";
8
+ import { fixSignedData, getChain } from "../utils.js";
9
9
  export class ERC165SessionKeyValidator extends KernelBaseValidator {
10
10
  constructor(params) {
11
11
  super(params);
@@ -1 +1 @@
1
- {"version":3,"file":"erc165-session-key-validator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/erc165-session-key-validator.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getUserOperationHash,\n type Address,\n type Hex,\n type SmartAccountSigner,\n type UserOperationRequest,\n getChain,\n type SignTypedDataParams,\n} from \"@alchemy/aa-core\";\nimport {\n KernelBaseValidator,\n ValidatorMode,\n type KernelBaseValidatorParams,\n} from \"./base.js\";\nimport { encodeFunctionData, toBytes, concat, pad, toHex } from \"viem\";\nimport { ERC165SessionKeyValidatorAbi } from \"../abis/ERC165SessionKeyValidatorAbi.js\";\nimport { DUMMY_ECDSA_SIG } from \"../constants.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { getChainId } from \"../api/index.js\";\nimport { fixSignedData } from \"../utils.js\";\n\nexport interface ERC165SessionKeyValidatorParams\n extends KernelBaseValidatorParams {\n sessionKey: SmartAccountSigner;\n sessionKeyData: SessionKeyData;\n}\n\ninterface SessionKeyData {\n selector: Hex;\n erc165InterfaceId: Hex;\n validUntil: number;\n validAfter: number;\n addressOffset: number;\n}\n\nexport class ERC165SessionKeyValidator extends KernelBaseValidator {\n protected sessionKey: SmartAccountSigner;\n sessionKeyData: SessionKeyData;\n\n constructor(params: ERC165SessionKeyValidatorParams) {\n super(params);\n this.sessionKey = params.sessionKey;\n this.sessionKeyData = params.sessionKeyData;\n this.mode = params.mode ?? ValidatorMode.plugin;\n }\n\n public static async init(\n params: ERC165SessionKeyValidatorParams\n ): Promise<ERC165SessionKeyValidator> {\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 ERC165SessionKeyValidator({ ...params, chain });\n return instance;\n }\n\n async signer(): Promise<SmartAccountSigner> {\n return await Promise.resolve(this.sessionKey);\n }\n\n async getEnableData(): Promise<Hex> {\n return concat([\n await this.sessionKey.getAddress(),\n pad(this.sessionKeyData.erc165InterfaceId, { size: 4 }),\n pad(this.sessionKeyData.selector, { size: 4 }),\n pad(toHex(this.sessionKeyData.validUntil), { size: 6 }),\n pad(toHex(this.sessionKeyData.validAfter), { size: 6 }),\n pad(toHex(this.sessionKeyData.addressOffset), { size: 4 }),\n ]);\n }\n\n async isPluginEnabled(\n kernelAccountAddress: Address,\n selector: Hex\n ): Promise<boolean> {\n if (!this.publicClient) {\n throw new Error(\"Validator uninitialized: PublicClient missing\");\n }\n const execDetail = await this.publicClient.readContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n functionName: \"getExecution\",\n args: [selector],\n });\n const enableData = await this.publicClient.readContract({\n abi: ERC165SessionKeyValidatorAbi,\n address: this.validatorAddress,\n functionName: \"sessionKeys\",\n args: [await this.sessionKey.getAddress(), kernelAccountAddress],\n });\n const enableDataHex = concat([\n await this.sessionKey.getAddress(),\n pad(enableData[2], { size: 4 }),\n pad(enableData[1], { size: 4 }),\n pad(toHex(enableData[3]), { size: 6 }),\n pad(toHex(enableData[4]), { size: 6 }),\n pad(toHex(enableData[5]), { size: 4 }),\n ]);\n return (\n execDetail.validator.toLowerCase() ===\n this.validatorAddress.toLowerCase() &&\n enableData[0] &&\n enableDataHex.toLowerCase() === (await this.getEnableData()).toLowerCase()\n );\n }\n\n async getDummyUserOpSignature(): Promise<Hex> {\n return DUMMY_ECDSA_SIG;\n }\n\n encodeEnable(sessionKeyEnableData: Hex): Hex {\n return encodeFunctionData({\n abi: ERC165SessionKeyValidatorAbi,\n functionName: \"enable\",\n args: [sessionKeyEnableData],\n });\n }\n\n encodeDisable(sessionKey: Hex): Hex {\n return encodeFunctionData({\n abi: ERC165SessionKeyValidatorAbi,\n functionName: \"disable\",\n args: [sessionKey],\n });\n }\n\n async signMessage(message: string | Uint8Array): Promise<Hex> {\n return await this.sessionKey.signMessage(message);\n }\n\n async signTypedData(params: SignTypedDataParams): Promise<Hex> {\n return fixSignedData(await this.sessionKey.signTypedData(params));\n }\n\n async signUserOp(userOp: UserOperationRequest): Promise<Hex> {\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n const hash = getUserOperationHash(\n {\n ...userOp,\n signature: \"0x\",\n },\n this.entryPointAddress,\n BigInt(this.chain.id)\n );\n const formattedMessage = typeof hash === \"string\" ? toBytes(hash) : hash;\n return await this.sessionKey.signMessage(formattedMessage);\n }\n}\n"]}
1
+ {"version":3,"file":"erc165-session-key-validator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/erc165-session-key-validator.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getUserOperationHash,\n type Address,\n type Hex,\n type SmartAccountSigner,\n type UserOperationRequest,\n type SignTypedDataParams,\n} from \"@alchemy/aa-core\";\nimport {\n KernelBaseValidator,\n ValidatorMode,\n type KernelBaseValidatorParams,\n} from \"./base.js\";\nimport { encodeFunctionData, toBytes, concat, pad, toHex } from \"viem\";\nimport { ERC165SessionKeyValidatorAbi } from \"../abis/ERC165SessionKeyValidatorAbi.js\";\nimport { DUMMY_ECDSA_SIG } from \"../constants.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { getChainId } from \"../api/index.js\";\nimport { fixSignedData, getChain } from \"../utils.js\";\n\nexport interface ERC165SessionKeyValidatorParams\n extends KernelBaseValidatorParams {\n sessionKey: SmartAccountSigner;\n sessionKeyData: SessionKeyData;\n}\n\ninterface SessionKeyData {\n selector: Hex;\n erc165InterfaceId: Hex;\n validUntil: number;\n validAfter: number;\n addressOffset: number;\n}\n\nexport class ERC165SessionKeyValidator extends KernelBaseValidator {\n protected sessionKey: SmartAccountSigner;\n sessionKeyData: SessionKeyData;\n\n constructor(params: ERC165SessionKeyValidatorParams) {\n super(params);\n this.sessionKey = params.sessionKey;\n this.sessionKeyData = params.sessionKeyData;\n this.mode = params.mode ?? ValidatorMode.plugin;\n }\n\n public static async init(\n params: ERC165SessionKeyValidatorParams\n ): Promise<ERC165SessionKeyValidator> {\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 ERC165SessionKeyValidator({ ...params, chain });\n return instance;\n }\n\n async signer(): Promise<SmartAccountSigner> {\n return await Promise.resolve(this.sessionKey);\n }\n\n async getEnableData(): Promise<Hex> {\n return concat([\n await this.sessionKey.getAddress(),\n pad(this.sessionKeyData.erc165InterfaceId, { size: 4 }),\n pad(this.sessionKeyData.selector, { size: 4 }),\n pad(toHex(this.sessionKeyData.validUntil), { size: 6 }),\n pad(toHex(this.sessionKeyData.validAfter), { size: 6 }),\n pad(toHex(this.sessionKeyData.addressOffset), { size: 4 }),\n ]);\n }\n\n async isPluginEnabled(\n kernelAccountAddress: Address,\n selector: Hex\n ): Promise<boolean> {\n if (!this.publicClient) {\n throw new Error(\"Validator uninitialized: PublicClient missing\");\n }\n const execDetail = await this.publicClient.readContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n functionName: \"getExecution\",\n args: [selector],\n });\n const enableData = await this.publicClient.readContract({\n abi: ERC165SessionKeyValidatorAbi,\n address: this.validatorAddress,\n functionName: \"sessionKeys\",\n args: [await this.sessionKey.getAddress(), kernelAccountAddress],\n });\n const enableDataHex = concat([\n await this.sessionKey.getAddress(),\n pad(enableData[2], { size: 4 }),\n pad(enableData[1], { size: 4 }),\n pad(toHex(enableData[3]), { size: 6 }),\n pad(toHex(enableData[4]), { size: 6 }),\n pad(toHex(enableData[5]), { size: 4 }),\n ]);\n return (\n execDetail.validator.toLowerCase() ===\n this.validatorAddress.toLowerCase() &&\n enableData[0] &&\n enableDataHex.toLowerCase() === (await this.getEnableData()).toLowerCase()\n );\n }\n\n async getDummyUserOpSignature(): Promise<Hex> {\n return DUMMY_ECDSA_SIG;\n }\n\n encodeEnable(sessionKeyEnableData: Hex): Hex {\n return encodeFunctionData({\n abi: ERC165SessionKeyValidatorAbi,\n functionName: \"enable\",\n args: [sessionKeyEnableData],\n });\n }\n\n encodeDisable(sessionKey: Hex): Hex {\n return encodeFunctionData({\n abi: ERC165SessionKeyValidatorAbi,\n functionName: \"disable\",\n args: [sessionKey],\n });\n }\n\n async signMessage(message: string | Uint8Array): Promise<Hex> {\n return await this.sessionKey.signMessage(message);\n }\n\n async signTypedData(params: SignTypedDataParams): Promise<Hex> {\n return fixSignedData(await this.sessionKey.signTypedData(params));\n }\n\n async signUserOp(userOp: UserOperationRequest): Promise<Hex> {\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n const hash = getUserOperationHash(\n {\n ...userOp,\n signature: \"0x\",\n },\n this.entryPointAddress,\n BigInt(this.chain.id)\n );\n const formattedMessage = typeof hash === \"string\" ? toBytes(hash) : hash;\n return await this.sessionKey.signMessage(formattedMessage);\n }\n}\n"]}
@@ -1,11 +1,11 @@
1
- import { getChain, getUserOperationHash, } from "@alchemy/aa-core";
1
+ import { getUserOperationHash, } from "@alchemy/aa-core";
2
2
  import { KernelBaseValidator, ValidatorMode, } from "./base.js";
3
3
  import { concat, concatHex, encodeFunctionData, getContract, keccak256, pad, toBytes, toHex, } from "viem";
4
4
  import { KillSwitchValidatorAbi } from "../abis/KillSwitchValidatorAbi.js";
5
5
  import { getChainId } from "../api/index.js";
6
6
  import { DUMMY_ECDSA_SIG } from "../constants.js";
7
7
  import { KernelAccountAbi } from "../abis/KernelAccountAbi.js";
8
- import { fixSignedData } from "../utils.js";
8
+ import { fixSignedData, getChain } from "../utils.js";
9
9
  export class KillSwitchValidator extends KernelBaseValidator {
10
10
  constructor(params) {
11
11
  super(params);
@@ -1 +1 @@
1
- {"version":3,"file":"kill-switch-validator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/kill-switch-validator.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getChain,\n getUserOperationHash,\n type Address,\n type Hex,\n type SmartAccountSigner,\n type UserOperationRequest,\n type SignTypedDataParams,\n} from \"@alchemy/aa-core\";\nimport {\n KernelBaseValidator,\n ValidatorMode,\n type KernelBaseValidatorParams,\n} from \"./base.js\";\nimport {\n concat,\n concatHex,\n encodeFunctionData,\n getContract,\n keccak256,\n pad,\n toBytes,\n toHex,\n} from \"viem\";\nimport { KillSwitchValidatorAbi } from \"../abis/KillSwitchValidatorAbi.js\";\nimport { getChainId } from \"../api/index.js\";\nimport { DUMMY_ECDSA_SIG } from \"../constants.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { fixSignedData } from \"../utils.js\";\n\nexport interface KillSwitchValidatorParams extends KernelBaseValidatorParams {\n guardian: SmartAccountSigner;\n delaySeconds: number;\n}\n\nexport class KillSwitchValidator extends KernelBaseValidator {\n protected guardian: SmartAccountSigner;\n protected delaySeconds: number;\n\n constructor(params: KillSwitchValidatorParams) {\n super(params);\n this.guardian = params.guardian;\n this.delaySeconds = params.delaySeconds;\n this.mode = params.mode ?? ValidatorMode.plugin;\n }\n\n public static async init(\n params: KillSwitchValidatorParams\n ): Promise<KillSwitchValidator> {\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 KillSwitchValidator({ ...params, chain });\n return instance;\n }\n\n async signer(): Promise<SmartAccountSigner> {\n return await Promise.resolve(this.guardian);\n }\n\n async getEnableData(): Promise<Hex> {\n return await (await this.signer()).getAddress();\n }\n\n getPausedUntil(): number {\n return Math.floor(Date.now() / 1000) + this.delaySeconds;\n }\n\n encodeEnable(newGuardian: Hex): Hex {\n return encodeFunctionData({\n abi: KillSwitchValidatorAbi,\n functionName: \"enable\",\n args: [newGuardian],\n });\n }\n\n encodeDisable(disableData: Hex = \"0x\"): Hex {\n return encodeFunctionData({\n abi: KillSwitchValidatorAbi,\n functionName: \"disable\",\n args: [disableData],\n });\n }\n\n async isPluginEnabled(\n kernelAccountAddress: Address,\n selector: Hex\n ): Promise<boolean> {\n if (!this.publicClient) {\n throw new Error(\"Validator uninitialized: PublicClient missing\");\n }\n const kernel = getContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n publicClient: this.publicClient,\n });\n const execDetail = await kernel.read.getExecution([selector]);\n const enableData = await this.publicClient.readContract({\n abi: KillSwitchValidatorAbi,\n address: this.validatorAddress,\n functionName: \"killSwitchValidatorStorage\",\n args: [kernelAccountAddress],\n });\n const pausedUntil = Math.floor(Date.now() / 1000) + this.delaySeconds;\n return (\n execDetail.validator.toLowerCase() ===\n this.validatorAddress.toLowerCase() &&\n enableData[0] === (await this.getEnableData()) &&\n enableData[3] === (await kernel.read.getDisabledMode()) &&\n enableData[2] === pausedUntil &&\n enableData[1].toLowerCase() ===\n (await kernel.read.getDefaultValidator()).toLowerCase()\n );\n }\n\n async getDummyUserOpSignature(): Promise<Hex> {\n if (this.mode === ValidatorMode.sudo) {\n return DUMMY_ECDSA_SIG;\n }\n return concatHex([pad(\"0xffffffffffff\", { size: 6 }), DUMMY_ECDSA_SIG]);\n }\n\n async signMessage(message: string | Uint8Array): Promise<Hex> {\n return await this.guardian.signMessage(message);\n }\n\n async signTypedData(params: SignTypedDataParams): Promise<Hex> {\n return fixSignedData(await this.guardian.signTypedData(params));\n }\n\n async signUserOp(userOp: UserOperationRequest): Promise<Hex> {\n const pausedUntil = this.getPausedUntil();\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n const hash = getUserOperationHash(\n {\n ...userOp,\n signature: \"0x\",\n },\n this.entryPointAddress,\n BigInt(this.chain.id)\n ) as Hex;\n\n if (this.mode === ValidatorMode.sudo) {\n const formattedMessage = typeof hash === \"string\" ? toBytes(hash) : hash;\n return await this.guardian.signMessage(formattedMessage);\n }\n\n const extendedHash = keccak256(\n concat([pad(toHex(pausedUntil), { size: 6 }), hash])\n );\n const signature = concat([\n pad(toHex(pausedUntil), { size: 6 }),\n await this.guardian.signMessage(toBytes(extendedHash)),\n ]);\n return signature;\n }\n}\n"]}
1
+ {"version":3,"file":"kill-switch-validator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/kill-switch-validator.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getUserOperationHash,\n type Address,\n type Hex,\n type SmartAccountSigner,\n type UserOperationRequest,\n type SignTypedDataParams,\n} from \"@alchemy/aa-core\";\nimport {\n KernelBaseValidator,\n ValidatorMode,\n type KernelBaseValidatorParams,\n} from \"./base.js\";\nimport {\n concat,\n concatHex,\n encodeFunctionData,\n getContract,\n keccak256,\n pad,\n toBytes,\n toHex,\n} from \"viem\";\nimport { KillSwitchValidatorAbi } from \"../abis/KillSwitchValidatorAbi.js\";\nimport { getChainId } from \"../api/index.js\";\nimport { DUMMY_ECDSA_SIG } from \"../constants.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { fixSignedData, getChain } from \"../utils.js\";\n\nexport interface KillSwitchValidatorParams extends KernelBaseValidatorParams {\n guardian: SmartAccountSigner;\n delaySeconds: number;\n}\n\nexport class KillSwitchValidator extends KernelBaseValidator {\n protected guardian: SmartAccountSigner;\n protected delaySeconds: number;\n\n constructor(params: KillSwitchValidatorParams) {\n super(params);\n this.guardian = params.guardian;\n this.delaySeconds = params.delaySeconds;\n this.mode = params.mode ?? ValidatorMode.plugin;\n }\n\n public static async init(\n params: KillSwitchValidatorParams\n ): Promise<KillSwitchValidator> {\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 KillSwitchValidator({ ...params, chain });\n return instance;\n }\n\n async signer(): Promise<SmartAccountSigner> {\n return await Promise.resolve(this.guardian);\n }\n\n async getEnableData(): Promise<Hex> {\n return await (await this.signer()).getAddress();\n }\n\n getPausedUntil(): number {\n return Math.floor(Date.now() / 1000) + this.delaySeconds;\n }\n\n encodeEnable(newGuardian: Hex): Hex {\n return encodeFunctionData({\n abi: KillSwitchValidatorAbi,\n functionName: \"enable\",\n args: [newGuardian],\n });\n }\n\n encodeDisable(disableData: Hex = \"0x\"): Hex {\n return encodeFunctionData({\n abi: KillSwitchValidatorAbi,\n functionName: \"disable\",\n args: [disableData],\n });\n }\n\n async isPluginEnabled(\n kernelAccountAddress: Address,\n selector: Hex\n ): Promise<boolean> {\n if (!this.publicClient) {\n throw new Error(\"Validator uninitialized: PublicClient missing\");\n }\n const kernel = getContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n publicClient: this.publicClient,\n });\n const execDetail = await kernel.read.getExecution([selector]);\n const enableData = await this.publicClient.readContract({\n abi: KillSwitchValidatorAbi,\n address: this.validatorAddress,\n functionName: \"killSwitchValidatorStorage\",\n args: [kernelAccountAddress],\n });\n const pausedUntil = Math.floor(Date.now() / 1000) + this.delaySeconds;\n return (\n execDetail.validator.toLowerCase() ===\n this.validatorAddress.toLowerCase() &&\n enableData[0] === (await this.getEnableData()) &&\n enableData[3] === (await kernel.read.getDisabledMode()) &&\n enableData[2] === pausedUntil &&\n enableData[1].toLowerCase() ===\n (await kernel.read.getDefaultValidator()).toLowerCase()\n );\n }\n\n async getDummyUserOpSignature(): Promise<Hex> {\n if (this.mode === ValidatorMode.sudo) {\n return DUMMY_ECDSA_SIG;\n }\n return concatHex([pad(\"0xffffffffffff\", { size: 6 }), DUMMY_ECDSA_SIG]);\n }\n\n async signMessage(message: string | Uint8Array): Promise<Hex> {\n return await this.guardian.signMessage(message);\n }\n\n async signTypedData(params: SignTypedDataParams): Promise<Hex> {\n return fixSignedData(await this.guardian.signTypedData(params));\n }\n\n async signUserOp(userOp: UserOperationRequest): Promise<Hex> {\n const pausedUntil = this.getPausedUntil();\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n const hash = getUserOperationHash(\n {\n ...userOp,\n signature: \"0x\",\n },\n this.entryPointAddress,\n BigInt(this.chain.id)\n ) as Hex;\n\n if (this.mode === ValidatorMode.sudo) {\n const formattedMessage = typeof hash === \"string\" ? toBytes(hash) : hash;\n return await this.guardian.signMessage(formattedMessage);\n }\n\n const extendedHash = keccak256(\n concat([pad(toHex(pausedUntil), { size: 6 }), hash])\n );\n const signature = concat([\n pad(toHex(pausedUntil), { size: 6 }),\n await this.guardian.signMessage(toBytes(extendedHash)),\n ]);\n return signature;\n }\n}\n"]}
@@ -1,11 +1,11 @@
1
- import { getChain, } from "@alchemy/aa-core";
1
+ import {} from "@alchemy/aa-core";
2
2
  import { KernelBaseValidator, ValidatorMode, } from "./base.js";
3
3
  import { concatHex, encodeAbiParameters, encodeFunctionData, getContract, parseAbiParameters, createWalletClient, http, custom, publicActions, getFunctionSelector, } from "viem";
4
4
  import { WeightedValidatorAbi } from "../abis/WeightedValidatorAbi.js";
5
5
  import { getChainId, getRecoveryData } from "../api/index.js";
6
6
  import { CHAIN_ID_TO_NODE, DUMMY_ECDSA_SIG, RECOVERY_ACTION, RECOVERY_VALIDATOR_ADDRESS, } from "../constants.js";
7
7
  import { KernelAccountAbi } from "../abis/KernelAccountAbi.js";
8
- import { fixSignedData } from "../utils.js";
8
+ import { fixSignedData, getChain } from "../utils.js";
9
9
  import { polygonMumbai } from "viem/chains";
10
10
  import { RecoveryActionAbi } from "../abis/RecoveryActionAbi.js";
11
11
  export function isLocalAccount(account) {
@@ -1 +1 @@
1
- {"version":3,"file":"recovery-validator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/recovery-validator.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n getChain,\n type Address,\n type Hex,\n type SmartAccountSigner,\n type UserOperationRequest,\n type SignTypedDataParams,\n} from \"@alchemy/aa-core\";\nimport {\n KernelBaseValidator,\n ValidatorMode,\n type KernelBaseValidatorParams,\n} from \"./base.js\";\nimport {\n concatHex,\n encodeAbiParameters,\n encodeFunctionData,\n getContract,\n parseAbiParameters,\n type LocalAccount,\n createWalletClient,\n type WalletClient,\n http,\n custom,\n type Transport,\n type Chain,\n type Account,\n publicActions,\n getFunctionSelector,\n type PublicClient,\n} from \"viem\";\nimport { WeightedValidatorAbi } from \"../abis/WeightedValidatorAbi.js\";\nimport { getChainId, getRecoveryData } from \"../api/index.js\";\nimport {\n CHAIN_ID_TO_NODE,\n DUMMY_ECDSA_SIG,\n RECOVERY_ACTION,\n RECOVERY_VALIDATOR_ADDRESS,\n} from \"../constants.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { fixSignedData } from \"../utils.js\";\nimport type { EthereumProvider } from \"./types.js\";\nimport { polygonMumbai } from \"viem/chains\";\nimport { RecoveryActionAbi } from \"../abis/RecoveryActionAbi.js\";\n\ninterface WeightedGuardians {\n [guardian: Address]: number;\n}\nexport interface RecoveryValidatorParams extends KernelBaseValidatorParams {\n guardians?: WeightedGuardians;\n threshold?: number;\n delaySeconds?: number;\n accountSigner?: SmartAccountSigner;\n localAccountOrProvider?: LocalAccount<string> | EthereumProvider;\n walletClient?: WalletClient<Transport, Chain>;\n signatures?: Hex;\n recoveryId?: string;\n}\n\nexport type RecoveryConfig = Required<\n Pick<RecoveryValidatorParams, \"guardians\" | \"threshold\" | \"delaySeconds\">\n>;\n\nexport function isLocalAccount(account: any): account is LocalAccount<string> {\n return account && account.signTransaction !== undefined;\n}\n\nexport function isEthereumProvider(\n provider: any\n): provider is EthereumProvider {\n return provider && provider.request !== undefined;\n}\n\ntype WalletClientAccountType<T> = T extends LocalAccount<string>\n ? Account\n : T extends EthereumProvider\n ? undefined\n : never;\n\nexport const recoverySelector = getFunctionSelector(\n \"doRecovery(address, bytes)\"\n);\n\nexport class RecoveryValidator extends KernelBaseValidator {\n protected guardians?: WeightedGuardians;\n protected threshold?: number;\n protected delaySeconds: number;\n protected accountSigner?: SmartAccountSigner;\n protected localAccountOrProvider?: LocalAccount<string> | EthereumProvider;\n protected signatures?: Hex;\n protected recoveryId?: string;\n walletClient?: WalletClient<\n Transport,\n Chain,\n WalletClientAccountType<typeof this.localAccountOrProvider>\n >;\n\n constructor(params: RecoveryValidatorParams) {\n super(params);\n this.guardians = params.guardians;\n this.threshold = params.threshold;\n this.delaySeconds = params.delaySeconds ?? 0;\n this.accountSigner = params.accountSigner;\n this.mode = params.mode ?? ValidatorMode.plugin;\n this.localAccountOrProvider = params.localAccountOrProvider;\n this.signatures = params.signatures;\n this.validAfter = params.validAfter ?? 0;\n this.validUntil = params.validUntil ?? 0;\n this.executor = params.executor ?? RECOVERY_ACTION;\n this.selector = params.selector ?? recoverySelector;\n this.recoveryId = params.recoveryId;\n if (isLocalAccount(params.localAccountOrProvider)) {\n this.walletClient = createWalletClient({\n account: params.localAccountOrProvider,\n chain: this.chain ?? polygonMumbai,\n transport: http(CHAIN_ID_TO_NODE[this.chain?.id ?? polygonMumbai.id]),\n }).extend(publicActions);\n } else if (isEthereumProvider(params.localAccountOrProvider)) {\n this.walletClient = createWalletClient({\n chain: this.chain ?? polygonMumbai,\n transport: custom(params.localAccountOrProvider),\n }).extend(publicActions);\n } else if (params.walletClient) {\n this.walletClient = params.walletClient.extend(publicActions);\n } else if (params.localAccountOrProvider) {\n throw Error(\"Incorrect localAccountOrProvider type\");\n }\n }\n\n public static async init(\n params: RecoveryValidatorParams\n ): Promise<RecoveryValidator> {\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 RecoveryValidator({ ...params, chain });\n return instance;\n }\n\n getNonceKey(): bigint {\n return BigInt(this.validatorAddress);\n }\n\n setRecoverySignatures(signatures: Hex) {\n this.signatures = signatures;\n }\n\n async getRecoverySignatures(): Promise<Hex | undefined> {\n if (this.recoveryId) {\n const { signatures } = await getRecoveryData(this.recoveryId);\n this.setRecoverySignatures(signatures);\n }\n return this.signatures;\n }\n\n getRecoveryConfig(): RecoveryConfig {\n if (\n this.guardians === undefined ||\n !this.threshold ||\n Object.values(this.guardians).some((v) => v === 0) ||\n Object.values(this.guardians).reduce((a, c) => a + c, 0) < this.threshold\n ) {\n throw Error(\"Recovery config uninitialised or unexpected\");\n }\n return {\n guardians: this.guardians,\n threshold: this.threshold,\n delaySeconds: this.delaySeconds,\n };\n }\n\n async signer(): Promise<SmartAccountSigner> {\n if (!this.accountSigner) {\n throw Error(\"AccountSigner not set\");\n }\n return await Promise.resolve(this.accountSigner);\n }\n\n async getEnableData(): Promise<Hex> {\n if (\n this.guardians === undefined ||\n !this.threshold ||\n Object.values(this.guardians).some((v) => v === 0) ||\n Object.values(this.guardians).reduce((a, c) => a + c, 0) < this.threshold\n ) {\n throw Error(\"Recovery config uninitialised or unexpected\");\n }\n return encodeAbiParameters(\n parseAbiParameters(\n \"address[] guardians, uint24[] weights, uint24 threshold, uint48 delay\"\n ),\n [\n Object.keys(this.guardians) as Address[],\n Object.values(this.guardians),\n this.threshold,\n this.delaySeconds,\n ]\n );\n }\n\n encodeEnable(recoveryData: Hex): Hex {\n return encodeFunctionData({\n abi: WeightedValidatorAbi,\n functionName: \"enable\",\n args: [recoveryData],\n });\n }\n\n encodeDisable(disableData: Hex = \"0x\"): Hex {\n return encodeFunctionData({\n abi: WeightedValidatorAbi,\n functionName: \"disable\",\n args: [disableData],\n });\n }\n\n encodeApprove(callDataAndNonceHash: Hex, kernelAccountAddress: Address): Hex {\n return encodeFunctionData({\n abi: WeightedValidatorAbi,\n functionName: \"approve\",\n args: [callDataAndNonceHash, kernelAccountAddress],\n });\n }\n\n encodeApproveWithSig(\n callDataAndNonceHash: Hex,\n kernelAccountAddress: Address,\n sigs: Hex\n ): Hex {\n return encodeFunctionData({\n abi: WeightedValidatorAbi,\n functionName: \"approveWithSig\",\n args: [callDataAndNonceHash, kernelAccountAddress, sigs],\n });\n }\n\n encodeVeto(callDataAndNonceHash: Hex): Hex {\n return encodeFunctionData({\n abi: WeightedValidatorAbi,\n functionName: \"veto\",\n args: [callDataAndNonceHash],\n });\n }\n\n encodeRecoveryAction(enableData: Hex, defaultValidatorAddress: Address): Hex {\n return encodeFunctionData({\n abi: RecoveryActionAbi,\n functionName: \"doRecovery\",\n args: [defaultValidatorAddress, enableData],\n });\n }\n\n static async fetchRecoveryConfigFromContract(\n kernelAccountAddress: Address,\n publicClient: PublicClient<Transport, Chain>\n ): Promise<RecoveryConfig> {\n try {\n const [, threshold, delaySeconds, firstGuardian] =\n await publicClient.readContract({\n abi: WeightedValidatorAbi,\n address: RECOVERY_VALIDATOR_ADDRESS,\n functionName: \"weightedStorage\",\n args: [kernelAccountAddress],\n });\n\n const guardians: WeightedGuardians = {};\n\n let nextGuardian = firstGuardian;\n while (\n nextGuardian.toLowerCase() !== kernelAccountAddress.toLowerCase()\n ) {\n const guardianStorage = await publicClient.readContract({\n abi: WeightedValidatorAbi,\n address: RECOVERY_VALIDATOR_ADDRESS,\n functionName: \"guardian\",\n args: [nextGuardian, kernelAccountAddress],\n });\n guardians[nextGuardian] = guardianStorage[0];\n nextGuardian = guardianStorage[1];\n }\n return {\n threshold,\n delaySeconds,\n guardians,\n };\n } catch (error) {\n throw Error(\"Failed to fetch config from contract\");\n }\n }\n\n async isPluginEnabled(\n kernelAccountAddress: Address,\n selector: Hex\n ): Promise<boolean> {\n if (\n this.guardians === undefined ||\n !this.threshold ||\n Object.values(this.guardians).some((v) => v === 0) ||\n Object.values(this.guardians).reduce((a, c) => a + c, 0) < this.threshold\n ) {\n throw Error(\"Recovery config uninitialised or unexpected\");\n }\n if (!this.publicClient) {\n throw new Error(\"Validator uninitialized: PublicClient missing\");\n }\n try {\n const kernel = getContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n publicClient: this.publicClient,\n });\n const execDetail = await kernel.read.getExecution([selector]);\n const enableData = await this.publicClient.readContract({\n abi: WeightedValidatorAbi,\n address: this.validatorAddress,\n functionName: \"weightedStorage\",\n args: [kernelAccountAddress],\n });\n\n return (\n execDetail.validator.toLowerCase() ===\n this.validatorAddress.toLowerCase() &&\n enableData[0] ===\n Object.values(this.guardians).reduce((a, c) => a + c, 0) &&\n enableData[1] === this.threshold &&\n enableData[2] === this.delaySeconds &&\n this.isGuardiansEnabled(kernelAccountAddress)\n );\n } catch (error) {\n return false;\n }\n }\n\n async isGuardiansEnabled(kernelAccountAddress: Address): Promise<boolean> {\n if (\n this.guardians === undefined ||\n !this.threshold ||\n Object.values(this.guardians).some((v) => v === 0) ||\n Object.values(this.guardians).reduce((a, c) => a + c, 0) < this.threshold\n ) {\n throw Error(\"Recovery config uninitialised or unexpected\");\n }\n const weightedValidator = getContract({\n abi: WeightedValidatorAbi,\n address: this.validatorAddress,\n publicClient: this.publicClient,\n });\n for (const [addr, weight] of Object.entries(this.guardians)) {\n const result = await weightedValidator.read.guardian([\n addr as Address,\n kernelAccountAddress,\n ]);\n if (result[0] !== weight) {\n return false;\n }\n }\n return true;\n }\n\n async getDummyUserOpSignature(): Promise<Hex> {\n let dummySignature: Hex = \"0x\";\n if (this.signatures) {\n const totalSigs = this.signatures.substring(2).length / 130;\n for (let i = 0; i < totalSigs; i++) {\n dummySignature = concatHex([dummySignature, DUMMY_ECDSA_SIG]);\n }\n // Hack - Fix this to not send original signatures\n return this.signatures;\n }\n return DUMMY_ECDSA_SIG;\n }\n\n async signMessage(message: string | Uint8Array): Promise<Hex> {\n if (!this.accountSigner) {\n throw Error(\"AccountSigner not set\");\n }\n return await this.accountSigner.signMessage(message);\n }\n\n async signTypedData(params: SignTypedDataParams): Promise<Hex> {\n if (!this.accountSigner) {\n throw Error(\"AccountSigner not set\");\n }\n return fixSignedData(await this.accountSigner.signTypedData(params));\n }\n\n async signRecoveryHash(recoveryHash: Hex): Promise<Hex> {\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n const signer = await this.signer();\n return await signer.signTypedData({\n domain: {\n name: \"WeightedECDSAValidator\",\n version: \"1\",\n chainId: this.chain.id,\n verifyingContract: this.validatorAddress,\n },\n types: {\n Approve: [{ name: \"callDataAndNonceHash\", type: \"bytes32\" }],\n },\n message: {\n callDataAndNonceHash: recoveryHash,\n },\n primaryType: \"Approve\",\n });\n }\n\n async signUserOp(_userOp: UserOperationRequest): Promise<Hex> {\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n return this.signatures ?? DUMMY_ECDSA_SIG;\n }\n}\n"]}
1
+ {"version":3,"file":"recovery-validator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/recovery-validator.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type Address,\n type Hex,\n type SmartAccountSigner,\n type UserOperationRequest,\n type SignTypedDataParams,\n} from \"@alchemy/aa-core\";\nimport {\n KernelBaseValidator,\n ValidatorMode,\n type KernelBaseValidatorParams,\n} from \"./base.js\";\nimport {\n concatHex,\n encodeAbiParameters,\n encodeFunctionData,\n getContract,\n parseAbiParameters,\n type LocalAccount,\n createWalletClient,\n type WalletClient,\n http,\n custom,\n type Transport,\n type Chain,\n type Account,\n publicActions,\n getFunctionSelector,\n type PublicClient,\n} from \"viem\";\nimport { WeightedValidatorAbi } from \"../abis/WeightedValidatorAbi.js\";\nimport { getChainId, getRecoveryData } from \"../api/index.js\";\nimport {\n CHAIN_ID_TO_NODE,\n DUMMY_ECDSA_SIG,\n RECOVERY_ACTION,\n RECOVERY_VALIDATOR_ADDRESS,\n} from \"../constants.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { fixSignedData, getChain } from \"../utils.js\";\nimport type { EthereumProvider } from \"./types.js\";\nimport { polygonMumbai } from \"viem/chains\";\nimport { RecoveryActionAbi } from \"../abis/RecoveryActionAbi.js\";\n\ninterface WeightedGuardians {\n [guardian: Address]: number;\n}\nexport interface RecoveryValidatorParams extends KernelBaseValidatorParams {\n guardians?: WeightedGuardians;\n threshold?: number;\n delaySeconds?: number;\n accountSigner?: SmartAccountSigner;\n localAccountOrProvider?: LocalAccount<string> | EthereumProvider;\n walletClient?: WalletClient<Transport, Chain>;\n signatures?: Hex;\n recoveryId?: string;\n}\n\nexport type RecoveryConfig = Required<\n Pick<RecoveryValidatorParams, \"guardians\" | \"threshold\" | \"delaySeconds\">\n>;\n\nexport function isLocalAccount(account: any): account is LocalAccount<string> {\n return account && account.signTransaction !== undefined;\n}\n\nexport function isEthereumProvider(\n provider: any\n): provider is EthereumProvider {\n return provider && provider.request !== undefined;\n}\n\ntype WalletClientAccountType<T> = T extends LocalAccount<string>\n ? Account\n : T extends EthereumProvider\n ? undefined\n : never;\n\nexport const recoverySelector = getFunctionSelector(\n \"doRecovery(address, bytes)\"\n);\n\nexport class RecoveryValidator extends KernelBaseValidator {\n protected guardians?: WeightedGuardians;\n protected threshold?: number;\n protected delaySeconds: number;\n protected accountSigner?: SmartAccountSigner;\n protected localAccountOrProvider?: LocalAccount<string> | EthereumProvider;\n protected signatures?: Hex;\n protected recoveryId?: string;\n walletClient?: WalletClient<\n Transport,\n Chain,\n WalletClientAccountType<typeof this.localAccountOrProvider>\n >;\n\n constructor(params: RecoveryValidatorParams) {\n super(params);\n this.guardians = params.guardians;\n this.threshold = params.threshold;\n this.delaySeconds = params.delaySeconds ?? 0;\n this.accountSigner = params.accountSigner;\n this.mode = params.mode ?? ValidatorMode.plugin;\n this.localAccountOrProvider = params.localAccountOrProvider;\n this.signatures = params.signatures;\n this.validAfter = params.validAfter ?? 0;\n this.validUntil = params.validUntil ?? 0;\n this.executor = params.executor ?? RECOVERY_ACTION;\n this.selector = params.selector ?? recoverySelector;\n this.recoveryId = params.recoveryId;\n if (isLocalAccount(params.localAccountOrProvider)) {\n this.walletClient = createWalletClient({\n account: params.localAccountOrProvider,\n chain: this.chain ?? polygonMumbai,\n transport: http(CHAIN_ID_TO_NODE[this.chain?.id ?? polygonMumbai.id]),\n }).extend(publicActions);\n } else if (isEthereumProvider(params.localAccountOrProvider)) {\n this.walletClient = createWalletClient({\n chain: this.chain ?? polygonMumbai,\n transport: custom(params.localAccountOrProvider),\n }).extend(publicActions);\n } else if (params.walletClient) {\n this.walletClient = params.walletClient.extend(publicActions);\n } else if (params.localAccountOrProvider) {\n throw Error(\"Incorrect localAccountOrProvider type\");\n }\n }\n\n public static async init(\n params: RecoveryValidatorParams\n ): Promise<RecoveryValidator> {\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 RecoveryValidator({ ...params, chain });\n return instance;\n }\n\n getNonceKey(): bigint {\n return BigInt(this.validatorAddress);\n }\n\n setRecoverySignatures(signatures: Hex) {\n this.signatures = signatures;\n }\n\n async getRecoverySignatures(): Promise<Hex | undefined> {\n if (this.recoveryId) {\n const { signatures } = await getRecoveryData(this.recoveryId);\n this.setRecoverySignatures(signatures);\n }\n return this.signatures;\n }\n\n getRecoveryConfig(): RecoveryConfig {\n if (\n this.guardians === undefined ||\n !this.threshold ||\n Object.values(this.guardians).some((v) => v === 0) ||\n Object.values(this.guardians).reduce((a, c) => a + c, 0) < this.threshold\n ) {\n throw Error(\"Recovery config uninitialised or unexpected\");\n }\n return {\n guardians: this.guardians,\n threshold: this.threshold,\n delaySeconds: this.delaySeconds,\n };\n }\n\n async signer(): Promise<SmartAccountSigner> {\n if (!this.accountSigner) {\n throw Error(\"AccountSigner not set\");\n }\n return await Promise.resolve(this.accountSigner);\n }\n\n async getEnableData(): Promise<Hex> {\n if (\n this.guardians === undefined ||\n !this.threshold ||\n Object.values(this.guardians).some((v) => v === 0) ||\n Object.values(this.guardians).reduce((a, c) => a + c, 0) < this.threshold\n ) {\n throw Error(\"Recovery config uninitialised or unexpected\");\n }\n return encodeAbiParameters(\n parseAbiParameters(\n \"address[] guardians, uint24[] weights, uint24 threshold, uint48 delay\"\n ),\n [\n Object.keys(this.guardians) as Address[],\n Object.values(this.guardians),\n this.threshold,\n this.delaySeconds,\n ]\n );\n }\n\n encodeEnable(recoveryData: Hex): Hex {\n return encodeFunctionData({\n abi: WeightedValidatorAbi,\n functionName: \"enable\",\n args: [recoveryData],\n });\n }\n\n encodeDisable(disableData: Hex = \"0x\"): Hex {\n return encodeFunctionData({\n abi: WeightedValidatorAbi,\n functionName: \"disable\",\n args: [disableData],\n });\n }\n\n encodeApprove(callDataAndNonceHash: Hex, kernelAccountAddress: Address): Hex {\n return encodeFunctionData({\n abi: WeightedValidatorAbi,\n functionName: \"approve\",\n args: [callDataAndNonceHash, kernelAccountAddress],\n });\n }\n\n encodeApproveWithSig(\n callDataAndNonceHash: Hex,\n kernelAccountAddress: Address,\n sigs: Hex\n ): Hex {\n return encodeFunctionData({\n abi: WeightedValidatorAbi,\n functionName: \"approveWithSig\",\n args: [callDataAndNonceHash, kernelAccountAddress, sigs],\n });\n }\n\n encodeVeto(callDataAndNonceHash: Hex): Hex {\n return encodeFunctionData({\n abi: WeightedValidatorAbi,\n functionName: \"veto\",\n args: [callDataAndNonceHash],\n });\n }\n\n encodeRecoveryAction(enableData: Hex, defaultValidatorAddress: Address): Hex {\n return encodeFunctionData({\n abi: RecoveryActionAbi,\n functionName: \"doRecovery\",\n args: [defaultValidatorAddress, enableData],\n });\n }\n\n static async fetchRecoveryConfigFromContract(\n kernelAccountAddress: Address,\n publicClient: PublicClient<Transport, Chain>\n ): Promise<RecoveryConfig> {\n try {\n const [, threshold, delaySeconds, firstGuardian] =\n await publicClient.readContract({\n abi: WeightedValidatorAbi,\n address: RECOVERY_VALIDATOR_ADDRESS,\n functionName: \"weightedStorage\",\n args: [kernelAccountAddress],\n });\n\n const guardians: WeightedGuardians = {};\n\n let nextGuardian = firstGuardian;\n while (\n nextGuardian.toLowerCase() !== kernelAccountAddress.toLowerCase()\n ) {\n const guardianStorage = await publicClient.readContract({\n abi: WeightedValidatorAbi,\n address: RECOVERY_VALIDATOR_ADDRESS,\n functionName: \"guardian\",\n args: [nextGuardian, kernelAccountAddress],\n });\n guardians[nextGuardian] = guardianStorage[0];\n nextGuardian = guardianStorage[1];\n }\n return {\n threshold,\n delaySeconds,\n guardians,\n };\n } catch (error) {\n throw Error(\"Failed to fetch config from contract\");\n }\n }\n\n async isPluginEnabled(\n kernelAccountAddress: Address,\n selector: Hex\n ): Promise<boolean> {\n if (\n this.guardians === undefined ||\n !this.threshold ||\n Object.values(this.guardians).some((v) => v === 0) ||\n Object.values(this.guardians).reduce((a, c) => a + c, 0) < this.threshold\n ) {\n throw Error(\"Recovery config uninitialised or unexpected\");\n }\n if (!this.publicClient) {\n throw new Error(\"Validator uninitialized: PublicClient missing\");\n }\n try {\n const kernel = getContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n publicClient: this.publicClient,\n });\n const execDetail = await kernel.read.getExecution([selector]);\n const enableData = await this.publicClient.readContract({\n abi: WeightedValidatorAbi,\n address: this.validatorAddress,\n functionName: \"weightedStorage\",\n args: [kernelAccountAddress],\n });\n\n return (\n execDetail.validator.toLowerCase() ===\n this.validatorAddress.toLowerCase() &&\n enableData[0] ===\n Object.values(this.guardians).reduce((a, c) => a + c, 0) &&\n enableData[1] === this.threshold &&\n enableData[2] === this.delaySeconds &&\n this.isGuardiansEnabled(kernelAccountAddress)\n );\n } catch (error) {\n return false;\n }\n }\n\n async isGuardiansEnabled(kernelAccountAddress: Address): Promise<boolean> {\n if (\n this.guardians === undefined ||\n !this.threshold ||\n Object.values(this.guardians).some((v) => v === 0) ||\n Object.values(this.guardians).reduce((a, c) => a + c, 0) < this.threshold\n ) {\n throw Error(\"Recovery config uninitialised or unexpected\");\n }\n const weightedValidator = getContract({\n abi: WeightedValidatorAbi,\n address: this.validatorAddress,\n publicClient: this.publicClient,\n });\n for (const [addr, weight] of Object.entries(this.guardians)) {\n const result = await weightedValidator.read.guardian([\n addr as Address,\n kernelAccountAddress,\n ]);\n if (result[0] !== weight) {\n return false;\n }\n }\n return true;\n }\n\n async getDummyUserOpSignature(): Promise<Hex> {\n let dummySignature: Hex = \"0x\";\n if (this.signatures) {\n const totalSigs = this.signatures.substring(2).length / 130;\n for (let i = 0; i < totalSigs; i++) {\n dummySignature = concatHex([dummySignature, DUMMY_ECDSA_SIG]);\n }\n // Hack - Fix this to not send original signatures\n return this.signatures;\n }\n return DUMMY_ECDSA_SIG;\n }\n\n async signMessage(message: string | Uint8Array): Promise<Hex> {\n if (!this.accountSigner) {\n throw Error(\"AccountSigner not set\");\n }\n return await this.accountSigner.signMessage(message);\n }\n\n async signTypedData(params: SignTypedDataParams): Promise<Hex> {\n if (!this.accountSigner) {\n throw Error(\"AccountSigner not set\");\n }\n return fixSignedData(await this.accountSigner.signTypedData(params));\n }\n\n async signRecoveryHash(recoveryHash: Hex): Promise<Hex> {\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n const signer = await this.signer();\n return await signer.signTypedData({\n domain: {\n name: \"WeightedECDSAValidator\",\n version: \"1\",\n chainId: this.chain.id,\n verifyingContract: this.validatorAddress,\n },\n types: {\n Approve: [{ name: \"callDataAndNonceHash\", type: \"bytes32\" }],\n },\n message: {\n callDataAndNonceHash: recoveryHash,\n },\n primaryType: \"Approve\",\n });\n }\n\n async signUserOp(_userOp: UserOperationRequest): Promise<Hex> {\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n return this.signatures ?? DUMMY_ECDSA_SIG;\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { getUserOperationHash, getChain, } from "@alchemy/aa-core";
1
+ import { getUserOperationHash, } from "@alchemy/aa-core";
2
2
  import { KernelBaseValidator, ValidatorMode, } from "./base.js";
3
3
  import { encodeFunctionData, toBytes, concat, pad, toHex, encodeAbiParameters, concatHex, zeroAddress, decodeFunctionData, isHex, getFunctionSelector, keccak256, } from "viem";
4
4
  import { formatAbiItem } from "viem/utils";
@@ -7,7 +7,7 @@ import { DUMMY_ECDSA_SIG } from "../constants.js";
7
7
  import { KernelAccountAbi } from "../abis/KernelAccountAbi.js";
8
8
  import { MerkleTree } from "merkletreejs";
9
9
  import { getChainId } from "../api/index.js";
10
- import { fixSignedData } from "../utils.js";
10
+ import { fixSignedData, getChain } from "../utils.js";
11
11
  import {} from "abitype";
12
12
  BigInt.prototype.toJSON = function () {
13
13
  return this.toString();