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,329 @@
1
+ import { createPublicClient, encodeFunctionData, encodePacked, http, pad, parseAbi, parseEther, parseGwei, toHex, zeroAddress, } from "viem";
2
+ import { createBundlerClient, createPaymasterClient, prepareUserOperation, } from "viem/account-abstraction";
3
+ import { generatePrivateKey, privateKeyToAccount } from "viem/accounts";
4
+ import { getPermitCalldata, getPermitSignature, getTransferCalldata, getTransferFromCalldata, } from "./gasless.js";
5
+ import { sendUserOperationDirectly } from "./sendUserOp.js";
6
+ import { toSimpleSmartAccount } from "./toSimpleSmartAccount.js";
7
+ // --- ABIs ---
8
+ export const ENTRYPOINT_ABI = [
9
+ {
10
+ name: "handleOps",
11
+ type: "function",
12
+ stateMutability: "nonpayable",
13
+ inputs: [
14
+ {
15
+ name: "ops",
16
+ type: "tuple[]",
17
+ components: [
18
+ { name: "sender", type: "address" },
19
+ { name: "nonce", type: "uint256" },
20
+ { name: "initCode", type: "bytes" },
21
+ { name: "callData", type: "bytes" },
22
+ { name: "callGasLimit", type: "uint256" },
23
+ { name: "verificationGasLimit", type: "uint256" },
24
+ { name: "preVerificationGas", type: "uint256" },
25
+ { name: "maxFeePerGas", type: "uint256" },
26
+ { name: "maxPriorityFeePerGas", type: "uint256" },
27
+ { name: "paymasterAndData", type: "bytes" },
28
+ { name: "signature", type: "bytes" },
29
+ ],
30
+ },
31
+ {
32
+ name: "beneficiary",
33
+ type: "address",
34
+ },
35
+ ],
36
+ outputs: [],
37
+ },
38
+ {
39
+ name: "getUserOpHash",
40
+ type: "function",
41
+ stateMutability: "view",
42
+ inputs: [
43
+ {
44
+ name: "userOp",
45
+ type: "tuple",
46
+ components: [
47
+ { name: "sender", type: "address" },
48
+ { name: "nonce", type: "uint256" },
49
+ { name: "initCode", type: "bytes" },
50
+ { name: "callData", type: "bytes" },
51
+ { name: "accountGasLimits", type: "bytes32" },
52
+ { name: "preVerificationGas", type: "uint256" },
53
+ { name: "gasFees", type: "bytes32" },
54
+ { name: "paymasterAndData", type: "bytes" },
55
+ { name: "signature", type: "bytes" },
56
+ ],
57
+ },
58
+ ],
59
+ outputs: [
60
+ {
61
+ name: "",
62
+ type: "bytes32",
63
+ },
64
+ ],
65
+ },
66
+ ];
67
+ const ENTRYPOINT_ADDRESS = "0x0000000071727de22e5e9d8baf0edac6f37da032";
68
+ // --- Payload packer ---
69
+ export function packPayload(payload) {
70
+ const globalFlag = 0x00;
71
+ const numCalls = payload.calls.length;
72
+ const encodedCalls = payload.calls.map((call) => {
73
+ const callFlags = 0x4a; // has value + gas limit + revert on error
74
+ return encodePacked(["uint8", "address", "uint256", "uint256", "bytes"], [callFlags, call.to, call.value, call.gasLimit, call.data]);
75
+ });
76
+ return encodePacked(["uint8", "bytes20", "uint8", ...Array(numCalls).fill("bytes")], [
77
+ globalFlag,
78
+ pad(toHex(payload.space), { size: 20 }),
79
+ numCalls,
80
+ ...encodedCalls,
81
+ ]);
82
+ }
83
+ // --- Main logic ---
84
+ export async function getDelegatorSmartAccount({ publicClient, }) {
85
+ // Create delegator account from private key
86
+ const delegatorPrivateKey = generatePrivateKey();
87
+ const delegatorAccount = privateKeyToAccount(delegatorPrivateKey);
88
+ console.log("[trails-sdk] Delegator account:", delegatorAccount.address);
89
+ // Initialize delegator smart account
90
+ console.log("Creating smart account...");
91
+ const delegatorSmartAccount = await toSimpleSmartAccount({
92
+ client: publicClient,
93
+ entryPoint: {
94
+ address: ENTRYPOINT_ADDRESS,
95
+ version: "0.7",
96
+ },
97
+ owner: privateKeyToAccount(delegatorPrivateKey),
98
+ });
99
+ console.log("[trails-sdk] Smart account address:", delegatorSmartAccount.address);
100
+ console.log("[trails-sdk] delegatorSmartAccount.address", delegatorSmartAccount.address);
101
+ return delegatorSmartAccount;
102
+ }
103
+ export async function getPaymasterGaslessTransaction({ walletClient, chain, tokenAddress, amount, recipient, delegatorSmartAccount, }) {
104
+ // Initialize clients
105
+ const publicClient = createPublicClient({
106
+ chain,
107
+ transport: http(),
108
+ });
109
+ if (!walletClient.account) {
110
+ throw new Error("No account found");
111
+ }
112
+ const connectedAccount = walletClient.account.address;
113
+ console.log("[trails-sdk] Transfer amount:", amount.toString());
114
+ const { signature, deadline } = await getPermitSignature({
115
+ publicClient,
116
+ walletClient,
117
+ signer: connectedAccount,
118
+ spender: delegatorSmartAccount.address,
119
+ tokenAddress,
120
+ amount,
121
+ chain,
122
+ });
123
+ console.log("[trails-sdk] Received signature:", signature);
124
+ // Encode permit call
125
+ const permitCalldata = getPermitCalldata({
126
+ signer: connectedAccount,
127
+ spender: delegatorSmartAccount.address,
128
+ amount,
129
+ deadline,
130
+ signature,
131
+ });
132
+ // Encode transferFrom call
133
+ const transferFromCalldata = getTransferFromCalldata({
134
+ signer: connectedAccount,
135
+ spender: delegatorSmartAccount.address,
136
+ amount,
137
+ });
138
+ // Encode transfer call to recipient
139
+ const transferCalldata = getTransferCalldata({ recipient, amount });
140
+ const calls = [
141
+ { to: zeroAddress, data: "0x", value: "0x" },
142
+ { to: tokenAddress, data: permitCalldata, value: "0x" },
143
+ { to: tokenAddress, data: transferFromCalldata, value: "0x" },
144
+ { to: tokenAddress, data: transferCalldata, value: "0x" },
145
+ ];
146
+ return calls;
147
+ }
148
+ export async function sendPaymasterGaslessTransaction({ walletClient, publicClient, chain, paymasterUrl, delegatorSmartAccount, calls, }) {
149
+ try {
150
+ if (!walletClient.account) {
151
+ throw new Error("No account found");
152
+ }
153
+ // Create relayer wallet
154
+ // const relayerAccount = privateKeyToAccount(
155
+ // RELAYER_PRIVATE_KEY as `0x${string}`,
156
+ // )
157
+ // const relayerClient = createWalletClient({
158
+ // account: relayerAccount,
159
+ // chain,
160
+ // transport: http(),
161
+ // })
162
+ // console.log("[trails-sdk] Relayer address:", relayerAccount.address)
163
+ // console.log('[trails-sdk] Staking on entry point...')
164
+ // await stakeOnEntryPoint({ relayerClient, relayerAccount, delegatorAddress: delegatorAccount.address, chain })
165
+ // const prefundTx = await relayerClient.sendTransaction({
166
+ // to: delegatorSmartAccount.address,
167
+ // value: parseEther('0.0005'),
168
+ // chain: chain
169
+ // });
170
+ // console.log('[trails-sdk] Prefund tx:', prefundTx);
171
+ // const prefundReceipt = await publicClient.waitForTransactionReceipt({ hash: prefundTx });
172
+ // console.log('[trails-sdk] Prefund receipt:', prefundReceipt);
173
+ console.log("[trails-sdk] Estimating gas fees...");
174
+ const fees = await publicClient.estimateFeesPerGas();
175
+ const maxPriorityFeePerGas = parseGwei("1"); // adjustable
176
+ const maxFeePerGas = fees.maxFeePerGas + maxPriorityFeePerGas;
177
+ if (paymasterUrl) {
178
+ // alchemy bundler doesn't support paymaster client
179
+ if (paymasterUrl.includes("alchemy")) {
180
+ const bundlerClient = createBundlerClient({
181
+ chain: chain,
182
+ transport: http(paymasterUrl),
183
+ });
184
+ console.log("[trails-sdk] preparing user op");
185
+ const userOp = await prepareUserOperation(publicClient, {
186
+ account: delegatorSmartAccount,
187
+ calls,
188
+ maxFeePerGas,
189
+ maxPriorityFeePerGas,
190
+ callGasLimit: 500000n,
191
+ verificationGasLimit: 500000n,
192
+ preVerificationGas: 500000n,
193
+ });
194
+ const signedUserOp = await delegatorSmartAccount.signUserOperation(userOp);
195
+ userOp.signature = signedUserOp;
196
+ console.log("[trails-sdk] Signed user operation:", signedUserOp);
197
+ console.log("[trails-sdk] Sending user operation...");
198
+ const hash = await bundlerClient.sendUserOperation(userOp);
199
+ console.log("[trails-sdk] User operation sent! Hash:", hash);
200
+ const receipt = await bundlerClient.waitForUserOperationReceipt({
201
+ hash: hash,
202
+ });
203
+ console.log("[trails-sdk] User operation receipt:", receipt);
204
+ return receipt.receipt.transactionHash;
205
+ }
206
+ else {
207
+ // other bundlers: thirdweb, pimlico, zerodev, etc
208
+ const paymasterClient = createPaymasterClient({
209
+ transport: http(paymasterUrl),
210
+ });
211
+ const bundlerClient = createBundlerClient({
212
+ chain: chain,
213
+ paymaster: paymasterClient,
214
+ transport: http(paymasterUrl),
215
+ });
216
+ console.log("[trails-sdk] preparing user op");
217
+ let userOp = await prepareUserOperation(publicClient, {
218
+ account: delegatorSmartAccount,
219
+ calls,
220
+ maxFeePerGas,
221
+ maxPriorityFeePerGas,
222
+ callGasLimit: 500000n,
223
+ verificationGasLimit: 500000n,
224
+ preVerificationGas: 500000n,
225
+ });
226
+ // Add paymaster data
227
+ userOp = await bundlerClient.prepareUserOperation({
228
+ ...userOp,
229
+ });
230
+ console.log("[trails-sdk] preparedUserOp", userOp);
231
+ const signedUserOp = await delegatorSmartAccount.signUserOperation(userOp);
232
+ userOp.signature = signedUserOp;
233
+ console.log("[trails-sdk] Signed user operation:", signedUserOp);
234
+ console.log("[trails-sdk] Sending user operation...");
235
+ const hash = await bundlerClient.sendUserOperation(userOp);
236
+ console.log("[trails-sdk] User operation sent! Hash:", hash);
237
+ const receipt = await bundlerClient.waitForUserOperationReceipt({
238
+ hash: hash,
239
+ });
240
+ console.log("[trails-sdk] User operation receipt:", receipt);
241
+ return receipt.receipt.transactionHash;
242
+ }
243
+ }
244
+ else {
245
+ // --- Send user operation directly ---
246
+ const RELAYER_PRIVATE_KEY = ""; // This is for testing only
247
+ console.log("[trails-sdk] preparing user op");
248
+ const userOp1 = await prepareUserOperation(publicClient, {
249
+ account: delegatorSmartAccount,
250
+ calls,
251
+ maxFeePerGas,
252
+ maxPriorityFeePerGas,
253
+ callGasLimit: 500000n,
254
+ verificationGasLimit: 500000n,
255
+ preVerificationGas: 500000n,
256
+ paymasterAndData: "0x",
257
+ });
258
+ console.log("[trails-sdk] preparedUserOp", userOp1);
259
+ const requiredPrefund = getRequiredPrefund(userOp1);
260
+ console.log("[trails-sdk] Required prefund:", requiredPrefund);
261
+ const balance = await publicClient.getBalance({
262
+ address: delegatorSmartAccount.address,
263
+ });
264
+ console.log("[trails-sdk] Balance:", balance);
265
+ const signedUserOp1 = await delegatorSmartAccount.signUserOperation(userOp1);
266
+ userOp1.signature = signedUserOp1;
267
+ console.log("[trails-sdk] Signed user operation:", signedUserOp1);
268
+ const txHash = await sendUserOperationDirectly({
269
+ userOp: userOp1,
270
+ relayerPrivateKey: RELAYER_PRIVATE_KEY,
271
+ chain: chain,
272
+ });
273
+ console.log("[trails-sdk] User operation submitted! Hash:", txHash);
274
+ return txHash;
275
+ }
276
+ }
277
+ catch (error) {
278
+ console.error("[trails-sdk] Gasless flow error:", error);
279
+ throw error;
280
+ }
281
+ }
282
+ export async function stakeOnEntryPoint({ relayerClient, relayerAccount, delegatorAddress, chain, }) {
283
+ const STAKE_AMOUNT = parseEther("0.01");
284
+ const addStakeAbi = parseAbi([
285
+ "function addStake(uint32 unstakeDelaySec) public payable",
286
+ "function depositTo(address to) public payable",
287
+ ]);
288
+ const shouldStake = false;
289
+ if (shouldStake) {
290
+ const addStakeData = encodeFunctionData({
291
+ abi: addStakeAbi,
292
+ functionName: "addStake",
293
+ args: [95000], // unstakeDelaySec needs to be 1 day minimum
294
+ });
295
+ const txHash = await relayerClient.sendTransaction({
296
+ account: relayerAccount,
297
+ to: ENTRYPOINT_ADDRESS,
298
+ data: addStakeData,
299
+ value: STAKE_AMOUNT,
300
+ chain: chain,
301
+ });
302
+ console.log(`[trails-sdk] [Stake] Transaction sent: ${txHash}`);
303
+ // const receipt = await relayerClient.waitForTransactionReceipt({ hash: txHash })
304
+ // console.log(`[trails-sdk] [Stake] Transaction receipt: ${receipt}`)
305
+ }
306
+ const depositData = encodeFunctionData({
307
+ abi: addStakeAbi,
308
+ functionName: "depositTo",
309
+ args: [delegatorAddress],
310
+ });
311
+ const txHash2 = await relayerClient.sendTransaction({
312
+ account: relayerAccount,
313
+ to: ENTRYPOINT_ADDRESS,
314
+ value: STAKE_AMOUNT,
315
+ data: depositData,
316
+ chain: chain,
317
+ });
318
+ console.log(`[trails-sdk] [Stake] Transaction sent: ${txHash2}`);
319
+ return txHash2;
320
+ }
321
+ export const getRequiredPrefund = (userOperation) => {
322
+ const op = userOperation;
323
+ const requiredGas = op.verificationGasLimit +
324
+ op.callGasLimit +
325
+ (op.paymasterVerificationGasLimit || 0n) +
326
+ (op.paymasterPostOpGasLimit || 0n) +
327
+ op.preVerificationGas;
328
+ return requiredGas * op.maxFeePerGas;
329
+ };
@@ -0,0 +1,11 @@
1
+ import type { IntentPrecondition } from "@0xsequence/trails-api";
2
+ export declare function findPreconditionAddresses(preconditions: IntentPrecondition[], originChainId: number, destinationChainId: number): {
3
+ originAddress?: string;
4
+ destinationAddress?: string;
5
+ };
6
+ export declare function findChainAndAddressesFromPreconditions(preconditions: IntentPrecondition[]): {
7
+ chainId: number;
8
+ address: string;
9
+ }[];
10
+ export declare function findFirstPreconditionForChainId(preconditions: IntentPrecondition[], chainId: number): IntentPrecondition | null;
11
+ //# sourceMappingURL=preconditions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preconditions.d.ts","sourceRoot":"","sources":["../src/preconditions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAEhE,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,kBAAkB,EAAE,EACnC,aAAa,EAAE,MAAM,EACrB,kBAAkB,EAAE,MAAM,GACzB;IAAE,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAAE,CAYzD;AAED,wBAAgB,sCAAsC,CACpD,aAAa,EAAE,kBAAkB,EAAE,GAClC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,CAiBxC;AAED,wBAAgB,+BAA+B,CAC7C,aAAa,EAAE,kBAAkB,EAAE,EACnC,OAAO,EAAE,MAAM,GACd,kBAAkB,GAAG,IAAI,CAO3B"}
@@ -0,0 +1,29 @@
1
+ export function findPreconditionAddresses(preconditions, originChainId, destinationChainId) {
2
+ const origin = preconditions.find((p) => p.chainId === originChainId.toString() && p.data?.address);
3
+ const destination = preconditions.find((p) => p.chainId === destinationChainId.toString() && p.data?.address);
4
+ return {
5
+ originAddress: origin?.data?.address,
6
+ destinationAddress: destination?.data?.address,
7
+ };
8
+ }
9
+ export function findChainAndAddressesFromPreconditions(preconditions) {
10
+ const addressesFromPreconditions = [];
11
+ preconditions.forEach((p) => {
12
+ if ((p.type === "erc20-balance" ||
13
+ p.type === "native-balance" ||
14
+ p.type === "transfer-native") &&
15
+ p.data?.address &&
16
+ p.chainId) {
17
+ addressesFromPreconditions.push({
18
+ chainId: parseInt(p.chainId),
19
+ address: p.data.address,
20
+ });
21
+ }
22
+ });
23
+ return addressesFromPreconditions;
24
+ }
25
+ export function findFirstPreconditionForChainId(preconditions, chainId) {
26
+ const precondition = preconditions.find((p) => (p.type === "erc20-balance" || p.type === "native-balance") &&
27
+ p.chainId === chainId?.toString());
28
+ return precondition ?? null;
29
+ }
@@ -0,0 +1,102 @@
1
+ import type { SequenceAPIClient } from "@0xsequence/trails-api";
2
+ import type { MetaTxnReceipt } from "@0xsequence/trails-relayer";
3
+ import type { Relayer } from "@0xsequence/wallet-core";
4
+ import type { Account, Chain, PublicClient, TransactionReceipt, WalletClient } from "viem";
5
+ import type { RelayerEnvConfig } from "./relayer.js";
6
+ type TransactionStateStatus = "pending" | "failed" | "confirmed";
7
+ export type TransactionState = {
8
+ transactionHash: string;
9
+ explorerUrl: string;
10
+ chainId: number;
11
+ state: TransactionStateStatus;
12
+ label: string;
13
+ };
14
+ export type SendOptions = {
15
+ account: Account;
16
+ originTokenAddress: string;
17
+ originChainId: number;
18
+ originTokenAmount: string;
19
+ destinationChainId: number;
20
+ recipient: string;
21
+ destinationTokenAddress: string;
22
+ destinationTokenAmount: string;
23
+ destinationTokenSymbol: string;
24
+ sequenceProjectAccessKey: string;
25
+ fee: string;
26
+ client?: WalletClient;
27
+ dryMode: boolean;
28
+ apiClient: SequenceAPIClient;
29
+ originRelayer: Relayer.Standard.Rpc.RpcRelayer;
30
+ destinationRelayer: Relayer.Standard.Rpc.RpcRelayer;
31
+ destinationCalldata?: string;
32
+ onTransactionStateChange: (transactionStates: TransactionState[]) => void;
33
+ sourceTokenPriceUsd?: number | null;
34
+ destinationTokenPriceUsd?: number | null;
35
+ sourceTokenDecimals: number;
36
+ destinationTokenDecimals: number;
37
+ paymasterUrl?: string;
38
+ gasless?: boolean;
39
+ relayerConfig: RelayerEnvConfig;
40
+ };
41
+ export type PrepareSendReturn = {
42
+ intentAddress?: string;
43
+ originSendAmount: string;
44
+ send: (onOriginSend?: () => void) => Promise<SendReturn>;
45
+ };
46
+ export type SendReturn = {
47
+ originUserTxReceipt: TransactionReceipt | null;
48
+ originMetaTxnReceipt: MetaTxnReceipt | null;
49
+ destinationMetaTxnReceipt: MetaTxnReceipt | null;
50
+ };
51
+ export declare function getIsToSameChain(originChainId: number, destinationChainId: number): boolean;
52
+ export declare function getIsToSameToken(originTokenAddress: string, destinationTokenAddress: string): boolean;
53
+ export declare function getIsToSameChainAndToken(originChainId: number, originTokenAddress: string, destinationChainId: number, destinationTokenAddress: string): boolean;
54
+ export declare function getUseCctp(originTokenAddress: string, destinationTokenAddress: string, originChainId: number, destinationChainId: number): boolean;
55
+ export declare function prepareSend(options: SendOptions): Promise<PrepareSendReturn>;
56
+ export declare function attemptNonGaslessUserDeposit({ originTokenAddress, firstPreconditionMin, onOriginSend, publicClient, walletClient, originChainId, chain, account, fee, dryMode, sourceTokenPriceUsd, destinationTokenPriceUsd, destinationTokenAmount, destinationTokenDecimals, sourceTokenDecimals, intentAddress, }: {
57
+ originTokenAddress: string;
58
+ firstPreconditionMin: string;
59
+ onOriginSend?: () => void;
60
+ publicClient: PublicClient;
61
+ walletClient: WalletClient;
62
+ originChainId: number;
63
+ chain: Chain;
64
+ account: Account;
65
+ fee: string;
66
+ dryMode: boolean;
67
+ sourceTokenPriceUsd?: number | null;
68
+ destinationTokenPriceUsd?: number | null;
69
+ destinationTokenAmount: string;
70
+ destinationTokenDecimals: number;
71
+ sourceTokenDecimals: number;
72
+ intentAddress: string;
73
+ }): Promise<TransactionReceipt | null>;
74
+ export declare function getDoGasless(originTokenAddress: string, gasless: boolean, paymasterUrl?: string): boolean;
75
+ export type UseQuoteProps = {
76
+ walletClient?: WalletClient;
77
+ fromTokenAddress?: string;
78
+ fromChainId?: number;
79
+ toTokenAddress?: string;
80
+ toChainId?: number;
81
+ toAmount?: string | bigint;
82
+ toRecipient?: string;
83
+ };
84
+ export declare function useQuote({ walletClient, fromTokenAddress, fromChainId, toTokenAddress, toChainId, toAmount, toRecipient, }?: UseQuoteProps): {
85
+ quote: {
86
+ fromAmount: string;
87
+ } | null;
88
+ swap: (() => Promise<{
89
+ originTransaction: {
90
+ transactionHash: string | undefined;
91
+ receipt: TransactionReceipt | MetaTxnReceipt | null;
92
+ };
93
+ destinationTransaction: {
94
+ transactionHash: string | undefined;
95
+ receipt: MetaTxnReceipt | null;
96
+ };
97
+ } | null>) | null;
98
+ isLoadingQuote: boolean;
99
+ quoteError: unknown;
100
+ };
101
+ export {};
102
+ //# sourceMappingURL=prepareSend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepareSend.d.ts","sourceRoot":"","sources":["../src/prepareSend.ts"],"names":[],"mappings":"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"}