@shapeshiftoss/swapper 17.6.9 → 17.6.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +21 -0
- package/dist/cjs/.tsbuildinfo +1 -1
- package/dist/cjs/constants.js +72 -43
- package/dist/cjs/cowswap-utils/constants.js +3 -0
- package/dist/cjs/cowswap-utils/index.js +6 -0
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.js +1 -0
- package/dist/cjs/swappers/AcrossSwapper/AcrossSwapper.d.ts +2 -0
- package/dist/cjs/swappers/AcrossSwapper/AcrossSwapper.js +8 -0
- package/dist/cjs/swappers/AcrossSwapper/constant.d.ts +9 -0
- package/dist/cjs/swappers/AcrossSwapper/constant.js +50 -0
- package/dist/cjs/swappers/AcrossSwapper/endpoints.d.ts +2 -0
- package/dist/cjs/swappers/AcrossSwapper/endpoints.js +113 -0
- package/dist/cjs/swappers/AcrossSwapper/getTradeQuote/getTradeQuote.d.ts +3 -0
- package/dist/cjs/swappers/AcrossSwapper/getTradeQuote/getTradeQuote.js +31 -0
- package/dist/cjs/swappers/AcrossSwapper/getTradeRate/getTradeRate.d.ts +3 -0
- package/dist/cjs/swappers/AcrossSwapper/getTradeRate/getTradeRate.js +19 -0
- package/dist/cjs/swappers/AcrossSwapper/index.d.ts +1 -0
- package/dist/cjs/swappers/AcrossSwapper/index.js +5 -0
- package/dist/cjs/swappers/AcrossSwapper/utils/acrossService.d.ts +5 -0
- package/dist/cjs/swappers/AcrossSwapper/utils/acrossService.js +17 -0
- package/dist/cjs/swappers/AcrossSwapper/utils/fetchAcrossTrade.d.ts +19 -0
- package/dist/cjs/swappers/AcrossSwapper/utils/fetchAcrossTrade.js +27 -0
- package/dist/cjs/swappers/AcrossSwapper/utils/getTrade.d.ts +11 -0
- package/dist/cjs/swappers/AcrossSwapper/utils/getTrade.js +349 -0
- package/dist/cjs/swappers/AcrossSwapper/utils/types.d.ts +177 -0
- package/dist/cjs/swappers/AcrossSwapper/utils/types.js +17 -0
- package/dist/cjs/swappers/AvnuSwapper/endpoints.js +42 -14
- package/dist/cjs/swappers/AvnuSwapper/swapperApi/getTradeQuote.js +19 -5
- package/dist/cjs/swappers/AvnuSwapper/swapperApi/getTradeRate.js +17 -4
- package/dist/cjs/swappers/BebopSwapper/BebopSwapper.js +2 -0
- package/dist/cjs/swappers/BebopSwapper/endpoints.js +35 -2
- package/dist/cjs/swappers/BebopSwapper/executeSolanaMessage.d.ts +2 -0
- package/dist/cjs/swappers/BebopSwapper/executeSolanaMessage.js +47 -0
- package/dist/cjs/swappers/BebopSwapper/getBebopSolanaTradeQuote/getBebopSolanaTradeQuote.d.ts +4 -0
- package/dist/cjs/swappers/BebopSwapper/getBebopSolanaTradeQuote/getBebopSolanaTradeQuote.js +91 -0
- package/dist/cjs/swappers/BebopSwapper/getBebopSolanaTradeRate/getBebopSolanaTradeRate.d.ts +4 -0
- package/dist/cjs/swappers/BebopSwapper/getBebopSolanaTradeRate/getBebopSolanaTradeRate.js +88 -0
- package/dist/cjs/swappers/BebopSwapper/getBebopTradeQuote/getBebopTradeQuote.js +10 -0
- package/dist/cjs/swappers/BebopSwapper/getBebopTradeRate/getBebopTradeRate.js +10 -0
- package/dist/cjs/swappers/BebopSwapper/types.d.ts +49 -1
- package/dist/cjs/swappers/BebopSwapper/types.js +9 -2
- package/dist/cjs/swappers/BebopSwapper/utils/fetchFromBebop.d.ts +19 -1
- package/dist/cjs/swappers/BebopSwapper/utils/fetchFromBebop.js +86 -1
- package/dist/cjs/swappers/BebopSwapper/utils/helpers/helpers.d.ts +14 -2
- package/dist/cjs/swappers/BebopSwapper/utils/helpers/helpers.js +47 -1
- package/dist/cjs/swappers/ButterSwap/ButterSwap.js +1 -0
- package/dist/cjs/swappers/ButterSwap/endpoints.js +56 -0
- package/dist/cjs/swappers/ButterSwap/swapperApi/checkTradeStatus.js +19 -0
- package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeQuote.js +44 -15
- package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeQuote.test.js +1 -0
- package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeRate.js +33 -16
- package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeRate.test.js +2 -0
- package/dist/cjs/swappers/ButterSwap/types.d.ts +1 -0
- package/dist/cjs/swappers/ButterSwap/utils/helpers.js +1 -0
- package/dist/cjs/swappers/ButterSwap/xhr.d.ts +2 -2
- package/dist/cjs/swappers/ButterSwap/xhr.js +7 -2
- package/dist/cjs/swappers/CetusSwapper/endpoints.js +3 -8
- package/dist/cjs/swappers/CetusSwapper/swapperApi/getTradeQuote.js +11 -1
- package/dist/cjs/swappers/CetusSwapper/swapperApi/getTradeRate.js +11 -1
- package/dist/cjs/swappers/CetusSwapper/utils/helpers.d.ts +1 -1
- package/dist/cjs/swappers/CetusSwapper/utils/helpers.js +1 -1
- package/dist/cjs/swappers/ChainflipSwapper/constants.js +7 -3
- package/dist/cjs/swappers/ChainflipSwapper/utils/getQuoteOrRate.js +28 -5
- package/dist/cjs/swappers/ChainflipSwapper/utils/helpers.js +8 -2
- package/dist/cjs/swappers/CowSwapper/CowSwapper.js +1 -1
- package/dist/cjs/swappers/CowSwapper/getCowSwapTradeQuote/getCowSwapTradeQuote.js +11 -1
- package/dist/cjs/swappers/CowSwapper/getCowSwapTradeQuote/getCowSwapTradeQuote.test.js +5 -5
- package/dist/cjs/swappers/CowSwapper/getCowSwapTradeRate/getCowSwapTradeRate.js +10 -1
- package/dist/cjs/swappers/CowSwapper/utils/helpers/helpers.js +8 -2
- package/dist/cjs/swappers/DebridgeSwapper/DebridgeSwapper.d.ts +2 -0
- package/dist/cjs/swappers/DebridgeSwapper/DebridgeSwapper.js +7 -0
- package/dist/cjs/swappers/DebridgeSwapper/constant.d.ts +5 -0
- package/dist/cjs/swappers/DebridgeSwapper/constant.js +36 -0
- package/dist/cjs/swappers/DebridgeSwapper/endpoints.d.ts +2 -0
- package/dist/cjs/swappers/DebridgeSwapper/endpoints.js +217 -0
- package/dist/cjs/swappers/DebridgeSwapper/getTradeQuote/getTradeQuote.d.ts +3 -0
- package/dist/cjs/swappers/DebridgeSwapper/getTradeQuote/getTradeQuote.js +31 -0
- package/dist/cjs/swappers/DebridgeSwapper/getTradeRate/getTradeRate.d.ts +3 -0
- package/dist/cjs/swappers/DebridgeSwapper/getTradeRate/getTradeRate.js +19 -0
- package/dist/cjs/swappers/DebridgeSwapper/index.d.ts +1 -0
- package/dist/cjs/swappers/DebridgeSwapper/index.js +5 -0
- package/dist/cjs/swappers/DebridgeSwapper/utils/debridgeService.d.ts +5 -0
- package/dist/cjs/swappers/DebridgeSwapper/utils/debridgeService.js +17 -0
- package/dist/cjs/swappers/DebridgeSwapper/utils/fetchDebridgeSingleChainTrade.d.ts +16 -0
- package/dist/cjs/swappers/DebridgeSwapper/utils/fetchDebridgeSingleChainTrade.js +23 -0
- package/dist/cjs/swappers/DebridgeSwapper/utils/fetchDebridgeTrade.d.ts +20 -0
- package/dist/cjs/swappers/DebridgeSwapper/utils/fetchDebridgeTrade.js +29 -0
- package/dist/cjs/swappers/DebridgeSwapper/utils/getTrade.d.ts +11 -0
- package/dist/cjs/swappers/DebridgeSwapper/utils/getTrade.js +369 -0
- package/dist/cjs/swappers/DebridgeSwapper/utils/types.d.ts +155 -0
- package/dist/cjs/swappers/DebridgeSwapper/utils/types.js +9 -0
- package/dist/cjs/swappers/JupiterSwapper/swapperApi/getTradeQuote.js +32 -0
- package/dist/cjs/swappers/JupiterSwapper/swapperApi/getTradeRate.js +9 -0
- package/dist/cjs/swappers/MayachainSwapper/utils/poolAssetHelpers/poolAssetHelpers.js +1 -1
- package/dist/cjs/swappers/NearIntentsSwapper/NearIntentsSwapper.js +1 -0
- package/dist/cjs/swappers/NearIntentsSwapper/endpoints.js +31 -0
- package/dist/cjs/swappers/NearIntentsSwapper/swapperApi/getTradeQuote.js +48 -1
- package/dist/cjs/swappers/NearIntentsSwapper/swapperApi/getTradeRate.js +73 -1
- package/dist/cjs/swappers/NearIntentsSwapper/types.d.ts +1 -1
- package/dist/cjs/swappers/NearIntentsSwapper/types.js +6 -0
- package/dist/cjs/swappers/NearIntentsSwapper/utils/helpers/helpers.js +23 -4
- package/dist/cjs/swappers/PortalsSwapper/getPortalsTradeQuote/getPortalsTradeQuote.js +10 -0
- package/dist/cjs/swappers/PortalsSwapper/getPortalsTradeRate/getPortalsTradeRate.js +8 -3
- package/dist/cjs/swappers/RelaySwapper/constant.js +27 -1
- package/dist/cjs/swappers/RelaySwapper/utils/getRelayDefaultUserAddress.d.ts +1 -1
- package/dist/cjs/swappers/RelaySwapper/utils/getTrade.js +57 -7
- package/dist/cjs/swappers/RelaySwapper/utils/relayTokenToAssetId.js +110 -0
- package/dist/cjs/swappers/RelaySwapper/utils/types.d.ts +15 -0
- package/dist/cjs/swappers/StonfiSwapper/StonfiSwapper.d.ts +2 -0
- package/dist/cjs/swappers/StonfiSwapper/StonfiSwapper.js +8 -0
- package/dist/cjs/swappers/StonfiSwapper/endpoints.d.ts +2 -0
- package/dist/cjs/swappers/StonfiSwapper/endpoints.js +227 -0
- package/dist/cjs/swappers/StonfiSwapper/index.d.ts +4 -0
- package/dist/cjs/swappers/StonfiSwapper/index.js +25 -0
- package/dist/cjs/swappers/StonfiSwapper/swapperApi/getTradeQuote.d.ts +2 -0
- package/dist/cjs/swappers/StonfiSwapper/swapperApi/getTradeQuote.js +129 -0
- package/dist/cjs/swappers/StonfiSwapper/swapperApi/getTradeRate.d.ts +2 -0
- package/dist/cjs/swappers/StonfiSwapper/swapperApi/getTradeRate.js +115 -0
- package/dist/cjs/swappers/StonfiSwapper/types.d.ts +60 -0
- package/dist/cjs/swappers/StonfiSwapper/types.js +5 -0
- package/dist/cjs/swappers/StonfiSwapper/utils/constants.d.ts +5 -0
- package/dist/cjs/swappers/StonfiSwapper/utils/constants.js +8 -0
- package/dist/cjs/swappers/StonfiSwapper/utils/helpers.d.ts +11 -0
- package/dist/cjs/swappers/StonfiSwapper/utils/helpers.js +135 -0
- package/dist/cjs/swappers/StonfiSwapper/utils/omnistonManager.d.ts +5 -0
- package/dist/cjs/swappers/StonfiSwapper/utils/omnistonManager.js +20 -0
- package/dist/cjs/swappers/SunioSwapper/endpoints.js +1 -1
- package/dist/cjs/swappers/SunioSwapper/utils/getQuoteOrRate.js +14 -3
- package/dist/cjs/swappers/ThorchainSwapper/ThorchainSwapper.js +3 -0
- package/dist/cjs/swappers/ThorchainSwapper/endpoints.js +2 -0
- package/dist/cjs/swappers/ThorchainSwapper/generated/generatedTradableAssetMap.json +1 -0
- package/dist/cjs/swappers/ThorchainSwapper/utils/poolAssetHelpers/poolAssetHelpers.d.ts +1 -1
- package/dist/cjs/swappers/ThorchainSwapper/utils/poolAssetHelpers/poolAssetHelpers.js +2 -1
- package/dist/cjs/swappers/ThorchainSwapper/utils/poolAssetHelpers/poolAssetHelpers.test.js +10 -0
- package/dist/cjs/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.js +9 -0
- package/dist/cjs/swappers/ZrxSwapper/getZrxTradeRate/getZrxTradeRate.js +9 -0
- package/dist/cjs/swappers/ZrxSwapper/utils/helpers/helpers.d.ts +1 -1
- package/dist/cjs/swappers/utils/affiliateFee.d.ts +17 -0
- package/dist/cjs/swappers/utils/affiliateFee.js +43 -0
- package/dist/cjs/swappers/utils/filterBuyAssetsBySellAssetId/filterBuyAssetsBySellAssetId.js +2 -5
- package/dist/cjs/swappers/utils/helpers/helpers.js +3 -0
- package/dist/cjs/thorchain-utils/getCallDataFromQuote.d.ts +1 -1
- package/dist/cjs/thorchain-utils/getL1RateOrQuote.js +87 -9
- package/dist/cjs/thorchain-utils/getQuote.js +8 -2
- package/dist/cjs/thorchain-utils/index.d.ts +2 -1
- package/dist/cjs/thorchain-utils/index.js +2 -1
- package/dist/cjs/thorchain-utils/solana/constants.d.ts +1 -0
- package/dist/cjs/thorchain-utils/solana/constants.js +6 -0
- package/dist/cjs/thorchain-utils/solana/getSolanaTransactionFees.d.ts +2 -0
- package/dist/cjs/thorchain-utils/solana/getSolanaTransactionFees.js +41 -0
- package/dist/cjs/thorchain-utils/solana/getThorTxData.d.ts +12 -0
- package/dist/cjs/thorchain-utils/solana/getThorTxData.js +14 -0
- package/dist/cjs/thorchain-utils/solana/getUnsignedSolanaTransaction.d.ts +3 -0
- package/dist/cjs/thorchain-utils/solana/getUnsignedSolanaTransaction.js +64 -0
- package/dist/cjs/thorchain-utils/solana/index.d.ts +3 -0
- package/dist/cjs/thorchain-utils/solana/index.js +19 -0
- package/dist/cjs/tron-utils/getUnsignedTronTransaction.js +22 -2
- package/dist/cjs/types.d.ts +118 -8
- package/dist/cjs/types.js +3 -0
- package/dist/cjs/utils.d.ts +4 -3
- package/dist/cjs/utils.js +35 -7
- package/dist/esm/.tsbuildinfo +1 -1
- package/dist/esm/constants.js +42 -13
- package/dist/esm/cowswap-utils/constants.js +3 -0
- package/dist/esm/cowswap-utils/index.js +6 -0
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/swappers/AcrossSwapper/AcrossSwapper.d.ts +2 -0
- package/dist/esm/swappers/AcrossSwapper/AcrossSwapper.js +5 -0
- package/dist/esm/swappers/AcrossSwapper/constant.d.ts +9 -0
- package/dist/esm/swappers/AcrossSwapper/constant.js +44 -0
- package/dist/esm/swappers/AcrossSwapper/endpoints.d.ts +2 -0
- package/dist/esm/swappers/AcrossSwapper/endpoints.js +107 -0
- package/dist/esm/swappers/AcrossSwapper/getTradeQuote/getTradeQuote.d.ts +3 -0
- package/dist/esm/swappers/AcrossSwapper/getTradeQuote/getTradeQuote.js +27 -0
- package/dist/esm/swappers/AcrossSwapper/getTradeRate/getTradeRate.d.ts +3 -0
- package/dist/esm/swappers/AcrossSwapper/getTradeRate/getTradeRate.js +15 -0
- package/dist/esm/swappers/AcrossSwapper/index.d.ts +1 -0
- package/dist/esm/swappers/AcrossSwapper/index.js +1 -0
- package/dist/esm/swappers/AcrossSwapper/utils/acrossService.d.ts +5 -0
- package/dist/esm/swappers/AcrossSwapper/utils/acrossService.js +11 -0
- package/dist/esm/swappers/AcrossSwapper/utils/fetchAcrossTrade.d.ts +19 -0
- package/dist/esm/swappers/AcrossSwapper/utils/fetchAcrossTrade.js +23 -0
- package/dist/esm/swappers/AcrossSwapper/utils/getTrade.d.ts +11 -0
- package/dist/esm/swappers/AcrossSwapper/utils/getTrade.js +342 -0
- package/dist/esm/swappers/AcrossSwapper/utils/types.d.ts +177 -0
- package/dist/esm/swappers/AcrossSwapper/utils/types.js +13 -0
- package/dist/esm/swappers/AvnuSwapper/endpoints.js +43 -15
- package/dist/esm/swappers/AvnuSwapper/swapperApi/getTradeQuote.js +19 -5
- package/dist/esm/swappers/AvnuSwapper/swapperApi/getTradeRate.js +17 -4
- package/dist/esm/swappers/BebopSwapper/BebopSwapper.js +2 -0
- package/dist/esm/swappers/BebopSwapper/endpoints.js +36 -3
- package/dist/esm/swappers/BebopSwapper/executeSolanaMessage.d.ts +2 -0
- package/dist/esm/swappers/BebopSwapper/executeSolanaMessage.js +40 -0
- package/dist/esm/swappers/BebopSwapper/getBebopSolanaTradeQuote/getBebopSolanaTradeQuote.d.ts +4 -0
- package/dist/esm/swappers/BebopSwapper/getBebopSolanaTradeQuote/getBebopSolanaTradeQuote.js +87 -0
- package/dist/esm/swappers/BebopSwapper/getBebopSolanaTradeRate/getBebopSolanaTradeRate.d.ts +4 -0
- package/dist/esm/swappers/BebopSwapper/getBebopSolanaTradeRate/getBebopSolanaTradeRate.js +84 -0
- package/dist/esm/swappers/BebopSwapper/getBebopTradeQuote/getBebopTradeQuote.js +10 -0
- package/dist/esm/swappers/BebopSwapper/getBebopTradeRate/getBebopTradeRate.js +10 -0
- package/dist/esm/swappers/BebopSwapper/types.d.ts +49 -1
- package/dist/esm/swappers/BebopSwapper/types.js +8 -1
- package/dist/esm/swappers/BebopSwapper/utils/fetchFromBebop.d.ts +19 -1
- package/dist/esm/swappers/BebopSwapper/utils/fetchFromBebop.js +85 -2
- package/dist/esm/swappers/BebopSwapper/utils/helpers/helpers.d.ts +14 -2
- package/dist/esm/swappers/BebopSwapper/utils/helpers/helpers.js +44 -1
- package/dist/esm/swappers/ButterSwap/ButterSwap.js +2 -1
- package/dist/esm/swappers/ButterSwap/endpoints.js +56 -0
- package/dist/esm/swappers/ButterSwap/swapperApi/checkTradeStatus.js +20 -1
- package/dist/esm/swappers/ButterSwap/swapperApi/getTradeQuote.js +46 -17
- package/dist/esm/swappers/ButterSwap/swapperApi/getTradeQuote.test.js +1 -0
- package/dist/esm/swappers/ButterSwap/swapperApi/getTradeRate.js +35 -18
- package/dist/esm/swappers/ButterSwap/swapperApi/getTradeRate.test.js +2 -0
- package/dist/esm/swappers/ButterSwap/types.d.ts +1 -0
- package/dist/esm/swappers/ButterSwap/utils/helpers.js +1 -0
- package/dist/esm/swappers/ButterSwap/xhr.d.ts +2 -2
- package/dist/esm/swappers/ButterSwap/xhr.js +8 -3
- package/dist/esm/swappers/CetusSwapper/endpoints.js +3 -8
- package/dist/esm/swappers/CetusSwapper/swapperApi/getTradeQuote.js +11 -1
- package/dist/esm/swappers/CetusSwapper/swapperApi/getTradeRate.js +11 -1
- package/dist/esm/swappers/CetusSwapper/utils/helpers.d.ts +1 -1
- package/dist/esm/swappers/CetusSwapper/utils/helpers.js +1 -1
- package/dist/esm/swappers/ChainflipSwapper/constants.js +8 -4
- package/dist/esm/swappers/ChainflipSwapper/utils/getQuoteOrRate.js +29 -6
- package/dist/esm/swappers/ChainflipSwapper/utils/helpers.js +9 -3
- package/dist/esm/swappers/CowSwapper/CowSwapper.js +1 -1
- package/dist/esm/swappers/CowSwapper/getCowSwapTradeQuote/getCowSwapTradeQuote.js +11 -1
- package/dist/esm/swappers/CowSwapper/getCowSwapTradeQuote/getCowSwapTradeQuote.test.js +5 -5
- package/dist/esm/swappers/CowSwapper/getCowSwapTradeRate/getCowSwapTradeRate.js +10 -1
- package/dist/esm/swappers/CowSwapper/utils/helpers/helpers.js +9 -3
- package/dist/esm/swappers/DebridgeSwapper/DebridgeSwapper.d.ts +2 -0
- package/dist/esm/swappers/DebridgeSwapper/DebridgeSwapper.js +4 -0
- package/dist/esm/swappers/DebridgeSwapper/constant.d.ts +5 -0
- package/dist/esm/swappers/DebridgeSwapper/constant.js +30 -0
- package/dist/esm/swappers/DebridgeSwapper/endpoints.d.ts +2 -0
- package/dist/esm/swappers/DebridgeSwapper/endpoints.js +211 -0
- package/dist/esm/swappers/DebridgeSwapper/getTradeQuote/getTradeQuote.d.ts +3 -0
- package/dist/esm/swappers/DebridgeSwapper/getTradeQuote/getTradeQuote.js +27 -0
- package/dist/esm/swappers/DebridgeSwapper/getTradeRate/getTradeRate.d.ts +3 -0
- package/dist/esm/swappers/DebridgeSwapper/getTradeRate/getTradeRate.js +15 -0
- package/dist/esm/swappers/DebridgeSwapper/index.d.ts +1 -0
- package/dist/esm/swappers/DebridgeSwapper/index.js +1 -0
- package/dist/esm/swappers/DebridgeSwapper/utils/debridgeService.d.ts +5 -0
- package/dist/esm/swappers/DebridgeSwapper/utils/debridgeService.js +11 -0
- package/dist/esm/swappers/DebridgeSwapper/utils/fetchDebridgeSingleChainTrade.d.ts +16 -0
- package/dist/esm/swappers/DebridgeSwapper/utils/fetchDebridgeSingleChainTrade.js +19 -0
- package/dist/esm/swappers/DebridgeSwapper/utils/fetchDebridgeTrade.d.ts +20 -0
- package/dist/esm/swappers/DebridgeSwapper/utils/fetchDebridgeTrade.js +25 -0
- package/dist/esm/swappers/DebridgeSwapper/utils/getTrade.d.ts +11 -0
- package/dist/esm/swappers/DebridgeSwapper/utils/getTrade.js +362 -0
- package/dist/esm/swappers/DebridgeSwapper/utils/types.d.ts +155 -0
- package/dist/esm/swappers/DebridgeSwapper/utils/types.js +5 -0
- package/dist/esm/swappers/JupiterSwapper/swapperApi/getTradeQuote.js +33 -1
- package/dist/esm/swappers/JupiterSwapper/swapperApi/getTradeRate.js +9 -0
- package/dist/esm/swappers/MayachainSwapper/utils/poolAssetHelpers/poolAssetHelpers.js +1 -1
- package/dist/esm/swappers/NearIntentsSwapper/NearIntentsSwapper.js +2 -1
- package/dist/esm/swappers/NearIntentsSwapper/endpoints.js +31 -0
- package/dist/esm/swappers/NearIntentsSwapper/swapperApi/getTradeQuote.js +50 -3
- package/dist/esm/swappers/NearIntentsSwapper/swapperApi/getTradeRate.js +75 -3
- package/dist/esm/swappers/NearIntentsSwapper/types.d.ts +1 -1
- package/dist/esm/swappers/NearIntentsSwapper/types.js +6 -0
- package/dist/esm/swappers/NearIntentsSwapper/utils/helpers/helpers.js +23 -4
- package/dist/esm/swappers/PortalsSwapper/getPortalsTradeQuote/getPortalsTradeQuote.js +10 -0
- package/dist/esm/swappers/PortalsSwapper/getPortalsTradeRate/getPortalsTradeRate.js +8 -3
- package/dist/esm/swappers/RelaySwapper/constant.js +29 -3
- package/dist/esm/swappers/RelaySwapper/utils/getRelayDefaultUserAddress.d.ts +1 -1
- package/dist/esm/swappers/RelaySwapper/utils/getTrade.js +60 -10
- package/dist/esm/swappers/RelaySwapper/utils/relayTokenToAssetId.js +110 -0
- package/dist/esm/swappers/RelaySwapper/utils/types.d.ts +15 -0
- package/dist/esm/swappers/StonfiSwapper/StonfiSwapper.d.ts +2 -0
- package/dist/esm/swappers/StonfiSwapper/StonfiSwapper.js +5 -0
- package/dist/esm/swappers/StonfiSwapper/endpoints.d.ts +2 -0
- package/dist/esm/swappers/StonfiSwapper/endpoints.js +224 -0
- package/dist/esm/swappers/StonfiSwapper/index.d.ts +4 -0
- package/dist/esm/swappers/StonfiSwapper/index.js +4 -0
- package/dist/esm/swappers/StonfiSwapper/swapperApi/getTradeQuote.d.ts +2 -0
- package/dist/esm/swappers/StonfiSwapper/swapperApi/getTradeQuote.js +125 -0
- package/dist/esm/swappers/StonfiSwapper/swapperApi/getTradeRate.d.ts +2 -0
- package/dist/esm/swappers/StonfiSwapper/swapperApi/getTradeRate.js +111 -0
- package/dist/esm/swappers/StonfiSwapper/types.d.ts +60 -0
- package/dist/esm/swappers/StonfiSwapper/types.js +2 -0
- package/dist/esm/swappers/StonfiSwapper/utils/constants.d.ts +5 -0
- package/dist/esm/swappers/StonfiSwapper/utils/constants.js +5 -0
- package/dist/esm/swappers/StonfiSwapper/utils/helpers.d.ts +11 -0
- package/dist/esm/swappers/StonfiSwapper/utils/helpers.js +124 -0
- package/dist/esm/swappers/StonfiSwapper/utils/omnistonManager.d.ts +5 -0
- package/dist/esm/swappers/StonfiSwapper/utils/omnistonManager.js +17 -0
- package/dist/esm/swappers/SunioSwapper/endpoints.js +1 -1
- package/dist/esm/swappers/SunioSwapper/utils/getQuoteOrRate.js +15 -4
- package/dist/esm/swappers/ThorchainSwapper/ThorchainSwapper.js +3 -0
- package/dist/esm/swappers/ThorchainSwapper/endpoints.js +3 -1
- package/dist/esm/swappers/ThorchainSwapper/generated/generatedTradableAssetMap.json +1 -0
- package/dist/esm/swappers/ThorchainSwapper/utils/poolAssetHelpers/poolAssetHelpers.d.ts +1 -1
- package/dist/esm/swappers/ThorchainSwapper/utils/poolAssetHelpers/poolAssetHelpers.js +2 -1
- package/dist/esm/swappers/ThorchainSwapper/utils/poolAssetHelpers/poolAssetHelpers.test.js +11 -1
- package/dist/esm/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.js +9 -0
- package/dist/esm/swappers/ZrxSwapper/getZrxTradeRate/getZrxTradeRate.js +9 -0
- package/dist/esm/swappers/ZrxSwapper/utils/helpers/helpers.d.ts +1 -1
- package/dist/esm/swappers/utils/affiliateFee.d.ts +17 -0
- package/dist/esm/swappers/utils/affiliateFee.js +39 -0
- package/dist/esm/swappers/utils/filterBuyAssetsBySellAssetId/filterBuyAssetsBySellAssetId.js +2 -5
- package/dist/esm/swappers/utils/helpers/helpers.js +4 -1
- package/dist/esm/thorchain-utils/getCallDataFromQuote.d.ts +1 -1
- package/dist/esm/thorchain-utils/getL1RateOrQuote.js +88 -10
- package/dist/esm/thorchain-utils/getQuote.js +9 -3
- package/dist/esm/thorchain-utils/index.d.ts +2 -1
- package/dist/esm/thorchain-utils/index.js +1 -0
- package/dist/esm/thorchain-utils/solana/constants.d.ts +1 -0
- package/dist/esm/thorchain-utils/solana/constants.js +3 -0
- package/dist/esm/thorchain-utils/solana/getSolanaTransactionFees.d.ts +2 -0
- package/dist/esm/thorchain-utils/solana/getSolanaTransactionFees.js +37 -0
- package/dist/esm/thorchain-utils/solana/getThorTxData.d.ts +12 -0
- package/dist/esm/thorchain-utils/solana/getThorTxData.js +10 -0
- package/dist/esm/thorchain-utils/solana/getUnsignedSolanaTransaction.d.ts +3 -0
- package/dist/esm/thorchain-utils/solana/getUnsignedSolanaTransaction.js +60 -0
- package/dist/esm/thorchain-utils/solana/index.d.ts +3 -0
- package/dist/esm/thorchain-utils/solana/index.js +3 -0
- package/dist/esm/tron-utils/getUnsignedTronTransaction.js +22 -2
- package/dist/esm/types.d.ts +118 -8
- package/dist/esm/types.js +3 -0
- package/dist/esm/utils.d.ts +4 -3
- package/dist/esm/utils.js +34 -7
- package/package.json +27 -24
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.fetchBebopPrice = exports.fetchBebopQuote = void 0;
|
|
3
|
+
exports.fetchBebopSolanaPrice = exports.fetchBebopSolanaQuote = exports.fetchBebopPrice = exports.fetchBebopQuote = void 0;
|
|
4
4
|
const utils_1 = require("@shapeshiftoss/utils");
|
|
5
5
|
const monads_1 = require("@sniptt/monads");
|
|
6
6
|
const viem_1 = require("viem");
|
|
@@ -91,3 +91,88 @@ const fetchBebopPrice = ({ buyAsset, sellAsset, sellAmountIncludingProtocolFeesC
|
|
|
91
91
|
});
|
|
92
92
|
};
|
|
93
93
|
exports.fetchBebopPrice = fetchBebopPrice;
|
|
94
|
+
const fetchBebopSolanaQuote = async ({ buyAsset, sellAsset, sellAmountIncludingProtocolFeesCryptoBaseUnit, takerAddress, receiverAddress, slippageTolerancePercentageDecimal, affiliateBps, apiKey, }) => {
|
|
95
|
+
try {
|
|
96
|
+
const sellToken = (0, helpers_1.assetIdToBebopSolanaToken)(sellAsset.assetId);
|
|
97
|
+
const buyToken = (0, helpers_1.assetIdToBebopSolanaToken)(buyAsset.assetId);
|
|
98
|
+
const sellAmountFormatted = (0, utils_1.bn)(sellAmountIncludingProtocolFeesCryptoBaseUnit).toFixed(0);
|
|
99
|
+
const slippagePercentage = (0, utils_1.bn)(slippageTolerancePercentageDecimal ?? 0.003)
|
|
100
|
+
.times(100)
|
|
101
|
+
.toNumber();
|
|
102
|
+
const url = 'https://api.bebop.xyz/pmm/solana/v3/quote';
|
|
103
|
+
const params = new URLSearchParams({
|
|
104
|
+
sell_tokens: sellToken,
|
|
105
|
+
buy_tokens: buyToken,
|
|
106
|
+
sell_amounts: sellAmountFormatted,
|
|
107
|
+
taker_address: takerAddress,
|
|
108
|
+
receiver_address: receiverAddress,
|
|
109
|
+
slippage: slippagePercentage.toString(),
|
|
110
|
+
approval_type: 'Standard',
|
|
111
|
+
skip_validation: 'false',
|
|
112
|
+
gasless: 'true',
|
|
113
|
+
source: 'shapeshift',
|
|
114
|
+
});
|
|
115
|
+
if (affiliateBps && affiliateBps !== '0') {
|
|
116
|
+
params.set('fee', affiliateBps);
|
|
117
|
+
}
|
|
118
|
+
const bebopService = (0, bebopService_1.bebopServiceFactory)({ apiKey });
|
|
119
|
+
const maybeResponse = await bebopService.get(`${url}?${params}`);
|
|
120
|
+
if (maybeResponse.isErr()) {
|
|
121
|
+
const err = maybeResponse.unwrapErr();
|
|
122
|
+
return (0, monads_1.Err)((0, utils_2.makeSwapErrorRight)({
|
|
123
|
+
message: 'Failed to fetch quote from Bebop Solana',
|
|
124
|
+
cause: err.cause,
|
|
125
|
+
code: types_1.TradeQuoteError.QueryFailed,
|
|
126
|
+
}));
|
|
127
|
+
}
|
|
128
|
+
const response = maybeResponse.unwrap();
|
|
129
|
+
if (response.data.status !== 'QUOTE_SUCCESS') {
|
|
130
|
+
return (0, monads_1.Err)((0, utils_2.makeSwapErrorRight)({
|
|
131
|
+
message: `Bebop Solana quote not executable: ${response.data.status}`,
|
|
132
|
+
code: types_1.TradeQuoteError.InvalidResponse,
|
|
133
|
+
}));
|
|
134
|
+
}
|
|
135
|
+
if (!response.data.solana_tx) {
|
|
136
|
+
return (0, monads_1.Err)((0, utils_2.makeSwapErrorRight)({
|
|
137
|
+
message: 'Missing solana_tx in response',
|
|
138
|
+
code: types_1.TradeQuoteError.InvalidResponse,
|
|
139
|
+
}));
|
|
140
|
+
}
|
|
141
|
+
// Reject routes containing ANY AMM/CLMM makers - these produce malformed txs
|
|
142
|
+
// (wrong signature count in wire format) and require pre-existing ATAs that
|
|
143
|
+
// Bebop's gasless co-signed flow can't create. This includes mixed routes
|
|
144
|
+
// like ["raydium clmm-rfqm", "🦊"] where Bebop serializes the tx with fewer
|
|
145
|
+
// signature slots than the message header requires.
|
|
146
|
+
// When rejected, other swappers like Jupiter will handle these pairs instead.
|
|
147
|
+
const hasAmmRoute = response.data.makers.some(maker => maker.toLowerCase().includes('clmm') || maker.toLowerCase().includes('amm'));
|
|
148
|
+
if (hasAmmRoute) {
|
|
149
|
+
return (0, monads_1.Err)((0, utils_2.makeSwapErrorRight)({
|
|
150
|
+
message: `Bebop Solana quote contains AMM routing (${response.data.makers.join(', ')}), which produces malformed txs`,
|
|
151
|
+
code: types_1.TradeQuoteError.NoRouteFound,
|
|
152
|
+
}));
|
|
153
|
+
}
|
|
154
|
+
return (0, monads_1.Ok)(response.data);
|
|
155
|
+
}
|
|
156
|
+
catch (error) {
|
|
157
|
+
return (0, monads_1.Err)((0, utils_2.makeSwapErrorRight)({
|
|
158
|
+
message: 'Unexpected error fetching Bebop Solana quote',
|
|
159
|
+
cause: error,
|
|
160
|
+
code: types_1.TradeQuoteError.QueryFailed,
|
|
161
|
+
}));
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
exports.fetchBebopSolanaQuote = fetchBebopSolanaQuote;
|
|
165
|
+
const fetchBebopSolanaPrice = ({ buyAsset, sellAsset, sellAmountIncludingProtocolFeesCryptoBaseUnit, receiveAddress, affiliateBps, apiKey, }) => {
|
|
166
|
+
const address = receiveAddress || types_2.BEBOP_SOLANA_DUMMY_ADDRESS;
|
|
167
|
+
return (0, exports.fetchBebopSolanaQuote)({
|
|
168
|
+
buyAsset,
|
|
169
|
+
sellAsset,
|
|
170
|
+
sellAmountIncludingProtocolFeesCryptoBaseUnit,
|
|
171
|
+
takerAddress: address,
|
|
172
|
+
receiverAddress: address,
|
|
173
|
+
slippageTolerancePercentageDecimal: '0.01',
|
|
174
|
+
affiliateBps,
|
|
175
|
+
apiKey,
|
|
176
|
+
});
|
|
177
|
+
};
|
|
178
|
+
exports.fetchBebopSolanaPrice = fetchBebopSolanaPrice;
|
|
@@ -1,11 +1,23 @@
|
|
|
1
1
|
import type { AssetId, ChainId } from '@shapeshiftoss/caip';
|
|
2
2
|
import type { Asset } from '@shapeshiftoss/types';
|
|
3
|
+
export declare const isSolanaChainId: (chainId: ChainId) => boolean;
|
|
3
4
|
export declare const assetIdToBebopToken: (assetId: AssetId) => string;
|
|
4
|
-
export declare const
|
|
5
|
+
export declare const assetIdToBebopSolanaToken: (assetId: AssetId) => string;
|
|
6
|
+
export declare const isSupportedChainId: (chainId: ChainId) => chainId is import("@shapeshiftoss/types").KnownChainIds.EthereumMainnet | import("@shapeshiftoss/types").KnownChainIds.AvalancheMainnet | import("@shapeshiftoss/types").KnownChainIds.OptimismMainnet | import("@shapeshiftoss/types").KnownChainIds.BnbSmartChainMainnet | import("@shapeshiftoss/types").KnownChainIds.PolygonMainnet | import("@shapeshiftoss/types").KnownChainIds.ArbitrumMainnet | import("@shapeshiftoss/types").KnownChainIds.BaseMainnet | import("@shapeshiftoss/types").KnownChainIds.SolanaMainnet;
|
|
5
7
|
export declare const assertValidTrade: ({ buyAsset, sellAsset, }: {
|
|
6
8
|
buyAsset: Asset;
|
|
7
9
|
sellAsset: Asset;
|
|
8
|
-
}) => import("@sniptt/monads/build/result/result").
|
|
10
|
+
}) => import("@sniptt/monads/build/result/result").ResErr<unknown, import("../../../../types").SwapErrorRight> | import("@sniptt/monads/build/result/result").ResOk<boolean, never>;
|
|
11
|
+
/**
|
|
12
|
+
* Bebop's /order endpoint has a bug where it hardcodes the taker signature placement
|
|
13
|
+
* at the last signer index. When the taker's pubkey bytes sort before the maker's,
|
|
14
|
+
* the taker ends up at an earlier index, and Bebop places the sig in the wrong slot.
|
|
15
|
+
* This causes ghost txs (order returns "Success" but tx silently fails on-chain).
|
|
16
|
+
*
|
|
17
|
+
* Returns true if the taker is at the expected index (safe to execute), false otherwise.
|
|
18
|
+
* Returns false on decode failure.
|
|
19
|
+
*/
|
|
20
|
+
export declare const isBebopSolanaTxSafe: (solanaTxBase64: string, takerAddress: string) => boolean;
|
|
9
21
|
export declare const calculateRate: ({ buyAmount, sellAmount, buyAsset, sellAsset, }: {
|
|
10
22
|
buyAmount: string;
|
|
11
23
|
sellAmount: string;
|
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.calculateRate = exports.assertValidTrade = exports.isSupportedChainId = exports.assetIdToBebopToken = void 0;
|
|
3
|
+
exports.calculateRate = exports.isBebopSolanaTxSafe = exports.assertValidTrade = exports.isSupportedChainId = exports.assetIdToBebopSolanaToken = exports.assetIdToBebopToken = exports.isSolanaChainId = void 0;
|
|
4
4
|
const caip_1 = require("@shapeshiftoss/caip");
|
|
5
5
|
const utils_1 = require("@shapeshiftoss/utils");
|
|
6
6
|
const monads_1 = require("@sniptt/monads");
|
|
7
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
7
8
|
const viem_1 = require("viem");
|
|
8
9
|
const types_1 = require("../../../../types");
|
|
9
10
|
const utils_2 = require("../../../../utils");
|
|
10
11
|
const types_2 = require("../../types");
|
|
12
|
+
const isSolanaChainId = (chainId) => {
|
|
13
|
+
return chainId === caip_1.solanaChainId;
|
|
14
|
+
};
|
|
15
|
+
exports.isSolanaChainId = isSolanaChainId;
|
|
11
16
|
const assetIdToBebopToken = (assetId) => {
|
|
12
17
|
if (!(0, utils_1.isToken)(assetId))
|
|
13
18
|
return types_2.BEBOP_NATIVE_MARKER;
|
|
@@ -15,6 +20,14 @@ const assetIdToBebopToken = (assetId) => {
|
|
|
15
20
|
return (0, viem_1.getAddress)(assetReference);
|
|
16
21
|
};
|
|
17
22
|
exports.assetIdToBebopToken = assetIdToBebopToken;
|
|
23
|
+
const assetIdToBebopSolanaToken = (assetId) => {
|
|
24
|
+
const { assetReference, chainId } = (0, caip_1.fromAssetId)(assetId);
|
|
25
|
+
if (chainId === caip_1.solanaChainId && !(0, utils_1.isToken)(assetId)) {
|
|
26
|
+
return 'So11111111111111111111111111111111111111112';
|
|
27
|
+
}
|
|
28
|
+
return assetReference;
|
|
29
|
+
};
|
|
30
|
+
exports.assetIdToBebopSolanaToken = assetIdToBebopSolanaToken;
|
|
18
31
|
const isSupportedChainId = (chainId) => {
|
|
19
32
|
return types_2.bebopSupportedChainIds.includes(chainId);
|
|
20
33
|
};
|
|
@@ -46,6 +59,39 @@ const assertValidTrade = ({ buyAsset, sellAsset, }) => {
|
|
|
46
59
|
return (0, monads_1.Ok)(true);
|
|
47
60
|
};
|
|
48
61
|
exports.assertValidTrade = assertValidTrade;
|
|
62
|
+
/**
|
|
63
|
+
* Bebop's /order endpoint has a bug where it hardcodes the taker signature placement
|
|
64
|
+
* at the last signer index. When the taker's pubkey bytes sort before the maker's,
|
|
65
|
+
* the taker ends up at an earlier index, and Bebop places the sig in the wrong slot.
|
|
66
|
+
* This causes ghost txs (order returns "Success" but tx silently fails on-chain).
|
|
67
|
+
*
|
|
68
|
+
* Returns true if the taker is at the expected index (safe to execute), false otherwise.
|
|
69
|
+
* Returns false on decode failure.
|
|
70
|
+
*/
|
|
71
|
+
const isBebopSolanaTxSafe = (solanaTxBase64, takerAddress) => {
|
|
72
|
+
try {
|
|
73
|
+
const tx = web3_js_1.VersionedTransaction.deserialize(Buffer.from(solanaTxBase64, 'base64'));
|
|
74
|
+
const numSigners = tx.message.header.numRequiredSignatures;
|
|
75
|
+
if (numSigners < 1) {
|
|
76
|
+
console.warn('[Bebop Solana] Transaction has no required signers. Rejecting as malformed.');
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
const signerKeys = tx.message.staticAccountKeys.slice(0, numSigners);
|
|
80
|
+
const takerPubkey = new web3_js_1.PublicKey(takerAddress);
|
|
81
|
+
const takerIndex = signerKeys.findIndex(key => key.equals(takerPubkey));
|
|
82
|
+
const expectedIndex = numSigners - 1; // Bebop hardcodes to last signer slot
|
|
83
|
+
if (takerIndex !== expectedIndex) {
|
|
84
|
+
console.warn(`[Bebop Solana] Taker signer index ${takerIndex}, expected ${expectedIndex}. Rejecting to avoid ghost tx.`);
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
catch (e) {
|
|
90
|
+
console.error(`[Bebop Solana] Failed to decode tx for signer check: ${e.message}`);
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
exports.isBebopSolanaTxSafe = isBebopSolanaTxSafe;
|
|
49
95
|
const calculateRate = ({ buyAmount, sellAmount, buyAsset, sellAsset, }) => {
|
|
50
96
|
return (0, utils_1.convertPrecision)({
|
|
51
97
|
value: buyAmount,
|
|
@@ -5,6 +5,7 @@ const utils_1 = require("../../utils");
|
|
|
5
5
|
exports.butterSwap = {
|
|
6
6
|
executeEvmTransaction: utils_1.executeEvmTransaction,
|
|
7
7
|
executeSolanaTransaction: utils_1.executeSolanaTransaction,
|
|
8
|
+
executeTronTransaction: utils_1.executeTronTransaction,
|
|
8
9
|
executeUtxoTransaction: (txToSign, { signAndBroadcastTransaction }) => {
|
|
9
10
|
return signAndBroadcastTransaction(txToSign);
|
|
10
11
|
},
|
|
@@ -8,6 +8,8 @@ const chain_adapters_1 = require("@shapeshiftoss/chain-adapters");
|
|
|
8
8
|
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
9
9
|
const getSolanaTransactionFees_1 = require("../../solana-utils/getSolanaTransactionFees");
|
|
10
10
|
const getUnsignedSolanaTransaction_1 = require("../../solana-utils/getUnsignedSolanaTransaction");
|
|
11
|
+
const getTronTransactionFees_1 = require("../../tron-utils/getTronTransactionFees");
|
|
12
|
+
const getUnsignedTronTransaction_1 = require("../../tron-utils/getUnsignedTronTransaction");
|
|
11
13
|
const utils_1 = require("../../utils");
|
|
12
14
|
const checkTradeStatus_1 = require("./swapperApi/checkTradeStatus");
|
|
13
15
|
const getTradeQuote_1 = require("./swapperApi/getTradeQuote");
|
|
@@ -70,6 +72,60 @@ exports.butterSwapApi = {
|
|
|
70
72
|
gasLimit: bignumber_js_1.default.max(feeData.gasLimit, gasLimit).toFixed(),
|
|
71
73
|
});
|
|
72
74
|
},
|
|
75
|
+
getUnsignedUtxoTransaction: async ({ stepIndex, tradeQuote, xpub, accountType, assertGetUtxoChainAdapter, }) => {
|
|
76
|
+
if (!(0, utils_1.isExecutableTradeQuote)(tradeQuote))
|
|
77
|
+
throw new Error('Unable to execute a trade rate quote');
|
|
78
|
+
const step = (0, utils_1.getExecutableTradeStep)(tradeQuote, stepIndex);
|
|
79
|
+
const { accountNumber, sellAsset, butterSwapTransactionMetadata } = step;
|
|
80
|
+
if (!butterSwapTransactionMetadata)
|
|
81
|
+
throw new Error('Transaction metadata is required');
|
|
82
|
+
const { to, memo } = butterSwapTransactionMetadata;
|
|
83
|
+
if (!to)
|
|
84
|
+
throw new Error('Missing deposit address');
|
|
85
|
+
if (!memo)
|
|
86
|
+
throw new Error('Missing memo (opReturnData)');
|
|
87
|
+
const adapter = assertGetUtxoChainAdapter(sellAsset.chainId);
|
|
88
|
+
const { fast } = await adapter.getFeeData({
|
|
89
|
+
to,
|
|
90
|
+
value: step.sellAmountIncludingProtocolFeesCryptoBaseUnit,
|
|
91
|
+
chainSpecific: { pubkey: xpub, opReturnData: memo },
|
|
92
|
+
sendMax: false,
|
|
93
|
+
});
|
|
94
|
+
return adapter.buildSendApiTransaction({
|
|
95
|
+
value: step.sellAmountIncludingProtocolFeesCryptoBaseUnit,
|
|
96
|
+
xpub,
|
|
97
|
+
to,
|
|
98
|
+
accountNumber,
|
|
99
|
+
chainSpecific: {
|
|
100
|
+
accountType,
|
|
101
|
+
opReturnData: memo,
|
|
102
|
+
satoshiPerByte: fast.chainSpecific.satoshiPerByte,
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
},
|
|
106
|
+
getUtxoTransactionFees: async ({ stepIndex, tradeQuote, xpub, assertGetUtxoChainAdapter }) => {
|
|
107
|
+
if (!(0, utils_1.isExecutableTradeQuote)(tradeQuote))
|
|
108
|
+
throw new Error('Unable to execute a trade rate quote');
|
|
109
|
+
const step = (0, utils_1.getExecutableTradeStep)(tradeQuote, stepIndex);
|
|
110
|
+
const { sellAsset, butterSwapTransactionMetadata } = step;
|
|
111
|
+
if (!butterSwapTransactionMetadata)
|
|
112
|
+
throw new Error('Transaction metadata is required');
|
|
113
|
+
const { to, memo } = butterSwapTransactionMetadata;
|
|
114
|
+
if (!to)
|
|
115
|
+
throw new Error('Missing deposit address');
|
|
116
|
+
if (!memo)
|
|
117
|
+
throw new Error('Missing memo (opReturnData)');
|
|
118
|
+
const adapter = assertGetUtxoChainAdapter(sellAsset.chainId);
|
|
119
|
+
const { fast } = await adapter.getFeeData({
|
|
120
|
+
to,
|
|
121
|
+
value: step.sellAmountIncludingProtocolFeesCryptoBaseUnit,
|
|
122
|
+
chainSpecific: { pubkey: xpub, opReturnData: memo },
|
|
123
|
+
sendMax: false,
|
|
124
|
+
});
|
|
125
|
+
return fast.txFee;
|
|
126
|
+
},
|
|
73
127
|
getUnsignedSolanaTransaction: getUnsignedSolanaTransaction_1.getUnsignedSolanaTransaction,
|
|
74
128
|
getSolanaTransactionFees: getSolanaTransactionFees_1.getSolanaTransactionFees,
|
|
129
|
+
getTronTransactionFees: getTronTransactionFees_1.getTronTransactionFees,
|
|
130
|
+
getUnsignedTronTransaction: getUnsignedTronTransaction_1.getUnsignedTronTransaction,
|
|
75
131
|
};
|
|
@@ -36,6 +36,25 @@ const checkTradeStatus = async (input) => {
|
|
|
36
36
|
fetchIsSmartContractAddressQuery,
|
|
37
37
|
});
|
|
38
38
|
}
|
|
39
|
+
if (sellChainId === caip_1.tronChainId) {
|
|
40
|
+
const adapter = input.assertGetTronChainAdapter(caip_1.tronChainId);
|
|
41
|
+
const tx = await adapter.httpProvider.getTransaction({ txid: txHash });
|
|
42
|
+
if (!tx) {
|
|
43
|
+
return (0, utils_1.createDefaultStatusResponse)(txHash);
|
|
44
|
+
}
|
|
45
|
+
const contractRet = tx.ret?.[0]?.contractRet;
|
|
46
|
+
// Only mark as confirmed if SUCCESS AND has confirmations (in a block)
|
|
47
|
+
const status = contractRet === 'SUCCESS' && tx.confirmations > 0
|
|
48
|
+
? unchained_client_1.TxStatus.Confirmed
|
|
49
|
+
: contractRet === 'REVERT'
|
|
50
|
+
? unchained_client_1.TxStatus.Failed
|
|
51
|
+
: unchained_client_1.TxStatus.Pending;
|
|
52
|
+
return {
|
|
53
|
+
status,
|
|
54
|
+
buyTxHash: txHash,
|
|
55
|
+
message: undefined,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
39
58
|
// Fallback: unknown same-chain type (should never happen for Butter, but just in case). Avoid bridge polling.
|
|
40
59
|
return (0, utils_1.createDefaultStatusResponse)(txHash);
|
|
41
60
|
}
|
|
@@ -9,25 +9,21 @@ const web3_js_1 = require("@solana/web3.js");
|
|
|
9
9
|
const constants_1 = require("../../../constants");
|
|
10
10
|
const types_1 = require("../../../types");
|
|
11
11
|
const utils_2 = require("../../../utils");
|
|
12
|
+
const affiliateFee_1 = require("../../utils/affiliateFee");
|
|
12
13
|
const constants_2 = require("../utils/constants");
|
|
13
14
|
const xhr_1 = require("../xhr");
|
|
14
15
|
const getTradeQuote = async (input, _deps) => {
|
|
15
16
|
const { sellAsset, buyAsset, sellAmountIncludingProtocolFeesCryptoBaseUnit, receiveAddress, sendAddress, slippageTolerancePercentageDecimal, accountNumber, affiliateBps, } = input;
|
|
16
17
|
if (!(0, chain_adapters_1.isEvmChainId)(sellAsset.chainId) &&
|
|
17
18
|
sellAsset.chainId !== caip_1.btcChainId &&
|
|
18
|
-
sellAsset.chainId !== caip_1.solanaChainId
|
|
19
|
+
sellAsset.chainId !== caip_1.solanaChainId &&
|
|
20
|
+
sellAsset.chainId !== caip_1.tronChainId) {
|
|
19
21
|
return (0, monads_1.Err)((0, utils_2.makeSwapErrorRight)({
|
|
20
22
|
message: `Unsupported chain`,
|
|
21
23
|
code: types_1.TradeQuoteError.UnsupportedChain,
|
|
22
24
|
}));
|
|
23
25
|
}
|
|
24
|
-
//
|
|
25
|
-
if (sellAsset.assetId === caip_1.btcAssetId) {
|
|
26
|
-
return (0, monads_1.Err)((0, utils_2.makeSwapErrorRight)({
|
|
27
|
-
message: `BTC sells are currently unsupported`,
|
|
28
|
-
code: types_1.TradeQuoteError.UnsupportedChain,
|
|
29
|
-
}));
|
|
30
|
-
}
|
|
26
|
+
// TODO: Debug why same-chain Tron swaps revert (swapAndCall method works on EVM but 0 successful on Tron)
|
|
31
27
|
if (!sendAddress) {
|
|
32
28
|
return (0, monads_1.Err)((0, utils_2.makeSwapErrorRight)({
|
|
33
29
|
message: '[getTradeQuote] sendAddress is required for ButterSwap',
|
|
@@ -41,7 +37,10 @@ const getTradeQuote = async (input, _deps) => {
|
|
|
41
37
|
const routeResult = await (0, xhr_1.getButterRoute)({
|
|
42
38
|
sellAsset,
|
|
43
39
|
buyAsset,
|
|
44
|
-
|
|
40
|
+
sellAmountCryptoPrecision: utils_1.BigAmount.fromBaseUnit({
|
|
41
|
+
value: sellAmountIncludingProtocolFeesCryptoBaseUnit,
|
|
42
|
+
precision: sellAsset.precision,
|
|
43
|
+
}).toPrecision(),
|
|
45
44
|
slippage,
|
|
46
45
|
affiliate: (0, constants_2.makeButterSwapAffiliate)(affiliateBps),
|
|
47
46
|
});
|
|
@@ -50,7 +49,10 @@ const getTradeQuote = async (input, _deps) => {
|
|
|
50
49
|
const routeResponse = routeResult.unwrap();
|
|
51
50
|
if (!(0, xhr_1.isRouteSuccess)(routeResponse)) {
|
|
52
51
|
if (routeResponse.errno === xhr_1.ButterSwapErrorCode.InsufficientAmount) {
|
|
53
|
-
const minAmountCryptoBaseUnit =
|
|
52
|
+
const minAmountCryptoBaseUnit = utils_1.BigAmount.fromPrecision({
|
|
53
|
+
value: routeResponse.minAmount,
|
|
54
|
+
precision: sellAsset.precision,
|
|
55
|
+
}).toBaseUnit();
|
|
54
56
|
return (0, monads_1.Err)((0, utils_2.createTradeAmountTooSmallErr)({
|
|
55
57
|
minAmountCryptoBaseUnit,
|
|
56
58
|
assetId: sellAsset.assetId,
|
|
@@ -100,13 +102,19 @@ const getTradeQuote = async (input, _deps) => {
|
|
|
100
102
|
}));
|
|
101
103
|
}
|
|
102
104
|
// Map gasFee.amount to networkFeeCryptoBaseUnit using fee asset precision
|
|
103
|
-
const networkFeeCryptoBaseUnit =
|
|
105
|
+
const networkFeeCryptoBaseUnit = utils_1.BigAmount.fromPrecision({
|
|
106
|
+
value: (0, utils_1.bnOrZero)(route.gasFee?.amount),
|
|
107
|
+
precision: feeAsset.precision,
|
|
108
|
+
}).toBaseUnit();
|
|
104
109
|
// Use destination receive amount as a priority if present and defined
|
|
105
110
|
// It won't for same-chain swaps, so we fall back to the source chain receive amount (i.e source chain *is* the destination chain)
|
|
106
111
|
const outputAmount = route.dstChain?.totalAmountOut ?? route.srcChain.totalAmountOut;
|
|
107
112
|
// TODO: affiliate fees not yet here, gut feel is that Butter won't do the swap output - fees logic for us here
|
|
108
113
|
// Sanity check me when affiliates are implemented, and do the math ourselves if needed
|
|
109
|
-
const buyAmountAfterFeesCryptoBaseUnit =
|
|
114
|
+
const buyAmountAfterFeesCryptoBaseUnit = utils_1.BigAmount.fromPrecision({
|
|
115
|
+
value: outputAmount,
|
|
116
|
+
precision: buyAsset.precision,
|
|
117
|
+
}).toBaseUnit();
|
|
110
118
|
const rate = (0, utils_2.getInputOutputRate)({
|
|
111
119
|
sellAmountCryptoBaseUnit: sellAmountIncludingProtocolFeesCryptoBaseUnit,
|
|
112
120
|
buyAmountCryptoBaseUnit: buyAmountAfterFeesCryptoBaseUnit,
|
|
@@ -118,7 +126,12 @@ const getTradeQuote = async (input, _deps) => {
|
|
|
118
126
|
if (sellAsset.chainId !== caip_1.solanaChainId)
|
|
119
127
|
return (0, monads_1.Ok)(undefined);
|
|
120
128
|
const txData = buildTx.data.startsWith('0x') ? buildTx.data.slice(2) : buildTx.data;
|
|
121
|
-
const
|
|
129
|
+
const txBytes = Buffer.from(txData, 'hex');
|
|
130
|
+
// Solana transactions are limited to 1232 bytes. If Butter returns a larger tx,
|
|
131
|
+
// we need to split it into a Jito bundle (2 txs with tip in the last one).
|
|
132
|
+
const SOLANA_TX_SIZE_LIMIT = 1232;
|
|
133
|
+
const isOversized = txBytes.length > SOLANA_TX_SIZE_LIMIT;
|
|
134
|
+
const versionedTransaction = web3_js_1.VersionedTransaction.deserialize(new Uint8Array(txBytes));
|
|
122
135
|
const adapter = _deps.assertGetSolanaChainAdapter(sellAsset.chainId);
|
|
123
136
|
try {
|
|
124
137
|
const addressLookupTableAccountKeys = versionedTransaction.message.addressTableLookups.map(lookup => lookup.accountKey.toString());
|
|
@@ -137,6 +150,7 @@ const getTradeQuote = async (input, _deps) => {
|
|
|
137
150
|
return (0, monads_1.Ok)({
|
|
138
151
|
instructions,
|
|
139
152
|
addressLookupTableAddresses: addressLookupTableAccountKeys,
|
|
153
|
+
isOversized,
|
|
140
154
|
});
|
|
141
155
|
}
|
|
142
156
|
catch (error) {
|
|
@@ -151,7 +165,10 @@ const getTradeQuote = async (input, _deps) => {
|
|
|
151
165
|
}
|
|
152
166
|
const solanaTransactionMetadata = maybeSolanaTransactionMetadata?.unwrap();
|
|
153
167
|
const step = {
|
|
154
|
-
buyAmountBeforeFeesCryptoBaseUnit:
|
|
168
|
+
buyAmountBeforeFeesCryptoBaseUnit: utils_1.BigAmount.fromPrecision({
|
|
169
|
+
value: outputAmount,
|
|
170
|
+
precision: buyAsset.precision,
|
|
171
|
+
}).toBaseUnit(),
|
|
155
172
|
buyAmountAfterFeesCryptoBaseUnit,
|
|
156
173
|
sellAmountIncludingProtocolFeesCryptoBaseUnit,
|
|
157
174
|
feeData: {
|
|
@@ -163,17 +180,29 @@ const getTradeQuote = async (input, _deps) => {
|
|
|
163
180
|
buyAsset,
|
|
164
181
|
sellAsset,
|
|
165
182
|
accountNumber,
|
|
166
|
-
allowanceContract: route.contract ?? '0x0',
|
|
183
|
+
allowanceContract: sellAsset.chainId === caip_1.tronChainId ? buildTx.to : route.contract ?? '0x0',
|
|
167
184
|
estimatedExecutionTimeMs: route.timeEstimated * 1000,
|
|
168
185
|
butterSwapTransactionMetadata: {
|
|
169
186
|
to: buildTx.to,
|
|
170
187
|
data: buildTx.data,
|
|
171
188
|
value: buildTx.value,
|
|
172
189
|
gasLimit: (0, utils_1.bnOrZero)(route.gasEstimatedTarget).toFixed(),
|
|
190
|
+
method: buildTx.method,
|
|
191
|
+
args: buildTx.args,
|
|
192
|
+
memo: buildTx.memo,
|
|
173
193
|
},
|
|
174
194
|
...(solanaTransactionMetadata && {
|
|
175
195
|
solanaTransactionMetadata,
|
|
176
196
|
}),
|
|
197
|
+
affiliateFee: (0, affiliateFee_1.buildAffiliateFee)({
|
|
198
|
+
strategy: 'buy_asset',
|
|
199
|
+
affiliateBps,
|
|
200
|
+
sellAsset,
|
|
201
|
+
buyAsset,
|
|
202
|
+
sellAmountCryptoBaseUnit: sellAmountIncludingProtocolFeesCryptoBaseUnit,
|
|
203
|
+
buyAmountCryptoBaseUnit: buyAmountAfterFeesCryptoBaseUnit,
|
|
204
|
+
isEstimate: true,
|
|
205
|
+
}),
|
|
177
206
|
};
|
|
178
207
|
const tradeQuote = {
|
|
179
208
|
id: route.hash,
|
|
@@ -36,6 +36,7 @@ vitest_1.vi.mock('../xhr', () => ({
|
|
|
36
36
|
assertGetSuiChainAdapter: () => vitest_1.vi.fn(),
|
|
37
37
|
assertGetNearChainAdapter: () => vitest_1.vi.fn(),
|
|
38
38
|
assertGetStarknetChainAdapter: () => vitest_1.vi.fn(),
|
|
39
|
+
assertGetTonChainAdapter: () => vitest_1.vi.fn(),
|
|
39
40
|
config: {
|
|
40
41
|
VITE_BUTTERSWAP_CLIENT_ID: 'test',
|
|
41
42
|
},
|
|
@@ -8,35 +8,31 @@ const monads_1 = require("@sniptt/monads");
|
|
|
8
8
|
const constants_1 = require("../../../constants");
|
|
9
9
|
const types_1 = require("../../../types");
|
|
10
10
|
const utils_2 = require("../../../utils");
|
|
11
|
+
const affiliateFee_1 = require("../../utils/affiliateFee");
|
|
11
12
|
const constants_2 = require("../utils/constants");
|
|
12
13
|
const xhr_1 = require("../xhr");
|
|
13
14
|
const getTradeRate = async (input, _deps) => {
|
|
14
15
|
const { sellAsset, buyAsset, affiliateBps, accountNumber, receiveAddress, sellAmountIncludingProtocolFeesCryptoBaseUnit, } = input;
|
|
15
16
|
if (!(0, chain_adapters_1.isEvmChainId)(sellAsset.chainId) &&
|
|
16
17
|
sellAsset.chainId !== caip_1.btcChainId &&
|
|
17
|
-
sellAsset.chainId !== caip_1.solanaChainId
|
|
18
|
+
sellAsset.chainId !== caip_1.solanaChainId &&
|
|
19
|
+
sellAsset.chainId !== caip_1.tronChainId) {
|
|
18
20
|
return (0, monads_1.Err)((0, utils_2.makeSwapErrorRight)({
|
|
19
21
|
message: `Unsupported chain`,
|
|
20
22
|
code: types_1.TradeQuoteError.UnsupportedChain,
|
|
21
23
|
}));
|
|
22
24
|
}
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
code: types_1.TradeQuoteError.UnsupportedChain,
|
|
28
|
-
}));
|
|
29
|
-
}
|
|
30
|
-
const amount = (0, utils_1.bn)(sellAmountIncludingProtocolFeesCryptoBaseUnit)
|
|
31
|
-
.shiftedBy(-sellAsset.precision)
|
|
32
|
-
.toString();
|
|
25
|
+
const amount = utils_1.BigAmount.fromBaseUnit({
|
|
26
|
+
value: sellAmountIncludingProtocolFeesCryptoBaseUnit,
|
|
27
|
+
precision: sellAsset.precision,
|
|
28
|
+
}).toPrecision();
|
|
33
29
|
const feeAssetId = (0, utils_1.chainIdToFeeAssetId)(sellAsset.chainId);
|
|
34
30
|
const slippageTolerancePercentageDecimal = (0, constants_1.getDefaultSlippageDecimalPercentageForSwapper)(types_1.SwapperName.ButterSwap);
|
|
35
31
|
const slippage = (0, utils_1.convertDecimalPercentageToBasisPoints)(slippageTolerancePercentageDecimal).toString();
|
|
36
32
|
const result = await (0, xhr_1.getButterRoute)({
|
|
37
33
|
sellAsset,
|
|
38
34
|
buyAsset,
|
|
39
|
-
|
|
35
|
+
sellAmountCryptoPrecision: amount,
|
|
40
36
|
slippage,
|
|
41
37
|
affiliate: (0, constants_2.makeButterSwapAffiliate)(affiliateBps),
|
|
42
38
|
});
|
|
@@ -46,7 +42,10 @@ const getTradeRate = async (input, _deps) => {
|
|
|
46
42
|
const routeResponse = result.unwrap();
|
|
47
43
|
if (!(0, xhr_1.isRouteSuccess)(routeResponse)) {
|
|
48
44
|
if (routeResponse.errno === xhr_1.ButterSwapErrorCode.InsufficientAmount) {
|
|
49
|
-
const minAmountCryptoBaseUnit =
|
|
45
|
+
const minAmountCryptoBaseUnit = utils_1.BigAmount.fromPrecision({
|
|
46
|
+
value: routeResponse.minAmount,
|
|
47
|
+
precision: sellAsset.precision,
|
|
48
|
+
}).toBaseUnit();
|
|
50
49
|
return (0, monads_1.Err)((0, utils_2.createTradeAmountTooSmallErr)({
|
|
51
50
|
minAmountCryptoBaseUnit,
|
|
52
51
|
assetId: sellAsset.assetId,
|
|
@@ -69,7 +68,10 @@ const getTradeRate = async (input, _deps) => {
|
|
|
69
68
|
const outputAmount = route.dstChain?.totalAmountOut ?? route.srcChain.totalAmountOut;
|
|
70
69
|
// TODO: affiliate fees not yet here, gut feel is that Butter won't do the swap output - fees logic for us here
|
|
71
70
|
// Sanity check me when affiliates are implemented, and do the math ourselves if needed
|
|
72
|
-
const buyAmountAfterFeesCryptoBaseUnit =
|
|
71
|
+
const buyAmountAfterFeesCryptoBaseUnit = utils_1.BigAmount.fromPrecision({
|
|
72
|
+
value: outputAmount,
|
|
73
|
+
precision: buyAsset.precision,
|
|
74
|
+
}).toBaseUnit();
|
|
73
75
|
const rate = (0, utils_2.getInputOutputRate)({
|
|
74
76
|
sellAmountCryptoBaseUnit: sellAmountIncludingProtocolFeesCryptoBaseUnit,
|
|
75
77
|
buyAmountCryptoBaseUnit: buyAmountAfterFeesCryptoBaseUnit,
|
|
@@ -85,12 +87,18 @@ const getTradeRate = async (input, _deps) => {
|
|
|
85
87
|
}
|
|
86
88
|
// Map gasFee.amount to networkFeeCryptoBaseUnit using fee asset precision
|
|
87
89
|
const networkFeeCryptoBaseUnit = (0, utils_1.bnOrZero)(route.gasFee?.amount).gt(0)
|
|
88
|
-
?
|
|
90
|
+
? utils_1.BigAmount.fromPrecision({
|
|
91
|
+
value: route.gasFee.amount,
|
|
92
|
+
precision: feeAsset.precision,
|
|
93
|
+
}).toBaseUnit()
|
|
89
94
|
: '0';
|
|
90
95
|
// Always a single step
|
|
91
96
|
const step = {
|
|
92
97
|
rate,
|
|
93
|
-
buyAmountBeforeFeesCryptoBaseUnit:
|
|
98
|
+
buyAmountBeforeFeesCryptoBaseUnit: utils_1.BigAmount.fromPrecision({
|
|
99
|
+
value: outputAmount,
|
|
100
|
+
precision: buyAsset.precision,
|
|
101
|
+
}).toBaseUnit(),
|
|
94
102
|
buyAmountAfterFeesCryptoBaseUnit,
|
|
95
103
|
sellAmountIncludingProtocolFeesCryptoBaseUnit,
|
|
96
104
|
feeData: {
|
|
@@ -103,6 +111,15 @@ const getTradeRate = async (input, _deps) => {
|
|
|
103
111
|
accountNumber,
|
|
104
112
|
allowanceContract: route.contract ?? '0x0',
|
|
105
113
|
estimatedExecutionTimeMs: route.timeEstimated * 1000,
|
|
114
|
+
affiliateFee: (0, affiliateFee_1.buildAffiliateFee)({
|
|
115
|
+
strategy: 'buy_asset',
|
|
116
|
+
affiliateBps,
|
|
117
|
+
sellAsset,
|
|
118
|
+
buyAsset,
|
|
119
|
+
sellAmountCryptoBaseUnit: sellAmountIncludingProtocolFeesCryptoBaseUnit,
|
|
120
|
+
buyAmountCryptoBaseUnit: buyAmountAfterFeesCryptoBaseUnit,
|
|
121
|
+
isEstimate: true,
|
|
122
|
+
}),
|
|
106
123
|
};
|
|
107
124
|
const tradeRate = {
|
|
108
125
|
id: route.hash,
|
|
@@ -30,6 +30,7 @@ vitest_1.vi.mock('../utils/butterSwapService', () => ({
|
|
|
30
30
|
assertGetSuiChainAdapter: () => vitest_1.vi.fn(),
|
|
31
31
|
assertGetNearChainAdapter: () => vitest_1.vi.fn(),
|
|
32
32
|
assertGetStarknetChainAdapter: () => vitest_1.vi.fn(),
|
|
33
|
+
assertGetTonChainAdapter: () => vitest_1.vi.fn(),
|
|
33
34
|
config: {
|
|
34
35
|
VITE_BUTTERSWAP_CLIENT_ID: 'test',
|
|
35
36
|
},
|
|
@@ -66,6 +67,7 @@ vitest_1.vi.mock('../utils/butterSwapService', () => ({
|
|
|
66
67
|
assertGetSuiChainAdapter: () => vitest_1.vi.fn(),
|
|
67
68
|
assertGetNearChainAdapter: () => vitest_1.vi.fn(),
|
|
68
69
|
assertGetStarknetChainAdapter: () => vitest_1.vi.fn(),
|
|
70
|
+
assertGetTonChainAdapter: () => vitest_1.vi.fn(),
|
|
69
71
|
config: {
|
|
70
72
|
VITE_BUTTERSWAP_CLIENT_ID: 'test',
|
|
71
73
|
},
|
|
@@ -13,6 +13,7 @@ const BUTTERSWAP_CHAIN_ID_TO_CHAIN_ID = {
|
|
|
13
13
|
43114: types_1.KnownChainIds.AvalancheMainnet,
|
|
14
14
|
1360108768460801: types_1.KnownChainIds.SolanaMainnet,
|
|
15
15
|
1360095883558913: types_1.KnownChainIds.BitcoinMainnet,
|
|
16
|
+
728126428: types_1.KnownChainIds.TronMainnet,
|
|
16
17
|
};
|
|
17
18
|
const CHAIN_ID_TO_BUTTERSWAP_CHAIN_ID = Object.entries(BUTTERSWAP_CHAIN_ID_TO_CHAIN_ID).reduce((acc, [butterSwapChainId, chainId]) => {
|
|
18
19
|
acc[chainId] = Number(butterSwapChainId);
|
|
@@ -20,11 +20,11 @@ type ButterSwapPromise<T> = Promise<Result<T, SwapErrorRight>>;
|
|
|
20
20
|
export type GetButterRouteArgs = {
|
|
21
21
|
sellAsset: Asset;
|
|
22
22
|
buyAsset: Asset;
|
|
23
|
-
|
|
23
|
+
sellAmountCryptoPrecision: string;
|
|
24
24
|
slippage: string;
|
|
25
25
|
affiliate?: string;
|
|
26
26
|
};
|
|
27
|
-
export declare const getButterRoute: ({ sellAsset, buyAsset,
|
|
27
|
+
export declare const getButterRoute: ({ sellAsset, buyAsset, sellAmountCryptoPrecision, slippage, affiliate, }: GetButterRouteArgs) => ButterSwapPromise<RouteResponse>;
|
|
28
28
|
export type ButterBuildTxArgs = {
|
|
29
29
|
hash: string;
|
|
30
30
|
slippage: string;
|
|
@@ -23,7 +23,8 @@ var ButterSwapErrorCode;
|
|
|
23
23
|
ButterSwapErrorCode[ButterSwapErrorCode["InvalidAddress"] = 2007] = "InvalidAddress";
|
|
24
24
|
})(ButterSwapErrorCode || (exports.ButterSwapErrorCode = ButterSwapErrorCode = {}));
|
|
25
25
|
const SOLANA_NATIVE_ADDRESS = 'So11111111111111111111111111111111111111112';
|
|
26
|
-
const
|
|
26
|
+
const TRON_NATIVE_ADDRESS = 'T9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb';
|
|
27
|
+
const getButterRoute = async ({ sellAsset, buyAsset, sellAmountCryptoPrecision, slippage, affiliate, }) => {
|
|
27
28
|
const butterFromChainId = (0, helpers_2.chainIdToButterSwapChainId)(sellAsset.chainId);
|
|
28
29
|
const butterToChainId = (0, helpers_2.chainIdToButterSwapChainId)(buyAsset.chainId);
|
|
29
30
|
if (!butterFromChainId || !butterToChainId) {
|
|
@@ -40,6 +41,8 @@ const getButterRoute = async ({ sellAsset, buyAsset, sellAmountCryptoBaseUnit, s
|
|
|
40
41
|
const sellAssetAddress = (() => {
|
|
41
42
|
if (sellAsset.chainId === caip_1.solanaChainId && sellAssetIsNative)
|
|
42
43
|
return SOLANA_NATIVE_ADDRESS;
|
|
44
|
+
if (sellAsset.chainId === caip_1.tronChainId && sellAssetIsNative)
|
|
45
|
+
return TRON_NATIVE_ADDRESS;
|
|
43
46
|
if (sellAssetIsNative)
|
|
44
47
|
return viem_1.zeroAddress;
|
|
45
48
|
return sellAssetAddressRaw;
|
|
@@ -47,6 +50,8 @@ const getButterRoute = async ({ sellAsset, buyAsset, sellAmountCryptoBaseUnit, s
|
|
|
47
50
|
const buyAssetAddress = (() => {
|
|
48
51
|
if (buyAsset.chainId === caip_1.solanaChainId && buyAssetIsNative)
|
|
49
52
|
return SOLANA_NATIVE_ADDRESS;
|
|
53
|
+
if (buyAsset.chainId === caip_1.tronChainId && buyAssetIsNative)
|
|
54
|
+
return TRON_NATIVE_ADDRESS;
|
|
50
55
|
if (buyAssetIsNative)
|
|
51
56
|
return viem_1.zeroAddress;
|
|
52
57
|
return buyAssetAddressRaw;
|
|
@@ -57,7 +62,7 @@ const getButterRoute = async ({ sellAsset, buyAsset, sellAmountCryptoBaseUnit, s
|
|
|
57
62
|
tokenInAddress: sellAssetAddress,
|
|
58
63
|
toChainId: butterToChainId,
|
|
59
64
|
tokenOutAddress: buyAssetAddress,
|
|
60
|
-
amount:
|
|
65
|
+
amount: sellAmountCryptoPrecision,
|
|
61
66
|
type: 'exactIn',
|
|
62
67
|
slippage,
|
|
63
68
|
entrance: 'shapeshift',
|