@shapeshiftoss/swapper 20.1.1 → 20.3.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 (213) hide show
  1. package/dist/cjs/.tsbuildinfo +1 -1
  2. package/dist/cjs/swappers/BebopSwapper/utils/fetchFromBebop.d.ts +1 -2
  3. package/dist/cjs/swappers/BebopSwapper/utils/fetchFromBebop.js +4 -7
  4. package/dist/cjs/swappers/BebopSwapper/utils/getBebopSolanaTradeContext.js +0 -1
  5. package/dist/cjs/swappers/BobGatewaySwapper/BobGatewaySwapper.js +10 -1
  6. package/dist/cjs/swappers/BobGatewaySwapper/endpoints.js +2 -33
  7. package/dist/cjs/swappers/BobGatewaySwapper/swapperApi/getTradeQuote.js +5 -8
  8. package/dist/cjs/swappers/BobGatewaySwapper/swapperApi/getTradeRate.js +1 -2
  9. package/dist/cjs/swappers/BobGatewaySwapper/types.d.ts +3 -3
  10. package/dist/cjs/swappers/BobGatewaySwapper/utils/constants.d.ts +3 -2
  11. package/dist/cjs/swappers/BobGatewaySwapper/utils/constants.js +8 -5
  12. package/dist/cjs/swappers/BobGatewaySwapper/utils/getBobGatewayStepData.d.ts +2 -2
  13. package/dist/cjs/swappers/BobGatewaySwapper/utils/getBobGatewayStepData.js +30 -34
  14. package/dist/cjs/swappers/BobGatewaySwapper/utils/getBobGatewayStepData.test.d.ts +1 -0
  15. package/dist/cjs/swappers/BobGatewaySwapper/utils/getBobGatewayStepData.test.js +117 -0
  16. package/dist/cjs/swappers/BobGatewaySwapper/utils/getBobGatewayTradeContext.js +1 -2
  17. package/dist/cjs/swappers/BobGatewaySwapper/utils/helpers.d.ts +8 -11
  18. package/dist/cjs/swappers/BobGatewaySwapper/utils/helpers.js +36 -31
  19. package/dist/cjs/swappers/ButterSwap/ButterSwap.js +0 -3
  20. package/dist/cjs/swappers/ButterSwap/endpoints.js +0 -3
  21. package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeQuote.js +2 -3
  22. package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeRate.test.js +0 -51
  23. package/dist/cjs/swappers/ButterSwap/types.d.ts +3 -14
  24. package/dist/cjs/swappers/ButterSwap/utils/constants.d.ts +2 -0
  25. package/dist/cjs/swappers/ButterSwap/utils/constants.js +4 -1
  26. package/dist/cjs/swappers/ButterSwap/utils/getButterSwapStepData.d.ts +2 -3
  27. package/dist/cjs/swappers/ButterSwap/utils/getButterSwapStepData.js +42 -65
  28. package/dist/cjs/swappers/ButterSwap/utils/getButterSwapStepData.test.js +115 -73
  29. package/dist/cjs/swappers/ButterSwap/utils/helpers.js +1 -4
  30. package/dist/cjs/swappers/ButterSwap/xhr.js +3 -3
  31. package/dist/cjs/swappers/ChainflipSwapper/endpoints.js +3 -19
  32. package/dist/cjs/swappers/ChainflipSwapper/utils/getChainflipStepData.d.ts +1 -1
  33. package/dist/cjs/swappers/ChainflipSwapper/utils/getChainflipStepData.js +31 -12
  34. package/dist/cjs/swappers/NearIntentsSwapper/constants.d.ts +1 -0
  35. package/dist/cjs/swappers/NearIntentsSwapper/constants.js +3 -1
  36. package/dist/cjs/swappers/NearIntentsSwapper/utils/getNearIntentsStepData.js +10 -5
  37. package/dist/cjs/swappers/NearIntentsSwapper/utils/helpers.js +1 -1
  38. package/dist/cjs/swappers/RelaySwapper/constant.d.ts +1 -1
  39. package/dist/cjs/swappers/RelaySwapper/constant.js +3 -2
  40. package/dist/cjs/swappers/RelaySwapper/getTradeQuote/getTradeQuote.js +1 -2
  41. package/dist/cjs/swappers/RelaySwapper/utils/getRelayAssetAddress.js +2 -1
  42. package/dist/cjs/swappers/RelaySwapper/utils/getRelayStepData.d.ts +2 -3
  43. package/dist/cjs/swappers/RelaySwapper/utils/getRelayStepData.js +46 -13
  44. package/dist/cjs/swappers/RelaySwapper/utils/getRelayStepData.test.d.ts +1 -0
  45. package/dist/cjs/swappers/RelaySwapper/utils/getRelayStepData.test.js +139 -0
  46. package/dist/cjs/swappers/RelaySwapper/utils/helpers.js +1 -2
  47. package/dist/cjs/swappers/RelaySwapper/utils/relayTokenToAssetId.js +1 -1
  48. package/dist/cjs/swappers/RelaySwapper/utils/types.d.ts +1 -4
  49. package/dist/cjs/swappers/SunioSwapper/endpoints.js +3 -63
  50. package/dist/cjs/swappers/SunioSwapper/getSunioTradeQuote/getSunioTradeQuote.js +3 -4
  51. package/dist/cjs/swappers/SunioSwapper/getSunioTradeRate/getSunioTradeRate.js +7 -1
  52. package/dist/cjs/swappers/SunioSwapper/types.d.ts +0 -3
  53. package/dist/cjs/swappers/SunioSwapper/utils/buildSwapContractCall.d.ts +11 -6
  54. package/dist/cjs/swappers/SunioSwapper/utils/buildSwapContractCall.js +33 -30
  55. package/dist/cjs/swappers/SunioSwapper/utils/constants.d.ts +3 -3
  56. package/dist/cjs/swappers/SunioSwapper/utils/constants.js +5 -9
  57. package/dist/cjs/swappers/SunioSwapper/utils/getSunioStepData.d.ts +8 -3
  58. package/dist/cjs/swappers/SunioSwapper/utils/getSunioStepData.js +54 -20
  59. package/dist/cjs/swappers/SunioSwapper/utils/getSunioStepData.test.d.ts +1 -0
  60. package/dist/cjs/swappers/SunioSwapper/utils/getSunioStepData.test.js +177 -0
  61. package/dist/cjs/swappers/SunioSwapper/utils/getSunioTradeContext.js +3 -2
  62. package/dist/cjs/swappers/SunioSwapper/utils/helpers.js +2 -1
  63. package/dist/cjs/swappers/ThorchainSwapper/endpoints.js +3 -4
  64. package/dist/cjs/swappers/ThorchainSwapper/utils/addL1ToLongtailPartsToMemo/addL1ToLongtailPartsToMemo.js +6 -1
  65. package/dist/cjs/swappers/ThorchainSwapper/utils/addL1ToLongtailPartsToMemo/addL1ToLongtailPartsToMemo.test.js +15 -0
  66. package/dist/cjs/swappers/ThorchainSwapper/utils/assertValidLongtailTrade.js +7 -0
  67. package/dist/cjs/swappers/ThorchainSwapper/utils/getL1ToLongtailQuote.js +0 -2
  68. package/dist/cjs/swappers/ThorchainSwapper/utils/getL1ToLongtailRate.js +0 -2
  69. package/dist/cjs/swappers/ThorchainSwapper/utils/getUniqueAddressSubstring/getUniqueAddressSubstring.d.ts +1 -1
  70. package/dist/cjs/swappers/ThorchainSwapper/utils/getUniqueAddressSubstring/getUniqueAddressSubstring.js +17 -20
  71. package/dist/cjs/swappers/ThorchainSwapper/utils/getUniqueAddressSubstring/getUniqueAddressSubstring.test.js +31 -0
  72. package/dist/cjs/types.d.ts +9 -8
  73. package/dist/cjs/utils/helpers.js +3 -0
  74. package/dist/cjs/utils/helpers.test.js +3 -0
  75. package/dist/cjs/utils/thorchain/getThorStepData.js +32 -49
  76. package/dist/cjs/utils/thorchain/getThorStepData.tron.test.d.ts +1 -0
  77. package/dist/cjs/utils/thorchain/getThorStepData.tron.test.js +93 -0
  78. package/dist/cjs/utils/thorchain/index.d.ts +0 -1
  79. package/dist/cjs/utils/thorchain/index.js +1 -14
  80. package/dist/cjs/utils/tron/constants.d.ts +1 -0
  81. package/dist/cjs/utils/tron/constants.js +5 -0
  82. package/dist/cjs/utils/tron/getTronNetworkFeeCryptoBaseUnit.d.ts +27 -0
  83. package/dist/cjs/utils/tron/getTronNetworkFeeCryptoBaseUnit.js +64 -0
  84. package/dist/cjs/utils/tron/getTronNetworkFeeCryptoBaseUnit.test.d.ts +1 -0
  85. package/dist/cjs/utils/tron/getTronNetworkFeeCryptoBaseUnit.test.js +157 -0
  86. package/dist/cjs/utils/tron/getUnsignedTronTransaction.d.ts +2 -1
  87. package/dist/cjs/utils/tron/getUnsignedTronTransaction.js +14 -48
  88. package/dist/cjs/utils/tron/getUnsignedTronTransaction.test.d.ts +1 -0
  89. package/dist/cjs/utils/tron/getUnsignedTronTransaction.test.js +76 -0
  90. package/dist/cjs/utils/tron/index.d.ts +2 -0
  91. package/dist/cjs/utils/tron/index.js +2 -0
  92. package/dist/esm/.tsbuildinfo +1 -1
  93. package/dist/esm/swappers/BebopSwapper/utils/fetchFromBebop.d.ts +1 -2
  94. package/dist/esm/swappers/BebopSwapper/utils/fetchFromBebop.js +4 -7
  95. package/dist/esm/swappers/BebopSwapper/utils/getBebopSolanaTradeContext.js +0 -1
  96. package/dist/esm/swappers/BobGatewaySwapper/BobGatewaySwapper.js +11 -2
  97. package/dist/esm/swappers/BobGatewaySwapper/endpoints.js +5 -36
  98. package/dist/esm/swappers/BobGatewaySwapper/swapperApi/getTradeQuote.js +5 -8
  99. package/dist/esm/swappers/BobGatewaySwapper/swapperApi/getTradeRate.js +1 -2
  100. package/dist/esm/swappers/BobGatewaySwapper/types.d.ts +3 -3
  101. package/dist/esm/swappers/BobGatewaySwapper/utils/constants.d.ts +3 -2
  102. package/dist/esm/swappers/BobGatewaySwapper/utils/constants.js +8 -7
  103. package/dist/esm/swappers/BobGatewaySwapper/utils/getBobGatewayStepData.d.ts +2 -2
  104. package/dist/esm/swappers/BobGatewaySwapper/utils/getBobGatewayStepData.js +21 -25
  105. package/dist/esm/swappers/BobGatewaySwapper/utils/getBobGatewayStepData.test.d.ts +1 -0
  106. package/dist/esm/swappers/BobGatewaySwapper/utils/getBobGatewayStepData.test.js +115 -0
  107. package/dist/esm/swappers/BobGatewaySwapper/utils/getBobGatewayTradeContext.js +1 -2
  108. package/dist/esm/swappers/BobGatewaySwapper/utils/helpers.d.ts +8 -11
  109. package/dist/esm/swappers/BobGatewaySwapper/utils/helpers.js +13 -30
  110. package/dist/esm/swappers/ButterSwap/ButterSwap.js +0 -3
  111. package/dist/esm/swappers/ButterSwap/endpoints.js +0 -3
  112. package/dist/esm/swappers/ButterSwap/swapperApi/getTradeQuote.js +2 -3
  113. package/dist/esm/swappers/ButterSwap/swapperApi/getTradeRate.test.js +1 -49
  114. package/dist/esm/swappers/ButterSwap/types.d.ts +3 -14
  115. package/dist/esm/swappers/ButterSwap/utils/constants.d.ts +2 -0
  116. package/dist/esm/swappers/ButterSwap/utils/constants.js +3 -0
  117. package/dist/esm/swappers/ButterSwap/utils/getButterSwapStepData.d.ts +2 -3
  118. package/dist/esm/swappers/ButterSwap/utils/getButterSwapStepData.js +42 -65
  119. package/dist/esm/swappers/ButterSwap/utils/getButterSwapStepData.test.js +116 -74
  120. package/dist/esm/swappers/ButterSwap/utils/helpers.js +2 -5
  121. package/dist/esm/swappers/ButterSwap/xhr.js +3 -3
  122. package/dist/esm/swappers/ChainflipSwapper/endpoints.js +3 -19
  123. package/dist/esm/swappers/ChainflipSwapper/utils/getChainflipStepData.d.ts +1 -1
  124. package/dist/esm/swappers/ChainflipSwapper/utils/getChainflipStepData.js +32 -13
  125. package/dist/esm/swappers/NearIntentsSwapper/constants.d.ts +1 -0
  126. package/dist/esm/swappers/NearIntentsSwapper/constants.js +2 -0
  127. package/dist/esm/swappers/NearIntentsSwapper/utils/getNearIntentsStepData.js +10 -5
  128. package/dist/esm/swappers/NearIntentsSwapper/utils/helpers.js +2 -2
  129. package/dist/esm/swappers/RelaySwapper/constant.d.ts +1 -1
  130. package/dist/esm/swappers/RelaySwapper/constant.js +2 -1
  131. package/dist/esm/swappers/RelaySwapper/getTradeQuote/getTradeQuote.js +1 -2
  132. package/dist/esm/swappers/RelaySwapper/utils/getRelayAssetAddress.js +3 -2
  133. package/dist/esm/swappers/RelaySwapper/utils/getRelayStepData.d.ts +2 -3
  134. package/dist/esm/swappers/RelaySwapper/utils/getRelayStepData.js +46 -13
  135. package/dist/esm/swappers/RelaySwapper/utils/getRelayStepData.test.d.ts +1 -0
  136. package/dist/esm/swappers/RelaySwapper/utils/getRelayStepData.test.js +137 -0
  137. package/dist/esm/swappers/RelaySwapper/utils/helpers.js +1 -2
  138. package/dist/esm/swappers/RelaySwapper/utils/relayTokenToAssetId.js +3 -3
  139. package/dist/esm/swappers/RelaySwapper/utils/types.d.ts +1 -4
  140. package/dist/esm/swappers/SunioSwapper/endpoints.js +5 -65
  141. package/dist/esm/swappers/SunioSwapper/getSunioTradeQuote/getSunioTradeQuote.js +3 -4
  142. package/dist/esm/swappers/SunioSwapper/getSunioTradeRate/getSunioTradeRate.js +7 -1
  143. package/dist/esm/swappers/SunioSwapper/types.d.ts +0 -3
  144. package/dist/esm/swappers/SunioSwapper/utils/buildSwapContractCall.d.ts +11 -6
  145. package/dist/esm/swappers/SunioSwapper/utils/buildSwapContractCall.js +31 -28
  146. package/dist/esm/swappers/SunioSwapper/utils/constants.d.ts +3 -3
  147. package/dist/esm/swappers/SunioSwapper/utils/constants.js +4 -8
  148. package/dist/esm/swappers/SunioSwapper/utils/getSunioStepData.d.ts +8 -3
  149. package/dist/esm/swappers/SunioSwapper/utils/getSunioStepData.js +52 -18
  150. package/dist/esm/swappers/SunioSwapper/utils/getSunioStepData.test.d.ts +1 -0
  151. package/dist/esm/swappers/SunioSwapper/utils/getSunioStepData.test.js +175 -0
  152. package/dist/esm/swappers/SunioSwapper/utils/getSunioTradeContext.js +2 -1
  153. package/dist/esm/swappers/SunioSwapper/utils/helpers.js +3 -2
  154. package/dist/esm/swappers/ThorchainSwapper/endpoints.js +4 -5
  155. package/dist/esm/swappers/ThorchainSwapper/utils/addL1ToLongtailPartsToMemo/addL1ToLongtailPartsToMemo.js +6 -1
  156. package/dist/esm/swappers/ThorchainSwapper/utils/addL1ToLongtailPartsToMemo/addL1ToLongtailPartsToMemo.test.js +15 -0
  157. package/dist/esm/swappers/ThorchainSwapper/utils/assertValidLongtailTrade.js +7 -0
  158. package/dist/esm/swappers/ThorchainSwapper/utils/getL1ToLongtailQuote.js +0 -2
  159. package/dist/esm/swappers/ThorchainSwapper/utils/getL1ToLongtailRate.js +0 -2
  160. package/dist/esm/swappers/ThorchainSwapper/utils/getUniqueAddressSubstring/getUniqueAddressSubstring.d.ts +1 -1
  161. package/dist/esm/swappers/ThorchainSwapper/utils/getUniqueAddressSubstring/getUniqueAddressSubstring.js +17 -20
  162. package/dist/esm/swappers/ThorchainSwapper/utils/getUniqueAddressSubstring/getUniqueAddressSubstring.test.js +29 -1
  163. package/dist/esm/types.d.ts +9 -8
  164. package/dist/esm/utils/helpers.js +4 -1
  165. package/dist/esm/utils/helpers.test.js +3 -0
  166. package/dist/esm/utils/thorchain/getThorStepData.js +32 -49
  167. package/dist/esm/utils/thorchain/getThorStepData.tron.test.d.ts +1 -0
  168. package/dist/esm/utils/thorchain/getThorStepData.tron.test.js +91 -0
  169. package/dist/esm/utils/thorchain/index.d.ts +0 -1
  170. package/dist/esm/utils/thorchain/index.js +0 -1
  171. package/dist/esm/utils/tron/constants.d.ts +1 -0
  172. package/dist/esm/utils/tron/constants.js +2 -0
  173. package/dist/esm/utils/tron/getTronNetworkFeeCryptoBaseUnit.d.ts +27 -0
  174. package/dist/esm/utils/tron/getTronNetworkFeeCryptoBaseUnit.js +59 -0
  175. package/dist/esm/utils/tron/getTronNetworkFeeCryptoBaseUnit.test.d.ts +1 -0
  176. package/dist/esm/utils/tron/getTronNetworkFeeCryptoBaseUnit.test.js +155 -0
  177. package/dist/esm/utils/tron/getUnsignedTronTransaction.d.ts +2 -1
  178. package/dist/esm/utils/tron/getUnsignedTronTransaction.js +14 -48
  179. package/dist/esm/utils/tron/getUnsignedTronTransaction.test.d.ts +1 -0
  180. package/dist/esm/utils/tron/getUnsignedTronTransaction.test.js +74 -0
  181. package/dist/esm/utils/tron/index.d.ts +2 -0
  182. package/dist/esm/utils/tron/index.js +2 -0
  183. package/package.json +9 -9
  184. package/dist/cjs/swappers/ButterSwap/test-data/eth-btc.json +0 -461
  185. package/dist/cjs/swappers/SunioSwapper/utils/buildSwapRouteParameters.d.ts +0 -14
  186. package/dist/cjs/swappers/SunioSwapper/utils/buildSwapRouteParameters.js +0 -32
  187. package/dist/cjs/swappers/SunioSwapper/utils/estimateSunioNetworkFee.d.ts +0 -12
  188. package/dist/cjs/swappers/SunioSwapper/utils/estimateSunioNetworkFee.js +0 -78
  189. package/dist/cjs/swappers/SunioSwapper/utils/getSunioTransactionFees.d.ts +0 -2
  190. package/dist/cjs/swappers/SunioSwapper/utils/getSunioTransactionFees.js +0 -36
  191. package/dist/cjs/utils/thorchain/tron/getTronTransactionFees.d.ts +0 -2
  192. package/dist/cjs/utils/thorchain/tron/getTronTransactionFees.js +0 -68
  193. package/dist/cjs/utils/thorchain/tron/getUnsignedTronTransaction.d.ts +0 -3
  194. package/dist/cjs/utils/thorchain/tron/getUnsignedTronTransaction.js +0 -35
  195. package/dist/cjs/utils/thorchain/tron/index.d.ts +0 -2
  196. package/dist/cjs/utils/thorchain/tron/index.js +0 -18
  197. package/dist/esm/swappers/ButterSwap/test-data/eth-btc.json +0 -461
  198. package/dist/esm/swappers/SunioSwapper/utils/buildSwapRouteParameters.d.ts +0 -14
  199. package/dist/esm/swappers/SunioSwapper/utils/buildSwapRouteParameters.js +0 -28
  200. package/dist/esm/swappers/SunioSwapper/utils/estimateSunioNetworkFee.d.ts +0 -12
  201. package/dist/esm/swappers/SunioSwapper/utils/estimateSunioNetworkFee.js +0 -74
  202. package/dist/esm/swappers/SunioSwapper/utils/getSunioTransactionFees.d.ts +0 -2
  203. package/dist/esm/swappers/SunioSwapper/utils/getSunioTransactionFees.js +0 -32
  204. package/dist/esm/utils/thorchain/tron/getTronTransactionFees.d.ts +0 -2
  205. package/dist/esm/utils/thorchain/tron/getTronTransactionFees.js +0 -64
  206. package/dist/esm/utils/thorchain/tron/getUnsignedTronTransaction.d.ts +0 -3
  207. package/dist/esm/utils/thorchain/tron/getUnsignedTronTransaction.js +0 -31
  208. package/dist/esm/utils/thorchain/tron/index.d.ts +0 -2
  209. package/dist/esm/utils/thorchain/tron/index.js +0 -2
  210. /package/dist/cjs/swappers/SunioSwapper/utils/{fetchFromSunio.d.ts → fetchSunioQuote.d.ts} +0 -0
  211. /package/dist/cjs/swappers/SunioSwapper/utils/{fetchFromSunio.js → fetchSunioQuote.js} +0 -0
  212. /package/dist/esm/swappers/SunioSwapper/utils/{fetchFromSunio.d.ts → fetchSunioQuote.d.ts} +0 -0
  213. /package/dist/esm/swappers/SunioSwapper/utils/{fetchFromSunio.js → fetchSunioQuote.js} +0 -0
@@ -17,6 +17,11 @@ const route = routeQuote_1.ROUTE_QUOTE.data[0];
17
17
  const PROVIDER_GAS_FEE_BASE_UNIT = '1333043669759539'; // 0.001333043669759539 ETH
18
18
  const SOL = { ...assets_1.ETH, assetId: `${caip_1.solanaChainId}/slip44:501`, chainId: caip_1.solanaChainId };
19
19
  const TRX = { ...assets_1.ETH, assetId: `${caip_1.tronChainId}/slip44:195`, chainId: caip_1.tronChainId };
20
+ const USDT_TRON = {
21
+ ...assets_1.ETH,
22
+ assetId: `${caip_1.tronChainId}/trc20:TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t`,
23
+ chainId: caip_1.tronChainId,
24
+ };
20
25
  const evmBuildTx = {
21
26
  to: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',
22
27
  data: '0xdeadbeef',
@@ -27,6 +32,7 @@ const makeDeps = (adapters) => ({
27
32
  assertGetEvmChainAdapter: () => adapters.evm,
28
33
  assertGetUtxoChainAdapter: () => adapters.utxo,
29
34
  assertGetSolanaChainAdapter: () => adapters.solana,
35
+ assertGetTronChainAdapter: () => adapters.tron,
30
36
  });
31
37
  const evmAdapter = ({ gasPrice = '1000000000', estimatedGasLimit = '500000', throwOnGasFeeData = false, throwOnFeeData = false, } = {}) => ({
32
38
  getGasFeeData: () => {
@@ -136,116 +142,152 @@ const evmQuoteInput = { supportsEIP1559: false };
136
142
  (0, vitest_1.expect)(actual.unwrapErr().code).toBe(types_1.TradeQuoteError.NetworkFeeEstimationFailed);
137
143
  });
138
144
  });
139
- (0, vitest_1.describe)('utxo', () => {
140
- const utxoAdapter = {
141
- getFeeData: () => Promise.resolve({ fast: { txFee: '4200' } }),
142
- httpProvider: {
143
- getNetworkFees: () => Promise.resolve({ fast: { satsPerKiloByte: 10000 } }),
144
- },
145
- };
146
- (0, vitest_1.it)('estimates off the default vsize for a rate with no pubkey', async () => {
145
+ (0, vitest_1.describe)('solana', () => {
146
+ (0, vitest_1.it)('uses the provider fee for a rate, since swap instructions do not exist yet', async () => {
147
+ const assertGetSolanaChainAdapter = vitest_1.vi.fn();
147
148
  const actual = await (0, getButterSwapStepData_1.getButterSwapStepData)({
148
149
  type: 'rate',
149
150
  input: {},
150
- deps: makeDeps({ utxo: utxoAdapter }),
151
+ deps: { assertGetSolanaChainAdapter },
151
152
  route,
152
- sellAsset: assets_1.BTC,
153
- feeAsset: assets_1.BTC,
154
- sellAmountCryptoBaseUnit: '100000',
153
+ sellAsset: SOL,
154
+ feeAsset: SOL,
155
+ sellAmountCryptoBaseUnit: '1000000000',
155
156
  spenderAddress: '',
156
157
  });
157
- // 10 sats/byte * 200 vbyte default
158
- (0, vitest_1.expect)(actual.unwrap()).toEqual({ networkFeeCryptoBaseUnit: '2000' });
158
+ (0, vitest_1.expect)(actual.unwrap()).toEqual({
159
+ networkFeeCryptoBaseUnit: PROVIDER_GAS_FEE_BASE_UNIT,
160
+ });
161
+ });
162
+ });
163
+ (0, vitest_1.describe)('tron', () => {
164
+ const tronBuildTx = { ...evmBuildTx, to: 'TRouterAddress' };
165
+ const tronAdapter = ({ txFee = '9000000', allowance = '0' } = {}) => ({
166
+ getFeeData: vitest_1.vi.fn().mockResolvedValue({ fast: { txFee } }),
167
+ httpProvider: {
168
+ getChainPrices: () => Promise.resolve({ energyPrice: 100, bandwidthPrice: 1000 }),
169
+ getTrc20Allowance: vitest_1.vi.fn().mockResolvedValue(allowance),
170
+ getTrc20Balance: vitest_1.vi.fn().mockResolvedValue('100000000'),
171
+ getContractEnergyShare: vitest_1.vi.fn().mockResolvedValue({
172
+ callerPercent: 100,
173
+ originEnergyLimit: 0,
174
+ originEnergyAvailable: 0,
175
+ }),
176
+ },
159
177
  });
160
- (0, vitest_1.it)('builds transaction data with the memo as op return data for a quote', async () => {
178
+ (0, vitest_1.it)('carries the router call as transactionData and simulates it', async () => {
179
+ const adapter = tronAdapter();
161
180
  const actual = await (0, getButterSwapStepData_1.getButterSwapStepData)({
162
181
  type: 'quote',
163
- input: { xpub: 'zpub6qux' },
164
- from: 'bc1qaddress',
165
- buildTx: { ...evmBuildTx, to: 'bc1qbridge', memo: 'butter-memo' },
166
- deps: makeDeps({ utxo: utxoAdapter }),
182
+ input: {},
183
+ from: 'TSenderAddress',
184
+ buildTx: tronBuildTx,
185
+ deps: makeDeps({ tron: adapter }),
167
186
  route,
168
- sellAsset: assets_1.BTC,
169
- feeAsset: assets_1.BTC,
170
- sellAmountCryptoBaseUnit: '100000',
187
+ sellAsset: TRX,
188
+ feeAsset: TRX,
189
+ sellAmountCryptoBaseUnit: '1000000',
171
190
  spenderAddress: '',
172
191
  });
173
- (0, vitest_1.expect)(actual.unwrap()).toEqual({
174
- networkFeeCryptoBaseUnit: '4200',
175
- transactionData: {
176
- type: 'utxo',
177
- to: 'bc1qbridge',
178
- opReturnData: 'butter-memo',
179
- value: '100000',
180
- },
192
+ // Butter's value is the native amount to send: the sell amount for a native sell, 0 for a token
193
+ const transactionData = {
194
+ type: 'tron',
195
+ to: 'TRouterAddress',
196
+ data: evmBuildTx.data,
197
+ value: '100000000000000000',
198
+ };
199
+ (0, vitest_1.expect)(actual.unwrap()).toEqual({ transactionData, networkFeeCryptoBaseUnit: '9000000' });
200
+ (0, vitest_1.expect)(adapter.getFeeData).toHaveBeenCalledWith({
201
+ to: 'TRouterAddress',
202
+ value: '100000000000000000',
203
+ chainSpecific: { from: 'TSenderAddress', data: evmBuildTx.data, requireEnergyShare: true },
181
204
  });
182
205
  });
183
- (0, vitest_1.it)('errors when the quote is missing the memo the bridge routes on', async () => {
206
+ (0, vitest_1.it)('uses the provider value for a token sell', async () => {
184
207
  const actual = await (0, getButterSwapStepData_1.getButterSwapStepData)({
185
208
  type: 'quote',
186
- input: { xpub: 'zpub6qux' },
187
- from: 'bc1qaddress',
188
- buildTx: { ...evmBuildTx, to: 'bc1qbridge', memo: undefined },
189
- deps: makeDeps({ utxo: utxoAdapter }),
209
+ input: {},
210
+ from: 'TSenderAddress',
211
+ buildTx: { ...tronBuildTx, value: '0x00' },
212
+ deps: makeDeps({ tron: tronAdapter() }),
190
213
  route,
191
- sellAsset: assets_1.BTC,
192
- feeAsset: assets_1.BTC,
193
- sellAmountCryptoBaseUnit: '100000',
214
+ sellAsset: USDT_TRON,
215
+ feeAsset: TRX,
216
+ sellAmountCryptoBaseUnit: '1000000',
194
217
  spenderAddress: '',
195
218
  });
196
- (0, vitest_1.expect)(actual.isErr()).toBe(true);
197
- (0, vitest_1.expect)(actual.unwrapErr().code).toBe(types_1.TradeQuoteError.InvalidResponse);
219
+ (0, vitest_1.expect)(actual.unwrap().transactionData).toMatchObject({ value: '0' });
198
220
  });
199
- });
200
- (0, vitest_1.describe)('solana', () => {
201
- (0, vitest_1.it)('uses the provider fee for a rate, since swap instructions do not exist yet', async () => {
202
- const assertGetSolanaChainAdapter = vitest_1.vi.fn();
221
+ (0, vitest_1.it)('fails a native quote when the simulation fails', async () => {
222
+ const adapter = tronAdapter();
223
+ adapter.getFeeData.mockRejectedValue(new Error('REVERT opcode executed'));
203
224
  const actual = await (0, getButterSwapStepData_1.getButterSwapStepData)({
204
- type: 'rate',
225
+ type: 'quote',
205
226
  input: {},
206
- deps: { assertGetSolanaChainAdapter },
227
+ from: 'TSenderAddress',
228
+ buildTx: tronBuildTx,
229
+ deps: makeDeps({ tron: adapter }),
207
230
  route,
208
- sellAsset: SOL,
209
- feeAsset: SOL,
210
- sellAmountCryptoBaseUnit: '1000000000',
231
+ sellAsset: TRX,
232
+ feeAsset: TRX,
233
+ sellAmountCryptoBaseUnit: '1000000',
211
234
  spenderAddress: '',
212
235
  });
213
- (0, vitest_1.expect)(actual.unwrap()).toEqual({
214
- networkFeeCryptoBaseUnit: PROVIDER_GAS_FEE_BASE_UNIT,
215
- });
236
+ (0, vitest_1.expect)(actual.isErr()).toBe(true);
216
237
  });
217
- });
218
- (0, vitest_1.describe)('tron', () => {
219
- (0, vitest_1.it)('returns legacy metadata rather than transaction data, since exec still builds from it', async () => {
220
- const buildTx = {
221
- ...evmBuildTx,
222
- to: 'TRouterAddress',
223
- method: 'swapAndCall',
224
- args: [{ type: 'address', value: 'TSpender' }],
225
- };
238
+ (0, vitest_1.it)('prices the measured worst case when a token allowance is not granted yet', async () => {
239
+ const adapter = tronAdapter({ allowance: '0' });
240
+ adapter.getFeeData.mockRejectedValue(new Error('REVERT opcode executed'));
226
241
  const actual = await (0, getButterSwapStepData_1.getButterSwapStepData)({
227
242
  type: 'quote',
228
243
  input: {},
229
244
  from: 'TSenderAddress',
230
- buildTx,
231
- deps: {},
245
+ buildTx: { ...tronBuildTx, value: '0x00' },
246
+ deps: makeDeps({ tron: adapter }),
232
247
  route,
248
+ sellAsset: USDT_TRON,
249
+ feeAsset: TRX,
250
+ sellAmountCryptoBaseUnit: '1000000',
251
+ spenderAddress: '',
252
+ });
253
+ // 1000000 energy * 1.2 margin * 100 sun + (4 calldata + 279 envelope) bytes * 1000 sun
254
+ (0, vitest_1.expect)(actual.unwrap().networkFeeCryptoBaseUnit).toBe('120283000');
255
+ });
256
+ (0, vitest_1.it)('rates price the measured swap at the router share', async () => {
257
+ const adapter = tronAdapter();
258
+ adapter.httpProvider.getContractEnergyShare.mockResolvedValue({
259
+ callerPercent: 5,
260
+ originEnergyLimit: 10_000_000,
261
+ originEnergyAvailable: 5_000_000,
262
+ });
263
+ const actual = await (0, getButterSwapStepData_1.getButterSwapStepData)({
264
+ type: 'rate',
265
+ input: {},
266
+ deps: makeDeps({ tron: adapter }),
267
+ route: { ...route, contract: 'TRouterAddress' },
233
268
  sellAsset: TRX,
234
269
  feeAsset: TRX,
235
270
  sellAmountCryptoBaseUnit: '1000000',
236
271
  spenderAddress: '',
237
272
  });
238
- (0, vitest_1.expect)(actual.unwrap()).toEqual({
239
- networkFeeCryptoBaseUnit: PROVIDER_GAS_FEE_BASE_UNIT,
240
- butterSwapTransactionMetadata: {
241
- to: 'TRouterAddress',
242
- data: evmBuildTx.data,
243
- value: evmBuildTx.value,
244
- method: 'swapAndCall',
245
- args: [{ type: 'address', value: 'TSpender' }],
246
- memo: undefined,
247
- },
273
+ // 1000000 * 5% caller energy * 1.2 margin * 100 sun + 2400 bytes * 1000 sun
274
+ (0, vitest_1.expect)(actual.unwrap()).toEqual({ networkFeeCryptoBaseUnit: '8400000' });
275
+ (0, vitest_1.expect)(adapter.httpProvider.getContractEnergyShare).toHaveBeenCalledWith('TRouterAddress');
276
+ });
277
+ (0, vitest_1.it)('rates fall back to the provider fee when the worst case cannot be priced', async () => {
278
+ const adapter = tronAdapter();
279
+ adapter.httpProvider.getContractEnergyShare.mockRejectedValue(new Error('429'));
280
+ const actual = await (0, getButterSwapStepData_1.getButterSwapStepData)({
281
+ type: 'rate',
282
+ input: {},
283
+ deps: makeDeps({ tron: adapter }),
284
+ route: { ...route, contract: 'TRouterAddress' },
285
+ sellAsset: TRX,
286
+ feeAsset: TRX,
287
+ sellAmountCryptoBaseUnit: '1000000',
288
+ spenderAddress: '',
248
289
  });
290
+ (0, vitest_1.expect)(actual.unwrap()).toEqual({ networkFeeCryptoBaseUnit: PROVIDER_GAS_FEE_BASE_UNIT });
249
291
  });
250
292
  });
251
293
  (0, vitest_1.it)('errors on an unsupported chain namespace', async () => {
@@ -20,7 +20,6 @@ const BUTTERSWAP_CHAIN_ID_TO_CHAIN_ID = {
20
20
  [chains_1.avalanche.id]: types_1.KnownChainIds.AvalancheMainnet,
21
21
  [chains_1.robinhood.id]: types_1.KnownChainIds.RobinhoodMainnet,
22
22
  1360108768460801: types_1.KnownChainIds.SolanaMainnet,
23
- 1360095883558913: types_1.KnownChainIds.BitcoinMainnet,
24
23
  [chains_1.tron.id]: types_1.KnownChainIds.TronMainnet,
25
24
  };
26
25
  const CHAIN_ID_TO_BUTTERSWAP_CHAIN_ID = Object.entries(BUTTERSWAP_CHAIN_ID_TO_CHAIN_ID).reduce((acc, [butterSwapChainId, chainId]) => {
@@ -37,7 +36,6 @@ const chainIdToButterSwapChainId = (chainId) => {
37
36
  exports.chainIdToButterSwapChainId = chainIdToButterSwapChainId;
38
37
  const assertValidTrade = ({ sellAsset, }) => {
39
38
  if (!(0, chain_adapters_1.isEvmChainId)(sellAsset.chainId) &&
40
- sellAsset.chainId !== caip_1.btcChainId &&
41
39
  sellAsset.chainId !== caip_1.solanaChainId &&
42
40
  sellAsset.chainId !== caip_1.tronChainId) {
43
41
  return (0, monads_1.Err)((0, utils_2.makeSwapErrorRight)({
@@ -48,8 +46,7 @@ const assertValidTrade = ({ sellAsset, }) => {
48
46
  return (0, monads_1.Ok)(undefined);
49
47
  };
50
48
  exports.assertValidTrade = assertValidTrade;
51
- // Provider reported network fee - the rate fallback when estimation fails, and the fee for the
52
- // un-migrated tron quote path (exec computes the real fee at execution)
49
+ // Provider reported network fee - the fallback when estimation fails
53
50
  const getProviderNetworkFeeCryptoBaseUnit = ({ route, feeAsset, }) => {
54
51
  if ((0, utils_1.bnOrZero)(route.gasFee?.amount).lte(0))
55
52
  return '0';
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.butterSwapErrorToTradeQuoteError = exports.getBridgeInfoBySourceHash = exports.isBuildTxSuccess = exports.isRouteSuccess = exports.fetchTxData = exports.getButterRoute = exports.ButterSwapErrorCode = void 0;
4
4
  const caip_1 = require("@shapeshiftoss/caip");
5
+ const chain_adapters_1 = require("@shapeshiftoss/chain-adapters");
5
6
  const utils_1 = require("@shapeshiftoss/utils");
6
7
  const monads_1 = require("@sniptt/monads");
7
8
  const viem_1 = require("viem");
@@ -23,7 +24,6 @@ var ButterSwapErrorCode;
23
24
  ButterSwapErrorCode[ButterSwapErrorCode["InvalidAddress"] = 2007] = "InvalidAddress";
24
25
  })(ButterSwapErrorCode || (exports.ButterSwapErrorCode = ButterSwapErrorCode = {}));
25
26
  const SOLANA_NATIVE_ADDRESS = 'So11111111111111111111111111111111111111112';
26
- const TRON_NATIVE_ADDRESS = 'T9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb';
27
27
  const getButterRoute = async ({ sellAsset, buyAsset, sellAmountCryptoPrecision, slippage, affiliate, }) => {
28
28
  const butterFromChainId = (0, helpers_2.chainIdToButterSwapChainId)(sellAsset.chainId);
29
29
  const butterToChainId = (0, helpers_2.chainIdToButterSwapChainId)(buyAsset.chainId);
@@ -42,7 +42,7 @@ const getButterRoute = async ({ sellAsset, buyAsset, sellAmountCryptoPrecision,
42
42
  if (sellAsset.chainId === caip_1.solanaChainId && sellAssetIsNative)
43
43
  return SOLANA_NATIVE_ADDRESS;
44
44
  if (sellAsset.chainId === caip_1.tronChainId && sellAssetIsNative)
45
- return TRON_NATIVE_ADDRESS;
45
+ return chain_adapters_1.tron.TRON_ZERO_ADDRESS;
46
46
  if (sellAssetIsNative)
47
47
  return viem_1.zeroAddress;
48
48
  return sellAssetAddressRaw;
@@ -51,7 +51,7 @@ const getButterRoute = async ({ sellAsset, buyAsset, sellAmountCryptoPrecision,
51
51
  if (buyAsset.chainId === caip_1.solanaChainId && buyAssetIsNative)
52
52
  return SOLANA_NATIVE_ADDRESS;
53
53
  if (buyAsset.chainId === caip_1.tronChainId && buyAssetIsNative)
54
- return TRON_NATIVE_ADDRESS;
54
+ return chain_adapters_1.tron.TRON_ZERO_ADDRESS;
55
55
  if (buyAssetIsNative)
56
56
  return viem_1.zeroAddress;
57
57
  return buyAssetAddressRaw;
@@ -2,8 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.chainflipApi = void 0;
4
4
  const unchained_client_1 = require("@shapeshiftoss/unchained-client");
5
- const utils_1 = require("@shapeshiftoss/utils");
6
- const utils_2 = require("../../utils");
5
+ const utils_1 = require("../../utils");
7
6
  const evm_1 = require("../../utils/evm");
8
7
  const solana_1 = require("../../utils/solana");
9
8
  const tron_1 = require("../../utils/tron");
@@ -22,27 +21,12 @@ exports.chainflipApi = {
22
21
  getUtxoTransactionFees: utxo_1.getUtxoTransactionFees,
23
22
  getUnsignedSolanaTransaction: solana_1.getUnsignedSolanaTransaction,
24
23
  getSolanaTransactionFees: solana_1.getSolanaTransactionFees,
25
- getUnsignedTronTransaction: ({ stepIndex, tradeQuote, from, assertGetTronChainAdapter }) => {
26
- if (!(0, utils_2.isExecutableTradeQuote)(tradeQuote))
27
- throw new Error('Unable to execute a trade rate quote');
28
- const step = (0, utils_2.getExecutableTradeStep)(tradeQuote, stepIndex);
29
- const { accountNumber, chainflipSpecific, sellAsset } = step;
30
- if (!chainflipSpecific?.depositAddress)
31
- throw Error('Missing deposit address');
32
- const adapter = assertGetTronChainAdapter(sellAsset.chainId);
33
- return adapter.buildSendApiTransaction({
34
- to: chainflipSpecific.depositAddress,
35
- from,
36
- value: step.sellAmountIncludingProtocolFeesCryptoBaseUnit,
37
- accountNumber,
38
- chainSpecific: { contractAddress: (0, utils_1.contractAddressOrUndefined)(sellAsset.assetId) },
39
- });
40
- },
24
+ getUnsignedTronTransaction: tron_1.getUnsignedTronTransaction,
41
25
  getTronTransactionFees: tron_1.getTronTransactionFees,
42
26
  checkTradeStatus: async ({ config, swap }) => {
43
27
  if (!swap)
44
28
  throw new Error('Missing swap');
45
- const { swapId } = (0, utils_2.getSwapMetadata)(swap.metadata.swapperMetadata, 'chainflip');
29
+ const { swapId } = (0, utils_1.getSwapMetadata)(swap.metadata.swapperMetadata, 'chainflip');
46
30
  const brokerUrl = config.VITE_CHAINFLIP_API_URL;
47
31
  const apiKey = config.VITE_CHAINFLIP_API_KEY;
48
32
  const maybeStatusResponse = await chainflipService_1.chainflipService.get(`${brokerUrl}/status-by-id?apiKey=${apiKey}&swapId=${swapId}`);
@@ -14,7 +14,7 @@ type ChainflipRateStepData = {
14
14
  networkFeeCryptoBaseUnit: string | undefined;
15
15
  };
16
16
  type ChainflipQuoteStepData = {
17
- transactionData?: TxBuildData;
17
+ transactionData: TxBuildData;
18
18
  networkFeeCryptoBaseUnit: string | undefined;
19
19
  };
20
20
  export declare function getChainflipStepData(args: Extract<GetChainflipStepDataArgs, {
@@ -153,23 +153,42 @@ async function getChainflipStepData(args) {
153
153
  return (0, monads_1.Err)((0, utils_2.makeNetworkFeeEstimationFailedErr)('getChainflipStepData', error));
154
154
  }
155
155
  }
156
- // Un-migrated - exec builds its tx from chainflipSpecific.depositAddress, so no transactionData is carried
157
156
  case caip_1.CHAIN_NAMESPACE.Tron: {
158
- const to = depositAddress ?? from;
159
- if (!to || !from) {
160
- const stepData = { networkFeeCryptoBaseUnit: undefined };
157
+ const adapter = deps.assertGetTronChainAdapter(sellAsset.chainId);
158
+ const contractAddress = (0, utils_1.contractAddressOrUndefined)(sellAsset.assetId);
159
+ if (args.type === 'rate') {
160
+ // No deposit channel yet, but every channel is a fresh address, so a fresh recipient prices the transfer
161
+ const networkFeeCryptoBaseUnit = await (async () => {
162
+ if (!from)
163
+ return;
164
+ try {
165
+ const { fast } = await adapter.getFeeData({
166
+ to: chain_adapters_1.tron.generateFreshTronAddress(),
167
+ value: sellAmountCryptoBaseUnit,
168
+ chainSpecific: { from, contractAddress },
169
+ });
170
+ return fast.txFee;
171
+ }
172
+ catch { }
173
+ })();
174
+ const stepData = { networkFeeCryptoBaseUnit };
161
175
  return (0, monads_1.Ok)(stepData);
162
176
  }
177
+ const transactionData = {
178
+ type: 'tron',
179
+ to: args.depositAddress,
180
+ value: sellAmountCryptoBaseUnit,
181
+ };
163
182
  try {
164
- const { fast } = await deps.assertGetTronChainAdapter(sellAsset.chainId).getFeeData({
165
- to,
166
- value: sellAmountCryptoBaseUnit,
167
- chainSpecific: {
168
- from,
169
- contractAddress: (0, utils_1.contractAddressOrUndefined)(sellAsset.assetId),
170
- },
183
+ const { fast } = await adapter.getFeeData({
184
+ to: transactionData.to,
185
+ value: transactionData.value,
186
+ chainSpecific: { from, contractAddress, requireEnergyShare: true },
171
187
  });
172
- const stepData = { networkFeeCryptoBaseUnit: fast.txFee };
188
+ const stepData = {
189
+ transactionData,
190
+ networkFeeCryptoBaseUnit: fast.txFee,
191
+ };
173
192
  return (0, monads_1.Ok)(stepData);
174
193
  }
175
194
  catch (error) {
@@ -2,3 +2,4 @@ export declare const ONE_CLICK_BASE_URL = "https://1click.chaindefuser.com";
2
2
  export declare const DEFAULT_SLIPPAGE_BPS = 50;
3
3
  export declare const DEFAULT_QUOTE_DEADLINE_MS: number;
4
4
  export declare const UTXO_QUOTE_DEADLINE_MS: number;
5
+ export declare const APP_FEE_SPLIT_MULTIPLIER = 2;
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.UTXO_QUOTE_DEADLINE_MS = exports.DEFAULT_QUOTE_DEADLINE_MS = exports.DEFAULT_SLIPPAGE_BPS = exports.ONE_CLICK_BASE_URL = void 0;
3
+ exports.APP_FEE_SPLIT_MULTIPLIER = exports.UTXO_QUOTE_DEADLINE_MS = exports.DEFAULT_QUOTE_DEADLINE_MS = exports.DEFAULT_SLIPPAGE_BPS = exports.ONE_CLICK_BASE_URL = void 0;
4
4
  exports.ONE_CLICK_BASE_URL = 'https://1click.chaindefuser.com';
5
5
  exports.DEFAULT_SLIPPAGE_BPS = 50;
6
6
  // 1Click refunds a deposit it cannot settle by the requested deadline, and prices a quote the same at any length
7
7
  exports.DEFAULT_QUOTE_DEADLINE_MS = 60 * 60 * 1000;
8
8
  exports.UTXO_QUOTE_DEADLINE_MS = 4 * 60 * 60 * 1000;
9
+ // 1Click pays half of the requested appFee to its own account, so request double to receive affiliateBps
10
+ exports.APP_FEE_SPLIT_MULTIPLIER = 2;
@@ -145,12 +145,17 @@ async function getNearIntentsStepData(args) {
145
145
  const { fast } = await deps.assertGetTronChainAdapter(sellAsset.chainId).getFeeData({
146
146
  to: depositAddress,
147
147
  value: sellAmountCryptoBaseUnit,
148
- chainSpecific: {
149
- from,
150
- contractAddress: (0, utils_1.contractAddressOrUndefined)(sellAsset.assetId),
151
- },
148
+ chainSpecific: { from, contractAddress, requireEnergyShare: type === 'quote' },
152
149
  });
153
- const stepData = { networkFeeCryptoBaseUnit: fast.txFee };
150
+ const networkFeeCryptoBaseUnit = fast.txFee;
151
+ if (type === 'rate') {
152
+ const stepData = { networkFeeCryptoBaseUnit };
153
+ return (0, monads_1.Ok)(stepData);
154
+ }
155
+ const stepData = {
156
+ transactionData: { type: 'tron', to: depositAddress, value: sellAmountCryptoBaseUnit },
157
+ networkFeeCryptoBaseUnit,
158
+ };
154
159
  return (0, monads_1.Ok)(stepData);
155
160
  }
156
161
  case caip_1.CHAIN_NAMESPACE.Sui: {
@@ -156,7 +156,7 @@ const buildNearIntentsQuoteRequest = ({ originAsset, destinationAsset, amount, s
156
156
  appFees: [
157
157
  {
158
158
  recipient: utils_1.DAO_TREASURY_NEAR,
159
- fee: Number(affiliateBps),
159
+ fee: Number(affiliateBps) * constants_1.APP_FEE_SPLIT_MULTIPLIER,
160
160
  },
161
161
  ],
162
162
  };
@@ -14,8 +14,8 @@ export declare const relayChainIdToChainId: import("lodash").Dictionary<string>;
14
14
  export declare const DEFAULT_RELAY_EVM_TOKEN_ADDRESS: "0x0000000000000000000000000000000000000000";
15
15
  export declare const RELAY_BTC_TOKEN_ADDRESS = "bc1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqmql8k8";
16
16
  export declare const RELAY_SOLANA_TOKEN_ADDRESS = "11111111111111111111111111111111";
17
- export declare const RELAY_TRON_TOKEN_ADDRESS = "T9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb";
18
17
  export declare const DEFAULT_RELAY_EVM_USER_ADDRESS = "0x000000000000000000000000000000000000dead";
18
+ export declare const RELAY_TRON_FALLBACK_DEPOSIT_ENERGY = "100000";
19
19
  export declare const DEFAULT_RELAY_BTC_USER_ADDRESS = "bc1q4vxn43l44h30nkluqfxd9eckf45vr2awz38lwa";
20
20
  export declare const DEFAULT_RELAY_SOLANA_USER_ADDRESS = "CbKGgVKLJFb8bBrf58DnAkdryX6ubewVytn7X957YwNr";
21
21
  export declare const DEFAULT_RELAY_TRON_USER_ADDRESS = "TLsV52sRDL79HXGGm9yzwKibb6BeruhUzy";
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
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;
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.RELAY_TRON_FALLBACK_DEPOSIT_ENERGY = exports.DEFAULT_RELAY_EVM_USER_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
8
  const invert_1 = __importDefault(require("lodash/invert"));
9
9
  const viem_1 = require("viem");
@@ -64,8 +64,9 @@ exports.relayChainIdToChainId = (0, invert_1.default)(exports.chainIdToRelayChai
64
64
  exports.DEFAULT_RELAY_EVM_TOKEN_ADDRESS = viem_1.zeroAddress;
65
65
  exports.RELAY_BTC_TOKEN_ADDRESS = 'bc1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqmql8k8';
66
66
  exports.RELAY_SOLANA_TOKEN_ADDRESS = '11111111111111111111111111111111';
67
- exports.RELAY_TRON_TOKEN_ADDRESS = 'T9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb';
68
67
  exports.DEFAULT_RELAY_EVM_USER_ADDRESS = '0x000000000000000000000000000000000000dead';
68
+ // depositor energy for a TRC20 deposit measured on mainnet, for token quotes without their allowance
69
+ exports.RELAY_TRON_FALLBACK_DEPOSIT_ENERGY = '100000';
69
70
  exports.DEFAULT_RELAY_BTC_USER_ADDRESS = 'bc1q4vxn43l44h30nkluqfxd9eckf45vr2awz38lwa';
70
71
  exports.DEFAULT_RELAY_SOLANA_USER_ADDRESS = 'CbKGgVKLJFb8bBrf58DnAkdryX6ubewVytn7X957YwNr';
71
72
  exports.DEFAULT_RELAY_TRON_USER_ADDRESS = 'TLsV52sRDL79HXGGm9yzwKibb6BeruhUzy';
@@ -24,12 +24,11 @@ const getQuote = async (input, deps, relayChainMap) => {
24
24
  type: 'quote',
25
25
  input,
26
26
  });
27
- return maybeStepData.map(({ transactionData, relayTransactionMetadata, networkFeeCryptoBaseUnit, }) => ({
27
+ return maybeStepData.map(({ transactionData, networkFeeCryptoBaseUnit }) => ({
28
28
  ...stepCommon,
29
29
  accountNumber,
30
30
  allowanceContract,
31
31
  transactionData,
32
- relayTransactionMetadata,
33
32
  swapperMetadata: {
34
33
  name: 'relay',
35
34
  relayId,
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getRelayAssetAddress = void 0;
4
4
  const caip_1 = require("@shapeshiftoss/caip");
5
+ const chain_adapters_1 = require("@shapeshiftoss/chain-adapters");
5
6
  const helpers_1 = require("../../../utils/helpers");
6
7
  const constant_1 = require("../constant");
7
8
  const getRelayAssetAddress = (asset) => {
@@ -10,7 +11,7 @@ const getRelayAssetAddress = (asset) => {
10
11
  if (asset.assetId === caip_1.solAssetId)
11
12
  return constant_1.RELAY_SOLANA_TOKEN_ADDRESS;
12
13
  if (asset.assetId === caip_1.tronAssetId)
13
- return constant_1.RELAY_TRON_TOKEN_ADDRESS;
14
+ return chain_adapters_1.tron.TRON_ZERO_ADDRESS;
14
15
  if ((0, helpers_1.isNativeEvmAsset)(asset.assetId))
15
16
  return constant_1.DEFAULT_RELAY_EVM_TOKEN_ADDRESS;
16
17
  const { assetReference } = (0, caip_1.fromAssetId)(asset.assetId);
@@ -1,7 +1,7 @@
1
1
  import type { Result } from '@sniptt/monads';
2
2
  import type { StepDataArgs, SwapErrorRight, TxBuildData } from '../../../types';
3
3
  import type { SolanaComputeBudgetOptions } from '../../../utils/solana';
4
- import type { RelayQuoteItem, RelayTransactionMetadata } from './types';
4
+ import type { RelayQuoteItem } from './types';
5
5
  export declare const RELAY_SOLANA_COMPUTE_BUDGET: SolanaComputeBudgetOptions;
6
6
  type BaseArgs = {
7
7
  data: RelayQuoteItem['data'];
@@ -15,8 +15,7 @@ type RelayRateStepData = {
15
15
  networkFeeCryptoBaseUnit: string;
16
16
  };
17
17
  type RelayQuoteStepData = {
18
- transactionData?: TxBuildData;
19
- relayTransactionMetadata?: RelayTransactionMetadata;
18
+ transactionData: TxBuildData;
20
19
  networkFeeCryptoBaseUnit: string;
21
20
  };
22
21
  export type GetRelayStepDataArgs = StepDataArgs<BaseArgs, {
@@ -2,12 +2,15 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getRelayStepData = exports.RELAY_SOLANA_COMPUTE_BUDGET = void 0;
4
4
  const caip_1 = require("@shapeshiftoss/caip");
5
+ const chain_adapters_1 = require("@shapeshiftoss/chain-adapters");
5
6
  const utils_1 = require("@shapeshiftoss/utils");
6
7
  const monads_1 = require("@sniptt/monads");
7
8
  const utils_2 = require("../../../utils");
8
9
  const evm_1 = require("../../../utils/evm");
9
10
  const solana_1 = require("../../../utils/solana");
11
+ const tron_1 = require("../../../utils/tron");
10
12
  const utxo_1 = require("../../../utils/utxo");
13
+ const constant_1 = require("../constant");
11
14
  const getRelayPsbtRelayer_1 = require("./getRelayPsbtRelayer");
12
15
  const helpers_1 = require("./helpers");
13
16
  const types_1 = require("./types");
@@ -172,25 +175,55 @@ async function getRelayStepData({ data, sellAsset, sellAmountCryptoBaseUnit, spe
172
175
  return (0, monads_1.Err)((0, utils_2.makeNetworkFeeEstimationFailedErr)('getRelayStepData', error));
173
176
  }
174
177
  }
178
+ // Native and token sells alike are a call into relay's depositor contract
175
179
  if ((0, types_1.isRelayQuoteTronItemData)(data)) {
176
- const contractAddress = data.parameter?.contract_address;
177
- const tronCallData = data.parameter?.data;
178
- const isTronToken = (0, utils_1.isToken)(sellAsset.assetId);
179
- if (isTronToken && !contractAddress)
180
- return (0, monads_1.Err)((0, utils_2.makeTradeStepBuildFailedErr)('getRelayStepData'));
181
- if (isTronToken && !tronCallData)
182
- return (0, monads_1.Err)((0, utils_2.makeTradeStepBuildFailedErr)('getRelayStepData'));
180
+ const { contract_address: contractAddress, data: callData, call_value: callValue, } = data.parameter ?? {};
183
181
  if (type === 'rate') {
182
+ // Relay's gas figure runs ~35% under the deposit's measured energy, so rates price the measured call
183
+ const networkFeeCryptoBaseUnit = await (async () => {
184
+ if (!contractAddress || !callData)
185
+ return fallbackNetworkFeeCryptoBaseUnit;
186
+ try {
187
+ return await (0, tron_1.getTronContractCallFallbackFeeCryptoBaseUnit)({
188
+ adapter: deps.assertGetTronChainAdapter(sellAsset.chainId),
189
+ energy: constant_1.RELAY_TRON_FALLBACK_DEPOSIT_ENERGY,
190
+ bandwidthBytes: chain_adapters_1.tron.getTronContractCallBandwidthBytes(callData),
191
+ contractAddress,
192
+ });
193
+ }
194
+ catch {
195
+ return fallbackNetworkFeeCryptoBaseUnit;
196
+ }
197
+ })();
198
+ const stepData = { networkFeeCryptoBaseUnit };
199
+ return (0, monads_1.Ok)(stepData);
200
+ }
201
+ if (!contractAddress || !callData)
202
+ return (0, monads_1.Err)((0, utils_2.makeTradeStepBuildFailedErr)('getRelayStepData'));
203
+ const isNativeSell = !(0, utils_1.isToken)(sellAsset.assetId);
204
+ const call = {
205
+ to: contractAddress,
206
+ data: callData,
207
+ value: String(callValue ?? (isNativeSell ? sellAmountCryptoBaseUnit : 0)),
208
+ };
209
+ try {
184
210
  const stepData = {
185
- networkFeeCryptoBaseUnit: fallbackNetworkFeeCryptoBaseUnit,
211
+ transactionData: { type: 'tron', ...call },
212
+ networkFeeCryptoBaseUnit: await (0, tron_1.getTronContractCallNetworkFeeCryptoBaseUnit)({
213
+ adapter: deps.assertGetTronChainAdapter(sellAsset.chainId),
214
+ transactionData: call,
215
+ from,
216
+ sellAsset,
217
+ sellAmountCryptoBaseUnit,
218
+ spenderAddress: contractAddress,
219
+ fallbackEnergy: constant_1.RELAY_TRON_FALLBACK_DEPOSIT_ENERGY,
220
+ }),
186
221
  };
187
222
  return (0, monads_1.Ok)(stepData);
188
223
  }
189
- const stepData = {
190
- relayTransactionMetadata: { to: contractAddress, data: tronCallData },
191
- networkFeeCryptoBaseUnit: fallbackNetworkFeeCryptoBaseUnit,
192
- };
193
- return (0, monads_1.Ok)(stepData);
224
+ catch (error) {
225
+ return (0, monads_1.Err)((0, utils_2.makeNetworkFeeEstimationFailedErr)('getRelayStepData', error));
226
+ }
194
227
  }
195
228
  return (0, monads_1.Err)((0, utils_2.makeTradeStepBuildFailedErr)('getRelayStepData'));
196
229
  }