@shapeshiftoss/swapper 20.2.0 → 20.4.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.
- package/dist/cjs/.tsbuildinfo +1 -1
- package/dist/cjs/constants.js +15 -0
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.js +2 -0
- package/dist/cjs/swappers/ArbitrumBridgeSwapper/getTradeQuote/getTradeQuote.js +0 -2
- package/dist/cjs/swappers/AvnuSwapper/swapperApi/getTradeQuote.js +1 -2
- package/dist/cjs/swappers/BebopSwapper/utils/fetchFromBebop.d.ts +2 -1
- package/dist/cjs/swappers/BebopSwapper/utils/fetchFromBebop.js +21 -15
- package/dist/cjs/swappers/BebopSwapper/utils/getBebopSolanaTradeContext.js +1 -0
- package/dist/cjs/swappers/BobGatewaySwapper/BobGatewaySwapper.js +10 -1
- package/dist/cjs/swappers/BobGatewaySwapper/endpoints.js +2 -33
- package/dist/cjs/swappers/BobGatewaySwapper/swapperApi/getTradeQuote.js +5 -10
- package/dist/cjs/swappers/BobGatewaySwapper/swapperApi/getTradeRate.js +1 -2
- package/dist/cjs/swappers/BobGatewaySwapper/types.d.ts +3 -3
- package/dist/cjs/swappers/BobGatewaySwapper/utils/constants.d.ts +3 -2
- package/dist/cjs/swappers/BobGatewaySwapper/utils/constants.js +8 -5
- package/dist/cjs/swappers/BobGatewaySwapper/utils/getBobGatewayStepData.d.ts +2 -2
- package/dist/cjs/swappers/BobGatewaySwapper/utils/getBobGatewayStepData.js +30 -34
- package/dist/cjs/swappers/BobGatewaySwapper/utils/getBobGatewayStepData.test.d.ts +1 -0
- package/dist/cjs/swappers/BobGatewaySwapper/utils/getBobGatewayStepData.test.js +117 -0
- package/dist/cjs/swappers/BobGatewaySwapper/utils/getBobGatewayTradeContext.js +1 -2
- package/dist/cjs/swappers/BobGatewaySwapper/utils/helpers.d.ts +8 -11
- package/dist/cjs/swappers/BobGatewaySwapper/utils/helpers.js +36 -31
- package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeQuote.js +2 -5
- package/dist/cjs/swappers/ButterSwap/types.d.ts +0 -11
- package/dist/cjs/swappers/ButterSwap/utils/constants.d.ts +2 -0
- package/dist/cjs/swappers/ButterSwap/utils/constants.js +4 -1
- package/dist/cjs/swappers/ButterSwap/utils/getButterSwapStepData.d.ts +2 -3
- package/dist/cjs/swappers/ButterSwap/utils/getButterSwapStepData.js +42 -14
- package/dist/cjs/swappers/ButterSwap/utils/getButterSwapStepData.test.js +120 -17
- package/dist/cjs/swappers/ButterSwap/utils/helpers.js +1 -2
- package/dist/cjs/swappers/ButterSwap/xhr.js +3 -3
- package/dist/cjs/swappers/CetusSwapper/swapperApi/getTradeQuote.js +0 -2
- package/dist/cjs/swappers/ChainflipSwapper/endpoints.js +3 -19
- package/dist/cjs/swappers/ChainflipSwapper/swapperApi/getTradeQuote.js +1 -2
- package/dist/cjs/swappers/ChainflipSwapper/types.d.ts +1 -0
- package/dist/cjs/swappers/ChainflipSwapper/utils/getChainflipStepData.d.ts +1 -1
- package/dist/cjs/swappers/ChainflipSwapper/utils/getChainflipStepData.js +31 -12
- package/dist/cjs/swappers/DebridgeSwapper/getTradeQuote/getTradeQuote.js +0 -2
- package/dist/cjs/swappers/FyndSwapper/FyndSwapper.d.ts +2 -0
- package/dist/cjs/swappers/FyndSwapper/FyndSwapper.js +5 -0
- package/dist/cjs/swappers/FyndSwapper/endpoints.d.ts +2 -0
- package/dist/cjs/swappers/FyndSwapper/endpoints.js +14 -0
- package/dist/cjs/swappers/FyndSwapper/getTradeQuote/getTradeQuote.d.ts +4 -0
- package/dist/cjs/swappers/FyndSwapper/getTradeQuote/getTradeQuote.js +43 -0
- package/dist/cjs/swappers/FyndSwapper/getTradeRate/getTradeRate.d.ts +4 -0
- package/dist/cjs/swappers/FyndSwapper/getTradeRate/getTradeRate.js +34 -0
- package/dist/cjs/swappers/FyndSwapper/index.d.ts +2 -0
- package/dist/cjs/swappers/FyndSwapper/index.js +7 -0
- package/dist/cjs/swappers/FyndSwapper/types.d.ts +41 -0
- package/dist/cjs/swappers/FyndSwapper/types.js +2 -0
- package/dist/cjs/swappers/FyndSwapper/utils/constants.d.ts +33 -0
- package/dist/cjs/swappers/FyndSwapper/utils/constants.js +38 -0
- package/dist/cjs/swappers/FyndSwapper/utils/fetchFromFynd.d.ts +13 -0
- package/dist/cjs/swappers/FyndSwapper/utils/fetchFromFynd.js +42 -0
- package/dist/cjs/swappers/FyndSwapper/utils/fyndService.d.ts +5 -0
- package/dist/cjs/swappers/FyndSwapper/utils/fyndService.js +9 -0
- package/dist/cjs/swappers/FyndSwapper/utils/getFyndStepData.d.ts +25 -0
- package/dist/cjs/swappers/FyndSwapper/utils/getFyndStepData.js +48 -0
- package/dist/cjs/swappers/FyndSwapper/utils/getFyndTradeContext.d.ts +18 -0
- package/dist/cjs/swappers/FyndSwapper/utils/getFyndTradeContext.js +94 -0
- package/dist/cjs/swappers/FyndSwapper/utils/helpers.d.ts +24 -0
- package/dist/cjs/swappers/FyndSwapper/utils/helpers.js +174 -0
- package/dist/cjs/swappers/FyndSwapper/utils/helpers.test.d.ts +1 -0
- package/dist/cjs/swappers/FyndSwapper/utils/helpers.test.js +101 -0
- package/dist/cjs/swappers/MayachainSwapper/generated/generatedTradableAssetMap.json +0 -1
- package/dist/cjs/swappers/NearIntentsSwapper/constants.d.ts +1 -0
- package/dist/cjs/swappers/NearIntentsSwapper/constants.js +3 -1
- package/dist/cjs/swappers/NearIntentsSwapper/utils/getNearIntentsStepData.js +10 -5
- package/dist/cjs/swappers/NearIntentsSwapper/utils/helpers.js +1 -1
- package/dist/cjs/swappers/PortalsSwapper/endpoints.js +4 -1
- package/dist/cjs/swappers/PortalsSwapper/getPortalsTradeQuote/getPortalsTradeQuote.js +1 -1
- package/dist/cjs/swappers/RelaySwapper/constant.d.ts +1 -1
- package/dist/cjs/swappers/RelaySwapper/constant.js +3 -2
- package/dist/cjs/swappers/RelaySwapper/getTradeQuote/getTradeQuote.js +3 -5
- package/dist/cjs/swappers/RelaySwapper/utils/getRelayAssetAddress.js +2 -1
- package/dist/cjs/swappers/RelaySwapper/utils/getRelayStepData.d.ts +2 -3
- package/dist/cjs/swappers/RelaySwapper/utils/getRelayStepData.js +46 -13
- package/dist/cjs/swappers/RelaySwapper/utils/getRelayStepData.test.d.ts +1 -0
- package/dist/cjs/swappers/RelaySwapper/utils/getRelayStepData.test.js +139 -0
- package/dist/cjs/swappers/RelaySwapper/utils/getRelayTradeContext.d.ts +1 -0
- package/dist/cjs/swappers/RelaySwapper/utils/getRelayTradeContext.js +4 -0
- package/dist/cjs/swappers/RelaySwapper/utils/helpers.js +1 -2
- package/dist/cjs/swappers/RelaySwapper/utils/relayStatus.js +3 -3
- package/dist/cjs/swappers/RelaySwapper/utils/relayTokenToAssetId.js +1 -1
- package/dist/cjs/swappers/RelaySwapper/utils/types.d.ts +10 -8
- package/dist/cjs/swappers/SunioSwapper/endpoints.js +3 -63
- package/dist/cjs/swappers/SunioSwapper/getSunioTradeQuote/getSunioTradeQuote.js +3 -4
- package/dist/cjs/swappers/SunioSwapper/getSunioTradeRate/getSunioTradeRate.js +7 -1
- package/dist/cjs/swappers/SunioSwapper/types.d.ts +0 -3
- package/dist/cjs/swappers/SunioSwapper/utils/buildSwapContractCall.d.ts +11 -6
- package/dist/cjs/swappers/SunioSwapper/utils/buildSwapContractCall.js +33 -30
- package/dist/cjs/swappers/SunioSwapper/utils/constants.d.ts +3 -3
- package/dist/cjs/swappers/SunioSwapper/utils/constants.js +5 -9
- package/dist/cjs/swappers/SunioSwapper/utils/getSunioStepData.d.ts +8 -3
- package/dist/cjs/swappers/SunioSwapper/utils/getSunioStepData.js +54 -20
- package/dist/cjs/swappers/SunioSwapper/utils/getSunioStepData.test.d.ts +1 -0
- package/dist/cjs/swappers/SunioSwapper/utils/getSunioStepData.test.js +177 -0
- package/dist/cjs/swappers/SunioSwapper/utils/getSunioTradeContext.js +3 -2
- package/dist/cjs/swappers/SunioSwapper/utils/helpers.js +2 -1
- package/dist/cjs/swappers/SymbiosisSwapper/SymbiosisSwapper.d.ts +2 -0
- package/dist/cjs/swappers/SymbiosisSwapper/SymbiosisSwapper.js +8 -0
- package/dist/cjs/swappers/SymbiosisSwapper/endpoints.d.ts +2 -0
- package/dist/cjs/swappers/SymbiosisSwapper/endpoints.js +66 -0
- package/dist/cjs/swappers/SymbiosisSwapper/getTradeQuote/getTradeQuote.d.ts +4 -0
- package/dist/cjs/swappers/SymbiosisSwapper/getTradeQuote/getTradeQuote.js +42 -0
- package/dist/cjs/swappers/SymbiosisSwapper/getTradeRate/getTradeRate.d.ts +4 -0
- package/dist/cjs/swappers/SymbiosisSwapper/getTradeRate/getTradeRate.js +34 -0
- package/dist/cjs/swappers/SymbiosisSwapper/index.d.ts +2 -0
- package/dist/cjs/swappers/SymbiosisSwapper/index.js +7 -0
- package/dist/cjs/swappers/SymbiosisSwapper/utils/constants.d.ts +19 -0
- package/dist/cjs/swappers/SymbiosisSwapper/utils/constants.js +64 -0
- package/dist/cjs/swappers/SymbiosisSwapper/utils/getSymbiosisStepData.d.ts +26 -0
- package/dist/cjs/swappers/SymbiosisSwapper/utils/getSymbiosisStepData.js +106 -0
- package/dist/cjs/swappers/SymbiosisSwapper/utils/getSymbiosisStepData.test.d.ts +1 -0
- package/dist/cjs/swappers/SymbiosisSwapper/utils/getSymbiosisStepData.test.js +161 -0
- package/dist/cjs/swappers/SymbiosisSwapper/utils/getSymbiosisTradeContext.d.ts +17 -0
- package/dist/cjs/swappers/SymbiosisSwapper/utils/getSymbiosisTradeContext.js +146 -0
- package/dist/cjs/swappers/SymbiosisSwapper/utils/helpers.d.ts +38 -0
- package/dist/cjs/swappers/SymbiosisSwapper/utils/helpers.js +172 -0
- package/dist/cjs/swappers/SymbiosisSwapper/utils/helpers.test.d.ts +1 -0
- package/dist/cjs/swappers/SymbiosisSwapper/utils/helpers.test.js +151 -0
- package/dist/cjs/swappers/SymbiosisSwapper/utils/symbiosisService.d.ts +5 -0
- package/dist/cjs/swappers/SymbiosisSwapper/utils/symbiosisService.js +18 -0
- package/dist/cjs/swappers/SymbiosisSwapper/utils/types.d.ts +83 -0
- package/dist/cjs/swappers/SymbiosisSwapper/utils/types.js +11 -0
- package/dist/cjs/swappers/ThorchainSwapper/endpoints.js +3 -4
- package/dist/cjs/swappers/ThorchainSwapper/generated/generatedThorLongtailTokens.json +1 -0
- package/dist/cjs/swappers/ThorchainSwapper/generated/generatedTradableAssetMap.json +1 -0
- package/dist/cjs/swappers/ThorchainSwapper/utils/addL1ToLongtailPartsToMemo/addL1ToLongtailPartsToMemo.js +6 -1
- package/dist/cjs/swappers/ThorchainSwapper/utils/addL1ToLongtailPartsToMemo/addL1ToLongtailPartsToMemo.test.js +15 -0
- package/dist/cjs/swappers/ThorchainSwapper/utils/assertValidLongtailTrade.js +7 -0
- package/dist/cjs/swappers/ThorchainSwapper/utils/getL1ToLongtailQuote.js +0 -2
- package/dist/cjs/swappers/ThorchainSwapper/utils/getL1ToLongtailRate.js +0 -2
- package/dist/cjs/swappers/ThorchainSwapper/utils/getLongtailQuote.js +1 -1
- package/dist/cjs/swappers/ThorchainSwapper/utils/getUniqueAddressSubstring/getUniqueAddressSubstring.d.ts +1 -1
- package/dist/cjs/swappers/ThorchainSwapper/utils/getUniqueAddressSubstring/getUniqueAddressSubstring.js +17 -20
- package/dist/cjs/swappers/ThorchainSwapper/utils/getUniqueAddressSubstring/getUniqueAddressSubstring.test.js +31 -0
- package/dist/cjs/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.js +24 -1
- package/dist/cjs/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.test.d.ts +1 -0
- package/dist/cjs/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.test.js +110 -0
- package/dist/cjs/swappers/ZrxSwapper/types.d.ts +2 -1
- package/dist/cjs/swappers/ZrxSwapper/utils/getZrxNativeCheckDeadline.d.ts +1 -0
- package/dist/cjs/swappers/ZrxSwapper/utils/getZrxNativeCheckDeadline.js +26 -0
- package/dist/cjs/types.d.ts +15 -13
- package/dist/cjs/types.js +2 -0
- package/dist/cjs/utils/helpers.d.ts +1 -2
- package/dist/cjs/utils/helpers.js +8 -32
- package/dist/cjs/utils/helpers.test.js +6 -2
- package/dist/cjs/utils/thorchain/getThorStepData.js +32 -49
- package/dist/cjs/utils/thorchain/getThorStepData.tron.test.d.ts +1 -0
- package/dist/cjs/utils/thorchain/getThorStepData.tron.test.js +93 -0
- package/dist/cjs/utils/thorchain/index.d.ts +0 -1
- package/dist/cjs/utils/thorchain/index.js +1 -14
- package/dist/cjs/utils/tron/constants.d.ts +1 -0
- package/dist/cjs/utils/tron/constants.js +5 -0
- package/dist/cjs/utils/tron/getTronNetworkFeeCryptoBaseUnit.d.ts +27 -0
- package/dist/cjs/utils/tron/getTronNetworkFeeCryptoBaseUnit.js +64 -0
- package/dist/cjs/utils/tron/getTronNetworkFeeCryptoBaseUnit.test.d.ts +1 -0
- package/dist/cjs/utils/tron/getTronNetworkFeeCryptoBaseUnit.test.js +157 -0
- package/dist/cjs/utils/tron/getUnsignedTronTransaction.d.ts +2 -1
- package/dist/cjs/utils/tron/getUnsignedTronTransaction.js +14 -48
- package/dist/cjs/utils/tron/getUnsignedTronTransaction.test.d.ts +1 -0
- package/dist/cjs/utils/tron/getUnsignedTronTransaction.test.js +76 -0
- package/dist/cjs/utils/tron/index.d.ts +2 -0
- package/dist/cjs/utils/tron/index.js +2 -0
- package/dist/esm/.tsbuildinfo +1 -1
- package/dist/esm/constants.js +15 -0
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/swappers/ArbitrumBridgeSwapper/getTradeQuote/getTradeQuote.js +0 -2
- package/dist/esm/swappers/AvnuSwapper/swapperApi/getTradeQuote.js +1 -2
- package/dist/esm/swappers/BebopSwapper/utils/fetchFromBebop.d.ts +2 -1
- package/dist/esm/swappers/BebopSwapper/utils/fetchFromBebop.js +21 -15
- package/dist/esm/swappers/BebopSwapper/utils/getBebopSolanaTradeContext.js +1 -0
- package/dist/esm/swappers/BobGatewaySwapper/BobGatewaySwapper.js +11 -2
- package/dist/esm/swappers/BobGatewaySwapper/endpoints.js +5 -36
- package/dist/esm/swappers/BobGatewaySwapper/swapperApi/getTradeQuote.js +5 -10
- package/dist/esm/swappers/BobGatewaySwapper/swapperApi/getTradeRate.js +1 -2
- package/dist/esm/swappers/BobGatewaySwapper/types.d.ts +3 -3
- package/dist/esm/swappers/BobGatewaySwapper/utils/constants.d.ts +3 -2
- package/dist/esm/swappers/BobGatewaySwapper/utils/constants.js +8 -7
- package/dist/esm/swappers/BobGatewaySwapper/utils/getBobGatewayStepData.d.ts +2 -2
- package/dist/esm/swappers/BobGatewaySwapper/utils/getBobGatewayStepData.js +21 -25
- package/dist/esm/swappers/BobGatewaySwapper/utils/getBobGatewayStepData.test.d.ts +1 -0
- package/dist/esm/swappers/BobGatewaySwapper/utils/getBobGatewayStepData.test.js +115 -0
- package/dist/esm/swappers/BobGatewaySwapper/utils/getBobGatewayTradeContext.js +1 -2
- package/dist/esm/swappers/BobGatewaySwapper/utils/helpers.d.ts +8 -11
- package/dist/esm/swappers/BobGatewaySwapper/utils/helpers.js +13 -30
- package/dist/esm/swappers/ButterSwap/swapperApi/getTradeQuote.js +2 -5
- package/dist/esm/swappers/ButterSwap/types.d.ts +0 -11
- package/dist/esm/swappers/ButterSwap/utils/constants.d.ts +2 -0
- package/dist/esm/swappers/ButterSwap/utils/constants.js +3 -0
- package/dist/esm/swappers/ButterSwap/utils/getButterSwapStepData.d.ts +2 -3
- package/dist/esm/swappers/ButterSwap/utils/getButterSwapStepData.js +42 -14
- package/dist/esm/swappers/ButterSwap/utils/getButterSwapStepData.test.js +120 -17
- package/dist/esm/swappers/ButterSwap/utils/helpers.js +1 -2
- package/dist/esm/swappers/ButterSwap/xhr.js +3 -3
- package/dist/esm/swappers/CetusSwapper/swapperApi/getTradeQuote.js +0 -2
- package/dist/esm/swappers/ChainflipSwapper/endpoints.js +3 -19
- package/dist/esm/swappers/ChainflipSwapper/swapperApi/getTradeQuote.js +1 -2
- package/dist/esm/swappers/ChainflipSwapper/types.d.ts +1 -0
- package/dist/esm/swappers/ChainflipSwapper/utils/getChainflipStepData.d.ts +1 -1
- package/dist/esm/swappers/ChainflipSwapper/utils/getChainflipStepData.js +32 -13
- package/dist/esm/swappers/DebridgeSwapper/getTradeQuote/getTradeQuote.js +0 -2
- package/dist/esm/swappers/FyndSwapper/FyndSwapper.d.ts +2 -0
- package/dist/esm/swappers/FyndSwapper/FyndSwapper.js +2 -0
- package/dist/esm/swappers/FyndSwapper/endpoints.d.ts +2 -0
- package/dist/esm/swappers/FyndSwapper/endpoints.js +11 -0
- package/dist/esm/swappers/FyndSwapper/getTradeQuote/getTradeQuote.d.ts +4 -0
- package/dist/esm/swappers/FyndSwapper/getTradeQuote/getTradeQuote.js +39 -0
- package/dist/esm/swappers/FyndSwapper/getTradeRate/getTradeRate.d.ts +4 -0
- package/dist/esm/swappers/FyndSwapper/getTradeRate/getTradeRate.js +30 -0
- package/dist/esm/swappers/FyndSwapper/index.d.ts +2 -0
- package/dist/esm/swappers/FyndSwapper/index.js +2 -0
- package/dist/esm/swappers/FyndSwapper/types.d.ts +41 -0
- package/dist/esm/swappers/FyndSwapper/types.js +1 -0
- package/dist/esm/swappers/FyndSwapper/utils/constants.d.ts +33 -0
- package/dist/esm/swappers/FyndSwapper/utils/constants.js +35 -0
- package/dist/esm/swappers/FyndSwapper/utils/fetchFromFynd.d.ts +13 -0
- package/dist/esm/swappers/FyndSwapper/utils/fetchFromFynd.js +38 -0
- package/dist/esm/swappers/FyndSwapper/utils/fyndService.d.ts +5 -0
- package/dist/esm/swappers/FyndSwapper/utils/fyndService.js +3 -0
- package/dist/esm/swappers/FyndSwapper/utils/getFyndStepData.d.ts +25 -0
- package/dist/esm/swappers/FyndSwapper/utils/getFyndStepData.js +44 -0
- package/dist/esm/swappers/FyndSwapper/utils/getFyndTradeContext.d.ts +18 -0
- package/dist/esm/swappers/FyndSwapper/utils/getFyndTradeContext.js +90 -0
- package/dist/esm/swappers/FyndSwapper/utils/helpers.d.ts +24 -0
- package/dist/esm/swappers/FyndSwapper/utils/helpers.js +162 -0
- package/dist/esm/swappers/FyndSwapper/utils/helpers.test.d.ts +1 -0
- package/dist/esm/swappers/FyndSwapper/utils/helpers.test.js +99 -0
- package/dist/esm/swappers/MayachainSwapper/generated/generatedTradableAssetMap.json +0 -1
- package/dist/esm/swappers/NearIntentsSwapper/constants.d.ts +1 -0
- package/dist/esm/swappers/NearIntentsSwapper/constants.js +2 -0
- package/dist/esm/swappers/NearIntentsSwapper/utils/getNearIntentsStepData.js +10 -5
- package/dist/esm/swappers/NearIntentsSwapper/utils/helpers.js +2 -2
- package/dist/esm/swappers/PortalsSwapper/endpoints.js +4 -1
- package/dist/esm/swappers/PortalsSwapper/getPortalsTradeQuote/getPortalsTradeQuote.js +2 -2
- package/dist/esm/swappers/RelaySwapper/constant.d.ts +1 -1
- package/dist/esm/swappers/RelaySwapper/constant.js +2 -1
- package/dist/esm/swappers/RelaySwapper/getTradeQuote/getTradeQuote.js +3 -5
- package/dist/esm/swappers/RelaySwapper/utils/getRelayAssetAddress.js +3 -2
- package/dist/esm/swappers/RelaySwapper/utils/getRelayStepData.d.ts +2 -3
- package/dist/esm/swappers/RelaySwapper/utils/getRelayStepData.js +46 -13
- package/dist/esm/swappers/RelaySwapper/utils/getRelayStepData.test.d.ts +1 -0
- package/dist/esm/swappers/RelaySwapper/utils/getRelayStepData.test.js +137 -0
- package/dist/esm/swappers/RelaySwapper/utils/getRelayTradeContext.d.ts +1 -0
- package/dist/esm/swappers/RelaySwapper/utils/getRelayTradeContext.js +5 -1
- package/dist/esm/swappers/RelaySwapper/utils/helpers.js +1 -2
- package/dist/esm/swappers/RelaySwapper/utils/relayStatus.js +3 -3
- package/dist/esm/swappers/RelaySwapper/utils/relayTokenToAssetId.js +3 -3
- package/dist/esm/swappers/RelaySwapper/utils/types.d.ts +10 -8
- package/dist/esm/swappers/SunioSwapper/endpoints.js +5 -65
- package/dist/esm/swappers/SunioSwapper/getSunioTradeQuote/getSunioTradeQuote.js +3 -4
- package/dist/esm/swappers/SunioSwapper/getSunioTradeRate/getSunioTradeRate.js +7 -1
- package/dist/esm/swappers/SunioSwapper/types.d.ts +0 -3
- package/dist/esm/swappers/SunioSwapper/utils/buildSwapContractCall.d.ts +11 -6
- package/dist/esm/swappers/SunioSwapper/utils/buildSwapContractCall.js +31 -28
- package/dist/esm/swappers/SunioSwapper/utils/constants.d.ts +3 -3
- package/dist/esm/swappers/SunioSwapper/utils/constants.js +4 -8
- package/dist/esm/swappers/SunioSwapper/utils/getSunioStepData.d.ts +8 -3
- package/dist/esm/swappers/SunioSwapper/utils/getSunioStepData.js +52 -18
- package/dist/esm/swappers/SunioSwapper/utils/getSunioStepData.test.d.ts +1 -0
- package/dist/esm/swappers/SunioSwapper/utils/getSunioStepData.test.js +175 -0
- package/dist/esm/swappers/SunioSwapper/utils/getSunioTradeContext.js +2 -1
- package/dist/esm/swappers/SunioSwapper/utils/helpers.js +3 -2
- package/dist/esm/swappers/SymbiosisSwapper/SymbiosisSwapper.d.ts +2 -0
- package/dist/esm/swappers/SymbiosisSwapper/SymbiosisSwapper.js +5 -0
- package/dist/esm/swappers/SymbiosisSwapper/endpoints.d.ts +2 -0
- package/dist/esm/swappers/SymbiosisSwapper/endpoints.js +63 -0
- package/dist/esm/swappers/SymbiosisSwapper/getTradeQuote/getTradeQuote.d.ts +4 -0
- package/dist/esm/swappers/SymbiosisSwapper/getTradeQuote/getTradeQuote.js +38 -0
- package/dist/esm/swappers/SymbiosisSwapper/getTradeRate/getTradeRate.d.ts +4 -0
- package/dist/esm/swappers/SymbiosisSwapper/getTradeRate/getTradeRate.js +30 -0
- package/dist/esm/swappers/SymbiosisSwapper/index.d.ts +2 -0
- package/dist/esm/swappers/SymbiosisSwapper/index.js +2 -0
- package/dist/esm/swappers/SymbiosisSwapper/utils/constants.d.ts +19 -0
- package/dist/esm/swappers/SymbiosisSwapper/utils/constants.js +61 -0
- package/dist/esm/swappers/SymbiosisSwapper/utils/getSymbiosisStepData.d.ts +26 -0
- package/dist/esm/swappers/SymbiosisSwapper/utils/getSymbiosisStepData.js +102 -0
- package/dist/esm/swappers/SymbiosisSwapper/utils/getSymbiosisStepData.test.d.ts +1 -0
- package/dist/esm/swappers/SymbiosisSwapper/utils/getSymbiosisStepData.test.js +159 -0
- package/dist/esm/swappers/SymbiosisSwapper/utils/getSymbiosisTradeContext.d.ts +17 -0
- package/dist/esm/swappers/SymbiosisSwapper/utils/getSymbiosisTradeContext.js +139 -0
- package/dist/esm/swappers/SymbiosisSwapper/utils/helpers.d.ts +38 -0
- package/dist/esm/swappers/SymbiosisSwapper/utils/helpers.js +156 -0
- package/dist/esm/swappers/SymbiosisSwapper/utils/helpers.test.d.ts +1 -0
- package/dist/esm/swappers/SymbiosisSwapper/utils/helpers.test.js +149 -0
- package/dist/esm/swappers/SymbiosisSwapper/utils/symbiosisService.d.ts +5 -0
- package/dist/esm/swappers/SymbiosisSwapper/utils/symbiosisService.js +12 -0
- package/dist/esm/swappers/SymbiosisSwapper/utils/types.d.ts +83 -0
- package/dist/esm/swappers/SymbiosisSwapper/utils/types.js +8 -0
- package/dist/esm/swappers/ThorchainSwapper/endpoints.js +4 -5
- package/dist/esm/swappers/ThorchainSwapper/generated/generatedThorLongtailTokens.json +1 -0
- package/dist/esm/swappers/ThorchainSwapper/generated/generatedTradableAssetMap.json +1 -0
- package/dist/esm/swappers/ThorchainSwapper/utils/addL1ToLongtailPartsToMemo/addL1ToLongtailPartsToMemo.js +6 -1
- package/dist/esm/swappers/ThorchainSwapper/utils/addL1ToLongtailPartsToMemo/addL1ToLongtailPartsToMemo.test.js +15 -0
- package/dist/esm/swappers/ThorchainSwapper/utils/assertValidLongtailTrade.js +7 -0
- package/dist/esm/swappers/ThorchainSwapper/utils/getL1ToLongtailQuote.js +0 -2
- package/dist/esm/swappers/ThorchainSwapper/utils/getL1ToLongtailRate.js +0 -2
- package/dist/esm/swappers/ThorchainSwapper/utils/getLongtailQuote.js +1 -1
- package/dist/esm/swappers/ThorchainSwapper/utils/getUniqueAddressSubstring/getUniqueAddressSubstring.d.ts +1 -1
- package/dist/esm/swappers/ThorchainSwapper/utils/getUniqueAddressSubstring/getUniqueAddressSubstring.js +17 -20
- package/dist/esm/swappers/ThorchainSwapper/utils/getUniqueAddressSubstring/getUniqueAddressSubstring.test.js +29 -1
- package/dist/esm/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.js +25 -2
- package/dist/esm/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.test.d.ts +1 -0
- package/dist/esm/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.test.js +108 -0
- package/dist/esm/swappers/ZrxSwapper/types.d.ts +2 -1
- package/dist/esm/swappers/ZrxSwapper/utils/getZrxNativeCheckDeadline.d.ts +1 -0
- package/dist/esm/swappers/ZrxSwapper/utils/getZrxNativeCheckDeadline.js +22 -0
- package/dist/esm/types.d.ts +15 -13
- package/dist/esm/types.js +2 -0
- package/dist/esm/utils/helpers.d.ts +1 -2
- package/dist/esm/utils/helpers.js +9 -33
- package/dist/esm/utils/helpers.test.js +6 -2
- package/dist/esm/utils/thorchain/getThorStepData.js +32 -49
- package/dist/esm/utils/thorchain/getThorStepData.tron.test.d.ts +1 -0
- package/dist/esm/utils/thorchain/getThorStepData.tron.test.js +91 -0
- package/dist/esm/utils/thorchain/index.d.ts +0 -1
- package/dist/esm/utils/thorchain/index.js +0 -1
- package/dist/esm/utils/tron/constants.d.ts +1 -0
- package/dist/esm/utils/tron/constants.js +2 -0
- package/dist/esm/utils/tron/getTronNetworkFeeCryptoBaseUnit.d.ts +27 -0
- package/dist/esm/utils/tron/getTronNetworkFeeCryptoBaseUnit.js +59 -0
- package/dist/esm/utils/tron/getTronNetworkFeeCryptoBaseUnit.test.d.ts +1 -0
- package/dist/esm/utils/tron/getTronNetworkFeeCryptoBaseUnit.test.js +155 -0
- package/dist/esm/utils/tron/getUnsignedTronTransaction.d.ts +2 -1
- package/dist/esm/utils/tron/getUnsignedTronTransaction.js +14 -48
- package/dist/esm/utils/tron/getUnsignedTronTransaction.test.d.ts +1 -0
- package/dist/esm/utils/tron/getUnsignedTronTransaction.test.js +74 -0
- package/dist/esm/utils/tron/index.d.ts +2 -0
- package/dist/esm/utils/tron/index.js +2 -0
- package/package.json +8 -8
- package/dist/cjs/swappers/SunioSwapper/utils/buildSwapRouteParameters.d.ts +0 -14
- package/dist/cjs/swappers/SunioSwapper/utils/buildSwapRouteParameters.js +0 -32
- package/dist/cjs/swappers/SunioSwapper/utils/estimateSunioNetworkFee.d.ts +0 -12
- package/dist/cjs/swappers/SunioSwapper/utils/estimateSunioNetworkFee.js +0 -78
- package/dist/cjs/swappers/SunioSwapper/utils/getSunioTransactionFees.d.ts +0 -2
- package/dist/cjs/swappers/SunioSwapper/utils/getSunioTransactionFees.js +0 -36
- package/dist/cjs/utils/thorchain/tron/getTronTransactionFees.d.ts +0 -2
- package/dist/cjs/utils/thorchain/tron/getTronTransactionFees.js +0 -68
- package/dist/cjs/utils/thorchain/tron/getUnsignedTronTransaction.d.ts +0 -3
- package/dist/cjs/utils/thorchain/tron/getUnsignedTronTransaction.js +0 -35
- package/dist/cjs/utils/thorchain/tron/index.d.ts +0 -2
- package/dist/cjs/utils/thorchain/tron/index.js +0 -18
- package/dist/esm/swappers/SunioSwapper/utils/buildSwapRouteParameters.d.ts +0 -14
- package/dist/esm/swappers/SunioSwapper/utils/buildSwapRouteParameters.js +0 -28
- package/dist/esm/swappers/SunioSwapper/utils/estimateSunioNetworkFee.d.ts +0 -12
- package/dist/esm/swappers/SunioSwapper/utils/estimateSunioNetworkFee.js +0 -74
- package/dist/esm/swappers/SunioSwapper/utils/getSunioTransactionFees.d.ts +0 -2
- package/dist/esm/swappers/SunioSwapper/utils/getSunioTransactionFees.js +0 -32
- package/dist/esm/utils/thorchain/tron/getTronTransactionFees.d.ts +0 -2
- package/dist/esm/utils/thorchain/tron/getTronTransactionFees.js +0 -64
- package/dist/esm/utils/thorchain/tron/getUnsignedTronTransaction.d.ts +0 -3
- package/dist/esm/utils/thorchain/tron/getUnsignedTronTransaction.js +0 -31
- package/dist/esm/utils/thorchain/tron/index.d.ts +0 -2
- package/dist/esm/utils/thorchain/tron/index.js +0 -2
- /package/dist/cjs/swappers/SunioSwapper/utils/{fetchFromSunio.d.ts → fetchSunioQuote.d.ts} +0 -0
- /package/dist/cjs/swappers/SunioSwapper/utils/{fetchFromSunio.js → fetchSunioQuote.js} +0 -0
- /package/dist/esm/swappers/SunioSwapper/utils/{fetchFromSunio.d.ts → fetchSunioQuote.d.ts} +0 -0
- /package/dist/esm/swappers/SunioSwapper/utils/{fetchFromSunio.js → fetchSunioQuote.js} +0 -0
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { fromAssetId } from '@shapeshiftoss/caip';
|
|
2
|
+
import { BigNumber, bn } from '@shapeshiftoss/utils';
|
|
3
|
+
import { Err, Ok } from '@sniptt/monads';
|
|
4
|
+
import axios from 'axios';
|
|
5
|
+
import { getAddress, isAddress, isAddressEqual, zeroAddress } from 'viem';
|
|
6
|
+
import { TradeQuoteError } from '../../../types.js';
|
|
7
|
+
import { makeSwapErrorRight } from '../../../utils/index.js';
|
|
8
|
+
import { isNativeEvmAsset } from '../../../utils/helpers.js';
|
|
9
|
+
import { FYND_CHAINS, FYND_CLIENT_FEE_SHARE, FYND_CLIENT_FEE_SIGNATURE_BYTES } from './constants.js';
|
|
10
|
+
const isFyndSupportedChainId = (chainId) => chainId in FYND_CHAINS;
|
|
11
|
+
// Protocol ids look like uniswap_v3, vm:balancer_v2 or fallback:rfq:bebop
|
|
12
|
+
const formatFyndProtocol = (protocol) => protocol
|
|
13
|
+
.slice(protocol.lastIndexOf(':') + 1)
|
|
14
|
+
.split('_')
|
|
15
|
+
.map(word => /^v\d+$/.test(word) ? word.toUpperCase() : word.charAt(0).toUpperCase() + word.slice(1))
|
|
16
|
+
.join(' ');
|
|
17
|
+
// The native_wrapper hop is only the WETH wrap/unwrap around the real venues
|
|
18
|
+
export const getFyndRouteProtocols = (swaps) => {
|
|
19
|
+
const venues = (swaps ?? [])
|
|
20
|
+
.map(swap => swap.protocol)
|
|
21
|
+
.filter(protocol => !protocol.endsWith('native_wrapper'));
|
|
22
|
+
return [...new Set(venues)].map(formatFyndProtocol);
|
|
23
|
+
};
|
|
24
|
+
export const getFyndClientFeeBps = (affiliateBps) => bn(affiliateBps).div(FYND_CLIENT_FEE_SHARE).integerValue(BigNumber.ROUND_CEIL).toNumber();
|
|
25
|
+
export const convertAssetIdToFyndToken = (assetId) => {
|
|
26
|
+
if (isNativeEvmAsset(assetId))
|
|
27
|
+
return zeroAddress;
|
|
28
|
+
return getAddress(fromAssetId(assetId).assetReference);
|
|
29
|
+
};
|
|
30
|
+
export const assertValidTrade = ({ sellAsset, buyAsset, }) => {
|
|
31
|
+
if (sellAsset.chainId !== buyAsset.chainId) {
|
|
32
|
+
return Err(makeSwapErrorRight({
|
|
33
|
+
message: 'Fynd does not support cross-chain trades',
|
|
34
|
+
code: TradeQuoteError.CrossChainNotSupported,
|
|
35
|
+
}));
|
|
36
|
+
}
|
|
37
|
+
if (!isFyndSupportedChainId(sellAsset.chainId)) {
|
|
38
|
+
return Err(makeSwapErrorRight({
|
|
39
|
+
message: 'Fynd only supports configured EVM chains',
|
|
40
|
+
code: TradeQuoteError.UnsupportedChain,
|
|
41
|
+
}));
|
|
42
|
+
}
|
|
43
|
+
return Ok(sellAsset.chainId);
|
|
44
|
+
};
|
|
45
|
+
const getFyndStatusError = (status, detail) => {
|
|
46
|
+
const code = (() => {
|
|
47
|
+
switch (status.toLowerCase()) {
|
|
48
|
+
case 'no_route_found':
|
|
49
|
+
case 'insufficient_liquidity':
|
|
50
|
+
return TradeQuoteError.NoRouteFound;
|
|
51
|
+
case 'timeout':
|
|
52
|
+
return TradeQuoteError.Timeout;
|
|
53
|
+
default:
|
|
54
|
+
return TradeQuoteError.QueryFailed;
|
|
55
|
+
}
|
|
56
|
+
})();
|
|
57
|
+
return makeSwapErrorRight({
|
|
58
|
+
message: `Fynd quote failed: ${status}${detail ? ` (${detail})` : ''}`,
|
|
59
|
+
code,
|
|
60
|
+
});
|
|
61
|
+
};
|
|
62
|
+
const isFyndErrorResponse = (value) => typeof value === 'object' &&
|
|
63
|
+
value !== null &&
|
|
64
|
+
'error' in value &&
|
|
65
|
+
typeof value.error === 'string' &&
|
|
66
|
+
'code' in value &&
|
|
67
|
+
typeof value.code === 'string';
|
|
68
|
+
export const getFyndRequestError = (error) => {
|
|
69
|
+
const { cause } = error;
|
|
70
|
+
if (!axios.isAxiosError(cause))
|
|
71
|
+
return error;
|
|
72
|
+
if (cause.response?.status === 429) {
|
|
73
|
+
return makeSwapErrorRight({
|
|
74
|
+
message: 'Fynd rate limit exceeded',
|
|
75
|
+
code: TradeQuoteError.RateLimitExceeded,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
const body = cause.response?.data;
|
|
79
|
+
if (isFyndErrorResponse(body))
|
|
80
|
+
return getFyndStatusError(body.code, body.error);
|
|
81
|
+
return makeSwapErrorRight({
|
|
82
|
+
message: `Fynd request failed with status ${cause.response?.status}`,
|
|
83
|
+
code: TradeQuoteError.QueryFailed,
|
|
84
|
+
cause,
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
const invalidResponse = (message, details) => makeSwapErrorRight({ message, details, code: TradeQuoteError.InvalidResponse });
|
|
88
|
+
const getQuoteError = (quote, { chainId, sellAsset, sellAmountCryptoBaseUnit, slippageTolerancePercentageDecimal, clientFeeBps, }) => {
|
|
89
|
+
const { transaction, fee_breakdown: fees } = quote;
|
|
90
|
+
const pinnedRouter = FYND_CHAINS[chainId].routerAddress;
|
|
91
|
+
if (!isAddress(transaction.to, { strict: false }) ||
|
|
92
|
+
!isAddressEqual(transaction.to, pinnedRouter)) {
|
|
93
|
+
return invalidResponse(`Fynd router ${transaction.to} is not the pinned router ${pinnedRouter} for ${chainId}`);
|
|
94
|
+
}
|
|
95
|
+
if (!bn(quote.amount_in).eq(sellAmountCryptoBaseUnit)) {
|
|
96
|
+
return invalidResponse('Fynd quoted a different sell amount', {
|
|
97
|
+
amountIn: quote.amount_in,
|
|
98
|
+
sellAmountCryptoBaseUnit,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
const expectedValue = isNativeEvmAsset(sellAsset.assetId) ? sellAmountCryptoBaseUnit : '0';
|
|
102
|
+
if (!bn(transaction.value).eq(expectedValue)) {
|
|
103
|
+
return invalidResponse('Fynd transaction value does not match the sell amount', {
|
|
104
|
+
value: transaction.value,
|
|
105
|
+
expectedValue,
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
// The router enforces min_amount_received, which may not be looser than the requested slippage
|
|
109
|
+
const netOutput = bn(quote.amount_out).minus(fees.router_fee).minus(fees.client_fee);
|
|
110
|
+
const outputFloor = netOutput
|
|
111
|
+
.times(bn(1).minus(slippageTolerancePercentageDecimal))
|
|
112
|
+
.integerValue(BigNumber.ROUND_DOWN);
|
|
113
|
+
if (bn(fees.min_amount_received).lt(outputFloor)) {
|
|
114
|
+
return invalidResponse('Fynd output floor is below the requested slippage', {
|
|
115
|
+
minAmountReceived: fees.min_amount_received,
|
|
116
|
+
outputFloor: outputFloor.toFixed(),
|
|
117
|
+
slippageTolerancePercentageDecimal,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
if (clientFeeBps === 0) {
|
|
121
|
+
if (!bn(fees.client_fee).isZero()) {
|
|
122
|
+
return invalidResponse('Fynd returned an unexpected client fee', {
|
|
123
|
+
clientFee: fees.client_fee,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
// Our share of the gross client fee, allowing one unit of rounding
|
|
129
|
+
const minClientFee = bn(quote.amount_out)
|
|
130
|
+
.times(clientFeeBps)
|
|
131
|
+
.div(10_000)
|
|
132
|
+
.times(FYND_CLIENT_FEE_SHARE)
|
|
133
|
+
.integerValue(BigNumber.ROUND_DOWN)
|
|
134
|
+
.minus(1);
|
|
135
|
+
if (bn(fees.client_fee).lt(minClientFee)) {
|
|
136
|
+
return invalidResponse('Fynd client fee is below the requested share', {
|
|
137
|
+
clientFee: fees.client_fee,
|
|
138
|
+
amountOut: quote.amount_out,
|
|
139
|
+
clientFeeBps,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
// The proxy patches the signature over Fynd's zeroed placeholder at the reported offset
|
|
143
|
+
const offset = transaction.client_fee_signature_offset;
|
|
144
|
+
const signature = typeof offset === 'number'
|
|
145
|
+
? transaction.data.slice(2 + offset * 2, 2 + (offset + FYND_CLIENT_FEE_SIGNATURE_BYTES) * 2)
|
|
146
|
+
: '';
|
|
147
|
+
if (signature.length !== FYND_CLIENT_FEE_SIGNATURE_BYTES * 2 || /^0+$/.test(signature)) {
|
|
148
|
+
return invalidResponse('Fynd quote is not signed for the client fee', { offset });
|
|
149
|
+
}
|
|
150
|
+
if (!quote.client_fee_deadline) {
|
|
151
|
+
return invalidResponse('Fynd quote is missing its client fee deadline');
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
export const validateFyndQuoteResponse = (response, context) => {
|
|
155
|
+
const order = Array.isArray(response?.orders) ? response.orders[0] : undefined;
|
|
156
|
+
if (!order)
|
|
157
|
+
return Err(invalidResponse('Fynd returned no order'));
|
|
158
|
+
if (order.status !== 'success')
|
|
159
|
+
return Err(getFyndStatusError(order.status));
|
|
160
|
+
const error = getQuoteError(order, context);
|
|
161
|
+
return error ? Err(error) : Ok(order);
|
|
162
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { KnownChainIds } from '@shapeshiftoss/types';
|
|
2
|
+
import { describe, expect, it } from 'vitest';
|
|
3
|
+
import { ETH, WETH } from '../../../utils/test-data/assets.js';
|
|
4
|
+
import { FYND_CHAINS } from './constants.js';
|
|
5
|
+
import { getFyndClientFeeBps, validateFyndQuoteResponse } from './helpers.js';
|
|
6
|
+
describe('getFyndClientFeeBps', () => {
|
|
7
|
+
it.each([
|
|
8
|
+
['nets the default fee after the 20% share', '60', 75],
|
|
9
|
+
['rounds up so the net never falls short', '55', 69],
|
|
10
|
+
['requests nothing for a fee-free swap', '0', 0],
|
|
11
|
+
])('%s', (_label, affiliateBps, grossBps) => {
|
|
12
|
+
expect(getFyndClientFeeBps(affiliateBps)).toBe(grossBps);
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
describe('validateFyndQuoteResponse', () => {
|
|
16
|
+
const router = FYND_CHAINS['eip155:1'].routerAddress;
|
|
17
|
+
const unpinnedRouter = '0x1111111111111111111111111111111111111111';
|
|
18
|
+
const transaction = {
|
|
19
|
+
to: router,
|
|
20
|
+
value: '0',
|
|
21
|
+
data: '0x12345678',
|
|
22
|
+
client_fee_signature_offset: null,
|
|
23
|
+
};
|
|
24
|
+
const fees = { router_fee: '10', client_fee: '0', max_slippage: '4', min_amount_received: '986' };
|
|
25
|
+
const order = {
|
|
26
|
+
status: 'success',
|
|
27
|
+
amount_in: '1000',
|
|
28
|
+
amount_out: '1000',
|
|
29
|
+
gas_estimate: '21000',
|
|
30
|
+
transaction,
|
|
31
|
+
fee_breakdown: fees,
|
|
32
|
+
};
|
|
33
|
+
const context = {
|
|
34
|
+
chainId: KnownChainIds.EthereumMainnet,
|
|
35
|
+
sellAsset: WETH,
|
|
36
|
+
sellAmountCryptoBaseUnit: '1000',
|
|
37
|
+
slippageTolerancePercentageDecimal: '0.005',
|
|
38
|
+
clientFeeBps: 0,
|
|
39
|
+
};
|
|
40
|
+
const validate = (overrides, contextOverrides = {}) => validateFyndQuoteResponse({ orders: [{ ...order, ...overrides }] }, { ...context, ...contextOverrides });
|
|
41
|
+
it('accepts a quote that matches the request', () => {
|
|
42
|
+
expect(validate({}).isOk()).toBe(true);
|
|
43
|
+
});
|
|
44
|
+
it.each([
|
|
45
|
+
['an unpinned router', { transaction: { ...transaction, to: unpinnedRouter } }],
|
|
46
|
+
['a different sell amount', { amount_in: '999' }],
|
|
47
|
+
['native value on a token sell', { transaction: { ...transaction, value: '1' } }],
|
|
48
|
+
[
|
|
49
|
+
'an output floor looser than the slippage',
|
|
50
|
+
{ fee_breakdown: { ...fees, min_amount_received: '984' } },
|
|
51
|
+
],
|
|
52
|
+
['a client fee we did not request', { fee_breakdown: { ...fees, client_fee: '1' } }],
|
|
53
|
+
])('rejects %s', (_label, overrides) => {
|
|
54
|
+
expect(validate(overrides).isErr()).toBe(true);
|
|
55
|
+
});
|
|
56
|
+
it('binds native transaction value to the requested sell amount', () => {
|
|
57
|
+
expect(validate({}, { sellAsset: ETH }).isErr()).toBe(true);
|
|
58
|
+
expect(validate({ transaction: { ...transaction, value: '1000' } }, { sellAsset: ETH }).isOk()).toBe(true);
|
|
59
|
+
});
|
|
60
|
+
it('maps a missing route to NoRouteFound', () => {
|
|
61
|
+
const result = validateFyndQuoteResponse({ orders: [{ status: 'no_route_found' }] }, context);
|
|
62
|
+
expect(result.unwrapErr().code).toBe('NoRouteFound');
|
|
63
|
+
});
|
|
64
|
+
describe('with a client fee', () => {
|
|
65
|
+
const feeContext = { clientFeeBps: 75 };
|
|
66
|
+
const feeOrder = {
|
|
67
|
+
transaction: {
|
|
68
|
+
...transaction,
|
|
69
|
+
data: `0x12345678${'ab'.repeat(65)}`,
|
|
70
|
+
client_fee_signature_offset: 4,
|
|
71
|
+
},
|
|
72
|
+
fee_breakdown: {
|
|
73
|
+
router_fee: '2',
|
|
74
|
+
client_fee: '6',
|
|
75
|
+
max_slippage: '4',
|
|
76
|
+
min_amount_received: '988',
|
|
77
|
+
},
|
|
78
|
+
client_fee_deadline: 1_900_000_000,
|
|
79
|
+
};
|
|
80
|
+
it('accepts a signed quote carrying our share of the fee', () => {
|
|
81
|
+
expect(validate(feeOrder, feeContext).isOk()).toBe(true);
|
|
82
|
+
});
|
|
83
|
+
it.each([
|
|
84
|
+
[
|
|
85
|
+
'a fee below our share',
|
|
86
|
+
{
|
|
87
|
+
fee_breakdown: { ...feeOrder.fee_breakdown, client_fee: '4', min_amount_received: '990' },
|
|
88
|
+
},
|
|
89
|
+
],
|
|
90
|
+
[
|
|
91
|
+
'an unsigned placeholder',
|
|
92
|
+
{ transaction: { ...feeOrder.transaction, data: `0x12345678${'00'.repeat(65)}` } },
|
|
93
|
+
],
|
|
94
|
+
['a missing deadline', { client_fee_deadline: null }],
|
|
95
|
+
])('rejects %s', (_label, overrides) => {
|
|
96
|
+
expect(validate({ ...feeOrder, ...overrides }, feeContext).isErr()).toBe(true);
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
});
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
"ARB.ETH": "eip155:42161/slip44:60",
|
|
5
5
|
"ARB.GLD-0XAFD091F140C21770F4E5D53D26B2859AE97555AA": "eip155:42161/erc20:0xafd091f140c21770f4e5d53d26b2859ae97555aa",
|
|
6
6
|
"ARB.LEO-0X93864D81175095DD93360FFA2A529B8642F76A6E": "eip155:42161/erc20:0x93864d81175095dd93360ffa2a529b8642f76a6e",
|
|
7
|
-
"ARB.LINK-0XF97F4DF75117A78C1A5A0DBB814AF92458539FB4": "eip155:42161/erc20:0xf97f4df75117a78c1a5a0dbb814af92458539fb4",
|
|
8
7
|
"ARB.PEPE-0X25D887CE7A35172C62FEBFD67A1856F20FAEBB00": "eip155:42161/erc20:0x25d887ce7a35172c62febfd67a1856f20faebb00",
|
|
9
8
|
"ARB.TGT-0X429FED88F10285E61B12BDF00848315FBDFCC341": "eip155:42161/erc20:0x429fed88f10285e61b12bdf00848315fbdfcc341",
|
|
10
9
|
"ARB.USDC-0XAF88D065E77C8CC2239327C5EDB3A432268E5831": "eip155:42161/erc20:0xaf88d065e77c8cc2239327c5edb3a432268e5831",
|
|
@@ -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;
|
|
@@ -3,3 +3,5 @@ export const DEFAULT_SLIPPAGE_BPS = 50;
|
|
|
3
3
|
// 1Click refunds a deposit it cannot settle by the requested deadline, and prices a quote the same at any length
|
|
4
4
|
export const DEFAULT_QUOTE_DEADLINE_MS = 60 * 60 * 1000;
|
|
5
5
|
export const UTXO_QUOTE_DEADLINE_MS = 4 * 60 * 60 * 1000;
|
|
6
|
+
// 1Click pays half of the requested appFee to its own account, so request double to receive affiliateBps
|
|
7
|
+
export const APP_FEE_SPLIT_MULTIPLIER = 2;
|
|
@@ -142,12 +142,17 @@ export async function getNearIntentsStepData(args) {
|
|
|
142
142
|
const { fast } = await deps.assertGetTronChainAdapter(sellAsset.chainId).getFeeData({
|
|
143
143
|
to: depositAddress,
|
|
144
144
|
value: sellAmountCryptoBaseUnit,
|
|
145
|
-
chainSpecific: {
|
|
146
|
-
from,
|
|
147
|
-
contractAddress: contractAddressOrUndefined(sellAsset.assetId),
|
|
148
|
-
},
|
|
145
|
+
chainSpecific: { from, contractAddress, requireEnergyShare: type === 'quote' },
|
|
149
146
|
});
|
|
150
|
-
const
|
|
147
|
+
const networkFeeCryptoBaseUnit = fast.txFee;
|
|
148
|
+
if (type === 'rate') {
|
|
149
|
+
const stepData = { networkFeeCryptoBaseUnit };
|
|
150
|
+
return Ok(stepData);
|
|
151
|
+
}
|
|
152
|
+
const stepData = {
|
|
153
|
+
transactionData: { type: 'tron', to: depositAddress, value: sellAmountCryptoBaseUnit },
|
|
154
|
+
networkFeeCryptoBaseUnit,
|
|
155
|
+
};
|
|
151
156
|
return Ok(stepData);
|
|
152
157
|
}
|
|
153
158
|
case CHAIN_NAMESPACE.Sui: {
|
|
@@ -5,7 +5,7 @@ import { Err, Ok } from '@sniptt/monads';
|
|
|
5
5
|
import { zeroAddress } from 'viem';
|
|
6
6
|
import { TradeQuoteError } from '../../../types.js';
|
|
7
7
|
import { createTradeAmountTooSmallErr, makeSwapErrorRight } from '../../../utils/index.js';
|
|
8
|
-
import { DEFAULT_QUOTE_DEADLINE_MS, DEFAULT_SLIPPAGE_BPS, UTXO_QUOTE_DEADLINE_MS, } from '../constants.js';
|
|
8
|
+
import { APP_FEE_SPLIT_MULTIPLIER, DEFAULT_QUOTE_DEADLINE_MS, DEFAULT_SLIPPAGE_BPS, UTXO_QUOTE_DEADLINE_MS, } from '../constants.js';
|
|
9
9
|
import { chainIdToNearIntentsChain, QuoteRequest } from '../types.js';
|
|
10
10
|
import { ApiError, OneClickService } from './oneClickService.js';
|
|
11
11
|
const getTokensWithRetry = async () => {
|
|
@@ -149,7 +149,7 @@ export const buildNearIntentsQuoteRequest = ({ originAsset, destinationAsset, am
|
|
|
149
149
|
appFees: [
|
|
150
150
|
{
|
|
151
151
|
recipient: DAO_TREASURY_NEAR,
|
|
152
|
-
fee: Number(affiliateBps),
|
|
152
|
+
fee: Number(affiliateBps) * APP_FEE_SPLIT_MULTIPLIER,
|
|
153
153
|
},
|
|
154
154
|
],
|
|
155
155
|
};
|
|
@@ -59,7 +59,7 @@ export const portalsApi = {
|
|
|
59
59
|
const txStatus = relayTxStatus === TxStatus.Unknown ? TxStatus.Pending : relayTxStatus;
|
|
60
60
|
return {
|
|
61
61
|
status: txStatus,
|
|
62
|
-
buyTxHash: relayRequest.data?.outTxs?.[0]?.
|
|
62
|
+
buyTxHash: relayRequest.data?.outTxs?.[0]?.txHash,
|
|
63
63
|
message: txStatus === TxStatus.Failed
|
|
64
64
|
? getRelayRequestFailureMessage(relayRequest)
|
|
65
65
|
: txStatus === TxStatus.Confirmed
|
|
@@ -68,6 +68,9 @@ export const portalsApi = {
|
|
|
68
68
|
};
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
|
+
else {
|
|
72
|
+
console.error('Failed to fetch relay request:', relayResult.unwrapErr());
|
|
73
|
+
}
|
|
71
74
|
const axelarscanResult = await fetchAxelarscanBridgeStatus(txHash);
|
|
72
75
|
if (axelarscanResult.isOk()) {
|
|
73
76
|
const bridgeStatus = axelarscanResult.unwrap();
|
|
@@ -2,7 +2,7 @@ import { BigNumber, bn } from '@shapeshiftoss/utils';
|
|
|
2
2
|
import { Err, Ok } from '@sniptt/monads';
|
|
3
3
|
import { TradeQuoteError } from '../../../types.js';
|
|
4
4
|
import { assertQuoteAddresses, makeSwapErrorRight, makeTradeStepBuildFailedErr, } from '../../../utils/index.js';
|
|
5
|
-
import {
|
|
5
|
+
import { getTreasuryAddressFromChainId, normalizeEpochToMs } from '../../../utils/helpers.js';
|
|
6
6
|
import { fetchPortalsTradeOrder, PortalsError } from '../utils/fetchPortalsTradeOrder.js';
|
|
7
7
|
import { getPortalsStepData } from '../utils/getPortalsStepData.js';
|
|
8
8
|
import { getPortalsTradeContext } from '../utils/getPortalsTradeContext.js';
|
|
@@ -138,7 +138,7 @@ export const getPortalsTradeQuote = async (input, deps) => {
|
|
|
138
138
|
const tradeQuote = {
|
|
139
139
|
...tradeCommon,
|
|
140
140
|
quoteOrRate: 'quote',
|
|
141
|
-
deadline: expiryMs
|
|
141
|
+
deadline: expiryMs,
|
|
142
142
|
receiveAddress,
|
|
143
143
|
steps: [
|
|
144
144
|
{
|
|
@@ -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";
|
|
@@ -58,8 +58,9 @@ export const relayChainIdToChainId = invert(chainIdToRelayChainId);
|
|
|
58
58
|
export const DEFAULT_RELAY_EVM_TOKEN_ADDRESS = zeroAddress;
|
|
59
59
|
export const RELAY_BTC_TOKEN_ADDRESS = 'bc1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqmql8k8';
|
|
60
60
|
export const RELAY_SOLANA_TOKEN_ADDRESS = '11111111111111111111111111111111';
|
|
61
|
-
export const RELAY_TRON_TOKEN_ADDRESS = 'T9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb';
|
|
62
61
|
export const DEFAULT_RELAY_EVM_USER_ADDRESS = '0x000000000000000000000000000000000000dead';
|
|
62
|
+
// depositor energy for a TRC20 deposit measured on mainnet, for token quotes without their allowance
|
|
63
|
+
export const RELAY_TRON_FALLBACK_DEPOSIT_ENERGY = '100000';
|
|
63
64
|
export const DEFAULT_RELAY_BTC_USER_ADDRESS = 'bc1q4vxn43l44h30nkluqfxd9eckf45vr2awz38lwa';
|
|
64
65
|
export const DEFAULT_RELAY_SOLANA_USER_ADDRESS = 'CbKGgVKLJFb8bBrf58DnAkdryX6ubewVytn7X957YwNr';
|
|
65
66
|
export const DEFAULT_RELAY_TRON_USER_ADDRESS = 'TLsV52sRDL79HXGGm9yzwKibb6BeruhUzy';
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Err, Ok } from '@sniptt/monads';
|
|
2
2
|
import { assertQuoteAddresses } from '../../../utils/index.js';
|
|
3
|
-
import { FALLBACK_QUOTE_DEADLINE_MS } from '../../../utils/helpers.js';
|
|
4
3
|
import { getRelayStepData } from '../utils/getRelayStepData.js';
|
|
5
4
|
import { getRelayTradeContext } from '../utils/getRelayTradeContext.js';
|
|
6
5
|
const getQuote = async (input, deps, relayChainMap) => {
|
|
@@ -12,7 +11,7 @@ const getQuote = async (input, deps, relayChainMap) => {
|
|
|
12
11
|
const maybeContext = await getRelayTradeContext({ input, deps, relayChainMap });
|
|
13
12
|
if (maybeContext.isErr())
|
|
14
13
|
return Err(maybeContext.unwrapErr());
|
|
15
|
-
const { tradeCommon, stepCommon, protocolFees, relayStepInputs, stepDataArgs, relayId } = maybeContext.unwrap();
|
|
14
|
+
const { tradeCommon, stepCommon, protocolFees, relayStepInputs, stepDataArgs, relayId, deadline, } = maybeContext.unwrap();
|
|
16
15
|
const stepResults = await Promise.all(relayStepInputs.map(async ({ data, allowanceContract }) => {
|
|
17
16
|
const maybeStepData = await getRelayStepData({
|
|
18
17
|
...stepDataArgs,
|
|
@@ -21,12 +20,11 @@ const getQuote = async (input, deps, relayChainMap) => {
|
|
|
21
20
|
type: 'quote',
|
|
22
21
|
input,
|
|
23
22
|
});
|
|
24
|
-
return maybeStepData.map(({ transactionData,
|
|
23
|
+
return maybeStepData.map(({ transactionData, networkFeeCryptoBaseUnit }) => ({
|
|
25
24
|
...stepCommon,
|
|
26
25
|
accountNumber,
|
|
27
26
|
allowanceContract,
|
|
28
27
|
transactionData,
|
|
29
|
-
relayTransactionMetadata,
|
|
30
28
|
swapperMetadata: {
|
|
31
29
|
name: 'relay',
|
|
32
30
|
relayId,
|
|
@@ -43,7 +41,7 @@ const getQuote = async (input, deps, relayChainMap) => {
|
|
|
43
41
|
const tradeQuote = {
|
|
44
42
|
...tradeCommon,
|
|
45
43
|
quoteOrRate: 'quote',
|
|
46
|
-
deadline
|
|
44
|
+
deadline,
|
|
47
45
|
receiveAddress,
|
|
48
46
|
steps,
|
|
49
47
|
};
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { btcAssetId, fromAssetId, isAssetReference, solAssetId, tronAssetId, } from '@shapeshiftoss/caip';
|
|
2
|
+
import { tron } from '@shapeshiftoss/chain-adapters';
|
|
2
3
|
import { isNativeEvmAsset } from '../../../utils/helpers.js';
|
|
3
|
-
import { DEFAULT_RELAY_EVM_TOKEN_ADDRESS, RELAY_BTC_TOKEN_ADDRESS, RELAY_SOLANA_TOKEN_ADDRESS,
|
|
4
|
+
import { DEFAULT_RELAY_EVM_TOKEN_ADDRESS, RELAY_BTC_TOKEN_ADDRESS, RELAY_SOLANA_TOKEN_ADDRESS, } from '../constant.js';
|
|
4
5
|
export const getRelayAssetAddress = (asset) => {
|
|
5
6
|
if (asset.assetId === btcAssetId)
|
|
6
7
|
return RELAY_BTC_TOKEN_ADDRESS;
|
|
7
8
|
if (asset.assetId === solAssetId)
|
|
8
9
|
return RELAY_SOLANA_TOKEN_ADDRESS;
|
|
9
10
|
if (asset.assetId === tronAssetId)
|
|
10
|
-
return
|
|
11
|
+
return tron.TRON_ZERO_ADDRESS;
|
|
11
12
|
if (isNativeEvmAsset(asset.assetId))
|
|
12
13
|
return DEFAULT_RELAY_EVM_TOKEN_ADDRESS;
|
|
13
14
|
const { assetReference } = fromAssetId(asset.assetId);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Result } from '@sniptt/monads';
|
|
2
2
|
import type { StepDataArgs, SwapErrorRight, TxBuildData } from '../../../types.js';
|
|
3
3
|
import type { SolanaComputeBudgetOptions } from '../../../utils/solana/index.js';
|
|
4
|
-
import type { RelayQuoteItem
|
|
4
|
+
import type { RelayQuoteItem } from './types.js';
|
|
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
|
|
19
|
-
relayTransactionMetadata?: RelayTransactionMetadata;
|
|
18
|
+
transactionData: TxBuildData;
|
|
20
19
|
networkFeeCryptoBaseUnit: string;
|
|
21
20
|
};
|
|
22
21
|
export type GetRelayStepDataArgs = StepDataArgs<BaseArgs, {
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { fromChainId } from '@shapeshiftoss/caip';
|
|
2
|
+
import { tron } from '@shapeshiftoss/chain-adapters';
|
|
2
3
|
import { bnOrZero, contractAddressOrUndefined, isToken } from '@shapeshiftoss/utils';
|
|
3
4
|
import { Err, Ok } from '@sniptt/monads';
|
|
4
5
|
import { makeNetworkFeeEstimationFailedErr, makeTradeStepBuildFailedErr } from '../../../utils/index.js';
|
|
5
6
|
import { getEvmNetworkFeeCryptoBaseUnit } from '../../../utils/evm/index.js';
|
|
6
7
|
import { getSolanaNetworkFeeCryptoBaseUnit, omitComputeBudgetInstructions, withComputeUnitLimit, } from '../../../utils/solana/index.js';
|
|
8
|
+
import { getTronContractCallFallbackFeeCryptoBaseUnit, getTronContractCallNetworkFeeCryptoBaseUnit, } from '../../../utils/tron/index.js';
|
|
7
9
|
import { getUtxoNetworkFeeCryptoBaseUnit } from '../../../utils/utxo/index.js';
|
|
10
|
+
import { RELAY_TRON_FALLBACK_DEPOSIT_ENERGY } from '../constant.js';
|
|
8
11
|
import { getRelayPsbtRelayer } from './getRelayPsbtRelayer.js';
|
|
9
12
|
import { convertRelaySolanaInstruction } from './helpers.js';
|
|
10
13
|
import { isRelayQuoteEvmItemData, isRelayQuoteSolanaItemData, isRelayQuoteTronItemData, isRelayQuoteUtxoItemData, } from './types.js';
|
|
@@ -169,25 +172,55 @@ export async function getRelayStepData({ data, sellAsset, sellAmountCryptoBaseUn
|
|
|
169
172
|
return Err(makeNetworkFeeEstimationFailedErr('getRelayStepData', error));
|
|
170
173
|
}
|
|
171
174
|
}
|
|
175
|
+
// Native and token sells alike are a call into relay's depositor contract
|
|
172
176
|
if (isRelayQuoteTronItemData(data)) {
|
|
173
|
-
const contractAddress = data.parameter
|
|
174
|
-
const tronCallData = data.parameter?.data;
|
|
175
|
-
const isTronToken = isToken(sellAsset.assetId);
|
|
176
|
-
if (isTronToken && !contractAddress)
|
|
177
|
-
return Err(makeTradeStepBuildFailedErr('getRelayStepData'));
|
|
178
|
-
if (isTronToken && !tronCallData)
|
|
179
|
-
return Err(makeTradeStepBuildFailedErr('getRelayStepData'));
|
|
177
|
+
const { contract_address: contractAddress, data: callData, call_value: callValue, } = data.parameter ?? {};
|
|
180
178
|
if (type === 'rate') {
|
|
179
|
+
// Relay's gas figure runs ~35% under the deposit's measured energy, so rates price the measured call
|
|
180
|
+
const networkFeeCryptoBaseUnit = await (async () => {
|
|
181
|
+
if (!contractAddress || !callData)
|
|
182
|
+
return fallbackNetworkFeeCryptoBaseUnit;
|
|
183
|
+
try {
|
|
184
|
+
return await getTronContractCallFallbackFeeCryptoBaseUnit({
|
|
185
|
+
adapter: deps.assertGetTronChainAdapter(sellAsset.chainId),
|
|
186
|
+
energy: RELAY_TRON_FALLBACK_DEPOSIT_ENERGY,
|
|
187
|
+
bandwidthBytes: tron.getTronContractCallBandwidthBytes(callData),
|
|
188
|
+
contractAddress,
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
return fallbackNetworkFeeCryptoBaseUnit;
|
|
193
|
+
}
|
|
194
|
+
})();
|
|
195
|
+
const stepData = { networkFeeCryptoBaseUnit };
|
|
196
|
+
return Ok(stepData);
|
|
197
|
+
}
|
|
198
|
+
if (!contractAddress || !callData)
|
|
199
|
+
return Err(makeTradeStepBuildFailedErr('getRelayStepData'));
|
|
200
|
+
const isNativeSell = !isToken(sellAsset.assetId);
|
|
201
|
+
const call = {
|
|
202
|
+
to: contractAddress,
|
|
203
|
+
data: callData,
|
|
204
|
+
value: String(callValue ?? (isNativeSell ? sellAmountCryptoBaseUnit : 0)),
|
|
205
|
+
};
|
|
206
|
+
try {
|
|
181
207
|
const stepData = {
|
|
182
|
-
|
|
208
|
+
transactionData: { type: 'tron', ...call },
|
|
209
|
+
networkFeeCryptoBaseUnit: await getTronContractCallNetworkFeeCryptoBaseUnit({
|
|
210
|
+
adapter: deps.assertGetTronChainAdapter(sellAsset.chainId),
|
|
211
|
+
transactionData: call,
|
|
212
|
+
from,
|
|
213
|
+
sellAsset,
|
|
214
|
+
sellAmountCryptoBaseUnit,
|
|
215
|
+
spenderAddress: contractAddress,
|
|
216
|
+
fallbackEnergy: RELAY_TRON_FALLBACK_DEPOSIT_ENERGY,
|
|
217
|
+
}),
|
|
183
218
|
};
|
|
184
219
|
return Ok(stepData);
|
|
185
220
|
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
};
|
|
190
|
-
return Ok(stepData);
|
|
221
|
+
catch (error) {
|
|
222
|
+
return Err(makeNetworkFeeEstimationFailedErr('getRelayStepData', error));
|
|
223
|
+
}
|
|
191
224
|
}
|
|
192
225
|
return Err(makeTradeStepBuildFailedErr('getRelayStepData'));
|
|
193
226
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|