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