@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,307 @@
1
+ import {
2
+ type Address,
3
+ type Chain,
4
+ type Hex,
5
+ type HttpTransport,
6
+ type RpcTransactionRequest,
7
+ } from "viem";
8
+ import {
9
+ deepHexlify,
10
+ resolveProperties,
11
+ type SmartAccountProviderOpts,
12
+ getChain,
13
+ type UserOperationCallData,
14
+ type BatchUserOperationCallData,
15
+ type SendUserOperationResult,
16
+ asyncPipe,
17
+ noOpMiddleware,
18
+ type UserOperationStruct,
19
+ type BytesLike,
20
+ SmartAccountProvider,
21
+ type AccountMiddlewareFn,
22
+ } from "@alchemy/aa-core";
23
+ import {
24
+ BUNDLER_URL,
25
+ DEFAULT_SEND_TX_MAX_RETRIES,
26
+ DEFAULT_SEND_TX_RETRY_INTERVAL_MS,
27
+ ENTRYPOINT_ADDRESS,
28
+ minPriorityFeePerBidDefaults,
29
+ } from "./constants.js";
30
+ import { KernelSmartContractAccount, isKernelAccount } from "./account.js";
31
+ import { withZeroDevGasEstimator } from "./middleware/gas-estimator.js";
32
+ import { isValidRequest } from "./utils/ERC4337-utils.js";
33
+ import { InvalidOperation } from "./errors.js";
34
+ import { withZeroDevPaymasterAndData } from "./middleware/paymaster.js";
35
+ import { createZeroDevPublicErc4337Client } from "./client/create-client.js";
36
+ import type {
37
+ PaymasterAndBundlerProviders,
38
+ PaymasterConfig,
39
+ PaymasterPolicy,
40
+ } from "./paymaster/types.js";
41
+
42
+ export type ZeroDevProviderConfig = {
43
+ projectId: string;
44
+ chain: Chain | number;
45
+ entryPointAddress?: Address;
46
+ rpcUrl?: string;
47
+ account?: KernelSmartContractAccount;
48
+ bundlerProvider?: PaymasterAndBundlerProviders;
49
+ opts?: SmartAccountProviderOpts & {
50
+ sendTxMaxRetries?: number;
51
+ sendTxRetryIntervalMs?: number;
52
+ };
53
+ };
54
+
55
+ export enum Operation {
56
+ Call,
57
+ DelegateCall,
58
+ }
59
+
60
+ type UserOpDataOperationTypes<T> = T extends UserOperationCallData
61
+ ? Operation.Call | Operation.DelegateCall
62
+ : T extends BatchUserOperationCallData
63
+ ? Operation.Call
64
+ : never;
65
+
66
+ export class ZeroDevProvider extends SmartAccountProvider<HttpTransport> {
67
+ protected projectId: string;
68
+ protected sendTxMaxRetries: number;
69
+ protected sendTxRetryIntervalMs: number;
70
+
71
+ constructor({
72
+ projectId,
73
+ chain,
74
+ entryPointAddress = ENTRYPOINT_ADDRESS,
75
+ rpcUrl = BUNDLER_URL,
76
+ account,
77
+ bundlerProvider,
78
+ opts,
79
+ }: ZeroDevProviderConfig) {
80
+ const _chain = typeof chain === "number" ? getChain(chain) : chain;
81
+ const rpcClient = createZeroDevPublicErc4337Client({
82
+ chain: _chain,
83
+ rpcUrl,
84
+ projectId,
85
+ bundlerProvider,
86
+ });
87
+
88
+ super(rpcClient, entryPointAddress, _chain, account, {
89
+ ...opts,
90
+ txMaxRetries: opts?.txMaxRetries ?? 10,
91
+ txRetryIntervalMs: opts?.txRetryIntervalMs ?? 10000,
92
+ minPriorityFeePerBid:
93
+ opts?.minPriorityFeePerBid ??
94
+ minPriorityFeePerBidDefaults.get(_chain.id),
95
+ });
96
+
97
+ this.projectId = projectId;
98
+ this.sendTxMaxRetries =
99
+ opts?.sendTxMaxRetries ?? DEFAULT_SEND_TX_MAX_RETRIES;
100
+ this.sendTxRetryIntervalMs =
101
+ opts?.sendTxRetryIntervalMs ?? DEFAULT_SEND_TX_RETRY_INTERVAL_MS;
102
+
103
+ withZeroDevGasEstimator(this);
104
+ }
105
+
106
+ getProjectId = (): string => this.projectId;
107
+
108
+ sendUserOperation = async <
109
+ T extends UserOperationCallData | BatchUserOperationCallData
110
+ >(
111
+ data: T,
112
+ operation: UserOpDataOperationTypes<T> = Operation.Call as UserOpDataOperationTypes<T>
113
+ ): Promise<SendUserOperationResult> => {
114
+ if (!isKernelAccount(this.account)) {
115
+ throw new Error("account not connected!");
116
+ }
117
+ if (!this.account.validator) {
118
+ throw new Error("validator not connected!");
119
+ }
120
+
121
+ let callData: BytesLike = "0x";
122
+
123
+ if (Array.isArray(data)) {
124
+ if (operation === Operation.Call) {
125
+ callData = await this.account.encodeBatchExecute(data);
126
+ } else {
127
+ throw InvalidOperation;
128
+ }
129
+ } else if (isKernelAccount(this.account)) {
130
+ if (operation === Operation.DelegateCall) {
131
+ callData = await this.account.encodeExecuteDelegate(
132
+ data.target,
133
+ data.value ?? 0n,
134
+ data.data
135
+ );
136
+ } else if (operation === Operation.Call) {
137
+ callData = await this.account.encodeExecute(
138
+ data.target,
139
+ data.value ?? 0n,
140
+ data.data
141
+ );
142
+ } else {
143
+ throw InvalidOperation;
144
+ }
145
+ } else {
146
+ throw InvalidOperation;
147
+ }
148
+
149
+ const initCode = await this.account.getInitCode();
150
+ let hash: string = "";
151
+ let i = 0;
152
+ let maxFeePerGas = 0n;
153
+ let maxPriorityFeePerGas = 0n;
154
+ let request: UserOperationStruct;
155
+
156
+ const nonce = await this.account.getNonce();
157
+ do {
158
+ const uoStruct = await asyncPipe(
159
+ this.dummyPaymasterDataMiddleware,
160
+ this.feeDataGetter,
161
+ this.paymasterDataMiddleware,
162
+ this.gasEstimator,
163
+ this.customMiddleware ?? noOpMiddleware
164
+ )({
165
+ initCode,
166
+ sender: this.getAddress(),
167
+ nonce,
168
+ callData,
169
+ signature: await this.account
170
+ .getValidator()
171
+ .getDynamicDummySignature(await this.getAddress(), callData as Hex),
172
+ maxFeePerGas,
173
+ maxPriorityFeePerGas,
174
+ } as UserOperationStruct);
175
+ request = deepHexlify(await resolveProperties(uoStruct));
176
+
177
+ if (!isValidRequest(request)) {
178
+ // this pretty prints the uo
179
+ throw new Error(
180
+ `Request is missing parameters. All properties on UserOperationStruct must be set. uo: ${JSON.stringify(
181
+ request,
182
+ null,
183
+ 2
184
+ )}`
185
+ );
186
+ }
187
+
188
+ request.signature = await this.account.validator.getSignature(request);
189
+ try {
190
+ hash = await this.rpcClient.sendUserOperation(
191
+ request,
192
+ this.entryPointAddress
193
+ );
194
+ } catch (error: any) {
195
+ if (this.isReplacementOpError(error) && i++ < this.sendTxMaxRetries) {
196
+ maxFeePerGas = (BigInt(request.maxFeePerGas) * 113n) / 100n;
197
+ maxPriorityFeePerGas =
198
+ (BigInt(request.maxPriorityFeePerGas) * 113n) / 100n;
199
+ console.log(
200
+ `After ${
201
+ this.sendTxRetryIntervalMs / 60000
202
+ } minutes, resending tx with Increased Gas fees: maxFeePerGas: ${maxFeePerGas}, maxPriorityFeePerGas: ${maxPriorityFeePerGas}`
203
+ );
204
+ await new Promise((resolve) =>
205
+ setTimeout(resolve, this.sendTxRetryIntervalMs)
206
+ );
207
+ continue;
208
+ }
209
+ throw this.unwrapError(error);
210
+ }
211
+ } while (hash === "");
212
+
213
+ return {
214
+ hash,
215
+ request,
216
+ };
217
+ };
218
+
219
+ isReplacementOpError(errorIn: any): boolean {
220
+ if (errorIn.cause != null) {
221
+ const failedOpMessage: string | undefined = errorIn?.cause?.message;
222
+ return (
223
+ (failedOpMessage?.includes(
224
+ "replacement op must increase maxFeePerGas and MaxPriorityFeePerGas"
225
+ ) ||
226
+ failedOpMessage?.match(/.*replacement.*underpriced.*/) !== null) ??
227
+ false
228
+ );
229
+ }
230
+ return false;
231
+ }
232
+
233
+ unwrapError(errorIn: any): Error {
234
+ if (errorIn?.cause != null) {
235
+ let paymasterInfo: string = "";
236
+ let failedOpMessage: string | undefined = errorIn?.cause?.message;
237
+ if (failedOpMessage?.includes("FailedOp") === true) {
238
+ // TODO: better error extraction methods will be needed
239
+ const matched = failedOpMessage.match(/FailedOp\((.*)\)/);
240
+ if (matched != null) {
241
+ const split = matched[1].split(",");
242
+ paymasterInfo = `(paymaster address: ${split[1]})`;
243
+ failedOpMessage = split[2];
244
+ }
245
+ }
246
+ const error = new Error(
247
+ `The bundler has failed to include UserOperation in a batch: ${failedOpMessage} ${paymasterInfo}`
248
+ );
249
+ error.stack = errorIn.stack;
250
+ return error;
251
+ }
252
+ return errorIn;
253
+ }
254
+
255
+ getAccount: () => KernelSmartContractAccount = () => {
256
+ if (!isKernelAccount(this.account)) {
257
+ throw new Error("account not connected!");
258
+ }
259
+ return this.account;
260
+ };
261
+
262
+ dummyPaymasterDataMiddleware: AccountMiddlewareFn = async (
263
+ struct: UserOperationStruct
264
+ ): Promise<UserOperationStruct> => {
265
+ struct.paymasterAndData =
266
+ "0xfe7dbcab8aaee4eb67943c1e6be95b1d065985c6000000000000000000000000000000000000000000000000000001869aa31cf400000000000000000000000000000000000000000000000000000000000000007dfe2190f34af27b265bae608717cdc9368b471fc0c097ab7b4088f255b4961e57b039e7e571b15221081c5dce7bcb93459b27a3ab65d2f8a889f4a40b4022801b";
267
+ return struct;
268
+ };
269
+
270
+ withZeroDevPaymasterAndData(config: PaymasterConfig<PaymasterPolicy>) {
271
+ if (!this.isConnected()) {
272
+ throw new Error(
273
+ "ZeroDevProvider: account is not set, did you call `connect` first?"
274
+ );
275
+ }
276
+
277
+ return withZeroDevPaymasterAndData(this, config);
278
+ }
279
+
280
+ request: (args: { method: string; params?: any[] }) => Promise<any> = async (
281
+ args
282
+ ) => {
283
+ const { method, params } = args;
284
+ switch (method) {
285
+ case "eth_chainId":
286
+ return this.chain.id;
287
+ case "eth_sendTransaction":
288
+ const [tx] = params as [RpcTransactionRequest];
289
+ return this.sendTransaction(tx);
290
+ case "personal_sign":
291
+ if (!this.account) {
292
+ throw new Error("account not connected!");
293
+ }
294
+ const [data, address] = params!;
295
+ if (address !== (await this.getAddress())) {
296
+ throw new Error(
297
+ "cannot sign for address that is not the current account"
298
+ );
299
+ }
300
+ // @ts-ignore
301
+ return this.account.signWithEip6492(data);
302
+ default:
303
+ // @ts-ignore
304
+ return this.rpcClient.request(args);
305
+ }
306
+ };
307
+ }
@@ -0,0 +1,63 @@
1
+ import { type SmartAccountSigner } from "@alchemy/aa-core";
2
+ import {
3
+ isHex,
4
+ type HDAccount,
5
+ type Hash,
6
+ type PrivateKeyAccount,
7
+ type TypedData,
8
+ type TypedDataDefinition,
9
+ type Hex,
10
+ } from "viem";
11
+ import { mnemonicToAccount, privateKeyToAccount } from "viem/accounts";
12
+
13
+ export class ZeroDevLocalAccountSigner<T extends HDAccount | PrivateKeyAccount>
14
+ implements SmartAccountSigner
15
+ {
16
+ private owner: T;
17
+ constructor(owner: T) {
18
+ this.owner = owner;
19
+ }
20
+
21
+ readonly signMessage: (msg: string | Uint8Array) => Promise<`0x${string}`> = (
22
+ msg
23
+ ) => {
24
+ if (typeof msg === "string" && !isHex(msg)) {
25
+ return this.owner.signMessage({
26
+ message: msg,
27
+ });
28
+ } else {
29
+ return this.owner.signMessage({
30
+ message: {
31
+ raw: msg,
32
+ },
33
+ });
34
+ }
35
+ };
36
+
37
+ readonly signTypedData: <
38
+ TTypedData extends TypedData | { [key: string]: unknown },
39
+ TPrimaryType extends string = string
40
+ >(
41
+ typedData: TypedDataDefinition<TTypedData, TPrimaryType>
42
+ ) => Promise<Hash> = async (typedData) => {
43
+ return await this.owner.signTypedData(typedData);
44
+ };
45
+
46
+ readonly getAddress: () => Promise<`0x${string}`> = async () => {
47
+ return this.owner.address;
48
+ };
49
+
50
+ static mnemonicToAccountSigner(
51
+ key: string
52
+ ): ZeroDevLocalAccountSigner<HDAccount> {
53
+ const owner = mnemonicToAccount(key);
54
+ return new ZeroDevLocalAccountSigner(owner);
55
+ }
56
+
57
+ static privateKeyToAccountSigner(
58
+ key: Hex
59
+ ): ZeroDevLocalAccountSigner<PrivateKeyAccount> {
60
+ const owner = privateKeyToAccount(key);
61
+ return new ZeroDevLocalAccountSigner(owner);
62
+ }
63
+ }
@@ -0,0 +1,8 @@
1
+ export type WithOptional<T, K extends keyof T> = Pick<Partial<T>, K>;
2
+ export type WithRequired<T, K extends keyof T> = Required<Pick<T, K>>;
3
+ export type MakeOptional<T, K extends keyof T> = Omit<T, K> &
4
+ Partial<Pick<T, K>>;
5
+ export type RequiredKeys<T> = {
6
+ [K in keyof T]-?: {} extends Pick<T, K> ? never : K;
7
+ }[keyof T];
8
+ export type RequiredProps<T> = Pick<T, RequiredKeys<T>>;
@@ -0,0 +1,161 @@
1
+ import {
2
+ EntryPointAbi,
3
+ type UserOperationRequest,
4
+ type UserOperationStruct,
5
+ } from "@alchemy/aa-core";
6
+ import type { NotPromise } from "./calc-pre-verification-gas.js";
7
+ import {
8
+ encodeAbiParameters,
9
+ parseAbiParameters,
10
+ type Hex,
11
+ keccak256,
12
+ toHex,
13
+ } from "viem";
14
+
15
+ // UserOperation is the first parameter of validateUseOp
16
+ const validateUserOpMethod = "simulateValidation";
17
+
18
+ const UserOpType = EntryPointAbi.find(
19
+ // @ts-ignore
20
+ (entry) => entry.name === validateUserOpMethod
21
+ // @ts-ignore
22
+ )?.inputs[0];
23
+
24
+ function encode(
25
+ typevalues: Array<{ type: string; val: any }>,
26
+ forSignature: boolean
27
+ ): string {
28
+ const types = typevalues
29
+ .map((typevalue) =>
30
+ typevalue.type === "bytes" && forSignature ? "bytes32" : typevalue.type
31
+ )
32
+ .join(", ");
33
+ const values = typevalues.map((typevalue) =>
34
+ typevalue.type === "bytes" && forSignature
35
+ ? keccak256(typevalue.val)
36
+ : typevalue.val
37
+ );
38
+ return encodeAbiParameters(parseAbiParameters(types), values);
39
+ }
40
+
41
+ /**
42
+ * pack the userOperation
43
+ * @param op
44
+ * @param forSignature "true" if the hash is needed to calculate the getUserOpHash()
45
+ * "false" to pack entire UserOp, for calculating the calldata cost of putting it on-chain.
46
+ */
47
+ export function packUserOp(
48
+ op: NotPromise<UserOperationStruct>,
49
+ forSignature = true
50
+ ): string {
51
+ if (forSignature) {
52
+ // lighter signature scheme (must match UserOperation#pack): do encode a zero-length signature, but strip afterwards the appended zero-length value
53
+ const userOpType = {
54
+ components: [
55
+ {
56
+ type: "address",
57
+ name: "sender",
58
+ },
59
+ {
60
+ type: "uint256",
61
+ name: "nonce",
62
+ },
63
+ {
64
+ type: "bytes",
65
+ name: "initCode",
66
+ },
67
+ {
68
+ type: "bytes",
69
+ name: "callData",
70
+ },
71
+ {
72
+ type: "uint256",
73
+ name: "callGasLimit",
74
+ },
75
+ {
76
+ type: "uint256",
77
+ name: "verificationGasLimit",
78
+ },
79
+ {
80
+ type: "uint256",
81
+ name: "preVerificationGas",
82
+ },
83
+ {
84
+ type: "uint256",
85
+ name: "maxFeePerGas",
86
+ },
87
+ {
88
+ type: "uint256",
89
+ name: "maxPriorityFeePerGas",
90
+ },
91
+ {
92
+ type: "bytes",
93
+ name: "paymasterAndData",
94
+ },
95
+ {
96
+ type: "bytes",
97
+ name: "signature",
98
+ },
99
+ ],
100
+ name: "userOp",
101
+ type: "tuple",
102
+ };
103
+ // console.log('hard-coded userOpType', userOpType)
104
+ // console.log('from ABI userOpType', UserOpType)
105
+ let encoded = encodeAbiParameters(
106
+ userOpType.components,
107
+ Object.values({
108
+ ...op,
109
+ signature: "0x",
110
+ })
111
+ );
112
+ // remove leading word (total length) and trailing word (zero-length signature)
113
+ encoded = ("0x" + encoded.slice(66, encoded.length - 64)) as Hex;
114
+ return encoded;
115
+ }
116
+
117
+ const typevalues = (UserOpType as any).components.map(
118
+ (c: { name: keyof typeof op; type: string }) => ({
119
+ type: c.type,
120
+ val: op[c.name],
121
+ })
122
+ );
123
+ return encode(typevalues, forSignature);
124
+ }
125
+
126
+ /**
127
+ * Utility method for asserting a {@link UserOperationStruct} is a {@link UserOperationRequest}
128
+ *
129
+ * @param request a {@link UserOperationStruct} to validate
130
+ * @returns a type guard that asserts the {@link UserOperationStruct} is a {@link UserOperationRequest}
131
+ */
132
+ export function isValidRequest(
133
+ request: UserOperationStruct
134
+ ): request is UserOperationRequest {
135
+ // These are the only ones marked as optional in the interface above
136
+ return (
137
+ !!request.callGasLimit &&
138
+ !!request.maxFeePerGas &&
139
+ request.maxPriorityFeePerGas != null &&
140
+ !!request.preVerificationGas &&
141
+ !!request.verificationGasLimit
142
+ );
143
+ }
144
+
145
+ export const hexifyUserOp = (resolvedUserOp: any) => {
146
+ return Object.keys(resolvedUserOp)
147
+ .map((key) => {
148
+ let val = resolvedUserOp[key];
149
+ if (typeof val !== "string" || !val.startsWith("0x")) {
150
+ val = toHex(val);
151
+ }
152
+ return [key, val];
153
+ })
154
+ .reduce(
155
+ (set, [k, v]) => ({
156
+ ...set,
157
+ [k]: v,
158
+ }),
159
+ {}
160
+ );
161
+ };
@@ -0,0 +1,88 @@
1
+ import type { UserOperationStruct } from "@alchemy/aa-core";
2
+ import { toBytes, toHex } from "viem";
3
+ import { packUserOp } from "./ERC4337-utils.js";
4
+
5
+ export interface GasOverheads {
6
+ /**
7
+ * fixed overhead for entire handleOp bundle.
8
+ */
9
+ fixed: number;
10
+
11
+ /**
12
+ * per userOp overhead, added on top of the above fixed per-bundle.
13
+ */
14
+ perUserOp: number;
15
+
16
+ /**
17
+ * overhead for userOp word (32 bytes) block
18
+ */
19
+ perUserOpWord: number;
20
+
21
+ // perCallDataWord: number
22
+
23
+ /**
24
+ * zero byte cost, for calldata gas cost calculations
25
+ */
26
+ zeroByte: number;
27
+
28
+ /**
29
+ * non-zero byte cost, for calldata gas cost calculations
30
+ */
31
+ nonZeroByte: number;
32
+
33
+ /**
34
+ * expected bundle size, to split per-bundle overhead between all ops.
35
+ */
36
+ bundleSize: number;
37
+
38
+ /**
39
+ * expected length of the userOp signature.
40
+ */
41
+ sigSize: number;
42
+ }
43
+
44
+ export const DefaultGasOverheads: GasOverheads = {
45
+ fixed: 21000,
46
+ perUserOp: 18300,
47
+ perUserOpWord: 4,
48
+ zeroByte: 4,
49
+ nonZeroByte: 16,
50
+ bundleSize: 1,
51
+ sigSize: 65,
52
+ };
53
+
54
+ export type NotPromise<T> = {
55
+ [P in keyof T]: Exclude<T[P], Promise<any>>;
56
+ };
57
+
58
+ /**
59
+ * calculate the preVerificationGas of the given UserOperation
60
+ * preVerificationGas (by definition) is the cost overhead that can't be calculated on-chain.
61
+ * it is based on parameters that are defined by the Ethereum protocol for external transactions.
62
+ * @param userOp filled userOp to calculate. The only possible missing fields can be the signature and preVerificationGas itself
63
+ * @param overheads gas overheads to use, to override the default values
64
+ */
65
+ export function calcPreVerificationGas(
66
+ userOp: Partial<NotPromise<UserOperationStruct>>,
67
+ overheads?: Partial<GasOverheads>
68
+ ): number {
69
+ const ov = { ...DefaultGasOverheads, ...(overheads ?? {}) };
70
+ const p: NotPromise<UserOperationStruct> = {
71
+ // dummy values, in case the UserOp is incomplete.
72
+ preVerificationGas: 21000, // dummy value, just for calldata cost
73
+ signature: toHex(Buffer.alloc(ov.sigSize, 1)), // dummy signature
74
+ ...userOp,
75
+ } as any;
76
+
77
+ const packed = toBytes(packUserOp(p, false));
78
+ const callDataCost = packed
79
+ .map((x) => (x === 0 ? ov.zeroByte : ov.nonZeroByte))
80
+ .reduce((sum, x) => sum + x);
81
+ const ret = Math.round(
82
+ callDataCost +
83
+ ov.fixed / ov.bundleSize +
84
+ ov.perUserOp +
85
+ ov.perUserOpWord * packed.length
86
+ );
87
+ return ret;
88
+ }