@shapeshiftoss/swapper 17.6.10 → 17.7.0

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 (232) hide show
  1. package/LICENSE.md +21 -0
  2. package/dist/cjs/.tsbuildinfo +1 -1
  3. package/dist/cjs/constants.js +11 -10
  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 -1
  7. package/dist/cjs/index.js +1 -1
  8. package/dist/cjs/solana-utils/getUnsignedSolanaTransaction.js +4 -2
  9. package/dist/cjs/swappers/AcrossSwapper/constant.js +2 -0
  10. package/dist/cjs/swappers/AcrossSwapper/utils/getTrade.js +15 -1
  11. package/dist/cjs/swappers/AvnuSwapper/swapperApi/getTradeQuote.js +12 -1
  12. package/dist/cjs/swappers/AvnuSwapper/swapperApi/getTradeRate.js +9 -0
  13. package/dist/cjs/swappers/BebopSwapper/BebopSwapper.js +2 -0
  14. package/dist/cjs/swappers/BebopSwapper/endpoints.js +35 -2
  15. package/dist/cjs/swappers/BebopSwapper/executeSolanaMessage.d.ts +2 -0
  16. package/dist/cjs/swappers/BebopSwapper/executeSolanaMessage.js +47 -0
  17. package/dist/cjs/swappers/BebopSwapper/getBebopSolanaTradeQuote/getBebopSolanaTradeQuote.d.ts +4 -0
  18. package/dist/cjs/swappers/BebopSwapper/getBebopSolanaTradeQuote/getBebopSolanaTradeQuote.js +91 -0
  19. package/dist/cjs/swappers/BebopSwapper/getBebopSolanaTradeRate/getBebopSolanaTradeRate.d.ts +4 -0
  20. package/dist/cjs/swappers/BebopSwapper/getBebopSolanaTradeRate/getBebopSolanaTradeRate.js +88 -0
  21. package/dist/cjs/swappers/BebopSwapper/getBebopTradeQuote/getBebopTradeQuote.js +10 -0
  22. package/dist/cjs/swappers/BebopSwapper/getBebopTradeRate/getBebopTradeRate.js +10 -0
  23. package/dist/cjs/swappers/BebopSwapper/types.d.ts +49 -1
  24. package/dist/cjs/swappers/BebopSwapper/types.js +9 -2
  25. package/dist/cjs/swappers/BebopSwapper/utils/fetchFromBebop.d.ts +19 -1
  26. package/dist/cjs/swappers/BebopSwapper/utils/fetchFromBebop.js +86 -1
  27. package/dist/cjs/swappers/BebopSwapper/utils/helpers/helpers.d.ts +13 -1
  28. package/dist/cjs/swappers/BebopSwapper/utils/helpers/helpers.js +47 -1
  29. package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeQuote.js +17 -1
  30. package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeRate.js +10 -0
  31. package/dist/cjs/swappers/CetusSwapper/swapperApi/getTradeQuote.js +10 -0
  32. package/dist/cjs/swappers/CetusSwapper/swapperApi/getTradeRate.js +10 -0
  33. package/dist/cjs/swappers/CetusSwapper/utils/helpers.d.ts +1 -1
  34. package/dist/cjs/swappers/CetusSwapper/utils/helpers.js +1 -1
  35. package/dist/cjs/swappers/ChainflipSwapper/constants.js +7 -3
  36. package/dist/cjs/swappers/ChainflipSwapper/endpoints.js +14 -4
  37. package/dist/cjs/swappers/ChainflipSwapper/types.d.ts +1 -0
  38. package/dist/cjs/swappers/ChainflipSwapper/utils/getQuoteOrRate.js +17 -0
  39. package/dist/cjs/swappers/CowSwapper/getCowSwapTradeQuote/getCowSwapTradeQuote.js +10 -0
  40. package/dist/cjs/swappers/CowSwapper/getCowSwapTradeRate/getCowSwapTradeRate.js +9 -0
  41. package/dist/cjs/swappers/DebridgeSwapper/DebridgeSwapper.d.ts +2 -0
  42. package/dist/cjs/swappers/DebridgeSwapper/DebridgeSwapper.js +7 -0
  43. package/dist/cjs/swappers/DebridgeSwapper/constant.d.ts +5 -0
  44. package/dist/cjs/swappers/DebridgeSwapper/constant.js +36 -0
  45. package/dist/cjs/swappers/{JupiterSwapper → DebridgeSwapper}/endpoints.d.ts +1 -1
  46. package/dist/cjs/swappers/DebridgeSwapper/endpoints.js +217 -0
  47. package/dist/cjs/swappers/DebridgeSwapper/getTradeQuote/getTradeQuote.js +31 -0
  48. package/dist/cjs/swappers/DebridgeSwapper/getTradeRate/getTradeRate.js +19 -0
  49. package/dist/cjs/swappers/DebridgeSwapper/index.d.ts +1 -0
  50. package/dist/cjs/swappers/DebridgeSwapper/index.js +5 -0
  51. package/dist/cjs/swappers/{JupiterSwapper/utils/jupiterService.d.ts → DebridgeSwapper/utils/debridgeService.d.ts} +1 -1
  52. package/dist/cjs/swappers/DebridgeSwapper/utils/debridgeService.js +17 -0
  53. package/dist/cjs/swappers/DebridgeSwapper/utils/fetchDebridgeSingleChainTrade.d.ts +16 -0
  54. package/dist/cjs/swappers/DebridgeSwapper/utils/fetchDebridgeSingleChainTrade.js +23 -0
  55. package/dist/cjs/swappers/DebridgeSwapper/utils/fetchDebridgeTrade.d.ts +20 -0
  56. package/dist/cjs/swappers/DebridgeSwapper/utils/fetchDebridgeTrade.js +29 -0
  57. package/dist/cjs/swappers/DebridgeSwapper/utils/getTrade.d.ts +11 -0
  58. package/dist/cjs/swappers/DebridgeSwapper/utils/getTrade.js +367 -0
  59. package/dist/cjs/swappers/DebridgeSwapper/utils/types.d.ts +155 -0
  60. package/dist/cjs/swappers/DebridgeSwapper/utils/types.js +9 -0
  61. package/dist/cjs/swappers/MayachainSwapper/utils/poolAssetHelpers/poolAssetHelpers.js +1 -1
  62. package/dist/cjs/swappers/NearIntentsSwapper/swapperApi/getTradeQuote.js +12 -0
  63. package/dist/cjs/swappers/NearIntentsSwapper/swapperApi/getTradeRate.js +12 -0
  64. package/dist/cjs/swappers/PortalsSwapper/getPortalsTradeQuote/getPortalsTradeQuote.js +10 -0
  65. package/dist/cjs/swappers/RelaySwapper/constant.js +7 -10
  66. package/dist/cjs/swappers/RelaySwapper/endpoints.js +1 -1
  67. package/dist/cjs/swappers/RelaySwapper/utils/getTrade.js +56 -7
  68. package/dist/cjs/swappers/RelaySwapper/utils/relayTokenToAssetId.js +22 -7
  69. package/dist/cjs/swappers/StonfiSwapper/swapperApi/getTradeQuote.js +12 -1
  70. package/dist/cjs/swappers/StonfiSwapper/swapperApi/getTradeRate.js +10 -0
  71. package/dist/cjs/swappers/SunioSwapper/utils/getQuoteOrRate.js +10 -0
  72. package/dist/cjs/swappers/ThorchainSwapper/ThorchainSwapper.js +3 -0
  73. package/dist/cjs/swappers/ThorchainSwapper/endpoints.js +2 -0
  74. package/dist/cjs/swappers/ThorchainSwapper/generated/generatedTradableAssetMap.json +1 -0
  75. package/dist/cjs/swappers/ThorchainSwapper/utils/poolAssetHelpers/poolAssetHelpers.d.ts +1 -1
  76. package/dist/cjs/swappers/ThorchainSwapper/utils/poolAssetHelpers/poolAssetHelpers.js +2 -1
  77. package/dist/cjs/swappers/ThorchainSwapper/utils/poolAssetHelpers/poolAssetHelpers.test.js +10 -0
  78. package/dist/cjs/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.js +9 -0
  79. package/dist/cjs/swappers/ZrxSwapper/getZrxTradeRate/getZrxTradeRate.js +9 -0
  80. package/dist/cjs/swappers/utils/affiliateFee.d.ts +17 -0
  81. package/dist/cjs/swappers/utils/affiliateFee.js +43 -0
  82. package/dist/cjs/thorchain-utils/getL1RateOrQuote.js +57 -4
  83. package/dist/cjs/thorchain-utils/index.d.ts +2 -1
  84. package/dist/cjs/thorchain-utils/index.js +2 -1
  85. package/dist/cjs/thorchain-utils/solana/constants.d.ts +1 -0
  86. package/dist/cjs/thorchain-utils/solana/constants.js +6 -0
  87. package/dist/cjs/thorchain-utils/solana/getSolanaTransactionFees.d.ts +2 -0
  88. package/dist/cjs/thorchain-utils/solana/getSolanaTransactionFees.js +41 -0
  89. package/dist/cjs/thorchain-utils/solana/getThorTxData.d.ts +12 -0
  90. package/dist/cjs/thorchain-utils/solana/getThorTxData.js +14 -0
  91. package/dist/cjs/thorchain-utils/solana/getUnsignedSolanaTransaction.d.ts +3 -0
  92. package/dist/cjs/thorchain-utils/solana/getUnsignedSolanaTransaction.js +64 -0
  93. package/dist/cjs/thorchain-utils/solana/index.d.ts +3 -0
  94. package/dist/cjs/{swappers/JupiterSwapper → thorchain-utils/solana}/index.js +3 -2
  95. package/dist/cjs/tron-utils/getUnsignedTronTransaction.js +16 -0
  96. package/dist/cjs/types.d.ts +47 -11
  97. package/dist/cjs/types.js +1 -1
  98. package/dist/cjs/utils.d.ts +3 -0
  99. package/dist/cjs/utils.js +9 -3
  100. package/dist/esm/.tsbuildinfo +1 -1
  101. package/dist/esm/constants.js +11 -10
  102. package/dist/esm/cowswap-utils/constants.js +3 -0
  103. package/dist/esm/cowswap-utils/index.js +6 -0
  104. package/dist/esm/index.d.ts +1 -1
  105. package/dist/esm/index.js +1 -1
  106. package/dist/esm/solana-utils/getUnsignedSolanaTransaction.js +3 -1
  107. package/dist/esm/swappers/AcrossSwapper/constant.js +4 -2
  108. package/dist/esm/swappers/AcrossSwapper/utils/getTrade.js +15 -1
  109. package/dist/esm/swappers/AvnuSwapper/swapperApi/getTradeQuote.js +12 -1
  110. package/dist/esm/swappers/AvnuSwapper/swapperApi/getTradeRate.js +9 -0
  111. package/dist/esm/swappers/BebopSwapper/BebopSwapper.js +2 -0
  112. package/dist/esm/swappers/BebopSwapper/endpoints.js +36 -3
  113. package/dist/esm/swappers/BebopSwapper/executeSolanaMessage.d.ts +2 -0
  114. package/dist/esm/swappers/BebopSwapper/executeSolanaMessage.js +40 -0
  115. package/dist/esm/swappers/BebopSwapper/getBebopSolanaTradeQuote/getBebopSolanaTradeQuote.d.ts +4 -0
  116. package/dist/esm/swappers/BebopSwapper/getBebopSolanaTradeQuote/getBebopSolanaTradeQuote.js +87 -0
  117. package/dist/esm/swappers/BebopSwapper/getBebopSolanaTradeRate/getBebopSolanaTradeRate.d.ts +4 -0
  118. package/dist/esm/swappers/BebopSwapper/getBebopSolanaTradeRate/getBebopSolanaTradeRate.js +84 -0
  119. package/dist/esm/swappers/BebopSwapper/getBebopTradeQuote/getBebopTradeQuote.js +10 -0
  120. package/dist/esm/swappers/BebopSwapper/getBebopTradeRate/getBebopTradeRate.js +10 -0
  121. package/dist/esm/swappers/BebopSwapper/types.d.ts +49 -1
  122. package/dist/esm/swappers/BebopSwapper/types.js +8 -1
  123. package/dist/esm/swappers/BebopSwapper/utils/fetchFromBebop.d.ts +19 -1
  124. package/dist/esm/swappers/BebopSwapper/utils/fetchFromBebop.js +85 -2
  125. package/dist/esm/swappers/BebopSwapper/utils/helpers/helpers.d.ts +13 -1
  126. package/dist/esm/swappers/BebopSwapper/utils/helpers/helpers.js +44 -1
  127. package/dist/esm/swappers/ButterSwap/swapperApi/getTradeQuote.js +17 -1
  128. package/dist/esm/swappers/ButterSwap/swapperApi/getTradeRate.js +10 -0
  129. package/dist/esm/swappers/CetusSwapper/swapperApi/getTradeQuote.js +10 -0
  130. package/dist/esm/swappers/CetusSwapper/swapperApi/getTradeRate.js +10 -0
  131. package/dist/esm/swappers/CetusSwapper/utils/helpers.d.ts +1 -1
  132. package/dist/esm/swappers/CetusSwapper/utils/helpers.js +1 -1
  133. package/dist/esm/swappers/ChainflipSwapper/constants.js +8 -4
  134. package/dist/esm/swappers/ChainflipSwapper/endpoints.js +14 -4
  135. package/dist/esm/swappers/ChainflipSwapper/types.d.ts +1 -0
  136. package/dist/esm/swappers/ChainflipSwapper/utils/getQuoteOrRate.js +17 -0
  137. package/dist/esm/swappers/CowSwapper/getCowSwapTradeQuote/getCowSwapTradeQuote.js +10 -0
  138. package/dist/esm/swappers/CowSwapper/getCowSwapTradeRate/getCowSwapTradeRate.js +9 -0
  139. package/dist/esm/swappers/{JupiterSwapper/JupiterSwapper.d.ts → DebridgeSwapper/DebridgeSwapper.d.ts} +1 -1
  140. package/dist/esm/swappers/DebridgeSwapper/DebridgeSwapper.js +4 -0
  141. package/dist/esm/swappers/DebridgeSwapper/constant.d.ts +5 -0
  142. package/dist/esm/swappers/DebridgeSwapper/constant.js +30 -0
  143. package/dist/esm/swappers/{JupiterSwapper → DebridgeSwapper}/endpoints.d.ts +1 -1
  144. package/dist/esm/swappers/DebridgeSwapper/endpoints.js +211 -0
  145. package/dist/esm/swappers/DebridgeSwapper/getTradeQuote/getTradeQuote.js +27 -0
  146. package/dist/esm/swappers/DebridgeSwapper/getTradeRate/getTradeRate.js +15 -0
  147. package/dist/esm/swappers/DebridgeSwapper/index.d.ts +1 -0
  148. package/dist/esm/swappers/DebridgeSwapper/index.js +1 -0
  149. package/dist/esm/swappers/{JupiterSwapper/utils/jupiterService.d.ts → DebridgeSwapper/utils/debridgeService.d.ts} +1 -1
  150. package/dist/esm/swappers/DebridgeSwapper/utils/debridgeService.js +11 -0
  151. package/dist/esm/swappers/DebridgeSwapper/utils/fetchDebridgeSingleChainTrade.d.ts +16 -0
  152. package/dist/esm/swappers/DebridgeSwapper/utils/fetchDebridgeSingleChainTrade.js +19 -0
  153. package/dist/esm/swappers/DebridgeSwapper/utils/fetchDebridgeTrade.d.ts +20 -0
  154. package/dist/esm/swappers/DebridgeSwapper/utils/fetchDebridgeTrade.js +25 -0
  155. package/dist/esm/swappers/DebridgeSwapper/utils/getTrade.d.ts +11 -0
  156. package/dist/esm/swappers/DebridgeSwapper/utils/getTrade.js +360 -0
  157. package/dist/esm/swappers/DebridgeSwapper/utils/types.d.ts +155 -0
  158. package/dist/esm/swappers/DebridgeSwapper/utils/types.js +5 -0
  159. package/dist/esm/swappers/MayachainSwapper/utils/poolAssetHelpers/poolAssetHelpers.js +1 -1
  160. package/dist/esm/swappers/NearIntentsSwapper/swapperApi/getTradeQuote.js +14 -2
  161. package/dist/esm/swappers/NearIntentsSwapper/swapperApi/getTradeRate.js +14 -2
  162. package/dist/esm/swappers/PortalsSwapper/getPortalsTradeQuote/getPortalsTradeQuote.js +10 -0
  163. package/dist/esm/swappers/RelaySwapper/constant.js +9 -12
  164. package/dist/esm/swappers/RelaySwapper/endpoints.js +2 -2
  165. package/dist/esm/swappers/RelaySwapper/utils/getTrade.js +59 -10
  166. package/dist/esm/swappers/RelaySwapper/utils/relayTokenToAssetId.js +22 -7
  167. package/dist/esm/swappers/StonfiSwapper/swapperApi/getTradeQuote.js +12 -1
  168. package/dist/esm/swappers/StonfiSwapper/swapperApi/getTradeRate.js +10 -0
  169. package/dist/esm/swappers/SunioSwapper/utils/getQuoteOrRate.js +10 -0
  170. package/dist/esm/swappers/ThorchainSwapper/ThorchainSwapper.js +3 -0
  171. package/dist/esm/swappers/ThorchainSwapper/endpoints.js +3 -1
  172. package/dist/esm/swappers/ThorchainSwapper/generated/generatedTradableAssetMap.json +1 -0
  173. package/dist/esm/swappers/ThorchainSwapper/utils/poolAssetHelpers/poolAssetHelpers.d.ts +1 -1
  174. package/dist/esm/swappers/ThorchainSwapper/utils/poolAssetHelpers/poolAssetHelpers.js +2 -1
  175. package/dist/esm/swappers/ThorchainSwapper/utils/poolAssetHelpers/poolAssetHelpers.test.js +11 -1
  176. package/dist/esm/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.js +9 -0
  177. package/dist/esm/swappers/ZrxSwapper/getZrxTradeRate/getZrxTradeRate.js +9 -0
  178. package/dist/esm/swappers/utils/affiliateFee.d.ts +17 -0
  179. package/dist/esm/swappers/utils/affiliateFee.js +39 -0
  180. package/dist/esm/thorchain-utils/getL1RateOrQuote.js +57 -4
  181. package/dist/esm/thorchain-utils/index.d.ts +2 -1
  182. package/dist/esm/thorchain-utils/index.js +1 -0
  183. package/dist/esm/thorchain-utils/solana/constants.d.ts +1 -0
  184. package/dist/esm/thorchain-utils/solana/constants.js +3 -0
  185. package/dist/esm/thorchain-utils/solana/getSolanaTransactionFees.d.ts +2 -0
  186. package/dist/esm/thorchain-utils/solana/getSolanaTransactionFees.js +37 -0
  187. package/dist/esm/thorchain-utils/solana/getThorTxData.d.ts +12 -0
  188. package/dist/esm/thorchain-utils/solana/getThorTxData.js +10 -0
  189. package/dist/esm/thorchain-utils/solana/getUnsignedSolanaTransaction.d.ts +3 -0
  190. package/dist/esm/thorchain-utils/solana/getUnsignedSolanaTransaction.js +60 -0
  191. package/dist/esm/thorchain-utils/solana/index.d.ts +3 -0
  192. package/dist/esm/thorchain-utils/solana/index.js +3 -0
  193. package/dist/esm/tron-utils/getUnsignedTronTransaction.js +16 -0
  194. package/dist/esm/types.d.ts +47 -11
  195. package/dist/esm/types.js +1 -1
  196. package/dist/esm/utils.d.ts +3 -0
  197. package/dist/esm/utils.js +7 -2
  198. package/package.json +19 -19
  199. package/dist/cjs/swappers/JupiterSwapper/JupiterSwapper.d.ts +0 -2
  200. package/dist/cjs/swappers/JupiterSwapper/JupiterSwapper.js +0 -27
  201. package/dist/cjs/swappers/JupiterSwapper/endpoints.js +0 -15
  202. package/dist/cjs/swappers/JupiterSwapper/errorPatterns.d.ts +0 -15
  203. package/dist/cjs/swappers/JupiterSwapper/errorPatterns.js +0 -29
  204. package/dist/cjs/swappers/JupiterSwapper/idls/referral.d.ts +0 -739
  205. package/dist/cjs/swappers/JupiterSwapper/idls/referral.js +0 -741
  206. package/dist/cjs/swappers/JupiterSwapper/index.d.ts +0 -2
  207. package/dist/cjs/swappers/JupiterSwapper/swapperApi/getTradeQuote.js +0 -191
  208. package/dist/cjs/swappers/JupiterSwapper/swapperApi/getTradeRate.js +0 -172
  209. package/dist/cjs/swappers/JupiterSwapper/utils/constants.d.ts +0 -9
  210. package/dist/cjs/swappers/JupiterSwapper/utils/constants.js +0 -14
  211. package/dist/cjs/swappers/JupiterSwapper/utils/helpers.d.ts +0 -56
  212. package/dist/cjs/swappers/JupiterSwapper/utils/helpers.js +0 -178
  213. package/dist/cjs/swappers/JupiterSwapper/utils/jupiterService.js +0 -15
  214. package/dist/esm/swappers/JupiterSwapper/JupiterSwapper.js +0 -24
  215. package/dist/esm/swappers/JupiterSwapper/endpoints.js +0 -12
  216. package/dist/esm/swappers/JupiterSwapper/errorPatterns.d.ts +0 -15
  217. package/dist/esm/swappers/JupiterSwapper/errorPatterns.js +0 -25
  218. package/dist/esm/swappers/JupiterSwapper/idls/referral.d.ts +0 -739
  219. package/dist/esm/swappers/JupiterSwapper/idls/referral.js +0 -738
  220. package/dist/esm/swappers/JupiterSwapper/index.d.ts +0 -2
  221. package/dist/esm/swappers/JupiterSwapper/index.js +0 -2
  222. package/dist/esm/swappers/JupiterSwapper/swapperApi/getTradeQuote.js +0 -187
  223. package/dist/esm/swappers/JupiterSwapper/swapperApi/getTradeRate.js +0 -168
  224. package/dist/esm/swappers/JupiterSwapper/utils/constants.d.ts +0 -9
  225. package/dist/esm/swappers/JupiterSwapper/utils/constants.js +0 -11
  226. package/dist/esm/swappers/JupiterSwapper/utils/helpers.d.ts +0 -56
  227. package/dist/esm/swappers/JupiterSwapper/utils/helpers.js +0 -169
  228. package/dist/esm/swappers/JupiterSwapper/utils/jupiterService.js +0 -12
  229. /package/dist/cjs/swappers/{JupiterSwapper/swapperApi → DebridgeSwapper/getTradeQuote}/getTradeQuote.d.ts +0 -0
  230. /package/dist/cjs/swappers/{JupiterSwapper/swapperApi → DebridgeSwapper/getTradeRate}/getTradeRate.d.ts +0 -0
  231. /package/dist/esm/swappers/{JupiterSwapper/swapperApi → DebridgeSwapper/getTradeQuote}/getTradeQuote.d.ts +0 -0
  232. /package/dist/esm/swappers/{JupiterSwapper/swapperApi → DebridgeSwapper/getTradeRate}/getTradeRate.d.ts +0 -0
@@ -14,6 +14,7 @@ const viem_1 = require("viem");
14
14
  const types_1 = require("../../../types");
15
15
  const utils_2 = require("../../../utils");
16
16
  const tenderly_1 = require("../../../utils/tenderly");
17
+ const affiliateFee_1 = require("../../utils/affiliateFee");
17
18
  const helpers_1 = require("../../utils/helpers/helpers");
18
19
  const constant_1 = require("../constant");
19
20
  const getRelayAssetAddress_1 = require("../utils/getRelayAssetAddress");
@@ -396,7 +397,7 @@ async function getTrade({ input, deps, relayChainMap, }) {
396
397
  // Fallback to Relay's gas amount
397
398
  return quote.fees.gas.amount;
398
399
  })();
399
- const steps = swapSteps.map((quoteStep) => {
400
+ const steps = await Promise.all(swapSteps.map(async (quoteStep) => {
400
401
  const selectedItem = quoteStep.items?.[0];
401
402
  if (!selectedItem)
402
403
  throw new Error('Relay quote step contains no items');
@@ -406,7 +407,7 @@ async function getTrade({ input, deps, relayChainMap, }) {
406
407
  .plus(relayerFeesBuyAssetCryptoBaseUnit)
407
408
  .plus(appFeesBaseUnit)
408
409
  .toFixed();
409
- const { allowanceContract, relayTransactionMetadata, solanaTransactionMetadata } = (() => {
410
+ const { allowanceContract, relayTransactionMetadata, solanaTransactionMetadata } = await (async () => {
410
411
  if (!selectedItem.data)
411
412
  throw new Error('Relay quote step contains no data');
412
413
  if ((0, types_2.isRelayQuoteUtxoItemData)(selectedItem.data)) {
@@ -445,11 +446,38 @@ async function getTrade({ input, deps, relayChainMap, }) {
445
446
  };
446
447
  }
447
448
  if ((0, types_2.isRelayQuoteSolanaItemData)(selectedItem.data)) {
449
+ const solanaInstructions = selectedItem.data?.instructions?.map(convertSolanaInstruction);
450
+ const addressLookupTableAddresses = selectedItem.data?.addressLookupTableAddresses;
451
+ // Build a trial VersionedTransaction to check if it exceeds the 1232-byte Solana tx size limit
452
+ const isOversized = await (async () => {
453
+ if (!solanaInstructions?.length || !sendAddress)
454
+ return false;
455
+ try {
456
+ const adapter = deps.assertGetSolanaChainAdapter(sellAsset.chainId);
457
+ const lookupTableInfos = await adapter.getAddressLookupTableAccounts(addressLookupTableAddresses);
458
+ const lookupTableAccounts = lookupTableInfos.map(info => new web3_js_1.AddressLookupTableAccount({
459
+ key: new web3_js_1.PublicKey(info.key),
460
+ state: web3_js_1.AddressLookupTableAccount.deserialize(new Uint8Array(info.data)),
461
+ }));
462
+ const messageV0 = web3_js_1.MessageV0.compile({
463
+ payerKey: new web3_js_1.PublicKey(sendAddress),
464
+ instructions: solanaInstructions,
465
+ recentBlockhash: web3_js_1.PublicKey.default.toString(),
466
+ addressLookupTableAccounts: lookupTableAccounts,
467
+ });
468
+ const txBytes = new web3_js_1.VersionedTransaction(messageV0).serialize();
469
+ return txBytes.length > 1232;
470
+ }
471
+ catch {
472
+ return false;
473
+ }
474
+ })();
448
475
  return {
449
476
  allowanceContract: '',
450
477
  solanaTransactionMetadata: {
451
- addressLookupTableAddresses: selectedItem.data?.addressLookupTableAddresses,
452
- instructions: selectedItem.data?.instructions?.map(convertSolanaInstruction),
478
+ addressLookupTableAddresses,
479
+ instructions: solanaInstructions,
480
+ isOversized,
453
481
  },
454
482
  relayTransactionMetadata: {
455
483
  relayId: quote.steps[0].requestId,
@@ -458,13 +486,23 @@ async function getTrade({ input, deps, relayChainMap, }) {
458
486
  };
459
487
  }
460
488
  if ((0, types_2.isRelayQuoteTronItemData)(selectedItem.data)) {
489
+ const contractAddress = selectedItem.data.parameter?.contract_address;
490
+ const callData = selectedItem.data.parameter?.data;
491
+ const isTronToken = (0, utils_1.isToken)(sellAsset.assetId);
492
+ if (isTronToken && !contractAddress) {
493
+ throw new Error('Missing Relay Tron contract address');
494
+ }
495
+ if (isTronToken && !callData) {
496
+ throw new Error('Missing Relay Tron transaction data');
497
+ }
461
498
  return {
462
- allowanceContract: '',
499
+ allowanceContract: contractAddress ?? '',
463
500
  solanaTransactionMetadata: undefined,
464
501
  relayTransactionMetadata: {
465
502
  relayId: quote.steps[0].requestId,
466
503
  orderId,
467
- to: selectedItem.data?.parameter?.contract_address,
504
+ to: contractAddress,
505
+ data: callData,
468
506
  },
469
507
  };
470
508
  }
@@ -494,8 +532,19 @@ async function getTrade({ input, deps, relayChainMap, }) {
494
532
  estimatedExecutionTimeMs: timeEstimate * 1000,
495
533
  solanaTransactionMetadata,
496
534
  relayTransactionMetadata,
535
+ affiliateFee: (0, affiliateFee_1.buildAffiliateFee)({
536
+ strategy: 'fixed_asset',
537
+ affiliateBps,
538
+ sellAsset,
539
+ buyAsset,
540
+ sellAmountCryptoBaseUnit: sellAmountIncludingProtocolFeesCryptoBaseUnit,
541
+ buyAmountCryptoBaseUnit: buyAmountAfterFeesCryptoBaseUnit,
542
+ fixedAssetId: (0, utils_1.chainIdToFeeAssetId)(caip_1.baseChainId),
543
+ fixedAsset: deps.assetsById[(0, utils_1.chainIdToFeeAssetId)(caip_1.baseChainId)],
544
+ isEstimate: true,
545
+ }),
497
546
  };
498
- });
547
+ }));
499
548
  const baseQuoteOrRate = {
500
549
  id: quote.steps[0].requestId,
501
550
  rate,
@@ -112,11 +112,6 @@ const relayTokenToAssetId = (relayToken) => {
112
112
  assetReference: caip_1.ASSET_REFERENCE.Plasma,
113
113
  assetNamespace: caip_1.ASSET_NAMESPACE.slip44,
114
114
  };
115
- case caip_1.CHAIN_REFERENCE.PlumeMainnet:
116
- return {
117
- assetReference: caip_1.ASSET_REFERENCE.Plume,
118
- assetNamespace: caip_1.ASSET_NAMESPACE.slip44,
119
- };
120
115
  case caip_1.CHAIN_REFERENCE.MantleMainnet:
121
116
  return {
122
117
  assetReference: caip_1.ASSET_REFERENCE.Mantle,
@@ -142,9 +137,9 @@ const relayTokenToAssetId = (relayToken) => {
142
137
  assetReference: caip_1.ASSET_REFERENCE.Katana,
143
138
  assetNamespace: caip_1.ASSET_NAMESPACE.slip44,
144
139
  };
145
- case caip_1.CHAIN_REFERENCE.FlowEvmMainnet:
140
+ case caip_1.CHAIN_REFERENCE.EtherealMainnet:
146
141
  return {
147
- assetReference: caip_1.ASSET_REFERENCE.FlowEvm,
142
+ assetReference: caip_1.ASSET_REFERENCE.Ethereal,
148
143
  assetNamespace: caip_1.ASSET_NAMESPACE.slip44,
149
144
  };
150
145
  case caip_1.CHAIN_REFERENCE.CeloMainnet:
@@ -152,6 +147,16 @@ const relayTokenToAssetId = (relayToken) => {
152
147
  assetReference: caip_1.ASSET_REFERENCE.Celo,
153
148
  assetNamespace: caip_1.ASSET_NAMESPACE.slip44,
154
149
  };
150
+ case caip_1.CHAIN_REFERENCE.FlowEvmMainnet:
151
+ return {
152
+ assetReference: caip_1.ASSET_REFERENCE.FlowEvm,
153
+ assetNamespace: caip_1.ASSET_NAMESPACE.slip44,
154
+ };
155
+ case caip_1.CHAIN_REFERENCE.PlumeMainnet:
156
+ return {
157
+ assetReference: caip_1.ASSET_REFERENCE.Plume,
158
+ assetNamespace: caip_1.ASSET_NAMESPACE.slip44,
159
+ };
155
160
  case caip_1.CHAIN_REFERENCE.StoryMainnet:
156
161
  return {
157
162
  assetReference: caip_1.ASSET_REFERENCE.Story,
@@ -217,6 +222,16 @@ const relayTokenToAssetId = (relayToken) => {
217
222
  assetReference: caip_1.ASSET_REFERENCE.Soneium,
218
223
  assetNamespace: caip_1.ASSET_NAMESPACE.slip44,
219
224
  };
225
+ case caip_1.CHAIN_REFERENCE.SeiMainnet:
226
+ return {
227
+ assetReference: caip_1.ASSET_REFERENCE.Sei,
228
+ assetNamespace: caip_1.ASSET_NAMESPACE.slip44,
229
+ };
230
+ case caip_1.CHAIN_REFERENCE.AbstractMainnet:
231
+ return {
232
+ assetReference: caip_1.ASSET_REFERENCE.Abstract,
233
+ assetNamespace: caip_1.ASSET_NAMESPACE.slip44,
234
+ };
220
235
  default:
221
236
  throw Error(`chainId '${relayToken.chainId}' not supported`);
222
237
  }
@@ -1,10 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getTradeQuote = void 0;
4
+ const caip_1 = require("@shapeshiftoss/caip");
4
5
  const monads_1 = require("@sniptt/monads");
5
6
  const omniston_sdk_1 = require("@ston-fi/omniston-sdk");
6
7
  const types_1 = require("../../../types");
7
8
  const utils_1 = require("../../../utils");
9
+ const affiliateFee_1 = require("../../utils/affiliateFee");
8
10
  const helpers_1 = require("../../utils/helpers/helpers");
9
11
  const constants_1 = require("../utils/constants");
10
12
  const helpers_2 = require("../utils/helpers");
@@ -39,7 +41,7 @@ const getTradeQuote = async (input) => {
39
41
  try {
40
42
  const slippageBps = (0, helpers_2.slippageDecimalToBps)(slippageTolerancePercentageDecimal, constants_1.STONFI_DEFAULT_SLIPPAGE_BPS);
41
43
  const referrerFeeBps = (0, helpers_2.affiliateBpsToNumber)(affiliateBps);
42
- const tonTreasuryAddress = (0, helpers_1.getTreasuryAddressFromChainId)(sellAsset.chainId);
44
+ const tonTreasuryAddress = (0, helpers_1.getTreasuryAddressFromChainId)(caip_1.tonChainId);
43
45
  const referrerAddress = (0, helpers_2.tonAddressToOmnistonAddress)(tonTreasuryAddress);
44
46
  const quoteResult = await (0, helpers_2.waitForQuote)(omniston, {
45
47
  settlementMethods: [omniston_sdk_1.SettlementMethod.SETTLEMENT_METHOD_SWAP],
@@ -103,6 +105,15 @@ const getTradeQuote = async (input) => {
103
105
  allowanceContract: '0x0',
104
106
  estimatedExecutionTimeMs: 30000,
105
107
  stonfiSpecific: buildStonfiSpecific(quote, bidAssetAddress, askAssetAddress),
108
+ affiliateFee: (0, affiliateFee_1.buildAffiliateFee)({
109
+ strategy: 'buy_asset',
110
+ affiliateBps,
111
+ sellAsset,
112
+ buyAsset,
113
+ sellAmountCryptoBaseUnit: sellAmountIncludingProtocolFeesCryptoBaseUnit,
114
+ buyAmountCryptoBaseUnit,
115
+ isEstimate: true,
116
+ }),
106
117
  },
107
118
  ],
108
119
  };
@@ -5,6 +5,7 @@ const monads_1 = require("@sniptt/monads");
5
5
  const omniston_sdk_1 = require("@ston-fi/omniston-sdk");
6
6
  const types_1 = require("../../../types");
7
7
  const utils_1 = require("../../../utils");
8
+ const affiliateFee_1 = require("../../utils/affiliateFee");
8
9
  const helpers_1 = require("../../utils/helpers/helpers");
9
10
  const constants_1 = require("../utils/constants");
10
11
  const helpers_2 = require("../utils/helpers");
@@ -89,6 +90,15 @@ const getTradeRate = async (input) => {
89
90
  allowanceContract: '0x0000000000000000000000000000000000000000',
90
91
  estimatedExecutionTimeMs: 30000,
91
92
  stonfiSpecific: buildStonfiSpecific(quote, bidAssetAddress, askAssetAddress),
93
+ affiliateFee: (0, affiliateFee_1.buildAffiliateFee)({
94
+ strategy: 'buy_asset',
95
+ affiliateBps,
96
+ sellAsset,
97
+ buyAsset,
98
+ sellAmountCryptoBaseUnit: sellAmountIncludingProtocolFeesCryptoBaseUnit,
99
+ buyAmountCryptoBaseUnit,
100
+ isEstimate: true,
101
+ }),
92
102
  },
93
103
  ],
94
104
  };
@@ -7,6 +7,7 @@ const monads_1 = require("@sniptt/monads");
7
7
  const tronweb_1 = require("tronweb");
8
8
  const types_1 = require("../../../types");
9
9
  const utils_2 = require("../../../utils");
10
+ const affiliateFee_1 = require("../../utils/affiliateFee");
10
11
  const constants_1 = require("./constants");
11
12
  const fetchFromSunio_1 = require("./fetchFromSunio");
12
13
  const helpers_1 = require("./helpers/helpers");
@@ -187,6 +188,15 @@ async function getQuoteOrRate(input, deps) {
187
188
  route: bestRoute,
188
189
  },
189
190
  }),
191
+ affiliateFee: (0, affiliateFee_1.buildAffiliateFee)({
192
+ strategy: 'buy_asset',
193
+ affiliateBps,
194
+ sellAsset,
195
+ buyAsset,
196
+ sellAmountCryptoBaseUnit: sellAmountIncludingProtocolFeesCryptoBaseUnit,
197
+ buyAmountCryptoBaseUnit: buyAmountAfterFeesCryptoBaseUnit,
198
+ isEstimate: true,
199
+ }),
190
200
  },
191
201
  ],
192
202
  swapperName: types_1.SwapperName.Sunio,
@@ -10,6 +10,9 @@ exports.thorchainSwapper = {
10
10
  executeUtxoTransaction: (txToSign, { signAndBroadcastTransaction }) => {
11
11
  return signAndBroadcastTransaction(txToSign);
12
12
  },
13
+ executeSolanaTransaction: (txToSign, { signAndBroadcastTransaction }) => {
14
+ return signAndBroadcastTransaction(txToSign);
15
+ },
13
16
  executeTronTransaction: (txToSign, { signAndBroadcastTransaction }) => {
14
17
  return signAndBroadcastTransaction(txToSign);
15
18
  },
@@ -15,6 +15,8 @@ exports.thorchainApi = {
15
15
  getEvmTransactionFees: input => thorchain_utils_1.evm.getEvmTransactionFees(input, swapperName),
16
16
  getUnsignedUtxoTransaction: input => thorchain_utils_1.utxo.getUnsignedUtxoTransaction(input, swapperName),
17
17
  getUtxoTransactionFees: input => thorchain_utils_1.utxo.getUtxoTransactionFees(input, swapperName),
18
+ getUnsignedSolanaTransaction: input => thorchain_utils_1.solana.getUnsignedSolanaTransaction(input, swapperName),
19
+ getSolanaTransactionFees: input => thorchain_utils_1.solana.getSolanaTransactionFees(input, swapperName),
18
20
  getUnsignedTronTransaction: input => thorchain_utils_1.tron.getUnsignedTronTransaction(input, swapperName),
19
21
  getTronTransactionFees: input => thorchain_utils_1.tron.getTronTransactionFees(input, swapperName),
20
22
  getUnsignedCosmosSdkTransaction: async ({ tradeQuote, stepIndex, from, config, assertGetCosmosSdkChainAdapter, }) => {
@@ -37,6 +37,7 @@
37
37
  "ETH.YFI-0X0BC529C00C6401AEF6D220BE8C6EA1667F6AD93E": "eip155:1/erc20:0x0bc529c00c6401aef6d220be8c6ea1667f6ad93e",
38
38
  "GAIA.ATOM": "cosmos:cosmoshub-4/slip44:118",
39
39
  "LTC.LTC": "bip122:12a765e31ffd4059bada1e25190f6e98/slip44:2",
40
+ "SOL.SOL": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/slip44:501",
40
41
  "THOR.RUJI": "cosmos:thorchain-1/slip44:ruji",
41
42
  "THOR.TCY": "cosmos:thorchain-1/slip44:tcy",
42
43
  "TRON.TRX": "tron:0x2b6653dc/slip44:195",
@@ -1,5 +1,5 @@
1
1
  import type { AssetId } from '@shapeshiftoss/caip';
2
- export declare const assetIdToThorPoolAssetIdMap: import("lodash").Dictionary<string>;
2
+ export declare const assetIdToThorPoolAssetIdMap: Record<string, string>;
3
3
  export declare const thorPoolAssetIdToAssetId: (id: string) => AssetId | undefined;
4
4
  export declare const assetIdToThorPoolAssetId: ({ assetId }: {
5
5
  assetId: AssetId;
@@ -8,7 +8,8 @@ const invert_1 = __importDefault(require("lodash/invert"));
8
8
  const generatedTradableAssetMap_json_1 = __importDefault(require("../../generated/generatedTradableAssetMap.json"));
9
9
  const thorPoolIdAssetIdSymbolMap = generatedTradableAssetMap_json_1.default;
10
10
  exports.assetIdToThorPoolAssetIdMap = (0, invert_1.default)(thorPoolIdAssetIdSymbolMap);
11
+ const assetIdToThorPoolAssetIdMapLower = Object.fromEntries(Object.entries(exports.assetIdToThorPoolAssetIdMap).map(([k, v]) => [k.toLowerCase(), v]));
11
12
  const thorPoolAssetIdToAssetId = (id) => thorPoolIdAssetIdSymbolMap[id.toUpperCase()];
12
13
  exports.thorPoolAssetIdToAssetId = thorPoolAssetIdToAssetId;
13
- const assetIdToThorPoolAssetId = ({ assetId }) => exports.assetIdToThorPoolAssetIdMap[assetId.toLowerCase()];
14
+ const assetIdToThorPoolAssetId = ({ assetId }) => assetIdToThorPoolAssetIdMapLower[assetId.toLowerCase()];
14
15
  exports.assetIdToThorPoolAssetId = assetIdToThorPoolAssetId;
@@ -18,6 +18,10 @@ const poolAssetHelpers_1 = require("./poolAssetHelpers");
18
18
  const result = (0, poolAssetHelpers_1.thorPoolAssetIdToAssetId)('ETH.USDC-0XA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48');
19
19
  (0, vitest_1.expect)(result).toEqual(usdcAssetId);
20
20
  });
21
+ (0, vitest_1.it)('returns Solana assetId when poolAssetId is SOL.SOL', () => {
22
+ const result = (0, poolAssetHelpers_1.thorPoolAssetIdToAssetId)('SOL.SOL');
23
+ (0, vitest_1.expect)(result).toEqual(caip_1.solAssetId);
24
+ });
21
25
  (0, vitest_1.it)('returns undefined for an asset we dont support', () => {
22
26
  const result = (0, poolAssetHelpers_1.thorPoolAssetIdToAssetId)('BNB.AVA-645');
23
27
  (0, vitest_1.expect)(result).toEqual(undefined);
@@ -46,6 +50,12 @@ const poolAssetHelpers_1 = require("./poolAssetHelpers");
46
50
  const poolAssetId = 'ETH.USDC-0XA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48';
47
51
  (0, vitest_1.expect)(result).toEqual(poolAssetId);
48
52
  });
53
+ (0, vitest_1.it)('returns SOL pool when assetId is solAssetId (base58 case-sensitive)', () => {
54
+ const assetId = caip_1.solAssetId;
55
+ const result = (0, poolAssetHelpers_1.assetIdToThorPoolAssetId)({ assetId });
56
+ const poolAssetId = 'SOL.SOL';
57
+ (0, vitest_1.expect)(result).toEqual(poolAssetId);
58
+ });
49
59
  (0, vitest_1.it)('returns undefined for an unsupported asset', () => {
50
60
  const assetId = 'foobar';
51
61
  const result = (0, poolAssetHelpers_1.assetIdToThorPoolAssetId)({ assetId });
@@ -9,6 +9,7 @@ const uuid_1 = require("uuid");
9
9
  const constants_1 = require("../../../constants");
10
10
  const types_1 = require("../../../types");
11
11
  const utils_2 = require("../../../utils");
12
+ const affiliateFee_1 = require("../../utils/affiliateFee");
12
13
  const helpers_1 = require("../../utils/helpers/helpers");
13
14
  const fetchFromZrx_1 = require("../utils/fetchFromZrx");
14
15
  const helpers_2 = require("../utils/helpers/helpers");
@@ -99,6 +100,14 @@ async function getZrxTradeQuote(input, assertGetEvmChainAdapter, assetsById, zrx
99
100
  buyAmountAfterFeesCryptoBaseUnit: buyAmount,
100
101
  sellAmountIncludingProtocolFeesCryptoBaseUnit,
101
102
  source: types_1.SwapperName.Zrx,
103
+ affiliateFee: (0, affiliateFee_1.buildAffiliateFee)({
104
+ strategy: 'buy_asset',
105
+ affiliateBps,
106
+ sellAsset,
107
+ buyAsset,
108
+ sellAmountCryptoBaseUnit: sellAmountIncludingProtocolFeesCryptoBaseUnit,
109
+ buyAmountCryptoBaseUnit: buyAmount,
110
+ }),
102
111
  permit2Eip712: permit2Eip712,
103
112
  zrxTransactionMetadata: transactionMetadata,
104
113
  },
@@ -6,6 +6,7 @@ const monads_1 = require("@sniptt/monads");
6
6
  const uuid_1 = require("uuid");
7
7
  const constants_1 = require("../../../constants");
8
8
  const types_1 = require("../../../types");
9
+ const affiliateFee_1 = require("../../utils/affiliateFee");
9
10
  const helpers_1 = require("../../utils/helpers/helpers");
10
11
  const fetchFromZrx_1 = require("../utils/fetchFromZrx");
11
12
  const helpers_2 = require("../utils/helpers/helpers");
@@ -65,6 +66,14 @@ async function getZrxTradeRate(input, assetsById, zrxBaseUrl) {
65
66
  buyAmountAfterFeesCryptoBaseUnit: buyAmount,
66
67
  sellAmountIncludingProtocolFeesCryptoBaseUnit,
67
68
  source: types_1.SwapperName.Zrx,
69
+ affiliateFee: (0, affiliateFee_1.buildAffiliateFee)({
70
+ strategy: 'buy_asset',
71
+ affiliateBps,
72
+ sellAsset,
73
+ buyAsset,
74
+ sellAmountCryptoBaseUnit: sellAmountIncludingProtocolFeesCryptoBaseUnit,
75
+ buyAmountCryptoBaseUnit: buyAmount,
76
+ }),
68
77
  },
69
78
  ],
70
79
  });
@@ -0,0 +1,17 @@
1
+ import type { AssetId } from '@shapeshiftoss/caip';
2
+ import type { Asset } from '@shapeshiftoss/types';
3
+ import type { AffiliateFee } from '../../types';
4
+ export type AffiliateFeeStrategy = 'buy_asset' | 'sell_asset' | 'fixed_asset';
5
+ type BuildAffiliateFeeParams = {
6
+ strategy: AffiliateFeeStrategy;
7
+ affiliateBps: string;
8
+ sellAsset: Asset;
9
+ buyAsset: Asset;
10
+ sellAmountCryptoBaseUnit: string;
11
+ buyAmountCryptoBaseUnit: string;
12
+ fixedAsset?: Asset;
13
+ fixedAssetId?: AssetId;
14
+ isEstimate?: boolean;
15
+ };
16
+ export declare const buildAffiliateFee: (params: BuildAffiliateFeeParams) => AffiliateFee | undefined;
17
+ export {};
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildAffiliateFee = void 0;
4
+ const utils_1 = require("@shapeshiftoss/utils");
5
+ const buildAffiliateFee = (params) => {
6
+ const { strategy, affiliateBps, sellAsset, buyAsset, sellAmountCryptoBaseUnit, buyAmountCryptoBaseUnit, fixedAsset, fixedAssetId, isEstimate, } = params;
7
+ if ((0, utils_1.bnOrZero)(affiliateBps).lte(0))
8
+ return undefined;
9
+ const bpsDecimal = (0, utils_1.bn)(affiliateBps).div(10000);
10
+ switch (strategy) {
11
+ case 'buy_asset': {
12
+ const feeAmount = (0, utils_1.bnOrZero)(buyAmountCryptoBaseUnit).times(bpsDecimal).toFixed(0);
13
+ return {
14
+ assetId: buyAsset.assetId,
15
+ amountCryptoBaseUnit: feeAmount,
16
+ asset: buyAsset,
17
+ isEstimate,
18
+ };
19
+ }
20
+ case 'sell_asset': {
21
+ const feeAmount = (0, utils_1.bnOrZero)(sellAmountCryptoBaseUnit).times(bpsDecimal).toFixed(0);
22
+ return {
23
+ assetId: sellAsset.assetId,
24
+ amountCryptoBaseUnit: feeAmount,
25
+ asset: sellAsset,
26
+ isEstimate,
27
+ };
28
+ }
29
+ case 'fixed_asset': {
30
+ if (!fixedAsset || !fixedAssetId)
31
+ return undefined;
32
+ return {
33
+ assetId: fixedAssetId,
34
+ amountCryptoBaseUnit: '0',
35
+ asset: fixedAsset,
36
+ isEstimate: true,
37
+ };
38
+ }
39
+ default:
40
+ return undefined;
41
+ }
42
+ };
43
+ exports.buildAffiliateFee = buildAffiliateFee;
@@ -28,21 +28,25 @@ const caip_1 = require("@shapeshiftoss/caip");
28
28
  const adapters = __importStar(require("@shapeshiftoss/chain-adapters"));
29
29
  const utils_1 = require("@shapeshiftoss/utils");
30
30
  const monads_1 = require("@sniptt/monads");
31
+ const web3_js_1 = require("@solana/web3.js");
31
32
  const tronweb_1 = require("tronweb");
32
33
  const uuid_1 = require("uuid");
33
34
  const index_1 = require("../index");
35
+ const affiliateFee_1 = require("../swappers/utils/affiliateFee");
34
36
  const types_1 = require("../types");
35
37
  const utils_2 = require("../utils");
36
38
  const evm = __importStar(require("./evm"));
37
39
  const getLimitWithManualSlippage_1 = require("./getLimitWithManualSlippage/getLimitWithManualSlippage");
38
40
  const getQuote_1 = require("./getQuote");
39
41
  const index_2 = require("./index");
42
+ const solana = __importStar(require("./solana"));
40
43
  const tron = __importStar(require("./tron"));
41
44
  const utxo = __importStar(require("./utxo"));
42
45
  const SAFE_GAS_LIMIT = '100000'; // depositWithExpiry()
46
+ const SOLANA_MEMO_PROGRAM_ID = 'MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr';
43
47
  const getL1RateOrQuote = async (input, deps, streamingInterval, tradeType, swapperName) => {
44
48
  const { sellAsset, buyAsset, sellAmountIncludingProtocolFeesCryptoBaseUnit: sellAmountCryptoBaseUnit, accountNumber, receiveAddress, affiliateBps: requestedAffiliateBps, } = input;
45
- const { config, assertGetEvmChainAdapter, assertGetUtxoChainAdapter, assertGetCosmosSdkChainAdapter, } = deps;
49
+ const { config, assertGetEvmChainAdapter, assertGetUtxoChainAdapter, assertGetCosmosSdkChainAdapter, assertGetSolanaChainAdapter, } = deps;
46
50
  // "NativePrecision" is intended to indicate the base unit precision of the asset
47
51
  // for the corresponding swapper network (THORChain or MAYAChain)
48
52
  // (CACAO = 10, everything else = 8)
@@ -193,6 +197,14 @@ const getL1RateOrQuote = async (input, deps, streamingInterval, tradeType, swapp
193
197
  accountNumber,
194
198
  allowanceContract,
195
199
  feeData,
200
+ affiliateFee: (0, affiliateFee_1.buildAffiliateFee)({
201
+ strategy: 'buy_asset',
202
+ affiliateBps: route.affiliateBps,
203
+ sellAsset,
204
+ buyAsset,
205
+ sellAmountCryptoBaseUnit,
206
+ buyAmountCryptoBaseUnit: buyAmountAfterFeesCryptoBaseUnit,
207
+ }),
196
208
  thorchainSpecific: {
197
209
  maxStreamingQuantity: route.quote.max_streaming_quantity,
198
210
  },
@@ -305,10 +317,51 @@ const getL1RateOrQuote = async (input, deps, streamingInterval, tradeType, swapp
305
317
  }));
306
318
  }
307
319
  case caip_1.CHAIN_NAMESPACE.Solana: {
308
- return (0, monads_1.Err)((0, utils_2.makeSwapErrorRight)({
309
- message: 'Solana is not supported',
310
- code: types_1.TradeQuoteError.UnsupportedTradePair,
320
+ const adapter = assertGetSolanaChainAdapter(sellAsset.chainId);
321
+ const sendAddress = input.sendAddress;
322
+ const maybeRoutes = await Promise.allSettled(perRouteValues.map(async (route) => {
323
+ const memo = getMemo(route);
324
+ const protocolFees = getProtocolFees(route.quote);
325
+ const feeData = await (async () => {
326
+ if (!sendAddress)
327
+ return { networkFeeCryptoBaseUnit: undefined, protocolFees };
328
+ const { vault } = await solana.getThorTxData({ sellAsset, config, swapperName });
329
+ const memoInstruction = new web3_js_1.TransactionInstruction({
330
+ keys: [],
331
+ programId: new web3_js_1.PublicKey(SOLANA_MEMO_PROGRAM_ID),
332
+ data: Buffer.from(memo, 'utf8'),
333
+ });
334
+ const transferInstruction = web3_js_1.SystemProgram.transfer({
335
+ fromPubkey: new web3_js_1.PublicKey(sendAddress),
336
+ toPubkey: new web3_js_1.PublicKey(vault),
337
+ lamports: BigInt(sellAmountCryptoBaseUnit),
338
+ });
339
+ const { fast } = await adapter.getFeeData({
340
+ to: vault,
341
+ value: '0',
342
+ chainSpecific: {
343
+ from: sendAddress,
344
+ tokenId: (0, utils_1.contractAddressOrUndefined)(sellAsset.assetId),
345
+ instructions: [memoInstruction, transferInstruction],
346
+ },
347
+ });
348
+ return { networkFeeCryptoBaseUnit: fast.txFee, protocolFees };
349
+ })();
350
+ return makeThorTradeRateOrQuote({
351
+ route,
352
+ allowanceContract: '0x0',
353
+ memo,
354
+ feeData,
355
+ });
311
356
  }));
357
+ const routes = maybeRoutes.filter(utils_1.isFulfilled).map(r => r.value);
358
+ if (!routes.length)
359
+ return (0, monads_1.Err)((0, utils_2.makeSwapErrorRight)({
360
+ message: 'Unable to create any routes',
361
+ code: types_1.TradeQuoteError.UnsupportedTradePair,
362
+ cause: maybeRoutes.filter(utils_1.isRejected).map(r => r.reason),
363
+ }));
364
+ return (0, monads_1.Ok)(routes);
312
365
  }
313
366
  case caip_1.CHAIN_NAMESPACE.Tron: {
314
367
  const maybeRoutes = await Promise.allSettled(perRouteValues.map(async (route) => {
@@ -13,6 +13,7 @@ export * from './getL1RateOrQuote';
13
13
  export * from './getPoolDetails';
14
14
  export * as cosmossdk from './cosmossdk';
15
15
  export * as evm from './evm';
16
+ export * as solana from './solana';
16
17
  export * as tron from './tron';
17
18
  export * as utxo from './utxo';
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, }: {
@@ -26,7 +26,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
26
26
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.getSwapSource = exports.getPoolAssetId = exports.getAffiliate = exports.getNativeFee = exports.getNativePrecision = exports.isNativeAsset = exports.getMidgardUrl = exports.getDaemonUrl = exports.isThorTradeQuote = exports.isThorTradeRate = exports.getChainIdBySwapper = exports.utxo = exports.tron = exports.evm = exports.cosmossdk = void 0;
29
+ exports.getSwapSource = exports.getPoolAssetId = exports.getAffiliate = exports.getNativeFee = exports.getNativePrecision = exports.isNativeAsset = exports.getMidgardUrl = exports.getDaemonUrl = exports.isThorTradeQuote = exports.isThorTradeRate = exports.getChainIdBySwapper = exports.utxo = exports.tron = exports.solana = exports.evm = exports.cosmossdk = void 0;
30
30
  const caip_1 = require("@shapeshiftoss/caip");
31
31
  const adapters = __importStar(require("@shapeshiftoss/chain-adapters"));
32
32
  const MayachainSwapper_1 = require("../swappers/MayachainSwapper");
@@ -43,6 +43,7 @@ __exportStar(require("./getL1RateOrQuote"), exports);
43
43
  __exportStar(require("./getPoolDetails"), exports);
44
44
  exports.cosmossdk = __importStar(require("./cosmossdk"));
45
45
  exports.evm = __importStar(require("./evm"));
46
+ exports.solana = __importStar(require("./solana"));
46
47
  exports.tron = __importStar(require("./tron"));
47
48
  exports.utxo = __importStar(require("./utxo"));
48
49
  const getChainIdBySwapper = (swapperName) => {
@@ -0,0 +1 @@
1
+ export declare const MEMO_PROGRAM_ID = "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr";
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MEMO_PROGRAM_ID = void 0;
4
+ // Solana Memo Program v2
5
+ // https://spl.solana.com/memo
6
+ exports.MEMO_PROGRAM_ID = 'MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr';
@@ -0,0 +1,2 @@
1
+ import type { GetUnsignedSolanaTransactionArgs, SwapperName } from '../../types';
2
+ export declare const getSolanaTransactionFees: (args: GetUnsignedSolanaTransactionArgs, swapperName: SwapperName) => Promise<string>;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getSolanaTransactionFees = void 0;
4
+ const utils_1 = require("@shapeshiftoss/utils");
5
+ const web3_js_1 = require("@solana/web3.js");
6
+ const utils_2 = require("../../utils");
7
+ const getThorTxData_1 = require("./getThorTxData");
8
+ const MEMO_PROGRAM_ID = 'MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr';
9
+ const getSolanaTransactionFees = async (args, swapperName) => {
10
+ const { tradeQuote, stepIndex, from, assertGetSolanaChainAdapter, config } = args;
11
+ if (!(0, utils_2.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 = (0, utils_2.getExecutableTradeStep)(tradeQuote, stepIndex);
17
+ const { sellAmountIncludingProtocolFeesCryptoBaseUnit, sellAsset } = step;
18
+ const { vault } = await (0, getThorTxData_1.getThorTxData)({ sellAsset, config, swapperName });
19
+ const adapter = assertGetSolanaChainAdapter(sellAsset.chainId);
20
+ const memoInstruction = new web3_js_1.TransactionInstruction({
21
+ keys: [],
22
+ programId: new web3_js_1.PublicKey(MEMO_PROGRAM_ID),
23
+ data: Buffer.from(memo, 'utf8'),
24
+ });
25
+ const transferInstruction = web3_js_1.SystemProgram.transfer({
26
+ fromPubkey: new web3_js_1.PublicKey(from),
27
+ toPubkey: new web3_js_1.PublicKey(vault),
28
+ lamports: BigInt(sellAmountIncludingProtocolFeesCryptoBaseUnit),
29
+ });
30
+ const { fast } = await adapter.getFeeData({
31
+ to: vault,
32
+ value: '0',
33
+ chainSpecific: {
34
+ from,
35
+ tokenId: (0, utils_1.contractAddressOrUndefined)(sellAsset.assetId),
36
+ instructions: [memoInstruction, transferInstruction],
37
+ },
38
+ });
39
+ return fast.txFee;
40
+ };
41
+ exports.getSolanaTransactionFees = getSolanaTransactionFees;