@shapeshiftoss/swapper 15.2.0 → 15.2.2
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/api.d.ts +1 -1
- package/dist/api.js +29 -29
- package/dist/manager/SwapperManager.js +3 -3
- package/dist/swappers/cow/cowApprovalNeeded/cowApprovalNeeded.js +2 -2
- package/dist/swappers/cow/cowApprove/cowApprove.js +2 -2
- package/dist/swappers/cow/cowBuildTrade/cowBuildTrade.js +3 -3
- package/dist/swappers/cow/cowExecuteTrade/cowExecuteTrade.js +3 -3
- package/dist/swappers/cow/cowGetTradeTxs/cowGetTradeTxs.js +1 -1
- package/dist/swappers/cow/getCowSwapMinMax/getCowSwapMinMax.js +2 -2
- package/dist/swappers/cow/getCowSwapTradeQuote/getCowSwapTradeQuote.js +4 -4
- package/dist/swappers/cow/utils/helpers/helpers.js +3 -3
- package/dist/swappers/osmosis/OsmosisSwapper.js +17 -15
- package/dist/swappers/osmosis/utils/helpers.d.ts +3 -2
- package/dist/swappers/osmosis/utils/helpers.js +13 -12
- package/dist/swappers/test/TestSwapper.js +1 -1
- package/dist/swappers/thorchain/ThorchainSwapper.js +7 -7
- package/dist/swappers/thorchain/buildThorTrade/buildThorTrade.js +3 -3
- package/dist/swappers/thorchain/getThorTradeQuote/getTradeQuote.js +3 -3
- package/dist/swappers/thorchain/thorTradeApprovalNeeded/thorTradeApprovalNeeded.js +4 -4
- package/dist/swappers/thorchain/thorTradeApproveInfinite/thorTradeApproveInfinite.js +2 -2
- package/dist/swappers/thorchain/utils/bitcoin/utils/getThorTxData.js +2 -2
- package/dist/swappers/thorchain/utils/cosmos/getCosmosTxData.js +2 -2
- package/dist/swappers/thorchain/utils/evm/makeTradeTx.js +1 -1
- package/dist/swappers/thorchain/utils/evm/utils/getThorTxData.js +2 -2
- package/dist/swappers/thorchain/utils/getLimit/getLimit.js +2 -2
- package/dist/swappers/thorchain/utils/getPriceRatio/getPriceRatio.js +5 -5
- package/dist/swappers/thorchain/utils/getTradeRate/getTradeRate.js +4 -4
- package/dist/swappers/thorchain/utils/getUsdRate/getUsdRate.js +5 -5
- package/dist/swappers/thorchain/utils/makeSwapMemo/makeSwapMemo.js +3 -3
- package/dist/swappers/thorchain/utils/txFeeHelpers/evmTxFees/getEvmTxFees.js +1 -1
- package/dist/swappers/thorchain/utils/txFeeHelpers/utxoTxFees/getUtxoTxFees.js +1 -1
- package/dist/swappers/utils/helpers/helpers.js +4 -4
- package/dist/swappers/zrx/ZrxSwapper.js +1 -1
- package/dist/swappers/zrx/getZrxMinMax/getZrxMinMax.js +2 -2
- package/dist/swappers/zrx/getZrxTradeQuote/getZrxTradeQuote.js +2 -2
- package/dist/swappers/zrx/utils/helpers/helpers.js +4 -4
- package/dist/swappers/zrx/zrxApprovalNeeded/zrxApprovalNeeded.js +4 -4
- package/dist/swappers/zrx/zrxApprove/zrxApprove.js +2 -2
- package/dist/swappers/zrx/zrxBuildTrade/zrxBuildTrade.js +2 -2
- package/dist/swappers/zrx/zrxExecuteTrade/zrxExecuteTrade.js +2 -2
- package/package.json +1 -1
package/dist/api.d.ts
CHANGED
|
@@ -177,7 +177,7 @@ export declare type TradeTxs = {
|
|
|
177
177
|
sellTxid: string;
|
|
178
178
|
buyTxid?: string;
|
|
179
179
|
};
|
|
180
|
-
export declare enum
|
|
180
|
+
export declare enum SwapErrorType {
|
|
181
181
|
ALLOWANCE_REQUIRED_FAILED = "ALLOWANCE_REQUIRED_FAILED",
|
|
182
182
|
APPROVE_INFINITE_FAILED = "APPROVE_INFINITE_FAILED",
|
|
183
183
|
APPROVE_AMOUNT_FAILED = "APPROVE_AMOUNT_FAILED",
|
package/dist/api.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.SwapErrorType = exports.SwapperType = exports.SwapperName = exports.SwapError = void 0;
|
|
4
4
|
const errors_1 = require("@shapeshiftoss/errors");
|
|
5
5
|
const types_1 = require("@shapeshiftoss/types");
|
|
6
6
|
exports.SwapError = (0, errors_1.createErrorClass)('SwapError');
|
|
@@ -22,31 +22,31 @@ var SwapperType;
|
|
|
22
22
|
SwapperType["Test"] = "Test";
|
|
23
23
|
})(SwapperType = exports.SwapperType || (exports.SwapperType = {}));
|
|
24
24
|
// Swap Errors
|
|
25
|
-
var
|
|
26
|
-
(function (
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
})(
|
|
25
|
+
var SwapErrorType;
|
|
26
|
+
(function (SwapErrorType) {
|
|
27
|
+
SwapErrorType["ALLOWANCE_REQUIRED_FAILED"] = "ALLOWANCE_REQUIRED_FAILED";
|
|
28
|
+
SwapErrorType["APPROVE_INFINITE_FAILED"] = "APPROVE_INFINITE_FAILED";
|
|
29
|
+
SwapErrorType["APPROVE_AMOUNT_FAILED"] = "APPROVE_AMOUNT_FAILED";
|
|
30
|
+
SwapErrorType["BUILD_TRADE_FAILED"] = "BUILD_TRADE_FAILED";
|
|
31
|
+
SwapErrorType["CHECK_APPROVAL_FAILED"] = "CHECK_APPROVAL_FAILED";
|
|
32
|
+
SwapErrorType["EXECUTE_TRADE_FAILED"] = "EXECUTE_TRADE_FAILED";
|
|
33
|
+
SwapErrorType["GRANT_ALLOWANCE_FAILED"] = "GRANT_ALLOWANCE_FAILED";
|
|
34
|
+
SwapErrorType["INITIALIZE_FAILED"] = "INITIALIZE_FAILED";
|
|
35
|
+
SwapErrorType["MANAGER_ERROR"] = "MANAGER_ERROR";
|
|
36
|
+
SwapErrorType["MIN_MAX_FAILED"] = "MIN_MAX_FAILED";
|
|
37
|
+
SwapErrorType["RESPONSE_ERROR"] = "RESPONSE_ERROR";
|
|
38
|
+
SwapErrorType["SIGN_AND_BROADCAST_FAILED"] = "SIGN_AND_BROADCAST_FAILED";
|
|
39
|
+
SwapErrorType["TRADE_QUOTE_FAILED"] = "TRADE_QUOTE_FAILED";
|
|
40
|
+
SwapErrorType["TRADE_QUOTE_AMOUNT_TOO_SMALL"] = "TRADE_QUOTE_AMOUNT_TOO_SMALL";
|
|
41
|
+
SwapErrorType["TRADE_QUOTE_INPUT_LOWER_THAN_FEES"] = "TRADE_QUOTE_INPUT_LOWER_THAN_FEES";
|
|
42
|
+
SwapErrorType["UNSUPPORTED_PAIR"] = "UNSUPPORTED_PAIR";
|
|
43
|
+
SwapErrorType["USD_RATE_FAILED"] = "USD_RATE_FAILED";
|
|
44
|
+
SwapErrorType["UNSUPPORTED_CHAIN"] = "UNSUPPORTED_CHAIN";
|
|
45
|
+
SwapErrorType["UNSUPPORTED_NAMESPACE"] = "UNSUPPORTED_NAMESPACE";
|
|
46
|
+
SwapErrorType["VALIDATION_FAILED"] = "VALIDATION_FAILED";
|
|
47
|
+
SwapErrorType["MAKE_MEMO_FAILED"] = "MAKE_MEMO_FAILED";
|
|
48
|
+
SwapErrorType["PRICE_RATIO_FAILED"] = "PRICE_RATIO_FAILED";
|
|
49
|
+
SwapErrorType["POOL_NOT_FOUND"] = "POOL_NOT_FOUND";
|
|
50
|
+
SwapErrorType["GET_TRADE_TXS_FAILED"] = "GET_TRADE_TXS_FAILED";
|
|
51
|
+
SwapErrorType["TRADE_FAILED"] = "TRADE_FAILED";
|
|
52
|
+
})(SwapErrorType = exports.SwapErrorType || (exports.SwapErrorType = {}));
|
|
@@ -12,7 +12,7 @@ const utils_1 = require("./utils");
|
|
|
12
12
|
function validateSwapper(swapper) {
|
|
13
13
|
if (!(typeof swapper === 'object' && typeof swapper.getType === 'function'))
|
|
14
14
|
throw new api_1.SwapError('[validateSwapper] - invalid swapper instance', {
|
|
15
|
-
code: api_1.
|
|
15
|
+
code: api_1.SwapErrorType.MANAGER_ERROR,
|
|
16
16
|
});
|
|
17
17
|
}
|
|
18
18
|
// TODO: remove me
|
|
@@ -40,7 +40,7 @@ class SwapperManager {
|
|
|
40
40
|
const swapper = this.swappers.get(swapperType);
|
|
41
41
|
if (!swapper)
|
|
42
42
|
throw new api_1.SwapError('[getSwapper] - swapperType doesnt exist', {
|
|
43
|
-
code: api_1.
|
|
43
|
+
code: api_1.SwapErrorType.MANAGER_ERROR,
|
|
44
44
|
details: { swapperType },
|
|
45
45
|
});
|
|
46
46
|
return swapper;
|
|
@@ -54,7 +54,7 @@ class SwapperManager {
|
|
|
54
54
|
const swapper = this.swappers.get(swapperType);
|
|
55
55
|
if (!swapper)
|
|
56
56
|
throw new api_1.SwapError('[removeSwapper] - swapperType doesnt exist', {
|
|
57
|
-
code: api_1.
|
|
57
|
+
code: api_1.SwapErrorType.MANAGER_ERROR,
|
|
58
58
|
details: { swapperType },
|
|
59
59
|
});
|
|
60
60
|
this.swappers.delete(swapperType);
|
|
@@ -13,7 +13,7 @@ async function cowApprovalNeeded({ adapter, web3 }, { quote, wallet }) {
|
|
|
13
13
|
try {
|
|
14
14
|
if (assetNamespace !== 'erc20') {
|
|
15
15
|
throw new api_1.SwapError('[cowApprovalNeeded] - unsupported asset namespace', {
|
|
16
|
-
code: api_1.
|
|
16
|
+
code: api_1.SwapErrorType.UNSUPPORTED_NAMESPACE,
|
|
17
17
|
details: { assetNamespace },
|
|
18
18
|
});
|
|
19
19
|
}
|
|
@@ -36,7 +36,7 @@ async function cowApprovalNeeded({ adapter, web3 }, { quote, wallet }) {
|
|
|
36
36
|
throw e;
|
|
37
37
|
throw new api_1.SwapError('[cowApprovalNeeded]', {
|
|
38
38
|
cause: e,
|
|
39
|
-
code: api_1.
|
|
39
|
+
code: api_1.SwapErrorType.CHECK_APPROVAL_FAILED,
|
|
40
40
|
});
|
|
41
41
|
}
|
|
42
42
|
}
|
|
@@ -24,7 +24,7 @@ async function cowApproveInfinite({ adapter, web3 }, { quote, wallet }) {
|
|
|
24
24
|
throw e;
|
|
25
25
|
throw new api_1.SwapError('[cowApproveInfinite]', {
|
|
26
26
|
cause: e,
|
|
27
|
-
code: api_1.
|
|
27
|
+
code: api_1.SwapErrorType.APPROVE_INFINITE_FAILED,
|
|
28
28
|
});
|
|
29
29
|
}
|
|
30
30
|
}
|
|
@@ -49,7 +49,7 @@ async function cowApproveAmount({ adapter, web3 }, { quote, wallet, amount }) {
|
|
|
49
49
|
throw e;
|
|
50
50
|
throw new api_1.SwapError('[cowApproveAmount]', {
|
|
51
51
|
cause: e,
|
|
52
|
-
code: api_1.
|
|
52
|
+
code: api_1.SwapErrorType.APPROVE_AMOUNT_FAILED,
|
|
53
53
|
});
|
|
54
54
|
}
|
|
55
55
|
}
|
|
@@ -18,13 +18,13 @@ async function cowBuildTrade(deps, input) {
|
|
|
18
18
|
const { assetReference: buyAssetErc20Address, chainId: buyAssetChainId } = (0, caip_1.fromAssetId)(buyAsset.assetId);
|
|
19
19
|
if (sellAssetNamespace !== 'erc20') {
|
|
20
20
|
throw new api_1.SwapError('[cowBuildTrade] - Sell asset needs to be ERC-20 to use CowSwap', {
|
|
21
|
-
code: api_1.
|
|
21
|
+
code: api_1.SwapErrorType.UNSUPPORTED_PAIR,
|
|
22
22
|
details: { sellAssetNamespace },
|
|
23
23
|
});
|
|
24
24
|
}
|
|
25
25
|
if (buyAssetChainId !== types_1.KnownChainIds.EthereumMainnet) {
|
|
26
26
|
throw new api_1.SwapError('[cowBuildTrade] - Buy asset needs to be on ETH mainnet to use CowSwap', {
|
|
27
|
-
code: api_1.
|
|
27
|
+
code: api_1.SwapErrorType.UNSUPPORTED_PAIR,
|
|
28
28
|
details: { buyAssetChainId },
|
|
29
29
|
});
|
|
30
30
|
}
|
|
@@ -117,7 +117,7 @@ async function cowBuildTrade(deps, input) {
|
|
|
117
117
|
throw e;
|
|
118
118
|
throw new api_1.SwapError('[cowBuildTrade]', {
|
|
119
119
|
cause: e,
|
|
120
|
-
code: api_1.
|
|
120
|
+
code: api_1.SwapErrorType.TRADE_QUOTE_FAILED,
|
|
121
121
|
});
|
|
122
122
|
}
|
|
123
123
|
}
|
|
@@ -16,13 +16,13 @@ async function cowExecuteTrade({ apiUrl, adapter }, { trade, wallet }) {
|
|
|
16
16
|
const { assetReference: buyAssetErc20Address, chainId: buyAssetChainId } = (0, caip_1.fromAssetId)(buyAsset.assetId);
|
|
17
17
|
if (sellAssetNamespace !== 'erc20') {
|
|
18
18
|
throw new api_1.SwapError('[cowExecuteTrade] - Sell asset needs to be ERC-20 to use CowSwap', {
|
|
19
|
-
code: api_1.
|
|
19
|
+
code: api_1.SwapErrorType.UNSUPPORTED_PAIR,
|
|
20
20
|
details: { sellAssetNamespace },
|
|
21
21
|
});
|
|
22
22
|
}
|
|
23
23
|
if (buyAssetChainId !== types_1.KnownChainIds.EthereumMainnet) {
|
|
24
24
|
throw new api_1.SwapError('[cowExecuteTrade] - Buy asset needs to be on ETH mainnet to use CowSwap', {
|
|
25
|
-
code: api_1.
|
|
25
|
+
code: api_1.SwapErrorType.UNSUPPORTED_PAIR,
|
|
26
26
|
details: { buyAssetChainId },
|
|
27
27
|
});
|
|
28
28
|
}
|
|
@@ -91,7 +91,7 @@ async function cowExecuteTrade({ apiUrl, adapter }, { trade, wallet }) {
|
|
|
91
91
|
throw e;
|
|
92
92
|
throw new api_1.SwapError('[cowExecuteTrade]', {
|
|
93
93
|
cause: e,
|
|
94
|
-
code: api_1.
|
|
94
|
+
code: api_1.SwapErrorType.EXECUTE_TRADE_FAILED,
|
|
95
95
|
});
|
|
96
96
|
}
|
|
97
97
|
}
|
|
@@ -12,7 +12,7 @@ const getCowSwapMinMax = async (deps, sellAsset, buyAsset) => {
|
|
|
12
12
|
const { assetNamespace: sellAssetNamespace } = (0, caip_1.fromAssetId)(sellAsset.assetId);
|
|
13
13
|
const { chainId: buyAssetChainId } = (0, caip_1.fromAssetId)(buyAsset.assetId);
|
|
14
14
|
if (sellAssetNamespace !== 'erc20' || buyAssetChainId !== types_1.KnownChainIds.EthereumMainnet) {
|
|
15
|
-
throw new api_1.SwapError('[getCowSwapMinMax]', { code: api_1.
|
|
15
|
+
throw new api_1.SwapError('[getCowSwapMinMax]', { code: api_1.SwapErrorType.UNSUPPORTED_PAIR });
|
|
16
16
|
}
|
|
17
17
|
const usdRate = await (0, helpers_1.getUsdRate)(deps, sellAsset);
|
|
18
18
|
const minimum = (0, bignumber_1.bn)(constants_1.MIN_COWSWAP_VALUE_USD).dividedBy((0, bignumber_1.bnOrZero)(usdRate)).toString(); // $10 worth of the sell token.
|
|
@@ -25,7 +25,7 @@ const getCowSwapMinMax = async (deps, sellAsset, buyAsset) => {
|
|
|
25
25
|
catch (e) {
|
|
26
26
|
if (e instanceof api_1.SwapError)
|
|
27
27
|
throw e;
|
|
28
|
-
throw new api_1.SwapError('[getCowSwapMinMax]', { cause: e, code: api_1.
|
|
28
|
+
throw new api_1.SwapError('[getCowSwapMinMax]', { cause: e, code: api_1.SwapErrorType.MIN_MAX_FAILED });
|
|
29
29
|
}
|
|
30
30
|
};
|
|
31
31
|
exports.getCowSwapMinMax = getCowSwapMinMax;
|
|
@@ -23,13 +23,13 @@ async function getCowSwapTradeQuote(deps, input) {
|
|
|
23
23
|
const { assetReference: buyAssetErc20Address, chainId: buyAssetChainId } = (0, caip_1.fromAssetId)(buyAsset.assetId);
|
|
24
24
|
if (sellAssetNamespace !== 'erc20') {
|
|
25
25
|
throw new api_1.SwapError('[getCowSwapTradeQuote] - Sell asset needs to be ERC-20 to use CowSwap', {
|
|
26
|
-
code: api_1.
|
|
26
|
+
code: api_1.SwapErrorType.UNSUPPORTED_PAIR,
|
|
27
27
|
details: { sellAssetNamespace },
|
|
28
28
|
});
|
|
29
29
|
}
|
|
30
30
|
if (buyAssetChainId !== types_1.KnownChainIds.EthereumMainnet) {
|
|
31
31
|
throw new api_1.SwapError('[getCowSwapTradeQuote] - Buy asset needs to be on ETH mainnet to use CowSwap', {
|
|
32
|
-
code: api_1.
|
|
32
|
+
code: api_1.SwapErrorType.UNSUPPORTED_PAIR,
|
|
33
33
|
details: { buyAssetChainId },
|
|
34
34
|
});
|
|
35
35
|
}
|
|
@@ -125,14 +125,14 @@ async function getCowSwapTradeQuote(deps, input) {
|
|
|
125
125
|
'SellAmountDoesNotCoverFee') {
|
|
126
126
|
throw new api_1.SwapError('[getCowSwapTradeQuote]', {
|
|
127
127
|
cause: e,
|
|
128
|
-
code: api_1.
|
|
128
|
+
code: api_1.SwapErrorType.TRADE_QUOTE_INPUT_LOWER_THAN_FEES,
|
|
129
129
|
});
|
|
130
130
|
}
|
|
131
131
|
if (e instanceof api_1.SwapError)
|
|
132
132
|
throw e;
|
|
133
133
|
throw new api_1.SwapError('[getCowSwapTradeQuote]', {
|
|
134
134
|
cause: e,
|
|
135
|
-
code: api_1.
|
|
135
|
+
code: api_1.SwapErrorType.TRADE_QUOTE_FAILED,
|
|
136
136
|
});
|
|
137
137
|
}
|
|
138
138
|
}
|
|
@@ -36,7 +36,7 @@ const getUsdRate = async ({ apiUrl }, input) => {
|
|
|
36
36
|
const { assetReference: erc20Address, assetNamespace } = (0, caip_1.fromAssetId)(asset.assetId);
|
|
37
37
|
if (assetNamespace !== 'erc20') {
|
|
38
38
|
throw new api_1.SwapError('[getUsdRate] - unsupported asset namespace', {
|
|
39
|
-
code: api_1.
|
|
39
|
+
code: api_1.SwapErrorType.USD_RATE_FAILED,
|
|
40
40
|
details: { assetNamespace },
|
|
41
41
|
});
|
|
42
42
|
}
|
|
@@ -79,7 +79,7 @@ const getUsdRate = async ({ apiUrl }, input) => {
|
|
|
79
79
|
const sellAmountCryptoPrecision = (0, bignumber_1.bn)(sellAmountCryptoBaseUnit).div((0, bignumber_1.bn)(10).exponentiatedBy(asset.precision));
|
|
80
80
|
if (!sellAmountCryptoPrecision.gt(0))
|
|
81
81
|
throw new api_1.SwapError('[getUsdRate] - Failed to get sell token amount', {
|
|
82
|
-
code: api_1.
|
|
82
|
+
code: api_1.SwapErrorType.RESPONSE_ERROR,
|
|
83
83
|
});
|
|
84
84
|
// dividing $1000 by amount of sell token received
|
|
85
85
|
return (0, bignumber_1.bn)(buyAmountInDollars).div(sellAmountCryptoPrecision).toString();
|
|
@@ -89,7 +89,7 @@ const getUsdRate = async ({ apiUrl }, input) => {
|
|
|
89
89
|
throw e;
|
|
90
90
|
throw new api_1.SwapError('[getUsdRate]', {
|
|
91
91
|
cause: e,
|
|
92
|
-
code: api_1.
|
|
92
|
+
code: api_1.SwapErrorType.USD_RATE_FAILED,
|
|
93
93
|
});
|
|
94
94
|
}
|
|
95
95
|
};
|
|
@@ -20,7 +20,7 @@ class OsmosisSwapper {
|
|
|
20
20
|
const cosmosAdapter = this.deps.adapterManager.get(caip_1.cosmosChainId);
|
|
21
21
|
if (!cosmosAdapter)
|
|
22
22
|
throw new api_1.SwapError('OsmosisSwapper: couldnt get cosmos adapter', {
|
|
23
|
-
code: api_1.
|
|
23
|
+
code: api_1.SwapErrorType.GET_TRADE_TXS_FAILED,
|
|
24
24
|
});
|
|
25
25
|
const cosmosTxHistory = await cosmosAdapter.getTxHistory({
|
|
26
26
|
pubkey: tradeResult.cosmosAddress,
|
|
@@ -69,12 +69,12 @@ class OsmosisSwapper {
|
|
|
69
69
|
}
|
|
70
70
|
async approveInfinite() {
|
|
71
71
|
throw new api_1.SwapError('OsmosisSwapper: approveInfinite unimplemented', {
|
|
72
|
-
code: api_1.
|
|
72
|
+
code: api_1.SwapErrorType.RESPONSE_ERROR,
|
|
73
73
|
});
|
|
74
74
|
}
|
|
75
75
|
async approveAmount() {
|
|
76
76
|
throw new api_1.SwapError('Osmosis: approveAmount unimplemented', {
|
|
77
|
-
code: api_1.
|
|
77
|
+
code: api_1.SwapErrorType.RESPONSE_ERROR,
|
|
78
78
|
});
|
|
79
79
|
}
|
|
80
80
|
filterBuyAssetsBySellAssetId(args) {
|
|
@@ -90,7 +90,7 @@ class OsmosisSwapper {
|
|
|
90
90
|
const { sellAsset, buyAsset, sellAmountBeforeFeesCryptoBaseUnit: sellAmountCryptoBaseUnit, receiveAddress, accountNumber, } = args;
|
|
91
91
|
if (!sellAmountCryptoBaseUnit) {
|
|
92
92
|
throw new api_1.SwapError('sellAmountCryptoPrecision is required', {
|
|
93
|
-
code: api_1.
|
|
93
|
+
code: api_1.SwapErrorType.BUILD_TRADE_FAILED,
|
|
94
94
|
});
|
|
95
95
|
}
|
|
96
96
|
const { buyAssetTradeFeeUsd, rate, buyAmountCryptoBaseUnit } = await (0, helpers_1.getRateInfo)(sellAsset.symbol, buyAsset.symbol, sellAmountCryptoBaseUnit !== '0' ? sellAmountCryptoBaseUnit : '1', this.deps.osmoUrl);
|
|
@@ -99,7 +99,7 @@ class OsmosisSwapper {
|
|
|
99
99
|
const osmosisAdapter = this.deps.adapterManager.get(caip_1.osmosisChainId);
|
|
100
100
|
if (!osmosisAdapter)
|
|
101
101
|
throw new api_1.SwapError('Failed to get Osmosis adapter', {
|
|
102
|
-
code: api_1.
|
|
102
|
+
code: api_1.SwapErrorType.BUILD_TRADE_FAILED,
|
|
103
103
|
});
|
|
104
104
|
const feeData = await osmosisAdapter.getFeeData({});
|
|
105
105
|
const fee = feeData.fast.txFee;
|
|
@@ -123,7 +123,7 @@ class OsmosisSwapper {
|
|
|
123
123
|
const { accountNumber, sellAsset, buyAsset, sellAmountBeforeFeesCryptoBaseUnit: sellAmountCryptoBaseUnit, } = input;
|
|
124
124
|
if (!sellAmountCryptoBaseUnit) {
|
|
125
125
|
throw new api_1.SwapError('sellAmount is required', {
|
|
126
|
-
code: api_1.
|
|
126
|
+
code: api_1.SwapErrorType.RESPONSE_ERROR,
|
|
127
127
|
});
|
|
128
128
|
}
|
|
129
129
|
const { buyAssetTradeFeeUsd, rate, buyAmountCryptoBaseUnit } = await (0, helpers_1.getRateInfo)(sellAsset.symbol, buyAsset.symbol, sellAmountCryptoBaseUnit !== '0' ? sellAmountCryptoBaseUnit : '1', this.deps.osmoUrl);
|
|
@@ -131,7 +131,7 @@ class OsmosisSwapper {
|
|
|
131
131
|
const osmosisAdapter = this.deps.adapterManager.get(caip_1.osmosisChainId);
|
|
132
132
|
if (!osmosisAdapter)
|
|
133
133
|
throw new api_1.SwapError('Failed to get Osmosis adapter', {
|
|
134
|
-
code: api_1.
|
|
134
|
+
code: api_1.SwapErrorType.TRADE_QUOTE_FAILED,
|
|
135
135
|
});
|
|
136
136
|
const feeData = await osmosisAdapter.getFeeData({});
|
|
137
137
|
const fee = feeData.fast.txFee;
|
|
@@ -154,6 +154,7 @@ class OsmosisSwapper {
|
|
|
154
154
|
};
|
|
155
155
|
}
|
|
156
156
|
async executeTrade({ trade, wallet }) {
|
|
157
|
+
var _a;
|
|
157
158
|
const { sellAsset, buyAsset, sellAmountBeforeFeesCryptoBaseUnit: sellAmountCryptoBaseUnit, accountNumber, receiveAddress, } = trade;
|
|
158
159
|
const isFromOsmo = sellAsset.assetId === caip_1.osmosisAssetId;
|
|
159
160
|
const sellAssetDenom = helpers_1.symbolDenomMapping[sellAsset.symbol];
|
|
@@ -163,7 +164,7 @@ class OsmosisSwapper {
|
|
|
163
164
|
const cosmosAdapter = this.deps.adapterManager.get(caip_1.cosmosChainId);
|
|
164
165
|
if (!cosmosAdapter || !osmosisAdapter) {
|
|
165
166
|
throw new api_1.SwapError('Failed to get adapters', {
|
|
166
|
-
code: api_1.
|
|
167
|
+
code: api_1.SwapErrorType.EXECUTE_TRADE_FAILED,
|
|
167
168
|
});
|
|
168
169
|
}
|
|
169
170
|
const feeData = await osmosisAdapter.getFeeData({});
|
|
@@ -174,7 +175,7 @@ class OsmosisSwapper {
|
|
|
174
175
|
sellAddress = await cosmosAdapter.getAddress({ wallet, accountNumber });
|
|
175
176
|
if (!sellAddress)
|
|
176
177
|
throw new api_1.SwapError('Failed to get address', {
|
|
177
|
-
code: api_1.
|
|
178
|
+
code: api_1.SwapErrorType.EXECUTE_TRADE_FAILED,
|
|
178
179
|
});
|
|
179
180
|
const transfer = {
|
|
180
181
|
sender: sellAddress,
|
|
@@ -183,13 +184,13 @@ class OsmosisSwapper {
|
|
|
183
184
|
};
|
|
184
185
|
const responseAccount = await cosmosAdapter.getAccount(sellAddress);
|
|
185
186
|
const sequence = responseAccount.chainSpecific.sequence || '0';
|
|
186
|
-
const { tradeId } = await (0, helpers_1.performIbcTransfer)(transfer, cosmosAdapter, wallet, this.deps.osmoUrl, 'uatom', constants_1.COSMO_OSMO_CHANNEL, feeData.fast.txFee, accountNumber
|
|
187
|
+
const { tradeId } = await (0, helpers_1.performIbcTransfer)(transfer, cosmosAdapter, wallet, this.deps.osmoUrl, 'uatom', constants_1.COSMO_OSMO_CHANNEL, feeData.fast.txFee, accountNumber, sequence, gas, 'uatom');
|
|
187
188
|
cosmosIbcTradeId = tradeId;
|
|
188
189
|
// wait till confirmed
|
|
189
190
|
const pollResult = await (0, helpers_1.pollForComplete)(tradeId, this.deps.cosmosUrl);
|
|
190
191
|
if (pollResult !== 'success')
|
|
191
192
|
throw new api_1.SwapError('ibc transfer failed', {
|
|
192
|
-
code: api_1.
|
|
193
|
+
code: api_1.SwapErrorType.EXECUTE_TRADE_FAILED,
|
|
193
194
|
});
|
|
194
195
|
ibcSellAmount = await (0, helpers_1.pollForAtomChannelBalance)(receiveAddress, this.deps.osmoUrl);
|
|
195
196
|
// delay to ensure all nodes we interact with are up to date at this point
|
|
@@ -200,13 +201,14 @@ class OsmosisSwapper {
|
|
|
200
201
|
sellAddress = await osmosisAdapter.getAddress({ wallet, accountNumber });
|
|
201
202
|
if (!sellAddress)
|
|
202
203
|
throw new api_1.SwapError('failed to get osmoAddress', {
|
|
203
|
-
code: api_1.
|
|
204
|
+
code: api_1.SwapErrorType.EXECUTE_TRADE_FAILED,
|
|
204
205
|
});
|
|
205
206
|
}
|
|
206
207
|
const osmoAddress = isFromOsmo ? sellAddress : receiveAddress;
|
|
207
208
|
const cosmosAddress = isFromOsmo ? receiveAddress : sellAddress;
|
|
208
209
|
const signTxInput = await (0, helpers_1.buildTradeTx)({
|
|
209
210
|
osmoAddress,
|
|
211
|
+
accountNumber,
|
|
210
212
|
adapter: osmosisAdapter,
|
|
211
213
|
buyAssetDenom,
|
|
212
214
|
sellAssetDenom,
|
|
@@ -220,7 +222,7 @@ class OsmosisSwapper {
|
|
|
220
222
|
const pollResult = await (0, helpers_1.pollForComplete)(tradeId, this.deps.osmoUrl);
|
|
221
223
|
if (pollResult !== 'success')
|
|
222
224
|
throw new api_1.SwapError('osmo swap failed', {
|
|
223
|
-
code: api_1.
|
|
225
|
+
code: api_1.SwapErrorType.EXECUTE_TRADE_FAILED,
|
|
224
226
|
});
|
|
225
227
|
const amount = await (0, helpers_1.pollForAtomChannelBalance)(sellAddress, this.deps.osmoUrl);
|
|
226
228
|
const transfer = {
|
|
@@ -229,7 +231,7 @@ class OsmosisSwapper {
|
|
|
229
231
|
amount,
|
|
230
232
|
};
|
|
231
233
|
const ibcResponseAccount = await osmosisAdapter.getAccount(sellAddress);
|
|
232
|
-
const ibcAccountNumber = ibcResponseAccount.chainSpecific.accountNumber
|
|
234
|
+
const ibcAccountNumber = Number(ibcResponseAccount.chainSpecific.accountNumber);
|
|
233
235
|
const ibcSequence = ibcResponseAccount.chainSpecific.sequence || '0';
|
|
234
236
|
// delay to ensure all nodes we interact with are up to date at this point
|
|
235
237
|
// seeing intermittent bugs that suggest the balances and sequence numbers were sometimes off
|
|
@@ -239,7 +241,7 @@ class OsmosisSwapper {
|
|
|
239
241
|
pageSize: 1,
|
|
240
242
|
});
|
|
241
243
|
await (0, helpers_1.performIbcTransfer)(transfer, osmosisAdapter, wallet, this.deps.cosmosUrl, buyAssetDenom, constants_1.OSMO_COSMO_CHANNEL, '0', ibcAccountNumber, ibcSequence, gas, 'uosmo');
|
|
242
|
-
return { tradeId, previousCosmosTxid: cosmosTxHistory.transactions[0].txid, cosmosAddress };
|
|
244
|
+
return { tradeId, previousCosmosTxid: (_a = cosmosTxHistory.transactions[0]) === null || _a === void 0 ? void 0 : _a.txid, cosmosAddress };
|
|
243
245
|
}
|
|
244
246
|
return { tradeId, previousCosmosTxid: cosmosIbcTradeId };
|
|
245
247
|
}
|
|
@@ -21,10 +21,11 @@ export declare const getRateInfo: (sellAsset: string, buyAsset: string, sellAmou
|
|
|
21
21
|
buyAssetTradeFeeUsd: string;
|
|
22
22
|
buyAmountCryptoBaseUnit: string;
|
|
23
23
|
}>;
|
|
24
|
-
export declare const performIbcTransfer: (input: IbcTransferInput, adapter: CosmosSdkSupportedChainAdapters, wallet: HDWallet, blockBaseUrl: string, denom: string, sourceChannel: string, feeAmount: string, accountNumber:
|
|
25
|
-
export declare const buildTradeTx: ({ osmoAddress, adapter, buyAssetDenom, sellAssetDenom, sellAmount, gas, wallet, }: {
|
|
24
|
+
export declare const performIbcTransfer: (input: IbcTransferInput, adapter: CosmosSdkSupportedChainAdapters, wallet: HDWallet, blockBaseUrl: string, denom: string, sourceChannel: string, feeAmount: string, accountNumber: number, sequence: string, gas: string, feeDenom: string) => Promise<TradeResult>;
|
|
25
|
+
export declare const buildTradeTx: ({ osmoAddress, adapter, accountNumber, buyAssetDenom, sellAssetDenom, sellAmount, gas, wallet, }: {
|
|
26
26
|
osmoAddress: string;
|
|
27
27
|
adapter: osmosis.ChainAdapter;
|
|
28
|
+
accountNumber: number;
|
|
28
29
|
buyAssetDenom: string;
|
|
29
30
|
sellAssetDenom: string;
|
|
30
31
|
sellAmount: string;
|
|
@@ -43,7 +43,7 @@ const pollForComplete = async (txid, baseUrl) => {
|
|
|
43
43
|
}
|
|
44
44
|
else if (Date.now() - startTime > timeout) {
|
|
45
45
|
reject(new api_1.SwapError(`Couldnt find tx ${txid}`, {
|
|
46
|
-
code: api_1.
|
|
46
|
+
code: api_1.SwapErrorType.RESPONSE_ERROR,
|
|
47
47
|
}));
|
|
48
48
|
}
|
|
49
49
|
else {
|
|
@@ -61,7 +61,7 @@ const getAtomChannelBalance = async (address, osmoUrl) => {
|
|
|
61
61
|
}
|
|
62
62
|
catch (e) {
|
|
63
63
|
throw new api_1.SwapError('failed to get balance', {
|
|
64
|
-
code: api_1.
|
|
64
|
+
code: api_1.SwapErrorType.RESPONSE_ERROR,
|
|
65
65
|
});
|
|
66
66
|
}
|
|
67
67
|
})();
|
|
@@ -88,7 +88,7 @@ const pollForAtomChannelBalance = async (address, osmoUrl) => {
|
|
|
88
88
|
}
|
|
89
89
|
else if (Date.now() - startTime > timeout) {
|
|
90
90
|
reject(new api_1.SwapError(`Couldnt find channel balance for ${address}`, {
|
|
91
|
-
code: api_1.
|
|
91
|
+
code: api_1.SwapErrorType.RESPONSE_ERROR,
|
|
92
92
|
}));
|
|
93
93
|
}
|
|
94
94
|
else {
|
|
@@ -109,7 +109,7 @@ const findPool = async (sellAssetSymbol, buyAssetSymbol, osmoUrl) => {
|
|
|
109
109
|
}
|
|
110
110
|
catch (e) {
|
|
111
111
|
throw new api_1.SwapError('failed to get pool', {
|
|
112
|
-
code: api_1.
|
|
112
|
+
code: api_1.SwapErrorType.POOL_NOT_FOUND,
|
|
113
113
|
});
|
|
114
114
|
}
|
|
115
115
|
})();
|
|
@@ -121,7 +121,7 @@ const findPool = async (sellAssetSymbol, buyAssetSymbol, osmoUrl) => {
|
|
|
121
121
|
});
|
|
122
122
|
if (!foundPool)
|
|
123
123
|
throw new api_1.SwapError('could not find pool', {
|
|
124
|
-
code: api_1.
|
|
124
|
+
code: api_1.SwapErrorType.POOL_NOT_FOUND,
|
|
125
125
|
});
|
|
126
126
|
const { sellAssetIndex, buyAssetIndex } = (() => {
|
|
127
127
|
if (foundPool.pool_assets[0].token.denom === sellAssetDenom) {
|
|
@@ -169,7 +169,7 @@ const performIbcTransfer = async (input, adapter, wallet, blockBaseUrl, denom, s
|
|
|
169
169
|
}
|
|
170
170
|
catch (e) {
|
|
171
171
|
throw new api_1.SwapError('failed to get latest block', {
|
|
172
|
-
code: api_1.
|
|
172
|
+
code: api_1.SwapErrorType.RESPONSE_ERROR,
|
|
173
173
|
});
|
|
174
174
|
}
|
|
175
175
|
})();
|
|
@@ -206,12 +206,13 @@ const performIbcTransfer = async (input, adapter, wallet, blockBaseUrl, denom, s
|
|
|
206
206
|
},
|
|
207
207
|
],
|
|
208
208
|
};
|
|
209
|
+
const bip44Params = adapter.getBIP44Params({ accountNumber });
|
|
209
210
|
const signed = await adapter.signTransaction({
|
|
210
211
|
txToSign: {
|
|
211
212
|
tx,
|
|
212
|
-
addressNList: (0, chain_adapters_1.toAddressNList)(
|
|
213
|
+
addressNList: (0, chain_adapters_1.toAddressNList)(bip44Params),
|
|
213
214
|
chain_id: (0, caip_1.fromChainId)(adapter.getChainId()).chainReference,
|
|
214
|
-
account_number: accountNumber,
|
|
215
|
+
account_number: accountNumber.toString(),
|
|
215
216
|
sequence,
|
|
216
217
|
},
|
|
217
218
|
wallet,
|
|
@@ -223,9 +224,8 @@ const performIbcTransfer = async (input, adapter, wallet, blockBaseUrl, denom, s
|
|
|
223
224
|
};
|
|
224
225
|
exports.performIbcTransfer = performIbcTransfer;
|
|
225
226
|
// TODO: move to chain adapters
|
|
226
|
-
const buildTradeTx = async ({ osmoAddress, adapter, buyAssetDenom, sellAssetDenom, sellAmount, gas, wallet, }) => {
|
|
227
|
+
const buildTradeTx = async ({ osmoAddress, adapter, accountNumber, buyAssetDenom, sellAssetDenom, sellAmount, gas, wallet, }) => {
|
|
227
228
|
const responseAccount = await adapter.getAccount(osmoAddress);
|
|
228
|
-
const accountNumber = responseAccount.chainSpecific.accountNumber || '0';
|
|
229
229
|
const sequence = responseAccount.chainSpecific.sequence || '0';
|
|
230
230
|
const tx = {
|
|
231
231
|
memo: '',
|
|
@@ -259,12 +259,13 @@ const buildTradeTx = async ({ osmoAddress, adapter, buyAssetDenom, sellAssetDeno
|
|
|
259
259
|
},
|
|
260
260
|
],
|
|
261
261
|
};
|
|
262
|
+
const bip44Params = adapter.getBIP44Params({ accountNumber });
|
|
262
263
|
return {
|
|
263
264
|
txToSign: {
|
|
264
265
|
tx,
|
|
265
|
-
addressNList: (0, chain_adapters_1.toAddressNList)(
|
|
266
|
+
addressNList: (0, chain_adapters_1.toAddressNList)(bip44Params),
|
|
266
267
|
chain_id: caip_1.CHAIN_REFERENCE.OsmosisMainnet,
|
|
267
|
-
account_number: accountNumber,
|
|
268
|
+
account_number: accountNumber.toString(),
|
|
268
269
|
sequence,
|
|
269
270
|
},
|
|
270
271
|
wallet,
|
|
@@ -33,7 +33,7 @@ class TestSwapper {
|
|
|
33
33
|
}
|
|
34
34
|
async approveAmount() {
|
|
35
35
|
throw new api_1.SwapError('TestSwapper: approveAmount unimplemented', {
|
|
36
|
-
code: api_1.
|
|
36
|
+
code: api_1.SwapErrorType.RESPONSE_ERROR,
|
|
37
37
|
});
|
|
38
38
|
}
|
|
39
39
|
filterBuyAssetsBySellAssetId(args) {
|
|
@@ -71,7 +71,7 @@ class ThorchainSwapper {
|
|
|
71
71
|
}
|
|
72
72
|
catch (e) {
|
|
73
73
|
throw new api_1.SwapError('[thorchainInitialize]: initialize failed to set supportedAssetIds', {
|
|
74
|
-
code: api_1.
|
|
74
|
+
code: api_1.SwapErrorType.INITIALIZE_FAILED,
|
|
75
75
|
cause: e,
|
|
76
76
|
});
|
|
77
77
|
}
|
|
@@ -90,7 +90,7 @@ class ThorchainSwapper {
|
|
|
90
90
|
}
|
|
91
91
|
async approveAmount() {
|
|
92
92
|
throw new api_1.SwapError('ThorchainSwapper: approveAmount unimplemented', {
|
|
93
|
-
code: api_1.
|
|
93
|
+
code: api_1.SwapErrorType.RESPONSE_ERROR,
|
|
94
94
|
});
|
|
95
95
|
}
|
|
96
96
|
filterBuyAssetsBySellAssetId(args) {
|
|
@@ -114,7 +114,7 @@ class ThorchainSwapper {
|
|
|
114
114
|
const adapter = this.deps.adapterManager.get(trade.sellAsset.chainId);
|
|
115
115
|
if (!adapter)
|
|
116
116
|
throw new api_1.SwapError('[executeTrade]: no adapter for sell asset chain id', {
|
|
117
|
-
code: api_1.
|
|
117
|
+
code: api_1.SwapErrorType.SIGN_AND_BROADCAST_FAILED,
|
|
118
118
|
details: { chainId: trade.sellAsset.chainId },
|
|
119
119
|
fn: 'executeTrade',
|
|
120
120
|
});
|
|
@@ -148,7 +148,7 @@ class ThorchainSwapper {
|
|
|
148
148
|
}
|
|
149
149
|
else {
|
|
150
150
|
throw new api_1.SwapError('[executeTrade]: unsupported trade', {
|
|
151
|
-
code: api_1.
|
|
151
|
+
code: api_1.SwapErrorType.SIGN_AND_BROADCAST_FAILED,
|
|
152
152
|
fn: 'executeTrade',
|
|
153
153
|
});
|
|
154
154
|
}
|
|
@@ -157,7 +157,7 @@ class ThorchainSwapper {
|
|
|
157
157
|
if (e instanceof api_1.SwapError)
|
|
158
158
|
throw e;
|
|
159
159
|
throw new api_1.SwapError('[executeTrade]: failed to sign or broadcast', {
|
|
160
|
-
code: api_1.
|
|
160
|
+
code: api_1.SwapErrorType.SIGN_AND_BROADCAST_FAILED,
|
|
161
161
|
cause: e,
|
|
162
162
|
});
|
|
163
163
|
}
|
|
@@ -178,7 +178,7 @@ class ThorchainSwapper {
|
|
|
178
178
|
// This will detect all the errors I have seen.
|
|
179
179
|
if (((_c = data === null || data === void 0 ? void 0 : data.actions[0]) === null || _c === void 0 ? void 0 : _c.status) === 'success' && ((_d = data === null || data === void 0 ? void 0 : data.actions[0]) === null || _d === void 0 ? void 0 : _d.type) !== 'swap')
|
|
180
180
|
throw new api_1.SwapError('[getTradeTxs]: trade failed', {
|
|
181
|
-
code: api_1.
|
|
181
|
+
code: api_1.SwapErrorType.TRADE_FAILED,
|
|
182
182
|
cause: data,
|
|
183
183
|
});
|
|
184
184
|
const standardBuyTxid = (() => {
|
|
@@ -196,7 +196,7 @@ class ThorchainSwapper {
|
|
|
196
196
|
if (e instanceof api_1.SwapError)
|
|
197
197
|
throw e;
|
|
198
198
|
throw new api_1.SwapError('[getTradeTxs]: error', {
|
|
199
|
-
code: api_1.
|
|
199
|
+
code: api_1.SwapErrorType.GET_TRADE_TXS_FAILED,
|
|
200
200
|
cause: e,
|
|
201
201
|
});
|
|
202
202
|
}
|
|
@@ -17,7 +17,7 @@ const buildTrade = async ({ deps, input }) => {
|
|
|
17
17
|
const sellAdapter = deps.adapterManager.get(sellAsset.chainId);
|
|
18
18
|
if (!sellAdapter)
|
|
19
19
|
throw new api_1.SwapError('[buildTrade]: unsupported sell asset', {
|
|
20
|
-
code: api_1.
|
|
20
|
+
code: api_1.SwapErrorType.BUILD_TRADE_FAILED,
|
|
21
21
|
fn: 'buildTrade',
|
|
22
22
|
details: { sellAsset },
|
|
23
23
|
});
|
|
@@ -98,7 +98,7 @@ const buildTrade = async ({ deps, input }) => {
|
|
|
98
98
|
}
|
|
99
99
|
else {
|
|
100
100
|
throw new api_1.SwapError('[buildTrade]: unsupported chain id', {
|
|
101
|
-
code: api_1.
|
|
101
|
+
code: api_1.SwapErrorType.BUILD_TRADE_FAILED,
|
|
102
102
|
fn: 'buildTrade',
|
|
103
103
|
details: { sellAsset },
|
|
104
104
|
});
|
|
@@ -108,7 +108,7 @@ const buildTrade = async ({ deps, input }) => {
|
|
|
108
108
|
if (e instanceof api_1.SwapError)
|
|
109
109
|
throw e;
|
|
110
110
|
throw new api_1.SwapError('[buildTrade]: error building trade', {
|
|
111
|
-
code: api_1.
|
|
111
|
+
code: api_1.SwapErrorType.BUILD_TRADE_FAILED,
|
|
112
112
|
fn: 'buildTrade',
|
|
113
113
|
cause: e,
|
|
114
114
|
});
|
|
@@ -24,7 +24,7 @@ const getThorTradeQuote = async ({ deps, input }) => {
|
|
|
24
24
|
const buyAdapter = deps.adapterManager.get(buyAssetChainId);
|
|
25
25
|
if (!sellAdapter || !buyAdapter)
|
|
26
26
|
throw new api_1.SwapError(`[getThorTradeQuote] - No chain adapter found for ${chainId} or ${buyAssetChainId}.`, {
|
|
27
|
-
code: api_1.
|
|
27
|
+
code: api_1.SwapErrorType.UNSUPPORTED_CHAIN,
|
|
28
28
|
details: { sellAssetChainId: chainId, buyAssetChainId },
|
|
29
29
|
});
|
|
30
30
|
const rate = await (0, getTradeRate_1.getTradeRate)(sellAsset, buyAsset.assetId, sellAmountCryptoBaseUnit, deps);
|
|
@@ -129,7 +129,7 @@ const getThorTradeQuote = async ({ deps, input }) => {
|
|
|
129
129
|
})();
|
|
130
130
|
default:
|
|
131
131
|
throw new api_1.SwapError('[getThorTradeQuote] - Asset chainId is not supported.', {
|
|
132
|
-
code: api_1.
|
|
132
|
+
code: api_1.SwapErrorType.UNSUPPORTED_CHAIN,
|
|
133
133
|
details: { chainId },
|
|
134
134
|
});
|
|
135
135
|
}
|
|
@@ -139,7 +139,7 @@ const getThorTradeQuote = async ({ deps, input }) => {
|
|
|
139
139
|
throw e;
|
|
140
140
|
throw new api_1.SwapError('[getThorTradeQuote]', {
|
|
141
141
|
cause: e,
|
|
142
|
-
code: api_1.
|
|
142
|
+
code: api_1.SwapErrorType.TRADE_QUOTE_FAILED,
|
|
143
143
|
});
|
|
144
144
|
}
|
|
145
145
|
};
|
|
@@ -19,7 +19,7 @@ const thorTradeApprovalNeeded = async ({ deps, input, }) => {
|
|
|
19
19
|
const adapter = adapterManager.get(sellAsset.chainId);
|
|
20
20
|
if (!adapter)
|
|
21
21
|
throw new api_1.SwapError(`[thorTradeApprovalNeeded] - no chain adapter found for chain Id: ${sellAsset.chainId}`, {
|
|
22
|
-
code: api_1.
|
|
22
|
+
code: api_1.SwapErrorType.UNSUPPORTED_CHAIN,
|
|
23
23
|
details: { chainId: sellAsset.chainId },
|
|
24
24
|
});
|
|
25
25
|
// No approval needed for selling a fee asset
|
|
@@ -29,7 +29,7 @@ const thorTradeApprovalNeeded = async ({ deps, input, }) => {
|
|
|
29
29
|
const receiveAddress = await adapter.getAddress({ wallet, accountNumber });
|
|
30
30
|
if (!quote.allowanceContract) {
|
|
31
31
|
throw new api_1.SwapError('[thorTradeApprovalNeeded] - allowanceTarget is required', {
|
|
32
|
-
code: api_1.
|
|
32
|
+
code: api_1.SwapErrorType.VALIDATION_FAILED,
|
|
33
33
|
details: { chainId: sellAsset.chainId },
|
|
34
34
|
});
|
|
35
35
|
}
|
|
@@ -43,7 +43,7 @@ const thorTradeApprovalNeeded = async ({ deps, input, }) => {
|
|
|
43
43
|
const allowanceOnChain = (0, bignumber_1.bnOrZero)(allowanceResult);
|
|
44
44
|
if (!((_a = quote.feeData.chainSpecific) === null || _a === void 0 ? void 0 : _a.gasPriceCryptoBaseUnit))
|
|
45
45
|
throw new api_1.SwapError('[thorTradeApprovalNeeded] - no gas price with quote', {
|
|
46
|
-
code: api_1.
|
|
46
|
+
code: api_1.SwapErrorType.RESPONSE_ERROR,
|
|
47
47
|
details: { feeData: quote.feeData },
|
|
48
48
|
});
|
|
49
49
|
return {
|
|
@@ -55,7 +55,7 @@ const thorTradeApprovalNeeded = async ({ deps, input, }) => {
|
|
|
55
55
|
throw e;
|
|
56
56
|
throw new api_1.SwapError('[thorTradeApprovalNeeded]', {
|
|
57
57
|
cause: e,
|
|
58
|
-
code: api_1.
|
|
58
|
+
code: api_1.SwapErrorType.CHECK_APPROVAL_FAILED,
|
|
59
59
|
});
|
|
60
60
|
}
|
|
61
61
|
};
|
|
@@ -28,7 +28,7 @@ const thorTradeApproveInfinite = async ({ deps, input, }) => {
|
|
|
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
|
-
code: api_1.
|
|
31
|
+
code: api_1.SwapErrorType.UNSUPPORTED_CHAIN,
|
|
32
32
|
details: { sellAssetChainId },
|
|
33
33
|
});
|
|
34
34
|
const allowanceGrantRequired = await (0, helpers_1.grantAllowance)({
|
|
@@ -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.
|
|
48
|
+
code: api_1.SwapErrorType.APPROVE_INFINITE_FAILED,
|
|
49
49
|
});
|
|
50
50
|
}
|
|
51
51
|
};
|
|
@@ -11,7 +11,7 @@ const getThorTxInfo = async ({ deps, sellAsset, buyAsset, sellAmountCryptoBaseUn
|
|
|
11
11
|
const vault = inboundAddress === null || inboundAddress === void 0 ? void 0 : inboundAddress.address;
|
|
12
12
|
if (!vault)
|
|
13
13
|
throw new api_1.SwapError(`[getThorTxInfo]: vault not found for asset`, {
|
|
14
|
-
code: api_1.
|
|
14
|
+
code: api_1.SwapErrorType.RESPONSE_ERROR,
|
|
15
15
|
details: { inboundAddress, sellAsset },
|
|
16
16
|
});
|
|
17
17
|
const limit = await (0, getLimit_1.getLimit)({
|
|
@@ -36,7 +36,7 @@ const getThorTxInfo = async ({ deps, sellAsset, buyAsset, sellAmountCryptoBaseUn
|
|
|
36
36
|
catch (e) {
|
|
37
37
|
if (e instanceof api_1.SwapError)
|
|
38
38
|
throw e;
|
|
39
|
-
throw new api_1.SwapError('[getThorTxInfo]', { cause: e, code: api_1.
|
|
39
|
+
throw new api_1.SwapError('[getThorTxInfo]', { cause: e, code: api_1.SwapErrorType.TRADE_QUOTE_FAILED });
|
|
40
40
|
}
|
|
41
41
|
};
|
|
42
42
|
exports.getThorTxInfo = getThorTxInfo;
|
|
@@ -14,7 +14,7 @@ const getCosmosTxData = async (input) => {
|
|
|
14
14
|
const vault = gaiaAddressData === null || gaiaAddressData === void 0 ? void 0 : gaiaAddressData.address;
|
|
15
15
|
if (!vault && !fromThorAsset)
|
|
16
16
|
throw new api_1.SwapError('[buildTrade]: no vault for chain', {
|
|
17
|
-
code: api_1.
|
|
17
|
+
code: api_1.SwapErrorType.BUILD_TRADE_FAILED,
|
|
18
18
|
fn: 'buildTrade',
|
|
19
19
|
details: { chainId: input.chainId },
|
|
20
20
|
});
|
|
@@ -47,7 +47,7 @@ const getCosmosTxData = async (input) => {
|
|
|
47
47
|
default:
|
|
48
48
|
if (!vault)
|
|
49
49
|
throw new api_1.SwapError('[buildTrade]: no vault for chain', {
|
|
50
|
-
code: api_1.
|
|
50
|
+
code: api_1.SwapErrorType.BUILD_TRADE_FAILED,
|
|
51
51
|
fn: 'buildTrade',
|
|
52
52
|
details: { chainId: input.chainId },
|
|
53
53
|
});
|
|
@@ -34,7 +34,7 @@ const makeTradeTx = async ({ wallet, accountNumber, sellAmountCryptoBaseUnit, bu
|
|
|
34
34
|
if (e instanceof api_1.SwapError)
|
|
35
35
|
throw e;
|
|
36
36
|
throw new api_1.SwapError('[makeTradeTx]: error making trade tx', {
|
|
37
|
-
code: api_1.
|
|
37
|
+
code: api_1.SwapErrorType.BUILD_TRADE_FAILED,
|
|
38
38
|
cause: e,
|
|
39
39
|
});
|
|
40
40
|
}
|
|
@@ -16,7 +16,7 @@ const getThorTxInfo = async ({ deps, sellAsset, buyAsset, sellAmountCryptoBaseUn
|
|
|
16
16
|
const vault = inboundAddress === null || inboundAddress === void 0 ? void 0 : inboundAddress.address;
|
|
17
17
|
if (!inboundAddress || !router || !vault)
|
|
18
18
|
throw new api_1.SwapError(`[getPriceRatio]: inboundAddress not found for ETH`, {
|
|
19
|
-
code: api_1.
|
|
19
|
+
code: api_1.SwapErrorType.RESPONSE_ERROR,
|
|
20
20
|
details: { inboundAddress },
|
|
21
21
|
});
|
|
22
22
|
const limit = await (0, getLimit_1.getLimit)({
|
|
@@ -38,7 +38,7 @@ const getThorTxInfo = async ({ deps, sellAsset, buyAsset, sellAmountCryptoBaseUn
|
|
|
38
38
|
catch (e) {
|
|
39
39
|
if (e instanceof api_1.SwapError)
|
|
40
40
|
throw e;
|
|
41
|
-
throw new api_1.SwapError('[getThorTxInfo]', { cause: e, code: api_1.
|
|
41
|
+
throw new api_1.SwapError('[getThorTxInfo]', { cause: e, code: api_1.SwapErrorType.TRADE_QUOTE_FAILED });
|
|
42
42
|
}
|
|
43
43
|
};
|
|
44
44
|
exports.getThorTxInfo = getThorTxInfo;
|
|
@@ -23,7 +23,7 @@ const getLimit = async ({ sellAsset, buyAssetId, sellAmountCryptoBaseUnit, deps,
|
|
|
23
23
|
.get((0, caip_1.fromAssetId)(buyAssetId).chainId)) === null || _b === void 0 ? void 0 : _b.getFeeAssetId();
|
|
24
24
|
if (!sellAssetChainFeeAssetId || !buyAssetChainFeeAssetId) {
|
|
25
25
|
throw new api_1.SwapError('[getLimit]: no sellAssetChainFeeAsset or buyAssetChainFeeAssetId', {
|
|
26
|
-
code: api_1.
|
|
26
|
+
code: api_1.SwapErrorType.BUILD_TRADE_FAILED,
|
|
27
27
|
details: { sellAssetChainFeeAssetId, buyAssetChainFeeAssetId },
|
|
28
28
|
});
|
|
29
29
|
}
|
|
@@ -33,7 +33,7 @@ const getLimit = async ({ sellAsset, buyAssetId, sellAmountCryptoBaseUnit, deps,
|
|
|
33
33
|
const isValidSlippageRange = (0, bignumber_1.bnOrZero)(slippageTolerance).gte(0) && (0, bignumber_1.bnOrZero)(slippageTolerance).lte(1);
|
|
34
34
|
if ((0, bignumber_1.bnOrZero)(expectedBuyAmountCryptoPrecision8).lt(0) || !isValidSlippageRange)
|
|
35
35
|
throw new api_1.SwapError('[getLimit]: bad expected buy amount or bad slippage tolerance', {
|
|
36
|
-
code: api_1.
|
|
36
|
+
code: api_1.SwapErrorType.BUILD_TRADE_FAILED,
|
|
37
37
|
details: { expectedBuyAmountCryptoPrecision8, slippageTolerance },
|
|
38
38
|
});
|
|
39
39
|
const buyAssetTradeFeeCryptoPrecision8 = (0, bignumber_1.toBaseUnit)((0, bignumber_1.bnOrZero)(buyAssetTradeFeeUsd).div(buyAssetUsdRate), constants_3.THORCHAIN_FIXED_PRECISION);
|
|
@@ -13,14 +13,14 @@ const getPriceRatio = async (deps, input) => {
|
|
|
13
13
|
const sellPoolId = caip_1.adapters.assetIdToPoolAssetId({ assetId: sellAssetId });
|
|
14
14
|
if (!buyPoolId && !(0, isRune_1.isRune)(buyAssetId)) {
|
|
15
15
|
throw new api_1.SwapError(`[getPriceRatio]: No buyPoolId found for asset ${buyAssetId}`, {
|
|
16
|
-
code: api_1.
|
|
16
|
+
code: api_1.SwapErrorType.POOL_NOT_FOUND,
|
|
17
17
|
fn: 'getPriceRatio',
|
|
18
18
|
details: { buyAssetId },
|
|
19
19
|
});
|
|
20
20
|
}
|
|
21
21
|
if (!sellPoolId && !(0, isRune_1.isRune)(sellAssetId)) {
|
|
22
22
|
throw new api_1.SwapError(`[getPriceRatio]: No sellPoolId found for asset ${sellAssetId}`, {
|
|
23
|
-
code: api_1.
|
|
23
|
+
code: api_1.SwapErrorType.POOL_NOT_FOUND,
|
|
24
24
|
fn: 'getPriceRatio',
|
|
25
25
|
details: { sellAssetId },
|
|
26
26
|
});
|
|
@@ -49,7 +49,7 @@ const getPriceRatio = async (deps, input) => {
|
|
|
49
49
|
}
|
|
50
50
|
if (!buyPool || !sellPool) {
|
|
51
51
|
throw new api_1.SwapError(`[getPriceRatio]: pools not found`, {
|
|
52
|
-
code: api_1.
|
|
52
|
+
code: api_1.SwapErrorType.RESPONSE_ERROR,
|
|
53
53
|
details: { buyPoolId, sellPoolId },
|
|
54
54
|
});
|
|
55
55
|
}
|
|
@@ -57,7 +57,7 @@ const getPriceRatio = async (deps, input) => {
|
|
|
57
57
|
const sellPrice = (0, bignumber_1.bn)(sellPool.balance_rune).dividedBy(sellPool.balance_asset);
|
|
58
58
|
if (!buyPrice.gt(0) || !sellPrice.gt(0)) {
|
|
59
59
|
throw new api_1.SwapError(`[getPriceRatio]: invalid pool price`, {
|
|
60
|
-
code: api_1.
|
|
60
|
+
code: api_1.SwapErrorType.RESPONSE_ERROR,
|
|
61
61
|
details: { buyPrice, sellPrice },
|
|
62
62
|
});
|
|
63
63
|
}
|
|
@@ -67,7 +67,7 @@ const getPriceRatio = async (deps, input) => {
|
|
|
67
67
|
if (e instanceof api_1.SwapError)
|
|
68
68
|
throw e;
|
|
69
69
|
throw new api_1.SwapError('[getPriceRatio]: Thorchain getPriceRatio failed', {
|
|
70
|
-
code: api_1.
|
|
70
|
+
code: api_1.SwapErrorType.PRICE_RATIO_FAILED,
|
|
71
71
|
cause: e,
|
|
72
72
|
});
|
|
73
73
|
}
|
|
@@ -44,14 +44,14 @@ const getTradeRate = async (sellAsset, buyAssetId, sellAmountCryptoPrecision, de
|
|
|
44
44
|
const sellPoolId = caip_1.adapters.assetIdToPoolAssetId({ assetId: sellAsset.assetId });
|
|
45
45
|
if (!buyPoolId && !(0, isRune_1.isRune)(buyAssetId)) {
|
|
46
46
|
throw new api_1.SwapError(`[getTradeRate]: No buyPoolId for asset ${buyAssetId}`, {
|
|
47
|
-
code: api_1.
|
|
47
|
+
code: api_1.SwapErrorType.POOL_NOT_FOUND,
|
|
48
48
|
fn: 'getTradeRate',
|
|
49
49
|
details: { buyAssetId },
|
|
50
50
|
});
|
|
51
51
|
}
|
|
52
52
|
if (!sellPoolId && !(0, isRune_1.isRune)(sellAsset.assetId)) {
|
|
53
53
|
throw new api_1.SwapError(`[getTradeRate]: No sellPoolId for asset ${sellAsset.assetId}`, {
|
|
54
|
-
code: api_1.
|
|
54
|
+
code: api_1.SwapErrorType.POOL_NOT_FOUND,
|
|
55
55
|
fn: 'getTradeRate',
|
|
56
56
|
details: { sellAsset: sellAsset.assetId },
|
|
57
57
|
});
|
|
@@ -61,14 +61,14 @@ const getTradeRate = async (sellAsset, buyAssetId, sellAmountCryptoPrecision, de
|
|
|
61
61
|
const sellPool = sellPoolId ? data.find((response) => response.asset === sellPoolId) : null;
|
|
62
62
|
if (!buyPool && !(0, isRune_1.isRune)(buyAssetId)) {
|
|
63
63
|
throw new api_1.SwapError(`[getTradeRate]: no pools found`, {
|
|
64
|
-
code: api_1.
|
|
64
|
+
code: api_1.SwapErrorType.POOL_NOT_FOUND,
|
|
65
65
|
fn: 'getTradeRate',
|
|
66
66
|
details: { buyPoolId, sellPoolId },
|
|
67
67
|
});
|
|
68
68
|
}
|
|
69
69
|
if (!sellPool && !(0, isRune_1.isRune)(sellAsset.assetId)) {
|
|
70
70
|
throw new api_1.SwapError(`[getTradeRate]: no pools found`, {
|
|
71
|
-
code: api_1.
|
|
71
|
+
code: api_1.SwapErrorType.POOL_NOT_FOUND,
|
|
72
72
|
fn: 'getTradeRate',
|
|
73
73
|
details: { buyPoolId, sellPoolId },
|
|
74
74
|
});
|
|
@@ -30,7 +30,7 @@ const getRuneUsdPrice = async (daemonUrl) => {
|
|
|
30
30
|
}, { aggregatedRuneUsdPrice: (0, bignumber_1.bn)(0), numPools: 0 });
|
|
31
31
|
if (!numPools) {
|
|
32
32
|
throw new api_1.SwapError('[getUsdRate]: no available usd pools', {
|
|
33
|
-
code: api_1.
|
|
33
|
+
code: api_1.SwapErrorType.USD_RATE_FAILED,
|
|
34
34
|
});
|
|
35
35
|
}
|
|
36
36
|
// aggregatedRuneUsdPrice / numPools = averageRuneUsdPrice
|
|
@@ -45,20 +45,20 @@ const getUsdRate = async (daemonUrl, assetId) => {
|
|
|
45
45
|
const poolId = caip_1.adapters.assetIdToPoolAssetId({ assetId });
|
|
46
46
|
if (!poolId) {
|
|
47
47
|
throw new api_1.SwapError(`[getUsdRate]: no pool found for assetId: ${assetId}`, {
|
|
48
|
-
code: api_1.
|
|
48
|
+
code: api_1.SwapErrorType.USD_RATE_FAILED,
|
|
49
49
|
});
|
|
50
50
|
}
|
|
51
51
|
const { data } = await thorService_1.thorService.get(`${daemonUrl}/lcd/thorchain/pool/${poolId}`);
|
|
52
52
|
if (data.status !== 'Available') {
|
|
53
53
|
throw new api_1.SwapError('[getUsdRate]: pool is no longer available', {
|
|
54
|
-
code: api_1.
|
|
54
|
+
code: api_1.SwapErrorType.USD_RATE_FAILED,
|
|
55
55
|
});
|
|
56
56
|
}
|
|
57
57
|
const assetBalance = (0, bignumber_1.bnOrZero)(data.balance_asset);
|
|
58
58
|
const runeBalance = (0, bignumber_1.bnOrZero)(data.balance_rune);
|
|
59
59
|
if (assetBalance.isZero() || runeBalance.isZero()) {
|
|
60
60
|
throw new api_1.SwapError('[getUsdRate]: pool has a zero balance', {
|
|
61
|
-
code: api_1.
|
|
61
|
+
code: api_1.SwapErrorType.USD_RATE_FAILED,
|
|
62
62
|
});
|
|
63
63
|
}
|
|
64
64
|
const runeUsdPrice = await getRuneUsdPrice(daemonUrl);
|
|
@@ -71,7 +71,7 @@ const getUsdRate = async (daemonUrl, assetId) => {
|
|
|
71
71
|
if (e instanceof api_1.SwapError)
|
|
72
72
|
throw e;
|
|
73
73
|
throw new api_1.SwapError('[getUsdRate]: Thorchain getUsdRate failed', {
|
|
74
|
-
code: api_1.
|
|
74
|
+
code: api_1.SwapErrorType.USD_RATE_FAILED,
|
|
75
75
|
cause: e,
|
|
76
76
|
});
|
|
77
77
|
}
|
|
@@ -17,7 +17,7 @@ const makeSwapMemo = ({ buyAssetId, destinationAddress, limit, }) => {
|
|
|
17
17
|
const thorId = isRune ? runeThorId : caip_1.adapters.assetIdToPoolAssetId({ assetId: buyAssetId });
|
|
18
18
|
if (!thorId)
|
|
19
19
|
throw new api_1.SwapError('[makeSwapMemo] - undefined thorId for given buyAssetId', {
|
|
20
|
-
code: api_1.
|
|
20
|
+
code: api_1.SwapErrorType.MAKE_MEMO_FAILED,
|
|
21
21
|
details: { buyAssetId },
|
|
22
22
|
});
|
|
23
23
|
// bch hack
|
|
@@ -33,13 +33,13 @@ const makeSwapMemo = ({ buyAssetId, destinationAddress, limit, }) => {
|
|
|
33
33
|
const abbreviationAmount = memo.length - MAX_LENGTH;
|
|
34
34
|
if (abbreviationAmount > 39)
|
|
35
35
|
throw new api_1.SwapError('[makeSwapMemo] - too much abbreviation for accurate matching', {
|
|
36
|
-
code: api_1.
|
|
36
|
+
code: api_1.SwapErrorType.MAKE_MEMO_FAILED,
|
|
37
37
|
});
|
|
38
38
|
// delimeter between ticker and id allowing us to abbreviate the id: https://dev.thorchain.org/thorchain-dev/memos#asset-notation
|
|
39
39
|
const delimeterIndex = memo.indexOf('-') + 1;
|
|
40
40
|
if (!delimeterIndex) {
|
|
41
41
|
throw new api_1.SwapError('[makeSwapMemo] - unable to abbreviate asset, no delimeter found', {
|
|
42
|
-
code: api_1.
|
|
42
|
+
code: api_1.SwapErrorType.MAKE_MEMO_FAILED,
|
|
43
43
|
});
|
|
44
44
|
}
|
|
45
45
|
return memo.replace(memo.slice(delimeterIndex, delimeterIndex + abbreviationAmount), '');
|
|
@@ -40,7 +40,7 @@ const getEvmTxFees = async ({ adapter, sellAssetReference, buyAssetTradeFeeUsd,
|
|
|
40
40
|
catch (e) {
|
|
41
41
|
if (e instanceof api_1.SwapError)
|
|
42
42
|
throw e;
|
|
43
|
-
throw new api_1.SwapError('[getThorTxInfo]', { cause: e, code: api_1.
|
|
43
|
+
throw new api_1.SwapError('[getThorTxInfo]', { cause: e, code: api_1.SwapErrorType.TRADE_QUOTE_FAILED });
|
|
44
44
|
}
|
|
45
45
|
};
|
|
46
46
|
exports.getEvmTxFees = getEvmTxFees;
|
|
@@ -38,7 +38,7 @@ const getUtxoTxFees = async ({ opReturnData, vault, sellAmountCryptoBaseUnit, se
|
|
|
38
38
|
catch (e) {
|
|
39
39
|
if (e instanceof api_1.SwapError)
|
|
40
40
|
throw e;
|
|
41
|
-
throw new api_1.SwapError('[getUtxoTxFees]', { cause: e, code: api_1.
|
|
41
|
+
throw new api_1.SwapError('[getUtxoTxFees]', { cause: e, code: api_1.SwapErrorType.TRADE_QUOTE_FAILED });
|
|
42
42
|
}
|
|
43
43
|
};
|
|
44
44
|
exports.getUtxoTxFees = getUtxoTxFees;
|
|
@@ -30,7 +30,7 @@ const isApprovalRequired = async ({ adapter, receiveAddress, allowanceContract,
|
|
|
30
30
|
if (!allowanceOnChain) {
|
|
31
31
|
throw new api_1.SwapError(`[isApprovalRequired] - No allowance data`, {
|
|
32
32
|
details: { allowanceContract, receiveAddress },
|
|
33
|
-
code: api_1.
|
|
33
|
+
code: api_1.SwapErrorType.RESPONSE_ERROR,
|
|
34
34
|
});
|
|
35
35
|
}
|
|
36
36
|
if ((0, bignumber_1.bn)(allowanceOnChain).isZero())
|
|
@@ -43,7 +43,7 @@ const isApprovalRequired = async ({ adapter, receiveAddress, allowanceContract,
|
|
|
43
43
|
throw e;
|
|
44
44
|
throw new api_1.SwapError('[isApprovalRequired]', {
|
|
45
45
|
cause: e,
|
|
46
|
-
code: api_1.
|
|
46
|
+
code: api_1.SwapErrorType.ALLOWANCE_REQUIRED_FAILED,
|
|
47
47
|
});
|
|
48
48
|
}
|
|
49
49
|
};
|
|
@@ -86,7 +86,7 @@ const grantAllowance = async ({ quote, wallet, adapter, erc20Abi, web3, }) => {
|
|
|
86
86
|
}
|
|
87
87
|
else {
|
|
88
88
|
throw new api_1.SwapError('[grantAllowance] - invalid HDWallet config', {
|
|
89
|
-
code: api_1.
|
|
89
|
+
code: api_1.SwapErrorType.SIGN_AND_BROADCAST_FAILED,
|
|
90
90
|
});
|
|
91
91
|
}
|
|
92
92
|
}
|
|
@@ -95,7 +95,7 @@ const grantAllowance = async ({ quote, wallet, adapter, erc20Abi, web3, }) => {
|
|
|
95
95
|
throw e;
|
|
96
96
|
throw new api_1.SwapError('[grantAllowance]', {
|
|
97
97
|
cause: e,
|
|
98
|
-
code: api_1.
|
|
98
|
+
code: api_1.SwapErrorType.GRANT_ALLOWANCE_FAILED,
|
|
99
99
|
});
|
|
100
100
|
}
|
|
101
101
|
};
|
|
@@ -11,7 +11,7 @@ const getZrxMinMax = async (sellAsset, buyAsset) => {
|
|
|
11
11
|
if (!((0, chain_adapters_1.isEvmChainId)(sellAsset.chainId) &&
|
|
12
12
|
(0, chain_adapters_1.isEvmChainId)(buyAsset.chainId) &&
|
|
13
13
|
buyAsset.chainId === sellAsset.chainId)) {
|
|
14
|
-
throw new api_1.SwapError('[getZrxMinMax]', { code: api_1.
|
|
14
|
+
throw new api_1.SwapError('[getZrxMinMax]', { code: api_1.SwapErrorType.UNSUPPORTED_PAIR });
|
|
15
15
|
}
|
|
16
16
|
const usdRate = await (0, helpers_1.getUsdRate)({ ...sellAsset });
|
|
17
17
|
const minimum = (0, bignumber_1.bn)(1).dividedBy((0, bignumber_1.bnOrZero)(usdRate)).toString(); // $1 worth of the sell token.
|
|
@@ -24,7 +24,7 @@ const getZrxMinMax = async (sellAsset, buyAsset) => {
|
|
|
24
24
|
catch (e) {
|
|
25
25
|
if (e instanceof api_1.SwapError)
|
|
26
26
|
throw e;
|
|
27
|
-
throw new api_1.SwapError('[getZrxMinMax]', { cause: e, code: api_1.
|
|
27
|
+
throw new api_1.SwapError('[getZrxMinMax]', { cause: e, code: api_1.SwapErrorType.MIN_MAX_FAILED });
|
|
28
28
|
}
|
|
29
29
|
};
|
|
30
30
|
exports.getZrxMinMax = getZrxMinMax;
|
|
@@ -15,7 +15,7 @@ async function getZrxTradeQuote(input) {
|
|
|
15
15
|
const { sellAsset, buyAsset, sellAmountBeforeFeesCryptoBaseUnit: sellAmountCryptoBaseUnit, accountNumber, } = input;
|
|
16
16
|
if (buyAsset.chainId !== input.chainId || sellAsset.chainId !== input.chainId) {
|
|
17
17
|
throw new api_1.SwapError('[getZrxTradeQuote] - Both assets need to be on the same supported EVM chain to use Zrx', {
|
|
18
|
-
code: api_1.
|
|
18
|
+
code: api_1.SwapErrorType.UNSUPPORTED_PAIR,
|
|
19
19
|
details: { buyAssetChainId: buyAsset.chainId, sellAssetChainId: sellAsset.chainId },
|
|
20
20
|
});
|
|
21
21
|
}
|
|
@@ -82,7 +82,7 @@ async function getZrxTradeQuote(input) {
|
|
|
82
82
|
catch (e) {
|
|
83
83
|
if (e instanceof api_1.SwapError)
|
|
84
84
|
throw e;
|
|
85
|
-
throw new api_1.SwapError('[getZrxTradeQuote]', { cause: e, code: api_1.
|
|
85
|
+
throw new api_1.SwapError('[getZrxTradeQuote]', { cause: e, code: api_1.SwapErrorType.TRADE_QUOTE_FAILED });
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
88
|
exports.getZrxTradeQuote = getZrxTradeQuote;
|
|
@@ -15,7 +15,7 @@ const baseUrlFromChainId = (chainId) => {
|
|
|
15
15
|
return 'https://avalanche.api.0x.org/';
|
|
16
16
|
default:
|
|
17
17
|
throw new api_1.SwapError(`baseUrlFromChainId] - Unsupported chainId: ${chainId}`, {
|
|
18
|
-
code: api_1.
|
|
18
|
+
code: api_1.SwapErrorType.UNSUPPORTED_CHAIN,
|
|
19
19
|
});
|
|
20
20
|
}
|
|
21
21
|
};
|
|
@@ -29,7 +29,7 @@ const usdcContractFromChainId = (chainId) => {
|
|
|
29
29
|
return '0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e';
|
|
30
30
|
default:
|
|
31
31
|
throw new api_1.SwapError(`usdcContractFromChainId] - Unsupported chainId: ${chainId}`, {
|
|
32
|
-
code: api_1.
|
|
32
|
+
code: api_1.SwapErrorType.UNSUPPORTED_CHAIN,
|
|
33
33
|
});
|
|
34
34
|
}
|
|
35
35
|
};
|
|
@@ -65,7 +65,7 @@ const getUsdRate = async (asset) => {
|
|
|
65
65
|
const price = (0, bignumber_1.bnOrZero)(rateResponse.data.price);
|
|
66
66
|
if (!price.gt(0))
|
|
67
67
|
throw new api_1.SwapError('[getUsdRate] - Failed to get price data', {
|
|
68
|
-
code: api_1.
|
|
68
|
+
code: api_1.SwapErrorType.RESPONSE_ERROR,
|
|
69
69
|
});
|
|
70
70
|
return (0, bignumber_1.bn)(1).dividedBy(price).toString();
|
|
71
71
|
}
|
|
@@ -74,7 +74,7 @@ const getUsdRate = async (asset) => {
|
|
|
74
74
|
throw e;
|
|
75
75
|
throw new api_1.SwapError('[getUsdRate]', {
|
|
76
76
|
cause: e,
|
|
77
|
-
code: api_1.
|
|
77
|
+
code: api_1.SwapErrorType.USD_RATE_FAILED,
|
|
78
78
|
});
|
|
79
79
|
}
|
|
80
80
|
};
|
|
@@ -13,7 +13,7 @@ async function zrxApprovalNeeded({ adapter, web3 }, { quote, wallet }) {
|
|
|
13
13
|
try {
|
|
14
14
|
if (sellAsset.chainId !== adapter.getChainId()) {
|
|
15
15
|
throw new api_1.SwapError('[zrxApprovalNeeded] - sellAsset chainId is not supported', {
|
|
16
|
-
code: api_1.
|
|
16
|
+
code: api_1.SwapErrorType.UNSUPPORTED_CHAIN,
|
|
17
17
|
details: { chainId: sellAsset.chainId },
|
|
18
18
|
});
|
|
19
19
|
}
|
|
@@ -25,7 +25,7 @@ async function zrxApprovalNeeded({ adapter, web3 }, { quote, wallet }) {
|
|
|
25
25
|
const receiveAddress = await adapter.getAddress({ accountNumber, wallet });
|
|
26
26
|
if (!quote.allowanceContract) {
|
|
27
27
|
throw new api_1.SwapError('[zrxApprovalNeeded] - allowanceTarget is required', {
|
|
28
|
-
code: api_1.
|
|
28
|
+
code: api_1.SwapErrorType.VALIDATION_FAILED,
|
|
29
29
|
details: { chainId: sellAsset.chainId },
|
|
30
30
|
});
|
|
31
31
|
}
|
|
@@ -39,7 +39,7 @@ async function zrxApprovalNeeded({ adapter, web3 }, { quote, wallet }) {
|
|
|
39
39
|
const allowanceOnChain = (0, bignumber_1.bnOrZero)(allowanceResult);
|
|
40
40
|
if (!((_a = quote.feeData.chainSpecific) === null || _a === void 0 ? void 0 : _a.gasPriceCryptoBaseUnit))
|
|
41
41
|
throw new api_1.SwapError('[zrxApprovalNeeded] - no gas price with quote', {
|
|
42
|
-
code: api_1.
|
|
42
|
+
code: api_1.SwapErrorType.RESPONSE_ERROR,
|
|
43
43
|
details: { feeData: quote.feeData },
|
|
44
44
|
});
|
|
45
45
|
return {
|
|
@@ -51,7 +51,7 @@ async function zrxApprovalNeeded({ adapter, web3 }, { quote, wallet }) {
|
|
|
51
51
|
throw e;
|
|
52
52
|
throw new api_1.SwapError('[zrxApprovalNeeded]', {
|
|
53
53
|
cause: e,
|
|
54
|
-
code: api_1.
|
|
54
|
+
code: api_1.SwapErrorType.CHECK_APPROVAL_FAILED,
|
|
55
55
|
});
|
|
56
56
|
}
|
|
57
57
|
}
|
|
@@ -41,7 +41,7 @@ async function zrxApproveAmount(deps, args) {
|
|
|
41
41
|
throw e;
|
|
42
42
|
throw new api_1.SwapError('[zrxApproveAmount]', {
|
|
43
43
|
cause: e,
|
|
44
|
-
code: api_1.
|
|
44
|
+
code: api_1.SwapErrorType.APPROVE_AMOUNT_FAILED,
|
|
45
45
|
});
|
|
46
46
|
}
|
|
47
47
|
}
|
|
@@ -55,7 +55,7 @@ async function zrxApproveInfinite(deps, args) {
|
|
|
55
55
|
throw e;
|
|
56
56
|
throw new api_1.SwapError('[zrxApproveInfinite]', {
|
|
57
57
|
cause: e,
|
|
58
|
-
code: api_1.
|
|
58
|
+
code: api_1.SwapErrorType.APPROVE_INFINITE_FAILED,
|
|
59
59
|
});
|
|
60
60
|
}
|
|
61
61
|
}
|
|
@@ -45,7 +45,7 @@ async function zrxBuildTrade({ adapter, web3 }, input) {
|
|
|
45
45
|
const adapterChainId = adapter.getChainId();
|
|
46
46
|
if (buyAsset.chainId !== adapterChainId) {
|
|
47
47
|
throw new api_1.SwapError(`[zrxBuildTrade] - buyAsset must be on chainId ${adapterChainId}`, {
|
|
48
|
-
code: api_1.
|
|
48
|
+
code: api_1.SwapErrorType.VALIDATION_FAILED,
|
|
49
49
|
details: { chainId: sellAsset.chainId },
|
|
50
50
|
});
|
|
51
51
|
}
|
|
@@ -133,7 +133,7 @@ async function zrxBuildTrade({ adapter, web3 }, input) {
|
|
|
133
133
|
if (e instanceof api_1.SwapError)
|
|
134
134
|
throw e;
|
|
135
135
|
throw new api_1.SwapError('[zrxBuildTrade]', {
|
|
136
|
-
code: api_1.
|
|
136
|
+
code: api_1.SwapErrorType.BUILD_TRADE_FAILED,
|
|
137
137
|
});
|
|
138
138
|
}
|
|
139
139
|
}
|
|
@@ -38,7 +38,7 @@ async function zrxExecuteTrade({ adapter }, { trade, wallet }) {
|
|
|
38
38
|
}
|
|
39
39
|
else {
|
|
40
40
|
throw new api_1.SwapError('[zrxExecuteTrade]', {
|
|
41
|
-
code: api_1.
|
|
41
|
+
code: api_1.SwapErrorType.SIGN_AND_BROADCAST_FAILED,
|
|
42
42
|
});
|
|
43
43
|
}
|
|
44
44
|
}
|
|
@@ -47,7 +47,7 @@ async function zrxExecuteTrade({ adapter }, { trade, wallet }) {
|
|
|
47
47
|
throw e;
|
|
48
48
|
throw new api_1.SwapError('[zrxExecuteTrade]', {
|
|
49
49
|
cause: e,
|
|
50
|
-
code: api_1.
|
|
50
|
+
code: api_1.SwapErrorType.EXECUTE_TRADE_FAILED,
|
|
51
51
|
});
|
|
52
52
|
}
|
|
53
53
|
}
|
package/package.json
CHANGED