0xtrails 0.0.1 → 0.0.2

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 (359) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +42 -0
  3. package/dist/abi.d.ts +37 -0
  4. package/dist/abi.d.ts.map +1 -0
  5. package/dist/abi.js +36 -0
  6. package/dist/apiClient.d.ts +9 -0
  7. package/dist/apiClient.d.ts.map +1 -0
  8. package/dist/apiClient.js +18 -0
  9. package/dist/buffer.d.ts +3 -0
  10. package/dist/buffer.d.ts.map +1 -0
  11. package/dist/buffer.js +8 -0
  12. package/dist/cctp.d.ts +84 -0
  13. package/dist/cctp.d.ts.map +1 -0
  14. package/dist/cctp.js +401 -0
  15. package/dist/chainSwitch.d.ts +7 -0
  16. package/dist/chainSwitch.d.ts.map +1 -0
  17. package/dist/chainSwitch.js +33 -0
  18. package/dist/chains.d.ts +13 -0
  19. package/dist/chains.d.ts.map +1 -0
  20. package/dist/chains.js +95 -0
  21. package/dist/constants.d.ts +11 -0
  22. package/dist/constants.d.ts.map +1 -0
  23. package/dist/constants.js +16 -0
  24. package/dist/encoders.d.ts +7 -0
  25. package/dist/encoders.d.ts.map +1 -0
  26. package/dist/encoders.js +8 -0
  27. package/dist/error.d.ts +2 -0
  28. package/dist/error.d.ts.map +1 -0
  29. package/dist/error.js +12 -0
  30. package/dist/explorer.d.ts +12 -0
  31. package/dist/explorer.d.ts.map +1 -0
  32. package/dist/explorer.js +18 -0
  33. package/dist/gasless.d.ts +116 -0
  34. package/dist/gasless.d.ts.map +1 -0
  35. package/dist/gasless.js +297 -0
  36. package/dist/index.d.ts +13 -0
  37. package/dist/index.d.ts.map +1 -0
  38. package/dist/index.js +9 -0
  39. package/dist/indexerClient.d.ts +9 -0
  40. package/dist/indexerClient.d.ts.map +1 -0
  41. package/dist/indexerClient.js +18 -0
  42. package/dist/intents.d.ts +83 -0
  43. package/dist/intents.d.ts.map +1 -0
  44. package/dist/intents.js +288 -0
  45. package/dist/metaTxnMonitor.d.ts +14 -0
  46. package/dist/metaTxnMonitor.d.ts.map +1 -0
  47. package/dist/metaTxnMonitor.js +121 -0
  48. package/dist/metaTxns.d.ts +6 -0
  49. package/dist/metaTxns.d.ts.map +1 -0
  50. package/dist/metaTxns.js +4 -0
  51. package/dist/paymasterSend.d.ts +90 -0
  52. package/dist/paymasterSend.d.ts.map +1 -0
  53. package/dist/paymasterSend.js +329 -0
  54. package/dist/preconditions.d.ts +11 -0
  55. package/dist/preconditions.d.ts.map +1 -0
  56. package/dist/preconditions.js +29 -0
  57. package/dist/prepareSend.d.ts +102 -0
  58. package/dist/prepareSend.d.ts.map +1 -0
  59. package/dist/prepareSend.js +1080 -0
  60. package/dist/prices.d.ts +18 -0
  61. package/dist/prices.d.ts.map +1 -0
  62. package/dist/prices.js +142 -0
  63. package/dist/queryParams.d.ts +9 -0
  64. package/dist/queryParams.d.ts.map +1 -0
  65. package/dist/queryParams.js +66 -0
  66. package/dist/relaySdk.d.ts +65 -0
  67. package/dist/relaySdk.d.ts.map +1 -0
  68. package/dist/relaySdk.js +314 -0
  69. package/dist/relayer.d.ts +23 -0
  70. package/dist/relayer.d.ts.map +1 -0
  71. package/dist/relayer.js +230 -0
  72. package/dist/sendUserOp.d.ts +140 -0
  73. package/dist/sendUserOp.d.ts.map +1 -0
  74. package/dist/sendUserOp.js +388 -0
  75. package/dist/sequenceWallet.d.ts +79 -0
  76. package/dist/sequenceWallet.d.ts.map +1 -0
  77. package/dist/sequenceWallet.js +374 -0
  78. package/dist/theme.d.ts +3 -0
  79. package/dist/theme.d.ts.map +1 -0
  80. package/dist/theme.js +1 -0
  81. package/dist/toSimpleSmartAccount.d.ts +95 -0
  82. package/dist/toSimpleSmartAccount.d.ts.map +1 -0
  83. package/dist/toSimpleSmartAccount.js +373 -0
  84. package/dist/tokenBalances.d.ts +118 -0
  85. package/dist/tokenBalances.d.ts.map +1 -0
  86. package/dist/tokenBalances.js +492 -0
  87. package/dist/tokens.d.ts +50 -0
  88. package/dist/tokens.d.ts.map +1 -0
  89. package/dist/tokens.js +356 -0
  90. package/dist/trails.d.ts +128 -0
  91. package/dist/trails.d.ts.map +1 -0
  92. package/dist/trails.js +1031 -0
  93. package/dist/umd/trails.min.js +12610 -0
  94. package/dist/umd/trails.min.js.map +1 -0
  95. package/dist/umd.d.ts +24 -0
  96. package/dist/umd.d.ts.map +1 -0
  97. package/dist/utils.d.ts +5 -0
  98. package/dist/utils.d.ts.map +1 -0
  99. package/dist/utils.js +9 -0
  100. package/dist/widget/ConstantsUtil-B-_-u8aQ.js +6 -0
  101. package/dist/widget/add-hVLs3ldJ.js +20 -0
  102. package/dist/widget/all-wallets-Cwxnx4BT.js +11 -0
  103. package/dist/widget/app-store-CAAVQjW0.js +22 -0
  104. package/dist/widget/apple-C3BSbglw.js +23 -0
  105. package/dist/widget/arrow-bottom-circle-BGU9MmsZ.js +16 -0
  106. package/dist/widget/arrow-bottom-hS_SA8Gp.js +13 -0
  107. package/dist/widget/arrow-left-CJZanWz7.js +13 -0
  108. package/dist/widget/arrow-right-C1qL8EMd.js +13 -0
  109. package/dist/widget/arrow-top-CbuCmbQs.js +13 -0
  110. package/dist/widget/bank-CXBEEGbb.js +19 -0
  111. package/dist/widget/bin-Dqzv3zCZ.js +9 -0
  112. package/dist/widget/bitcoin-4y3sovZp.js +18 -0
  113. package/dist/widget/browser-DyOl4_8m.js +1413 -0
  114. package/dist/widget/browser-t7Fh0sEU.js +19 -0
  115. package/dist/widget/card-Bo4CZkTs.js +19 -0
  116. package/dist/widget/ccip-BynehMIN.js +232 -0
  117. package/dist/widget/checkmark-DV6OKvnY.js +16 -0
  118. package/dist/widget/checkmark-bold-CAp1-IQ2.js +13 -0
  119. package/dist/widget/chevron-bottom-BjzsVzk9.js +13 -0
  120. package/dist/widget/chevron-left-CQZBDCiR.js +13 -0
  121. package/dist/widget/chevron-right-Dhg4zeZM.js +13 -0
  122. package/dist/widget/chevron-top-CDQmfJef.js +13 -0
  123. package/dist/widget/chrome-store-BNaC_b6w.js +66 -0
  124. package/dist/widget/circle-BC_GBj91.js +9 -0
  125. package/dist/widget/clock-BmF8-4a0.js +13 -0
  126. package/dist/widget/close-Bf61nZ8o.js +13 -0
  127. package/dist/widget/coinPlaceholder-7cZW2058.js +13 -0
  128. package/dist/widget/compass-CFC3yhnW.js +13 -0
  129. package/dist/widget/components/ChainImage.d.ts +8 -0
  130. package/dist/widget/components/ChainImage.d.ts.map +1 -0
  131. package/dist/widget/components/ChainImage.js +6 -0
  132. package/dist/widget/components/ConnectWallet.d.ts +18 -0
  133. package/dist/widget/components/ConnectWallet.d.ts.map +1 -0
  134. package/dist/widget/components/ConnectWallet.js +66 -0
  135. package/dist/widget/components/DebugScreensDropdown.d.ts +9 -0
  136. package/dist/widget/components/DebugScreensDropdown.d.ts.map +1 -0
  137. package/dist/widget/components/DebugScreensDropdown.js +40 -0
  138. package/dist/widget/components/FeeOptions.d.ts +17 -0
  139. package/dist/widget/components/FeeOptions.d.ts.map +1 -0
  140. package/dist/widget/components/FeeOptions.js +65 -0
  141. package/dist/widget/components/Footer.d.ts +9 -0
  142. package/dist/widget/components/Footer.d.ts.map +1 -0
  143. package/dist/widget/components/Footer.js +13 -0
  144. package/dist/widget/components/GreenCheckAnimation.d.ts +2 -0
  145. package/dist/widget/components/GreenCheckAnimation.d.ts.map +1 -0
  146. package/dist/widget/components/GreenCheckAnimation.js +74 -0
  147. package/dist/widget/components/Modal.d.ts +11 -0
  148. package/dist/widget/components/Modal.d.ts.map +1 -0
  149. package/dist/widget/components/Modal.js +36 -0
  150. package/dist/widget/components/Receipt.d.ts +13 -0
  151. package/dist/widget/components/Receipt.d.ts.map +1 -0
  152. package/dist/widget/components/Receipt.js +36 -0
  153. package/dist/widget/components/SendForm.d.ts +44 -0
  154. package/dist/widget/components/SendForm.d.ts.map +1 -0
  155. package/dist/widget/components/SendForm.js +177 -0
  156. package/dist/widget/components/TokenImage.d.ts +10 -0
  157. package/dist/widget/components/TokenImage.d.ts.map +1 -0
  158. package/dist/widget/components/TokenImage.js +8 -0
  159. package/dist/widget/components/TokenList.d.ts +16 -0
  160. package/dist/widget/components/TokenList.d.ts.map +1 -0
  161. package/dist/widget/components/TokenList.js +39 -0
  162. package/dist/widget/components/TransferPending.d.ts +11 -0
  163. package/dist/widget/components/TransferPending.d.ts.map +1 -0
  164. package/dist/widget/components/TransferPending.js +77 -0
  165. package/dist/widget/components/TransferPendingVertical.d.ts +18 -0
  166. package/dist/widget/components/TransferPendingVertical.d.ts.map +1 -0
  167. package/dist/widget/components/TransferPendingVertical.js +183 -0
  168. package/dist/widget/components/WalletConfirmation.d.ts +18 -0
  169. package/dist/widget/components/WalletConfirmation.d.ts.map +1 -0
  170. package/dist/widget/components/WalletConfirmation.js +22 -0
  171. package/dist/widget/config.d.ts +4 -0
  172. package/dist/widget/config.d.ts.map +1 -0
  173. package/dist/widget/config.js +3 -0
  174. package/dist/widget/copy-e0xXvKN0.js +20 -0
  175. package/dist/widget/cursor-CqM3v0xJ.js +8 -0
  176. package/dist/widget/cursor-transparent-CUQpdsCG.js +17 -0
  177. package/dist/widget/desktop-DUDGIRpM.js +14 -0
  178. package/dist/widget/disconnect-DUFST9QQ.js +13 -0
  179. package/dist/widget/discord-C1cj365Z.js +22 -0
  180. package/dist/widget/email-BHhmb_lX.js +703 -0
  181. package/dist/widget/embedded-wallet-CuuC4eah.js +467 -0
  182. package/dist/widget/ethereum-CfmBVfeB.js +15 -0
  183. package/dist/widget/etherscan-BSiynDhW.js +11 -0
  184. package/dist/widget/exclamation-triangle-DEiFNpHw.js +9 -0
  185. package/dist/widget/extension-mRmfCDxo.js +13 -0
  186. package/dist/widget/external-link-B4xMIVnW.js +13 -0
  187. package/dist/widget/facebook-CBAZStBR.js +31 -0
  188. package/dist/widget/farcaster-LHDEDf5S.js +17 -0
  189. package/dist/widget/filters-CBijuvFv.js +13 -0
  190. package/dist/widget/github-C3ILD420.js +23 -0
  191. package/dist/widget/google-CSj73POX.js +23 -0
  192. package/dist/widget/help-circle-2hdG5IdB.js +17 -0
  193. package/dist/widget/hooks/useAmountUsd.d.ts +13 -0
  194. package/dist/widget/hooks/useAmountUsd.d.ts.map +1 -0
  195. package/dist/widget/hooks/useAmountUsd.js +35 -0
  196. package/dist/widget/hooks/useSendForm.d.ts +125 -0
  197. package/dist/widget/hooks/useSendForm.d.ts.map +1 -0
  198. package/dist/widget/hooks/useSendForm.js +450 -0
  199. package/dist/widget/hooks/useTokenList.d.ts +52 -0
  200. package/dist/widget/hooks/useTokenList.d.ts.map +1 -0
  201. package/dist/widget/hooks/useTokenList.js +252 -0
  202. package/dist/widget/id-ByYSrwsd.js +17 -0
  203. package/dist/widget/if-defined-DRXJEhv7.js +752 -0
  204. package/dist/widget/image-C90L4Rf6.js +9 -0
  205. package/dist/widget/index-B3SlQ9v3.js +46 -0
  206. package/dist/widget/index-B8LPuLXQ.js +78 -0
  207. package/dist/widget/index-BDbworWA.js +171 -0
  208. package/dist/widget/index-BTlDgFSK.js +98 -0
  209. package/dist/widget/index-BUCcjXbd.js +306 -0
  210. package/dist/widget/index-BZ34edi2.js +1055 -0
  211. package/dist/widget/index-BiCU29wK.js +147 -0
  212. package/dist/widget/index-BlmqIKsY.js +266 -0
  213. package/dist/widget/index-BlviH5nG.js +55 -0
  214. package/dist/widget/index-Bwd5X3fS.js +8306 -0
  215. package/dist/widget/index-C5gmknHK.js +78 -0
  216. package/dist/widget/index-CD6dBcRj.js +76 -0
  217. package/dist/widget/index-CDlhy529.js +63 -0
  218. package/dist/widget/index-CHXa5ke-.js +59 -0
  219. package/dist/widget/index-CK94R-H7.js +22498 -0
  220. package/dist/widget/index-CQzo3m3x.js +182 -0
  221. package/dist/widget/index-CRT8cAwG.js +325 -0
  222. package/dist/widget/index-CY7Lt2Yu.js +310 -0
  223. package/dist/widget/index-CiKfAu1E.js +79 -0
  224. package/dist/widget/index-CkCu6rMi.js +258 -0
  225. package/dist/widget/index-CngLTu_R.js +517 -0
  226. package/dist/widget/index-CsMV8-em.js +2577 -0
  227. package/dist/widget/index-Cu2Wva8v.js +200 -0
  228. package/dist/widget/index-DKBxLTEF.js +240 -0
  229. package/dist/widget/index-DQEVT3dx.js +511 -0
  230. package/dist/widget/index-DU2HcCis.js +200 -0
  231. package/dist/widget/index-DutZGWNW.js +321 -0
  232. package/dist/widget/index-O0glArmc.js +182 -0
  233. package/dist/widget/index-O8FmRjKe.js +63719 -0
  234. package/dist/widget/index-RtKXrB6I.js +576 -0
  235. package/dist/widget/index-TIYtS0gE.js +88 -0
  236. package/dist/widget/index-dQNJvWHs.js +66 -0
  237. package/dist/widget/index-wmEwdsq7.js +909 -0
  238. package/dist/widget/index.d.ts +3 -0
  239. package/dist/widget/index.d.ts.map +1 -0
  240. package/dist/widget/index.js +2 -0
  241. package/dist/widget/info-DMPChDjV.js +8 -0
  242. package/dist/widget/info-circle-DAvS_7nY.js +17 -0
  243. package/dist/widget/lightbulb-DnZ9mNEs.js +8 -0
  244. package/dist/widget/lit-html-BRjl1r6K.js +243 -0
  245. package/dist/widget/mail-DpaVSOP8.js +13 -0
  246. package/dist/widget/mobile-CRvdyu7I.js +14 -0
  247. package/dist/widget/more-C5VqW9PR.js +16 -0
  248. package/dist/widget/network-placeholder-CZ0vApma.js +19 -0
  249. package/dist/widget/nftPlaceholder-7jjIK2bT.js +13 -0
  250. package/dist/widget/off-4mHjJLLX.js +9 -0
  251. package/dist/widget/onramp-Bc0ozVsw.js +929 -0
  252. package/dist/widget/play-store-Uocul8nC.js +37 -0
  253. package/dist/widget/plus-DrYF7siO.js +18 -0
  254. package/dist/widget/prepareSend-BQJmzM5B.js +54987 -0
  255. package/dist/widget/qr-code-DcnGMUB3.js +11 -0
  256. package/dist/widget/receive-fvIVd7R_.js +184 -0
  257. package/dist/widget/recycle-horizontal-DrDwXC4D.js +14 -0
  258. package/dist/widget/ref-CXNmEjML.js +41 -0
  259. package/dist/widget/refresh-OK9lIPLS.js +13 -0
  260. package/dist/widget/reown-logo-C-Qn7mS3.js +17 -0
  261. package/dist/widget/search-DZqv1oKg.js +13 -0
  262. package/dist/widget/send-CJlmI-xe.js +1039 -0
  263. package/dist/widget/send-otoEC8uU.js +20 -0
  264. package/dist/widget/socials-BJciurWF.js +599 -0
  265. package/dist/widget/solana-Bv5Hs_0T.js +18 -0
  266. package/dist/widget/swapHorizontal-BzOPGV37.js +13 -0
  267. package/dist/widget/swapHorizontalBold-axyHnSmj.js +13 -0
  268. package/dist/widget/swapHorizontalMedium-C6YOPfPz.js +21 -0
  269. package/dist/widget/swapHorizontalRoundedBold-yVcLbWNT.js +13 -0
  270. package/dist/widget/swapVertical-BDjxt9pE.js +13 -0
  271. package/dist/widget/swaps-DEWNj4kd.js +1637 -0
  272. package/dist/widget/telegram-BQJD7dlP.js +21 -0
  273. package/dist/widget/three-dots-DW9jmSMG.js +10 -0
  274. package/dist/widget/transactions-uCseGQQt.js +38 -0
  275. package/dist/widget/twitch-XugxDfOE.js +23 -0
  276. package/dist/widget/twitterIcon-DQVObQUL.js +11 -0
  277. package/dist/widget/types.d.ts +51 -0
  278. package/dist/widget/types.d.ts.map +1 -0
  279. package/dist/widget/types.js +1 -0
  280. package/dist/widget/verify-DpMYHxLf.js +13 -0
  281. package/dist/widget/verify-filled-KpEL6ZJ_.js +13 -0
  282. package/dist/widget/w3m-modal-C8e-6Kba.js +1047 -0
  283. package/dist/widget/wallet-D8ssEB0o.js +13 -0
  284. package/dist/widget/wallet-placeholder-HtAy21Wc.js +19 -0
  285. package/dist/widget/walletconnect-Bp_4XfrY.js +37 -0
  286. package/dist/widget/warning-circle-FgYS7P7n.js +17 -0
  287. package/dist/widget/widget/index.js +7 -0
  288. package/dist/widget/widget.d.ts +47 -0
  289. package/dist/widget/widget.d.ts.map +1 -0
  290. package/dist/widget/widget.js +932 -0
  291. package/dist/widget/x-DlZBoP9k.js +17 -0
  292. package/dist/widget/x-mark-Ba9pt-_h.js +8 -0
  293. package/package.json +102 -8
  294. package/src/abi.ts +38 -0
  295. package/src/apiClient.ts +32 -0
  296. package/src/buffer.ts +10 -0
  297. package/src/cctp.ts +579 -0
  298. package/src/chainSwitch.ts +55 -0
  299. package/src/chains.ts +124 -0
  300. package/src/constants.ts +26 -0
  301. package/src/encoders.ts +20 -0
  302. package/src/error.ts +15 -0
  303. package/src/explorer.ts +37 -0
  304. package/src/gasless.ts +545 -0
  305. package/src/index.ts +48 -0
  306. package/src/indexerClient.ts +36 -0
  307. package/src/intents.ts +537 -0
  308. package/src/metaTxnMonitor.ts +163 -0
  309. package/src/metaTxns.ts +21 -0
  310. package/src/paymasterSend.ts +503 -0
  311. package/src/preconditions.ts +52 -0
  312. package/src/prepareSend.ts +1849 -0
  313. package/src/prices.ts +186 -0
  314. package/src/queryParams.ts +80 -0
  315. package/src/relaySdk.ts +481 -0
  316. package/src/relayer.ts +255 -0
  317. package/src/sendUserOp.ts +570 -0
  318. package/src/sequenceWallet.ts +579 -0
  319. package/src/theme.ts +2 -0
  320. package/src/toSimpleSmartAccount.ts +567 -0
  321. package/src/tokenBalances.ts +760 -0
  322. package/src/tokens.ts +471 -0
  323. package/src/trails.ts +1591 -0
  324. package/src/types.d.ts +11 -0
  325. package/src/umd.tsx +49 -0
  326. package/src/utils.ts +16 -0
  327. package/src/vite-env.d.ts +4 -0
  328. package/src/widget/assets/MetaMask-icon-fox-with-margins.svg +31 -0
  329. package/src/widget/assets/MetaMask-icon-fox.svg +26 -0
  330. package/src/widget/assets/MetaMask-logo-black.svg +3 -0
  331. package/src/widget/assets/MetaMask-logo-white.svg +16 -0
  332. package/src/widget/assets/Privy_Brandmark_Black.svg +9 -0
  333. package/src/widget/assets/Privy_Brandmark_White.svg +9 -0
  334. package/src/widget/assets/Trails-logo-black.svg +11 -0
  335. package/src/widget/assets/Trails-logo-white.svg +11 -0
  336. package/src/widget/components/ChainImage.tsx +28 -0
  337. package/src/widget/components/ConnectWallet.tsx +206 -0
  338. package/src/widget/components/DebugScreensDropdown.tsx +88 -0
  339. package/src/widget/components/FeeOptions.tsx +199 -0
  340. package/src/widget/components/Footer.tsx +51 -0
  341. package/src/widget/components/GreenCheckAnimation.tsx +119 -0
  342. package/src/widget/components/Modal.tsx +97 -0
  343. package/src/widget/components/Receipt.tsx +237 -0
  344. package/src/widget/components/SendForm.tsx +695 -0
  345. package/src/widget/components/TokenImage.tsx +37 -0
  346. package/src/widget/components/TokenList.tsx +287 -0
  347. package/src/widget/components/TransferPending.tsx +204 -0
  348. package/src/widget/components/TransferPendingVertical.tsx +412 -0
  349. package/src/widget/components/WalletConfirmation.tsx +172 -0
  350. package/src/widget/config.ts +5 -0
  351. package/src/widget/hooks/useAmountUsd.ts +59 -0
  352. package/src/widget/hooks/useSendForm.ts +715 -0
  353. package/src/widget/hooks/useTokenList.ts +397 -0
  354. package/src/widget/index.css +2 -0
  355. package/src/widget/index.tsx +8 -0
  356. package/src/widget/types/svg.d.ts +8 -0
  357. package/src/widget/types.ts +59 -0
  358. package/src/widget/widget.tsx +1438 -0
  359. package/index.js +0 -1
@@ -0,0 +1,567 @@
1
+ import {
2
+ type Account,
3
+ type Address,
4
+ type Assign,
5
+ BaseError,
6
+ type Chain,
7
+ type Client,
8
+ concat,
9
+ createWalletClient,
10
+ custom,
11
+ decodeAbiParameters,
12
+ decodeFunctionData,
13
+ type EIP1193Provider,
14
+ encodeDeployData,
15
+ encodeFunctionData,
16
+ type Hex,
17
+ type JsonRpcAccount,
18
+ type LocalAccount,
19
+ type OneOf,
20
+ type Prettify,
21
+ type Transport,
22
+ type WalletClient,
23
+ } from "viem"
24
+ import {
25
+ entryPoint07Abi,
26
+ entryPoint07Address,
27
+ getUserOperationHash,
28
+ type SmartAccount,
29
+ type SmartAccountImplementation,
30
+ toSmartAccount,
31
+ type UserOperation,
32
+ } from "viem/account-abstraction"
33
+ import { toAccount } from "viem/accounts"
34
+ import {
35
+ call,
36
+ getChainId,
37
+ readContract,
38
+ signMessage,
39
+ signTypedData,
40
+ } from "viem/actions"
41
+ import { getAction } from "viem/utils"
42
+
43
+ export const getAccountInitCode = async (
44
+ owner: Address,
45
+ index = BigInt(0),
46
+ ): Promise<Hex> => {
47
+ if (!owner) throw new Error("Owner account not found")
48
+
49
+ return encodeFunctionData({
50
+ abi: [
51
+ {
52
+ inputs: [
53
+ {
54
+ internalType: "address",
55
+ name: "owner",
56
+ type: "address",
57
+ },
58
+ {
59
+ internalType: "uint256",
60
+ name: "salt",
61
+ type: "uint256",
62
+ },
63
+ ],
64
+ name: "createAccount",
65
+ outputs: [
66
+ {
67
+ internalType: "contract SimpleAccount",
68
+ name: "ret",
69
+ type: "address",
70
+ },
71
+ ],
72
+ stateMutability: "nonpayable",
73
+ type: "function",
74
+ },
75
+ ],
76
+ functionName: "createAccount",
77
+ args: [owner, index],
78
+ })
79
+ }
80
+
81
+ export type ToSimpleSmartAccountParameters<
82
+ owner extends OneOf<
83
+ | EthereumProvider
84
+ | WalletClient<Transport, Chain | undefined, Account>
85
+ | LocalAccount
86
+ >,
87
+ > = {
88
+ client: Client<
89
+ Transport,
90
+ Chain | undefined,
91
+ JsonRpcAccount | LocalAccount | undefined
92
+ >
93
+ owner: owner
94
+ entryPoint?: {
95
+ address: Address
96
+ version: "0.7"
97
+ }
98
+ factoryAddress?: Address
99
+ index?: bigint
100
+ address?: Address
101
+ nonceKey?: bigint
102
+ accountLogicAddress?: Address
103
+ }
104
+
105
+ export const getFactoryAddress = (factoryAddress?: Address): Address => {
106
+ if (factoryAddress) return factoryAddress
107
+ return "0x91E60e0613810449d098b0b5Ec8b51A0FE8c8985"
108
+ }
109
+
110
+ export type SimpleSmartAccountImplementation = Assign<
111
+ SmartAccountImplementation<typeof entryPoint07Abi, "0.7", object, false>,
112
+ { sign: NonNullable<SmartAccountImplementation["sign"]> }
113
+ >
114
+
115
+ export type ToSimpleSmartAccountReturnType =
116
+ SmartAccount<SimpleSmartAccountImplementation>
117
+
118
+ /**
119
+ * @description Creates an Simple Account from a private key.
120
+ *
121
+ * @returns A Private Key Simple Account.
122
+ */
123
+ export async function toSimpleSmartAccount<
124
+ owner extends OneOf<
125
+ | EthereumProvider
126
+ | WalletClient<Transport, Chain | undefined, Account>
127
+ | LocalAccount
128
+ >,
129
+ >(
130
+ parameters: ToSimpleSmartAccountParameters<owner>,
131
+ ): Promise<ToSimpleSmartAccountReturnType> {
132
+ const {
133
+ client,
134
+ owner,
135
+ factoryAddress: _factoryAddress,
136
+ index = BigInt(0),
137
+ address,
138
+ nonceKey,
139
+ // accountLogicAddress = "0xe6Cae83BdE06E4c305530e199D7217f42808555B",
140
+ } = parameters
141
+
142
+ const localOwner = await toOwner({ owner })
143
+
144
+ const entryPoint = parameters.entryPoint
145
+ ? {
146
+ address: parameters.entryPoint.address,
147
+ abi: entryPoint07Abi,
148
+ version: "0.7" as const,
149
+ }
150
+ : {
151
+ address: entryPoint07Address,
152
+ abi: entryPoint07Abi,
153
+ version: "0.7" as const,
154
+ }
155
+
156
+ const factoryAddress = getFactoryAddress(_factoryAddress)
157
+
158
+ let chainId: number
159
+
160
+ const getMemoizedChainId = async () => {
161
+ if (chainId) return chainId
162
+ chainId = client.chain
163
+ ? client.chain.id
164
+ : await getAction(client, getChainId, "getChainId")({})
165
+ return chainId
166
+ }
167
+
168
+ const getFactoryArgsFunc = () => async () => {
169
+ return {
170
+ factory: factoryAddress,
171
+ factoryData: await getAccountInitCode(localOwner.address, index),
172
+ }
173
+ }
174
+
175
+ const { accountAddress, getFactoryArgs } = await (async () => {
176
+ const getFactoryArgs = getFactoryArgsFunc()
177
+
178
+ if (address) {
179
+ return { accountAddress: address, getFactoryArgs }
180
+ }
181
+
182
+ const { factory, factoryData } = await getFactoryArgs()
183
+
184
+ const accountAddress = await getSenderAddress(client, {
185
+ factory,
186
+ factoryData,
187
+ entryPointAddress: entryPoint.address,
188
+ })
189
+
190
+ return { accountAddress, getFactoryArgs }
191
+ })()
192
+
193
+ return toSmartAccount({
194
+ client,
195
+ entryPoint,
196
+ getFactoryArgs,
197
+ async getAddress() {
198
+ return accountAddress
199
+ },
200
+ async encodeCalls(calls) {
201
+ if (calls.length > 1) {
202
+ return encodeFunctionData({
203
+ abi: executeBatch07Abi,
204
+ functionName: "executeBatch",
205
+ args: [
206
+ calls.map((a) => a.to),
207
+ calls.map((a) => a.value ?? 0n),
208
+ calls.map((a) => a.data ?? "0x"),
209
+ ],
210
+ })
211
+ }
212
+
213
+ const call = calls.length === 0 ? undefined : calls[0]
214
+
215
+ if (!call) {
216
+ throw new Error("No calls to encode")
217
+ }
218
+
219
+ return encodeFunctionData({
220
+ abi: executeSingleAbi,
221
+ functionName: "execute",
222
+ args: [call.to, call.value ?? 0n, call.data ?? "0x"],
223
+ })
224
+ },
225
+ decodeCalls: async (callData) => {
226
+ try {
227
+ const calls: {
228
+ to: Address
229
+ data: Hex
230
+ value?: bigint
231
+ }[] = []
232
+
233
+ const decodedV7 = decodeFunctionData({
234
+ abi: executeBatch07Abi,
235
+ data: callData,
236
+ })
237
+
238
+ const destinations = decodedV7.args[0]
239
+ const values = decodedV7.args[1]
240
+ const datas = decodedV7.args[2]
241
+
242
+ for (let i = 0; i < destinations.length; i++) {
243
+ calls.push({
244
+ to: destinations[i]!,
245
+ data: datas[i]!,
246
+ value: values[i],
247
+ })
248
+ }
249
+
250
+ return calls
251
+ } catch (_) {
252
+ const decodedSingle = decodeFunctionData({
253
+ abi: executeSingleAbi,
254
+ data: callData,
255
+ })
256
+
257
+ return [
258
+ {
259
+ to: decodedSingle.args[0],
260
+ value: decodedSingle.args[1],
261
+ data: decodedSingle.args[2],
262
+ },
263
+ ]
264
+ }
265
+ },
266
+ async getNonce(args) {
267
+ return getAccountNonce(client, {
268
+ address: await this.getAddress(),
269
+ entryPointAddress: entryPoint.address,
270
+ key: nonceKey ?? args?.key,
271
+ })
272
+ },
273
+ async getStubSignature() {
274
+ return "0xfffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c"
275
+ },
276
+ async sign({ hash }) {
277
+ return this.signMessage({ message: hash })
278
+ },
279
+ signMessage: async (_) => {
280
+ throw new Error("Simple account isn't 1271 compliant")
281
+ },
282
+ signTypedData: async (_) => {
283
+ throw new Error("Simple account isn't 1271 compliant")
284
+ },
285
+ async signUserOperation(parameters) {
286
+ const { chainId = await getMemoizedChainId(), ...userOperation } =
287
+ parameters
288
+
289
+ return signMessage(client, {
290
+ account: localOwner,
291
+ message: {
292
+ raw: getUserOperationHash({
293
+ userOperation: {
294
+ ...userOperation,
295
+ sender: userOperation.sender ?? (await this.getAddress()),
296
+ signature: "0x",
297
+ } as UserOperation<"0.7">,
298
+ entryPointAddress: entryPoint.address,
299
+ entryPointVersion: entryPoint.version,
300
+ chainId: chainId,
301
+ }),
302
+ },
303
+ })
304
+ },
305
+ }) as Promise<ToSimpleSmartAccountReturnType>
306
+ }
307
+
308
+ export const executeSingleAbi = [
309
+ {
310
+ inputs: [
311
+ {
312
+ internalType: "address",
313
+ name: "dest",
314
+ type: "address",
315
+ },
316
+ {
317
+ internalType: "uint256",
318
+ name: "value",
319
+ type: "uint256",
320
+ },
321
+ {
322
+ internalType: "bytes",
323
+ name: "func",
324
+ type: "bytes",
325
+ },
326
+ ],
327
+ name: "execute",
328
+ outputs: [],
329
+ stateMutability: "nonpayable",
330
+ type: "function",
331
+ },
332
+ ] as const
333
+
334
+ const executeBatch07Abi = [
335
+ {
336
+ inputs: [
337
+ {
338
+ internalType: "address[]",
339
+ name: "dest",
340
+ type: "address[]",
341
+ },
342
+ {
343
+ internalType: "uint256[]",
344
+ name: "value",
345
+ type: "uint256[]",
346
+ },
347
+ {
348
+ internalType: "bytes[]",
349
+ name: "func",
350
+ type: "bytes[]",
351
+ },
352
+ ],
353
+ name: "executeBatch",
354
+ outputs: [],
355
+ stateMutability: "nonpayable",
356
+ type: "function",
357
+ },
358
+ ] as const
359
+
360
+ export type GetAccountNonceParams = {
361
+ address: Address
362
+ entryPointAddress: Address
363
+ key?: bigint
364
+ }
365
+
366
+ /**
367
+ * Returns the nonce of the account with the entry point.
368
+ */
369
+ export const getAccountNonce = async (
370
+ client: Client,
371
+ args: GetAccountNonceParams,
372
+ ): Promise<bigint> => {
373
+ const { address, entryPointAddress, key = BigInt(0) } = args
374
+
375
+ return await getAction(
376
+ client,
377
+ readContract,
378
+ "readContract",
379
+ )({
380
+ address: entryPointAddress,
381
+ abi: [
382
+ {
383
+ inputs: [
384
+ {
385
+ name: "sender",
386
+ type: "address",
387
+ },
388
+ {
389
+ name: "key",
390
+ type: "uint192",
391
+ },
392
+ ],
393
+ name: "getNonce",
394
+ outputs: [
395
+ {
396
+ name: "nonce",
397
+ type: "uint256",
398
+ },
399
+ ],
400
+ stateMutability: "view",
401
+ type: "function",
402
+ },
403
+ ],
404
+ functionName: "getNonce",
405
+ args: [address, key],
406
+ })
407
+ }
408
+
409
+ // https://github.com/pimlicolabs/contracts/blob/80277d0de609e6b5fb4cedeeb1fb9a023caed59f/src/GetSenderAddressHelper.sol
410
+ export const GetSenderAddressHelperByteCode =
411
+ "0x60806040526102a28038038091610015826100ae565b6080396040816080019112610093576080516001600160a01b03811681036100935760a0516001600160401b0381116100935782609f82011215610093578060800151610061816100fc565b9361006f60405195866100d9565b81855260a082840101116100935761008e9160a0602086019101610117565b610196565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6080601f91909101601f19168101906001600160401b038211908210176100d457604052565b610098565b601f909101601f19168101906001600160401b038211908210176100d457604052565b6001600160401b0381116100d457601f01601f191660200190565b60005b83811061012a5750506000910152565b818101518382015260200161011a565b6040916020825261015a8151809281602086015260208686019101610117565b601f01601f1916010190565b3d15610191573d90610177826100fc565b9161018560405193846100d9565b82523d6000602084013e565b606090565b600091908291826040516101cd816101bf6020820195639b249f6960e01b87526024830161013a565b03601f1981018352826100d9565b51925af16101d9610166565b906102485760048151116000146101f7576024015160005260206000f35b60405162461bcd60e51b8152602060048201526024808201527f67657453656e64657241646472657373206661696c656420776974686f7574206044820152636461746160e01b6064820152608490fd5b60405162461bcd60e51b815260206004820152602b60248201527f67657453656e6465724164647265737320646964206e6f74207265766572742060448201526a185cc8195e1c1958dd195960aa1b6064820152608490fdfe"
412
+
413
+ export const GetSenderAddressHelperAbi = [
414
+ {
415
+ inputs: [
416
+ {
417
+ internalType: "address",
418
+ name: "_entryPoint",
419
+ type: "address",
420
+ },
421
+ {
422
+ internalType: "bytes",
423
+ name: "initCode",
424
+ type: "bytes",
425
+ },
426
+ ],
427
+ stateMutability: "payable",
428
+ type: "constructor",
429
+ },
430
+ ]
431
+
432
+ export type GetSenderAddressParams = OneOf<
433
+ | {
434
+ initCode: Hex
435
+ entryPointAddress: Address
436
+ factory?: never
437
+ factoryData?: never
438
+ }
439
+ | {
440
+ entryPointAddress: Address
441
+ factory: Address
442
+ factoryData: Hex
443
+ initCode?: never
444
+ }
445
+ >
446
+
447
+ export class InvalidEntryPointError extends BaseError {
448
+ override name = "InvalidEntryPointError"
449
+
450
+ constructor({
451
+ cause,
452
+ entryPointAddress,
453
+ }: { cause?: BaseError; entryPointAddress?: Address } = {}) {
454
+ super(
455
+ `The entry point address (\`entryPoint\`${
456
+ entryPointAddress ? ` = ${entryPointAddress}` : ""
457
+ }) is not a valid entry point. getSenderAddress did not revert with a SenderAddressResult error.`,
458
+ {
459
+ cause,
460
+ },
461
+ )
462
+ }
463
+ }
464
+
465
+ /**
466
+ * Returns the address of the account that will be deployed with the given init code.
467
+ */
468
+ export const getSenderAddress = async (
469
+ client: Client,
470
+ args: Prettify<GetSenderAddressParams>,
471
+ ): Promise<Address> => {
472
+ const { initCode, entryPointAddress, factory, factoryData } = args
473
+
474
+ if (!initCode && !factory && !factoryData) {
475
+ throw new Error(
476
+ "Either `initCode` or `factory` and `factoryData` must be provided",
477
+ )
478
+ }
479
+
480
+ const formattedInitCode =
481
+ initCode || concat([factory as Hex, factoryData as Hex])
482
+
483
+ const { data } = await getAction(
484
+ client,
485
+ call,
486
+ "call",
487
+ )({
488
+ data: encodeDeployData({
489
+ abi: GetSenderAddressHelperAbi,
490
+ bytecode: GetSenderAddressHelperByteCode,
491
+ args: [entryPointAddress, formattedInitCode],
492
+ }),
493
+ })
494
+
495
+ if (!data) {
496
+ throw new Error("Failed to get sender address")
497
+ }
498
+
499
+ return decodeAbiParameters([{ type: "address" }], data)[0]
500
+ }
501
+
502
+ export type EthereumProvider = OneOf<
503
+ { request(...args: any): Promise<any> } | EIP1193Provider
504
+ >
505
+
506
+ export async function toOwner<provider extends EthereumProvider>({
507
+ owner,
508
+ address,
509
+ }: {
510
+ owner: OneOf<
511
+ | provider
512
+ | WalletClient<Transport, Chain | undefined, Account>
513
+ | LocalAccount
514
+ >
515
+ address?: Address
516
+ }): Promise<LocalAccount> {
517
+ if ("type" in owner && owner.type === "local") {
518
+ return owner as LocalAccount
519
+ }
520
+
521
+ let walletClient:
522
+ | WalletClient<Transport, Chain | undefined, Account>
523
+ | undefined
524
+
525
+ if ("request" in owner) {
526
+ if (!address) {
527
+ try {
528
+ ;[address] = await (owner as EthereumProvider).request({
529
+ method: "eth_requestAccounts",
530
+ })
531
+ } catch {
532
+ ;[address] = await (owner as EthereumProvider).request({
533
+ method: "eth_accounts",
534
+ })
535
+ }
536
+ }
537
+ if (!address) {
538
+ // For TS to be happy
539
+ throw new Error("address is required")
540
+ }
541
+ walletClient = createWalletClient({
542
+ account: address,
543
+ transport: custom(owner as EthereumProvider),
544
+ })
545
+ }
546
+
547
+ if (!walletClient) {
548
+ walletClient = owner as WalletClient<Transport, Chain | undefined, Account>
549
+ }
550
+
551
+ return toAccount({
552
+ address: walletClient.account.address,
553
+ async signMessage({ message }) {
554
+ return walletClient.signMessage({ message })
555
+ },
556
+ async signTypedData(typedData) {
557
+ return getAction(
558
+ walletClient,
559
+ signTypedData,
560
+ "signTypedData",
561
+ )(typedData as any)
562
+ },
563
+ async signTransaction(_) {
564
+ throw new Error("Smart account signer doesn't need to sign transactions")
565
+ },
566
+ })
567
+ }