@zerodev/sdk 4.0.0

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 (465) hide show
  1. package/README.md +450 -0
  2. package/dist/cjs/index.d.ts +21 -0
  3. package/dist/cjs/index.js +49 -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 +35 -0
  39. package/dist/cjs/kernel-zerodev/account.js +209 -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 +27 -0
  48. package/dist/cjs/kernel-zerodev/constants.js +66 -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/owner/getCustodialOwner.d.ts +8 -0
  63. package/dist/cjs/kernel-zerodev/owner/getCustodialOwner.js +53 -0
  64. package/dist/cjs/kernel-zerodev/owner/getCustodialOwner.js.map +1 -0
  65. package/dist/cjs/kernel-zerodev/owner/getRPCProviderOwner.d.ts +2 -0
  66. package/dist/cjs/kernel-zerodev/owner/getRPCProviderOwner.js +15 -0
  67. package/dist/cjs/kernel-zerodev/owner/getRPCProviderOwner.js.map +1 -0
  68. package/dist/cjs/kernel-zerodev/owner/index.d.ts +2 -0
  69. package/dist/cjs/kernel-zerodev/owner/index.js +8 -0
  70. package/dist/cjs/kernel-zerodev/owner/index.js.map +1 -0
  71. package/dist/cjs/kernel-zerodev/owner/passkey/createPasskeyOwner.d.ts +7 -0
  72. package/dist/cjs/kernel-zerodev/owner/passkey/createPasskeyOwner.js +65 -0
  73. package/dist/cjs/kernel-zerodev/owner/passkey/createPasskeyOwner.js.map +1 -0
  74. package/dist/cjs/kernel-zerodev/owner/passkey/getOrCreatePasskeyOwner.d.ts +6 -0
  75. package/dist/cjs/kernel-zerodev/owner/passkey/getOrCreatePasskeyOwner.js +16 -0
  76. package/dist/cjs/kernel-zerodev/owner/passkey/getOrCreatePasskeyOwner.js.map +1 -0
  77. package/dist/cjs/kernel-zerodev/owner/passkey/getPasskeyOwner.d.ts +5 -0
  78. package/dist/cjs/kernel-zerodev/owner/passkey/getPasskeyOwner.js +41 -0
  79. package/dist/cjs/kernel-zerodev/owner/passkey/getPasskeyOwner.js.map +1 -0
  80. package/dist/cjs/kernel-zerodev/owner/passkey/index.d.ts +3 -0
  81. package/dist/cjs/kernel-zerodev/owner/passkey/index.js +10 -0
  82. package/dist/cjs/kernel-zerodev/owner/passkey/index.js.map +1 -0
  83. package/dist/cjs/kernel-zerodev/owner/passkey/types.d.ts +12 -0
  84. package/dist/cjs/kernel-zerodev/owner/passkey/types.js +3 -0
  85. package/dist/cjs/kernel-zerodev/owner/passkey/types.js.map +1 -0
  86. package/dist/cjs/kernel-zerodev/owner/passkey/utils.d.ts +11 -0
  87. package/dist/cjs/kernel-zerodev/owner/passkey/utils.js +105 -0
  88. package/dist/cjs/kernel-zerodev/owner/passkey/utils.js.map +1 -0
  89. package/dist/cjs/kernel-zerodev/paymaster/base.d.ts +16 -0
  90. package/dist/cjs/kernel-zerodev/paymaster/base.js +58 -0
  91. package/dist/cjs/kernel-zerodev/paymaster/base.js.map +1 -0
  92. package/dist/cjs/kernel-zerodev/paymaster/index.d.ts +3 -0
  93. package/dist/cjs/kernel-zerodev/paymaster/index.js +10 -0
  94. package/dist/cjs/kernel-zerodev/paymaster/index.js.map +1 -0
  95. package/dist/cjs/kernel-zerodev/paymaster/token-paymaster.d.ts +14 -0
  96. package/dist/cjs/kernel-zerodev/paymaster/token-paymaster.js +173 -0
  97. package/dist/cjs/kernel-zerodev/paymaster/token-paymaster.js.map +1 -0
  98. package/dist/cjs/kernel-zerodev/paymaster/types.d.ts +29 -0
  99. package/dist/cjs/kernel-zerodev/paymaster/types.js +3 -0
  100. package/dist/cjs/kernel-zerodev/paymaster/types.js.map +1 -0
  101. package/dist/cjs/kernel-zerodev/paymaster/verifying-paymaster.d.ts +8 -0
  102. package/dist/cjs/kernel-zerodev/paymaster/verifying-paymaster.js +31 -0
  103. package/dist/cjs/kernel-zerodev/paymaster/verifying-paymaster.js.map +1 -0
  104. package/dist/cjs/kernel-zerodev/provider.d.ts +42 -0
  105. package/dist/cjs/kernel-zerodev/provider.js +249 -0
  106. package/dist/cjs/kernel-zerodev/provider.js.map +1 -0
  107. package/dist/cjs/kernel-zerodev/types.d.ts +7 -0
  108. package/dist/cjs/kernel-zerodev/types.js +3 -0
  109. package/dist/cjs/kernel-zerodev/types.js.map +1 -0
  110. package/dist/cjs/kernel-zerodev/utils/ERC4337-utils.d.ts +5 -0
  111. package/dist/cjs/kernel-zerodev/utils/ERC4337-utils.js +106 -0
  112. package/dist/cjs/kernel-zerodev/utils/ERC4337-utils.js.map +1 -0
  113. package/dist/cjs/kernel-zerodev/utils/calc-pre-verification-gas.d.ts +15 -0
  114. package/dist/cjs/kernel-zerodev/utils/calc-pre-verification-gas.js +33 -0
  115. package/dist/cjs/kernel-zerodev/utils/calc-pre-verification-gas.js.map +1 -0
  116. package/dist/cjs/kernel-zerodev/utils.d.ts +15 -0
  117. package/dist/cjs/kernel-zerodev/utils.js +60 -0
  118. package/dist/cjs/kernel-zerodev/utils.js.map +1 -0
  119. package/dist/cjs/kernel-zerodev/validator/base.d.ts +53 -0
  120. package/dist/cjs/kernel-zerodev/validator/base.js +240 -0
  121. package/dist/cjs/kernel-zerodev/validator/base.js.map +1 -0
  122. package/dist/cjs/kernel-zerodev/validator/ecdsa-validator.d.ts +19 -0
  123. package/dist/cjs/kernel-zerodev/validator/ecdsa-validator.js +93 -0
  124. package/dist/cjs/kernel-zerodev/validator/ecdsa-validator.js.map +1 -0
  125. package/dist/cjs/kernel-zerodev/validator/erc165-session-key-validator.d.ts +27 -0
  126. package/dist/cjs/kernel-zerodev/validator/erc165-session-key-validator.js +103 -0
  127. package/dist/cjs/kernel-zerodev/validator/erc165-session-key-validator.js.map +1 -0
  128. package/dist/cjs/kernel-zerodev/validator/index.d.ts +6 -0
  129. package/dist/cjs/kernel-zerodev/validator/index.js +15 -0
  130. package/dist/cjs/kernel-zerodev/validator/index.js.map +1 -0
  131. package/dist/cjs/kernel-zerodev/validator/kill-switch-validator.d.ts +21 -0
  132. package/dist/cjs/kernel-zerodev/validator/kill-switch-validator.js +110 -0
  133. package/dist/cjs/kernel-zerodev/validator/kill-switch-validator.js.map +1 -0
  134. package/dist/cjs/kernel-zerodev/validator/types.d.ts +17 -0
  135. package/dist/cjs/kernel-zerodev/validator/types.js +3 -0
  136. package/dist/cjs/kernel-zerodev/validator/types.js.map +1 -0
  137. package/dist/cjs/kernel-zerodev/validator-provider/base.d.ts +28 -0
  138. package/dist/cjs/kernel-zerodev/validator-provider/base.js +94 -0
  139. package/dist/cjs/kernel-zerodev/validator-provider/base.js.map +1 -0
  140. package/dist/cjs/kernel-zerodev/validator-provider/ecdsa-provider.d.ts +8 -0
  141. package/dist/cjs/kernel-zerodev/validator-provider/ecdsa-provider.js +60 -0
  142. package/dist/cjs/kernel-zerodev/validator-provider/ecdsa-provider.js.map +1 -0
  143. package/dist/cjs/kernel-zerodev/validator-provider/erc165-session-key-provider.d.ts +8 -0
  144. package/dist/cjs/kernel-zerodev/validator-provider/erc165-session-key-provider.js +64 -0
  145. package/dist/cjs/kernel-zerodev/validator-provider/erc165-session-key-provider.js.map +1 -0
  146. package/dist/cjs/kernel-zerodev/validator-provider/index.d.ts +6 -0
  147. package/dist/cjs/kernel-zerodev/validator-provider/index.js +15 -0
  148. package/dist/cjs/kernel-zerodev/validator-provider/index.js.map +1 -0
  149. package/dist/cjs/kernel-zerodev/validator-provider/kill-switch-provider.d.ts +8 -0
  150. package/dist/cjs/kernel-zerodev/validator-provider/kill-switch-provider.js +64 -0
  151. package/dist/cjs/kernel-zerodev/validator-provider/kill-switch-provider.js.map +1 -0
  152. package/dist/cjs/kernel-zerodev/validator-provider/types.d.ts +21 -0
  153. package/dist/cjs/kernel-zerodev/validator-provider/types.js +3 -0
  154. package/dist/cjs/kernel-zerodev/validator-provider/types.js.map +1 -0
  155. package/dist/cjs/package.json +1 -0
  156. package/dist/esm/index.d.ts +21 -0
  157. package/dist/esm/index.js +13 -0
  158. package/dist/esm/index.js.map +1 -0
  159. package/dist/esm/kernel-zerodev/abis/ERC165SessionKeyValidatorAbi.d.ts +162 -0
  160. package/dist/esm/kernel-zerodev/abis/ERC165SessionKeyValidatorAbi.js +212 -0
  161. package/dist/esm/kernel-zerodev/abis/ERC165SessionKeyValidatorAbi.js.map +1 -0
  162. package/dist/esm/kernel-zerodev/abis/ERC20Abi.d.ts +39 -0
  163. package/dist/esm/kernel-zerodev/abis/ERC20Abi.js +154 -0
  164. package/dist/esm/kernel-zerodev/abis/ERC20Abi.js.map +1 -0
  165. package/dist/esm/kernel-zerodev/abis/ESCDAValidatorAbi.d.ts +158 -0
  166. package/dist/esm/kernel-zerodev/abis/ESCDAValidatorAbi.js +207 -0
  167. package/dist/esm/kernel-zerodev/abis/ESCDAValidatorAbi.js.map +1 -0
  168. package/dist/esm/kernel-zerodev/abis/KernelAccountAbi.d.ts +496 -0
  169. package/dist/esm/kernel-zerodev/abis/KernelAccountAbi.js +643 -0
  170. package/dist/esm/kernel-zerodev/abis/KernelAccountAbi.js.map +1 -0
  171. package/dist/esm/kernel-zerodev/abis/KernelFactoryAbi.d.ts +293 -0
  172. package/dist/esm/kernel-zerodev/abis/KernelFactoryAbi.js +381 -0
  173. package/dist/esm/kernel-zerodev/abis/KernelFactoryAbi.js.map +1 -0
  174. package/dist/esm/kernel-zerodev/abis/KillSwitchValidatorAbi.d.ts +150 -0
  175. package/dist/esm/kernel-zerodev/abis/KillSwitchValidatorAbi.js +197 -0
  176. package/dist/esm/kernel-zerodev/abis/KillSwitchValidatorAbi.js.map +1 -0
  177. package/dist/esm/kernel-zerodev/abis/MultiSendAbi.d.ts +15 -0
  178. package/dist/esm/kernel-zerodev/abis/MultiSendAbi.js +21 -0
  179. package/dist/esm/kernel-zerodev/abis/MultiSendAbi.js.map +1 -0
  180. package/dist/esm/kernel-zerodev/abis/Test_ERC20Abi.d.ts +39 -0
  181. package/dist/esm/kernel-zerodev/abis/Test_ERC20Abi.js +158 -0
  182. package/dist/esm/kernel-zerodev/abis/Test_ERC20Abi.js.map +1 -0
  183. package/dist/esm/kernel-zerodev/abis/Test_ERC721Abi.d.ts +287 -0
  184. package/dist/esm/kernel-zerodev/abis/Test_ERC721Abi.js +374 -0
  185. package/dist/esm/kernel-zerodev/abis/Test_ERC721Abi.js.map +1 -0
  186. package/dist/esm/kernel-zerodev/abis/TokenActionsAbi.d.ts +63 -0
  187. package/dist/esm/kernel-zerodev/abis/TokenActionsAbi.js +82 -0
  188. package/dist/esm/kernel-zerodev/abis/TokenActionsAbi.js.map +1 -0
  189. package/dist/esm/kernel-zerodev/abis/index.d.ts +8 -0
  190. package/dist/esm/kernel-zerodev/abis/index.js +9 -0
  191. package/dist/esm/kernel-zerodev/abis/index.js.map +1 -0
  192. package/dist/esm/kernel-zerodev/account.d.ts +35 -0
  193. package/dist/esm/kernel-zerodev/account.js +204 -0
  194. package/dist/esm/kernel-zerodev/account.js.map +1 -0
  195. package/dist/esm/kernel-zerodev/api/index.d.ts +1 -0
  196. package/dist/esm/kernel-zerodev/api/index.js +17 -0
  197. package/dist/esm/kernel-zerodev/api/index.js.map +1 -0
  198. package/dist/esm/kernel-zerodev/client/create-client.d.ts +11 -0
  199. package/dist/esm/kernel-zerodev/client/create-client.js +17 -0
  200. package/dist/esm/kernel-zerodev/client/create-client.js.map +1 -0
  201. package/dist/esm/kernel-zerodev/constants.d.ts +27 -0
  202. package/dist/esm/kernel-zerodev/constants.js +63 -0
  203. package/dist/esm/kernel-zerodev/constants.js.map +1 -0
  204. package/dist/esm/kernel-zerodev/errors.d.ts +5 -0
  205. package/dist/esm/kernel-zerodev/errors.js +6 -0
  206. package/dist/esm/kernel-zerodev/errors.js.map +1 -0
  207. package/dist/esm/kernel-zerodev/ethers-provider/ethers-provider.d.ts +21 -0
  208. package/dist/esm/kernel-zerodev/ethers-provider/ethers-provider.js +90 -0
  209. package/dist/esm/kernel-zerodev/ethers-provider/ethers-provider.js.map +1 -0
  210. package/dist/esm/kernel-zerodev/middleware/gas-estimator.d.ts +15 -0
  211. package/dist/esm/kernel-zerodev/middleware/gas-estimator.js +124 -0
  212. package/dist/esm/kernel-zerodev/middleware/gas-estimator.js.map +1 -0
  213. package/dist/esm/kernel-zerodev/middleware/paymaster.d.ts +5 -0
  214. package/dist/esm/kernel-zerodev/middleware/paymaster.js +39 -0
  215. package/dist/esm/kernel-zerodev/middleware/paymaster.js.map +1 -0
  216. package/dist/esm/kernel-zerodev/owner/getCustodialOwner.d.ts +8 -0
  217. package/dist/esm/kernel-zerodev/owner/getCustodialOwner.js +46 -0
  218. package/dist/esm/kernel-zerodev/owner/getCustodialOwner.js.map +1 -0
  219. package/dist/esm/kernel-zerodev/owner/getRPCProviderOwner.d.ts +2 -0
  220. package/dist/esm/kernel-zerodev/owner/getRPCProviderOwner.js +12 -0
  221. package/dist/esm/kernel-zerodev/owner/getRPCProviderOwner.js.map +1 -0
  222. package/dist/esm/kernel-zerodev/owner/index.d.ts +2 -0
  223. package/dist/esm/kernel-zerodev/owner/index.js +3 -0
  224. package/dist/esm/kernel-zerodev/owner/index.js.map +1 -0
  225. package/dist/esm/kernel-zerodev/owner/passkey/createPasskeyOwner.d.ts +7 -0
  226. package/dist/esm/kernel-zerodev/owner/passkey/createPasskeyOwner.js +58 -0
  227. package/dist/esm/kernel-zerodev/owner/passkey/createPasskeyOwner.js.map +1 -0
  228. package/dist/esm/kernel-zerodev/owner/passkey/getOrCreatePasskeyOwner.d.ts +6 -0
  229. package/dist/esm/kernel-zerodev/owner/passkey/getOrCreatePasskeyOwner.js +12 -0
  230. package/dist/esm/kernel-zerodev/owner/passkey/getOrCreatePasskeyOwner.js.map +1 -0
  231. package/dist/esm/kernel-zerodev/owner/passkey/getPasskeyOwner.d.ts +5 -0
  232. package/dist/esm/kernel-zerodev/owner/passkey/getPasskeyOwner.js +34 -0
  233. package/dist/esm/kernel-zerodev/owner/passkey/getPasskeyOwner.js.map +1 -0
  234. package/dist/esm/kernel-zerodev/owner/passkey/index.d.ts +3 -0
  235. package/dist/esm/kernel-zerodev/owner/passkey/index.js +4 -0
  236. package/dist/esm/kernel-zerodev/owner/passkey/index.js.map +1 -0
  237. package/dist/esm/kernel-zerodev/owner/passkey/types.d.ts +12 -0
  238. package/dist/esm/kernel-zerodev/owner/passkey/types.js +2 -0
  239. package/dist/esm/kernel-zerodev/owner/passkey/types.js.map +1 -0
  240. package/dist/esm/kernel-zerodev/owner/passkey/utils.d.ts +11 -0
  241. package/dist/esm/kernel-zerodev/owner/passkey/utils.js +92 -0
  242. package/dist/esm/kernel-zerodev/owner/passkey/utils.js.map +1 -0
  243. package/dist/esm/kernel-zerodev/paymaster/base.d.ts +16 -0
  244. package/dist/esm/kernel-zerodev/paymaster/base.js +51 -0
  245. package/dist/esm/kernel-zerodev/paymaster/base.js.map +1 -0
  246. package/dist/esm/kernel-zerodev/paymaster/index.d.ts +3 -0
  247. package/dist/esm/kernel-zerodev/paymaster/index.js +7 -0
  248. package/dist/esm/kernel-zerodev/paymaster/index.js.map +1 -0
  249. package/dist/esm/kernel-zerodev/paymaster/token-paymaster.d.ts +14 -0
  250. package/dist/esm/kernel-zerodev/paymaster/token-paymaster.js +168 -0
  251. package/dist/esm/kernel-zerodev/paymaster/token-paymaster.js.map +1 -0
  252. package/dist/esm/kernel-zerodev/paymaster/types.d.ts +29 -0
  253. package/dist/esm/kernel-zerodev/paymaster/types.js +2 -0
  254. package/dist/esm/kernel-zerodev/paymaster/types.js.map +1 -0
  255. package/dist/esm/kernel-zerodev/paymaster/verifying-paymaster.d.ts +8 -0
  256. package/dist/esm/kernel-zerodev/paymaster/verifying-paymaster.js +27 -0
  257. package/dist/esm/kernel-zerodev/paymaster/verifying-paymaster.js.map +1 -0
  258. package/dist/esm/kernel-zerodev/provider.d.ts +42 -0
  259. package/dist/esm/kernel-zerodev/provider.js +245 -0
  260. package/dist/esm/kernel-zerodev/provider.js.map +1 -0
  261. package/dist/esm/kernel-zerodev/types.d.ts +7 -0
  262. package/dist/esm/kernel-zerodev/types.js +2 -0
  263. package/dist/esm/kernel-zerodev/types.js.map +1 -0
  264. package/dist/esm/kernel-zerodev/utils/ERC4337-utils.d.ts +5 -0
  265. package/dist/esm/kernel-zerodev/utils/ERC4337-utils.js +100 -0
  266. package/dist/esm/kernel-zerodev/utils/ERC4337-utils.js.map +1 -0
  267. package/dist/esm/kernel-zerodev/utils/calc-pre-verification-gas.d.ts +15 -0
  268. package/dist/esm/kernel-zerodev/utils/calc-pre-verification-gas.js +29 -0
  269. package/dist/esm/kernel-zerodev/utils/calc-pre-verification-gas.js.map +1 -0
  270. package/dist/esm/kernel-zerodev/utils.d.ts +15 -0
  271. package/dist/esm/kernel-zerodev/utils.js +53 -0
  272. package/dist/esm/kernel-zerodev/utils.js.map +1 -0
  273. package/dist/esm/kernel-zerodev/validator/base.d.ts +53 -0
  274. package/dist/esm/kernel-zerodev/validator/base.js +237 -0
  275. package/dist/esm/kernel-zerodev/validator/base.js.map +1 -0
  276. package/dist/esm/kernel-zerodev/validator/ecdsa-validator.d.ts +19 -0
  277. package/dist/esm/kernel-zerodev/validator/ecdsa-validator.js +89 -0
  278. package/dist/esm/kernel-zerodev/validator/ecdsa-validator.js.map +1 -0
  279. package/dist/esm/kernel-zerodev/validator/erc165-session-key-validator.d.ts +27 -0
  280. package/dist/esm/kernel-zerodev/validator/erc165-session-key-validator.js +99 -0
  281. package/dist/esm/kernel-zerodev/validator/erc165-session-key-validator.js.map +1 -0
  282. package/dist/esm/kernel-zerodev/validator/index.d.ts +6 -0
  283. package/dist/esm/kernel-zerodev/validator/index.js +10 -0
  284. package/dist/esm/kernel-zerodev/validator/index.js.map +1 -0
  285. package/dist/esm/kernel-zerodev/validator/kill-switch-validator.d.ts +21 -0
  286. package/dist/esm/kernel-zerodev/validator/kill-switch-validator.js +106 -0
  287. package/dist/esm/kernel-zerodev/validator/kill-switch-validator.js.map +1 -0
  288. package/dist/esm/kernel-zerodev/validator/types.d.ts +17 -0
  289. package/dist/esm/kernel-zerodev/validator/types.js +2 -0
  290. package/dist/esm/kernel-zerodev/validator/types.js.map +1 -0
  291. package/dist/esm/kernel-zerodev/validator-provider/base.d.ts +28 -0
  292. package/dist/esm/kernel-zerodev/validator-provider/base.js +91 -0
  293. package/dist/esm/kernel-zerodev/validator-provider/base.js.map +1 -0
  294. package/dist/esm/kernel-zerodev/validator-provider/ecdsa-provider.d.ts +8 -0
  295. package/dist/esm/kernel-zerodev/validator-provider/ecdsa-provider.js +56 -0
  296. package/dist/esm/kernel-zerodev/validator-provider/ecdsa-provider.js.map +1 -0
  297. package/dist/esm/kernel-zerodev/validator-provider/erc165-session-key-provider.d.ts +8 -0
  298. package/dist/esm/kernel-zerodev/validator-provider/erc165-session-key-provider.js +60 -0
  299. package/dist/esm/kernel-zerodev/validator-provider/erc165-session-key-provider.js.map +1 -0
  300. package/dist/esm/kernel-zerodev/validator-provider/index.d.ts +6 -0
  301. package/dist/esm/kernel-zerodev/validator-provider/index.js +10 -0
  302. package/dist/esm/kernel-zerodev/validator-provider/index.js.map +1 -0
  303. package/dist/esm/kernel-zerodev/validator-provider/kill-switch-provider.d.ts +8 -0
  304. package/dist/esm/kernel-zerodev/validator-provider/kill-switch-provider.js +60 -0
  305. package/dist/esm/kernel-zerodev/validator-provider/kill-switch-provider.js.map +1 -0
  306. package/dist/esm/kernel-zerodev/validator-provider/types.d.ts +21 -0
  307. package/dist/esm/kernel-zerodev/validator-provider/types.js +2 -0
  308. package/dist/esm/kernel-zerodev/validator-provider/types.js.map +1 -0
  309. package/dist/esm/package.json +1 -0
  310. package/dist/types/index.d.ts +22 -0
  311. package/dist/types/index.d.ts.map +1 -0
  312. package/dist/types/kernel-zerodev/abis/ERC165SessionKeyValidatorAbi.d.ts +163 -0
  313. package/dist/types/kernel-zerodev/abis/ERC165SessionKeyValidatorAbi.d.ts.map +1 -0
  314. package/dist/types/kernel-zerodev/abis/ERC20Abi.d.ts +40 -0
  315. package/dist/types/kernel-zerodev/abis/ERC20Abi.d.ts.map +1 -0
  316. package/dist/types/kernel-zerodev/abis/ESCDAValidatorAbi.d.ts +159 -0
  317. package/dist/types/kernel-zerodev/abis/ESCDAValidatorAbi.d.ts.map +1 -0
  318. package/dist/types/kernel-zerodev/abis/KernelAccountAbi.d.ts +497 -0
  319. package/dist/types/kernel-zerodev/abis/KernelAccountAbi.d.ts.map +1 -0
  320. package/dist/types/kernel-zerodev/abis/KernelFactoryAbi.d.ts +294 -0
  321. package/dist/types/kernel-zerodev/abis/KernelFactoryAbi.d.ts.map +1 -0
  322. package/dist/types/kernel-zerodev/abis/KillSwitchValidatorAbi.d.ts +151 -0
  323. package/dist/types/kernel-zerodev/abis/KillSwitchValidatorAbi.d.ts.map +1 -0
  324. package/dist/types/kernel-zerodev/abis/MultiSendAbi.d.ts +16 -0
  325. package/dist/types/kernel-zerodev/abis/MultiSendAbi.d.ts.map +1 -0
  326. package/dist/types/kernel-zerodev/abis/Test_ERC20Abi.d.ts +40 -0
  327. package/dist/types/kernel-zerodev/abis/Test_ERC20Abi.d.ts.map +1 -0
  328. package/dist/types/kernel-zerodev/abis/Test_ERC721Abi.d.ts +288 -0
  329. package/dist/types/kernel-zerodev/abis/Test_ERC721Abi.d.ts.map +1 -0
  330. package/dist/types/kernel-zerodev/abis/TokenActionsAbi.d.ts +64 -0
  331. package/dist/types/kernel-zerodev/abis/TokenActionsAbi.d.ts.map +1 -0
  332. package/dist/types/kernel-zerodev/abis/index.d.ts +9 -0
  333. package/dist/types/kernel-zerodev/abis/index.d.ts.map +1 -0
  334. package/dist/types/kernel-zerodev/account.d.ts +36 -0
  335. package/dist/types/kernel-zerodev/account.d.ts.map +1 -0
  336. package/dist/types/kernel-zerodev/api/index.d.ts +2 -0
  337. package/dist/types/kernel-zerodev/api/index.d.ts.map +1 -0
  338. package/dist/types/kernel-zerodev/client/create-client.d.ts +12 -0
  339. package/dist/types/kernel-zerodev/client/create-client.d.ts.map +1 -0
  340. package/dist/types/kernel-zerodev/constants.d.ts +28 -0
  341. package/dist/types/kernel-zerodev/constants.d.ts.map +1 -0
  342. package/dist/types/kernel-zerodev/errors.d.ts +6 -0
  343. package/dist/types/kernel-zerodev/errors.d.ts.map +1 -0
  344. package/dist/types/kernel-zerodev/ethers-provider/ethers-provider.d.ts +39 -0
  345. package/dist/types/kernel-zerodev/ethers-provider/ethers-provider.d.ts.map +1 -0
  346. package/dist/types/kernel-zerodev/middleware/gas-estimator.d.ts +20 -0
  347. package/dist/types/kernel-zerodev/middleware/gas-estimator.d.ts.map +1 -0
  348. package/dist/types/kernel-zerodev/middleware/paymaster.d.ts +6 -0
  349. package/dist/types/kernel-zerodev/middleware/paymaster.d.ts.map +1 -0
  350. package/dist/types/kernel-zerodev/owner/getCustodialOwner.d.ts +9 -0
  351. package/dist/types/kernel-zerodev/owner/getCustodialOwner.d.ts.map +1 -0
  352. package/dist/types/kernel-zerodev/owner/getRPCProviderOwner.d.ts +3 -0
  353. package/dist/types/kernel-zerodev/owner/getRPCProviderOwner.d.ts.map +1 -0
  354. package/dist/types/kernel-zerodev/owner/index.d.ts +3 -0
  355. package/dist/types/kernel-zerodev/owner/index.d.ts.map +1 -0
  356. package/dist/types/kernel-zerodev/owner/passkey/createPasskeyOwner.d.ts +8 -0
  357. package/dist/types/kernel-zerodev/owner/passkey/createPasskeyOwner.d.ts.map +1 -0
  358. package/dist/types/kernel-zerodev/owner/passkey/getOrCreatePasskeyOwner.d.ts +7 -0
  359. package/dist/types/kernel-zerodev/owner/passkey/getOrCreatePasskeyOwner.d.ts.map +1 -0
  360. package/dist/types/kernel-zerodev/owner/passkey/getPasskeyOwner.d.ts +6 -0
  361. package/dist/types/kernel-zerodev/owner/passkey/getPasskeyOwner.d.ts.map +1 -0
  362. package/dist/types/kernel-zerodev/owner/passkey/index.d.ts +4 -0
  363. package/dist/types/kernel-zerodev/owner/passkey/index.d.ts.map +1 -0
  364. package/dist/types/kernel-zerodev/owner/passkey/types.d.ts +14 -0
  365. package/dist/types/kernel-zerodev/owner/passkey/types.d.ts.map +1 -0
  366. package/dist/types/kernel-zerodev/owner/passkey/utils.d.ts +12 -0
  367. package/dist/types/kernel-zerodev/owner/passkey/utils.d.ts.map +1 -0
  368. package/dist/types/kernel-zerodev/paymaster/base.d.ts +17 -0
  369. package/dist/types/kernel-zerodev/paymaster/base.d.ts.map +1 -0
  370. package/dist/types/kernel-zerodev/paymaster/index.d.ts +4 -0
  371. package/dist/types/kernel-zerodev/paymaster/index.d.ts.map +1 -0
  372. package/dist/types/kernel-zerodev/paymaster/token-paymaster.d.ts +15 -0
  373. package/dist/types/kernel-zerodev/paymaster/token-paymaster.d.ts.map +1 -0
  374. package/dist/types/kernel-zerodev/paymaster/types.d.ts +30 -0
  375. package/dist/types/kernel-zerodev/paymaster/types.d.ts.map +1 -0
  376. package/dist/types/kernel-zerodev/paymaster/verifying-paymaster.d.ts +9 -0
  377. package/dist/types/kernel-zerodev/paymaster/verifying-paymaster.d.ts.map +1 -0
  378. package/dist/types/kernel-zerodev/provider.d.ts +43 -0
  379. package/dist/types/kernel-zerodev/provider.d.ts.map +1 -0
  380. package/dist/types/kernel-zerodev/types.d.ts +8 -0
  381. package/dist/types/kernel-zerodev/types.d.ts.map +1 -0
  382. package/dist/types/kernel-zerodev/utils/ERC4337-utils.d.ts +18 -0
  383. package/dist/types/kernel-zerodev/utils/ERC4337-utils.d.ts.map +1 -0
  384. package/dist/types/kernel-zerodev/utils/calc-pre-verification-gas.d.ts +44 -0
  385. package/dist/types/kernel-zerodev/utils/calc-pre-verification-gas.d.ts.map +1 -0
  386. package/dist/types/kernel-zerodev/utils.d.ts +16 -0
  387. package/dist/types/kernel-zerodev/utils.d.ts.map +1 -0
  388. package/dist/types/kernel-zerodev/validator/base.d.ts +54 -0
  389. package/dist/types/kernel-zerodev/validator/base.d.ts.map +1 -0
  390. package/dist/types/kernel-zerodev/validator/ecdsa-validator.d.ts +20 -0
  391. package/dist/types/kernel-zerodev/validator/ecdsa-validator.d.ts.map +1 -0
  392. package/dist/types/kernel-zerodev/validator/erc165-session-key-validator.d.ts +28 -0
  393. package/dist/types/kernel-zerodev/validator/erc165-session-key-validator.d.ts.map +1 -0
  394. package/dist/types/kernel-zerodev/validator/index.d.ts +7 -0
  395. package/dist/types/kernel-zerodev/validator/index.d.ts.map +1 -0
  396. package/dist/types/kernel-zerodev/validator/kill-switch-validator.d.ts +22 -0
  397. package/dist/types/kernel-zerodev/validator/kill-switch-validator.d.ts.map +1 -0
  398. package/dist/types/kernel-zerodev/validator/types.d.ts +18 -0
  399. package/dist/types/kernel-zerodev/validator/types.d.ts.map +1 -0
  400. package/dist/types/kernel-zerodev/validator-provider/base.d.ts +29 -0
  401. package/dist/types/kernel-zerodev/validator-provider/base.d.ts.map +1 -0
  402. package/dist/types/kernel-zerodev/validator-provider/ecdsa-provider.d.ts +9 -0
  403. package/dist/types/kernel-zerodev/validator-provider/ecdsa-provider.d.ts.map +1 -0
  404. package/dist/types/kernel-zerodev/validator-provider/erc165-session-key-provider.d.ts +9 -0
  405. package/dist/types/kernel-zerodev/validator-provider/erc165-session-key-provider.d.ts.map +1 -0
  406. package/dist/types/kernel-zerodev/validator-provider/index.d.ts +7 -0
  407. package/dist/types/kernel-zerodev/validator-provider/index.d.ts.map +1 -0
  408. package/dist/types/kernel-zerodev/validator-provider/kill-switch-provider.d.ts +9 -0
  409. package/dist/types/kernel-zerodev/validator-provider/kill-switch-provider.d.ts.map +1 -0
  410. package/dist/types/kernel-zerodev/validator-provider/types.d.ts +22 -0
  411. package/dist/types/kernel-zerodev/validator-provider/types.d.ts.map +1 -0
  412. package/package.json +76 -0
  413. package/passkey/package.json +5 -0
  414. package/src/index.ts +43 -0
  415. package/src/kernel-zerodev/__tests__/mocks/mock-signer.ts +24 -0
  416. package/src/kernel-zerodev/abis/ERC165SessionKeyValidatorAbi.ts +211 -0
  417. package/src/kernel-zerodev/abis/ERC20Abi.ts +153 -0
  418. package/src/kernel-zerodev/abis/ESCDAValidatorAbi.ts +206 -0
  419. package/src/kernel-zerodev/abis/KernelAccountAbi.ts +642 -0
  420. package/src/kernel-zerodev/abis/KernelFactoryAbi.ts +380 -0
  421. package/src/kernel-zerodev/abis/KillSwitchValidatorAbi.ts +196 -0
  422. package/src/kernel-zerodev/abis/MultiSendAbi.ts +20 -0
  423. package/src/kernel-zerodev/abis/Test_ERC20Abi.ts +157 -0
  424. package/src/kernel-zerodev/abis/Test_ERC721Abi.ts +373 -0
  425. package/src/kernel-zerodev/abis/TokenActionsAbi.ts +81 -0
  426. package/src/kernel-zerodev/abis/index.ts +17 -0
  427. package/src/kernel-zerodev/account.ts +275 -0
  428. package/src/kernel-zerodev/api/index.ts +25 -0
  429. package/src/kernel-zerodev/client/create-client.ts +37 -0
  430. package/src/kernel-zerodev/constants.ts +95 -0
  431. package/src/kernel-zerodev/errors.ts +13 -0
  432. package/src/kernel-zerodev/ethers-provider/ethers-provider.ts +118 -0
  433. package/src/kernel-zerodev/middleware/gas-estimator.ts +183 -0
  434. package/src/kernel-zerodev/middleware/paymaster.ts +66 -0
  435. package/src/kernel-zerodev/owner/getCustodialOwner.ts +74 -0
  436. package/src/kernel-zerodev/owner/getRPCProviderOwner.ts +22 -0
  437. package/src/kernel-zerodev/owner/index.ts +2 -0
  438. package/src/kernel-zerodev/owner/passkey/createPasskeyOwner.ts +98 -0
  439. package/src/kernel-zerodev/owner/passkey/getOrCreatePasskeyOwner.ts +22 -0
  440. package/src/kernel-zerodev/owner/passkey/getPasskeyOwner.ts +69 -0
  441. package/src/kernel-zerodev/owner/passkey/index.ts +3 -0
  442. package/src/kernel-zerodev/owner/passkey/types.ts +18 -0
  443. package/src/kernel-zerodev/owner/passkey/utils.ts +157 -0
  444. package/src/kernel-zerodev/paymaster/base.ts +76 -0
  445. package/src/kernel-zerodev/paymaster/index.ts +9 -0
  446. package/src/kernel-zerodev/paymaster/token-paymaster.ts +209 -0
  447. package/src/kernel-zerodev/paymaster/types.ts +36 -0
  448. package/src/kernel-zerodev/paymaster/verifying-paymaster.ts +38 -0
  449. package/src/kernel-zerodev/provider.ts +341 -0
  450. package/src/kernel-zerodev/types.ts +8 -0
  451. package/src/kernel-zerodev/utils/ERC4337-utils.ts +161 -0
  452. package/src/kernel-zerodev/utils/calc-pre-verification-gas.ts +88 -0
  453. package/src/kernel-zerodev/utils.ts +106 -0
  454. package/src/kernel-zerodev/validator/base.ts +265 -0
  455. package/src/kernel-zerodev/validator/ecdsa-validator.ts +117 -0
  456. package/src/kernel-zerodev/validator/erc165-session-key-validator.ts +127 -0
  457. package/src/kernel-zerodev/validator/index.ts +12 -0
  458. package/src/kernel-zerodev/validator/kill-switch-validator.ts +142 -0
  459. package/src/kernel-zerodev/validator/types.ts +36 -0
  460. package/src/kernel-zerodev/validator-provider/base.ts +140 -0
  461. package/src/kernel-zerodev/validator-provider/ecdsa-provider.ts +61 -0
  462. package/src/kernel-zerodev/validator-provider/erc165-session-key-provider.ts +68 -0
  463. package/src/kernel-zerodev/validator-provider/index.ts +12 -0
  464. package/src/kernel-zerodev/validator-provider/kill-switch-provider.ts +68 -0
  465. package/src/kernel-zerodev/validator-provider/types.ts +26 -0
@@ -0,0 +1,341 @@
1
+ import {
2
+ fromHex,
3
+ type Address,
4
+ type Chain,
5
+ type Hash,
6
+ type Hex,
7
+ type HttpTransport,
8
+ type RpcTransactionRequest,
9
+ } from "viem";
10
+ import {
11
+ deepHexlify,
12
+ resolveProperties,
13
+ type SmartAccountProviderOpts,
14
+ getChain,
15
+ type UserOperationCallData,
16
+ type BatchUserOperationCallData,
17
+ type SendUserOperationResult,
18
+ asyncPipe,
19
+ noOpMiddleware,
20
+ type UserOperationStruct,
21
+ type BytesLike,
22
+ SmartAccountProvider,
23
+ type AccountMiddlewareFn,
24
+ type UserOperationOverrides,
25
+ } from "@alchemy/aa-core";
26
+ import {
27
+ BUNDLER_URL,
28
+ DEFAULT_SEND_TX_MAX_RETRIES,
29
+ DEFAULT_SEND_TX_RETRY_INTERVAL_MS,
30
+ ENTRYPOINT_ADDRESS,
31
+ minPriorityFeePerBidDefaults,
32
+ } from "./constants.js";
33
+ import { KernelSmartContractAccount, isKernelAccount } from "./account.js";
34
+ import { withZeroDevGasEstimator } from "./middleware/gas-estimator.js";
35
+ import { isValidRequest } from "./utils/ERC4337-utils.js";
36
+ import { InvalidOperation } from "./errors.js";
37
+ import { withZeroDevPaymasterAndData } from "./middleware/paymaster.js";
38
+ import { createZeroDevPublicErc4337Client } from "./client/create-client.js";
39
+ import type {
40
+ PaymasterAndBundlerProviders,
41
+ PaymasterConfig,
42
+ PaymasterPolicy,
43
+ } from "./paymaster/types.js";
44
+
45
+ export type ZeroDevProviderConfig = {
46
+ projectId: string;
47
+ chain: Chain | number;
48
+ entryPointAddress?: Address;
49
+ rpcUrl?: string;
50
+ account?: KernelSmartContractAccount;
51
+ bundlerProvider?: PaymasterAndBundlerProviders;
52
+ opts?: SmartAccountProviderOpts & {
53
+ sendTxMaxRetries?: number;
54
+ sendTxRetryIntervalMs?: number;
55
+ };
56
+ };
57
+
58
+ export enum Operation {
59
+ Call,
60
+ DelegateCall,
61
+ }
62
+
63
+ type UserOpDataOperationTypes<T> = T extends UserOperationCallData
64
+ ? Operation.Call | Operation.DelegateCall
65
+ : T extends BatchUserOperationCallData
66
+ ? Operation.Call
67
+ : never;
68
+
69
+ export class ZeroDevProvider extends SmartAccountProvider<HttpTransport> {
70
+ protected projectId: string;
71
+ protected sendTxMaxRetries: number;
72
+ protected sendTxRetryIntervalMs: number;
73
+
74
+ constructor({
75
+ projectId,
76
+ chain,
77
+ entryPointAddress = ENTRYPOINT_ADDRESS,
78
+ rpcUrl = BUNDLER_URL,
79
+ account,
80
+ bundlerProvider,
81
+ opts,
82
+ }: ZeroDevProviderConfig) {
83
+ const _chain = typeof chain === "number" ? getChain(chain) : chain;
84
+ const rpcClient = createZeroDevPublicErc4337Client({
85
+ chain: _chain,
86
+ rpcUrl,
87
+ projectId,
88
+ bundlerProvider,
89
+ });
90
+
91
+ super(rpcClient, entryPointAddress, _chain, account, {
92
+ ...opts,
93
+ txMaxRetries: opts?.txMaxRetries ?? 10,
94
+ txRetryIntervalMs: opts?.txRetryIntervalMs ?? 10000,
95
+ minPriorityFeePerBid:
96
+ opts?.minPriorityFeePerBid ??
97
+ minPriorityFeePerBidDefaults.get(_chain.id),
98
+ });
99
+
100
+ this.projectId = projectId;
101
+ this.sendTxMaxRetries =
102
+ opts?.sendTxMaxRetries ?? DEFAULT_SEND_TX_MAX_RETRIES;
103
+ this.sendTxRetryIntervalMs =
104
+ opts?.sendTxRetryIntervalMs ?? DEFAULT_SEND_TX_RETRY_INTERVAL_MS;
105
+
106
+ withZeroDevGasEstimator(this);
107
+ }
108
+
109
+ getProjectId = (): string => this.projectId;
110
+
111
+ sendTransaction = async (
112
+ request: RpcTransactionRequest,
113
+ operation: UserOpDataOperationTypes<UserOperationCallData> = Operation.Call
114
+ ): Promise<Hash> => {
115
+ if (!request.to) {
116
+ throw new Error("transaction is missing to address");
117
+ }
118
+
119
+ const overrides: UserOperationOverrides = {};
120
+ if (request.maxFeePerGas) {
121
+ overrides.maxFeePerGas = request.maxFeePerGas;
122
+ }
123
+ if (request.maxPriorityFeePerGas) {
124
+ overrides.maxPriorityFeePerGas = request.maxPriorityFeePerGas;
125
+ }
126
+
127
+ const { hash } = await this.sendUserOperation(
128
+ {
129
+ target: request.to,
130
+ data: request.data ?? "0x",
131
+ value: request.value ? fromHex(request.value, "bigint") : 0n,
132
+ },
133
+ overrides,
134
+ operation
135
+ );
136
+
137
+ return await this.waitForUserOperationTransaction(hash as Hash);
138
+ };
139
+
140
+ sendUserOperation = async <
141
+ T extends UserOperationCallData | BatchUserOperationCallData
142
+ >(
143
+ data: T,
144
+ overrides?: UserOperationOverrides,
145
+ operation: UserOpDataOperationTypes<T> = Operation.Call as UserOpDataOperationTypes<T>
146
+ ): Promise<SendUserOperationResult> => {
147
+ if (!isKernelAccount(this.account)) {
148
+ throw new Error("account not connected!");
149
+ }
150
+ if (!this.account.validator) {
151
+ throw new Error("validator not connected!");
152
+ }
153
+
154
+ let callData: BytesLike = "0x";
155
+
156
+ if (Array.isArray(data)) {
157
+ if (operation === Operation.Call) {
158
+ callData = await this.account.encodeBatchExecute(data);
159
+ } else {
160
+ throw InvalidOperation;
161
+ }
162
+ } else if (isKernelAccount(this.account)) {
163
+ if (operation === Operation.DelegateCall) {
164
+ callData = await this.account.encodeExecuteDelegate(
165
+ data.target,
166
+ data.value ?? 0n,
167
+ data.data
168
+ );
169
+ } else if (operation === Operation.Call) {
170
+ callData = await this.account.encodeExecute(
171
+ data.target,
172
+ data.value ?? 0n,
173
+ data.data
174
+ );
175
+ } else {
176
+ throw InvalidOperation;
177
+ }
178
+ } else {
179
+ throw InvalidOperation;
180
+ }
181
+
182
+ const initCode = await this.account.getInitCode();
183
+ let hash: string = "";
184
+ let i = 0;
185
+ let maxFeePerGas = 0n;
186
+ let maxPriorityFeePerGas = 0n;
187
+ let request: UserOperationStruct;
188
+
189
+ const nonce = await this.account.getNonce();
190
+ do {
191
+ const uoStruct = await asyncPipe(
192
+ this.dummyPaymasterDataMiddleware,
193
+ this.feeDataGetter,
194
+ this.paymasterDataMiddleware,
195
+ this.gasEstimator,
196
+ this.customMiddleware ?? noOpMiddleware,
197
+ async (struct) => ({ ...struct, ...overrides })
198
+ )({
199
+ initCode,
200
+ sender: this.getAddress(),
201
+ nonce,
202
+ callData,
203
+ signature: await this.account
204
+ .getValidator()
205
+ .getDynamicDummySignature(await this.getAddress(), callData as Hex),
206
+ maxFeePerGas,
207
+ maxPriorityFeePerGas,
208
+ } as UserOperationStruct);
209
+ request = deepHexlify(await resolveProperties(uoStruct));
210
+
211
+ if (!isValidRequest(request)) {
212
+ // this pretty prints the uo
213
+ throw new Error(
214
+ `Request is missing parameters. All properties on UserOperationStruct must be set. uo: ${JSON.stringify(
215
+ request,
216
+ null,
217
+ 2
218
+ )}`
219
+ );
220
+ }
221
+
222
+ request.signature = await this.account.validator.getSignature(request);
223
+ try {
224
+ hash = await this.rpcClient.sendUserOperation(
225
+ request,
226
+ this.entryPointAddress
227
+ );
228
+ } catch (error: any) {
229
+ if (this.isReplacementOpError(error) && i++ < this.sendTxMaxRetries) {
230
+ maxFeePerGas = (BigInt(request.maxFeePerGas) * 113n) / 100n;
231
+ maxPriorityFeePerGas =
232
+ (BigInt(request.maxPriorityFeePerGas) * 113n) / 100n;
233
+ console.log(
234
+ `After ${
235
+ this.sendTxRetryIntervalMs / 60000
236
+ } minutes, resending tx with Increased Gas fees: maxFeePerGas: ${maxFeePerGas}, maxPriorityFeePerGas: ${maxPriorityFeePerGas}`
237
+ );
238
+ await new Promise((resolve) =>
239
+ setTimeout(resolve, this.sendTxRetryIntervalMs)
240
+ );
241
+ continue;
242
+ }
243
+ throw this.unwrapError(error);
244
+ }
245
+ } while (hash === "");
246
+
247
+ return {
248
+ hash,
249
+ request,
250
+ };
251
+ };
252
+
253
+ isReplacementOpError(errorIn: any): boolean {
254
+ if (errorIn.cause != null) {
255
+ const failedOpMessage: string | undefined = errorIn?.cause?.message;
256
+ return (
257
+ (failedOpMessage?.includes(
258
+ "replacement op must increase maxFeePerGas and MaxPriorityFeePerGas"
259
+ ) ||
260
+ failedOpMessage?.match(/.*replacement.*underpriced.*/) !== null) ??
261
+ false
262
+ );
263
+ }
264
+ return false;
265
+ }
266
+
267
+ unwrapError(errorIn: any): Error {
268
+ if (errorIn?.cause != null) {
269
+ let paymasterInfo: string = "";
270
+ let failedOpMessage: string | undefined = errorIn?.cause?.message;
271
+ if (failedOpMessage?.includes("FailedOp") === true) {
272
+ // TODO: better error extraction methods will be needed
273
+ const matched = failedOpMessage.match(/FailedOp\((.*)\)/);
274
+ if (matched != null) {
275
+ const split = matched[1].split(",");
276
+ paymasterInfo = `(paymaster address: ${split[1]})`;
277
+ failedOpMessage = split[2];
278
+ }
279
+ }
280
+ const error = new Error(
281
+ `The bundler has failed to include UserOperation in a batch: ${failedOpMessage} ${paymasterInfo}`
282
+ );
283
+ error.stack = errorIn.stack;
284
+ return error;
285
+ }
286
+ return errorIn;
287
+ }
288
+
289
+ getAccount: () => KernelSmartContractAccount = () => {
290
+ if (!isKernelAccount(this.account)) {
291
+ throw new Error("account not connected!");
292
+ }
293
+ return this.account;
294
+ };
295
+
296
+ dummyPaymasterDataMiddleware: AccountMiddlewareFn = async (
297
+ struct: UserOperationStruct
298
+ ): Promise<UserOperationStruct> => {
299
+ struct.paymasterAndData =
300
+ "0xfe7dbcab8aaee4eb67943c1e6be95b1d065985c6000000000000000000000000000000000000000000000000000001869aa31cf400000000000000000000000000000000000000000000000000000000000000007dfe2190f34af27b265bae608717cdc9368b471fc0c097ab7b4088f255b4961e57b039e7e571b15221081c5dce7bcb93459b27a3ab65d2f8a889f4a40b4022801b";
301
+ return struct;
302
+ };
303
+
304
+ withZeroDevPaymasterAndData(config: PaymasterConfig<PaymasterPolicy>) {
305
+ if (!this.isConnected()) {
306
+ throw new Error(
307
+ "ZeroDevProvider: account is not set, did you call `connect` first?"
308
+ );
309
+ }
310
+
311
+ return withZeroDevPaymasterAndData(this, config);
312
+ }
313
+
314
+ request: (args: { method: string; params?: any[] }) => Promise<any> = async (
315
+ args
316
+ ) => {
317
+ const { method, params } = args;
318
+ switch (method) {
319
+ case "eth_chainId":
320
+ return this.chain.id;
321
+ case "eth_sendTransaction":
322
+ const [tx] = params as [RpcTransactionRequest];
323
+ return this.sendTransaction(tx);
324
+ case "personal_sign":
325
+ if (!this.account) {
326
+ throw new Error("account not connected!");
327
+ }
328
+ const [data, address] = params!;
329
+ if (address !== (await this.getAddress())) {
330
+ throw new Error(
331
+ "cannot sign for address that is not the current account"
332
+ );
333
+ }
334
+ // @ts-ignore
335
+ return this.account.signWithEip6492(data);
336
+ default:
337
+ // @ts-ignore
338
+ return this.rpcClient.request(args);
339
+ }
340
+ };
341
+ }
@@ -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
+ }
@@ -0,0 +1,106 @@
1
+ import {
2
+ encodePacked,
3
+ fromBytes,
4
+ toBytes,
5
+ type Hex,
6
+ type WalletClient,
7
+ toHex,
8
+ } from "viem";
9
+ import type {
10
+ SignTypedDataParams,
11
+ SmartAccountSigner,
12
+ UserOperationCallData,
13
+ } from "@alchemy/aa-core";
14
+ import { Signer, type TypedDataField } from "@ethersproject/abstract-signer";
15
+ import { Wallet } from "@ethersproject/wallet";
16
+ import type { SupportedGasToken } from "./paymaster/types.js";
17
+ import { gasTokenChainAddresses } from "./constants.js";
18
+
19
+ export type UserOperationCallDataWithDelegate = UserOperationCallData & {
20
+ delegateCall?: boolean;
21
+ };
22
+
23
+ export type BatchUserOperationCallDataWithDelegate =
24
+ UserOperationCallDataWithDelegate[];
25
+
26
+ const encodeCall = (_tx: UserOperationCallDataWithDelegate): string => {
27
+ const data = toBytes(_tx.data);
28
+ const encoded = encodePacked(
29
+ ["uint8", "address", "uint256", "uint256", "bytes"],
30
+ [
31
+ _tx.delegateCall ? 1 : 0,
32
+ _tx.target,
33
+ _tx.value || BigInt(0),
34
+ BigInt(data.length),
35
+ fromBytes(data, "hex"),
36
+ ]
37
+ );
38
+ return encoded.slice(2);
39
+ };
40
+ export const encodeMultiSend = (
41
+ _txs: BatchUserOperationCallDataWithDelegate
42
+ ): Hex => {
43
+ return ("0x" + _txs.map((tx) => encodeCall(tx)).join("")) as Hex;
44
+ };
45
+
46
+ export function getGasTokenAddress(
47
+ gasToken: SupportedGasToken,
48
+ chainId: number
49
+ ): Hex | undefined {
50
+ if (gasToken === "TEST_ERC20") {
51
+ return "0x3870419Ba2BBf0127060bCB37f69A1b1C090992B";
52
+ }
53
+ return gasTokenChainAddresses[gasToken][chainId] || undefined;
54
+ }
55
+
56
+ export const convertWalletClientToAccountSigner = (
57
+ client: WalletClient
58
+ ): SmartAccountSigner => {
59
+ return {
60
+ getAddress: async () =>
61
+ Promise.resolve((await client.getAddresses())[0] as `0x${string}`),
62
+ signMessage: async (message: Uint8Array | string) =>
63
+ (await client.signMessage({
64
+ account: client.account!,
65
+ message:
66
+ typeof message === "string"
67
+ ? message
68
+ : {
69
+ raw: message,
70
+ },
71
+ })) as `0x${string}`,
72
+ signTypedData: async (params: SignTypedDataParams) =>
73
+ await client.signTypedData({ ...params, account: client.account! }),
74
+ };
75
+ };
76
+
77
+ export const isWallet = (signer: any): signer is Wallet =>
78
+ signer && signer._signTypedData !== undefined;
79
+
80
+ export const convertEthersSignerToAccountSigner = (
81
+ signer: Signer | Wallet
82
+ ): SmartAccountSigner => {
83
+ return {
84
+ getAddress: async () =>
85
+ Promise.resolve((await signer.getAddress()) as `0x${string}`),
86
+ signMessage: async (msg: Uint8Array | string) =>
87
+ (await signer.signMessage(msg)) as `0x${string}`,
88
+ signTypedData: async (params: SignTypedDataParams) => {
89
+ if (!isWallet(signer)) {
90
+ throw Error("signTypedData method not implemented in signer");
91
+ }
92
+ return (await signer._signTypedData(
93
+ params.domain!,
94
+ params.types as unknown as Record<string, TypedDataField[]>,
95
+ params.message
96
+ )) as Hex;
97
+ },
98
+ };
99
+ };
100
+
101
+ export const randomHexString = (length: number): Hex =>
102
+ toHex(
103
+ Array.from({ length }, () =>
104
+ Math.floor(Math.random() * 16).toString(16)
105
+ ).join("")
106
+ );