@zerodev/sdk 4.0.2-alpha.23

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 (393) hide show
  1. package/README.md +450 -0
  2. package/dist/cjs/index.d.ts +21 -0
  3. package/dist/cjs/index.js +50 -0
  4. package/dist/cjs/index.js.map +1 -0
  5. package/dist/cjs/kernel-zerodev/abis/ERC165SessionKeyValidatorAbi.d.ts +162 -0
  6. package/dist/cjs/kernel-zerodev/abis/ERC165SessionKeyValidatorAbi.js +215 -0
  7. package/dist/cjs/kernel-zerodev/abis/ERC165SessionKeyValidatorAbi.js.map +1 -0
  8. package/dist/cjs/kernel-zerodev/abis/ERC20Abi.d.ts +39 -0
  9. package/dist/cjs/kernel-zerodev/abis/ERC20Abi.js +157 -0
  10. package/dist/cjs/kernel-zerodev/abis/ERC20Abi.js.map +1 -0
  11. package/dist/cjs/kernel-zerodev/abis/ESCDAValidatorAbi.d.ts +158 -0
  12. package/dist/cjs/kernel-zerodev/abis/ESCDAValidatorAbi.js +210 -0
  13. package/dist/cjs/kernel-zerodev/abis/ESCDAValidatorAbi.js.map +1 -0
  14. package/dist/cjs/kernel-zerodev/abis/KernelAccountAbi.d.ts +496 -0
  15. package/dist/cjs/kernel-zerodev/abis/KernelAccountAbi.js +646 -0
  16. package/dist/cjs/kernel-zerodev/abis/KernelAccountAbi.js.map +1 -0
  17. package/dist/cjs/kernel-zerodev/abis/KernelFactoryAbi.d.ts +293 -0
  18. package/dist/cjs/kernel-zerodev/abis/KernelFactoryAbi.js +384 -0
  19. package/dist/cjs/kernel-zerodev/abis/KernelFactoryAbi.js.map +1 -0
  20. package/dist/cjs/kernel-zerodev/abis/KillSwitchValidatorAbi.d.ts +150 -0
  21. package/dist/cjs/kernel-zerodev/abis/KillSwitchValidatorAbi.js +200 -0
  22. package/dist/cjs/kernel-zerodev/abis/KillSwitchValidatorAbi.js.map +1 -0
  23. package/dist/cjs/kernel-zerodev/abis/MultiSendAbi.d.ts +15 -0
  24. package/dist/cjs/kernel-zerodev/abis/MultiSendAbi.js +24 -0
  25. package/dist/cjs/kernel-zerodev/abis/MultiSendAbi.js.map +1 -0
  26. package/dist/cjs/kernel-zerodev/abis/Test_ERC20Abi.d.ts +39 -0
  27. package/dist/cjs/kernel-zerodev/abis/Test_ERC20Abi.js +161 -0
  28. package/dist/cjs/kernel-zerodev/abis/Test_ERC20Abi.js.map +1 -0
  29. package/dist/cjs/kernel-zerodev/abis/Test_ERC721Abi.d.ts +287 -0
  30. package/dist/cjs/kernel-zerodev/abis/Test_ERC721Abi.js +377 -0
  31. package/dist/cjs/kernel-zerodev/abis/Test_ERC721Abi.js.map +1 -0
  32. package/dist/cjs/kernel-zerodev/abis/TokenActionsAbi.d.ts +63 -0
  33. package/dist/cjs/kernel-zerodev/abis/TokenActionsAbi.js +85 -0
  34. package/dist/cjs/kernel-zerodev/abis/TokenActionsAbi.js.map +1 -0
  35. package/dist/cjs/kernel-zerodev/abis/index.d.ts +8 -0
  36. package/dist/cjs/kernel-zerodev/abis/index.js +18 -0
  37. package/dist/cjs/kernel-zerodev/abis/index.js.map +1 -0
  38. package/dist/cjs/kernel-zerodev/account.d.ts +36 -0
  39. package/dist/cjs/kernel-zerodev/account.js +239 -0
  40. package/dist/cjs/kernel-zerodev/account.js.map +1 -0
  41. package/dist/cjs/kernel-zerodev/api/index.d.ts +1 -0
  42. package/dist/cjs/kernel-zerodev/api/index.js +24 -0
  43. package/dist/cjs/kernel-zerodev/api/index.js.map +1 -0
  44. package/dist/cjs/kernel-zerodev/client/create-client.d.ts +11 -0
  45. package/dist/cjs/kernel-zerodev/client/create-client.js +21 -0
  46. package/dist/cjs/kernel-zerodev/client/create-client.js.map +1 -0
  47. package/dist/cjs/kernel-zerodev/constants.d.ts +23 -0
  48. package/dist/cjs/kernel-zerodev/constants.js +45 -0
  49. package/dist/cjs/kernel-zerodev/constants.js.map +1 -0
  50. package/dist/cjs/kernel-zerodev/errors.d.ts +5 -0
  51. package/dist/cjs/kernel-zerodev/errors.js +12 -0
  52. package/dist/cjs/kernel-zerodev/errors.js.map +1 -0
  53. package/dist/cjs/kernel-zerodev/ethers-provider/ethers-provider.d.ts +21 -0
  54. package/dist/cjs/kernel-zerodev/ethers-provider/ethers-provider.js +94 -0
  55. package/dist/cjs/kernel-zerodev/ethers-provider/ethers-provider.js.map +1 -0
  56. package/dist/cjs/kernel-zerodev/middleware/gas-estimator.d.ts +15 -0
  57. package/dist/cjs/kernel-zerodev/middleware/gas-estimator.js +132 -0
  58. package/dist/cjs/kernel-zerodev/middleware/gas-estimator.js.map +1 -0
  59. package/dist/cjs/kernel-zerodev/middleware/paymaster.d.ts +5 -0
  60. package/dist/cjs/kernel-zerodev/middleware/paymaster.js +43 -0
  61. package/dist/cjs/kernel-zerodev/middleware/paymaster.js.map +1 -0
  62. package/dist/cjs/kernel-zerodev/paymaster/base.d.ts +16 -0
  63. package/dist/cjs/kernel-zerodev/paymaster/base.js +58 -0
  64. package/dist/cjs/kernel-zerodev/paymaster/base.js.map +1 -0
  65. package/dist/cjs/kernel-zerodev/paymaster/index.d.ts +3 -0
  66. package/dist/cjs/kernel-zerodev/paymaster/index.js +10 -0
  67. package/dist/cjs/kernel-zerodev/paymaster/index.js.map +1 -0
  68. package/dist/cjs/kernel-zerodev/paymaster/token-paymaster.d.ts +14 -0
  69. package/dist/cjs/kernel-zerodev/paymaster/token-paymaster.js +173 -0
  70. package/dist/cjs/kernel-zerodev/paymaster/token-paymaster.js.map +1 -0
  71. package/dist/cjs/kernel-zerodev/paymaster/types.d.ts +29 -0
  72. package/dist/cjs/kernel-zerodev/paymaster/types.js +3 -0
  73. package/dist/cjs/kernel-zerodev/paymaster/types.js.map +1 -0
  74. package/dist/cjs/kernel-zerodev/paymaster/verifying-paymaster.d.ts +8 -0
  75. package/dist/cjs/kernel-zerodev/paymaster/verifying-paymaster.js +31 -0
  76. package/dist/cjs/kernel-zerodev/paymaster/verifying-paymaster.js.map +1 -0
  77. package/dist/cjs/kernel-zerodev/provider.d.ts +41 -0
  78. package/dist/cjs/kernel-zerodev/provider.js +225 -0
  79. package/dist/cjs/kernel-zerodev/provider.js.map +1 -0
  80. package/dist/cjs/kernel-zerodev/signer/zd-local-account.d.ts +13 -0
  81. package/dist/cjs/kernel-zerodev/signer/zd-local-account.js +61 -0
  82. package/dist/cjs/kernel-zerodev/signer/zd-local-account.js.map +1 -0
  83. package/dist/cjs/kernel-zerodev/types.d.ts +7 -0
  84. package/dist/cjs/kernel-zerodev/types.js +3 -0
  85. package/dist/cjs/kernel-zerodev/types.js.map +1 -0
  86. package/dist/cjs/kernel-zerodev/utils/ERC4337-utils.d.ts +5 -0
  87. package/dist/cjs/kernel-zerodev/utils/ERC4337-utils.js +106 -0
  88. package/dist/cjs/kernel-zerodev/utils/ERC4337-utils.js.map +1 -0
  89. package/dist/cjs/kernel-zerodev/utils/calc-pre-verification-gas.d.ts +15 -0
  90. package/dist/cjs/kernel-zerodev/utils/calc-pre-verification-gas.js +33 -0
  91. package/dist/cjs/kernel-zerodev/utils/calc-pre-verification-gas.js.map +1 -0
  92. package/dist/cjs/kernel-zerodev/utils.d.ts +21 -0
  93. package/dist/cjs/kernel-zerodev/utils.js +108 -0
  94. package/dist/cjs/kernel-zerodev/utils.js.map +1 -0
  95. package/dist/cjs/kernel-zerodev/validator/base.d.ts +53 -0
  96. package/dist/cjs/kernel-zerodev/validator/base.js +248 -0
  97. package/dist/cjs/kernel-zerodev/validator/base.js.map +1 -0
  98. package/dist/cjs/kernel-zerodev/validator/ecdsa-validator.d.ts +19 -0
  99. package/dist/cjs/kernel-zerodev/validator/ecdsa-validator.js +93 -0
  100. package/dist/cjs/kernel-zerodev/validator/ecdsa-validator.js.map +1 -0
  101. package/dist/cjs/kernel-zerodev/validator/erc165-session-key-validator.d.ts +27 -0
  102. package/dist/cjs/kernel-zerodev/validator/erc165-session-key-validator.js +103 -0
  103. package/dist/cjs/kernel-zerodev/validator/erc165-session-key-validator.js.map +1 -0
  104. package/dist/cjs/kernel-zerodev/validator/index.d.ts +6 -0
  105. package/dist/cjs/kernel-zerodev/validator/index.js +15 -0
  106. package/dist/cjs/kernel-zerodev/validator/index.js.map +1 -0
  107. package/dist/cjs/kernel-zerodev/validator/kill-switch-validator.d.ts +21 -0
  108. package/dist/cjs/kernel-zerodev/validator/kill-switch-validator.js +110 -0
  109. package/dist/cjs/kernel-zerodev/validator/kill-switch-validator.js.map +1 -0
  110. package/dist/cjs/kernel-zerodev/validator/types.d.ts +17 -0
  111. package/dist/cjs/kernel-zerodev/validator/types.js +3 -0
  112. package/dist/cjs/kernel-zerodev/validator/types.js.map +1 -0
  113. package/dist/cjs/kernel-zerodev/validator-provider/base.d.ts +28 -0
  114. package/dist/cjs/kernel-zerodev/validator-provider/base.js +94 -0
  115. package/dist/cjs/kernel-zerodev/validator-provider/base.js.map +1 -0
  116. package/dist/cjs/kernel-zerodev/validator-provider/ecdsa-provider.d.ts +8 -0
  117. package/dist/cjs/kernel-zerodev/validator-provider/ecdsa-provider.js +60 -0
  118. package/dist/cjs/kernel-zerodev/validator-provider/ecdsa-provider.js.map +1 -0
  119. package/dist/cjs/kernel-zerodev/validator-provider/erc165-session-key-provider.d.ts +8 -0
  120. package/dist/cjs/kernel-zerodev/validator-provider/erc165-session-key-provider.js +64 -0
  121. package/dist/cjs/kernel-zerodev/validator-provider/erc165-session-key-provider.js.map +1 -0
  122. package/dist/cjs/kernel-zerodev/validator-provider/index.d.ts +6 -0
  123. package/dist/cjs/kernel-zerodev/validator-provider/index.js +15 -0
  124. package/dist/cjs/kernel-zerodev/validator-provider/index.js.map +1 -0
  125. package/dist/cjs/kernel-zerodev/validator-provider/kill-switch-provider.d.ts +8 -0
  126. package/dist/cjs/kernel-zerodev/validator-provider/kill-switch-provider.js +64 -0
  127. package/dist/cjs/kernel-zerodev/validator-provider/kill-switch-provider.js.map +1 -0
  128. package/dist/cjs/kernel-zerodev/validator-provider/types.d.ts +21 -0
  129. package/dist/cjs/kernel-zerodev/validator-provider/types.js +3 -0
  130. package/dist/cjs/kernel-zerodev/validator-provider/types.js.map +1 -0
  131. package/dist/cjs/package.json +1 -0
  132. package/dist/esm/index.d.ts +21 -0
  133. package/dist/esm/index.js +13 -0
  134. package/dist/esm/index.js.map +1 -0
  135. package/dist/esm/kernel-zerodev/abis/ERC165SessionKeyValidatorAbi.d.ts +162 -0
  136. package/dist/esm/kernel-zerodev/abis/ERC165SessionKeyValidatorAbi.js +212 -0
  137. package/dist/esm/kernel-zerodev/abis/ERC165SessionKeyValidatorAbi.js.map +1 -0
  138. package/dist/esm/kernel-zerodev/abis/ERC20Abi.d.ts +39 -0
  139. package/dist/esm/kernel-zerodev/abis/ERC20Abi.js +154 -0
  140. package/dist/esm/kernel-zerodev/abis/ERC20Abi.js.map +1 -0
  141. package/dist/esm/kernel-zerodev/abis/ESCDAValidatorAbi.d.ts +158 -0
  142. package/dist/esm/kernel-zerodev/abis/ESCDAValidatorAbi.js +207 -0
  143. package/dist/esm/kernel-zerodev/abis/ESCDAValidatorAbi.js.map +1 -0
  144. package/dist/esm/kernel-zerodev/abis/KernelAccountAbi.d.ts +496 -0
  145. package/dist/esm/kernel-zerodev/abis/KernelAccountAbi.js +643 -0
  146. package/dist/esm/kernel-zerodev/abis/KernelAccountAbi.js.map +1 -0
  147. package/dist/esm/kernel-zerodev/abis/KernelFactoryAbi.d.ts +293 -0
  148. package/dist/esm/kernel-zerodev/abis/KernelFactoryAbi.js +381 -0
  149. package/dist/esm/kernel-zerodev/abis/KernelFactoryAbi.js.map +1 -0
  150. package/dist/esm/kernel-zerodev/abis/KillSwitchValidatorAbi.d.ts +150 -0
  151. package/dist/esm/kernel-zerodev/abis/KillSwitchValidatorAbi.js +197 -0
  152. package/dist/esm/kernel-zerodev/abis/KillSwitchValidatorAbi.js.map +1 -0
  153. package/dist/esm/kernel-zerodev/abis/MultiSendAbi.d.ts +15 -0
  154. package/dist/esm/kernel-zerodev/abis/MultiSendAbi.js +21 -0
  155. package/dist/esm/kernel-zerodev/abis/MultiSendAbi.js.map +1 -0
  156. package/dist/esm/kernel-zerodev/abis/Test_ERC20Abi.d.ts +39 -0
  157. package/dist/esm/kernel-zerodev/abis/Test_ERC20Abi.js +158 -0
  158. package/dist/esm/kernel-zerodev/abis/Test_ERC20Abi.js.map +1 -0
  159. package/dist/esm/kernel-zerodev/abis/Test_ERC721Abi.d.ts +287 -0
  160. package/dist/esm/kernel-zerodev/abis/Test_ERC721Abi.js +374 -0
  161. package/dist/esm/kernel-zerodev/abis/Test_ERC721Abi.js.map +1 -0
  162. package/dist/esm/kernel-zerodev/abis/TokenActionsAbi.d.ts +63 -0
  163. package/dist/esm/kernel-zerodev/abis/TokenActionsAbi.js +82 -0
  164. package/dist/esm/kernel-zerodev/abis/TokenActionsAbi.js.map +1 -0
  165. package/dist/esm/kernel-zerodev/abis/index.d.ts +8 -0
  166. package/dist/esm/kernel-zerodev/abis/index.js +9 -0
  167. package/dist/esm/kernel-zerodev/abis/index.js.map +1 -0
  168. package/dist/esm/kernel-zerodev/account.d.ts +36 -0
  169. package/dist/esm/kernel-zerodev/account.js +234 -0
  170. package/dist/esm/kernel-zerodev/account.js.map +1 -0
  171. package/dist/esm/kernel-zerodev/api/index.d.ts +1 -0
  172. package/dist/esm/kernel-zerodev/api/index.js +17 -0
  173. package/dist/esm/kernel-zerodev/api/index.js.map +1 -0
  174. package/dist/esm/kernel-zerodev/client/create-client.d.ts +11 -0
  175. package/dist/esm/kernel-zerodev/client/create-client.js +17 -0
  176. package/dist/esm/kernel-zerodev/client/create-client.js.map +1 -0
  177. package/dist/esm/kernel-zerodev/constants.d.ts +23 -0
  178. package/dist/esm/kernel-zerodev/constants.js +42 -0
  179. package/dist/esm/kernel-zerodev/constants.js.map +1 -0
  180. package/dist/esm/kernel-zerodev/errors.d.ts +5 -0
  181. package/dist/esm/kernel-zerodev/errors.js +6 -0
  182. package/dist/esm/kernel-zerodev/errors.js.map +1 -0
  183. package/dist/esm/kernel-zerodev/ethers-provider/ethers-provider.d.ts +21 -0
  184. package/dist/esm/kernel-zerodev/ethers-provider/ethers-provider.js +90 -0
  185. package/dist/esm/kernel-zerodev/ethers-provider/ethers-provider.js.map +1 -0
  186. package/dist/esm/kernel-zerodev/middleware/gas-estimator.d.ts +15 -0
  187. package/dist/esm/kernel-zerodev/middleware/gas-estimator.js +124 -0
  188. package/dist/esm/kernel-zerodev/middleware/gas-estimator.js.map +1 -0
  189. package/dist/esm/kernel-zerodev/middleware/paymaster.d.ts +5 -0
  190. package/dist/esm/kernel-zerodev/middleware/paymaster.js +39 -0
  191. package/dist/esm/kernel-zerodev/middleware/paymaster.js.map +1 -0
  192. package/dist/esm/kernel-zerodev/paymaster/base.d.ts +16 -0
  193. package/dist/esm/kernel-zerodev/paymaster/base.js +51 -0
  194. package/dist/esm/kernel-zerodev/paymaster/base.js.map +1 -0
  195. package/dist/esm/kernel-zerodev/paymaster/index.d.ts +3 -0
  196. package/dist/esm/kernel-zerodev/paymaster/index.js +7 -0
  197. package/dist/esm/kernel-zerodev/paymaster/index.js.map +1 -0
  198. package/dist/esm/kernel-zerodev/paymaster/token-paymaster.d.ts +14 -0
  199. package/dist/esm/kernel-zerodev/paymaster/token-paymaster.js +168 -0
  200. package/dist/esm/kernel-zerodev/paymaster/token-paymaster.js.map +1 -0
  201. package/dist/esm/kernel-zerodev/paymaster/types.d.ts +29 -0
  202. package/dist/esm/kernel-zerodev/paymaster/types.js +2 -0
  203. package/dist/esm/kernel-zerodev/paymaster/types.js.map +1 -0
  204. package/dist/esm/kernel-zerodev/paymaster/verifying-paymaster.d.ts +8 -0
  205. package/dist/esm/kernel-zerodev/paymaster/verifying-paymaster.js +27 -0
  206. package/dist/esm/kernel-zerodev/paymaster/verifying-paymaster.js.map +1 -0
  207. package/dist/esm/kernel-zerodev/provider.d.ts +41 -0
  208. package/dist/esm/kernel-zerodev/provider.js +222 -0
  209. package/dist/esm/kernel-zerodev/provider.js.map +1 -0
  210. package/dist/esm/kernel-zerodev/signer/zd-local-account.d.ts +13 -0
  211. package/dist/esm/kernel-zerodev/signer/zd-local-account.js +58 -0
  212. package/dist/esm/kernel-zerodev/signer/zd-local-account.js.map +1 -0
  213. package/dist/esm/kernel-zerodev/types.d.ts +7 -0
  214. package/dist/esm/kernel-zerodev/types.js +2 -0
  215. package/dist/esm/kernel-zerodev/types.js.map +1 -0
  216. package/dist/esm/kernel-zerodev/utils/ERC4337-utils.d.ts +5 -0
  217. package/dist/esm/kernel-zerodev/utils/ERC4337-utils.js +100 -0
  218. package/dist/esm/kernel-zerodev/utils/ERC4337-utils.js.map +1 -0
  219. package/dist/esm/kernel-zerodev/utils/calc-pre-verification-gas.d.ts +15 -0
  220. package/dist/esm/kernel-zerodev/utils/calc-pre-verification-gas.js +29 -0
  221. package/dist/esm/kernel-zerodev/utils/calc-pre-verification-gas.js.map +1 -0
  222. package/dist/esm/kernel-zerodev/utils.d.ts +21 -0
  223. package/dist/esm/kernel-zerodev/utils.js +96 -0
  224. package/dist/esm/kernel-zerodev/utils.js.map +1 -0
  225. package/dist/esm/kernel-zerodev/validator/base.d.ts +53 -0
  226. package/dist/esm/kernel-zerodev/validator/base.js +245 -0
  227. package/dist/esm/kernel-zerodev/validator/base.js.map +1 -0
  228. package/dist/esm/kernel-zerodev/validator/ecdsa-validator.d.ts +19 -0
  229. package/dist/esm/kernel-zerodev/validator/ecdsa-validator.js +89 -0
  230. package/dist/esm/kernel-zerodev/validator/ecdsa-validator.js.map +1 -0
  231. package/dist/esm/kernel-zerodev/validator/erc165-session-key-validator.d.ts +27 -0
  232. package/dist/esm/kernel-zerodev/validator/erc165-session-key-validator.js +99 -0
  233. package/dist/esm/kernel-zerodev/validator/erc165-session-key-validator.js.map +1 -0
  234. package/dist/esm/kernel-zerodev/validator/index.d.ts +6 -0
  235. package/dist/esm/kernel-zerodev/validator/index.js +10 -0
  236. package/dist/esm/kernel-zerodev/validator/index.js.map +1 -0
  237. package/dist/esm/kernel-zerodev/validator/kill-switch-validator.d.ts +21 -0
  238. package/dist/esm/kernel-zerodev/validator/kill-switch-validator.js +106 -0
  239. package/dist/esm/kernel-zerodev/validator/kill-switch-validator.js.map +1 -0
  240. package/dist/esm/kernel-zerodev/validator/types.d.ts +17 -0
  241. package/dist/esm/kernel-zerodev/validator/types.js +2 -0
  242. package/dist/esm/kernel-zerodev/validator/types.js.map +1 -0
  243. package/dist/esm/kernel-zerodev/validator-provider/base.d.ts +28 -0
  244. package/dist/esm/kernel-zerodev/validator-provider/base.js +91 -0
  245. package/dist/esm/kernel-zerodev/validator-provider/base.js.map +1 -0
  246. package/dist/esm/kernel-zerodev/validator-provider/ecdsa-provider.d.ts +8 -0
  247. package/dist/esm/kernel-zerodev/validator-provider/ecdsa-provider.js +56 -0
  248. package/dist/esm/kernel-zerodev/validator-provider/ecdsa-provider.js.map +1 -0
  249. package/dist/esm/kernel-zerodev/validator-provider/erc165-session-key-provider.d.ts +8 -0
  250. package/dist/esm/kernel-zerodev/validator-provider/erc165-session-key-provider.js +60 -0
  251. package/dist/esm/kernel-zerodev/validator-provider/erc165-session-key-provider.js.map +1 -0
  252. package/dist/esm/kernel-zerodev/validator-provider/index.d.ts +6 -0
  253. package/dist/esm/kernel-zerodev/validator-provider/index.js +10 -0
  254. package/dist/esm/kernel-zerodev/validator-provider/index.js.map +1 -0
  255. package/dist/esm/kernel-zerodev/validator-provider/kill-switch-provider.d.ts +8 -0
  256. package/dist/esm/kernel-zerodev/validator-provider/kill-switch-provider.js +60 -0
  257. package/dist/esm/kernel-zerodev/validator-provider/kill-switch-provider.js.map +1 -0
  258. package/dist/esm/kernel-zerodev/validator-provider/types.d.ts +21 -0
  259. package/dist/esm/kernel-zerodev/validator-provider/types.js +2 -0
  260. package/dist/esm/kernel-zerodev/validator-provider/types.js.map +1 -0
  261. package/dist/esm/package.json +1 -0
  262. package/dist/types/index.d.ts +22 -0
  263. package/dist/types/index.d.ts.map +1 -0
  264. package/dist/types/kernel-zerodev/abis/ERC165SessionKeyValidatorAbi.d.ts +163 -0
  265. package/dist/types/kernel-zerodev/abis/ERC165SessionKeyValidatorAbi.d.ts.map +1 -0
  266. package/dist/types/kernel-zerodev/abis/ERC20Abi.d.ts +40 -0
  267. package/dist/types/kernel-zerodev/abis/ERC20Abi.d.ts.map +1 -0
  268. package/dist/types/kernel-zerodev/abis/ESCDAValidatorAbi.d.ts +159 -0
  269. package/dist/types/kernel-zerodev/abis/ESCDAValidatorAbi.d.ts.map +1 -0
  270. package/dist/types/kernel-zerodev/abis/KernelAccountAbi.d.ts +497 -0
  271. package/dist/types/kernel-zerodev/abis/KernelAccountAbi.d.ts.map +1 -0
  272. package/dist/types/kernel-zerodev/abis/KernelFactoryAbi.d.ts +294 -0
  273. package/dist/types/kernel-zerodev/abis/KernelFactoryAbi.d.ts.map +1 -0
  274. package/dist/types/kernel-zerodev/abis/KillSwitchValidatorAbi.d.ts +151 -0
  275. package/dist/types/kernel-zerodev/abis/KillSwitchValidatorAbi.d.ts.map +1 -0
  276. package/dist/types/kernel-zerodev/abis/MultiSendAbi.d.ts +16 -0
  277. package/dist/types/kernel-zerodev/abis/MultiSendAbi.d.ts.map +1 -0
  278. package/dist/types/kernel-zerodev/abis/Test_ERC20Abi.d.ts +40 -0
  279. package/dist/types/kernel-zerodev/abis/Test_ERC20Abi.d.ts.map +1 -0
  280. package/dist/types/kernel-zerodev/abis/Test_ERC721Abi.d.ts +288 -0
  281. package/dist/types/kernel-zerodev/abis/Test_ERC721Abi.d.ts.map +1 -0
  282. package/dist/types/kernel-zerodev/abis/TokenActionsAbi.d.ts +64 -0
  283. package/dist/types/kernel-zerodev/abis/TokenActionsAbi.d.ts.map +1 -0
  284. package/dist/types/kernel-zerodev/abis/index.d.ts +9 -0
  285. package/dist/types/kernel-zerodev/abis/index.d.ts.map +1 -0
  286. package/dist/types/kernel-zerodev/account.d.ts +37 -0
  287. package/dist/types/kernel-zerodev/account.d.ts.map +1 -0
  288. package/dist/types/kernel-zerodev/api/index.d.ts +2 -0
  289. package/dist/types/kernel-zerodev/api/index.d.ts.map +1 -0
  290. package/dist/types/kernel-zerodev/client/create-client.d.ts +12 -0
  291. package/dist/types/kernel-zerodev/client/create-client.d.ts.map +1 -0
  292. package/dist/types/kernel-zerodev/constants.d.ts +24 -0
  293. package/dist/types/kernel-zerodev/constants.d.ts.map +1 -0
  294. package/dist/types/kernel-zerodev/errors.d.ts +6 -0
  295. package/dist/types/kernel-zerodev/errors.d.ts.map +1 -0
  296. package/dist/types/kernel-zerodev/ethers-provider/ethers-provider.d.ts +39 -0
  297. package/dist/types/kernel-zerodev/ethers-provider/ethers-provider.d.ts.map +1 -0
  298. package/dist/types/kernel-zerodev/middleware/gas-estimator.d.ts +20 -0
  299. package/dist/types/kernel-zerodev/middleware/gas-estimator.d.ts.map +1 -0
  300. package/dist/types/kernel-zerodev/middleware/paymaster.d.ts +6 -0
  301. package/dist/types/kernel-zerodev/middleware/paymaster.d.ts.map +1 -0
  302. package/dist/types/kernel-zerodev/paymaster/base.d.ts +17 -0
  303. package/dist/types/kernel-zerodev/paymaster/base.d.ts.map +1 -0
  304. package/dist/types/kernel-zerodev/paymaster/index.d.ts +4 -0
  305. package/dist/types/kernel-zerodev/paymaster/index.d.ts.map +1 -0
  306. package/dist/types/kernel-zerodev/paymaster/token-paymaster.d.ts +15 -0
  307. package/dist/types/kernel-zerodev/paymaster/token-paymaster.d.ts.map +1 -0
  308. package/dist/types/kernel-zerodev/paymaster/types.d.ts +30 -0
  309. package/dist/types/kernel-zerodev/paymaster/types.d.ts.map +1 -0
  310. package/dist/types/kernel-zerodev/paymaster/verifying-paymaster.d.ts +9 -0
  311. package/dist/types/kernel-zerodev/paymaster/verifying-paymaster.d.ts.map +1 -0
  312. package/dist/types/kernel-zerodev/provider.d.ts +42 -0
  313. package/dist/types/kernel-zerodev/provider.d.ts.map +1 -0
  314. package/dist/types/kernel-zerodev/signer/zd-local-account.d.ts +14 -0
  315. package/dist/types/kernel-zerodev/signer/zd-local-account.d.ts.map +1 -0
  316. package/dist/types/kernel-zerodev/types.d.ts +8 -0
  317. package/dist/types/kernel-zerodev/types.d.ts.map +1 -0
  318. package/dist/types/kernel-zerodev/utils/ERC4337-utils.d.ts +18 -0
  319. package/dist/types/kernel-zerodev/utils/ERC4337-utils.d.ts.map +1 -0
  320. package/dist/types/kernel-zerodev/utils/calc-pre-verification-gas.d.ts +44 -0
  321. package/dist/types/kernel-zerodev/utils/calc-pre-verification-gas.d.ts.map +1 -0
  322. package/dist/types/kernel-zerodev/utils.d.ts +22 -0
  323. package/dist/types/kernel-zerodev/utils.d.ts.map +1 -0
  324. package/dist/types/kernel-zerodev/validator/base.d.ts +54 -0
  325. package/dist/types/kernel-zerodev/validator/base.d.ts.map +1 -0
  326. package/dist/types/kernel-zerodev/validator/ecdsa-validator.d.ts +20 -0
  327. package/dist/types/kernel-zerodev/validator/ecdsa-validator.d.ts.map +1 -0
  328. package/dist/types/kernel-zerodev/validator/erc165-session-key-validator.d.ts +28 -0
  329. package/dist/types/kernel-zerodev/validator/erc165-session-key-validator.d.ts.map +1 -0
  330. package/dist/types/kernel-zerodev/validator/index.d.ts +7 -0
  331. package/dist/types/kernel-zerodev/validator/index.d.ts.map +1 -0
  332. package/dist/types/kernel-zerodev/validator/kill-switch-validator.d.ts +22 -0
  333. package/dist/types/kernel-zerodev/validator/kill-switch-validator.d.ts.map +1 -0
  334. package/dist/types/kernel-zerodev/validator/types.d.ts +18 -0
  335. package/dist/types/kernel-zerodev/validator/types.d.ts.map +1 -0
  336. package/dist/types/kernel-zerodev/validator-provider/base.d.ts +29 -0
  337. package/dist/types/kernel-zerodev/validator-provider/base.d.ts.map +1 -0
  338. package/dist/types/kernel-zerodev/validator-provider/ecdsa-provider.d.ts +9 -0
  339. package/dist/types/kernel-zerodev/validator-provider/ecdsa-provider.d.ts.map +1 -0
  340. package/dist/types/kernel-zerodev/validator-provider/erc165-session-key-provider.d.ts +9 -0
  341. package/dist/types/kernel-zerodev/validator-provider/erc165-session-key-provider.d.ts.map +1 -0
  342. package/dist/types/kernel-zerodev/validator-provider/index.d.ts +7 -0
  343. package/dist/types/kernel-zerodev/validator-provider/index.d.ts.map +1 -0
  344. package/dist/types/kernel-zerodev/validator-provider/kill-switch-provider.d.ts +9 -0
  345. package/dist/types/kernel-zerodev/validator-provider/kill-switch-provider.d.ts.map +1 -0
  346. package/dist/types/kernel-zerodev/validator-provider/types.d.ts +22 -0
  347. package/dist/types/kernel-zerodev/validator-provider/types.d.ts.map +1 -0
  348. package/package.json +70 -0
  349. package/src/index.ts +41 -0
  350. package/src/kernel-zerodev/__tests__/mocks/mock-signer-validator.ts +20 -0
  351. package/src/kernel-zerodev/__tests__/mocks/mock-signer.ts +14 -0
  352. package/src/kernel-zerodev/abis/ERC165SessionKeyValidatorAbi.ts +211 -0
  353. package/src/kernel-zerodev/abis/ERC20Abi.ts +153 -0
  354. package/src/kernel-zerodev/abis/ESCDAValidatorAbi.ts +206 -0
  355. package/src/kernel-zerodev/abis/KernelAccountAbi.ts +642 -0
  356. package/src/kernel-zerodev/abis/KernelFactoryAbi.ts +380 -0
  357. package/src/kernel-zerodev/abis/KillSwitchValidatorAbi.ts +196 -0
  358. package/src/kernel-zerodev/abis/MultiSendAbi.ts +20 -0
  359. package/src/kernel-zerodev/abis/Test_ERC20Abi.ts +157 -0
  360. package/src/kernel-zerodev/abis/Test_ERC721Abi.ts +373 -0
  361. package/src/kernel-zerodev/abis/TokenActionsAbi.ts +81 -0
  362. package/src/kernel-zerodev/abis/index.ts +17 -0
  363. package/src/kernel-zerodev/account.ts +308 -0
  364. package/src/kernel-zerodev/api/index.ts +25 -0
  365. package/src/kernel-zerodev/client/create-client.ts +37 -0
  366. package/src/kernel-zerodev/constants.ts +71 -0
  367. package/src/kernel-zerodev/errors.ts +13 -0
  368. package/src/kernel-zerodev/ethers-provider/ethers-provider.ts +118 -0
  369. package/src/kernel-zerodev/middleware/gas-estimator.ts +183 -0
  370. package/src/kernel-zerodev/middleware/paymaster.ts +66 -0
  371. package/src/kernel-zerodev/paymaster/base.ts +76 -0
  372. package/src/kernel-zerodev/paymaster/index.ts +9 -0
  373. package/src/kernel-zerodev/paymaster/token-paymaster.ts +209 -0
  374. package/src/kernel-zerodev/paymaster/types.ts +36 -0
  375. package/src/kernel-zerodev/paymaster/verifying-paymaster.ts +38 -0
  376. package/src/kernel-zerodev/provider.ts +307 -0
  377. package/src/kernel-zerodev/signer/zd-local-account.ts +63 -0
  378. package/src/kernel-zerodev/types.ts +8 -0
  379. package/src/kernel-zerodev/utils/ERC4337-utils.ts +161 -0
  380. package/src/kernel-zerodev/utils/calc-pre-verification-gas.ts +88 -0
  381. package/src/kernel-zerodev/utils.ts +166 -0
  382. package/src/kernel-zerodev/validator/base.ts +273 -0
  383. package/src/kernel-zerodev/validator/ecdsa-validator.ts +117 -0
  384. package/src/kernel-zerodev/validator/erc165-session-key-validator.ts +127 -0
  385. package/src/kernel-zerodev/validator/index.ts +12 -0
  386. package/src/kernel-zerodev/validator/kill-switch-validator.ts +142 -0
  387. package/src/kernel-zerodev/validator/types.ts +36 -0
  388. package/src/kernel-zerodev/validator-provider/base.ts +140 -0
  389. package/src/kernel-zerodev/validator-provider/ecdsa-provider.ts +61 -0
  390. package/src/kernel-zerodev/validator-provider/erc165-session-key-provider.ts +68 -0
  391. package/src/kernel-zerodev/validator-provider/index.ts +12 -0
  392. package/src/kernel-zerodev/validator-provider/kill-switch-provider.ts +68 -0
  393. package/src/kernel-zerodev/validator-provider/types.ts +26 -0
@@ -0,0 +1,166 @@
1
+ import {
2
+ encodePacked,
3
+ fromBytes,
4
+ toBytes,
5
+ type Hex,
6
+ type WalletClient,
7
+ toHex,
8
+ } from "viem";
9
+ import type {
10
+ SmartAccountSigner,
11
+ UserOperationCallData,
12
+ } from "@alchemy/aa-core";
13
+ import { Signer } from "@ethersproject/abstract-signer";
14
+ import { Web3Provider, type ExternalProvider } from "@ethersproject/providers";
15
+ import { API_URL, gasTokenChainAddresses } from "./constants.js";
16
+ import type { SupportedGasToken } from "./paymaster/types.js";
17
+ import axios from "axios";
18
+
19
+ export type UserOperationCallDataWithDelegate = UserOperationCallData & {
20
+ delegateCall?: boolean;
21
+ };
22
+
23
+ export type BatchUserOperationCallDataWithDelegate =
24
+ UserOperationCallDataWithDelegate[];
25
+
26
+ const encodeCall = (_tx: UserOperationCallDataWithDelegate): string => {
27
+ const data = toBytes(_tx.data);
28
+ const encoded = encodePacked(
29
+ ["uint8", "address", "uint256", "uint256", "bytes"],
30
+ [
31
+ _tx.delegateCall ? 1 : 0,
32
+ _tx.target,
33
+ _tx.value || BigInt(0),
34
+ BigInt(data.length),
35
+ fromBytes(data, "hex"),
36
+ ]
37
+ );
38
+ return encoded.slice(2);
39
+ };
40
+ export const encodeMultiSend = (
41
+ _txs: BatchUserOperationCallDataWithDelegate
42
+ ): Hex => {
43
+ return ("0x" + _txs.map((tx) => encodeCall(tx)).join("")) as Hex;
44
+ };
45
+
46
+ export function getGasTokenAddress(
47
+ gasToken: SupportedGasToken,
48
+ chainId: number
49
+ ): Hex | undefined {
50
+ if (gasToken === "TEST_ERC20") {
51
+ return "0x3870419Ba2BBf0127060bCB37f69A1b1C090992B";
52
+ }
53
+ return gasTokenChainAddresses[gasToken][chainId] || undefined;
54
+ }
55
+
56
+ export const convertWalletClientToAccountSigner = (
57
+ client: WalletClient
58
+ ): SmartAccountSigner => {
59
+ return {
60
+ getAddress: async () =>
61
+ Promise.resolve((await client.getAddresses())[0] as `0x${string}`),
62
+ signMessage: async (message: Uint8Array | string) =>
63
+ (await client.signMessage({
64
+ account: client.account!,
65
+ message:
66
+ typeof message === "string"
67
+ ? message
68
+ : {
69
+ raw: message,
70
+ },
71
+ })) as `0x${string}`,
72
+ };
73
+ };
74
+
75
+ export const convertEthersSignerToAccountSigner = (
76
+ signer: Signer
77
+ ): SmartAccountSigner => {
78
+ return {
79
+ getAddress: async () =>
80
+ Promise.resolve((await signer.getAddress()) as `0x${string}`),
81
+ signMessage: async (msg: Uint8Array | string) =>
82
+ (await signer.signMessage(msg)) as `0x${string}`,
83
+ };
84
+ };
85
+
86
+ export function getRPCProviderOwner(web3Provider: any): SmartAccountSigner {
87
+ const provider = new Web3Provider(web3Provider as ExternalProvider);
88
+ const signer = provider.getSigner();
89
+
90
+ return {
91
+ getAddress: async () =>
92
+ Promise.resolve((await signer.getAddress()) as `0x${string}`),
93
+ signMessage: async (msg: Uint8Array | string) =>
94
+ (await signer.signMessage(msg)) as `0x${string}`,
95
+ };
96
+ }
97
+
98
+ export async function getCustodialOwner(
99
+ identifier: string,
100
+ {
101
+ custodialFilePath,
102
+ privateKey,
103
+ publicKey,
104
+ keyId,
105
+ apiUrl = API_URL,
106
+ }: {
107
+ privateKey?: string;
108
+ publicKey?: string;
109
+ keyId?: string;
110
+ custodialFilePath?: string;
111
+ apiUrl?: string;
112
+ }
113
+ ): Promise<SmartAccountSigner | undefined> {
114
+ if (custodialFilePath) {
115
+ let fsModule;
116
+ try {
117
+ fsModule = require.resolve("fs") && require("fs");
118
+ } catch (error) {
119
+ console.log("FS module not available. Skipping FS operation...");
120
+ return;
121
+ }
122
+ const data = fsModule.readFileSync(custodialFilePath, "utf8");
123
+ const values = data.split("\n");
124
+ [privateKey, publicKey, keyId] = values;
125
+ }
126
+ let TurnkeySigner;
127
+ try {
128
+ TurnkeySigner =
129
+ require.resolve("@turnkey/ethers") &&
130
+ require("@turnkey/ethers").TurnkeySigner;
131
+ } catch (error) {
132
+ console.log(
133
+ "@turnkey/ethers module not available. Skipping FS operation..."
134
+ );
135
+ return;
136
+ }
137
+ if (!privateKey || !publicKey || !keyId) {
138
+ throw new Error(
139
+ "Must provide custodialFilePath or privateKey, publicKey, and keyId."
140
+ );
141
+ }
142
+
143
+ const response = await axios.post(`${apiUrl}/wallets/${identifier}`, {
144
+ keyId,
145
+ });
146
+
147
+ const turnkeySigner = new TurnkeySigner({
148
+ apiPublicKey: publicKey,
149
+ apiPrivateKey: privateKey,
150
+ baseUrl: "https://coordinator-beta.turnkey.io",
151
+ organizationId: keyId,
152
+ privateKeyId: response.data.walletId,
153
+ });
154
+ return {
155
+ getAddress: async () => (await turnkeySigner.getAddress()) as `0x${string}`,
156
+ signMessage: async (msg: Uint8Array | string) =>
157
+ (await turnkeySigner.signMessage(msg)) as `0x${string}`,
158
+ };
159
+ }
160
+
161
+ export const randomHexString = (length: number): Hex =>
162
+ toHex(
163
+ Array.from({ length }, () =>
164
+ Math.floor(Math.random() * 16).toString(16)
165
+ ).join("")
166
+ );
@@ -0,0 +1,273 @@
1
+ import {
2
+ type SmartAccountSigner,
3
+ type UserOperationRequest,
4
+ } from "@alchemy/aa-core";
5
+ import {
6
+ concat,
7
+ type Chain,
8
+ type Hex,
9
+ pad,
10
+ toHex,
11
+ type Address,
12
+ concatHex,
13
+ hexToBigInt,
14
+ type PublicClient,
15
+ type Transport,
16
+ createPublicClient,
17
+ http,
18
+ } from "viem";
19
+ import { KernelAccountAbi } from "../abis/KernelAccountAbi.js";
20
+ import {
21
+ BUNDLER_URL,
22
+ ECDSA_VALIDATOR_ADDRESS,
23
+ ENTRYPOINT_ADDRESS,
24
+ } from "../constants.js";
25
+ import type { PaymasterAndBundlerProviders } from "../paymaster/types.js";
26
+
27
+ export enum ValidatorMode {
28
+ sudo = "0x00000000",
29
+ plugin = "0x00000001",
30
+ enable = "0x00000002",
31
+ }
32
+
33
+ export interface KernelBaseValidatorParams {
34
+ projectId: string;
35
+ validatorAddress?: Hex;
36
+ mode?: ValidatorMode;
37
+ chain?: Chain;
38
+ entryPointAddress?: Address;
39
+ enableSignature?: Hex;
40
+ validUntil?: number;
41
+ validAfter?: number;
42
+ executor?: Address;
43
+ selector?: string;
44
+ rpcUrl?: string;
45
+ bundlerProvider?: PaymasterAndBundlerProviders;
46
+ }
47
+
48
+ //Kernel wallet implementation separates out validation and execution phase. It allows you to have
49
+ // custom wrapper logic for the validation phase in addition to signature of choice.
50
+ export abstract class KernelBaseValidator {
51
+ readonly validatorAddress: Hex;
52
+ mode: ValidatorMode;
53
+ protected projectId: string;
54
+ protected chain?: Chain;
55
+ protected entryPointAddress: Address;
56
+ protected enableSignature?: Hex;
57
+ protected validUntil: number;
58
+ protected validAfter: number;
59
+ protected executor?: Address;
60
+ protected selector?: string;
61
+ protected rpcUrl?: string;
62
+ protected bundlerProvider?: PaymasterAndBundlerProviders;
63
+ protected publicClient?: PublicClient<Transport, Chain, true>;
64
+
65
+ constructor(params: KernelBaseValidatorParams) {
66
+ this.projectId = params.projectId;
67
+ this.validatorAddress = params.validatorAddress ?? ECDSA_VALIDATOR_ADDRESS;
68
+ this.mode = params.mode ?? ValidatorMode.sudo;
69
+ this.entryPointAddress = params.entryPointAddress ?? ENTRYPOINT_ADDRESS;
70
+ this.enableSignature = params.enableSignature;
71
+ this.validUntil = params.validUntil ?? 0;
72
+ this.validAfter = params.validAfter ?? 0;
73
+ this.executor = params.executor;
74
+ this.selector = params.selector;
75
+ this.chain = params.chain;
76
+ this.rpcUrl = params.rpcUrl ?? BUNDLER_URL;
77
+ this.bundlerProvider = params.bundlerProvider;
78
+ this.publicClient = createPublicClient({
79
+ transport: http(this.rpcUrl, {
80
+ fetchOptions: {
81
+ headers:
82
+ this.rpcUrl === BUNDLER_URL
83
+ ? {
84
+ projectId: this.projectId,
85
+ bundlerProvider: this.bundlerProvider,
86
+ }
87
+ : {},
88
+ },
89
+ }),
90
+ chain: this.chain,
91
+ });
92
+ }
93
+
94
+ abstract encodeEnable(enableData: Hex): Hex;
95
+
96
+ abstract encodeDisable(enableData: Hex): Hex;
97
+
98
+ abstract getEnableData(): Promise<Hex>;
99
+
100
+ abstract signMessage(message: Uint8Array | string | Hex): Promise<Hex>;
101
+
102
+ abstract signUserOp(userOp: UserOperationRequest): Promise<Hex>;
103
+
104
+ abstract signer(): Promise<SmartAccountSigner>;
105
+
106
+ abstract getDummyUserOpSignature(): Promise<Hex>;
107
+
108
+ abstract isPluginEnabled(
109
+ kernelAccountAddress: Address,
110
+ selector: Hex
111
+ ): Promise<boolean>;
112
+
113
+ async getDynamicDummySignature(
114
+ kernelAccountAddress: Address,
115
+ calldata: Hex
116
+ ): Promise<Hex> {
117
+ const dummyECDSASig =
118
+ "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c";
119
+ const validatorMode = await this.resolveValidatorMode(
120
+ kernelAccountAddress,
121
+ calldata
122
+ );
123
+ if (validatorMode === ValidatorMode.enable) {
124
+ const enableData = await this.getEnableData();
125
+ const enableDataLength = enableData.length / 2 - 1;
126
+ const enableSigLength = 65;
127
+ const staticDummySig = concatHex([
128
+ "0x000000000000000000000000",
129
+ this.getAddress(),
130
+ "0x53dd285022D1512635823952d109dB39467a457E",
131
+ ]);
132
+
133
+ return concatHex([
134
+ ValidatorMode.enable,
135
+ staticDummySig,
136
+ pad(toHex(enableDataLength), { size: 32 }),
137
+ enableData,
138
+ pad(toHex(enableSigLength), { size: 32 }),
139
+ dummyECDSASig,
140
+ await this.getDummyUserOpSignature(),
141
+ ]);
142
+ }
143
+ return concatHex([validatorMode, await this.getDummyUserOpSignature()]);
144
+ }
145
+
146
+ setEnableSignature(enableSignature: Hex) {
147
+ this.enableSignature = enableSignature;
148
+ }
149
+
150
+ getEnableSignature(): Hex | undefined {
151
+ return this.enableSignature;
152
+ }
153
+
154
+ getAddress(): Hex {
155
+ return this.validatorAddress;
156
+ }
157
+
158
+ async approveExecutor(
159
+ kernel: Address,
160
+ selector: Hex,
161
+ executor: Address,
162
+ validUntil: number,
163
+ validAfter: number,
164
+ validator: KernelBaseValidator
165
+ ): Promise<Hex> {
166
+ if (!this.chain) {
167
+ throw new Error("Validator uninitialized");
168
+ }
169
+ const sender = kernel;
170
+ const signer = await this.signer();
171
+ const ownerSig = await (signer as any).signTypedData({
172
+ domain: {
173
+ name: "Kernel",
174
+ version: "0.2.1",
175
+ chainId: this.chain.id,
176
+ verifyingContract: sender,
177
+ },
178
+ types: {
179
+ ValidatorApproved: [
180
+ { name: "sig", type: "bytes4" },
181
+ { name: "validatorData", type: "uint256" },
182
+ { name: "executor", type: "address" },
183
+ { name: "enableData", type: "bytes" },
184
+ ],
185
+ },
186
+ message: {
187
+ sig: selector as Hex,
188
+ validatorData: hexToBigInt(
189
+ concatHex([
190
+ pad(toHex(validUntil), { size: 6 }),
191
+ pad(toHex(validAfter), { size: 6 }),
192
+ validator.getAddress(),
193
+ ]),
194
+ { size: 32 }
195
+ ),
196
+ executor: executor as Address,
197
+ enableData: await validator.getEnableData(),
198
+ },
199
+ primaryType: "ValidatorApproved",
200
+ });
201
+ return ownerSig;
202
+ }
203
+
204
+ async resolveValidatorMode(
205
+ kernelAccountAddress: Address,
206
+ callData: Hex
207
+ ): Promise<ValidatorMode> {
208
+ if (!this.chain || !this.publicClient) {
209
+ throw new Error("Validator uninitialized");
210
+ }
211
+
212
+ let mode: ValidatorMode;
213
+ try {
214
+ const defaultValidatorAddress = await this.publicClient.readContract({
215
+ abi: KernelAccountAbi,
216
+ address: kernelAccountAddress,
217
+ functionName: "getDefaultValidator",
218
+ });
219
+ if (
220
+ defaultValidatorAddress?.toLowerCase() ===
221
+ this.validatorAddress.toLowerCase() ||
222
+ this.mode === ValidatorMode.sudo
223
+ ) {
224
+ mode = ValidatorMode.sudo;
225
+ } else if (
226
+ await this.isPluginEnabled(
227
+ kernelAccountAddress,
228
+ callData.toString().slice(0, 10) as Hex
229
+ )
230
+ ) {
231
+ mode = ValidatorMode.plugin;
232
+ } else {
233
+ mode = ValidatorMode.enable;
234
+ }
235
+ } catch (error) {
236
+ if (this.mode === ValidatorMode.plugin) {
237
+ mode = ValidatorMode.enable;
238
+ } else {
239
+ mode = this.mode;
240
+ }
241
+ }
242
+ return mode;
243
+ }
244
+
245
+ async getSignature(userOp: UserOperationRequest): Promise<Hex> {
246
+ const mode = await this.resolveValidatorMode(
247
+ userOp.sender,
248
+ userOp.callData
249
+ );
250
+ if (mode === ValidatorMode.sudo || mode === ValidatorMode.plugin) {
251
+ return concatHex([this.mode, await this.signUserOp(userOp)]);
252
+ } else {
253
+ const enableData = await this.getEnableData();
254
+ const enableDataLength = enableData.length / 2 - 1;
255
+ const enableSignature = this.getEnableSignature();
256
+ if (!enableSignature) {
257
+ throw new Error("Enable signature not set");
258
+ }
259
+ return concat([
260
+ mode, // 4 bytes 0 - 4
261
+ pad(toHex(this.validUntil), { size: 6 }), // 6 bytes 4 - 10
262
+ pad(toHex(this.validAfter), { size: 6 }), // 6 bytes 10 - 16
263
+ pad(this.validatorAddress, { size: 20 }), // 20 bytes 16 - 36
264
+ pad(this.executor!, { size: 20 }), // 20 bytes 36 - 56
265
+ pad(toHex(enableDataLength), { size: 32 }), // 32 bytes 56 - 88
266
+ enableData, // 88 - 88 + enableData.length
267
+ pad(toHex(enableSignature.length / 2 - 1), { size: 32 }), // 32 bytes 88 + enableData.length - 120 + enableData.length
268
+ enableSignature, // 120 + enableData.length - 120 + enableData.length + enableSignature.length
269
+ await this.signUserOp(userOp), // 120 + enableData.length + enableSignature.length - 120 + enableData.length + enableSignature.length + userOperation.length
270
+ ]);
271
+ }
272
+ }
273
+ }
@@ -0,0 +1,117 @@
1
+ import {
2
+ getChain,
3
+ getUserOperationHash,
4
+ type Address,
5
+ type Hex,
6
+ type SmartAccountSigner,
7
+ type UserOperationRequest,
8
+ } from "@alchemy/aa-core";
9
+ import { KernelBaseValidator, type KernelBaseValidatorParams } from "./base.js";
10
+ import { encodeFunctionData, toBytes } from "viem";
11
+ import { ECDSAValidatorAbi } from "../abis/ESCDAValidatorAbi.js";
12
+ import { getChainId } from "../api/index.js";
13
+ import { DUMMY_ECDSA_SIG } from "../constants.js";
14
+ import { KernelAccountAbi } from "../abis/KernelAccountAbi.js";
15
+
16
+ export interface ECDSAValidatorParams extends KernelBaseValidatorParams {
17
+ owner: SmartAccountSigner;
18
+ }
19
+
20
+ export class ECDSAValidator extends KernelBaseValidator {
21
+ protected owner: SmartAccountSigner;
22
+
23
+ constructor(params: ECDSAValidatorParams) {
24
+ super(params);
25
+ this.owner = params.owner;
26
+ }
27
+
28
+ public static async init(
29
+ params: ECDSAValidatorParams
30
+ ): Promise<ECDSAValidator> {
31
+ const chainId = await getChainId(params.projectId);
32
+ if (!chainId) {
33
+ throw new Error("ChainId not found");
34
+ }
35
+ const chain = getChain(chainId);
36
+ const instance = new ECDSAValidator({ ...params, chain });
37
+ return instance;
38
+ }
39
+
40
+ async signer(): Promise<SmartAccountSigner> {
41
+ return await Promise.resolve(this.owner);
42
+ }
43
+
44
+ async getOwner(): Promise<Hex> {
45
+ return this.owner.getAddress();
46
+ }
47
+
48
+ async getEnableData(): Promise<Hex> {
49
+ return this.getOwner();
50
+ }
51
+
52
+ encodeEnable(newOwner: Hex): Hex {
53
+ return encodeFunctionData({
54
+ abi: ECDSAValidatorAbi,
55
+ functionName: "enable",
56
+ args: [newOwner],
57
+ });
58
+ }
59
+
60
+ encodeDisable(disableData: Hex = "0x"): Hex {
61
+ return encodeFunctionData({
62
+ abi: ECDSAValidatorAbi,
63
+ functionName: "disable",
64
+ args: [disableData],
65
+ });
66
+ }
67
+
68
+ async getDummyUserOpSignature(): Promise<Hex> {
69
+ return DUMMY_ECDSA_SIG;
70
+ }
71
+
72
+ async isPluginEnabled(
73
+ kernelAccountAddress: Address,
74
+ selector: Hex
75
+ ): Promise<boolean> {
76
+ if (!this.publicClient) {
77
+ throw new Error("Validator uninitialized: PublicClient missing");
78
+ }
79
+ const execDetail = await this.publicClient.readContract({
80
+ abi: KernelAccountAbi,
81
+ address: kernelAccountAddress,
82
+ functionName: "getExecution",
83
+ args: [selector],
84
+ });
85
+ const enableData = await this.publicClient.readContract({
86
+ abi: ECDSAValidatorAbi,
87
+ address: this.validatorAddress,
88
+ functionName: "ecdsaValidatorStorage",
89
+ args: [kernelAccountAddress],
90
+ });
91
+ return (
92
+ execDetail.validator.toLowerCase() ===
93
+ this.validatorAddress.toLowerCase() &&
94
+ enableData.toLowerCase() === (await this.getEnableData()).toLowerCase()
95
+ );
96
+ }
97
+
98
+ async signMessage(message: string | Uint8Array): Promise<Hex> {
99
+ return await this.owner.signMessage(message);
100
+ }
101
+
102
+ async signUserOp(userOp: UserOperationRequest): Promise<Hex> {
103
+ if (!this.chain) {
104
+ throw new Error("Validator uninitialized");
105
+ }
106
+ const hash = getUserOperationHash(
107
+ {
108
+ ...userOp,
109
+ signature: "0x",
110
+ },
111
+ this.entryPointAddress,
112
+ BigInt(this.chain.id)
113
+ );
114
+ const formattedMessage = typeof hash === "string" ? toBytes(hash) : hash;
115
+ return await this.owner.signMessage(formattedMessage);
116
+ }
117
+ }
@@ -0,0 +1,127 @@
1
+ import {
2
+ getUserOperationHash,
3
+ type Address,
4
+ type Hex,
5
+ type SmartAccountSigner,
6
+ type UserOperationRequest,
7
+ } from "@alchemy/aa-core";
8
+ import { KernelBaseValidator, type KernelBaseValidatorParams } from "./base.js";
9
+ import { encodeFunctionData, toBytes, concat, pad, toHex } from "viem";
10
+ import { ERC165SessionKeyValidatorAbi } from "../abis/ERC165SessionKeyValidatorAbi.js";
11
+ import { DUMMY_ECDSA_SIG } from "../constants.js";
12
+ import { KernelAccountAbi } from "../abis/KernelAccountAbi.js";
13
+
14
+ export interface ERC165SessionKeyValidatorParams
15
+ extends KernelBaseValidatorParams {
16
+ sessionKey: SmartAccountSigner;
17
+ sessionKeyData: SessionKeyData;
18
+ }
19
+
20
+ interface SessionKeyData {
21
+ selector: Hex;
22
+ erc165InterfaceId: Hex;
23
+ validUntil: number;
24
+ validAfter: number;
25
+ addressOffset: number;
26
+ }
27
+
28
+ export class ERC165SessionKeyValidator extends KernelBaseValidator {
29
+ protected sessionKey: SmartAccountSigner;
30
+ sessionKeyData: SessionKeyData;
31
+
32
+ constructor(params: ERC165SessionKeyValidatorParams) {
33
+ super(params);
34
+ this.sessionKey = params.sessionKey;
35
+ this.sessionKeyData = params.sessionKeyData;
36
+ }
37
+
38
+ async signer(): Promise<SmartAccountSigner> {
39
+ return await Promise.resolve(this.sessionKey);
40
+ }
41
+
42
+ async getEnableData(): Promise<Hex> {
43
+ return concat([
44
+ await this.sessionKey.getAddress(),
45
+ pad(this.sessionKeyData.erc165InterfaceId, { size: 4 }),
46
+ pad(this.sessionKeyData.selector, { size: 4 }),
47
+ pad(toHex(this.sessionKeyData.validUntil), { size: 6 }),
48
+ pad(toHex(this.sessionKeyData.validAfter), { size: 6 }),
49
+ pad(toHex(this.sessionKeyData.addressOffset), { size: 4 }),
50
+ ]);
51
+ }
52
+
53
+ async isPluginEnabled(
54
+ kernelAccountAddress: Address,
55
+ selector: Hex
56
+ ): Promise<boolean> {
57
+ if (!this.publicClient) {
58
+ throw new Error("Validator uninitialized: PublicClient missing");
59
+ }
60
+ const execDetail = await this.publicClient.readContract({
61
+ abi: KernelAccountAbi,
62
+ address: kernelAccountAddress,
63
+ functionName: "getExecution",
64
+ args: [selector],
65
+ });
66
+ const enableData = await this.publicClient.readContract({
67
+ abi: ERC165SessionKeyValidatorAbi,
68
+ address: this.validatorAddress,
69
+ functionName: "sessionKeys",
70
+ args: [await this.sessionKey.getAddress(), kernelAccountAddress],
71
+ });
72
+ const enableDataHex = concat([
73
+ await this.sessionKey.getAddress(),
74
+ pad(enableData[2], { size: 4 }),
75
+ pad(enableData[1], { size: 4 }),
76
+ pad(toHex(enableData[3]), { size: 6 }),
77
+ pad(toHex(enableData[4]), { size: 6 }),
78
+ pad(toHex(enableData[5]), { size: 4 }),
79
+ ]);
80
+ return (
81
+ execDetail.validator.toLowerCase() ===
82
+ this.validatorAddress.toLowerCase() &&
83
+ enableData[0] &&
84
+ enableDataHex.toLowerCase() === (await this.getEnableData()).toLowerCase()
85
+ );
86
+ }
87
+
88
+ async getDummyUserOpSignature(): Promise<Hex> {
89
+ return DUMMY_ECDSA_SIG;
90
+ }
91
+
92
+ encodeEnable(sessionKeyEnableData: Hex): Hex {
93
+ return encodeFunctionData({
94
+ abi: ERC165SessionKeyValidatorAbi,
95
+ functionName: "enable",
96
+ args: [sessionKeyEnableData],
97
+ });
98
+ }
99
+
100
+ encodeDisable(sessionKey: Hex): Hex {
101
+ return encodeFunctionData({
102
+ abi: ERC165SessionKeyValidatorAbi,
103
+ functionName: "disable",
104
+ args: [sessionKey],
105
+ });
106
+ }
107
+
108
+ async signMessage(message: string | Uint8Array): Promise<Hex> {
109
+ return await this.sessionKey.signMessage(message);
110
+ }
111
+
112
+ async signUserOp(userOp: UserOperationRequest): Promise<Hex> {
113
+ if (!this.chain) {
114
+ throw new Error("Validator uninitialized");
115
+ }
116
+ const hash = getUserOperationHash(
117
+ {
118
+ ...userOp,
119
+ signature: "0x",
120
+ },
121
+ this.entryPointAddress,
122
+ BigInt(this.chain.id)
123
+ );
124
+ const formattedMessage = typeof hash === "string" ? toBytes(hash) : hash;
125
+ return await this.sessionKey.signMessage(formattedMessage);
126
+ }
127
+ }
@@ -0,0 +1,12 @@
1
+ import { ECDSAValidator } from "./ecdsa-validator.js";
2
+ import { ERC165SessionKeyValidator } from "./erc165-session-key-validator.js";
3
+ import { KillSwitchValidator } from "./kill-switch-validator.js";
4
+ import type { ValidatorMap } from "./types.js";
5
+
6
+ export const Validators: ValidatorMap = {
7
+ ECDSA: ECDSAValidator,
8
+ KILL_SWITCH: KillSwitchValidator,
9
+ ERC165_SESSION_KEY: ERC165SessionKeyValidator,
10
+ };
11
+
12
+ export { ECDSAValidator, KillSwitchValidator, ERC165SessionKeyValidator };