@shapeshiftoss/swapper 9.15.0 → 9.16.1
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/manager/SwapperManager.js +3 -3
- package/dist/swappercli.js +8 -8
- package/dist/swappers/cow/CowSwapper.d.ts +2 -2
- package/dist/swappers/cow/CowSwapper.js +4 -6
- package/dist/swappers/cow/cowApprovalNeeded/cowApprovalNeeded.js +4 -4
- package/dist/swappers/cow/{cowApproveInfinite/cowApproveInfinite.d.ts → cowApprove/cowApprove.d.ts} +2 -1
- package/dist/swappers/cow/cowApprove/cowApprove.js +56 -0
- package/dist/swappers/cow/cowBuildTrade/cowBuildTrade.js +11 -11
- package/dist/swappers/cow/cowExecuteTrade/cowExecuteTrade.js +7 -7
- package/dist/swappers/cow/cowGetTradeTxs/cowGetTradeTxs.js +4 -4
- package/dist/swappers/cow/getCowSwapMinMax/getCowSwapMinMax.js +1 -1
- package/dist/swappers/cow/getCowSwapTradeQuote/getCowSwapTradeQuote.js +12 -12
- package/dist/swappers/cow/utils/blacklist.js +1 -1
- package/dist/swappers/cow/utils/cowService.js +2 -2
- package/dist/swappers/cow/utils/helpers/helpers.js +7 -7
- package/dist/swappers/osmosis/OsmosisSwapper.js +20 -20
- package/dist/swappers/osmosis/utils/helpers.d.ts +1 -1
- package/dist/swappers/osmosis/utils/helpers.js +35 -35
- package/dist/swappers/test/TestSwapper.js +2 -2
- package/dist/swappers/thorchain/ThorchainSwapper.js +13 -13
- package/dist/swappers/thorchain/buildThorTrade/buildThorTrade.d.ts +1 -1
- package/dist/swappers/thorchain/buildThorTrade/buildThorTrade.js +14 -14
- package/dist/swappers/thorchain/getThorTradeQuote/getTradeQuote.js +14 -14
- package/dist/swappers/thorchain/thorTradeApprovalNeeded/thorTradeApprovalNeeded.d.ts +1 -1
- package/dist/swappers/thorchain/thorTradeApprovalNeeded/thorTradeApprovalNeeded.js +7 -7
- package/dist/swappers/thorchain/thorTradeApproveInfinite/thorTradeApproveInfinite.d.ts +1 -1
- package/dist/swappers/thorchain/thorTradeApproveInfinite/thorTradeApproveInfinite.js +7 -7
- package/dist/swappers/thorchain/utils/bitcoin/utils/getThorTxData.js +5 -5
- package/dist/swappers/thorchain/utils/constants.js +1 -1
- package/dist/swappers/thorchain/utils/cosmos/cosmosTxData.js +6 -6
- package/dist/swappers/thorchain/utils/estimateTradeFee/estimateTradeFee.js +6 -6
- package/dist/swappers/thorchain/utils/ethereum/makeTradeTx.d.ts +1 -1
- package/dist/swappers/thorchain/utils/ethereum/makeTradeTx.js +6 -6
- package/dist/swappers/thorchain/utils/ethereum/utils/getThorTxData.js +5 -5
- package/dist/swappers/thorchain/utils/getLimit/getLimit.d.ts +1 -1
- package/dist/swappers/thorchain/utils/getLimit/getLimit.js +2 -2
- package/dist/swappers/thorchain/utils/getPriceRatio/getPriceRatio.js +3 -3
- package/dist/swappers/thorchain/utils/getTradeRate/getTradeRate.js +5 -5
- package/dist/swappers/thorchain/utils/getUsdRate/getUsdRate.d.ts +1 -1
- package/dist/swappers/thorchain/utils/getUsdRate/getUsdRate.js +4 -4
- package/dist/swappers/thorchain/utils/makeSwapMemo/makeSwapMemo.d.ts +1 -1
- package/dist/swappers/thorchain/utils/makeSwapMemo/makeSwapMemo.js +4 -4
- package/dist/swappers/thorchain/utils/test-data/midgardResponse.js +11 -11
- package/dist/swappers/thorchain/utils/test-data/setupThorswapDeps.js +9 -9
- package/dist/swappers/thorchain/utils/thorService.js +2 -2
- package/dist/swappers/thorchain/utils/txFeeHelpers/btcTxFees/getBtcTxFees.d.ts +1 -1
- package/dist/swappers/thorchain/utils/txFeeHelpers/btcTxFees/getBtcTxFees.js +4 -4
- package/dist/swappers/thorchain/utils/txFeeHelpers/ethTxFees/getEthTxFees.d.ts +1 -1
- package/dist/swappers/thorchain/utils/txFeeHelpers/ethTxFees/getEthTxFees.js +7 -7
- package/dist/swappers/utils/abi/erc20-abi.js +54 -54
- package/dist/swappers/utils/abi/erc20Allowance-abi.js +7 -7
- package/dist/swappers/utils/helpers/helpers.d.ts +4 -4
- package/dist/swappers/utils/helpers/helpers.js +13 -13
- package/dist/swappers/utils/test-data/assets.js +8 -8
- package/dist/swappers/utils/test-data/setupDeps.js +3 -3
- package/dist/swappers/utils/test-data/setupSwapQuote.js +3 -3
- package/dist/swappers/zrx/ZrxSwapper.js +2 -2
- package/dist/swappers/zrx/getZrxMinMax/getZrxMinMax.js +1 -1
- package/dist/swappers/zrx/getZrxTradeQuote/getZrxTradeQuote.js +7 -7
- package/dist/swappers/zrx/utils/blacklist.js +1 -1
- package/dist/swappers/zrx/utils/helpers/helpers.js +6 -6
- package/dist/swappers/zrx/utils/test-data/setupZrxSwapQuote.js +2 -2
- package/dist/swappers/zrx/utils/zrxService.js +2 -2
- package/dist/swappers/zrx/zrxApprovalNeeded/zrxApprovalNeeded.js +6 -6
- package/dist/swappers/zrx/zrxApprove/zrxApprove.js +6 -6
- package/dist/swappers/zrx/zrxBuildTrade/zrxBuildTrade.js +13 -11
- package/dist/swappers/zrx/zrxExecuteTrade/zrxExecuteTrade.js +6 -6
- package/package.json +1 -1
- package/dist/swappers/cow/cowApproveInfinite/cowApproveInfinite.js +0 -31
|
@@ -13,10 +13,10 @@ const getTradeRate_1 = require("../utils/getTradeRate/getTradeRate");
|
|
|
13
13
|
const getBtcTxFees_1 = require("../utils/txFeeHelpers/btcTxFees/getBtcTxFees");
|
|
14
14
|
const getEthTxFees_1 = require("../utils/txFeeHelpers/ethTxFees/getEthTxFees");
|
|
15
15
|
const getThorTradeQuote = async ({ deps, input }) => {
|
|
16
|
-
const { sellAsset, buyAsset, sellAmount, sellAssetAccountNumber, wallet, chainId, receiveAddress } = input;
|
|
16
|
+
const { sellAsset, buyAsset, sellAmount, sellAssetAccountNumber, wallet, chainId, receiveAddress, } = input;
|
|
17
17
|
if (!wallet)
|
|
18
18
|
throw new api_1.SwapError('[getThorTradeQuote] - wallet is required', {
|
|
19
|
-
code: api_1.SwapErrorTypes.VALIDATION_FAILED
|
|
19
|
+
code: api_1.SwapErrorTypes.VALIDATION_FAILED,
|
|
20
20
|
});
|
|
21
21
|
try {
|
|
22
22
|
const { assetReference: sellAssetErc20Address } = (0, caip_1.fromAssetId)(sellAsset.assetId);
|
|
@@ -24,7 +24,7 @@ const getThorTradeQuote = async ({ deps, input }) => {
|
|
|
24
24
|
if (!sellAdapter)
|
|
25
25
|
throw new api_1.SwapError(`[getThorTradeQuote] - No chain adapter found for ${chainId}.`, {
|
|
26
26
|
code: api_1.SwapErrorTypes.UNSUPPORTED_CHAIN,
|
|
27
|
-
details: { chainId }
|
|
27
|
+
details: { chainId },
|
|
28
28
|
});
|
|
29
29
|
const rate = await (0, getTradeRate_1.getTradeRate)(sellAsset, buyAsset.assetId, sellAmount, deps);
|
|
30
30
|
const buyAmount = (0, bignumber_1.toBaseUnit)((0, bignumber_1.bnOrZero)((0, bignumber_1.fromBaseUnit)(sellAmount, sellAsset.precision)).times(rate), buyAsset.precision);
|
|
@@ -42,7 +42,7 @@ const getThorTradeQuote = async ({ deps, input }) => {
|
|
|
42
42
|
buyAsset,
|
|
43
43
|
sellAsset,
|
|
44
44
|
sellAssetAccountNumber,
|
|
45
|
-
minimum
|
|
45
|
+
minimum,
|
|
46
46
|
};
|
|
47
47
|
const { chainNamespace } = (0, caip_1.fromAssetId)(sellAsset.assetId);
|
|
48
48
|
switch (chainNamespace) {
|
|
@@ -55,17 +55,17 @@ const getThorTradeQuote = async ({ deps, input }) => {
|
|
|
55
55
|
sellAmount,
|
|
56
56
|
slippageTolerance: constants_1.DEFAULT_SLIPPAGE,
|
|
57
57
|
destinationAddress: receiveAddress,
|
|
58
|
-
tradeFee
|
|
58
|
+
tradeFee,
|
|
59
59
|
});
|
|
60
60
|
const feeData = await (0, getEthTxFees_1.getEthTxFees)({
|
|
61
61
|
adapterManager: deps.adapterManager,
|
|
62
62
|
sellAssetReference: sellAssetErc20Address,
|
|
63
|
-
tradeFee
|
|
63
|
+
tradeFee,
|
|
64
64
|
});
|
|
65
65
|
return {
|
|
66
66
|
...commonQuoteFields,
|
|
67
67
|
allowanceContract: router,
|
|
68
|
-
feeData
|
|
68
|
+
feeData,
|
|
69
69
|
};
|
|
70
70
|
})();
|
|
71
71
|
case caip_1.CHAIN_NAMESPACE.Bitcoin:
|
|
@@ -80,7 +80,7 @@ const getThorTradeQuote = async ({ deps, input }) => {
|
|
|
80
80
|
wallet,
|
|
81
81
|
bip44Params: input.bip44Params,
|
|
82
82
|
accountType: input.accountType,
|
|
83
|
-
tradeFee
|
|
83
|
+
tradeFee,
|
|
84
84
|
});
|
|
85
85
|
const feeData = await (0, getBtcTxFees_1.getBtcTxFees)({
|
|
86
86
|
sellAmount,
|
|
@@ -88,12 +88,12 @@ const getThorTradeQuote = async ({ deps, input }) => {
|
|
|
88
88
|
opReturnData,
|
|
89
89
|
pubkey,
|
|
90
90
|
sellAdapter: sellAdapter,
|
|
91
|
-
tradeFee
|
|
91
|
+
tradeFee,
|
|
92
92
|
});
|
|
93
93
|
return {
|
|
94
94
|
...commonQuoteFields,
|
|
95
95
|
allowanceContract: '0x0',
|
|
96
|
-
feeData
|
|
96
|
+
feeData,
|
|
97
97
|
};
|
|
98
98
|
})();
|
|
99
99
|
case caip_1.CHAIN_NAMESPACE.Cosmos:
|
|
@@ -105,14 +105,14 @@ const getThorTradeQuote = async ({ deps, input }) => {
|
|
|
105
105
|
feeData: {
|
|
106
106
|
fee: feeData.fast.txFee,
|
|
107
107
|
tradeFee,
|
|
108
|
-
chainSpecific: { estimatedGas: feeData.fast.chainSpecific.gasLimit }
|
|
109
|
-
}
|
|
108
|
+
chainSpecific: { estimatedGas: feeData.fast.chainSpecific.gasLimit },
|
|
109
|
+
},
|
|
110
110
|
};
|
|
111
111
|
})();
|
|
112
112
|
default:
|
|
113
113
|
throw new api_1.SwapError('[getThorTradeQuote] - Asset chainId is not supported.', {
|
|
114
114
|
code: api_1.SwapErrorTypes.UNSUPPORTED_CHAIN,
|
|
115
|
-
details: { chainId }
|
|
115
|
+
details: { chainId },
|
|
116
116
|
});
|
|
117
117
|
}
|
|
118
118
|
}
|
|
@@ -121,7 +121,7 @@ const getThorTradeQuote = async ({ deps, input }) => {
|
|
|
121
121
|
throw e;
|
|
122
122
|
throw new api_1.SwapError('[getThorTradeQuote]', {
|
|
123
123
|
cause: e,
|
|
124
|
-
code: api_1.SwapErrorTypes.TRADE_QUOTE_FAILED
|
|
124
|
+
code: api_1.SwapErrorTypes.TRADE_QUOTE_FAILED,
|
|
125
125
|
});
|
|
126
126
|
}
|
|
127
127
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { KnownChainIds } from '@shapeshiftoss/types';
|
|
2
2
|
import { ApprovalNeededInput, ApprovalNeededOutput } from '../../../api';
|
|
3
3
|
import { ThorchainSwapperDeps } from '../types';
|
|
4
|
-
export declare const thorTradeApprovalNeeded: ({ deps, input }: {
|
|
4
|
+
export declare const thorTradeApprovalNeeded: ({ deps, input, }: {
|
|
5
5
|
deps: ThorchainSwapperDeps;
|
|
6
6
|
input: ApprovalNeededInput<KnownChainIds.EthereumMainnet>;
|
|
7
7
|
}) => Promise<ApprovalNeededOutput>;
|
|
@@ -6,7 +6,7 @@ const api_1 = require("../../../api");
|
|
|
6
6
|
const erc20Allowance_abi_1 = require("../../utils/abi/erc20Allowance-abi");
|
|
7
7
|
const bignumber_1 = require("../../utils/bignumber");
|
|
8
8
|
const helpers_1 = require("../../utils/helpers/helpers");
|
|
9
|
-
const thorTradeApprovalNeeded = async ({ deps, input }) => {
|
|
9
|
+
const thorTradeApprovalNeeded = async ({ deps, input, }) => {
|
|
10
10
|
var _a;
|
|
11
11
|
try {
|
|
12
12
|
const { quote, wallet } = input;
|
|
@@ -21,7 +21,7 @@ const thorTradeApprovalNeeded = async ({ deps, input }) => {
|
|
|
21
21
|
if (!adapter)
|
|
22
22
|
throw new api_1.SwapError(`[thorTradeApprovalNeeded] - no chain adapter found for chain Id: ${sellAsset.chainId}`, {
|
|
23
23
|
code: api_1.SwapErrorTypes.UNSUPPORTED_CHAIN,
|
|
24
|
-
details: { chainId: sellAsset.chainId }
|
|
24
|
+
details: { chainId: sellAsset.chainId },
|
|
25
25
|
});
|
|
26
26
|
// No approval needed for selling a fee asset
|
|
27
27
|
if (sellAsset.assetId === adapter.getFeeAssetId()) {
|
|
@@ -32,7 +32,7 @@ const thorTradeApprovalNeeded = async ({ deps, input }) => {
|
|
|
32
32
|
if (!quote.allowanceContract) {
|
|
33
33
|
throw new api_1.SwapError('[thorTradeApprovalNeeded] - allowanceTarget is required', {
|
|
34
34
|
code: api_1.SwapErrorTypes.VALIDATION_FAILED,
|
|
35
|
-
details: { chainId: sellAsset.chainId }
|
|
35
|
+
details: { chainId: sellAsset.chainId },
|
|
36
36
|
});
|
|
37
37
|
}
|
|
38
38
|
const allowanceResult = await (0, helpers_1.getERC20Allowance)({
|
|
@@ -40,16 +40,16 @@ const thorTradeApprovalNeeded = async ({ deps, input }) => {
|
|
|
40
40
|
erc20AllowanceAbi: erc20Allowance_abi_1.erc20AllowanceAbi,
|
|
41
41
|
sellAssetErc20Address,
|
|
42
42
|
spenderAddress: quote.allowanceContract,
|
|
43
|
-
ownerAddress: receiveAddress
|
|
43
|
+
ownerAddress: receiveAddress,
|
|
44
44
|
});
|
|
45
45
|
const allowanceOnChain = (0, bignumber_1.bnOrZero)(allowanceResult);
|
|
46
46
|
if (!((_a = quote.feeData.chainSpecific) === null || _a === void 0 ? void 0 : _a.gasPrice))
|
|
47
47
|
throw new api_1.SwapError('[thorTradeApprovalNeeded] - no gas price with quote', {
|
|
48
48
|
code: api_1.SwapErrorTypes.RESPONSE_ERROR,
|
|
49
|
-
details: { feeData: quote.feeData }
|
|
49
|
+
details: { feeData: quote.feeData },
|
|
50
50
|
});
|
|
51
51
|
return {
|
|
52
|
-
approvalNeeded: allowanceOnChain.lte((0, bignumber_1.bnOrZero)(quote.sellAmount))
|
|
52
|
+
approvalNeeded: allowanceOnChain.lte((0, bignumber_1.bnOrZero)(quote.sellAmount)),
|
|
53
53
|
};
|
|
54
54
|
}
|
|
55
55
|
catch (e) {
|
|
@@ -57,7 +57,7 @@ const thorTradeApprovalNeeded = async ({ deps, input }) => {
|
|
|
57
57
|
throw e;
|
|
58
58
|
throw new api_1.SwapError('[thorTradeApprovalNeeded]', {
|
|
59
59
|
cause: e,
|
|
60
|
-
code: api_1.SwapErrorTypes.CHECK_APPROVAL_FAILED
|
|
60
|
+
code: api_1.SwapErrorTypes.CHECK_APPROVAL_FAILED,
|
|
61
61
|
});
|
|
62
62
|
}
|
|
63
63
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { KnownChainIds } from '@shapeshiftoss/types';
|
|
2
2
|
import { ApproveInfiniteInput } from '../../../api';
|
|
3
3
|
import { ThorchainSwapperDeps } from '../types';
|
|
4
|
-
export declare const thorTradeApproveInfinite: ({ deps, input }: {
|
|
4
|
+
export declare const thorTradeApproveInfinite: ({ deps, input, }: {
|
|
5
5
|
deps: ThorchainSwapperDeps;
|
|
6
6
|
input: ApproveInfiniteInput<KnownChainIds.EthereumMainnet>;
|
|
7
7
|
}) => Promise<string>;
|
|
@@ -7,7 +7,7 @@ const erc20_abi_1 = require("../../utils/abi/erc20-abi");
|
|
|
7
7
|
const constants_1 = require("../../utils/constants");
|
|
8
8
|
const helpers_1 = require("../../utils/helpers/helpers");
|
|
9
9
|
const constants_2 = require("../utils/constants");
|
|
10
|
-
const thorTradeApproveInfinite = async ({ deps, input }) => {
|
|
10
|
+
const thorTradeApproveInfinite = async ({ deps, input, }) => {
|
|
11
11
|
try {
|
|
12
12
|
const { adapterManager, web3 } = deps;
|
|
13
13
|
const { quote, wallet } = input;
|
|
@@ -20,23 +20,23 @@ const thorTradeApproveInfinite = async ({ deps, input }) => {
|
|
|
20
20
|
...quote.feeData.chainSpecific,
|
|
21
21
|
// Thor approvals are cheaper than trades, but we don't have dynamic quote data for them.
|
|
22
22
|
// Instead, we use a hardcoded gasLimit estimate in place of the estimatedGas in the Thor quote response.
|
|
23
|
-
estimatedGas: constants_1.APPROVAL_GAS_LIMIT
|
|
24
|
-
}
|
|
25
|
-
}
|
|
23
|
+
estimatedGas: constants_1.APPROVAL_GAS_LIMIT,
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
26
|
};
|
|
27
27
|
const sellAssetChainId = approvalQuote.sellAsset.chainId;
|
|
28
28
|
const adapter = adapterManager.get(types_1.KnownChainIds.EthereumMainnet);
|
|
29
29
|
if (!adapter)
|
|
30
30
|
throw new api_1.SwapError(`[thorTradeApproveInfinite] - No chain adapter found for ${sellAssetChainId}.`, {
|
|
31
31
|
code: api_1.SwapErrorTypes.UNSUPPORTED_CHAIN,
|
|
32
|
-
details: { sellAssetChainId }
|
|
32
|
+
details: { sellAssetChainId },
|
|
33
33
|
});
|
|
34
34
|
const allowanceGrantRequired = await (0, helpers_1.grantAllowance)({
|
|
35
35
|
quote: approvalQuote,
|
|
36
36
|
wallet,
|
|
37
37
|
adapter,
|
|
38
38
|
erc20Abi: erc20_abi_1.erc20Abi,
|
|
39
|
-
web3
|
|
39
|
+
web3,
|
|
40
40
|
});
|
|
41
41
|
return allowanceGrantRequired;
|
|
42
42
|
}
|
|
@@ -45,7 +45,7 @@ const thorTradeApproveInfinite = async ({ deps, input }) => {
|
|
|
45
45
|
throw e;
|
|
46
46
|
throw new api_1.SwapError('[zrxApproveInfinite]', {
|
|
47
47
|
cause: e,
|
|
48
|
-
code: api_1.SwapErrorTypes.APPROVE_INFINITE_FAILED
|
|
48
|
+
code: api_1.SwapErrorTypes.APPROVE_INFINITE_FAILED,
|
|
49
49
|
});
|
|
50
50
|
}
|
|
51
51
|
};
|
|
@@ -5,7 +5,7 @@ const api_1 = require("../../../../../api");
|
|
|
5
5
|
const getLimit_1 = require("../../getLimit/getLimit");
|
|
6
6
|
const makeSwapMemo_1 = require("../../makeSwapMemo/makeSwapMemo");
|
|
7
7
|
const thorService_1 = require("../../thorService");
|
|
8
|
-
const getThorTxInfo = async ({ deps, sellAsset, buyAsset, sellAmount, slippageTolerance, destinationAddress, wallet, bip44Params, accountType, tradeFee }) => {
|
|
8
|
+
const getThorTxInfo = async ({ deps, sellAsset, buyAsset, sellAmount, slippageTolerance, destinationAddress, wallet, bip44Params, accountType, tradeFee, }) => {
|
|
9
9
|
try {
|
|
10
10
|
const { data: inboundAddresses } = await thorService_1.thorService.get(`${deps.midgardUrl}/thorchain/inbound_addresses`);
|
|
11
11
|
const sellAssetInboundAddresses = inboundAddresses.find((inbound) => inbound.chain === sellAsset.symbol.toUpperCase());
|
|
@@ -13,7 +13,7 @@ const getThorTxInfo = async ({ deps, sellAsset, buyAsset, sellAmount, slippageTo
|
|
|
13
13
|
if (!vault)
|
|
14
14
|
throw new api_1.SwapError(`[getThorTxInfo]: vault not found for asset`, {
|
|
15
15
|
code: api_1.SwapErrorTypes.RESPONSE_ERROR,
|
|
16
|
-
details: { inboundAddresses, sellAsset }
|
|
16
|
+
details: { inboundAddresses, sellAsset },
|
|
17
17
|
});
|
|
18
18
|
const limit = await (0, getLimit_1.getLimit)({
|
|
19
19
|
buyAssetId: buyAsset.assetId,
|
|
@@ -23,19 +23,19 @@ const getThorTxInfo = async ({ deps, sellAsset, buyAsset, sellAmount, slippageTo
|
|
|
23
23
|
buyAsset,
|
|
24
24
|
slippageTolerance,
|
|
25
25
|
deps,
|
|
26
|
-
tradeFee
|
|
26
|
+
tradeFee,
|
|
27
27
|
});
|
|
28
28
|
const memo = (0, makeSwapMemo_1.makeSwapMemo)({
|
|
29
29
|
buyAssetId: buyAsset.assetId,
|
|
30
30
|
destinationAddress,
|
|
31
|
-
limit
|
|
31
|
+
limit,
|
|
32
32
|
});
|
|
33
33
|
const adapter = deps.adapterManager.get(sellAsset.chainId);
|
|
34
34
|
const pubkey = await adapter.getPublicKey(wallet, bip44Params, accountType);
|
|
35
35
|
return {
|
|
36
36
|
opReturnData: memo,
|
|
37
37
|
vault,
|
|
38
|
-
pubkey: pubkey.xpub
|
|
38
|
+
pubkey: pubkey.xpub,
|
|
39
39
|
};
|
|
40
40
|
}
|
|
41
41
|
catch (e) {
|
|
@@ -22,5 +22,5 @@ exports.THOR_TRADE_FEE_MULTIPLIERS = {
|
|
|
22
22
|
[types_1.KnownChainIds.LitecoinMainnet]: (0, bignumber_1.bn)(0.000005),
|
|
23
23
|
[types_1.KnownChainIds.BitcoinCashMainnet]: (0, bignumber_1.bn)(0.00003),
|
|
24
24
|
[types_1.KnownChainIds.CosmosMainnet]: (0, bignumber_1.bn)(0.00000002),
|
|
25
|
-
[types_1.KnownChainIds.EthereumMainnet]: (0, bignumber_1.bn)(0.00024) // A value that "works". Discord recommended value (80,000 gas * 2 or 160k) is often too low
|
|
25
|
+
[types_1.KnownChainIds.EthereumMainnet]: (0, bignumber_1.bn)(0.00024), // A value that "works". Discord recommended value (80,000 gas * 2 or 160k) is often too low
|
|
26
26
|
};
|
|
@@ -6,7 +6,7 @@ const getLimit_1 = require("../getLimit/getLimit");
|
|
|
6
6
|
const makeSwapMemo_1 = require("../makeSwapMemo/makeSwapMemo");
|
|
7
7
|
const thorService_1 = require("../thorService");
|
|
8
8
|
const cosmosTxData = async (input) => {
|
|
9
|
-
const { deps, destinationAddress, sellAmount, sellAsset, buyAsset, slippageTolerance, quote, wallet, sellAdapter } = input;
|
|
9
|
+
const { deps, destinationAddress, sellAmount, sellAsset, buyAsset, slippageTolerance, quote, wallet, sellAdapter, } = input;
|
|
10
10
|
const { data: inboundAddresses } = await thorService_1.thorService.get(`${deps.midgardUrl}/thorchain/inbound_addresses`);
|
|
11
11
|
const atomInboundAddresses = inboundAddresses.find((inbound) => inbound.chain === 'GAIA');
|
|
12
12
|
const vault = atomInboundAddresses === null || atomInboundAddresses === void 0 ? void 0 : atomInboundAddresses.address;
|
|
@@ -14,7 +14,7 @@ const cosmosTxData = async (input) => {
|
|
|
14
14
|
throw new api_1.SwapError('[buildTrade]: no vault for chain', {
|
|
15
15
|
code: api_1.SwapErrorTypes.BUILD_TRADE_FAILED,
|
|
16
16
|
fn: 'buildTrade',
|
|
17
|
-
details: { chainId: input.chainId }
|
|
17
|
+
details: { chainId: input.chainId },
|
|
18
18
|
});
|
|
19
19
|
const limit = await (0, getLimit_1.getLimit)({
|
|
20
20
|
buyAssetId: buyAsset.assetId,
|
|
@@ -24,12 +24,12 @@ const cosmosTxData = async (input) => {
|
|
|
24
24
|
buyAsset,
|
|
25
25
|
slippageTolerance,
|
|
26
26
|
deps,
|
|
27
|
-
tradeFee: quote.feeData.tradeFee
|
|
27
|
+
tradeFee: quote.feeData.tradeFee,
|
|
28
28
|
});
|
|
29
29
|
const memo = (0, makeSwapMemo_1.makeSwapMemo)({
|
|
30
30
|
buyAssetId: buyAsset.assetId,
|
|
31
31
|
destinationAddress,
|
|
32
|
-
limit
|
|
32
|
+
limit,
|
|
33
33
|
});
|
|
34
34
|
const buildTxResponse = await sellAdapter.buildSendTransaction({
|
|
35
35
|
value: sellAmount,
|
|
@@ -38,8 +38,8 @@ const cosmosTxData = async (input) => {
|
|
|
38
38
|
memo,
|
|
39
39
|
chainSpecific: {
|
|
40
40
|
gas: quote.feeData.chainSpecific.estimatedGas,
|
|
41
|
-
fee: quote.feeData.fee
|
|
42
|
-
}
|
|
41
|
+
fee: quote.feeData.fee,
|
|
42
|
+
},
|
|
43
43
|
});
|
|
44
44
|
return buildTxResponse.txToSign;
|
|
45
45
|
};
|
|
@@ -11,7 +11,7 @@ const estimateTradeFee = async (deps, buyAsset) => {
|
|
|
11
11
|
if (!thorId)
|
|
12
12
|
throw new api_1.SwapError('[estimateTradeFee] - undefined thorId for given buyAssetId', {
|
|
13
13
|
code: api_1.SwapErrorTypes.VALIDATION_FAILED,
|
|
14
|
-
details: { buyAssetId: buyAsset.assetId }
|
|
14
|
+
details: { buyAssetId: buyAsset.assetId },
|
|
15
15
|
});
|
|
16
16
|
const thorPoolChainId = thorId.slice(0, thorId.indexOf('.'));
|
|
17
17
|
const { data: inboundAddresses } = await thorService_1.thorService.get(`${deps.midgardUrl}/thorchain/inbound_addresses`);
|
|
@@ -19,7 +19,7 @@ const estimateTradeFee = async (deps, buyAsset) => {
|
|
|
19
19
|
if (!inboundInfo)
|
|
20
20
|
throw new api_1.SwapError('[estimateTradeFee] - unable to locate inbound pool info', {
|
|
21
21
|
code: api_1.SwapErrorTypes.VALIDATION_FAILED,
|
|
22
|
-
details: { thorPoolChainId }
|
|
22
|
+
details: { thorPoolChainId },
|
|
23
23
|
});
|
|
24
24
|
const gasRate = inboundInfo.gas_rate;
|
|
25
25
|
const { chainId: buyChainId } = (0, caip_1.fromAssetId)(buyAsset.assetId);
|
|
@@ -27,24 +27,24 @@ const estimateTradeFee = async (deps, buyAsset) => {
|
|
|
27
27
|
if (!buyAdapter)
|
|
28
28
|
throw new api_1.SwapError('[estimateTradeFee] - unable to get buy asset adapter', {
|
|
29
29
|
code: api_1.SwapErrorTypes.VALIDATION_FAILED,
|
|
30
|
-
details: { buyChainId }
|
|
30
|
+
details: { buyChainId },
|
|
31
31
|
});
|
|
32
32
|
const buyFeeAssetId = buyAdapter.getFeeAssetId();
|
|
33
33
|
if (!buyFeeAssetId)
|
|
34
34
|
throw new api_1.SwapError('[estimateTradeFee] - no fee assetId', {
|
|
35
35
|
code: api_1.SwapErrorTypes.VALIDATION_FAILED,
|
|
36
|
-
details: { buyAssetId: buyAsset.assetId }
|
|
36
|
+
details: { buyAssetId: buyAsset.assetId },
|
|
37
37
|
});
|
|
38
38
|
const buyFeeAssetRatio = buyAsset.assetId !== buyFeeAssetId
|
|
39
39
|
? await (0, getPriceRatio_1.getPriceRatio)(deps, {
|
|
40
40
|
sellAssetId: buyAsset.assetId,
|
|
41
|
-
buyAssetId: buyFeeAssetId
|
|
41
|
+
buyAssetId: buyFeeAssetId,
|
|
42
42
|
})
|
|
43
43
|
: '1';
|
|
44
44
|
if (!constants_1.THOR_TRADE_FEE_MULTIPLIERS[buyChainId])
|
|
45
45
|
throw new api_1.SwapError('[estimateTradeFee] - no trade fee multiplier', {
|
|
46
46
|
code: api_1.SwapErrorTypes.VALIDATION_FAILED,
|
|
47
|
-
details: { buyChainId }
|
|
47
|
+
details: { buyChainId },
|
|
48
48
|
});
|
|
49
49
|
return constants_1.THOR_TRADE_FEE_MULTIPLIERS[buyChainId].times(buyFeeAssetRatio).times(gasRate).toString();
|
|
50
50
|
};
|
|
@@ -3,7 +3,7 @@ import { ethereum } from '@shapeshiftoss/chain-adapters';
|
|
|
3
3
|
import { ETHSignTx, HDWallet } from '@shapeshiftoss/hdwallet-core';
|
|
4
4
|
import { BIP44Params } from '@shapeshiftoss/types';
|
|
5
5
|
import { ThorchainSwapperDeps } from '../../types';
|
|
6
|
-
export declare const makeTradeTx: ({ wallet, bip44Params, sellAmount, buyAsset, sellAsset, destinationAddress, adapter, maxFeePerGas, maxPriorityFeePerGas, gasPrice, slippageTolerance, deps, gasLimit, tradeFee }: {
|
|
6
|
+
export declare const makeTradeTx: ({ wallet, bip44Params, sellAmount, buyAsset, sellAsset, destinationAddress, adapter, maxFeePerGas, maxPriorityFeePerGas, gasPrice, slippageTolerance, deps, gasLimit, tradeFee, }: {
|
|
7
7
|
wallet: HDWallet;
|
|
8
8
|
bip44Params: BIP44Params;
|
|
9
9
|
sellAmount: string;
|
|
@@ -5,7 +5,7 @@ const caip_1 = require("@shapeshiftoss/caip");
|
|
|
5
5
|
const web3_utils_1 = require("web3-utils");
|
|
6
6
|
const api_1 = require("../../../../api");
|
|
7
7
|
const getThorTxData_1 = require("../ethereum/utils/getThorTxData");
|
|
8
|
-
const makeTradeTx = async ({ wallet, bip44Params, sellAmount, buyAsset, sellAsset, destinationAddress, adapter, maxFeePerGas, maxPriorityFeePerGas, gasPrice, slippageTolerance, deps, gasLimit, tradeFee }) => {
|
|
8
|
+
const makeTradeTx = async ({ wallet, bip44Params, sellAmount, buyAsset, sellAsset, destinationAddress, adapter, maxFeePerGas, maxPriorityFeePerGas, gasPrice, slippageTolerance, deps, gasLimit, tradeFee, }) => {
|
|
9
9
|
try {
|
|
10
10
|
const { assetNamespace } = (0, caip_1.fromAssetId)(sellAsset.assetId);
|
|
11
11
|
const isErc20Trade = assetNamespace === 'erc20';
|
|
@@ -16,7 +16,7 @@ const makeTradeTx = async ({ wallet, bip44Params, sellAmount, buyAsset, sellAsse
|
|
|
16
16
|
sellAmount,
|
|
17
17
|
slippageTolerance,
|
|
18
18
|
destinationAddress,
|
|
19
|
-
tradeFee
|
|
19
|
+
tradeFee,
|
|
20
20
|
});
|
|
21
21
|
return adapter.buildCustomTx({
|
|
22
22
|
wallet,
|
|
@@ -25,14 +25,14 @@ const makeTradeTx = async ({ wallet, bip44Params, sellAmount, buyAsset, sellAsse
|
|
|
25
25
|
gasLimit,
|
|
26
26
|
...(gasPrice !== undefined
|
|
27
27
|
? {
|
|
28
|
-
gasPrice
|
|
28
|
+
gasPrice,
|
|
29
29
|
}
|
|
30
30
|
: {
|
|
31
31
|
maxFeePerGas,
|
|
32
|
-
maxPriorityFeePerGas
|
|
32
|
+
maxPriorityFeePerGas,
|
|
33
33
|
}),
|
|
34
34
|
value: isErc20Trade ? '0x0' : (0, web3_utils_1.numberToHex)(sellAmount),
|
|
35
|
-
data
|
|
35
|
+
data,
|
|
36
36
|
});
|
|
37
37
|
}
|
|
38
38
|
catch (e) {
|
|
@@ -40,7 +40,7 @@ const makeTradeTx = async ({ wallet, bip44Params, sellAmount, buyAsset, sellAsse
|
|
|
40
40
|
throw e;
|
|
41
41
|
throw new api_1.SwapError('[makeTradeTx]: error making trade tx', {
|
|
42
42
|
code: api_1.SwapErrorTypes.BUILD_TRADE_FAILED,
|
|
43
|
-
cause: e
|
|
43
|
+
cause: e,
|
|
44
44
|
});
|
|
45
45
|
}
|
|
46
46
|
};
|
|
@@ -7,7 +7,7 @@ const getLimit_1 = require("../../getLimit/getLimit");
|
|
|
7
7
|
const makeSwapMemo_1 = require("../../makeSwapMemo/makeSwapMemo");
|
|
8
8
|
const thorService_1 = require("../../thorService");
|
|
9
9
|
const routerCalldata_1 = require("../routerCalldata");
|
|
10
|
-
const getThorTxInfo = async ({ deps, sellAsset, buyAsset, sellAmount, slippageTolerance, destinationAddress, tradeFee }) => {
|
|
10
|
+
const getThorTxInfo = async ({ deps, sellAsset, buyAsset, sellAmount, slippageTolerance, destinationAddress, tradeFee, }) => {
|
|
11
11
|
try {
|
|
12
12
|
const { assetReference, assetNamespace } = (0, caip_1.fromAssetId)(sellAsset.assetId);
|
|
13
13
|
const isErc20Trade = assetNamespace === 'erc20';
|
|
@@ -18,7 +18,7 @@ const getThorTxInfo = async ({ deps, sellAsset, buyAsset, sellAmount, slippageTo
|
|
|
18
18
|
if (!vault || !router)
|
|
19
19
|
throw new api_1.SwapError(`[getPriceRatio]: router or vault found for ETH`, {
|
|
20
20
|
code: api_1.SwapErrorTypes.RESPONSE_ERROR,
|
|
21
|
-
details: { inboundAddresses }
|
|
21
|
+
details: { inboundAddresses },
|
|
22
22
|
});
|
|
23
23
|
const limit = await (0, getLimit_1.getLimit)({
|
|
24
24
|
buyAssetId: buyAsset.assetId,
|
|
@@ -28,18 +28,18 @@ const getThorTxInfo = async ({ deps, sellAsset, buyAsset, sellAmount, slippageTo
|
|
|
28
28
|
buyAsset,
|
|
29
29
|
slippageTolerance,
|
|
30
30
|
deps,
|
|
31
|
-
tradeFee
|
|
31
|
+
tradeFee,
|
|
32
32
|
});
|
|
33
33
|
const memo = (0, makeSwapMemo_1.makeSwapMemo)({
|
|
34
34
|
buyAssetId: buyAsset.assetId,
|
|
35
35
|
destinationAddress,
|
|
36
|
-
limit
|
|
36
|
+
limit,
|
|
37
37
|
});
|
|
38
38
|
const data = await (0, routerCalldata_1.deposit)(router, vault, isErc20Trade ? assetReference : '0x0000000000000000000000000000000000000000', sellAmount, memo);
|
|
39
39
|
return {
|
|
40
40
|
data,
|
|
41
41
|
memo,
|
|
42
|
-
router
|
|
42
|
+
router,
|
|
43
43
|
};
|
|
44
44
|
}
|
|
45
45
|
catch (e) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Asset } from '@shapeshiftoss/asset-service';
|
|
2
2
|
import { ThorchainSwapperDeps } from '../../types';
|
|
3
|
-
export declare const getLimit: ({ sellAsset, buyAsset, sellAmount, deps, slippageTolerance, tradeFee }: {
|
|
3
|
+
export declare const getLimit: ({ sellAsset, buyAsset, sellAmount, deps, slippageTolerance, tradeFee, }: {
|
|
4
4
|
buyAssetId: string;
|
|
5
5
|
destinationAddress: string;
|
|
6
6
|
sellAsset: Asset;
|
|
@@ -5,14 +5,14 @@ const api_1 = require("../../../../api");
|
|
|
5
5
|
const bignumber_1 = require("../../../utils/bignumber");
|
|
6
6
|
const constants_1 = require("../constants");
|
|
7
7
|
const getTradeRate_1 = require("../getTradeRate/getTradeRate");
|
|
8
|
-
const getLimit = async ({ sellAsset, buyAsset, sellAmount, deps, slippageTolerance, tradeFee }) => {
|
|
8
|
+
const getLimit = async ({ sellAsset, buyAsset, sellAmount, deps, slippageTolerance, tradeFee, }) => {
|
|
9
9
|
const tradeRate = await (0, getTradeRate_1.getTradeRate)(sellAsset, buyAsset.assetId, sellAmount, deps);
|
|
10
10
|
const expectedBuyAmountPrecision8 = (0, bignumber_1.toBaseUnit)((0, bignumber_1.fromBaseUnit)((0, bignumber_1.bnOrZero)(sellAmount).times(tradeRate), sellAsset.precision), constants_1.THORCHAIN_FIXED_PRECISION);
|
|
11
11
|
const isValidSlippageRange = (0, bignumber_1.bnOrZero)(slippageTolerance).gte(0) && (0, bignumber_1.bnOrZero)(slippageTolerance).lte(1);
|
|
12
12
|
if ((0, bignumber_1.bnOrZero)(expectedBuyAmountPrecision8).lt(0) || !isValidSlippageRange)
|
|
13
13
|
throw new api_1.SwapError('[getThorTxInfo]: bad expected buy amount or bad slippage tolerance', {
|
|
14
14
|
code: api_1.SwapErrorTypes.BUILD_TRADE_FAILED,
|
|
15
|
-
details: { expectedBuyAmountPrecision8, slippageTolerance }
|
|
15
|
+
details: { expectedBuyAmountPrecision8, slippageTolerance },
|
|
16
16
|
});
|
|
17
17
|
const tradeFeePrecision8 = (0, bignumber_1.toBaseUnit)((0, bignumber_1.bnOrZero)(tradeFee), constants_1.THORCHAIN_FIXED_PRECISION);
|
|
18
18
|
return (0, bignumber_1.bnOrZero)(expectedBuyAmountPrecision8)
|
|
@@ -14,7 +14,7 @@ const getPriceRatio = async (deps, input) => {
|
|
|
14
14
|
if (!buyPoolId || !sellPoolId)
|
|
15
15
|
throw new api_1.SwapError(`[getPriceRatio]: No thorchain pool found`, {
|
|
16
16
|
code: api_1.SwapErrorTypes.RESPONSE_ERROR,
|
|
17
|
-
details: { buyPoolId, sellPoolId }
|
|
17
|
+
details: { buyPoolId, sellPoolId },
|
|
18
18
|
});
|
|
19
19
|
const { data: responseData } = await thorService_1.thorService.get(`${deps.midgardUrl}/pools`);
|
|
20
20
|
const buyUsdPrice = (_a = responseData.find((response) => response.asset === buyPoolId)) === null || _a === void 0 ? void 0 : _a.assetPrice;
|
|
@@ -22,7 +22,7 @@ const getPriceRatio = async (deps, input) => {
|
|
|
22
22
|
if (!buyUsdPrice || !sellUsdPrice)
|
|
23
23
|
throw new api_1.SwapError(`[getPriceRatio]: No rate found for pools`, {
|
|
24
24
|
code: api_1.SwapErrorTypes.RESPONSE_ERROR,
|
|
25
|
-
details: { buyPoolId, sellPoolId }
|
|
25
|
+
details: { buyPoolId, sellPoolId },
|
|
26
26
|
});
|
|
27
27
|
return (0, bignumber_1.bnOrZero)(sellUsdPrice).dividedBy(buyUsdPrice).toString();
|
|
28
28
|
}
|
|
@@ -31,7 +31,7 @@ const getPriceRatio = async (deps, input) => {
|
|
|
31
31
|
throw e;
|
|
32
32
|
throw new api_1.SwapError('[getPriceRatio]: Thorchain getPriceRatio failed', {
|
|
33
33
|
code: api_1.SwapErrorTypes.PRICE_RATIO_FAILED,
|
|
34
|
-
cause: e
|
|
34
|
+
cause: e,
|
|
35
35
|
});
|
|
36
36
|
}
|
|
37
37
|
};
|
|
@@ -28,7 +28,7 @@ const getTradeRate = async (sellAsset, buyAssetId, sellAmount, deps) => {
|
|
|
28
28
|
if ((0, bignumber_1.bnOrZero)(sellAmount).eq(0)) {
|
|
29
29
|
return (0, getPriceRatio_1.getPriceRatio)(deps, {
|
|
30
30
|
sellAssetId: sellAsset.assetId,
|
|
31
|
-
buyAssetId
|
|
31
|
+
buyAssetId,
|
|
32
32
|
});
|
|
33
33
|
}
|
|
34
34
|
const buyPoolId = caip_1.adapters.assetIdToPoolAssetId({ assetId: buyAssetId });
|
|
@@ -37,7 +37,7 @@ const getTradeRate = async (sellAsset, buyAssetId, sellAmount, deps) => {
|
|
|
37
37
|
throw new api_1.SwapError(`[getPriceRatio]: No thorchain pool found`, {
|
|
38
38
|
code: api_1.SwapErrorTypes.POOL_NOT_FOUND,
|
|
39
39
|
fn: 'getPriceRatio',
|
|
40
|
-
details: { buyPoolId, sellPoolId }
|
|
40
|
+
details: { buyPoolId, sellPoolId },
|
|
41
41
|
});
|
|
42
42
|
const { data: responseData } = await thorService_1.thorService.get(`${deps.midgardUrl}/pools`);
|
|
43
43
|
const buyPool = responseData.find((response) => response.asset === buyPoolId);
|
|
@@ -46,17 +46,17 @@ const getTradeRate = async (sellAsset, buyAssetId, sellAmount, deps) => {
|
|
|
46
46
|
throw new api_1.SwapError(`[getPriceRatio]: no pools found for`, {
|
|
47
47
|
code: api_1.SwapErrorTypes.POOL_NOT_FOUND,
|
|
48
48
|
fn: 'getPriceRatio',
|
|
49
|
-
details: { buyPoolId, sellPoolId }
|
|
49
|
+
details: { buyPoolId, sellPoolId },
|
|
50
50
|
});
|
|
51
51
|
// All thorchain pool amounts are base 8 regardless of token precision
|
|
52
52
|
const sellBaseAmount = (0, bignumber_1.bn)((0, bignumber_2.toBaseUnit)((0, bignumber_2.fromBaseUnit)(sellAmount, sellAsset.precision), THOR_PRECISION));
|
|
53
53
|
const sellAssetPoolData = {
|
|
54
54
|
assetBalance: (0, bignumber_1.bn)(sellPool.assetDepth),
|
|
55
|
-
runeBalance: (0, bignumber_1.bn)(sellPool.runeDepth)
|
|
55
|
+
runeBalance: (0, bignumber_1.bn)(sellPool.runeDepth),
|
|
56
56
|
};
|
|
57
57
|
const buyAssetPoolData = {
|
|
58
58
|
assetBalance: (0, bignumber_1.bn)(buyPool.assetDepth),
|
|
59
|
-
runeBalance: (0, bignumber_1.bn)(buyPool.runeDepth)
|
|
59
|
+
runeBalance: (0, bignumber_1.bn)(buyPool.runeDepth),
|
|
60
60
|
};
|
|
61
61
|
const outputAmountBase8 = getDoubleSwapOutput(sellBaseAmount, sellAssetPoolData, buyAssetPoolData);
|
|
62
62
|
const outputAmount = (0, bignumber_2.fromBaseUnit)(outputAmountBase8, THOR_PRECISION);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Asset } from '@shapeshiftoss/asset-service';
|
|
2
2
|
import { ThorchainSwapperDeps } from '../../types';
|
|
3
|
-
export declare const getUsdRate: ({ deps, input }: {
|
|
3
|
+
export declare const getUsdRate: ({ deps, input, }: {
|
|
4
4
|
deps: ThorchainSwapperDeps;
|
|
5
5
|
input: Pick<Asset, 'assetId'>;
|
|
6
6
|
}) => Promise<string>;
|
|
@@ -4,19 +4,19 @@ exports.getUsdRate = void 0;
|
|
|
4
4
|
const caip_1 = require("@shapeshiftoss/caip");
|
|
5
5
|
const api_1 = require("../../../../api");
|
|
6
6
|
const thorService_1 = require("../thorService");
|
|
7
|
-
const getUsdRate = async ({ deps, input }) => {
|
|
7
|
+
const getUsdRate = async ({ deps, input, }) => {
|
|
8
8
|
const { assetId } = input;
|
|
9
9
|
try {
|
|
10
10
|
const thorchainPoolId = caip_1.adapters.assetIdToPoolAssetId({ assetId });
|
|
11
11
|
if (!thorchainPoolId)
|
|
12
12
|
throw new api_1.SwapError(`[getUsdRate]: No thorchainPoolId found for assetId: ${assetId}`, {
|
|
13
|
-
code: api_1.SwapErrorTypes.USD_RATE_FAILED
|
|
13
|
+
code: api_1.SwapErrorTypes.USD_RATE_FAILED,
|
|
14
14
|
});
|
|
15
15
|
const { data: responseData } = await thorService_1.thorService.get(`${deps.midgardUrl}/pool/${thorchainPoolId}`);
|
|
16
16
|
const rate = responseData === null || responseData === void 0 ? void 0 : responseData.assetPriceUSD;
|
|
17
17
|
if (!rate)
|
|
18
18
|
throw new api_1.SwapError(`[getUsdRate]: No rate found`, {
|
|
19
|
-
code: api_1.SwapErrorTypes.USD_RATE_FAILED
|
|
19
|
+
code: api_1.SwapErrorTypes.USD_RATE_FAILED,
|
|
20
20
|
});
|
|
21
21
|
return rate;
|
|
22
22
|
}
|
|
@@ -25,7 +25,7 @@ const getUsdRate = async ({ deps, input }) => {
|
|
|
25
25
|
throw e;
|
|
26
26
|
throw new api_1.SwapError('[getUsdRate]: Thorchain getUsdRate failed', {
|
|
27
27
|
code: api_1.SwapErrorTypes.USD_RATE_FAILED,
|
|
28
|
-
cause: e
|
|
28
|
+
cause: e,
|
|
29
29
|
});
|
|
30
30
|
}
|
|
31
31
|
};
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @returns thorchain memo shortened to a max of 80 characters as described:
|
|
3
3
|
* https://dev.thorchain.org/thorchain-dev/memos#mechanism-for-transaction-intent
|
|
4
4
|
*/
|
|
5
|
-
export declare const makeSwapMemo: ({ buyAssetId, destinationAddress, limit }: {
|
|
5
|
+
export declare const makeSwapMemo: ({ buyAssetId, destinationAddress, limit, }: {
|
|
6
6
|
buyAssetId: string;
|
|
7
7
|
destinationAddress: string;
|
|
8
8
|
limit: string;
|
|
@@ -10,12 +10,12 @@ const MAX_LENGTH = 80;
|
|
|
10
10
|
* @returns thorchain memo shortened to a max of 80 characters as described:
|
|
11
11
|
* https://dev.thorchain.org/thorchain-dev/memos#mechanism-for-transaction-intent
|
|
12
12
|
*/
|
|
13
|
-
const makeSwapMemo = ({ buyAssetId, destinationAddress, limit }) => {
|
|
13
|
+
const makeSwapMemo = ({ buyAssetId, destinationAddress, limit, }) => {
|
|
14
14
|
const thorId = caip_1.adapters.assetIdToPoolAssetId({ assetId: buyAssetId });
|
|
15
15
|
if (!thorId)
|
|
16
16
|
throw new api_1.SwapError('[makeSwapMemo] - undefined thorId for given buyAssetId', {
|
|
17
17
|
code: api_1.SwapErrorTypes.MAKE_MEMO_FAILED,
|
|
18
|
-
details: { buyAssetId }
|
|
18
|
+
details: { buyAssetId },
|
|
19
19
|
});
|
|
20
20
|
// bch hack
|
|
21
21
|
// Our bitcoin cash addresses are prefixed with `bitcoincash:`
|
|
@@ -30,13 +30,13 @@ const makeSwapMemo = ({ buyAssetId, destinationAddress, limit }) => {
|
|
|
30
30
|
const abbreviationAmount = memo.length - MAX_LENGTH;
|
|
31
31
|
if (abbreviationAmount > 39)
|
|
32
32
|
throw new api_1.SwapError('[makeSwapMemo] - too much abbreviation for accurate matching', {
|
|
33
|
-
code: api_1.SwapErrorTypes.MAKE_MEMO_FAILED
|
|
33
|
+
code: api_1.SwapErrorTypes.MAKE_MEMO_FAILED,
|
|
34
34
|
});
|
|
35
35
|
// delimeter between ticker and id allowing us to abbreviate the id: https://dev.thorchain.org/thorchain-dev/memos#asset-notation
|
|
36
36
|
const delimeterIndex = memo.indexOf('-') + 1;
|
|
37
37
|
if (!delimeterIndex) {
|
|
38
38
|
throw new api_1.SwapError('[makeSwapMemo] - unable to abbreviate asset, no delimeter found', {
|
|
39
|
-
code: api_1.SwapErrorTypes.MAKE_MEMO_FAILED
|
|
39
|
+
code: api_1.SwapErrorTypes.MAKE_MEMO_FAILED,
|
|
40
40
|
});
|
|
41
41
|
}
|
|
42
42
|
return memo.replace(memo.slice(delimeterIndex, delimeterIndex + abbreviationAmount), '');
|