@shapeshiftoss/swapper 20.2.0 → 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 (195) hide show
  1. package/dist/cjs/.tsbuildinfo +1 -1
  2. package/dist/cjs/swappers/BobGatewaySwapper/BobGatewaySwapper.js +10 -1
  3. package/dist/cjs/swappers/BobGatewaySwapper/endpoints.js +2 -33
  4. package/dist/cjs/swappers/BobGatewaySwapper/swapperApi/getTradeQuote.js +5 -8
  5. package/dist/cjs/swappers/BobGatewaySwapper/swapperApi/getTradeRate.js +1 -2
  6. package/dist/cjs/swappers/BobGatewaySwapper/types.d.ts +3 -3
  7. package/dist/cjs/swappers/BobGatewaySwapper/utils/constants.d.ts +3 -2
  8. package/dist/cjs/swappers/BobGatewaySwapper/utils/constants.js +8 -5
  9. package/dist/cjs/swappers/BobGatewaySwapper/utils/getBobGatewayStepData.d.ts +2 -2
  10. package/dist/cjs/swappers/BobGatewaySwapper/utils/getBobGatewayStepData.js +30 -34
  11. package/dist/cjs/swappers/BobGatewaySwapper/utils/getBobGatewayStepData.test.d.ts +1 -0
  12. package/dist/cjs/swappers/BobGatewaySwapper/utils/getBobGatewayStepData.test.js +117 -0
  13. package/dist/cjs/swappers/BobGatewaySwapper/utils/getBobGatewayTradeContext.js +1 -2
  14. package/dist/cjs/swappers/BobGatewaySwapper/utils/helpers.d.ts +8 -11
  15. package/dist/cjs/swappers/BobGatewaySwapper/utils/helpers.js +36 -31
  16. package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeQuote.js +2 -3
  17. package/dist/cjs/swappers/ButterSwap/types.d.ts +0 -11
  18. package/dist/cjs/swappers/ButterSwap/utils/constants.d.ts +2 -0
  19. package/dist/cjs/swappers/ButterSwap/utils/constants.js +4 -1
  20. package/dist/cjs/swappers/ButterSwap/utils/getButterSwapStepData.d.ts +2 -3
  21. package/dist/cjs/swappers/ButterSwap/utils/getButterSwapStepData.js +42 -14
  22. package/dist/cjs/swappers/ButterSwap/utils/getButterSwapStepData.test.js +120 -17
  23. package/dist/cjs/swappers/ButterSwap/utils/helpers.js +1 -2
  24. package/dist/cjs/swappers/ButterSwap/xhr.js +3 -3
  25. package/dist/cjs/swappers/ChainflipSwapper/endpoints.js +3 -19
  26. package/dist/cjs/swappers/ChainflipSwapper/utils/getChainflipStepData.d.ts +1 -1
  27. package/dist/cjs/swappers/ChainflipSwapper/utils/getChainflipStepData.js +31 -12
  28. package/dist/cjs/swappers/NearIntentsSwapper/constants.d.ts +1 -0
  29. package/dist/cjs/swappers/NearIntentsSwapper/constants.js +3 -1
  30. package/dist/cjs/swappers/NearIntentsSwapper/utils/getNearIntentsStepData.js +10 -5
  31. package/dist/cjs/swappers/NearIntentsSwapper/utils/helpers.js +1 -1
  32. package/dist/cjs/swappers/RelaySwapper/constant.d.ts +1 -1
  33. package/dist/cjs/swappers/RelaySwapper/constant.js +3 -2
  34. package/dist/cjs/swappers/RelaySwapper/getTradeQuote/getTradeQuote.js +1 -2
  35. package/dist/cjs/swappers/RelaySwapper/utils/getRelayAssetAddress.js +2 -1
  36. package/dist/cjs/swappers/RelaySwapper/utils/getRelayStepData.d.ts +2 -3
  37. package/dist/cjs/swappers/RelaySwapper/utils/getRelayStepData.js +46 -13
  38. package/dist/cjs/swappers/RelaySwapper/utils/getRelayStepData.test.d.ts +1 -0
  39. package/dist/cjs/swappers/RelaySwapper/utils/getRelayStepData.test.js +139 -0
  40. package/dist/cjs/swappers/RelaySwapper/utils/helpers.js +1 -2
  41. package/dist/cjs/swappers/RelaySwapper/utils/relayTokenToAssetId.js +1 -1
  42. package/dist/cjs/swappers/RelaySwapper/utils/types.d.ts +1 -4
  43. package/dist/cjs/swappers/SunioSwapper/endpoints.js +3 -63
  44. package/dist/cjs/swappers/SunioSwapper/getSunioTradeQuote/getSunioTradeQuote.js +3 -4
  45. package/dist/cjs/swappers/SunioSwapper/getSunioTradeRate/getSunioTradeRate.js +7 -1
  46. package/dist/cjs/swappers/SunioSwapper/types.d.ts +0 -3
  47. package/dist/cjs/swappers/SunioSwapper/utils/buildSwapContractCall.d.ts +11 -6
  48. package/dist/cjs/swappers/SunioSwapper/utils/buildSwapContractCall.js +33 -30
  49. package/dist/cjs/swappers/SunioSwapper/utils/constants.d.ts +3 -3
  50. package/dist/cjs/swappers/SunioSwapper/utils/constants.js +5 -9
  51. package/dist/cjs/swappers/SunioSwapper/utils/getSunioStepData.d.ts +8 -3
  52. package/dist/cjs/swappers/SunioSwapper/utils/getSunioStepData.js +54 -20
  53. package/dist/cjs/swappers/SunioSwapper/utils/getSunioStepData.test.d.ts +1 -0
  54. package/dist/cjs/swappers/SunioSwapper/utils/getSunioStepData.test.js +177 -0
  55. package/dist/cjs/swappers/SunioSwapper/utils/getSunioTradeContext.js +3 -2
  56. package/dist/cjs/swappers/SunioSwapper/utils/helpers.js +2 -1
  57. package/dist/cjs/swappers/ThorchainSwapper/endpoints.js +3 -4
  58. package/dist/cjs/swappers/ThorchainSwapper/utils/addL1ToLongtailPartsToMemo/addL1ToLongtailPartsToMemo.js +6 -1
  59. package/dist/cjs/swappers/ThorchainSwapper/utils/addL1ToLongtailPartsToMemo/addL1ToLongtailPartsToMemo.test.js +15 -0
  60. package/dist/cjs/swappers/ThorchainSwapper/utils/assertValidLongtailTrade.js +7 -0
  61. package/dist/cjs/swappers/ThorchainSwapper/utils/getL1ToLongtailQuote.js +0 -2
  62. package/dist/cjs/swappers/ThorchainSwapper/utils/getL1ToLongtailRate.js +0 -2
  63. package/dist/cjs/swappers/ThorchainSwapper/utils/getUniqueAddressSubstring/getUniqueAddressSubstring.d.ts +1 -1
  64. package/dist/cjs/swappers/ThorchainSwapper/utils/getUniqueAddressSubstring/getUniqueAddressSubstring.js +17 -20
  65. package/dist/cjs/swappers/ThorchainSwapper/utils/getUniqueAddressSubstring/getUniqueAddressSubstring.test.js +31 -0
  66. package/dist/cjs/types.d.ts +9 -8
  67. package/dist/cjs/utils/thorchain/getThorStepData.js +32 -49
  68. package/dist/cjs/utils/thorchain/getThorStepData.tron.test.d.ts +1 -0
  69. package/dist/cjs/utils/thorchain/getThorStepData.tron.test.js +93 -0
  70. package/dist/cjs/utils/thorchain/index.d.ts +0 -1
  71. package/dist/cjs/utils/thorchain/index.js +1 -14
  72. package/dist/cjs/utils/tron/constants.d.ts +1 -0
  73. package/dist/cjs/utils/tron/constants.js +5 -0
  74. package/dist/cjs/utils/tron/getTronNetworkFeeCryptoBaseUnit.d.ts +27 -0
  75. package/dist/cjs/utils/tron/getTronNetworkFeeCryptoBaseUnit.js +64 -0
  76. package/dist/cjs/utils/tron/getTronNetworkFeeCryptoBaseUnit.test.d.ts +1 -0
  77. package/dist/cjs/utils/tron/getTronNetworkFeeCryptoBaseUnit.test.js +157 -0
  78. package/dist/cjs/utils/tron/getUnsignedTronTransaction.d.ts +2 -1
  79. package/dist/cjs/utils/tron/getUnsignedTronTransaction.js +14 -48
  80. package/dist/cjs/utils/tron/getUnsignedTronTransaction.test.d.ts +1 -0
  81. package/dist/cjs/utils/tron/getUnsignedTronTransaction.test.js +76 -0
  82. package/dist/cjs/utils/tron/index.d.ts +2 -0
  83. package/dist/cjs/utils/tron/index.js +2 -0
  84. package/dist/esm/.tsbuildinfo +1 -1
  85. package/dist/esm/swappers/BobGatewaySwapper/BobGatewaySwapper.js +11 -2
  86. package/dist/esm/swappers/BobGatewaySwapper/endpoints.js +5 -36
  87. package/dist/esm/swappers/BobGatewaySwapper/swapperApi/getTradeQuote.js +5 -8
  88. package/dist/esm/swappers/BobGatewaySwapper/swapperApi/getTradeRate.js +1 -2
  89. package/dist/esm/swappers/BobGatewaySwapper/types.d.ts +3 -3
  90. package/dist/esm/swappers/BobGatewaySwapper/utils/constants.d.ts +3 -2
  91. package/dist/esm/swappers/BobGatewaySwapper/utils/constants.js +8 -7
  92. package/dist/esm/swappers/BobGatewaySwapper/utils/getBobGatewayStepData.d.ts +2 -2
  93. package/dist/esm/swappers/BobGatewaySwapper/utils/getBobGatewayStepData.js +21 -25
  94. package/dist/esm/swappers/BobGatewaySwapper/utils/getBobGatewayStepData.test.d.ts +1 -0
  95. package/dist/esm/swappers/BobGatewaySwapper/utils/getBobGatewayStepData.test.js +115 -0
  96. package/dist/esm/swappers/BobGatewaySwapper/utils/getBobGatewayTradeContext.js +1 -2
  97. package/dist/esm/swappers/BobGatewaySwapper/utils/helpers.d.ts +8 -11
  98. package/dist/esm/swappers/BobGatewaySwapper/utils/helpers.js +13 -30
  99. package/dist/esm/swappers/ButterSwap/swapperApi/getTradeQuote.js +2 -3
  100. package/dist/esm/swappers/ButterSwap/types.d.ts +0 -11
  101. package/dist/esm/swappers/ButterSwap/utils/constants.d.ts +2 -0
  102. package/dist/esm/swappers/ButterSwap/utils/constants.js +3 -0
  103. package/dist/esm/swappers/ButterSwap/utils/getButterSwapStepData.d.ts +2 -3
  104. package/dist/esm/swappers/ButterSwap/utils/getButterSwapStepData.js +42 -14
  105. package/dist/esm/swappers/ButterSwap/utils/getButterSwapStepData.test.js +120 -17
  106. package/dist/esm/swappers/ButterSwap/utils/helpers.js +1 -2
  107. package/dist/esm/swappers/ButterSwap/xhr.js +3 -3
  108. package/dist/esm/swappers/ChainflipSwapper/endpoints.js +3 -19
  109. package/dist/esm/swappers/ChainflipSwapper/utils/getChainflipStepData.d.ts +1 -1
  110. package/dist/esm/swappers/ChainflipSwapper/utils/getChainflipStepData.js +32 -13
  111. package/dist/esm/swappers/NearIntentsSwapper/constants.d.ts +1 -0
  112. package/dist/esm/swappers/NearIntentsSwapper/constants.js +2 -0
  113. package/dist/esm/swappers/NearIntentsSwapper/utils/getNearIntentsStepData.js +10 -5
  114. package/dist/esm/swappers/NearIntentsSwapper/utils/helpers.js +2 -2
  115. package/dist/esm/swappers/RelaySwapper/constant.d.ts +1 -1
  116. package/dist/esm/swappers/RelaySwapper/constant.js +2 -1
  117. package/dist/esm/swappers/RelaySwapper/getTradeQuote/getTradeQuote.js +1 -2
  118. package/dist/esm/swappers/RelaySwapper/utils/getRelayAssetAddress.js +3 -2
  119. package/dist/esm/swappers/RelaySwapper/utils/getRelayStepData.d.ts +2 -3
  120. package/dist/esm/swappers/RelaySwapper/utils/getRelayStepData.js +46 -13
  121. package/dist/esm/swappers/RelaySwapper/utils/getRelayStepData.test.d.ts +1 -0
  122. package/dist/esm/swappers/RelaySwapper/utils/getRelayStepData.test.js +137 -0
  123. package/dist/esm/swappers/RelaySwapper/utils/helpers.js +1 -2
  124. package/dist/esm/swappers/RelaySwapper/utils/relayTokenToAssetId.js +3 -3
  125. package/dist/esm/swappers/RelaySwapper/utils/types.d.ts +1 -4
  126. package/dist/esm/swappers/SunioSwapper/endpoints.js +5 -65
  127. package/dist/esm/swappers/SunioSwapper/getSunioTradeQuote/getSunioTradeQuote.js +3 -4
  128. package/dist/esm/swappers/SunioSwapper/getSunioTradeRate/getSunioTradeRate.js +7 -1
  129. package/dist/esm/swappers/SunioSwapper/types.d.ts +0 -3
  130. package/dist/esm/swappers/SunioSwapper/utils/buildSwapContractCall.d.ts +11 -6
  131. package/dist/esm/swappers/SunioSwapper/utils/buildSwapContractCall.js +31 -28
  132. package/dist/esm/swappers/SunioSwapper/utils/constants.d.ts +3 -3
  133. package/dist/esm/swappers/SunioSwapper/utils/constants.js +4 -8
  134. package/dist/esm/swappers/SunioSwapper/utils/getSunioStepData.d.ts +8 -3
  135. package/dist/esm/swappers/SunioSwapper/utils/getSunioStepData.js +52 -18
  136. package/dist/esm/swappers/SunioSwapper/utils/getSunioStepData.test.d.ts +1 -0
  137. package/dist/esm/swappers/SunioSwapper/utils/getSunioStepData.test.js +175 -0
  138. package/dist/esm/swappers/SunioSwapper/utils/getSunioTradeContext.js +2 -1
  139. package/dist/esm/swappers/SunioSwapper/utils/helpers.js +3 -2
  140. package/dist/esm/swappers/ThorchainSwapper/endpoints.js +4 -5
  141. package/dist/esm/swappers/ThorchainSwapper/utils/addL1ToLongtailPartsToMemo/addL1ToLongtailPartsToMemo.js +6 -1
  142. package/dist/esm/swappers/ThorchainSwapper/utils/addL1ToLongtailPartsToMemo/addL1ToLongtailPartsToMemo.test.js +15 -0
  143. package/dist/esm/swappers/ThorchainSwapper/utils/assertValidLongtailTrade.js +7 -0
  144. package/dist/esm/swappers/ThorchainSwapper/utils/getL1ToLongtailQuote.js +0 -2
  145. package/dist/esm/swappers/ThorchainSwapper/utils/getL1ToLongtailRate.js +0 -2
  146. package/dist/esm/swappers/ThorchainSwapper/utils/getUniqueAddressSubstring/getUniqueAddressSubstring.d.ts +1 -1
  147. package/dist/esm/swappers/ThorchainSwapper/utils/getUniqueAddressSubstring/getUniqueAddressSubstring.js +17 -20
  148. package/dist/esm/swappers/ThorchainSwapper/utils/getUniqueAddressSubstring/getUniqueAddressSubstring.test.js +29 -1
  149. package/dist/esm/types.d.ts +9 -8
  150. package/dist/esm/utils/thorchain/getThorStepData.js +32 -49
  151. package/dist/esm/utils/thorchain/getThorStepData.tron.test.d.ts +1 -0
  152. package/dist/esm/utils/thorchain/getThorStepData.tron.test.js +91 -0
  153. package/dist/esm/utils/thorchain/index.d.ts +0 -1
  154. package/dist/esm/utils/thorchain/index.js +0 -1
  155. package/dist/esm/utils/tron/constants.d.ts +1 -0
  156. package/dist/esm/utils/tron/constants.js +2 -0
  157. package/dist/esm/utils/tron/getTronNetworkFeeCryptoBaseUnit.d.ts +27 -0
  158. package/dist/esm/utils/tron/getTronNetworkFeeCryptoBaseUnit.js +59 -0
  159. package/dist/esm/utils/tron/getTronNetworkFeeCryptoBaseUnit.test.d.ts +1 -0
  160. package/dist/esm/utils/tron/getTronNetworkFeeCryptoBaseUnit.test.js +155 -0
  161. package/dist/esm/utils/tron/getUnsignedTronTransaction.d.ts +2 -1
  162. package/dist/esm/utils/tron/getUnsignedTronTransaction.js +14 -48
  163. package/dist/esm/utils/tron/getUnsignedTronTransaction.test.d.ts +1 -0
  164. package/dist/esm/utils/tron/getUnsignedTronTransaction.test.js +74 -0
  165. package/dist/esm/utils/tron/index.d.ts +2 -0
  166. package/dist/esm/utils/tron/index.js +2 -0
  167. package/package.json +8 -8
  168. package/dist/cjs/swappers/SunioSwapper/utils/buildSwapRouteParameters.d.ts +0 -14
  169. package/dist/cjs/swappers/SunioSwapper/utils/buildSwapRouteParameters.js +0 -32
  170. package/dist/cjs/swappers/SunioSwapper/utils/estimateSunioNetworkFee.d.ts +0 -12
  171. package/dist/cjs/swappers/SunioSwapper/utils/estimateSunioNetworkFee.js +0 -78
  172. package/dist/cjs/swappers/SunioSwapper/utils/getSunioTransactionFees.d.ts +0 -2
  173. package/dist/cjs/swappers/SunioSwapper/utils/getSunioTransactionFees.js +0 -36
  174. package/dist/cjs/utils/thorchain/tron/getTronTransactionFees.d.ts +0 -2
  175. package/dist/cjs/utils/thorchain/tron/getTronTransactionFees.js +0 -68
  176. package/dist/cjs/utils/thorchain/tron/getUnsignedTronTransaction.d.ts +0 -3
  177. package/dist/cjs/utils/thorchain/tron/getUnsignedTronTransaction.js +0 -35
  178. package/dist/cjs/utils/thorchain/tron/index.d.ts +0 -2
  179. package/dist/cjs/utils/thorchain/tron/index.js +0 -18
  180. package/dist/esm/swappers/SunioSwapper/utils/buildSwapRouteParameters.d.ts +0 -14
  181. package/dist/esm/swappers/SunioSwapper/utils/buildSwapRouteParameters.js +0 -28
  182. package/dist/esm/swappers/SunioSwapper/utils/estimateSunioNetworkFee.d.ts +0 -12
  183. package/dist/esm/swappers/SunioSwapper/utils/estimateSunioNetworkFee.js +0 -74
  184. package/dist/esm/swappers/SunioSwapper/utils/getSunioTransactionFees.d.ts +0 -2
  185. package/dist/esm/swappers/SunioSwapper/utils/getSunioTransactionFees.js +0 -32
  186. package/dist/esm/utils/thorchain/tron/getTronTransactionFees.d.ts +0 -2
  187. package/dist/esm/utils/thorchain/tron/getTronTransactionFees.js +0 -64
  188. package/dist/esm/utils/thorchain/tron/getUnsignedTronTransaction.d.ts +0 -3
  189. package/dist/esm/utils/thorchain/tron/getUnsignedTronTransaction.js +0 -31
  190. package/dist/esm/utils/thorchain/tron/index.d.ts +0 -2
  191. package/dist/esm/utils/thorchain/tron/index.js +0 -2
  192. /package/dist/cjs/swappers/SunioSwapper/utils/{fetchFromSunio.d.ts → fetchSunioQuote.d.ts} +0 -0
  193. /package/dist/cjs/swappers/SunioSwapper/utils/{fetchFromSunio.js → fetchSunioQuote.js} +0 -0
  194. /package/dist/esm/swappers/SunioSwapper/utils/{fetchFromSunio.d.ts → fetchSunioQuote.d.ts} +0 -0
  195. /package/dist/esm/swappers/SunioSwapper/utils/{fetchFromSunio.js → fetchSunioQuote.js} +0 -0
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SUNIO_TRON_NATIVE_ADDRESS = exports.SUNIO_DEX_TYPES = exports.SUNIO_FALLBACK_SWAP_ENERGY_TRC20 = exports.SUNIO_FALLBACK_SWAP_ENERGY_NATIVE = exports.DEFAULT_SLIPPAGE_PERCENTAGE = exports.SUNIO_SMART_ROUTER_CONTRACT = exports.SUNIO_API_BASE_URL = exports.SUNIO_SUPPORTED_CHAIN_IDS = void 0;
3
+ exports.SUNIO_DEX_TYPES = exports.SUNIO_FALLBACK_SWAP_ENERGY_TRC20 = exports.SUNIO_FALLBACK_SWAP_ENERGY_NATIVE = exports.SUNIO_SWAP_DEADLINE_MS = exports.DEFAULT_SLIPPAGE_PERCENTAGE = exports.SUNIO_SMART_ROUTER_CONTRACT = exports.SUNIO_API_BASE_URL = exports.SUNIO_SUPPORTED_CHAIN_IDS = void 0;
4
4
  const caip_1 = require("@shapeshiftoss/caip");
5
5
  exports.SUNIO_SUPPORTED_CHAIN_IDS = [caip_1.tronChainId];
6
6
  // NOTE: This domain looks suspicious, but it's the official Sun.io backend API
@@ -11,12 +11,8 @@ exports.SUNIO_API_BASE_URL = 'https://rot.endjgfsv.link';
11
11
  // This is the current mainnet router that sun.io's frontend uses
12
12
  exports.SUNIO_SMART_ROUTER_CONTRACT = 'TCFNp179Lg46D16zKoumd4Poa2WFFdtqYj';
13
13
  exports.DEFAULT_SLIPPAGE_PERCENTAGE = '0.005';
14
- // Energy fallbacks for when we can't simulate a swap (no address, or the simulation reverts
15
- // pre-approval for TRC20 sells). Set to observed average energy so the 1.2x margin applied at
16
- // estimate time lifts them to cover the worst case (native ~245k, TRC20 ~415k due to the extra
17
- // transferFrom token pull) without double-counting safety.
18
- exports.SUNIO_FALLBACK_SWAP_ENERGY_NATIVE = 215_000;
19
- exports.SUNIO_FALLBACK_SWAP_ENERGY_TRC20 = 375_000;
14
+ exports.SUNIO_SWAP_DEADLINE_MS = 20 * 60 * 1000;
15
+ // p90 router energy on mainnet, for rates that can't simulate and token quotes without their allowance
16
+ exports.SUNIO_FALLBACK_SWAP_ENERGY_NATIVE = '250000';
17
+ exports.SUNIO_FALLBACK_SWAP_ENERGY_TRC20 = '480000';
20
18
  exports.SUNIO_DEX_TYPES = 'PSM,CURVE,CURVE_COMBINATION,WTRX,SUNSWAP_V1,SUNSWAP_V2,SUNSWAP_V3';
21
- // Native TRX token address (used when assetId is not a TRC-20 token)
22
- exports.SUNIO_TRON_NATIVE_ADDRESS = 'T9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb';
@@ -1,17 +1,22 @@
1
1
  import type { Result } from '@sniptt/monads';
2
- import type { StepDataArgs, SwapErrorRight } from '../../../types';
3
- import type { SunioRoute, SunioTransactionData } from '../types';
2
+ import type { StepDataArgs, SwapErrorRight, TxBuildData } from '../../../types';
3
+ import type { SunioRoute } from '../types';
4
4
  type BaseArgs = {
5
5
  route: SunioRoute;
6
6
  sellAmountCryptoBaseUnit: string;
7
+ buyAmountCryptoBaseUnit: string;
7
8
  };
8
9
  export type GetSunioStepDataArgs = StepDataArgs<BaseArgs>;
10
+ type TronTxBuildData = Extract<TxBuildData, {
11
+ type: 'tron';
12
+ }>;
9
13
  type SunioRateStepData = {
10
14
  networkFeeCryptoBaseUnit: string | undefined;
11
15
  };
12
16
  type SunioQuoteStepData = {
17
+ transactionData: TronTxBuildData;
13
18
  networkFeeCryptoBaseUnit: string;
14
- sunioTransactionData: SunioTransactionData;
19
+ deadline: number;
15
20
  };
16
21
  export declare function getSunioStepData(args: Extract<GetSunioStepDataArgs, {
17
22
  type: 'rate';
@@ -1,43 +1,77 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getSunioStepData = void 0;
4
- const utils_1 = require("@shapeshiftoss/utils");
4
+ const caip_1 = require("@shapeshiftoss/caip");
5
+ const chain_adapters_1 = require("@shapeshiftoss/chain-adapters");
5
6
  const monads_1 = require("@sniptt/monads");
6
- const utils_2 = require("../../../utils");
7
- const estimateSunioNetworkFee_1 = require("./estimateSunioNetworkFee");
7
+ const utils_1 = require("../../../utils");
8
+ const tron_1 = require("../../../utils/tron");
9
+ const buildSwapContractCall_1 = require("./buildSwapContractCall");
10
+ const constants_1 = require("./constants");
8
11
  async function getSunioStepData(args) {
9
- const { type, route, sellAsset, sellAmountCryptoBaseUnit, from, input, deps } = args;
10
- const estimateArgs = {
11
- rpcUrl: deps.config.VITE_TRON_NODE_URL,
12
- apiKey: deps.config.VITE_TRON_GRID_API_KEY,
13
- route,
14
- sellAmountCryptoBaseUnit,
15
- isSellingNativeTrx: !(0, utils_1.contractAddressOrUndefined)(sellAsset.assetId),
16
- address: from,
17
- slippageTolerancePercentageDecimal: input.slippageTolerancePercentageDecimal,
18
- };
12
+ const { type, route, sellAsset, sellAmountCryptoBaseUnit, buyAmountCryptoBaseUnit, from, input } = args;
13
+ const adapter = args.deps.assertGetTronChainAdapter(sellAsset.chainId);
14
+ const isNativeSell = sellAsset.assetId === caip_1.tronAssetId;
15
+ const fallbackEnergy = isNativeSell
16
+ ? constants_1.SUNIO_FALLBACK_SWAP_ENERGY_NATIVE
17
+ : constants_1.SUNIO_FALLBACK_SWAP_ENERGY_TRC20;
18
+ // The router reverts past this, so the quote expires with it
19
+ const deadline = Date.now() + constants_1.SUNIO_SWAP_DEADLINE_MS;
20
+ const buildCall = (recipient) => ({
21
+ to: constants_1.SUNIO_SMART_ROUTER_CONTRACT,
22
+ value: isNativeSell ? sellAmountCryptoBaseUnit : '0',
23
+ data: (0, buildSwapContractCall_1.buildSunioSwapCalldata)({
24
+ route,
25
+ sellAmountCryptoBaseUnit,
26
+ minBuyAmountCryptoBaseUnit: buyAmountCryptoBaseUnit,
27
+ recipient,
28
+ slippageTolerancePercentageDecimal: input.slippageTolerancePercentageDecimal ?? constants_1.DEFAULT_SLIPPAGE_PERCENTAGE,
29
+ deadline,
30
+ }),
31
+ });
19
32
  if (type === 'rate') {
20
33
  const networkFeeCryptoBaseUnit = await (async () => {
21
34
  try {
22
- return await (0, estimateSunioNetworkFee_1.estimateSunioNetworkFeeCryptoBaseUnit)(estimateArgs);
35
+ if (from) {
36
+ const { to, value, data } = buildCall(from);
37
+ const { fast } = await adapter.getFeeData({ to, value, chainSpecific: { from, data } });
38
+ return fast.txFee;
39
+ }
23
40
  }
24
- catch {
25
- return undefined;
41
+ catch { }
42
+ try {
43
+ return await (0, tron_1.getTronContractCallFallbackFeeCryptoBaseUnit)({
44
+ adapter,
45
+ energy: fallbackEnergy,
46
+ bandwidthBytes: chain_adapters_1.tron.getTronContractCallBandwidthBytes(buildCall(from ?? tron_1.TRON_PLACEHOLDER_ADDRESS).data),
47
+ contractAddress: constants_1.SUNIO_SMART_ROUTER_CONTRACT,
48
+ fullEnergyOnShareLookupFailure: true,
49
+ });
26
50
  }
51
+ catch { }
27
52
  })();
28
53
  const stepData = { networkFeeCryptoBaseUnit };
29
54
  return (0, monads_1.Ok)(stepData);
30
55
  }
56
+ const call = buildCall(input.receiveAddress);
31
57
  try {
32
- const networkFeeCryptoBaseUnit = await (0, estimateSunioNetworkFee_1.estimateSunioNetworkFeeCryptoBaseUnit)(estimateArgs);
33
58
  const stepData = {
34
- networkFeeCryptoBaseUnit,
35
- sunioTransactionData: { route },
59
+ transactionData: { type: 'tron', ...call },
60
+ networkFeeCryptoBaseUnit: await (0, tron_1.getTronContractCallNetworkFeeCryptoBaseUnit)({
61
+ adapter,
62
+ transactionData: call,
63
+ from,
64
+ sellAsset,
65
+ sellAmountCryptoBaseUnit,
66
+ spenderAddress: constants_1.SUNIO_SMART_ROUTER_CONTRACT,
67
+ fallbackEnergy,
68
+ }),
69
+ deadline,
36
70
  };
37
71
  return (0, monads_1.Ok)(stepData);
38
72
  }
39
73
  catch (error) {
40
- return (0, monads_1.Err)((0, utils_2.makeNetworkFeeEstimationFailedErr)('getSunioStepData', error));
74
+ return (0, monads_1.Err)((0, utils_1.makeNetworkFeeEstimationFailedErr)('getSunioStepData', error));
41
75
  }
42
76
  }
43
77
  exports.getSunioStepData = getSunioStepData;
@@ -0,0 +1,177 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const caip_1 = require("@shapeshiftoss/caip");
4
+ const chain_adapters_1 = require("@shapeshiftoss/chain-adapters");
5
+ const vitest_1 = require("vitest");
6
+ const assets_1 = require("../../../utils/test-data/assets");
7
+ const buildSwapContractCall_1 = require("./buildSwapContractCall");
8
+ const constants_1 = require("./constants");
9
+ const getSunioStepData_1 = require("./getSunioStepData");
10
+ const USDT = 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t';
11
+ const TRX = { ...assets_1.ETH, assetId: `${caip_1.tronChainId}/slip44:195`, chainId: caip_1.tronChainId };
12
+ const USDT_TRON = { ...assets_1.ETH, assetId: `${caip_1.tronChainId}/trc20:${USDT}`, chainId: caip_1.tronChainId };
13
+ const FROM = 'TT2T17KZhoDu47i2E4FWxfG79zdkEWkU9N';
14
+ const route = {
15
+ tokens: ['T9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb', USDT],
16
+ poolVersions: ['v2'],
17
+ poolFees: ['0'],
18
+ };
19
+ const tronAdapter = ({ txFee = '9000000', allowance = '0' } = {}) => ({
20
+ getFeeData: vitest_1.vi.fn().mockResolvedValue({ fast: { txFee } }),
21
+ httpProvider: {
22
+ getChainPrices: () => Promise.resolve({ energyPrice: 100, bandwidthPrice: 1000 }),
23
+ getTrc20Allowance: vitest_1.vi.fn().mockResolvedValue(allowance),
24
+ getTrc20Balance: vitest_1.vi.fn().mockResolvedValue('100000000'),
25
+ getContractEnergyShare: vitest_1.vi.fn().mockResolvedValue({
26
+ callerPercent: 100,
27
+ originEnergyLimit: 0,
28
+ originEnergyAvailable: 0,
29
+ }),
30
+ },
31
+ });
32
+ const makeDeps = (tron) => ({ assertGetTronChainAdapter: () => tron });
33
+ const baseArgs = {
34
+ route,
35
+ sellAmountCryptoBaseUnit: '100000000',
36
+ buyAmountCryptoBaseUnit: '30000000',
37
+ };
38
+ // The calldata is fixed-width ABI, so its size doesn't depend on the recipient or deadline
39
+ const calldataBandwidthBytes = chain_adapters_1.tron.getTronContractCallBandwidthBytes((0, buildSwapContractCall_1.buildSunioSwapCalldata)({
40
+ route,
41
+ sellAmountCryptoBaseUnit: '100000000',
42
+ minBuyAmountCryptoBaseUnit: '30000000',
43
+ recipient: FROM,
44
+ slippageTolerancePercentageDecimal: '0.005',
45
+ deadline: 0,
46
+ }));
47
+ const fallbackFee = (energy) => String(Number(energy) * 1.2 * 100 + calldataBandwidthBytes * 1000);
48
+ (0, vitest_1.describe)('getSunioStepData', () => {
49
+ (0, vitest_1.describe)('quote', () => {
50
+ (0, vitest_1.it)('carries the router call as transactionData and simulates it', async () => {
51
+ const adapter = tronAdapter();
52
+ const actual = await (0, getSunioStepData_1.getSunioStepData)({
53
+ ...baseArgs,
54
+ type: 'quote',
55
+ input: {
56
+ receiveAddress: FROM,
57
+ slippageTolerancePercentageDecimal: '0.01',
58
+ },
59
+ deps: makeDeps(adapter),
60
+ sellAsset: TRX,
61
+ from: FROM,
62
+ });
63
+ const { transactionData, networkFeeCryptoBaseUnit, deadline } = actual.unwrap();
64
+ (0, vitest_1.expect)(transactionData).toMatchObject({
65
+ type: 'tron',
66
+ to: constants_1.SUNIO_SMART_ROUTER_CONTRACT,
67
+ value: '100000000',
68
+ });
69
+ // swapExactInput selector
70
+ (0, vitest_1.expect)(transactionData.data).toMatch(/^0x[0-9a-f]{8}/);
71
+ (0, vitest_1.expect)(networkFeeCryptoBaseUnit).toBe('9000000');
72
+ (0, vitest_1.expect)(deadline).toBeGreaterThan(Date.now());
73
+ (0, vitest_1.expect)(adapter.getFeeData).toHaveBeenCalledWith({
74
+ to: constants_1.SUNIO_SMART_ROUTER_CONTRACT,
75
+ value: '100000000',
76
+ chainSpecific: { from: FROM, data: transactionData.data, requireEnergyShare: true },
77
+ });
78
+ });
79
+ (0, vitest_1.it)('sends no value for a token sell', async () => {
80
+ const actual = await (0, getSunioStepData_1.getSunioStepData)({
81
+ ...baseArgs,
82
+ type: 'quote',
83
+ input: { receiveAddress: FROM },
84
+ deps: makeDeps(tronAdapter()),
85
+ sellAsset: USDT_TRON,
86
+ from: FROM,
87
+ });
88
+ (0, vitest_1.expect)(actual.unwrap().transactionData.value).toBe('0');
89
+ });
90
+ (0, vitest_1.it)('fails a native quote when the simulation fails', async () => {
91
+ const adapter = tronAdapter();
92
+ adapter.getFeeData.mockRejectedValue(new Error('REVERT opcode executed'));
93
+ const actual = await (0, getSunioStepData_1.getSunioStepData)({
94
+ ...baseArgs,
95
+ type: 'quote',
96
+ input: { receiveAddress: FROM },
97
+ deps: makeDeps(adapter),
98
+ sellAsset: TRX,
99
+ from: FROM,
100
+ });
101
+ (0, vitest_1.expect)(actual.isErr()).toBe(true);
102
+ });
103
+ (0, vitest_1.it)('prices the token worst case when the allowance is not granted yet', async () => {
104
+ const adapter = tronAdapter({ allowance: '0' });
105
+ adapter.getFeeData.mockRejectedValue(new Error('REVERT opcode executed'));
106
+ const actual = await (0, getSunioStepData_1.getSunioStepData)({
107
+ ...baseArgs,
108
+ type: 'quote',
109
+ input: { receiveAddress: FROM },
110
+ deps: makeDeps(adapter),
111
+ sellAsset: USDT_TRON,
112
+ from: FROM,
113
+ });
114
+ const { transactionData, networkFeeCryptoBaseUnit } = actual.unwrap();
115
+ (0, vitest_1.expect)(transactionData.to).toBe(constants_1.SUNIO_SMART_ROUTER_CONTRACT);
116
+ (0, vitest_1.expect)(networkFeeCryptoBaseUnit).toBe(fallbackFee(constants_1.SUNIO_FALLBACK_SWAP_ENERGY_TRC20));
117
+ (0, vitest_1.expect)(adapter.httpProvider.getTrc20Allowance).toHaveBeenCalledWith({
118
+ contractAddress: USDT,
119
+ owner: FROM,
120
+ spender: constants_1.SUNIO_SMART_ROUTER_CONTRACT,
121
+ });
122
+ });
123
+ (0, vitest_1.it)('fails a token quote that reverts with its allowance in place', async () => {
124
+ const adapter = tronAdapter({ allowance: '100000000' });
125
+ adapter.getFeeData.mockRejectedValue(new Error('REVERT opcode executed'));
126
+ const actual = await (0, getSunioStepData_1.getSunioStepData)({
127
+ ...baseArgs,
128
+ type: 'quote',
129
+ input: { receiveAddress: FROM },
130
+ deps: makeDeps(adapter),
131
+ sellAsset: USDT_TRON,
132
+ from: FROM,
133
+ });
134
+ (0, vitest_1.expect)(actual.isErr()).toBe(true);
135
+ });
136
+ });
137
+ (0, vitest_1.describe)('rate', () => {
138
+ (0, vitest_1.it)('simulates from the receive address when present', async () => {
139
+ const actual = await (0, getSunioStepData_1.getSunioStepData)({
140
+ ...baseArgs,
141
+ type: 'rate',
142
+ input: { receiveAddress: FROM },
143
+ deps: makeDeps(tronAdapter()),
144
+ sellAsset: TRX,
145
+ from: FROM,
146
+ });
147
+ (0, vitest_1.expect)(actual.unwrap()).toEqual({ networkFeeCryptoBaseUnit: '9000000' });
148
+ });
149
+ (0, vitest_1.it)('prices the measured worst case without an address to simulate from', async () => {
150
+ const actual = await (0, getSunioStepData_1.getSunioStepData)({
151
+ ...baseArgs,
152
+ type: 'rate',
153
+ input: {},
154
+ deps: makeDeps(tronAdapter()),
155
+ sellAsset: TRX,
156
+ });
157
+ (0, vitest_1.expect)(actual.unwrap()).toEqual({
158
+ networkFeeCryptoBaseUnit: fallbackFee(constants_1.SUNIO_FALLBACK_SWAP_ENERGY_NATIVE),
159
+ });
160
+ });
161
+ (0, vitest_1.it)('prices the token worst case when a pre-approval simulation reverts', async () => {
162
+ const adapter = tronAdapter();
163
+ adapter.getFeeData.mockRejectedValue(new Error('REVERT opcode executed'));
164
+ const actual = await (0, getSunioStepData_1.getSunioStepData)({
165
+ ...baseArgs,
166
+ type: 'rate',
167
+ input: { receiveAddress: FROM },
168
+ deps: makeDeps(adapter),
169
+ sellAsset: USDT_TRON,
170
+ from: FROM,
171
+ });
172
+ (0, vitest_1.expect)(actual.unwrap()).toEqual({
173
+ networkFeeCryptoBaseUnit: fallbackFee(constants_1.SUNIO_FALLBACK_SWAP_ENERGY_TRC20),
174
+ });
175
+ });
176
+ });
177
+ });
@@ -7,7 +7,7 @@ const types_1 = require("../../../types");
7
7
  const utils_2 = require("../../../utils");
8
8
  const affiliateFee_1 = require("../../../utils/affiliateFee");
9
9
  const constants_1 = require("./constants");
10
- const fetchFromSunio_1 = require("./fetchFromSunio");
10
+ const fetchSunioQuote_1 = require("./fetchSunioQuote");
11
11
  const helpers_1 = require("./helpers");
12
12
  const sunioService_1 = require("./sunioService");
13
13
  const getSunioTradeContext = async ({ input, deps, }) => {
@@ -16,7 +16,7 @@ const getSunioTradeContext = async ({ input, deps, }) => {
16
16
  if (assertion.isErr())
17
17
  return (0, monads_1.Err)(assertion.unwrapErr());
18
18
  try {
19
- const maybeQuoteResponse = await (0, fetchFromSunio_1.fetchSunioQuote)({
19
+ const maybeQuoteResponse = await (0, fetchSunioQuote_1.fetchSunioQuote)({
20
20
  sellAssetId: sellAsset.assetId,
21
21
  buyAssetId: buyAsset.assetId,
22
22
  sellAmountCryptoBaseUnit: sellAmountIncludingProtocolFeesCryptoBaseUnit,
@@ -87,6 +87,7 @@ const getSunioTradeContext = async ({ input, deps, }) => {
87
87
  deps,
88
88
  sellAsset,
89
89
  sellAmountCryptoBaseUnit: sellAmountIncludingProtocolFeesCryptoBaseUnit,
90
+ buyAmountCryptoBaseUnit,
90
91
  route: bestRoute,
91
92
  },
92
93
  });
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.assertValidTrade = exports.assetIdToTronToken = exports.isSupportedChainId = 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 types_1 = require("../../../types");
@@ -16,7 +17,7 @@ const assetIdToTronToken = (assetId) => {
16
17
  const { assetReference } = (0, caip_1.fromAssetId)(assetId);
17
18
  return assetReference;
18
19
  }
19
- return constants_1.SUNIO_TRON_NATIVE_ADDRESS;
20
+ return chain_adapters_1.tron.TRON_ZERO_ADDRESS;
20
21
  };
21
22
  exports.assetIdToTronToken = assetIdToTronToken;
22
23
  const assertValidTrade = ({ sellAsset, buyAsset, }) => {
@@ -1,15 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.thorchainApi = void 0;
4
- const types_1 = require("../../types");
5
4
  const cosmossdk_1 = require("../../utils/cosmossdk");
6
5
  const evm_1 = require("../../utils/evm");
7
6
  const solana_1 = require("../../utils/solana");
8
7
  const thorchain_1 = require("../../utils/thorchain");
8
+ const tron_1 = require("../../utils/tron");
9
9
  const utxo_1 = require("../../utils/utxo");
10
10
  const getTradeQuote_1 = require("./getTradeQuote/getTradeQuote");
11
11
  const getTradeRate_1 = require("./getTradeRate/getTradeRate");
12
- const swapperName = types_1.SwapperName.Thorchain;
13
12
  exports.thorchainApi = {
14
13
  getTradeRate: (input, deps) => (0, getTradeRate_1.getTradeRate)(input, deps),
15
14
  getTradeQuote: (input, deps) => (0, getTradeQuote_1.getTradeQuote)(input, deps),
@@ -21,8 +20,8 @@ exports.thorchainApi = {
21
20
  getCosmosSdkTransactionFees: cosmossdk_1.getCosmosSdkTransactionFees,
22
21
  getUnsignedSolanaTransaction: solana_1.getUnsignedSolanaTransaction,
23
22
  getSolanaTransactionFees: solana_1.getSolanaTransactionFees,
24
- getUnsignedTronTransaction: input => thorchain_1.tron.getUnsignedTronTransaction(input, swapperName),
25
- getTronTransactionFees: input => thorchain_1.tron.getTronTransactionFees(input, swapperName),
23
+ getUnsignedTronTransaction: tron_1.getUnsignedTronTransaction,
24
+ getTronTransactionFees: tron_1.getTronTransactionFees,
26
25
  checkTradeStatus: input => {
27
26
  const { config } = input;
28
27
  const nodeUrl = `${config.VITE_THORCHAIN_NODE_URL}/thorchain`;
@@ -41,7 +41,12 @@ const addL1ToLongtailPartsToMemo = ({ sellAssetChainId, quotedMemo, aggregator,
41
41
  finalAssetAddress: finalAssetContractAddressShortened,
42
42
  });
43
43
  const [prefix, nativeAssetName, address, nativeAssetLimitWithManualSlippage, affiliate, affiliateBps, aggregatorLastTwoChars, finalAssetContract,] = quotedMemoWithAggregatorAndFinalAssetContract.split(thorchain_1.MEMO_PART_DELIMITER);
44
- const shortenedNativeAssetName = longTailHelpers_1.shortenedNativeAssetNameByNativeAssetName[nativeAssetName];
44
+ // THORNode quote memos may already use the shortened native asset name
45
+ const shortenedNativeAssetNames = Object.values(longTailHelpers_1.shortenedNativeAssetNameByNativeAssetName);
46
+ const isAlreadyShortened = shortenedNativeAssetNames.includes(nativeAssetName);
47
+ const shortenedNativeAssetName = isAlreadyShortened
48
+ ? nativeAssetName
49
+ : longTailHelpers_1.shortenedNativeAssetNameByNativeAssetName[nativeAssetName];
45
50
  (0, assert_1.default)(shortenedNativeAssetName, 'cannot find shortened native asset name');
46
51
  const memoWithoutFinalAssetLimit = [
47
52
  prefix,
@@ -37,6 +37,21 @@ const slippageBps = 100; // 1%
37
37
  // The aggregator will turn the finalAssetAmountOut from 94136714201 to 9413671420 using the last 2 bytes as exponents
38
38
  `=:e:0x32DBc9Cf9E8FbCebE1e0a2ecF05Ed86Ca3096Cb6:42:ss:100:d2:a6df4741:94136714201`);
39
39
  });
40
+ (0, vitest_1.it)('should accept a quoted memo with an already shortened native asset name', () => {
41
+ const finalAssetAmountOut = '9508759019';
42
+ const quotedMemo = `=:e:0x32DBc9Cf9E8FbCebE1e0a2ecF05Ed86Ca3096Cb6:42:ss:100`;
43
+ const modifiedMemo = (0, addL1ToLongtailPartsToMemo_1.addL1ToLongtailPartsToMemo)({
44
+ sellAssetChainId: caip_1.ethChainId,
45
+ quotedMemo,
46
+ aggregator: AGGREGATOR_ADDRESS,
47
+ finalAssetAssetId: FINAL_ASSET_ASSETID,
48
+ finalAssetAmountOut,
49
+ slippageBps,
50
+ longtailTokens: THORCHAIN_ASSETIDS_ONE_COLLISION,
51
+ affiliate: constants_1.THORCHAIN_AFFILIATE_NAME,
52
+ });
53
+ (0, vitest_1.expect)(modifiedMemo).toBe(`=:e:0x32DBc9Cf9E8FbCebE1e0a2ecF05Ed86Ca3096Cb6:42:ss:100:d2:a6df4741:94136714201`);
54
+ });
40
55
  (0, vitest_1.it)('should throw if chainId is BCH and initial memo length is > 220', () => {
41
56
  const finalAssetAmountOut = '2083854765519275828179229';
42
57
  const memoOver220Bytes = `=:ETH.ETH:${REALLY_BIG_ADDRESS}:42:ss:100`;
@@ -94,6 +94,13 @@ const assertValidL1ToLongtailTrade = async ({ sellAsset, buyAsset, deps, }) => {
94
94
  details: { sellAssetChainId: sellAsset.chainId },
95
95
  }));
96
96
  }
97
+ if (sellAsset.assetId === buyAssetFeeAsset.assetId) {
98
+ return (0, monads_1.Err)((0, utils_1.makeSwapErrorRight)({
99
+ message: `[getThorTradeQuote] - Cannot swap ${sellAsset.assetId} to itself before the aggregator.`,
100
+ code: types_1.TradeQuoteError.UnsupportedTradePair,
101
+ details: { buyAsset, sellAsset },
102
+ }));
103
+ }
97
104
  return (0, monads_1.Ok)({ buyAssetFeeAsset, longtailTokens });
98
105
  };
99
106
  exports.assertValidL1ToLongtailTrade = assertValidL1ToLongtailTrade;
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getL1ToLongtailQuote = void 0;
4
- const contracts_1 = require("@shapeshiftoss/contracts");
5
4
  const utils_1 = require("@shapeshiftoss/utils");
6
5
  const monads_1 = require("@sniptt/monads");
7
6
  const constants_1 = require("../../../constants");
@@ -85,7 +84,6 @@ const getL1ToLongtailQuote = async (input, deps, streamingInterval, swapperName)
85
84
  buyAmountAfterFeesCryptoBaseUnit: quotedAmountOut.toString(),
86
85
  // This is wrong, we should get the get the value before fees or display ETH value received after the thorchain bridge
87
86
  buyAmountBeforeFeesCryptoBaseUnit: quotedAmountOut.toString(),
88
- allowanceContract: contracts_1.TS_AGGREGATOR_TOKEN_TRANSFER_PROXY_CONTRACT_MAINNET,
89
87
  transactionData,
90
88
  feeData: { ...s.feeData, networkFeeCryptoBaseUnit },
91
89
  })),
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getL1ToLongtailRate = void 0;
4
- const contracts_1 = require("@shapeshiftoss/contracts");
5
4
  const monads_1 = require("@sniptt/monads");
6
5
  const thorchain_1 = require("../../../utils/thorchain");
7
6
  const assertValidLongtailTrade_1 = require("./assertValidLongtailTrade");
@@ -38,7 +37,6 @@ const getL1ToLongtailRate = async (input, deps, streamingInterval, swapperName)
38
37
  buyAmountAfterFeesCryptoBaseUnit: quotedAmountOut.toString(),
39
38
  // This is wrong, we should get the get the value before fees or display ETH value received after the thorchain bridge
40
39
  buyAmountBeforeFeesCryptoBaseUnit: quotedAmountOut.toString(),
41
- allowanceContract: contracts_1.TS_AGGREGATOR_TOKEN_TRANSFER_PROXY_CONTRACT_MAINNET,
42
40
  })),
43
41
  isLongtail: true,
44
42
  });
@@ -1,2 +1,2 @@
1
1
  import type { AssetId } from '@shapeshiftoss/caip';
2
- export declare const getUniqueAddressSubstring: (destinationAssetId: AssetId, longTailAssetIds: AssetId[]) => AssetId;
2
+ export declare const getUniqueAddressSubstring: (destinationAssetId: AssetId, longTailAssetIds: AssetId[]) => string;
@@ -1,27 +1,24 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getUniqueAddressSubstring = void 0;
4
+ const caip_1 = require("@shapeshiftoss/caip");
5
+ const MINIMUM_UNIQUE_SUBSTRING = 2;
6
+ // Mirrors THORNode's externalAssetMatch: a case-insensitive suffix match against the target chain's token list only
4
7
  const getUniqueAddressSubstring = (destinationAssetId, longTailAssetIds) => {
5
- const MINIMUM_UNIQUE_SUBSTRING = 2;
6
- let maybeShortenedDestinationAddress = destinationAssetId;
7
- const substringsCount = {};
8
- for (let length = MINIMUM_UNIQUE_SUBSTRING; length <= destinationAssetId.length - 2; length++) {
9
- const currentSubstring = destinationAssetId.slice(-length);
10
- substringsCount[currentSubstring] = 0;
8
+ const { chainId, assetReference } = (0, caip_1.fromAssetId)(destinationAssetId);
9
+ const address = assetReference.toLowerCase();
10
+ const sameChainAddresses = longTailAssetIds
11
+ .map(assetId => (0, caip_1.fromAssetId)(assetId))
12
+ .filter(asset => asset.chainId === chainId)
13
+ .map(asset => asset.assetReference.toLowerCase());
14
+ if (!sameChainAddresses.includes(address))
15
+ return address;
16
+ for (let length = MINIMUM_UNIQUE_SUBSTRING; length < address.length; length++) {
17
+ const suffix = address.slice(-length);
18
+ const matchCount = sameChainAddresses.filter(sameChainAddress => sameChainAddress.endsWith(suffix)).length;
19
+ if (matchCount === 1)
20
+ return suffix;
11
21
  }
12
- longTailAssetIds.forEach(assetId => {
13
- Object.keys(substringsCount).forEach(substring => {
14
- if (assetId.includes(substring)) {
15
- substringsCount[substring] += 1;
16
- }
17
- });
18
- });
19
- for (const [substring, count] of Object.entries(substringsCount)) {
20
- if (count === 1) {
21
- maybeShortenedDestinationAddress = substring;
22
- break;
23
- }
24
- }
25
- return maybeShortenedDestinationAddress;
22
+ return address;
26
23
  };
27
24
  exports.getUniqueAddressSubstring = getUniqueAddressSubstring;
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  const caip_1 = require("@shapeshiftoss/caip");
4
7
  const vitest_1 = require("vitest");
8
+ const generatedThorLongtailTokens_json_1 = __importDefault(require("../../generated/generatedThorLongtailTokens.json"));
5
9
  const getUniqueAddressSubstring_1 = require("./getUniqueAddressSubstring");
6
10
  const FINAL_ASSET_ASSETID = (0, caip_1.toAssetId)({
7
11
  chainId: caip_1.ethChainId,
@@ -18,6 +22,16 @@ const BIGGER_COLLIDING_FINAL_ASSETID = (0, caip_1.toAssetId)({
18
22
  assetReference: '0xa0b86991c6218b36c1d19d4a2e9eb032a6dF4741',
19
23
  assetNamespace: 'erc20',
20
24
  });
25
+ const SAME_ADDRESS_OTHER_CHAIN_ASSETID = (0, caip_1.toAssetId)({
26
+ chainId: caip_1.bscChainId,
27
+ assetReference: '0x8a65ac0E23F31979db06Ec62Af62b432a6dF4741',
28
+ assetNamespace: 'erc20',
29
+ });
30
+ const ONE_INCH_ASSETID = (0, caip_1.toAssetId)({
31
+ chainId: caip_1.ethChainId,
32
+ assetReference: '0x111111111117dc0aa78b770fa6a738034120c302',
33
+ assetNamespace: 'erc20',
34
+ });
21
35
  const SHORTENED_FINAL_ASSET_ADDRESS = 'a6df4741';
22
36
  const BIGGER_SHORTENED_FINAL_ASSET_ADDRESS = '432a6df4741';
23
37
  const THORCHAIN_ASSETIDS_ONE_COLLISION = [FINAL_ASSET_ASSETID, COLLIDING_FINAL_ASSETID];
@@ -35,4 +49,21 @@ const THORCHAIN_ASSETIDS_TWO_COLLISION = [
35
49
  const substring = (0, getUniqueAddressSubstring_1.getUniqueAddressSubstring)(FINAL_ASSET_ASSETID, THORCHAIN_ASSETIDS_TWO_COLLISION);
36
50
  (0, vitest_1.expect)(substring).toBe(BIGGER_SHORTENED_FINAL_ASSET_ADDRESS);
37
51
  });
52
+ (0, vitest_1.it)('should ignore the same address on other chains', () => {
53
+ const substring = (0, getUniqueAddressSubstring_1.getUniqueAddressSubstring)(FINAL_ASSET_ASSETID, [
54
+ ...THORCHAIN_ASSETIDS_ONE_COLLISION,
55
+ SAME_ADDRESS_OTHER_CHAIN_ASSETID,
56
+ ]);
57
+ (0, vitest_1.expect)(substring).toBe(SHORTENED_FINAL_ASSET_ADDRESS);
58
+ });
59
+ (0, vitest_1.it)('should return the full address when the asset is not in the list', () => {
60
+ const substring = (0, getUniqueAddressSubstring_1.getUniqueAddressSubstring)(FINAL_ASSET_ASSETID, [COLLIDING_FINAL_ASSETID]);
61
+ (0, vitest_1.expect)(substring).toBe('0x8a65ac0e23f31979db06ec62af62b432a6df4741');
62
+ });
63
+ (0, vitest_1.it)('should return a hex suffix for an address listed on multiple chains', () => {
64
+ (0, vitest_1.expect)(generatedThorLongtailTokens_json_1.default).toContain(ONE_INCH_ASSETID);
65
+ const substring = (0, getUniqueAddressSubstring_1.getUniqueAddressSubstring)(ONE_INCH_ASSETID, generatedThorLongtailTokens_json_1.default);
66
+ (0, vitest_1.expect)(substring).toMatch(/^[0-9a-f]+$/);
67
+ (0, vitest_1.expect)('0x111111111117dc0aa78b770fa6a738034120c302'.endsWith(substring)).toBe(true);
68
+ });
38
69
  });