@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,183 @@
1
+ import type { ZeroDevProvider } from "../provider.js";
2
+ import {
3
+ deepHexlify,
4
+ type Hex,
5
+ type UserOperationStruct,
6
+ resolveProperties,
7
+ type BigNumberish,
8
+ type UserOperationEstimateGasResponse,
9
+ } from "@alchemy/aa-core";
10
+ import { ENTRYPOINT_ADDRESS } from "../constants.js";
11
+ import { calcPreVerificationGas } from "../utils/calc-pre-verification-gas.js";
12
+
13
+ export const withZeroDevGasEstimator = (
14
+ provider: ZeroDevProvider
15
+ ): ZeroDevProvider => {
16
+ provider.withFeeDataGetter(async (struct) => {
17
+ let overrides = await resolveProperties({
18
+ maxFeePerGas: struct.maxFeePerGas ?? 0n,
19
+ maxPriorityFeePerGas: struct.maxPriorityFeePerGas ?? 0n,
20
+ });
21
+
22
+ let maxFeePerGas, maxPriorityFeePerGas;
23
+
24
+ try {
25
+ ({ maxFeePerGas, maxPriorityFeePerGas } = await eip1559GasPrice(
26
+ provider
27
+ ));
28
+ } catch (error: any) {
29
+ console.warn(
30
+ "getGas: eth_maxPriorityFeePerGas failed, falling back to legacy gas price."
31
+ );
32
+ }
33
+
34
+ if (maxFeePerGas === undefined || maxPriorityFeePerGas === undefined) {
35
+ const feeData = await getFeeData(provider);
36
+ maxFeePerGas = feeData?.maxFeePerGas ? BigInt(feeData?.maxFeePerGas) : 0n;
37
+ maxPriorityFeePerGas = feeData.maxPriorityFeePerGas
38
+ ? BigInt(feeData.maxPriorityFeePerGas)
39
+ : 0n;
40
+ }
41
+
42
+ if (
43
+ maxFeePerGas < BigInt(overrides.maxFeePerGas) ||
44
+ maxPriorityFeePerGas < BigInt(overrides.maxPriorityFeePerGas)
45
+ ) {
46
+ return overrides;
47
+ }
48
+ return { maxFeePerGas, maxPriorityFeePerGas };
49
+ });
50
+
51
+ provider.withGasEstimator(async (struct) => {
52
+ if (
53
+ struct.callGasLimit !== undefined &&
54
+ struct.verificationGasLimit !== undefined &&
55
+ struct.preVerificationGas !== undefined
56
+ ) {
57
+ return struct;
58
+ }
59
+ const initCode = await provider.account?.getInitCode();
60
+ const initGas = await estimateCreationGas(provider, initCode);
61
+ const partialStruct: UserOperationStruct = {
62
+ ...struct,
63
+ callGasLimit:
64
+ initCode !== undefined && initCode.length > 2
65
+ ? BigInt("1000000")
66
+ : BigInt(55000),
67
+ verificationGasLimit: BigInt(110000) + initGas,
68
+ preVerificationGas: BigInt(100000),
69
+ };
70
+
71
+ partialStruct.preVerificationGas = await getPreVerificationGas(
72
+ partialStruct
73
+ );
74
+
75
+ const request = deepHexlify(await resolveProperties(partialStruct));
76
+ let userOpGasEstimates: UserOperationEstimateGasResponse | undefined;
77
+ userOpGasEstimates = await provider.rpcClient.estimateUserOperationGas(
78
+ request,
79
+ ENTRYPOINT_ADDRESS
80
+ );
81
+ const { preVerificationGas, verificationGasLimit, callGasLimit } =
82
+ userOpGasEstimates;
83
+ request.preVerificationGas =
84
+ (BigInt(preVerificationGas) * 12n) / 10n ?? request.preVerificationGas;
85
+ request.verificationGasLimit =
86
+ (BigInt(verificationGasLimit) * 12n) / 10n ??
87
+ request.verificationGasLimit;
88
+ request.callGasLimit =
89
+ (BigInt(callGasLimit) * 12n) / 10n ?? request.callGasLimit;
90
+
91
+ return {
92
+ ...struct,
93
+ ...request,
94
+ };
95
+ });
96
+
97
+ return provider;
98
+ };
99
+
100
+ export const estimateCreationGas = async (
101
+ provider: ZeroDevProvider,
102
+ initCode?: string
103
+ ): Promise<bigint> => {
104
+ if (initCode == null || initCode === "0x") return BigInt(0);
105
+ const deployerAddress = initCode.substring(0, 42) as Hex;
106
+ const deployerCallData = ("0x" + initCode.substring(42)) as Hex;
107
+ return await provider.rpcClient.estimateGas({
108
+ account: ENTRYPOINT_ADDRESS,
109
+ to: deployerAddress,
110
+ data: deployerCallData,
111
+ });
112
+ };
113
+
114
+ /**
115
+ * should cover cost of putting calldata on-chain, and some overhead.
116
+ * actual overhead depends on the expected bundle size
117
+ */
118
+ export const getPreVerificationGas = async (
119
+ userOp: Partial<UserOperationStruct>
120
+ ): Promise<number> => {
121
+ const p = await resolveProperties(userOp);
122
+ return calcPreVerificationGas(p);
123
+ };
124
+
125
+ export const eip1559GasPrice = async (provider: ZeroDevProvider) => {
126
+ const [fee, block] = await Promise.all([
127
+ provider.rpcClient.getMaxPriorityFeePerGas(),
128
+ provider.rpcClient.getBlock({ blockTag: "latest" }),
129
+ ]);
130
+
131
+ const tip = BigInt(fee);
132
+ const buffer = (tip / 100n) * 13n;
133
+ let maxPriorityFeePerGas = tip + buffer;
134
+ maxPriorityFeePerGas =
135
+ maxPriorityFeePerGas < provider.minPriorityFeePerBid
136
+ ? provider.minPriorityFeePerBid
137
+ : maxPriorityFeePerGas;
138
+ const maxFeePerGas = block.baseFeePerGas
139
+ ? BigInt(block.baseFeePerGas) * 2n + maxPriorityFeePerGas
140
+ : maxPriorityFeePerGas;
141
+
142
+ return { maxFeePerGas, maxPriorityFeePerGas };
143
+ };
144
+ interface FeeData {
145
+ maxFeePerGas: BigNumberish | null;
146
+ maxPriorityFeePerGas: BigNumberish | null;
147
+ }
148
+
149
+ export const getFeeData = async (
150
+ provider: ZeroDevProvider
151
+ ): Promise<FeeData> => {
152
+ const { block, gasPrice } = await resolveProperties({
153
+ block: provider.rpcClient.getBlock({ blockTag: "latest" }),
154
+ gasPrice: provider.rpcClient.getGasPrice().catch((error) => {
155
+ console.warn("Legacy: Failed to get gas price", error);
156
+ return null;
157
+ }),
158
+ });
159
+
160
+ let maxFeePerGas = null;
161
+ let maxPriorityFeePerGas = null;
162
+
163
+ if (block && block.baseFeePerGas != null) {
164
+ // Set the tip to the min of the tip for the last block and 1.5 gwei
165
+ const minimumTip = BigInt("1500000000");
166
+ maxPriorityFeePerGas = gasPrice ? gasPrice - block.baseFeePerGas : null;
167
+ if (
168
+ maxPriorityFeePerGas == null ||
169
+ maxPriorityFeePerGas - BigInt(0) ||
170
+ maxPriorityFeePerGas > minimumTip
171
+ ) {
172
+ maxPriorityFeePerGas = minimumTip;
173
+ }
174
+ maxPriorityFeePerGas =
175
+ maxPriorityFeePerGas < provider.minPriorityFeePerBid
176
+ ? provider.minPriorityFeePerBid
177
+ : maxPriorityFeePerGas;
178
+ maxFeePerGas =
179
+ block.baseFeePerGas * BigInt(2) + (maxPriorityFeePerGas ?? 0);
180
+ }
181
+
182
+ return { maxFeePerGas, maxPriorityFeePerGas };
183
+ };
@@ -0,0 +1,66 @@
1
+ import { type ConnectedSmartAccountProvider } from "@alchemy/aa-core";
2
+ import type { ZeroDevProvider } from "../provider.js";
3
+ import { Paymasters } from "../paymaster/index.js";
4
+ import type { PaymasterConfig, PaymasterPolicy } from "../paymaster/types.js";
5
+
6
+ export const withZeroDevPaymasterAndData = <Provider extends ZeroDevProvider>(
7
+ provider: Provider,
8
+ paymasterConfig: PaymasterConfig<PaymasterPolicy>
9
+ ): Provider => {
10
+ provider.withPaymasterMiddleware(
11
+ zeroDevPaymasterAndDataMiddleware(provider, paymasterConfig)
12
+ );
13
+
14
+ return provider;
15
+ };
16
+
17
+ export const zeroDevPaymasterAndDataMiddleware = <
18
+ Provider extends ZeroDevProvider,
19
+ P extends PaymasterPolicy
20
+ >(
21
+ provider: Provider,
22
+ paymasterConfig: PaymasterConfig<P>
23
+ ): Parameters<
24
+ ConnectedSmartAccountProvider["withPaymasterMiddleware"]
25
+ >["0"] => {
26
+ return {
27
+ dummyPaymasterDataMiddleware: async (struct) => {
28
+ struct.paymasterAndData = "0x";
29
+ return struct;
30
+ },
31
+ paymasterDataMiddleware: async (struct) => {
32
+ const preVerificationGas = BigInt("100000");
33
+ const verificationGasLimit = BigInt("1000000");
34
+ const callGasLimit = BigInt("55000");
35
+ const paymaster = new Paymasters[paymasterConfig.policy](
36
+ provider,
37
+ paymasterConfig
38
+ );
39
+ const paymasterResp = await paymaster.getPaymasterResponse(
40
+ {
41
+ ...struct,
42
+ preVerificationGas,
43
+ verificationGasLimit,
44
+ callGasLimit,
45
+ },
46
+ paymasterConfig.paymasterProvider
47
+ );
48
+ if (
49
+ paymasterConfig.onlySendSponsoredTransaction &&
50
+ (!paymasterResp || paymasterResp.paymasterAndData === "0x")
51
+ ) {
52
+ throw new Error("Transaction is not sponsored");
53
+ }
54
+ if (
55
+ paymasterResp === undefined ||
56
+ paymasterResp.paymasterAndData === "0x"
57
+ ) {
58
+ return struct;
59
+ }
60
+ return {
61
+ ...struct,
62
+ ...paymasterResp,
63
+ };
64
+ },
65
+ };
66
+ };
@@ -0,0 +1,76 @@
1
+ import {
2
+ deepHexlify,
3
+ type BytesLike,
4
+ type PromiseOrValue,
5
+ type UserOperationStruct,
6
+ resolveProperties,
7
+ } from "@alchemy/aa-core";
8
+ import axios from "axios";
9
+ import { ENTRYPOINT_ADDRESS, PAYMASTER_URL } from "../constants.js";
10
+ import type { ZeroDevProvider } from "../provider.js";
11
+ import { hexifyUserOp } from "../utils/ERC4337-utils.js";
12
+ import type { PaymasterAndBundlerProviders } from "./types.js";
13
+ import { getChainId } from "../api/index.js";
14
+
15
+ export abstract class Paymaster {
16
+ constructor(protected provider: ZeroDevProvider) {}
17
+ abstract getPaymasterResponse(
18
+ struct: UserOperationStruct,
19
+ paymasterProvider?: PaymasterAndBundlerProviders
20
+ ): Promise<UserOperationStruct>;
21
+ protected async signUserOp({
22
+ userOp,
23
+ callData,
24
+ gasTokenAddress,
25
+ erc20UserOp,
26
+ erc20CallData,
27
+ paymasterProvider,
28
+ }: {
29
+ userOp: UserOperationStruct;
30
+ callData?: PromiseOrValue<BytesLike>;
31
+ gasTokenAddress?: string;
32
+ erc20UserOp?: Partial<UserOperationStruct>;
33
+ erc20CallData?: PromiseOrValue<BytesLike>;
34
+ paymasterProvider?: PaymasterAndBundlerProviders;
35
+ }): Promise<any> {
36
+ try {
37
+ const hexifiedUserOp = deepHexlify(await resolveProperties(userOp));
38
+ let resolvedERC20UserOp;
39
+ let hexifiedERC20UserOp: any;
40
+ if (erc20UserOp) {
41
+ resolvedERC20UserOp = await resolveProperties(erc20UserOp);
42
+
43
+ hexifiedERC20UserOp = hexifyUserOp(resolvedERC20UserOp);
44
+ }
45
+ const chainId = await getChainId(this.provider.getProjectId());
46
+ if (!chainId) throw new Error("ChainId not found");
47
+ let requestBodyParams = Object.fromEntries(
48
+ Object.entries({
49
+ projectId: this.provider.getProjectId(),
50
+ chainId,
51
+ userOp: hexifiedUserOp,
52
+ entryPointAddress: ENTRYPOINT_ADDRESS,
53
+ callData: callData instanceof Promise ? await callData : callData,
54
+ tokenAddress: gasTokenAddress,
55
+ erc20UserOp: hexifiedERC20UserOp,
56
+ erc20CallData:
57
+ erc20CallData instanceof Promise
58
+ ? await erc20CallData
59
+ : erc20CallData,
60
+ paymasterProvider,
61
+ }).filter(([_, value]) => value !== undefined)
62
+ );
63
+ const { data: paymasterResp } = await axios.post(
64
+ `${PAYMASTER_URL}/sign`,
65
+ {
66
+ ...requestBodyParams,
67
+ },
68
+ { headers: { "Content-Type": "application/json" } }
69
+ );
70
+ return paymasterResp;
71
+ } catch (error) {
72
+ console.log(error);
73
+ return undefined;
74
+ }
75
+ }
76
+ }
@@ -0,0 +1,9 @@
1
+ import { TokenPaymaster } from "./token-paymaster.js";
2
+ import type { PaymasterMap } from "./types.js";
3
+ import { VerifyingPaymaster } from "./verifying-paymaster.js";
4
+ import type { ZeroDevProvider } from "../provider.js";
5
+
6
+ export const Paymasters: PaymasterMap<ZeroDevProvider> = {
7
+ VERIFYING_PAYMASTER: VerifyingPaymaster,
8
+ TOKEN_PAYMASTER: TokenPaymaster,
9
+ };
@@ -0,0 +1,209 @@
1
+ import {
2
+ type PromiseOrValue,
3
+ type BytesLike,
4
+ type UserOperationCallData,
5
+ type UserOperationStruct,
6
+ } from "@alchemy/aa-core";
7
+ import axios from "axios";
8
+ import { type Hex, toHex, decodeFunctionData, encodeFunctionData } from "viem";
9
+ import { ERC20Abi } from "../abis/ERC20Abi.js";
10
+ import { KernelAccountAbi } from "../abis/KernelAccountAbi.js";
11
+ import { MultiSendAbi } from "../abis/MultiSendAbi.js";
12
+ import {
13
+ PAYMASTER_URL,
14
+ ENTRYPOINT_ADDRESS,
15
+ MULTISEND_ADDR,
16
+ ERC20_APPROVAL_AMOUNT,
17
+ } from "../constants.js";
18
+ import {
19
+ AccountNotConnected,
20
+ IncorrectCallDataForTokenPaymaster,
21
+ } from "../errors.js";
22
+ import type { ZeroDevProvider } from "../provider.js";
23
+ import {
24
+ getGasTokenAddress,
25
+ type UserOperationCallDataWithDelegate,
26
+ } from "../utils.js";
27
+ import { Paymaster } from "./base.js";
28
+ import {
29
+ type PaymasterAndBundlerProviders,
30
+ type PaymasterConfig,
31
+ } from "./types.js";
32
+ import { getChainId } from "../api/index.js";
33
+
34
+ export class TokenPaymaster extends Paymaster {
35
+ constructor(
36
+ provider: ZeroDevProvider,
37
+ protected paymasterConfig: PaymasterConfig<"TOKEN_PAYMASTER">
38
+ ) {
39
+ super(provider);
40
+ }
41
+ async getPaymasterAddress(): Promise<Hex | undefined> {
42
+ const chainId = await getChainId(this.provider.getProjectId());
43
+
44
+ try {
45
+ const { data: paymasterResp } = await axios.post(
46
+ `${PAYMASTER_URL}/getPaymasterAddress`,
47
+ {
48
+ chainId,
49
+ entryPointAddress: ENTRYPOINT_ADDRESS,
50
+ },
51
+ { headers: { "Content-Type": "application/json" } }
52
+ );
53
+ return paymasterResp as Hex;
54
+ } catch (e) {
55
+ console.log(e);
56
+ return undefined;
57
+ }
58
+ }
59
+ async decodeMainCallFromCallData(
60
+ kernelAddress: PromiseOrValue<string>,
61
+ callData: PromiseOrValue<BytesLike>
62
+ ): Promise<UserOperationCallDataWithDelegate | undefined> {
63
+ let data: Hex = "0x";
64
+ if (callData instanceof Promise) {
65
+ const _data = await callData;
66
+ if (_data instanceof Uint8Array) {
67
+ data = toHex(_data);
68
+ } else {
69
+ data = _data as Hex;
70
+ }
71
+ } else if (callData instanceof Uint8Array) {
72
+ data = toHex(callData);
73
+ } else {
74
+ data = callData as Hex;
75
+ }
76
+
77
+ try {
78
+ const { functionName, args } = decodeFunctionData({
79
+ abi: KernelAccountAbi,
80
+ data: data,
81
+ });
82
+ if (functionName === "execute") {
83
+ const [target, value, data] = args;
84
+ let msFuntionName;
85
+ try {
86
+ ({ functionName: msFuntionName } = decodeFunctionData({
87
+ abi: MultiSendAbi,
88
+ data,
89
+ }));
90
+ } catch (error) {}
91
+ let mainCall:
92
+ | UserOperationCallData
93
+ | UserOperationCallDataWithDelegate = {
94
+ target,
95
+ value: value ?? 0n,
96
+ data,
97
+ };
98
+ if (msFuntionName === "multiSend") {
99
+ mainCall = {
100
+ ...mainCall,
101
+ target: MULTISEND_ADDR,
102
+ delegateCall: true,
103
+ data,
104
+ };
105
+ }
106
+ return mainCall;
107
+ }
108
+ } catch (error) {
109
+ return {
110
+ target: (kernelAddress instanceof Promise
111
+ ? await kernelAddress
112
+ : kernelAddress) as Hex,
113
+ data,
114
+ value: 0n,
115
+ delegateCall: true,
116
+ };
117
+ }
118
+ return;
119
+ }
120
+
121
+ async getERC20UserOp(
122
+ struct: UserOperationStruct,
123
+ mainCall: UserOperationCallDataWithDelegate,
124
+ gasTokenAddress: Hex,
125
+ paymasterAddress: Hex
126
+ ): Promise<UserOperationStruct | undefined> {
127
+ try {
128
+ const approveData: UserOperationCallData = {
129
+ target: gasTokenAddress,
130
+ value: BigInt(0),
131
+ data: encodeFunctionData({
132
+ abi: ERC20Abi,
133
+ functionName: "approve",
134
+ args: [paymasterAddress, ERC20_APPROVAL_AMOUNT[gasTokenAddress]],
135
+ }),
136
+ };
137
+ if (!this.provider.account) {
138
+ throw AccountNotConnected;
139
+ }
140
+ const erc20CallData = await this.provider.account.encodeBatchExecute([
141
+ approveData,
142
+ mainCall,
143
+ ]);
144
+ return {
145
+ ...struct,
146
+ callData: erc20CallData,
147
+ callGasLimit: await this.provider.rpcClient.estimateGas({
148
+ account: ENTRYPOINT_ADDRESS,
149
+ to: await this.provider.getAddress(),
150
+ data: erc20CallData,
151
+ }),
152
+ };
153
+ } catch (error) {
154
+ return;
155
+ }
156
+ }
157
+
158
+ async getPaymasterResponse(
159
+ struct: UserOperationStruct,
160
+ paymasterProvider?: PaymasterAndBundlerProviders
161
+ ): Promise<UserOperationStruct> {
162
+ try {
163
+ const mainCall = await this.decodeMainCallFromCallData(
164
+ struct.sender,
165
+ struct.callData
166
+ );
167
+ if (!mainCall) {
168
+ throw IncorrectCallDataForTokenPaymaster;
169
+ }
170
+ const chainId = await getChainId(this.provider.getProjectId());
171
+ if (!chainId) {
172
+ throw new Error("ChainId not found");
173
+ }
174
+ const gasTokenAddress = getGasTokenAddress(
175
+ this.paymasterConfig.gasToken,
176
+ chainId
177
+ );
178
+ let paymasterAddress = await this.getPaymasterAddress();
179
+ if (gasTokenAddress !== undefined && paymasterAddress !== undefined) {
180
+ const erc20UserOp = await this.getERC20UserOp(
181
+ struct,
182
+ mainCall,
183
+ gasTokenAddress,
184
+ paymasterAddress
185
+ );
186
+ if (!erc20UserOp) {
187
+ return struct;
188
+ }
189
+ const paymasterResp = await this.signUserOp({
190
+ userOp: struct,
191
+ callData: struct.callData,
192
+ gasTokenAddress,
193
+ erc20UserOp,
194
+ erc20CallData: erc20UserOp.callData,
195
+ paymasterProvider,
196
+ });
197
+ if (paymasterResp) {
198
+ return {
199
+ ...struct,
200
+ ...paymasterResp,
201
+ };
202
+ }
203
+ }
204
+ } catch (error) {
205
+ return struct;
206
+ }
207
+ return struct;
208
+ }
209
+ }
@@ -0,0 +1,36 @@
1
+ import type { Hex } from "viem";
2
+ import type { Paymaster } from "./base.js";
3
+ import type { ZeroDevProvider } from "../provider.js";
4
+
5
+ export type PaymasterAndBundlerProviders = "ALCHEMY" | "STACKUP" | "PIMLICO";
6
+
7
+ export type SupportedGasToken = "USDC" | "PEPE" | "TEST_ERC20";
8
+
9
+ export type PaymasterPolicy = "VERIFYING_PAYMASTER" | "TOKEN_PAYMASTER";
10
+
11
+ interface PaymasterConfigOptions {
12
+ VERIFYING_PAYMASTER: {};
13
+ TOKEN_PAYMASTER: { gasToken: SupportedGasToken };
14
+ }
15
+
16
+ export type PaymasterConfig<T extends PaymasterPolicy> = {
17
+ policy: T;
18
+ paymasterProvider?: PaymasterAndBundlerProviders;
19
+ onlySendSponsoredTransaction?: boolean;
20
+ } & PaymasterConfigOptions[T];
21
+ export interface IGasTokenAddresses {
22
+ [key: string]: {
23
+ [chainId: number]: Hex;
24
+ };
25
+ }
26
+
27
+ export interface IPaymaster<
28
+ Provider extends ZeroDevProvider,
29
+ P extends PaymasterPolicy
30
+ > {
31
+ new (provider: Provider, paymasterConfig: PaymasterConfig<P>): Paymaster;
32
+ }
33
+
34
+ export type PaymasterMap<Provider extends ZeroDevProvider> = {
35
+ [P in PaymasterPolicy]: IPaymaster<Provider, P>;
36
+ };
@@ -0,0 +1,38 @@
1
+ import {
2
+ type UserOperationStruct,
3
+ deepHexlify,
4
+ resolveProperties,
5
+ } from "@alchemy/aa-core";
6
+ import { Paymaster } from "./base.js";
7
+ import type { ZeroDevProvider } from "../provider.js";
8
+ import type { PaymasterAndBundlerProviders, PaymasterConfig } from "./types.js";
9
+
10
+ export class VerifyingPaymaster extends Paymaster {
11
+ constructor(
12
+ provider: ZeroDevProvider,
13
+ _: PaymasterConfig<"VERIFYING_PAYMASTER">
14
+ ) {
15
+ super(provider);
16
+ }
17
+ async getPaymasterResponse(
18
+ struct: UserOperationStruct,
19
+ paymasterProvider?: PaymasterAndBundlerProviders
20
+ ): Promise<UserOperationStruct> {
21
+ try {
22
+ const hexifiedUserOp = deepHexlify(await resolveProperties(struct));
23
+ const paymasterResp = await this.signUserOp({
24
+ userOp: hexifiedUserOp,
25
+ paymasterProvider,
26
+ });
27
+ if (paymasterResp) {
28
+ return {
29
+ ...struct,
30
+ ...paymasterResp,
31
+ };
32
+ }
33
+ } catch (error) {
34
+ return struct;
35
+ }
36
+ return struct;
37
+ }
38
+ }