@shapeshiftoss/swapper 17.6.10 → 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 (192) hide show
  1. package/LICENSE.md +21 -0
  2. package/dist/cjs/.tsbuildinfo +1 -1
  3. package/dist/cjs/constants.js +29 -18
  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/constant.js +2 -0
  9. package/dist/cjs/swappers/AcrossSwapper/utils/getTrade.js +15 -1
  10. package/dist/cjs/swappers/AvnuSwapper/swapperApi/getTradeQuote.js +9 -0
  11. package/dist/cjs/swappers/AvnuSwapper/swapperApi/getTradeRate.js +9 -0
  12. package/dist/cjs/swappers/BebopSwapper/BebopSwapper.js +2 -0
  13. package/dist/cjs/swappers/BebopSwapper/endpoints.js +35 -2
  14. package/dist/cjs/swappers/BebopSwapper/executeSolanaMessage.d.ts +2 -0
  15. package/dist/cjs/swappers/BebopSwapper/executeSolanaMessage.js +47 -0
  16. package/dist/cjs/swappers/BebopSwapper/getBebopSolanaTradeQuote/getBebopSolanaTradeQuote.d.ts +4 -0
  17. package/dist/cjs/swappers/BebopSwapper/getBebopSolanaTradeQuote/getBebopSolanaTradeQuote.js +91 -0
  18. package/dist/cjs/swappers/BebopSwapper/getBebopSolanaTradeRate/getBebopSolanaTradeRate.d.ts +4 -0
  19. package/dist/cjs/swappers/BebopSwapper/getBebopSolanaTradeRate/getBebopSolanaTradeRate.js +88 -0
  20. package/dist/cjs/swappers/BebopSwapper/getBebopTradeQuote/getBebopTradeQuote.js +10 -0
  21. package/dist/cjs/swappers/BebopSwapper/getBebopTradeRate/getBebopTradeRate.js +10 -0
  22. package/dist/cjs/swappers/BebopSwapper/types.d.ts +49 -1
  23. package/dist/cjs/swappers/BebopSwapper/types.js +9 -2
  24. package/dist/cjs/swappers/BebopSwapper/utils/fetchFromBebop.d.ts +19 -1
  25. package/dist/cjs/swappers/BebopSwapper/utils/fetchFromBebop.js +86 -1
  26. package/dist/cjs/swappers/BebopSwapper/utils/helpers/helpers.d.ts +13 -1
  27. package/dist/cjs/swappers/BebopSwapper/utils/helpers/helpers.js +47 -1
  28. package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeQuote.js +17 -1
  29. package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeRate.js +10 -0
  30. package/dist/cjs/swappers/CetusSwapper/swapperApi/getTradeQuote.js +10 -0
  31. package/dist/cjs/swappers/CetusSwapper/swapperApi/getTradeRate.js +10 -0
  32. package/dist/cjs/swappers/CetusSwapper/utils/helpers.d.ts +1 -1
  33. package/dist/cjs/swappers/CetusSwapper/utils/helpers.js +1 -1
  34. package/dist/cjs/swappers/ChainflipSwapper/constants.js +7 -3
  35. package/dist/cjs/swappers/ChainflipSwapper/utils/getQuoteOrRate.js +17 -0
  36. package/dist/cjs/swappers/CowSwapper/getCowSwapTradeQuote/getCowSwapTradeQuote.js +10 -0
  37. package/dist/cjs/swappers/CowSwapper/getCowSwapTradeRate/getCowSwapTradeRate.js +9 -0
  38. package/dist/cjs/swappers/DebridgeSwapper/DebridgeSwapper.d.ts +2 -0
  39. package/dist/cjs/swappers/DebridgeSwapper/DebridgeSwapper.js +7 -0
  40. package/dist/cjs/swappers/DebridgeSwapper/constant.d.ts +5 -0
  41. package/dist/cjs/swappers/DebridgeSwapper/constant.js +36 -0
  42. package/dist/cjs/swappers/DebridgeSwapper/endpoints.d.ts +2 -0
  43. package/dist/cjs/swappers/DebridgeSwapper/endpoints.js +217 -0
  44. package/dist/cjs/swappers/DebridgeSwapper/getTradeQuote/getTradeQuote.d.ts +3 -0
  45. package/dist/cjs/swappers/DebridgeSwapper/getTradeQuote/getTradeQuote.js +31 -0
  46. package/dist/cjs/swappers/DebridgeSwapper/getTradeRate/getTradeRate.d.ts +3 -0
  47. package/dist/cjs/swappers/DebridgeSwapper/getTradeRate/getTradeRate.js +19 -0
  48. package/dist/cjs/swappers/DebridgeSwapper/index.d.ts +1 -0
  49. package/dist/cjs/swappers/DebridgeSwapper/index.js +5 -0
  50. package/dist/cjs/swappers/DebridgeSwapper/utils/debridgeService.d.ts +5 -0
  51. package/dist/cjs/swappers/DebridgeSwapper/utils/debridgeService.js +17 -0
  52. package/dist/cjs/swappers/DebridgeSwapper/utils/fetchDebridgeSingleChainTrade.d.ts +16 -0
  53. package/dist/cjs/swappers/DebridgeSwapper/utils/fetchDebridgeSingleChainTrade.js +23 -0
  54. package/dist/cjs/swappers/DebridgeSwapper/utils/fetchDebridgeTrade.d.ts +20 -0
  55. package/dist/cjs/swappers/DebridgeSwapper/utils/fetchDebridgeTrade.js +29 -0
  56. package/dist/cjs/swappers/DebridgeSwapper/utils/getTrade.d.ts +11 -0
  57. package/dist/cjs/swappers/DebridgeSwapper/utils/getTrade.js +369 -0
  58. package/dist/cjs/swappers/DebridgeSwapper/utils/types.d.ts +155 -0
  59. package/dist/cjs/swappers/DebridgeSwapper/utils/types.js +9 -0
  60. package/dist/cjs/swappers/JupiterSwapper/swapperApi/getTradeQuote.js +32 -0
  61. package/dist/cjs/swappers/JupiterSwapper/swapperApi/getTradeRate.js +9 -0
  62. package/dist/cjs/swappers/MayachainSwapper/utils/poolAssetHelpers/poolAssetHelpers.js +1 -1
  63. package/dist/cjs/swappers/NearIntentsSwapper/swapperApi/getTradeQuote.js +12 -0
  64. package/dist/cjs/swappers/NearIntentsSwapper/swapperApi/getTradeRate.js +12 -0
  65. package/dist/cjs/swappers/PortalsSwapper/getPortalsTradeQuote/getPortalsTradeQuote.js +10 -0
  66. package/dist/cjs/swappers/RelaySwapper/constant.js +4 -3
  67. package/dist/cjs/swappers/RelaySwapper/utils/getTrade.js +44 -5
  68. package/dist/cjs/swappers/RelaySwapper/utils/relayTokenToAssetId.js +17 -7
  69. package/dist/cjs/swappers/StonfiSwapper/swapperApi/getTradeQuote.js +10 -0
  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/thorchain-utils/solana/index.js +19 -0
  95. package/dist/cjs/types.d.ts +44 -5
  96. package/dist/cjs/types.js +1 -0
  97. package/dist/esm/.tsbuildinfo +1 -1
  98. package/dist/esm/constants.js +11 -0
  99. package/dist/esm/cowswap-utils/constants.js +3 -0
  100. package/dist/esm/cowswap-utils/index.js +6 -0
  101. package/dist/esm/index.d.ts +1 -0
  102. package/dist/esm/index.js +1 -0
  103. package/dist/esm/swappers/AcrossSwapper/constant.js +4 -2
  104. package/dist/esm/swappers/AcrossSwapper/utils/getTrade.js +15 -1
  105. package/dist/esm/swappers/AvnuSwapper/swapperApi/getTradeQuote.js +9 -0
  106. package/dist/esm/swappers/AvnuSwapper/swapperApi/getTradeRate.js +9 -0
  107. package/dist/esm/swappers/BebopSwapper/BebopSwapper.js +2 -0
  108. package/dist/esm/swappers/BebopSwapper/endpoints.js +36 -3
  109. package/dist/esm/swappers/BebopSwapper/executeSolanaMessage.d.ts +2 -0
  110. package/dist/esm/swappers/BebopSwapper/executeSolanaMessage.js +40 -0
  111. package/dist/esm/swappers/BebopSwapper/getBebopSolanaTradeQuote/getBebopSolanaTradeQuote.d.ts +4 -0
  112. package/dist/esm/swappers/BebopSwapper/getBebopSolanaTradeQuote/getBebopSolanaTradeQuote.js +87 -0
  113. package/dist/esm/swappers/BebopSwapper/getBebopSolanaTradeRate/getBebopSolanaTradeRate.d.ts +4 -0
  114. package/dist/esm/swappers/BebopSwapper/getBebopSolanaTradeRate/getBebopSolanaTradeRate.js +84 -0
  115. package/dist/esm/swappers/BebopSwapper/getBebopTradeQuote/getBebopTradeQuote.js +10 -0
  116. package/dist/esm/swappers/BebopSwapper/getBebopTradeRate/getBebopTradeRate.js +10 -0
  117. package/dist/esm/swappers/BebopSwapper/types.d.ts +49 -1
  118. package/dist/esm/swappers/BebopSwapper/types.js +8 -1
  119. package/dist/esm/swappers/BebopSwapper/utils/fetchFromBebop.d.ts +19 -1
  120. package/dist/esm/swappers/BebopSwapper/utils/fetchFromBebop.js +85 -2
  121. package/dist/esm/swappers/BebopSwapper/utils/helpers/helpers.d.ts +13 -1
  122. package/dist/esm/swappers/BebopSwapper/utils/helpers/helpers.js +44 -1
  123. package/dist/esm/swappers/ButterSwap/swapperApi/getTradeQuote.js +17 -1
  124. package/dist/esm/swappers/ButterSwap/swapperApi/getTradeRate.js +10 -0
  125. package/dist/esm/swappers/CetusSwapper/swapperApi/getTradeQuote.js +10 -0
  126. package/dist/esm/swappers/CetusSwapper/swapperApi/getTradeRate.js +10 -0
  127. package/dist/esm/swappers/CetusSwapper/utils/helpers.d.ts +1 -1
  128. package/dist/esm/swappers/CetusSwapper/utils/helpers.js +1 -1
  129. package/dist/esm/swappers/ChainflipSwapper/constants.js +8 -4
  130. package/dist/esm/swappers/ChainflipSwapper/utils/getQuoteOrRate.js +17 -0
  131. package/dist/esm/swappers/CowSwapper/getCowSwapTradeQuote/getCowSwapTradeQuote.js +10 -0
  132. package/dist/esm/swappers/CowSwapper/getCowSwapTradeRate/getCowSwapTradeRate.js +9 -0
  133. package/dist/esm/swappers/DebridgeSwapper/DebridgeSwapper.d.ts +2 -0
  134. package/dist/esm/swappers/DebridgeSwapper/DebridgeSwapper.js +4 -0
  135. package/dist/esm/swappers/DebridgeSwapper/constant.d.ts +5 -0
  136. package/dist/esm/swappers/DebridgeSwapper/constant.js +30 -0
  137. package/dist/esm/swappers/DebridgeSwapper/endpoints.d.ts +2 -0
  138. package/dist/esm/swappers/DebridgeSwapper/endpoints.js +211 -0
  139. package/dist/esm/swappers/DebridgeSwapper/getTradeQuote/getTradeQuote.d.ts +3 -0
  140. package/dist/esm/swappers/DebridgeSwapper/getTradeQuote/getTradeQuote.js +27 -0
  141. package/dist/esm/swappers/DebridgeSwapper/getTradeRate/getTradeRate.d.ts +3 -0
  142. package/dist/esm/swappers/DebridgeSwapper/getTradeRate/getTradeRate.js +15 -0
  143. package/dist/esm/swappers/DebridgeSwapper/index.d.ts +1 -0
  144. package/dist/esm/swappers/DebridgeSwapper/index.js +1 -0
  145. package/dist/esm/swappers/DebridgeSwapper/utils/debridgeService.d.ts +5 -0
  146. package/dist/esm/swappers/DebridgeSwapper/utils/debridgeService.js +11 -0
  147. package/dist/esm/swappers/DebridgeSwapper/utils/fetchDebridgeSingleChainTrade.d.ts +16 -0
  148. package/dist/esm/swappers/DebridgeSwapper/utils/fetchDebridgeSingleChainTrade.js +19 -0
  149. package/dist/esm/swappers/DebridgeSwapper/utils/fetchDebridgeTrade.d.ts +20 -0
  150. package/dist/esm/swappers/DebridgeSwapper/utils/fetchDebridgeTrade.js +25 -0
  151. package/dist/esm/swappers/DebridgeSwapper/utils/getTrade.d.ts +11 -0
  152. package/dist/esm/swappers/DebridgeSwapper/utils/getTrade.js +362 -0
  153. package/dist/esm/swappers/DebridgeSwapper/utils/types.d.ts +155 -0
  154. package/dist/esm/swappers/DebridgeSwapper/utils/types.js +5 -0
  155. package/dist/esm/swappers/JupiterSwapper/swapperApi/getTradeQuote.js +33 -1
  156. package/dist/esm/swappers/JupiterSwapper/swapperApi/getTradeRate.js +9 -0
  157. package/dist/esm/swappers/MayachainSwapper/utils/poolAssetHelpers/poolAssetHelpers.js +1 -1
  158. package/dist/esm/swappers/NearIntentsSwapper/swapperApi/getTradeQuote.js +14 -2
  159. package/dist/esm/swappers/NearIntentsSwapper/swapperApi/getTradeRate.js +14 -2
  160. package/dist/esm/swappers/PortalsSwapper/getPortalsTradeQuote/getPortalsTradeQuote.js +10 -0
  161. package/dist/esm/swappers/RelaySwapper/constant.js +6 -5
  162. package/dist/esm/swappers/RelaySwapper/utils/getTrade.js +47 -8
  163. package/dist/esm/swappers/RelaySwapper/utils/relayTokenToAssetId.js +17 -7
  164. package/dist/esm/swappers/StonfiSwapper/swapperApi/getTradeQuote.js +10 -0
  165. package/dist/esm/swappers/StonfiSwapper/swapperApi/getTradeRate.js +10 -0
  166. package/dist/esm/swappers/SunioSwapper/utils/getQuoteOrRate.js +10 -0
  167. package/dist/esm/swappers/ThorchainSwapper/ThorchainSwapper.js +3 -0
  168. package/dist/esm/swappers/ThorchainSwapper/endpoints.js +3 -1
  169. package/dist/esm/swappers/ThorchainSwapper/generated/generatedTradableAssetMap.json +1 -0
  170. package/dist/esm/swappers/ThorchainSwapper/utils/poolAssetHelpers/poolAssetHelpers.d.ts +1 -1
  171. package/dist/esm/swappers/ThorchainSwapper/utils/poolAssetHelpers/poolAssetHelpers.js +2 -1
  172. package/dist/esm/swappers/ThorchainSwapper/utils/poolAssetHelpers/poolAssetHelpers.test.js +11 -1
  173. package/dist/esm/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.js +9 -0
  174. package/dist/esm/swappers/ZrxSwapper/getZrxTradeRate/getZrxTradeRate.js +9 -0
  175. package/dist/esm/swappers/utils/affiliateFee.d.ts +17 -0
  176. package/dist/esm/swappers/utils/affiliateFee.js +39 -0
  177. package/dist/esm/thorchain-utils/getL1RateOrQuote.js +57 -4
  178. package/dist/esm/thorchain-utils/index.d.ts +2 -1
  179. package/dist/esm/thorchain-utils/index.js +1 -0
  180. package/dist/esm/thorchain-utils/solana/constants.d.ts +1 -0
  181. package/dist/esm/thorchain-utils/solana/constants.js +3 -0
  182. package/dist/esm/thorchain-utils/solana/getSolanaTransactionFees.d.ts +2 -0
  183. package/dist/esm/thorchain-utils/solana/getSolanaTransactionFees.js +37 -0
  184. package/dist/esm/thorchain-utils/solana/getThorTxData.d.ts +12 -0
  185. package/dist/esm/thorchain-utils/solana/getThorTxData.js +10 -0
  186. package/dist/esm/thorchain-utils/solana/getUnsignedSolanaTransaction.d.ts +3 -0
  187. package/dist/esm/thorchain-utils/solana/getUnsignedSolanaTransaction.js +60 -0
  188. package/dist/esm/thorchain-utils/solana/index.d.ts +3 -0
  189. package/dist/esm/thorchain-utils/solana/index.js +3 -0
  190. package/dist/esm/types.d.ts +44 -5
  191. package/dist/esm/types.js +1 -0
  192. package/package.json +19 -18
@@ -9,6 +9,7 @@ const viem_1 = require("viem");
9
9
  const __1 = require("../../..");
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 constants_1 = require("../constants");
14
15
  const fetchPortalsTradeOrder_1 = require("../utils/fetchPortalsTradeOrder");
@@ -204,6 +205,15 @@ async function getPortalsTradeQuote(input, assertGetEvmChainAdapter, swapperConf
204
205
  steps: portalsTradeOrderResponse.context.steps,
205
206
  route: portalsTradeOrderResponse.context.route,
206
207
  },
208
+ affiliateFee: (0, affiliateFee_1.buildAffiliateFee)({
209
+ strategy: 'buy_asset',
210
+ affiliateBps,
211
+ sellAsset,
212
+ buyAsset,
213
+ sellAmountCryptoBaseUnit: input.sellAmountIncludingProtocolFeesCryptoBaseUnit,
214
+ buyAmountCryptoBaseUnit: buyAmountAfterFeesCryptoBaseUnit,
215
+ isEstimate: true,
216
+ }),
207
217
  },
208
218
  ],
209
219
  };
@@ -5,7 +5,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.relayErrorCodeToTradeQuoteError = exports.MAXIMUM_SUPPORTED_RELAY_STEPS = exports.DEFAULT_RELAY_TRON_USER_ADDRESS = exports.DEFAULT_RELAY_SOLANA_USER_ADDRESS = exports.DEFAULT_RELAY_BTC_USER_ADDRESS = exports.DEFAULT_RELAY_EVM_USER_ADDRESS = exports.RELAY_TRON_TOKEN_ADDRESS = exports.RELAY_SOLANA_TOKEN_ADDRESS = exports.RELAY_BTC_TOKEN_ADDRESS = exports.DEFAULT_RELAY_EVM_TOKEN_ADDRESS = exports.relayChainIdToChainId = exports.RelayStatusMessage = exports.chainIdToRelayChainId = void 0;
7
7
  const caip_1 = require("@shapeshiftoss/caip");
8
- const contracts_1 = require("@shapeshiftoss/contracts");
9
8
  const invert_1 = __importDefault(require("lodash/invert"));
10
9
  const viem_1 = require("viem");
11
10
  const chains_1 = require("viem/chains");
@@ -35,10 +34,11 @@ exports.chainIdToRelayChainId = {
35
34
  [caip_1.inkChainId]: chains_1.ink.id,
36
35
  [caip_1.megaethChainId]: 4326,
37
36
  [caip_1.plasmaChainId]: chains_1.plasma.id,
38
- [caip_1.plumeChainId]: chains_1.plumeMainnet.id,
39
37
  [caip_1.katanaChainId]: chains_1.katana.id,
40
- [caip_1.flowEvmChainId]: contracts_1.flowEvmChain.id,
38
+ [caip_1.etherealChainId]: 5064014,
41
39
  [caip_1.celoChainId]: chains_1.celo.id,
40
+ [caip_1.flowEvmChainId]: chains_1.flowMainnet.id,
41
+ [caip_1.plumeChainId]: chains_1.plumeMainnet.id,
42
42
  [caip_1.storyChainId]: chains_1.story.id,
43
43
  [caip_1.zkSyncEraChainId]: chains_1.zksync.id,
44
44
  [caip_1.blastChainId]: chains_1.blast.id,
@@ -53,6 +53,7 @@ exports.chainIdToRelayChainId = {
53
53
  [caip_1.bobChainId]: chains_1.bob.id,
54
54
  [caip_1.modeChainId]: chains_1.mode.id,
55
55
  [caip_1.soneiumChainId]: chains_1.soneium.id,
56
+ [caip_1.seiChainId]: chains_1.sei.id,
56
57
  };
57
58
  var RelayStatusMessage;
58
59
  (function (RelayStatusMessage) {
@@ -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,
@@ -494,8 +522,19 @@ async function getTrade({ input, deps, relayChainMap, }) {
494
522
  estimatedExecutionTimeMs: timeEstimate * 1000,
495
523
  solanaTransactionMetadata,
496
524
  relayTransactionMetadata,
525
+ affiliateFee: (0, affiliateFee_1.buildAffiliateFee)({
526
+ strategy: 'fixed_asset',
527
+ affiliateBps,
528
+ sellAsset,
529
+ buyAsset,
530
+ sellAmountCryptoBaseUnit: sellAmountIncludingProtocolFeesCryptoBaseUnit,
531
+ buyAmountCryptoBaseUnit: buyAmountAfterFeesCryptoBaseUnit,
532
+ fixedAssetId: (0, utils_1.chainIdToFeeAssetId)(caip_1.baseChainId),
533
+ fixedAsset: deps.assetsById[(0, utils_1.chainIdToFeeAssetId)(caip_1.baseChainId)],
534
+ isEstimate: true,
535
+ }),
497
536
  };
498
- });
537
+ }));
499
538
  const baseQuoteOrRate = {
500
539
  id: quote.steps[0].requestId,
501
540
  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,11 @@ 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
+ };
220
230
  default:
221
231
  throw Error(`chainId '${relayToken.chainId}' not supported`);
222
232
  }
@@ -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");
@@ -103,6 +104,15 @@ const getTradeQuote = async (input) => {
103
104
  allowanceContract: '0x0',
104
105
  estimatedExecutionTimeMs: 30000,
105
106
  stonfiSpecific: buildStonfiSpecific(quote, bidAssetAddress, askAssetAddress),
107
+ affiliateFee: (0, affiliateFee_1.buildAffiliateFee)({
108
+ strategy: 'buy_asset',
109
+ affiliateBps,
110
+ sellAsset,
111
+ buyAsset,
112
+ sellAmountCryptoBaseUnit: sellAmountIncludingProtocolFeesCryptoBaseUnit,
113
+ buyAmountCryptoBaseUnit,
114
+ isEstimate: true,
115
+ }),
106
116
  },
107
117
  ],
108
118
  };
@@ -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>;