@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,173 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.TokenPaymaster = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const viem_1 = require("viem");
9
+ const ERC20Abi_js_1 = require("../abis/ERC20Abi.js");
10
+ const KernelAccountAbi_js_1 = require("../abis/KernelAccountAbi.js");
11
+ const MultiSendAbi_js_1 = require("../abis/MultiSendAbi.js");
12
+ const constants_js_1 = require("../constants.js");
13
+ const errors_js_1 = require("../errors.js");
14
+ const utils_js_1 = require("../utils.js");
15
+ const base_js_1 = require("./base.js");
16
+ const index_js_1 = require("../api/index.js");
17
+ class TokenPaymaster extends base_js_1.Paymaster {
18
+ constructor(provider, paymasterConfig) {
19
+ super(provider);
20
+ Object.defineProperty(this, "paymasterConfig", {
21
+ enumerable: true,
22
+ configurable: true,
23
+ writable: true,
24
+ value: paymasterConfig
25
+ });
26
+ }
27
+ async getPaymasterAddress() {
28
+ const chainId = await (0, index_js_1.getChainId)(this.provider.getProjectId());
29
+ try {
30
+ const { data: paymasterResp } = await axios_1.default.post(`${constants_js_1.PAYMASTER_URL}/getPaymasterAddress`, {
31
+ chainId,
32
+ entryPointAddress: constants_js_1.ENTRYPOINT_ADDRESS,
33
+ }, { headers: { "Content-Type": "application/json" } });
34
+ return paymasterResp;
35
+ }
36
+ catch (e) {
37
+ console.log(e);
38
+ return undefined;
39
+ }
40
+ }
41
+ async decodeMainCallFromCallData(kernelAddress, callData) {
42
+ let data = "0x";
43
+ if (callData instanceof Promise) {
44
+ const _data = await callData;
45
+ if (_data instanceof Uint8Array) {
46
+ data = (0, viem_1.toHex)(_data);
47
+ }
48
+ else {
49
+ data = _data;
50
+ }
51
+ }
52
+ else if (callData instanceof Uint8Array) {
53
+ data = (0, viem_1.toHex)(callData);
54
+ }
55
+ else {
56
+ data = callData;
57
+ }
58
+ try {
59
+ const { functionName, args } = (0, viem_1.decodeFunctionData)({
60
+ abi: KernelAccountAbi_js_1.KernelAccountAbi,
61
+ data: data,
62
+ });
63
+ if (functionName === "execute") {
64
+ const [target, value, data] = args;
65
+ let msFuntionName;
66
+ try {
67
+ ({ functionName: msFuntionName } = (0, viem_1.decodeFunctionData)({
68
+ abi: MultiSendAbi_js_1.MultiSendAbi,
69
+ data,
70
+ }));
71
+ }
72
+ catch (error) { }
73
+ let mainCall = {
74
+ target,
75
+ value: value ?? 0n,
76
+ data,
77
+ };
78
+ if (msFuntionName === "multiSend") {
79
+ mainCall = {
80
+ ...mainCall,
81
+ target: constants_js_1.MULTISEND_ADDR,
82
+ delegateCall: true,
83
+ data,
84
+ };
85
+ }
86
+ return mainCall;
87
+ }
88
+ }
89
+ catch (error) {
90
+ return {
91
+ target: (kernelAddress instanceof Promise
92
+ ? await kernelAddress
93
+ : kernelAddress),
94
+ data,
95
+ value: 0n,
96
+ delegateCall: true,
97
+ };
98
+ }
99
+ return;
100
+ }
101
+ async getERC20UserOp(struct, mainCall, gasTokenAddress, paymasterAddress) {
102
+ try {
103
+ const approveData = {
104
+ target: gasTokenAddress,
105
+ value: BigInt(0),
106
+ data: (0, viem_1.encodeFunctionData)({
107
+ abi: ERC20Abi_js_1.ERC20Abi,
108
+ functionName: "approve",
109
+ args: [paymasterAddress, constants_js_1.ERC20_APPROVAL_AMOUNT[gasTokenAddress]],
110
+ }),
111
+ };
112
+ if (!this.provider.account) {
113
+ throw errors_js_1.AccountNotConnected;
114
+ }
115
+ const erc20CallData = await this.provider.account.encodeBatchExecute([
116
+ approveData,
117
+ mainCall,
118
+ ]);
119
+ return {
120
+ ...struct,
121
+ callData: erc20CallData,
122
+ callGasLimit: await this.provider.rpcClient.estimateGas({
123
+ account: constants_js_1.ENTRYPOINT_ADDRESS,
124
+ to: await this.provider.getAddress(),
125
+ data: erc20CallData,
126
+ }),
127
+ };
128
+ }
129
+ catch (error) {
130
+ return;
131
+ }
132
+ }
133
+ async getPaymasterResponse(struct, paymasterProvider) {
134
+ try {
135
+ const mainCall = await this.decodeMainCallFromCallData(struct.sender, struct.callData);
136
+ if (!mainCall) {
137
+ throw errors_js_1.IncorrectCallDataForTokenPaymaster;
138
+ }
139
+ const chainId = await (0, index_js_1.getChainId)(this.provider.getProjectId());
140
+ if (!chainId) {
141
+ throw new Error("ChainId not found");
142
+ }
143
+ const gasTokenAddress = (0, utils_js_1.getGasTokenAddress)(this.paymasterConfig.gasToken, chainId);
144
+ let paymasterAddress = await this.getPaymasterAddress();
145
+ if (gasTokenAddress !== undefined && paymasterAddress !== undefined) {
146
+ const erc20UserOp = await this.getERC20UserOp(struct, mainCall, gasTokenAddress, paymasterAddress);
147
+ if (!erc20UserOp) {
148
+ return struct;
149
+ }
150
+ const paymasterResp = await this.signUserOp({
151
+ userOp: struct,
152
+ callData: struct.callData,
153
+ gasTokenAddress,
154
+ erc20UserOp,
155
+ erc20CallData: erc20UserOp.callData,
156
+ paymasterProvider,
157
+ });
158
+ if (paymasterResp) {
159
+ return {
160
+ ...struct,
161
+ ...paymasterResp,
162
+ };
163
+ }
164
+ }
165
+ }
166
+ catch (error) {
167
+ return struct;
168
+ }
169
+ return struct;
170
+ }
171
+ }
172
+ exports.TokenPaymaster = TokenPaymaster;
173
+ //# sourceMappingURL=token-paymaster.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-paymaster.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/paymaster/token-paymaster.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type PromiseOrValue,\n type BytesLike,\n type UserOperationCallData,\n type UserOperationStruct,\n} from \"@alchemy/aa-core\";\nimport axios from \"axios\";\nimport { type Hex, toHex, decodeFunctionData, encodeFunctionData } from \"viem\";\nimport { ERC20Abi } from \"../abis/ERC20Abi.js\";\nimport { KernelAccountAbi } from \"../abis/KernelAccountAbi.js\";\nimport { MultiSendAbi } from \"../abis/MultiSendAbi.js\";\nimport {\n PAYMASTER_URL,\n ENTRYPOINT_ADDRESS,\n MULTISEND_ADDR,\n ERC20_APPROVAL_AMOUNT,\n} from \"../constants.js\";\nimport {\n AccountNotConnected,\n IncorrectCallDataForTokenPaymaster,\n} from \"../errors.js\";\nimport type { ZeroDevProvider } from \"../provider.js\";\nimport {\n getGasTokenAddress,\n type UserOperationCallDataWithDelegate,\n} from \"../utils.js\";\nimport { Paymaster } from \"./base.js\";\nimport {\n type PaymasterAndBundlerProviders,\n type PaymasterConfig,\n} from \"./types.js\";\nimport { getChainId } from \"../api/index.js\";\n\nexport class TokenPaymaster extends Paymaster {\n constructor(\n provider: ZeroDevProvider,\n protected paymasterConfig: PaymasterConfig<\"TOKEN_PAYMASTER\">\n ) {\n super(provider);\n }\n async getPaymasterAddress(): Promise<Hex | undefined> {\n const chainId = await getChainId(this.provider.getProjectId());\n\n try {\n const { data: paymasterResp } = await axios.post(\n `${PAYMASTER_URL}/getPaymasterAddress`,\n {\n chainId,\n entryPointAddress: ENTRYPOINT_ADDRESS,\n },\n { headers: { \"Content-Type\": \"application/json\" } }\n );\n return paymasterResp as Hex;\n } catch (e) {\n console.log(e);\n return undefined;\n }\n }\n async decodeMainCallFromCallData(\n kernelAddress: PromiseOrValue<string>,\n callData: PromiseOrValue<BytesLike>\n ): Promise<UserOperationCallDataWithDelegate | undefined> {\n let data: Hex = \"0x\";\n if (callData instanceof Promise) {\n const _data = await callData;\n if (_data instanceof Uint8Array) {\n data = toHex(_data);\n } else {\n data = _data as Hex;\n }\n } else if (callData instanceof Uint8Array) {\n data = toHex(callData);\n } else {\n data = callData as Hex;\n }\n\n try {\n const { functionName, args } = decodeFunctionData({\n abi: KernelAccountAbi,\n data: data,\n });\n if (functionName === \"execute\") {\n const [target, value, data] = args;\n let msFuntionName;\n try {\n ({ functionName: msFuntionName } = decodeFunctionData({\n abi: MultiSendAbi,\n data,\n }));\n } catch (error) {}\n let mainCall:\n | UserOperationCallData\n | UserOperationCallDataWithDelegate = {\n target,\n value: value ?? 0n,\n data,\n };\n if (msFuntionName === \"multiSend\") {\n mainCall = {\n ...mainCall,\n target: MULTISEND_ADDR,\n delegateCall: true,\n data,\n };\n }\n return mainCall;\n }\n } catch (error) {\n return {\n target: (kernelAddress instanceof Promise\n ? await kernelAddress\n : kernelAddress) as Hex,\n data,\n value: 0n,\n delegateCall: true,\n };\n }\n return;\n }\n\n async getERC20UserOp(\n struct: UserOperationStruct,\n mainCall: UserOperationCallDataWithDelegate,\n gasTokenAddress: Hex,\n paymasterAddress: Hex\n ): Promise<UserOperationStruct | undefined> {\n try {\n const approveData: UserOperationCallData = {\n target: gasTokenAddress,\n value: BigInt(0),\n data: encodeFunctionData({\n abi: ERC20Abi,\n functionName: \"approve\",\n args: [paymasterAddress, ERC20_APPROVAL_AMOUNT[gasTokenAddress]],\n }),\n };\n if (!this.provider.account) {\n throw AccountNotConnected;\n }\n const erc20CallData = await this.provider.account.encodeBatchExecute([\n approveData,\n mainCall,\n ]);\n return {\n ...struct,\n callData: erc20CallData,\n callGasLimit: await this.provider.rpcClient.estimateGas({\n account: ENTRYPOINT_ADDRESS,\n to: await this.provider.getAddress(),\n data: erc20CallData,\n }),\n };\n } catch (error) {\n return;\n }\n }\n\n async getPaymasterResponse(\n struct: UserOperationStruct,\n paymasterProvider?: PaymasterAndBundlerProviders\n ): Promise<UserOperationStruct> {\n try {\n const mainCall = await this.decodeMainCallFromCallData(\n struct.sender,\n struct.callData\n );\n if (!mainCall) {\n throw IncorrectCallDataForTokenPaymaster;\n }\n const chainId = await getChainId(this.provider.getProjectId());\n if (!chainId) {\n throw new Error(\"ChainId not found\");\n }\n const gasTokenAddress = getGasTokenAddress(\n this.paymasterConfig.gasToken,\n chainId\n );\n let paymasterAddress = await this.getPaymasterAddress();\n if (gasTokenAddress !== undefined && paymasterAddress !== undefined) {\n const erc20UserOp = await this.getERC20UserOp(\n struct,\n mainCall,\n gasTokenAddress,\n paymasterAddress\n );\n if (!erc20UserOp) {\n return struct;\n }\n const paymasterResp = await this.signUserOp({\n userOp: struct,\n callData: struct.callData,\n gasTokenAddress,\n erc20UserOp,\n erc20CallData: erc20UserOp.callData,\n paymasterProvider,\n });\n if (paymasterResp) {\n return {\n ...struct,\n ...paymasterResp,\n };\n }\n }\n } catch (error) {\n return struct;\n }\n return struct;\n }\n}\n"]}
@@ -0,0 +1,29 @@
1
+ import type { Hex } from "viem";
2
+ import type { Paymaster } from "./base.js";
3
+ import type { ZeroDevProvider } from "../provider.js";
4
+ export type PaymasterAndBundlerProviders = "ALCHEMY" | "STACKUP" | "PIMLICO";
5
+ export type SupportedGasToken = "USDC" | "PEPE" | "TEST_ERC20";
6
+ export type PaymasterPolicy = "VERIFYING_PAYMASTER" | "TOKEN_PAYMASTER";
7
+ interface PaymasterConfigOptions {
8
+ VERIFYING_PAYMASTER: {};
9
+ TOKEN_PAYMASTER: {
10
+ gasToken: SupportedGasToken;
11
+ };
12
+ }
13
+ export type PaymasterConfig<T extends PaymasterPolicy> = {
14
+ policy: T;
15
+ paymasterProvider?: PaymasterAndBundlerProviders;
16
+ onlySendSponsoredTransaction?: boolean;
17
+ } & PaymasterConfigOptions[T];
18
+ export interface IGasTokenAddresses {
19
+ [key: string]: {
20
+ [chainId: number]: Hex;
21
+ };
22
+ }
23
+ export interface IPaymaster<Provider extends ZeroDevProvider, P extends PaymasterPolicy> {
24
+ new (provider: Provider, paymasterConfig: PaymasterConfig<P>): Paymaster;
25
+ }
26
+ export type PaymasterMap<Provider extends ZeroDevProvider> = {
27
+ [P in PaymasterPolicy]: IPaymaster<Provider, P>;
28
+ };
29
+ export {};
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/paymaster/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Hex } from \"viem\";\nimport type { Paymaster } from \"./base.js\";\nimport type { ZeroDevProvider } from \"../provider.js\";\n\nexport type PaymasterAndBundlerProviders = \"ALCHEMY\" | \"STACKUP\" | \"PIMLICO\";\n\nexport type SupportedGasToken = \"USDC\" | \"PEPE\" | \"TEST_ERC20\";\n\nexport type PaymasterPolicy = \"VERIFYING_PAYMASTER\" | \"TOKEN_PAYMASTER\";\n\ninterface PaymasterConfigOptions {\n VERIFYING_PAYMASTER: {};\n TOKEN_PAYMASTER: { gasToken: SupportedGasToken };\n}\n\nexport type PaymasterConfig<T extends PaymasterPolicy> = {\n policy: T;\n paymasterProvider?: PaymasterAndBundlerProviders;\n onlySendSponsoredTransaction?: boolean;\n} & PaymasterConfigOptions[T];\nexport interface IGasTokenAddresses {\n [key: string]: {\n [chainId: number]: Hex;\n };\n}\n\nexport interface IPaymaster<\n Provider extends ZeroDevProvider,\n P extends PaymasterPolicy\n> {\n new (provider: Provider, paymasterConfig: PaymasterConfig<P>): Paymaster;\n}\n\nexport type PaymasterMap<Provider extends ZeroDevProvider> = {\n [P in PaymasterPolicy]: IPaymaster<Provider, P>;\n};\n"]}
@@ -0,0 +1,8 @@
1
+ import { type UserOperationStruct } from "@alchemy/aa-core";
2
+ import { Paymaster } from "./base.js";
3
+ import type { ZeroDevProvider } from "../provider.js";
4
+ import type { PaymasterAndBundlerProviders, PaymasterConfig } from "./types.js";
5
+ export declare class VerifyingPaymaster extends Paymaster {
6
+ constructor(provider: ZeroDevProvider, _: PaymasterConfig<"VERIFYING_PAYMASTER">);
7
+ getPaymasterResponse(struct: UserOperationStruct, paymasterProvider?: PaymasterAndBundlerProviders): Promise<UserOperationStruct>;
8
+ }
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VerifyingPaymaster = void 0;
4
+ const aa_core_1 = require("@alchemy/aa-core");
5
+ const base_js_1 = require("./base.js");
6
+ class VerifyingPaymaster extends base_js_1.Paymaster {
7
+ constructor(provider, _) {
8
+ super(provider);
9
+ }
10
+ async getPaymasterResponse(struct, paymasterProvider) {
11
+ try {
12
+ const hexifiedUserOp = (0, aa_core_1.deepHexlify)(await (0, aa_core_1.resolveProperties)(struct));
13
+ const paymasterResp = await this.signUserOp({
14
+ userOp: hexifiedUserOp,
15
+ paymasterProvider,
16
+ });
17
+ if (paymasterResp) {
18
+ return {
19
+ ...struct,
20
+ ...paymasterResp,
21
+ };
22
+ }
23
+ }
24
+ catch (error) {
25
+ return struct;
26
+ }
27
+ return struct;
28
+ }
29
+ }
30
+ exports.VerifyingPaymaster = VerifyingPaymaster;
31
+ //# sourceMappingURL=verifying-paymaster.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verifying-paymaster.js","sourceRoot":"","sources":["../../../../src/kernel-zerodev/paymaster/verifying-paymaster.ts"],"names":[],"mappings":";;;AAAA,8CAI0B;AAC1B,uCAAsC;AAItC,MAAa,kBAAmB,SAAQ,mBAAS;IAC/C,YACE,QAAyB,EACzB,CAAyC;QAEzC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAClB,CAAC;IACD,KAAK,CAAC,oBAAoB,CACxB,MAA2B,EAC3B,iBAAgD;QAEhD,IAAI;YACF,MAAM,cAAc,GAAG,IAAA,qBAAW,EAAC,MAAM,IAAA,2BAAiB,EAAC,MAAM,CAAC,CAAC,CAAC;YACpE,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC;gBAC1C,MAAM,EAAE,cAAc;gBACtB,iBAAiB;aAClB,CAAC,CAAC;YACH,IAAI,aAAa,EAAE;gBACjB,OAAO;oBACL,GAAG,MAAM;oBACT,GAAG,aAAa;iBACjB,CAAC;aACH;SACF;QAAC,OAAO,KAAK,EAAE;YACd,OAAO,MAAM,CAAC;SACf;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AA5BD,gDA4BC","sourcesContent":["import {\n type UserOperationStruct,\n deepHexlify,\n resolveProperties,\n} from \"@alchemy/aa-core\";\nimport { Paymaster } from \"./base.js\";\nimport type { ZeroDevProvider } from \"../provider.js\";\nimport type { PaymasterAndBundlerProviders, PaymasterConfig } from \"./types.js\";\n\nexport class VerifyingPaymaster extends Paymaster {\n constructor(\n provider: ZeroDevProvider,\n _: PaymasterConfig<\"VERIFYING_PAYMASTER\">\n ) {\n super(provider);\n }\n async getPaymasterResponse(\n struct: UserOperationStruct,\n paymasterProvider?: PaymasterAndBundlerProviders\n ): Promise<UserOperationStruct> {\n try {\n const hexifiedUserOp = deepHexlify(await resolveProperties(struct));\n const paymasterResp = await this.signUserOp({\n userOp: hexifiedUserOp,\n paymasterProvider,\n });\n if (paymasterResp) {\n return {\n ...struct,\n ...paymasterResp,\n };\n }\n } catch (error) {\n return struct;\n }\n return struct;\n }\n}\n"]}
@@ -0,0 +1,41 @@
1
+ import { type Address, type Chain, type HttpTransport } from "viem";
2
+ import { type SmartAccountProviderOpts, type UserOperationCallData, type BatchUserOperationCallData, type SendUserOperationResult, SmartAccountProvider, type AccountMiddlewareFn } from "@alchemy/aa-core";
3
+ import { KernelSmartContractAccount } from "./account.js";
4
+ import type { PaymasterAndBundlerProviders, PaymasterConfig, PaymasterPolicy } from "./paymaster/types.js";
5
+ export type ZeroDevProviderConfig = {
6
+ projectId: string;
7
+ chain: Chain | number;
8
+ entryPointAddress?: Address;
9
+ rpcUrl?: string;
10
+ account?: KernelSmartContractAccount;
11
+ bundlerProvider?: PaymasterAndBundlerProviders;
12
+ opts?: SmartAccountProviderOpts & {
13
+ sendTxMaxRetries?: number;
14
+ sendTxRetryIntervalMs?: number;
15
+ };
16
+ };
17
+ export declare enum Operation {
18
+ Call = 0,
19
+ DelegateCall = 1
20
+ }
21
+ type UserOpDataOperationTypes<T> = T extends UserOperationCallData ? Operation.Call | Operation.DelegateCall : T extends BatchUserOperationCallData ? Operation.Call : never;
22
+ export declare class ZeroDevProvider extends SmartAccountProvider<HttpTransport> {
23
+ protected projectId: string;
24
+ protected sendTxMaxRetries: number;
25
+ protected sendTxRetryIntervalMs: number;
26
+ constructor({ projectId, chain, entryPointAddress, rpcUrl, account, bundlerProvider, opts, }: ZeroDevProviderConfig);
27
+ getProjectId: () => string;
28
+ sendUserOperation: <T extends UserOperationCallData | BatchUserOperationCallData>(data: T, operation?: UserOpDataOperationTypes<T>) => Promise<SendUserOperationResult>;
29
+ isReplacementOpError(errorIn: any): boolean;
30
+ unwrapError(errorIn: any): Error;
31
+ getAccount: () => KernelSmartContractAccount;
32
+ dummyPaymasterDataMiddleware: AccountMiddlewareFn;
33
+ withZeroDevPaymasterAndData(config: PaymasterConfig<PaymasterPolicy>): this & SmartAccountProvider<HttpTransport> & {
34
+ account: import("@alchemy/aa-core").BaseSmartContractAccount<HttpTransport>;
35
+ };
36
+ request: (args: {
37
+ method: string;
38
+ params?: any[];
39
+ }) => Promise<any>;
40
+ }
41
+ export {};
@@ -0,0 +1,225 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ZeroDevProvider = exports.Operation = void 0;
4
+ const aa_core_1 = require("@alchemy/aa-core");
5
+ const constants_js_1 = require("./constants.js");
6
+ const account_js_1 = require("./account.js");
7
+ const gas_estimator_js_1 = require("./middleware/gas-estimator.js");
8
+ const ERC4337_utils_js_1 = require("./utils/ERC4337-utils.js");
9
+ const errors_js_1 = require("./errors.js");
10
+ const paymaster_js_1 = require("./middleware/paymaster.js");
11
+ const create_client_js_1 = require("./client/create-client.js");
12
+ var Operation;
13
+ (function (Operation) {
14
+ Operation[Operation["Call"] = 0] = "Call";
15
+ Operation[Operation["DelegateCall"] = 1] = "DelegateCall";
16
+ })(Operation || (exports.Operation = Operation = {}));
17
+ class ZeroDevProvider extends aa_core_1.SmartAccountProvider {
18
+ constructor({ projectId, chain, entryPointAddress = constants_js_1.ENTRYPOINT_ADDRESS, rpcUrl = constants_js_1.BUNDLER_URL, account, bundlerProvider, opts, }) {
19
+ const _chain = typeof chain === "number" ? (0, aa_core_1.getChain)(chain) : chain;
20
+ const rpcClient = (0, create_client_js_1.createZeroDevPublicErc4337Client)({
21
+ chain: _chain,
22
+ rpcUrl,
23
+ projectId,
24
+ bundlerProvider,
25
+ });
26
+ super(rpcClient, entryPointAddress, _chain, account, {
27
+ ...opts,
28
+ txMaxRetries: opts?.txMaxRetries ?? 10,
29
+ txRetryIntervalMs: opts?.txRetryIntervalMs ?? 10000,
30
+ minPriorityFeePerBid: opts?.minPriorityFeePerBid ??
31
+ constants_js_1.minPriorityFeePerBidDefaults.get(_chain.id),
32
+ });
33
+ Object.defineProperty(this, "projectId", {
34
+ enumerable: true,
35
+ configurable: true,
36
+ writable: true,
37
+ value: void 0
38
+ });
39
+ Object.defineProperty(this, "sendTxMaxRetries", {
40
+ enumerable: true,
41
+ configurable: true,
42
+ writable: true,
43
+ value: void 0
44
+ });
45
+ Object.defineProperty(this, "sendTxRetryIntervalMs", {
46
+ enumerable: true,
47
+ configurable: true,
48
+ writable: true,
49
+ value: void 0
50
+ });
51
+ Object.defineProperty(this, "getProjectId", {
52
+ enumerable: true,
53
+ configurable: true,
54
+ writable: true,
55
+ value: () => this.projectId
56
+ });
57
+ Object.defineProperty(this, "sendUserOperation", {
58
+ enumerable: true,
59
+ configurable: true,
60
+ writable: true,
61
+ value: async (data, operation = Operation.Call) => {
62
+ if (!(0, account_js_1.isKernelAccount)(this.account)) {
63
+ throw new Error("account not connected!");
64
+ }
65
+ if (!this.account.validator) {
66
+ throw new Error("validator not connected!");
67
+ }
68
+ let callData = "0x";
69
+ if (Array.isArray(data)) {
70
+ if (operation === Operation.Call) {
71
+ callData = await this.account.encodeBatchExecute(data);
72
+ }
73
+ else {
74
+ throw errors_js_1.InvalidOperation;
75
+ }
76
+ }
77
+ else if ((0, account_js_1.isKernelAccount)(this.account)) {
78
+ if (operation === Operation.DelegateCall) {
79
+ callData = await this.account.encodeExecuteDelegate(data.target, data.value ?? 0n, data.data);
80
+ }
81
+ else if (operation === Operation.Call) {
82
+ callData = await this.account.encodeExecute(data.target, data.value ?? 0n, data.data);
83
+ }
84
+ else {
85
+ throw errors_js_1.InvalidOperation;
86
+ }
87
+ }
88
+ else {
89
+ throw errors_js_1.InvalidOperation;
90
+ }
91
+ const initCode = await this.account.getInitCode();
92
+ let hash = "";
93
+ let i = 0;
94
+ let maxFeePerGas = 0n;
95
+ let maxPriorityFeePerGas = 0n;
96
+ let request;
97
+ const nonce = await this.account.getNonce();
98
+ do {
99
+ const uoStruct = await (0, aa_core_1.asyncPipe)(this.dummyPaymasterDataMiddleware, this.feeDataGetter, this.paymasterDataMiddleware, this.gasEstimator, this.customMiddleware ?? aa_core_1.noOpMiddleware)({
100
+ initCode,
101
+ sender: this.getAddress(),
102
+ nonce,
103
+ callData,
104
+ signature: await this.account
105
+ .getValidator()
106
+ .getDynamicDummySignature(await this.getAddress(), callData),
107
+ maxFeePerGas,
108
+ maxPriorityFeePerGas,
109
+ });
110
+ request = (0, aa_core_1.deepHexlify)(await (0, aa_core_1.resolveProperties)(uoStruct));
111
+ if (!(0, ERC4337_utils_js_1.isValidRequest)(request)) {
112
+ throw new Error(`Request is missing parameters. All properties on UserOperationStruct must be set. uo: ${JSON.stringify(request, null, 2)}`);
113
+ }
114
+ request.signature = await this.account.validator.getSignature(request);
115
+ try {
116
+ hash = await this.rpcClient.sendUserOperation(request, this.entryPointAddress);
117
+ }
118
+ catch (error) {
119
+ if (this.isReplacementOpError(error) && i++ < this.sendTxMaxRetries) {
120
+ maxFeePerGas = (BigInt(request.maxFeePerGas) * 113n) / 100n;
121
+ maxPriorityFeePerGas =
122
+ (BigInt(request.maxPriorityFeePerGas) * 113n) / 100n;
123
+ console.log(`After ${this.sendTxRetryIntervalMs / 60000} minutes, resending tx with Increased Gas fees: maxFeePerGas: ${maxFeePerGas}, maxPriorityFeePerGas: ${maxPriorityFeePerGas}`);
124
+ await new Promise((resolve) => setTimeout(resolve, this.sendTxRetryIntervalMs));
125
+ continue;
126
+ }
127
+ throw this.unwrapError(error);
128
+ }
129
+ } while (hash === "");
130
+ return {
131
+ hash,
132
+ request,
133
+ };
134
+ }
135
+ });
136
+ Object.defineProperty(this, "getAccount", {
137
+ enumerable: true,
138
+ configurable: true,
139
+ writable: true,
140
+ value: () => {
141
+ if (!(0, account_js_1.isKernelAccount)(this.account)) {
142
+ throw new Error("account not connected!");
143
+ }
144
+ return this.account;
145
+ }
146
+ });
147
+ Object.defineProperty(this, "dummyPaymasterDataMiddleware", {
148
+ enumerable: true,
149
+ configurable: true,
150
+ writable: true,
151
+ value: async (struct) => {
152
+ struct.paymasterAndData =
153
+ "0xfe7dbcab8aaee4eb67943c1e6be95b1d065985c6000000000000000000000000000000000000000000000000000001869aa31cf400000000000000000000000000000000000000000000000000000000000000007dfe2190f34af27b265bae608717cdc9368b471fc0c097ab7b4088f255b4961e57b039e7e571b15221081c5dce7bcb93459b27a3ab65d2f8a889f4a40b4022801b";
154
+ return struct;
155
+ }
156
+ });
157
+ Object.defineProperty(this, "request", {
158
+ enumerable: true,
159
+ configurable: true,
160
+ writable: true,
161
+ value: async (args) => {
162
+ const { method, params } = args;
163
+ switch (method) {
164
+ case "eth_chainId":
165
+ return this.chain.id;
166
+ case "eth_sendTransaction":
167
+ const [tx] = params;
168
+ return this.sendTransaction(tx);
169
+ case "personal_sign":
170
+ if (!this.account) {
171
+ throw new Error("account not connected!");
172
+ }
173
+ const [data, address] = params;
174
+ if (address !== (await this.getAddress())) {
175
+ throw new Error("cannot sign for address that is not the current account");
176
+ }
177
+ return this.account.signWithEip6492(data);
178
+ default:
179
+ return this.rpcClient.request(args);
180
+ }
181
+ }
182
+ });
183
+ this.projectId = projectId;
184
+ this.sendTxMaxRetries =
185
+ opts?.sendTxMaxRetries ?? constants_js_1.DEFAULT_SEND_TX_MAX_RETRIES;
186
+ this.sendTxRetryIntervalMs =
187
+ opts?.sendTxRetryIntervalMs ?? constants_js_1.DEFAULT_SEND_TX_RETRY_INTERVAL_MS;
188
+ (0, gas_estimator_js_1.withZeroDevGasEstimator)(this);
189
+ }
190
+ isReplacementOpError(errorIn) {
191
+ if (errorIn.cause != null) {
192
+ const failedOpMessage = errorIn?.cause?.message;
193
+ return ((failedOpMessage?.includes("replacement op must increase maxFeePerGas and MaxPriorityFeePerGas") ||
194
+ failedOpMessage?.match(/.*replacement.*underpriced.*/) !== null) ??
195
+ false);
196
+ }
197
+ return false;
198
+ }
199
+ unwrapError(errorIn) {
200
+ if (errorIn?.cause != null) {
201
+ let paymasterInfo = "";
202
+ let failedOpMessage = errorIn?.cause?.message;
203
+ if (failedOpMessage?.includes("FailedOp") === true) {
204
+ const matched = failedOpMessage.match(/FailedOp\((.*)\)/);
205
+ if (matched != null) {
206
+ const split = matched[1].split(",");
207
+ paymasterInfo = `(paymaster address: ${split[1]})`;
208
+ failedOpMessage = split[2];
209
+ }
210
+ }
211
+ const error = new Error(`The bundler has failed to include UserOperation in a batch: ${failedOpMessage} ${paymasterInfo}`);
212
+ error.stack = errorIn.stack;
213
+ return error;
214
+ }
215
+ return errorIn;
216
+ }
217
+ withZeroDevPaymasterAndData(config) {
218
+ if (!this.isConnected()) {
219
+ throw new Error("ZeroDevProvider: account is not set, did you call `connect` first?");
220
+ }
221
+ return (0, paymaster_js_1.withZeroDevPaymasterAndData)(this, config);
222
+ }
223
+ }
224
+ exports.ZeroDevProvider = ZeroDevProvider;
225
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/kernel-zerodev/provider.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type Address,\n type Chain,\n type Hex,\n type HttpTransport,\n type RpcTransactionRequest,\n} from \"viem\";\nimport {\n deepHexlify,\n resolveProperties,\n type SmartAccountProviderOpts,\n getChain,\n type UserOperationCallData,\n type BatchUserOperationCallData,\n type SendUserOperationResult,\n asyncPipe,\n noOpMiddleware,\n type UserOperationStruct,\n type BytesLike,\n SmartAccountProvider,\n type AccountMiddlewareFn,\n} from \"@alchemy/aa-core\";\nimport {\n BUNDLER_URL,\n DEFAULT_SEND_TX_MAX_RETRIES,\n DEFAULT_SEND_TX_RETRY_INTERVAL_MS,\n ENTRYPOINT_ADDRESS,\n minPriorityFeePerBidDefaults,\n} from \"./constants.js\";\nimport { KernelSmartContractAccount, isKernelAccount } from \"./account.js\";\nimport { withZeroDevGasEstimator } from \"./middleware/gas-estimator.js\";\nimport { isValidRequest } from \"./utils/ERC4337-utils.js\";\nimport { InvalidOperation } from \"./errors.js\";\nimport { withZeroDevPaymasterAndData } from \"./middleware/paymaster.js\";\nimport { createZeroDevPublicErc4337Client } from \"./client/create-client.js\";\nimport type {\n PaymasterAndBundlerProviders,\n PaymasterConfig,\n PaymasterPolicy,\n} from \"./paymaster/types.js\";\n\nexport type ZeroDevProviderConfig = {\n projectId: string;\n chain: Chain | number;\n entryPointAddress?: Address;\n rpcUrl?: string;\n account?: KernelSmartContractAccount;\n bundlerProvider?: PaymasterAndBundlerProviders;\n opts?: SmartAccountProviderOpts & {\n sendTxMaxRetries?: number;\n sendTxRetryIntervalMs?: number;\n };\n};\n\nexport enum Operation {\n Call,\n DelegateCall,\n}\n\ntype UserOpDataOperationTypes<T> = T extends UserOperationCallData\n ? Operation.Call | Operation.DelegateCall\n : T extends BatchUserOperationCallData\n ? Operation.Call\n : never;\n\nexport class ZeroDevProvider extends SmartAccountProvider<HttpTransport> {\n protected projectId: string;\n protected sendTxMaxRetries: number;\n protected sendTxRetryIntervalMs: number;\n\n constructor({\n projectId,\n chain,\n entryPointAddress = ENTRYPOINT_ADDRESS,\n rpcUrl = BUNDLER_URL,\n account,\n bundlerProvider,\n opts,\n }: ZeroDevProviderConfig) {\n const _chain = typeof chain === \"number\" ? getChain(chain) : chain;\n const rpcClient = createZeroDevPublicErc4337Client({\n chain: _chain,\n rpcUrl,\n projectId,\n bundlerProvider,\n });\n\n super(rpcClient, entryPointAddress, _chain, account, {\n ...opts,\n txMaxRetries: opts?.txMaxRetries ?? 10,\n txRetryIntervalMs: opts?.txRetryIntervalMs ?? 10000,\n minPriorityFeePerBid:\n opts?.minPriorityFeePerBid ??\n minPriorityFeePerBidDefaults.get(_chain.id),\n });\n\n this.projectId = projectId;\n this.sendTxMaxRetries =\n opts?.sendTxMaxRetries ?? DEFAULT_SEND_TX_MAX_RETRIES;\n this.sendTxRetryIntervalMs =\n opts?.sendTxRetryIntervalMs ?? DEFAULT_SEND_TX_RETRY_INTERVAL_MS;\n\n withZeroDevGasEstimator(this);\n }\n\n getProjectId = (): string => this.projectId;\n\n sendUserOperation = async <\n T extends UserOperationCallData | BatchUserOperationCallData\n >(\n data: T,\n operation: UserOpDataOperationTypes<T> = Operation.Call as UserOpDataOperationTypes<T>\n ): Promise<SendUserOperationResult> => {\n if (!isKernelAccount(this.account)) {\n throw new Error(\"account not connected!\");\n }\n if (!this.account.validator) {\n throw new Error(\"validator not connected!\");\n }\n\n let callData: BytesLike = \"0x\";\n\n if (Array.isArray(data)) {\n if (operation === Operation.Call) {\n callData = await this.account.encodeBatchExecute(data);\n } else {\n throw InvalidOperation;\n }\n } else if (isKernelAccount(this.account)) {\n if (operation === Operation.DelegateCall) {\n callData = await this.account.encodeExecuteDelegate(\n data.target,\n data.value ?? 0n,\n data.data\n );\n } else if (operation === Operation.Call) {\n callData = await this.account.encodeExecute(\n data.target,\n data.value ?? 0n,\n data.data\n );\n } else {\n throw InvalidOperation;\n }\n } else {\n throw InvalidOperation;\n }\n\n const initCode = await this.account.getInitCode();\n let hash: string = \"\";\n let i = 0;\n let maxFeePerGas = 0n;\n let maxPriorityFeePerGas = 0n;\n let request: UserOperationStruct;\n\n const nonce = await this.account.getNonce();\n do {\n const uoStruct = await asyncPipe(\n this.dummyPaymasterDataMiddleware,\n this.feeDataGetter,\n this.paymasterDataMiddleware,\n this.gasEstimator,\n this.customMiddleware ?? noOpMiddleware\n )({\n initCode,\n sender: this.getAddress(),\n nonce,\n callData,\n signature: await this.account\n .getValidator()\n .getDynamicDummySignature(await this.getAddress(), callData as Hex),\n maxFeePerGas,\n maxPriorityFeePerGas,\n } as UserOperationStruct);\n request = deepHexlify(await resolveProperties(uoStruct));\n\n if (!isValidRequest(request)) {\n // this pretty prints the uo\n throw new Error(\n `Request is missing parameters. All properties on UserOperationStruct must be set. uo: ${JSON.stringify(\n request,\n null,\n 2\n )}`\n );\n }\n\n request.signature = await this.account.validator.getSignature(request);\n try {\n hash = await this.rpcClient.sendUserOperation(\n request,\n this.entryPointAddress\n );\n } catch (error: any) {\n if (this.isReplacementOpError(error) && i++ < this.sendTxMaxRetries) {\n maxFeePerGas = (BigInt(request.maxFeePerGas) * 113n) / 100n;\n maxPriorityFeePerGas =\n (BigInt(request.maxPriorityFeePerGas) * 113n) / 100n;\n console.log(\n `After ${\n this.sendTxRetryIntervalMs / 60000\n } minutes, resending tx with Increased Gas fees: maxFeePerGas: ${maxFeePerGas}, maxPriorityFeePerGas: ${maxPriorityFeePerGas}`\n );\n await new Promise((resolve) =>\n setTimeout(resolve, this.sendTxRetryIntervalMs)\n );\n continue;\n }\n throw this.unwrapError(error);\n }\n } while (hash === \"\");\n\n return {\n hash,\n request,\n };\n };\n\n isReplacementOpError(errorIn: any): boolean {\n if (errorIn.cause != null) {\n const failedOpMessage: string | undefined = errorIn?.cause?.message;\n return (\n (failedOpMessage?.includes(\n \"replacement op must increase maxFeePerGas and MaxPriorityFeePerGas\"\n ) ||\n failedOpMessage?.match(/.*replacement.*underpriced.*/) !== null) ??\n false\n );\n }\n return false;\n }\n\n unwrapError(errorIn: any): Error {\n if (errorIn?.cause != null) {\n let paymasterInfo: string = \"\";\n let failedOpMessage: string | undefined = errorIn?.cause?.message;\n if (failedOpMessage?.includes(\"FailedOp\") === true) {\n // TODO: better error extraction methods will be needed\n const matched = failedOpMessage.match(/FailedOp\\((.*)\\)/);\n if (matched != null) {\n const split = matched[1].split(\",\");\n paymasterInfo = `(paymaster address: ${split[1]})`;\n failedOpMessage = split[2];\n }\n }\n const error = new Error(\n `The bundler has failed to include UserOperation in a batch: ${failedOpMessage} ${paymasterInfo}`\n );\n error.stack = errorIn.stack;\n return error;\n }\n return errorIn;\n }\n\n getAccount: () => KernelSmartContractAccount = () => {\n if (!isKernelAccount(this.account)) {\n throw new Error(\"account not connected!\");\n }\n return this.account;\n };\n\n dummyPaymasterDataMiddleware: AccountMiddlewareFn = async (\n struct: UserOperationStruct\n ): Promise<UserOperationStruct> => {\n struct.paymasterAndData =\n \"0xfe7dbcab8aaee4eb67943c1e6be95b1d065985c6000000000000000000000000000000000000000000000000000001869aa31cf400000000000000000000000000000000000000000000000000000000000000007dfe2190f34af27b265bae608717cdc9368b471fc0c097ab7b4088f255b4961e57b039e7e571b15221081c5dce7bcb93459b27a3ab65d2f8a889f4a40b4022801b\";\n return struct;\n };\n\n withZeroDevPaymasterAndData(config: PaymasterConfig<PaymasterPolicy>) {\n if (!this.isConnected()) {\n throw new Error(\n \"ZeroDevProvider: account is not set, did you call `connect` first?\"\n );\n }\n\n return withZeroDevPaymasterAndData(this, config);\n }\n\n request: (args: { method: string; params?: any[] }) => Promise<any> = async (\n args\n ) => {\n const { method, params } = args;\n switch (method) {\n case \"eth_chainId\":\n return this.chain.id;\n case \"eth_sendTransaction\":\n const [tx] = params as [RpcTransactionRequest];\n return this.sendTransaction(tx);\n case \"personal_sign\":\n if (!this.account) {\n throw new Error(\"account not connected!\");\n }\n const [data, address] = params!;\n if (address !== (await this.getAddress())) {\n throw new Error(\n \"cannot sign for address that is not the current account\"\n );\n }\n // @ts-ignore\n return this.account.signWithEip6492(data);\n default:\n // @ts-ignore\n return this.rpcClient.request(args);\n }\n };\n}\n"]}
@@ -0,0 +1,13 @@
1
+ import { type SmartAccountSigner } from "@alchemy/aa-core";
2
+ import { type HDAccount, type Hash, type PrivateKeyAccount, type TypedData, type TypedDataDefinition, type Hex } from "viem";
3
+ export declare class ZeroDevLocalAccountSigner<T extends HDAccount | PrivateKeyAccount> implements SmartAccountSigner {
4
+ private owner;
5
+ constructor(owner: T);
6
+ readonly signMessage: (msg: string | Uint8Array) => Promise<`0x${string}`>;
7
+ readonly signTypedData: <TTypedData extends TypedData | {
8
+ [key: string]: unknown;
9
+ }, TPrimaryType extends string = string>(typedData: TypedDataDefinition<TTypedData, TPrimaryType>) => Promise<Hash>;
10
+ readonly getAddress: () => Promise<`0x${string}`>;
11
+ static mnemonicToAccountSigner(key: string): ZeroDevLocalAccountSigner<HDAccount>;
12
+ static privateKeyToAccountSigner(key: Hex): ZeroDevLocalAccountSigner<PrivateKeyAccount>;
13
+ }