@zerodev/sdk 4.0.9 → 4.0.11

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 (240) hide show
  1. package/README.md +125 -3
  2. package/dist/cjs/index.d.ts +3 -4
  3. package/dist/cjs/index.js +6 -1
  4. package/dist/cjs/index.js.map +1 -1
  5. package/dist/cjs/kernel-zerodev/abis/ESCDAValidatorAbi.d.ts +2 -2
  6. package/dist/cjs/kernel-zerodev/abis/ESCDAValidatorAbi.js +2 -2
  7. package/dist/cjs/kernel-zerodev/abis/ESCDAValidatorAbi.js.map +1 -1
  8. package/dist/cjs/kernel-zerodev/abis/KernelAccountAbi.d.ts +3 -3
  9. package/dist/cjs/kernel-zerodev/abis/KernelAccountAbi.js +3 -3
  10. package/dist/cjs/kernel-zerodev/abis/KernelAccountAbi.js.map +1 -1
  11. package/dist/cjs/kernel-zerodev/abis/SessionKeyValidatorAbi.d.ts +158 -0
  12. package/dist/cjs/kernel-zerodev/abis/SessionKeyValidatorAbi.js +210 -0
  13. package/dist/cjs/kernel-zerodev/abis/SessionKeyValidatorAbi.js.map +1 -0
  14. package/dist/cjs/kernel-zerodev/abis/Test_ERC20Abi.d.ts +237 -39
  15. package/dist/cjs/kernel-zerodev/abis/Test_ERC20Abi.js.map +1 -1
  16. package/dist/cjs/kernel-zerodev/account.d.ts +13 -4
  17. package/dist/cjs/kernel-zerodev/account.js +50 -38
  18. package/dist/cjs/kernel-zerodev/account.js.map +1 -1
  19. package/dist/cjs/kernel-zerodev/constants.d.ts +3 -1
  20. package/dist/cjs/kernel-zerodev/constants.js +4 -2
  21. package/dist/cjs/kernel-zerodev/constants.js.map +1 -1
  22. package/dist/cjs/kernel-zerodev/ethers-provider/account-signer.d.ts +1 -1
  23. package/dist/cjs/kernel-zerodev/ethers-provider/account-signer.js +1 -1
  24. package/dist/cjs/kernel-zerodev/ethers-provider/account-signer.js.map +1 -1
  25. package/dist/cjs/kernel-zerodev/ethers-provider/ethers-provider.d.ts +4 -3
  26. package/dist/cjs/kernel-zerodev/ethers-provider/ethers-provider.js +12 -1
  27. package/dist/cjs/kernel-zerodev/ethers-provider/ethers-provider.js.map +1 -1
  28. package/dist/cjs/kernel-zerodev/middleware/paymaster.js +2 -1
  29. package/dist/cjs/kernel-zerodev/middleware/paymaster.js.map +1 -1
  30. package/dist/cjs/kernel-zerodev/paymaster/base.d.ts +3 -2
  31. package/dist/cjs/kernel-zerodev/paymaster/base.js +2 -1
  32. package/dist/cjs/kernel-zerodev/paymaster/base.js.map +1 -1
  33. package/dist/cjs/kernel-zerodev/paymaster/token-paymaster.d.ts +1 -1
  34. package/dist/cjs/kernel-zerodev/paymaster/token-paymaster.js +2 -1
  35. package/dist/cjs/kernel-zerodev/paymaster/token-paymaster.js.map +1 -1
  36. package/dist/cjs/kernel-zerodev/paymaster/verifying-paymaster.d.ts +1 -1
  37. package/dist/cjs/kernel-zerodev/paymaster/verifying-paymaster.js +2 -1
  38. package/dist/cjs/kernel-zerodev/paymaster/verifying-paymaster.js.map +1 -1
  39. package/dist/cjs/kernel-zerodev/provider.js +17 -12
  40. package/dist/cjs/kernel-zerodev/provider.js.map +1 -1
  41. package/dist/cjs/kernel-zerodev/signer/empty-account.d.ts +10 -0
  42. package/dist/cjs/kernel-zerodev/signer/empty-account.js +43 -0
  43. package/dist/cjs/kernel-zerodev/signer/empty-account.js.map +1 -0
  44. package/dist/cjs/kernel-zerodev/utils.d.ts +2 -0
  45. package/dist/cjs/kernel-zerodev/utils.js +11 -1
  46. package/dist/cjs/kernel-zerodev/utils.js.map +1 -1
  47. package/dist/cjs/kernel-zerodev/validator/base.d.ts +6 -3
  48. package/dist/cjs/kernel-zerodev/validator/base.js +20 -3
  49. package/dist/cjs/kernel-zerodev/validator/base.js.map +1 -1
  50. package/dist/cjs/kernel-zerodev/validator/erc165-session-key-validator.d.ts +1 -0
  51. package/dist/cjs/kernel-zerodev/validator/erc165-session-key-validator.js +11 -0
  52. package/dist/cjs/kernel-zerodev/validator/erc165-session-key-validator.js.map +1 -1
  53. package/dist/cjs/kernel-zerodev/validator/index.d.ts +2 -1
  54. package/dist/cjs/kernel-zerodev/validator/index.js +4 -1
  55. package/dist/cjs/kernel-zerodev/validator/index.js.map +1 -1
  56. package/dist/cjs/kernel-zerodev/validator/kill-switch-validator.js +1 -0
  57. package/dist/cjs/kernel-zerodev/validator/kill-switch-validator.js.map +1 -1
  58. package/dist/cjs/kernel-zerodev/validator/session-key-validator.d.ts +65 -0
  59. package/dist/cjs/kernel-zerodev/validator/session-key-validator.js +345 -0
  60. package/dist/cjs/kernel-zerodev/validator/session-key-validator.js.map +1 -0
  61. package/dist/cjs/kernel-zerodev/validator/types.d.ts +5 -1
  62. package/dist/cjs/kernel-zerodev/validator/types.js.map +1 -1
  63. package/dist/cjs/kernel-zerodev/validator-provider/base.d.ts +5 -4
  64. package/dist/cjs/kernel-zerodev/validator-provider/base.js +17 -2
  65. package/dist/cjs/kernel-zerodev/validator-provider/base.js.map +1 -1
  66. package/dist/cjs/kernel-zerodev/validator-provider/ecdsa-provider.d.ts +2 -2
  67. package/dist/cjs/kernel-zerodev/validator-provider/ecdsa-provider.js.map +1 -1
  68. package/dist/cjs/kernel-zerodev/validator-provider/erc165-session-key-provider.d.ts +2 -2
  69. package/dist/cjs/kernel-zerodev/validator-provider/erc165-session-key-provider.js.map +1 -1
  70. package/dist/cjs/kernel-zerodev/validator-provider/index.d.ts +2 -1
  71. package/dist/cjs/kernel-zerodev/validator-provider/index.js +4 -1
  72. package/dist/cjs/kernel-zerodev/validator-provider/index.js.map +1 -1
  73. package/dist/cjs/kernel-zerodev/validator-provider/kill-switch-provider.d.ts +2 -2
  74. package/dist/cjs/kernel-zerodev/validator-provider/kill-switch-provider.js.map +1 -1
  75. package/dist/cjs/kernel-zerodev/validator-provider/session-key-provider.d.ts +18 -0
  76. package/dist/cjs/kernel-zerodev/validator-provider/session-key-provider.js +114 -0
  77. package/dist/cjs/kernel-zerodev/validator-provider/session-key-provider.js.map +1 -0
  78. package/dist/cjs/kernel-zerodev/validator-provider/types.d.ts +5 -0
  79. package/dist/cjs/kernel-zerodev/validator-provider/types.js.map +1 -1
  80. package/dist/esm/index.d.ts +3 -4
  81. package/dist/esm/index.js +3 -1
  82. package/dist/esm/index.js.map +1 -1
  83. package/dist/esm/kernel-zerodev/abis/ESCDAValidatorAbi.d.ts +2 -2
  84. package/dist/esm/kernel-zerodev/abis/ESCDAValidatorAbi.js +2 -2
  85. package/dist/esm/kernel-zerodev/abis/ESCDAValidatorAbi.js.map +1 -1
  86. package/dist/esm/kernel-zerodev/abis/KernelAccountAbi.d.ts +3 -3
  87. package/dist/esm/kernel-zerodev/abis/KernelAccountAbi.js +3 -3
  88. package/dist/esm/kernel-zerodev/abis/KernelAccountAbi.js.map +1 -1
  89. package/dist/esm/kernel-zerodev/abis/SessionKeyValidatorAbi.d.ts +158 -0
  90. package/dist/esm/kernel-zerodev/abis/SessionKeyValidatorAbi.js +207 -0
  91. package/dist/esm/kernel-zerodev/abis/SessionKeyValidatorAbi.js.map +1 -0
  92. package/dist/esm/kernel-zerodev/abis/Test_ERC20Abi.d.ts +237 -39
  93. package/dist/esm/kernel-zerodev/abis/Test_ERC20Abi.js.map +1 -1
  94. package/dist/esm/kernel-zerodev/account.d.ts +13 -4
  95. package/dist/esm/kernel-zerodev/account.js +51 -38
  96. package/dist/esm/kernel-zerodev/account.js.map +1 -1
  97. package/dist/esm/kernel-zerodev/constants.d.ts +3 -1
  98. package/dist/esm/kernel-zerodev/constants.js +3 -1
  99. package/dist/esm/kernel-zerodev/constants.js.map +1 -1
  100. package/dist/esm/kernel-zerodev/ethers-provider/account-signer.d.ts +1 -1
  101. package/dist/esm/kernel-zerodev/ethers-provider/account-signer.js +2 -2
  102. package/dist/esm/kernel-zerodev/ethers-provider/account-signer.js.map +1 -1
  103. package/dist/esm/kernel-zerodev/ethers-provider/ethers-provider.d.ts +4 -3
  104. package/dist/esm/kernel-zerodev/ethers-provider/ethers-provider.js +13 -2
  105. package/dist/esm/kernel-zerodev/ethers-provider/ethers-provider.js.map +1 -1
  106. package/dist/esm/kernel-zerodev/middleware/paymaster.js +2 -1
  107. package/dist/esm/kernel-zerodev/middleware/paymaster.js.map +1 -1
  108. package/dist/esm/kernel-zerodev/paymaster/base.d.ts +3 -2
  109. package/dist/esm/kernel-zerodev/paymaster/base.js +2 -1
  110. package/dist/esm/kernel-zerodev/paymaster/base.js.map +1 -1
  111. package/dist/esm/kernel-zerodev/paymaster/token-paymaster.d.ts +1 -1
  112. package/dist/esm/kernel-zerodev/paymaster/token-paymaster.js +2 -1
  113. package/dist/esm/kernel-zerodev/paymaster/token-paymaster.js.map +1 -1
  114. package/dist/esm/kernel-zerodev/paymaster/verifying-paymaster.d.ts +1 -1
  115. package/dist/esm/kernel-zerodev/paymaster/verifying-paymaster.js +2 -1
  116. package/dist/esm/kernel-zerodev/paymaster/verifying-paymaster.js.map +1 -1
  117. package/dist/esm/kernel-zerodev/provider.js +17 -12
  118. package/dist/esm/kernel-zerodev/provider.js.map +1 -1
  119. package/dist/esm/kernel-zerodev/signer/empty-account.d.ts +10 -0
  120. package/dist/esm/kernel-zerodev/signer/empty-account.js +40 -0
  121. package/dist/esm/kernel-zerodev/signer/empty-account.js.map +1 -0
  122. package/dist/esm/kernel-zerodev/utils.d.ts +2 -0
  123. package/dist/esm/kernel-zerodev/utils.js +8 -0
  124. package/dist/esm/kernel-zerodev/utils.js.map +1 -1
  125. package/dist/esm/kernel-zerodev/validator/base.d.ts +6 -3
  126. package/dist/esm/kernel-zerodev/validator/base.js +20 -3
  127. package/dist/esm/kernel-zerodev/validator/base.js.map +1 -1
  128. package/dist/esm/kernel-zerodev/validator/erc165-session-key-validator.d.ts +1 -0
  129. package/dist/esm/kernel-zerodev/validator/erc165-session-key-validator.js +13 -2
  130. package/dist/esm/kernel-zerodev/validator/erc165-session-key-validator.js.map +1 -1
  131. package/dist/esm/kernel-zerodev/validator/index.d.ts +2 -1
  132. package/dist/esm/kernel-zerodev/validator/index.js +3 -1
  133. package/dist/esm/kernel-zerodev/validator/index.js.map +1 -1
  134. package/dist/esm/kernel-zerodev/validator/kill-switch-validator.js +2 -1
  135. package/dist/esm/kernel-zerodev/validator/kill-switch-validator.js.map +1 -1
  136. package/dist/esm/kernel-zerodev/validator/session-key-validator.d.ts +65 -0
  137. package/dist/esm/kernel-zerodev/validator/session-key-validator.js +341 -0
  138. package/dist/esm/kernel-zerodev/validator/session-key-validator.js.map +1 -0
  139. package/dist/esm/kernel-zerodev/validator/types.d.ts +5 -1
  140. package/dist/esm/kernel-zerodev/validator/types.js.map +1 -1
  141. package/dist/esm/kernel-zerodev/validator-provider/base.d.ts +5 -4
  142. package/dist/esm/kernel-zerodev/validator-provider/base.js +17 -2
  143. package/dist/esm/kernel-zerodev/validator-provider/base.js.map +1 -1
  144. package/dist/esm/kernel-zerodev/validator-provider/ecdsa-provider.d.ts +2 -2
  145. package/dist/esm/kernel-zerodev/validator-provider/ecdsa-provider.js.map +1 -1
  146. package/dist/esm/kernel-zerodev/validator-provider/erc165-session-key-provider.d.ts +2 -2
  147. package/dist/esm/kernel-zerodev/validator-provider/erc165-session-key-provider.js.map +1 -1
  148. package/dist/esm/kernel-zerodev/validator-provider/index.d.ts +2 -1
  149. package/dist/esm/kernel-zerodev/validator-provider/index.js +3 -1
  150. package/dist/esm/kernel-zerodev/validator-provider/index.js.map +1 -1
  151. package/dist/esm/kernel-zerodev/validator-provider/kill-switch-provider.d.ts +2 -2
  152. package/dist/esm/kernel-zerodev/validator-provider/kill-switch-provider.js.map +1 -1
  153. package/dist/esm/kernel-zerodev/validator-provider/session-key-provider.d.ts +18 -0
  154. package/dist/esm/kernel-zerodev/validator-provider/session-key-provider.js +110 -0
  155. package/dist/esm/kernel-zerodev/validator-provider/session-key-provider.js.map +1 -0
  156. package/dist/esm/kernel-zerodev/validator-provider/types.d.ts +5 -0
  157. package/dist/esm/kernel-zerodev/validator-provider/types.js.map +1 -1
  158. package/dist/types/index.d.ts +3 -4
  159. package/dist/types/index.d.ts.map +1 -1
  160. package/dist/types/kernel-zerodev/abis/ESCDAValidatorAbi.d.ts +2 -2
  161. package/dist/types/kernel-zerodev/abis/KernelAccountAbi.d.ts +3 -3
  162. package/dist/types/kernel-zerodev/abis/SessionKeyValidatorAbi.d.ts +159 -0
  163. package/dist/types/kernel-zerodev/abis/SessionKeyValidatorAbi.d.ts.map +1 -0
  164. package/dist/types/kernel-zerodev/abis/Test_ERC20Abi.d.ts +237 -39
  165. package/dist/types/kernel-zerodev/abis/Test_ERC20Abi.d.ts.map +1 -1
  166. package/dist/types/kernel-zerodev/account.d.ts +13 -4
  167. package/dist/types/kernel-zerodev/account.d.ts.map +1 -1
  168. package/dist/types/kernel-zerodev/constants.d.ts +3 -1
  169. package/dist/types/kernel-zerodev/constants.d.ts.map +1 -1
  170. package/dist/types/kernel-zerodev/ethers-provider/account-signer.d.ts +1 -1
  171. package/dist/types/kernel-zerodev/ethers-provider/account-signer.d.ts.map +1 -1
  172. package/dist/types/kernel-zerodev/ethers-provider/ethers-provider.d.ts +4 -3
  173. package/dist/types/kernel-zerodev/ethers-provider/ethers-provider.d.ts.map +1 -1
  174. package/dist/types/kernel-zerodev/middleware/paymaster.d.ts.map +1 -1
  175. package/dist/types/kernel-zerodev/paymaster/base.d.ts +3 -2
  176. package/dist/types/kernel-zerodev/paymaster/base.d.ts.map +1 -1
  177. package/dist/types/kernel-zerodev/paymaster/token-paymaster.d.ts +1 -1
  178. package/dist/types/kernel-zerodev/paymaster/token-paymaster.d.ts.map +1 -1
  179. package/dist/types/kernel-zerodev/paymaster/verifying-paymaster.d.ts +1 -1
  180. package/dist/types/kernel-zerodev/paymaster/verifying-paymaster.d.ts.map +1 -1
  181. package/dist/types/kernel-zerodev/provider.d.ts.map +1 -1
  182. package/dist/types/kernel-zerodev/signer/empty-account.d.ts +11 -0
  183. package/dist/types/kernel-zerodev/signer/empty-account.d.ts.map +1 -0
  184. package/dist/types/kernel-zerodev/utils.d.ts +2 -0
  185. package/dist/types/kernel-zerodev/utils.d.ts.map +1 -1
  186. package/dist/types/kernel-zerodev/validator/base.d.ts +6 -3
  187. package/dist/types/kernel-zerodev/validator/base.d.ts.map +1 -1
  188. package/dist/types/kernel-zerodev/validator/erc165-session-key-validator.d.ts +1 -0
  189. package/dist/types/kernel-zerodev/validator/erc165-session-key-validator.d.ts.map +1 -1
  190. package/dist/types/kernel-zerodev/validator/index.d.ts +2 -1
  191. package/dist/types/kernel-zerodev/validator/index.d.ts.map +1 -1
  192. package/dist/types/kernel-zerodev/validator/kill-switch-validator.d.ts.map +1 -1
  193. package/dist/types/kernel-zerodev/validator/session-key-validator.d.ts +66 -0
  194. package/dist/types/kernel-zerodev/validator/session-key-validator.d.ts.map +1 -0
  195. package/dist/types/kernel-zerodev/validator/types.d.ts +5 -1
  196. package/dist/types/kernel-zerodev/validator/types.d.ts.map +1 -1
  197. package/dist/types/kernel-zerodev/validator-provider/base.d.ts +5 -4
  198. package/dist/types/kernel-zerodev/validator-provider/base.d.ts.map +1 -1
  199. package/dist/types/kernel-zerodev/validator-provider/ecdsa-provider.d.ts +2 -2
  200. package/dist/types/kernel-zerodev/validator-provider/ecdsa-provider.d.ts.map +1 -1
  201. package/dist/types/kernel-zerodev/validator-provider/erc165-session-key-provider.d.ts +2 -2
  202. package/dist/types/kernel-zerodev/validator-provider/erc165-session-key-provider.d.ts.map +1 -1
  203. package/dist/types/kernel-zerodev/validator-provider/index.d.ts +2 -1
  204. package/dist/types/kernel-zerodev/validator-provider/index.d.ts.map +1 -1
  205. package/dist/types/kernel-zerodev/validator-provider/kill-switch-provider.d.ts +2 -2
  206. package/dist/types/kernel-zerodev/validator-provider/kill-switch-provider.d.ts.map +1 -1
  207. package/dist/types/kernel-zerodev/validator-provider/session-key-provider.d.ts +19 -0
  208. package/dist/types/kernel-zerodev/validator-provider/session-key-provider.d.ts.map +1 -0
  209. package/dist/types/kernel-zerodev/validator-provider/types.d.ts +5 -0
  210. package/dist/types/kernel-zerodev/validator-provider/types.d.ts.map +1 -1
  211. package/package.json +2 -1
  212. package/src/index.ts +3 -4
  213. package/src/kernel-zerodev/abis/ESCDAValidatorAbi.ts +2 -2
  214. package/src/kernel-zerodev/abis/KernelAccountAbi.ts +3 -3
  215. package/src/kernel-zerodev/abis/SessionKeyValidatorAbi.ts +206 -0
  216. package/src/kernel-zerodev/abis/Test_ERC20Abi.ts +1 -1
  217. package/src/kernel-zerodev/account.ts +58 -50
  218. package/src/kernel-zerodev/constants.ts +4 -1
  219. package/src/kernel-zerodev/ethers-provider/account-signer.ts +3 -3
  220. package/src/kernel-zerodev/ethers-provider/ethers-provider.ts +25 -7
  221. package/src/kernel-zerodev/middleware/paymaster.ts +2 -1
  222. package/src/kernel-zerodev/paymaster/base.ts +5 -1
  223. package/src/kernel-zerodev/paymaster/token-paymaster.ts +3 -1
  224. package/src/kernel-zerodev/paymaster/verifying-paymaster.ts +3 -1
  225. package/src/kernel-zerodev/provider.ts +27 -23
  226. package/src/kernel-zerodev/signer/empty-account.ts +27 -0
  227. package/src/kernel-zerodev/utils.ts +10 -0
  228. package/src/kernel-zerodev/validator/base.ts +32 -6
  229. package/src/kernel-zerodev/validator/erc165-session-key-validator.ts +20 -1
  230. package/src/kernel-zerodev/validator/index.ts +8 -1
  231. package/src/kernel-zerodev/validator/kill-switch-validator.ts +6 -1
  232. package/src/kernel-zerodev/validator/session-key-validator.ts +483 -0
  233. package/src/kernel-zerodev/validator/types.ts +14 -1
  234. package/src/kernel-zerodev/validator-provider/base.ts +24 -13
  235. package/src/kernel-zerodev/validator-provider/ecdsa-provider.ts +4 -1
  236. package/src/kernel-zerodev/validator-provider/erc165-session-key-provider.ts +4 -1
  237. package/src/kernel-zerodev/validator-provider/index.ts +8 -1
  238. package/src/kernel-zerodev/validator-provider/kill-switch-provider.ts +4 -1
  239. package/src/kernel-zerodev/validator-provider/session-key-provider.ts +151 -0
  240. package/src/kernel-zerodev/validator-provider/types.ts +10 -0
@@ -8,17 +8,14 @@ import {
8
8
  type Hex,
9
9
  toBytes,
10
10
  type Transport,
11
- pad,
12
- toHex,
13
11
  } from "viem";
14
12
  import { parseAbiParameters } from "abitype";
15
- import { KernelBaseValidator, ValidatorMode } from "./validator/base.js";
13
+ import { KernelBaseValidator } from "./validator/base.js";
16
14
  import { KernelAccountAbi } from "./abis/KernelAccountAbi.js";
17
15
  import { KernelFactoryAbi } from "./abis/KernelFactoryAbi.js";
18
16
  import {
19
17
  type BaseSmartAccountParams,
20
18
  BaseSmartContractAccount,
21
- type SmartAccountSigner,
22
19
  type BatchUserOperationCallData,
23
20
  type UserOperationRequest,
24
21
  defineReadOnly,
@@ -38,17 +35,22 @@ import { polygonMumbai } from "viem/chains";
38
35
  import { getChainId } from "./api/index.js";
39
36
  import { createZeroDevPublicErc4337Client } from "./client/create-client.js";
40
37
  import type { PaymasterAndBundlerProviders } from "./paymaster/types.js";
41
- import type { KillSwitchValidator } from "./validator/kill-switch-validator.js";
42
38
 
39
+ export enum DeploymentState {
40
+ UNDEFINED = "0x0",
41
+ NOT_DEPLOYED = "0x1",
42
+ DEPLOYED = "0x2",
43
+ }
43
44
  export interface KernelSmartAccountParams<
44
45
  TTransport extends Transport | FallbackTransport = Transport
45
46
  > extends Partial<BaseSmartAccountParams<TTransport>> {
46
47
  projectId: string;
47
- owner: SmartAccountSigner;
48
48
  factoryAddress?: Address;
49
49
  index?: bigint;
50
50
  validator?: KernelBaseValidator;
51
51
  bundlerProvider?: PaymasterAndBundlerProviders;
52
+ defaultValidator?: KernelBaseValidator;
53
+ initCode?: Hex;
52
54
  }
53
55
 
54
56
  export function isKernelAccount(
@@ -60,10 +62,11 @@ export function isKernelAccount(
60
62
  export class KernelSmartContractAccount<
61
63
  TTransport extends Transport | FallbackTransport = Transport
62
64
  > extends BaseSmartContractAccount<TTransport> {
63
- private owner: SmartAccountSigner;
64
65
  private readonly factoryAddress: Address;
65
66
  private readonly index: bigint;
67
+ private initCode?: Hex;
66
68
  validator?: KernelBaseValidator;
69
+ defaultValidator?: KernelBaseValidator;
67
70
 
68
71
  constructor(params: KernelSmartAccountParams) {
69
72
  super({
@@ -73,9 +76,10 @@ export class KernelSmartContractAccount<
73
76
  rpcClient: params.rpcClient ?? BUNDLER_URL,
74
77
  });
75
78
  this.index = params.index ?? 0n;
76
- this.owner = params.owner;
77
79
  this.factoryAddress = params.factoryAddress ?? KERNEL_FACTORY_ADDRESS;
78
80
  this.validator = params.validator;
81
+ this.defaultValidator = params.defaultValidator;
82
+ this.initCode = params.initCode;
79
83
  }
80
84
 
81
85
  public static async init(
@@ -119,52 +123,55 @@ export class KernelSmartContractAccount<
119
123
  return "0x00000000870fe151d548a1c527c3804866fab30abf28ed17b79d5fc5149f19ca0819fefc3c57f3da4fdf9b10fab3f2f3dca536467ae44943b9dbb8433efe7760ddd72aaa1c";
120
124
  }
121
125
 
122
- async getDynamicDummySignature(
123
- kernelAccountAddress: Address,
124
- calldata: Hex
125
- ): Promise<Hex> {
126
- if (!this.validator) {
127
- throw new Error("Validator not connected");
126
+ async getInitCode(): Promise<Hex> {
127
+ if (this.deploymentState === DeploymentState.DEPLOYED) {
128
+ return "0x";
128
129
  }
129
-
130
- const dummyECDSASig =
131
- "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c";
132
- const validatorMode = await this.validator.resolveValidatorMode(
133
- kernelAccountAddress,
134
- calldata
130
+ const contractCode = await this.rpcProvider.getContractCode(
131
+ await this.getAddress()
135
132
  );
136
- if (validatorMode === ValidatorMode.enable) {
137
- const enableData = await this.validator.getEnableData();
138
- const enableDataLength = enableData.length / 2 - 1;
139
- const enableSigLength = 65;
140
- const staticDummySig = concatHex([
141
- "0x000000000000000000000000",
142
- this.validator.getAddress(),
143
- "0x53dd285022D1512635823952d109dB39467a457E",
144
- ]);
145
- const pausedUntil = await (
146
- this.validator as KillSwitchValidator
147
- ).getPausedUntil();
148
133
 
149
- return concatHex([
150
- ValidatorMode.enable,
151
- staticDummySig,
152
- pad(toHex(enableDataLength), { size: 32 }),
153
- enableData,
154
- pad(toHex(enableSigLength), { size: 32 }),
155
- dummyECDSASig,
156
- pad(toHex(pausedUntil), { size: 6 }),
157
- dummyECDSASig,
158
- ]);
134
+ if ((contractCode?.length ?? 0) > 2) {
135
+ this.deploymentState = DeploymentState.DEPLOYED;
136
+ return "0x";
137
+ } else {
138
+ this.deploymentState = DeploymentState.NOT_DEPLOYED;
139
+ }
140
+
141
+ return this.initCode ?? this.getAccountInitCode();
142
+ }
143
+
144
+ getIndex(): bigint {
145
+ return this.index;
146
+ }
147
+
148
+ async approvePlugin() {
149
+ if (!this.validator) {
150
+ throw new Error("Validator not connected");
151
+ }
152
+ if (this.defaultValidator && !this.validator.getEnableSignature()) {
153
+ const { executor, selector, validAfter, validUntil } =
154
+ this.validator.getPluginValidatorData();
155
+ const enableSig = await this.defaultValidator.approveExecutor(
156
+ await this.getAddress(),
157
+ selector,
158
+ executor,
159
+ validUntil,
160
+ validAfter,
161
+ this.validator
162
+ );
163
+ this.validator.setEnableSignature(enableSig);
159
164
  }
160
- return concatHex([validatorMode, dummyECDSASig]);
161
165
  }
162
166
 
163
167
  async encodeExecute(target: Hex, value: bigint, data: Hex): Promise<Hex> {
164
168
  if (!this.validator) {
165
169
  throw new Error("Validator not connected");
166
170
  }
167
- if (target.toLowerCase() === this.accountAddress?.toLowerCase()) {
171
+ if (
172
+ target.toLowerCase() === (await this.getAddress()).toLowerCase() &&
173
+ this.validator.shouldDelegateViaFallback()
174
+ ) {
168
175
  return data;
169
176
  } else {
170
177
  return this.encodeExecuteAction(target, value, data, 0);
@@ -196,8 +203,11 @@ export class KernelSmartContractAccount<
196
203
 
197
204
  async signWithEip6492(msg: string | Uint8Array): Promise<Hex> {
198
205
  try {
206
+ if (!this.validator) {
207
+ throw new Error("Validator not connected");
208
+ }
199
209
  const formattedMessage = typeof msg === "string" ? toBytes(msg) : msg;
200
- let sig = await this.owner.signMessage(
210
+ let sig = await this.validator.signMessage(
201
211
  toBytes(hashMessage({ raw: formattedMessage }))
202
212
  );
203
213
  // If the account is undeployed, use ERC-6492
@@ -255,7 +265,8 @@ export class KernelSmartContractAccount<
255
265
  }
256
266
 
257
267
  protected async getFactoryInitCode(): Promise<Hex> {
258
- if (!this.validator) {
268
+ const validator = this.defaultValidator ?? this.validator;
269
+ if (!validator) {
259
270
  throw new Error("Validator not connected");
260
271
  }
261
272
  try {
@@ -267,10 +278,7 @@ export class KernelSmartContractAccount<
267
278
  encodeFunctionData({
268
279
  abi: KernelAccountAbi,
269
280
  functionName: "initialize",
270
- args: [
271
- this.validator.getAddress(),
272
- await this.validator.getEnableData(),
273
- ],
281
+ args: [validator.getAddress(), await validator.getEnableData()],
274
282
  }),
275
283
  this.index,
276
284
  ],
@@ -3,7 +3,7 @@ import type { IGasTokenAddresses } from "./paymaster/types.js";
3
3
  import { polygon } from "viem/chains";
4
4
 
5
5
  export const DEFAULT_SEND_TX_MAX_RETRIES = 3;
6
- export const DEFAULT_SEND_TX_RETRY_INTERVAL_MS = 1_80_000; // 3 minutes
6
+ export const DEFAULT_SEND_TX_RETRY_INTERVAL_MS = 60000; // 1 minutes
7
7
  export const BUNDLER_URL = "https://v0-6-meta-bundler.onrender.com";
8
8
  export const PAYMASTER_URL = "https://v0-6-paymaster.onrender.com";
9
9
  export const ENTRYPOINT_ADDRESS: Hex =
@@ -24,6 +24,9 @@ export const DUMMY_ECDSA_SIG =
24
24
  export const ERC165_SESSION_KEY_VALIDATOR_ADDRESS =
25
25
  "0xe149290800De29D4b0BF9dB82c508255D81902E6";
26
26
  export const TOKEN_ACTION = "0x2087C7FfD0d0DAE80a00EE74325aBF3449e0eaf1";
27
+ export const SESSION_KEY_VALIDATOR_ADDRESS =
28
+ "0x1C1D5b70aD6e0c04366aab100261A6Bcc251EA3f";
29
+ export const oneAddress = "0x0000000000000000000000000000000000000001";
27
30
 
28
31
  export const gasTokenChainAddresses: IGasTokenAddresses = {
29
32
  USDC: {
@@ -1,5 +1,4 @@
1
1
  import {
2
- BaseSmartContractAccount,
3
2
  resolveProperties,
4
3
  type AccountMiddlewareFn,
5
4
  type FeeDataMiddleware,
@@ -23,6 +22,7 @@ import {
23
22
  } from "@ethersproject/providers";
24
23
  import { ZeroDevEthersProvider } from "./ethers-provider.js";
25
24
  import type { SupportedValidators } from "../validator/types.js";
25
+ import type { KernelSmartContractAccount } from "../account.js";
26
26
 
27
27
  const hexlifyOptional = (value: any): `0x${string}` | undefined => {
28
28
  if (value == null) {
@@ -36,14 +36,14 @@ export class ZeroDevAccountSigner<V extends SupportedValidators>
36
36
  extends Signer
37
37
  implements TypedDataSigner
38
38
  {
39
- private account?: BaseSmartContractAccount;
39
+ private account?: KernelSmartContractAccount;
40
40
 
41
41
  sendUserOperation;
42
42
  waitForUserOperationTransaction;
43
43
 
44
44
  constructor(readonly provider: ZeroDevEthersProvider<V>) {
45
45
  super();
46
- this.account = this.provider.accountProvider.account;
46
+ this.account = this.provider.accountProvider.getAccount();
47
47
 
48
48
  this.sendUserOperation =
49
49
  this.provider.accountProvider.sendUserOperation.bind(
@@ -1,8 +1,6 @@
1
1
  import { getChainId } from "../api/index.js";
2
2
  import {
3
- SmartAccountProvider,
4
3
  getChain,
5
- type HttpTransport,
6
4
  BaseSmartContractAccount,
7
5
  defineReadOnly,
8
6
  type AccountMiddlewareFn,
@@ -14,22 +12,34 @@ import {
14
12
  import { ZeroDevAccountSigner } from "./account-signer.js";
15
13
  import { JsonRpcProvider } from "@ethersproject/providers";
16
14
  import type { SupportedValidators } from "../validator/types.js";
17
- import type { ValidatorProviderParamsMap } from "../validator-provider/types.js";
15
+ import type {
16
+ ValidatorProviderParamsMap,
17
+ ValidatorProviderTypeMap,
18
+ } from "../validator-provider/types.js";
18
19
  import { ValidatorProviders } from "../validator-provider/index.js";
19
20
  import { withZeroDevPaymasterAndData } from "../middleware/paymaster.js";
20
21
 
21
22
  export class ZeroDevEthersProvider<
22
23
  V extends SupportedValidators
23
24
  > extends JsonRpcProvider {
24
- readonly accountProvider: SmartAccountProvider<HttpTransport>;
25
+ readonly accountProvider: ValidatorProviderTypeMap[V];
25
26
  constructor(validatorType: V, params: ValidatorProviderParamsMap[V]) {
26
27
  super();
27
28
  let accountProvider = new ValidatorProviders[validatorType](params);
28
29
  if (params.usePaymaster === undefined || params.usePaymaster) {
30
+ let paymasterConfig = params.opts?.paymasterConfig ?? {
31
+ policy: "VERIFYING_PAYMASTER",
32
+ };
33
+ paymasterConfig = {
34
+ ...paymasterConfig,
35
+ paymasterProvider:
36
+ params.opts?.paymasterConfig?.paymasterProvider ??
37
+ params.bundlerProvider,
38
+ };
29
39
  accountProvider = withZeroDevPaymasterAndData(
30
40
  accountProvider,
31
- params.opts?.paymasterConfig ?? { policy: "VERIFYING_PAYMASTER" }
32
- ) as typeof accountProvider;
41
+ paymasterConfig
42
+ ) as ValidatorProviderTypeMap[V];
33
43
  }
34
44
  this.accountProvider = accountProvider;
35
45
  }
@@ -57,6 +67,10 @@ export class ZeroDevEthersProvider<
57
67
  return instance;
58
68
  }
59
69
 
70
+ getAccountProvider(): ValidatorProviderTypeMap[V] {
71
+ return this.accountProvider;
72
+ }
73
+
60
74
  /**
61
75
  * Rewrites the send method to use the account provider's EIP-1193
62
76
  * compliant request method
@@ -78,7 +92,11 @@ export class ZeroDevEthersProvider<
78
92
  connectToAccount(
79
93
  fn: (rpcClient: PublicErc4337Client) => BaseSmartContractAccount
80
94
  ): ZeroDevAccountSigner<V> {
81
- defineReadOnly(this, "accountProvider", this.accountProvider.connect(fn));
95
+ defineReadOnly(
96
+ this,
97
+ "accountProvider",
98
+ this.accountProvider.connect(fn) as ValidatorProviderTypeMap[V]
99
+ );
82
100
  return this.getAccountSigner();
83
101
  }
84
102
 
@@ -25,7 +25,8 @@ export const zeroDevPaymasterAndDataMiddleware = <
25
25
  >["0"] => {
26
26
  return {
27
27
  dummyPaymasterDataMiddleware: async (struct) => {
28
- struct.paymasterAndData = "0x";
28
+ struct.paymasterAndData =
29
+ "0xe93eca6595fe94091dc1af46aac2a8b5d79907700000000000000000000000000000000000000000000000000000000064ee5cd9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c";
29
30
  return struct;
30
31
  },
31
32
  paymasterDataMiddleware: async (struct) => {
@@ -16,7 +16,8 @@ export abstract class Paymaster {
16
16
  constructor(protected provider: ZeroDevProvider) {}
17
17
  abstract getPaymasterResponse(
18
18
  struct: UserOperationStruct,
19
- paymasterProvider?: PaymasterAndBundlerProviders
19
+ paymasterProvider?: PaymasterAndBundlerProviders,
20
+ shouldOverrideFee?: boolean
20
21
  ): Promise<UserOperationStruct>;
21
22
  protected async signUserOp({
22
23
  userOp,
@@ -25,6 +26,7 @@ export abstract class Paymaster {
25
26
  erc20UserOp,
26
27
  erc20CallData,
27
28
  paymasterProvider,
29
+ shouldOverrideFee = false,
28
30
  }: {
29
31
  userOp: UserOperationStruct;
30
32
  callData?: PromiseOrValue<BytesLike>;
@@ -32,6 +34,7 @@ export abstract class Paymaster {
32
34
  erc20UserOp?: Partial<UserOperationStruct>;
33
35
  erc20CallData?: PromiseOrValue<BytesLike>;
34
36
  paymasterProvider?: PaymasterAndBundlerProviders;
37
+ shouldOverrideFee?: boolean;
35
38
  }): Promise<any> {
36
39
  try {
37
40
  const hexifiedUserOp = deepHexlify(await resolveProperties(userOp));
@@ -58,6 +61,7 @@ export abstract class Paymaster {
58
61
  ? await erc20CallData
59
62
  : erc20CallData,
60
63
  paymasterProvider,
64
+ shouldOverrideFee,
61
65
  }).filter(([_, value]) => value !== undefined)
62
66
  );
63
67
  const { data: paymasterResp } = await axios.post(
@@ -157,7 +157,8 @@ export class TokenPaymaster extends Paymaster {
157
157
 
158
158
  async getPaymasterResponse(
159
159
  struct: UserOperationStruct,
160
- paymasterProvider?: PaymasterAndBundlerProviders
160
+ paymasterProvider?: PaymasterAndBundlerProviders,
161
+ shouldOverrideFee?: boolean
161
162
  ): Promise<UserOperationStruct> {
162
163
  try {
163
164
  const mainCall = await this.decodeMainCallFromCallData(
@@ -193,6 +194,7 @@ export class TokenPaymaster extends Paymaster {
193
194
  erc20UserOp,
194
195
  erc20CallData: erc20UserOp.callData,
195
196
  paymasterProvider,
197
+ shouldOverrideFee,
196
198
  });
197
199
  if (paymasterResp) {
198
200
  return {
@@ -16,13 +16,15 @@ export class VerifyingPaymaster extends Paymaster {
16
16
  }
17
17
  async getPaymasterResponse(
18
18
  struct: UserOperationStruct,
19
- paymasterProvider?: PaymasterAndBundlerProviders
19
+ paymasterProvider?: PaymasterAndBundlerProviders,
20
+ shouldOverrideFee?: boolean
20
21
  ): Promise<UserOperationStruct> {
21
22
  try {
22
23
  const hexifiedUserOp = deepHexlify(await resolveProperties(struct));
23
24
  const paymasterResp = await this.signUserOp({
24
25
  userOp: hexifiedUserOp,
25
26
  paymasterProvider,
27
+ shouldOverrideFee,
26
28
  });
27
29
  if (paymasterResp) {
28
30
  return {
@@ -56,8 +56,8 @@ export type ZeroDevProviderConfig = {
56
56
  };
57
57
 
58
58
  export enum Operation {
59
- Call,
60
- DelegateCall,
59
+ Call = 0,
60
+ DelegateCall = 1,
61
61
  }
62
62
 
63
63
  type UserOpDataOperationTypes<T> = T extends UserOperationCallData
@@ -183,24 +183,28 @@ export class ZeroDevProvider extends SmartAccountProvider<HttpTransport> {
183
183
  let hash: string = "";
184
184
  let i = 0;
185
185
  const nonce = await this.account.getNonce();
186
- const uoStruct = await asyncPipe(
187
- this.dummyPaymasterDataMiddleware,
188
- this.feeDataGetter,
189
- this.paymasterDataMiddleware,
190
- this.gasEstimator,
191
- this.customMiddleware ?? noOpMiddleware,
192
- async (struct) => ({ ...struct, ...overrides })
193
- )({
194
- initCode,
195
- sender: this.getAddress(),
196
- nonce,
197
- callData,
198
- signature: await this.account
199
- .getValidator()
200
- .getDynamicDummySignature(await this.getAddress(), callData as Hex),
201
- } as UserOperationStruct);
186
+ let uoStruct: UserOperationStruct;
202
187
  let request: UserOperationStruct;
188
+ let maxFeePerGas, maxPriorityFeePerGas;
203
189
  do {
190
+ uoStruct = await asyncPipe(
191
+ this.dummyPaymasterDataMiddleware,
192
+ this.feeDataGetter,
193
+ this.paymasterDataMiddleware,
194
+ this.gasEstimator,
195
+ this.customMiddleware ?? noOpMiddleware,
196
+ async (struct) => ({ ...struct, ...overrides })
197
+ )({
198
+ initCode,
199
+ sender: this.getAddress(),
200
+ nonce,
201
+ callData,
202
+ signature: await this.account
203
+ .getValidator()
204
+ .getDynamicDummySignature(await this.getAddress(), callData as Hex),
205
+ maxFeePerGas,
206
+ maxPriorityFeePerGas,
207
+ } as UserOperationStruct);
204
208
  request = deepHexlify(await resolveProperties(uoStruct));
205
209
 
206
210
  if (!isValidRequest(request)) {
@@ -214,6 +218,8 @@ export class ZeroDevProvider extends SmartAccountProvider<HttpTransport> {
214
218
  );
215
219
  }
216
220
 
221
+ this.account.approvePlugin();
222
+
217
223
  request.signature = await this.account.validator.getSignature(request);
218
224
  try {
219
225
  hash = await this.rpcClient.sendUserOperation(
@@ -222,16 +228,14 @@ export class ZeroDevProvider extends SmartAccountProvider<HttpTransport> {
222
228
  );
223
229
  } catch (error: any) {
224
230
  if (this.isReplacementOpError(error) && i++ < this.sendTxMaxRetries) {
225
- uoStruct.maxFeePerGas = (BigInt(request.maxFeePerGas) * 113n) / 100n;
226
- uoStruct.maxPriorityFeePerGas =
231
+ maxFeePerGas = (BigInt(request.maxFeePerGas) * 113n) / 100n;
232
+ maxPriorityFeePerGas =
227
233
  (BigInt(request.maxPriorityFeePerGas) * 113n) / 100n;
228
234
 
229
235
  console.log(
230
236
  `After ${
231
237
  this.sendTxRetryIntervalMs / 60000
232
- } minutes, resending tx with Increased Gas fees: maxFeePerGas: ${
233
- uoStruct.maxFeePerGas
234
- }, maxPriorityFeePerGas: ${uoStruct.maxPriorityFeePerGas}`
238
+ } minutes, resending tx with Increased Gas fees: maxFeePerGas: ${maxFeePerGas}, maxPriorityFeePerGas: ${maxPriorityFeePerGas}`
235
239
  );
236
240
  await new Promise((resolve) =>
237
241
  setTimeout(resolve, this.sendTxRetryIntervalMs)
@@ -0,0 +1,27 @@
1
+ import type { SignTypedDataParams, SmartAccountSigner } from "@alchemy/aa-core";
2
+ import { type Hex } from "viem";
3
+
4
+ export class EmptyAccountSigner implements SmartAccountSigner {
5
+ private owner: Hex;
6
+ constructor(owner: Hex) {
7
+ this.owner = owner;
8
+ }
9
+
10
+ readonly signMessage: (msg: string | Uint8Array) => Promise<`0x${string}`> = (
11
+ _msg
12
+ ) => {
13
+ throw Error("EmptyAccountSigner: method not implemented");
14
+ };
15
+
16
+ readonly signTypedData = (_params: SignTypedDataParams) => {
17
+ throw Error("EmptyAccountSigner: method not implemented");
18
+ };
19
+
20
+ readonly getAddress: () => Promise<`0x${string}`> = async () => {
21
+ return this.owner;
22
+ };
23
+
24
+ static addressToAccountSigner(ownerAddress: Hex): EmptyAccountSigner {
25
+ return new EmptyAccountSigner(ownerAddress);
26
+ }
27
+ }
@@ -46,6 +46,16 @@ export const encodeMultiSend = (
46
46
  return ("0x" + _txs.map((tx) => encodeCall(tx)).join("")) as Hex;
47
47
  };
48
48
 
49
+ export function base64ToBytes(base64: string) {
50
+ const binString = atob(base64);
51
+ return Uint8Array.from(binString, (m) => m.codePointAt(0) as number);
52
+ }
53
+
54
+ export function bytesToBase64(bytes: Uint8Array) {
55
+ const binString = Array.from(bytes, (x) => String.fromCodePoint(x)).join("");
56
+ return btoa(binString);
57
+ }
58
+
49
59
  export function getGasTokenAddress(
50
60
  gasToken: SupportedGasToken,
51
61
  chainId: number
@@ -43,11 +43,18 @@ export interface KernelBaseValidatorParams {
43
43
  validUntil?: number;
44
44
  validAfter?: number;
45
45
  executor?: Address;
46
- selector?: string;
46
+ selector?: Hex;
47
47
  rpcUrl?: string;
48
48
  bundlerProvider?: PaymasterAndBundlerProviders;
49
49
  }
50
50
 
51
+ export type ValidatorPluginData = Required<
52
+ Pick<
53
+ KernelBaseValidatorParams,
54
+ "executor" | "selector" | "validAfter" | "validUntil"
55
+ >
56
+ >;
57
+
51
58
  //Kernel wallet implementation separates out validation and execution phase. It allows you to have
52
59
  // custom wrapper logic for the validation phase in addition to signature of choice.
53
60
  export abstract class KernelBaseValidator {
@@ -60,7 +67,7 @@ export abstract class KernelBaseValidator {
60
67
  protected validUntil: number;
61
68
  protected validAfter: number;
62
69
  protected executor?: Address;
63
- protected selector?: string;
70
+ protected selector?: Hex;
64
71
  protected rpcUrl?: string;
65
72
  protected bundlerProvider?: PaymasterAndBundlerProviders;
66
73
  publicClient?: PublicClient<Transport, Chain>;
@@ -98,13 +105,29 @@ export abstract class KernelBaseValidator {
98
105
 
99
106
  abstract signer(): Promise<SmartAccountSigner>;
100
107
 
101
- abstract getDummyUserOpSignature(): Promise<Hex>;
108
+ abstract getDummyUserOpSignature(callData?: Hex): Promise<Hex>;
102
109
 
103
110
  abstract isPluginEnabled(
104
111
  kernelAccountAddress: Address,
105
112
  selector: Hex
106
113
  ): Promise<boolean>;
107
114
 
115
+ shouldDelegateViaFallback(): boolean {
116
+ return true;
117
+ }
118
+
119
+ getPluginValidatorData(): ValidatorPluginData {
120
+ if (!this.selector || !this.executor) {
121
+ throw Error("Plugin Validator data params uninitialised");
122
+ }
123
+ return {
124
+ selector: this.selector,
125
+ executor: this.executor,
126
+ validAfter: this.validAfter,
127
+ validUntil: this.validUntil,
128
+ };
129
+ }
130
+
108
131
  async getDynamicDummySignature(
109
132
  kernelAccountAddress: Address,
110
133
  calldata: Hex
@@ -122,7 +145,7 @@ export abstract class KernelBaseValidator {
122
145
  const staticDummySig = concatHex([
123
146
  "0x000000000000000000000000",
124
147
  this.getAddress(),
125
- "0x53dd285022D1512635823952d109dB39467a457E",
148
+ this.executor!,
126
149
  ]);
127
150
 
128
151
  return concatHex([
@@ -132,10 +155,13 @@ export abstract class KernelBaseValidator {
132
155
  enableData,
133
156
  pad(toHex(enableSigLength), { size: 32 }),
134
157
  dummyECDSASig,
135
- await this.getDummyUserOpSignature(),
158
+ await this.getDummyUserOpSignature(calldata),
136
159
  ]);
137
160
  }
138
- return concatHex([validatorMode, await this.getDummyUserOpSignature()]);
161
+ return concatHex([
162
+ validatorMode,
163
+ await this.getDummyUserOpSignature(calldata),
164
+ ]);
139
165
  }
140
166
 
141
167
  setEnableSignature(enableSignature: Hex) {
@@ -4,13 +4,19 @@ import {
4
4
  type Hex,
5
5
  type SmartAccountSigner,
6
6
  type UserOperationRequest,
7
+ getChain,
7
8
  type SignTypedDataParams,
8
9
  } from "@alchemy/aa-core";
9
- import { KernelBaseValidator, type KernelBaseValidatorParams } from "./base.js";
10
+ import {
11
+ KernelBaseValidator,
12
+ ValidatorMode,
13
+ type KernelBaseValidatorParams,
14
+ } from "./base.js";
10
15
  import { encodeFunctionData, toBytes, concat, pad, toHex } from "viem";
11
16
  import { ERC165SessionKeyValidatorAbi } from "../abis/ERC165SessionKeyValidatorAbi.js";
12
17
  import { DUMMY_ECDSA_SIG } from "../constants.js";
13
18
  import { KernelAccountAbi } from "../abis/KernelAccountAbi.js";
19
+ import { getChainId } from "../api/index.js";
14
20
  import { fixSignedData } from "../utils.js";
15
21
 
16
22
  export interface ERC165SessionKeyValidatorParams
@@ -35,6 +41,19 @@ export class ERC165SessionKeyValidator extends KernelBaseValidator {
35
41
  super(params);
36
42
  this.sessionKey = params.sessionKey;
37
43
  this.sessionKeyData = params.sessionKeyData;
44
+ this.mode = params.mode ?? ValidatorMode.plugin;
45
+ }
46
+
47
+ public static async init(
48
+ params: ERC165SessionKeyValidatorParams
49
+ ): Promise<ERC165SessionKeyValidator> {
50
+ const chainId = await getChainId(params.projectId);
51
+ if (!chainId) {
52
+ throw new Error("ChainId not found");
53
+ }
54
+ const chain = getChain(chainId);
55
+ const instance = new ERC165SessionKeyValidator({ ...params, chain });
56
+ return instance;
38
57
  }
39
58
 
40
59
  async signer(): Promise<SmartAccountSigner> {
@@ -1,12 +1,19 @@
1
1
  import { ECDSAValidator } from "./ecdsa-validator.js";
2
2
  import { ERC165SessionKeyValidator } from "./erc165-session-key-validator.js";
3
3
  import { KillSwitchValidator } from "./kill-switch-validator.js";
4
+ import { SessionKeyValidator } from "./session-key-validator.js";
4
5
  import type { ValidatorMap } from "./types.js";
5
6
 
6
7
  export const Validators: ValidatorMap = {
7
8
  ECDSA: ECDSAValidator,
8
9
  KILL_SWITCH: KillSwitchValidator,
9
10
  ERC165_SESSION_KEY: ERC165SessionKeyValidator,
11
+ SESSION_KEY: SessionKeyValidator,
10
12
  };
11
13
 
12
- export { ECDSAValidator, KillSwitchValidator, ERC165SessionKeyValidator };
14
+ export {
15
+ ECDSAValidator,
16
+ KillSwitchValidator,
17
+ ERC165SessionKeyValidator,
18
+ SessionKeyValidator,
19
+ };