@shapeshiftoss/swapper 20.2.0 → 20.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/.tsbuildinfo +1 -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/swapperApi/getTradeQuote.js +2 -3
- package/dist/cjs/swappers/ButterSwap/types.d.ts +0 -11
- package/dist/cjs/swappers/ButterSwap/utils/constants.d.ts +2 -0
- package/dist/cjs/swappers/ButterSwap/utils/constants.js +4 -1
- package/dist/cjs/swappers/ButterSwap/utils/getButterSwapStepData.d.ts +2 -3
- package/dist/cjs/swappers/ButterSwap/utils/getButterSwapStepData.js +42 -14
- package/dist/cjs/swappers/ButterSwap/utils/getButterSwapStepData.test.js +120 -17
- package/dist/cjs/swappers/ButterSwap/utils/helpers.js +1 -2
- package/dist/cjs/swappers/ButterSwap/xhr.js +3 -3
- package/dist/cjs/swappers/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/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/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/swapperApi/getTradeQuote.js +2 -3
- package/dist/esm/swappers/ButterSwap/types.d.ts +0 -11
- package/dist/esm/swappers/ButterSwap/utils/constants.d.ts +2 -0
- package/dist/esm/swappers/ButterSwap/utils/constants.js +3 -0
- package/dist/esm/swappers/ButterSwap/utils/getButterSwapStepData.d.ts +2 -3
- package/dist/esm/swappers/ButterSwap/utils/getButterSwapStepData.js +42 -14
- package/dist/esm/swappers/ButterSwap/utils/getButterSwapStepData.test.js +120 -17
- package/dist/esm/swappers/ButterSwap/utils/helpers.js +1 -2
- package/dist/esm/swappers/ButterSwap/xhr.js +3 -3
- package/dist/esm/swappers/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/thorchain/getThorStepData.js +32 -49
- package/dist/esm/utils/thorchain/getThorStepData.tron.test.d.ts +1 -0
- package/dist/esm/utils/thorchain/getThorStepData.tron.test.js +91 -0
- package/dist/esm/utils/thorchain/index.d.ts +0 -1
- package/dist/esm/utils/thorchain/index.js +0 -1
- package/dist/esm/utils/tron/constants.d.ts +1 -0
- package/dist/esm/utils/tron/constants.js +2 -0
- package/dist/esm/utils/tron/getTronNetworkFeeCryptoBaseUnit.d.ts +27 -0
- package/dist/esm/utils/tron/getTronNetworkFeeCryptoBaseUnit.js +59 -0
- package/dist/esm/utils/tron/getTronNetworkFeeCryptoBaseUnit.test.d.ts +1 -0
- package/dist/esm/utils/tron/getTronNetworkFeeCryptoBaseUnit.test.js +155 -0
- package/dist/esm/utils/tron/getUnsignedTronTransaction.d.ts +2 -1
- package/dist/esm/utils/tron/getUnsignedTronTransaction.js +14 -48
- package/dist/esm/utils/tron/getUnsignedTronTransaction.test.d.ts +1 -0
- package/dist/esm/utils/tron/getUnsignedTronTransaction.test.js +74 -0
- package/dist/esm/utils/tron/index.d.ts +2 -0
- package/dist/esm/utils/tron/index.js +2 -0
- package/package.json +8 -8
- package/dist/cjs/swappers/SunioSwapper/utils/buildSwapRouteParameters.d.ts +0 -14
- package/dist/cjs/swappers/SunioSwapper/utils/buildSwapRouteParameters.js +0 -32
- package/dist/cjs/swappers/SunioSwapper/utils/estimateSunioNetworkFee.d.ts +0 -12
- package/dist/cjs/swappers/SunioSwapper/utils/estimateSunioNetworkFee.js +0 -78
- package/dist/cjs/swappers/SunioSwapper/utils/getSunioTransactionFees.d.ts +0 -2
- package/dist/cjs/swappers/SunioSwapper/utils/getSunioTransactionFees.js +0 -36
- package/dist/cjs/utils/thorchain/tron/getTronTransactionFees.d.ts +0 -2
- package/dist/cjs/utils/thorchain/tron/getTronTransactionFees.js +0 -68
- package/dist/cjs/utils/thorchain/tron/getUnsignedTronTransaction.d.ts +0 -3
- package/dist/cjs/utils/thorchain/tron/getUnsignedTronTransaction.js +0 -35
- package/dist/cjs/utils/thorchain/tron/index.d.ts +0 -2
- package/dist/cjs/utils/thorchain/tron/index.js +0 -18
- package/dist/esm/swappers/SunioSwapper/utils/buildSwapRouteParameters.d.ts +0 -14
- package/dist/esm/swappers/SunioSwapper/utils/buildSwapRouteParameters.js +0 -28
- package/dist/esm/swappers/SunioSwapper/utils/estimateSunioNetworkFee.d.ts +0 -12
- package/dist/esm/swappers/SunioSwapper/utils/estimateSunioNetworkFee.js +0 -74
- package/dist/esm/swappers/SunioSwapper/utils/getSunioTransactionFees.d.ts +0 -2
- package/dist/esm/swappers/SunioSwapper/utils/getSunioTransactionFees.js +0 -32
- package/dist/esm/utils/thorchain/tron/getTronTransactionFees.d.ts +0 -2
- package/dist/esm/utils/thorchain/tron/getTronTransactionFees.js +0 -64
- package/dist/esm/utils/thorchain/tron/getUnsignedTronTransaction.d.ts +0 -3
- package/dist/esm/utils/thorchain/tron/getUnsignedTronTransaction.js +0 -31
- package/dist/esm/utils/thorchain/tron/index.d.ts +0 -2
- package/dist/esm/utils/thorchain/tron/index.js +0 -2
- /package/dist/cjs/swappers/SunioSwapper/utils/{fetchFromSunio.d.ts → fetchSunioQuote.d.ts} +0 -0
- /package/dist/cjs/swappers/SunioSwapper/utils/{fetchFromSunio.js → fetchSunioQuote.js} +0 -0
- /package/dist/esm/swappers/SunioSwapper/utils/{fetchFromSunio.d.ts → fetchSunioQuote.d.ts} +0 -0
- /package/dist/esm/swappers/SunioSwapper/utils/{fetchFromSunio.js → fetchSunioQuote.js} +0 -0
|
@@ -7,6 +7,8 @@ import { TradeQuoteError } from '../../../types.js';
|
|
|
7
7
|
import { makeNetworkFeeEstimationFailedErr, makeSwapErrorRight, makeTradeStepBuildFailedErr, } from '../../../utils/index.js';
|
|
8
8
|
import { getEvmNetworkFeeCryptoBaseUnit } from '../../../utils/evm/index.js';
|
|
9
9
|
import { getSolanaNetworkFeeCryptoBaseUnit, omitComputeBudgetInstructions, withComputeUnitLimit, } from '../../../utils/solana/index.js';
|
|
10
|
+
import { getTronContractCallFallbackFeeCryptoBaseUnit, getTronContractCallNetworkFeeCryptoBaseUnit, } from '../../../utils/tron/index.js';
|
|
11
|
+
import { BUTTERSWAP_TRON_DEFAULT_BANDWIDTH_BYTES, BUTTERSWAP_TRON_FALLBACK_SWAP_ENERGY, } from './constants.js';
|
|
10
12
|
import { getProviderNetworkFeeCryptoBaseUnit } from './helpers.js';
|
|
11
13
|
// Jupiter swap legs can consume more units than simulated when pool state moves between
|
|
12
14
|
// simulation and landing (CLMM tick crossings), 1.4 matches Jupiter's dynamicComputeUnitLimit margin
|
|
@@ -114,26 +116,52 @@ export async function getButterSwapStepData(args) {
|
|
|
114
116
|
return Err(makeTradeStepBuildFailedErr('getButterSwapStepData', error));
|
|
115
117
|
}
|
|
116
118
|
}
|
|
117
|
-
// Not yet migrated to a TxBuildData variant - exec still builds from legacy metadata
|
|
118
119
|
case CHAIN_NAMESPACE.Tron: {
|
|
119
|
-
const
|
|
120
|
+
const adapter = deps.assertGetTronChainAdapter(sellAsset.chainId);
|
|
120
121
|
if (args.type === 'rate') {
|
|
122
|
+
// Butter's gasFee is a fraction of what the router burns, so rates price the measured swap at the router's share
|
|
123
|
+
const networkFeeCryptoBaseUnit = await (async () => {
|
|
124
|
+
if (!route.contract)
|
|
125
|
+
return getProviderNetworkFeeCryptoBaseUnit({ route, feeAsset });
|
|
126
|
+
try {
|
|
127
|
+
return await getTronContractCallFallbackFeeCryptoBaseUnit({
|
|
128
|
+
adapter,
|
|
129
|
+
energy: BUTTERSWAP_TRON_FALLBACK_SWAP_ENERGY,
|
|
130
|
+
bandwidthBytes: BUTTERSWAP_TRON_DEFAULT_BANDWIDTH_BYTES,
|
|
131
|
+
contractAddress: route.contract,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
return getProviderNetworkFeeCryptoBaseUnit({ route, feeAsset });
|
|
136
|
+
}
|
|
137
|
+
})();
|
|
121
138
|
const stepData = { networkFeeCryptoBaseUnit };
|
|
122
139
|
return Ok(stepData);
|
|
123
140
|
}
|
|
124
|
-
const { buildTx } = args;
|
|
125
|
-
const
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
value: buildTx.value,
|
|
130
|
-
method: buildTx.method,
|
|
131
|
-
args: buildTx.args,
|
|
132
|
-
memo: buildTx.memo,
|
|
133
|
-
},
|
|
134
|
-
networkFeeCryptoBaseUnit,
|
|
141
|
+
const { buildTx, from } = args;
|
|
142
|
+
const call = {
|
|
143
|
+
to: buildTx.to,
|
|
144
|
+
data: buildTx.data,
|
|
145
|
+
value: fromHex(buildTx.value, 'bigint').toString(),
|
|
135
146
|
};
|
|
136
|
-
|
|
147
|
+
try {
|
|
148
|
+
const stepData = {
|
|
149
|
+
transactionData: { type: 'tron', ...call },
|
|
150
|
+
networkFeeCryptoBaseUnit: await getTronContractCallNetworkFeeCryptoBaseUnit({
|
|
151
|
+
adapter,
|
|
152
|
+
transactionData: call,
|
|
153
|
+
from,
|
|
154
|
+
sellAsset,
|
|
155
|
+
sellAmountCryptoBaseUnit,
|
|
156
|
+
spenderAddress: buildTx.to,
|
|
157
|
+
fallbackEnergy: BUTTERSWAP_TRON_FALLBACK_SWAP_ENERGY,
|
|
158
|
+
}),
|
|
159
|
+
};
|
|
160
|
+
return Ok(stepData);
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
return Err(makeNetworkFeeEstimationFailedErr('getButterSwapStepData', error));
|
|
164
|
+
}
|
|
137
165
|
}
|
|
138
166
|
default:
|
|
139
167
|
return Err(makeSwapErrorRight({
|
|
@@ -15,6 +15,11 @@ const route = ROUTE_QUOTE.data[0];
|
|
|
15
15
|
const PROVIDER_GAS_FEE_BASE_UNIT = '1333043669759539'; // 0.001333043669759539 ETH
|
|
16
16
|
const SOL = { ...ETH, assetId: `${solanaChainId}/slip44:501`, chainId: solanaChainId };
|
|
17
17
|
const TRX = { ...ETH, assetId: `${tronChainId}/slip44:195`, chainId: tronChainId };
|
|
18
|
+
const USDT_TRON = {
|
|
19
|
+
...ETH,
|
|
20
|
+
assetId: `${tronChainId}/trc20:TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t`,
|
|
21
|
+
chainId: tronChainId,
|
|
22
|
+
};
|
|
18
23
|
const evmBuildTx = {
|
|
19
24
|
to: '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE',
|
|
20
25
|
data: '0xdeadbeef',
|
|
@@ -25,6 +30,7 @@ const makeDeps = (adapters) => ({
|
|
|
25
30
|
assertGetEvmChainAdapter: () => adapters.evm,
|
|
26
31
|
assertGetUtxoChainAdapter: () => adapters.utxo,
|
|
27
32
|
assertGetSolanaChainAdapter: () => adapters.solana,
|
|
33
|
+
assertGetTronChainAdapter: () => adapters.tron,
|
|
28
34
|
});
|
|
29
35
|
const evmAdapter = ({ gasPrice = '1000000000', estimatedGasLimit = '500000', throwOnGasFeeData = false, throwOnFeeData = false, } = {}) => ({
|
|
30
36
|
getGasFeeData: () => {
|
|
@@ -153,36 +159,133 @@ describe('getButterSwapStepData', () => {
|
|
|
153
159
|
});
|
|
154
160
|
});
|
|
155
161
|
describe('tron', () => {
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
162
|
+
const tronBuildTx = { ...evmBuildTx, to: 'TRouterAddress' };
|
|
163
|
+
const tronAdapter = ({ txFee = '9000000', allowance = '0' } = {}) => ({
|
|
164
|
+
getFeeData: vi.fn().mockResolvedValue({ fast: { txFee } }),
|
|
165
|
+
httpProvider: {
|
|
166
|
+
getChainPrices: () => Promise.resolve({ energyPrice: 100, bandwidthPrice: 1000 }),
|
|
167
|
+
getTrc20Allowance: vi.fn().mockResolvedValue(allowance),
|
|
168
|
+
getTrc20Balance: vi.fn().mockResolvedValue('100000000'),
|
|
169
|
+
getContractEnergyShare: vi.fn().mockResolvedValue({
|
|
170
|
+
callerPercent: 100,
|
|
171
|
+
originEnergyLimit: 0,
|
|
172
|
+
originEnergyAvailable: 0,
|
|
173
|
+
}),
|
|
174
|
+
},
|
|
175
|
+
});
|
|
176
|
+
it('carries the router call as transactionData and simulates it', async () => {
|
|
177
|
+
const adapter = tronAdapter();
|
|
178
|
+
const actual = await getButterSwapStepData({
|
|
179
|
+
type: 'quote',
|
|
180
|
+
input: {},
|
|
181
|
+
from: 'TSenderAddress',
|
|
182
|
+
buildTx: tronBuildTx,
|
|
183
|
+
deps: makeDeps({ tron: adapter }),
|
|
184
|
+
route,
|
|
185
|
+
sellAsset: TRX,
|
|
186
|
+
feeAsset: TRX,
|
|
187
|
+
sellAmountCryptoBaseUnit: '1000000',
|
|
188
|
+
spenderAddress: '',
|
|
189
|
+
});
|
|
190
|
+
// Butter's value is the native amount to send: the sell amount for a native sell, 0 for a token
|
|
191
|
+
const transactionData = {
|
|
192
|
+
type: 'tron',
|
|
159
193
|
to: 'TRouterAddress',
|
|
160
|
-
|
|
161
|
-
|
|
194
|
+
data: evmBuildTx.data,
|
|
195
|
+
value: '100000000000000000',
|
|
162
196
|
};
|
|
197
|
+
expect(actual.unwrap()).toEqual({ transactionData, networkFeeCryptoBaseUnit: '9000000' });
|
|
198
|
+
expect(adapter.getFeeData).toHaveBeenCalledWith({
|
|
199
|
+
to: 'TRouterAddress',
|
|
200
|
+
value: '100000000000000000',
|
|
201
|
+
chainSpecific: { from: 'TSenderAddress', data: evmBuildTx.data, requireEnergyShare: true },
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
it('uses the provider value for a token sell', async () => {
|
|
163
205
|
const actual = await getButterSwapStepData({
|
|
164
206
|
type: 'quote',
|
|
165
207
|
input: {},
|
|
166
208
|
from: 'TSenderAddress',
|
|
167
|
-
buildTx,
|
|
168
|
-
deps: {},
|
|
209
|
+
buildTx: { ...tronBuildTx, value: '0x00' },
|
|
210
|
+
deps: makeDeps({ tron: tronAdapter() }),
|
|
211
|
+
route,
|
|
212
|
+
sellAsset: USDT_TRON,
|
|
213
|
+
feeAsset: TRX,
|
|
214
|
+
sellAmountCryptoBaseUnit: '1000000',
|
|
215
|
+
spenderAddress: '',
|
|
216
|
+
});
|
|
217
|
+
expect(actual.unwrap().transactionData).toMatchObject({ value: '0' });
|
|
218
|
+
});
|
|
219
|
+
it('fails a native quote when the simulation fails', async () => {
|
|
220
|
+
const adapter = tronAdapter();
|
|
221
|
+
adapter.getFeeData.mockRejectedValue(new Error('REVERT opcode executed'));
|
|
222
|
+
const actual = await getButterSwapStepData({
|
|
223
|
+
type: 'quote',
|
|
224
|
+
input: {},
|
|
225
|
+
from: 'TSenderAddress',
|
|
226
|
+
buildTx: tronBuildTx,
|
|
227
|
+
deps: makeDeps({ tron: adapter }),
|
|
169
228
|
route,
|
|
170
229
|
sellAsset: TRX,
|
|
171
230
|
feeAsset: TRX,
|
|
172
231
|
sellAmountCryptoBaseUnit: '1000000',
|
|
173
232
|
spenderAddress: '',
|
|
174
233
|
});
|
|
175
|
-
expect(actual.
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
},
|
|
234
|
+
expect(actual.isErr()).toBe(true);
|
|
235
|
+
});
|
|
236
|
+
it('prices the measured worst case when a token allowance is not granted yet', async () => {
|
|
237
|
+
const adapter = tronAdapter({ allowance: '0' });
|
|
238
|
+
adapter.getFeeData.mockRejectedValue(new Error('REVERT opcode executed'));
|
|
239
|
+
const actual = await getButterSwapStepData({
|
|
240
|
+
type: 'quote',
|
|
241
|
+
input: {},
|
|
242
|
+
from: 'TSenderAddress',
|
|
243
|
+
buildTx: { ...tronBuildTx, value: '0x00' },
|
|
244
|
+
deps: makeDeps({ tron: adapter }),
|
|
245
|
+
route,
|
|
246
|
+
sellAsset: USDT_TRON,
|
|
247
|
+
feeAsset: TRX,
|
|
248
|
+
sellAmountCryptoBaseUnit: '1000000',
|
|
249
|
+
spenderAddress: '',
|
|
250
|
+
});
|
|
251
|
+
// 1000000 energy * 1.2 margin * 100 sun + (4 calldata + 279 envelope) bytes * 1000 sun
|
|
252
|
+
expect(actual.unwrap().networkFeeCryptoBaseUnit).toBe('120283000');
|
|
253
|
+
});
|
|
254
|
+
it('rates price the measured swap at the router share', async () => {
|
|
255
|
+
const adapter = tronAdapter();
|
|
256
|
+
adapter.httpProvider.getContractEnergyShare.mockResolvedValue({
|
|
257
|
+
callerPercent: 5,
|
|
258
|
+
originEnergyLimit: 10_000_000,
|
|
259
|
+
originEnergyAvailable: 5_000_000,
|
|
260
|
+
});
|
|
261
|
+
const actual = await getButterSwapStepData({
|
|
262
|
+
type: 'rate',
|
|
263
|
+
input: {},
|
|
264
|
+
deps: makeDeps({ tron: adapter }),
|
|
265
|
+
route: { ...route, contract: 'TRouterAddress' },
|
|
266
|
+
sellAsset: TRX,
|
|
267
|
+
feeAsset: TRX,
|
|
268
|
+
sellAmountCryptoBaseUnit: '1000000',
|
|
269
|
+
spenderAddress: '',
|
|
270
|
+
});
|
|
271
|
+
// 1000000 * 5% caller energy * 1.2 margin * 100 sun + 2400 bytes * 1000 sun
|
|
272
|
+
expect(actual.unwrap()).toEqual({ networkFeeCryptoBaseUnit: '8400000' });
|
|
273
|
+
expect(adapter.httpProvider.getContractEnergyShare).toHaveBeenCalledWith('TRouterAddress');
|
|
274
|
+
});
|
|
275
|
+
it('rates fall back to the provider fee when the worst case cannot be priced', async () => {
|
|
276
|
+
const adapter = tronAdapter();
|
|
277
|
+
adapter.httpProvider.getContractEnergyShare.mockRejectedValue(new Error('429'));
|
|
278
|
+
const actual = await getButterSwapStepData({
|
|
279
|
+
type: 'rate',
|
|
280
|
+
input: {},
|
|
281
|
+
deps: makeDeps({ tron: adapter }),
|
|
282
|
+
route: { ...route, contract: 'TRouterAddress' },
|
|
283
|
+
sellAsset: TRX,
|
|
284
|
+
feeAsset: TRX,
|
|
285
|
+
sellAmountCryptoBaseUnit: '1000000',
|
|
286
|
+
spenderAddress: '',
|
|
185
287
|
});
|
|
288
|
+
expect(actual.unwrap()).toEqual({ networkFeeCryptoBaseUnit: PROVIDER_GAS_FEE_BASE_UNIT });
|
|
186
289
|
});
|
|
187
290
|
});
|
|
188
291
|
it('errors on an unsupported chain namespace', async () => {
|
|
@@ -40,8 +40,7 @@ export const assertValidTrade = ({ sellAsset, }) => {
|
|
|
40
40
|
}
|
|
41
41
|
return Ok(undefined);
|
|
42
42
|
};
|
|
43
|
-
// Provider reported network fee - the
|
|
44
|
-
// un-migrated tron quote path (exec computes the real fee at execution)
|
|
43
|
+
// Provider reported network fee - the fallback when estimation fails
|
|
45
44
|
export const getProviderNetworkFeeCryptoBaseUnit = ({ route, feeAsset, }) => {
|
|
46
45
|
if (bnOrZero(route.gasFee?.amount).lte(0))
|
|
47
46
|
return '0';
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { fromAssetId, solanaChainId, tronChainId } from '@shapeshiftoss/caip';
|
|
2
|
+
import { tron } from '@shapeshiftoss/chain-adapters';
|
|
2
3
|
import { chainIdToFeeAssetId } from '@shapeshiftoss/utils';
|
|
3
4
|
import { Err, Ok } from '@sniptt/monads';
|
|
4
5
|
import { zeroAddress } from 'viem';
|
|
@@ -20,7 +21,6 @@ export var ButterSwapErrorCode;
|
|
|
20
21
|
ButterSwapErrorCode[ButterSwapErrorCode["InvalidAddress"] = 2007] = "InvalidAddress";
|
|
21
22
|
})(ButterSwapErrorCode || (ButterSwapErrorCode = {}));
|
|
22
23
|
const SOLANA_NATIVE_ADDRESS = 'So11111111111111111111111111111111111111112';
|
|
23
|
-
const TRON_NATIVE_ADDRESS = 'T9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb';
|
|
24
24
|
export const getButterRoute = async ({ sellAsset, buyAsset, sellAmountCryptoPrecision, slippage, affiliate, }) => {
|
|
25
25
|
const butterFromChainId = chainIdToButterSwapChainId(sellAsset.chainId);
|
|
26
26
|
const butterToChainId = chainIdToButterSwapChainId(buyAsset.chainId);
|
|
@@ -39,7 +39,7 @@ export const getButterRoute = async ({ sellAsset, buyAsset, sellAmountCryptoPrec
|
|
|
39
39
|
if (sellAsset.chainId === solanaChainId && sellAssetIsNative)
|
|
40
40
|
return SOLANA_NATIVE_ADDRESS;
|
|
41
41
|
if (sellAsset.chainId === tronChainId && sellAssetIsNative)
|
|
42
|
-
return
|
|
42
|
+
return tron.TRON_ZERO_ADDRESS;
|
|
43
43
|
if (sellAssetIsNative)
|
|
44
44
|
return zeroAddress;
|
|
45
45
|
return sellAssetAddressRaw;
|
|
@@ -48,7 +48,7 @@ export const getButterRoute = async ({ sellAsset, buyAsset, sellAmountCryptoPrec
|
|
|
48
48
|
if (buyAsset.chainId === solanaChainId && buyAssetIsNative)
|
|
49
49
|
return SOLANA_NATIVE_ADDRESS;
|
|
50
50
|
if (buyAsset.chainId === tronChainId && buyAssetIsNative)
|
|
51
|
-
return
|
|
51
|
+
return tron.TRON_ZERO_ADDRESS;
|
|
52
52
|
if (buyAssetIsNative)
|
|
53
53
|
return zeroAddress;
|
|
54
54
|
return buyAssetAddressRaw;
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { TxStatus } from '@shapeshiftoss/unchained-client';
|
|
2
|
-
import {
|
|
3
|
-
import { getExecutableTradeStep, getSwapMetadata, isExecutableTradeQuote } from '../../utils/index.js';
|
|
2
|
+
import { getSwapMetadata } from '../../utils/index.js';
|
|
4
3
|
import { getEvmTransactionFees, getUnsignedEvmTransaction } from '../../utils/evm/index.js';
|
|
5
4
|
import { getSolanaTransactionFees, getUnsignedSolanaTransaction } from '../../utils/solana/index.js';
|
|
6
|
-
import { getTronTransactionFees } from '../../utils/tron/index.js';
|
|
5
|
+
import { getTronTransactionFees, getUnsignedTronTransaction } from '../../utils/tron/index.js';
|
|
7
6
|
import { getUnsignedUtxoTransaction, getUtxoTransactionFees } from '../../utils/utxo/index.js';
|
|
8
7
|
import { ChainflipStatusMessage } from './constants.js';
|
|
9
8
|
import { getTradeQuote } from './swapperApi/getTradeQuote.js';
|
|
@@ -19,22 +18,7 @@ export const chainflipApi = {
|
|
|
19
18
|
getUtxoTransactionFees,
|
|
20
19
|
getUnsignedSolanaTransaction,
|
|
21
20
|
getSolanaTransactionFees,
|
|
22
|
-
getUnsignedTronTransaction
|
|
23
|
-
if (!isExecutableTradeQuote(tradeQuote))
|
|
24
|
-
throw new Error('Unable to execute a trade rate quote');
|
|
25
|
-
const step = getExecutableTradeStep(tradeQuote, stepIndex);
|
|
26
|
-
const { accountNumber, chainflipSpecific, sellAsset } = step;
|
|
27
|
-
if (!chainflipSpecific?.depositAddress)
|
|
28
|
-
throw Error('Missing deposit address');
|
|
29
|
-
const adapter = assertGetTronChainAdapter(sellAsset.chainId);
|
|
30
|
-
return adapter.buildSendApiTransaction({
|
|
31
|
-
to: chainflipSpecific.depositAddress,
|
|
32
|
-
from,
|
|
33
|
-
value: step.sellAmountIncludingProtocolFeesCryptoBaseUnit,
|
|
34
|
-
accountNumber,
|
|
35
|
-
chainSpecific: { contractAddress: contractAddressOrUndefined(sellAsset.assetId) },
|
|
36
|
-
});
|
|
37
|
-
},
|
|
21
|
+
getUnsignedTronTransaction,
|
|
38
22
|
getTronTransactionFees,
|
|
39
23
|
checkTradeStatus: async ({ config, swap }) => {
|
|
40
24
|
if (!swap)
|
|
@@ -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, {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { CHAIN_NAMESPACE, fromAssetId, fromChainId } from '@shapeshiftoss/caip';
|
|
2
|
-
import { evm } from '@shapeshiftoss/chain-adapters';
|
|
2
|
+
import { evm, tron } from '@shapeshiftoss/chain-adapters';
|
|
3
3
|
import { bn, contractAddressOrUndefined } from '@shapeshiftoss/utils';
|
|
4
4
|
import { Err, Ok } from '@sniptt/monads';
|
|
5
5
|
import { TradeQuoteError } from '../../../types.js';
|
|
@@ -150,23 +150,42 @@ export async function getChainflipStepData(args) {
|
|
|
150
150
|
return Err(makeNetworkFeeEstimationFailedErr('getChainflipStepData', error));
|
|
151
151
|
}
|
|
152
152
|
}
|
|
153
|
-
// Un-migrated - exec builds its tx from chainflipSpecific.depositAddress, so no transactionData is carried
|
|
154
153
|
case CHAIN_NAMESPACE.Tron: {
|
|
155
|
-
const
|
|
156
|
-
|
|
157
|
-
|
|
154
|
+
const adapter = deps.assertGetTronChainAdapter(sellAsset.chainId);
|
|
155
|
+
const contractAddress = contractAddressOrUndefined(sellAsset.assetId);
|
|
156
|
+
if (args.type === 'rate') {
|
|
157
|
+
// No deposit channel yet, but every channel is a fresh address, so a fresh recipient prices the transfer
|
|
158
|
+
const networkFeeCryptoBaseUnit = await (async () => {
|
|
159
|
+
if (!from)
|
|
160
|
+
return;
|
|
161
|
+
try {
|
|
162
|
+
const { fast } = await adapter.getFeeData({
|
|
163
|
+
to: tron.generateFreshTronAddress(),
|
|
164
|
+
value: sellAmountCryptoBaseUnit,
|
|
165
|
+
chainSpecific: { from, contractAddress },
|
|
166
|
+
});
|
|
167
|
+
return fast.txFee;
|
|
168
|
+
}
|
|
169
|
+
catch { }
|
|
170
|
+
})();
|
|
171
|
+
const stepData = { networkFeeCryptoBaseUnit };
|
|
158
172
|
return Ok(stepData);
|
|
159
173
|
}
|
|
174
|
+
const transactionData = {
|
|
175
|
+
type: 'tron',
|
|
176
|
+
to: args.depositAddress,
|
|
177
|
+
value: sellAmountCryptoBaseUnit,
|
|
178
|
+
};
|
|
160
179
|
try {
|
|
161
|
-
const { fast } = await
|
|
162
|
-
to,
|
|
163
|
-
value:
|
|
164
|
-
chainSpecific: {
|
|
165
|
-
from,
|
|
166
|
-
contractAddress: contractAddressOrUndefined(sellAsset.assetId),
|
|
167
|
-
},
|
|
180
|
+
const { fast } = await adapter.getFeeData({
|
|
181
|
+
to: transactionData.to,
|
|
182
|
+
value: transactionData.value,
|
|
183
|
+
chainSpecific: { from, contractAddress, requireEnergyShare: true },
|
|
168
184
|
});
|
|
169
|
-
const stepData = {
|
|
185
|
+
const stepData = {
|
|
186
|
+
transactionData,
|
|
187
|
+
networkFeeCryptoBaseUnit: fast.txFee,
|
|
188
|
+
};
|
|
170
189
|
return Ok(stepData);
|
|
171
190
|
}
|
|
172
191
|
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;
|
|
@@ -3,3 +3,5 @@ export const DEFAULT_SLIPPAGE_BPS = 50;
|
|
|
3
3
|
// 1Click refunds a deposit it cannot settle by the requested deadline, and prices a quote the same at any length
|
|
4
4
|
export const DEFAULT_QUOTE_DEADLINE_MS = 60 * 60 * 1000;
|
|
5
5
|
export const UTXO_QUOTE_DEADLINE_MS = 4 * 60 * 60 * 1000;
|
|
6
|
+
// 1Click pays half of the requested appFee to its own account, so request double to receive affiliateBps
|
|
7
|
+
export const APP_FEE_SPLIT_MULTIPLIER = 2;
|
|
@@ -142,12 +142,17 @@ export async function getNearIntentsStepData(args) {
|
|
|
142
142
|
const { fast } = await deps.assertGetTronChainAdapter(sellAsset.chainId).getFeeData({
|
|
143
143
|
to: depositAddress,
|
|
144
144
|
value: sellAmountCryptoBaseUnit,
|
|
145
|
-
chainSpecific: {
|
|
146
|
-
from,
|
|
147
|
-
contractAddress: contractAddressOrUndefined(sellAsset.assetId),
|
|
148
|
-
},
|
|
145
|
+
chainSpecific: { from, contractAddress, requireEnergyShare: type === 'quote' },
|
|
149
146
|
});
|
|
150
|
-
const
|
|
147
|
+
const networkFeeCryptoBaseUnit = fast.txFee;
|
|
148
|
+
if (type === 'rate') {
|
|
149
|
+
const stepData = { networkFeeCryptoBaseUnit };
|
|
150
|
+
return Ok(stepData);
|
|
151
|
+
}
|
|
152
|
+
const stepData = {
|
|
153
|
+
transactionData: { type: 'tron', to: depositAddress, value: sellAmountCryptoBaseUnit },
|
|
154
|
+
networkFeeCryptoBaseUnit,
|
|
155
|
+
};
|
|
151
156
|
return Ok(stepData);
|
|
152
157
|
}
|
|
153
158
|
case CHAIN_NAMESPACE.Sui: {
|
|
@@ -5,7 +5,7 @@ import { Err, Ok } from '@sniptt/monads';
|
|
|
5
5
|
import { zeroAddress } from 'viem';
|
|
6
6
|
import { TradeQuoteError } from '../../../types.js';
|
|
7
7
|
import { createTradeAmountTooSmallErr, makeSwapErrorRight } from '../../../utils/index.js';
|
|
8
|
-
import { DEFAULT_QUOTE_DEADLINE_MS, DEFAULT_SLIPPAGE_BPS, UTXO_QUOTE_DEADLINE_MS, } from '../constants.js';
|
|
8
|
+
import { APP_FEE_SPLIT_MULTIPLIER, DEFAULT_QUOTE_DEADLINE_MS, DEFAULT_SLIPPAGE_BPS, UTXO_QUOTE_DEADLINE_MS, } from '../constants.js';
|
|
9
9
|
import { chainIdToNearIntentsChain, QuoteRequest } from '../types.js';
|
|
10
10
|
import { ApiError, OneClickService } from './oneClickService.js';
|
|
11
11
|
const getTokensWithRetry = async () => {
|
|
@@ -149,7 +149,7 @@ export const buildNearIntentsQuoteRequest = ({ originAsset, destinationAsset, am
|
|
|
149
149
|
appFees: [
|
|
150
150
|
{
|
|
151
151
|
recipient: DAO_TREASURY_NEAR,
|
|
152
|
-
fee: Number(affiliateBps),
|
|
152
|
+
fee: Number(affiliateBps) * APP_FEE_SPLIT_MULTIPLIER,
|
|
153
153
|
},
|
|
154
154
|
],
|
|
155
155
|
};
|
|
@@ -14,8 +14,8 @@ export declare const relayChainIdToChainId: import("lodash").Dictionary<string>;
|
|
|
14
14
|
export declare const DEFAULT_RELAY_EVM_TOKEN_ADDRESS: "0x0000000000000000000000000000000000000000";
|
|
15
15
|
export declare const RELAY_BTC_TOKEN_ADDRESS = "bc1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqmql8k8";
|
|
16
16
|
export declare const RELAY_SOLANA_TOKEN_ADDRESS = "11111111111111111111111111111111";
|
|
17
|
-
export declare const RELAY_TRON_TOKEN_ADDRESS = "T9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb";
|
|
18
17
|
export declare const DEFAULT_RELAY_EVM_USER_ADDRESS = "0x000000000000000000000000000000000000dead";
|
|
18
|
+
export declare const RELAY_TRON_FALLBACK_DEPOSIT_ENERGY = "100000";
|
|
19
19
|
export declare const DEFAULT_RELAY_BTC_USER_ADDRESS = "bc1q4vxn43l44h30nkluqfxd9eckf45vr2awz38lwa";
|
|
20
20
|
export declare const DEFAULT_RELAY_SOLANA_USER_ADDRESS = "CbKGgVKLJFb8bBrf58DnAkdryX6ubewVytn7X957YwNr";
|
|
21
21
|
export declare const DEFAULT_RELAY_TRON_USER_ADDRESS = "TLsV52sRDL79HXGGm9yzwKibb6BeruhUzy";
|
|
@@ -58,8 +58,9 @@ export const relayChainIdToChainId = invert(chainIdToRelayChainId);
|
|
|
58
58
|
export const DEFAULT_RELAY_EVM_TOKEN_ADDRESS = zeroAddress;
|
|
59
59
|
export const RELAY_BTC_TOKEN_ADDRESS = 'bc1qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqmql8k8';
|
|
60
60
|
export const RELAY_SOLANA_TOKEN_ADDRESS = '11111111111111111111111111111111';
|
|
61
|
-
export const RELAY_TRON_TOKEN_ADDRESS = 'T9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb';
|
|
62
61
|
export const DEFAULT_RELAY_EVM_USER_ADDRESS = '0x000000000000000000000000000000000000dead';
|
|
62
|
+
// depositor energy for a TRC20 deposit measured on mainnet, for token quotes without their allowance
|
|
63
|
+
export const RELAY_TRON_FALLBACK_DEPOSIT_ENERGY = '100000';
|
|
63
64
|
export const DEFAULT_RELAY_BTC_USER_ADDRESS = 'bc1q4vxn43l44h30nkluqfxd9eckf45vr2awz38lwa';
|
|
64
65
|
export const DEFAULT_RELAY_SOLANA_USER_ADDRESS = 'CbKGgVKLJFb8bBrf58DnAkdryX6ubewVytn7X957YwNr';
|
|
65
66
|
export const DEFAULT_RELAY_TRON_USER_ADDRESS = 'TLsV52sRDL79HXGGm9yzwKibb6BeruhUzy';
|
|
@@ -21,12 +21,11 @@ const getQuote = async (input, deps, relayChainMap) => {
|
|
|
21
21
|
type: 'quote',
|
|
22
22
|
input,
|
|
23
23
|
});
|
|
24
|
-
return maybeStepData.map(({ transactionData,
|
|
24
|
+
return maybeStepData.map(({ transactionData, networkFeeCryptoBaseUnit }) => ({
|
|
25
25
|
...stepCommon,
|
|
26
26
|
accountNumber,
|
|
27
27
|
allowanceContract,
|
|
28
28
|
transactionData,
|
|
29
|
-
relayTransactionMetadata,
|
|
30
29
|
swapperMetadata: {
|
|
31
30
|
name: 'relay',
|
|
32
31
|
relayId,
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { btcAssetId, fromAssetId, isAssetReference, solAssetId, tronAssetId, } from '@shapeshiftoss/caip';
|
|
2
|
+
import { tron } from '@shapeshiftoss/chain-adapters';
|
|
2
3
|
import { isNativeEvmAsset } from '../../../utils/helpers.js';
|
|
3
|
-
import { DEFAULT_RELAY_EVM_TOKEN_ADDRESS, RELAY_BTC_TOKEN_ADDRESS, RELAY_SOLANA_TOKEN_ADDRESS,
|
|
4
|
+
import { DEFAULT_RELAY_EVM_TOKEN_ADDRESS, RELAY_BTC_TOKEN_ADDRESS, RELAY_SOLANA_TOKEN_ADDRESS, } from '../constant.js';
|
|
4
5
|
export const getRelayAssetAddress = (asset) => {
|
|
5
6
|
if (asset.assetId === btcAssetId)
|
|
6
7
|
return RELAY_BTC_TOKEN_ADDRESS;
|
|
7
8
|
if (asset.assetId === solAssetId)
|
|
8
9
|
return RELAY_SOLANA_TOKEN_ADDRESS;
|
|
9
10
|
if (asset.assetId === tronAssetId)
|
|
10
|
-
return
|
|
11
|
+
return tron.TRON_ZERO_ADDRESS;
|
|
11
12
|
if (isNativeEvmAsset(asset.assetId))
|
|
12
13
|
return DEFAULT_RELAY_EVM_TOKEN_ADDRESS;
|
|
13
14
|
const { assetReference } = fromAssetId(asset.assetId);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Result } from '@sniptt/monads';
|
|
2
2
|
import type { StepDataArgs, SwapErrorRight, TxBuildData } from '../../../types.js';
|
|
3
3
|
import type { SolanaComputeBudgetOptions } from '../../../utils/solana/index.js';
|
|
4
|
-
import type { RelayQuoteItem
|
|
4
|
+
import type { RelayQuoteItem } from './types.js';
|
|
5
5
|
export declare const RELAY_SOLANA_COMPUTE_BUDGET: SolanaComputeBudgetOptions;
|
|
6
6
|
type BaseArgs = {
|
|
7
7
|
data: RelayQuoteItem['data'];
|
|
@@ -15,8 +15,7 @@ type RelayRateStepData = {
|
|
|
15
15
|
networkFeeCryptoBaseUnit: string;
|
|
16
16
|
};
|
|
17
17
|
type RelayQuoteStepData = {
|
|
18
|
-
transactionData
|
|
19
|
-
relayTransactionMetadata?: RelayTransactionMetadata;
|
|
18
|
+
transactionData: TxBuildData;
|
|
20
19
|
networkFeeCryptoBaseUnit: string;
|
|
21
20
|
};
|
|
22
21
|
export type GetRelayStepDataArgs = StepDataArgs<BaseArgs, {
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
import { fromChainId } from '@shapeshiftoss/caip';
|
|
2
|
+
import { tron } from '@shapeshiftoss/chain-adapters';
|
|
2
3
|
import { bnOrZero, contractAddressOrUndefined, isToken } from '@shapeshiftoss/utils';
|
|
3
4
|
import { Err, Ok } from '@sniptt/monads';
|
|
4
5
|
import { makeNetworkFeeEstimationFailedErr, makeTradeStepBuildFailedErr } from '../../../utils/index.js';
|
|
5
6
|
import { getEvmNetworkFeeCryptoBaseUnit } from '../../../utils/evm/index.js';
|
|
6
7
|
import { getSolanaNetworkFeeCryptoBaseUnit, omitComputeBudgetInstructions, withComputeUnitLimit, } from '../../../utils/solana/index.js';
|
|
8
|
+
import { getTronContractCallFallbackFeeCryptoBaseUnit, getTronContractCallNetworkFeeCryptoBaseUnit, } from '../../../utils/tron/index.js';
|
|
7
9
|
import { getUtxoNetworkFeeCryptoBaseUnit } from '../../../utils/utxo/index.js';
|
|
10
|
+
import { RELAY_TRON_FALLBACK_DEPOSIT_ENERGY } from '../constant.js';
|
|
8
11
|
import { getRelayPsbtRelayer } from './getRelayPsbtRelayer.js';
|
|
9
12
|
import { convertRelaySolanaInstruction } from './helpers.js';
|
|
10
13
|
import { isRelayQuoteEvmItemData, isRelayQuoteSolanaItemData, isRelayQuoteTronItemData, isRelayQuoteUtxoItemData, } from './types.js';
|
|
@@ -169,25 +172,55 @@ export async function getRelayStepData({ data, sellAsset, sellAmountCryptoBaseUn
|
|
|
169
172
|
return Err(makeNetworkFeeEstimationFailedErr('getRelayStepData', error));
|
|
170
173
|
}
|
|
171
174
|
}
|
|
175
|
+
// Native and token sells alike are a call into relay's depositor contract
|
|
172
176
|
if (isRelayQuoteTronItemData(data)) {
|
|
173
|
-
const contractAddress = data.parameter
|
|
174
|
-
const tronCallData = data.parameter?.data;
|
|
175
|
-
const isTronToken = isToken(sellAsset.assetId);
|
|
176
|
-
if (isTronToken && !contractAddress)
|
|
177
|
-
return Err(makeTradeStepBuildFailedErr('getRelayStepData'));
|
|
178
|
-
if (isTronToken && !tronCallData)
|
|
179
|
-
return Err(makeTradeStepBuildFailedErr('getRelayStepData'));
|
|
177
|
+
const { contract_address: contractAddress, data: callData, call_value: callValue, } = data.parameter ?? {};
|
|
180
178
|
if (type === 'rate') {
|
|
179
|
+
// Relay's gas figure runs ~35% under the deposit's measured energy, so rates price the measured call
|
|
180
|
+
const networkFeeCryptoBaseUnit = await (async () => {
|
|
181
|
+
if (!contractAddress || !callData)
|
|
182
|
+
return fallbackNetworkFeeCryptoBaseUnit;
|
|
183
|
+
try {
|
|
184
|
+
return await getTronContractCallFallbackFeeCryptoBaseUnit({
|
|
185
|
+
adapter: deps.assertGetTronChainAdapter(sellAsset.chainId),
|
|
186
|
+
energy: RELAY_TRON_FALLBACK_DEPOSIT_ENERGY,
|
|
187
|
+
bandwidthBytes: tron.getTronContractCallBandwidthBytes(callData),
|
|
188
|
+
contractAddress,
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
return fallbackNetworkFeeCryptoBaseUnit;
|
|
193
|
+
}
|
|
194
|
+
})();
|
|
195
|
+
const stepData = { networkFeeCryptoBaseUnit };
|
|
196
|
+
return Ok(stepData);
|
|
197
|
+
}
|
|
198
|
+
if (!contractAddress || !callData)
|
|
199
|
+
return Err(makeTradeStepBuildFailedErr('getRelayStepData'));
|
|
200
|
+
const isNativeSell = !isToken(sellAsset.assetId);
|
|
201
|
+
const call = {
|
|
202
|
+
to: contractAddress,
|
|
203
|
+
data: callData,
|
|
204
|
+
value: String(callValue ?? (isNativeSell ? sellAmountCryptoBaseUnit : 0)),
|
|
205
|
+
};
|
|
206
|
+
try {
|
|
181
207
|
const stepData = {
|
|
182
|
-
|
|
208
|
+
transactionData: { type: 'tron', ...call },
|
|
209
|
+
networkFeeCryptoBaseUnit: await getTronContractCallNetworkFeeCryptoBaseUnit({
|
|
210
|
+
adapter: deps.assertGetTronChainAdapter(sellAsset.chainId),
|
|
211
|
+
transactionData: call,
|
|
212
|
+
from,
|
|
213
|
+
sellAsset,
|
|
214
|
+
sellAmountCryptoBaseUnit,
|
|
215
|
+
spenderAddress: contractAddress,
|
|
216
|
+
fallbackEnergy: RELAY_TRON_FALLBACK_DEPOSIT_ENERGY,
|
|
217
|
+
}),
|
|
183
218
|
};
|
|
184
219
|
return Ok(stepData);
|
|
185
220
|
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
};
|
|
190
|
-
return Ok(stepData);
|
|
221
|
+
catch (error) {
|
|
222
|
+
return Err(makeNetworkFeeEstimationFailedErr('getRelayStepData', error));
|
|
223
|
+
}
|
|
191
224
|
}
|
|
192
225
|
return Err(makeTradeStepBuildFailedErr('getRelayStepData'));
|
|
193
226
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|