@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
|
@@ -1,24 +1,48 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
2
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.assertValidTrade = exports.getBobGatewayAllowanceContract = exports.parseBobGatewayQuote = exports.mapBobGatewayOrderStatusToTxStatus = exports.
|
|
26
|
+
exports.assertValidTrade = exports.getBobGatewayAllowanceContract = exports.parseBobGatewayQuote = exports.mapBobGatewayOrderStatusToTxStatus = exports.submitBobGatewayBtcDeposit = exports.createBobGatewayOrder = exports.getBobGatewayQuote = exports.getBobGatewayAffiliates = exports.assetIdToBobGatewayToken = exports.getBobGatewayClient = exports.dummyAddressForChainId = void 0;
|
|
4
27
|
const bob_sdk_1 = require("@gobob/bob-sdk");
|
|
28
|
+
const bitcoin = __importStar(require("@shapeshiftoss/bitcoinjs-lib"));
|
|
5
29
|
const caip_1 = require("@shapeshiftoss/caip");
|
|
6
30
|
const chain_adapters_1 = require("@shapeshiftoss/chain-adapters");
|
|
7
31
|
const unchained_client_1 = require("@shapeshiftoss/unchained-client");
|
|
8
32
|
const utils_1 = require("@shapeshiftoss/utils");
|
|
9
33
|
const monads_1 = require("@sniptt/monads");
|
|
10
|
-
const tronweb_1 = require("tronweb");
|
|
11
34
|
const viem_1 = require("viem");
|
|
12
35
|
const constants_1 = require("../../../constants");
|
|
13
36
|
const types_1 = require("../../../types");
|
|
14
37
|
const utils_2 = require("../../../utils");
|
|
15
38
|
const helpers_1 = require("../../../utils/helpers");
|
|
39
|
+
const tron_1 = require("../../../utils/tron");
|
|
16
40
|
const constants_2 = require("./constants");
|
|
17
41
|
const dummyAddressForChainId = (chainId) => {
|
|
18
42
|
if (chainId === caip_1.btcChainId)
|
|
19
43
|
return constants_2.DUMMY_BTC_ADDRESS;
|
|
20
44
|
if (chainId === caip_1.tronChainId)
|
|
21
|
-
return
|
|
45
|
+
return tron_1.TRON_PLACEHOLDER_ADDRESS;
|
|
22
46
|
return constants_2.DUMMY_EVM_ADDRESS;
|
|
23
47
|
};
|
|
24
48
|
exports.dummyAddressForChainId = dummyAddressForChainId;
|
|
@@ -26,14 +50,6 @@ const getBobGatewayClient = (config) => {
|
|
|
26
50
|
return new bob_sdk_1.GatewaySDK({ basePath: constants_2.BOB_GATEWAY_BASE_URL, apiKey: config.VITE_BOB_GATEWAY_API_KEY });
|
|
27
51
|
};
|
|
28
52
|
exports.getBobGatewayClient = getBobGatewayClient;
|
|
29
|
-
const toTronBase58 = (address) => {
|
|
30
|
-
if (address.startsWith('T'))
|
|
31
|
-
return address;
|
|
32
|
-
if (address.startsWith('0x'))
|
|
33
|
-
return tronweb_1.TronWeb.address.fromHex(address.slice(2));
|
|
34
|
-
return tronweb_1.TronWeb.address.fromHex(address);
|
|
35
|
-
};
|
|
36
|
-
exports.toTronBase58 = toTronBase58;
|
|
37
53
|
const assetIdToBobGatewayToken = (assetId) => {
|
|
38
54
|
// BOB Gateway uses the zero address as the token address for native assets
|
|
39
55
|
if (!(0, utils_1.isToken)(assetId))
|
|
@@ -62,7 +78,6 @@ const getBobGatewayQuote = async ({ config, sellAsset, buyAsset, sellChainName,
|
|
|
62
78
|
toUserAddress: recipient,
|
|
63
79
|
amount,
|
|
64
80
|
maxSlippage: Number(slippage),
|
|
65
|
-
ownerAddress: sellChainName === 'bitcoin' ? recipient : sender,
|
|
66
81
|
refundAddress,
|
|
67
82
|
affiliates: (0, exports.getBobGatewayAffiliates)(affiliateBps),
|
|
68
83
|
});
|
|
@@ -108,7 +123,7 @@ const getBobGatewayQuote = async ({ config, sellAsset, buyAsset, sellChainName,
|
|
|
108
123
|
exports.getBobGatewayQuote = getBobGatewayQuote;
|
|
109
124
|
const createBobGatewayOrder = async (config, quote) => {
|
|
110
125
|
try {
|
|
111
|
-
const order = await (0, exports.getBobGatewayClient)(config).api.
|
|
126
|
+
const order = await (0, exports.getBobGatewayClient)(config).api.createOrderV4({ gatewayQuoteV4: quote });
|
|
112
127
|
return (0, monads_1.Ok)(order);
|
|
113
128
|
}
|
|
114
129
|
catch (err) {
|
|
@@ -127,23 +142,13 @@ const createBobGatewayOrder = async (config, quote) => {
|
|
|
127
142
|
}
|
|
128
143
|
};
|
|
129
144
|
exports.createBobGatewayOrder = createBobGatewayOrder;
|
|
130
|
-
const
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
return { onramp: { orderId, bitcoinTxid: txHash } };
|
|
136
|
-
}
|
|
137
|
-
// EVM→BTC
|
|
138
|
-
if (constants_2.chainIdToBobGatewayChainName[buyAsset.chainId] === 'bitcoin') {
|
|
139
|
-
return { offramp: { orderId, srcChain: sellChainName, srcTxHash: txHash } };
|
|
140
|
-
}
|
|
141
|
-
// EVM→EVM
|
|
142
|
-
return { tokenSwap: { orderId, srcChain: sellChainName, srcTxHash: txHash } };
|
|
143
|
-
})();
|
|
144
|
-
await (0, exports.getBobGatewayClient)(config).api.registerTxV3({ registerTxV3 });
|
|
145
|
+
const submitBobGatewayBtcDeposit = async ({ config, orderId, bitcoinTxHex, }) => {
|
|
146
|
+
await (0, exports.getBobGatewayClient)(config).api.registerTxV4({
|
|
147
|
+
registerTxV4: { onramp: { orderId, bitcoinTxHex } },
|
|
148
|
+
});
|
|
149
|
+
return bitcoin.Transaction.fromHex(bitcoinTxHex).getId();
|
|
145
150
|
};
|
|
146
|
-
exports.
|
|
151
|
+
exports.submitBobGatewayBtcDeposit = submitBobGatewayBtcDeposit;
|
|
147
152
|
const mapBobGatewayOrderStatusToTxStatus = (status) => {
|
|
148
153
|
if ('inProgress' in status)
|
|
149
154
|
return unchained_client_1.TxStatus.Pending;
|
|
@@ -166,7 +171,7 @@ const bobGatewayFeeToAssetId = (fee) => {
|
|
|
166
171
|
return (0, caip_1.toAssetId)({
|
|
167
172
|
chainId,
|
|
168
173
|
assetNamespace: caip_1.ASSET_NAMESPACE.trc20,
|
|
169
|
-
assetReference:
|
|
174
|
+
assetReference: chain_adapters_1.tron.toTronBase58(fee.address),
|
|
170
175
|
});
|
|
171
176
|
}
|
|
172
177
|
return (0, caip_1.toAssetId)({
|
|
@@ -240,7 +245,7 @@ const getBobGatewayAllowanceContract = (quote, sellAsset) => {
|
|
|
240
245
|
if (!txTo)
|
|
241
246
|
return '';
|
|
242
247
|
if (isTron)
|
|
243
|
-
return
|
|
248
|
+
return chain_adapters_1.tron.toTronBase58(txTo);
|
|
244
249
|
return txTo;
|
|
245
250
|
};
|
|
246
251
|
exports.getBobGatewayAllowanceContract = getBobGatewayAllowanceContract;
|
|
@@ -59,7 +59,7 @@ const getTradeQuote = async (input, deps) => {
|
|
|
59
59
|
});
|
|
60
60
|
if (maybeStepData.isErr())
|
|
61
61
|
return (0, monads_1.Err)(maybeStepData.unwrapErr());
|
|
62
|
-
const { networkFeeCryptoBaseUnit, transactionData
|
|
62
|
+
const { networkFeeCryptoBaseUnit, transactionData } = maybeStepData.unwrap();
|
|
63
63
|
const tradeQuote = {
|
|
64
64
|
...tradeCommon,
|
|
65
65
|
quoteOrRate: 'quote',
|
|
@@ -69,10 +69,9 @@ const getTradeQuote = async (input, deps) => {
|
|
|
69
69
|
{
|
|
70
70
|
...stepCommon,
|
|
71
71
|
accountNumber,
|
|
72
|
-
// Tron
|
|
72
|
+
// Tron routes pull the sell token from the buildTx target
|
|
73
73
|
allowanceContract: sellAsset.chainId === caip_1.tronChainId ? buildTx.to : stepCommon.allowanceContract,
|
|
74
74
|
transactionData,
|
|
75
|
-
butterSwapTransactionMetadata,
|
|
76
75
|
feeData: { networkFeeCryptoBaseUnit, protocolFees },
|
|
77
76
|
},
|
|
78
77
|
],
|
|
@@ -2,17 +2,6 @@ import type { Hex } from 'viem';
|
|
|
2
2
|
import type { GetEvmTradeQuoteInput, GetEvmTradeRateInput, GetSolanaTradeQuoteInput, GetSolanaTradeRateInput, GetTronTradeQuoteInput, GetTronTradeRateInput } from '../../types';
|
|
3
3
|
export type ButterSwapTradeQuoteInput = GetEvmTradeQuoteInput | GetSolanaTradeQuoteInput | GetTronTradeQuoteInput;
|
|
4
4
|
export type ButterSwapTradeRateInput = GetEvmTradeRateInput | GetSolanaTradeRateInput | GetTronTradeRateInput;
|
|
5
|
-
export type ButterSwapTransactionMetadata = {
|
|
6
|
-
to: string;
|
|
7
|
-
data: string;
|
|
8
|
-
value: Hex;
|
|
9
|
-
method?: string;
|
|
10
|
-
args?: {
|
|
11
|
-
type: string;
|
|
12
|
-
value: unknown;
|
|
13
|
-
}[];
|
|
14
|
-
memo?: string;
|
|
15
|
-
};
|
|
16
5
|
export type ErrorType = {
|
|
17
6
|
errno: number;
|
|
18
7
|
message: string;
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.makeButterSwapAffiliate = void 0;
|
|
3
|
+
exports.makeButterSwapAffiliate = exports.BUTTERSWAP_TRON_DEFAULT_BANDWIDTH_BYTES = exports.BUTTERSWAP_TRON_FALLBACK_SWAP_ENERGY = void 0;
|
|
4
4
|
const utils_1 = require("@shapeshiftoss/utils");
|
|
5
5
|
const BUTTERSWAP_AFFILIATE = 'shapeshift';
|
|
6
|
+
// The router's total energy per swap, before its deployer's share comes off
|
|
7
|
+
exports.BUTTERSWAP_TRON_FALLBACK_SWAP_ENERGY = '1000000';
|
|
8
|
+
exports.BUTTERSWAP_TRON_DEFAULT_BANDWIDTH_BYTES = 2400;
|
|
6
9
|
// Format is `<nickname>[:rate]`, where rate is in basis points (e.g. `shapeshift:60` = 0.6%).
|
|
7
10
|
const makeButterSwapAffiliate = (affiliateBps) => {
|
|
8
11
|
if ((0, utils_1.bnOrZero)(affiliateBps).lte(0))
|
|
@@ -2,7 +2,7 @@ import type { Asset } from '@shapeshiftoss/types';
|
|
|
2
2
|
import type { Result } from '@sniptt/monads';
|
|
3
3
|
import type { StepDataArgs, SwapErrorRight, TxBuildData } from '../../../types';
|
|
4
4
|
import type { SolanaComputeBudgetOptions } from '../../../utils/solana';
|
|
5
|
-
import type { BuildTxSuccessItem,
|
|
5
|
+
import type { BuildTxSuccessItem, RouteSuccessItem } from '../types';
|
|
6
6
|
export declare const BUTTERSWAP_SOLANA_COMPUTE_BUDGET: SolanaComputeBudgetOptions;
|
|
7
7
|
type BaseArgs = {
|
|
8
8
|
route: RouteSuccessItem;
|
|
@@ -19,8 +19,7 @@ type ButterSwapRateStepData = {
|
|
|
19
19
|
networkFeeCryptoBaseUnit: string;
|
|
20
20
|
};
|
|
21
21
|
type ButterSwapQuoteStepData = {
|
|
22
|
-
transactionData
|
|
23
|
-
butterSwapTransactionMetadata?: ButterSwapTransactionMetadata;
|
|
22
|
+
transactionData: TxBuildData;
|
|
24
23
|
networkFeeCryptoBaseUnit: string;
|
|
25
24
|
};
|
|
26
25
|
export declare function getButterSwapStepData(args: Extract<GetButterSwapStepDataArgs, {
|
|
@@ -10,6 +10,8 @@ const types_1 = require("../../../types");
|
|
|
10
10
|
const utils_2 = require("../../../utils");
|
|
11
11
|
const evm_1 = require("../../../utils/evm");
|
|
12
12
|
const solana_1 = require("../../../utils/solana");
|
|
13
|
+
const tron_1 = require("../../../utils/tron");
|
|
14
|
+
const constants_1 = require("./constants");
|
|
13
15
|
const helpers_1 = require("./helpers");
|
|
14
16
|
// Jupiter swap legs can consume more units than simulated when pool state moves between
|
|
15
17
|
// simulation and landing (CLMM tick crossings), 1.4 matches Jupiter's dynamicComputeUnitLimit margin
|
|
@@ -117,26 +119,52 @@ async function getButterSwapStepData(args) {
|
|
|
117
119
|
return (0, monads_1.Err)((0, utils_2.makeTradeStepBuildFailedErr)('getButterSwapStepData', error));
|
|
118
120
|
}
|
|
119
121
|
}
|
|
120
|
-
// Not yet migrated to a TxBuildData variant - exec still builds from legacy metadata
|
|
121
122
|
case caip_1.CHAIN_NAMESPACE.Tron: {
|
|
122
|
-
const
|
|
123
|
+
const adapter = deps.assertGetTronChainAdapter(sellAsset.chainId);
|
|
123
124
|
if (args.type === 'rate') {
|
|
125
|
+
// Butter's gasFee is a fraction of what the router burns, so rates price the measured swap at the router's share
|
|
126
|
+
const networkFeeCryptoBaseUnit = await (async () => {
|
|
127
|
+
if (!route.contract)
|
|
128
|
+
return (0, helpers_1.getProviderNetworkFeeCryptoBaseUnit)({ route, feeAsset });
|
|
129
|
+
try {
|
|
130
|
+
return await (0, tron_1.getTronContractCallFallbackFeeCryptoBaseUnit)({
|
|
131
|
+
adapter,
|
|
132
|
+
energy: constants_1.BUTTERSWAP_TRON_FALLBACK_SWAP_ENERGY,
|
|
133
|
+
bandwidthBytes: constants_1.BUTTERSWAP_TRON_DEFAULT_BANDWIDTH_BYTES,
|
|
134
|
+
contractAddress: route.contract,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
return (0, helpers_1.getProviderNetworkFeeCryptoBaseUnit)({ route, feeAsset });
|
|
139
|
+
}
|
|
140
|
+
})();
|
|
124
141
|
const stepData = { networkFeeCryptoBaseUnit };
|
|
125
142
|
return (0, monads_1.Ok)(stepData);
|
|
126
143
|
}
|
|
127
|
-
const { buildTx } = args;
|
|
128
|
-
const
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
value: buildTx.value,
|
|
133
|
-
method: buildTx.method,
|
|
134
|
-
args: buildTx.args,
|
|
135
|
-
memo: buildTx.memo,
|
|
136
|
-
},
|
|
137
|
-
networkFeeCryptoBaseUnit,
|
|
144
|
+
const { buildTx, from } = args;
|
|
145
|
+
const call = {
|
|
146
|
+
to: buildTx.to,
|
|
147
|
+
data: buildTx.data,
|
|
148
|
+
value: (0, viem_1.fromHex)(buildTx.value, 'bigint').toString(),
|
|
138
149
|
};
|
|
139
|
-
|
|
150
|
+
try {
|
|
151
|
+
const stepData = {
|
|
152
|
+
transactionData: { type: 'tron', ...call },
|
|
153
|
+
networkFeeCryptoBaseUnit: await (0, tron_1.getTronContractCallNetworkFeeCryptoBaseUnit)({
|
|
154
|
+
adapter,
|
|
155
|
+
transactionData: call,
|
|
156
|
+
from,
|
|
157
|
+
sellAsset,
|
|
158
|
+
sellAmountCryptoBaseUnit,
|
|
159
|
+
spenderAddress: buildTx.to,
|
|
160
|
+
fallbackEnergy: constants_1.BUTTERSWAP_TRON_FALLBACK_SWAP_ENERGY,
|
|
161
|
+
}),
|
|
162
|
+
};
|
|
163
|
+
return (0, monads_1.Ok)(stepData);
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
return (0, monads_1.Err)((0, utils_2.makeNetworkFeeEstimationFailedErr)('getButterSwapStepData', error));
|
|
167
|
+
}
|
|
140
168
|
}
|
|
141
169
|
default:
|
|
142
170
|
return (0, monads_1.Err)((0, utils_2.makeSwapErrorRight)({
|
|
@@ -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: () => {
|
|
@@ -155,36 +161,133 @@ const evmQuoteInput = { supportsEIP1559: false };
|
|
|
155
161
|
});
|
|
156
162
|
});
|
|
157
163
|
(0, vitest_1.describe)('tron', () => {
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
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
|
+
},
|
|
177
|
+
});
|
|
178
|
+
(0, vitest_1.it)('carries the router call as transactionData and simulates it', async () => {
|
|
179
|
+
const adapter = tronAdapter();
|
|
180
|
+
const actual = await (0, getButterSwapStepData_1.getButterSwapStepData)({
|
|
181
|
+
type: 'quote',
|
|
182
|
+
input: {},
|
|
183
|
+
from: 'TSenderAddress',
|
|
184
|
+
buildTx: tronBuildTx,
|
|
185
|
+
deps: makeDeps({ tron: adapter }),
|
|
186
|
+
route,
|
|
187
|
+
sellAsset: TRX,
|
|
188
|
+
feeAsset: TRX,
|
|
189
|
+
sellAmountCryptoBaseUnit: '1000000',
|
|
190
|
+
spenderAddress: '',
|
|
191
|
+
});
|
|
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',
|
|
161
195
|
to: 'TRouterAddress',
|
|
162
|
-
|
|
163
|
-
|
|
196
|
+
data: evmBuildTx.data,
|
|
197
|
+
value: '100000000000000000',
|
|
164
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 },
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
(0, vitest_1.it)('uses the provider value for a token sell', async () => {
|
|
165
207
|
const actual = await (0, getButterSwapStepData_1.getButterSwapStepData)({
|
|
166
208
|
type: 'quote',
|
|
167
209
|
input: {},
|
|
168
210
|
from: 'TSenderAddress',
|
|
169
|
-
buildTx,
|
|
170
|
-
deps: {},
|
|
211
|
+
buildTx: { ...tronBuildTx, value: '0x00' },
|
|
212
|
+
deps: makeDeps({ tron: tronAdapter() }),
|
|
213
|
+
route,
|
|
214
|
+
sellAsset: USDT_TRON,
|
|
215
|
+
feeAsset: TRX,
|
|
216
|
+
sellAmountCryptoBaseUnit: '1000000',
|
|
217
|
+
spenderAddress: '',
|
|
218
|
+
});
|
|
219
|
+
(0, vitest_1.expect)(actual.unwrap().transactionData).toMatchObject({ value: '0' });
|
|
220
|
+
});
|
|
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'));
|
|
224
|
+
const actual = await (0, getButterSwapStepData_1.getButterSwapStepData)({
|
|
225
|
+
type: 'quote',
|
|
226
|
+
input: {},
|
|
227
|
+
from: 'TSenderAddress',
|
|
228
|
+
buildTx: tronBuildTx,
|
|
229
|
+
deps: makeDeps({ tron: adapter }),
|
|
171
230
|
route,
|
|
172
231
|
sellAsset: TRX,
|
|
173
232
|
feeAsset: TRX,
|
|
174
233
|
sellAmountCryptoBaseUnit: '1000000',
|
|
175
234
|
spenderAddress: '',
|
|
176
235
|
});
|
|
177
|
-
(0, vitest_1.expect)(actual.
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
},
|
|
236
|
+
(0, vitest_1.expect)(actual.isErr()).toBe(true);
|
|
237
|
+
});
|
|
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'));
|
|
241
|
+
const actual = await (0, getButterSwapStepData_1.getButterSwapStepData)({
|
|
242
|
+
type: 'quote',
|
|
243
|
+
input: {},
|
|
244
|
+
from: 'TSenderAddress',
|
|
245
|
+
buildTx: { ...tronBuildTx, value: '0x00' },
|
|
246
|
+
deps: makeDeps({ tron: adapter }),
|
|
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' },
|
|
268
|
+
sellAsset: TRX,
|
|
269
|
+
feeAsset: TRX,
|
|
270
|
+
sellAmountCryptoBaseUnit: '1000000',
|
|
271
|
+
spenderAddress: '',
|
|
272
|
+
});
|
|
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: '',
|
|
187
289
|
});
|
|
290
|
+
(0, vitest_1.expect)(actual.unwrap()).toEqual({ networkFeeCryptoBaseUnit: PROVIDER_GAS_FEE_BASE_UNIT });
|
|
188
291
|
});
|
|
189
292
|
});
|
|
190
293
|
(0, vitest_1.it)('errors on an unsupported chain namespace', async () => {
|
|
@@ -46,8 +46,7 @@ const assertValidTrade = ({ sellAsset, }) => {
|
|
|
46
46
|
return (0, monads_1.Ok)(undefined);
|
|
47
47
|
};
|
|
48
48
|
exports.assertValidTrade = assertValidTrade;
|
|
49
|
-
// Provider reported network fee - the
|
|
50
|
-
// un-migrated tron quote path (exec computes the real fee at execution)
|
|
49
|
+
// Provider reported network fee - the fallback when estimation fails
|
|
51
50
|
const getProviderNetworkFeeCryptoBaseUnit = ({ route, feeAsset, }) => {
|
|
52
51
|
if ((0, utils_1.bnOrZero)(route.gasFee?.amount).lte(0))
|
|
53
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;
|