@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,15 @@
1
+ import type { UserOperationStruct } from "@alchemy/aa-core";
2
+ export interface GasOverheads {
3
+ fixed: number;
4
+ perUserOp: number;
5
+ perUserOpWord: number;
6
+ zeroByte: number;
7
+ nonZeroByte: number;
8
+ bundleSize: number;
9
+ sigSize: number;
10
+ }
11
+ export declare const DefaultGasOverheads: GasOverheads;
12
+ export type NotPromise<T> = {
13
+ [P in keyof T]: Exclude<T[P], Promise<any>>;
14
+ };
15
+ export declare function calcPreVerificationGas(userOp: Partial<NotPromise<UserOperationStruct>>, overheads?: Partial<GasOverheads>): number;
@@ -0,0 +1,29 @@
1
+ import { toBytes, toHex } from "viem";
2
+ import { packUserOp } from "./ERC4337-utils.js";
3
+ export const DefaultGasOverheads = {
4
+ fixed: 21000,
5
+ perUserOp: 18300,
6
+ perUserOpWord: 4,
7
+ zeroByte: 4,
8
+ nonZeroByte: 16,
9
+ bundleSize: 1,
10
+ sigSize: 65,
11
+ };
12
+ export function calcPreVerificationGas(userOp, overheads) {
13
+ const ov = { ...DefaultGasOverheads, ...(overheads ?? {}) };
14
+ const p = {
15
+ preVerificationGas: 21000,
16
+ signature: toHex(Buffer.alloc(ov.sigSize, 1)),
17
+ ...userOp,
18
+ };
19
+ const packed = toBytes(packUserOp(p, false));
20
+ const callDataCost = packed
21
+ .map((x) => (x === 0 ? ov.zeroByte : ov.nonZeroByte))
22
+ .reduce((sum, x) => sum + x);
23
+ const ret = Math.round(callDataCost +
24
+ ov.fixed / ov.bundleSize +
25
+ ov.perUserOp +
26
+ ov.perUserOpWord * packed.length);
27
+ return ret;
28
+ }
29
+ //# sourceMappingURL=calc-pre-verification-gas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calc-pre-verification-gas.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/utils/calc-pre-verification-gas.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAyChD,MAAM,CAAC,MAAM,mBAAmB,GAAiB;IAC/C,KAAK,EAAE,KAAK;IACZ,SAAS,EAAE,KAAK;IAChB,aAAa,EAAE,CAAC;IAChB,QAAQ,EAAE,CAAC;IACX,WAAW,EAAE,EAAE;IACf,UAAU,EAAE,CAAC;IACb,OAAO,EAAE,EAAE;CACZ,CAAC;AAaF,MAAM,UAAU,sBAAsB,CACpC,MAAgD,EAChD,SAAiC;IAEjC,MAAM,EAAE,GAAG,EAAE,GAAG,mBAAmB,EAAE,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC;IAC5D,MAAM,CAAC,GAAoC;QAEzC,kBAAkB,EAAE,KAAK;QACzB,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC7C,GAAG,MAAM;KACH,CAAC;IAET,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAG,MAAM;SACxB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;SACpD,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY;QACV,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,UAAU;QACxB,EAAE,CAAC,SAAS;QACZ,EAAE,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,CACnC,CAAC;IACF,OAAO,GAAG,CAAC;AACb,CAAC","sourcesContent":["import type { UserOperationStruct } from \"@alchemy/aa-core\";\nimport { toBytes, toHex } from \"viem\";\nimport { packUserOp } from \"./ERC4337-utils.js\";\n\nexport interface GasOverheads {\n /**\n * fixed overhead for entire handleOp bundle.\n */\n fixed: number;\n\n /**\n * per userOp overhead, added on top of the above fixed per-bundle.\n */\n perUserOp: number;\n\n /**\n * overhead for userOp word (32 bytes) block\n */\n perUserOpWord: number;\n\n // perCallDataWord: number\n\n /**\n * zero byte cost, for calldata gas cost calculations\n */\n zeroByte: number;\n\n /**\n * non-zero byte cost, for calldata gas cost calculations\n */\n nonZeroByte: number;\n\n /**\n * expected bundle size, to split per-bundle overhead between all ops.\n */\n bundleSize: number;\n\n /**\n * expected length of the userOp signature.\n */\n sigSize: number;\n}\n\nexport const DefaultGasOverheads: GasOverheads = {\n fixed: 21000,\n perUserOp: 18300,\n perUserOpWord: 4,\n zeroByte: 4,\n nonZeroByte: 16,\n bundleSize: 1,\n sigSize: 65,\n};\n\nexport type NotPromise<T> = {\n [P in keyof T]: Exclude<T[P], Promise<any>>;\n};\n\n/**\n * calculate the preVerificationGas of the given UserOperation\n * preVerificationGas (by definition) is the cost overhead that can't be calculated on-chain.\n * it is based on parameters that are defined by the Ethereum protocol for external transactions.\n * @param userOp filled userOp to calculate. The only possible missing fields can be the signature and preVerificationGas itself\n * @param overheads gas overheads to use, to override the default values\n */\nexport function calcPreVerificationGas(\n userOp: Partial<NotPromise<UserOperationStruct>>,\n overheads?: Partial<GasOverheads>\n): number {\n const ov = { ...DefaultGasOverheads, ...(overheads ?? {}) };\n const p: NotPromise<UserOperationStruct> = {\n // dummy values, in case the UserOp is incomplete.\n preVerificationGas: 21000, // dummy value, just for calldata cost\n signature: toHex(Buffer.alloc(ov.sigSize, 1)), // dummy signature\n ...userOp,\n } as any;\n\n const packed = toBytes(packUserOp(p, false));\n const callDataCost = packed\n .map((x) => (x === 0 ? ov.zeroByte : ov.nonZeroByte))\n .reduce((sum, x) => sum + x);\n const ret = Math.round(\n callDataCost +\n ov.fixed / ov.bundleSize +\n ov.perUserOp +\n ov.perUserOpWord * packed.length\n );\n return ret;\n}\n"]}
@@ -0,0 +1,21 @@
1
+ import { type Hex, type WalletClient } from "viem";
2
+ import type { SmartAccountSigner, UserOperationCallData } from "@alchemy/aa-core";
3
+ import { Signer } from "@ethersproject/abstract-signer";
4
+ import type { SupportedGasToken } from "./paymaster/types.js";
5
+ export type UserOperationCallDataWithDelegate = UserOperationCallData & {
6
+ delegateCall?: boolean;
7
+ };
8
+ export type BatchUserOperationCallDataWithDelegate = UserOperationCallDataWithDelegate[];
9
+ export declare const encodeMultiSend: (_txs: BatchUserOperationCallDataWithDelegate) => Hex;
10
+ export declare function getGasTokenAddress(gasToken: SupportedGasToken, chainId: number): Hex | undefined;
11
+ export declare const convertWalletClientToAccountSigner: (client: WalletClient) => SmartAccountSigner;
12
+ export declare const convertEthersSignerToAccountSigner: (signer: Signer) => SmartAccountSigner;
13
+ export declare function getRPCProviderOwner(web3Provider: any): SmartAccountSigner;
14
+ export declare function getCustodialOwner(identifier: string, { custodialFilePath, privateKey, publicKey, keyId, apiUrl, }: {
15
+ privateKey?: string;
16
+ publicKey?: string;
17
+ keyId?: string;
18
+ custodialFilePath?: string;
19
+ apiUrl?: string;
20
+ }): Promise<SmartAccountSigner | undefined>;
21
+ export declare const randomHexString: (length: number) => Hex;
@@ -0,0 +1,96 @@
1
+ import { encodePacked, fromBytes, toBytes, toHex, } from "viem";
2
+ import { Signer } from "@ethersproject/abstract-signer";
3
+ import { Web3Provider } from "@ethersproject/providers";
4
+ import { API_URL, gasTokenChainAddresses } from "./constants.js";
5
+ import axios from "axios";
6
+ const encodeCall = (_tx) => {
7
+ const data = toBytes(_tx.data);
8
+ const encoded = encodePacked(["uint8", "address", "uint256", "uint256", "bytes"], [
9
+ _tx.delegateCall ? 1 : 0,
10
+ _tx.target,
11
+ _tx.value || BigInt(0),
12
+ BigInt(data.length),
13
+ fromBytes(data, "hex"),
14
+ ]);
15
+ return encoded.slice(2);
16
+ };
17
+ export const encodeMultiSend = (_txs) => {
18
+ return ("0x" + _txs.map((tx) => encodeCall(tx)).join(""));
19
+ };
20
+ export function getGasTokenAddress(gasToken, chainId) {
21
+ if (gasToken === "TEST_ERC20") {
22
+ return "0x3870419Ba2BBf0127060bCB37f69A1b1C090992B";
23
+ }
24
+ return gasTokenChainAddresses[gasToken][chainId] || undefined;
25
+ }
26
+ export const convertWalletClientToAccountSigner = (client) => {
27
+ return {
28
+ getAddress: async () => Promise.resolve((await client.getAddresses())[0]),
29
+ signMessage: async (message) => (await client.signMessage({
30
+ account: client.account,
31
+ message: typeof message === "string"
32
+ ? message
33
+ : {
34
+ raw: message,
35
+ },
36
+ })),
37
+ };
38
+ };
39
+ export const convertEthersSignerToAccountSigner = (signer) => {
40
+ return {
41
+ getAddress: async () => Promise.resolve((await signer.getAddress())),
42
+ signMessage: async (msg) => (await signer.signMessage(msg)),
43
+ };
44
+ };
45
+ export function getRPCProviderOwner(web3Provider) {
46
+ const provider = new Web3Provider(web3Provider);
47
+ const signer = provider.getSigner();
48
+ return {
49
+ getAddress: async () => Promise.resolve((await signer.getAddress())),
50
+ signMessage: async (msg) => (await signer.signMessage(msg)),
51
+ };
52
+ }
53
+ export async function getCustodialOwner(identifier, { custodialFilePath, privateKey, publicKey, keyId, apiUrl = API_URL, }) {
54
+ if (custodialFilePath) {
55
+ let fsModule;
56
+ try {
57
+ fsModule = require.resolve("fs") && require("fs");
58
+ }
59
+ catch (error) {
60
+ console.log("FS module not available. Skipping FS operation...");
61
+ return;
62
+ }
63
+ const data = fsModule.readFileSync(custodialFilePath, "utf8");
64
+ const values = data.split("\n");
65
+ [privateKey, publicKey, keyId] = values;
66
+ }
67
+ let TurnkeySigner;
68
+ try {
69
+ TurnkeySigner =
70
+ require.resolve("@turnkey/ethers") &&
71
+ require("@turnkey/ethers").TurnkeySigner;
72
+ }
73
+ catch (error) {
74
+ console.log("@turnkey/ethers module not available. Skipping FS operation...");
75
+ return;
76
+ }
77
+ if (!privateKey || !publicKey || !keyId) {
78
+ throw new Error("Must provide custodialFilePath or privateKey, publicKey, and keyId.");
79
+ }
80
+ const response = await axios.post(`${apiUrl}/wallets/${identifier}`, {
81
+ keyId,
82
+ });
83
+ const turnkeySigner = new TurnkeySigner({
84
+ apiPublicKey: publicKey,
85
+ apiPrivateKey: privateKey,
86
+ baseUrl: "https://coordinator-beta.turnkey.io",
87
+ organizationId: keyId,
88
+ privateKeyId: response.data.walletId,
89
+ });
90
+ return {
91
+ getAddress: async () => (await turnkeySigner.getAddress()),
92
+ signMessage: async (msg) => (await turnkeySigner.signMessage(msg)),
93
+ };
94
+ }
95
+ export const randomHexString = (length) => toHex(Array.from({ length }, () => Math.floor(Math.random() * 16).toString(16)).join(""));
96
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/kernel-zerodev/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n encodePacked,\n fromBytes,\n toBytes,\n type Hex,\n type WalletClient,\n toHex,\n} from \"viem\";\nimport type {\n SmartAccountSigner,\n UserOperationCallData,\n} from \"@alchemy/aa-core\";\nimport { Signer } from \"@ethersproject/abstract-signer\";\nimport { Web3Provider, type ExternalProvider } from \"@ethersproject/providers\";\nimport { API_URL, gasTokenChainAddresses } from \"./constants.js\";\nimport type { SupportedGasToken } from \"./paymaster/types.js\";\nimport axios from \"axios\";\n\nexport type UserOperationCallDataWithDelegate = UserOperationCallData & {\n delegateCall?: boolean;\n};\n\nexport type BatchUserOperationCallDataWithDelegate =\n UserOperationCallDataWithDelegate[];\n\nconst encodeCall = (_tx: UserOperationCallDataWithDelegate): string => {\n const data = toBytes(_tx.data);\n const encoded = encodePacked(\n [\"uint8\", \"address\", \"uint256\", \"uint256\", \"bytes\"],\n [\n _tx.delegateCall ? 1 : 0,\n _tx.target,\n _tx.value || BigInt(0),\n BigInt(data.length),\n fromBytes(data, \"hex\"),\n ]\n );\n return encoded.slice(2);\n};\nexport const encodeMultiSend = (\n _txs: BatchUserOperationCallDataWithDelegate\n): Hex => {\n return (\"0x\" + _txs.map((tx) => encodeCall(tx)).join(\"\")) as Hex;\n};\n\nexport function getGasTokenAddress(\n gasToken: SupportedGasToken,\n chainId: number\n): Hex | undefined {\n if (gasToken === \"TEST_ERC20\") {\n return \"0x3870419Ba2BBf0127060bCB37f69A1b1C090992B\";\n }\n return gasTokenChainAddresses[gasToken][chainId] || undefined;\n}\n\nexport const convertWalletClientToAccountSigner = (\n client: WalletClient\n): SmartAccountSigner => {\n return {\n getAddress: async () =>\n Promise.resolve((await client.getAddresses())[0] as `0x${string}`),\n signMessage: async (message: Uint8Array | string) =>\n (await client.signMessage({\n account: client.account!,\n message:\n typeof message === \"string\"\n ? message\n : {\n raw: message,\n },\n })) as `0x${string}`,\n };\n};\n\nexport const convertEthersSignerToAccountSigner = (\n signer: Signer\n): SmartAccountSigner => {\n return {\n getAddress: async () =>\n Promise.resolve((await signer.getAddress()) as `0x${string}`),\n signMessage: async (msg: Uint8Array | string) =>\n (await signer.signMessage(msg)) as `0x${string}`,\n };\n};\n\nexport function getRPCProviderOwner(web3Provider: any): SmartAccountSigner {\n const provider = new Web3Provider(web3Provider as ExternalProvider);\n const signer = provider.getSigner();\n\n return {\n getAddress: async () =>\n Promise.resolve((await signer.getAddress()) as `0x${string}`),\n signMessage: async (msg: Uint8Array | string) =>\n (await signer.signMessage(msg)) as `0x${string}`,\n };\n}\n\nexport async function getCustodialOwner(\n identifier: string,\n {\n custodialFilePath,\n privateKey,\n publicKey,\n keyId,\n apiUrl = API_URL,\n }: {\n privateKey?: string;\n publicKey?: string;\n keyId?: string;\n custodialFilePath?: string;\n apiUrl?: string;\n }\n): Promise<SmartAccountSigner | undefined> {\n if (custodialFilePath) {\n let fsModule;\n try {\n fsModule = require.resolve(\"fs\") && require(\"fs\");\n } catch (error) {\n console.log(\"FS module not available. Skipping FS operation...\");\n return;\n }\n const data = fsModule.readFileSync(custodialFilePath, \"utf8\");\n const values = data.split(\"\\n\");\n [privateKey, publicKey, keyId] = values;\n }\n let TurnkeySigner;\n try {\n TurnkeySigner =\n require.resolve(\"@turnkey/ethers\") &&\n require(\"@turnkey/ethers\").TurnkeySigner;\n } catch (error) {\n console.log(\n \"@turnkey/ethers module not available. Skipping FS operation...\"\n );\n return;\n }\n if (!privateKey || !publicKey || !keyId) {\n throw new Error(\n \"Must provide custodialFilePath or privateKey, publicKey, and keyId.\"\n );\n }\n\n const response = await axios.post(`${apiUrl}/wallets/${identifier}`, {\n keyId,\n });\n\n const turnkeySigner = new TurnkeySigner({\n apiPublicKey: publicKey,\n apiPrivateKey: privateKey,\n baseUrl: \"https://coordinator-beta.turnkey.io\",\n organizationId: keyId,\n privateKeyId: response.data.walletId,\n });\n return {\n getAddress: async () => (await turnkeySigner.getAddress()) as `0x${string}`,\n signMessage: async (msg: Uint8Array | string) =>\n (await turnkeySigner.signMessage(msg)) as `0x${string}`,\n };\n}\n\nexport const randomHexString = (length: number): Hex =>\n toHex(\n Array.from({ length }, () =>\n Math.floor(Math.random() * 16).toString(16)\n ).join(\"\")\n );\n"]}
@@ -0,0 +1,53 @@
1
+ import { type SmartAccountSigner, type UserOperationRequest } from "@alchemy/aa-core";
2
+ import { type Chain, type Hex, type Address, type PublicClient, type Transport } from "viem";
3
+ import type { PaymasterAndBundlerProviders } from "../paymaster/types.js";
4
+ export declare enum ValidatorMode {
5
+ sudo = "0x00000000",
6
+ plugin = "0x00000001",
7
+ enable = "0x00000002"
8
+ }
9
+ export interface KernelBaseValidatorParams {
10
+ projectId: string;
11
+ validatorAddress?: Hex;
12
+ mode?: ValidatorMode;
13
+ chain?: Chain;
14
+ entryPointAddress?: Address;
15
+ enableSignature?: Hex;
16
+ validUntil?: number;
17
+ validAfter?: number;
18
+ executor?: Address;
19
+ selector?: string;
20
+ rpcUrl?: string;
21
+ bundlerProvider?: PaymasterAndBundlerProviders;
22
+ }
23
+ export declare abstract class KernelBaseValidator {
24
+ readonly validatorAddress: Hex;
25
+ mode: ValidatorMode;
26
+ protected projectId: string;
27
+ protected chain?: Chain;
28
+ protected entryPointAddress: Address;
29
+ protected enableSignature?: Hex;
30
+ protected validUntil: number;
31
+ protected validAfter: number;
32
+ protected executor?: Address;
33
+ protected selector?: string;
34
+ protected rpcUrl?: string;
35
+ protected bundlerProvider?: PaymasterAndBundlerProviders;
36
+ protected publicClient?: PublicClient<Transport, Chain, true>;
37
+ constructor(params: KernelBaseValidatorParams);
38
+ abstract encodeEnable(enableData: Hex): Hex;
39
+ abstract encodeDisable(enableData: Hex): Hex;
40
+ abstract getEnableData(): Promise<Hex>;
41
+ abstract signMessage(message: Uint8Array | string | Hex): Promise<Hex>;
42
+ abstract signUserOp(userOp: UserOperationRequest): Promise<Hex>;
43
+ abstract signer(): Promise<SmartAccountSigner>;
44
+ abstract getDummyUserOpSignature(): Promise<Hex>;
45
+ abstract isPluginEnabled(kernelAccountAddress: Address, selector: Hex): Promise<boolean>;
46
+ getDynamicDummySignature(kernelAccountAddress: Address, calldata: Hex): Promise<Hex>;
47
+ setEnableSignature(enableSignature: Hex): void;
48
+ getEnableSignature(): Hex | undefined;
49
+ getAddress(): Hex;
50
+ approveExecutor(kernel: Address, selector: Hex, executor: Address, validUntil: number, validAfter: number, validator: KernelBaseValidator): Promise<Hex>;
51
+ resolveValidatorMode(kernelAccountAddress: Address, callData: Hex): Promise<ValidatorMode>;
52
+ getSignature(userOp: UserOperationRequest): Promise<Hex>;
53
+ }
@@ -0,0 +1,245 @@
1
+ import {} from "@alchemy/aa-core";
2
+ import { concat, pad, toHex, concatHex, hexToBigInt, createPublicClient, http, } from "viem";
3
+ import { KernelAccountAbi } from "../abis/KernelAccountAbi.js";
4
+ import { BUNDLER_URL, ECDSA_VALIDATOR_ADDRESS, ENTRYPOINT_ADDRESS, } from "../constants.js";
5
+ export var ValidatorMode;
6
+ (function (ValidatorMode) {
7
+ ValidatorMode["sudo"] = "0x00000000";
8
+ ValidatorMode["plugin"] = "0x00000001";
9
+ ValidatorMode["enable"] = "0x00000002";
10
+ })(ValidatorMode || (ValidatorMode = {}));
11
+ export class KernelBaseValidator {
12
+ constructor(params) {
13
+ Object.defineProperty(this, "validatorAddress", {
14
+ enumerable: true,
15
+ configurable: true,
16
+ writable: true,
17
+ value: void 0
18
+ });
19
+ Object.defineProperty(this, "mode", {
20
+ enumerable: true,
21
+ configurable: true,
22
+ writable: true,
23
+ value: void 0
24
+ });
25
+ Object.defineProperty(this, "projectId", {
26
+ enumerable: true,
27
+ configurable: true,
28
+ writable: true,
29
+ value: void 0
30
+ });
31
+ Object.defineProperty(this, "chain", {
32
+ enumerable: true,
33
+ configurable: true,
34
+ writable: true,
35
+ value: void 0
36
+ });
37
+ Object.defineProperty(this, "entryPointAddress", {
38
+ enumerable: true,
39
+ configurable: true,
40
+ writable: true,
41
+ value: void 0
42
+ });
43
+ Object.defineProperty(this, "enableSignature", {
44
+ enumerable: true,
45
+ configurable: true,
46
+ writable: true,
47
+ value: void 0
48
+ });
49
+ Object.defineProperty(this, "validUntil", {
50
+ enumerable: true,
51
+ configurable: true,
52
+ writable: true,
53
+ value: void 0
54
+ });
55
+ Object.defineProperty(this, "validAfter", {
56
+ enumerable: true,
57
+ configurable: true,
58
+ writable: true,
59
+ value: void 0
60
+ });
61
+ Object.defineProperty(this, "executor", {
62
+ enumerable: true,
63
+ configurable: true,
64
+ writable: true,
65
+ value: void 0
66
+ });
67
+ Object.defineProperty(this, "selector", {
68
+ enumerable: true,
69
+ configurable: true,
70
+ writable: true,
71
+ value: void 0
72
+ });
73
+ Object.defineProperty(this, "rpcUrl", {
74
+ enumerable: true,
75
+ configurable: true,
76
+ writable: true,
77
+ value: void 0
78
+ });
79
+ Object.defineProperty(this, "bundlerProvider", {
80
+ enumerable: true,
81
+ configurable: true,
82
+ writable: true,
83
+ value: void 0
84
+ });
85
+ Object.defineProperty(this, "publicClient", {
86
+ enumerable: true,
87
+ configurable: true,
88
+ writable: true,
89
+ value: void 0
90
+ });
91
+ this.projectId = params.projectId;
92
+ this.validatorAddress = params.validatorAddress ?? ECDSA_VALIDATOR_ADDRESS;
93
+ this.mode = params.mode ?? ValidatorMode.sudo;
94
+ this.entryPointAddress = params.entryPointAddress ?? ENTRYPOINT_ADDRESS;
95
+ this.enableSignature = params.enableSignature;
96
+ this.validUntil = params.validUntil ?? 0;
97
+ this.validAfter = params.validAfter ?? 0;
98
+ this.executor = params.executor;
99
+ this.selector = params.selector;
100
+ this.chain = params.chain;
101
+ this.rpcUrl = params.rpcUrl ?? BUNDLER_URL;
102
+ this.bundlerProvider = params.bundlerProvider;
103
+ this.publicClient = createPublicClient({
104
+ transport: http(this.rpcUrl, {
105
+ fetchOptions: {
106
+ headers: this.rpcUrl === BUNDLER_URL
107
+ ? {
108
+ projectId: this.projectId,
109
+ bundlerProvider: this.bundlerProvider,
110
+ }
111
+ : {},
112
+ },
113
+ }),
114
+ chain: this.chain,
115
+ });
116
+ }
117
+ async getDynamicDummySignature(kernelAccountAddress, calldata) {
118
+ const dummyECDSASig = "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c";
119
+ const validatorMode = await this.resolveValidatorMode(kernelAccountAddress, calldata);
120
+ if (validatorMode === ValidatorMode.enable) {
121
+ const enableData = await this.getEnableData();
122
+ const enableDataLength = enableData.length / 2 - 1;
123
+ const enableSigLength = 65;
124
+ const staticDummySig = concatHex([
125
+ "0x000000000000000000000000",
126
+ this.getAddress(),
127
+ "0x53dd285022D1512635823952d109dB39467a457E",
128
+ ]);
129
+ return concatHex([
130
+ ValidatorMode.enable,
131
+ staticDummySig,
132
+ pad(toHex(enableDataLength), { size: 32 }),
133
+ enableData,
134
+ pad(toHex(enableSigLength), { size: 32 }),
135
+ dummyECDSASig,
136
+ await this.getDummyUserOpSignature(),
137
+ ]);
138
+ }
139
+ return concatHex([validatorMode, await this.getDummyUserOpSignature()]);
140
+ }
141
+ setEnableSignature(enableSignature) {
142
+ this.enableSignature = enableSignature;
143
+ }
144
+ getEnableSignature() {
145
+ return this.enableSignature;
146
+ }
147
+ getAddress() {
148
+ return this.validatorAddress;
149
+ }
150
+ async approveExecutor(kernel, selector, executor, validUntil, validAfter, validator) {
151
+ if (!this.chain) {
152
+ throw new Error("Validator uninitialized");
153
+ }
154
+ const sender = kernel;
155
+ const signer = await this.signer();
156
+ const ownerSig = await signer.signTypedData({
157
+ domain: {
158
+ name: "Kernel",
159
+ version: "0.2.1",
160
+ chainId: this.chain.id,
161
+ verifyingContract: sender,
162
+ },
163
+ types: {
164
+ ValidatorApproved: [
165
+ { name: "sig", type: "bytes4" },
166
+ { name: "validatorData", type: "uint256" },
167
+ { name: "executor", type: "address" },
168
+ { name: "enableData", type: "bytes" },
169
+ ],
170
+ },
171
+ message: {
172
+ sig: selector,
173
+ validatorData: hexToBigInt(concatHex([
174
+ pad(toHex(validUntil), { size: 6 }),
175
+ pad(toHex(validAfter), { size: 6 }),
176
+ validator.getAddress(),
177
+ ]), { size: 32 }),
178
+ executor: executor,
179
+ enableData: await validator.getEnableData(),
180
+ },
181
+ primaryType: "ValidatorApproved",
182
+ });
183
+ return ownerSig;
184
+ }
185
+ async resolveValidatorMode(kernelAccountAddress, callData) {
186
+ if (!this.chain || !this.publicClient) {
187
+ throw new Error("Validator uninitialized");
188
+ }
189
+ let mode;
190
+ try {
191
+ const defaultValidatorAddress = await this.publicClient.readContract({
192
+ abi: KernelAccountAbi,
193
+ address: kernelAccountAddress,
194
+ functionName: "getDefaultValidator",
195
+ });
196
+ if (defaultValidatorAddress?.toLowerCase() ===
197
+ this.validatorAddress.toLowerCase() ||
198
+ this.mode === ValidatorMode.sudo) {
199
+ mode = ValidatorMode.sudo;
200
+ }
201
+ else if (await this.isPluginEnabled(kernelAccountAddress, callData.toString().slice(0, 10))) {
202
+ mode = ValidatorMode.plugin;
203
+ }
204
+ else {
205
+ mode = ValidatorMode.enable;
206
+ }
207
+ }
208
+ catch (error) {
209
+ if (this.mode === ValidatorMode.plugin) {
210
+ mode = ValidatorMode.enable;
211
+ }
212
+ else {
213
+ mode = this.mode;
214
+ }
215
+ }
216
+ return mode;
217
+ }
218
+ async getSignature(userOp) {
219
+ const mode = await this.resolveValidatorMode(userOp.sender, userOp.callData);
220
+ if (mode === ValidatorMode.sudo || mode === ValidatorMode.plugin) {
221
+ return concatHex([this.mode, await this.signUserOp(userOp)]);
222
+ }
223
+ else {
224
+ const enableData = await this.getEnableData();
225
+ const enableDataLength = enableData.length / 2 - 1;
226
+ const enableSignature = this.getEnableSignature();
227
+ if (!enableSignature) {
228
+ throw new Error("Enable signature not set");
229
+ }
230
+ return concat([
231
+ mode,
232
+ pad(toHex(this.validUntil), { size: 6 }),
233
+ pad(toHex(this.validAfter), { size: 6 }),
234
+ pad(this.validatorAddress, { size: 20 }),
235
+ pad(this.executor, { size: 20 }),
236
+ pad(toHex(enableDataLength), { size: 32 }),
237
+ enableData,
238
+ pad(toHex(enableSignature.length / 2 - 1), { size: 32 }),
239
+ enableSignature,
240
+ await this.signUserOp(userOp),
241
+ ]);
242
+ }
243
+ }
244
+ }
245
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/base.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type SmartAccountSigner,\n type UserOperationRequest,\n} from \"@alchemy/aa-core\";\nimport {\n concat,\n type Chain,\n type Hex,\n pad,\n toHex,\n type Address,\n concatHex,\n hexToBigInt,\n type PublicClient,\n type Transport,\n createPublicClient,\n http,\n} from \"viem\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport {\n BUNDLER_URL,\n ECDSA_VALIDATOR_ADDRESS,\n ENTRYPOINT_ADDRESS,\n} from \"../constants.js\";\nimport type { PaymasterAndBundlerProviders } from \"../paymaster/types.js\";\n\nexport enum ValidatorMode {\n sudo = \"0x00000000\",\n plugin = \"0x00000001\",\n enable = \"0x00000002\",\n}\n\nexport interface KernelBaseValidatorParams {\n projectId: string;\n validatorAddress?: Hex;\n mode?: ValidatorMode;\n chain?: Chain;\n entryPointAddress?: Address;\n enableSignature?: Hex;\n validUntil?: number;\n validAfter?: number;\n executor?: Address;\n selector?: string;\n rpcUrl?: string;\n bundlerProvider?: PaymasterAndBundlerProviders;\n}\n\n//Kernel wallet implementation separates out validation and execution phase. It allows you to have\n// custom wrapper logic for the validation phase in addition to signature of choice.\nexport abstract class KernelBaseValidator {\n readonly validatorAddress: Hex;\n mode: ValidatorMode;\n protected projectId: string;\n protected chain?: Chain;\n protected entryPointAddress: Address;\n protected enableSignature?: Hex;\n protected validUntil: number;\n protected validAfter: number;\n protected executor?: Address;\n protected selector?: string;\n protected rpcUrl?: string;\n protected bundlerProvider?: PaymasterAndBundlerProviders;\n protected publicClient?: PublicClient<Transport, Chain, true>;\n\n constructor(params: KernelBaseValidatorParams) {\n this.projectId = params.projectId;\n this.validatorAddress = params.validatorAddress ?? ECDSA_VALIDATOR_ADDRESS;\n this.mode = params.mode ?? ValidatorMode.sudo;\n this.entryPointAddress = params.entryPointAddress ?? ENTRYPOINT_ADDRESS;\n this.enableSignature = params.enableSignature;\n this.validUntil = params.validUntil ?? 0;\n this.validAfter = params.validAfter ?? 0;\n this.executor = params.executor;\n this.selector = params.selector;\n this.chain = params.chain;\n this.rpcUrl = params.rpcUrl ?? BUNDLER_URL;\n this.bundlerProvider = params.bundlerProvider;\n this.publicClient = createPublicClient({\n transport: http(this.rpcUrl, {\n fetchOptions: {\n headers:\n this.rpcUrl === BUNDLER_URL\n ? {\n projectId: this.projectId,\n bundlerProvider: this.bundlerProvider,\n }\n : {},\n },\n }),\n chain: this.chain,\n });\n }\n\n abstract encodeEnable(enableData: Hex): Hex;\n\n abstract encodeDisable(enableData: Hex): Hex;\n\n abstract getEnableData(): Promise<Hex>;\n\n abstract signMessage(message: Uint8Array | string | Hex): Promise<Hex>;\n\n abstract signUserOp(userOp: UserOperationRequest): Promise<Hex>;\n\n abstract signer(): Promise<SmartAccountSigner>;\n\n abstract getDummyUserOpSignature(): Promise<Hex>;\n\n abstract isPluginEnabled(\n kernelAccountAddress: Address,\n selector: Hex\n ): Promise<boolean>;\n\n async getDynamicDummySignature(\n kernelAccountAddress: Address,\n calldata: Hex\n ): Promise<Hex> {\n const dummyECDSASig =\n \"0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c\";\n const validatorMode = await this.resolveValidatorMode(\n kernelAccountAddress,\n calldata\n );\n if (validatorMode === ValidatorMode.enable) {\n const enableData = await this.getEnableData();\n const enableDataLength = enableData.length / 2 - 1;\n const enableSigLength = 65;\n const staticDummySig = concatHex([\n \"0x000000000000000000000000\",\n this.getAddress(),\n \"0x53dd285022D1512635823952d109dB39467a457E\",\n ]);\n\n return concatHex([\n ValidatorMode.enable,\n staticDummySig,\n pad(toHex(enableDataLength), { size: 32 }),\n enableData,\n pad(toHex(enableSigLength), { size: 32 }),\n dummyECDSASig,\n await this.getDummyUserOpSignature(),\n ]);\n }\n return concatHex([validatorMode, await this.getDummyUserOpSignature()]);\n }\n\n setEnableSignature(enableSignature: Hex) {\n this.enableSignature = enableSignature;\n }\n\n getEnableSignature(): Hex | undefined {\n return this.enableSignature;\n }\n\n getAddress(): Hex {\n return this.validatorAddress;\n }\n\n async approveExecutor(\n kernel: Address,\n selector: Hex,\n executor: Address,\n validUntil: number,\n validAfter: number,\n validator: KernelBaseValidator\n ): Promise<Hex> {\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n const sender = kernel;\n const signer = await this.signer();\n const ownerSig = await (signer as any).signTypedData({\n domain: {\n name: \"Kernel\",\n version: \"0.2.1\",\n chainId: this.chain.id,\n verifyingContract: sender,\n },\n types: {\n ValidatorApproved: [\n { name: \"sig\", type: \"bytes4\" },\n { name: \"validatorData\", type: \"uint256\" },\n { name: \"executor\", type: \"address\" },\n { name: \"enableData\", type: \"bytes\" },\n ],\n },\n message: {\n sig: selector as Hex,\n validatorData: hexToBigInt(\n concatHex([\n pad(toHex(validUntil), { size: 6 }),\n pad(toHex(validAfter), { size: 6 }),\n validator.getAddress(),\n ]),\n { size: 32 }\n ),\n executor: executor as Address,\n enableData: await validator.getEnableData(),\n },\n primaryType: \"ValidatorApproved\",\n });\n return ownerSig;\n }\n\n async resolveValidatorMode(\n kernelAccountAddress: Address,\n callData: Hex\n ): Promise<ValidatorMode> {\n if (!this.chain || !this.publicClient) {\n throw new Error(\"Validator uninitialized\");\n }\n\n let mode: ValidatorMode;\n try {\n const defaultValidatorAddress = await this.publicClient.readContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n functionName: \"getDefaultValidator\",\n });\n if (\n defaultValidatorAddress?.toLowerCase() ===\n this.validatorAddress.toLowerCase() ||\n this.mode === ValidatorMode.sudo\n ) {\n mode = ValidatorMode.sudo;\n } else if (\n await this.isPluginEnabled(\n kernelAccountAddress,\n callData.toString().slice(0, 10) as Hex\n )\n ) {\n mode = ValidatorMode.plugin;\n } else {\n mode = ValidatorMode.enable;\n }\n } catch (error) {\n if (this.mode === ValidatorMode.plugin) {\n mode = ValidatorMode.enable;\n } else {\n mode = this.mode;\n }\n }\n return mode;\n }\n\n async getSignature(userOp: UserOperationRequest): Promise<Hex> {\n const mode = await this.resolveValidatorMode(\n userOp.sender,\n userOp.callData\n );\n if (mode === ValidatorMode.sudo || mode === ValidatorMode.plugin) {\n return concatHex([this.mode, await this.signUserOp(userOp)]);\n } else {\n const enableData = await this.getEnableData();\n const enableDataLength = enableData.length / 2 - 1;\n const enableSignature = this.getEnableSignature();\n if (!enableSignature) {\n throw new Error(\"Enable signature not set\");\n }\n return concat([\n mode, // 4 bytes 0 - 4\n pad(toHex(this.validUntil), { size: 6 }), // 6 bytes 4 - 10\n pad(toHex(this.validAfter), { size: 6 }), // 6 bytes 10 - 16\n pad(this.validatorAddress, { size: 20 }), // 20 bytes 16 - 36\n pad(this.executor!, { size: 20 }), // 20 bytes 36 - 56\n pad(toHex(enableDataLength), { size: 32 }), // 32 bytes 56 - 88\n enableData, // 88 - 88 + enableData.length\n pad(toHex(enableSignature.length / 2 - 1), { size: 32 }), // 32 bytes 88 + enableData.length - 120 + enableData.length\n enableSignature, // 120 + enableData.length - 120 + enableData.length + enableSignature.length\n await this.signUserOp(userOp), // 120 + enableData.length + enableSignature.length - 120 + enableData.length + enableSignature.length + userOperation.length\n ]);\n }\n }\n}\n"]}
@@ -0,0 +1,19 @@
1
+ import { type Address, type Hex, type SmartAccountSigner, type UserOperationRequest } from "@alchemy/aa-core";
2
+ import { KernelBaseValidator, type KernelBaseValidatorParams } from "./base.js";
3
+ export interface ECDSAValidatorParams extends KernelBaseValidatorParams {
4
+ owner: SmartAccountSigner;
5
+ }
6
+ export declare class ECDSAValidator extends KernelBaseValidator {
7
+ protected owner: SmartAccountSigner;
8
+ constructor(params: ECDSAValidatorParams);
9
+ static init(params: ECDSAValidatorParams): Promise<ECDSAValidator>;
10
+ signer(): Promise<SmartAccountSigner>;
11
+ getOwner(): Promise<Hex>;
12
+ getEnableData(): Promise<Hex>;
13
+ encodeEnable(newOwner: Hex): Hex;
14
+ encodeDisable(disableData?: Hex): Hex;
15
+ getDummyUserOpSignature(): Promise<Hex>;
16
+ isPluginEnabled(kernelAccountAddress: Address, selector: Hex): Promise<boolean>;
17
+ signMessage(message: string | Uint8Array): Promise<Hex>;
18
+ signUserOp(userOp: UserOperationRequest): Promise<Hex>;
19
+ }
@@ -0,0 +1,89 @@
1
+ import { getChain, getUserOperationHash, } from "@alchemy/aa-core";
2
+ import { KernelBaseValidator } from "./base.js";
3
+ import { encodeFunctionData, toBytes } from "viem";
4
+ import { ECDSAValidatorAbi } from "../abis/ESCDAValidatorAbi.js";
5
+ import { getChainId } from "../api/index.js";
6
+ import { DUMMY_ECDSA_SIG } from "../constants.js";
7
+ import { KernelAccountAbi } from "../abis/KernelAccountAbi.js";
8
+ export class ECDSAValidator extends KernelBaseValidator {
9
+ constructor(params) {
10
+ super(params);
11
+ Object.defineProperty(this, "owner", {
12
+ enumerable: true,
13
+ configurable: true,
14
+ writable: true,
15
+ value: void 0
16
+ });
17
+ this.owner = params.owner;
18
+ }
19
+ static async init(params) {
20
+ const chainId = await getChainId(params.projectId);
21
+ if (!chainId) {
22
+ throw new Error("ChainId not found");
23
+ }
24
+ const chain = getChain(chainId);
25
+ const instance = new ECDSAValidator({ ...params, chain });
26
+ return instance;
27
+ }
28
+ async signer() {
29
+ return await Promise.resolve(this.owner);
30
+ }
31
+ async getOwner() {
32
+ return this.owner.getAddress();
33
+ }
34
+ async getEnableData() {
35
+ return this.getOwner();
36
+ }
37
+ encodeEnable(newOwner) {
38
+ return encodeFunctionData({
39
+ abi: ECDSAValidatorAbi,
40
+ functionName: "enable",
41
+ args: [newOwner],
42
+ });
43
+ }
44
+ encodeDisable(disableData = "0x") {
45
+ return encodeFunctionData({
46
+ abi: ECDSAValidatorAbi,
47
+ functionName: "disable",
48
+ args: [disableData],
49
+ });
50
+ }
51
+ async getDummyUserOpSignature() {
52
+ return DUMMY_ECDSA_SIG;
53
+ }
54
+ async isPluginEnabled(kernelAccountAddress, selector) {
55
+ if (!this.publicClient) {
56
+ throw new Error("Validator uninitialized: PublicClient missing");
57
+ }
58
+ const execDetail = await this.publicClient.readContract({
59
+ abi: KernelAccountAbi,
60
+ address: kernelAccountAddress,
61
+ functionName: "getExecution",
62
+ args: [selector],
63
+ });
64
+ const enableData = await this.publicClient.readContract({
65
+ abi: ECDSAValidatorAbi,
66
+ address: this.validatorAddress,
67
+ functionName: "ecdsaValidatorStorage",
68
+ args: [kernelAccountAddress],
69
+ });
70
+ return (execDetail.validator.toLowerCase() ===
71
+ this.validatorAddress.toLowerCase() &&
72
+ enableData.toLowerCase() === (await this.getEnableData()).toLowerCase());
73
+ }
74
+ async signMessage(message) {
75
+ return await this.owner.signMessage(message);
76
+ }
77
+ async signUserOp(userOp) {
78
+ if (!this.chain) {
79
+ throw new Error("Validator uninitialized");
80
+ }
81
+ const hash = getUserOperationHash({
82
+ ...userOp,
83
+ signature: "0x",
84
+ }, this.entryPointAddress, BigInt(this.chain.id));
85
+ const formattedMessage = typeof hash === "string" ? toBytes(hash) : hash;
86
+ return await this.owner.signMessage(formattedMessage);
87
+ }
88
+ }
89
+ //# sourceMappingURL=ecdsa-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecdsa-validator.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/validator/ecdsa-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,oBAAoB,GAKrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAkC,MAAM,WAAW,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAM/D,MAAM,OAAO,cAAe,SAAQ,mBAAmB;IAGrD,YAAY,MAA4B;QACtC,KAAK,CAAC,MAAM,CAAC,CAAC;QAHN;;;;;WAA0B;QAIlC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAC5B,CAAC;IAEM,MAAM,CAAC,KAAK,CAAC,IAAI,CACtB,MAA4B;QAE5B,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;SACtC;QACD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QAChC,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1D,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,MAAM;QACV,OAAO,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;IAED,YAAY,CAAC,QAAa;QACxB,OAAO,kBAAkB,CAAC;YACxB,GAAG,EAAE,iBAAiB;YACtB,YAAY,EAAE,QAAQ;YACtB,IAAI,EAAE,CAAC,QAAQ,CAAC;SACjB,CAAC,CAAC;IACL,CAAC;IAED,aAAa,CAAC,cAAmB,IAAI;QACnC,OAAO,kBAAkB,CAAC;YACxB,GAAG,EAAE,iBAAiB;YACtB,YAAY,EAAE,SAAS;YACvB,IAAI,EAAE,CAAC,WAAW,CAAC;SACpB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,uBAAuB;QAC3B,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,oBAA6B,EAC7B,QAAa;QAEb,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;YACtB,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;SAClE;QACD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;YACtD,GAAG,EAAE,gBAAgB;YACrB,OAAO,EAAE,oBAAoB;YAC7B,YAAY,EAAE,cAAc;YAC5B,IAAI,EAAE,CAAC,QAAQ,CAAC;SACjB,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;YACtD,GAAG,EAAE,iBAAiB;YACtB,OAAO,EAAE,IAAI,CAAC,gBAAgB;YAC9B,YAAY,EAAE,uBAAuB;YACrC,IAAI,EAAE,CAAC,oBAAoB,CAAC;SAC7B,CAAC,CAAC;QACH,OAAO,CACL,UAAU,CAAC,SAAS,CAAC,WAAW,EAAE;YAChC,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE;YACrC,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,WAAW,EAAE,CACxE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAA4B;QAC5C,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAA4B;QAC3C,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACf,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;SAC5C;QACD,MAAM,IAAI,GAAG,oBAAoB,CAC/B;YACE,GAAG,MAAM;YACT,SAAS,EAAE,IAAI;SAChB,EACD,IAAI,CAAC,iBAAiB,EACtB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CACtB,CAAC;QACF,MAAM,gBAAgB,GAAG,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACzE,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;IACxD,CAAC;CACF","sourcesContent":["import {\n getChain,\n getUserOperationHash,\n type Address,\n type Hex,\n type SmartAccountSigner,\n type UserOperationRequest,\n} from \"@alchemy/aa-core\";\nimport { KernelBaseValidator, type KernelBaseValidatorParams } from \"./base.js\";\nimport { encodeFunctionData, toBytes } from \"viem\";\nimport { ECDSAValidatorAbi } from \"../abis/ESCDAValidatorAbi.js\";\nimport { getChainId } from \"../api/index.js\";\nimport { DUMMY_ECDSA_SIG } from \"../constants.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\n\nexport interface ECDSAValidatorParams extends KernelBaseValidatorParams {\n owner: SmartAccountSigner;\n}\n\nexport class ECDSAValidator extends KernelBaseValidator {\n protected owner: SmartAccountSigner;\n\n constructor(params: ECDSAValidatorParams) {\n super(params);\n this.owner = params.owner;\n }\n\n public static async init(\n params: ECDSAValidatorParams\n ): Promise<ECDSAValidator> {\n const chainId = await getChainId(params.projectId);\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const chain = getChain(chainId);\n const instance = new ECDSAValidator({ ...params, chain });\n return instance;\n }\n\n async signer(): Promise<SmartAccountSigner> {\n return await Promise.resolve(this.owner);\n }\n\n async getOwner(): Promise<Hex> {\n return this.owner.getAddress();\n }\n\n async getEnableData(): Promise<Hex> {\n return this.getOwner();\n }\n\n encodeEnable(newOwner: Hex): Hex {\n return encodeFunctionData({\n abi: ECDSAValidatorAbi,\n functionName: \"enable\",\n args: [newOwner],\n });\n }\n\n encodeDisable(disableData: Hex = \"0x\"): Hex {\n return encodeFunctionData({\n abi: ECDSAValidatorAbi,\n functionName: \"disable\",\n args: [disableData],\n });\n }\n\n async getDummyUserOpSignature(): Promise<Hex> {\n return DUMMY_ECDSA_SIG;\n }\n\n async isPluginEnabled(\n kernelAccountAddress: Address,\n selector: Hex\n ): Promise<boolean> {\n if (!this.publicClient) {\n throw new Error(\"Validator uninitialized: PublicClient missing\");\n }\n const execDetail = await this.publicClient.readContract({\n abi: KernelAccountAbi,\n address: kernelAccountAddress,\n functionName: \"getExecution\",\n args: [selector],\n });\n const enableData = await this.publicClient.readContract({\n abi: ECDSAValidatorAbi,\n address: this.validatorAddress,\n functionName: \"ecdsaValidatorStorage\",\n args: [kernelAccountAddress],\n });\n return (\n execDetail.validator.toLowerCase() ===\n this.validatorAddress.toLowerCase() &&\n enableData.toLowerCase() === (await this.getEnableData()).toLowerCase()\n );\n }\n\n async signMessage(message: string | Uint8Array): Promise<Hex> {\n return await this.owner.signMessage(message);\n }\n\n async signUserOp(userOp: UserOperationRequest): Promise<Hex> {\n if (!this.chain) {\n throw new Error(\"Validator uninitialized\");\n }\n const hash = getUserOperationHash(\n {\n ...userOp,\n signature: \"0x\",\n },\n this.entryPointAddress,\n BigInt(this.chain.id)\n );\n const formattedMessage = typeof hash === \"string\" ? toBytes(hash) : hash;\n return await this.owner.signMessage(formattedMessage);\n }\n}\n"]}