@shapeshiftoss/swapper 20.3.0 → 20.5.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 +21 -0
- package/dist/cjs/index.d.ts +3 -0
- package/dist/cjs/index.js +3 -0
- package/dist/cjs/swappers/AcrossSwapper/utils/getAcrossStepData.js +7 -15
- package/dist/cjs/swappers/ArbitrumBridgeSwapper/getTradeQuote/getTradeQuote.js +0 -2
- package/dist/cjs/swappers/AvnuSwapper/endpoints.js +17 -12
- 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/BebopSwapper/utils/getBebopStepData.js +17 -22
- package/dist/cjs/swappers/BobGatewaySwapper/swapperApi/getTradeQuote.js +0 -2
- package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeQuote.js +0 -2
- package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeQuote.test.js +1 -0
- package/dist/cjs/swappers/ButterSwap/swapperApi/getTradeRate.test.js +1 -0
- package/dist/cjs/swappers/ButterSwap/utils/getButterSwapStepData.js +3 -4
- package/dist/cjs/swappers/ButterSwap/utils/getButterSwapStepData.test.js +2 -2
- package/dist/cjs/swappers/CetusSwapper/endpoints.js +2 -3
- package/dist/cjs/swappers/CetusSwapper/swapperApi/getCetusStepData.js +13 -8
- package/dist/cjs/swappers/CetusSwapper/swapperApi/getCetusTradeContext.js +1 -2
- package/dist/cjs/swappers/CetusSwapper/swapperApi/getTradeQuote.js +0 -2
- package/dist/cjs/swappers/CetusSwapper/utils/constants.d.ts +0 -1
- package/dist/cjs/swappers/CetusSwapper/utils/constants.js +1 -2
- package/dist/cjs/swappers/CetusSwapper/utils/helpers.d.ts +3 -3
- package/dist/cjs/swappers/CetusSwapper/utils/helpers.js +6 -17
- package/dist/cjs/swappers/ChainflipSwapper/swapperApi/getTradeQuote.js +1 -2
- package/dist/cjs/swappers/ChainflipSwapper/types.d.ts +1 -0
- package/dist/cjs/swappers/DebridgeSwapper/getTradeQuote/getTradeQuote.js +0 -2
- package/dist/cjs/swappers/DebridgeSwapper/utils/getDebridgeStepData.d.ts +0 -1
- package/dist/cjs/swappers/DebridgeSwapper/utils/getDebridgeStepData.js +9 -16
- package/dist/cjs/swappers/DebridgeSwapper/utils/getDebridgeTradeContext.js +0 -3
- 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 +46 -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/KyberSwapper/KyberSwapper.d.ts +2 -0
- package/dist/cjs/swappers/KyberSwapper/KyberSwapper.js +5 -0
- package/dist/cjs/swappers/KyberSwapper/endpoints.d.ts +2 -0
- package/dist/cjs/swappers/KyberSwapper/endpoints.js +14 -0
- package/dist/cjs/swappers/KyberSwapper/index.d.ts +2 -0
- package/dist/cjs/swappers/KyberSwapper/index.js +7 -0
- package/dist/cjs/swappers/KyberSwapper/swapperApi/getKyberTradeQuote.d.ts +4 -0
- package/dist/cjs/swappers/KyberSwapper/swapperApi/getKyberTradeQuote.js +64 -0
- package/dist/cjs/swappers/KyberSwapper/swapperApi/getKyberTradeRate.d.ts +4 -0
- package/dist/cjs/swappers/KyberSwapper/swapperApi/getKyberTradeRate.js +31 -0
- package/dist/cjs/swappers/KyberSwapper/types.d.ts +62 -0
- package/dist/cjs/swappers/KyberSwapper/types.js +2 -0
- package/dist/cjs/swappers/KyberSwapper/utils/constants.d.ts +21 -0
- package/dist/cjs/swappers/KyberSwapper/utils/constants.js +24 -0
- package/dist/cjs/swappers/KyberSwapper/utils/fetchFromKyber.d.ts +23 -0
- package/dist/cjs/swappers/KyberSwapper/utils/fetchFromKyber.js +38 -0
- package/dist/cjs/swappers/KyberSwapper/utils/getKyberStepData.d.ts +27 -0
- package/dist/cjs/swappers/KyberSwapper/utils/getKyberStepData.js +47 -0
- package/dist/cjs/swappers/KyberSwapper/utils/getKyberStepData.test.d.ts +1 -0
- package/dist/cjs/swappers/KyberSwapper/utils/getKyberStepData.test.js +92 -0
- package/dist/cjs/swappers/KyberSwapper/utils/getKyberTradeContext.d.ts +20 -0
- package/dist/cjs/swappers/KyberSwapper/utils/getKyberTradeContext.js +63 -0
- package/dist/cjs/swappers/KyberSwapper/utils/helpers.d.ts +27 -0
- package/dist/cjs/swappers/KyberSwapper/utils/helpers.js +172 -0
- package/dist/cjs/swappers/KyberSwapper/utils/helpers.test.d.ts +1 -0
- package/dist/cjs/swappers/KyberSwapper/utils/helpers.test.js +110 -0
- package/dist/cjs/swappers/KyberSwapper/utils/kyberService.d.ts +5 -0
- package/dist/cjs/swappers/KyberSwapper/utils/kyberService.js +9 -0
- package/dist/cjs/swappers/MayachainSwapper/generated/generatedTradableAssetMap.json +0 -1
- package/dist/cjs/swappers/NearIntentsSwapper/NearIntentsSwapper.js +1 -0
- package/dist/cjs/swappers/NearIntentsSwapper/endpoints.js +13 -14
- package/dist/cjs/swappers/NearIntentsSwapper/swapperApi/getTradeRate.js +1 -1
- package/dist/cjs/swappers/NearIntentsSwapper/types.d.ts +4 -4
- package/dist/cjs/swappers/NearIntentsSwapper/types.js +2 -0
- package/dist/cjs/swappers/NearIntentsSwapper/utils/getNearIntentsStepData.js +28 -0
- package/dist/cjs/swappers/NearIntentsSwapper/utils/helpers.js +2 -2
- package/dist/cjs/swappers/PortalsSwapper/endpoints.js +4 -1
- package/dist/cjs/swappers/PortalsSwapper/getPortalsTradeQuote/getPortalsTradeQuote.js +1 -1
- package/dist/cjs/swappers/PortalsSwapper/utils/getPortalsStepData.js +36 -55
- package/dist/cjs/swappers/PortalsSwapper/utils/getPortalsStepData.test.js +2 -2
- package/dist/cjs/swappers/RelaySwapper/getTradeQuote/getTradeQuote.js +2 -3
- package/dist/cjs/swappers/RelaySwapper/utils/getRelayStepData.js +7 -15
- 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/relayStatus.js +3 -3
- package/dist/cjs/swappers/RelaySwapper/utils/types.d.ts +9 -4
- 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/generated/generatedThorLongtailTokens.json +1 -0
- package/dist/cjs/swappers/ThorchainSwapper/generated/generatedTradableAssetMap.json +1 -0
- package/dist/cjs/swappers/ThorchainSwapper/getTradeQuote/getTradeQuote.test.js +2 -2
- package/dist/cjs/swappers/ThorchainSwapper/utils/getLongtailQuote.js +1 -1
- package/dist/cjs/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.js +27 -2
- 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/swappers/ZrxSwapper/utils/getZrxStepData.d.ts +3 -1
- package/dist/cjs/swappers/ZrxSwapper/utils/getZrxStepData.js +29 -10
- package/dist/cjs/types.d.ts +41 -12
- package/dist/cjs/types.js +3 -0
- package/dist/cjs/utils/aptos/constants.d.ts +2 -0
- package/dist/cjs/utils/aptos/constants.js +7 -0
- package/dist/cjs/utils/aptos/getAptosTransactionFees.d.ts +2 -0
- package/dist/cjs/utils/aptos/getAptosTransactionFees.js +13 -0
- package/dist/cjs/utils/aptos/getUnsignedAptosTransaction.d.ts +2 -0
- package/dist/cjs/utils/aptos/getUnsignedAptosTransaction.js +16 -0
- package/dist/cjs/utils/aptos/index.d.ts +3 -0
- package/dist/cjs/utils/aptos/index.js +19 -0
- package/dist/cjs/utils/evm/getEvmNetworkFeeCryptoBaseUnit.d.ts +19 -6
- package/dist/cjs/utils/evm/getEvmNetworkFeeCryptoBaseUnit.js +45 -35
- package/dist/cjs/utils/evm/getEvmNetworkFeeCryptoBaseUnit.test.d.ts +1 -0
- package/dist/cjs/utils/evm/getEvmNetworkFeeCryptoBaseUnit.test.js +103 -0
- package/dist/cjs/utils/evm/stateOverride.d.ts +3 -0
- package/dist/cjs/utils/evm/stateOverride.js +10 -4
- package/dist/cjs/utils/helpers.d.ts +1 -2
- package/dist/cjs/utils/helpers.js +9 -32
- package/dist/cjs/utils/helpers.test.js +7 -2
- package/dist/cjs/utils/index.d.ts +3 -2
- package/dist/cjs/utils/index.js +11 -27
- package/dist/esm/.tsbuildinfo +1 -1
- package/dist/esm/constants.js +21 -0
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/swappers/AcrossSwapper/utils/getAcrossStepData.js +8 -16
- package/dist/esm/swappers/ArbitrumBridgeSwapper/getTradeQuote/getTradeQuote.js +0 -2
- package/dist/esm/swappers/AvnuSwapper/endpoints.js +18 -13
- 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/BebopSwapper/utils/getBebopStepData.js +18 -23
- package/dist/esm/swappers/BobGatewaySwapper/swapperApi/getTradeQuote.js +0 -2
- package/dist/esm/swappers/ButterSwap/swapperApi/getTradeQuote.js +0 -2
- package/dist/esm/swappers/ButterSwap/swapperApi/getTradeQuote.test.js +1 -0
- package/dist/esm/swappers/ButterSwap/swapperApi/getTradeRate.test.js +1 -0
- package/dist/esm/swappers/ButterSwap/utils/getButterSwapStepData.js +4 -5
- package/dist/esm/swappers/ButterSwap/utils/getButterSwapStepData.test.js +2 -2
- package/dist/esm/swappers/CetusSwapper/endpoints.js +3 -4
- package/dist/esm/swappers/CetusSwapper/swapperApi/getCetusStepData.js +13 -8
- package/dist/esm/swappers/CetusSwapper/swapperApi/getCetusTradeContext.js +2 -3
- package/dist/esm/swappers/CetusSwapper/swapperApi/getTradeQuote.js +0 -2
- package/dist/esm/swappers/CetusSwapper/utils/constants.d.ts +0 -1
- package/dist/esm/swappers/CetusSwapper/utils/constants.js +0 -1
- package/dist/esm/swappers/CetusSwapper/utils/helpers.d.ts +3 -3
- package/dist/esm/swappers/CetusSwapper/utils/helpers.js +4 -15
- package/dist/esm/swappers/ChainflipSwapper/swapperApi/getTradeQuote.js +1 -2
- package/dist/esm/swappers/ChainflipSwapper/types.d.ts +1 -0
- package/dist/esm/swappers/DebridgeSwapper/getTradeQuote/getTradeQuote.js +0 -2
- package/dist/esm/swappers/DebridgeSwapper/utils/getDebridgeStepData.d.ts +0 -1
- package/dist/esm/swappers/DebridgeSwapper/utils/getDebridgeStepData.js +9 -16
- package/dist/esm/swappers/DebridgeSwapper/utils/getDebridgeTradeContext.js +0 -3
- 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 +42 -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/KyberSwapper/KyberSwapper.d.ts +2 -0
- package/dist/esm/swappers/KyberSwapper/KyberSwapper.js +2 -0
- package/dist/esm/swappers/KyberSwapper/endpoints.d.ts +2 -0
- package/dist/esm/swappers/KyberSwapper/endpoints.js +11 -0
- package/dist/esm/swappers/KyberSwapper/index.d.ts +2 -0
- package/dist/esm/swappers/KyberSwapper/index.js +2 -0
- package/dist/esm/swappers/KyberSwapper/swapperApi/getKyberTradeQuote.d.ts +4 -0
- package/dist/esm/swappers/KyberSwapper/swapperApi/getKyberTradeQuote.js +60 -0
- package/dist/esm/swappers/KyberSwapper/swapperApi/getKyberTradeRate.d.ts +4 -0
- package/dist/esm/swappers/KyberSwapper/swapperApi/getKyberTradeRate.js +27 -0
- package/dist/esm/swappers/KyberSwapper/types.d.ts +62 -0
- package/dist/esm/swappers/KyberSwapper/types.js +1 -0
- package/dist/esm/swappers/KyberSwapper/utils/constants.d.ts +21 -0
- package/dist/esm/swappers/KyberSwapper/utils/constants.js +21 -0
- package/dist/esm/swappers/KyberSwapper/utils/fetchFromKyber.d.ts +23 -0
- package/dist/esm/swappers/KyberSwapper/utils/fetchFromKyber.js +33 -0
- package/dist/esm/swappers/KyberSwapper/utils/getKyberStepData.d.ts +27 -0
- package/dist/esm/swappers/KyberSwapper/utils/getKyberStepData.js +43 -0
- package/dist/esm/swappers/KyberSwapper/utils/getKyberStepData.test.d.ts +1 -0
- package/dist/esm/swappers/KyberSwapper/utils/getKyberStepData.test.js +90 -0
- package/dist/esm/swappers/KyberSwapper/utils/getKyberTradeContext.d.ts +20 -0
- package/dist/esm/swappers/KyberSwapper/utils/getKyberTradeContext.js +59 -0
- package/dist/esm/swappers/KyberSwapper/utils/helpers.d.ts +27 -0
- package/dist/esm/swappers/KyberSwapper/utils/helpers.js +158 -0
- package/dist/esm/swappers/KyberSwapper/utils/helpers.test.d.ts +1 -0
- package/dist/esm/swappers/KyberSwapper/utils/helpers.test.js +108 -0
- package/dist/esm/swappers/KyberSwapper/utils/kyberService.d.ts +5 -0
- package/dist/esm/swappers/KyberSwapper/utils/kyberService.js +3 -0
- package/dist/esm/swappers/MayachainSwapper/generated/generatedTradableAssetMap.json +0 -1
- package/dist/esm/swappers/NearIntentsSwapper/NearIntentsSwapper.js +2 -1
- package/dist/esm/swappers/NearIntentsSwapper/endpoints.js +13 -14
- package/dist/esm/swappers/NearIntentsSwapper/swapperApi/getTradeRate.js +1 -1
- package/dist/esm/swappers/NearIntentsSwapper/types.d.ts +4 -4
- package/dist/esm/swappers/NearIntentsSwapper/types.js +2 -0
- package/dist/esm/swappers/NearIntentsSwapper/utils/getNearIntentsStepData.js +29 -1
- 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/PortalsSwapper/utils/getPortalsStepData.js +34 -53
- package/dist/esm/swappers/PortalsSwapper/utils/getPortalsStepData.test.js +2 -2
- package/dist/esm/swappers/RelaySwapper/getTradeQuote/getTradeQuote.js +2 -3
- package/dist/esm/swappers/RelaySwapper/utils/getRelayStepData.js +9 -17
- 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/relayStatus.js +3 -3
- package/dist/esm/swappers/RelaySwapper/utils/types.d.ts +9 -4
- 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/generated/generatedThorLongtailTokens.json +1 -0
- package/dist/esm/swappers/ThorchainSwapper/generated/generatedTradableAssetMap.json +1 -0
- package/dist/esm/swappers/ThorchainSwapper/getTradeQuote/getTradeQuote.test.js +2 -2
- package/dist/esm/swappers/ThorchainSwapper/utils/getLongtailQuote.js +1 -1
- package/dist/esm/swappers/ZrxSwapper/getZrxTradeQuote/getZrxTradeQuote.js +28 -3
- 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/swappers/ZrxSwapper/utils/getZrxStepData.d.ts +3 -1
- package/dist/esm/swappers/ZrxSwapper/utils/getZrxStepData.js +31 -12
- package/dist/esm/types.d.ts +41 -12
- package/dist/esm/types.js +3 -0
- package/dist/esm/utils/aptos/constants.d.ts +2 -0
- package/dist/esm/utils/aptos/constants.js +4 -0
- package/dist/esm/utils/aptos/getAptosTransactionFees.d.ts +2 -0
- package/dist/esm/utils/aptos/getAptosTransactionFees.js +9 -0
- package/dist/esm/utils/aptos/getUnsignedAptosTransaction.d.ts +2 -0
- package/dist/esm/utils/aptos/getUnsignedAptosTransaction.js +12 -0
- package/dist/esm/utils/aptos/index.d.ts +3 -0
- package/dist/esm/utils/aptos/index.js +3 -0
- package/dist/esm/utils/evm/getEvmNetworkFeeCryptoBaseUnit.d.ts +19 -6
- package/dist/esm/utils/evm/getEvmNetworkFeeCryptoBaseUnit.js +42 -35
- package/dist/esm/utils/evm/getEvmNetworkFeeCryptoBaseUnit.test.d.ts +1 -0
- package/dist/esm/utils/evm/getEvmNetworkFeeCryptoBaseUnit.test.js +101 -0
- package/dist/esm/utils/evm/stateOverride.d.ts +3 -0
- package/dist/esm/utils/evm/stateOverride.js +8 -3
- package/dist/esm/utils/helpers.d.ts +1 -2
- package/dist/esm/utils/helpers.js +10 -33
- package/dist/esm/utils/helpers.test.js +7 -2
- package/dist/esm/utils/index.d.ts +3 -2
- package/dist/esm/utils/index.js +9 -26
- package/package.json +10 -11
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const getZrxNativeCheckDeadline: (data: string) => number | undefined;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { decodeFunctionData, parseAbi, toFunctionSelector } from 'viem';
|
|
2
|
+
const settlerAbi = parseAbi([
|
|
3
|
+
'function execute((address recipient, address buyToken, uint256 minAmountOut) slippage, bytes[] actions, bytes32 zid)',
|
|
4
|
+
'function NATIVE_CHECK(uint256 deadline, uint256 msgValue)',
|
|
5
|
+
]);
|
|
6
|
+
const NATIVE_CHECK_SELECTOR = toFunctionSelector('function NATIVE_CHECK(uint256,uint256)');
|
|
7
|
+
// Native sells carry no Permit2, but Settler reverts with SignatureExpired past any NATIVE_CHECK deadline
|
|
8
|
+
export const getZrxNativeCheckDeadline = (data) => {
|
|
9
|
+
try {
|
|
10
|
+
const { functionName, args } = decodeFunctionData({ abi: settlerAbi, data: data });
|
|
11
|
+
if (functionName !== 'execute')
|
|
12
|
+
return undefined;
|
|
13
|
+
const deadlines = args[1]
|
|
14
|
+
.filter(action => action.startsWith(NATIVE_CHECK_SELECTOR))
|
|
15
|
+
.map(action => decodeFunctionData({ abi: settlerAbi, data: action }))
|
|
16
|
+
.flatMap(decoded => decoded.functionName === 'NATIVE_CHECK' ? [Number(decoded.args[0])] : []);
|
|
17
|
+
return deadlines.length ? Math.min(...deadlines) : undefined;
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
};
|
|
@@ -5,10 +5,12 @@ export type GetZrxStepDataArgs = StepDataArgs<unknown, {
|
|
|
5
5
|
totalNetworkFee: string | null;
|
|
6
6
|
}, {
|
|
7
7
|
transaction: ZrxQuoteResponse['transaction'];
|
|
8
|
+
totalNetworkFee: string | null;
|
|
9
|
+
sellAmountCryptoBaseUnit: string;
|
|
8
10
|
permit2Eip712: NonNullable<ZrxQuoteResponse['permit2']>['eip712'] | undefined;
|
|
9
11
|
}>;
|
|
10
12
|
type ZrxRateStepData = {
|
|
11
|
-
networkFeeCryptoBaseUnit: string;
|
|
13
|
+
networkFeeCryptoBaseUnit: string | undefined;
|
|
12
14
|
};
|
|
13
15
|
type ZrxQuoteStepData = {
|
|
14
16
|
transactionData: TxBuildData;
|
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
import { fromChainId } from '@shapeshiftoss/caip';
|
|
2
|
-
import { bnOrZero } from '@shapeshiftoss/utils';
|
|
2
|
+
import { BigNumber, bnOrZero } from '@shapeshiftoss/utils';
|
|
3
3
|
import { Err, Ok } from '@sniptt/monads';
|
|
4
4
|
import { makeNetworkFeeEstimationFailedErr } from '../../../utils/index.js';
|
|
5
|
-
import { getEvmNetworkFeeCryptoBaseUnit } from '../../../utils/evm/index.js';
|
|
5
|
+
import { bufferGasLimit, getEvmNetworkFeeCryptoBaseUnit, isPositiveGasLimit, } from '../../../utils/evm/index.js';
|
|
6
6
|
export async function getZrxStepData(args) {
|
|
7
|
+
// 0x's total includes the L1 data fee on OP-stack chains, which pricing their gas limit would drop
|
|
7
8
|
if (args.type === 'rate') {
|
|
8
9
|
const stepData = {
|
|
9
|
-
networkFeeCryptoBaseUnit:
|
|
10
|
+
networkFeeCryptoBaseUnit: args.totalNetworkFee ?? undefined,
|
|
10
11
|
};
|
|
11
12
|
return Ok(stepData);
|
|
12
13
|
}
|
|
13
|
-
const { sellAsset, transaction, permit2Eip712, from, input, deps } = args;
|
|
14
|
+
const { sellAsset, sellAmountCryptoBaseUnit, transaction, totalNetworkFee, permit2Eip712, from, input, deps, } = args;
|
|
15
|
+
const adapter = deps.assertGetEvmChainAdapter(sellAsset.chainId);
|
|
16
|
+
const supportsEIP1559 = 'supportsEIP1559' in input ? input.supportsEIP1559 : false;
|
|
14
17
|
const transactionData = {
|
|
15
18
|
type: 'evm',
|
|
16
19
|
chainId: Number(fromChainId(sellAsset.chainId).chainReference),
|
|
17
20
|
to: transaction.to,
|
|
18
21
|
data: transaction.data,
|
|
19
22
|
value: transaction.value,
|
|
20
|
-
// 0x simulate with a valid permit2 signature, which can't be reproduced before signing, so trust their gas limit
|
|
21
|
-
gasLimit: transaction.gas || undefined,
|
|
22
23
|
...(permit2Eip712 && {
|
|
23
24
|
signatureRequired: {
|
|
24
25
|
type: 'permit2',
|
|
@@ -27,12 +28,30 @@ export async function getZrxStepData(args) {
|
|
|
27
28
|
}),
|
|
28
29
|
};
|
|
29
30
|
try {
|
|
30
|
-
const networkFeeCryptoBaseUnit = await
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
const networkFeeCryptoBaseUnit = await (async () => {
|
|
32
|
+
// Permit2 calldata needs the signature, so it can't be simulated before signing
|
|
33
|
+
if (permit2Eip712) {
|
|
34
|
+
if (!isPositiveGasLimit(transaction.gas))
|
|
35
|
+
throw new Error('missing 0x gas limit');
|
|
36
|
+
transactionData.gasLimit = bufferGasLimit(transaction.gas);
|
|
37
|
+
// 0x's total is their gas cost plus the L1 data fee on OP-stack chains
|
|
38
|
+
const l1FeeCryptoBaseUnit = BigNumber.max(bnOrZero(totalNetworkFee).minus(bnOrZero(transaction.gas).times(transaction.gasPrice)), 0);
|
|
39
|
+
const networkFeeCryptoBaseUnit = await getEvmNetworkFeeCryptoBaseUnit({
|
|
40
|
+
adapter,
|
|
41
|
+
supportsEIP1559,
|
|
42
|
+
gasLimit: transactionData.gasLimit,
|
|
43
|
+
});
|
|
44
|
+
return bnOrZero(networkFeeCryptoBaseUnit).plus(l1FeeCryptoBaseUnit).toFixed(0);
|
|
45
|
+
}
|
|
46
|
+
return getEvmNetworkFeeCryptoBaseUnit({
|
|
47
|
+
adapter,
|
|
48
|
+
transactionData,
|
|
49
|
+
from,
|
|
50
|
+
supportsEIP1559,
|
|
51
|
+
stateOverride: { sellAsset, sellAmountCryptoBaseUnit },
|
|
52
|
+
providerGasLimit: transaction.gas,
|
|
53
|
+
});
|
|
54
|
+
})();
|
|
36
55
|
const stepData = { transactionData, networkFeeCryptoBaseUnit };
|
|
37
56
|
return Ok(stepData);
|
|
38
57
|
}
|
package/dist/esm/types.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { AccountId, AssetId, ChainId } from '@shapeshiftoss/caip';
|
|
2
|
-
import type { ChainAdapter, CosmosSdkChainAdapter, EvmChainAdapter, near, SignTx, solana, starknet, sui, ton, tron, UtxoChainAdapter } from '@shapeshiftoss/chain-adapters';
|
|
3
|
-
import type { HDWallet, SolanaSignTx, StarknetSignTx, SuiSignTx } from '@shapeshiftoss/hdwallet-core';
|
|
4
|
-
import type { Asset, AssetsByIdPartial, CosmosSdkChainId, EvmChainId, KnownChainIds, NearChainId, OrderCreation, PartialRecord, SolanaChainId, StarknetChainId, SuiChainId, TonChainId, TronChainId, UtxoAccountType, UtxoChainId } from '@shapeshiftoss/types';
|
|
2
|
+
import type { aptos, ChainAdapter, CosmosSdkChainAdapter, EvmChainAdapter, near, SignTx, solana, starknet, sui, ton, tron, UtxoChainAdapter } from '@shapeshiftoss/chain-adapters';
|
|
3
|
+
import type { AptosSignTx, HDWallet, SolanaSignTx, StarknetSignTx, SuiSignTx } from '@shapeshiftoss/hdwallet-core';
|
|
4
|
+
import type { AptosChainId, Asset, AssetsByIdPartial, CosmosSdkChainId, EvmChainId, KnownChainIds, NearChainId, OrderCreation, PartialRecord, SolanaChainId, StarknetChainId, SuiChainId, TonChainId, TronChainId, UtxoAccountType, UtxoChainId } from '@shapeshiftoss/types';
|
|
5
5
|
import type { TxStatus } from '@shapeshiftoss/unchained-client';
|
|
6
6
|
import type { Result } from '@sniptt/monads';
|
|
7
7
|
import type { TransactionInstruction } from '@solana/web3.js';
|
|
@@ -43,6 +43,8 @@ export type SwapperConfig = {
|
|
|
43
43
|
VITE_COWSWAP_BASE_URL: string;
|
|
44
44
|
VITE_PORTALS_BASE_URL: string;
|
|
45
45
|
VITE_ZRX_BASE_URL: string;
|
|
46
|
+
VITE_FYND_BASE_URL: string;
|
|
47
|
+
VITE_KYBER_BASE_URL: string;
|
|
46
48
|
VITE_CHAINFLIP_API_KEY: string;
|
|
47
49
|
VITE_CHAINFLIP_API_URL: string;
|
|
48
50
|
VITE_FEATURE_CHAINFLIP_SWAP_DCA: boolean;
|
|
@@ -56,6 +58,7 @@ export type SwapperConfig = {
|
|
|
56
58
|
VITE_ACROSS_API_KEY: string;
|
|
57
59
|
VITE_DEBRIDGE_API_URL: string;
|
|
58
60
|
VITE_BOB_GATEWAY_API_KEY: string;
|
|
61
|
+
VITE_SYMBIOSIS_API_URL: string;
|
|
59
62
|
};
|
|
60
63
|
export declare enum SwapperName {
|
|
61
64
|
Thorchain = "THORChain",
|
|
@@ -76,7 +79,10 @@ export declare enum SwapperName {
|
|
|
76
79
|
Stonfi = "STON.fi",
|
|
77
80
|
Across = "Across",
|
|
78
81
|
Debridge = "deBridge",
|
|
79
|
-
BobGateway = "BOB Gateway"
|
|
82
|
+
BobGateway = "BOB Gateway",
|
|
83
|
+
Symbiosis = "Symbiosis",
|
|
84
|
+
Fynd = "Fynd",
|
|
85
|
+
KyberSwap = "KyberSwap"
|
|
80
86
|
}
|
|
81
87
|
export type SwapSource = SwapperName | `${SwapperName} • ${string}`;
|
|
82
88
|
export type SwapErrorRight = {
|
|
@@ -178,6 +184,12 @@ export type GetTonTradeQuoteInput = CommonTradeQuoteInput & {
|
|
|
178
184
|
export type GetTonTradeRateInput = CommonTradeRateInput & {
|
|
179
185
|
chainId: TonChainId;
|
|
180
186
|
};
|
|
187
|
+
export type GetAptosTradeQuoteInput = CommonTradeQuoteInput & {
|
|
188
|
+
chainId: AptosChainId;
|
|
189
|
+
};
|
|
190
|
+
export type GetAptosTradeRateInput = CommonTradeRateInput & {
|
|
191
|
+
chainId: AptosChainId;
|
|
192
|
+
};
|
|
181
193
|
export type GetSolanaTradeQuoteInput = CommonTradeQuoteInput & {
|
|
182
194
|
chainId: SolanaChainId;
|
|
183
195
|
};
|
|
@@ -209,8 +221,8 @@ export type GetUtxoTradeRateInput = CommonTradeRateInput & {
|
|
|
209
221
|
xpub: string | undefined;
|
|
210
222
|
};
|
|
211
223
|
export type GetUtxoTradeQuoteInput = GetUtxoTradeQuoteWithWallet;
|
|
212
|
-
export type GetTradeQuoteInput = GetUtxoTradeQuoteInput | GetEvmTradeQuoteInput | GetCosmosSdkTradeQuoteInput | GetTronTradeQuoteInput | GetNearTradeQuoteInput | GetTonTradeQuoteInput | GetSolanaTradeQuoteInput | GetStarknetTradeQuoteInput | GetSuiTradeQuoteInput;
|
|
213
|
-
export type GetTradeRateInput = GetEvmTradeRateInput | GetCosmosSdkTradeRateInput | GetUtxoTradeRateInput | GetTronTradeRateInput | GetNearTradeRateInput | GetTonTradeRateInput | GetSolanaTradeRateInput | GetStarknetTradeRateInput | GetSuiTradeRateInput;
|
|
224
|
+
export type GetTradeQuoteInput = GetUtxoTradeQuoteInput | GetEvmTradeQuoteInput | GetCosmosSdkTradeQuoteInput | GetTronTradeQuoteInput | GetNearTradeQuoteInput | GetTonTradeQuoteInput | GetSolanaTradeQuoteInput | GetStarknetTradeQuoteInput | GetSuiTradeQuoteInput | GetAptosTradeQuoteInput;
|
|
225
|
+
export type GetTradeRateInput = GetEvmTradeRateInput | GetCosmosSdkTradeRateInput | GetUtxoTradeRateInput | GetTronTradeRateInput | GetNearTradeRateInput | GetTonTradeRateInput | GetSolanaTradeRateInput | GetStarknetTradeRateInput | GetSuiTradeRateInput | GetAptosTradeRateInput;
|
|
214
226
|
export type WithExactBuyAmount<T extends {
|
|
215
227
|
sellAmountIncludingProtocolFeesCryptoBaseUnit: string;
|
|
216
228
|
}> = T extends unknown ? Omit<T, 'sellAmountIncludingProtocolFeesCryptoBaseUnit'> & {
|
|
@@ -265,12 +277,15 @@ export type StarknetSwapperDeps = {
|
|
|
265
277
|
export type TonSwapperDeps = {
|
|
266
278
|
assertGetTonChainAdapter: (chainId: ChainId) => ton.ChainAdapter;
|
|
267
279
|
};
|
|
280
|
+
export type AptosSwapperDeps = {
|
|
281
|
+
assertGetAptosChainAdapter: (chainId: ChainId) => aptos.ChainAdapter;
|
|
282
|
+
};
|
|
268
283
|
export type SwapperDeps = {
|
|
269
284
|
assetsById: AssetsByIdPartial;
|
|
270
285
|
config: SwapperConfig;
|
|
271
286
|
mixPanel: Mixpanel | undefined;
|
|
272
287
|
assertGetChainAdapter: (chainId: ChainId) => ChainAdapter<KnownChainIds>;
|
|
273
|
-
} & EvmSwapperDeps & UtxoSwapperDeps & CosmosSdkSwapperDeps & SolanaSwapperDeps & TronSwapperDeps & SuiSwapperDeps & NearSwapperDeps & StarknetSwapperDeps & TonSwapperDeps;
|
|
288
|
+
} & EvmSwapperDeps & UtxoSwapperDeps & CosmosSdkSwapperDeps & SolanaSwapperDeps & TronSwapperDeps & SuiSwapperDeps & NearSwapperDeps & StarknetSwapperDeps & TonSwapperDeps & AptosSwapperDeps;
|
|
274
289
|
export type AffiliateFee = {
|
|
275
290
|
assetId: AssetId;
|
|
276
291
|
amountCryptoBaseUnit: string;
|
|
@@ -324,6 +339,11 @@ export type TxBuildData = {
|
|
|
324
339
|
value: string;
|
|
325
340
|
data?: string;
|
|
326
341
|
memo?: string;
|
|
342
|
+
} | {
|
|
343
|
+
type: 'aptos';
|
|
344
|
+
payload: string;
|
|
345
|
+
gasUnitPrice: string;
|
|
346
|
+
maxGasAmount: string;
|
|
327
347
|
} | {
|
|
328
348
|
type: 'cowswap';
|
|
329
349
|
chainId: ChainId;
|
|
@@ -343,9 +363,6 @@ export type TradeStepCommon = {
|
|
|
343
363
|
estimatedExecutionTimeMs: number | undefined;
|
|
344
364
|
swapperMetadata?: SwapperMetadata;
|
|
345
365
|
stonfiTransactionData?: StonfiTransactionData;
|
|
346
|
-
chainflipSpecific?: {
|
|
347
|
-
depositAddress?: string;
|
|
348
|
-
};
|
|
349
366
|
affiliateFee?: AffiliateFee;
|
|
350
367
|
};
|
|
351
368
|
export type TradeQuoteStep = TradeStepCommon & {
|
|
@@ -452,7 +469,7 @@ export type TradeQuote = TradeQuoteBase & {
|
|
|
452
469
|
} & {
|
|
453
470
|
quoteOrRate: 'quote';
|
|
454
471
|
receiveAddress: string;
|
|
455
|
-
deadline
|
|
472
|
+
deadline?: number;
|
|
456
473
|
};
|
|
457
474
|
export type MultiHopTradeQuote = TradeQuote & {
|
|
458
475
|
steps: MultiHopTradeQuoteSteps;
|
|
@@ -514,6 +531,9 @@ export type StarknetTransactionExecutionProps = {
|
|
|
514
531
|
export type TonTransactionExecutionProps = {
|
|
515
532
|
signAndBroadcastTransaction: (txToSign: ton.TonSignTx) => Promise<string>;
|
|
516
533
|
};
|
|
534
|
+
export type AptosTransactionExecutionProps = {
|
|
535
|
+
signAndBroadcastTransaction: (txToSign: AptosSignTx) => Promise<string>;
|
|
536
|
+
};
|
|
517
537
|
type EvmAccountMetadata = {
|
|
518
538
|
from: string;
|
|
519
539
|
};
|
|
@@ -531,6 +551,7 @@ type NearAccountMetadata = {
|
|
|
531
551
|
};
|
|
532
552
|
type StarknetAccountMetadata = {
|
|
533
553
|
from: string;
|
|
554
|
+
callsOnly?: boolean;
|
|
534
555
|
};
|
|
535
556
|
type UtxoAccountMetadata = {
|
|
536
557
|
senderAddress: string;
|
|
@@ -560,6 +581,10 @@ type TonAccountMetadata = {
|
|
|
560
581
|
from: string;
|
|
561
582
|
};
|
|
562
583
|
export type GetUnsignedTonTransactionArgs = CommonGetUnsignedTransactionArgs & TonAccountMetadata & TonSwapperDeps;
|
|
584
|
+
type AptosAccountMetadata = {
|
|
585
|
+
from: string;
|
|
586
|
+
};
|
|
587
|
+
export type GetUnsignedAptosTransactionArgs = CommonGetUnsignedTransactionArgs & AptosAccountMetadata & AptosSwapperDeps;
|
|
563
588
|
export type GetUnsignedEvmMessageArgs = CommonGetUnsignedTransactionArgs & EvmAccountMetadata & Omit<EvmSwapperDeps, 'fetchIsSmartContractAddressQuery'>;
|
|
564
589
|
export type GetUnsignedSolanaMessageArgs = CommonGetUnsignedTransactionArgs;
|
|
565
590
|
export type GetUnsignedUtxoTransactionArgs = CommonGetUnsignedTransactionArgs & UtxoAccountMetadata & UtxoSwapperDeps;
|
|
@@ -571,7 +596,7 @@ export type CheckTradeStatusInput = {
|
|
|
571
596
|
stepIndex: SupportedTradeQuoteStepIndex;
|
|
572
597
|
config: SwapperConfig;
|
|
573
598
|
swap: Swap | undefined;
|
|
574
|
-
} & EvmSwapperDeps & UtxoSwapperDeps & CosmosSdkSwapperDeps & SolanaSwapperDeps & TronSwapperDeps & SuiSwapperDeps & NearSwapperDeps & StarknetSwapperDeps & TonSwapperDeps;
|
|
599
|
+
} & EvmSwapperDeps & UtxoSwapperDeps & CosmosSdkSwapperDeps & SolanaSwapperDeps & TronSwapperDeps & SuiSwapperDeps & NearSwapperDeps & StarknetSwapperDeps & TonSwapperDeps & AptosSwapperDeps;
|
|
575
600
|
export type TradeStatus = {
|
|
576
601
|
status: TxStatus;
|
|
577
602
|
buyTxHash: string | undefined;
|
|
@@ -597,6 +622,7 @@ export type Swapper = {
|
|
|
597
622
|
executeNearTransaction?: (txToSign: near.NearSignTx, callbacks: NearTransactionExecutionProps) => Promise<string>;
|
|
598
623
|
executeStarknetTransaction?: (txToSign: StarknetSignTx, callbacks: StarknetTransactionExecutionProps) => Promise<string>;
|
|
599
624
|
executeTonTransaction?: (txToSign: ton.TonSignTx, callbacks: TonTransactionExecutionProps) => Promise<string>;
|
|
625
|
+
executeAptosTransaction?: (txToSign: AptosSignTx, callbacks: AptosTransactionExecutionProps) => Promise<string>;
|
|
600
626
|
};
|
|
601
627
|
export type SwapperApi = {
|
|
602
628
|
checkTradeStatus: (input: CheckTradeStatusInput) => Promise<TradeStatus>;
|
|
@@ -615,6 +641,7 @@ export type SwapperApi = {
|
|
|
615
641
|
getUnsignedNearTransaction?: (input: GetUnsignedNearTransactionArgs) => Promise<near.NearSignTx>;
|
|
616
642
|
getUnsignedStarknetTransaction?: (input: GetUnsignedStarknetTransactionArgs) => Promise<StarknetSignTx>;
|
|
617
643
|
getUnsignedTonTransaction?: (input: GetUnsignedTonTransactionArgs) => Promise<ton.TonSignTx>;
|
|
644
|
+
getUnsignedAptosTransaction?: (input: GetUnsignedAptosTransactionArgs) => Promise<AptosSignTx>;
|
|
618
645
|
getEvmTransactionFees?: (input: GetUnsignedEvmTransactionArgs) => Promise<string>;
|
|
619
646
|
getSolanaTransactionFees?: (input: GetUnsignedSolanaTransactionArgs) => Promise<string>;
|
|
620
647
|
getSuiTransactionFees?: (input: GetUnsignedSuiTransactionArgs) => Promise<string>;
|
|
@@ -624,6 +651,7 @@ export type SwapperApi = {
|
|
|
624
651
|
getNearTransactionFees?: (input: GetUnsignedNearTransactionArgs) => Promise<string>;
|
|
625
652
|
getStarknetTransactionFees?: (input: GetUnsignedStarknetTransactionArgs) => Promise<string>;
|
|
626
653
|
getTonTransactionFees?: (input: GetUnsignedTonTransactionArgs) => Promise<string>;
|
|
654
|
+
getAptosTransactionFees?: (input: GetUnsignedAptosTransactionArgs) => Promise<string>;
|
|
627
655
|
};
|
|
628
656
|
export type QuoteResult = Result<TradeQuote[], SwapErrorRight> & {
|
|
629
657
|
swapperName: SwapperName;
|
|
@@ -652,6 +680,7 @@ export type SuiTransactionExecutionInput = CommonTradeExecutionInput & SuiTransa
|
|
|
652
680
|
export type NearTransactionExecutionInput = CommonTradeExecutionInput & NearTransactionExecutionProps & NearAccountMetadata;
|
|
653
681
|
export type StarknetTransactionExecutionInput = CommonTradeExecutionInput & StarknetTransactionExecutionProps & StarknetAccountMetadata;
|
|
654
682
|
export type TonTransactionExecutionInput = CommonTradeExecutionInput & TonTransactionExecutionProps & TonAccountMetadata;
|
|
683
|
+
export type AptosTransactionExecutionInput = CommonTradeExecutionInput & AptosTransactionExecutionProps & AptosAccountMetadata;
|
|
655
684
|
export declare enum TradeExecutionEvent {
|
|
656
685
|
SellTxHash = "sellTxHash",
|
|
657
686
|
Status = "status",
|
package/dist/esm/types.js
CHANGED
|
@@ -19,6 +19,9 @@ export var SwapperName;
|
|
|
19
19
|
SwapperName["Across"] = "Across";
|
|
20
20
|
SwapperName["Debridge"] = "deBridge";
|
|
21
21
|
SwapperName["BobGateway"] = "BOB Gateway";
|
|
22
|
+
SwapperName["Symbiosis"] = "Symbiosis";
|
|
23
|
+
SwapperName["Fynd"] = "Fynd";
|
|
24
|
+
SwapperName["KyberSwap"] = "KyberSwap";
|
|
22
25
|
})(SwapperName || (SwapperName = {}));
|
|
23
26
|
export var TradeQuoteError;
|
|
24
27
|
(function (TradeQuoteError) {
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { getExecutableTradeStep, isExecutableTradeQuote } from '../../utils/index.js';
|
|
2
|
+
export const getAptosTransactionFees = ({ tradeQuote, stepIndex, }) => {
|
|
3
|
+
if (!isExecutableTradeQuote(tradeQuote))
|
|
4
|
+
throw new Error('Unable to execute a trade rate quote');
|
|
5
|
+
const step = getExecutableTradeStep(tradeQuote, stepIndex);
|
|
6
|
+
if (!step.feeData.networkFeeCryptoBaseUnit)
|
|
7
|
+
throw new Error('Missing network fee in quote');
|
|
8
|
+
return Promise.resolve(step.feeData.networkFeeCryptoBaseUnit);
|
|
9
|
+
};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import type { GetUnsignedAptosTransactionArgs } from '../../types.js';
|
|
2
|
+
export declare const getUnsignedAptosTransaction: ({ stepIndex, tradeQuote, from, assertGetAptosChainAdapter, }: GetUnsignedAptosTransactionArgs) => Promise<import("@shapeshiftoss/hdwallet-core").AptosSignTx>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { getExecutableTradeStep, isExecutableTradeQuote } from '../../utils/index.js';
|
|
2
|
+
export const getUnsignedAptosTransaction = ({ stepIndex, tradeQuote, from, assertGetAptosChainAdapter, }) => {
|
|
3
|
+
if (!isExecutableTradeQuote(tradeQuote))
|
|
4
|
+
throw new Error('Unable to execute a trade rate');
|
|
5
|
+
const step = getExecutableTradeStep(tradeQuote, stepIndex);
|
|
6
|
+
const { accountNumber, sellAsset, transactionData } = step;
|
|
7
|
+
if (transactionData?.type !== 'aptos')
|
|
8
|
+
throw new Error('Missing aptos transactionData');
|
|
9
|
+
const adapter = assertGetAptosChainAdapter(sellAsset.chainId);
|
|
10
|
+
const { payload, gasUnitPrice, maxGasAmount } = transactionData;
|
|
11
|
+
return adapter.buildCustomApiTx({ from, accountNumber, payload, gasUnitPrice, maxGasAmount });
|
|
12
|
+
};
|
|
@@ -1,22 +1,35 @@
|
|
|
1
1
|
import type { EvmChainAdapter } from '@shapeshiftoss/chain-adapters';
|
|
2
2
|
import type { Asset } from '@shapeshiftoss/types';
|
|
3
3
|
import type { TxBuildData } from '../../types.js';
|
|
4
|
-
|
|
4
|
+
export declare const EVM_GAS_LIMIT_BUFFER = 1.2;
|
|
5
|
+
export declare const bufferGasLimit: (gasLimit: string) => string;
|
|
6
|
+
export declare const isPositiveGasLimit: (gasLimit: string | null | undefined) => gasLimit is string;
|
|
7
|
+
type EvmFeeArgs = {
|
|
5
8
|
adapter: EvmChainAdapter;
|
|
6
9
|
supportsEIP1559: boolean;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
} | {
|
|
10
|
+
};
|
|
11
|
+
type EvmSimulationArgs = {
|
|
10
12
|
transactionData: Extract<TxBuildData, {
|
|
11
13
|
type: 'evm';
|
|
12
14
|
}>;
|
|
13
15
|
from: string;
|
|
14
|
-
gasLimitBuffer?: number;
|
|
15
16
|
stateOverride?: {
|
|
16
17
|
sellAsset: Asset;
|
|
17
18
|
sellAmountCryptoBaseUnit: string;
|
|
18
19
|
spenderAddress?: string;
|
|
19
20
|
};
|
|
20
|
-
}
|
|
21
|
+
};
|
|
22
|
+
type FixedGasLimitArgs = {
|
|
23
|
+
gasLimit: string;
|
|
24
|
+
};
|
|
25
|
+
type SimulatedGasLimitArgs = EvmSimulationArgs & {
|
|
26
|
+
providerGasLimit?: string | null;
|
|
27
|
+
};
|
|
28
|
+
type GetEvmNetworkFeeCryptoBaseUnitArgs = EvmFeeArgs & (FixedGasLimitArgs | SimulatedGasLimitArgs);
|
|
21
29
|
export declare const getEvmNetworkFeeCryptoBaseUnit: (args: GetEvmNetworkFeeCryptoBaseUnitArgs) => Promise<string>;
|
|
30
|
+
type GetEvmRateNetworkFeeCryptoBaseUnitArgs = EvmFeeArgs & {
|
|
31
|
+
providerGasLimit: string | null | undefined;
|
|
32
|
+
simulation?: EvmSimulationArgs;
|
|
33
|
+
};
|
|
34
|
+
export declare const getEvmRateNetworkFeeCryptoBaseUnit: ({ providerGasLimit, simulation, ...feeArgs }: GetEvmRateNetworkFeeCryptoBaseUnitArgs) => Promise<string>;
|
|
22
35
|
export {};
|
|
@@ -1,48 +1,55 @@
|
|
|
1
1
|
import { evm } from '@shapeshiftoss/chain-adapters';
|
|
2
2
|
import { bnOrZero } from '@shapeshiftoss/utils';
|
|
3
|
-
import { estimateGasWithStateOverride, getMinimalStateOverride, withTimeout } from './stateOverride.js';
|
|
3
|
+
import { estimateGasWithStateOverride, EstimationTimeoutError, getMinimalStateOverride, withTimeout, } from './stateOverride.js';
|
|
4
|
+
export const EVM_GAS_LIMIT_BUFFER = 1.2;
|
|
5
|
+
export const bufferGasLimit = (gasLimit) => bnOrZero(gasLimit).times(EVM_GAS_LIMIT_BUFFER).toFixed(0);
|
|
6
|
+
export const isPositiveGasLimit = (gasLimit) => bnOrZero(gasLimit).gt(0);
|
|
7
|
+
const priceGasLimit = async ({ adapter, supportsEIP1559 }, gasLimit) => {
|
|
8
|
+
const { average: gasPrices } = await adapter.getGasFeeData();
|
|
9
|
+
return evm.calcNetworkFeeCryptoBaseUnit({ ...gasPrices, supportsEIP1559, gasLimit });
|
|
10
|
+
};
|
|
11
|
+
// Prices the buffered limit, since the signer must hold enough to cover the full limit
|
|
4
12
|
export const getEvmNetworkFeeCryptoBaseUnit = async (args) => {
|
|
5
13
|
const { adapter, supportsEIP1559 } = args;
|
|
6
|
-
// Price a provider gas limit with fresh gas prices - no on chain estimation
|
|
7
|
-
const priceProviderGasLimit = async (gasLimit) => {
|
|
8
|
-
const { average: gasPrices } = await adapter.getGasFeeData();
|
|
9
|
-
return evm.calcNetworkFeeCryptoBaseUnit({ ...gasPrices, supportsEIP1559, gasLimit });
|
|
10
|
-
};
|
|
11
|
-
// Rate network fee: the caller passed a provider gas limit directly
|
|
12
14
|
if (!('transactionData' in args))
|
|
13
|
-
return
|
|
14
|
-
const { transactionData, from,
|
|
15
|
-
// Executable quote: the provider supplied a gas limit on the tx data, price it as-is
|
|
16
|
-
const providerGasLimit = transactionData.gasLimit;
|
|
17
|
-
if (providerGasLimit && bnOrZero(providerGasLimit).gt(0)) {
|
|
18
|
-
return priceProviderGasLimit(providerGasLimit);
|
|
19
|
-
}
|
|
15
|
+
return priceGasLimit(args, args.gasLimit);
|
|
16
|
+
const { transactionData, from, providerGasLimit } = args;
|
|
20
17
|
const { to, data, value } = transactionData;
|
|
21
18
|
if (args.stateOverride) {
|
|
22
19
|
const { sellAsset, sellAmountCryptoBaseUnit, spenderAddress } = args.stateOverride;
|
|
23
|
-
|
|
24
|
-
//
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
spenderAddress,
|
|
31
|
-
value,
|
|
32
|
-
};
|
|
33
|
-
const stateOverride = await getMinimalStateOverride(overrideArgs);
|
|
34
|
-
if (!stateOverride)
|
|
20
|
+
const overrideArgs = { sellAsset, sellAmountCryptoBaseUnit, from, spenderAddress, value };
|
|
21
|
+
// null when the override can't be built (an undiscoverable storage slot or a failed read),
|
|
22
|
+
// undefined when nothing needs overriding or the simulation timed out
|
|
23
|
+
const overriddenGasLimit = await withTimeout(getMinimalStateOverride(overrideArgs).then(stateOverride => stateOverride &&
|
|
24
|
+
estimateGasWithStateOverride({ ...overrideArgs, to, data, stateOverride }), () => null)).catch(error => {
|
|
25
|
+
// The missing state makes a plain estimate revert too, so only a timeout falls through to it
|
|
26
|
+
if (error instanceof EstimationTimeoutError)
|
|
35
27
|
return undefined;
|
|
36
|
-
|
|
37
|
-
})
|
|
28
|
+
throw error;
|
|
29
|
+
});
|
|
30
|
+
if (overriddenGasLimit === null && isPositiveGasLimit(providerGasLimit)) {
|
|
31
|
+
transactionData.gasLimit = bufferGasLimit(providerGasLimit);
|
|
32
|
+
return priceGasLimit(args, transactionData.gasLimit);
|
|
33
|
+
}
|
|
38
34
|
if (overriddenGasLimit) {
|
|
39
|
-
transactionData.gasLimit =
|
|
40
|
-
return
|
|
35
|
+
transactionData.gasLimit = bufferGasLimit(overriddenGasLimit);
|
|
36
|
+
return priceGasLimit(args, transactionData.gasLimit);
|
|
41
37
|
}
|
|
42
38
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
39
|
+
const { average: { chainSpecific: feeData }, } = await adapter.getFeeData({ to, value, chainSpecific: { from, data } });
|
|
40
|
+
transactionData.gasLimit = bufferGasLimit(feeData.gasLimit);
|
|
41
|
+
return evm.calcNetworkFeeCryptoBaseUnit({
|
|
42
|
+
...feeData,
|
|
43
|
+
supportsEIP1559,
|
|
44
|
+
gasLimit: transactionData.gasLimit,
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
// Rates price a provider's limit as given (it carries its own margin) and simulate without one
|
|
48
|
+
export const getEvmRateNetworkFeeCryptoBaseUnit = ({ providerGasLimit, simulation, ...feeArgs }) => {
|
|
49
|
+
if (isPositiveGasLimit(providerGasLimit)) {
|
|
50
|
+
return priceGasLimit(feeArgs, providerGasLimit);
|
|
51
|
+
}
|
|
52
|
+
if (simulation)
|
|
53
|
+
return getEvmNetworkFeeCryptoBaseUnit({ ...feeArgs, ...simulation });
|
|
54
|
+
return Promise.reject(new Error('no gas limit to price'));
|
|
48
55
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
+
import { getEvmNetworkFeeCryptoBaseUnit, getEvmRateNetworkFeeCryptoBaseUnit, } from './getEvmNetworkFeeCryptoBaseUnit.js';
|
|
3
|
+
import { estimateGasWithStateOverride, EstimationTimeoutError, getMinimalStateOverride, } from './stateOverride.js';
|
|
4
|
+
vi.mock('./stateOverride', async (importActual) => ({
|
|
5
|
+
...(await importActual()),
|
|
6
|
+
getMinimalStateOverride: vi.fn(),
|
|
7
|
+
estimateGasWithStateOverride: vi.fn(),
|
|
8
|
+
}));
|
|
9
|
+
const gasFees = { gasPrice: '10' };
|
|
10
|
+
const makeTransactionData = () => ({ type: 'evm', to: '0x1', data: '0x', value: '0' });
|
|
11
|
+
const makeArgs = (adapter) => ({
|
|
12
|
+
adapter: adapter,
|
|
13
|
+
supportsEIP1559: false,
|
|
14
|
+
transactionData: makeTransactionData(),
|
|
15
|
+
from: '0x0000000000000000000000000000000000000001',
|
|
16
|
+
stateOverride: { sellAsset: {}, sellAmountCryptoBaseUnit: '1' },
|
|
17
|
+
});
|
|
18
|
+
describe('getEvmNetworkFeeCryptoBaseUnit state override', () => {
|
|
19
|
+
beforeEach(() => {
|
|
20
|
+
vi.mocked(getMinimalStateOverride).mockReset();
|
|
21
|
+
vi.mocked(estimateGasWithStateOverride).mockReset();
|
|
22
|
+
});
|
|
23
|
+
it('buffers the override gas limit onto the tx and prices the buffered limit', async () => {
|
|
24
|
+
vi.mocked(getMinimalStateOverride).mockResolvedValue([]);
|
|
25
|
+
vi.mocked(estimateGasWithStateOverride).mockResolvedValue('200');
|
|
26
|
+
const args = makeArgs({ getGasFeeData: vi.fn().mockResolvedValue({ average: gasFees }) });
|
|
27
|
+
await expect(getEvmNetworkFeeCryptoBaseUnit(args)).resolves.toBe('2400');
|
|
28
|
+
expect(args.transactionData.gasLimit).toBe('240');
|
|
29
|
+
});
|
|
30
|
+
it('falls back to plain estimation when the override simulation times out', async () => {
|
|
31
|
+
vi.mocked(getMinimalStateOverride).mockResolvedValue([]);
|
|
32
|
+
vi.mocked(estimateGasWithStateOverride).mockRejectedValue(new EstimationTimeoutError());
|
|
33
|
+
const getFeeData = vi.fn().mockResolvedValue({
|
|
34
|
+
average: { chainSpecific: { gasLimit: '100', ...gasFees } },
|
|
35
|
+
});
|
|
36
|
+
const args = makeArgs({
|
|
37
|
+
getGasFeeData: vi.fn().mockResolvedValue({ average: gasFees }),
|
|
38
|
+
getFeeData,
|
|
39
|
+
});
|
|
40
|
+
await expect(getEvmNetworkFeeCryptoBaseUnit(args)).resolves.toBe('1200');
|
|
41
|
+
expect(args.transactionData.gasLimit).toBe('120');
|
|
42
|
+
});
|
|
43
|
+
it('estimates over a provider gas limit already set on the tx', async () => {
|
|
44
|
+
vi.mocked(getMinimalStateOverride).mockResolvedValue([]);
|
|
45
|
+
vi.mocked(estimateGasWithStateOverride).mockResolvedValue('200');
|
|
46
|
+
const args = makeArgs({ getGasFeeData: vi.fn().mockResolvedValue({ average: gasFees }) });
|
|
47
|
+
args.transactionData.gasLimit = '150';
|
|
48
|
+
await expect(getEvmNetworkFeeCryptoBaseUnit(args)).resolves.toBe('2400');
|
|
49
|
+
expect(args.transactionData.gasLimit).toBe('240');
|
|
50
|
+
});
|
|
51
|
+
it('signs the buffered provider limit when the needed override cannot be built', async () => {
|
|
52
|
+
vi.mocked(getMinimalStateOverride).mockRejectedValue(new Error('Unable to locate allowance slot'));
|
|
53
|
+
const args = {
|
|
54
|
+
...makeArgs({ getGasFeeData: vi.fn().mockResolvedValue({ average: gasFees }) }),
|
|
55
|
+
providerGasLimit: '300',
|
|
56
|
+
};
|
|
57
|
+
await expect(getEvmNetworkFeeCryptoBaseUnit(args)).resolves.toBe('3600');
|
|
58
|
+
expect(args.transactionData.gasLimit).toBe('360');
|
|
59
|
+
expect(estimateGasWithStateOverride).not.toHaveBeenCalled();
|
|
60
|
+
});
|
|
61
|
+
it('fails rather than trusting the provider limit when the overridden simulation reverts', async () => {
|
|
62
|
+
vi.mocked(getMinimalStateOverride).mockResolvedValue([]);
|
|
63
|
+
vi.mocked(estimateGasWithStateOverride).mockRejectedValue(new Error('execution reverted'));
|
|
64
|
+
const getFeeData = vi.fn();
|
|
65
|
+
const args = {
|
|
66
|
+
...makeArgs({ getGasFeeData: vi.fn().mockResolvedValue({ average: gasFees }), getFeeData }),
|
|
67
|
+
providerGasLimit: '300',
|
|
68
|
+
};
|
|
69
|
+
await expect(getEvmNetworkFeeCryptoBaseUnit(args)).rejects.toThrow('execution reverted');
|
|
70
|
+
expect(getFeeData).not.toHaveBeenCalled();
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
describe('getEvmRateNetworkFeeCryptoBaseUnit', () => {
|
|
74
|
+
beforeEach(() => {
|
|
75
|
+
vi.mocked(getMinimalStateOverride).mockReset();
|
|
76
|
+
vi.mocked(estimateGasWithStateOverride).mockReset();
|
|
77
|
+
});
|
|
78
|
+
it('prices the provider limit as given without simulating', async () => {
|
|
79
|
+
const { transactionData, from, stateOverride, ...feeArgs } = makeArgs({
|
|
80
|
+
getGasFeeData: vi.fn().mockResolvedValue({ average: gasFees }),
|
|
81
|
+
});
|
|
82
|
+
await expect(getEvmRateNetworkFeeCryptoBaseUnit({
|
|
83
|
+
...feeArgs,
|
|
84
|
+
providerGasLimit: '300',
|
|
85
|
+
simulation: { transactionData, from, stateOverride },
|
|
86
|
+
})).resolves.toBe('3000');
|
|
87
|
+
expect(getMinimalStateOverride).not.toHaveBeenCalled();
|
|
88
|
+
});
|
|
89
|
+
it('simulates when the provider has no gas limit', async () => {
|
|
90
|
+
vi.mocked(getMinimalStateOverride).mockResolvedValue([]);
|
|
91
|
+
vi.mocked(estimateGasWithStateOverride).mockResolvedValue('200');
|
|
92
|
+
const { transactionData, from, stateOverride, ...feeArgs } = makeArgs({
|
|
93
|
+
getGasFeeData: vi.fn().mockResolvedValue({ average: gasFees }),
|
|
94
|
+
});
|
|
95
|
+
await expect(getEvmRateNetworkFeeCryptoBaseUnit({
|
|
96
|
+
...feeArgs,
|
|
97
|
+
providerGasLimit: undefined,
|
|
98
|
+
simulation: { transactionData, from, stateOverride },
|
|
99
|
+
})).resolves.toBe('2400');
|
|
100
|
+
});
|
|
101
|
+
});
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import type { Asset } from '@shapeshiftoss/types';
|
|
2
2
|
import type { StateOverride } from 'viem';
|
|
3
|
+
export declare class EstimationTimeoutError extends Error {
|
|
4
|
+
constructor();
|
|
5
|
+
}
|
|
3
6
|
export declare const withTimeout: <T>(promise: Promise<T>) => Promise<T>;
|
|
4
7
|
export type GetMinimalStateOverrideArgs = {
|
|
5
8
|
sellAsset: Asset;
|
|
@@ -26,13 +26,18 @@ const discoveredSlots = new Map();
|
|
|
26
26
|
const rawDiscoveredSlots = new Map();
|
|
27
27
|
const failedSlotDiscoveries = new Map();
|
|
28
28
|
const FAILED_DISCOVERY_TTL_MS = 60_000;
|
|
29
|
+
export class EstimationTimeoutError extends Error {
|
|
30
|
+
constructor() {
|
|
31
|
+
super('State override estimation timed out');
|
|
32
|
+
}
|
|
33
|
+
}
|
|
29
34
|
export const withTimeout = async (promise) => {
|
|
30
35
|
let timer;
|
|
31
36
|
try {
|
|
32
37
|
return await Promise.race([
|
|
33
38
|
promise,
|
|
34
39
|
new Promise((_, reject) => {
|
|
35
|
-
timer = setTimeout(() => reject(new
|
|
40
|
+
timer = setTimeout(() => reject(new EstimationTimeoutError()), ESTIMATION_TIMEOUT_MS);
|
|
36
41
|
}),
|
|
37
42
|
]);
|
|
38
43
|
}
|
|
@@ -288,7 +293,7 @@ export const getMinimalStateOverride = async ({ sellAsset, sellAmountCryptoBaseU
|
|
|
288
293
|
// only the missing state. Estimation runs on our own RPCs - the node applies the same engine over
|
|
289
294
|
// the patched pre-state, so the only systematic delta is the unrealized allowance-decrement refund
|
|
290
295
|
// (a few k gas high, conservative).
|
|
291
|
-
export const estimateGasWithStateOverride = ({ to, data, stateOverride: prebuiltStateOverride, ...overrideArgs }) =>
|
|
296
|
+
export const estimateGasWithStateOverride = async ({ to, data, stateOverride: prebuiltStateOverride, ...overrideArgs }) => {
|
|
292
297
|
const client = assertGetViemClient(overrideArgs.sellAsset.chainId);
|
|
293
298
|
const stateOverride = prebuiltStateOverride ?? (await getMinimalStateOverride(overrideArgs));
|
|
294
299
|
const gasLimit = await client.estimateGas({
|
|
@@ -299,4 +304,4 @@ export const estimateGasWithStateOverride = ({ to, data, stateOverride: prebuilt
|
|
|
299
304
|
...(stateOverride ? { stateOverride } : {}),
|
|
300
305
|
});
|
|
301
306
|
return gasLimit.toString();
|
|
302
|
-
}
|
|
307
|
+
};
|