@shapeshiftoss/swapper 17.6.9 → 17.6.11

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 (324) hide show
  1. package/LICENSE.md +21 -0
  2. package/dist/cjs/.tsbuildinfo +1 -1
  3. package/dist/cjs/constants.js +72 -43
  4. package/dist/cjs/cowswap-utils/constants.js +3 -0
  5. package/dist/cjs/cowswap-utils/index.js +6 -0
  6. package/dist/cjs/index.d.ts +1 -0
  7. package/dist/cjs/index.js +1 -0
  8. package/dist/cjs/swappers/AcrossSwapper/AcrossSwapper.d.ts +2 -0
  9. package/dist/cjs/swappers/AcrossSwapper/AcrossSwapper.js +8 -0
  10. package/dist/cjs/swappers/AcrossSwapper/constant.d.ts +9 -0
  11. package/dist/cjs/swappers/AcrossSwapper/constant.js +50 -0
  12. package/dist/cjs/swappers/AcrossSwapper/endpoints.d.ts +2 -0
  13. package/dist/cjs/swappers/AcrossSwapper/endpoints.js +113 -0
  14. package/dist/cjs/swappers/AcrossSwapper/getTradeQuote/getTradeQuote.d.ts +3 -0
  15. package/dist/cjs/swappers/AcrossSwapper/getTradeQuote/getTradeQuote.js +31 -0
  16. package/dist/cjs/swappers/AcrossSwapper/getTradeRate/getTradeRate.d.ts +3 -0
  17. package/dist/cjs/swappers/AcrossSwapper/getTradeRate/getTradeRate.js +19 -0
  18. package/dist/cjs/swappers/AcrossSwapper/index.d.ts +1 -0
  19. package/dist/cjs/swappers/AcrossSwapper/index.js +5 -0
  20. package/dist/cjs/swappers/AcrossSwapper/utils/acrossService.d.ts +5 -0
  21. package/dist/cjs/swappers/AcrossSwapper/utils/acrossService.js +17 -0
  22. package/dist/cjs/swappers/AcrossSwapper/utils/fetchAcrossTrade.d.ts +19 -0
  23. package/dist/cjs/swappers/AcrossSwapper/utils/fetchAcrossTrade.js +27 -0
  24. package/dist/cjs/swappers/AcrossSwapper/utils/getTrade.d.ts +11 -0
  25. package/dist/cjs/swappers/AcrossSwapper/utils/getTrade.js +349 -0
  26. package/dist/cjs/swappers/AcrossSwapper/utils/types.d.ts +177 -0
  27. package/dist/cjs/swappers/AcrossSwapper/utils/types.js +17 -0
  28. package/dist/cjs/swappers/AvnuSwapper/endpoints.js +42 -14
  29. package/dist/cjs/swappers/AvnuSwapper/swapperApi/getTradeQuote.js +19 -5
  30. package/dist/cjs/swappers/AvnuSwapper/swapperApi/getTradeRate.js +17 -4
  31. package/dist/cjs/swappers/BebopSwapper/BebopSwapper.js +2 -0
  32. package/dist/cjs/swappers/BebopSwapper/endpoints.js +35 -2
  33. package/dist/cjs/swappers/BebopSwapper/executeSolanaMessage.d.ts +2 -0
  34. package/dist/cjs/swappers/BebopSwapper/executeSolanaMessage.js +47 -0
  35. package/dist/cjs/swappers/BebopSwapper/getBebopSolanaTradeQuote/getBebopSolanaTradeQuote.d.ts +4 -0
  36. package/dist/cjs/swappers/BebopSwapper/getBebopSolanaTradeQuote/getBebopSolanaTradeQuote.js +91 -0
  37. package/dist/cjs/swappers/BebopSwapper/getBebopSolanaTradeRate/getBebopSolanaTradeRate.d.ts +4 -0
  38. package/dist/cjs/swappers/BebopSwapper/getBebopSolanaTradeRate/getBebopSolanaTradeRate.js +88 -0
  39. package/dist/cjs/swappers/BebopSwapper/getBebopTradeQuote/getBebopTradeQuote.js +10 -0
  40. package/dist/cjs/swappers/BebopSwapper/getBebopTradeRate/getBebopTradeRate.js +10 -0
  41. package/dist/cjs/swappers/BebopSwapper/types.d.ts +49 -1
  42. package/dist/cjs/swappers/BebopSwapper/types.js +9 -2
  43. package/dist/cjs/swappers/BebopSwapper/utils/fetchFromBebop.d.ts +19 -1
  44. package/dist/cjs/swappers/BebopSwapper/utils/fetchFromBebop.js +86 -1
  45. package/dist/cjs/swappers/BebopSwapper/utils/helpers/helpers.d.ts +14 -2
  46. package/dist/cjs/swappers/BebopSwapper/utils/helpers/helpers.js +47 -1
  47. package/dist/cjs/swappers/ButterSwap/ButterSwap.js +1 -0
  48. package/dist/cjs/swappers/ButterSwap/endpoints.js +56 -0
  49. package/dist/cjs/swappers/ButterSwap/swapperApi/checkTradeStatus.js +19 -0
  50. package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeQuote.js +44 -15
  51. package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeQuote.test.js +1 -0
  52. package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeRate.js +33 -16
  53. package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeRate.test.js +2 -0
  54. package/dist/cjs/swappers/ButterSwap/types.d.ts +1 -0
  55. package/dist/cjs/swappers/ButterSwap/utils/helpers.js +1 -0
  56. package/dist/cjs/swappers/ButterSwap/xhr.d.ts +2 -2
  57. package/dist/cjs/swappers/ButterSwap/xhr.js +7 -2
  58. package/dist/cjs/swappers/CetusSwapper/endpoints.js +3 -8
  59. package/dist/cjs/swappers/CetusSwapper/swapperApi/getTradeQuote.js +11 -1
  60. package/dist/cjs/swappers/CetusSwapper/swapperApi/getTradeRate.js +11 -1
  61. package/dist/cjs/swappers/CetusSwapper/utils/helpers.d.ts +1 -1
  62. package/dist/cjs/swappers/CetusSwapper/utils/helpers.js +1 -1
  63. package/dist/cjs/swappers/ChainflipSwapper/constants.js +7 -3
  64. package/dist/cjs/swappers/ChainflipSwapper/utils/getQuoteOrRate.js +28 -5
  65. package/dist/cjs/swappers/ChainflipSwapper/utils/helpers.js +8 -2
  66. package/dist/cjs/swappers/CowSwapper/CowSwapper.js +1 -1
  67. package/dist/cjs/swappers/CowSwapper/getCowSwapTradeQuote/getCowSwapTradeQuote.js +11 -1
  68. package/dist/cjs/swappers/CowSwapper/getCowSwapTradeQuote/getCowSwapTradeQuote.test.js +5 -5
  69. package/dist/cjs/swappers/CowSwapper/getCowSwapTradeRate/getCowSwapTradeRate.js +10 -1
  70. package/dist/cjs/swappers/CowSwapper/utils/helpers/helpers.js +8 -2
  71. package/dist/cjs/swappers/DebridgeSwapper/DebridgeSwapper.d.ts +2 -0
  72. package/dist/cjs/swappers/DebridgeSwapper/DebridgeSwapper.js +7 -0
  73. package/dist/cjs/swappers/DebridgeSwapper/constant.d.ts +5 -0
  74. package/dist/cjs/swappers/DebridgeSwapper/constant.js +36 -0
  75. package/dist/cjs/swappers/DebridgeSwapper/endpoints.d.ts +2 -0
  76. package/dist/cjs/swappers/DebridgeSwapper/endpoints.js +217 -0
  77. package/dist/cjs/swappers/DebridgeSwapper/getTradeQuote/getTradeQuote.d.ts +3 -0
  78. package/dist/cjs/swappers/DebridgeSwapper/getTradeQuote/getTradeQuote.js +31 -0
  79. package/dist/cjs/swappers/DebridgeSwapper/getTradeRate/getTradeRate.d.ts +3 -0
  80. package/dist/cjs/swappers/DebridgeSwapper/getTradeRate/getTradeRate.js +19 -0
  81. package/dist/cjs/swappers/DebridgeSwapper/index.d.ts +1 -0
  82. package/dist/cjs/swappers/DebridgeSwapper/index.js +5 -0
  83. package/dist/cjs/swappers/DebridgeSwapper/utils/debridgeService.d.ts +5 -0
  84. package/dist/cjs/swappers/DebridgeSwapper/utils/debridgeService.js +17 -0
  85. package/dist/cjs/swappers/DebridgeSwapper/utils/fetchDebridgeSingleChainTrade.d.ts +16 -0
  86. package/dist/cjs/swappers/DebridgeSwapper/utils/fetchDebridgeSingleChainTrade.js +23 -0
  87. package/dist/cjs/swappers/DebridgeSwapper/utils/fetchDebridgeTrade.d.ts +20 -0
  88. package/dist/cjs/swappers/DebridgeSwapper/utils/fetchDebridgeTrade.js +29 -0
  89. package/dist/cjs/swappers/DebridgeSwapper/utils/getTrade.d.ts +11 -0
  90. package/dist/cjs/swappers/DebridgeSwapper/utils/getTrade.js +369 -0
  91. package/dist/cjs/swappers/DebridgeSwapper/utils/types.d.ts +155 -0
  92. package/dist/cjs/swappers/DebridgeSwapper/utils/types.js +9 -0
  93. package/dist/cjs/swappers/JupiterSwapper/swapperApi/getTradeQuote.js +32 -0
  94. package/dist/cjs/swappers/JupiterSwapper/swapperApi/getTradeRate.js +9 -0
  95. package/dist/cjs/swappers/MayachainSwapper/utils/poolAssetHelpers/poolAssetHelpers.js +1 -1
  96. package/dist/cjs/swappers/NearIntentsSwapper/NearIntentsSwapper.js +1 -0
  97. package/dist/cjs/swappers/NearIntentsSwapper/endpoints.js +31 -0
  98. package/dist/cjs/swappers/NearIntentsSwapper/swapperApi/getTradeQuote.js +48 -1
  99. package/dist/cjs/swappers/NearIntentsSwapper/swapperApi/getTradeRate.js +73 -1
  100. package/dist/cjs/swappers/NearIntentsSwapper/types.d.ts +1 -1
  101. package/dist/cjs/swappers/NearIntentsSwapper/types.js +6 -0
  102. package/dist/cjs/swappers/NearIntentsSwapper/utils/helpers/helpers.js +23 -4
  103. package/dist/cjs/swappers/PortalsSwapper/getPortalsTradeQuote/getPortalsTradeQuote.js +10 -0
  104. package/dist/cjs/swappers/PortalsSwapper/getPortalsTradeRate/getPortalsTradeRate.js +8 -3
  105. package/dist/cjs/swappers/RelaySwapper/constant.js +27 -1
  106. package/dist/cjs/swappers/RelaySwapper/utils/getRelayDefaultUserAddress.d.ts +1 -1
  107. package/dist/cjs/swappers/RelaySwapper/utils/getTrade.js +57 -7
  108. package/dist/cjs/swappers/RelaySwapper/utils/relayTokenToAssetId.js +110 -0
  109. package/dist/cjs/swappers/RelaySwapper/utils/types.d.ts +15 -0
  110. package/dist/cjs/swappers/StonfiSwapper/StonfiSwapper.d.ts +2 -0
  111. package/dist/cjs/swappers/StonfiSwapper/StonfiSwapper.js +8 -0
  112. package/dist/cjs/swappers/StonfiSwapper/endpoints.d.ts +2 -0
  113. package/dist/cjs/swappers/StonfiSwapper/endpoints.js +227 -0
  114. package/dist/cjs/swappers/StonfiSwapper/index.d.ts +4 -0
  115. package/dist/cjs/swappers/StonfiSwapper/index.js +25 -0
  116. package/dist/cjs/swappers/StonfiSwapper/swapperApi/getTradeQuote.d.ts +2 -0
  117. package/dist/cjs/swappers/StonfiSwapper/swapperApi/getTradeQuote.js +129 -0
  118. package/dist/cjs/swappers/StonfiSwapper/swapperApi/getTradeRate.d.ts +2 -0
  119. package/dist/cjs/swappers/StonfiSwapper/swapperApi/getTradeRate.js +115 -0
  120. package/dist/cjs/swappers/StonfiSwapper/types.d.ts +60 -0
  121. package/dist/cjs/swappers/StonfiSwapper/types.js +5 -0
  122. package/dist/cjs/swappers/StonfiSwapper/utils/constants.d.ts +5 -0
  123. package/dist/cjs/swappers/StonfiSwapper/utils/constants.js +8 -0
  124. package/dist/cjs/swappers/StonfiSwapper/utils/helpers.d.ts +11 -0
  125. package/dist/cjs/swappers/StonfiSwapper/utils/helpers.js +135 -0
  126. package/dist/cjs/swappers/StonfiSwapper/utils/omnistonManager.d.ts +5 -0
  127. package/dist/cjs/swappers/StonfiSwapper/utils/omnistonManager.js +20 -0
  128. package/dist/cjs/swappers/SunioSwapper/endpoints.js +1 -1
  129. package/dist/cjs/swappers/SunioSwapper/utils/getQuoteOrRate.js +14 -3
  130. package/dist/cjs/swappers/ThorchainSwapper/ThorchainSwapper.js +3 -0
  131. package/dist/cjs/swappers/ThorchainSwapper/endpoints.js +2 -0
  132. package/dist/cjs/swappers/ThorchainSwapper/generated/generatedTradableAssetMap.json +1 -0
  133. package/dist/cjs/swappers/ThorchainSwapper/utils/poolAssetHelpers/poolAssetHelpers.d.ts +1 -1
  134. package/dist/cjs/swappers/ThorchainSwapper/utils/poolAssetHelpers/poolAssetHelpers.js +2 -1
  135. package/dist/cjs/swappers/ThorchainSwapper/utils/poolAssetHelpers/poolAssetHelpers.test.js +10 -0
  136. package/dist/cjs/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.js +9 -0
  137. package/dist/cjs/swappers/ZrxSwapper/getZrxTradeRate/getZrxTradeRate.js +9 -0
  138. package/dist/cjs/swappers/ZrxSwapper/utils/helpers/helpers.d.ts +1 -1
  139. package/dist/cjs/swappers/utils/affiliateFee.d.ts +17 -0
  140. package/dist/cjs/swappers/utils/affiliateFee.js +43 -0
  141. package/dist/cjs/swappers/utils/filterBuyAssetsBySellAssetId/filterBuyAssetsBySellAssetId.js +2 -5
  142. package/dist/cjs/swappers/utils/helpers/helpers.js +3 -0
  143. package/dist/cjs/thorchain-utils/getCallDataFromQuote.d.ts +1 -1
  144. package/dist/cjs/thorchain-utils/getL1RateOrQuote.js +87 -9
  145. package/dist/cjs/thorchain-utils/getQuote.js +8 -2
  146. package/dist/cjs/thorchain-utils/index.d.ts +2 -1
  147. package/dist/cjs/thorchain-utils/index.js +2 -1
  148. package/dist/cjs/thorchain-utils/solana/constants.d.ts +1 -0
  149. package/dist/cjs/thorchain-utils/solana/constants.js +6 -0
  150. package/dist/cjs/thorchain-utils/solana/getSolanaTransactionFees.d.ts +2 -0
  151. package/dist/cjs/thorchain-utils/solana/getSolanaTransactionFees.js +41 -0
  152. package/dist/cjs/thorchain-utils/solana/getThorTxData.d.ts +12 -0
  153. package/dist/cjs/thorchain-utils/solana/getThorTxData.js +14 -0
  154. package/dist/cjs/thorchain-utils/solana/getUnsignedSolanaTransaction.d.ts +3 -0
  155. package/dist/cjs/thorchain-utils/solana/getUnsignedSolanaTransaction.js +64 -0
  156. package/dist/cjs/thorchain-utils/solana/index.d.ts +3 -0
  157. package/dist/cjs/thorchain-utils/solana/index.js +19 -0
  158. package/dist/cjs/tron-utils/getUnsignedTronTransaction.js +22 -2
  159. package/dist/cjs/types.d.ts +118 -8
  160. package/dist/cjs/types.js +3 -0
  161. package/dist/cjs/utils.d.ts +4 -3
  162. package/dist/cjs/utils.js +35 -7
  163. package/dist/esm/.tsbuildinfo +1 -1
  164. package/dist/esm/constants.js +42 -13
  165. package/dist/esm/cowswap-utils/constants.js +3 -0
  166. package/dist/esm/cowswap-utils/index.js +6 -0
  167. package/dist/esm/index.d.ts +1 -0
  168. package/dist/esm/index.js +1 -0
  169. package/dist/esm/swappers/AcrossSwapper/AcrossSwapper.d.ts +2 -0
  170. package/dist/esm/swappers/AcrossSwapper/AcrossSwapper.js +5 -0
  171. package/dist/esm/swappers/AcrossSwapper/constant.d.ts +9 -0
  172. package/dist/esm/swappers/AcrossSwapper/constant.js +44 -0
  173. package/dist/esm/swappers/AcrossSwapper/endpoints.d.ts +2 -0
  174. package/dist/esm/swappers/AcrossSwapper/endpoints.js +107 -0
  175. package/dist/esm/swappers/AcrossSwapper/getTradeQuote/getTradeQuote.d.ts +3 -0
  176. package/dist/esm/swappers/AcrossSwapper/getTradeQuote/getTradeQuote.js +27 -0
  177. package/dist/esm/swappers/AcrossSwapper/getTradeRate/getTradeRate.d.ts +3 -0
  178. package/dist/esm/swappers/AcrossSwapper/getTradeRate/getTradeRate.js +15 -0
  179. package/dist/esm/swappers/AcrossSwapper/index.d.ts +1 -0
  180. package/dist/esm/swappers/AcrossSwapper/index.js +1 -0
  181. package/dist/esm/swappers/AcrossSwapper/utils/acrossService.d.ts +5 -0
  182. package/dist/esm/swappers/AcrossSwapper/utils/acrossService.js +11 -0
  183. package/dist/esm/swappers/AcrossSwapper/utils/fetchAcrossTrade.d.ts +19 -0
  184. package/dist/esm/swappers/AcrossSwapper/utils/fetchAcrossTrade.js +23 -0
  185. package/dist/esm/swappers/AcrossSwapper/utils/getTrade.d.ts +11 -0
  186. package/dist/esm/swappers/AcrossSwapper/utils/getTrade.js +342 -0
  187. package/dist/esm/swappers/AcrossSwapper/utils/types.d.ts +177 -0
  188. package/dist/esm/swappers/AcrossSwapper/utils/types.js +13 -0
  189. package/dist/esm/swappers/AvnuSwapper/endpoints.js +43 -15
  190. package/dist/esm/swappers/AvnuSwapper/swapperApi/getTradeQuote.js +19 -5
  191. package/dist/esm/swappers/AvnuSwapper/swapperApi/getTradeRate.js +17 -4
  192. package/dist/esm/swappers/BebopSwapper/BebopSwapper.js +2 -0
  193. package/dist/esm/swappers/BebopSwapper/endpoints.js +36 -3
  194. package/dist/esm/swappers/BebopSwapper/executeSolanaMessage.d.ts +2 -0
  195. package/dist/esm/swappers/BebopSwapper/executeSolanaMessage.js +40 -0
  196. package/dist/esm/swappers/BebopSwapper/getBebopSolanaTradeQuote/getBebopSolanaTradeQuote.d.ts +4 -0
  197. package/dist/esm/swappers/BebopSwapper/getBebopSolanaTradeQuote/getBebopSolanaTradeQuote.js +87 -0
  198. package/dist/esm/swappers/BebopSwapper/getBebopSolanaTradeRate/getBebopSolanaTradeRate.d.ts +4 -0
  199. package/dist/esm/swappers/BebopSwapper/getBebopSolanaTradeRate/getBebopSolanaTradeRate.js +84 -0
  200. package/dist/esm/swappers/BebopSwapper/getBebopTradeQuote/getBebopTradeQuote.js +10 -0
  201. package/dist/esm/swappers/BebopSwapper/getBebopTradeRate/getBebopTradeRate.js +10 -0
  202. package/dist/esm/swappers/BebopSwapper/types.d.ts +49 -1
  203. package/dist/esm/swappers/BebopSwapper/types.js +8 -1
  204. package/dist/esm/swappers/BebopSwapper/utils/fetchFromBebop.d.ts +19 -1
  205. package/dist/esm/swappers/BebopSwapper/utils/fetchFromBebop.js +85 -2
  206. package/dist/esm/swappers/BebopSwapper/utils/helpers/helpers.d.ts +14 -2
  207. package/dist/esm/swappers/BebopSwapper/utils/helpers/helpers.js +44 -1
  208. package/dist/esm/swappers/ButterSwap/ButterSwap.js +2 -1
  209. package/dist/esm/swappers/ButterSwap/endpoints.js +56 -0
  210. package/dist/esm/swappers/ButterSwap/swapperApi/checkTradeStatus.js +20 -1
  211. package/dist/esm/swappers/ButterSwap/swapperApi/getTradeQuote.js +46 -17
  212. package/dist/esm/swappers/ButterSwap/swapperApi/getTradeQuote.test.js +1 -0
  213. package/dist/esm/swappers/ButterSwap/swapperApi/getTradeRate.js +35 -18
  214. package/dist/esm/swappers/ButterSwap/swapperApi/getTradeRate.test.js +2 -0
  215. package/dist/esm/swappers/ButterSwap/types.d.ts +1 -0
  216. package/dist/esm/swappers/ButterSwap/utils/helpers.js +1 -0
  217. package/dist/esm/swappers/ButterSwap/xhr.d.ts +2 -2
  218. package/dist/esm/swappers/ButterSwap/xhr.js +8 -3
  219. package/dist/esm/swappers/CetusSwapper/endpoints.js +3 -8
  220. package/dist/esm/swappers/CetusSwapper/swapperApi/getTradeQuote.js +11 -1
  221. package/dist/esm/swappers/CetusSwapper/swapperApi/getTradeRate.js +11 -1
  222. package/dist/esm/swappers/CetusSwapper/utils/helpers.d.ts +1 -1
  223. package/dist/esm/swappers/CetusSwapper/utils/helpers.js +1 -1
  224. package/dist/esm/swappers/ChainflipSwapper/constants.js +8 -4
  225. package/dist/esm/swappers/ChainflipSwapper/utils/getQuoteOrRate.js +29 -6
  226. package/dist/esm/swappers/ChainflipSwapper/utils/helpers.js +9 -3
  227. package/dist/esm/swappers/CowSwapper/CowSwapper.js +1 -1
  228. package/dist/esm/swappers/CowSwapper/getCowSwapTradeQuote/getCowSwapTradeQuote.js +11 -1
  229. package/dist/esm/swappers/CowSwapper/getCowSwapTradeQuote/getCowSwapTradeQuote.test.js +5 -5
  230. package/dist/esm/swappers/CowSwapper/getCowSwapTradeRate/getCowSwapTradeRate.js +10 -1
  231. package/dist/esm/swappers/CowSwapper/utils/helpers/helpers.js +9 -3
  232. package/dist/esm/swappers/DebridgeSwapper/DebridgeSwapper.d.ts +2 -0
  233. package/dist/esm/swappers/DebridgeSwapper/DebridgeSwapper.js +4 -0
  234. package/dist/esm/swappers/DebridgeSwapper/constant.d.ts +5 -0
  235. package/dist/esm/swappers/DebridgeSwapper/constant.js +30 -0
  236. package/dist/esm/swappers/DebridgeSwapper/endpoints.d.ts +2 -0
  237. package/dist/esm/swappers/DebridgeSwapper/endpoints.js +211 -0
  238. package/dist/esm/swappers/DebridgeSwapper/getTradeQuote/getTradeQuote.d.ts +3 -0
  239. package/dist/esm/swappers/DebridgeSwapper/getTradeQuote/getTradeQuote.js +27 -0
  240. package/dist/esm/swappers/DebridgeSwapper/getTradeRate/getTradeRate.d.ts +3 -0
  241. package/dist/esm/swappers/DebridgeSwapper/getTradeRate/getTradeRate.js +15 -0
  242. package/dist/esm/swappers/DebridgeSwapper/index.d.ts +1 -0
  243. package/dist/esm/swappers/DebridgeSwapper/index.js +1 -0
  244. package/dist/esm/swappers/DebridgeSwapper/utils/debridgeService.d.ts +5 -0
  245. package/dist/esm/swappers/DebridgeSwapper/utils/debridgeService.js +11 -0
  246. package/dist/esm/swappers/DebridgeSwapper/utils/fetchDebridgeSingleChainTrade.d.ts +16 -0
  247. package/dist/esm/swappers/DebridgeSwapper/utils/fetchDebridgeSingleChainTrade.js +19 -0
  248. package/dist/esm/swappers/DebridgeSwapper/utils/fetchDebridgeTrade.d.ts +20 -0
  249. package/dist/esm/swappers/DebridgeSwapper/utils/fetchDebridgeTrade.js +25 -0
  250. package/dist/esm/swappers/DebridgeSwapper/utils/getTrade.d.ts +11 -0
  251. package/dist/esm/swappers/DebridgeSwapper/utils/getTrade.js +362 -0
  252. package/dist/esm/swappers/DebridgeSwapper/utils/types.d.ts +155 -0
  253. package/dist/esm/swappers/DebridgeSwapper/utils/types.js +5 -0
  254. package/dist/esm/swappers/JupiterSwapper/swapperApi/getTradeQuote.js +33 -1
  255. package/dist/esm/swappers/JupiterSwapper/swapperApi/getTradeRate.js +9 -0
  256. package/dist/esm/swappers/MayachainSwapper/utils/poolAssetHelpers/poolAssetHelpers.js +1 -1
  257. package/dist/esm/swappers/NearIntentsSwapper/NearIntentsSwapper.js +2 -1
  258. package/dist/esm/swappers/NearIntentsSwapper/endpoints.js +31 -0
  259. package/dist/esm/swappers/NearIntentsSwapper/swapperApi/getTradeQuote.js +50 -3
  260. package/dist/esm/swappers/NearIntentsSwapper/swapperApi/getTradeRate.js +75 -3
  261. package/dist/esm/swappers/NearIntentsSwapper/types.d.ts +1 -1
  262. package/dist/esm/swappers/NearIntentsSwapper/types.js +6 -0
  263. package/dist/esm/swappers/NearIntentsSwapper/utils/helpers/helpers.js +23 -4
  264. package/dist/esm/swappers/PortalsSwapper/getPortalsTradeQuote/getPortalsTradeQuote.js +10 -0
  265. package/dist/esm/swappers/PortalsSwapper/getPortalsTradeRate/getPortalsTradeRate.js +8 -3
  266. package/dist/esm/swappers/RelaySwapper/constant.js +29 -3
  267. package/dist/esm/swappers/RelaySwapper/utils/getRelayDefaultUserAddress.d.ts +1 -1
  268. package/dist/esm/swappers/RelaySwapper/utils/getTrade.js +60 -10
  269. package/dist/esm/swappers/RelaySwapper/utils/relayTokenToAssetId.js +110 -0
  270. package/dist/esm/swappers/RelaySwapper/utils/types.d.ts +15 -0
  271. package/dist/esm/swappers/StonfiSwapper/StonfiSwapper.d.ts +2 -0
  272. package/dist/esm/swappers/StonfiSwapper/StonfiSwapper.js +5 -0
  273. package/dist/esm/swappers/StonfiSwapper/endpoints.d.ts +2 -0
  274. package/dist/esm/swappers/StonfiSwapper/endpoints.js +224 -0
  275. package/dist/esm/swappers/StonfiSwapper/index.d.ts +4 -0
  276. package/dist/esm/swappers/StonfiSwapper/index.js +4 -0
  277. package/dist/esm/swappers/StonfiSwapper/swapperApi/getTradeQuote.d.ts +2 -0
  278. package/dist/esm/swappers/StonfiSwapper/swapperApi/getTradeQuote.js +125 -0
  279. package/dist/esm/swappers/StonfiSwapper/swapperApi/getTradeRate.d.ts +2 -0
  280. package/dist/esm/swappers/StonfiSwapper/swapperApi/getTradeRate.js +111 -0
  281. package/dist/esm/swappers/StonfiSwapper/types.d.ts +60 -0
  282. package/dist/esm/swappers/StonfiSwapper/types.js +2 -0
  283. package/dist/esm/swappers/StonfiSwapper/utils/constants.d.ts +5 -0
  284. package/dist/esm/swappers/StonfiSwapper/utils/constants.js +5 -0
  285. package/dist/esm/swappers/StonfiSwapper/utils/helpers.d.ts +11 -0
  286. package/dist/esm/swappers/StonfiSwapper/utils/helpers.js +124 -0
  287. package/dist/esm/swappers/StonfiSwapper/utils/omnistonManager.d.ts +5 -0
  288. package/dist/esm/swappers/StonfiSwapper/utils/omnistonManager.js +17 -0
  289. package/dist/esm/swappers/SunioSwapper/endpoints.js +1 -1
  290. package/dist/esm/swappers/SunioSwapper/utils/getQuoteOrRate.js +15 -4
  291. package/dist/esm/swappers/ThorchainSwapper/ThorchainSwapper.js +3 -0
  292. package/dist/esm/swappers/ThorchainSwapper/endpoints.js +3 -1
  293. package/dist/esm/swappers/ThorchainSwapper/generated/generatedTradableAssetMap.json +1 -0
  294. package/dist/esm/swappers/ThorchainSwapper/utils/poolAssetHelpers/poolAssetHelpers.d.ts +1 -1
  295. package/dist/esm/swappers/ThorchainSwapper/utils/poolAssetHelpers/poolAssetHelpers.js +2 -1
  296. package/dist/esm/swappers/ThorchainSwapper/utils/poolAssetHelpers/poolAssetHelpers.test.js +11 -1
  297. package/dist/esm/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.js +9 -0
  298. package/dist/esm/swappers/ZrxSwapper/getZrxTradeRate/getZrxTradeRate.js +9 -0
  299. package/dist/esm/swappers/ZrxSwapper/utils/helpers/helpers.d.ts +1 -1
  300. package/dist/esm/swappers/utils/affiliateFee.d.ts +17 -0
  301. package/dist/esm/swappers/utils/affiliateFee.js +39 -0
  302. package/dist/esm/swappers/utils/filterBuyAssetsBySellAssetId/filterBuyAssetsBySellAssetId.js +2 -5
  303. package/dist/esm/swappers/utils/helpers/helpers.js +4 -1
  304. package/dist/esm/thorchain-utils/getCallDataFromQuote.d.ts +1 -1
  305. package/dist/esm/thorchain-utils/getL1RateOrQuote.js +88 -10
  306. package/dist/esm/thorchain-utils/getQuote.js +9 -3
  307. package/dist/esm/thorchain-utils/index.d.ts +2 -1
  308. package/dist/esm/thorchain-utils/index.js +1 -0
  309. package/dist/esm/thorchain-utils/solana/constants.d.ts +1 -0
  310. package/dist/esm/thorchain-utils/solana/constants.js +3 -0
  311. package/dist/esm/thorchain-utils/solana/getSolanaTransactionFees.d.ts +2 -0
  312. package/dist/esm/thorchain-utils/solana/getSolanaTransactionFees.js +37 -0
  313. package/dist/esm/thorchain-utils/solana/getThorTxData.d.ts +12 -0
  314. package/dist/esm/thorchain-utils/solana/getThorTxData.js +10 -0
  315. package/dist/esm/thorchain-utils/solana/getUnsignedSolanaTransaction.d.ts +3 -0
  316. package/dist/esm/thorchain-utils/solana/getUnsignedSolanaTransaction.js +60 -0
  317. package/dist/esm/thorchain-utils/solana/index.d.ts +3 -0
  318. package/dist/esm/thorchain-utils/solana/index.js +3 -0
  319. package/dist/esm/tron-utils/getUnsignedTronTransaction.js +22 -2
  320. package/dist/esm/types.d.ts +118 -8
  321. package/dist/esm/types.js +3 -0
  322. package/dist/esm/utils.d.ts +4 -3
  323. package/dist/esm/utils.js +34 -7
  324. package/package.json +27 -24
@@ -1,22 +1,26 @@
1
1
  import { CHAIN_NAMESPACE, fromAssetId } from '@shapeshiftoss/caip';
2
2
  import * as adapters from '@shapeshiftoss/chain-adapters';
3
- import { assertUnreachable, bn, bnOrZero, contractAddressOrUndefined, convertDecimalPercentageToBasisPoints, convertPrecision, fromBaseUnit, isFulfilled, isRejected, toBaseUnit, } from '@shapeshiftoss/utils';
3
+ import { assertUnreachable, BigAmount, bn, bnOrZero, contractAddressOrUndefined, convertDecimalPercentageToBasisPoints, convertPrecision, isFulfilled, isRejected, } from '@shapeshiftoss/utils';
4
4
  import { Err, Ok } from '@sniptt/monads';
5
+ import { PublicKey, SystemProgram, TransactionInstruction } from '@solana/web3.js';
5
6
  import { TronWeb } from 'tronweb';
6
7
  import { v4 as uuid } from 'uuid';
7
8
  import { getDefaultSlippageDecimalPercentageForSwapper } from '../index.js';
9
+ import { buildAffiliateFee } from '../swappers/utils/affiliateFee.js';
8
10
  import { TradeQuoteError } from '../types.js';
9
11
  import { getInputOutputRate, makeSwapErrorRight } from '../utils.js';
10
12
  import * as evm from './evm/index.js';
11
13
  import { getLimitWithManualSlippage } from './getLimitWithManualSlippage/getLimitWithManualSlippage.js';
12
14
  import { getQuote } from './getQuote.js';
13
15
  import { addLimitToMemo, assertAndProcessMemo, getAffiliate, getNativePrecision, getSwapSource, } from './index.js';
16
+ import * as solana from './solana/index.js';
14
17
  import * as tron from './tron/index.js';
15
18
  import * as utxo from './utxo/index.js';
16
19
  const SAFE_GAS_LIMIT = '100000'; // depositWithExpiry()
20
+ const SOLANA_MEMO_PROGRAM_ID = 'MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr';
17
21
  export const getL1RateOrQuote = async (input, deps, streamingInterval, tradeType, swapperName) => {
18
22
  const { sellAsset, buyAsset, sellAmountIncludingProtocolFeesCryptoBaseUnit: sellAmountCryptoBaseUnit, accountNumber, receiveAddress, affiliateBps: requestedAffiliateBps, } = input;
19
- const { config, assertGetEvmChainAdapter, assertGetUtxoChainAdapter, assertGetCosmosSdkChainAdapter, } = deps;
23
+ const { config, assertGetEvmChainAdapter, assertGetUtxoChainAdapter, assertGetCosmosSdkChainAdapter, assertGetSolanaChainAdapter, } = deps;
20
24
  // "NativePrecision" is intended to indicate the base unit precision of the asset
21
25
  // for the corresponding swapper network (THORChain or MAYAChain)
22
26
  // (CACAO = 10, everything else = 8)
@@ -75,7 +79,13 @@ export const getL1RateOrQuote = async (input, deps, streamingInterval, tradeType
75
79
  : '0';
76
80
  const getRouteBuyAmountBeforeFeesCryptoBaseUnit = (quote) => {
77
81
  const buyAmountBeforeFeesCryptoThorPrecision = bn(quote.expected_amount_out).plus(quote.fees.total);
78
- return toBaseUnit(fromBaseUnit(buyAmountBeforeFeesCryptoThorPrecision, buyAssetNativePrecision), buyAsset.precision);
82
+ return BigAmount.fromPrecision({
83
+ value: BigAmount.fromBaseUnit({
84
+ value: buyAmountBeforeFeesCryptoThorPrecision,
85
+ precision: buyAssetNativePrecision,
86
+ }).toPrecision(),
87
+ precision: buyAsset.precision,
88
+ }).toBaseUnit();
79
89
  };
80
90
  const getProtocolFees = (quote) => {
81
91
  // Fees consist of liquidity, outbound, and affiliate fees
@@ -161,6 +171,14 @@ export const getL1RateOrQuote = async (input, deps, streamingInterval, tradeType
161
171
  accountNumber,
162
172
  allowanceContract,
163
173
  feeData,
174
+ affiliateFee: buildAffiliateFee({
175
+ strategy: 'buy_asset',
176
+ affiliateBps: route.affiliateBps,
177
+ sellAsset,
178
+ buyAsset,
179
+ sellAmountCryptoBaseUnit,
180
+ buyAmountCryptoBaseUnit: buyAmountAfterFeesCryptoBaseUnit,
181
+ }),
164
182
  thorchainSpecific: {
165
183
  maxStreamingQuantity: route.quote.max_streaming_quantity,
166
184
  },
@@ -215,7 +233,11 @@ export const getL1RateOrQuote = async (input, deps, streamingInterval, tradeType
215
233
  const sellAdapter = assertGetUtxoChainAdapter(sellAsset.chainId);
216
234
  const maybeRoutes = await Promise.allSettled(perRouteValues.map(async (route) => {
217
235
  const memo = getMemo(route);
218
- const { vault } = await utxo.getThorTxData({ sellAsset, config, swapperName });
236
+ const { vault } = await utxo.getThorTxData({
237
+ sellAsset,
238
+ config,
239
+ swapperName,
240
+ });
219
241
  const feeData = await (async () => {
220
242
  const protocolFees = getProtocolFees(route.quote);
221
243
  // This is a rate without a wallet connected, so we can't get fees
@@ -269,10 +291,51 @@ export const getL1RateOrQuote = async (input, deps, streamingInterval, tradeType
269
291
  }));
270
292
  }
271
293
  case CHAIN_NAMESPACE.Solana: {
272
- return Err(makeSwapErrorRight({
273
- message: 'Solana is not supported',
274
- code: TradeQuoteError.UnsupportedTradePair,
294
+ const adapter = assertGetSolanaChainAdapter(sellAsset.chainId);
295
+ const sendAddress = input.sendAddress;
296
+ const maybeRoutes = await Promise.allSettled(perRouteValues.map(async (route) => {
297
+ const memo = getMemo(route);
298
+ const protocolFees = getProtocolFees(route.quote);
299
+ const feeData = await (async () => {
300
+ if (!sendAddress)
301
+ return { networkFeeCryptoBaseUnit: undefined, protocolFees };
302
+ const { vault } = await solana.getThorTxData({ sellAsset, config, swapperName });
303
+ const memoInstruction = new TransactionInstruction({
304
+ keys: [],
305
+ programId: new PublicKey(SOLANA_MEMO_PROGRAM_ID),
306
+ data: Buffer.from(memo, 'utf8'),
307
+ });
308
+ const transferInstruction = SystemProgram.transfer({
309
+ fromPubkey: new PublicKey(sendAddress),
310
+ toPubkey: new PublicKey(vault),
311
+ lamports: BigInt(sellAmountCryptoBaseUnit),
312
+ });
313
+ const { fast } = await adapter.getFeeData({
314
+ to: vault,
315
+ value: '0',
316
+ chainSpecific: {
317
+ from: sendAddress,
318
+ tokenId: contractAddressOrUndefined(sellAsset.assetId),
319
+ instructions: [memoInstruction, transferInstruction],
320
+ },
321
+ });
322
+ return { networkFeeCryptoBaseUnit: fast.txFee, protocolFees };
323
+ })();
324
+ return makeThorTradeRateOrQuote({
325
+ route,
326
+ allowanceContract: '0x0',
327
+ memo,
328
+ feeData,
329
+ });
275
330
  }));
331
+ const routes = maybeRoutes.filter(isFulfilled).map(r => r.value);
332
+ if (!routes.length)
333
+ return Err(makeSwapErrorRight({
334
+ message: 'Unable to create any routes',
335
+ code: TradeQuoteError.UnsupportedTradePair,
336
+ cause: maybeRoutes.filter(isRejected).map(r => r.reason),
337
+ }));
338
+ return Ok(routes);
276
339
  }
277
340
  case CHAIN_NAMESPACE.Tron: {
278
341
  const maybeRoutes = await Promise.allSettled(perRouteValues.map(async (route) => {
@@ -284,9 +347,15 @@ export const getL1RateOrQuote = async (input, deps, streamingInterval, tradeType
284
347
  const { sellAsset, sellAmountIncludingProtocolFeesCryptoBaseUnit } = input;
285
348
  const contractAddress = contractAddressOrUndefined(sellAsset.assetId);
286
349
  // Get vault address
287
- const { vault } = await tron.getThorTxData({ sellAsset, config, swapperName });
350
+ const { vault } = await tron.getThorTxData({
351
+ sellAsset,
352
+ config,
353
+ swapperName,
354
+ });
288
355
  // Estimate fees using the receive address for accurate energy calculation
289
- const tronWeb = new TronWeb({ fullHost: deps.config.VITE_TRON_NODE_URL });
356
+ const tronWeb = new TronWeb({
357
+ fullHost: deps.config.VITE_TRON_NODE_URL,
358
+ });
290
359
  const params = await tronWeb.trx.getChainParameters();
291
360
  const bandwidthPrice = params.find(p => p.key === 'getTransactionFee')?.value ?? 1000;
292
361
  const energyPrice = params.find(p => p.key === 'getEnergyFee')?.value ?? 100;
@@ -296,7 +365,10 @@ export const getL1RateOrQuote = async (input, deps, streamingInterval, tradeType
296
365
  try {
297
366
  const result = await tronWeb.transactionBuilder.triggerConstantContract(contractAddress, 'transfer(address,uint256)', {}, [
298
367
  { type: 'address', value: vault },
299
- { type: 'uint256', value: sellAmountIncludingProtocolFeesCryptoBaseUnit },
368
+ {
369
+ type: 'uint256',
370
+ value: sellAmountIncludingProtocolFeesCryptoBaseUnit,
371
+ },
300
372
  ], input.receiveAddress);
301
373
  const energyUsed = result.energy_used ?? 65000;
302
374
  const energyFee = energyUsed * energyPrice * 1.5; // 1.5x safety margin
@@ -361,6 +433,12 @@ export const getL1RateOrQuote = async (input, deps, streamingInterval, tradeType
361
433
  code: TradeQuoteError.UnsupportedTradePair,
362
434
  }));
363
435
  }
436
+ case CHAIN_NAMESPACE.Ton: {
437
+ return Err(makeSwapErrorRight({
438
+ message: 'TON is not supported',
439
+ code: TradeQuoteError.UnsupportedTradePair,
440
+ }));
441
+ }
364
442
  default:
365
443
  return assertUnreachable(chainNamespace);
366
444
  }
@@ -1,5 +1,5 @@
1
1
  import { bchAssetId } from '@shapeshiftoss/caip';
2
- import { bn, fromBaseUnit, toBaseUnit } from '@shapeshiftoss/utils';
2
+ import { BigAmount, bn } from '@shapeshiftoss/utils';
3
3
  import { Err, Ok } from '@sniptt/monads';
4
4
  import qs from 'qs';
5
5
  import { TradeQuoteError } from '../types.js';
@@ -19,9 +19,15 @@ export const getQuote = async (input, deps) => {
19
19
  });
20
20
  const buyPoolId = getPoolAssetId({ assetId: buyAssetId, swapperName });
21
21
  const sellPoolId = getPoolAssetId({ assetId: sellAsset.assetId, swapperName });
22
- const sellAmountCryptoPrecision = fromBaseUnit(sellAmountCryptoBaseUnit, sellAsset.precision);
22
+ const sellAmountCryptoPrecision = BigAmount.fromBaseUnit({
23
+ value: sellAmountCryptoBaseUnit,
24
+ precision: sellAsset.precision,
25
+ }).toPrecision();
23
26
  // All pool amounts are native precision regardless of token precision
24
- const sellAmountCryptoThorBaseUnit = bn(toBaseUnit(sellAmountCryptoPrecision, getNativePrecision(sellAsset.assetId, swapperName)));
27
+ const sellAmountCryptoThorBaseUnit = bn(BigAmount.fromPrecision({
28
+ value: sellAmountCryptoPrecision,
29
+ precision: getNativePrecision(sellAsset.assetId, swapperName),
30
+ }).toBaseUnit());
25
31
  // The swap endpoint expects BCH receiveAddress's to be stripped of the "bitcoincash:" prefix
26
32
  const parsedReceiveAddress = receiveAddress && buyAssetId === bchAssetId
27
33
  ? receiveAddress.replace('bitcoincash:', '')
@@ -13,6 +13,7 @@ export * from './getL1RateOrQuote.js';
13
13
  export * from './getPoolDetails.js';
14
14
  export * as cosmossdk from './cosmossdk/index.js';
15
15
  export * as evm from './evm/index.js';
16
+ export * as solana from './solana/index.js';
16
17
  export * as tron from './tron/index.js';
17
18
  export * as utxo from './utxo/index.js';
18
19
  export declare const getChainIdBySwapper: (swapperName: SwapperName) => import("@shapeshiftoss/caip").ChainId;
@@ -21,7 +22,7 @@ export declare const isThorTradeQuote: (quote: TradeQuote | undefined) => quote
21
22
  export declare const getDaemonUrl: (config: SwapperConfig, swapperName: SwapperName) => string;
22
23
  export declare const getMidgardUrl: (config: SwapperConfig, swapperName: SwapperName) => string;
23
24
  export declare const isNativeAsset: (assetId: AssetId, swapperName: SwapperName) => boolean;
24
- export declare const getNativePrecision: (assetId: AssetId, swapperName: SwapperName) => 10 | 8;
25
+ export declare const getNativePrecision: (assetId: AssetId, swapperName: SwapperName) => 8 | 10;
25
26
  export declare const getNativeFee: (swapperName: SwapperName) => "2000000" | "2000000000";
26
27
  export declare const getAffiliate: (swapperName: SwapperName) => "ss" | "ssmaya";
27
28
  export declare const getPoolAssetId: ({ assetId, swapperName, }: {
@@ -14,6 +14,7 @@ export * from './getL1RateOrQuote.js';
14
14
  export * from './getPoolDetails.js';
15
15
  export * as cosmossdk from './cosmossdk/index.js';
16
16
  export * as evm from './evm/index.js';
17
+ export * as solana from './solana/index.js';
17
18
  export * as tron from './tron/index.js';
18
19
  export * as utxo from './utxo/index.js';
19
20
  export const getChainIdBySwapper = (swapperName) => {
@@ -0,0 +1 @@
1
+ export declare const MEMO_PROGRAM_ID = "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr";
@@ -0,0 +1,3 @@
1
+ // Solana Memo Program v2
2
+ // https://spl.solana.com/memo
3
+ export const MEMO_PROGRAM_ID = 'MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr';
@@ -0,0 +1,2 @@
1
+ import type { GetUnsignedSolanaTransactionArgs, SwapperName } from '../../types.js';
2
+ export declare const getSolanaTransactionFees: (args: GetUnsignedSolanaTransactionArgs, swapperName: SwapperName) => Promise<string>;
@@ -0,0 +1,37 @@
1
+ import { contractAddressOrUndefined } from '@shapeshiftoss/utils';
2
+ import { PublicKey, SystemProgram, TransactionInstruction } from '@solana/web3.js';
3
+ import { getExecutableTradeStep, isExecutableTradeQuote } from '../../utils.js';
4
+ import { getThorTxData } from './getThorTxData.js';
5
+ const MEMO_PROGRAM_ID = 'MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr';
6
+ export const getSolanaTransactionFees = async (args, swapperName) => {
7
+ const { tradeQuote, stepIndex, from, assertGetSolanaChainAdapter, config } = args;
8
+ if (!isExecutableTradeQuote(tradeQuote))
9
+ throw new Error('Unable to execute a trade rate quote');
10
+ const { memo } = tradeQuote;
11
+ if (!memo)
12
+ throw new Error('Memo is required');
13
+ const step = getExecutableTradeStep(tradeQuote, stepIndex);
14
+ const { sellAmountIncludingProtocolFeesCryptoBaseUnit, sellAsset } = step;
15
+ const { vault } = await getThorTxData({ sellAsset, config, swapperName });
16
+ const adapter = assertGetSolanaChainAdapter(sellAsset.chainId);
17
+ const memoInstruction = new TransactionInstruction({
18
+ keys: [],
19
+ programId: new PublicKey(MEMO_PROGRAM_ID),
20
+ data: Buffer.from(memo, 'utf8'),
21
+ });
22
+ const transferInstruction = SystemProgram.transfer({
23
+ fromPubkey: new PublicKey(from),
24
+ toPubkey: new PublicKey(vault),
25
+ lamports: BigInt(sellAmountIncludingProtocolFeesCryptoBaseUnit),
26
+ });
27
+ const { fast } = await adapter.getFeeData({
28
+ to: vault,
29
+ value: '0',
30
+ chainSpecific: {
31
+ from,
32
+ tokenId: contractAddressOrUndefined(sellAsset.assetId),
33
+ instructions: [memoInstruction, transferInstruction],
34
+ },
35
+ });
36
+ return fast.txFee;
37
+ };
@@ -0,0 +1,12 @@
1
+ import type { Asset } from '@shapeshiftoss/types';
2
+ import type { SwapperConfig, SwapperName } from '../../types.js';
3
+ type GetThorTxDataArgs = {
4
+ sellAsset: Asset;
5
+ config: SwapperConfig;
6
+ swapperName: SwapperName;
7
+ };
8
+ type GetThorTxDataReturn = {
9
+ vault: string;
10
+ };
11
+ export declare const getThorTxData: ({ sellAsset, config, swapperName, }: GetThorTxDataArgs) => Promise<GetThorTxDataReturn>;
12
+ export {};
@@ -0,0 +1,10 @@
1
+ import { getInboundAddressDataForChain } from '../getInboundAddressDataForChain.js';
2
+ import { getDaemonUrl } from '../index.js';
3
+ export const getThorTxData = async ({ sellAsset, config, swapperName, }) => {
4
+ const daemonUrl = getDaemonUrl(config, swapperName);
5
+ const res = await getInboundAddressDataForChain(daemonUrl, sellAsset.assetId, false, swapperName);
6
+ if (res.isErr())
7
+ throw res.unwrapErr();
8
+ const { address: vault } = res.unwrap();
9
+ return { vault };
10
+ };
@@ -0,0 +1,3 @@
1
+ import type { SolanaSignTx } from '@shapeshiftoss/hdwallet-core';
2
+ import type { GetUnsignedSolanaTransactionArgs, SwapperName } from '../../types.js';
3
+ export declare const getUnsignedSolanaTransaction: (args: GetUnsignedSolanaTransactionArgs, swapperName: SwapperName) => Promise<SolanaSignTx>;
@@ -0,0 +1,60 @@
1
+ import { contractAddressOrUndefined } from '@shapeshiftoss/utils';
2
+ import { PublicKey, SystemProgram, TransactionInstruction } from '@solana/web3.js';
3
+ import { getExecutableTradeStep, isExecutableTradeQuote } from '../../utils.js';
4
+ import { getThorTxData } from './getThorTxData.js';
5
+ const MEMO_PROGRAM_ID = 'MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr';
6
+ // Each ComputeBudgetProgram instruction (setComputeUnitLimit, setComputeUnitPrice) costs 150 CU.
7
+ // Fee estimation doesn't include these, so we add a fixed buffer to cover them.
8
+ const COMPUTE_BUDGET_INSTRUCTION_OVERHEAD_CU = 300;
9
+ export const getUnsignedSolanaTransaction = async (args, swapperName) => {
10
+ const { tradeQuote, stepIndex, from, assertGetSolanaChainAdapter, config } = args;
11
+ if (!isExecutableTradeQuote(tradeQuote))
12
+ throw new Error('Unable to execute a trade rate quote');
13
+ const { memo } = tradeQuote;
14
+ if (!memo)
15
+ throw new Error('Memo is required');
16
+ const step = getExecutableTradeStep(tradeQuote, stepIndex);
17
+ const { accountNumber, sellAmountIncludingProtocolFeesCryptoBaseUnit, sellAsset } = step;
18
+ const { vault } = await getThorTxData({
19
+ sellAsset,
20
+ config,
21
+ swapperName,
22
+ });
23
+ const adapter = assertGetSolanaChainAdapter(sellAsset.chainId);
24
+ const memoInstruction = new TransactionInstruction({
25
+ keys: [],
26
+ programId: new PublicKey(MEMO_PROGRAM_ID),
27
+ data: Buffer.from(memo, 'utf8'),
28
+ });
29
+ const transferInstruction = SystemProgram.transfer({
30
+ fromPubkey: new PublicKey(from),
31
+ toPubkey: new PublicKey(vault),
32
+ lamports: BigInt(sellAmountIncludingProtocolFeesCryptoBaseUnit),
33
+ });
34
+ const { fast } = await adapter.getFeeData({
35
+ to: vault,
36
+ value: '0',
37
+ chainSpecific: {
38
+ from,
39
+ tokenId: contractAddressOrUndefined(sellAsset.assetId),
40
+ instructions: [memoInstruction, transferInstruction],
41
+ },
42
+ });
43
+ const memoHdwalletInstruction = {
44
+ keys: [],
45
+ programId: MEMO_PROGRAM_ID,
46
+ data: Buffer.from(memo, 'utf8'),
47
+ };
48
+ return adapter.buildSendApiTransaction({
49
+ from,
50
+ to: vault,
51
+ value: sellAmountIncludingProtocolFeesCryptoBaseUnit,
52
+ accountNumber,
53
+ chainSpecific: {
54
+ instructions: [memoHdwalletInstruction],
55
+ computeUnitLimit: String(Number(fast.chainSpecific.computeUnits) + COMPUTE_BUDGET_INSTRUCTION_OVERHEAD_CU),
56
+ computeUnitPrice: fast.chainSpecific.priorityFee,
57
+ tokenId: contractAddressOrUndefined(sellAsset.assetId),
58
+ },
59
+ });
60
+ };
@@ -0,0 +1,3 @@
1
+ export * from './getThorTxData.js';
2
+ export * from './getUnsignedSolanaTransaction.js';
3
+ export * from './getSolanaTransactionFees.js';
@@ -0,0 +1,3 @@
1
+ export * from './getThorTxData.js';
2
+ export * from './getUnsignedSolanaTransaction.js';
3
+ export * from './getSolanaTransactionFees.js';
@@ -1,16 +1,36 @@
1
+ import { tronAssetId } from '@shapeshiftoss/caip';
1
2
  import { contractAddressOrUndefined } from '@shapeshiftoss/utils';
2
3
  import { getExecutableTradeStep, isExecutableTradeQuote } from '../utils.js';
3
4
  export const getUnsignedTronTransaction = ({ stepIndex, tradeQuote, from, assertGetTronChainAdapter, }) => {
4
5
  if (!isExecutableTradeQuote(tradeQuote))
5
6
  throw new Error('Unable to execute a trade rate quote');
6
7
  const step = getExecutableTradeStep(tradeQuote, stepIndex);
7
- const { accountNumber, sellAsset, relayTransactionMetadata, nearIntentsSpecific } = step;
8
+ const { accountNumber, sellAsset, relayTransactionMetadata, nearIntentsSpecific, butterSwapTransactionMetadata, } = step;
8
9
  const adapter = assertGetTronChainAdapter(sellAsset.chainId);
10
+ if (butterSwapTransactionMetadata) {
11
+ const { to, data, method, args, value: butterValue } = butterSwapTransactionMetadata;
12
+ if (!to)
13
+ throw new Error('Missing Butter swap contract address');
14
+ if (!data)
15
+ throw new Error('Missing Butter swap transaction data');
16
+ // Use Butter's value field which includes swap fees for same-chain swaps
17
+ // For native TRX sells, also include the sell amount
18
+ const isNativeTron = sellAsset.assetId === tronAssetId;
19
+ const value = isNativeTron ? step.sellAmountIncludingProtocolFeesCryptoBaseUnit : butterValue;
20
+ return adapter.buildCustomApiTx({
21
+ from,
22
+ to,
23
+ accountNumber,
24
+ data,
25
+ value,
26
+ method,
27
+ args,
28
+ });
29
+ }
9
30
  const to = relayTransactionMetadata?.to ?? nearIntentsSpecific?.depositAddress;
10
31
  if (!to)
11
32
  throw new Error('Missing transaction destination address');
12
33
  const value = step.sellAmountIncludingProtocolFeesCryptoBaseUnit;
13
- // Extract contract address for TRC20 tokens
14
34
  const contractAddress = contractAddressOrUndefined(sellAsset.assetId);
15
35
  return adapter.buildSendApiTransaction({
16
36
  to,