@sodax/sdk 0.0.1-rc.7 → 0.0.1-rc.9

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 (295) hide show
  1. package/README.md +3 -1
  2. package/dist/index.cjs +11147 -0
  3. package/dist/index.cjs.map +1 -0
  4. package/dist/index.d.cts +6831 -0
  5. package/dist/index.d.ts +6830 -9
  6. package/dist/index.mjs +10991 -0
  7. package/dist/index.mjs.map +1 -0
  8. package/package.json +20 -5
  9. package/dist/abis/asset-manager.abi.d.ts +0 -418
  10. package/dist/abis/asset-manager.abi.d.ts.map +0 -1
  11. package/dist/abis/asset-manager.abi.js +0 -542
  12. package/dist/abis/asset-manager.abi.js.map +0 -1
  13. package/dist/abis/connection.abi.d.ts +0 -72
  14. package/dist/abis/connection.abi.d.ts.map +0 -1
  15. package/dist/abis/connection.abi.js +0 -92
  16. package/dist/abis/connection.abi.js.map +0 -1
  17. package/dist/abis/erc20.abi.d.ts +0 -236
  18. package/dist/abis/erc20.abi.d.ts.map +0 -1
  19. package/dist/abis/erc20.abi.js +0 -311
  20. package/dist/abis/erc20.abi.js.map +0 -1
  21. package/dist/abis/index.d.ts +0 -10
  22. package/dist/abis/index.d.ts.map +0 -1
  23. package/dist/abis/index.js +0 -10
  24. package/dist/abis/index.js.map +0 -1
  25. package/dist/abis/intents.abi.d.ts +0 -901
  26. package/dist/abis/intents.abi.d.ts.map +0 -1
  27. package/dist/abis/intents.abi.js +0 -1158
  28. package/dist/abis/intents.abi.js.map +0 -1
  29. package/dist/abis/pool.abi.d.ts +0 -626
  30. package/dist/abis/pool.abi.d.ts.map +0 -1
  31. package/dist/abis/pool.abi.js +0 -812
  32. package/dist/abis/pool.abi.js.map +0 -1
  33. package/dist/abis/spokeAssetManager.abi.d.ts +0 -169
  34. package/dist/abis/spokeAssetManager.abi.d.ts.map +0 -1
  35. package/dist/abis/spokeAssetManager.abi.js +0 -217
  36. package/dist/abis/spokeAssetManager.abi.js.map +0 -1
  37. package/dist/abis/uiPoolData.abi.d.ts +0 -369
  38. package/dist/abis/uiPoolData.abi.d.ts.map +0 -1
  39. package/dist/abis/uiPoolData.abi.js +0 -476
  40. package/dist/abis/uiPoolData.abi.js.map +0 -1
  41. package/dist/abis/vaultToken.abi.d.ts +0 -816
  42. package/dist/abis/vaultToken.abi.d.ts.map +0 -1
  43. package/dist/abis/vaultToken.abi.js +0 -1062
  44. package/dist/abis/vaultToken.abi.js.map +0 -1
  45. package/dist/abis/walletFactory.abi.d.ts +0 -20
  46. package/dist/abis/walletFactory.abi.d.ts.map +0 -1
  47. package/dist/abis/walletFactory.abi.js +0 -27
  48. package/dist/abis/walletFactory.abi.js.map +0 -1
  49. package/dist/constants.d.ts +0 -550
  50. package/dist/constants.d.ts.map +0 -1
  51. package/dist/constants.js +0 -1189
  52. package/dist/constants.js.map +0 -1
  53. package/dist/constants.test.d.ts +0 -2
  54. package/dist/constants.test.d.ts.map +0 -1
  55. package/dist/constants.test.js +0 -129
  56. package/dist/constants.test.js.map +0 -1
  57. package/dist/entities/Providers.d.ts +0 -52
  58. package/dist/entities/Providers.d.ts.map +0 -1
  59. package/dist/entities/Providers.js +0 -49
  60. package/dist/entities/Providers.js.map +0 -1
  61. package/dist/entities/Sodax.d.ts +0 -23
  62. package/dist/entities/Sodax.d.ts.map +0 -1
  63. package/dist/entities/Sodax.js +0 -29
  64. package/dist/entities/Sodax.js.map +0 -1
  65. package/dist/entities/Sodax.test.d.ts +0 -2
  66. package/dist/entities/Sodax.test.d.ts.map +0 -1
  67. package/dist/entities/Sodax.test.js +0 -392
  68. package/dist/entities/Sodax.test.js.map +0 -1
  69. package/dist/entities/cosmos/CW20Token.d.ts +0 -39
  70. package/dist/entities/cosmos/CW20Token.d.ts.map +0 -1
  71. package/dist/entities/cosmos/CW20Token.js +0 -65
  72. package/dist/entities/cosmos/CW20Token.js.map +0 -1
  73. package/dist/entities/cosmos/CWSpokeProvider.d.ts +0 -78
  74. package/dist/entities/cosmos/CWSpokeProvider.d.ts.map +0 -1
  75. package/dist/entities/cosmos/CWSpokeProvider.js +0 -127
  76. package/dist/entities/cosmos/CWSpokeProvider.js.map +0 -1
  77. package/dist/entities/icon/HanaWalletConnector.d.ts +0 -36
  78. package/dist/entities/icon/HanaWalletConnector.d.ts.map +0 -1
  79. package/dist/entities/icon/HanaWalletConnector.js +0 -92
  80. package/dist/entities/icon/HanaWalletConnector.js.map +0 -1
  81. package/dist/entities/icon/IconSpokeProvider.d.ts +0 -10
  82. package/dist/entities/icon/IconSpokeProvider.d.ts.map +0 -1
  83. package/dist/entities/icon/IconSpokeProvider.js +0 -12
  84. package/dist/entities/icon/IconSpokeProvider.js.map +0 -1
  85. package/dist/entities/icon/index.d.ts +0 -4
  86. package/dist/entities/icon/index.d.ts.map +0 -1
  87. package/dist/entities/icon/index.js +0 -4
  88. package/dist/entities/icon/index.js.map +0 -1
  89. package/dist/entities/icon/utils.d.ts +0 -3
  90. package/dist/entities/icon/utils.d.ts.map +0 -1
  91. package/dist/entities/icon/utils.js +0 -4
  92. package/dist/entities/icon/utils.js.map +0 -1
  93. package/dist/entities/index.d.ts +0 -7
  94. package/dist/entities/index.d.ts.map +0 -1
  95. package/dist/entities/index.js +0 -7
  96. package/dist/entities/index.js.map +0 -1
  97. package/dist/entities/solana/Configs.d.ts +0 -10
  98. package/dist/entities/solana/Configs.d.ts.map +0 -1
  99. package/dist/entities/solana/Configs.js +0 -50
  100. package/dist/entities/solana/Configs.js.map +0 -1
  101. package/dist/entities/solana/SolanaSpokeProvider.d.ts +0 -9
  102. package/dist/entities/solana/SolanaSpokeProvider.d.ts.map +0 -1
  103. package/dist/entities/solana/SolanaSpokeProvider.js +0 -9
  104. package/dist/entities/solana/SolanaSpokeProvider.js.map +0 -1
  105. package/dist/entities/solana/SolanaWalletProvider.d.ts +0 -20
  106. package/dist/entities/solana/SolanaWalletProvider.d.ts.map +0 -1
  107. package/dist/entities/solana/SolanaWalletProvider.js +0 -53
  108. package/dist/entities/solana/SolanaWalletProvider.js.map +0 -1
  109. package/dist/entities/solana/index.d.ts +0 -4
  110. package/dist/entities/solana/index.d.ts.map +0 -1
  111. package/dist/entities/solana/index.js +0 -4
  112. package/dist/entities/solana/index.js.map +0 -1
  113. package/dist/entities/solana/pda/pda.d.ts +0 -45
  114. package/dist/entities/solana/pda/pda.d.ts.map +0 -1
  115. package/dist/entities/solana/pda/pda.js +0 -44
  116. package/dist/entities/solana/pda/pda.js.map +0 -1
  117. package/dist/entities/solana/types/asset_manager.d.ts +0 -919
  118. package/dist/entities/solana/types/asset_manager.d.ts.map +0 -1
  119. package/dist/entities/solana/types/asset_manager.js +0 -2
  120. package/dist/entities/solana/types/asset_manager.js.map +0 -1
  121. package/dist/entities/solana/types/connection.d.ts +0 -446
  122. package/dist/entities/solana/types/connection.d.ts.map +0 -1
  123. package/dist/entities/solana/types/connection.js +0 -2
  124. package/dist/entities/solana/types/connection.js.map +0 -1
  125. package/dist/entities/solana/types/rate_limit_contract.d.ts +0 -348
  126. package/dist/entities/solana/types/rate_limit_contract.d.ts.map +0 -1
  127. package/dist/entities/solana/types/rate_limit_contract.js +0 -2
  128. package/dist/entities/solana/types/rate_limit_contract.js.map +0 -1
  129. package/dist/entities/solana/utils/utils.d.ts +0 -6
  130. package/dist/entities/solana/utils/utils.d.ts.map +0 -1
  131. package/dist/entities/solana/utils/utils.js +0 -18
  132. package/dist/entities/solana/utils/utils.js.map +0 -1
  133. package/dist/entities/stellar/StellarSpokeProvider.d.ts +0 -17
  134. package/dist/entities/stellar/StellarSpokeProvider.d.ts.map +0 -1
  135. package/dist/entities/stellar/StellarSpokeProvider.js +0 -125
  136. package/dist/entities/stellar/StellarSpokeProvider.js.map +0 -1
  137. package/dist/entities/sui/SuiSpokeProvider.d.ts +0 -35
  138. package/dist/entities/sui/SuiSpokeProvider.d.ts.map +0 -1
  139. package/dist/entities/sui/SuiSpokeProvider.js +0 -145
  140. package/dist/entities/sui/SuiSpokeProvider.js.map +0 -1
  141. package/dist/errors.d.ts +0 -2
  142. package/dist/errors.d.ts.map +0 -1
  143. package/dist/errors.js +0 -2
  144. package/dist/errors.js.map +0 -1
  145. package/dist/guards.d.ts +0 -25
  146. package/dist/guards.d.ts.map +0 -1
  147. package/dist/guards.js +0 -110
  148. package/dist/guards.js.map +0 -1
  149. package/dist/index.d.ts.map +0 -1
  150. package/dist/index.js +0 -10
  151. package/dist/index.js.map +0 -1
  152. package/dist/services/hub/EvmAssetManagerService.d.ts +0 -61
  153. package/dist/services/hub/EvmAssetManagerService.d.ts.map +0 -1
  154. package/dist/services/hub/EvmAssetManagerService.js +0 -103
  155. package/dist/services/hub/EvmAssetManagerService.js.map +0 -1
  156. package/dist/services/hub/EvmVaultTokenService.d.ts +0 -81
  157. package/dist/services/hub/EvmVaultTokenService.d.ts.map +0 -1
  158. package/dist/services/hub/EvmVaultTokenService.js +0 -161
  159. package/dist/services/hub/EvmVaultTokenService.js.map +0 -1
  160. package/dist/services/hub/EvmWalletAbstraction.d.ts +0 -9
  161. package/dist/services/hub/EvmWalletAbstraction.d.ts.map +0 -1
  162. package/dist/services/hub/EvmWalletAbstraction.js +0 -14
  163. package/dist/services/hub/EvmWalletAbstraction.js.map +0 -1
  164. package/dist/services/hub/index.d.ts +0 -4
  165. package/dist/services/hub/index.d.ts.map +0 -1
  166. package/dist/services/hub/index.js +0 -4
  167. package/dist/services/hub/index.js.map +0 -1
  168. package/dist/services/index.d.ts +0 -7
  169. package/dist/services/index.d.ts.map +0 -1
  170. package/dist/services/index.js +0 -7
  171. package/dist/services/index.js.map +0 -1
  172. package/dist/services/intentRelay/IntentRelayApiService.d.ts +0 -112
  173. package/dist/services/intentRelay/IntentRelayApiService.d.ts.map +0 -1
  174. package/dist/services/intentRelay/IntentRelayApiService.js +0 -160
  175. package/dist/services/intentRelay/IntentRelayApiService.js.map +0 -1
  176. package/dist/services/intentRelay/IntentRelayApiService.test.d.ts +0 -2
  177. package/dist/services/intentRelay/IntentRelayApiService.test.d.ts.map +0 -1
  178. package/dist/services/intentRelay/IntentRelayApiService.test.js +0 -134
  179. package/dist/services/intentRelay/IntentRelayApiService.test.js.map +0 -1
  180. package/dist/services/intentRelay/index.d.ts +0 -2
  181. package/dist/services/intentRelay/index.d.ts.map +0 -1
  182. package/dist/services/intentRelay/index.js +0 -2
  183. package/dist/services/intentRelay/index.js.map +0 -1
  184. package/dist/services/moneyMarket/MoneyMarketService.d.ts +0 -525
  185. package/dist/services/moneyMarket/MoneyMarketService.d.ts.map +0 -1
  186. package/dist/services/moneyMarket/MoneyMarketService.js +0 -814
  187. package/dist/services/moneyMarket/MoneyMarketService.js.map +0 -1
  188. package/dist/services/moneyMarket/MoneyMarketService.test.d.ts +0 -2
  189. package/dist/services/moneyMarket/MoneyMarketService.test.d.ts.map +0 -1
  190. package/dist/services/moneyMarket/MoneyMarketService.test.js +0 -262
  191. package/dist/services/moneyMarket/MoneyMarketService.test.js.map +0 -1
  192. package/dist/services/moneyMarket/index.d.ts +0 -2
  193. package/dist/services/moneyMarket/index.d.ts.map +0 -1
  194. package/dist/services/moneyMarket/index.js +0 -2
  195. package/dist/services/moneyMarket/index.js.map +0 -1
  196. package/dist/services/shared/Erc20Service.d.ts +0 -42
  197. package/dist/services/shared/Erc20Service.d.ts.map +0 -1
  198. package/dist/services/shared/Erc20Service.js +0 -108
  199. package/dist/services/shared/Erc20Service.js.map +0 -1
  200. package/dist/services/shared/index.d.ts +0 -2
  201. package/dist/services/shared/index.d.ts.map +0 -1
  202. package/dist/services/shared/index.js +0 -2
  203. package/dist/services/shared/index.js.map +0 -1
  204. package/dist/services/solver/EvmSolverService.d.ts +0 -125
  205. package/dist/services/solver/EvmSolverService.d.ts.map +0 -1
  206. package/dist/services/solver/EvmSolverService.js +0 -166
  207. package/dist/services/solver/EvmSolverService.js.map +0 -1
  208. package/dist/services/solver/SolverApiService.d.ts +0 -40
  209. package/dist/services/solver/SolverApiService.d.ts.map +0 -1
  210. package/dist/services/solver/SolverApiService.js +0 -157
  211. package/dist/services/solver/SolverApiService.js.map +0 -1
  212. package/dist/services/solver/SolverApiService.test.d.ts +0 -2
  213. package/dist/services/solver/SolverApiService.test.d.ts.map +0 -1
  214. package/dist/services/solver/SolverApiService.test.js +0 -181
  215. package/dist/services/solver/SolverApiService.test.js.map +0 -1
  216. package/dist/services/solver/SolverService.d.ts +0 -295
  217. package/dist/services/solver/SolverService.d.ts.map +0 -1
  218. package/dist/services/solver/SolverService.js +0 -429
  219. package/dist/services/solver/SolverService.js.map +0 -1
  220. package/dist/services/solver/SolverService.test.d.ts +0 -2
  221. package/dist/services/solver/SolverService.test.d.ts.map +0 -1
  222. package/dist/services/solver/SolverService.test.js +0 -439
  223. package/dist/services/solver/SolverService.test.js.map +0 -1
  224. package/dist/services/solver/index.d.ts +0 -3
  225. package/dist/services/solver/index.d.ts.map +0 -1
  226. package/dist/services/solver/index.js +0 -3
  227. package/dist/services/solver/index.js.map +0 -1
  228. package/dist/services/spoke/CWSpokeService.d.ts +0 -67
  229. package/dist/services/spoke/CWSpokeService.d.ts.map +0 -1
  230. package/dist/services/spoke/CWSpokeService.js +0 -75
  231. package/dist/services/spoke/CWSpokeService.js.map +0 -1
  232. package/dist/services/spoke/EvmSpokeService.d.ts +0 -62
  233. package/dist/services/spoke/EvmSpokeService.d.ts.map +0 -1
  234. package/dist/services/spoke/EvmSpokeService.js +0 -120
  235. package/dist/services/spoke/EvmSpokeService.js.map +0 -1
  236. package/dist/services/spoke/IconSpokeService.d.ts +0 -56
  237. package/dist/services/spoke/IconSpokeService.d.ts.map +0 -1
  238. package/dist/services/spoke/IconSpokeService.js +0 -127
  239. package/dist/services/spoke/IconSpokeService.js.map +0 -1
  240. package/dist/services/spoke/SolanaSpokeService.d.ts +0 -46
  241. package/dist/services/spoke/SolanaSpokeService.d.ts.map +0 -1
  242. package/dist/services/spoke/SolanaSpokeService.js +0 -164
  243. package/dist/services/spoke/SolanaSpokeService.js.map +0 -1
  244. package/dist/services/spoke/SpokeService.d.ts +0 -34
  245. package/dist/services/spoke/SpokeService.d.ts.map +0 -1
  246. package/dist/services/spoke/SpokeService.js +0 -101
  247. package/dist/services/spoke/SpokeService.js.map +0 -1
  248. package/dist/services/spoke/StellarSpokeService.d.ts +0 -35
  249. package/dist/services/spoke/StellarSpokeService.d.ts.map +0 -1
  250. package/dist/services/spoke/StellarSpokeService.js +0 -39
  251. package/dist/services/spoke/StellarSpokeService.js.map +0 -1
  252. package/dist/services/spoke/SuiSpokeService.d.ts +0 -69
  253. package/dist/services/spoke/SuiSpokeService.d.ts.map +0 -1
  254. package/dist/services/spoke/SuiSpokeService.js +0 -73
  255. package/dist/services/spoke/SuiSpokeService.js.map +0 -1
  256. package/dist/services/spoke/index.d.ts +0 -3
  257. package/dist/services/spoke/index.d.ts.map +0 -1
  258. package/dist/services/spoke/index.js +0 -3
  259. package/dist/services/spoke/index.js.map +0 -1
  260. package/dist/tests/services/hub/EvmAssetManagerService.test.d.ts +0 -2
  261. package/dist/tests/services/hub/EvmAssetManagerService.test.d.ts.map +0 -1
  262. package/dist/tests/services/hub/EvmAssetManagerService.test.js +0 -138
  263. package/dist/tests/services/hub/EvmAssetManagerService.test.js.map +0 -1
  264. package/dist/tests/services/hub/EvmMoneyMarketService.test.d.ts +0 -2
  265. package/dist/tests/services/hub/EvmMoneyMarketService.test.d.ts.map +0 -1
  266. package/dist/tests/services/hub/EvmMoneyMarketService.test.js +0 -121
  267. package/dist/tests/services/hub/EvmMoneyMarketService.test.js.map +0 -1
  268. package/dist/tests/services/hub/EvmVaultTokenService.test.d.ts +0 -2
  269. package/dist/tests/services/hub/EvmVaultTokenService.test.d.ts.map +0 -1
  270. package/dist/tests/services/hub/EvmVaultTokenService.test.js +0 -98
  271. package/dist/tests/services/hub/EvmVaultTokenService.test.js.map +0 -1
  272. package/dist/tests/services/spoke/EvmSpokeService.test.d.ts +0 -2
  273. package/dist/tests/services/spoke/EvmSpokeService.test.d.ts.map +0 -1
  274. package/dist/tests/services/spoke/EvmSpokeService.test.js +0 -198
  275. package/dist/tests/services/spoke/EvmSpokeService.test.js.map +0 -1
  276. package/dist/types.d.ts +0 -345
  277. package/dist/types.d.ts.map +0 -1
  278. package/dist/types.js +0 -30
  279. package/dist/types.js.map +0 -1
  280. package/dist/utils/evm-utils.d.ts +0 -10
  281. package/dist/utils/evm-utils.d.ts.map +0 -1
  282. package/dist/utils/evm-utils.js +0 -15
  283. package/dist/utils/evm-utils.js.map +0 -1
  284. package/dist/utils/index.d.ts +0 -3
  285. package/dist/utils/index.d.ts.map +0 -1
  286. package/dist/utils/index.js +0 -3
  287. package/dist/utils/index.js.map +0 -1
  288. package/dist/utils/shared-utils.d.ts +0 -20
  289. package/dist/utils/shared-utils.d.ts.map +0 -1
  290. package/dist/utils/shared-utils.js +0 -69
  291. package/dist/utils/shared-utils.js.map +0 -1
  292. package/dist/utils/shared-utils.test.d.ts +0 -2
  293. package/dist/utils/shared-utils.test.d.ts.map +0 -1
  294. package/dist/utils/shared-utils.test.js +0 -63
  295. package/dist/utils/shared-utils.test.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/abis/asset-manager.abi.ts","../src/abis/connection.abi.ts","../src/abis/erc20.abi.ts","../src/abis/pool.abi.ts","../src/abis/spokeAssetManager.abi.ts","../src/abis/uiPoolData.abi.ts","../src/abis/vaultToken.abi.ts","../src/abis/walletFactory.abi.ts","../src/abis/intents.abi.ts","../src/abis/sonicWalletFactory.abi.ts","../src/abis/wrappedSonic.abi.ts","../src/abis/variableDebtToken.abi.ts","../src/constants.ts","../src/entities/cosmos/CW20Token.ts","../src/entities/cosmos/CWSpokeProvider.ts","../src/entities/icon/IconSpokeProvider.ts","../src/entities/icon/utils.ts","../src/entities/Providers.ts","../src/entities/stellar/StellarSpokeProvider.ts","../src/entities/sui/SuiSpokeProvider.ts","../src/entities/solana/SolanaWalletProvider.ts","../src/entities/solana/SolanaSpokeProvider.ts","../src/entities/solana/utils/utils.ts","../src/entities/icon/HanaWalletConnector.ts","../src/utils/evm-utils.ts","../src/services/shared/Erc20Service.ts","../src/services/hub/EvmVaultTokenService.ts","../src/services/hub/EvmAssetManagerService.ts","../src/services/hub/EvmWalletAbstraction.ts","../src/services/hub/WalletAbstractionService.ts","../src/utils/shared-utils.ts","../src/services/moneyMarket/MoneyMarketService.ts","../src/services/spoke/EvmSpokeService.ts","../src/services/spoke/CWSpokeService.ts","../src/services/spoke/IconSpokeService.ts","../src/entities/solana/Configs.ts","../src/entities/solana/pda/pda.ts","../src/services/spoke/SolanaSpokeService.ts","../src/services/spoke/StellarSpokeService.ts","../src/services/spoke/SuiSpokeService.ts","../src/services/spoke/SonicSpokeService.ts","../src/guards.ts","../src/services/spoke/SpokeService.ts","../src/services/intentRelay/IntentRelayApiService.ts","../src/services/solver/EvmSolverService.ts","../src/services/solver/SolverApiService.ts","../src/services/solver/SolverService.ts","../src/entities/Sodax.ts","../src/types.ts"],"names":["AVALANCHE_MAINNET_CHAIN_ID","ARBITRUM_MAINNET_CHAIN_ID","BASE_MAINNET_CHAIN_ID","BSC_MAINNET_CHAIN_ID","SONIC_MAINNET_CHAIN_ID","OPTIMISM_MAINNET_CHAIN_ID","POLYGON_MAINNET_CHAIN_ID","NIBIRU_MAINNET_CHAIN_ID","INJECTIVE_MAINNET_CHAIN_ID","SOLANA_MAINNET_CHAIN_ID","SUI_MAINNET_CHAIN_ID","STELLAR_MAINNET_CHAIN_ID","ICON_MAINNET_CHAIN_ID","sonic","avalanche","arbitrum","base","optimism","bsc","polygon","nibiru","SPOKE_CHAIN_IDS","isNative","fromHex","coins","IconSdkRaw","createPublicClient","http","StellarRpc","Contract","TransactionBuilder","BASE_FEE","nativeToScVal","TimeoutInfinite","scValToBigInt","Address","toHex","Transaction","bcs","coin","Keypair","Connection","TransactionMessage","VersionedTransaction","getAssociatedTokenAddress","PublicKey","encodeAbiParameters","parseAbiParameters","erc20Abi","encodeFunctionData","invariant","isAddress","IconSdk","IconSdkRaw2","rlp","anchor","BN","SystemProgram","TOKEN_PROGRAM_ID","ComputeBudgetProgram","decodeAbiParameters","packet","getAbiItem","solverConfig","encodePacked","parseEventLogs","keccak256","IntentDataType","IntentStatusCode","IntentErrorCode"],"mappings":"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","file":"index.cjs","sourcesContent":["export const assetManagerAbi = [\n {\n type: 'function',\n name: 'UPGRADE_INTERFACE_VERSION',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'string',\n internalType: 'string',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'assetImplementation',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'address',\n internalType: 'address',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'assetInfo',\n inputs: [\n {\n name: '',\n type: 'address',\n internalType: 'address',\n },\n ],\n outputs: [\n {\n name: 'chainID',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'spokeAddress',\n type: 'bytes',\n internalType: 'bytes',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'assets',\n inputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: '',\n type: 'bytes',\n internalType: 'bytes',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'address',\n internalType: 'address',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'configureAssetManager',\n inputs: [\n {\n name: 'chainID',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'addr',\n type: 'bytes',\n internalType: 'bytes',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'connection',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'address',\n internalType: 'contract IConnection',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'deployAsset',\n inputs: [\n {\n name: 'chainID',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'addr',\n type: 'bytes',\n internalType: 'bytes',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'getImplementation',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'address',\n internalType: 'address',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'initialize',\n inputs: [\n {\n name: '_connection',\n type: 'address',\n internalType: 'contract IConnection',\n },\n {\n name: '_walletFactory',\n type: 'address',\n internalType: 'contract IWalletFactory',\n },\n {\n name: '_assetImplementation',\n type: 'address',\n internalType: 'address',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'overrideToken',\n inputs: [\n {\n name: 'chainID',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'addr',\n type: 'bytes',\n internalType: 'bytes',\n },\n {\n name: 'asset',\n type: 'address',\n internalType: 'address',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'owner',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'address',\n internalType: 'address',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'proxiableUUID',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'bytes32',\n internalType: 'bytes32',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'receiveMessage',\n inputs: [\n {\n name: 'connSn',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'srcChainId',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'srcAddress',\n type: 'bytes',\n internalType: 'bytes',\n },\n {\n name: 'payload',\n type: 'bytes',\n internalType: 'bytes',\n },\n {\n name: 'signatures',\n type: 'bytes[]',\n internalType: 'bytes[]',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'recvMessage',\n inputs: [\n {\n name: 'srcChainId',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'srcAddress',\n type: 'bytes',\n internalType: 'bytes',\n },\n {\n name: 'connSn',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'payload',\n type: 'bytes',\n internalType: 'bytes',\n },\n {\n name: 'signedMessages',\n type: 'bytes[]',\n internalType: 'bytes[]',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'renounceOwnership',\n inputs: [],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'spokeAssetManager',\n inputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'bytes',\n internalType: 'bytes',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'transfer',\n inputs: [\n {\n name: 'token',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'to',\n type: 'bytes',\n internalType: 'bytes',\n },\n {\n name: 'amount',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'data',\n type: 'bytes',\n internalType: 'bytes',\n },\n ],\n outputs: [],\n stateMutability: 'payable',\n },\n {\n type: 'function',\n name: 'transferOwnership',\n inputs: [\n {\n name: 'newOwner',\n type: 'address',\n internalType: 'address',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'upgradeToAndCall',\n inputs: [\n {\n name: 'newImplementation',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'data',\n type: 'bytes',\n internalType: 'bytes',\n },\n ],\n outputs: [],\n stateMutability: 'payable',\n },\n {\n type: 'function',\n name: 'upgradeToken',\n inputs: [\n {\n name: 'chainID',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'addr',\n type: 'bytes',\n internalType: 'bytes',\n },\n {\n name: 'impl',\n type: 'address',\n internalType: 'address',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'walletFactory',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'address',\n internalType: 'contract IWalletFactory',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'event',\n name: 'HookFailed',\n inputs: [\n {\n name: 'wallet',\n type: 'address',\n indexed: false,\n internalType: 'address',\n },\n {\n name: 'reason',\n type: 'bytes',\n indexed: false,\n internalType: 'bytes',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'Initialized',\n inputs: [\n {\n name: 'version',\n type: 'uint64',\n indexed: false,\n internalType: 'uint64',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'OwnershipTransferred',\n inputs: [\n {\n name: 'previousOwner',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'newOwner',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'Upgraded',\n inputs: [\n {\n name: 'implementation',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n ],\n anonymous: false,\n },\n {\n type: 'error',\n name: 'AddressEmptyCode',\n inputs: [\n {\n name: 'target',\n type: 'address',\n internalType: 'address',\n },\n ],\n },\n {\n type: 'error',\n name: 'ERC1967InvalidImplementation',\n inputs: [\n {\n name: 'implementation',\n type: 'address',\n internalType: 'address',\n },\n ],\n },\n {\n type: 'error',\n name: 'ERC1967NonPayable',\n inputs: [],\n },\n {\n type: 'error',\n name: 'FailedCall',\n inputs: [],\n },\n {\n type: 'error',\n name: 'InvalidInitialization',\n inputs: [],\n },\n {\n type: 'error',\n name: 'NotInitializing',\n inputs: [],\n },\n {\n type: 'error',\n name: 'OwnableInvalidOwner',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n internalType: 'address',\n },\n ],\n },\n {\n type: 'error',\n name: 'OwnableUnauthorizedAccount',\n inputs: [\n {\n name: 'account',\n type: 'address',\n internalType: 'address',\n },\n ],\n },\n {\n type: 'error',\n name: 'UUPSUnauthorizedCallContext',\n inputs: [],\n },\n {\n type: 'error',\n name: 'UUPSUnsupportedProxiableUUID',\n inputs: [\n {\n name: 'slot',\n type: 'bytes32',\n internalType: 'bytes32',\n },\n ],\n },\n] as const;\n","export const connectionAbi = [\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'dstChainId',\n type: 'uint256',\n },\n {\n internalType: 'bytes',\n name: 'dstAddress',\n type: 'bytes',\n },\n {\n internalType: 'bytes',\n name: 'payload',\n type: 'bytes',\n },\n ],\n name: 'sendMessage',\n outputs: [],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'srcChainId',\n type: 'uint256',\n },\n {\n internalType: 'bytes',\n name: 'srcAddress',\n type: 'bytes',\n },\n {\n internalType: 'uint256',\n name: 'connSn',\n type: 'uint256',\n },\n {\n internalType: 'bytes',\n name: 'payload',\n type: 'bytes',\n },\n {\n internalType: 'bytes[]',\n name: 'signedMessages',\n type: 'bytes[]',\n },\n ],\n name: 'verifyMessage',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n type: 'function',\n name: 'recvMessage',\n inputs: [\n {\n name: 'srcChainId',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'srcAddress',\n type: 'bytes',\n internalType: 'bytes',\n },\n {\n name: 'connSn',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'payload',\n type: 'bytes',\n internalType: 'bytes',\n },\n {\n name: 'signedMessages',\n type: 'bytes[]',\n internalType: 'bytes[]',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n] as const;\n","export const erc20Abi = [\n {\n type: 'function',\n name: 'allowance',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'spender',\n type: 'address',\n internalType: 'address',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'approve',\n inputs: [\n {\n name: 'spender',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'value',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'bool',\n internalType: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'balanceOf',\n inputs: [\n {\n name: 'account',\n type: 'address',\n internalType: 'address',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'decimals',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint8',\n internalType: 'uint8',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'name',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'string',\n internalType: 'string',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'symbol',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'string',\n internalType: 'string',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'totalSupply',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'transfer',\n inputs: [\n {\n name: 'to',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'value',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'bool',\n internalType: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'transferFrom',\n inputs: [\n {\n name: 'from',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'to',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'value',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'bool',\n internalType: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'event',\n name: 'Approval',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'spender',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'value',\n type: 'uint256',\n indexed: false,\n internalType: 'uint256',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'Transfer',\n inputs: [\n {\n name: 'from',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'to',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'value',\n type: 'uint256',\n indexed: false,\n internalType: 'uint256',\n },\n ],\n anonymous: false,\n },\n {\n type: 'error',\n name: 'ERC20InsufficientAllowance',\n inputs: [\n {\n name: 'spender',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'allowance',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'needed',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n },\n {\n type: 'error',\n name: 'ERC20InsufficientBalance',\n inputs: [\n {\n name: 'sender',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'balance',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'needed',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n },\n {\n type: 'error',\n name: 'ERC20InvalidApprover',\n inputs: [\n {\n name: 'approver',\n type: 'address',\n internalType: 'address',\n },\n ],\n },\n {\n type: 'error',\n name: 'ERC20InvalidReceiver',\n inputs: [\n {\n name: 'receiver',\n type: 'address',\n internalType: 'address',\n },\n ],\n },\n {\n type: 'error',\n name: 'ERC20InvalidSender',\n inputs: [\n {\n name: 'sender',\n type: 'address',\n internalType: 'address',\n },\n ],\n },\n {\n type: 'error',\n name: 'ERC20InvalidSpender',\n inputs: [\n {\n name: 'spender',\n type: 'address',\n internalType: 'address',\n },\n ],\n },\n] as const;\n","export const poolAbi = [\n {\n inputs: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'onBehalfOf',\n type: 'address',\n },\n {\n internalType: 'uint16',\n name: 'referralCode',\n type: 'uint16',\n },\n ],\n name: 'mintUnbacked',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'fee',\n type: 'uint256',\n },\n ],\n name: 'backUnbacked',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'onBehalfOf',\n type: 'address',\n },\n {\n internalType: 'uint16',\n name: 'referralCode',\n type: 'uint16',\n },\n ],\n name: 'supply',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n ],\n name: 'withdraw',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'interestRateMode',\n type: 'uint256',\n },\n {\n internalType: 'uint16',\n name: 'referralCode',\n type: 'uint16',\n },\n {\n internalType: 'address',\n name: 'onBehalfOf',\n type: 'address',\n },\n ],\n name: 'borrow',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'interestRateMode',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'onBehalfOf',\n type: 'address',\n },\n ],\n name: 'repay',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'interestRateMode',\n type: 'uint256',\n },\n {\n internalType: 'address',\n name: 'onBehalfOf',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'deadline',\n type: 'uint256',\n },\n {\n internalType: 'uint8',\n name: 'permitV',\n type: 'uint8',\n },\n {\n internalType: 'bytes32',\n name: 'permitR',\n type: 'bytes32',\n },\n {\n internalType: 'bytes32',\n name: 'permitS',\n type: 'bytes32',\n },\n ],\n name: 'repayWithPermit',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'interestRateMode',\n type: 'uint256',\n },\n ],\n name: 'repayWithATokens',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n {\n internalType: 'bool',\n name: 'useAsCollateral',\n type: 'bool',\n },\n ],\n name: 'setUserUseReserveAsCollateral',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'collateralAsset',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'debtAsset',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'debtToCover',\n type: 'uint256',\n },\n {\n internalType: 'bool',\n name: 'receiveAToken',\n type: 'bool',\n },\n ],\n name: 'liquidationCall',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'receiverAddress',\n type: 'address',\n },\n {\n internalType: 'address[]',\n name: 'assets',\n type: 'address[]',\n },\n {\n internalType: 'uint256[]',\n name: 'amounts',\n type: 'uint256[]',\n },\n {\n internalType: 'uint256[]',\n name: 'interestRateModes',\n type: 'uint256[]',\n },\n {\n internalType: 'address',\n name: 'onBehalfOf',\n type: 'address',\n },\n {\n internalType: 'bytes',\n name: 'params',\n type: 'bytes',\n },\n {\n internalType: 'uint16',\n name: 'referralCode',\n type: 'uint16',\n },\n ],\n name: 'flashLoan',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'receiverAddress',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'bytes',\n name: 'params',\n type: 'bytes',\n },\n {\n internalType: 'uint16',\n name: 'referralCode',\n type: 'uint16',\n },\n ],\n name: 'flashLoanSimple',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n ],\n name: 'getUserAccountData',\n outputs: [\n {\n internalType: 'uint256',\n name: 'totalCollateralBase',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'totalDebtBase',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'availableBorrowsBase',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'currentLiquidationThreshold',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'ltv',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'healthFactor',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'aTokenAddress',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'variableDebtAddress',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'interestRateStrategyAddress',\n type: 'address',\n },\n ],\n name: 'initReserve',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n ],\n name: 'dropReserve',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'rateStrategyAddress',\n type: 'address',\n },\n ],\n name: 'setReserveInterestRateStrategyAddress',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n ],\n name: 'syncIndexesState',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n ],\n name: 'syncRatesState',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n {\n internalType: 'struct DataTypes.ReserveConfigurationMap',\n name: 'configuration',\n type: 'tuple',\n },\n ],\n name: 'setConfiguration',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n ],\n name: 'getConfiguration',\n outputs: [\n {\n internalType: 'struct DataTypes.ReserveConfigurationMap',\n name: '',\n type: 'tuple',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'user',\n type: 'address',\n },\n ],\n name: 'getUserConfiguration',\n outputs: [\n {\n internalType: 'struct DataTypes.UserConfigurationMap',\n name: '',\n type: 'tuple',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n ],\n name: 'getReserveNormalizedIncome',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n ],\n name: 'getReserveNormalizedVariableDebt',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n ],\n name: 'getReserveData',\n outputs: [\n {\n components: [\n { name: 'configuration', type: 'uint256' },\n { name: 'liquidityIndex', type: 'uint128' },\n { name: 'currentLiquidityRate', type: 'uint128' },\n { name: 'variableBorrowIndex', type: 'uint128' },\n { name: 'currentVariableBorrowRate', type: 'uint128' },\n { name: 'currentStableBorrowRate', type: 'uint128' },\n { name: 'lastUpdateTimestamp', type: 'uint40' },\n { name: 'id', type: 'uint16' },\n { name: 'aTokenAddress', type: 'address' },\n { name: 'stableDebtTokenAddress', type: 'address' },\n { name: 'variableDebtTokenAddress', type: 'address' },\n { name: 'interestRateStrategyAddress', type: 'address' },\n { name: 'accruedToTreasury', type: 'uint128' },\n { name: 'unbacked', type: 'uint128' },\n { name: 'isolationModeTotalDebt', type: 'uint128' },\n ],\n internalType: 'struct DataTypes.ReserveDataLegacy',\n name: '',\n type: 'tuple',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n ],\n name: 'getVirtualUnderlyingBalance',\n outputs: [\n {\n internalType: 'uint128',\n name: '',\n type: 'uint128',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'asset',\n type: 'address',\n },\n {\n internalType: 'address',\n name: 'to',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n ],\n name: 'rescueTokens',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'receiverAddress',\n type: 'address',\n },\n {\n internalType: 'address[]',\n name: 'assets',\n type: 'address[]',\n },\n {\n internalType: 'uint256[]',\n name: 'amounts',\n type: 'uint256[]',\n },\n {\n internalType: 'uint256[]',\n name: 'interestRateModes',\n type: 'uint256[]',\n },\n {\n internalType: 'address',\n name: 'onBehalfOf',\n type: 'address',\n },\n {\n internalType: 'bytes',\n name: 'params',\n type: 'bytes',\n },\n {\n internalType: 'uint16',\n name: 'referralCode',\n type: 'uint16',\n },\n ],\n name: 'flashLoan',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'ADDRESSES_PROVIDER',\n outputs: [\n {\n internalType: 'contract IPoolAddressesProvider',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'FLASHLOAN_PREMIUM_TOTAL',\n outputs: [\n {\n internalType: 'uint128',\n name: '',\n type: 'uint128',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'BRIDGE_PROTOCOL_FEE',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'FLASHLOAN_PREMIUM_TO_PROTOCOL',\n outputs: [\n {\n internalType: 'uint128',\n name: '',\n type: 'uint128',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'MAX_NUMBER_RESERVES',\n outputs: [\n {\n internalType: 'uint16',\n name: '',\n type: 'uint16',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'getReservesList',\n outputs: [\n {\n internalType: 'address[]',\n name: '',\n type: 'address[]',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'getReservesCount',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n] as const;\n","export const spokeAssetManagerAbi = [\n {\n inputs: [],\n name: 'InsufficientValue',\n type: 'error',\n },\n {\n inputs: [],\n name: 'TransferFailed',\n type: 'error',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'oldRateLimit',\n type: 'address',\n },\n {\n indexed: true,\n internalType: 'address',\n name: 'newRateLimit',\n type: 'address',\n },\n ],\n name: 'RateLimitUpdated',\n type: 'event',\n },\n {\n inputs: [],\n name: 'connection',\n outputs: [\n {\n internalType: 'contract IConnection',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'getImplementation',\n outputs: [\n {\n internalType: 'address',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'hubAssetManager',\n outputs: [\n {\n internalType: 'bytes',\n name: '',\n type: 'bytes',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'hubChainId',\n outputs: [\n {\n internalType: 'uint256',\n name: '',\n type: 'uint256',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'contract IConnection',\n name: '_connection',\n type: 'address',\n },\n {\n internalType: 'contract RateLimit',\n name: '_rateLimit',\n type: 'address',\n },\n {\n internalType: 'bytes',\n name: '_hubAssetManager',\n type: 'bytes',\n },\n {\n internalType: 'uint256',\n name: '_hubChainId',\n type: 'uint256',\n },\n ],\n name: 'initialize',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'rateLimit',\n outputs: [\n {\n internalType: 'contract RateLimit',\n name: '',\n type: 'address',\n },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'nonce',\n type: 'uint256',\n },\n {\n internalType: 'uint256',\n name: 'srcChainId',\n type: 'uint256',\n },\n {\n internalType: 'bytes',\n name: 'srcAddress',\n type: 'bytes',\n },\n {\n internalType: 'bytes',\n name: 'payload',\n type: 'bytes',\n },\n {\n internalType: 'bytes[]',\n name: 'signatures',\n type: 'bytes[]',\n },\n ],\n name: 'recvMessage',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'contract RateLimit',\n name: '_rateLimit',\n type: 'address',\n },\n ],\n name: 'setRateLimit',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'token',\n type: 'address',\n },\n {\n internalType: 'bytes',\n name: 'to',\n type: 'bytes',\n },\n {\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n internalType: 'bytes',\n name: 'data',\n type: 'bytes',\n },\n ],\n name: 'transfer',\n outputs: [],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'newImplementation',\n type: 'address',\n },\n {\n internalType: 'bytes',\n name: 'data',\n type: 'bytes',\n },\n ],\n name: 'upgradeToAndCall',\n outputs: [],\n stateMutability: 'payable',\n type: 'function',\n },\n] as const;\n","export const uiPoolDataAbi = [\n {\n type: 'constructor',\n inputs: [\n {\n name: '_networkBaseTokenPriceInUsdProxyAggregator',\n type: 'address',\n internalType: 'contract IEACAggregatorProxy',\n },\n {\n name: '_marketReferenceCurrencyPriceInUsdProxyAggregator',\n type: 'address',\n internalType: 'contract IEACAggregatorProxy',\n },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'ETH_CURRENCY_UNIT',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'MKR_ADDRESS',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'address',\n internalType: 'address',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'bytes32ToString',\n inputs: [\n {\n name: '_bytes32',\n type: 'bytes32',\n internalType: 'bytes32',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'string',\n internalType: 'string',\n },\n ],\n stateMutability: 'pure',\n },\n {\n type: 'function',\n name: 'getEModes',\n inputs: [\n {\n name: 'provider',\n type: 'address',\n internalType: 'contract IPoolAddressesProvider',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'tuple[]',\n internalType: 'struct IUiPoolDataProviderV3.Emode[]',\n components: [\n {\n name: 'id',\n type: 'uint8',\n internalType: 'uint8',\n },\n {\n name: 'eMode',\n type: 'tuple',\n internalType: 'struct DataTypes.EModeCategory',\n components: [\n {\n name: 'ltv',\n type: 'uint16',\n internalType: 'uint16',\n },\n {\n name: 'liquidationThreshold',\n type: 'uint16',\n internalType: 'uint16',\n },\n {\n name: 'liquidationBonus',\n type: 'uint16',\n internalType: 'uint16',\n },\n {\n name: 'collateralBitmap',\n type: 'uint128',\n internalType: 'uint128',\n },\n {\n name: 'label',\n type: 'string',\n internalType: 'string',\n },\n {\n name: 'borrowableBitmap',\n type: 'uint128',\n internalType: 'uint128',\n },\n ],\n },\n ],\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getReservesData',\n inputs: [\n {\n name: 'provider',\n type: 'address',\n internalType: 'contract IPoolAddressesProvider',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'tuple[]',\n internalType: 'struct IUiPoolDataProviderV3.AggregatedReserveData[]',\n components: [\n {\n name: 'underlyingAsset',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'name',\n type: 'string',\n internalType: 'string',\n },\n {\n name: 'symbol',\n type: 'string',\n internalType: 'string',\n },\n {\n name: 'decimals',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'baseLTVasCollateral',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'reserveLiquidationThreshold',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'reserveLiquidationBonus',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'reserveFactor',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'usageAsCollateralEnabled',\n type: 'bool',\n internalType: 'bool',\n },\n {\n name: 'borrowingEnabled',\n type: 'bool',\n internalType: 'bool',\n },\n {\n name: 'isActive',\n type: 'bool',\n internalType: 'bool',\n },\n {\n name: 'isFrozen',\n type: 'bool',\n internalType: 'bool',\n },\n {\n name: 'liquidityIndex',\n type: 'uint128',\n internalType: 'uint128',\n },\n {\n name: 'variableBorrowIndex',\n type: 'uint128',\n internalType: 'uint128',\n },\n {\n name: 'liquidityRate',\n type: 'uint128',\n internalType: 'uint128',\n },\n {\n name: 'variableBorrowRate',\n type: 'uint128',\n internalType: 'uint128',\n },\n {\n name: 'lastUpdateTimestamp',\n type: 'uint40',\n internalType: 'uint40',\n },\n {\n name: 'aTokenAddress',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'variableDebtTokenAddress',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'interestRateStrategyAddress',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'availableLiquidity',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'totalScaledVariableDebt',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'priceInMarketReferenceCurrency',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'priceOracle',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'variableRateSlope1',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'variableRateSlope2',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'baseVariableBorrowRate',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'optimalUsageRatio',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'isPaused',\n type: 'bool',\n internalType: 'bool',\n },\n {\n name: 'isSiloedBorrowing',\n type: 'bool',\n internalType: 'bool',\n },\n {\n name: 'accruedToTreasury',\n type: 'uint128',\n internalType: 'uint128',\n },\n {\n name: 'unbacked',\n type: 'uint128',\n internalType: 'uint128',\n },\n {\n name: 'isolationModeTotalDebt',\n type: 'uint128',\n internalType: 'uint128',\n },\n {\n name: 'flashLoanEnabled',\n type: 'bool',\n internalType: 'bool',\n },\n {\n name: 'debtCeiling',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'debtCeilingDecimals',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'borrowCap',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'supplyCap',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'borrowableInIsolation',\n type: 'bool',\n internalType: 'bool',\n },\n {\n name: 'virtualAccActive',\n type: 'bool',\n internalType: 'bool',\n },\n {\n name: 'virtualUnderlyingBalance',\n type: 'uint128',\n internalType: 'uint128',\n },\n ],\n },\n {\n name: '',\n type: 'tuple',\n internalType: 'struct IUiPoolDataProviderV3.BaseCurrencyInfo',\n components: [\n {\n name: 'marketReferenceCurrencyUnit',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'marketReferenceCurrencyPriceInUsd',\n type: 'int256',\n internalType: 'int256',\n },\n {\n name: 'networkBaseTokenPriceInUsd',\n type: 'int256',\n internalType: 'int256',\n },\n {\n name: 'networkBaseTokenPriceDecimals',\n type: 'uint8',\n internalType: 'uint8',\n },\n ],\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getReservesList',\n inputs: [\n {\n name: 'provider',\n type: 'address',\n internalType: 'contract IPoolAddressesProvider',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'address[]',\n internalType: 'address[]',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getUserReservesData',\n inputs: [\n {\n name: 'provider',\n type: 'address',\n internalType: 'contract IPoolAddressesProvider',\n },\n {\n name: 'user',\n type: 'address',\n internalType: 'address',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'tuple[]',\n internalType: 'struct IUiPoolDataProviderV3.UserReserveData[]',\n components: [\n {\n name: 'underlyingAsset',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'scaledATokenBalance',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'usageAsCollateralEnabledOnUser',\n type: 'bool',\n internalType: 'bool',\n },\n {\n name: 'scaledVariableDebt',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n },\n {\n name: '',\n type: 'uint8',\n internalType: 'uint8',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'marketReferenceCurrencyPriceInUsdProxyAggregator',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'address',\n internalType: 'contract IEACAggregatorProxy',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'networkBaseTokenPriceInUsdProxyAggregator',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'address',\n internalType: 'contract IEACAggregatorProxy',\n },\n ],\n stateMutability: 'view',\n },\n] as const;\n","export const vaultTokenAbi = [\n {\n type: 'constructor',\n inputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'FEE_DENOMINATOR',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'UPGRADE_INTERFACE_VERSION',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'string',\n internalType: 'string',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'addSupportedToken',\n inputs: [\n {\n name: 'token',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'decimals',\n type: 'uint8',\n internalType: 'uint8',\n },\n {\n name: 'depositFee',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'withdrawalFee',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'maxDeposit',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'allowance',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'spender',\n type: 'address',\n internalType: 'address',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'approve',\n inputs: [\n {\n name: 'spender',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'value',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'bool',\n internalType: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'balanceOf',\n inputs: [\n {\n name: 'account',\n type: 'address',\n internalType: 'address',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'credit',\n inputs: [\n {\n name: 'srcChainId',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'srcToken',\n type: 'bytes',\n internalType: 'bytes',\n },\n {\n name: 'account',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'currentDebit',\n inputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: '',\n type: 'bytes',\n internalType: 'bytes',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'debit',\n inputs: [\n {\n name: 'account',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'dstChainId',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'dstToken',\n type: 'bytes',\n internalType: 'bytes',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'decimals',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint8',\n internalType: 'uint8',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'deposit',\n inputs: [\n {\n name: 'token',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'depositAndBurn',\n inputs: [\n {\n name: 'token',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'feeRecipient',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'address',\n internalType: 'address',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getAllTokenInfo',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'address[]',\n internalType: 'address[]',\n },\n {\n name: '',\n type: 'tuple[]',\n internalType: 'struct VaultToken.TokenInfo[]',\n components: [\n {\n name: 'decimals',\n type: 'uint8',\n internalType: 'uint8',\n },\n {\n name: 'depositFee',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'withdrawalFee',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'maxDeposit',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'isSupported',\n type: 'bool',\n internalType: 'bool',\n },\n ],\n },\n {\n name: '',\n type: 'uint256[]',\n internalType: 'uint256[]',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getImplementation',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'address',\n internalType: 'address',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'getVaultReserves',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'address[]',\n internalType: 'address[]',\n },\n {\n name: '',\n type: 'uint256[]',\n internalType: 'uint256[]',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'initialize',\n inputs: [\n {\n name: 'name',\n type: 'string',\n internalType: 'string',\n },\n {\n name: 'symbol',\n type: 'string',\n internalType: 'string',\n },\n {\n name: '_feeRecipient',\n type: 'address',\n internalType: 'address',\n },\n {\n name: '_rateLimits',\n type: 'address',\n internalType: 'contract IRateLimits',\n },\n {\n name: '_xTokenManager',\n type: 'address',\n internalType: 'address',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'maxDebit',\n inputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: '',\n type: 'bytes',\n internalType: 'bytes',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'name',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'string',\n internalType: 'string',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'owner',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'address',\n internalType: 'address',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'proxiableUUID',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'bytes32',\n internalType: 'bytes32',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'rateLimits',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'address',\n internalType: 'contract IRateLimits',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'renounceOwnership',\n inputs: [],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'setDebit',\n inputs: [\n {\n name: 'chainId',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'token',\n type: 'bytes',\n internalType: 'bytes',\n },\n {\n name: 'amount',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'setFeeRecipient',\n inputs: [\n {\n name: '_feeRecipient',\n type: 'address',\n internalType: 'address',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'setMaxDebit',\n inputs: [\n {\n name: 'chainId',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'token',\n type: 'bytes',\n internalType: 'bytes',\n },\n {\n name: 'limit',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'setMaxDeposit',\n inputs: [\n {\n name: 'token',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'maxDeposit',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'setXTokenManager',\n inputs: [\n {\n name: '_xTokenManager',\n type: 'address',\n internalType: 'address',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'supportedTokens',\n inputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'address',\n internalType: 'address',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'symbol',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'string',\n internalType: 'string',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'tokenInfo',\n inputs: [\n {\n name: '',\n type: 'address',\n internalType: 'address',\n },\n ],\n outputs: [\n {\n name: 'decimals',\n type: 'uint8',\n internalType: 'uint8',\n },\n {\n name: 'depositFee',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'withdrawalFee',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'maxDeposit',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'isSupported',\n type: 'bool',\n internalType: 'bool',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'totalSupply',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'transfer',\n inputs: [\n {\n name: 'to',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'value',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'bool',\n internalType: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'transferFrom',\n inputs: [\n {\n name: 'from',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'to',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'value',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'bool',\n internalType: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'transferOwnership',\n inputs: [\n {\n name: 'newOwner',\n type: 'address',\n internalType: 'address',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'updateToken',\n inputs: [\n {\n name: 'token',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'depositFee',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'withdrawalFee',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'maxDeposit',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'upgradeToAndCall',\n inputs: [\n {\n name: 'newImplementation',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'data',\n type: 'bytes',\n internalType: 'bytes',\n },\n ],\n outputs: [],\n stateMutability: 'payable',\n },\n {\n type: 'function',\n name: 'withdraw',\n inputs: [\n {\n name: 'token',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'xTokenManager',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'address',\n internalType: 'address',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'event',\n name: 'Approval',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'spender',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'value',\n type: 'uint256',\n indexed: false,\n internalType: 'uint256',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'Initialized',\n inputs: [\n {\n name: 'version',\n type: 'uint64',\n indexed: false,\n internalType: 'uint64',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'OwnershipTransferred',\n inputs: [\n {\n name: 'previousOwner',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'newOwner',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'Transfer',\n inputs: [\n {\n name: 'from',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'to',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'value',\n type: 'uint256',\n indexed: false,\n internalType: 'uint256',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'Upgraded',\n inputs: [\n {\n name: 'implementation',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n ],\n anonymous: false,\n },\n {\n type: 'error',\n name: 'AddressEmptyCode',\n inputs: [\n {\n name: 'target',\n type: 'address',\n internalType: 'address',\n },\n ],\n },\n {\n type: 'error',\n name: 'ERC1967InvalidImplementation',\n inputs: [\n {\n name: 'implementation',\n type: 'address',\n internalType: 'address',\n },\n ],\n },\n {\n type: 'error',\n name: 'ERC1967NonPayable',\n inputs: [],\n },\n {\n type: 'error',\n name: 'ERC20InsufficientAllowance',\n inputs: [\n {\n name: 'spender',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'allowance',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'needed',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n },\n {\n type: 'error',\n name: 'ERC20InsufficientBalance',\n inputs: [\n {\n name: 'sender',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'balance',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'needed',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n },\n {\n type: 'error',\n name: 'ERC20InvalidApprover',\n inputs: [\n {\n name: 'approver',\n type: 'address',\n internalType: 'address',\n },\n ],\n },\n {\n type: 'error',\n name: 'ERC20InvalidReceiver',\n inputs: [\n {\n name: 'receiver',\n type: 'address',\n internalType: 'address',\n },\n ],\n },\n {\n type: 'error',\n name: 'ERC20InvalidSender',\n inputs: [\n {\n name: 'sender',\n type: 'address',\n internalType: 'address',\n },\n ],\n },\n {\n type: 'error',\n name: 'ERC20InvalidSpender',\n inputs: [\n {\n name: 'spender',\n type: 'address',\n internalType: 'address',\n },\n ],\n },\n {\n type: 'error',\n name: 'FailedCall',\n inputs: [],\n },\n {\n type: 'error',\n name: 'InvalidInitialization',\n inputs: [],\n },\n {\n type: 'error',\n name: 'NotInitializing',\n inputs: [],\n },\n {\n type: 'error',\n name: 'OwnableInvalidOwner',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n internalType: 'address',\n },\n ],\n },\n {\n type: 'error',\n name: 'OwnableUnauthorizedAccount',\n inputs: [\n {\n name: 'account',\n type: 'address',\n internalType: 'address',\n },\n ],\n },\n {\n type: 'error',\n name: 'SafeERC20FailedOperation',\n inputs: [\n {\n name: 'token',\n type: 'address',\n internalType: 'address',\n },\n ],\n },\n {\n type: 'error',\n name: 'UUPSUnauthorizedCallContext',\n inputs: [],\n },\n {\n type: 'error',\n name: 'UUPSUnsupportedProxiableUUID',\n inputs: [\n {\n name: 'slot',\n type: 'bytes32',\n internalType: 'bytes32',\n },\n ],\n },\n] as const;\n","export const walletFactoryAbi = [\n {\n type: 'function',\n name: 'getDeployedAddress',\n inputs: [\n {\n name: 'chainId',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'user',\n type: 'bytes',\n internalType: 'bytes',\n },\n ],\n outputs: [\n {\n name: 'computedAddress',\n type: 'address',\n internalType: 'address',\n },\n ],\n stateMutability: 'view',\n },\n] as const;\n","export const IntentsAbi = [\n {\n type: 'constructor',\n inputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'HUB_CHAIN_ID',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'UPGRADE_INTERFACE_VERSION',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'string',\n internalType: 'string',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'addSpoke',\n inputs: [\n {\n name: 'chainID',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'spokeAddress',\n type: 'bytes',\n internalType: 'bytes',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'assetManager',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'address',\n internalType: 'contract IAssetManager',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'cancelIntent',\n inputs: [\n {\n name: 'intent',\n type: 'tuple',\n internalType: 'struct Intents.Intent',\n components: [\n {\n name: 'intentId',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'creator',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'inputToken',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'outputToken',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'inputAmount',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'minOutputAmount',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'deadline',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'allowPartialFill',\n type: 'bool',\n internalType: 'bool',\n },\n {\n name: 'srcChain',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'dstChain',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'srcAddress',\n type: 'bytes',\n internalType: 'bytes',\n },\n {\n name: 'dstAddress',\n type: 'bytes',\n internalType: 'bytes',\n },\n {\n name: 'solver',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'data',\n type: 'bytes',\n internalType: 'bytes',\n },\n ],\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'connection',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'address',\n internalType: 'contract IConnection',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'createIntent',\n inputs: [\n {\n name: 'intent',\n type: 'tuple',\n internalType: 'struct Intents.Intent',\n components: [\n {\n name: 'intentId',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'creator',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'inputToken',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'outputToken',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'inputAmount',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'minOutputAmount',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'deadline',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'allowPartialFill',\n type: 'bool',\n internalType: 'bool',\n },\n {\n name: 'srcChain',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'dstChain',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'srcAddress',\n type: 'bytes',\n internalType: 'bytes',\n },\n {\n name: 'dstAddress',\n type: 'bytes',\n internalType: 'bytes',\n },\n {\n name: 'solver',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'data',\n type: 'bytes',\n internalType: 'bytes',\n },\n ],\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'externalFills',\n inputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [\n {\n name: 'intentHash',\n type: 'bytes32',\n internalType: 'bytes32',\n },\n {\n name: 'to',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'token',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'inputAmount',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'outputAmount',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'fillIntent',\n inputs: [\n {\n name: 'intent',\n type: 'tuple',\n internalType: 'struct Intents.Intent',\n components: [\n {\n name: 'intentId',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'creator',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'inputToken',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'outputToken',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'inputAmount',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'minOutputAmount',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'deadline',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'allowPartialFill',\n type: 'bool',\n internalType: 'bool',\n },\n {\n name: 'srcChain',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'dstChain',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'srcAddress',\n type: 'bytes',\n internalType: 'bytes',\n },\n {\n name: 'dstAddress',\n type: 'bytes',\n internalType: 'bytes',\n },\n {\n name: 'solver',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'data',\n type: 'bytes',\n internalType: 'bytes',\n },\n ],\n },\n {\n name: '_inputAmount',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: '_outputAmount',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: '_externalFillId',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'getImplementation',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'address',\n internalType: 'address',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'initialize',\n inputs: [\n {\n name: '_walletFactory',\n type: 'address',\n internalType: 'contract IWalletFactory',\n },\n {\n name: '_assetManager',\n type: 'address',\n internalType: 'contract IAssetManager',\n },\n {\n name: '_connection',\n type: 'address',\n internalType: 'contract IConnection',\n },\n {\n name: '_HUB_CHAIN_ID',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'intentStates',\n inputs: [\n {\n name: '',\n type: 'bytes32',\n internalType: 'bytes32',\n },\n ],\n outputs: [\n {\n name: 'exists',\n type: 'bool',\n internalType: 'bool',\n },\n {\n name: 'remainingInput',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'receivedOutput',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'pendingPayment',\n type: 'bool',\n internalType: 'bool',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'owner',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'address',\n internalType: 'address',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'pendingIntentStates',\n inputs: [\n {\n name: '',\n type: 'bytes32',\n internalType: 'bytes32',\n },\n ],\n outputs: [\n {\n name: 'pendingInput',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'pendingOutput',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'pendingPayouts',\n inputs: [\n {\n name: '',\n type: 'bytes32',\n internalType: 'bytes32',\n },\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [\n {\n name: 'solver',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'preFillIntent',\n inputs: [\n {\n name: 'intent',\n type: 'tuple',\n internalType: 'struct Intents.Intent',\n components: [\n {\n name: 'intentId',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'creator',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'inputToken',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'outputToken',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'inputAmount',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'minOutputAmount',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'deadline',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'allowPartialFill',\n type: 'bool',\n internalType: 'bool',\n },\n {\n name: 'srcChain',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'dstChain',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'srcAddress',\n type: 'bytes',\n internalType: 'bytes',\n },\n {\n name: 'dstAddress',\n type: 'bytes',\n internalType: 'bytes',\n },\n {\n name: 'solver',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'data',\n type: 'bytes',\n internalType: 'bytes',\n },\n ],\n },\n {\n name: '_inputAmount',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: '_outputAmount',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: '_externalFillId',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'proxiableUUID',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'bytes32',\n internalType: 'bytes32',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'recvMessage',\n inputs: [\n {\n name: 'srcChainId',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'srcAddress',\n type: 'bytes',\n internalType: 'bytes',\n },\n {\n name: 'connSn',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'payload',\n type: 'bytes',\n internalType: 'bytes',\n },\n {\n name: 'signatures',\n type: 'bytes[]',\n internalType: 'bytes[]',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'renounceOwnership',\n inputs: [],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'setWhitelistedSolver',\n inputs: [\n {\n name: 'solver',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'whitelisted',\n type: 'bool',\n internalType: 'bool',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'spokes',\n inputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'bytes',\n internalType: 'bytes',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'transferOwnership',\n inputs: [\n {\n name: 'newOwner',\n type: 'address',\n internalType: 'address',\n },\n ],\n outputs: [],\n stateMutability: 'nonpayable',\n },\n {\n type: 'function',\n name: 'upgradeToAndCall',\n inputs: [\n {\n name: 'newImplementation',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'data',\n type: 'bytes',\n internalType: 'bytes',\n },\n ],\n outputs: [],\n stateMutability: 'payable',\n },\n {\n type: 'function',\n name: 'walletFactory',\n inputs: [],\n outputs: [\n {\n name: '',\n type: 'address',\n internalType: 'contract IWalletFactory',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'function',\n name: 'whitelistedSolvers',\n inputs: [\n {\n name: '',\n type: 'address',\n internalType: 'address',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'bool',\n internalType: 'bool',\n },\n ],\n stateMutability: 'view',\n },\n {\n type: 'event',\n name: 'ExternalFillFailed',\n inputs: [\n {\n name: 'fillId',\n type: 'uint256',\n indexed: false,\n internalType: 'uint256',\n },\n {\n name: 'fill',\n type: 'tuple',\n indexed: false,\n internalType: 'struct Intents.ExternalFill',\n components: [\n {\n name: 'intentHash',\n type: 'bytes32',\n internalType: 'bytes32',\n },\n {\n name: 'to',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'token',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'inputAmount',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'outputAmount',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'Initialized',\n inputs: [\n {\n name: 'version',\n type: 'uint64',\n indexed: false,\n internalType: 'uint64',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'IntentCancelled',\n inputs: [\n {\n name: 'intentHash',\n type: 'bytes32',\n indexed: false,\n internalType: 'bytes32',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'IntentCreated',\n inputs: [\n {\n name: 'intentHash',\n type: 'bytes32',\n indexed: false,\n internalType: 'bytes32',\n },\n {\n name: 'intent',\n type: 'tuple',\n indexed: false,\n internalType: 'struct Intents.Intent',\n components: [\n {\n name: 'intentId',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'creator',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'inputToken',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'outputToken',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'inputAmount',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'minOutputAmount',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'deadline',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'allowPartialFill',\n type: 'bool',\n internalType: 'bool',\n },\n {\n name: 'srcChain',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'dstChain',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'srcAddress',\n type: 'bytes',\n internalType: 'bytes',\n },\n {\n name: 'dstAddress',\n type: 'bytes',\n internalType: 'bytes',\n },\n {\n name: 'solver',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'data',\n type: 'bytes',\n internalType: 'bytes',\n },\n ],\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'IntentFilled',\n inputs: [\n {\n name: 'intentHash',\n type: 'bytes32',\n indexed: false,\n internalType: 'bytes32',\n },\n {\n name: 'intentState',\n type: 'tuple',\n indexed: false,\n internalType: 'struct Intents.IntentState',\n components: [\n {\n name: 'exists',\n type: 'bool',\n internalType: 'bool',\n },\n {\n name: 'remainingInput',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'receivedOutput',\n type: 'uint256',\n internalType: 'uint256',\n },\n {\n name: 'pendingPayment',\n type: 'bool',\n internalType: 'bool',\n },\n ],\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'OwnershipTransferred',\n inputs: [\n {\n name: 'previousOwner',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n {\n name: 'newOwner',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n ],\n anonymous: false,\n },\n {\n type: 'event',\n name: 'Upgraded',\n inputs: [\n {\n name: 'implementation',\n type: 'address',\n indexed: true,\n internalType: 'address',\n },\n ],\n anonymous: false,\n },\n {\n type: 'error',\n name: 'AddressEmptyCode',\n inputs: [\n {\n name: 'target',\n type: 'address',\n internalType: 'address',\n },\n ],\n },\n {\n type: 'error',\n name: 'ERC1967InvalidImplementation',\n inputs: [\n {\n name: 'implementation',\n type: 'address',\n internalType: 'address',\n },\n ],\n },\n {\n type: 'error',\n name: 'ERC1967NonPayable',\n inputs: [],\n },\n {\n type: 'error',\n name: 'FailedCall',\n inputs: [],\n },\n {\n type: 'error',\n name: 'FillAlreadyExists',\n inputs: [],\n },\n {\n type: 'error',\n name: 'IntentAlreadyExists',\n inputs: [],\n },\n {\n type: 'error',\n name: 'IntentNotFound',\n inputs: [],\n },\n {\n type: 'error',\n name: 'InvalidAmount',\n inputs: [],\n },\n {\n type: 'error',\n name: 'InvalidInitialization',\n inputs: [],\n },\n {\n type: 'error',\n name: 'InvalidOutputToken',\n inputs: [],\n },\n {\n type: 'error',\n name: 'InvalidSolver',\n inputs: [],\n },\n {\n type: 'error',\n name: 'NotInitializing',\n inputs: [],\n },\n {\n type: 'error',\n name: 'OwnableInvalidOwner',\n inputs: [\n {\n name: 'owner',\n type: 'address',\n internalType: 'address',\n },\n ],\n },\n {\n type: 'error',\n name: 'OwnableUnauthorizedAccount',\n inputs: [\n {\n name: 'account',\n type: 'address',\n internalType: 'address',\n },\n ],\n },\n {\n type: 'error',\n name: 'PartialFillNotAllowed',\n inputs: [],\n },\n {\n type: 'error',\n name: 'PendingFillExists',\n inputs: [],\n },\n {\n type: 'error',\n name: 'SafeERC20FailedOperation',\n inputs: [\n {\n name: 'token',\n type: 'address',\n internalType: 'address',\n },\n ],\n },\n {\n type: 'error',\n name: 'SpokeNotConfigured',\n inputs: [],\n },\n {\n type: 'error',\n name: 'UUPSUnauthorizedCallContext',\n inputs: [],\n },\n {\n type: 'error',\n name: 'UUPSUnsupportedProxiableUUID',\n inputs: [\n {\n name: 'slot',\n type: 'bytes32',\n internalType: 'bytes32',\n },\n ],\n },\n {\n type: 'error',\n name: 'Unauthorized',\n inputs: [],\n },\n] as const;\n","export const sonicWalletFactoryAbi = [\n { inputs: [{ internalType: 'address', name: 'target', type: 'address' }], name: 'AddressEmptyCode', type: 'error' },\n {\n inputs: [{ internalType: 'address', name: 'implementation', type: 'address' }],\n name: 'ERC1967InvalidImplementation',\n type: 'error',\n },\n { inputs: [], name: 'ERC1967NonPayable', type: 'error' },\n { inputs: [], name: 'FailedCall', type: 'error' },\n { inputs: [], name: 'InvalidInitialization', type: 'error' },\n { inputs: [], name: 'NotInitializing', type: 'error' },\n { inputs: [{ internalType: 'address', name: 'owner', type: 'address' }], name: 'OwnableInvalidOwner', type: 'error' },\n {\n inputs: [{ internalType: 'address', name: 'account', type: 'address' }],\n name: 'OwnableUnauthorizedAccount',\n type: 'error',\n },\n { inputs: [], name: 'UUPSUnauthorizedCallContext', type: 'error' },\n {\n inputs: [{ internalType: 'bytes32', name: 'slot', type: 'bytes32' }],\n name: 'UUPSUnsupportedProxiableUUID',\n type: 'error',\n },\n {\n anonymous: false,\n inputs: [{ indexed: false, internalType: 'uint64', name: 'version', type: 'uint64' }],\n name: 'Initialized',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: 'address', name: 'previousOwner', type: 'address' },\n { indexed: true, internalType: 'address', name: 'newOwner', type: 'address' },\n ],\n name: 'OwnershipTransferStarted',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n { indexed: true, internalType: 'address', name: 'previousOwner', type: 'address' },\n { indexed: true, internalType: 'address', name: 'newOwner', type: 'address' },\n ],\n name: 'OwnershipTransferred',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [{ indexed: true, internalType: 'address', name: 'implementation', type: 'address' }],\n name: 'Upgraded',\n type: 'event',\n },\n {\n inputs: [],\n name: 'UPGRADE_INTERFACE_VERSION',\n outputs: [{ internalType: 'string', name: '', type: 'string' }],\n stateMutability: 'view',\n type: 'function',\n },\n { inputs: [], name: 'acceptOwnership', outputs: [], stateMutability: 'nonpayable', type: 'function' },\n {\n inputs: [{ internalType: 'bytes32', name: 'salt', type: 'bytes32' }],\n name: 'deploy',\n outputs: [{ internalType: 'address', name: 'deployedAddress', type: 'address' }],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [{ internalType: 'address', name: 'user', type: 'address' }],\n name: 'getDeployedAddress',\n outputs: [{ internalType: 'address', name: 'computedAddress', type: 'address' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'getImplementation',\n outputs: [{ internalType: 'address', name: '', type: 'address' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'implementation',\n outputs: [{ internalType: 'address', name: '', type: 'address' }],\n stateMutability: 'view',\n type: 'function',\n },\n { inputs: [], name: 'initialize', outputs: [], stateMutability: 'nonpayable', type: 'function' },\n {\n inputs: [],\n name: 'owner',\n outputs: [{ internalType: 'address', name: '', type: 'address' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'pendingOwner',\n outputs: [{ internalType: 'address', name: '', type: 'address' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'proxiableUUID',\n outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }],\n stateMutability: 'view',\n type: 'function',\n },\n { inputs: [], name: 'registerMe', outputs: [], stateMutability: 'nonpayable', type: 'function' },\n { inputs: [], name: 'renounceOwnership', outputs: [], stateMutability: 'nonpayable', type: 'function' },\n {\n inputs: [\n {\n components: [\n { internalType: 'address', name: 'addr', type: 'address' },\n { internalType: 'uint256', name: 'value', type: 'uint256' },\n { internalType: 'bytes', name: 'data', type: 'bytes' },\n ],\n internalType: 'struct ISonicRouterWallet.ContractCall[]',\n name: 'calls',\n type: 'tuple[]',\n },\n ],\n name: 'route',\n outputs: [],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [{ internalType: 'address', name: 'newOwner', type: 'address' }],\n name: 'transferOwnership',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [{ internalType: 'address', name: '_newWalletImplementation', type: 'address' }],\n name: 'updateWalletImplementation',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n { internalType: 'address', name: 'newImplementation', type: 'address' },\n { internalType: 'bytes', name: 'data', type: 'bytes' },\n ],\n name: 'upgradeToAndCall',\n outputs: [],\n stateMutability: 'payable',\n type: 'function',\n },\n] as const;\n","export const wrappedSonicAbi = [\n {\n inputs: [],\n name: 'ERC20InvalidZeroDeposit',\n type: 'error',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'recipient',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'ERC20WithdrawFailed',\n type: 'error',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'Deposit',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'Withdrawal',\n type: 'event',\n },\n {\n stateMutability: 'payable',\n type: 'fallback',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n ],\n name: 'depositFor',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [],\n name: 'deposit',\n outputs: [],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'uint256',\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'withdraw',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'address',\n name: 'account',\n type: 'address',\n },\n {\n internalType: 'uint256',\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'withdrawTo',\n outputs: [\n {\n internalType: 'bool',\n name: '',\n type: 'bool',\n },\n ],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n] as const;\n","export const variableDebtTokenAbi = [\n {\n inputs: [\n {\n name: 'delegatee',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'amount',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n name: 'approveDelegation',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n type: 'function',\n name: 'borrowAllowance',\n inputs: [\n {\n name: 'fromUser',\n type: 'address',\n internalType: 'address',\n },\n {\n name: 'toUser',\n type: 'address',\n internalType: 'address',\n },\n ],\n outputs: [\n {\n name: '',\n type: 'uint256',\n internalType: 'uint256',\n },\n ],\n stateMutability: 'view',\n },\n] as const;\n","import type { Address, Chain } from 'viem';\nimport { arbitrum, avalanche, base, bsc, nibiru, optimism, polygon, sonic } from 'viem/chains';\nimport type {\n CosmosSpokeChainConfig,\n EvmChainId,\n EvmHubChainConfig,\n EvmSpokeChainConfig,\n HubAssetInfo,\n IconSpokeChainConfig,\n IntentRelayChainId,\n MoneyMarketConfig,\n OriginalAssetAddress,\n SolanaChainConfig,\n SolverConfig,\n SonicSpokeChainConfig,\n StellarSpokeChainConfig,\n SuiSpokeChainConfig,\n VaultType,\n} from './index.js';\nimport {\n type ChainId,\n type Token,\n type SpokeChainId,\n AVALANCHE_MAINNET_CHAIN_ID,\n ARBITRUM_MAINNET_CHAIN_ID,\n BASE_MAINNET_CHAIN_ID,\n BSC_MAINNET_CHAIN_ID,\n SONIC_MAINNET_CHAIN_ID,\n OPTIMISM_MAINNET_CHAIN_ID,\n POLYGON_MAINNET_CHAIN_ID,\n NIBIRU_MAINNET_CHAIN_ID,\n INJECTIVE_MAINNET_CHAIN_ID,\n SOLANA_MAINNET_CHAIN_ID,\n SUI_MAINNET_CHAIN_ID,\n STELLAR_MAINNET_CHAIN_ID,\n ICON_MAINNET_CHAIN_ID,\n type HubChainId,\n SPOKE_CHAIN_IDS,\n} from '@sodax/types';\n\nexport const DEFAULT_MAX_RETRY = 3;\nexport const DEFAULT_RELAY_TX_TIMEOUT = 60000; // 60 seconds\nexport const DEFAULT_RETRY_DELAY_MS = 2000;\nexport const ICON_TX_RESULT_WAIT_MAX_RETRY = 10;\nexport const MAX_UINT256 = (1n << 256n) - 1n;\nexport const FEE_PERCENTAGE_SCALE = 10000n; // 100% = 10000\n\nexport const VAULT_TOKEN_DECIMALS = 18;\n\n// NOTE: This is not the same as the actual chain ids (wormhole based ids), only used for intent relay\nexport const INTENT_RELAY_CHAIN_IDS = {\n AVAX: 6n,\n SUI: 21n,\n SONIC: 146n,\n STELLAR: 27n,\n INJ: 19n,\n SOL: 1n,\n ICON: 1768124270n,\n BASE: 30n,\n BINANCE: 4n,\n OPTIMISM: 24n,\n POLYGON: 5n,\n ARBITRUM: 23n,\n NIBIRU: 7235938n,\n} as const;\n\nexport const EVM_CHAIN_IDS = [\n AVALANCHE_MAINNET_CHAIN_ID,\n ARBITRUM_MAINNET_CHAIN_ID,\n BASE_MAINNET_CHAIN_ID,\n BSC_MAINNET_CHAIN_ID,\n SONIC_MAINNET_CHAIN_ID,\n OPTIMISM_MAINNET_CHAIN_ID,\n POLYGON_MAINNET_CHAIN_ID,\n NIBIRU_MAINNET_CHAIN_ID,\n] as const;\n\nexport const EVM_SPOKE_CHAIN_IDS = [\n AVALANCHE_MAINNET_CHAIN_ID,\n ARBITRUM_MAINNET_CHAIN_ID,\n BASE_MAINNET_CHAIN_ID,\n BSC_MAINNET_CHAIN_ID,\n OPTIMISM_MAINNET_CHAIN_ID,\n POLYGON_MAINNET_CHAIN_ID,\n NIBIRU_MAINNET_CHAIN_ID,\n SONIC_MAINNET_CHAIN_ID,\n] as const;\n\nconst ChainIdToIntentRelayChainId: Record<ChainId, IntentRelayChainId> = {\n [AVALANCHE_MAINNET_CHAIN_ID]: INTENT_RELAY_CHAIN_IDS.AVAX,\n [ARBITRUM_MAINNET_CHAIN_ID]: INTENT_RELAY_CHAIN_IDS.ARBITRUM,\n [BASE_MAINNET_CHAIN_ID]: INTENT_RELAY_CHAIN_IDS.BASE,\n [BSC_MAINNET_CHAIN_ID]: INTENT_RELAY_CHAIN_IDS.BINANCE,\n [INJECTIVE_MAINNET_CHAIN_ID]: INTENT_RELAY_CHAIN_IDS.INJ,\n [SONIC_MAINNET_CHAIN_ID]: INTENT_RELAY_CHAIN_IDS.SONIC,\n [OPTIMISM_MAINNET_CHAIN_ID]: INTENT_RELAY_CHAIN_IDS.OPTIMISM,\n [POLYGON_MAINNET_CHAIN_ID]: INTENT_RELAY_CHAIN_IDS.POLYGON,\n [SOLANA_MAINNET_CHAIN_ID]: INTENT_RELAY_CHAIN_IDS.SOL,\n [SUI_MAINNET_CHAIN_ID]: INTENT_RELAY_CHAIN_IDS.SUI,\n [STELLAR_MAINNET_CHAIN_ID]: INTENT_RELAY_CHAIN_IDS.STELLAR,\n [ICON_MAINNET_CHAIN_ID]: INTENT_RELAY_CHAIN_IDS.ICON,\n [NIBIRU_MAINNET_CHAIN_ID]: INTENT_RELAY_CHAIN_IDS.NIBIRU,\n};\n\nexport const getIntentRelayChainId = (chainId: ChainId): IntentRelayChainId => ChainIdToIntentRelayChainId[chainId];\n\nexport function getEvmViemChain(id: EvmChainId): Chain {\n switch (id) {\n case SONIC_MAINNET_CHAIN_ID:\n return sonic;\n case AVALANCHE_MAINNET_CHAIN_ID:\n return avalanche;\n case ARBITRUM_MAINNET_CHAIN_ID:\n return arbitrum;\n case BASE_MAINNET_CHAIN_ID:\n return base;\n case OPTIMISM_MAINNET_CHAIN_ID:\n return optimism;\n case BSC_MAINNET_CHAIN_ID:\n return bsc;\n case POLYGON_MAINNET_CHAIN_ID:\n return polygon;\n case NIBIRU_MAINNET_CHAIN_ID:\n return nibiru;\n default:\n throw new Error(`Unsupported EVM chain ID: ${id}`);\n }\n}\n\nconst hubChainConfig: Record<HubChainId, EvmHubChainConfig> = {\n [SONIC_MAINNET_CHAIN_ID]: {\n chain: {\n name: 'Sonic',\n id: SONIC_MAINNET_CHAIN_ID,\n type: 'EVM',\n },\n addresses: {\n assetManager: '0x60c5681bD1DB4e50735c4cA3386005A4BA4937C0',\n hubWallet: '0xA0ed3047D358648F2C0583B415CffCA571FDB544',\n xTokenManager: '0x5bD2843de9D6b0e6A05d0FB742072274EA3C6CA3',\n },\n nativeToken: '0x0000000000000000000000000000000000000000',\n supportedTokens: [],\n } satisfies EvmHubChainConfig,\n} as const;\n\nexport const getHubChainConfig = (chainId: HubChainId): EvmHubChainConfig => hubChainConfig[chainId];\n\nexport const spokeChainConfig = {\n [SONIC_MAINNET_CHAIN_ID]: {\n chain: {\n name: 'Sonic',\n id: SONIC_MAINNET_CHAIN_ID,\n type: 'EVM',\n },\n addresses: {\n walletRouter: '0xC67C3e55c665E78b25dc9829B3Aa5af47d914733',\n wrappedSonic: '0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38',\n },\n nativeToken: '0x0000000000000000000000000000000000000000',\n bnUSD: '0x6958a4CBFe11406E2a1c1d3a71A1971aD8B3b92F',\n supportedTokens: {\n Sonic: {\n symbol: 'Sonic',\n name: 'Sonic',\n decimals: 18,\n address: '0x0000000000000000000000000000000000000000',\n },\n WETH: {\n symbol: 'WETH',\n name: 'Wrapped Ether',\n decimals: 18,\n address: '0x50c42dEAcD8Fc9773493ED674b675bE577f2634b',\n },\n USDC: {\n symbol: 'USDC',\n name: 'USD Coin',\n decimals: 6,\n address: '0x29219dd400f2Bf60E5a23d13Be72B486D4038894',\n },\n USDT: {\n symbol: 'USDT',\n name: 'Tether USD',\n decimals: 6,\n address: '0x6047828dc181963ba44974801FF68e538dA5eaF9',\n },\n wSonic: {\n symbol: 'wSonic',\n name: 'Wrapped Sonic',\n decimals: 18,\n address: '0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38',\n },\n },\n } as const satisfies SonicSpokeChainConfig,\n [SOLANA_MAINNET_CHAIN_ID]: {\n addresses: {\n assetManager: 'AnCCJjheynmGqPp6Vgat9DTirGKD4CtQzP8cwTYV8qKH',\n connection: 'GxS8i6D9qQjbSeniD487CnomUxU2pXt6V8P96T6MkUXB',\n rateLimit: '2Vyy3A3Teju2EMCkdnappEeWqBXyAaF5V2WsrU4hDtsk',\n testToken: '3Q2HS3png7fLaYerqCun3zw8rnBZo2Ksvdg6RHTyM4Ns',\n xTokenManager: '',\n },\n chain: { id: SOLANA_MAINNET_CHAIN_ID, name: 'Solana', type: 'SOLANA' },\n nativeToken: '11111111111111111111111111111111' as const,\n bnUSD: '3rSPCLNEF7Quw4wX8S1NyKivELoyij8eYA2gJwBgt4V5',\n supportedTokens: {\n SOL: {\n symbol: 'SOL',\n name: 'Solana',\n decimals: 9,\n address: '11111111111111111111111111111111',\n },\n bnUSD: {\n symbol: 'bnUSD',\n name: 'bnUSD',\n decimals: 9,\n address: '3rSPCLNEF7Quw4wX8S1NyKivELoyij8eYA2gJwBgt4V5',\n },\n USDC: {\n symbol: 'USDC',\n name: 'USD Coin',\n decimals: 6,\n address: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',\n },\n },\n gasPrice: '500000',\n rpcUrl: 'https://api.mainnet-beta.solana.com',\n wsUrl: 'https://api.mainnet-beta.solana.com',\n walletAddress: '',\n } as const satisfies SolanaChainConfig,\n [AVALANCHE_MAINNET_CHAIN_ID]: {\n chain: {\n name: 'Avalanche',\n id: AVALANCHE_MAINNET_CHAIN_ID,\n type: 'EVM',\n },\n addresses: {\n assetManager: '0x5bDD1E1C5173F4c912cC919742FB94A55ECfaf86',\n connection: '0x4555aC13D7338D9E671584C1D118c06B2a3C88eD',\n },\n nativeToken: '0x0000000000000000000000000000000000000000' as const,\n bnUSD: '0x6958a4CBFe11406E2a1c1d3a71A1971aD8B3b92F',\n supportedTokens: {\n AVAX: {\n symbol: 'AVAX',\n name: 'Avalanche',\n decimals: 18,\n address: '0x0000000000000000000000000000000000000000',\n },\n bnUSD: {\n symbol: 'bnUSD',\n name: 'bnUSD',\n decimals: 18,\n address: '0x6958a4CBFe11406E2a1c1d3a71A1971aD8B3b92F',\n },\n USDT: {\n symbol: 'USDT',\n name: 'Tether USD',\n decimals: 6,\n address: '0x9702230A8Ea53601f5cD2dc00fDBc13d4dF4A8c7',\n },\n USDC: {\n symbol: 'USDC',\n name: 'USD Coin',\n decimals: 6,\n address: '0xB97EF9Ef8734C71904D8002F8b6Bc66Dd9c48a6E',\n },\n },\n } as const satisfies EvmSpokeChainConfig,\n [NIBIRU_MAINNET_CHAIN_ID]: {\n chain: {\n name: 'Nibiru',\n id: NIBIRU_MAINNET_CHAIN_ID,\n type: 'EVM',\n },\n addresses: {\n assetManager: '0x6958a4CBFe11406E2a1c1d3a71A1971aD8B3b92F',\n connection: '0x772FFE538E45b2cDdFB5823041EC26C44815B9AB',\n },\n nativeToken: '0x0000000000000000000000000000000000000000' as const,\n bnUSD: '0x043fb7e23350Dd5b77dE5E228B528763DEcb9131',\n supportedTokens: {\n NIBI: {\n symbol: 'NIBI',\n name: 'Nibiru',\n decimals: 6,\n address: '0x0000000000000000000000000000000000000000',\n },\n bnUSD: {\n symbol: 'bnUSD',\n name: 'bnUSD',\n decimals: 18,\n address: '0x043fb7e23350Dd5b77dE5E228B528763DEcb9131',\n },\n },\n } as const satisfies EvmSpokeChainConfig,\n [ARBITRUM_MAINNET_CHAIN_ID]: {\n chain: {\n name: 'Arbitrum',\n id: ARBITRUM_MAINNET_CHAIN_ID,\n type: 'EVM',\n },\n addresses: {\n assetManager: '0x348BE44F63A458be9C1b13D6fD8e99048F297Bc3',\n connection: '0x4555aC13D7338D9E671584C1D118c06B2a3C88eD',\n },\n nativeToken: '0x0000000000000000000000000000000000000000' as const,\n bnUSD: '0xA256dd181C3f6E5eC68C6869f5D50a712d47212e',\n supportedTokens: {\n ETH: {\n symbol: 'ETH',\n name: 'Ethereum',\n decimals: 18,\n address: '0x0000000000000000000000000000000000000000',\n },\n bnUSD: {\n symbol: 'bnUSD',\n name: 'bnUSD',\n decimals: 18,\n address: '0xA256dd181C3f6E5eC68C6869f5D50a712d47212e',\n },\n WETH: {\n symbol: 'WETH',\n name: 'Wrapped Ether',\n decimals: 18,\n address: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',\n },\n wstETH: {\n symbol: 'wstETH',\n name: 'Wrapped stETH',\n decimals: 18,\n address: '0x5979D7b546E38E414F7E9822514be443A4800529',\n },\n weETH: {\n symbol: 'weETH',\n name: 'Wrapped eETH',\n decimals: 18,\n address: '0x35751007a407ca6FEFfE80b3cB397736D2cf4dbe',\n },\n tBTC: {\n symbol: 'tBTC',\n name: 'Arbitrum tBTC v2',\n decimals: 18,\n address: '0x6c84a8f1c29108F47a79964b5Fe888D4f4D0dE40',\n },\n WBTC: {\n symbol: 'WBTC',\n name: 'Wrapped BTC',\n decimals: 8,\n address: '0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f',\n },\n USDC: {\n symbol: 'USDC',\n name: 'USD Coin (USDC)',\n decimals: 6,\n address: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',\n },\n USDT: {\n symbol: 'USDT',\n name: 'TetherToken',\n decimals: 6,\n address: '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9',\n },\n } as const,\n } as const satisfies EvmSpokeChainConfig,\n [BASE_MAINNET_CHAIN_ID]: {\n chain: {\n name: 'BASE',\n id: BASE_MAINNET_CHAIN_ID,\n type: 'EVM',\n },\n addresses: {\n assetManager: '0x348BE44F63A458be9C1b13D6fD8e99048F297Bc3',\n connection: '0x4555aC13D7338D9E671584C1D118c06B2a3C88eD',\n },\n nativeToken: '0x0000000000000000000000000000000000000000' as const,\n bnUSD: '0xAcfab3F31C0a18559D78556BBf297EC29c6cf8aa',\n supportedTokens: {\n ETH: {\n symbol: 'ETH',\n name: 'Ethereum',\n decimals: 18,\n address: '0x0000000000000000000000000000000000000000',\n },\n bnUSD: {\n symbol: 'bnUSD',\n name: 'bnUSD',\n decimals: 18,\n address: '0xAcfab3F31C0a18559D78556BBf297EC29c6cf8aa',\n },\n weETH: {\n symbol: 'weETH',\n name: 'Wrapped eETH',\n decimals: 18,\n address: '0x04c0599ae5a44757c0af6f9ec3b93da8976c150a',\n },\n USDC: {\n symbol: 'USDC',\n name: 'USD Coin',\n decimals: 6,\n address: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',\n },\n wstETH: {\n symbol: 'wstETH',\n name: 'Wrapped stETH',\n decimals: 18,\n address: '0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452',\n },\n cbBTC: {\n symbol: 'cbBTC',\n name: 'Coinbase Wrapped BTC',\n decimals: 8,\n address: '0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf',\n },\n } as const,\n } as const satisfies EvmSpokeChainConfig,\n [OPTIMISM_MAINNET_CHAIN_ID]: {\n chain: {\n name: 'Optimism',\n id: OPTIMISM_MAINNET_CHAIN_ID,\n type: 'EVM',\n },\n addresses: {\n assetManager: '0x348BE44F63A458be9C1b13D6fD8e99048F297Bc3',\n connection: '0x4555aC13D7338D9E671584C1D118c06B2a3C88eD',\n },\n nativeToken: '0x0000000000000000000000000000000000000000' as const,\n bnUSD: '0xF4f7dC27c17470a26d0de9039Cf0EA5045F100E8',\n supportedTokens: {\n ETH: {\n symbol: 'ETH',\n name: 'Ethereum',\n decimals: 18,\n address: '0x0000000000000000000000000000000000000000',\n },\n bnUSD: {\n symbol: 'bnUSD',\n name: 'bnUSD',\n decimals: 18,\n address: '0xF4f7dC27c17470a26d0de9039Cf0EA5045F100E8',\n },\n USDC: {\n symbol: 'USDC',\n name: 'USD Coin',\n decimals: 6,\n address: '0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85',\n },\n wstETH: {\n symbol: 'wstETH',\n name: 'Wrapped stETH',\n decimals: 18,\n address: '0x1F32b1c2345538c0c6f582fCB022739c4A194Ebb',\n },\n weETH: {\n symbol: 'weETH',\n name: 'Wrapped eETH',\n decimals: 18,\n address: '0x5A7fACB970D094B6C7FF1df0eA68D99E6e73CBFF',\n },\n USDT: {\n symbol: 'USDT',\n name: 'Tether USD',\n decimals: 6,\n address: '0x94b008aA00579c1307B0EF2c499aD98a8ce58e58',\n },\n } as const,\n } as const satisfies EvmSpokeChainConfig,\n [BSC_MAINNET_CHAIN_ID]: {\n chain: {\n name: 'BSC',\n id: BSC_MAINNET_CHAIN_ID,\n type: 'EVM',\n },\n addresses: {\n assetManager: '0x348BE44F63A458be9C1b13D6fD8e99048F297Bc3',\n connection: '0x4555aC13D7338D9E671584C1D118c06B2a3C88eD',\n },\n nativeToken: '0x0000000000000000000000000000000000000000' as const,\n bnUSD: '0x8428FedC020737a5A2291F46cB1B80613eD71638',\n supportedTokens: {\n BNB: {\n symbol: 'BNB',\n name: 'BNB',\n decimals: 18,\n address: '0x0000000000000000000000000000000000000000',\n },\n bnUSD: {\n symbol: 'bnUSD',\n name: 'bnUSD',\n decimals: 18,\n address: '0x8428FedC020737a5A2291F46cB1B80613eD71638',\n },\n ETHB: {\n symbol: 'ETHB',\n name: 'Ethereum BSC',\n decimals: 18,\n address: '0x2170Ed0880ac9A755fd29B2688956BD959F933F8',\n },\n BTCB: {\n symbol: 'BTCB',\n name: 'Bitcoin BSC',\n decimals: 18,\n address: '0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c',\n },\n USDC: {\n symbol: 'USDC',\n name: 'USD Coin',\n decimals: 18,\n address: '0x8ac76a51cc950d9822d68b83fe1ad97b32cd580d',\n },\n },\n } as const satisfies EvmSpokeChainConfig,\n [POLYGON_MAINNET_CHAIN_ID]: {\n chain: {\n name: 'Polygon',\n id: POLYGON_MAINNET_CHAIN_ID,\n type: 'EVM',\n },\n addresses: {\n assetManager: '0x348BE44F63A458be9C1b13D6fD8e99048F297Bc3',\n connection: '0x4555aC13D7338D9E671584C1D118c06B2a3C88eD',\n },\n nativeToken: '0x0000000000000000000000000000000000000000' as const,\n bnUSD: '0x39E77f86C1B1f3fbAb362A82b49D2E86C09659B4',\n supportedTokens: {\n POL: {\n symbol: 'POL',\n name: 'Polygon',\n decimals: 18,\n address: '0x0000000000000000000000000000000000000000',\n },\n bnUSD: {\n symbol: 'bnUSD',\n name: 'bnUSD',\n decimals: 18,\n address: '0x39E77f86C1B1f3fbAb362A82b49D2E86C09659B4',\n },\n USDC: {\n symbol: 'USDC',\n name: 'USD Coin',\n decimals: 6,\n address: '0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359',\n },\n } as const,\n } as const satisfies EvmSpokeChainConfig,\n [INJECTIVE_MAINNET_CHAIN_ID]: {\n addresses: {\n assetManager: 'inj1dg6tm62uup53wn2kn97caeqfwt0sukx3qjk8rw',\n connection: 'inj1eexvfglsptxwfj9hft96xcnsdrvr7d7dalcm8w',\n rateLimit: 'inj1x8p2h56edcdrm9tzx7a7zkwe0l334klgrxpqyk',\n testToken: '',\n xTokenManager: '',\n },\n chain: {\n id: INJECTIVE_MAINNET_CHAIN_ID,\n name: 'Injective',\n type: 'INJECTIVE',\n },\n nativeToken: 'inj' as const,\n bnUSD: 'factory/inj1d036ftaatxpkqsu9hja8r24rv3v33chz3appxp/bnUSD',\n networkId: 'injective-1',\n supportedTokens: {\n INJ: {\n symbol: 'INJ',\n name: 'Injective',\n decimals: 18,\n address: 'inj',\n },\n bnUSD: {\n symbol: 'bnUSD',\n name: 'bnUSD',\n decimals: 18,\n address: 'factory/inj1d036ftaatxpkqsu9hja8r24rv3v33chz3appxp/bnUSD',\n },\n USDC: {\n symbol: 'USDC',\n name: 'USD Coin',\n decimals: 6,\n address: 'ibc/2CBC2EA121AE42563B08028466F37B600F2D7D4282342DE938283CC3FB2BC00E',\n },\n },\n gasPrice: '500000000inj',\n network: 'Mainnet',\n prefix: 'inj',\n isBrowser: false,\n rpcUrl: 'https://injective-rpc.publicnode.com:443',\n walletAddress: '',\n } as const satisfies CosmosSpokeChainConfig,\n [STELLAR_MAINNET_CHAIN_ID]: {\n addresses: {\n connection: 'CDFQDDPUPAM3XPGORHDOEFRNLMKOH3N3X6XTXNLSXJQXIU3RVCM3OPEP',\n assetManager: 'CCGF33A4CO6D3BXFEKPXVCFCZBK76I3AQOZK6KIKRPAWAZR3632WHCJ3',\n xTokenManager: '',\n rateLimit: 'CB6G3ULISTTBPXUN3BI6ADHQGWJEN7BPQINHL45TCB6TDFM5QWU24HAY',\n testToken: '',\n },\n supportedTokens: {\n bnUSD: {\n symbol: 'bnUSD',\n name: 'bnUSD',\n decimals: 7,\n address: 'CD6YBFFWMU2UJHX2NGRJ7RN76IJVTCC7MRA46DUBXNB7E6W7H7JRJ2CX',\n },\n XLM: {\n symbol: 'XLM',\n name: 'Stellar Lumens',\n decimals: 7,\n address: 'CAS3J7GYLGXMF6TDJBBYYSE3HQ6BBSMLNUQ34T6TZMYMW2EVH34XOWMA',\n },\n USDC: {\n symbol: 'USDC',\n name: 'USD Coin',\n decimals: 7,\n address: 'CCW67TSZV3SSS2HXMBQ5JFGCKJNXKZM7UQUWUZPUTHXSTZLEO7SJMI75',\n },\n },\n nativeToken: 'CAS3J7GYLGXMF6TDJBBYYSE3HQ6BBSMLNUQ34T6TZMYMW2EVH34XOWMA' as const,\n bnUSD: 'CD6YBFFWMU2UJHX2NGRJ7RN76IJVTCC7MRA46DUBXNB7E6W7H7JRJ2CX',\n rpc_url: 'https://rpc.ankr.com/stellar_soroban',\n chain: {\n name: 'soroban-mainnet',\n id: STELLAR_MAINNET_CHAIN_ID,\n type: 'STELLAR',\n },\n } as const satisfies StellarSpokeChainConfig,\n [SUI_MAINNET_CHAIN_ID]: {\n addresses: {\n connection:\n '0xf3b1e696a66d02cb776dc15aae73c68bc8f03adcb6ba0ec7f6332d9d90a6a3d2::connectionv3::0x3ee76d13909ac58ae13baab4c9be5a5142818d9a387aed641825e5d4356969bf',\n assetManager:\n '0x897f911a4b7691870a1a2513af7e85fdee8de275615c77068fd8b90b8e78c678::asset_manager::0xcb7346339340b7f8dea40fcafb70721dc2fcfa7e8626a89fd954d46c1f928b61',\n xTokenManager: '',\n rateLimit: '',\n testToken: '',\n },\n supportedTokens: {\n SUI: {\n symbol: 'SUI',\n name: 'SUI',\n decimals: 9,\n address: '0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI',\n },\n bnUSD: {\n symbol: 'bnUSD',\n name: 'bnUSD',\n decimals: 9,\n address: '0xff4de2b2b57dd7611d2812d231a467d007b702a101fd5c7ad3b278257cddb507::bnusd::BNUSD',\n },\n USDC: {\n symbol: 'USDC',\n name: 'USD Coin',\n decimals: 6,\n address: '0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC',\n },\n },\n nativeToken: '0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI' as const,\n bnUSD: '0xff4de2b2b57dd7611d2812d231a467d007b702a101fd5c7ad3b278257cddb507::bnusd::BNUSD',\n rpc_url: 'https://fullnode.mainnet.sui.io:443',\n chain: {\n name: 'Sui',\n id: SUI_MAINNET_CHAIN_ID,\n type: 'SUI',\n },\n } as const satisfies SuiSpokeChainConfig,\n [ICON_MAINNET_CHAIN_ID]: {\n addresses: {\n assetManager: 'cx1be33c283c7dc7617181d1b21a6a2309e71b1ee7',\n connection: 'cxe5cdf3b0f26967b0efc72d470d57bbf534268f94',\n rateLimit: 'cxbbdcea9e6757023a046067ba8daa3c4c50304358',\n },\n chain: {\n id: ICON_MAINNET_CHAIN_ID,\n name: 'ICON Mainnet',\n type: 'ICON',\n },\n supportedTokens: {\n ICX: {\n symbol: 'ICX',\n name: 'ICON',\n decimals: 18,\n address: 'cx0000000000000000000000000000000000000000',\n },\n wICX: {\n symbol: 'wICX',\n name: 'Wrapped ICX',\n decimals: 18,\n address: 'cx3975b43d260fb8ec802cef6e60c2f4d07486f11d',\n },\n bnUSD: {\n symbol: 'bnUSD',\n name: 'bnUSD',\n decimals: 18,\n address: 'cx88fd7df7ddff82f7cc735c871dc519838cb235bb',\n },\n } as const,\n nativeToken: 'cx0000000000000000000000000000000000000000' as const,\n bnUSD: 'cx88fd7df7ddff82f7cc735c871dc519838cb235bb',\n nid: '0x1',\n } as const satisfies IconSpokeChainConfig,\n} as const;\n\nexport const hubAssets: Record<\n SpokeChainId,\n Record<Address | string, { asset: Address; decimal: number; vault: Address; symbol: string; name: string }>\n> = {\n [SONIC_MAINNET_CHAIN_ID]: {\n [spokeChainConfig[SONIC_MAINNET_CHAIN_ID].nativeToken]: {\n asset: '0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38',\n decimal: 18,\n symbol: 'S',\n name: 'Sonic',\n vault: '0x62ecc3Eeb80a162c57624B3fF80313FE69f5203e',\n },\n [spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.wSonic.address]: {\n asset: '0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38',\n decimal: 18,\n symbol: 'wSonic',\n name: 'Sonic',\n vault: '0x62ecc3Eeb80a162c57624B3fF80313FE69f5203e',\n },\n [spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.WETH.address]: {\n asset: '0x50c42dEAcD8Fc9773493ED674b675bE577f2634b',\n decimal: 18,\n symbol: 'WETH',\n name: 'Wrapped Ethereum',\n vault: '0x4effB5813271699683C25c734F4daBc45B363709',\n },\n [spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.USDC.address]: {\n asset: '0x29219dd400f2Bf60E5a23d13Be72B486D4038894',\n decimal: 6,\n symbol: 'USDC ',\n name: 'USD Coin',\n vault: '0xAbbb91c0617090F0028BDC27597Cd0D038F3A833',\n },\n [spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.USDT.address]: {\n asset: '0x6047828dc181963ba44974801ff68e538da5eaf9',\n decimal: 6,\n symbol: 'USDT',\n name: 'Tether USD',\n vault: '0xbDf1F453FCB61424011BBDDCB96cFDB30f3Fe876',\n },\n },\n [AVALANCHE_MAINNET_CHAIN_ID]: {\n [spokeChainConfig[AVALANCHE_MAINNET_CHAIN_ID].nativeToken]: {\n asset: '0xc9e4f0B6195F389D9d2b639f2878B7674eB9D8cD',\n decimal: 18,\n symbol: 'AVAX',\n name: 'AVAX',\n vault: '0x14238D267557E9d799016ad635B53CD15935d290',\n },\n [spokeChainConfig[AVALANCHE_MAINNET_CHAIN_ID].supportedTokens.USDT.address]: {\n asset: '0x41Fd5c169e014e2A657B9de3553f7a7b735Fe47A',\n decimal: 6,\n symbol: 'USDT',\n name: 'Tether USD',\n vault: '0xbDf1F453FCB61424011BBDDCB96cFDB30f3Fe876',\n },\n [spokeChainConfig[AVALANCHE_MAINNET_CHAIN_ID].supportedTokens.USDC.address]: {\n asset: '0x41abF4B1559FF709Ef8150079BcB26DB1Fffd117',\n decimal: 6,\n symbol: 'USDC',\n name: 'USD Coin',\n vault: '0xAbbb91c0617090F0028BDC27597Cd0D038F3A833',\n },\n [spokeChainConfig[AVALANCHE_MAINNET_CHAIN_ID].bnUSD]: {\n asset: '0x289cDa1043b4Ce26BDCa3c12E534f56b24308A5B',\n decimal: 18,\n symbol: 'bnUSD',\n name: 'bnUSD',\n vault: '0xE801CA34E19aBCbFeA12025378D19c4FBE250131',\n },\n },\n [ARBITRUM_MAINNET_CHAIN_ID]: {\n [spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].nativeToken]: {\n asset: '0xdcd9578b51ef55239b6e68629d822a8d97c95b86',\n decimal: 18,\n symbol: 'ETH',\n name: 'Ethereum',\n vault: '0x4effB5813271699683C25c734F4daBc45B363709',\n },\n [spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.WBTC.address]: {\n asset: '0xfB0ACB1b2720B620935F50a6dd3F7FEA52b2FCBe',\n decimal: 8,\n symbol: 'WBTC',\n name: 'Wrapped Bitcoin',\n vault: '0x7A1A5555842Ad2D0eD274d09b5c4406a95799D5d',\n },\n [spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.weETH.address]: {\n asset: '0x08D5cf039De35627fD5C0f48B8AF4a1647a462E8',\n decimal: 18,\n symbol: 'weETH',\n name: 'Wrapped eETH',\n vault: '0x4effB5813271699683C25c734F4daBc45B363709',\n },\n [spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.wstETH.address]: {\n asset: '0x2D5A7837D68b0c2CC4b14C2af2a1F0Ef420DDDc5',\n decimal: 18,\n symbol: 'wstETH',\n name: 'Wrapped Staked Ethereum',\n vault: '0x4effB5813271699683C25c734F4daBc45B363709',\n },\n [spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.tBTC.address]: {\n asset: '0x96Fc8540736f1598b7E235e6dE8814062b3b5d3B',\n decimal: 18,\n symbol: 'tBTC',\n name: 'Arbitrum tBTC',\n vault: '0x7A1A5555842Ad2D0eD274d09b5c4406a95799D5d',\n },\n [spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.USDT.address]: {\n asset: '0x3C0a80C6a1110fC80309382b3989eC626c135eE9',\n decimal: 6,\n symbol: 'USDT',\n name: 'Tether USD',\n vault: '0xbDf1F453FCB61424011BBDDCB96cFDB30f3Fe876',\n },\n [spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.USDC.address]: {\n asset: '0xdB7BdA65c3a1C51D64dC4444e418684677334109',\n decimal: 6,\n symbol: 'USDC',\n name: 'USD Coin',\n vault: '0xAbbb91c0617090F0028BDC27597Cd0D038F3A833',\n },\n [spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].bnUSD]: {\n asset: '0x419cA9054E44E94ceAb52846eCdC3997439BBcA6',\n decimal: 18,\n symbol: 'bnUSD',\n name: 'bnUSD',\n vault: '0xE801CA34E19aBCbFeA12025378D19c4FBE250131',\n },\n },\n [BASE_MAINNET_CHAIN_ID]: {\n [spokeChainConfig[BASE_MAINNET_CHAIN_ID].nativeToken]: {\n asset: '0x70178089842be7f8e4726b33f0d1569db8021faa',\n decimal: 18,\n symbol: 'ETH',\n name: 'Ethereum',\n vault: '0x4effB5813271699683C25c734F4daBc45B363709',\n },\n [spokeChainConfig[BASE_MAINNET_CHAIN_ID].supportedTokens.cbBTC.address]: {\n asset: '0x2803a23a3BA6b09e57D1c71deC0D9eFdBB00A27F',\n decimal: 8,\n symbol: 'cbBTC',\n name: 'Coinbase Wrapped BTC',\n vault: '0x7A1A5555842Ad2D0eD274d09b5c4406a95799D5d',\n },\n [spokeChainConfig[BASE_MAINNET_CHAIN_ID].supportedTokens.USDC.address]: {\n asset: '0x72E852545B024ddCbc5b70C1bCBDAA025164259C',\n decimal: 6,\n symbol: 'USDC',\n name: 'USD Coin',\n vault: '0xAbbb91c0617090F0028BDC27597Cd0D038F3A833',\n },\n [spokeChainConfig[BASE_MAINNET_CHAIN_ID].bnUSD]: {\n asset: '0xDF5639D91359866f266b56D60d98edE9fEEDd100',\n decimal: 18,\n symbol: 'bnUSD',\n name: 'bnUSD',\n vault: '0xE801CA34E19aBCbFeA12025378D19c4FBE250131',\n },\n [spokeChainConfig[BASE_MAINNET_CHAIN_ID].supportedTokens.weETH.address]: {\n asset: '0x55e0ad45eb97493b3045eee417fb6726cb85dfd4',\n decimal: 18,\n symbol: 'weETH',\n name: 'Wrapped eETH',\n vault: '0x4effB5813271699683C25c734F4daBc45B363709',\n },\n [spokeChainConfig[BASE_MAINNET_CHAIN_ID].supportedTokens.wstETH.address]: {\n asset: '0x494aaeaefdf5964d4ed400174e8c5b98c00957aa',\n decimal: 18,\n symbol: 'wstETH',\n name: 'Wrapped Staked Ethereum',\n vault: '0x4effB5813271699683C25c734F4daBc45B363709',\n },\n },\n [OPTIMISM_MAINNET_CHAIN_ID]: {\n [spokeChainConfig[OPTIMISM_MAINNET_CHAIN_ID].nativeToken]: {\n asset: '0xad332860dd3b6f0e63f4f66e9457900917ac78cd',\n decimal: 18,\n symbol: 'ETH',\n name: 'Ethereum',\n vault: '0x4effB5813271699683C25c734F4daBc45B363709',\n },\n [spokeChainConfig[OPTIMISM_MAINNET_CHAIN_ID].bnUSD]: {\n asset: '0x238384AE2b4F0EC189ecB5031859bA306B2679c5',\n decimal: 18,\n symbol: 'bnUSD',\n name: 'bnUSD',\n vault: '0xE801CA34E19aBCbFeA12025378D19c4FBE250131',\n },\n [spokeChainConfig[OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.USDC.address]: {\n asset: '0xb7C213CbD24967dE9838fa014668FDDB338f724B',\n decimal: 6,\n symbol: 'USDC',\n name: 'USD Coin',\n vault: '0xAbbb91c0617090F0028BDC27597Cd0D038F3A833',\n },\n [spokeChainConfig[OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.wstETH.address]: {\n asset: '0x61e26f611090CdC6bc79A7Bf156b0fD10f1fC212',\n decimal: 18,\n symbol: 'wstETH',\n name: 'Wrapped Staked Ethereum',\n vault: '0x4effB5813271699683C25c734F4daBc45B363709',\n },\n [spokeChainConfig[OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.weETH.address]: {\n asset: '0xE121c0Dc2B33c00ff31ee3D902D248cc3f19Ea50',\n decimal: 18,\n symbol: 'weETH',\n name: 'Wrapped eETH',\n vault: '0x4effB5813271699683C25c734F4daBc45B363709',\n },\n [spokeChainConfig[OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.USDT.address]: {\n asset: '0xc168067d95109003805aC865ae556e8476DC69bc',\n decimal: 6,\n symbol: 'USDT',\n name: 'Tether USD',\n vault: '0xbDf1F453FCB61424011BBDDCB96cFDB30f3Fe876',\n },\n },\n [NIBIRU_MAINNET_CHAIN_ID]: {\n [spokeChainConfig[NIBIRU_MAINNET_CHAIN_ID].nativeToken]: {\n asset: '0xe0064414c2c1a636a9424C7a17D86fbF7FD3f190',\n decimal: 18,\n symbol: 'NIBI',\n name: 'Nibiru',\n vault: '0xc6c85287a8b173A509C2F198bB719A8a5a2d0C68',\n },\n [spokeChainConfig[NIBIRU_MAINNET_CHAIN_ID].bnUSD]: {\n asset: '0x11b93C162aABFfD026539bb3B9F9eC22c8b7ef8a',\n decimal: 18,\n symbol: 'bnUSD',\n name: 'bnUSD',\n vault: '0xE801CA34E19aBCbFeA12025378D19c4FBE250131',\n },\n },\n [BSC_MAINNET_CHAIN_ID]: {\n [spokeChainConfig[BSC_MAINNET_CHAIN_ID].nativeToken]: {\n asset: '0x13b70564b1ec12876b20fab5d1bb630311312f4f',\n decimal: 18,\n symbol: 'BNB',\n name: 'BNB',\n vault: '0x40Cd41b35DB9e5109ae7E54b44De8625dB320E6b',\n },\n [spokeChainConfig[BSC_MAINNET_CHAIN_ID].supportedTokens.ETHB.address]: {\n asset: '0x57fC2aC5701e463ae261AdBd6C99FBeB48Ce5293',\n decimal: 18,\n symbol: 'ETHB',\n name: 'Wrapped Ethereum',\n vault: '0x4effB5813271699683C25c734F4daBc45B363709',\n },\n [spokeChainConfig[BSC_MAINNET_CHAIN_ID].supportedTokens.BTCB.address]: {\n asset: '0xD8A24c71FEa5bB81c66C01e532dE7d9B11e13905',\n decimal: 18,\n symbol: 'BTCB',\n name: 'Wrapped Bitcoin',\n vault: '0x7A1A5555842Ad2D0eD274d09b5c4406a95799D5d',\n },\n [spokeChainConfig[BSC_MAINNET_CHAIN_ID].bnUSD]: {\n asset: '0x5Ce6C1c51ff762cF3acD21396257046f694168b6',\n decimal: 18,\n symbol: 'bnUSD',\n name: 'bnUSD',\n vault: '0xE801CA34E19aBCbFeA12025378D19c4FBE250131',\n },\n [spokeChainConfig[BSC_MAINNET_CHAIN_ID].supportedTokens.USDC.address]: {\n asset: '0x9d58508ad10d34048a11640735ca5075bba07b35',\n decimal: 18,\n symbol: 'USDC',\n name: 'USD Coin',\n vault: '0xAbbb91c0617090F0028BDC27597Cd0D038F3A833',\n },\n },\n [POLYGON_MAINNET_CHAIN_ID]: {\n [spokeChainConfig[POLYGON_MAINNET_CHAIN_ID].nativeToken]: {\n asset: '0x9ee17486571917837210824b0d4cadfe3b324d12',\n decimal: 18,\n symbol: 'MATIC',\n name: 'Polygon',\n vault: '0x0000000000000000000000000000000000000000',\n },\n [spokeChainConfig[POLYGON_MAINNET_CHAIN_ID].bnUSD]: {\n asset: '0x18f85f9E80ff9496EeBD5979a051AF16Ce751567',\n decimal: 18,\n symbol: 'bnUSD',\n name: 'bnUSD',\n vault: '0xE801CA34E19aBCbFeA12025378D19c4FBE250131',\n },\n [spokeChainConfig[POLYGON_MAINNET_CHAIN_ID].supportedTokens.USDC.address]: {\n asset: '0xa36893ba308b332FDEbfa95916D1dF3a2e3CF8B3',\n decimal: 6,\n symbol: 'USDC',\n name: 'USD Coin',\n vault: '0xAbbb91c0617090F0028BDC27597Cd0D038F3A833',\n },\n },\n [INJECTIVE_MAINNET_CHAIN_ID]: {\n [spokeChainConfig[INJECTIVE_MAINNET_CHAIN_ID].supportedTokens.INJ.address]: {\n asset: '0xd375590b4955f6ea5623f799153f9b787a3bd319',\n decimal: 18,\n symbol: 'INJ',\n name: 'Injective',\n vault: '0x1f22279C89B213944b7Ea41daCB0a868DdCDFd13',\n },\n [spokeChainConfig[INJECTIVE_MAINNET_CHAIN_ID].bnUSD]: {\n asset: '0x69425FFb14704124A58d6F69d510f74A59D9a5bC',\n decimal: 18,\n symbol: 'bnUSD',\n name: 'bnUSD',\n vault: '0xE801CA34E19aBCbFeA12025378D19c4FBE250131',\n },\n [spokeChainConfig[INJECTIVE_MAINNET_CHAIN_ID].supportedTokens.USDC.address]: {\n asset: '0x4bc1211faa06fb50ff61a70331f56167ae511057',\n decimal: 6,\n symbol: 'USDC',\n name: 'USD Coin',\n vault: '0xAbbb91c0617090F0028BDC27597Cd0D038F3A833',\n },\n },\n [STELLAR_MAINNET_CHAIN_ID]: {\n [spokeChainConfig[STELLAR_MAINNET_CHAIN_ID].nativeToken]: {\n asset: '0x8ac68af223907fb1b893086601a3d99e00f2fa9d',\n decimal: 7,\n symbol: 'XLM',\n name: 'Stellar Lumens',\n vault: '0x6BC8C37cba91F76E68C9e6d689A9C21E4d32079B',\n },\n [spokeChainConfig[STELLAR_MAINNET_CHAIN_ID].bnUSD]: {\n asset: '0x23225Ab8E63FCa4070296678cb46566d57E1BBe3',\n decimal: 7,\n symbol: 'bnUSD',\n name: 'bnUSD',\n vault: '0xE801CA34E19aBCbFeA12025378D19c4FBE250131',\n },\n [spokeChainConfig[STELLAR_MAINNET_CHAIN_ID].supportedTokens.USDC.address]: {\n asset: '0x348007B53F25A9A857aB8eA81ec9E3CCBCf440f2',\n decimal: 7,\n symbol: 'USDC',\n name: 'USD Coin',\n vault: '0xAbbb91c0617090F0028BDC27597Cd0D038F3A833',\n },\n },\n [SUI_MAINNET_CHAIN_ID]: {\n [spokeChainConfig[SUI_MAINNET_CHAIN_ID].nativeToken]: {\n asset: '0x4676b2a551b25c04e235553c1c81019337384673',\n decimal: 9,\n symbol: 'SUI',\n name: 'Sui',\n vault: '0xdc5B4b00F98347E95b9F94911213DAB4C687e1e3',\n },\n [spokeChainConfig[SUI_MAINNET_CHAIN_ID].bnUSD]: {\n asset: '0xDf23097B9AEb917Bf8fb70e99b6c528fffA35364',\n decimal: 9,\n symbol: 'bnUSD',\n name: 'bnUSD',\n vault: '0xE801CA34E19aBCbFeA12025378D19c4FBE250131',\n },\n [spokeChainConfig[SUI_MAINNET_CHAIN_ID].supportedTokens.USDC.address]: {\n asset: '0x5635369c8a29A081d26C2e9e28012FCa548BA0Cb',\n decimal: 6,\n symbol: 'USDC',\n name: 'USD Coin',\n vault: '0xdc5B4b00F98347E95b9F94911213DAB4C687e1e3',\n },\n },\n [SOLANA_MAINNET_CHAIN_ID]: {\n [spokeChainConfig[SOLANA_MAINNET_CHAIN_ID].supportedTokens.SOL.address]: {\n asset: '0x0c09e69a4528945de6d16c7e469dea6996fdf636',\n decimal: 9,\n symbol: 'USDC',\n name: 'USD Coin',\n vault: '0xdEa692287E2cE8Cb08FA52917Be0F16b1DACDC87',\n },\n [spokeChainConfig[SOLANA_MAINNET_CHAIN_ID].bnUSD]: {\n asset: '0x14C65b1CDc0B821569081b1F77342dA0D0CbF439',\n decimal: 9,\n symbol: 'bnUSD',\n name: 'bnUSD',\n vault: '0xE801CA34E19aBCbFeA12025378D19c4FBE250131',\n },\n [spokeChainConfig[SOLANA_MAINNET_CHAIN_ID].supportedTokens.USDC.address]: {\n asset: '0x0c09e69a4528945de6d16c7e469dea6996fdf636',\n decimal: 6,\n symbol: 'USDC',\n name: 'USD Coin',\n vault: '0xdEa692287E2cE8Cb08FA52917Be0F16b1DACDC87',\n },\n },\n [ICON_MAINNET_CHAIN_ID]: {\n [spokeChainConfig[ICON_MAINNET_CHAIN_ID].nativeToken]: {\n asset: '0xb66cB7D841272AF6BaA8b8119007EdEE35d2C24F',\n decimal: 18,\n symbol: 'ICX',\n name: 'ICON',\n vault: '0x0000000000000000000000000000000000000000',\n },\n [spokeChainConfig[ICON_MAINNET_CHAIN_ID].bnUSD]: {\n asset: '0x654dddf32a9a2ac53f5fb54bf1e93f66791f8047',\n decimal: 18,\n symbol: 'bnUSD',\n name: 'bnUSD',\n vault: '0x9D4b663Eb075d2a1C7B8eaEFB9eCCC0510388B51',\n },\n },\n} as const;\n\nexport const DEFAULT_RELAYER_API_ENDPOINT = 'https://xcall-relay.nw.iconblockchain.xyz';\n\nconst solverConfig = {\n [SONIC_MAINNET_CHAIN_ID]: {\n intentsContract: '0x6382D6ccD780758C5e8A6123c33ee8F4472F96ef',\n solverApiEndpoint: 'https://staging-new-world.iconblockchain.xyz', // TODO replace with mainnet\n } satisfies SolverConfig,\n};\n\nexport const getSolverConfig = (chainId: HubChainId): SolverConfig => solverConfig[chainId];\n\n// currently supported spoke chain tokens for solver\nconst solverSupportedTokens: Record<SpokeChainId, readonly Token[]> = {\n [SONIC_MAINNET_CHAIN_ID]: [\n spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.WETH,\n spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.USDC,\n spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.USDT,\n spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.wSonic,\n ] as const satisfies Token[],\n [AVALANCHE_MAINNET_CHAIN_ID]: [\n spokeChainConfig[AVALANCHE_MAINNET_CHAIN_ID].supportedTokens.AVAX,\n spokeChainConfig[AVALANCHE_MAINNET_CHAIN_ID].supportedTokens.USDT,\n spokeChainConfig[AVALANCHE_MAINNET_CHAIN_ID].supportedTokens.USDC,\n ] as const satisfies Token[],\n [ARBITRUM_MAINNET_CHAIN_ID]: [\n spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.ETH,\n spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.WBTC,\n spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.weETH,\n spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.wstETH,\n spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.tBTC,\n spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.USDC,\n spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.USDT,\n ] as const satisfies Token[],\n [BASE_MAINNET_CHAIN_ID]: [\n spokeChainConfig[BASE_MAINNET_CHAIN_ID].supportedTokens.ETH,\n spokeChainConfig[BASE_MAINNET_CHAIN_ID].supportedTokens.weETH,\n spokeChainConfig[BASE_MAINNET_CHAIN_ID].supportedTokens.USDC,\n spokeChainConfig[BASE_MAINNET_CHAIN_ID].supportedTokens.wstETH,\n spokeChainConfig[BASE_MAINNET_CHAIN_ID].supportedTokens.cbBTC,\n ] as const satisfies Token[],\n [OPTIMISM_MAINNET_CHAIN_ID]: [\n spokeChainConfig[OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.ETH,\n spokeChainConfig[OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.USDC,\n spokeChainConfig[OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.wstETH,\n spokeChainConfig[OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.weETH,\n spokeChainConfig[OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.USDT,\n ] as const satisfies Token[],\n [POLYGON_MAINNET_CHAIN_ID]: [\n spokeChainConfig[POLYGON_MAINNET_CHAIN_ID].supportedTokens.POL,\n spokeChainConfig[POLYGON_MAINNET_CHAIN_ID].supportedTokens.USDC,\n ] as const satisfies Token[],\n [BSC_MAINNET_CHAIN_ID]: [\n spokeChainConfig[BSC_MAINNET_CHAIN_ID].supportedTokens.BNB,\n spokeChainConfig[BSC_MAINNET_CHAIN_ID].supportedTokens.ETHB,\n spokeChainConfig[BSC_MAINNET_CHAIN_ID].supportedTokens.BTCB,\n spokeChainConfig[BSC_MAINNET_CHAIN_ID].supportedTokens.USDC,\n ] as const satisfies Token[],\n [SOLANA_MAINNET_CHAIN_ID]: [\n spokeChainConfig[SOLANA_MAINNET_CHAIN_ID].supportedTokens.SOL,\n spokeChainConfig[SOLANA_MAINNET_CHAIN_ID].supportedTokens.USDC,\n ] as const satisfies Token[],\n [ICON_MAINNET_CHAIN_ID]: [\n spokeChainConfig[ICON_MAINNET_CHAIN_ID].supportedTokens.ICX,\n spokeChainConfig[ICON_MAINNET_CHAIN_ID].supportedTokens.wICX,\n spokeChainConfig[ICON_MAINNET_CHAIN_ID].supportedTokens.bnUSD,\n ] as const satisfies Token[],\n [STELLAR_MAINNET_CHAIN_ID]: [\n spokeChainConfig[STELLAR_MAINNET_CHAIN_ID].supportedTokens.XLM,\n spokeChainConfig[STELLAR_MAINNET_CHAIN_ID].supportedTokens.USDC,\n ] as const satisfies Token[],\n [SUI_MAINNET_CHAIN_ID]: [\n spokeChainConfig[SUI_MAINNET_CHAIN_ID].supportedTokens.SUI,\n spokeChainConfig[SUI_MAINNET_CHAIN_ID].supportedTokens.USDC,\n ] as const satisfies Token[],\n [INJECTIVE_MAINNET_CHAIN_ID]: [\n spokeChainConfig[INJECTIVE_MAINNET_CHAIN_ID].supportedTokens.INJ,\n spokeChainConfig[INJECTIVE_MAINNET_CHAIN_ID].supportedTokens.USDC,\n ] as const satisfies Token[],\n [NIBIRU_MAINNET_CHAIN_ID]: [] as const satisfies Token[],\n} as const;\n\n// get supported spoke chain tokens for solver\nexport const getSupportedSolverTokens = (chainId: SpokeChainId): readonly Token[] => solverSupportedTokens[chainId];\n\n// check if token address for given spoke chain id is supported\nexport const isSolverSupportedToken = (chainId: SpokeChainId, token: string): boolean =>\n solverSupportedTokens[chainId].some(t => t.address.toLowerCase() === token.toLowerCase());\n\nconst moneyMarketConfig = {\n [SONIC_MAINNET_CHAIN_ID]: {\n lendingPool: '0x553434896D39F867761859D0FE7189d2Af70514E',\n uiPoolDataProvider: '0xC04d746C38f1E51C8b3A3E2730250bbAC2F271bf',\n poolAddressesProvider: '0x036aDe0aBAA4c82445Cb7597f2d6d6130C118c7b',\n bnUSD: '0x94dC79ce9C515ba4AE4D195da8E6AB86c69BFc38',\n bnUSDVault: '0xE801CA34E19aBCbFeA12025378D19c4FBE250131',\n } satisfies MoneyMarketConfig,\n} as const;\n\nexport const getMoneyMarketConfig = (chainId: HubChainId): MoneyMarketConfig => moneyMarketConfig[chainId];\n\n// currently supported spoke chain tokens for money market\nconst moneyMarketSupportedTokens = {\n [AVALANCHE_MAINNET_CHAIN_ID]: [\n spokeChainConfig[AVALANCHE_MAINNET_CHAIN_ID].supportedTokens.AVAX,\n spokeChainConfig[AVALANCHE_MAINNET_CHAIN_ID].supportedTokens.USDT,\n spokeChainConfig[AVALANCHE_MAINNET_CHAIN_ID].supportedTokens.USDC,\n spokeChainConfig[AVALANCHE_MAINNET_CHAIN_ID].supportedTokens.bnUSD,\n ] as const,\n [ARBITRUM_MAINNET_CHAIN_ID]: [\n spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.ETH,\n spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.bnUSD,\n spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.WBTC,\n spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.weETH,\n spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.wstETH,\n spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.tBTC,\n spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.USDT,\n spokeChainConfig[ARBITRUM_MAINNET_CHAIN_ID].supportedTokens.USDC,\n ] as const,\n [BASE_MAINNET_CHAIN_ID]: [\n spokeChainConfig[BASE_MAINNET_CHAIN_ID].supportedTokens.ETH,\n spokeChainConfig[BASE_MAINNET_CHAIN_ID].supportedTokens.bnUSD,\n spokeChainConfig[BASE_MAINNET_CHAIN_ID].supportedTokens.weETH,\n spokeChainConfig[BASE_MAINNET_CHAIN_ID].supportedTokens.USDC,\n spokeChainConfig[BASE_MAINNET_CHAIN_ID].supportedTokens.wstETH,\n spokeChainConfig[BASE_MAINNET_CHAIN_ID].supportedTokens.cbBTC,\n ] as const,\n [OPTIMISM_MAINNET_CHAIN_ID]: [\n spokeChainConfig[OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.ETH,\n spokeChainConfig[OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.bnUSD,\n spokeChainConfig[OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.USDC,\n spokeChainConfig[OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.wstETH,\n spokeChainConfig[OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.weETH,\n spokeChainConfig[OPTIMISM_MAINNET_CHAIN_ID].supportedTokens.USDT,\n ] as const,\n [POLYGON_MAINNET_CHAIN_ID]: [\n spokeChainConfig[POLYGON_MAINNET_CHAIN_ID].supportedTokens.POL,\n spokeChainConfig[POLYGON_MAINNET_CHAIN_ID].supportedTokens.bnUSD,\n spokeChainConfig[POLYGON_MAINNET_CHAIN_ID].supportedTokens.USDC,\n ] as const,\n [BSC_MAINNET_CHAIN_ID]: [\n spokeChainConfig[BSC_MAINNET_CHAIN_ID].supportedTokens.BNB,\n spokeChainConfig[BSC_MAINNET_CHAIN_ID].supportedTokens.ETHB,\n spokeChainConfig[BSC_MAINNET_CHAIN_ID].supportedTokens.BTCB,\n spokeChainConfig[BSC_MAINNET_CHAIN_ID].supportedTokens.bnUSD,\n ] as const,\n [SOLANA_MAINNET_CHAIN_ID]: [\n spokeChainConfig[SOLANA_MAINNET_CHAIN_ID].supportedTokens.SOL,\n spokeChainConfig[SOLANA_MAINNET_CHAIN_ID].supportedTokens.bnUSD,\n ] as const,\n [ICON_MAINNET_CHAIN_ID]: [\n spokeChainConfig[ICON_MAINNET_CHAIN_ID].supportedTokens.ICX,\n spokeChainConfig[ICON_MAINNET_CHAIN_ID].supportedTokens.bnUSD,\n spokeChainConfig[ICON_MAINNET_CHAIN_ID].supportedTokens.wICX,\n ] as const,\n [STELLAR_MAINNET_CHAIN_ID]: [\n spokeChainConfig[STELLAR_MAINNET_CHAIN_ID].supportedTokens.XLM,\n spokeChainConfig[STELLAR_MAINNET_CHAIN_ID].supportedTokens.bnUSD,\n ] as const,\n [SUI_MAINNET_CHAIN_ID]: [\n spokeChainConfig[SUI_MAINNET_CHAIN_ID].supportedTokens.SUI,\n spokeChainConfig[SUI_MAINNET_CHAIN_ID].supportedTokens.bnUSD,\n ] as const,\n [INJECTIVE_MAINNET_CHAIN_ID]: [\n spokeChainConfig[INJECTIVE_MAINNET_CHAIN_ID].supportedTokens.INJ,\n spokeChainConfig[INJECTIVE_MAINNET_CHAIN_ID].supportedTokens.bnUSD,\n ] as const,\n [NIBIRU_MAINNET_CHAIN_ID]: [] as const,\n [SONIC_MAINNET_CHAIN_ID]: [\n spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.Sonic,\n spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.WETH,\n spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.USDC,\n spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.USDT,\n spokeChainConfig[SONIC_MAINNET_CHAIN_ID].supportedTokens.wSonic,\n ] as const,\n} as const satisfies Record<SpokeChainId, Readonly<Token[]>>;\n\nexport const isMoneyMarketSupportedToken = (chainId: SpokeChainId, token: string): boolean =>\n moneyMarketSupportedTokens[chainId].some(t => t.address.toLowerCase() === token.toLowerCase());\n\n// get supported spoke chain tokens for money market\nexport const getSupportedMoneyMarketTokens = (chainId: SpokeChainId): readonly Token[] =>\n moneyMarketSupportedTokens[chainId];\n\nexport const HubVaultSymbols = [\n 'sodaAVAX',\n 'sodaBNB',\n 'sodaETH',\n 'sodaBTC',\n 'sodaSUI',\n 'sodaINJ',\n 'sodaXLM',\n 'sodaSOL',\n] as const;\n\nexport type HubVaultSymbol = (typeof HubVaultSymbols)[number];\n\nexport const hubVaults: Record<HubVaultSymbol, VaultType> = {\n sodaAVAX: {\n // SODA AVAX vault\n address: '0x14238d267557e9d799016ad635b53cd15935d290',\n reserves: [\n // hub asset addresses contained in the vault\n '0xc9e4f0b6195f389d9d2b639f2878b7674eb9d8cd', // AvalancheAVAX hub asset\n ] as const,\n },\n sodaBNB: {\n // SODA BNB vault\n address: '0x40cd41b35db9e5109ae7e54b44de8625db320e6b',\n reserves: [\n // hub asset addresses contained in the vault\n '0x13b70564b1ec12876b20fab5d1bb630311312f4f', // BSC BNB hub asset\n ] as const,\n },\n sodaETH: {\n // SODA ETH vault\n address: '0x4effb5813271699683c25c734f4dabc45b363709',\n reserves: [\n // hub asset addresses contained in the vault\n '0x70178089842be7f8e4726b33f0d1569db8021faa', // BASE ETH hub asset\n '0xad332860dd3b6f0e63f4f66e9457900917ac78cd', // Optimism ETH hub asset\n '0xdcd9578b51ef55239b6e68629d822a8d97c95b86', // Arbitrum ETH hub asset\n '0x57fc2ac5701e463ae261adbd6c99fbeb48ce5293', // BSC ETH hub asset\n ] as const,\n },\n sodaBTC: {\n // SODA BTC vault\n address: '0x7a1a5555842ad2d0ed274d09b5c4406a95799d5d',\n reserves: [\n // hub asset addresses contained in the vault\n '0x2803a23a3ba6b09e57d1c71dec0d9efdbb00a27f', // BASE cbBTC hub asset,\n '0xfb0acb1b2720b620935f50a6dd3f7fea52b2fcbe', // Arbitrum wBTC hub asset\n '0x96fc8540736f1598b7e235e6de8814062b3b5d3b', // Arbitrum tBTC hub asset,\n '0xd8a24c71fea5bb81c66c01e532de7d9b11e13905', // BSC BTCB hub asset\n ] as const,\n },\n sodaSUI: {\n // SODA SUI vault\n address: '0xdc5b4b00f98347e95b9f94911213dab4c687e1e3',\n reserves: [\n // hub asset addresses contained in the vault\n '0x4676b2a551b25c04e235553c1c81019337384673', // SUI SUI hub asset\n ] as const,\n },\n sodaINJ: {\n // SODA INJ vault\n address: '0x1f22279c89b213944b7ea41dacb0a868ddcdfd13',\n reserves: [\n // hub asset addresses contained in the vault\n '0xd375590b4955f6ea5623f799153f9b787a3bd319', // Injective INJ hub asset\n ] as const,\n },\n sodaXLM: {\n // SODA XLM vault\n address: '0x6bc8c37cba91f76e68c9e6d689a9c21e4d32079b',\n reserves: [\n // hub asset addresses contained in the vault\n '0x8ac68af223907fb1b893086601a3d99e00f2fa9d', // Stellar XLM hub asset\n ] as const,\n },\n sodaSOL: {\n // SODA SOL vault\n address: '0xdea692287e2ce8cb08fa52917be0f16b1dacdc87',\n reserves: [\n // hub asset addresses contained in the vault\n '0x0c09e69a4528945de6d16c7e469dea6996fdf636', // Solana SOL hub asset\n ] as const,\n },\n} as const;\n\nexport const hubVaultsAddressSet = new Set<Address>(\n Object.values(hubVaults).map(vault => vault.address.toLowerCase() as Address),\n);\n\n// all hub assets contained in the money market reserves (supply / borrow assets)\nexport const moneyMarketReserveHubAssetsSet = new Set<Address>(\n Object.values(hubVaults).flatMap(vault => vault.reserves.map(reserve => reserve.toLowerCase() as Address)),\n);\n\nexport const isMoneyMarketReserveHubAsset = (hubAsset: Address): boolean =>\n moneyMarketReserveHubAssetsSet.has(hubAsset.toLowerCase() as Address);\n\nexport const moneyMarketReserveAssets = [\n hubVaults['sodaAVAX'].address,\n hubVaults['sodaBNB'].address,\n hubVaults['sodaETH'].address,\n hubVaults['sodaBTC'].address,\n hubVaults['sodaSUI'].address,\n hubVaults['sodaINJ'].address,\n hubVaults['sodaXLM'].address,\n hubVaults['sodaSOL'].address,\n getMoneyMarketConfig(SONIC_MAINNET_CHAIN_ID).bnUSDVault,\n] as const;\n\nexport const isMoneyMarketReserveAsset = (asset: Address): boolean =>\n moneyMarketReserveAssets.map(a => a.toLowerCase()).includes(asset.toLowerCase());\n\nexport const originalAssetTohubAssetMap: Map<SpokeChainId, Map<OriginalAssetAddress, HubAssetInfo>> = new Map(\n Object.entries(hubAssets).map(([chainId, assets]) => [\n chainId as SpokeChainId,\n new Map(Object.entries(assets).map(([asset, info]) => [asset.toLowerCase(), info])),\n ]),\n);\nexport const hubAssetToOriginalAssetMap: Map<SpokeChainId, Map<Address, OriginalAssetAddress>> = new Map(\n Object.entries(hubAssets).map(([chainId, assets]) => [\n chainId as SpokeChainId,\n new Map(Object.entries(assets).map(([asset, info]) => [info.asset.toLowerCase() as Address, asset])),\n ]),\n);\nexport const chainIdToHubAssetsMap: Map<SpokeChainId, Map<Address, HubAssetInfo>> = new Map(\n Object.entries(hubAssets).map(([chainId, assets]) => [\n chainId as SpokeChainId,\n new Map(Object.entries(assets).map(([, info]) => [info.asset.toLowerCase() as Address, info])),\n ]),\n);\nexport const supportedHubAssets: Set<Address> = new Set(\n Object.values(hubAssets).flatMap(assets => Object.values(assets).map(info => info.asset.toLowerCase() as Address)),\n);\nexport const spokeChainIdsSet = new Set(SPOKE_CHAIN_IDS);\n\nexport const getHubAssetInfo = (chainId: SpokeChainId, asset: OriginalAssetAddress): HubAssetInfo | undefined =>\n originalAssetTohubAssetMap.get(chainId)?.get(asset.toLowerCase());\nexport const isValidOriginalAssetAddress = (chainId: SpokeChainId, asset: OriginalAssetAddress): boolean =>\n originalAssetTohubAssetMap.get(chainId)?.has(asset.toLowerCase()) ?? false;\nexport const getOriginalAssetAddress = (chainId: SpokeChainId, hubAsset: Address): OriginalAssetAddress | undefined =>\n hubAssetToOriginalAssetMap.get(chainId)?.get(hubAsset.toLowerCase() as Address);\nexport const isValidHubAsset = (hubAsset: Address): boolean =>\n supportedHubAssets.has(hubAsset.toLowerCase() as Address);\nexport const isValidChainHubAsset = (chainId: SpokeChainId, hubAsset: Address): boolean =>\n chainIdToHubAssetsMap.get(chainId)?.has(hubAsset.toLowerCase() as Address) ?? false;\nexport const isValidSpokeChainId = (chainId: SpokeChainId): boolean => spokeChainIdsSet.has(chainId);\nexport const isValidIntentRelayChainId = (chainId: bigint): boolean =>\n Object.values(INTENT_RELAY_CHAIN_IDS).some(id => id === chainId);\nexport const supportedHubChains: HubChainId[] = Object.keys(hubChainConfig) as HubChainId[];\nexport const supportedSpokeChains: SpokeChainId[] = Object.keys(spokeChainConfig) as SpokeChainId[];\nexport const intentRelayChainIdToSpokeChainIdMap: Map<IntentRelayChainId, SpokeChainId> = new Map(\n Object.entries(ChainIdToIntentRelayChainId).map(([chainId, intentRelayChainId]) => [\n intentRelayChainId,\n chainId as SpokeChainId,\n ]),\n);\nexport const supportedTokensPerChain: Map<SpokeChainId, readonly Token[]> = new Map(\n Object.entries(spokeChainConfig).map(([chainId, config]) => [\n chainId as SpokeChainId,\n Object.values(config.supportedTokens),\n ]),\n);\n\nexport const getSpokeChainIdFromIntentRelayChainId = (intentRelayChainId: IntentRelayChainId): SpokeChainId => {\n const spokeChainId = intentRelayChainIdToSpokeChainIdMap.get(intentRelayChainId);\n if (!spokeChainId) {\n throw new Error(`Invalid intent relay chain id: ${intentRelayChainId}`);\n }\n return spokeChainId;\n};\nexport const isNativeToken = (chainId: SpokeChainId, token: Token | string): boolean => {\n if (typeof token === 'string') {\n return token.toLowerCase() === spokeChainConfig[chainId].nativeToken.toLowerCase();\n }\n\n return token.address.toLowerCase() === spokeChainConfig[chainId].nativeToken.toLowerCase();\n};\n","import type { ICWWalletProvider, CWExecuteResponse } from '@sodax/types';\n\nexport interface TokenInfo {\n name: string;\n symbol: string;\n decimals: number;\n total_supply: string;\n}\n\nexport interface Balance {\n balance: string;\n}\n\nexport interface AllowanceResponse {\n allowance: string;\n expires: {\n never?: {};\n at_height?: number;\n at_time?: string;\n };\n}\n\nexport class CW20Token {\n private client: ICWWalletProvider;\n private contractAddress: string;\n\n constructor(client: ICWWalletProvider, contractAddress: string) {\n this.client = client;\n this.contractAddress = contractAddress;\n }\n\n // Query Methods\n async getTokenInfo(): Promise<TokenInfo> {\n return (await this.client.queryContractSmart(this.contractAddress, {\n token_info: {},\n })) as TokenInfo;\n }\n\n async getBalance(address: string): Promise<Balance> {\n return (await this.client.queryContractSmart(this.contractAddress, {\n balance: { address },\n })) as Balance;\n }\n\n async getAllowance(owner: string, spender: string): Promise<AllowanceResponse> {\n return (await this.client.queryContractSmart(this.contractAddress, {\n allowance: { owner, spender },\n })) as AllowanceResponse;\n }\n\n // Execute Methods (requires SigningCosmWasmClient)\n async transfer(senderAddress: string, recipientAddress: string, amount: string): Promise<CWExecuteResponse> {\n const msg = {\n transfer: {\n recipient: recipientAddress,\n amount: amount,\n },\n };\n\n return await this.client.execute(senderAddress, this.contractAddress, msg, 'auto');\n }\n\n async increaseAllowance(\n senderAddress: string,\n spenderAddress: string,\n amount: string,\n expires?: { at_height?: number; at_time?: string; never?: {} },\n ): Promise<CWExecuteResponse> {\n const msg = {\n increase_allowance: {\n spender: spenderAddress,\n amount: amount,\n expires,\n },\n };\n\n return await this.client.execute(senderAddress, this.contractAddress, msg, 'auto');\n }\n\n async decreaseAllowance(\n senderAddress: string,\n spenderAddress: string,\n amount: string,\n expires?: { at_height?: number; at_time?: string; never?: {} },\n ): Promise<CWExecuteResponse> {\n const msg = {\n decrease_allowance: {\n spender: spenderAddress,\n amount: amount,\n expires,\n },\n };\n\n return await this.client.execute(senderAddress, this.contractAddress, msg, 'auto');\n }\n\n async transferFrom(\n senderAddress: string,\n ownerAddress: string,\n recipientAddress: string,\n amount: string,\n ): Promise<CWExecuteResponse> {\n const msg = {\n transfer_from: {\n owner: ownerAddress,\n recipient: recipientAddress,\n amount: amount,\n },\n };\n\n return await this.client.execute(senderAddress, this.contractAddress, msg, 'auto');\n }\n}\n","import { type Coin, coins } from '@cosmjs/stargate';\nimport { type Address, type Hex, fromHex } from 'viem';\nimport type { CosmosSpokeChainConfig, CWReturnType, PromiseCWTxReturnType } from '../../types.js';\nimport type { ISpokeProvider } from '../Providers.js';\nimport type { IInjectiveWalletProvider, ICWWalletProvider, CWExecuteResponse } from '@sodax/types';\nimport { CW20Token } from './CW20Token.js';\n\nexport type CWSpokeDepositParams = {\n from: string; // The address of the user on the spoke chain\n token: string; // The address of the token to deposit\n amount: string; // The amount of tokens to deposit\n data: Hex; // The data to send with the deposit\n};\n\nexport interface InstantiateMsg {\n connection: string;\n rate_limit: string;\n hub_chain_id: string; // u128 as string\n hub_asset_manager: Uint8Array;\n}\n\nexport interface ConnMsg {\n send_message?: {\n dst_chain_id: number;\n dst_address: Array<Number>;\n payload: Array<Number>;\n };\n}\n\nexport interface ExecuteMsg {\n transfer?: {\n token: string;\n to: Array<Number>;\n amount: string; // should be string for u128 , but in injective it fails in type conversion.\n data: Array<Number>;\n };\n recv_message?: {\n src_chain_id: string; // u128 as string\n src_address: Uint8Array;\n conn_sn: string; // u128 as string\n payload: Uint8Array;\n signatures: Uint8Array[];\n };\n set_rate_limit?: {\n rate_limit: string;\n };\n set_connection?: {\n connection: string;\n };\n set_owner?: {\n owner: string;\n };\n}\n\nexport interface QueryMsg {\n get_state: {};\n}\n\nexport interface State {\n connection: string;\n rate_limit: string;\n hub_asset_manager: Uint8Array;\n hub_chain_id: string; // u128 as string\n owner: string;\n}\n\nexport class CWSpokeProvider implements ISpokeProvider {\n public readonly walletProvider: ICWWalletProvider | IInjectiveWalletProvider;\n\n public chainConfig: CosmosSpokeChainConfig;\n\n constructor(conf: CosmosSpokeChainConfig, walletProvider: ICWWalletProvider | IInjectiveWalletProvider) {\n this.chainConfig = conf;\n this.walletProvider = walletProvider;\n }\n\n // Query Methods\n async getState(): Promise<State> {\n return (await this.walletProvider.queryContractSmart(this.chainConfig.addresses.assetManager, {\n get_state: {},\n })) as State;\n }\n\n async getBalance(token: String): Promise<number> {\n return (await this.walletProvider.queryContractSmart(this.chainConfig.addresses.assetManager, {\n get_balance: { denom: token },\n })) as number;\n }\n\n // Execute Methods (requires SigningCosmWasmClient)\n\n private async transfer<R extends boolean = false>(\n senderAddress: string,\n token: string,\n to: Uint8Array,\n amount: string,\n data: Uint8Array = new Uint8Array(),\n funds: Coin[] = [],\n raw?: R,\n ): PromiseCWTxReturnType<R> {\n const msg: ExecuteMsg = {\n transfer: {\n token,\n to: Array.from(to),\n amount: amount,\n data: Array.from(data),\n },\n };\n\n if (raw) {\n return this.walletProvider.getRawTransaction(\n this.chainConfig.networkId,\n this.chainConfig.prefix,\n senderAddress,\n this.chainConfig.addresses.connection,\n msg,\n ) as CWReturnType<R>;\n }\n const res = await this.walletProvider.execute(\n senderAddress as `inj${string}`,\n this.chainConfig.addresses.assetManager,\n msg,\n 'auto',\n undefined,\n funds,\n );\n return res.transactionHash as CWReturnType<R>;\n }\n\n async depositToken<R extends boolean = false>(\n sender: string,\n tokenAddress: string,\n to: Uint8Array,\n amount: string,\n data: Uint8Array = new Uint8Array(),\n raw?: R,\n ) {\n const cw20Token = new CW20Token(this.walletProvider, tokenAddress);\n await cw20Token.increaseAllowance(sender, this.chainConfig.addresses.assetManager, amount);\n return this.transfer(sender, tokenAddress, to, amount, data, [], raw);\n }\n\n static async deposit<R extends boolean = false>(\n sender: string,\n token_address: string,\n to: Address,\n amount: string,\n data: Hex = '0x',\n provider: CWSpokeProvider,\n raw?: R,\n ): PromiseCWTxReturnType<R> {\n const isNative = await provider.isNative(token_address);\n const toBytes = fromHex(to, 'bytes');\n const dataBytes = fromHex(data, 'bytes');\n\n if (isNative) {\n return provider.depositNative(sender, token_address, toBytes, amount, dataBytes, raw);\n }\n\n return provider.depositToken(sender, token_address, toBytes, amount, dataBytes, raw);\n }\n\n async depositNative<R extends boolean = false>(\n sender: string,\n token: string,\n to: Uint8Array,\n amount: string,\n data: Uint8Array = new Uint8Array([2, 2, 2]),\n raw?: R,\n ) {\n const funds = coins(amount, token);\n return this.transfer(sender, token, to, amount, data, funds, raw);\n }\n\n async isNative(token: string): Promise<boolean> {\n let isNative = true;\n const cw20Token = new CW20Token(this.walletProvider, token);\n try {\n await cw20Token.getTokenInfo();\n isNative = false;\n } catch (err) {}\n return isNative;\n }\n\n async receiveMessage(\n senderAddress: string,\n srcChainId: string,\n srcAddress: Uint8Array,\n connSn: string,\n payload: Uint8Array,\n signatures: Uint8Array[],\n ): Promise<CWExecuteResponse> {\n const msg: ExecuteMsg = {\n recv_message: {\n src_chain_id: srcChainId,\n src_address: srcAddress,\n conn_sn: connSn,\n payload,\n signatures,\n },\n };\n\n return await this.walletProvider.execute(senderAddress, this.chainConfig.addresses.assetManager, msg, 'auto');\n }\n\n async setRateLimit(senderAddress: string, rateLimit: string): Promise<CWExecuteResponse> {\n const msg: ExecuteMsg = {\n set_rate_limit: {\n rate_limit: rateLimit,\n },\n };\n\n return await this.walletProvider.execute(senderAddress, this.chainConfig.addresses.assetManager, msg, 'auto');\n }\n\n async setConnection(senderAddress: string, connection: string): Promise<CWExecuteResponse> {\n const msg: ExecuteMsg = {\n set_connection: {\n connection,\n },\n };\n\n return await this.walletProvider.execute(senderAddress, this.chainConfig.addresses.assetManager, msg, 'auto');\n }\n\n async setOwner(senderAddress: string, owner: string): Promise<CWExecuteResponse> {\n const msg: ExecuteMsg = {\n set_owner: {\n owner,\n },\n };\n\n return await this.walletProvider.execute(senderAddress, this.chainConfig.addresses.assetManager, msg, 'auto');\n }\n\n async send_message<R extends boolean = false>(\n sender: string,\n dst_chain_id: string,\n dst_address: Hex,\n payload: Hex,\n raw?: R,\n ): PromiseCWTxReturnType<R> {\n const msg: ConnMsg = {\n send_message: {\n dst_chain_id: Number.parseInt(dst_chain_id),\n dst_address: Array.from(fromHex(dst_address, 'bytes')),\n payload: Array.from(fromHex(payload, 'bytes')),\n },\n };\n if (raw) {\n return this.walletProvider.getRawTransaction(\n this.chainConfig.networkId,\n this.chainConfig.prefix,\n sender,\n this.chainConfig.addresses.connection,\n msg,\n ) as CWReturnType<R>;\n }\n const res = await this.walletProvider.execute(sender, this.chainConfig.addresses.connection, msg, 'auto');\n return res.transactionHash as CWReturnType<R>;\n }\n\n // Helper Methods\n static stringToUint8Array(str: string): Uint8Array {\n return new TextEncoder().encode(str);\n }\n\n static uint8ArrayToString(arr: Uint8Array): string {\n return new TextDecoder().decode(arr);\n }\n\n static toBigIntString(num: number | bigint): string {\n return num.toString();\n }\n}\n","import type { IconSpokeChainConfig } from '../../types.js';\nimport * as IconSdkRaw from 'icon-sdk-js';\nconst IconSdk = (IconSdkRaw.default?.default ? IconSdkRaw.default : IconSdkRaw) as typeof IconSdkRaw;\nimport type { IconService } from 'icon-sdk-js';\nimport type { IIconWalletProvider } from '@sodax/types';\n\nexport class IconSpokeProvider {\n public readonly walletProvider: IIconWalletProvider;\n public readonly chainConfig: IconSpokeChainConfig;\n public readonly iconService: IconService;\n\n constructor(\n walletProvider: IIconWalletProvider,\n chainConfig: IconSpokeChainConfig,\n rpcUrl: `http${string}` = 'https://ctz.solidwallet.io/api/v3', // default to mainnet\n ) {\n this.walletProvider = walletProvider;\n this.chainConfig = chainConfig;\n this.iconService = new IconSdk.IconService(new IconSdk.IconService.HttpProvider(rpcUrl));\n }\n}\n","import type { Hex } from 'viem';\n\nexport function getIconAddressBytes(address: string): Hex {\n return `0x${Buffer.from(address.replace('cx', '01').replace('hx', '00') ?? 'f8', 'hex').toString('hex')}`;\n}\n","import {\n http,\n type Account,\n type Address,\n type Chain,\n type CustomTransport,\n type Hex,\n type HttpTransport,\n type PublicClient,\n type WalletClient,\n createPublicClient,\n} from 'viem';\nimport { getEvmViemChain, getHubChainConfig } from '../constants.js';\nimport type {\n EvmChainId,\n EvmHubChainConfig,\n EvmSpokeChainConfig,\n SonicSpokeChainConfig,\n SpokeChainConfig,\n} from '../types.js';\nimport type { CWSpokeProvider } from './cosmos/CWSpokeProvider.js';\nimport type { IconSpokeProvider } from './icon/IconSpokeProvider.js';\nimport type { SolanaSpokeProvider } from './solana/SolanaSpokeProvider.js';\nimport type { SolanaWalletProvider } from './solana/SolanaWalletProvider.js';\nimport type { StellarSpokeProvider } from './stellar/StellarSpokeProvider.js';\nimport type { SuiSpokeProvider } from './sui/SuiSpokeProvider.js';\nimport {\n SONIC_MAINNET_CHAIN_ID,\n type IEvmWalletProvider,\n type IStellarWalletProvider,\n type ISuiWalletProvider,\n type IIconWalletProvider,\n type IInjectiveWalletProvider,\n type ICWWalletProvider,\n} from '@sodax/types';\n\nexport type CustomProvider = { request(...args: unknown[]): Promise<unknown> };\n\nexport interface ISpokeProvider {\n readonly walletProvider: IWalletProvider;\n readonly chainConfig: SpokeChainConfig;\n}\n\nexport type EvmUninitializedBrowserConfig = {\n userAddress: Address;\n chain: EvmChainId;\n provider: CustomProvider;\n};\n\nexport type EvmUninitializedPrivateKeyConfig = {\n chain: EvmChainId;\n privateKey: Hex | undefined;\n provider: string; // rpc url\n};\n\nexport type EvmUninitializedConfig = EvmUninitializedBrowserConfig | EvmUninitializedPrivateKeyConfig;\n\nexport type EvmInitializedConfig = {\n walletClient: WalletClient<CustomTransport | HttpTransport, Chain, Account>;\n publicClient: PublicClient<CustomTransport | HttpTransport>;\n};\n\nexport type EvmHubProviderConfig = {\n hubRpcUrl: string;\n chainConfig: EvmHubChainConfig;\n};\n\nexport class EvmHubProvider {\n public readonly publicClient: PublicClient<HttpTransport>;\n public readonly chainConfig: EvmHubChainConfig;\n\n constructor(config?: EvmHubProviderConfig) {\n if (config) {\n this.publicClient = createPublicClient({\n transport: http(config.hubRpcUrl),\n chain: getEvmViemChain(config.chainConfig.chain.id),\n });\n this.chainConfig = config.chainConfig;\n } else {\n // default to Sonic mainnet\n this.publicClient = createPublicClient({\n transport: http('https://rpc.soniclabs.com'),\n chain: getEvmViemChain(SONIC_MAINNET_CHAIN_ID),\n });\n this.chainConfig = getHubChainConfig(SONIC_MAINNET_CHAIN_ID);\n }\n }\n}\n\nexport class SonicSpokeProvider implements ISpokeProvider {\n public readonly walletProvider: IEvmWalletProvider;\n public readonly chainConfig: SonicSpokeChainConfig;\n public readonly publicClient: PublicClient<HttpTransport>;\n\n constructor(walletProvider: IEvmWalletProvider, chainConfig: SonicSpokeChainConfig, rpcUrl?: string) {\n this.walletProvider = walletProvider;\n this.chainConfig = chainConfig;\n if (rpcUrl) {\n this.publicClient = createPublicClient({\n transport: http(rpcUrl),\n chain: getEvmViemChain(chainConfig.chain.id),\n });\n } else {\n this.publicClient = createPublicClient({\n transport: http(getEvmViemChain(chainConfig.chain.id).rpcUrls.default.http[0]),\n chain: getEvmViemChain(chainConfig.chain.id),\n });\n }\n }\n}\n\nexport class EvmSpokeProvider implements ISpokeProvider {\n public readonly walletProvider: IEvmWalletProvider;\n public readonly chainConfig: EvmSpokeChainConfig;\n public readonly publicClient: PublicClient<HttpTransport>;\n\n constructor(walletProvider: IEvmWalletProvider, chainConfig: EvmSpokeChainConfig, rpcUrl?: string) {\n this.walletProvider = walletProvider;\n this.chainConfig = chainConfig;\n if (rpcUrl) {\n this.publicClient = createPublicClient({\n transport: http(rpcUrl),\n chain: getEvmViemChain(chainConfig.chain.id),\n });\n } else {\n this.publicClient = createPublicClient({\n transport: http(getEvmViemChain(chainConfig.chain.id).rpcUrls.default.http[0]),\n chain: getEvmViemChain(chainConfig.chain.id),\n });\n }\n }\n}\n\nexport { CWSpokeProvider } from './cosmos/CWSpokeProvider.js';\nexport { IconSpokeProvider } from './icon/IconSpokeProvider.js';\nexport { getIconAddressBytes } from './icon/utils.js';\n\nexport type IWalletProvider =\n | IEvmWalletProvider\n | ICWWalletProvider\n | IStellarWalletProvider\n | ISuiWalletProvider\n | IIconWalletProvider\n | IInjectiveWalletProvider\n | SolanaWalletProvider;\n\nexport type SpokeProvider = (\n | EvmSpokeProvider\n | CWSpokeProvider\n | IconSpokeProvider\n | SuiSpokeProvider\n | StellarSpokeProvider\n | SolanaSpokeProvider\n | SonicSpokeProvider\n) &\n ISpokeProvider;\n","import {\n Contract,\n TransactionBuilder,\n BASE_FEE,\n Address,\n rpc as StellarRpc,\n nativeToScVal,\n TimeoutInfinite,\n scValToBigInt,\n} from '@stellar/stellar-sdk';\nimport type { PromiseStellarTxReturnType, StellarReturnType, StellarSpokeChainConfig } from '../../types.js';\nimport { toHex, type Hex } from 'viem';\nimport type { ISpokeProvider } from '../Providers.js';\nimport type { Server } from '@stellar/stellar-sdk/rpc';\nimport type { IStellarWalletProvider } from '@sodax/types';\n\nexport class StellarSpokeProvider implements ISpokeProvider {\n private readonly server: Server;\n private readonly contract: Contract;\n public readonly chainConfig: StellarSpokeChainConfig;\n public readonly walletProvider: IStellarWalletProvider;\n\n constructor(\n walletProvider: IStellarWalletProvider,\n contractAddress: string,\n config: StellarSpokeChainConfig,\n rpc: string,\n ) {\n this.server = new StellarRpc.Server(rpc);\n this.walletProvider = walletProvider;\n this.contract = new Contract(contractAddress);\n this.chainConfig = config;\n }\n\n async getBalance(tokenAddress: string): Promise<number> {\n const [network, walletAddress] = await Promise.all([\n this.server.getNetwork(),\n this.walletProvider.getWalletAddress(),\n ]);\n const sourceAccount = await this.server.getAccount(walletAddress);\n\n const tx = new TransactionBuilder(sourceAccount, {\n fee: BASE_FEE,\n networkPassphrase: network.passphrase,\n })\n .addOperation(this.contract.call('get_token_balance', nativeToScVal(tokenAddress, { type: 'address' })))\n .setTimeout(TimeoutInfinite)\n .build();\n\n const result = await this.server.simulateTransaction(tx);\n\n if (StellarRpc.Api.isSimulationError(result)) {\n throw new Error('Failed to simulate transaction');\n }\n\n const resultValue = result.result;\n\n if (resultValue) {\n return Number(scValToBigInt(resultValue.retval));\n }\n\n throw new Error('result undefined');\n }\n\n async deposit<R extends boolean = false>(\n token: string,\n amount: string,\n recipient: Uint8Array,\n data: Uint8Array,\n raw?: R,\n ): PromiseStellarTxReturnType<R> {\n try {\n const [network, walletAddress] = await Promise.all([\n this.server.getNetwork(),\n this.walletProvider.getWalletAddress(),\n ]);\n const sourceAccount = await this.server.getAccount(walletAddress);\n const simulateTx = new TransactionBuilder(sourceAccount, {\n fee: BASE_FEE,\n networkPassphrase: network.passphrase,\n })\n .addOperation(\n this.contract.call(\n 'transfer',\n nativeToScVal(Address.fromString(walletAddress), { type: 'address' }),\n nativeToScVal(Address.fromString(token), {\n type: 'address',\n }),\n nativeToScVal(BigInt(amount), { type: 'u128' }),\n nativeToScVal(recipient),\n nativeToScVal(Buffer.from(data), { type: 'bytes' }),\n ),\n )\n .setTimeout(100)\n .build();\n\n const simResult = await this.server.simulateTransaction(simulateTx);\n const tx = StellarRpc.assembleTransaction(simulateTx, simResult).build();\n\n if (raw) {\n const transactionXdr = tx.toXDR();\n\n return {\n from: walletAddress,\n to: this.chainConfig.addresses.assetManager,\n value: BigInt(amount),\n data: transactionXdr,\n } as StellarReturnType<R>;\n }\n\n if (tx) {\n const signedTx = await this.walletProvider.signTransaction(tx.toXDR());\n const sendResponse = await this.server.sendTransaction(\n TransactionBuilder.fromXDR(signedTx, tx.networkPassphrase),\n );\n if (sendResponse.hash) {\n return `0x${sendResponse.hash}` as StellarReturnType<R>;\n }\n }\n throw new Error('Failed to create transaction');\n } catch (error) {\n console.error('Error during deposit:', error);\n throw error;\n }\n }\n\n async sendMessage<R extends boolean = false>(\n dst_chain_id: string,\n dst_address: Uint8Array,\n payload: Uint8Array,\n raw?: R,\n ): PromiseStellarTxReturnType<R> {\n try {\n const [network, walletAddress] = await Promise.all([\n this.server.getNetwork(),\n this.walletProvider.getWalletAddress(),\n ]);\n const sourceAccount = await this.server.getAccount(walletAddress);\n const connection = new Contract(this.chainConfig.addresses.connection);\n\n const simulateTx = new TransactionBuilder(sourceAccount, {\n fee: BASE_FEE,\n networkPassphrase: network.passphrase,\n })\n .addOperation(\n connection.call(\n 'send_message',\n nativeToScVal(Address.fromString(walletAddress), { type: 'address' }),\n nativeToScVal(dst_chain_id, { type: 'u128' }),\n nativeToScVal(Buffer.from(dst_address), { type: 'bytes' }),\n nativeToScVal(Buffer.from(payload), { type: 'bytes' }),\n ),\n )\n .setTimeout(100)\n .build();\n\n const simResult = await this.server.simulateTransaction(simulateTx);\n const tx = StellarRpc.assembleTransaction(simulateTx, simResult).build();\n\n if (raw) {\n const transactionXdr = tx.toXDR();\n return {\n from: walletAddress,\n to: this.chainConfig.addresses.assetManager,\n value: 0n,\n data: transactionXdr,\n } as StellarReturnType<R>;\n }\n\n if (tx) {\n const signedTx = await this.walletProvider.signTransaction(tx.toXDR());\n const sendResponse = await this.server.sendTransaction(\n TransactionBuilder.fromXDR(signedTx, tx.networkPassphrase),\n );\n if (sendResponse.hash) {\n return `0x${sendResponse.hash}` as StellarReturnType<R>;\n }\n }\n throw new Error('Failed to create transaction');\n } catch (error) {\n console.error('Error during deposit:', error);\n throw error;\n }\n }\n\n static getAddressBCSBytes(stellaraddress: string): Hex {\n return `0x${Address.fromString(stellaraddress).toScVal().toXDR('hex')}`;\n }\n\n static getTsWalletBytes(stellaraddress: string): Hex {\n return toHex(Buffer.from(stellaraddress, 'hex'));\n }\n}\n","import { bcs } from '@mysten/sui/bcs';\nimport { Transaction, type TransactionResult } from '@mysten/sui/transactions';\nimport { type Hex, toHex } from 'viem';\nimport type { PromiseSuiTxReturnType, SuiReturnType, SuiSpokeChainConfig } from '../../types.js';\nimport type { ISpokeProvider } from '../index.js';\nimport type { ISuiWalletProvider } from '@sodax/types';\n\ntype SuiNativeCoinResult = { $kind: 'NestedResult'; NestedResult: [number, number] };\ntype SuiTxObject = { $kind: 'Input'; Input: number; type?: 'object' | undefined };\nexport class SuiSpokeProvider implements ISpokeProvider {\n public readonly walletProvider: ISuiWalletProvider;\n public chainConfig: SuiSpokeChainConfig;\n\n constructor(config: SuiSpokeChainConfig, wallet_provider: ISuiWalletProvider) {\n this.chainConfig = config;\n this.walletProvider = wallet_provider;\n }\n\n async getBalance(token: string): Promise<bigint> {\n const assetmanager = this.splitAddress(this.chainConfig.addresses.assetManager);\n const tx = new Transaction();\n const result = await this.walletProvider.viewContract(\n tx,\n assetmanager.packageId,\n assetmanager.moduleId,\n 'get_token_balance',\n [tx.object(assetmanager.stateId)],\n [token],\n );\n if (\n !Array.isArray(result?.returnValues) ||\n !Array.isArray(result.returnValues[0]) ||\n result.returnValues[0][0] === undefined\n ) {\n throw new Error('Failed to get Balance');\n }\n const val: number[] = result.returnValues[0][0];\n const str_u64 = bcs.U64.parse(Uint8Array.from(val));\n return BigInt(str_u64);\n }\n\n async transfer<R extends boolean = false>(\n token: string,\n amount: bigint,\n to: Uint8Array,\n data: Uint8Array,\n raw?: R,\n ): PromiseSuiTxReturnType<R> {\n const isNative = token.toLowerCase() === this.chainConfig.nativeToken.toLowerCase();\n const tx = new Transaction();\n const walletAddress = await this.walletProvider.getWalletAddressBytes();\n const coin: TransactionResult | SuiNativeCoinResult | SuiTxObject = isNative\n ? await this.getNativeCoin(tx, amount)\n : await this.getCoin(tx, token, amount, walletAddress);\n const connection = this.splitAddress(this.chainConfig.addresses.connection);\n const assetManager = this.splitAddress(this.chainConfig.addresses.assetManager);\n\n // Call transfer function\n tx.moveCall({\n target: `${assetManager.packageId}::${assetManager.moduleId}::transfer`,\n typeArguments: [token],\n arguments: [\n tx.object(assetManager.stateId),\n tx.object(connection.stateId), // Connection state object\n coin,\n tx.pure(bcs.vector(bcs.u8()).serialize(to)),\n tx.pure(bcs.vector(bcs.u8()).serialize(data)),\n ],\n });\n if (raw) {\n const transactionRaw = await tx.build();\n const transactionRawBase64String = Buffer.from(transactionRaw).toString('base64');\n return {\n from: walletAddress,\n to: `${assetManager.packageId}::${assetManager.moduleId}::transfer`,\n value: amount,\n data: transactionRawBase64String,\n } as SuiReturnType<R>;\n }\n // Execute transaction\n return this.walletProvider.signAndExecuteTxn(tx) as PromiseSuiTxReturnType<R>;\n }\n\n public async getNativeCoin(tx: Transaction, amount: bigint): Promise<SuiNativeCoinResult> {\n const coin = tx.splitCoins(tx.gas, [tx.pure.u64(amount)])[0];\n\n if (coin === undefined) {\n return Promise.reject(Error('[SuiIntentService.getNativeCoin] coin undefined'));\n }\n\n return coin;\n }\n\n public async getCoin(\n tx: Transaction,\n coin: string,\n amount: bigint,\n address: string,\n ): Promise<TransactionResult | SuiTxObject> {\n const coins = await this.walletProvider.getCoins(address, coin);\n\n const objects: string[] = [];\n let totalAmount = BigInt(0);\n\n for (const coin of coins.data) {\n totalAmount += BigInt(coin.balance);\n objects.push(coin.coinObjectId);\n\n if (totalAmount >= amount) {\n break;\n }\n }\n\n const firstObject = objects[0];\n\n if (!firstObject) {\n throw new Error(`[SuiIntentService.getCoin] Coin=${coin} not found for address=${address} and amount=${amount}`);\n }\n\n if (objects.length > 1) {\n tx.mergeCoins(firstObject, objects.slice(1));\n }\n\n if (totalAmount === amount) {\n return tx.object(firstObject);\n }\n\n return tx.splitCoins(firstObject, [amount]);\n }\n\n splitAddress(address: string): { packageId: string; moduleId: string; stateId: string } {\n const parts = address.split('::');\n if (parts.length === 3) {\n if (parts[0] && parts[1] && parts[2]) {\n return { packageId: parts[0], moduleId: parts[1], stateId: parts[2] };\n }\n throw new Error('Invalid package address');\n }\n throw new Error('Invalid package address');\n }\n\n async sendMessage<R extends boolean = false>(\n dst_chain_id: bigint,\n dst_address: Uint8Array,\n data: Uint8Array,\n raw?: R,\n ): PromiseSuiTxReturnType<R> {\n const txb = new Transaction();\n const connection = this.splitAddress(this.chainConfig.addresses.connection);\n // Perform send message transaction\n txb.moveCall({\n target: `${connection.packageId}::${connection.moduleId}::send_message_ua`,\n arguments: [\n txb.object(connection.stateId),\n txb.pure.u256(dst_chain_id),\n txb.pure(bcs.vector(bcs.u8()).serialize(dst_address)),\n txb.pure(bcs.vector(bcs.u8()).serialize(data)),\n ],\n });\n if (raw) {\n const transactionRaw = await txb.build();\n const transactionRawBase64String = Buffer.from(transactionRaw).toString('base64');\n const walletAddress = await this.walletProvider.getWalletAddressBytes();\n return {\n from: walletAddress,\n to: `${connection.packageId}::${connection.moduleId}::send_message_ua`,\n value: 0n,\n data: transactionRawBase64String,\n } as SuiReturnType<R>;\n }\n\n return this.walletProvider.signAndExecuteTxn(txb) as PromiseSuiTxReturnType<R>;\n }\n\n async configureAssetManagerHub(hubNetworkId: number, hubAssetManager: Uint8Array): Promise<string> {\n const tx = new Transaction();\n const assetmanager = this.splitAddress(this.chainConfig.addresses.assetManager);\n\n tx.moveCall({\n target: `${assetmanager.packageId}::${assetmanager.moduleId}::set_hub_details`,\n arguments: [tx.object(assetmanager.stateId), tx.pure.u64(hubNetworkId), tx.pure.vector('u8', hubAssetManager)],\n });\n\n const result = await this.walletProvider.signAndExecuteTxn(tx);\n return result;\n }\n\n async getWalletAddress(): Promise<string> {\n return this.walletProvider.getWalletAddress();\n }\n\n async getWalletAddressBytes(): Promise<Hex> {\n const address = await this.getWalletAddress();\n return SuiSpokeProvider.getAddressBCSBytes(address);\n }\n\n static getAddressBCSBytes(suiaddress: string): Hex {\n return toHex(bcs.Address.serialize(suiaddress).toBytes());\n }\n}\n","import { getAssociatedTokenAddress } from '@solana/spl-token';\nimport {\n Connection,\n Keypair,\n type PublicKey,\n type TransactionInstruction,\n TransactionMessage,\n VersionedTransaction,\n} from '@solana/web3.js';\nimport type { Hash, Hex } from 'viem';\nimport type { WalletAddressProvider } from '@sodax/types';\n\nexport type SolanaWalletConfig = { privateKey: Uint8Array };\n\nexport class SolanaWalletProvider implements WalletAddressProvider {\n private readonly wallet: Keypair;\n public readonly connection: Connection;\n\n constructor(walletConfig: SolanaWalletConfig, url: string) {\n this.wallet = Keypair.fromSecretKey(walletConfig.privateKey);\n this.connection = new Connection(url, 'confirmed');\n }\n\n private async waitForConfirmation(signature: string, connection: Connection) {\n const commitment = 'finalized';\n const latestBlockhash = await connection.getLatestBlockhash();\n const response = await connection.confirmTransaction(\n {\n signature,\n blockhash: latestBlockhash.blockhash,\n lastValidBlockHeight: latestBlockhash.lastValidBlockHeight,\n },\n commitment,\n );\n console.log('Transaction confirmed:', response);\n }\n\n public async sendTransaction(transaction: VersionedTransaction): Promise<Hash> {\n const txHash = (await this.connection.sendTransaction(transaction)) as Hash;\n await this.waitForConfirmation(txHash, this.connection);\n return txHash;\n }\n\n async buildV0Txn(instructions: TransactionInstruction[], signers: Keypair[]) {\n const blockHash = await this.connection.getLatestBlockhash().then(res => res.blockhash);\n\n const messageV0 = new TransactionMessage({\n //@ts-ignore\n payerKey: signers[0]?.publicKey,\n recentBlockhash: blockHash,\n instructions,\n }).compileToV0Message();\n\n const tx = new VersionedTransaction(messageV0);\n tx.sign(signers);\n return tx;\n }\n\n public getAddress(): PublicKey {\n return this.wallet.publicKey;\n }\n\n public getWallet(): Keypair {\n return this.wallet;\n }\n\n public async getWalletAddress(): Promise<string> {\n return this.getAddress().toBase58();\n }\n\n public async getWalletAddressBytes(): Promise<Hex> {\n return `0x${Buffer.from(await this.getWalletAddress()).toString('hex')}` as Hex;\n }\n\n public async getAssociatedTokenAddress(mint: PublicKey): Promise<PublicKey> {\n return await getAssociatedTokenAddress(mint, this.getAddress(), true);\n }\n}\n","import type { SolanaChainConfig } from '../../types.js';\nimport type { SolanaWalletProvider } from './SolanaWalletProvider.js';\nimport type { ISpokeProvider } from '../index.js';\n\nexport class SolanaSpokeProvider implements ISpokeProvider {\n public readonly walletProvider: SolanaWalletProvider;\n public readonly chainConfig: SolanaChainConfig;\n\n constructor(walletProvider: SolanaWalletProvider, chainConfig: SolanaChainConfig) {\n this.walletProvider = walletProvider;\n this.chainConfig = chainConfig;\n }\n}\n","import { PublicKey } from '@solana/web3.js';\nimport type { Hex } from 'viem';\nimport { spokeChainConfig } from '../../../constants.js';\nimport type { SolanaChainConfig } from '../../../types.js';\nimport { SOLANA_MAINNET_CHAIN_ID } from '@sodax/types';\nconst solanaSpokeChainConfig = spokeChainConfig[SOLANA_MAINNET_CHAIN_ID] as SolanaChainConfig;\n\nexport function getSolanaAddressBytes(address: PublicKey): Hex {\n return `0x${Buffer.from(address.toBytes()).toString('hex')}` as Hex;\n}\n\nexport function hexToSolanaAddress(hex: Hex): PublicKey {\n const hexWithoutPrefix = hex.startsWith('0x') ? hex.slice(2) : hex;\n return new PublicKey(Buffer.from(hexWithoutPrefix, 'hex'));\n}\n\nexport function isNative(address: PublicKey): Boolean {\n if (address.equals(new PublicKey(solanaSpokeChainConfig.nativeToken))) {\n return true;\n }\n return false;\n}\n","import {\n isJsonRpcPayloadResponse,\n isResponseAddressType,\n isResponseSigningType,\n type IconAddress,\n type Result,\n} from '../../index.js';\n\nexport type IconJsonRpcVersion = '2.0';\n\nexport type HanaWalletRequestEvent =\n | 'REQUEST_HAS_ACCOUNT'\n | 'REQUEST_HAS_ADDRESS'\n | 'REQUEST_ADDRESS'\n | 'REQUEST_JSON'\n | 'REQUEST_SIGNING'\n | 'REQUEST_JSON-RPC';\nexport type HanaWalletResponseEvent =\n | 'RESPONSE_HAS_ACCOUNT'\n | 'RESPONSE_HAS_ADDRESS'\n | 'RESPONSE_ADDRESS'\n | 'RESPONSE_JSON-RPC'\n | 'RESPONSE_SIGNING'\n | 'CANCEL_SIGNING'\n | 'CANCEL_JSON-RPC';\n\nexport type ResponseAddressType = {\n type: 'RESPONSE_ADDRESS';\n payload: IconAddress;\n};\n\nexport type ResponseSigningType = {\n type: 'RESPONSE_SIGNING';\n payload: string;\n};\n\nexport type RelayRequestDetail = {\n type: HanaWalletRequestEvent;\n payload?: {\n jsonrpc: IconJsonRpcVersion;\n method: string;\n params: unknown;\n id: number | undefined;\n };\n};\n\nexport type RelayRequestSigning = {\n type: 'REQUEST_SIGNING';\n payload: {\n from: IconAddress;\n hash: string;\n };\n};\n\nexport type JsonRpcPayloadResponse = {\n id: number;\n result: string; // txHash\n};\n\ninterface RelayResponseEventDetail {\n type: HanaWalletResponseEvent;\n payload: unknown;\n}\n\nexport function requestAddress(): Promise<Result<IconAddress>> {\n return new Promise(resolve => {\n const eventHandler = (event: Event) => {\n const customEvent = event as CustomEvent<RelayResponseEventDetail>;\n const response = customEvent.detail;\n if (isResponseAddressType(response)) {\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n resolve({\n ok: true,\n value: response.payload,\n });\n }\n };\n\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler, false);\n window.addEventListener('ICONEX_RELAY_RESPONSE', eventHandler, false);\n window.dispatchEvent(\n new CustomEvent<RelayRequestDetail>('ICONEX_RELAY_REQUEST', {\n detail: {\n type: 'REQUEST_ADDRESS',\n },\n }),\n );\n });\n}\n\nexport function requestSigning(from: IconAddress, hash: string): Promise<Result<string>> {\n return new Promise((resolve, reject) => {\n const signRequest = new CustomEvent<RelayRequestSigning>('ICONEX_RELAY_REQUEST', {\n detail: {\n type: 'REQUEST_SIGNING',\n payload: {\n from,\n hash,\n },\n },\n });\n\n const eventHandler = (event: Event) => {\n const customEvent = event as CustomEvent<RelayResponseEventDetail>;\n const response = customEvent.detail;\n if (isResponseSigningType(response)) {\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n\n // resolve signature\n resolve({\n ok: true,\n value: response.payload,\n });\n } else if (response.type === 'CANCEL_SIGNING') {\n reject(new Error('CANCEL_SIGNING'));\n }\n };\n\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n window.addEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n window.dispatchEvent(signRequest);\n });\n}\n\nexport function requestJsonRpc(rawTransaction: unknown, id = 99999): Promise<Result<JsonRpcPayloadResponse>> {\n return new Promise((resolve, reject) => {\n const eventHandler = (event: Event) => {\n const customEvent = event as CustomEvent<RelayResponseEventDetail>;\n const { type, payload } = customEvent.detail;\n if (type === 'RESPONSE_JSON-RPC') {\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n\n if (isJsonRpcPayloadResponse(payload)) {\n resolve({\n ok: true,\n value: payload,\n });\n } else {\n reject(new Error('Invalid payload response type (expected JsonRpcPayloadResponse)'));\n }\n } else if (type === 'CANCEL_JSON-RPC') {\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n reject(new Error('CANCEL_JSON-RPC'));\n }\n };\n\n window.removeEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n window.addEventListener('ICONEX_RELAY_RESPONSE', eventHandler as EventListener, false);\n window.dispatchEvent(\n new CustomEvent<RelayRequestDetail>('ICONEX_RELAY_REQUEST', {\n detail: {\n type: 'REQUEST_JSON-RPC',\n payload: {\n jsonrpc: '2.0',\n method: 'icx_sendTransaction',\n params: rawTransaction,\n id: id,\n },\n },\n }),\n );\n });\n}\n","import { encodeAbiParameters, parseAbiParameters } from 'viem';\nimport type { EvmContractCall } from '../types.js';\nimport type { IEvmWalletProvider, EvmRawTransactionReceipt, Hex } from '@sodax/types';\n\n/**\n * ABI-encode an array of ContractCall objects.\n * @param calls An array of ContractCall objects.\n * @returns ABI-encoded bytes representing the array of ContractCall objects.\n */\nexport function encodeContractCalls(calls: EvmContractCall[]): Hex {\n return encodeAbiParameters(parseAbiParameters('(address,uint256,bytes)[]'), [\n calls.map(v => [v.address, v.value, v.data] as const),\n ]);\n}\n\nexport async function waitForTransactionReceipt(\n hash: Hex,\n provider: IEvmWalletProvider,\n): Promise<EvmRawTransactionReceipt> {\n return provider.waitForTransactionReceipt(hash);\n}\n","import { encodeFunctionData, erc20Abi, type Address } from 'viem';\nimport type { EvmContractCall, EvmReturnType, PromiseEvmTxReturnType, Result } from '../../types.js';\nimport type { EvmSpokeProvider, SonicSpokeProvider } from '../../entities/Providers.js';\n\nexport class Erc20Service {\n private constructor() {}\n\n /**\n * Check if spender has enough ERC20 allowance for given amount\n * @param token - ERC20 token address\n * @param amount - Amount to check allowance for\n * @param owner - User wallet address\n * @param spender - Spender address\n * @param spokeProvider - EVM Spoke provider\n * @return - True if spender is allowed to spend amount on behalf of owner\n */\n static async isAllowanceValid(\n token: Address,\n amount: bigint,\n owner: Address,\n spender: Address,\n spokeProvider: EvmSpokeProvider | SonicSpokeProvider,\n ): Promise<Result<boolean>> {\n try {\n if (token.toLowerCase() === spokeProvider.chainConfig.nativeToken.toLowerCase()) {\n return {\n ok: true,\n value: true,\n };\n }\n\n const allowedAmount = await spokeProvider.publicClient.readContract({\n address: token,\n abi: erc20Abi,\n functionName: 'allowance',\n args: [owner, spender],\n });\n\n return {\n ok: true,\n value: allowedAmount >= amount,\n };\n } catch (e) {\n return {\n ok: false,\n error: e,\n };\n }\n }\n\n /**\n * Approve ERC20 amount spending\n * @param token - ERC20 token address\n * @param amount - Amount to approve\n * @param spender - Spender address\n * @param provider - EVM Provider\n */\n static async approve<R extends boolean = false>(\n token: Address,\n amount: bigint,\n spender: Address,\n spokeProvider: EvmSpokeProvider | SonicSpokeProvider,\n raw?: R,\n ): PromiseEvmTxReturnType<R> {\n const walletAddress = await spokeProvider.walletProvider.getWalletAddress();\n\n const rawTx = {\n from: walletAddress,\n to: token,\n value: 0n,\n data: encodeFunctionData({\n abi: erc20Abi,\n functionName: 'approve',\n args: [spender, amount],\n }),\n } satisfies EvmReturnType<true>;\n\n if (raw) {\n return rawTx as EvmReturnType<R>;\n }\n\n return spokeProvider.walletProvider.sendTransaction(rawTx) as PromiseEvmTxReturnType<R>;\n }\n\n /**\n * Encodes a transfer transaction for a token.\n * @param token - The address of the token.\n * @param to - The address to transfer the token to.\n * @param amount - The amount of the token to transfer.\n * @returns The encoded contract call.\n */\n public static encodeTransfer(token: Address, to: Address, amount: bigint): EvmContractCall {\n return {\n address: token,\n value: 0n,\n data: encodeFunctionData({\n abi: erc20Abi,\n functionName: 'transfer',\n args: [to, amount],\n }),\n };\n }\n\n /**\n * Encodes a transferFrom transaction for a token.\n * @param token - The address of the token.\n * @param from - The address to transfer the token from.\n * @param to - The address to transfer the token to.\n * @param amount - The amount of the token to transfer.\n * @returns The encoded contract call.\n */\n public static encodeTransferFrom(token: Address, from: Address, to: Address, amount: bigint): EvmContractCall {\n return {\n address: token,\n value: 0n,\n data: encodeFunctionData({\n abi: erc20Abi,\n functionName: 'transferFrom',\n args: [from, to, amount],\n }),\n };\n }\n\n /**\n * Encodes an approval transaction for a token.\n * @param token - The address of the token.\n * @param to - The address to approve the token to.\n * @param amount - The amount of the token to approve.\n * @returns The encoded contract call.\n */\n public static encodeApprove(token: Address, to: Address, amount: bigint): EvmContractCall {\n return {\n address: token,\n value: 0n,\n data: encodeFunctionData({\n abi: erc20Abi,\n functionName: 'approve',\n args: [to, amount],\n }),\n };\n }\n}\n","import { type Address, type Hash, type HttpTransport, type PublicClient, encodeFunctionData } from 'viem';\nimport { vaultTokenAbi } from '../../abis/index.js';\nimport type { EvmContractCall, TokenInfo, VaultReserves } from '../../types.js';\nimport type { IEvmWalletProvider } from '../../index.js';\n\nexport class EvmVaultTokenService {\n private constructor() {}\n\n /**\n * Fetches token information for a specific token in the vault.\n * @param vault - The address of the vault.\n * @param token - The address of the token.\n * @param publicClient - PublicClient<HttpTransport>\n * @returns Token information as a TokenInfo object.\n */\n public static async getTokenInfo(\n vault: Address,\n token: Address,\n publicClient: PublicClient<HttpTransport>,\n ): Promise<TokenInfo> {\n const [decimals, depositFee, withdrawalFee, maxDeposit, isSupported] = await publicClient.readContract({\n address: vault,\n abi: vaultTokenAbi,\n functionName: 'tokenInfo',\n args: [token],\n });\n\n return { decimals, depositFee, withdrawalFee, maxDeposit, isSupported };\n }\n\n /**\n * Retrieves the reserves of the vault.\n * @param vault - The address of the vault.\n * @param publicClient - PublicClient<HttpTransport>\n * @returns An object containing tokens and their balances.\n */\n public static async getVaultReserves(\n vault: Address,\n publicClient: PublicClient<HttpTransport>,\n ): Promise<VaultReserves> {\n const [tokens, balances] = await publicClient.readContract({\n address: vault,\n abi: vaultTokenAbi,\n functionName: 'getVaultReserves',\n args: [],\n });\n\n return {\n tokens,\n balances,\n };\n }\n\n /**\n * Retrieves all token information for the vault.\n * @param vault - The address of the vault.\n * @param publicClient - PublicClient<HttpTransport>\n * @returns A promise that resolves to an object containing tokens, their infos, and reserves.\n */\n async getAllTokenInfo(\n vault: Address,\n publicClient: PublicClient<HttpTransport>,\n ): Promise<{\n tokens: readonly Address[];\n infos: readonly TokenInfo[];\n reserves: readonly bigint[];\n }> {\n const [tokens, infos, reserves] = await publicClient.readContract({\n address: vault,\n abi: vaultTokenAbi,\n functionName: 'getAllTokenInfo',\n args: [],\n });\n\n return {\n tokens,\n infos,\n reserves,\n };\n }\n\n /**\n * Deposits a specified amount of a token into the vault.\n * @param vault - The address of the vault.\n * @param token - The address of the token to deposit.\n * @param amount - The amount of the token to deposit.\n * @param walletProvider - IEvmWalletProvider\n * @returns Transaction hash\n */\n public static async deposit(\n vault: Address,\n token: Address,\n amount: bigint,\n walletProvider: IEvmWalletProvider,\n ): Promise<Hash> {\n const from = (await walletProvider.getWalletAddress()) as `0x${string}`;\n return walletProvider.sendTransaction({\n from,\n to: vault,\n value: 0n,\n data: encodeFunctionData({\n abi: vaultTokenAbi,\n functionName: 'deposit',\n args: [token, amount],\n }),\n });\n }\n\n /**\n * Withdraws a specified amount of a token from the vault.\n * @param vault - The address of the vault.\n * @param token - The address of the token to withdraw.\n * @param amount - The amount of the token to withdraw.\n * @param provider - EvmWalletProvider\n * @returns Transaction hash\n */\n public static async withdraw(\n vault: Address,\n token: Address,\n amount: bigint,\n provider: IEvmWalletProvider,\n ): Promise<Hash> {\n const from = (await provider.getWalletAddress()) as `0x${string}`;\n return provider.sendTransaction({\n from,\n to: vault,\n value: 0n,\n data: encodeFunctionData({\n abi: vaultTokenAbi,\n functionName: 'withdraw',\n args: [token, amount],\n }),\n });\n }\n\n /**\n * Encodes the deposit transaction data for the vault.\n * @param vault - The address of the vault.\n * @param token - The address of the token to deposit.\n * @param amount - The amount of the token to deposit.\n * @returns The encoded contract call data.\n */\n static encodeDeposit(vault: Address, token: Address, amount: bigint): EvmContractCall {\n return {\n address: vault,\n value: 0n,\n data: encodeFunctionData({\n abi: vaultTokenAbi,\n functionName: 'deposit',\n args: [token, amount],\n }),\n };\n }\n\n /**\n * Encodes the withdraw transaction data for the vault.\n * @param vault - The address of the vault.\n * @param token - The address of the token to withdraw.\n * @param amount - The amount of the token to withdraw.\n * @returns The encoded contract call data.\n */\n static encodeWithdraw(vault: Address, token: Address, amount: bigint): EvmContractCall {\n return {\n address: vault,\n value: 0n,\n data: encodeFunctionData({\n abi: vaultTokenAbi,\n functionName: 'withdraw',\n args: [token, amount],\n }),\n };\n }\n\n /**\n * Translates token amounts from their native decimals to 18 decimals\n * @param decimals - The number of decimals of the token\n * @param amount - The amount to translate\n * @returns The translated amount\n */\n public static translateIncomingDecimals(decimals: number, amount: bigint): bigint {\n if (decimals <= 18) {\n return amount * BigInt(10 ** (18 - decimals));\n }\n return amount / BigInt(10 ** (decimals - 18));\n }\n\n /**\n * Translates token amounts from 18 decimals back to their native decimals\n * @param decimals - The number of decimals of the token\n * @param amount - The amount to translate\n * @returns The translated amount\n */\n public static translateOutgoingDecimals(decimals: number, amount: bigint): bigint {\n if (decimals <= 18) {\n return amount / BigInt(10 ** (18 - decimals));\n }\n return amount * BigInt(10 ** (decimals - 18));\n }\n}\n","import { type Address, type Hex, type PublicClient, encodeFunctionData } from 'viem';\nimport { assetManagerAbi } from '../../abis/index.js';\nimport { getHubAssetInfo } from '../../constants.js';\nimport type { EvmHubProvider } from '../../entities/Providers.js';\nimport type { AssetInfo, EvmContractCall } from '../../types.js';\nimport { encodeContractCalls } from '../../utils/evm-utils.js';\nimport { Erc20Service } from '../shared/Erc20Service.js';\nimport { EvmVaultTokenService } from './EvmVaultTokenService.js';\nimport type { SpokeChainId } from '@sodax/types';\n\nexport type EvmDepositToDataParams = {\n token: Hex | string;\n to: Address;\n amount: bigint;\n};\n\nexport type EvmWithdrawAssetDataParams = {\n token: Hex | string;\n to: Hex; // since spoke chain can be non-evm as well\n amount: bigint;\n};\n\nexport class EvmAssetManagerService {\n private constructor() {}\n\n /**\n * Get asset information for a given asset address\n * @param asset - The address of the asset contract\n * @param assetManager - The address of the asset manager contract\n * @param client - The Viem public client\n * @returns Object containing chainID and spoke address for the asset\n */\n public static async getAssetInfo(asset: Address, assetManager: Address, client: PublicClient): Promise<AssetInfo> {\n const [chainId, spokeAddress] = await client.readContract({\n address: assetManager,\n abi: assetManagerAbi,\n functionName: 'assetInfo',\n args: [asset],\n });\n\n return {\n chainId,\n spokeAddress,\n };\n }\n\n /**\n * Encodes a transfer transaction for an asset.\n * @param token - The address of the token.\n * @param to - The address to transfer the token to.\n * @param amount - The amount of the token to transfer.\n * @param assetManager\n * @returns The encoded contract call.\n */\n public static encodeTransfer(token: Address, to: Address, amount: bigint, assetManager: Address): EvmContractCall {\n return {\n address: assetManager,\n value: 0n,\n data: encodeFunctionData({\n abi: assetManagerAbi,\n functionName: 'transfer',\n args: [token, to, amount, '0x'],\n }),\n };\n }\n\n /**\n * Constructs the data for depositing tokens to the spoke chain.\n * @param {EvmDepositToDataParams} params - The address of the token to deposit.\n * @param {EvmSpokeProvider} spokeProvider - The provider for the spoke chain.\n * @returns {Hex} Encoded contract calls for the deposit transaction.\n * @throws Will throw an error if the asset or vault address is not found.\n */\n public static depositToData(params: EvmDepositToDataParams, spokeChainId: SpokeChainId): Hex {\n const calls: EvmContractCall[] = [];\n const assetConfig = getHubAssetInfo(spokeChainId, params.token);\n\n if (!assetConfig) {\n throw new Error('[depositToData] Hub asset not found');\n }\n\n const assetAddress = assetConfig.asset;\n const vaultAddress = assetConfig.vault;\n\n calls.push(Erc20Service.encodeApprove(assetAddress, vaultAddress, params.amount));\n calls.push(EvmVaultTokenService.encodeDeposit(vaultAddress, assetAddress, params.amount));\n const translatedAmount = EvmVaultTokenService.translateIncomingDecimals(assetConfig.decimal, params.amount);\n calls.push(Erc20Service.encodeTransfer(vaultAddress, params.to, translatedAmount));\n\n return encodeContractCalls(calls);\n }\n\n /**\n * Withdraw tokens from the spoke chain.\n * @param {EvmWithdrawAssetDataParams} params - Parameters for the withdrawal.\n * @param {EvmSpokeProvider} spokeProvider - The provider for the spoke chain.\n * @param {EvmHubProvider} hubProvider - The provider for the hub chain.\n * @returns {Hex} Encoded contract calls for the withdrawal transaction.\n * @throws Will throw an error if the asset address is not found.\n */\n public static withdrawAssetData(\n params: EvmWithdrawAssetDataParams,\n hubProvider: EvmHubProvider,\n spokeChainId: SpokeChainId,\n ): Hex {\n const calls: EvmContractCall[] = [];\n const assetConfig = getHubAssetInfo(spokeChainId, params.token);\n\n if (!assetConfig) {\n throw new Error('[withdrawAssetData] Hub asset not found');\n }\n\n const assetAddress = assetConfig.asset;\n\n calls.push(\n EvmAssetManagerService.encodeTransfer(\n assetAddress,\n params.to,\n params.amount,\n hubProvider.chainConfig.addresses.assetManager,\n ),\n );\n\n return encodeContractCalls(calls);\n }\n\n /**\n * Get asset address for a given chain ID and spoke address\n * @param chainId Chain ID where the asset exists\n * @param spokeAddress Address of the asset on the spoke chain\n * @param assetManager Address of the asset manager contract\n * @param client The Viem public client\n * @returns The asset's address on the hub chain\n */\n async getAssetAddress(\n chainId: bigint,\n spokeAddress: Address,\n assetManager: Address,\n client: PublicClient,\n ): Promise<Address> {\n return client.readContract({\n address: assetManager,\n abi: assetManagerAbi,\n functionName: 'assets',\n args: [chainId, spokeAddress],\n });\n }\n}\n","import type { Address } from 'viem';\nimport { walletFactoryAbi } from '../../abis/index.js';\nimport type { EvmHubProvider } from '../../entities/index.js';\nimport { type Hex, getIntentRelayChainId } from '../../index.js';\nimport type { SpokeChainId } from '@sodax/types';\n\nexport class EvmWalletAbstraction {\n private constructor() {}\n\n /**\n * Get the hub wallet address for a given spoke chain and address.\n * @param chainId - The spoke chain ID.\n * @param address - The address on the spoke chain.\n * @param hubProvider - The hub provider.\n * @returns The hub wallet address.\n */\n public static async getUserHubWalletAddress(\n chainId: SpokeChainId,\n address: Hex,\n hubProvider: EvmHubProvider,\n ): Promise<Address> {\n return hubProvider.publicClient.readContract({\n address: hubProvider.chainConfig.addresses.hubWallet,\n abi: walletFactoryAbi,\n functionName: 'getDeployedAddress',\n args: [BigInt(getIntentRelayChainId(chainId)), address],\n });\n }\n}\n","import type { Address, Hex, SpokeChainId } from '@sodax/types';\nimport { SonicSpokeProvider, type EvmHubProvider, type SpokeProvider } from '../../entities/index.js';\nimport { EvmWalletAbstraction, SonicSpokeService } from '../../index.js';\n\n/**\n * Service to get valid hub wallet address which may differ based on the spoke chain.\n */\nexport class WalletAbstractionService {\n private constructor() {}\n\n public static async getUserHubWalletAddress(\n chainId: SpokeChainId,\n address: Hex,\n hubProvider: EvmHubProvider,\n spokeProvider: SpokeProvider,\n ): Promise<Address> {\n // if chainId is the same as the hub chain id, use the user router (sonic)\n if (chainId === hubProvider.chainConfig.chain.id) {\n if (spokeProvider instanceof SonicSpokeProvider) {\n return SonicSpokeService.getUserRouter(address, spokeProvider);\n }\n\n throw new Error(\n '[WalletAbstractionService.getUserHubWalletAddress] Invalid spoke provider. Sonic spoke provider is required.',\n );\n }\n\n return EvmWalletAbstraction.getUserHubWalletAddress(chainId, address, hubProvider);\n }\n}\n","import invariant from 'tiny-invariant';\nimport {\n DEFAULT_MAX_RETRY,\n DEFAULT_RETRY_DELAY_MS,\n FEE_PERCENTAGE_SCALE,\n isPartnerFeeAmount,\n isPartnerFeePercentage,\n type Hex,\n type PartnerFee,\n} from '../index.js';\n\nexport async function retry<T>(\n action: (retryCount: number) => Promise<T>,\n retryCount: number = DEFAULT_MAX_RETRY,\n delayMs = DEFAULT_RETRY_DELAY_MS,\n): Promise<T> {\n do {\n try {\n return await action(retryCount);\n } catch (e) {\n retryCount--;\n\n if (retryCount <= 0) {\n console.error(`Failed to perform operation even after ${DEFAULT_MAX_RETRY} attempts.. Throwing origin error..`);\n throw e;\n }\n }\n\n await new Promise(resolve => setTimeout(resolve, delayMs));\n } while (retryCount > 0);\n\n throw new Error(`Retry exceeded MAX_RETRY_DEFAULT=${DEFAULT_MAX_RETRY}`);\n}\n\nexport function getRandomBytes(length: number): Uint8Array {\n const array = new Uint8Array(length);\n for (let i = 0; i < length; i++) {\n array[i] = Math.floor(Math.random() * 256);\n }\n return array;\n}\n\nexport function randomUint256(): bigint {\n const bytes = getRandomBytes(32); // 256 bits\n let hex = '';\n\n for (const byte of bytes) {\n hex += byte.toString(16).padStart(2, '0') ?? '';\n }\n\n return BigInt(`0x${hex}`);\n}\n\n/**\n * Calculate the fee amount as a percentage of the input amount\n * @param {bigint} amount - The amount to calculate the fee for\n * @param {number} percentage - The percentage of the fee in basis points (e.g. 100 = 1%, 10000 = 100%)\n * @returns {bigint} The fee amount\n */\nexport function calculatePercentageFeeAmount(amount: bigint, percentage: number) {\n // Calculate fee as a percentage of the input amount\n return (amount * BigInt(percentage)) / FEE_PERCENTAGE_SCALE;\n}\n\n/**\n * Calculate the fee amount for a given input amount and fee\n * @param {bigint} inputAmount - The amount of input tokens\n * @param {PartnerFee} fee - The fee to calculate\n * @returns {bigint} The fee amount\n */\nexport function calculateFeeAmount(inputAmount: bigint, fee: PartnerFee | undefined): bigint {\n if (!fee) {\n return 0n;\n }\n\n invariant(inputAmount > 0n, 'Input amount must be greater than 0');\n\n let feeAmount = 0n;\n\n if (isPartnerFeeAmount(fee)) {\n invariant(\n fee.amount >= 0 && fee.amount <= inputAmount,\n `Fee amount must be greater than 0 and less than or equal to the input amount: ${fee.amount}`,\n );\n feeAmount = fee.amount;\n } else if (isPartnerFeePercentage(fee)) {\n invariant(\n fee.percentage >= 0 && fee.percentage <= FEE_PERCENTAGE_SCALE,\n `Fee percentage must be between 0 and ${FEE_PERCENTAGE_SCALE}}`,\n );\n\n feeAmount = calculatePercentageFeeAmount(inputAmount, fee.percentage);\n }\n\n return feeAmount;\n}\n\nexport function BigIntToHex(value: bigint): Hex {\n return `0x${value.toString(16)}`;\n}\n","import { type Hex, encodeFunctionData, isAddress } from 'viem';\nimport { poolAbi } from '../../abis/pool.abi.js';\nimport type { EvmHubProvider, SpokeProvider } from '../../entities/index.js';\nimport {\n DEFAULT_RELAYER_API_ENDPOINT,\n getHubAssetInfo,\n getMoneyMarketConfig,\n getSupportedMoneyMarketTokens,\n isConfiguredMoneyMarketConfig,\n isValidOriginalAssetAddress,\n isValidSpokeChainId,\n moneyMarketReserveAssets,\n SpokeService,\n relayTxAndWaitPacket,\n uiPoolDataAbi,\n type RelayErrorCode,\n DEFAULT_RELAY_TX_TIMEOUT,\n EvmSpokeProvider,\n isMoneyMarketSupportedToken,\n spokeChainConfig,\n SonicSpokeProvider,\n SonicSpokeService,\n} from '../../index.js';\nimport type {\n EvmContractCall,\n GetAddressType,\n GetSpokeDepositParamsType,\n HttpUrl,\n MoneyMarketConfigParams,\n MoneyMarketServiceConfig,\n Result,\n TxReturnType,\n} from '../../types.js';\nimport { calculateFeeAmount, encodeContractCalls } from '../../utils/index.js';\nimport { EvmAssetManagerService, EvmVaultTokenService, WalletAbstractionService } from '../hub/index.js';\nimport { Erc20Service } from '../shared/index.js';\nimport invariant from 'tiny-invariant';\nimport { SONIC_MAINNET_CHAIN_ID, type SpokeChainId, type Token, type Address } from '@sodax/types';\nimport { wrappedSonicAbi } from '../../abis/wrappedSonic.abi.js';\n\nexport type AggregatedReserveData = {\n underlyingAsset: Address;\n name: string;\n symbol: string;\n decimals: bigint;\n baseLTVasCollateral: bigint;\n reserveLiquidationThreshold: bigint;\n reserveLiquidationBonus: bigint;\n reserveFactor: bigint;\n usageAsCollateralEnabled: boolean;\n borrowingEnabled: boolean;\n isActive: boolean;\n isFrozen: boolean;\n liquidityIndex: bigint;\n variableBorrowIndex: bigint;\n liquidityRate: bigint;\n variableBorrowRate: bigint;\n lastUpdateTimestamp: number;\n aTokenAddress: Address;\n variableDebtTokenAddress: Address;\n interestRateStrategyAddress: Address;\n availableLiquidity: bigint;\n totalScaledVariableDebt: bigint;\n priceInMarketReferenceCurrency: bigint;\n priceOracle: Address;\n variableRateSlope1: bigint;\n variableRateSlope2: bigint;\n baseVariableBorrowRate: bigint;\n optimalUsageRatio: bigint;\n isPaused: boolean;\n isSiloedBorrowing: boolean;\n accruedToTreasury: bigint;\n unbacked: bigint;\n isolationModeTotalDebt: bigint;\n flashLoanEnabled: boolean;\n debtCeiling: bigint;\n debtCeilingDecimals: bigint;\n borrowCap: bigint;\n supplyCap: bigint;\n borrowableInIsolation: boolean;\n virtualAccActive: boolean;\n virtualUnderlyingBalance: bigint;\n};\n\nexport type BaseCurrencyInfo = {\n marketReferenceCurrencyUnit: bigint;\n marketReferenceCurrencyPriceInUsd: bigint;\n networkBaseTokenPriceInUsd: bigint;\n networkBaseTokenPriceDecimals: number;\n};\n\nexport type UserReserveData = {\n underlyingAsset: string;\n scaledATokenBalance: bigint;\n usageAsCollateralEnabledOnUser: boolean;\n scaledVariableDebt: bigint;\n};\n\nexport type ReserveDataLegacy = {\n //stores the reserve configuration\n configuration: bigint;\n //the liquidity index. Expressed in ray\n liquidityIndex: bigint;\n //the current supply rate. Expressed in ray\n currentLiquidityRate: bigint;\n //variable borrow index. Expressed in ray\n variableBorrowIndex: bigint;\n //the current variable borrow rate. Expressed in ray\n currentVariableBorrowRate: bigint;\n // DEPRECATED on v3.2.0\n currentStableBorrowRate: bigint;\n //timestamp of last update\n lastUpdateTimestamp: number;\n //the id of the reserve. Represents the position in the list of the active reserves\n id: number;\n //aToken address\n aTokenAddress: Address;\n // DEPRECATED on v3.2.0\n stableDebtTokenAddress: Address;\n //variableDebtToken address\n variableDebtTokenAddress: Address;\n //address of the interest rate strategy\n interestRateStrategyAddress: Address;\n //the current treasury balance, scaled\n accruedToTreasury: bigint;\n //the outstanding unbacked aTokens minted through the bridging feature\n unbacked: bigint;\n //the outstanding debt borrowed against this asset in isolation mode\n isolationModeTotalDebt: bigint;\n};\n\nexport type MoneyMarketEncodeSupplyParams = {\n asset: Address; // The address of the asset to supply.\n amount: bigint; // The amount of the asset to supply.\n onBehalfOf: Address; // The address on whose behalf the asset is supplied.\n referralCode: number; // The referral code for the transaction.\n};\n\nexport type MoneyMarketEncodeWithdrawParams = {\n asset: Address; // The address of the asset to withdraw.\n amount: bigint; // The amount of the asset to withdraw.\n to: Address; // The address that will receive the withdrawn assets.\n};\n\nexport type MoneyMarketEncodeBorrowParams = {\n asset: Address; // The address of the asset to borrow.\n amount: bigint; // The amount of the asset to borrow.\n interestRateMode: bigint; // The interest rate mode (2 for Variable).\n referralCode: number; // The referral code for the borrow transaction.\n onBehalfOf: Address; // The address that will receive the borrowed assets.\n};\n\nexport type MoneyMarketEncodeRepayParams = {\n asset: Address; // The address of the asset to repay.\n amount: bigint; // The amount of the asset to repay.\n interestRateMode: bigint; // The interest rate mode (2 for Variable).\n onBehalfOf: Address; // The address that will get their debt reduced/removed.\n};\n\nexport type MoneyMarketEncodeRepayWithATokensParams = {\n asset: Address; // The address of the asset to repay.\n amount: bigint; // The amount of the asset to repay.\n interestRateMode: bigint; // The interest rate mode (2 for Variable).\n};\n\nexport type MoneyMarketAction = 'supply' | 'borrow' | 'withdraw' | 'repay';\n\nexport type MoneyMarketSupplyParams = {\n token: string; // spoke chain token address\n amount: bigint; // The amount of the asset to supply.\n action: 'supply';\n};\n\nexport type MoneyMarketBorrowParams = {\n token: string; // spoke chain token address\n amount: bigint; // The amount of the asset to borrow.\n action: 'borrow';\n};\n\nexport type MoneyMarketWithdrawParams = {\n token: string; // spoke chain token address\n amount: bigint; // The amount of the asset to withdraw.\n action: 'withdraw';\n};\n\nexport type MoneyMarketRepayParams = {\n token: string; // spoke chain token address\n amount: bigint; // The amount of the asset to repay.\n action: 'repay';\n};\n\nexport type MoneyMarketParams =\n | MoneyMarketSupplyParams\n | MoneyMarketBorrowParams\n | MoneyMarketWithdrawParams\n | MoneyMarketRepayParams;\n\nexport type MoneyMarketErrorCode =\n | RelayErrorCode\n | 'UNKNOWN'\n | 'SUPPLY_FAILED'\n | 'BORROW_FAILED'\n | 'WITHDRAW_FAILED'\n | 'REPAY_FAILED';\n\nexport type MoneyMarketError = {\n code: MoneyMarketErrorCode;\n error: unknown;\n};\n\nexport class MoneyMarketService {\n public readonly config: MoneyMarketServiceConfig;\n private readonly hubProvider: EvmHubProvider;\n\n constructor(config: MoneyMarketConfigParams | undefined, hubProvider: EvmHubProvider, relayerApiEndpoint?: HttpUrl) {\n if (!config) {\n this.config = {\n ...getMoneyMarketConfig(SONIC_MAINNET_CHAIN_ID), // default to mainnet config\n partnerFee: undefined,\n relayerApiEndpoint: relayerApiEndpoint ?? DEFAULT_RELAYER_API_ENDPOINT,\n };\n } else if (isConfiguredMoneyMarketConfig(config)) {\n this.config = {\n ...config,\n partnerFee: config.partnerFee,\n relayerApiEndpoint: relayerApiEndpoint ?? DEFAULT_RELAYER_API_ENDPOINT,\n };\n } else {\n this.config = {\n ...getMoneyMarketConfig(hubProvider.chainConfig.chain.id), // default to mainnet config\n partnerFee: config.partnerFee,\n relayerApiEndpoint: relayerApiEndpoint ?? DEFAULT_RELAYER_API_ENDPOINT,\n };\n }\n this.hubProvider = hubProvider;\n }\n\n /**\n * Check if allowance is sufficient for actions on the money market pool\n * @param {MoneyMarketParams} params - Money market params containing token address and amount\n * @param {SpokeProvider} spokeProvider - The spoke provider instance\n * @return {Promise<Result<boolean>>} - Returns true if allowance is sufficient, false otherwise\n *\n * @example\n * const allowanceValid = await isAllowanceValid({\n * token: '0x...', // Address of the token (spoke chain) to supply\n * amount: 1000n, // Amount to supply (in token decimals)\n * action: 'supply',\n * }, spokeProvider);\n *\n * if (!allowanceValid.ok) {\n * // Handle error\n * }\n *\n * if (!allowanceValid.value) {\n * // Need to approve\n * }\n */\n public async isAllowanceValid<S extends SpokeProvider>(\n params: MoneyMarketParams,\n spokeProvider: S,\n ): Promise<Result<boolean>> {\n try {\n invariant(params.amount > 0n, 'Amount must be greater than 0');\n invariant(params.token.length > 0, 'Token is required');\n invariant(\n isMoneyMarketSupportedToken(spokeProvider.chainConfig.chain.id, params.token),\n `Unsupported spoke chain (${spokeProvider.chainConfig.chain.id}) token: ${params.token}`,\n );\n\n const walletAddress = await spokeProvider.walletProvider.getWalletAddress();\n\n if (spokeProvider instanceof EvmSpokeProvider && (params.action === 'supply' || params.action === 'repay')) {\n return await Erc20Service.isAllowanceValid(\n params.token as GetAddressType<EvmSpokeProvider>,\n params.amount,\n walletAddress as GetAddressType<EvmSpokeProvider>,\n spokeProvider.chainConfig.addresses.assetManager,\n spokeProvider,\n );\n }\n if (\n spokeProvider instanceof SonicSpokeProvider &&\n spokeProvider.chainConfig.chain.id === this.hubProvider.chainConfig.chain.id\n ) {\n if (params.action === 'withdraw') {\n const withdrawInfo = await SonicSpokeService.getWithdrawInfo(\n params.token as GetAddressType<SonicSpokeProvider>,\n params.amount,\n spokeProvider,\n this,\n );\n return await SonicSpokeService.isWithdrawApproved(\n walletAddress as GetAddressType<SonicSpokeProvider>,\n withdrawInfo,\n spokeProvider,\n );\n }\n if (params.action === 'borrow') {\n const borrowInfo = await SonicSpokeService.getBorrowInfo(\n params.token as GetAddressType<SonicSpokeProvider>,\n params.amount,\n spokeProvider.chainConfig.chain.id,\n this,\n );\n return await SonicSpokeService.isBorrowApproved(\n walletAddress as GetAddressType<SonicSpokeProvider>,\n borrowInfo,\n spokeProvider,\n );\n }\n if (params.action === 'supply' || params.action === 'repay') {\n const userRouter = await SonicSpokeService.getUserRouter(\n walletAddress as GetAddressType<SonicSpokeProvider>,\n spokeProvider,\n );\n\n return await Erc20Service.isAllowanceValid(\n params.token as GetAddressType<SonicSpokeProvider>,\n params.amount,\n walletAddress as GetAddressType<SonicSpokeProvider>,\n userRouter,\n spokeProvider,\n );\n }\n }\n\n return {\n ok: true,\n value: true,\n };\n } catch (error) {\n return {\n ok: false,\n error: error,\n };\n }\n }\n\n /**\n * Approve amount spending if isAllowanceValid returns false.\n * For evm spoke chains, the spender is the asset manager contract while\n * for sonic spoke (hub) chain, the spender is the user router contract.\n * @param token - ERC20 token address\n * @param amount - Amount to approve\n * @param spender - Spender address\n * @param spokeProvider - Spoke provider\n * @returns {Promise<Result<TxReturnType<S, R>>>} - Returns the transaction receipt\n *\n * @example\n * const approveResult = await approve(\n * {\n * token: '0x...', // ERC20 token address\n * amount: 1000n, // Amount to approve (in token decimals)\n * action: 'supply', // Action to perform\n * },\n * spokeProvider,\n * raw // Optional: true = return the raw transaction data, false = execute and return the transaction hash (default: false)\n * );\n *\n * if (!approveResult.ok) {\n * // Handle error\n * }\n *\n * const txReceipt = approveResult.value;\n */\n public async approve<S extends SpokeProvider, R extends boolean = false>(\n params: MoneyMarketParams,\n spokeProvider: S,\n raw?: R,\n ): Promise<Result<TxReturnType<S, R>>> {\n try {\n invariant(params.amount > 0n, 'Amount must be greater than 0');\n invariant(params.token.length > 0, 'Token is required');\n invariant(\n isMoneyMarketSupportedToken(spokeProvider.chainConfig.chain.id, params.token),\n `Unsupported spoke chain (${spokeProvider.chainConfig.chain.id}) token: ${params.token}`,\n );\n\n const walletAddress = await spokeProvider.walletProvider.getWalletAddress();\n\n if (spokeProvider instanceof EvmSpokeProvider) {\n invariant(\n params.action === 'supply' || params.action === 'repay',\n 'Invalid action (only supply and repay are supported on evm)',\n );\n invariant(isAddress(params.token), 'Invalid token address');\n\n const result = (await Erc20Service.approve(\n params.token,\n params.amount,\n spokeProvider.chainConfig.addresses.assetManager,\n spokeProvider,\n raw,\n )) satisfies TxReturnType<EvmSpokeProvider, R> as TxReturnType<S, R>;\n\n return {\n ok: true,\n value: result,\n };\n }\n\n if (\n spokeProvider instanceof SonicSpokeProvider &&\n spokeProvider.chainConfig.chain.id === this.hubProvider.chainConfig.chain.id\n ) {\n invariant(\n params.action === 'withdraw' ||\n params.action === 'borrow' ||\n params.action === 'supply' ||\n params.action === 'repay',\n 'Invalid action (only withdraw, borrow, supply and repay are supported on sonic)',\n );\n invariant(isAddress(params.token), 'Invalid token address');\n\n if (params.action === 'withdraw') {\n const withdrawInfo = await SonicSpokeService.getWithdrawInfo(\n params.token,\n params.amount,\n spokeProvider,\n this,\n );\n\n const result = (await SonicSpokeService.approveWithdraw(\n walletAddress as GetAddressType<SonicSpokeProvider>,\n withdrawInfo,\n spokeProvider,\n raw,\n )) satisfies TxReturnType<SonicSpokeProvider, R> as TxReturnType<S, R>;\n\n return {\n ok: true,\n value: result,\n };\n }\n if (params.action === 'borrow') {\n const borrowInfo = await SonicSpokeService.getBorrowInfo(\n params.token,\n params.amount,\n spokeProvider.chainConfig.chain.id,\n this,\n );\n\n const result = (await SonicSpokeService.approveBorrow(\n walletAddress as GetAddressType<SonicSpokeProvider>,\n borrowInfo,\n spokeProvider,\n raw,\n )) satisfies TxReturnType<SonicSpokeProvider, R> as TxReturnType<S, R>;\n\n return {\n ok: true,\n value: result,\n };\n }\n if (params.action === 'supply' || params.action === 'repay') {\n const userRouter = await SonicSpokeService.getUserRouter(\n walletAddress as GetAddressType<SonicSpokeProvider>,\n spokeProvider,\n );\n\n const result = (await Erc20Service.approve(\n params.token,\n params.amount,\n userRouter,\n spokeProvider,\n raw,\n )) satisfies TxReturnType<EvmSpokeProvider, R> as TxReturnType<S, R>;\n\n return {\n ok: true,\n value: result,\n };\n }\n }\n\n return {\n ok: false,\n error: new Error('Approve only supported for EVM spoke chains'),\n };\n } catch (error) {\n return {\n ok: false,\n error: error,\n };\n }\n }\n\n /**\n * Supply tokens to the money market pool, relay the transaction to the hub and submit the intent to the Solver API\n * @param params - The parameters for the supply transaction.\n * @param spokeProvider - The spoke provider.\n * @param timeout - The timeout in milliseconds for the transaction. Default is 60 seconds.\n * @returns {Promise<Result<[Hex, Hex], MoneyMarketError>>} - Returns the transaction result and the hub transaction hash or error\n *\n * @example\n * const result = await moneyMarketService.supplyAndSubmit(\n * {\n * token: '0x...', // Address of the token (spoke chain address) to supply\n * amount: 1000n, // Amount to supply (in token decimals)\n * },\n * spokeProvider,\n * 30000 // Optional timeout in milliseconds (default: 60000, i.e. 60 seconds)\n * );\n *\n * if (!result.ok) {\n * // Handle error\n * }\n *\n * const [\n * spokeTxHash, // transaction hash on the spoke chain\n * hubTxHash, // transaction hash on the hub chain (i.e. the transaction that was relayed to the hub)\n * ] = result.value;\n * console.log('Supply transaction hashes:', { spokeTxHash, hubTxHash });\n */\n public async supplyAndSubmit<S extends SpokeProvider>(\n params: MoneyMarketSupplyParams,\n spokeProvider: S,\n timeout = DEFAULT_RELAY_TX_TIMEOUT,\n ): Promise<Result<[Hex, Hex], MoneyMarketError>> {\n try {\n const txResult = await this.supply(params, spokeProvider);\n\n if (!txResult.ok) {\n return {\n ok: false,\n error: {\n code: 'SUPPLY_FAILED',\n error: txResult.error,\n },\n };\n }\n\n const packetResult = await relayTxAndWaitPacket(\n txResult.value,\n spokeProvider,\n this.config.relayerApiEndpoint,\n timeout,\n );\n\n if (!packetResult.ok) {\n return packetResult;\n }\n\n return { ok: true, value: [txResult.value, packetResult.value.dst_tx_hash as Hex] };\n } catch (error) {\n return {\n ok: false,\n error: {\n code: 'UNKNOWN',\n error: error,\n },\n };\n }\n }\n\n /**\n * Supply tokens to the money market pool without submitting the intent to the Solver API\n * NOTE: This method does not submit the intent to the Solver API, it only executes the transaction on the spoke chain\n * In order to successfully supply tokens, you need to:\n * 1. Check if the allowance is sufficient\n * 2. Approve the asset manager contract to spend the tokens\n * 3. Supply the tokens\n * 4. Submit the intent to the Solver API and await it using relayTxAndWaitPacket method\n *\n * @param params - The parameters for the supply transaction.\n * @param spokeProvider - The spoke provider.\n * @param raw - Whether to return the raw transaction data.\n * @returns {Promise<Result<TxReturnType<S, R>, MoneyMarketErrorCode>>} - Returns the transaction result.\n *\n * @example\n * const moneyMarketService = new MoneyMarketService(config);\n * const result = await moneyMarketService.supply(\n * {\n * token: \"0x123...\", // token address\n * amount: 1000000000000000000n // 1 token in wei\n * },\n * spokeProvider,\n * raw // Optional: true = return the raw transaction data, false = exeute and return the transaction hash (default: false)\n * );\n *\n * if (result.ok) {\n * const txHash = result.value;\n * console.log('Supply transaction hash:', txHash);\n * } else {\n * console.error('Supply failed:', result.error);\n * }\n */\n async supply<S extends SpokeProvider = SpokeProvider, R extends boolean = false>(\n params: MoneyMarketSupplyParams,\n spokeProvider: S,\n raw?: R,\n ): Promise<Result<TxReturnType<S, R>, MoneyMarketError>> {\n try {\n invariant(params.action === 'supply', 'Invalid action');\n invariant(params.token.length > 0, 'Token is required');\n invariant(params.amount > 0n, 'Amount must be greater than 0');\n invariant(\n isMoneyMarketSupportedToken(spokeProvider.chainConfig.chain.id, params.token),\n `Unsupported spoke chain (${spokeProvider.chainConfig.chain.id}) token: ${params.token}`,\n );\n\n const walletAddressBytes = await spokeProvider.walletProvider.getWalletAddressBytes();\n const hubWallet = await WalletAbstractionService.getUserHubWalletAddress(\n spokeProvider.chainConfig.chain.id,\n walletAddressBytes,\n this.hubProvider,\n spokeProvider,\n );\n\n const data: Hex = this.supplyData(params.token, hubWallet, params.amount, spokeProvider.chainConfig.chain.id);\n\n const walletAddress = (await spokeProvider.walletProvider.getWalletAddress()) as `0x${string}`;\n const txResult = await SpokeService.deposit(\n {\n from: walletAddress,\n to: hubWallet,\n token: params.token,\n amount: params.amount,\n data,\n } as unknown as GetSpokeDepositParamsType<S>,\n spokeProvider,\n this.hubProvider,\n raw,\n );\n\n return {\n ok: true,\n value: txResult as TxReturnType<S, R>,\n };\n } catch (error) {\n return {\n ok: false,\n error: {\n code: 'UNKNOWN',\n error,\n },\n };\n }\n }\n\n /**\n * Borrow tokens from the money market pool, relay the transaction to the hub and submit the intent to the Solver API\n * @param params - The parameters for the borrow transaction.\n * @param spokeProvider - The spoke provider.\n * @param timeout - The timeout in milliseconds for the transaction. Default is 60 seconds.\n * @returns {Promise<Result<[Hex, Hex], MoneyMarketError>>} - Returns the transaction result and the hub transaction hash or error\n *\n * @example\n * const result = await moneyMarketService.borrowAndSubmit(\n * {\n * token: '0x...', // Address of the token (spoke chain address) to borrow\n * amount: 1000n, // Amount to borrow (in token decimals)\n * },\n * spokeProvider,\n * 30000 // Optional timeout in milliseconds (default: 60000, i.e. 60 seconds)\n * );\n *\n * if (!result.ok) {\n * // Handle error\n * }\n *\n * const [\n * spokeTxHash, // transaction hash on the spoke chain\n * hubTxHash, // transaction hash on the hub chain (i.e. the transaction that was relayed to the hub)\n * ] = result.value;\n * console.log('Borrow transaction hashes:', { spokeTxHash, hubTxHash });\n */\n public async borrowAndSubmit<S extends SpokeProvider>(\n params: MoneyMarketBorrowParams,\n spokeProvider: S,\n timeout = DEFAULT_RELAY_TX_TIMEOUT,\n ): Promise<Result<[Hex, Hex], MoneyMarketError>> {\n try {\n const txResult = await this.borrow(params, spokeProvider);\n\n if (!txResult.ok) {\n return {\n ok: false,\n error: {\n code: 'BORROW_FAILED',\n error: txResult.error,\n },\n };\n }\n\n const packetResult = await relayTxAndWaitPacket(\n txResult.value,\n spokeProvider,\n this.config.relayerApiEndpoint,\n timeout,\n );\n\n if (!packetResult.ok) {\n return packetResult;\n }\n\n return { ok: true, value: [txResult.value, packetResult.value.dst_tx_hash as Hex] };\n } catch (error) {\n return {\n ok: false,\n error: {\n code: 'UNKNOWN',\n error: error,\n },\n };\n }\n }\n\n /**\n * Borrow tokens from the money market pool without submitting the intent to the Solver API\n * NOTE: This method does not submit the intent to the Solver API, it only executes the transaction on the spoke chain\n * In order to successfully borrow tokens, you need to:\n * 1. Execute the borrow transaction on the spoke chain\n * 2. Submit the intent to the Solver API and await it using relayTxAndWaitPacket method\n *\n * @param params - The parameters for the borrow transaction.\n * @param spokeProvider - The spoke provider.\n * @param raw - Whether to return the raw transaction data.\n * @returns {Promise<Result<TxReturnType<S, R>, MoneyMarketErrorCode>>} - Returns the transaction result (raw transaction data or transaction hash).\n *\n * @example\n * const moneyMarketService = new MoneyMarketService(config);\n * const result = await moneyMarketService.borrow(\n * {\n * token: \"0x123...\", // token address\n * amount: 1000000000000000000n // 1 token in wei\n * },\n * spokeProvider,\n * raw // Optional: true = return the raw transaction data, false = exeute and return the transaction hash (default: false)\n * );\n *\n * if (result.ok) {\n * const txHash = result.value;\n * console.log('Borrow transaction hash:', txHash);\n * } else {\n * console.error('Borrow failed:', result.error);\n * }\n */\n async borrow<S extends SpokeProvider = SpokeProvider, R extends boolean = false>(\n params: MoneyMarketBorrowParams,\n spokeProvider: S,\n raw?: R,\n ): Promise<Result<TxReturnType<S, R>, MoneyMarketErrorCode>> {\n invariant(params.action === 'borrow', 'Invalid action');\n invariant(params.token.length > 0, 'Token is required');\n invariant(params.amount > 0n, 'Amount must be greater than 0');\n invariant(\n isMoneyMarketSupportedToken(spokeProvider.chainConfig.chain.id, params.token),\n `Unsupported spoke chain (${spokeProvider.chainConfig.chain.id}) token: ${params.token}`,\n );\n\n const walletAddressBytes = await spokeProvider.walletProvider.getWalletAddressBytes();\n const hubWallet = await WalletAbstractionService.getUserHubWalletAddress(\n spokeProvider.chainConfig.chain.id,\n walletAddressBytes,\n this.hubProvider,\n spokeProvider,\n );\n\n const data: Hex = this.borrowData(\n hubWallet,\n walletAddressBytes,\n params.token,\n params.amount,\n spokeProvider.chainConfig.chain.id,\n );\n\n const txResult = await SpokeService.callWallet(hubWallet, data, spokeProvider, this.hubProvider, raw);\n\n return { ok: true, value: txResult as TxReturnType<S, R> };\n }\n\n /**\n * Withdraw tokens from the money market pool, relay the transaction to the hub and submit the intent to the Solver API\n *\n * @param params - The parameters for the withdraw transaction.\n * @param spokeProvider - The spoke provider.\n * @param timeout - The timeout in milliseconds for the transaction. Default is 60 seconds.\n * @returns {Promise<Result<[Hex, Hex], MoneyMarketError>>} - Returns the transaction result and the hub transaction hash or error\n *\n * @example\n * const result = await moneyMarketService.withdrawAndSubmit(\n * {\n * token: '0x...', // Address of the token (spoke chain address) to withdraw\n * amount: 1000n, // Amount to withdraw (in token decimals)\n * },\n * spokeProvider,\n * 30000 // Optional timeout in milliseconds (default: 60000, i.e. 60 seconds)\n * );\n *\n * if (!result.ok) {\n * // Handle error\n * }\n *\n * const [\n * spokeTxHash, // transaction hash on the spoke chain\n * hubTxHash, // transaction hash on the hub chain (i.e. the transaction that was relayed to the hub)\n * ] = result.value;\n * console.log('Withdraw transaction hashes:', { spokeTxHash, hubTxHash });\n */\n public async withdrawAndSubmit<S extends SpokeProvider>(\n params: MoneyMarketWithdrawParams,\n spokeProvider: S,\n timeout = DEFAULT_RELAY_TX_TIMEOUT,\n ): Promise<Result<[Hex, Hex], MoneyMarketError>> {\n try {\n const txResult = await this.withdraw(params, spokeProvider);\n\n if (!txResult.ok) {\n return {\n ok: false,\n error: {\n code: 'WITHDRAW_FAILED',\n error: txResult.error,\n },\n };\n }\n\n const packetResult = await relayTxAndWaitPacket(\n txResult.value,\n spokeProvider,\n this.config.relayerApiEndpoint,\n timeout,\n );\n\n if (!packetResult.ok) {\n return packetResult;\n }\n\n return { ok: true, value: [txResult.value, packetResult.value.dst_tx_hash as Hex] };\n } catch (error) {\n return {\n ok: false,\n error: {\n code: 'UNKNOWN',\n error: error,\n },\n };\n }\n }\n\n /**\n * Withdraw tokens from the money market pool without submitting the intent to the Solver API\n * NOTE: This method does not submit the intent to the Solver API, it only executes the transaction on the spoke chain\n * In order to successfully withdraw tokens, you need to:\n * 1. Execute the withdraw transaction on the spoke chain\n * 2. Submit the intent to the Solver API and await it using relayTxAndWaitPacket method\n *\n * @param params - The parameters for the withdraw transaction.\n * @param spokeProvider - The spoke provider.\n * @param raw - Whether to return the raw transaction data.\n * @returns {Promise<Result<TxReturnType<S, R>, MoneyMarketErrorCode>>} - Returns the transaction result (raw transaction data or transaction hash).\n *\n * @example\n * const moneyMarketService = new MoneyMarketService(config);\n * const result = await moneyMarketService.withdraw(\n * {\n * token: \"0x123...\", // token address\n * amount: 1000000000000000000n // 1 token in wei\n * },\n * spokeProvider,\n * raw // Optional: true = return the raw transaction data, false = exeute and return the transaction hash (default: false)\n * );\n *\n * if (result.ok) {\n * const txHash = result.value;\n * console.log('Withdraw transaction hash:', txHash);\n * } else {\n * console.error('Withdraw failed:', result.error);\n * }\n */\n async withdraw<S extends SpokeProvider = SpokeProvider, R extends boolean = false>(\n params: MoneyMarketWithdrawParams,\n spokeProvider: S,\n raw?: R,\n ): Promise<Result<TxReturnType<S, R>, MoneyMarketErrorCode>> {\n invariant(params.action === 'withdraw', 'Invalid action');\n invariant(params.token.length > 0, 'Token is required');\n invariant(params.amount > 0n, 'Amount must be greater than 0');\n invariant(\n isMoneyMarketSupportedToken(spokeProvider.chainConfig.chain.id, params.token),\n `Unsupported spoke chain (${spokeProvider.chainConfig.chain.id}) token: ${params.token}`,\n );\n\n const walletAddressBytes = await spokeProvider.walletProvider.getWalletAddressBytes();\n const hubWallet = await WalletAbstractionService.getUserHubWalletAddress(\n spokeProvider.chainConfig.chain.id,\n walletAddressBytes,\n this.hubProvider,\n spokeProvider,\n );\n\n const data: Hex = this.withdrawData(\n hubWallet,\n walletAddressBytes,\n params.token,\n params.amount,\n spokeProvider.chainConfig.chain.id,\n );\n\n const txResult = await SpokeService.callWallet(hubWallet, data, spokeProvider, this.hubProvider, raw);\n\n return { ok: true, value: txResult };\n }\n\n /**\n * Repay tokens to the money market pool, relay the transaction to the hub and submit the intent to the Solver API\n *\n * @param params - The parameters for the repay transaction.\n * @param spokeProvider - The spoke provider.\n * @param timeout - The timeout in milliseconds for the transaction. Default is 60 seconds.\n * @returns {Promise<Result<[Hex, Hex], MoneyMarketError>>} - Returns the transaction result and the hub transaction hash or error\n *\n * @example\n * const result = await moneyMarketService.repayAndSubmit(\n * {\n * token: '0x...', // Address of the token (spoke chain address) to repay\n * amount: 1000n, // Amount to repay (in token decimals)\n * },\n * spokeProvider,\n * 30000 // Optional timeout in milliseconds (default: 60000, i.e. 60 seconds)\n * );\n *\n * if (!result.ok) {\n * // Handle error\n * }\n *\n * const [\n * spokeTxHash, // transaction hash on the spoke chain\n * hubTxHash, // transaction hash on the hub chain (i.e. the transaction that was relayed to the hub)\n * ] = result.value;\n * console.log('Repay transaction hashes:', { spokeTxHash, hubTxHash });\n */\n public async repayAndSubmit<S extends SpokeProvider>(\n params: MoneyMarketRepayParams,\n spokeProvider: S,\n timeout = DEFAULT_RELAY_TX_TIMEOUT,\n ): Promise<Result<[Hex, Hex], MoneyMarketError>> {\n try {\n const txResult = await this.repay(params, spokeProvider);\n\n if (!txResult.ok) {\n return {\n ok: false,\n error: {\n code: 'REPAY_FAILED',\n error: txResult.error,\n },\n };\n }\n\n const packetResult = await relayTxAndWaitPacket(\n txResult.value,\n spokeProvider,\n this.config.relayerApiEndpoint,\n timeout,\n );\n\n if (!packetResult.ok) {\n return packetResult;\n }\n\n return { ok: true, value: [txResult.value, packetResult.value.dst_tx_hash as Hex] };\n } catch (error) {\n return {\n ok: false,\n error: {\n code: 'UNKNOWN',\n error: error,\n },\n };\n }\n }\n\n /**\n * Repay tokens to the money market pool without submitting the intent to the Solver API\n * NOTE: This method does not submit the intent to the Solver API, it only executes the transaction on the spoke chain\n * In order to successfully repay tokens, you need to:\n * 1. Check if the allowance is sufficient\n * 2. Approve the asset manager contract to spend the tokens\n * 3. Execute the repay transaction on the spoke chain\n * 4. Submit the intent to the Solver API and await it using relayTxAndWaitPacket method\n *\n * @param params - The parameters for the repay transaction.\n * @param spokeProvider - The spoke provider.\n * @param raw - Whether to return the raw transaction data.\n * @returns {Promise<Result<TxReturnType<S, R>, MoneyMarketErrorCode>>} The transaction result (raw transaction data or transaction hash) or error.\n *\n * @example\n * const moneyMarketService = new MoneyMarketService(config);\n * const result = await moneyMarketService.repay(\n * {\n * token: \"0x123...\", // token address\n * amount: 1000000000000000000n // 1 token in wei\n * },\n * spokeProvider,\n * raw // Optional: true = return the raw transaction data, false = exeute and return the transaction hash (default: false)\n * );\n *\n * if (result.ok) {\n * const txHash = result.value;\n * console.log('Repay transaction hash:', txHash);\n * } else {\n * console.error('Repay failed:', result.error);\n * }\n */\n async repay<S extends SpokeProvider = SpokeProvider, R extends boolean = false>(\n params: MoneyMarketRepayParams,\n spokeProvider: S,\n raw?: R,\n ): Promise<Result<TxReturnType<S, R>, MoneyMarketErrorCode>> {\n invariant(params.action === 'repay', 'Invalid action');\n invariant(params.token.length > 0, 'Token is required');\n invariant(params.amount > 0n, 'Amount must be greater than 0');\n invariant(\n isMoneyMarketSupportedToken(spokeProvider.chainConfig.chain.id, params.token),\n `Unsupported spoke chain (${spokeProvider.chainConfig.chain.id}) token: ${params.token}`,\n );\n\n const walletAddressBytes = await spokeProvider.walletProvider.getWalletAddressBytes();\n const hubWallet = await WalletAbstractionService.getUserHubWalletAddress(\n spokeProvider.chainConfig.chain.id,\n walletAddressBytes,\n this.hubProvider,\n spokeProvider,\n );\n const data: Hex = this.repayData(params.token, hubWallet, params.amount, spokeProvider.chainConfig.chain.id);\n\n const walletAddress = (await spokeProvider.walletProvider.getWalletAddress()) as `0x${string}`;\n const txResult = await SpokeService.deposit(\n {\n from: walletAddress,\n to: hubWallet,\n token: params.token,\n amount: params.amount,\n data,\n } as unknown as GetSpokeDepositParamsType<S>,\n spokeProvider,\n this.hubProvider,\n raw,\n );\n\n return { ok: true, value: txResult as TxReturnType<S, R> };\n }\n\n /**\n * Build transaction data for supplying to the money market pool\n * @param token - The address of the token on spoke chain\n * @param to - The user wallet address on the hub chain\n * @param amount - The amount to deposit\n * @param spokeChainId - The chain ID of the spoke chain\n * @returns {Hex} The transaction data.\n */\n public supplyData(token: string, to: Address, amount: bigint, spokeChainId: SpokeChainId): Hex {\n const calls: EvmContractCall[] = [];\n const assetConfig = getHubAssetInfo(spokeChainId, token);\n\n invariant(assetConfig, `hub asset not found for spoke chain token (token): ${token}`);\n\n const assetAddress = assetConfig.asset;\n const vaultAddress = assetConfig.vault;\n const lendingPool = this.config.lendingPool;\n\n calls.push(Erc20Service.encodeApprove(assetAddress, vaultAddress, amount));\n calls.push(EvmVaultTokenService.encodeDeposit(vaultAddress, assetAddress, amount));\n const translatedAmount = EvmVaultTokenService.translateIncomingDecimals(assetConfig.decimal, amount);\n calls.push(Erc20Service.encodeApprove(vaultAddress, lendingPool, translatedAmount));\n calls.push(\n MoneyMarketService.encodeSupply(\n { asset: vaultAddress, amount: translatedAmount, onBehalfOf: to, referralCode: 0 },\n lendingPool,\n ),\n );\n\n return encodeContractCalls(calls);\n }\n\n /**\n * Build transaction data for borrowing from the money market pool\n * @param from - The user wallet address on the hub chain\n * @param to - The user wallet address on the spoke chain\n * @param token - The address of the token to borrow\n * @param amount - The amount to borrow in hub chain decimals\n * @param spokeChainId - The chain ID of the spoke chain\n * @returns {Hex} The transaction data.\n */\n public borrowData(from: Address, to: Address | Hex, token: string, amount: bigint, spokeChainId: SpokeChainId): Hex {\n invariant(isValidSpokeChainId(spokeChainId), `Invalid spokeChainId: ${spokeChainId}`);\n invariant(\n isValidOriginalAssetAddress(spokeChainId, token),\n `Unsupported spoke chain (${spokeChainId}) token: ${token}`,\n );\n\n const assetConfig = getHubAssetInfo(spokeChainId, token);\n\n invariant(assetConfig, `hub asset not found for spoke chain token (token): ${token}`);\n\n const assetAddress = assetConfig.asset;\n const vaultAddress = assetConfig.vault;\n const bnUSDVault = this.config.bnUSDVault;\n const bnUSD = this.config.bnUSD;\n\n const feeAmount = calculateFeeAmount(amount, this.config.partnerFee);\n const calls: EvmContractCall[] = [];\n\n if (bnUSDVault && bnUSD && bnUSDVault.toLowerCase() === vaultAddress.toLowerCase()) {\n calls.push(\n MoneyMarketService.encodeBorrow(\n { asset: bnUSD, amount: amount, interestRateMode: 2n, referralCode: 0, onBehalfOf: from },\n this.config.lendingPool,\n ),\n );\n calls.push(Erc20Service.encodeApprove(bnUSD, bnUSDVault, amount));\n calls.push(EvmVaultTokenService.encodeDeposit(bnUSDVault, bnUSD, amount));\n\n if (this.config.partnerFee && feeAmount) {\n calls.push(Erc20Service.encodeTransfer(bnUSDVault, this.config.partnerFee.address, feeAmount));\n }\n } else {\n calls.push(\n MoneyMarketService.encodeBorrow(\n { asset: vaultAddress, amount: amount, interestRateMode: 2n, referralCode: 0, onBehalfOf: from },\n this.config.lendingPool,\n ),\n );\n\n if (this.config.partnerFee && feeAmount) {\n calls.push(Erc20Service.encodeTransfer(vaultAddress, this.config.partnerFee.address, feeAmount));\n }\n }\n\n calls.push(EvmVaultTokenService.encodeWithdraw(vaultAddress, assetAddress, amount - feeAmount));\n const translatedAmountOut = EvmVaultTokenService.translateOutgoingDecimals(assetConfig.decimal, amount - feeAmount);\n\n if (spokeChainId === this.hubProvider.chainConfig.chain.id) {\n if (token.toLowerCase() === spokeChainConfig[this.hubProvider.chainConfig.chain.id].nativeToken.toLowerCase()) {\n const withdrawToCall = {\n address: assetAddress,\n value: 0n,\n data: encodeFunctionData({\n abi: wrappedSonicAbi,\n functionName: 'withdrawTo',\n args: [to, translatedAmountOut],\n }),\n };\n\n calls.push(withdrawToCall);\n } else {\n calls.push(Erc20Service.encodeTransfer(assetAddress, to, translatedAmountOut));\n }\n } else {\n calls.push(\n EvmAssetManagerService.encodeTransfer(\n assetAddress,\n to,\n translatedAmountOut,\n this.hubProvider.chainConfig.addresses.assetManager,\n ),\n );\n }\n\n return encodeContractCalls(calls);\n }\n\n /**\n * Build transaction data for withdrawing from the money market pool\n * @param from - The user wallet address on the hub chain\n * @param to - The user wallet address on the spoke chain\n * @param token - The address of the token to borrow\n * @param amount - The amount to borrow in hub chain decimals\n * @param spokeChainId - The chain ID of the spoke chain\n * @returns {Hex} The transaction data.\n */\n public withdrawData(from: Address, to: Address, token: string, amount: bigint, spokeChainId: SpokeChainId): Hex {\n const calls: EvmContractCall[] = [];\n const assetConfig = getHubAssetInfo(spokeChainId, token);\n\n if (!assetConfig) {\n throw new Error('[withdrawData] Hub asset not found');\n }\n\n const assetAddress = assetConfig.asset;\n const vaultAddress = assetConfig.vault;\n\n if (!assetAddress || !vaultAddress) {\n throw new Error('Address not found');\n }\n calls.push(\n MoneyMarketService.encodeWithdraw({ asset: vaultAddress, amount: amount, to: from }, this.config.lendingPool),\n );\n\n calls.push(EvmVaultTokenService.encodeWithdraw(vaultAddress, assetAddress, amount));\n const translatedAmountOut = EvmVaultTokenService.translateOutgoingDecimals(assetConfig.decimal, amount);\n\n if (spokeChainId === this.hubProvider.chainConfig.chain.id) {\n if (token.toLowerCase() === spokeChainConfig[this.hubProvider.chainConfig.chain.id].nativeToken.toLowerCase()) {\n const withdrawToCall = {\n address: assetAddress,\n value: 0n,\n data: encodeFunctionData({\n abi: wrappedSonicAbi,\n functionName: 'withdrawTo',\n args: [to, translatedAmountOut],\n }),\n };\n calls.push(withdrawToCall);\n } else {\n calls.push(Erc20Service.encodeTransfer(assetAddress, to, translatedAmountOut));\n }\n } else {\n calls.push(\n EvmAssetManagerService.encodeTransfer(\n assetAddress,\n to,\n translatedAmountOut,\n this.hubProvider.chainConfig.addresses.assetManager,\n ),\n );\n }\n\n return encodeContractCalls(calls);\n }\n\n /**\n * Build transaction data for repaying to the money market pool\n * @param token - The address of the token to repay\n * @param to - The user wallet address on the hub chain\n * @param amount - The amount to repay\n * @param spokeChainId - The chain ID of the spoke chain\n * @returns {Hex} The transaction data.\n */\n public repayData(token: string, to: Address, amount: bigint, spokeChainId: SpokeChainId): Hex {\n const calls: EvmContractCall[] = [];\n const assetConfig = getHubAssetInfo(spokeChainId, token);\n\n if (!assetConfig) {\n throw new Error('[repayData] Hub asset not found');\n }\n\n const assetAddress = assetConfig.asset;\n const vaultAddress = assetConfig.vault;\n const bnUSDVault = this.config.bnUSDVault;\n const bnUSD = this.config.bnUSD;\n\n calls.push(Erc20Service.encodeApprove(assetAddress, vaultAddress, amount));\n calls.push(EvmVaultTokenService.encodeDeposit(vaultAddress, assetAddress, amount));\n const translatedAmount = EvmVaultTokenService.translateIncomingDecimals(assetConfig.decimal, amount);\n\n let repayToken = vaultAddress;\n if (bnUSDVault && bnUSD && bnUSDVault.toLowerCase() === vaultAddress.toLowerCase()) {\n repayToken = bnUSD;\n calls.push(EvmVaultTokenService.encodeWithdraw(bnUSDVault, bnUSD, translatedAmount));\n }\n\n calls.push(Erc20Service.encodeApprove(repayToken, this.config.lendingPool, translatedAmount));\n calls.push(\n MoneyMarketService.encodeRepay(\n { asset: repayToken, amount: translatedAmount, interestRateMode: 2n, onBehalfOf: to },\n this.config.lendingPool,\n ),\n );\n return encodeContractCalls(calls);\n }\n\n /**\n * Get the list of all reserves in the pool\n * @param uiPoolDataProvider - The address of the UI Pool Data Provider\n * @param poolAddressesProvider - The address of the Pool Addresses Provider\n * @returns {Promise<readonly Address[]>} - Array of reserve addresses\n */\n async getReservesList(uiPoolDataProvider: Address, poolAddressesProvider: Address): Promise<readonly Address[]> {\n return this.hubProvider.publicClient.readContract({\n address: uiPoolDataProvider,\n abi: uiPoolDataAbi,\n functionName: 'getReservesList',\n args: [poolAddressesProvider],\n });\n }\n\n /**\n * Get detailed data for all reserves in the pool\n * @param uiPoolDataProvider - The address of the UI Pool Data Provider\n * @param poolAddressesProvider - The address of the Pool Addresses Provider\n * @returns {Promise<readonly [readonly AggregatedReserveData[], BaseCurrencyInfo]>} - Tuple containing array of reserve data and base currency info\n */\n async getReservesData(\n uiPoolDataProvider: Address,\n poolAddressesProvider: Address,\n ): Promise<readonly [readonly AggregatedReserveData[], BaseCurrencyInfo]> {\n return this.hubProvider.publicClient.readContract({\n address: uiPoolDataProvider,\n abi: uiPoolDataAbi,\n functionName: 'getReservesData',\n args: [poolAddressesProvider],\n });\n }\n\n /**\n * Get detailed data for a reserve in the pool\n * @param poolAddress - The address of the pool\n * @param assetAddress - The address of the asset\n * @returns Tuple containing array of reserve data and base currency info\n */\n async getReserveData(poolAddress: Address, assetAddress: Address): Promise<ReserveDataLegacy> {\n return this.hubProvider.publicClient.readContract({\n address: poolAddress,\n abi: poolAbi,\n functionName: 'getReserveData',\n args: [assetAddress],\n });\n }\n\n /**\n * Calculate aToken amount from actual amount using liquidityIndex\n * @param amount - The actual amount\n * @param normalizedIncome - The current normalized income from reserve data\n * @returns {bigint} The equivalent aToken amount\n */\n static calculateATokenAmount(amount: bigint, normalizedIncome: bigint): bigint {\n return (amount * 10n ** 27n) / normalizedIncome + 1n;\n }\n\n /**\n * Get the normalized income for a reserve\n * @param poolAddress The address of the pool\n * @param asset The address of the asset\n * @returns The normalized income\n */\n async getReserveNormalizedIncome(poolAddress: Address, asset: Address): Promise<bigint> {\n return this.hubProvider.publicClient.readContract({\n address: poolAddress,\n abi: poolAbi,\n functionName: 'getReserveNormalizedIncome',\n args: [asset],\n });\n }\n\n /**\n * Get user-specific reserve data\n * @param userAddress Address of the user\n * @param uiPoolDataProvider - The address of the UI Pool Data Provider\n * @param poolAddressesProvider - The address of the Pool Addresses Provider\n * @returns {Promise<readonly [readonly UserReserveData[], number]>} - Tuple containing array of user reserve data and eMode category ID\n */\n async getUserReservesData(\n userAddress: Address,\n uiPoolDataProvider: Address,\n poolAddressesProvider: Address,\n ): Promise<readonly [readonly UserReserveData[], number]> {\n return this.hubProvider.publicClient.readContract({\n address: uiPoolDataProvider,\n abi: uiPoolDataAbi,\n functionName: 'getUserReservesData',\n args: [poolAddressesProvider, userAddress],\n });\n }\n\n /**\n * Encodes a supply transaction for a money market pool.\n * @param {MoneyMarketEncodeWithdrawParams} params - The parameters for the supply transaction.\n * @param {Address} lendingPool - The address of the lending pool contract.\n * @returns {EvmContractCall} The encoded contract call.\n */\n public static encodeSupply(params: MoneyMarketEncodeSupplyParams, lendingPool: Address): EvmContractCall {\n return {\n address: lendingPool,\n value: 0n,\n data: encodeFunctionData({\n abi: poolAbi,\n functionName: 'supply',\n args: [params.asset, params.amount, params.onBehalfOf, params.referralCode],\n }),\n };\n }\n\n /**\n * Encodes a withdraw transaction from a pool.\n * @param {MoneyMarketEncodeWithdrawParams} params - The parameters for the withdraw transaction.\n * @param {Address} params.asset - The address of the asset to withdraw.\n * @param {bigint} params.amount - The amount of the asset to withdraw.\n * @param {Address} params.to - The address that will receive the withdrawn assets.\n * @param {Address} lendingPool - The address of the lending pool contract.\n * @returns {EvmContractCall} The encoded contract call.\n */\n public static encodeWithdraw(params: MoneyMarketEncodeWithdrawParams, lendingPool: Address): EvmContractCall {\n return {\n address: lendingPool,\n value: 0n,\n data: encodeFunctionData({\n abi: poolAbi,\n functionName: 'withdraw',\n args: [params.asset, params.amount, params.to],\n }),\n };\n }\n\n /**\n * Encodes a borrow transaction from a pool.\n * @param {MoneyMarketEncodeBorrowParams} params - The parameters for the borrow transaction.\n * @param {Address} lendingPool - The address of the lending pool contract.\n * @returns {EvmContractCall} The encoded contract call.\n */\n public static encodeBorrow(params: MoneyMarketEncodeBorrowParams, lendingPool: Address): EvmContractCall {\n return {\n address: lendingPool,\n value: 0n,\n data: encodeFunctionData({\n abi: poolAbi,\n functionName: 'borrow',\n args: [params.asset, params.amount, params.interestRateMode, params.referralCode, params.onBehalfOf],\n }),\n };\n }\n\n /**\n * Encodes a repay transaction for a pool.\n * @param {MoneyMarketEncodeRepayParams} params - The parameters for the repay transaction.\n * @param {Address} params.asset - The address of the borrowed asset to repay.\n * @param {bigint} params.amount - The amount to repay. Use type(uint256).max to repay the entire debt.\n * @param {number} params.interestRateMode - The interest rate mode (2 for Variable).\n * @param {Address} params.onBehalfOf - The address of the user who will get their debt reduced/removed.\n * @param {Address} lendingPool - The address of the lending pool contract.\n * @returns {EvmContractCall} The encoded contract call.\n */\n public static encodeRepay(params: MoneyMarketEncodeRepayParams, lendingPool: Address): EvmContractCall {\n return {\n address: lendingPool,\n value: 0n,\n data: encodeFunctionData({\n abi: poolAbi,\n functionName: 'repay',\n args: [params.asset, params.amount, params.interestRateMode, params.onBehalfOf],\n }),\n };\n }\n\n /**\n * Encodes a repayWithATokens transaction for a pool.\n * @param {MoneyMarketEncodeRepayWithATokensParams} params - The parameters for the repayWithATokens transaction.\n * @param {Address} lendingPool - The address of the lending pool contract.\n * @returns {EvmContractCall} The encoded contract call.\n */\n public static encodeRepayWithATokens(\n params: MoneyMarketEncodeRepayWithATokensParams,\n lendingPool: Address,\n ): EvmContractCall {\n return {\n address: lendingPool,\n value: 0n,\n data: encodeFunctionData({\n abi: poolAbi,\n functionName: 'repayWithATokens',\n args: [params.asset, params.amount, params.interestRateMode],\n }),\n };\n }\n\n /**\n * Encodes a setUserUseReserveAsCollateral transaction.\n * @param asset - The address of the underlying asset to be used as collateral.\n * @param useAsCollateral - True to enable the asset as collateral, false to disable.\n * @param lendingPool - The address of lending pool contract\n * @returns The encoded contract call.\n */\n public static encodeSetUserUseReserveAsCollateral(\n asset: Address,\n useAsCollateral: boolean,\n lendingPool: Address,\n ): EvmContractCall {\n return {\n address: lendingPool,\n value: 0n,\n data: encodeFunctionData({\n abi: poolAbi,\n functionName: 'setUserUseReserveAsCollateral',\n args: [asset, useAsCollateral],\n }),\n };\n }\n\n /**\n * Get the list of all supported money market tokens (supply / borrow tokens) for a given spoke chain ID\n * @param chainId The chain ID\n * @returns {readonly Token[]} - Array of supported tokens\n */\n public getSupportedTokens(chainId: SpokeChainId): readonly Token[] {\n return getSupportedMoneyMarketTokens(chainId);\n }\n\n /**\n * Get the list of all supported money market reserves (supply / borrow reserves)\n * NOTE: reserve addresses are on the hub chain and can be of type vault, erc20, etc.\n * @returns {readonly Address[]} - Array of supported reserves\n */\n public getSupportedReserves(): readonly Address[] {\n return [...moneyMarketReserveAssets];\n }\n}\n","import { type Address, encodeFunctionData } from 'viem';\nimport { erc20Abi, spokeAssetManagerAbi } from '../../abis/index.js';\nimport type { EvmHubProvider, EvmSpokeProvider } from '../../entities/index.js';\nimport { connectionAbi, getIntentRelayChainId } from '../../index.js';\nimport type { EvmReturnType, EvmTransferToHubParams, PromiseEvmTxReturnType, TxReturnType } from '../../types.js';\nimport type { Hex, HubAddress } from '@sodax/types';\nimport { EvmWalletAbstraction } from '../hub/index.js';\n\nexport type EvmSpokeDepositParams = {\n from: Address; // The address of the user on the spoke chain\n to?: HubAddress; // The address of the user on the hub chain (wallet abstraction address)\n token: Hex; // The address of the token to deposit\n amount: bigint; // The amount of tokens to deposit\n data: Hex; // The data to send with the deposit\n};\n\nexport class EvmSpokeService {\n private constructor() {}\n\n /**\n * Deposit tokens to the spoke chain.\n * @param {EvmSpokeDepositParams} params - The parameters for the deposit, including the user's address, token address, amount, and additional data.\n * @param {EvmSpokeProvider} spokeProvider - The provider for the spoke chain.\n * @param {EvmHubProvider} hubProvider - The provider for the hub chain.\n * @returns {PromiseEvmTxReturnType<R>} A promise that resolves to the transaction hash.\n */\n public static async deposit<R extends boolean = false>(\n params: EvmSpokeDepositParams,\n spokeProvider: EvmSpokeProvider,\n hubProvider: EvmHubProvider,\n raw?: R,\n ): PromiseEvmTxReturnType<R> {\n const to =\n params.to ??\n (await EvmWalletAbstraction.getUserHubWalletAddress(\n spokeProvider.chainConfig.chain.id,\n params.from,\n hubProvider,\n ));\n\n return EvmSpokeService.transfer(\n {\n token: params.token,\n recipient: to,\n amount: params.amount,\n data: params.data,\n },\n spokeProvider,\n raw,\n );\n }\n\n /**\n * Get the balance of the token in the spoke chain.\n * @param {Address} token - The address of the token to get the balance of.\n * @param {EvmSpokeProvider} spokeProvider - The spoke provider.\n * @returns {Promise<bigint>} The balance of the token.\n */\n public static async getDeposit(token: Address, spokeProvider: EvmSpokeProvider): Promise<bigint> {\n return spokeProvider.publicClient.readContract({\n address: token,\n abi: erc20Abi,\n functionName: 'balanceOf',\n args: [token],\n });\n }\n\n /**\n * Calls a contract on the spoke chain using the user's wallet.\n * @param {HubAddress} from - The address of the user on the hub chain.\n * @param {Hex} payload - The payload to send to the contract.\n * @param {EvmSpokeProvider} spokeProvider - The provider for the spoke chain.\n * @param {EvmHubProvider} hubProvider - The provider for the hub chain.\n * @param {boolean} raw - The return type raw or just transaction hash\n * @returns {PromiseEvmTxReturnType<R>} A promise that resolves to the transaction hash.\n */\n public static async callWallet<R extends boolean = false>(\n from: HubAddress,\n payload: Hex,\n spokeProvider: EvmSpokeProvider,\n hubProvider: EvmHubProvider,\n raw?: R,\n ): Promise<TxReturnType<EvmSpokeProvider, R>> {\n const relayId = getIntentRelayChainId(hubProvider.chainConfig.chain.id);\n const result = await EvmSpokeService.call(BigInt(relayId), from, payload, spokeProvider, raw);\n\n return result satisfies TxReturnType<EvmSpokeProvider, R>;\n }\n\n /**\n * Transfers tokens to the hub chain.\n * @param {EvmTransferToHubParams} params - The parameters for the transfer, including:\n * - {Address} token: The address of the token to transfer (use address(0) for native token).\n * - {Address} recipient: The recipient address on the hub chain.\n * - {bigint} amount: The amount to transfer.\n * - {Hex} [data=\"0x\"]: Additional data for the transfer.\n * @param {EvmSpokeProvider} spokeProvider - The provider for the spoke chain.\n * @param {boolean} raw - The return type raw or just transaction hash\n * @returns {PromiseEvmTxReturnType<R>} A promise that resolves to the transaction hash.\n */\n private static async transfer<R extends boolean = false>(\n { token, recipient, amount, data = '0x' }: EvmTransferToHubParams,\n spokeProvider: EvmSpokeProvider,\n raw?: R,\n ): PromiseEvmTxReturnType<R> {\n const txPayload = {\n address: spokeProvider.chainConfig.addresses.assetManager,\n abi: spokeAssetManagerAbi,\n functionName: 'transfer',\n args: [token, recipient, amount, data],\n value: token.toLowerCase() === spokeProvider.chainConfig.nativeToken.toLowerCase() ? amount : undefined,\n } as const;\n\n const from = await spokeProvider.walletProvider.getWalletAddress();\n const rawTx = {\n from,\n to: txPayload.address,\n value: txPayload.value ?? 0n,\n data: encodeFunctionData({\n abi: spokeAssetManagerAbi,\n functionName: 'transfer',\n args: [token, recipient, amount, data],\n }),\n } satisfies EvmReturnType<true>;\n\n if (raw) {\n return rawTx as EvmReturnType<R>;\n }\n\n return spokeProvider.walletProvider.sendTransaction(rawTx) as PromiseEvmTxReturnType<R>;\n }\n\n /**\n * Sends a message to the hub chain.\n * @param {bigint} dstChainId - The chain ID of the hub chain.\n * @param {Address} dstAddress - The address on the hub chain.\n * @param {Hex} payload - The payload to send.\n * @param {EvmSpokeProvider} spokeProvider - The provider for the spoke chain.\n * @param {boolean} raw - The return type raw or just transaction hash\n * @returns {PromiseEvmTxReturnType<R>} A promise that resolves to the transaction hash.\n */\n private static async call<R extends boolean = false>(\n dstChainId: bigint,\n dstAddress: HubAddress,\n payload: Hex,\n spokeProvider: EvmSpokeProvider,\n raw?: R,\n ): PromiseEvmTxReturnType<R> {\n const txPayload = {\n address: spokeProvider.chainConfig.addresses.connection,\n abi: connectionAbi,\n functionName: 'sendMessage',\n args: [dstChainId, dstAddress, payload],\n } as const;\n\n const from = await spokeProvider.walletProvider.getWalletAddress();\n const rawTx = {\n from,\n to: txPayload.address,\n value: 0n,\n data: encodeFunctionData({\n abi: connectionAbi,\n functionName: 'sendMessage',\n args: [dstChainId, dstAddress, payload],\n }),\n } satisfies EvmReturnType<true>;\n\n if (raw) {\n return rawTx as EvmReturnType<R>;\n }\n\n return spokeProvider.walletProvider.sendTransaction(rawTx) as PromiseEvmTxReturnType<R>;\n }\n}\n","import { type Address, type Hex, toHex } from 'viem';\nimport { CWSpokeProvider } from '../../entities/cosmos/CWSpokeProvider.js';\nimport type { EvmHubProvider } from '../../entities/index.js';\nimport { type HubAddress, type PromiseCWTxReturnType, getIntentRelayChainId } from '../../index.js';\nimport { EvmWalletAbstraction } from '../hub/index.js';\n\nexport type CWSpokeDepositParams = {\n from: string; // The address of the user on the spoke chain\n to?: HubAddress; // The address of the user on the hub chain (wallet abstraction address)\n token: string; // The address of the token to deposit\n amount: bigint; // The amount of tokens to deposit\n data: Hex; // The data to send with the deposit\n};\n\nexport type TransferToHubParams = {\n token: string;\n recipient: Address;\n amount: string;\n data: Hex;\n};\n\nexport class CWSpokeService {\n private constructor() {}\n\n /**\n * Deposit tokens to the spoke chain.\n * @param {CWSpokeDepositParams} params - The parameters for the deposit, including the user's address, token address, amount, and additional data.\n * @param {CWSpokeProvider} spokeProvider - The provider for the spoke chain.\n * @param {EvmHubProvider} hubProvider - The provider for the hub chain.\n * @param {boolean} raw - The return type raw or just transaction hash\n * @returns {PromiseCWTxReturnType<R>} A promise that resolves to the transaction hash.\n */\n public static async deposit<R extends boolean = false>(\n params: CWSpokeDepositParams,\n spokeProvider: CWSpokeProvider,\n hubProvider: EvmHubProvider,\n raw?: R,\n ): PromiseCWTxReturnType<R> {\n const userWallet: Address =\n params.to ??\n (await EvmWalletAbstraction.getUserHubWalletAddress(\n spokeProvider.chainConfig.chain.id,\n toHex(Buffer.from(params.from, 'utf-8')),\n hubProvider,\n ));\n\n return CWSpokeService.transfer(\n {\n token: params.token,\n recipient: userWallet,\n amount: params.amount.toString(),\n data: params.data,\n },\n spokeProvider,\n raw,\n );\n }\n\n /**\n * Get the balance of the token in the spoke chain.\n * @param {Address} token - The address of the token to get the balance of.\n * @param {CWSpokeProvider} spokeProvider - The spoke provider.\n * @returns {Promise<bigint>} The balance of the token.\n */\n public static async getDeposit(token: String, spokeProvider: CWSpokeProvider): Promise<bigint> {\n const bal = await spokeProvider.getBalance(token);\n return BigInt(bal);\n }\n\n /**\n * Calls a contract on the spoke chain using the user's wallet.\n * @param {HubAddress} from - The address of the user on the hub chain.\n * @param {Hex} payload - The payload to send to the contract.\n * @param {CWSpokeProvider} spokeProvider - The provider for the spoke chain.\n * @param {EvmHubProvider} hubProvider - The provider for the hub chain.\n * @returns {PromiseCWTxReturnType<R>} A promise that resolves to the transaction hash.\n */\n public static async callWallet<R extends boolean = false>(\n from: HubAddress,\n payload: Hex,\n spokeProvider: CWSpokeProvider,\n hubProvider: EvmHubProvider,\n raw?: R,\n ): PromiseCWTxReturnType<R> {\n const relayId = getIntentRelayChainId(hubProvider.chainConfig.chain.id);\n return CWSpokeService.call(BigInt(relayId), from, payload, spokeProvider, raw);\n }\n\n /**\n * Transfers tokens to the hub chain.\n * @param {TransferToHubParams} params - The parameters for the transfer, including:\n * - {string} token: The address of the token to transfer (use address(0) for native token).\n * - {Uint8Array} recipient: The recipient address on the hub chain.\n * - {string} amount: The amount to transfer.\n * - {Uint8Array} [data=new Uint8Array([])]: Additional data for the transfer.\n * @param {CWSpokeProvider} spokeProvider - The provider for the spoke chain.\n * @param {boolean} raw - The return type raw or just transaction hash\n * @returns {PromiseCWTxReturnType<R>} A promise that resolves to the transaction hash.\n */\n private static async transfer<R extends boolean = false>(\n { token, recipient, amount, data = '0x' }: TransferToHubParams,\n spokeProvider: CWSpokeProvider,\n raw?: R,\n ): PromiseCWTxReturnType<R> {\n const sender = await spokeProvider.walletProvider.getWalletAddress();\n return CWSpokeProvider.deposit(sender, token, recipient, amount, data, spokeProvider, raw);\n }\n\n /**\n * Sends a message to the hub chain.\n * @param {bigint} dstChainId - The chain ID of the hub chain.\n * @param {Address} dstAddress - The address on the hub chain.\n * @param {Hex} payload - The payload to send.\n * @param {CWSpokeProvider} spokeProvider - The provider for the spoke chain.\n * @returns {PromiseCWTxReturnType<R>} A promise that resolves to the transaction hash.\n */\n private static async call<R extends boolean = false>(\n dstChainId: bigint,\n dstAddress: Hex,\n payload: Hex,\n spokeProvider: CWSpokeProvider,\n raw?: R,\n ): PromiseCWTxReturnType<R> {\n const sender = await spokeProvider.walletProvider.getWalletAddress();\n return spokeProvider.send_message(sender, dstChainId.toString(), dstAddress, payload, raw);\n }\n}\n","import * as IconSdkRaw from 'icon-sdk-js';\nconst IconSdk = (IconSdkRaw.default?.default ? IconSdkRaw.default : IconSdkRaw) as typeof IconSdkRaw;\nconst { Converter, CallTransactionBuilder, CallBuilder } = IconSdk;\nimport * as rlp from 'rlp';\nimport type { Address, Hex } from 'viem';\nimport type { IconSpokeProvider } from '../../entities/icon/IconSpokeProvider.js';\nimport { getIconAddressBytes } from '../../entities/icon/utils.js';\nimport type { EvmHubProvider } from '../../entities/index.js';\nimport { BigIntToHex, getIntentRelayChainId, isNativeToken } from '../../index.js';\nimport type { IconAddress, IconReturnType, PromiseIconTxReturnType } from '../../types.js';\nimport type { HubAddress } from '@sodax/types';\nimport { EvmWalletAbstraction } from '../hub/index.js';\n\nexport type IconSpokeDepositParams = {\n from: IconAddress; // The address of the user on the spoke chain\n to?: HubAddress; // The address of the user on the hub chain (wallet abstraction address)\n token: string; // The address of the token to deposit\n amount: bigint; // The amount of tokens to deposit\n data: Hex; // The data to send with the deposit\n};\n\nexport type TransferToHubParams = {\n token: string;\n recipient: Address;\n amount: bigint;\n data: Hex;\n};\n\nexport class IconSpokeService {\n private constructor() {}\n\n /**\n * Deposit tokens to the spoke chain.\n * @param {IconSpokeDepositParams} params - The parameters for the deposit\n * @param {IconWalletProvider} spokeProvider - The provider for the spoke chain\n * @param {EvmHubProvider} hubProvider - The provider for the hub chain\n * @param {boolean} raw - The return type raw or just transaction hash\n * @returns {Promise<Result<string>>} A promise that resolves to the transaction hash\n */\n public static async deposit<R extends boolean = false>(\n params: IconSpokeDepositParams,\n spokeProvider: IconSpokeProvider,\n hubProvider: EvmHubProvider,\n raw?: R,\n ): PromiseIconTxReturnType<R> {\n const userWallet: Address =\n params.to ??\n (await EvmWalletAbstraction.getUserHubWalletAddress(\n spokeProvider.chainConfig.chain.id,\n getIconAddressBytes(params.from),\n hubProvider,\n ));\n\n return IconSpokeService.transfer(\n {\n token: params.token,\n recipient: userWallet,\n amount: params.amount,\n data: params.data,\n },\n spokeProvider,\n raw,\n );\n }\n\n /**\n * Get the balance of the token in the spoke chain.\n * @param {string} token - The address of the token to get the balance of\n * @param {IconWalletProvider} spokeProvider - The spoke provider\n * @returns {Promise<bigint>} The balance of the token\n */\n public static async getDeposit(token: string, spokeProvider: IconSpokeProvider): Promise<bigint> {\n const transaction = new CallBuilder()\n .to(token)\n .method('balanceOf')\n .params({ _owner: spokeProvider.chainConfig.addresses.assetManager })\n .build();\n const result = await spokeProvider.iconService.call(transaction).execute();\n return BigInt(result.value);\n }\n\n /**\n * Calls a contract on the spoke chain using the user's wallet.\n * @param {HubAddress} from - The address of the user on the hub chain\n * @param {Hex} payload - The payload to send to the contract\n * @param {IconWalletProvider} spokeProvider - The provider for the spoke chain\n * @param {EvmHubProvider} hubProvider - The provider for the hub chain\n * @param {boolean} raw - The return type raw or just transaction hash\n * @returns {Promise<Result<string>>} A promise that resolves to the transaction hash\n */\n public static async callWallet<R extends boolean = false>(\n from: HubAddress,\n payload: Hex,\n spokeProvider: IconSpokeProvider,\n hubProvider: EvmHubProvider,\n raw?: R,\n ): PromiseIconTxReturnType<R> {\n const relayId = getIntentRelayChainId(hubProvider.chainConfig.chain.id);\n return IconSpokeService.call(BigInt(relayId), from, payload, spokeProvider, raw);\n }\n\n /**\n * Transfers tokens to the hub chain.\n */\n private static async transfer<R extends boolean = false>(\n { token, recipient, amount, data }: TransferToHubParams,\n spokeProvider: IconSpokeProvider,\n raw?: R,\n ): PromiseIconTxReturnType<R> {\n const rlpInput: rlp.Input = [data, recipient];\n const rlpEncodedData = rlp.encode(rlpInput);\n const hexData = `0x${Buffer.from(rlpEncodedData).toString('hex')}`;\n const params = {\n _to: spokeProvider.chainConfig.addresses.assetManager,\n _value: BigIntToHex(amount),\n _data: hexData,\n };\n\n const value: Hex = isNativeToken(spokeProvider.chainConfig.chain.id, token) ? BigIntToHex(amount) : '0x0';\n const walletAddress = await spokeProvider.walletProvider.getWalletAddress();\n\n const rawTransaction = Converter.toRawTransaction(\n new CallTransactionBuilder()\n .from(walletAddress)\n .to(token)\n .stepLimit(Converter.toBigNumber('2000000'))\n .nid(spokeProvider.chainConfig.nid)\n .version('0x3')\n .timestamp(new Date().getTime() * 1000)\n .value(value)\n .method('transfer')\n .params(params)\n .build(),\n );\n\n if (raw) {\n return rawTransaction satisfies IconReturnType<true> as IconReturnType<R>;\n }\n\n return spokeProvider.walletProvider.sendTransaction({\n from: walletAddress,\n to: isNativeToken(spokeProvider.chainConfig.chain.id, token)\n ? // wICX address\n 'cx3975b43d260fb8ec802cef6e60c2f4d07486f11d'\n : token,\n value: value,\n nid: spokeProvider.chainConfig.nid,\n method: 'transfer',\n params: params,\n }) satisfies PromiseIconTxReturnType<false> as PromiseIconTxReturnType<R>;\n }\n\n /**\n * Sends a message to the hub chain.\n */\n private static async call<R extends boolean = false>(\n dstChainId: bigint,\n dstAddress: HubAddress,\n payload: Hex,\n spokeProvider: IconSpokeProvider,\n raw?: R,\n ): PromiseIconTxReturnType<R> {\n const params = {\n dstChainId: dstChainId.toString(),\n dstAddress: dstAddress,\n payload: payload,\n };\n\n const walletAddressBytes = await spokeProvider.walletProvider.getWalletAddressBytes();\n\n const transaction = new CallTransactionBuilder()\n .from(walletAddressBytes)\n .to(spokeProvider.chainConfig.addresses.connection)\n .stepLimit(Converter.toBigNumber('2000000'))\n .nid(spokeProvider.chainConfig.nid)\n .version('0x3')\n .timestamp(new Date().getTime() * 1000)\n .method('sendMessage')\n .params(params)\n .build();\n\n if (raw) {\n return Converter.toRawTransaction(transaction) as IconReturnType<R>;\n }\n\n return spokeProvider.walletProvider.sendTransaction({\n from: walletAddressBytes,\n to: spokeProvider.chainConfig.addresses.connection,\n nid: spokeProvider.chainConfig.nid,\n value: '0x0',\n method: 'sendMessage',\n params: params,\n }) satisfies PromiseIconTxReturnType<false> as PromiseIconTxReturnType<R>;\n }\n}\n","import * as anchor from '@coral-xyz/anchor';\nimport { Connection, type Keypair, PublicKey } from '@solana/web3.js';\nimport type { AssetManager } from './types/asset_manager.js';\nimport type { Connection as ConnectionContract } from './types/connection.js';\nexport async function getProvider(keypair: Keypair, rpcUrl: string, wsUrl: string): Promise<anchor.AnchorProvider> {\n const wallet = {\n publicKey: keypair.publicKey,\n signTransaction: () => Promise.reject(),\n signAllTransactions: () => Promise.reject(),\n };\n const connection = new Connection(rpcUrl, {\n wsEndpoint: wsUrl,\n });\n return new anchor.AnchorProvider(connection, wallet, { commitment: 'confirmed' });\n}\n\nexport async function getAssetManagerIdl(assetManager: string, provider: anchor.AnchorProvider) {\n try {\n const idl = await anchor.Program.fetchIdl(new PublicKey(assetManager), provider);\n if (!idl) {\n throw new Error('asset manager idl not available');\n }\n return idl;\n } catch (err) {\n console.log('Failed to fetch Program IDl:', err);\n throw err;\n }\n}\n\nexport async function getConnectionIdl(connection: string, provider: anchor.AnchorProvider) {\n try {\n const idl = await anchor.Program.fetchIdl(new PublicKey(connection), provider);\n if (!idl) {\n throw new Error('asset manager idl not available');\n }\n return idl;\n } catch (err) {\n console.log('Failed to fetch Program IDl:', err);\n throw err;\n }\n}\n\nexport async function getAssetManagerProgram(\n keypair: Keypair,\n rpcUrl: string,\n wsUrl: string,\n assetManager: string,\n): Promise<anchor.Program<AssetManager>> {\n const provider = await getProvider(keypair, rpcUrl, wsUrl);\n const idl = await getAssetManagerIdl(assetManager, provider);\n\n return new anchor.Program(idl as anchor.Idl, provider) as unknown as anchor.Program<AssetManager>;\n}\n\nexport async function getConnectionProgram(\n keypair: Keypair,\n rpcUrl: string,\n wsUrl: string,\n connection: string,\n): Promise<anchor.Program<ConnectionContract>> {\n const provider = await getProvider(keypair, rpcUrl, wsUrl);\n const idl = await getConnectionIdl(connection, provider);\n\n return new anchor.Program(idl as anchor.Idl, provider) as unknown as anchor.Program<ConnectionContract>;\n}\n","import { PublicKey } from '@solana/web3.js';\nimport type BN from 'bn.js';\n\nexport const RateLimitPDA = {\n config(programId: PublicKey) {\n const [pda, bump] = PublicKey.findProgramAddressSync([Buffer.from('rmconfig')], programId);\n return { bump, pda };\n },\n\n rateLimitAccount(programId: PublicKey, token: PublicKey) {\n const [pda, bump] = PublicKey.findProgramAddressSync([Buffer.from('limit'), token.toBuffer()], programId);\n return { bump, pda };\n },\n};\n\nexport const ConnectionConfigPDA = {\n config(programId: PublicKey) {\n const [pda, bump] = PublicKey.findProgramAddressSync([Buffer.from('config')], programId);\n\n return { bump, pda };\n },\n\n receipt(programId: PublicKey, srcChainId: BN, connectionSn: BN) {\n const [pda, bump] = PublicKey.findProgramAddressSync(\n [Buffer.from('receipt'), srcChainId.toBuffer(), connectionSn.toBuffer()],\n programId,\n );\n\n return { bump, pda };\n },\n};\n\nexport const AssetManagerPDA = {\n config(programId: PublicKey) {\n const [pda, bump] = PublicKey.findProgramAddressSync([Buffer.from('config-seed')], programId);\n\n return { bump, pda };\n },\n\n vault_token(programId: PublicKey, mint: PublicKey) {\n const [pda, bump] = PublicKey.findProgramAddressSync([Buffer.from('vault_seed'), mint.toBuffer()], programId);\n\n return { bump, pda };\n },\n\n vault_native(programId: PublicKey) {\n const [pda, bump] = PublicKey.findProgramAddressSync([Buffer.from('vault_native')], programId);\n\n return { bump, pda };\n },\n\n authority(programId: PublicKey) {\n const [pda, bump] = PublicKey.findProgramAddressSync([Buffer.from('dapp_authority')], programId);\n\n return { bump, pda };\n },\n\n ta_creation_fee_account_pda(programId: PublicKey, mint: PublicKey) {\n const [pda, bump] = PublicKey.findProgramAddressSync(\n [Buffer.from('ta_creation_account_seed'), mint.toBuffer()],\n programId,\n );\n\n return { bump, pda };\n },\n};\n","import { TOKEN_PROGRAM_ID } from '@solana/spl-token';\nimport { ComputeBudgetProgram, PublicKey, SystemProgram, type TransactionInstruction } from '@solana/web3.js';\nimport { type Address, type Hex, toHex } from 'viem';\nimport { getIntentRelayChainId } from '../../constants.js';\nimport type { EvmHubProvider } from '../../entities/index.js';\nimport { getAssetManagerProgram, getConnectionProgram } from '../../entities/solana/Configs.js';\nimport type { SolanaSpokeProvider } from '../../entities/solana/SolanaSpokeProvider.js';\nimport { AssetManagerPDA, ConnectionConfigPDA } from '../../entities/solana/pda/pda.js';\nimport { isNative } from '../../entities/solana/utils/utils.js';\nimport type { PromiseSolanaTxReturnType, SolanaReturnType } from '../../types.js';\nimport type { HubAddress } from '@sodax/types';\nimport { EvmWalletAbstraction } from '../hub/index.js';\nimport BN from 'bn.js';\n\nexport type SolanaSpokeDepositParams = {\n from: PublicKey;\n to?: HubAddress; // The address of the user on the hub chain (wallet abstraction address)\n token: PublicKey;\n amount: bigint;\n data: Hex;\n};\n\nexport type TransferToHubParams = {\n token: PublicKey;\n recipient: string;\n amount: string;\n data: Hex;\n};\n\nexport class SolanaSpokeService {\n private constructor() {}\n\n public static async deposit<R extends boolean = false>(\n params: SolanaSpokeDepositParams,\n spokeProvider: SolanaSpokeProvider,\n hubProvider: EvmHubProvider,\n raw?: R,\n ): PromiseSolanaTxReturnType<R> {\n const userWallet: Address =\n params.to ??\n (await EvmWalletAbstraction.getUserHubWalletAddress(\n spokeProvider.chainConfig.chain.id,\n toHex(params.from.toBytes()),\n hubProvider,\n ));\n\n return SolanaSpokeService.transfer(\n {\n token: params.token,\n recipient: userWallet,\n amount: params.amount.toString(),\n data: params.data,\n },\n spokeProvider,\n raw,\n );\n }\n\n public static async getDeposit(token: string, spokeProvider: SolanaSpokeProvider): Promise<bigint> {\n const assetManagerProgram = await getAssetManagerProgram(\n spokeProvider.walletProvider.getWallet(),\n spokeProvider.chainConfig.rpcUrl,\n spokeProvider.chainConfig.wsUrl,\n spokeProvider.chainConfig.addresses.assetManager,\n );\n const solToken = new PublicKey(Buffer.from(token, 'hex'));\n if (isNative(new PublicKey(solToken))) {\n const vaultNative = AssetManagerPDA.vault_native(assetManagerProgram.programId);\n const balance = await spokeProvider.walletProvider.connection.getBalance(vaultNative.pda);\n return BigInt(balance);\n }\n const vaultToken = AssetManagerPDA.vault_token(assetManagerProgram.programId, new PublicKey(solToken));\n const tokenAccount = await spokeProvider.walletProvider.connection.getTokenAccountBalance(vaultToken.pda);\n return BigInt(tokenAccount.value.amount);\n }\n\n /**\n * Calls a contract on the spoke chain using the user's wallet.\n * @param from - The address of the user on the hub chain.\n * @param payload - The payload to send to the contract.\n * @param spokeProvider - The spoke provider.\n * @param hubProvider - The hub provider.\n * @param raw - Whether to return the raw transaction data.\n * @returns The transaction result.\n */\n public static async callWallet<R extends boolean = false>(\n from: HubAddress,\n payload: Hex,\n spokeProvider: SolanaSpokeProvider,\n hubProvider: EvmHubProvider,\n raw?: R,\n ): PromiseSolanaTxReturnType<R> {\n const relayId = getIntentRelayChainId(hubProvider.chainConfig.chain.id);\n return SolanaSpokeService.call(BigInt(relayId), from, payload, spokeProvider, raw);\n }\n\n private static async transfer<R extends boolean = false>(\n { token, recipient, amount, data }: TransferToHubParams,\n spokeProvider: SolanaSpokeProvider,\n raw?: R,\n ): PromiseSolanaTxReturnType<R> {\n let depositInstruction: TransactionInstruction;\n const amountBN = new BN(amount);\n const { walletProvider, chainConfig } = spokeProvider;\n const { rpcUrl, wsUrl, addresses } = chainConfig;\n\n const assetManagerProgram = await getAssetManagerProgram(\n walletProvider.getWallet(),\n rpcUrl,\n wsUrl,\n addresses.assetManager,\n );\n const walletPublicKey = walletProvider.getAddress();\n const connectionProgram = await getConnectionProgram(\n walletProvider.getWallet(),\n rpcUrl,\n wsUrl,\n addresses.connection,\n );\n\n if (isNative(token)) {\n depositInstruction = await assetManagerProgram.methods\n .transfer(amountBN, Buffer.from(recipient.slice(2), 'hex'), Buffer.from(data.slice(2), 'hex'))\n .accountsStrict({\n signer: walletPublicKey,\n systemProgram: SystemProgram.programId,\n config: AssetManagerPDA.config(assetManagerProgram.programId).pda,\n nativeVaultAccount: AssetManagerPDA.vault_native(assetManagerProgram.programId).pda,\n tokenVaultAccount: null,\n signerTokenAccount: null,\n authority: AssetManagerPDA.authority(assetManagerProgram.programId).pda,\n mint: null,\n connection: connectionProgram.programId,\n tokenProgram: TOKEN_PROGRAM_ID,\n })\n .remainingAccounts([\n {\n pubkey: ConnectionConfigPDA.config(connectionProgram.programId).pda,\n isSigner: false,\n isWritable: true,\n },\n ])\n .instruction();\n } else {\n const signerTokenAccount = await spokeProvider.walletProvider.getAssociatedTokenAddress(token);\n depositInstruction = await assetManagerProgram.methods\n .transfer(amountBN, Buffer.from(recipient.slice(2), 'hex'), Buffer.from(data.slice(2), 'hex'))\n .accountsStrict({\n signer: walletPublicKey,\n systemProgram: SystemProgram.programId,\n config: AssetManagerPDA.config(assetManagerProgram.programId).pda,\n nativeVaultAccount: null,\n tokenVaultAccount: AssetManagerPDA.vault_token(assetManagerProgram.programId, token).pda,\n signerTokenAccount: signerTokenAccount,\n authority: AssetManagerPDA.authority(assetManagerProgram.programId).pda,\n mint: token,\n connection: connectionProgram.programId,\n tokenProgram: TOKEN_PROGRAM_ID,\n })\n .remainingAccounts([\n {\n pubkey: ConnectionConfigPDA.config(connectionProgram.programId).pda,\n isSigner: false,\n isWritable: true,\n },\n ])\n .instruction();\n }\n\n const modifyComputeUnits = ComputeBudgetProgram.setComputeUnitLimit({\n units: 1_400_000,\n });\n\n const addPriorityFee = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: 0,\n });\n\n const transaction = await spokeProvider.walletProvider.buildV0Txn(\n [modifyComputeUnits, addPriorityFee, depositInstruction],\n [spokeProvider.walletProvider.getWallet()],\n );\n if (raw) {\n const serializedTxn = transaction.serialize();\n const base64Txn = Buffer.from(serializedTxn).toString('base64');\n return {\n from: spokeProvider.walletProvider.getAddress(),\n to: assetManagerProgram.programId,\n value: BigInt(amountBN.toString()),\n data: base64Txn,\n } as SolanaReturnType<R>;\n }\n const tx = spokeProvider.walletProvider.sendTransaction(transaction);\n return tx as PromiseSolanaTxReturnType<R>;\n }\n\n /**\n * Sends a message to the hub chain.\n * @param dstChainId - The chain ID of the hub chain.\n * @param dstAddress - The address on the hub chain.\n * @param payload - The payload to send.\n * @param spokeProvider - The spoke provider.\n * @param raw - Whether to return the raw transaction data.\n * @returns The transaction result.\n */\n private static async call<R extends boolean = false>(\n dstChainId: bigint,\n dstAddress: HubAddress,\n payload: Hex,\n spokeProvider: SolanaSpokeProvider,\n raw?: R,\n ): PromiseSolanaTxReturnType<R> {\n const { walletProvider, chainConfig } = spokeProvider;\n const { rpcUrl, wsUrl, addresses } = chainConfig;\n const connectionProgram = await getConnectionProgram(\n walletProvider.getWallet(),\n rpcUrl,\n wsUrl,\n addresses.connection,\n );\n const walletPublicKey = walletProvider.getAddress();\n const sendMessageInstruction = await connectionProgram.methods.sendMessage(\n new BN(dstChainId.toString()),\n Buffer.from(dstAddress.slice(2), 'hex'),\n Buffer.from(payload.slice(2), 'hex'),\n ).accountsStrict!({\n signer: walletPublicKey,\n dapp: null,\n config: ConnectionConfigPDA.config(connectionProgram.programId).pda,\n systemProgram: SystemProgram.programId,\n }).instruction();\n\n const modifyComputeUnits = ComputeBudgetProgram.setComputeUnitLimit({\n units: 1000000,\n });\n\n const addPriorityFee = ComputeBudgetProgram.setComputeUnitPrice({\n microLamports: 0,\n });\n\n const transaction = await spokeProvider.walletProvider.buildV0Txn(\n [modifyComputeUnits, addPriorityFee, sendMessageInstruction],\n [spokeProvider.walletProvider.getWallet()],\n );\n if (raw) {\n const serializedTxn = transaction.serialize();\n const base64Txn = Buffer.from(serializedTxn).toString('base64');\n return {\n from: walletPublicKey,\n to: connectionProgram.programId,\n value: 0n,\n data: base64Txn,\n } as SolanaReturnType<R>;\n }\n return spokeProvider.walletProvider.sendTransaction(transaction) as PromiseSolanaTxReturnType<R>;\n }\n}\n","import { type Address, type Hex, fromHex } from 'viem';\nimport type { EvmHubProvider } from '../../entities/index.js';\nimport type { StellarSpokeProvider } from '../../entities/stellar/StellarSpokeProvider.js';\nimport { type HubAddress, type PromiseStellarTxReturnType, getIntentRelayChainId } from '../../index.js';\nimport { EvmWalletAbstraction } from '../hub/index.js';\n\nexport type StellarSpokeDepositParams = {\n from: Hex; // The address of the user on the spoke chain\n to?: HubAddress; // The address of the user on the hub chain (wallet abstraction address)\n token: string; // The address of the token to deposit\n amount: bigint; // The amount of tokens to deposit\n data: Hex; // The data to send with the deposit\n};\n\nexport type TransferToHubParams = {\n token: string;\n recipient: Address;\n amount: bigint;\n data: Hex;\n};\n\nexport class StellarSpokeService {\n private constructor() {}\n\n public static async deposit<R extends boolean = false>(\n params: StellarSpokeDepositParams,\n spokeProvider: StellarSpokeProvider,\n hubProvider: EvmHubProvider,\n raw?: R,\n ): PromiseStellarTxReturnType<R> {\n const userWallet: Address =\n params.to ??\n (await EvmWalletAbstraction.getUserHubWalletAddress(\n spokeProvider.chainConfig.chain.id,\n params.from,\n hubProvider,\n ));\n\n return StellarSpokeService.transfer(\n {\n token: params.token,\n recipient: userWallet,\n amount: params.amount,\n data: params.data,\n },\n spokeProvider,\n raw,\n );\n }\n\n public static async getDeposit(token: string, spokeProvider: StellarSpokeProvider): Promise<bigint> {\n return BigInt(await spokeProvider.getBalance(token));\n }\n\n /**\n * Calls a contract on the spoke chain using the user's wallet.\n * @param from - The address of the user on the hub chain.\n * @param payload - The payload to send to the contract.\n * @param spokeProvider - The spoke provider.\n * @param hubProvider - The hub provider.\n * @param raw - Whether to return the raw transaction data.\n * @returns The transaction result.\n */\n public static async callWallet<R extends boolean = false>(\n from: HubAddress,\n payload: Hex,\n spokeProvider: StellarSpokeProvider,\n hubProvider: EvmHubProvider,\n raw?: R,\n ): PromiseStellarTxReturnType<R> {\n const relayId = getIntentRelayChainId(hubProvider.chainConfig.chain.id);\n return StellarSpokeService.call(BigInt(relayId), from, payload, spokeProvider, raw);\n }\n\n private static async transfer<R extends boolean = false>(\n { token, recipient, amount, data = '0x' }: TransferToHubParams,\n spokeProvider: StellarSpokeProvider,\n raw?: R,\n ): PromiseStellarTxReturnType<R> {\n return await spokeProvider.deposit(\n token,\n amount.toString(),\n fromHex(recipient, 'bytes'),\n fromHex(data, 'bytes'),\n raw,\n );\n }\n\n private static async call<R extends boolean = false>(\n dstChainId: bigint,\n dstAddress: HubAddress,\n payload: Hex,\n spokeProvider: StellarSpokeProvider,\n raw?: R,\n ): PromiseStellarTxReturnType<R> {\n return await spokeProvider.sendMessage(\n dstChainId.toString(),\n fromHex(dstAddress, 'bytes'),\n fromHex(payload, 'bytes'),\n raw,\n );\n }\n}\n","import { type Address, type Hex, fromHex } from 'viem';\nimport type { EvmHubProvider } from '../../entities/index.js';\nimport type { SuiSpokeProvider } from '../../entities/sui/SuiSpokeProvider.js';\nimport { type HubAddress, type PromiseSuiTxReturnType, getIntentRelayChainId } from '../../index.js';\nimport { EvmWalletAbstraction } from '../hub/index.js';\n\nexport type SuiSpokeDepositParams = {\n from: Hex; // The address of the user on the spoke chain\n to?: HubAddress; // The address of the user on the hub chain (wallet abstraction address)\n token: string; // The address of the token to deposit\n amount: bigint; // The amount of tokens to deposit\n data: Hex; // The data to send with the deposit\n};\n\nexport type TransferToHubParams = {\n token: string;\n recipient: Address;\n amount: bigint;\n data: Hex;\n};\n\nexport class SuiSpokeService {\n private constructor() {}\n\n /**\n * Deposit tokens to the spoke chain.\n * @param {CWSpokeDepositParams} params - The parameters for the deposit, including the user's address, token address, amount, and additional data.\n * @param {SuiSpokeProvider} spokeProvider - The provider for the spoke chain.\n * @param {EvmHubProvider} hubProvider - The provider for the hub chain.\n * @param {boolean} raw - The return type raw or just transaction hash\n * @returns {PromiseSuiTxReturnType<R>} A promise that resolves to the transaction hash or raw transaction base64 string.\n */\n public static async deposit<R extends boolean = false>(\n params: SuiSpokeDepositParams,\n spokeProvider: SuiSpokeProvider,\n hubProvider: EvmHubProvider,\n raw?: R,\n ): PromiseSuiTxReturnType<R> {\n const userWallet: Address =\n params.to ??\n (await EvmWalletAbstraction.getUserHubWalletAddress(\n spokeProvider.chainConfig.chain.id,\n params.from,\n hubProvider,\n ));\n\n return SuiSpokeService.transfer(\n {\n token: params.token,\n recipient: userWallet,\n amount: params.amount,\n data: params.data,\n },\n spokeProvider,\n raw,\n );\n }\n\n /**\n * Get the balance of the token in the spoke chain.\n * @param {Address} token - The address of the token to get the balance of.\n * @param {SuiSpokeProvider} spokeProvider - The spoke provider.\n * @returns {Promise<bigint>} The balance of the token.\n */\n public static async getDeposit(token: string, spokeProvider: SuiSpokeProvider): Promise<bigint> {\n return spokeProvider.getBalance(token);\n }\n\n /**\n * Calls a contract on the spoke chain using the user's wallet.\n * @param {HubAddress} from - The address of the user on the spoke chain.\n * @param {Hex} payload - The payload to send to the contract.\n * @param {SuiSpokeProvider} spokeProvider - The provider for the spoke chain.\n * @param {EvmHubProvider} hubProvider - The provider for the hub chain.\n * @param {boolean} raw - The return type raw or just transaction hash\n * @returns {PromiseSuiTxReturnType<R>} A promise that resolves to the transaction hash or raw transaction base64 string.\n */\n public static async callWallet<R extends boolean = false>(\n from: HubAddress,\n payload: Hex,\n spokeProvider: SuiSpokeProvider,\n hubProvider: EvmHubProvider,\n raw?: R,\n ): PromiseSuiTxReturnType<R> {\n const relayId = getIntentRelayChainId(hubProvider.chainConfig.chain.id);\n return SuiSpokeService.call(BigInt(relayId), from, payload, spokeProvider, raw);\n }\n\n /**\n * Transfers tokens to the hub chain.\n * @param {TransferToHubParams} params - The parameters for the transfer, including:\n * - {string} token: The address of the token to transfer (use address(0) for native token).\n * - {Uint8Array} recipient: The recipient address on the hub chain.\n * - {string} amount: The amount to transfer.\n * - {Uint8Array} [data=new Uint8Array([])]: Additional data for the transfer.\n * @param {SuiSpokeProvider} spokeProvider - The provider for the spoke chain.\n * @param {boolean} raw - The return type raw or just transaction hash\n * @returns {PromiseSuiTxReturnType<R>} A promise that resolves to the transaction hash or raw transaction base64 string.\n */\n private static async transfer<R extends boolean = false>(\n { token, recipient, amount, data = '0x' }: TransferToHubParams,\n spokeProvider: SuiSpokeProvider,\n raw?: R,\n ): PromiseSuiTxReturnType<R> {\n return spokeProvider.transfer(token, amount, fromHex(recipient, 'bytes'), fromHex(data, 'bytes'), raw);\n }\n\n /**\n * Sends a message to the hub chain.\n * @param {bigint} dstChainId - The chain ID of the hub chain.\n * @param {HubAddress} dstAddress - The address on the hub chain.\n * @param {Hex} payload - The payload to send.\n * @param {SuiSpokeProvider} spokeProvider - The provider for the spoke chain.\n * @param {boolean} raw - The return type raw or just transaction hash\n * @returns {PromiseSuiTxReturnType<R>} A promise that resolves to the transaction hash or raw transaction base64 string.\n */\n private static async call<R extends boolean = false>(\n dstChainId: bigint,\n dstAddress: HubAddress,\n payload: Hex,\n spokeProvider: SuiSpokeProvider,\n raw?: R,\n ): PromiseSuiTxReturnType<R> {\n return spokeProvider.sendMessage(dstChainId, fromHex(dstAddress, 'bytes'), fromHex(payload, 'bytes'), raw);\n }\n}\n","import { type Address, decodeAbiParameters, encodeFunctionData, erc20Abi } from 'viem';\nimport { sonicWalletFactoryAbi } from '../../abis/sonicWalletFactory.abi.js';\nimport { variableDebtTokenAbi } from '../../abis/variableDebtToken.abi.js';\nimport { wrappedSonicAbi } from '../../abis/wrappedSonic.abi.js';\nimport type { SonicSpokeProvider } from '../../entities/index.js';\nimport type { EvmContractCall, EvmReturnType, PromiseEvmTxReturnType, Result } from '../../types.js';\nimport { Erc20Service } from '../index.js';\nimport { MoneyMarketService } from '../moneyMarket/MoneyMarketService.js';\nimport { getHubAssetInfo } from '../../constants.js';\nimport { encodeContractCalls } from '../../utils/evm-utils.js';\nimport type { Hex, HubAddress, SpokeChainId } from '@sodax/types';\n\nexport type SonicSpokeDepositParams = {\n from: Address; // The address of the user on the spoke chain\n to?: HubAddress; // The address of the user on the hub chain (wallet abstraction address)\n token: Address; // The address of the token to deposit\n amount: bigint; // The amount of tokens to deposit\n data: Hex; // The data to send with the deposit (encoded calls array)\n};\n\nexport type WithdrawInfo = {\n aTokenAddress: Address;\n aTokenAmount: bigint;\n token: Address;\n};\n\nexport type BorrowInfo = {\n variableDebtTokenAddress: Address;\n vaultAddress: Address;\n amount: bigint;\n};\n\nexport class SonicSpokeService {\n private constructor() {}\n\n /**\n * Get the derived address of a contract deployed with CREATE3.\n * @param address - User's address on the specified chain as hex\n * @param provider - Sonic Spoke provider\n * @returns {HubAddress} The computed contract address as a EVM address (hex) string\n */\n public static async getUserRouter(address: Address, provider: SonicSpokeProvider): Promise<HubAddress> {\n return provider.publicClient.readContract({\n address: provider.chainConfig.addresses.walletRouter,\n abi: sonicWalletFactoryAbi,\n functionName: 'getDeployedAddress',\n args: [address],\n });\n }\n\n /**\n * Deposit tokens to the spoke chain using the Sonic wallet abstraction.\n * @param {SonicSpokeDepositParams} params - The parameters for the deposit\n * @param {SonicSpokeProvider} spokeProvider - The provider for the spoke chain\n * @returns {PromiseEvmTxReturnType<R>} A promise that resolves to the transaction hash\n */\n public static async deposit<R extends boolean = false>(\n params: SonicSpokeDepositParams,\n spokeProvider: SonicSpokeProvider,\n raw?: R,\n ): PromiseEvmTxReturnType<R> {\n const userHubAddress = params.to ?? (await SonicSpokeService.getUserRouter(params.from, spokeProvider));\n\n // Decode the data field which contains the encoded calls array\n const calls = Array.from(\n decodeAbiParameters(\n [\n {\n name: 'calls',\n type: 'tuple[]',\n components: [\n { name: 'address', type: 'address' },\n { name: 'value', type: 'uint256' },\n { name: 'data', type: 'bytes' },\n ],\n },\n ],\n params.data,\n )[0] satisfies readonly EvmContractCall[],\n );\n\n if (params.token === spokeProvider.chainConfig.nativeToken) {\n // Add a call to wrap the native token\n const wrapCall = {\n address: spokeProvider.chainConfig.addresses.wrappedSonic,\n value: params.amount,\n data: encodeFunctionData({\n abi: wrappedSonicAbi,\n functionName: 'deposit',\n }),\n } satisfies EvmContractCall;\n calls.unshift(wrapCall);\n } else {\n const transferFromCall = Erc20Service.encodeTransferFrom(\n params.token,\n params.from,\n userHubAddress,\n params.amount,\n );\n calls.unshift(transferFromCall);\n }\n\n const txData = encodeFunctionData({\n abi: sonicWalletFactoryAbi,\n functionName: 'route',\n args: [\n calls.map(call => ({\n addr: call.address,\n value: call.value,\n data: call.data,\n })),\n ],\n });\n\n const rawTx = {\n from: params.from,\n to: spokeProvider.chainConfig.addresses.walletRouter,\n data: txData,\n value: params.token === spokeProvider.chainConfig.nativeToken ? params.amount : 0n,\n } satisfies EvmReturnType<true>;\n\n if (raw) {\n return rawTx as EvmReturnType<R>;\n }\n\n return spokeProvider.walletProvider.sendTransaction(rawTx) as PromiseEvmTxReturnType<R>;\n }\n\n /**\n * Get the balance of the token in the spoke chain.\n * @param {Address} token - The address of the token to get the balance of.\n * @param {SonicSpokeProvider} spokeProvider - The spoke provider.\n * @returns {Promise<bigint>} The balance of the token.\n */\n public static async getDeposit(token: Address, spokeProvider: SonicSpokeProvider): Promise<bigint> {\n return spokeProvider.publicClient.readContract({\n address: token,\n abi: erc20Abi,\n functionName: 'balanceOf',\n args: [token],\n });\n }\n\n /**\n * Execute a batch of contract calls through the Sonic wallet contract.\n * @param {Hex} payload - The encoded payload containing the calls array\n * @param {SonicSpokeProvider} spokeProvider - The provider for the spoke chain\n * @returns {PromiseEvmTxReturnType<R>} A promise that resolves to the transaction hash\n */\n public static async callWallet<R extends boolean = false>(\n payload: Hex,\n spokeProvider: SonicSpokeProvider,\n raw?: R,\n ): PromiseEvmTxReturnType<R> {\n // Decode the payload which contains the encoded calls array\n const calls = decodeAbiParameters(\n [\n {\n name: 'calls',\n type: 'tuple[]',\n components: [\n { name: 'address', type: 'address' },\n { name: 'value', type: 'uint256' },\n { name: 'data', type: 'bytes' },\n ],\n },\n ],\n payload,\n )[0] satisfies readonly EvmContractCall[];\n\n const txData = encodeFunctionData({\n abi: sonicWalletFactoryAbi,\n functionName: 'route',\n args: [\n calls.map(call => ({\n addr: call.address,\n value: call.value,\n data: call.data,\n })),\n ],\n });\n\n const rawTx = {\n from: await spokeProvider.walletProvider.getWalletAddress(),\n to: spokeProvider.chainConfig.addresses.walletRouter,\n data: txData,\n value: 0n,\n } satisfies EvmReturnType<true>;\n\n if (raw) {\n return rawTx as EvmReturnType<R>;\n }\n\n return spokeProvider.walletProvider.sendTransaction(rawTx) as PromiseEvmTxReturnType<R>;\n }\n\n /**\n * Get withdraw information for a given token\n * @param token - The address of the underlying token\n * @param amount - The amount to withdraw\n * @param spokeProvider - The spoke provider\n * @param moneyMarketService - The money market service\n * @returns {WithdrawInfo} WithdrawInfo containing aToken address, amount and vault address\n */\n public static async getWithdrawInfo(\n token: Address,\n amount: bigint,\n spokeProvider: SonicSpokeProvider,\n moneyMarketService: MoneyMarketService,\n ): Promise<WithdrawInfo> {\n const assetConfig = getHubAssetInfo(spokeProvider.chainConfig.chain.id, token);\n\n if (!assetConfig) {\n throw new Error('[SonicSpokeService.getWithdrawInfo] Hub asset not found');\n }\n\n const vaultAddress = assetConfig.vault;\n\n const [normalizedIncome, reserveData] = await Promise.all([\n moneyMarketService.getReserveNormalizedIncome(moneyMarketService.config.lendingPool, vaultAddress),\n moneyMarketService.getReserveData(moneyMarketService.config.lendingPool, vaultAddress),\n ]);\n\n const aTokenAddress = reserveData.aTokenAddress;\n const aTokenAmount = MoneyMarketService.calculateATokenAmount(amount, normalizedIncome);\n\n return {\n aTokenAddress,\n aTokenAmount,\n token,\n };\n }\n\n /**\n * Get borrow information for a given token\n * @param token - The address of the underlying token\n * @param amount - The amount to borrow\n * @param chainId - The chain ID\n * @param moneyMarketService - The money market service\n * @returns BorrowInfo containing variable debt token address and vault address\n */\n public static async getBorrowInfo(\n token: Address,\n amount: bigint,\n chainId: SpokeChainId,\n moneyMarketService: MoneyMarketService,\n ): Promise<BorrowInfo> {\n const assetConfig = getHubAssetInfo(chainId, token);\n\n if (!assetConfig) {\n throw new Error('[SonicSpokeService.getBorrowInfo] Hub asset not found');\n }\n\n const vaultAddress = assetConfig.vault;\n const reserveData = await moneyMarketService.getReserveData(moneyMarketService.config.lendingPool, vaultAddress);\n const variableDebtTokenAddress = reserveData.variableDebtTokenAddress;\n\n return {\n variableDebtTokenAddress,\n vaultAddress,\n amount,\n };\n }\n\n /**\n * Check if the user has approved the withdrawal of tokens from the spoke chain using the Sonic wallet abstraction.\n * @param from - The address of the user on the spoke chain\n * @param withdrawInfo - The information about the withdrawal\n * @param spokeProvider - The spoke provider\n * @param spender - The address of the spender\n * @returns {Promise<Result<boolean>>} A promise that resolves to the result of the approval check\n */\n public static async isWithdrawApproved(\n from: Address,\n withdrawInfo: WithdrawInfo,\n spokeProvider: SonicSpokeProvider,\n spender?: HubAddress,\n ): Promise<Result<boolean>> {\n try {\n const spenderAddress = spender ?? (await SonicSpokeService.getUserRouter(from, spokeProvider));\n\n return Erc20Service.isAllowanceValid(\n withdrawInfo.token,\n withdrawInfo.aTokenAmount,\n from,\n spenderAddress,\n spokeProvider,\n );\n } catch (error) {\n return {\n ok: false,\n error,\n };\n }\n }\n\n /**\n * Approve the withdrawal of tokens from the spoke chain using the Sonic wallet abstraction.\n * @param from - The address of the user on the spoke chain\n * @param withdrawInfo - The information about the withdrawal\n * @param spokeProvider - The spoke provider\n * @param raw - Whether to return the raw transaction data\n * @returns {PromiseEvmTxReturnType<R>} A promise that resolves to the transaction hash\n */\n public static async approveWithdraw<R extends boolean = false>(\n from: Address,\n withdrawInfo: WithdrawInfo,\n spokeProvider: SonicSpokeProvider,\n raw?: R,\n ): PromiseEvmTxReturnType<R> {\n const [userRouter, walletAddress] = await Promise.all([\n SonicSpokeService.getUserRouter(from, spokeProvider),\n spokeProvider.walletProvider.getWalletAddress(),\n ]);\n\n const txData = encodeFunctionData({\n abi: erc20Abi,\n functionName: 'approve',\n args: [userRouter, withdrawInfo.aTokenAmount],\n });\n\n const rawTx = {\n from: walletAddress,\n to: withdrawInfo.aTokenAddress,\n data: txData,\n value: 0n,\n } satisfies EvmReturnType<true>;\n\n if (raw) {\n return rawTx as EvmReturnType<R>;\n }\n\n return spokeProvider.walletProvider.sendTransaction(rawTx) as PromiseEvmTxReturnType<R>;\n }\n\n /**\n * Check if the user has approved the borrowing of tokens from the spoke chain using the Sonic wallet abstraction.\n * @param from - The address of the user on the spoke chain\n * @param borrowInfo - The information about the borrowing\n * @param spokeProvider - The spoke provider\n * @param spender - The address of the spender\n * @returns {Promise<Result<boolean>>} A promise that resolves to the result of the approval check\n */\n public static async isBorrowApproved(\n from: Address,\n borrowInfo: BorrowInfo,\n spokeProvider: SonicSpokeProvider,\n spender?: HubAddress,\n ): Promise<Result<boolean>> {\n try {\n const spenderAddress = spender ?? (await SonicSpokeService.getUserRouter(from, spokeProvider));\n\n const allowance: bigint = await spokeProvider.publicClient.readContract({\n address: borrowInfo.variableDebtTokenAddress,\n abi: variableDebtTokenAbi,\n functionName: 'borrowAllowance',\n args: [from, spenderAddress],\n });\n\n return {\n ok: true,\n value: allowance >= borrowInfo.amount,\n };\n } catch (error) {\n return {\n ok: false,\n error,\n };\n }\n }\n\n public static async approveBorrow<R extends boolean = false>(\n from: Address,\n borrowInfo: BorrowInfo,\n spokeProvider: SonicSpokeProvider,\n raw?: R,\n ): PromiseEvmTxReturnType<R> {\n const [userRouter, walletAddress] = await Promise.all([\n SonicSpokeService.getUserRouter(from, spokeProvider),\n spokeProvider.walletProvider.getWalletAddress(),\n ]);\n\n const txData = encodeFunctionData({\n abi: variableDebtTokenAbi,\n functionName: 'approveDelegation',\n args: [userRouter, borrowInfo.amount],\n });\n\n const rawTx = {\n from: walletAddress,\n to: borrowInfo.variableDebtTokenAddress,\n data: txData,\n value: 0n,\n } satisfies EvmReturnType<true>;\n\n if (raw) {\n return rawTx as EvmReturnType<R>;\n }\n\n return spokeProvider.walletProvider.sendTransaction(rawTx) as PromiseEvmTxReturnType<R>;\n }\n\n public static async withdrawData(\n from: Address,\n withdrawInfo: WithdrawInfo,\n amount: bigint,\n spokeProvider: SonicSpokeProvider,\n moneyMarketService: MoneyMarketService,\n ): Promise<Hex> {\n const userRouter = await SonicSpokeService.getUserRouter(from, spokeProvider);\n\n // Add withdraw call\n const withdrawCall = moneyMarketService.withdrawData(\n userRouter,\n from,\n withdrawInfo.token,\n amount,\n spokeProvider.chainConfig.chain.id,\n );\n const calls = decodeAbiParameters(\n [\n {\n name: 'calls',\n type: 'tuple[]',\n components: [\n { name: 'address', type: 'address' },\n { name: 'value', type: 'uint256' },\n { name: 'data', type: 'bytes' },\n ],\n },\n ],\n withdrawCall,\n )[0] as {\n address: Address;\n value: bigint;\n data: `0x${string}`;\n }[];\n\n const transferFromCall = Erc20Service.encodeTransferFrom(\n withdrawInfo.aTokenAddress,\n from,\n userRouter,\n withdrawInfo.aTokenAmount,\n );\n calls.unshift({\n address: transferFromCall.address,\n value: transferFromCall.value,\n data: transferFromCall.data,\n });\n\n return encodeContractCalls(calls);\n }\n}\n","import { SONIC_MAINNET_CHAIN_ID } from '@sodax/types';\nimport type {\n JsonRpcPayloadResponse,\n ResponseAddressType,\n ResponseSigningType,\n} from './entities/icon/HanaWalletConnector.js';\nimport {\n CWSpokeProvider,\n IconSpokeProvider,\n SolanaSpokeProvider,\n StellarSpokeProvider,\n SuiSpokeProvider,\n type EvmUninitializedConfig,\n type EvmInitializedConfig,\n type EvmUninitializedPrivateKeyConfig,\n type EvmUninitializedBrowserConfig,\n type SpokeProvider,\n EvmSpokeProvider,\n SonicSpokeProvider,\n} from './entities/index.js';\nimport {\n INTENT_RELAY_CHAIN_IDS,\n type EvmHubChainConfig,\n type EvmSpokeChainConfig,\n type HubChainConfig,\n type IconAddress,\n type IntentRelayChainId,\n type MoneyMarketConfig,\n type MoneyMarketConfigParams,\n type Optional,\n type PartnerFeeAmount,\n type PartnerFeeConfig,\n type PartnerFeePercentage,\n type Prettify,\n type SolverConfig,\n type SolverConfigParams,\n type SpokeChainConfig,\n} from './index.js';\n\nexport function isEvmHubChainConfig(value: HubChainConfig): value is EvmHubChainConfig {\n return typeof value === 'object' && value.chain.type === 'EVM';\n}\n\nexport function isEvmSpokeChainConfig(value: SpokeChainConfig): value is EvmSpokeChainConfig {\n return typeof value === 'object' && value.chain.type === 'EVM';\n}\n\nexport function isEvmUninitializedConfig(\n value: EvmUninitializedConfig | EvmInitializedConfig,\n): value is EvmUninitializedConfig {\n return typeof value === 'object' && 'chain' in value;\n}\n\nexport function isEvmInitializedConfig(\n value: EvmUninitializedConfig | EvmInitializedConfig,\n): value is EvmInitializedConfig {\n return typeof value === 'object' && 'walletClient' in value && 'publicClient' in value;\n}\n\nexport function isEvmUninitializedBrowserConfig(value: EvmUninitializedConfig): value is EvmUninitializedBrowserConfig {\n return typeof value === 'object' && 'userAddress' in value && 'chain' in value && 'provider' in value;\n}\n\nexport function isEvmUninitializedPrivateKeyConfig(\n value: EvmUninitializedConfig,\n): value is EvmUninitializedPrivateKeyConfig {\n return typeof value === 'object' && 'chain' in value && 'privateKey' in value;\n}\n\nexport function isIconAddress(value: unknown): value is IconAddress {\n return typeof value === 'string' && /^hx[a-f0-9]{40}$|^cx[a-f0-9]{40}$/.test(value);\n}\nexport function isResponseAddressType(value: unknown): value is ResponseAddressType {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n 'payload' in value &&\n value.type === 'RESPONSE_ADDRESS' &&\n isIconAddress(value.payload)\n );\n}\n\nexport function isResponseSigningType(value: unknown): value is ResponseSigningType {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n 'payload' in value &&\n value.type === 'RESPONSE_SIGNING' &&\n typeof value.payload === 'string'\n );\n}\n\nexport function isJsonRpcPayloadResponse(value: unknown): value is JsonRpcPayloadResponse {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'id' in value &&\n 'result' in value &&\n typeof value.result === 'string'\n );\n}\n\nexport function isIntentRelayChainId(value: bigint): value is IntentRelayChainId {\n return (\n typeof value === 'bigint' &&\n value >= 0n &&\n Object.values(INTENT_RELAY_CHAIN_IDS).includes(value as IntentRelayChainId)\n );\n}\n\nexport function isPartnerFeeAmount(value: unknown): value is PartnerFeeAmount {\n return typeof value === 'object' && value !== null && 'address' in value && 'amount' in value;\n}\n\nexport function isPartnerFeePercentage(value: unknown): value is PartnerFeePercentage {\n return typeof value === 'object' && value !== null && 'address' in value && 'percentage' in value;\n}\n\nexport function isEvmSpokeProvider(value: SpokeProvider): value is EvmSpokeProvider {\n return (\n typeof value === 'object' &&\n value !== null &&\n value instanceof EvmSpokeProvider &&\n value.chainConfig.chain.type === 'EVM'\n );\n}\n\nexport function isSonicSpokeProvider(value: SpokeProvider): value is SonicSpokeProvider {\n return (\n typeof value === 'object' &&\n value !== null &&\n value instanceof SonicSpokeProvider &&\n value.chainConfig.chain.type === 'EVM' &&\n value.chainConfig.chain.id === SONIC_MAINNET_CHAIN_ID\n );\n}\n\nexport function isSolanaSpokeProvider(value: SpokeProvider): value is SolanaSpokeProvider {\n return (\n typeof value === 'object' &&\n value !== null &&\n value instanceof SolanaSpokeProvider &&\n value.chainConfig.chain.type === 'SOLANA'\n );\n}\n\nexport function isStellarSpokeProvider(value: SpokeProvider): value is StellarSpokeProvider {\n return (\n typeof value === 'object' &&\n value !== null &&\n value instanceof StellarSpokeProvider &&\n value.chainConfig.chain.type === 'STELLAR'\n );\n}\n\nexport function isCWSpokeProvider(value: SpokeProvider): value is CWSpokeProvider {\n return (\n typeof value === 'object' &&\n value !== null &&\n value instanceof CWSpokeProvider &&\n value.chainConfig.chain.type === 'INJECTIVE'\n );\n}\n\nexport function isIconSpokeProvider(value: SpokeProvider): value is IconSpokeProvider {\n return (\n typeof value === 'object' &&\n value !== null &&\n value instanceof IconSpokeProvider &&\n value.chainConfig.chain.type === 'ICON'\n );\n}\n\nexport function isSuiSpokeProvider(value: SpokeProvider): value is SuiSpokeProvider {\n return (\n typeof value === 'object' &&\n value !== null &&\n value instanceof SuiSpokeProvider &&\n value.chainConfig.chain.type === 'SUI'\n );\n}\n\nexport function isConfiguredSolverConfig(\n value: SolverConfigParams,\n): value is Prettify<SolverConfig & Optional<PartnerFeeConfig, 'partnerFee'>> {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'intentsContract' in value &&\n 'solverApiEndpoint' in value &&\n 'relayerApiEndpoint' in value\n );\n}\n\nexport function isConfiguredMoneyMarketConfig(\n value: MoneyMarketConfigParams,\n): value is Prettify<MoneyMarketConfig & Optional<PartnerFeeConfig, 'partnerFee'>> {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'lendingPool' in value &&\n 'uiPoolDataProvider' in value &&\n 'poolAddressesProvider' in value &&\n 'bnUSD' in value &&\n 'bnUSDVault' in value\n );\n}\n","import { CWSpokeProvider } from '../../entities/cosmos/CWSpokeProvider.js';\nimport { IconSpokeProvider } from '../../entities/icon/IconSpokeProvider.js';\nimport {\n type EvmHubProvider,\n EvmSpokeProvider,\n SolanaSpokeProvider,\n SonicSpokeProvider,\n type SpokeProvider,\n StellarSpokeProvider,\n SuiSpokeProvider,\n} from '../../entities/index.js';\nimport type { GetSpokeDepositParamsType, PromiseTxReturnType, TxReturnType } from '../../types.js';\nimport type { Address, Hex, HubAddress } from '@sodax/types';\nimport { CWSpokeService } from './CWSpokeService.js';\nimport { EvmSpokeService } from './EvmSpokeService.js';\nimport { IconSpokeService } from './IconSpokeService.js';\nimport { SolanaSpokeService } from './SolanaSpokeService.js';\nimport { StellarSpokeService } from './StellarSpokeService.js';\nimport { SuiSpokeService } from './SuiSpokeService.js';\nimport { SonicSpokeService } from './SonicSpokeService.js';\nimport {\n isCWSpokeProvider,\n isEvmSpokeProvider,\n isIconSpokeProvider,\n isSolanaSpokeProvider,\n isSonicSpokeProvider,\n isStellarSpokeProvider,\n isSuiSpokeProvider,\n} from '../../guards.js';\n\n/**\n * SpokeService is a main class that provides functionalities for dealing with spoke chains.\n * It uses command pattern to execute different spoke chain operations.\n */\n\nexport class SpokeService {\n private constructor() {}\n\n /**\n * Deposit tokens to the spoke chain.\n * @param {GetSpokeDepositParamsType<T extends SpokeProvider>} params - The parameters for the deposit, including the user's address, token address, amount, and additional data.\n * @param {SpokeProvider} spokeProvider - The provider for the spoke chain.\n * @param {EvmHubProvider} hubProvider - The provider for the hub chain.\n * @returns {Promise<Hash>} A promise that resolves to the transaction hash.\n */\n public static async deposit<T extends SpokeProvider = SpokeProvider, R extends boolean = false>(\n params: GetSpokeDepositParamsType<T>,\n spokeProvider: T,\n hubProvider: EvmHubProvider,\n raw?: R,\n ): Promise<PromiseTxReturnType<T, R>> {\n if (spokeProvider instanceof SonicSpokeProvider) {\n return SonicSpokeService.deposit(\n params as GetSpokeDepositParamsType<SonicSpokeProvider>,\n spokeProvider,\n raw,\n ) as PromiseTxReturnType<T, R>;\n }\n if (spokeProvider instanceof EvmSpokeProvider) {\n return EvmSpokeService.deposit(\n params as GetSpokeDepositParamsType<EvmSpokeProvider>,\n spokeProvider,\n hubProvider,\n raw,\n ) as PromiseTxReturnType<T, R>;\n }\n if (spokeProvider instanceof CWSpokeProvider) {\n return CWSpokeService.deposit(\n params as GetSpokeDepositParamsType<CWSpokeProvider>,\n spokeProvider,\n hubProvider,\n raw,\n ) as PromiseTxReturnType<T, R>;\n }\n if (spokeProvider instanceof IconSpokeProvider) {\n return IconSpokeService.deposit(\n params as GetSpokeDepositParamsType<IconSpokeProvider>,\n spokeProvider,\n hubProvider,\n raw,\n ) as PromiseTxReturnType<T, R>;\n }\n\n if (spokeProvider instanceof SuiSpokeProvider) {\n return SuiSpokeService.deposit(\n params as GetSpokeDepositParamsType<SuiSpokeProvider>,\n spokeProvider,\n hubProvider,\n raw,\n ) as PromiseTxReturnType<T, R>;\n }\n\n if (spokeProvider instanceof SolanaSpokeProvider) {\n return SolanaSpokeService.deposit(\n params as GetSpokeDepositParamsType<SolanaSpokeProvider>,\n spokeProvider,\n hubProvider,\n raw,\n ) as PromiseTxReturnType<T, R>;\n }\n if (spokeProvider instanceof StellarSpokeProvider) {\n return StellarSpokeService.deposit(\n params as GetSpokeDepositParamsType<StellarSpokeProvider>,\n spokeProvider,\n hubProvider,\n raw,\n ) as PromiseTxReturnType<T, R>;\n }\n\n throw new Error('Invalid spoke provider');\n }\n\n /**\n * Get the balance of the token in the spoke chain.\n * @param {Address} token - The address of the token to get the balance of.\n * @param {SpokeProvider} spokeProvider - The spoke provider.\n * @returns {Promise<bigint>} The balance of the token.\n */\n public static getDeposit(token: Address, spokeProvider: SpokeProvider): Promise<bigint> {\n if (spokeProvider instanceof EvmSpokeProvider) {\n return EvmSpokeService.getDeposit(token, spokeProvider);\n }\n if (spokeProvider instanceof CWSpokeProvider) {\n return CWSpokeService.getDeposit(token, spokeProvider);\n }\n if (spokeProvider instanceof StellarSpokeProvider) {\n return StellarSpokeService.getDeposit(token, spokeProvider);\n }\n if (spokeProvider instanceof SuiSpokeProvider) {\n return SuiSpokeService.getDeposit(token, spokeProvider);\n }\n if (spokeProvider instanceof IconSpokeProvider) {\n return IconSpokeService.getDeposit(token, spokeProvider);\n }\n if (spokeProvider instanceof SolanaSpokeProvider) {\n return SolanaSpokeService.getDeposit(token, spokeProvider);\n }\n if (spokeProvider instanceof SonicSpokeProvider) {\n return SonicSpokeService.getDeposit(token, spokeProvider);\n }\n\n throw new Error('Invalid spoke provider');\n }\n\n /**\n * Calls a contract on the spoke chain using the user's wallet.\n * @param {HubAddress} from - The address of the user on the hub chain.\n * @param {Hex} payload - The payload to send to the contract.\n * @param {SpokeProvider} spokeProvider - The provider for the spoke chain.\n * @param {EvmHubProvider} hubProvider - The provider for the hub chain.\n * @returns {Promise<Hash>} A promise that resolves to the transaction hash.\n */\n public static async callWallet<T extends SpokeProvider = SpokeProvider, R extends boolean = false>(\n from: HubAddress,\n payload: Hex,\n spokeProvider: T,\n hubProvider: EvmHubProvider,\n raw?: R,\n ): Promise<TxReturnType<T, R>> {\n if (isSonicSpokeProvider(spokeProvider)) {\n return (await SonicSpokeService.callWallet(payload, spokeProvider, raw)) satisfies TxReturnType<\n SonicSpokeProvider,\n R\n > as TxReturnType<T, R>;\n }\n if (isEvmSpokeProvider(spokeProvider)) {\n return (await EvmSpokeService.callWallet(from, payload, spokeProvider, hubProvider)) satisfies TxReturnType<\n EvmSpokeProvider,\n R\n > as TxReturnType<T, R>;\n }\n if (isCWSpokeProvider(spokeProvider)) {\n return (await CWSpokeService.callWallet(from, payload, spokeProvider, hubProvider, raw)) satisfies TxReturnType<\n CWSpokeProvider,\n R\n > as TxReturnType<T, R>;\n }\n if (isIconSpokeProvider(spokeProvider)) {\n return (await IconSpokeService.callWallet(from, payload, spokeProvider, hubProvider, raw)) satisfies TxReturnType<\n IconSpokeProvider,\n R\n > as TxReturnType<T, R>;\n }\n if (isSuiSpokeProvider(spokeProvider)) {\n return (await SuiSpokeService.callWallet(from, payload, spokeProvider, hubProvider, raw)) satisfies TxReturnType<\n SuiSpokeProvider,\n R\n > as TxReturnType<T, R>;\n }\n if (isSolanaSpokeProvider(spokeProvider)) {\n return (await SolanaSpokeService.callWallet(\n from,\n payload,\n spokeProvider,\n hubProvider,\n raw,\n )) satisfies TxReturnType<SolanaSpokeProvider, R> as TxReturnType<T, R>;\n }\n if (isStellarSpokeProvider(spokeProvider)) {\n return (await StellarSpokeService.callWallet(from, payload, spokeProvider, hubProvider)) satisfies TxReturnType<\n StellarSpokeProvider,\n R\n > as TxReturnType<T, R>;\n }\n\n throw new Error('Invalid spoke provider');\n }\n}\n","import type { HttpUrl, Result } from '../../types.js';\nimport type { Hex } from '@sodax/types';\nimport invariant from 'tiny-invariant';\nimport { retry } from '../../utils/shared-utils.js';\nimport type { IntentSubmitError } from '../solver/SolverService.js';\nimport { DEFAULT_RELAY_TX_TIMEOUT, getIntentRelayChainId } from '../../constants.js';\nimport type { SpokeProvider } from '../../entities/Providers.js';\n\n/**\n * The action type for the intent relay service.\n * submit - submit a transaction to the intent relay service\n * get_transaction_packets - get transaction packets from the intent relay service\n * get_packet - get a packet from the intent relay service\n */\nexport type RelayAction = 'submit' | 'get_transaction_packets' | 'get_packet';\n\n/**\n * The status of the relay transaction.\n * pending - no signatures\n * validating - not enough signatures\n * executing - enough signatures,no confirmed txn-hash\n * executed - has confirmed transaction-hash\n */\nexport type RelayTxStatus = 'pending' | 'validating' | 'executing' | 'executed';\n\nexport type RelayErrorCode = 'UNKNOWN' | 'SUBMIT_TX_FAILED' | 'POST_EXECUTION_FAILED' | 'TIMEOUT';\n\nexport type RelayError = {\n code: RelayErrorCode;\n error: unknown;\n};\n\nexport type SubmitTxParams = {\n chain_id: string; // The ID of the chain where the transaction was submitted\n tx_hash: string; // The transaction hash of the submitted transaction\n};\n\nexport type GetTransactionPacketsParams = {\n chain_id: string; // The ID of the chain where the transaction was submitted\n tx_hash: string; // The transaction hash of the submitted transaction\n};\n\nexport type GetPacketParams = {\n chain_id: string; // The ID of the chain where the transaction was submitted\n tx_hash: string; // The transaction hash of the submitted transaction\n conn_sn: string; // The connection sequence number of the submitted transaction\n};\n\nexport type SubmitTxResponse = {\n success: boolean;\n message: string;\n};\n\nexport type PacketData = {\n src_chain_id: number;\n src_tx_hash: string;\n src_address: string;\n status: RelayTxStatus;\n dst_chain_id: number;\n conn_sn: number;\n dst_address: string;\n dst_tx_hash: string;\n signatures: string[];\n payload: string;\n};\n\nexport type GetTransactionPacketsResponse = {\n success: boolean;\n data: PacketData[];\n};\n\nexport type GetPacketResponse =\n | {\n success: true;\n data: PacketData;\n }\n | {\n success: false;\n message: string;\n };\n\nexport type GetRelayRequestParamType<T extends RelayAction> = T extends 'submit'\n ? SubmitTxParams\n : T extends 'get_transaction_packets'\n ? GetTransactionPacketsParams\n : T extends 'get_packet'\n ? GetPacketParams\n : never;\n\nexport type GetRelayResponse<T extends RelayAction> = T extends 'submit'\n ? SubmitTxResponse\n : T extends 'get_transaction_packets'\n ? GetTransactionPacketsResponse\n : T extends 'get_packet'\n ? GetPacketResponse\n : never;\n\nexport type IntentRelayRequestParams = SubmitTxParams | GetTransactionPacketsParams | GetPacketParams;\n\nexport type WaitUntilIntentExecutedPayload = {\n intentRelayChainId: string;\n spokeTxHash: string;\n timeout: number;\n apiUrl: HttpUrl;\n};\n\n/**\n * Represents the request payload for submitting a transaction to the intent relay service.\n * Contains the action type and parameters including chain ID and transaction hash.\n */\nexport type IntentRelayRequest<T extends RelayAction> = {\n action: T;\n params: GetRelayRequestParamType<T>;\n};\n\nasync function postRequest<T extends RelayAction>(\n payload: IntentRelayRequest<T>,\n apiUrl: string,\n): Promise<GetRelayResponse<T>> {\n const response = await retry(() =>\n fetch(apiUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(payload),\n }),\n );\n\n return response.json();\n}\n\n/**\n * Submits a transaction to the intent relay service.\n * @param payload - The request payload containing the 'submit' action type and parameters.\n * @param apiUrl - The URL of the intent relay service.\n * @returns The response from the intent relay service.\n */\nexport async function submitTransaction(\n payload: IntentRelayRequest<'submit'>,\n apiUrl: HttpUrl,\n): Promise<GetRelayResponse<'submit'>> {\n invariant(payload.params.chain_id.length > 0, 'Invalid input parameters. source_chain_id empty');\n invariant(payload.params.tx_hash.length > 0, 'Invalid input parameters. tx_hash empty');\n\n return postRequest(payload, apiUrl);\n}\n\n/**\n * Retrieves transaction packets from the intent relay service.\n * @param payload - The request payload containing the 'get_transaction_packets' action type and parameters.\n * @param apiUrl - The URL of the intent relay service.\n * @returns The response from the intent relay service.\n */\nexport async function getTransactionPackets(\n payload: IntentRelayRequest<'get_transaction_packets'>,\n apiUrl: HttpUrl,\n): Promise<GetRelayResponse<'get_transaction_packets'>> {\n invariant(payload.params.chain_id.length > 0, 'Invalid input parameters. source_chain_id empty');\n invariant(payload.params.tx_hash.length > 0, 'Invalid input parameters. tx_hash empty');\n\n return postRequest(payload, apiUrl);\n}\n\n/**\n * Retrieves a packet from the intent relay service.\n * @param payload - The request payload containing the 'get_packet' action type and parameters.\n * @param apiUrl - The URL of the intent relay service.\n * @returns The response from the intent relay service.\n */\nexport async function getPacket(\n payload: IntentRelayRequest<'get_packet'>,\n apiUrl: HttpUrl,\n): Promise<GetRelayResponse<'get_packet'>> {\n invariant(payload.params.chain_id.length > 0, 'Invalid input parameters. source_chain_id empty');\n invariant(payload.params.tx_hash.length > 0, 'Invalid input parameters. tx_hash empty');\n invariant(payload.params.conn_sn.length > 0, 'Invalid input parameters. conn_sn empty');\n\n return postRequest(payload, apiUrl);\n}\n\nexport async function waitUntilIntentExecuted(\n payload: WaitUntilIntentExecutedPayload,\n): Promise<Result<PacketData, IntentSubmitError<'TIMEOUT'>>> {\n try {\n const startTime = Date.now();\n\n while (Date.now() - startTime < payload.timeout) {\n try {\n const txPackets = await getTransactionPackets(\n {\n action: 'get_transaction_packets',\n params: {\n chain_id: payload.intentRelayChainId,\n tx_hash: payload.spokeTxHash,\n },\n },\n payload.apiUrl,\n );\n\n if (txPackets.success && txPackets.data.length > 0) {\n const packet = txPackets.data.find(\n packet => packet.src_tx_hash.toLowerCase() === payload.spokeTxHash.toLowerCase(),\n );\n\n if (txPackets.success && txPackets.data.length > 0 && packet && packet.status === 'executed') {\n return {\n ok: true,\n value: packet,\n };\n }\n }\n } catch (e) {\n console.error('Error getting transaction packets', e);\n }\n // wait one second before retrying\n await new Promise(resolve => setTimeout(resolve, 1000));\n }\n\n return {\n ok: false,\n error: {\n code: 'TIMEOUT',\n data: {\n payload: payload,\n error: {\n payload: payload,\n error: undefined,\n },\n },\n },\n };\n } catch (e) {\n return {\n ok: false,\n error: {\n code: 'TIMEOUT',\n data: {\n payload: payload,\n error: e,\n },\n },\n };\n }\n}\n\n/**\n * Submit the transaction to the Solver API and wait for it to be executed\n * @param spokeTxHash - The transaction hash to submit.\n * @param spokeProvider - The spoke provider.\n * @param timeout - The timeout in milliseconds for the transaction. Default is 20 seconds.\n * @returns The transaction hash.\n */\nexport async function relayTxAndWaitPacket<S extends SpokeProvider>(\n spokeTxHash: Hex,\n spokeProvider: S,\n relayerApiEndpoint: HttpUrl,\n timeout = DEFAULT_RELAY_TX_TIMEOUT,\n): Promise<Result<PacketData, RelayError>> {\n try {\n const intentRelayChainId = getIntentRelayChainId(spokeProvider.chainConfig.chain.id).toString();\n\n const submitPayload: IntentRelayRequest<'submit'> = {\n action: 'submit',\n params: {\n chain_id: intentRelayChainId,\n tx_hash: spokeTxHash,\n },\n };\n\n const submitResult = await submitTransaction(submitPayload, relayerApiEndpoint);\n\n if (!submitResult.success) {\n return {\n ok: false,\n error: {\n code: 'SUBMIT_TX_FAILED',\n error: submitResult.message,\n },\n };\n }\n\n const packet = await waitUntilIntentExecuted({\n intentRelayChainId,\n spokeTxHash,\n timeout,\n apiUrl: relayerApiEndpoint,\n });\n\n if (!packet.ok) {\n return {\n ok: false,\n error: {\n code: 'TIMEOUT',\n error: packet.error,\n },\n };\n }\n\n return {\n ok: true,\n value: packet.value,\n };\n } catch (error) {\n return {\n ok: false,\n error: {\n code: 'UNKNOWN',\n error: error,\n },\n };\n }\n}\n","import invariant from 'tiny-invariant';\nimport {\n type Address,\n type GetLogsReturnType,\n encodeAbiParameters,\n encodeFunctionData,\n encodePacked,\n getAbiItem,\n keccak256,\n parseEventLogs,\n} from 'viem';\nimport {\n type EvmContractCall,\n type EvmHubProvider,\n FEE_PERCENTAGE_SCALE,\n type Hash,\n type Hex,\n IntentsAbi,\n type PartnerFee,\n type SolverConfig,\n calculatePercentageFeeAmount,\n encodeContractCalls,\n getHubAssetInfo,\n getIntentRelayChainId,\n isIntentRelayChainId,\n isPartnerFeeAmount,\n isPartnerFeePercentage,\n randomUint256,\n} from '../../index.js';\nimport {\n type CreateIntentParams,\n Erc20Service,\n type FeeData,\n type Intent,\n type IntentData,\n IntentDataType,\n} from '../index.js';\n\nexport const IntentCreatedEventAbi = getAbiItem({ abi: IntentsAbi, name: 'IntentCreated' });\nexport type IntentCreatedEventLog = GetLogsReturnType<typeof IntentCreatedEventAbi>[number];\n\nexport class EvmSolverService {\n private constructor() {}\n\n /**\n * Constructs the create intent data for EVM Hub chain\n * @param {CreateIntentParams} createIntentParams - The create intent parameters\n * @param {Address} creatorHubWalletAddress - The creator hub wallet address\n * @param {SolverConfig} solverConfig - The intent configuration\n * @param {PartnerFee} fee - The partner fee configuration\n * @returns {Promise<[Hex, Intent, bigint]>} The encoded contract call, intent and fee amount\n */\n public static constructCreateIntentData(\n createIntentParams: CreateIntentParams,\n creatorHubWalletAddress: Address,\n solverConfig: SolverConfig,\n fee: PartnerFee | undefined,\n ): [Hex, Intent, bigint] {\n const inputToken = getHubAssetInfo(createIntentParams.srcChain, createIntentParams.inputToken)?.asset;\n const outputToken = getHubAssetInfo(createIntentParams.dstChain, createIntentParams.outputToken)?.asset;\n\n invariant(\n inputToken,\n `hub asset not found for spoke chain token (intent.inputToken): ${createIntentParams.inputToken}`,\n );\n invariant(\n outputToken,\n `hub asset not found for spoke chain token (intent.outputToken): ${createIntentParams.outputToken}`,\n );\n\n const [feeData, feeAmount] = EvmSolverService.createIntentFeeData(fee, createIntentParams.inputAmount);\n\n const calls: EvmContractCall[] = [];\n const intentsContract = solverConfig.intentsContract;\n const intent = {\n ...createIntentParams,\n inputToken,\n outputToken,\n srcChain: getIntentRelayChainId(createIntentParams.srcChain),\n dstChain: getIntentRelayChainId(createIntentParams.dstChain),\n intentId: randomUint256(),\n creator: creatorHubWalletAddress,\n data: feeData,\n } satisfies Intent;\n\n // user has to send input amount + fee amount to the Hub intent contract\n const totalInputAmount = intent.inputAmount + feeAmount;\n calls.push(Erc20Service.encodeApprove(intent.inputToken, intentsContract, totalInputAmount));\n calls.push(EvmSolverService.encodeCreateIntent(intent, intentsContract));\n return [encodeContractCalls(calls), intent, feeAmount];\n }\n\n /**\n * Creates encoded fee data for an intent\n * @param fee The partner fee configuration\n * @param inputAmount The input amount to calculate percentage-based fee from\n * @returns A tuple containing [encoded fee data, fee amount]. Fee amount will be 0n if no fee.\n */\n public static createIntentFeeData(fee: PartnerFee | undefined, inputAmount: bigint): [Hex, bigint] {\n invariant(inputAmount > 0n, 'Input amount must be greater than 0');\n if (!fee) {\n return ['0x', 0n];\n }\n\n let feeAmount: bigint;\n if (isPartnerFeeAmount(fee)) {\n feeAmount = fee.amount;\n } else if (isPartnerFeePercentage(fee)) {\n invariant(\n fee.percentage >= 0 && fee.percentage <= FEE_PERCENTAGE_SCALE,\n `Fee percentage must be between 0 and ${FEE_PERCENTAGE_SCALE}}`,\n );\n\n feeAmount = calculatePercentageFeeAmount(inputAmount, fee.percentage);\n } else {\n return ['0x', 0n];\n }\n\n // Create the fee data struct\n const feeData = {\n fee: feeAmount,\n receiver: fee.address,\n } satisfies FeeData;\n\n // Encode the fee data\n const encodedFeeData = encodeAbiParameters(\n [\n { name: 'fee', type: 'uint256' },\n { name: 'receiver', type: 'address' },\n ],\n [feeData.fee, feeData.receiver],\n );\n\n // Create the intent data struct\n const intentData = {\n type: IntentDataType.FEE,\n data: encodedFeeData,\n } satisfies IntentData;\n\n // Encode the intent data\n return [encodePacked(['uint8', 'bytes'], [intentData.type, intentData.data]), feeAmount];\n }\n\n /**\n * Gets an intent from a transaction hash\n * @param {Hash} txHash - The transaction hash\n * @param {SolverConfig} solverConfig - The solver configuration\n * @param {EvmHubProvider} hubProvider - The EVM hub provider\n * @returns {Promise<Intent>} The intent\n */\n public static async getIntent(\n txHash: Hash,\n solverConfig: SolverConfig,\n hubProvider: EvmHubProvider,\n ): Promise<Intent> {\n const receipt = await hubProvider.publicClient.waitForTransactionReceipt({ hash: txHash });\n const logs: IntentCreatedEventLog[] = parseEventLogs({\n abi: IntentsAbi,\n eventName: 'IntentCreated',\n logs: receipt.logs,\n strict: true,\n });\n\n for (const log of logs) {\n if (log.address.toLowerCase() === solverConfig.intentsContract.toLowerCase()) {\n if (!log.args.intent) {\n continue;\n }\n\n if (!isIntentRelayChainId(log.args.intent.srcChain) || !isIntentRelayChainId(log.args.intent.dstChain)) {\n throw new Error(`Invalid intent relay chain id: ${log.args.intent.srcChain} or ${log.args.intent.dstChain}`);\n }\n\n return {\n intentId: log.args.intent.intentId,\n creator: log.args.intent.creator,\n inputToken: log.args.intent.inputToken,\n outputToken: log.args.intent.outputToken,\n inputAmount: log.args.intent.inputAmount,\n minOutputAmount: log.args.intent.minOutputAmount,\n deadline: log.args.intent.deadline,\n data: log.args.intent.data,\n allowPartialFill: log.args.intent.allowPartialFill,\n srcChain: log.args.intent.srcChain,\n dstChain: log.args.intent.dstChain,\n srcAddress: log.args.intent.srcAddress,\n dstAddress: log.args.intent.dstAddress,\n solver: log.args.intent.solver,\n } satisfies Intent;\n }\n }\n\n throw new Error(`No intent found for ${txHash}`);\n }\n\n /**\n * Gets the keccak256 hash of an intent. Hash serves as the intent id on Hub chain.\n * @param {Intent} intent - The intent\n * @returns {Hex} The keccak256 hash of the intent\n */\n public static getIntentHash(intent: Intent): Hex {\n return keccak256(encodeAbiParameters(getAbiItem({ abi: IntentsAbi, name: 'createIntent' }).inputs, [intent]));\n }\n\n /**\n * Encodes a createIntent transaction\n * @param {Intent} intent - The intent to create\n * @param {Address} intentsContract - The address of the intents contract\n * @returns {EvmContractCall} The encoded contract call\n */\n public static encodeCreateIntent(intent: Intent, intentsContract: Address): EvmContractCall {\n return {\n address: intentsContract,\n value: 0n,\n data: encodeFunctionData({\n abi: IntentsAbi,\n functionName: 'createIntent',\n args: [intent],\n }),\n };\n }\n\n /**\n * Encodes a cancelIntent transaction\n * @param {Intent} intent - The intent to cancel\n * @param {Address} intentsContract - The address of the intents contract\n * @returns {EvmContractCall} The encoded contract call\n */\n public static encodeCancelIntent(intent: Intent, intentsContract: Address): EvmContractCall {\n return {\n address: intentsContract,\n value: 0n,\n data: encodeFunctionData({\n abi: IntentsAbi,\n functionName: 'cancelIntent',\n args: [intent],\n }),\n };\n }\n}\n","import invariant from 'tiny-invariant';\nimport {\n getHubAssetInfo,\n IntentErrorCode,\n isValidOriginalAssetAddress,\n retry,\n type IntentErrorResponse,\n type IntentExecutionRequest,\n type IntentExecutionResponse,\n type IntentQuoteRequest,\n type IntentQuoteResponse,\n type IntentQuoteResponseRaw,\n type IntentStatusRequest,\n type IntentStatusResponse,\n type Result,\n type SolverConfig,\n} from '../../index.js';\n\nexport class SolverApiService {\n private constructor() {}\n\n /**\n * Request a quote from the solver API\n * @example\n * {\n * \"token_src\":\"0x13b70564b1ec12876b20fab5d1bb630311312f4f\", // Asset BSC\n * \"token_dst\":\"0xdcd9578b51ef55239b6e68629d822a8d97c95b86\", // Asset ETH Arbitrum\n * \"token_src_blockchain_id\":\"56\",\n * \"token_dst_blockchain_id\":\"42161\",\n * \"amount\":1000000000000000n,\n * \"quote_type\": \"exact_input\"\n * }\n */\n public static async getQuote(\n payload: IntentQuoteRequest,\n config: SolverConfig,\n ): Promise<Result<IntentQuoteResponse, IntentErrorResponse>> {\n invariant(payload.token_src.length > 0, 'Empty token_src');\n invariant(payload.token_src_blockchain_id.length > 0, 'Empty token_src_blockchain_id');\n invariant(payload.token_dst.length > 0, 'Empty token_dst');\n invariant(payload.token_dst_blockchain_id.length > 0, 'Empty token_dst_blockchain_id');\n invariant(payload.amount > 0n, 'amount must be greater than 0');\n invariant(\n isValidOriginalAssetAddress(payload.token_src_blockchain_id, payload.token_src),\n 'unsupported token_src for src chain',\n );\n invariant(\n isValidOriginalAssetAddress(payload.token_dst_blockchain_id, payload.token_dst),\n 'unsupported token_dst for dst chain',\n );\n\n const tokenSrc = getHubAssetInfo(payload.token_src_blockchain_id, payload.token_src)?.asset;\n const tokenDst = getHubAssetInfo(payload.token_dst_blockchain_id, payload.token_dst)?.asset;\n\n invariant(tokenSrc, 'hub asset not found for token_src');\n invariant(tokenDst, 'hub asset not found for token_dst');\n\n try {\n const response = await fetch(`${config.solverApiEndpoint}/quote`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n token_src: tokenSrc,\n token_dst: tokenDst,\n amount: payload.amount.toString(),\n quote_type: payload.quote_type,\n }),\n });\n\n if (!response.ok) {\n return {\n ok: false,\n error: await response.json(),\n };\n }\n\n const quoteResponse: IntentQuoteResponseRaw = await response.json();\n\n return {\n ok: true,\n value: {\n quoted_amount: BigInt(quoteResponse.quoted_amount),\n } satisfies IntentQuoteResponse,\n };\n } catch (e: unknown) {\n console.error(`[SolverApiService.getQuote] failed. Details: ${JSON.stringify(e)}`);\n return {\n ok: false,\n error: {\n detail: {\n code: IntentErrorCode.UNKNOWN,\n message: e ? JSON.stringify(e) : 'Unknown error',\n },\n },\n };\n }\n }\n\n /**\n * Post execution of intent order to Solver API\n * @example\n * // request\n * {\n * \"intent_tx_hash\": \"0xba3dce19347264db32ced212ff1a2036f20d9d2c7493d06af15027970be061af\",\n * \"quote_uuid\": \"a0dd7652-b360-4123-ab2d-78cfbcd20c6b\"\n * }\n *\n * // response\n * {\n * \"ok\": true,\n * \"value\": {\n * \"output\": {\n * \"answer\":\"OK\",\n * \"task_id\":\"a0dd7652-b360-4123-ab2d-78cfbcd20c6b\"\n * }\n * }\n * }\n */\n public static async postExecution(\n intentExecutionRequest: IntentExecutionRequest,\n config: SolverConfig,\n ): Promise<Result<IntentExecutionResponse, IntentErrorResponse>> {\n try {\n const response = await retry(() =>\n fetch(`${config.solverApiEndpoint}/execute`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(intentExecutionRequest),\n }),\n );\n\n if (!response.ok) {\n return {\n ok: false,\n error: await response.json(),\n };\n }\n\n return {\n ok: true,\n value: await response.json(),\n };\n } catch (e: unknown) {\n console.error(`[SolverApiService.postExecution] failed. Details: ${JSON.stringify(e)}`);\n return {\n ok: false,\n error: {\n detail: {\n code: IntentErrorCode.UNKNOWN,\n message: e ? JSON.stringify(e) : 'Unknown error',\n },\n },\n };\n }\n }\n\n public static async getStatus(\n intentStatusRequest: IntentStatusRequest,\n config: SolverConfig,\n ): Promise<Result<IntentStatusResponse, IntentErrorResponse>> {\n invariant(intentStatusRequest.intent_tx_hash.length > 0, 'Empty intent_tx_hash');\n try {\n const response = await fetch(`${config.solverApiEndpoint}/status`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(intentStatusRequest),\n });\n\n if (!response.ok) {\n return {\n ok: false,\n error: await response.json(),\n };\n }\n\n return {\n ok: true,\n value: await response.json(),\n };\n } catch (e: unknown) {\n console.error(`[SolverApiService.getStatus] failed. Details: ${JSON.stringify(e)}`);\n return {\n ok: false,\n error: {\n detail: {\n code: IntentErrorCode.UNKNOWN,\n message: e ? JSON.stringify(e) : 'Unknown error',\n },\n },\n };\n }\n }\n}\n","import invariant from 'tiny-invariant';\nimport {\n DEFAULT_RELAYER_API_ENDPOINT,\n DEFAULT_RELAY_TX_TIMEOUT,\n Erc20Service,\n type EvmHubProvider,\n EvmSpokeProvider,\n type IntentRelayRequest,\n type PacketData,\n type RelayErrorCode,\n SonicSpokeProvider,\n type SpokeProvider,\n SpokeService,\n type WaitUntilIntentExecutedPayload,\n WalletAbstractionService,\n calculateFeeAmount,\n encodeContractCalls,\n getIntentRelayChainId,\n getSolverConfig,\n isConfiguredSolverConfig,\n isValidIntentRelayChainId,\n isValidOriginalAssetAddress,\n isValidSpokeChainId,\n submitTransaction,\n waitUntilIntentExecuted,\n} from '../../index.js';\nimport type {\n EvmContractCall,\n FeeAmount,\n GetSpokeDepositParamsType,\n HttpUrl,\n IntentErrorResponse,\n IntentExecutionRequest,\n IntentExecutionResponse,\n IntentQuoteRequest,\n IntentQuoteResponse,\n IntentRelayChainId,\n IntentStatusRequest,\n IntentStatusResponse,\n PartnerFee,\n Result,\n SolverConfigParams,\n SolverServiceConfig,\n TxReturnType,\n} from '../../types.js';\nimport { EvmSolverService } from './EvmSolverService.js';\nimport { SolverApiService } from './SolverApiService.js';\nimport { SONIC_MAINNET_CHAIN_ID, type SpokeChainId, type Address, type Hex, type Hash } from '@sodax/types';\n\nexport type CreateIntentParams = {\n inputToken: string; // The address of the input token on spoke chain\n outputToken: string; // The address of the output token on spoke chain\n inputAmount: bigint; // The amount of input tokens\n minOutputAmount: bigint; // The minimum amount of output tokens to accept\n deadline: bigint; // Optional timestamp after which intent expires (0 = no deadline)\n allowPartialFill: boolean; // Whether the intent can be partially filled\n srcChain: SpokeChainId; // Chain ID where input tokens originate\n dstChain: SpokeChainId; // Chain ID where output tokens should be delivered\n srcAddress: Hex; // Source address in bytes (original address on spoke chain)\n dstAddress: Hex; // Destination address in bytes (original address on spoke chain)\n solver: Address; // Optional specific solver address (address(0) = any solver)\n data: Hex; // Additional arbitrary data\n};\n\nexport type Intent = {\n intentId: bigint; // Unique identifier for the intent\n creator: Address; // Address that created the intent (Wallet abstraction address on hub chain)\n inputToken: Address; // Token the user is providing (hub asset address on hub chain)\n outputToken: Address; // Token the user wants to receive (hub asset address on hub chain)\n inputAmount: bigint; // Amount of input tokens\n minOutputAmount: bigint; // Minimum amount of output tokens to accept\n deadline: bigint; // Optional timestamp after which intent expires (0 = no deadline)\n allowPartialFill: boolean; // Whether the intent can be partially filled\n srcChain: IntentRelayChainId; // Chain ID where input tokens originate\n dstChain: IntentRelayChainId; // Chain ID where output tokens should be delivered\n srcAddress: Hex; // Source address in bytes (original address on spoke chain)\n dstAddress: Hex; // Destination address in bytes (original address on spoke chain)\n solver: Address; // Optional specific solver address (address(0) = any solver)\n data: Hex; // Additional arbitrary data\n};\n\n// Data types for arbitrary data\nexport enum IntentDataType {\n FEE = 1,\n}\n\nexport type FeeData = {\n fee: bigint;\n receiver: Address;\n};\n\nexport type IntentData = {\n type: IntentDataType;\n data: Hex;\n};\n\nexport type IntentState = {\n exists: boolean;\n remainingInput: bigint;\n receivedOutput: bigint;\n pendingPayment: boolean;\n};\n\nexport type IntentCreationFailedErrorData = {\n payload: CreateIntentParams;\n error: unknown;\n};\n\nexport type IntentSubmitTxFailedErrorData = {\n payload: IntentRelayRequest<'submit'>;\n apiUrl: HttpUrl;\n};\n\nexport type IntentWaitUntilIntentExecutedFailedErrorData = {\n payload: WaitUntilIntentExecutedPayload;\n error: unknown;\n};\n\nexport type IntentSubmitErrorCode = RelayErrorCode | 'UNKNOWN' | 'CREATION_FAILED';\nexport type IntentSubmitErrorData<T extends IntentSubmitErrorCode> = T extends 'TIMEOUT'\n ? IntentWaitUntilIntentExecutedFailedErrorData\n : T extends 'CREATION_FAILED'\n ? IntentCreationFailedErrorData\n : T extends 'SUBMIT_TX_FAILED'\n ? IntentSubmitTxFailedErrorData\n : T extends 'POST_EXECUTION_FAILED'\n ? IntentErrorResponse\n : never;\n\nexport type IntentSubmitError<T extends IntentSubmitErrorCode> = {\n code: T;\n data: IntentSubmitErrorData<T>;\n};\n\nexport class SolverService {\n private readonly config: SolverServiceConfig;\n private readonly hubProvider: EvmHubProvider;\n\n public constructor(\n config: SolverConfigParams | undefined,\n hubProvider: EvmHubProvider,\n relayerApiEndpoint?: HttpUrl,\n ) {\n if (!config) {\n // default to mainnet config\n this.config = {\n ...getSolverConfig(SONIC_MAINNET_CHAIN_ID), // default to mainnet config\n partnerFee: undefined,\n relayerApiEndpoint: relayerApiEndpoint ?? DEFAULT_RELAYER_API_ENDPOINT,\n };\n } else if (isConfiguredSolverConfig(config)) {\n this.config = {\n ...config,\n partnerFee: config.partnerFee,\n relayerApiEndpoint: relayerApiEndpoint ?? DEFAULT_RELAYER_API_ENDPOINT,\n };\n } else {\n this.config = {\n ...getSolverConfig(hubProvider.chainConfig.chain.id), // default to mainnet config\n partnerFee: config.partnerFee,\n relayerApiEndpoint: relayerApiEndpoint ?? DEFAULT_RELAYER_API_ENDPOINT,\n };\n }\n this.hubProvider = hubProvider;\n }\n\n /**\n * Request a quote from the solver API\n * @param {IntentQuoteRequest} payload - The intent quote request\n * @returns {Promise<Result<IntentQuoteResponse, IntentErrorResponse>>} The intent quote response\n *\n * @example\n * const payload = {\n * \"token_src\":\"0x2170Ed0880ac9A755fd29B2688956BD959F933F8\", // BSC ETH token address\n * \"token_dst\":\"0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f\", // ARB WBTC token address\n * \"token_src_blockchain_id\":\"0x38.bsc\",\n * \"token_dst_blockchain_id\":\"0xa4b1.arbitrum\",\n * \"amount\":1000000000000000n,\n * \"quote_type\": \"exact_input\"\n * } satisfies IntentQuoteRequest\n *\n * const response = await solverService.getQuote(payload);\n *\n * if (response.ok) {\n * const quotedAmount = response.value.quoted_amount;\n * console.log('Quoted amount:', quotedAmount);\n * } else {\n * console.error('Quote failed:', response.error);\n * }\n */\n public async getQuote(payload: IntentQuoteRequest): Promise<Result<IntentQuoteResponse, IntentErrorResponse>> {\n return SolverApiService.getQuote(payload, this.config);\n }\n\n /**\n * Get the fee for a given input amount\n * @param {bigint} inputAmount - The amount of input tokens\n * @returns {Promise<bigint>} The fee amount (denominated in input tokens)\n *\n * @example\n * const fee: bigint = await solverService.getFee(1000000000000000n);\n * console.log('Fee:', fee);\n */\n public async getFee(inputAmount: bigint): Promise<bigint> {\n if (!this.config.partnerFee) {\n return 0n;\n }\n\n return calculateFeeAmount(inputAmount, this.config.partnerFee);\n }\n\n /**\n * Get the status of an intent from Solver API\n * @param {IntentStatusRequest} intentStatusRequest - The intent status request\n * @returns {Promise<Result<IntentStatusResponse, IntentErrorResponse>>} The intent status response\n *\n * @example\n * const intentStatusRequest = {\n * \"intentHash\": \"a0dd7652-b360-4123-ab2d-78cfbcd20c6b\"\n * } satisfies IntentStatusRequest\n *\n * const response = await solverService.getStatus(intentStatusRequest);\n *\n * if (response.ok) {\n * const { status, intent_hash } = response.value;\n * console.log('Status:', status);\n * console.log('Intent hash:', intent_hash);\n * } else {\n * // handle error\n * }\n */\n public async getStatus(\n intentStatusRequest: IntentStatusRequest,\n ): Promise<Result<IntentStatusResponse, IntentErrorResponse>> {\n return SolverApiService.getStatus(intentStatusRequest, this.config);\n }\n\n /**\n * Post execution of intent order transaction executed on hub chain to Solver API\n * @param {IntentExecutionRequest} intentExecutionRequest - The intent execution request\n * @returns {Promise<Result<IntentExecutionResponse, IntentErrorResponse>>} The intent execution response\n *\n * @example\n * const intentExecutionRequest = {\n * \"intent_tx_hash\": \"0xba3dce19347264db32ced212ff1a2036f20d9d2c7493d06af15027970be061af\",\n * } satisfies IntentExecutionRequest\n *\n * const response = await solverService.postExecution(intentExecutionRequest);\n *\n * if (response.ok) {\n * const { answer, intent_hash } = response.value;\n * console.log('Answer:', answer);\n * console.log('Intent hash:', intent_hash);\n * } else {\n * // handle error\n * }\n */\n public async postExecution(\n intentExecutionRequest: IntentExecutionRequest,\n ): Promise<Result<IntentExecutionResponse, IntentErrorResponse>> {\n return SolverApiService.postExecution(intentExecutionRequest, this.config);\n }\n\n /**\n * Creates an intent and submits it to the Solver API and Relayer API\n * @param {CreateIntentParams} payload - The intent to create\n * @param {ISpokeProvider} spokeProvider - The spoke provider\n * @param {number} timeout - The timeout in milliseconds for the transaction. Default is 60 seconds.\n * @returns {Promise<Result<[IntentExecutionResponse, Intent, PacketData], IntentSubmitError<IntentSubmitErrorCode>>>} The intent execution response, intent, and packet data\n *\n * @example\n * const payload = {\n * \"inputToken\": \"0x2170Ed0880ac9A755fd29B2688956BD959F933F8\", // BSC ETH token address\n * \"outputToken\": \"0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f\", // ARB WBTC token address\n * \"inputAmount\": 1000000000000000n, // The amount of input tokens\n * \"minOutputAmount\": 900000000000000n, // min amount you are expecting to receive\n * \"deadline\": 0n, // Optional timestamp after which intent expires (0 = no deadline)\n * \"allowPartialFill\": false, // Whether the intent can be partially filled\n * \"srcChain\": \"0x38.bsc\", // Chain ID where input tokens originate\n * \"dstChain\": \"0xa4b1.arbitrum\", // Chain ID where output tokens should be delivered\n * \"srcAddress\": \"0x..\", // Source address in bytes (original address on spoke chain)\n * \"dstAddress\": \"0x...\", // Destination address in bytes (original address on spoke chain)\n * \"solver\": \"0x..\", // Optional specific solver address (address(0) = any solver)\n * \"data\": \"0x..\", // Additional arbitrary data\n * } satisfies CreateIntentParams;\n *\n * const createAndSubmitIntentResult = await solverService.createAndSubmitIntent(payload, spokeProvider);\n *\n * if (createAndSubmitIntentResult.ok) {\n * const [intentExecutionResponse, intent, packetData] = createAndSubmitIntentResult.value;\n * console.log('Intent execution response:', intentExecutionResponse);\n * console.log('Intent:', intent);\n * console.log('Packet data:', packetData);\n * } else {\n * // handle error\n * }\n */\n public async createAndSubmitIntent<S extends SpokeProvider>(\n payload: CreateIntentParams,\n spokeProvider: S,\n fee?: PartnerFee,\n timeout = DEFAULT_RELAY_TX_TIMEOUT,\n ): Promise<Result<[IntentExecutionResponse, Intent, PacketData], IntentSubmitError<IntentSubmitErrorCode>>> {\n try {\n const createIntentResult = await this.createIntent(payload, spokeProvider, fee, false);\n\n if (!createIntentResult.ok) {\n return {\n ok: false,\n error: createIntentResult.error,\n };\n }\n\n const [spokeTxHash, intent] = createIntentResult.value;\n const intentRelayChainId = getIntentRelayChainId(payload.srcChain).toString();\n const submitPayload: IntentRelayRequest<'submit'> = {\n action: 'submit',\n params: {\n chain_id: intentRelayChainId,\n tx_hash: spokeTxHash,\n },\n };\n\n const submitResult = await submitTransaction(submitPayload, this.config.relayerApiEndpoint);\n\n if (!submitResult.success) {\n return {\n ok: false,\n error: {\n code: 'SUBMIT_TX_FAILED',\n data: {\n payload: submitPayload,\n apiUrl: this.config.relayerApiEndpoint,\n },\n },\n };\n }\n\n const packet = await waitUntilIntentExecuted({\n intentRelayChainId,\n spokeTxHash,\n timeout,\n apiUrl: this.config.relayerApiEndpoint,\n });\n\n if (!packet.ok) {\n return {\n ok: false,\n error: packet.error,\n };\n }\n\n const result = await this.postExecution({\n intent_tx_hash: packet.value.dst_tx_hash as `0x${string}`,\n });\n\n if (!result.ok) {\n return {\n ok: false,\n error: {\n code: 'POST_EXECUTION_FAILED',\n data: result.error,\n },\n };\n }\n\n return {\n ok: true,\n value: [result.value, intent, packet.value],\n };\n } catch (error) {\n return {\n ok: false,\n error: {\n code: 'UNKNOWN',\n data: {\n payload: payload,\n error: error,\n },\n },\n };\n }\n }\n\n /**\n * Check whether assetManager contract is allowed to move the given payload amount\n * @param {CreateIntentParams} params - The intent to create\n * @param {SpokeProvider} spokeProvider - The spoke provider\n * @return {Promise<Result<boolean>>} - valid = true, invalid = false\n *\n * @example\n * const payload = {\n * \"inputToken\": \"0x2170Ed0880ac9A755fd29B2688956BD959F933F8\", // BSC ETH token address\n * \"outputToken\": \"0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f\", // ARB WBTC token address\n * \"inputAmount\": 1000000000000000n, // The amount of input tokens\n * \"minOutputAmount\": 900000000000000n, // min amount you are expecting to receive\n * \"deadline\": 0n, // Optional timestamp after which intent expires (0 = no deadline)\n * \"allowPartialFill\": false, // Whether the intent can be partially filled\n * \"srcChain\": \"0x38.bsc\", // Chain ID where input tokens originate\n * \"dstChain\": \"0xa4b1.arbitrum\", // Chain ID where output tokens should be delivered\n * \"srcAddress\": \"0x..\", // Source address in bytes (original address on spoke chain)\n * \"dstAddress\": \"0x...\", // Destination address in bytes (original address on spoke chain)\n * \"solver\": \"0x..\", // Optional specific solver address (address(0) = any solver)\n * \"data\": \"0x..\", // Additional arbitrary data\n * } satisfies CreateIntentParams;\n *\n * const isAllowanceValid = await solverService.isAllowanceValid(payload, spokeProvider);\n *\n * if (!allowanceValid.ok) {\n * // Handle error\n * }\n *\n * if (!allowanceValid.value) {\n * // Need to approve\n * }\n */\n public async isAllowanceValid<S extends SpokeProvider>(\n params: CreateIntentParams,\n spokeProvider: S,\n ): Promise<Result<boolean>> {\n try {\n if (spokeProvider instanceof EvmSpokeProvider || spokeProvider instanceof SonicSpokeProvider) {\n const walletAddress = await spokeProvider.walletProvider.getWalletAddress();\n return Erc20Service.isAllowanceValid(\n params.inputToken as Address,\n params.inputAmount,\n walletAddress,\n spokeProvider instanceof EvmSpokeProvider\n ? spokeProvider.chainConfig.addresses.assetManager\n : spokeProvider.chainConfig.addresses.walletRouter,\n spokeProvider,\n );\n }\n\n return {\n ok: true,\n value: true,\n };\n } catch (error) {\n return {\n ok: false,\n error: error,\n };\n }\n }\n\n /**\n * Approve amount spending (currently required for EVM only)\n * @param token - ERC20 token address\n * @param amount - Amount to approve\n * @param spender - Spender address\n * @param spokeProvider - Spoke provider\n * @param raw - Whether to return the raw transaction hash instead of the transaction receipt\n * @returns {Promise<Result<TxReturnType<S, R>>>} - Returns the raw transaction payload or transaction hash\n *\n * @example\n * const approveResult = await approve(\n * '0x...', // ERC20 token address\n * 1000n, // Amount to approve (in token decimals)\n * '0x...', // Spender address (usually the asset manager contract: spokeProvider.chainConfig.addresses.assetManager)\n * spokeProvider,\n * true // if true, returns raw transaction hash instead of raw transaction\n * );\n *\n * if (!approveResult.ok) {\n * // Handle error\n * }\n *\n * const txReceipt = approveResult.value;\n */\n public async approve<S extends SpokeProvider, R extends boolean = false>(\n token: Address,\n amount: bigint,\n address: Address,\n spokeProvider: S,\n raw?: R,\n ): Promise<Result<TxReturnType<S, R>>> {\n try {\n if (spokeProvider instanceof EvmSpokeProvider || spokeProvider instanceof SonicSpokeProvider) {\n const result = await Erc20Service.approve(token, amount, address, spokeProvider, raw);\n\n return {\n ok: true,\n value: result satisfies TxReturnType<EvmSpokeProvider | SonicSpokeProvider, R> as TxReturnType<S, R>,\n };\n }\n\n return {\n ok: false,\n error: new Error('Approve only supported for EVM spoke chains'),\n };\n } catch (error) {\n return {\n ok: false,\n error: error,\n };\n }\n }\n\n /**\n * Creates an intent by handling token approval and intent creation\n * NOTE: This method does not submit the intent to the Solver API\n * @param {CreateIntentParams} params - The intent to create\n * @param {SpokeProvider} spokeProvider - The spoke provider\n * @param {boolean} raw - Whether to return the raw transaction\n * @param {PartnerFee} fee - The fee to apply to the intent\n * @returns {Promise<Result<[TxReturnType<S, R>, Intent & FeeAmount], IntentSubmitError<'CREATION_FAILED'>>>} The encoded contract call\n *\n * @example\n * const payload = {\n * \"inputToken\": \"0x2170Ed0880ac9A755fd29B2688956BD959F933F8\", // BSC ETH token address\n * \"outputToken\": \"0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f\", // ARB WBTC token address\n * \"inputAmount\": 1000000000000000n, // The amount of input tokens\n * \"minOutputAmount\": 900000000000000n, // min amount you are expecting to receive\n * \"deadline\": 0n, // Optional timestamp after which intent expires (0 = no deadline)\n * \"allowPartialFill\": false, // Whether the intent can be partially filled\n * \"srcChain\": \"0x38.bsc\", // Chain ID where input tokens originate\n * \"dstChain\": \"0xa4b1.arbitrum\", // Chain ID where output tokens should be delivered\n * \"srcAddress\": \"0x..\", // Source address in bytes (original address on spoke chain)\n * \"dstAddress\": \"0x...\", // Destination address in bytes (original address on spoke chain)\n * \"solver\": \"0x..\", // Optional specific solver address (address(0) = any solver)\n * \"data\": \"0x..\", // Additional arbitrary data\n * } satisfies CreateIntentParams;\n *\n * const createIntentResult = await solverService.createIntent(payload, spokeProvider);\n *\n * if (createIntentResult.ok) {\n * const [txResult, intent] = createIntentResult.value;\n * console.log('Intent:', intent);\n *\n */\n public async createIntent<S extends SpokeProvider, R extends boolean = false>(\n params: CreateIntentParams,\n spokeProvider: S,\n fee?: PartnerFee,\n raw?: R,\n ): Promise<Result<[TxReturnType<S, R>, Intent & FeeAmount], IntentSubmitError<'CREATION_FAILED'>>> {\n invariant(\n isValidOriginalAssetAddress(params.srcChain, params.inputToken),\n `Unsupported spoke chain token (params.srcChain): ${params.srcChain}, params.inputToken): ${params.inputToken}`,\n );\n invariant(\n isValidOriginalAssetAddress(params.dstChain, params.outputToken),\n `Unsupported spoke chain token (params.dstChain): ${params.dstChain}, params.outputToken): ${params.outputToken}`,\n );\n invariant(isValidSpokeChainId(params.srcChain), `Invalid spoke chain (params.srcChain): ${params.srcChain}`);\n invariant(isValidSpokeChainId(params.dstChain), `Invalid spoke chain (params.dstChain): ${params.dstChain}`);\n\n try {\n const walletAddressBytes = await spokeProvider.walletProvider.getWalletAddressBytes();\n // derive users hub wallet address\n const creatorHubWalletAddress =\n spokeProvider.chainConfig.chain.id === this.hubProvider.chainConfig.chain.id // on hub chain, use real user wallet address\n ? walletAddressBytes\n : await WalletAbstractionService.getUserHubWalletAddress(\n params.srcChain,\n walletAddressBytes,\n this.hubProvider,\n spokeProvider,\n );\n\n // construct the intent data\n const [data, intent, feeAmount] = EvmSolverService.constructCreateIntentData(\n params,\n creatorHubWalletAddress,\n this.config,\n fee,\n );\n\n const walletAddress = await spokeProvider.walletProvider.getWalletAddress();\n const txResult = await SpokeService.deposit(\n {\n from: walletAddress,\n to: creatorHubWalletAddress,\n token: params.inputToken,\n amount: params.inputAmount + feeAmount,\n data: data,\n } as GetSpokeDepositParamsType<S>,\n spokeProvider satisfies S,\n this.hubProvider,\n raw,\n );\n\n return {\n ok: true,\n value: [txResult as TxReturnType<S, R>, { ...intent, feeAmount }] as [TxReturnType<S, R>, Intent & FeeAmount],\n };\n } catch (error) {\n return {\n ok: false,\n error: {\n code: 'CREATION_FAILED',\n data: {\n payload: params,\n error: error,\n },\n },\n };\n }\n }\n\n /**\n * Cancels an intent\n * @param {Intent} intent - The intent to cancel\n * @param {ISpokeProvider} spokeProvider - The spoke provider\n * @param {boolean} raw - Whether to return the raw transaction\n * @returns {Promise<TxReturnType<T, R>>} The encoded contract call\n */\n public async cancelIntent<T extends SpokeProvider, R extends boolean = false>(\n intent: Intent,\n spokeProvider: T,\n raw?: R,\n ): Promise<TxReturnType<T, R>> {\n invariant(isValidIntentRelayChainId(intent.srcChain), `Invalid intent.srcChain: ${intent.srcChain}`);\n invariant(isValidIntentRelayChainId(intent.dstChain), `Invalid intent.dstChain: ${intent.dstChain}`);\n\n const walletAddressBytes = await spokeProvider.walletProvider.getWalletAddressBytes();\n // derive users hub wallet address\n const creatorHubWalletAddress =\n spokeProvider.chainConfig.chain.id === this.hubProvider.chainConfig.chain.id // on hub chain, use real user wallet address\n ? walletAddressBytes\n : await WalletAbstractionService.getUserHubWalletAddress(\n spokeProvider.chainConfig.chain.id,\n walletAddressBytes,\n this.hubProvider,\n spokeProvider,\n );\n\n const calls: EvmContractCall[] = [];\n const intentsContract = this.config.intentsContract;\n calls.push(EvmSolverService.encodeCancelIntent(intent, intentsContract));\n const data = encodeContractCalls(calls);\n return SpokeService.callWallet(creatorHubWalletAddress, data, spokeProvider, this.hubProvider, raw);\n }\n\n /**\n * Gets an intent from a transaction hash (on Hub chain)\n * @param {Hash} txHash - The transaction hash on Hub chain\n * @returns {Promise<Intent>} The intent\n */\n public getIntent(txHash: Hash): Promise<Intent> {\n return EvmSolverService.getIntent(txHash, this.config, this.hubProvider);\n }\n\n /**\n * Gets the keccak256 hash of an intent. Hash serves as the intent id on Hub chain.\n * @param {Intent} intent - The intent\n * @returns {Hex} The keccak256 hash of the intent\n */\n public getIntentHash(intent: Intent): Hex {\n return EvmSolverService.getIntentHash(intent);\n }\n}\n","import { DEFAULT_RELAYER_API_ENDPOINT } from '../constants.js';\nimport { MoneyMarketService, SolverService } from '../services/index.js';\nimport type { HttpUrl, SolverConfigParams, MoneyMarketConfigParams } from '../types.js';\nimport { EvmHubProvider, type EvmHubProviderConfig } from './Providers.js';\n\nexport type SodaxConfig = {\n solver?: SolverConfigParams; // optional Solver service enabling intent based swaps\n moneyMarket?: MoneyMarketConfigParams; // optional Money Market service enabling cross-chain lending and borrowing\n hubProviderConfig?: EvmHubProviderConfig; // hub provider for the hub chain (e.g. Sonic mainnet)\n relayerApiEndpoint?: HttpUrl; // relayer API endpoint used to relay intents/user actions to the hub and vice versa\n};\n\n/**\n * Sodax class is used to interact with the Sodax.\n *\n * @see https://docs.sodax.com\n */\nexport class Sodax {\n public readonly config?: SodaxConfig;\n\n public readonly solver: SolverService; // Solver service enabling intent based swaps\n public readonly moneyMarket: MoneyMarketService; // Money Market service enabling cross-chain lending and borrowing\n private readonly hubProvider: EvmHubProvider; // hub provider for the hub chain (e.g. Sonic mainnet)\n private readonly relayerApiEndpoint: HttpUrl; // relayer API endpoint used to relay intents/user actions to the hub and vice versa\n\n constructor(config?: SodaxConfig) {\n this.config = config;\n this.relayerApiEndpoint = config?.relayerApiEndpoint ?? DEFAULT_RELAYER_API_ENDPOINT;\n this.hubProvider = new EvmHubProvider(config?.hubProviderConfig); // default to Sonic mainnet\n\n this.solver =\n config && config.solver\n ? new SolverService(config.solver, this.hubProvider, this.relayerApiEndpoint)\n : new SolverService(undefined, this.hubProvider, this.relayerApiEndpoint); // default to mainnet config\n\n this.moneyMarket =\n config && config.moneyMarket\n ? new MoneyMarketService(config.moneyMarket, this.hubProvider, this.relayerApiEndpoint)\n : new MoneyMarketService(undefined, this.hubProvider, this.relayerApiEndpoint); // default to mainnet config\n }\n}\n","import type { PublicKey } from '@solana/web3.js';\nimport type { TransactionReceipt } from 'viem';\nimport type { CWSpokeProvider } from './entities/cosmos/CWSpokeProvider.js';\nimport type {\n EvmSpokeProvider,\n ISpokeProvider,\n IconSpokeProvider,\n SolanaSpokeProvider,\n SonicSpokeProvider,\n SpokeProvider,\n StellarSpokeProvider,\n SuiSpokeProvider,\n} from './entities/index.js';\nimport type { EVM_CHAIN_IDS, EVM_SPOKE_CHAIN_IDS, INTENT_RELAY_CHAIN_IDS, spokeChainConfig } from './index.js';\nimport type { EvmSpokeDepositParams, SonicSpokeDepositParams } from './services/index.js';\nimport type { CWSpokeDepositParams } from './services/spoke/CWSpokeService.js';\nimport type { IconSpokeDepositParams } from './services/spoke/IconSpokeService.js';\nimport type { SolanaSpokeDepositParams } from './services/spoke/SolanaSpokeService.js';\nimport type { StellarSpokeDepositParams } from './services/spoke/StellarSpokeService.js';\nimport type { SuiSpokeDepositParams } from './services/spoke/SuiSpokeService.js';\nimport type {\n ChainType,\n Token,\n HubChainId,\n SpokeChainId,\n Hex,\n Address,\n EvmRawTransaction,\n StellarRawTransaction,\n CWRawTransaction,\n CosmosNetworkEnv,\n} from '@sodax/types';\n\nexport type IntentRelayChainId = (typeof INTENT_RELAY_CHAIN_IDS)[keyof typeof INTENT_RELAY_CHAIN_IDS];\n\nexport type EvmChainId = (typeof EVM_CHAIN_IDS)[number];\nexport type EvmSpokeChainId = (typeof EVM_SPOKE_CHAIN_IDS)[number];\n\nexport type BaseSpokeChainInfo<T extends ChainType> = {\n name: string;\n id: GetSpokeChainIdType<T>;\n type: T;\n};\n\nexport type SpokeChainInfo<T extends ChainType> = BaseSpokeChainInfo<T>;\n\nexport type HubChainInfo<T extends ChainType> = {\n name: string;\n id: HubChainId;\n type: T;\n};\n\nexport type GetSpokeChainIdType<T extends ChainType> = T extends 'EVM' ? EvmSpokeChainId : SpokeChainId;\n\nexport type AssetInfo = {\n chainId: bigint;\n spokeAddress: `0x${string}`;\n};\n\nexport type HubAssetInfo = { asset: Address; decimal: number; vault: Address };\n\nexport type BaseSpokeChainConfig<T extends ChainType> = {\n chain: SpokeChainInfo<T>;\n addresses: { [key: string]: Address | string | Uint8Array };\n supportedTokens: Record<string, Token>;\n nativeToken: Address | string;\n bnUSD: Address | string;\n};\n\nexport type BaseHubChainConfig<T extends ChainType> = {\n chain: HubChainInfo<T>;\n addresses: { [key: string]: Address | string | Uint8Array };\n supportedTokens: Token[];\n nativeToken: Address | string;\n};\n\nexport type EvmHubChainConfig = BaseHubChainConfig<'EVM'> & {\n addresses: {\n assetManager: Address;\n hubWallet: Address;\n xTokenManager: Address;\n };\n\n nativeToken: Address;\n};\n\nexport type RelayerApiConfig = {\n relayerApiEndpoint: HttpUrl;\n};\n\nexport type MoneyMarketConfig = {\n uiPoolDataProvider: Address;\n lendingPool: Address;\n poolAddressesProvider: Address;\n bnUSD: Address;\n bnUSDVault: Address;\n};\n\nexport type MoneyMarketServiceConfig = Prettify<MoneyMarketConfig & PartnerFeeConfig & RelayerApiConfig>;\nexport type SolverServiceConfig = Prettify<SolverConfig & PartnerFeeConfig & RelayerApiConfig>;\n\nexport type MoneyMarketConfigParams =\n | Prettify<MoneyMarketConfig & Optional<PartnerFeeConfig, 'partnerFee'>>\n | Optional<PartnerFeeConfig, 'partnerFee'>;\n\nexport type Default = {\n default: boolean;\n};\n\nexport type EvmSpokeChainConfig = BaseSpokeChainConfig<'EVM'> & {\n addresses: {\n assetManager: Address;\n connection: Address;\n };\n nativeToken: Address | string;\n};\n\nexport type SonicSpokeChainConfig = BaseSpokeChainConfig<'EVM'> & {\n addresses: {\n walletRouter: Address;\n wrappedSonic: Address;\n };\n nativeToken: Address;\n};\n\nexport type SuiSpokeChainConfig = BaseSpokeChainConfig<'SUI'> & {\n addresses: {\n assetManager: string;\n connection: string;\n xTokenManager: string;\n rateLimit: string;\n testToken: string;\n };\n rpc_url: string;\n};\n\nexport type CosmosSpokeChainConfig = BaseSpokeChainConfig<'INJECTIVE'> & {\n rpcUrl: string;\n walletAddress: string;\n addresses: {\n assetManager: string;\n connection: string;\n xTokenManager: string;\n rateLimit: string;\n testToken: string;\n };\n nativeToken: string;\n prefix: string;\n gasPrice: string;\n isBrowser: boolean;\n networkId: string;\n network: CosmosNetworkEnv;\n};\n\nexport type StellarSpokeChainConfig = BaseSpokeChainConfig<'STELLAR'> & {\n addresses: {\n assetManager: string;\n connection: string;\n xTokenManager: string;\n rateLimit: string;\n testToken: string;\n };\n rpc_url: string;\n};\n\nexport type IconSpokeChainConfig = BaseSpokeChainConfig<'ICON'> & {\n addresses: {\n assetManager: IconAddress;\n connection: IconAddress;\n rateLimit: IconAddress;\n };\n nid: Hex;\n};\n\nexport type SolanaChainConfig = BaseSpokeChainConfig<'SOLANA'> & {\n addresses: {\n assetManager: string;\n connection: string;\n xTokenManager: string;\n rateLimit: string;\n testToken: string;\n };\n chain: SpokeChainInfo<'SOLANA'>;\n rpcUrl: string;\n wsUrl: string;\n walletAddress: string;\n nativeToken: string;\n gasPrice: string;\n};\n\nexport type HubChainConfig = EvmHubChainConfig;\n\nexport type SpokeChainConfig =\n | EvmSpokeChainConfig\n | SonicSpokeChainConfig\n | CosmosSpokeChainConfig\n | IconSpokeChainConfig\n | SuiSpokeChainConfig\n | StellarSpokeChainConfig\n | SolanaChainConfig;\n\nexport type EvmContractCall = {\n address: Address; // Target address of the call\n value: bigint; // Ether value to send (in wei as a string for precision)\n data: Hex; // Calldata for the call\n};\n\nexport type EvmTransferToHubParams = {\n token: Address;\n recipient: Address;\n amount: bigint;\n data: Hex;\n};\n\nexport type EvmTransferParams = {\n fromToken: Address;\n dstChainId: SpokeChainId;\n toToken: Hex;\n to: Hex;\n amount: bigint;\n data: Hex;\n};\n\nexport type TokenInfo = {\n decimals: number;\n depositFee: bigint;\n withdrawalFee: bigint;\n maxDeposit: bigint;\n isSupported: boolean;\n};\n\nexport type VaultReserves = {\n tokens: readonly Address[];\n balances: readonly bigint[];\n};\n\n/**\n * Fee type for transaction fees.\n * @property address - The address to which the fee is sent.\n * @property amount - Optional fixed fee amount in wei.\n */\nexport type PartnerFeeAmount = {\n address: Address;\n amount: bigint;\n};\n\n/**\n * Fee type for transaction fees.\n * @property address - The address to which the fee is sent.\n * @property percentage - Optional fee percentage in basis points (e.g., 100 = 1%). Maximum allowed is 100 (1%).\n */\nexport type PartnerFeePercentage = {\n address: Address;\n percentage: number;\n};\n\n/**\n * Fee type for transaction fees.\n * @property address - The address to which the fee is sent.\n * @property percentage - Optional fee percentage in basis points (e.g., 100 = 1%). Maximum allowed is 100 (1%).\n * @property amount - Optional fixed fee amount in wei. If both percentage and amount are provided, amount will be used.\n */\nexport type PartnerFee = PartnerFeeAmount | PartnerFeePercentage;\n\nexport type PartnerFeeConfig = {\n partnerFee: PartnerFee | undefined;\n};\n\nexport type FeeAmount = {\n feeAmount: bigint;\n};\n\nexport type EvmTxReturnType<T extends boolean> = T extends true ? TransactionReceipt : Hex;\n\nexport type IconAddress = `hx${string}` | `cx${string}`;\nexport type Result<T, E = Error | unknown> = { ok: true; value: T } | { ok: false; error: E };\nexport type HttpPrefixedUrl = `http${string}`;\n\nexport type SpokeDepositParams = EvmSpokeDepositParams | CWSpokeDepositParams | IconSpokeDepositParams;\n\nexport type GetSpokeDepositParamsType<T extends SpokeProvider> = T extends EvmSpokeProvider\n ? EvmSpokeDepositParams\n : T extends CWSpokeProvider\n ? CWSpokeDepositParams\n : T extends SuiSpokeProvider\n ? SuiSpokeDepositParams\n : T extends IconSpokeProvider\n ? IconSpokeDepositParams\n : T extends StellarSpokeProvider\n ? StellarSpokeDepositParams\n : T extends SolanaSpokeProvider\n ? SolanaSpokeDepositParams\n : T extends SonicSpokeProvider\n ? SonicSpokeDepositParams\n : never;\n\nexport type GetAddressType<T extends SpokeProvider> = T extends EvmSpokeProvider\n ? Address\n : T extends CWSpokeProvider\n ? string\n : T extends StellarSpokeProvider\n ? Hex\n : T extends IconSpokeProvider\n ? IconAddress\n : T extends SuiSpokeProvider\n ? Hex\n : T extends SolanaSpokeProvider\n ? Hex\n : T extends SonicSpokeProvider\n ? Address\n : never;\n\nexport type HttpUrl = `http://${string}` | `https://${string}`;\n\nexport type SolverConfig = {\n intentsContract: Address; // Intents Contract (Hub)\n solverApiEndpoint: HttpUrl;\n};\n\nexport type SolverConfigParams =\n | Prettify<SolverConfig & Optional<PartnerFeeConfig, 'partnerFee'>>\n | Optional<PartnerFeeConfig, 'partnerFee'>;\n\nexport type QuoteType = 'exact_input' | 'exact_output';\n\nexport type IntentQuoteRequest = {\n token_src: string; // Token address on the source chain\n token_src_blockchain_id: SpokeChainId; // Source chain id\n token_dst: string; // Token address on the destination chain\n token_dst_blockchain_id: SpokeChainId; // Destination chain id\n amount: bigint; // Amount to swap\n quote_type: QuoteType; // Quote type\n};\n\nexport type IntentQuoteResponseRaw = {\n quoted_amount: string;\n};\n\nexport type IntentQuoteResponse = {\n quoted_amount: bigint;\n};\n\nexport type IntentErrorResponse = {\n detail: {\n code: IntentErrorCode;\n message: string;\n };\n};\n\nexport type IntentExecutionRequest = {\n intent_tx_hash: Hex; // Intent hash of the execution on Sonic (hub chain)\n};\n\nexport type IntentExecutionResponse = {\n answer: 'OK';\n intent_hash: Hex; // Here, the solver returns the intent_hash, might be helpful for front-end\n};\n\nexport type IntentStatusRequest = {\n intent_tx_hash: Hex;\n};\n\nexport type IntentStatusResponse = {\n status: IntentStatusCode;\n fill_tx_hash?: string; // defined only if status is 3\n};\n\nexport enum IntentStatusCode {\n NOT_FOUND = -1,\n NOT_STARTED_YET = 1, // It's in the task pool, but not started yet\n STARTED_NOT_FINISHED = 2,\n SOLVED = 3,\n FAILED = 4,\n}\n\nexport enum IntentErrorCode {\n NO_PATH_FOUND = -4, // No path to swap Token X to Token Y\n NO_PRIVATE_LIQUIDITY = -5, // Path found, but we have no private liquidity on the dest chain\n NOT_ENOUGH_PRIVATE_LIQUIDITY = -8, // Path found, but not enough private liquidity on the dst chain\n NO_EXECUTION_MODULE_FOUND = -7, // Path found, private liquidity, but execution modules unavailable\n QUOTE_NOT_FOUND = -8, // When executing, given quote_uuid does not exist\n QUOTE_NOT_MATCH = -9, // When executing, given quote_uuid does not match the quote\n INTENT_DATA_NOT_MATCH_QUOTE = -10,\n NO_GAS_HANDLER_FOR_BLOCKCHAIN = -11,\n INTENT_NOT_FOUND = -12,\n QUOTE_EXPIRED = -13,\n MAX_INPUT_AMOUNT = -14,\n MAX_DIFF_OUTPUT = -15,\n STOPPED = -16,\n NO_ORACLE_MODULE_FOUND = -17,\n NEGATIVE_INPUT_AMOUNT = -18,\n INTENT_ALREADY_IN_ORDERBOOK = -19,\n CREATE_INTENT_ORDER_FAILED = -998,\n UNKNOWN = -999,\n}\n\ntype Base64String = string;\n\nexport type SolanaRawTransaction = {\n from: PublicKey;\n to: PublicKey;\n value: bigint;\n data: Base64String;\n};\n\nexport type IconRawTransaction = {\n [key: string]: string | object;\n};\n\nexport type IcxRawTransaction = {\n to: string;\n from: string;\n value: Hex;\n stepLimit: Hex;\n nid: Hex;\n nonce: Hex;\n version: Hex;\n timestamp: Hex;\n data: Hex;\n};\n\nexport type SuiRawTransaction = {\n from: Hex;\n to: string;\n value: bigint;\n data: Base64String;\n};\n\nexport type EvmReturnType<Raw extends boolean> = Raw extends true ? EvmRawTransaction : Hex;\nexport type SolanaReturnType<Raw extends boolean> = Raw extends true ? SolanaRawTransaction : Hex;\nexport type StellarReturnType<Raw extends boolean> = Raw extends true ? StellarRawTransaction : Hex;\nexport type IconReturnType<Raw extends boolean> = Raw extends true ? IconRawTransaction : Hex;\nexport type SuiReturnType<Raw extends boolean> = Raw extends true ? SuiRawTransaction : Hex;\nexport type CWReturnType<Raw extends boolean> = Raw extends true ? CWRawTransaction : Hex;\nexport type TxReturnType<T extends SpokeProvider, Raw extends boolean> = T['chainConfig']['chain']['type'] extends 'EVM'\n ? EvmReturnType<Raw>\n : T['chainConfig']['chain']['type'] extends 'SOLANA'\n ? SolanaReturnType<Raw>\n : T['chainConfig']['chain']['type'] extends 'STELLAR'\n ? StellarReturnType<Raw>\n : T['chainConfig']['chain']['type'] extends 'ICON'\n ? IconReturnType<Raw>\n : T['chainConfig']['chain']['type'] extends 'SUI'\n ? SuiReturnType<Raw>\n : T['chainConfig']['chain']['type'] extends 'INJECTIVE'\n ? CWReturnType<Raw>\n : never; // TODO extend for each chain implementation\nexport type PromiseEvmTxReturnType<Raw extends boolean> = Promise<TxReturnType<EvmSpokeProvider, Raw>>;\nexport type PromiseSolanaTxReturnType<Raw extends boolean> = Promise<TxReturnType<SolanaSpokeProvider, Raw>>;\nexport type PromiseStellarTxReturnType<Raw extends boolean> = Promise<TxReturnType<StellarSpokeProvider, Raw>>;\nexport type PromiseIconTxReturnType<Raw extends boolean> = Promise<TxReturnType<IconSpokeProvider, Raw>>;\nexport type PromiseSuiTxReturnType<Raw extends boolean> = Promise<TxReturnType<SuiSpokeProvider, Raw>>;\nexport type PromiseCWTxReturnType<Raw extends boolean> = Promise<TxReturnType<CWSpokeProvider, Raw>>;\n\nexport type RawTxReturnType =\n | EvmRawTransaction\n | SolanaRawTransaction\n | CWRawTransaction\n | IconRawTransaction\n | SuiRawTransaction; // TODO extend for other chains (Icon, Cosmos, Sui)\nexport type GetRawTxReturnType<T extends ChainType> = T extends 'EVM' ? PromiseEvmTxReturnType<boolean> : never;\n\nexport type PromiseTxReturnType<\n T extends ISpokeProvider,\n Raw extends boolean,\n> = T['chainConfig']['chain']['type'] extends 'EVM'\n ? PromiseEvmTxReturnType<Raw>\n : T['chainConfig']['chain']['type'] extends 'SOLANA'\n ? PromiseSolanaTxReturnType<Raw>\n : T['chainConfig']['chain']['type'] extends 'STELLAR'\n ? PromiseStellarTxReturnType<Raw>\n : T['chainConfig']['chain']['type'] extends 'ICON'\n ? PromiseIconTxReturnType<Raw>\n : T['chainConfig']['chain']['type'] extends 'SUI'\n ? PromiseSuiTxReturnType<Raw>\n : T['chainConfig']['chain']['type'] extends 'INJECTIVE'\n ? PromiseCWTxReturnType<Raw>\n : never;\n\nexport type VaultType = {\n address: Address; // vault address\n reserves: Address[]; // hub asset addresses contained in the vault\n};\n\nexport type Prettify<T> = {\n [K in keyof T]: T[K];\n} & {};\n\nexport type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>;\ntype ExtractKeys<T> = T extends unknown ? keyof T : never;\n\nexport type SpokeTokenSymbols = ExtractKeys<(typeof spokeChainConfig)[SpokeChainId]['supportedTokens']>;\n"]}