@shapeshiftoss/swapper 9.15.0 → 9.15.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.js +1 -1
- package/dist/swappers/cow/cowApprovalNeeded/cowApprovalNeeded.js +4 -4
- package/dist/swappers/cow/cowApproveInfinite/cowApproveInfinite.js +3 -3
- 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
|
@@ -9,7 +9,7 @@ const api_1 = require("../api");
|
|
|
9
9
|
function validateSwapper(swapper) {
|
|
10
10
|
if (!(typeof swapper === 'object' && typeof swapper.getType === 'function'))
|
|
11
11
|
throw new api_1.SwapError('[validateSwapper] - invalid swapper instance', {
|
|
12
|
-
code: api_1.SwapErrorTypes.MANAGER_ERROR
|
|
12
|
+
code: api_1.SwapErrorTypes.MANAGER_ERROR,
|
|
13
13
|
});
|
|
14
14
|
}
|
|
15
15
|
// TODO: remove me
|
|
@@ -38,7 +38,7 @@ class SwapperManager {
|
|
|
38
38
|
if (!swapper)
|
|
39
39
|
throw new api_1.SwapError('[getSwapper] - swapperType doesnt exist', {
|
|
40
40
|
code: api_1.SwapErrorTypes.MANAGER_ERROR,
|
|
41
|
-
details: { swapperType }
|
|
41
|
+
details: { swapperType },
|
|
42
42
|
});
|
|
43
43
|
return swapper;
|
|
44
44
|
}
|
|
@@ -52,7 +52,7 @@ class SwapperManager {
|
|
|
52
52
|
if (!swapper)
|
|
53
53
|
throw new api_1.SwapError('[removeSwapper] - swapperType doesnt exist', {
|
|
54
54
|
code: api_1.SwapErrorTypes.MANAGER_ERROR,
|
|
55
|
-
details: { swapperType }
|
|
55
|
+
details: { swapperType },
|
|
56
56
|
});
|
|
57
57
|
this.swappers.delete(swapperType);
|
|
58
58
|
return this;
|
package/dist/swappercli.js
CHANGED
|
@@ -38,7 +38,7 @@ const web3_1 = __importDefault(require("web3"));
|
|
|
38
38
|
const SwapperManager_1 = require("./manager/SwapperManager");
|
|
39
39
|
const ZrxSwapper_1 = require("./swappers/zrx/ZrxSwapper");
|
|
40
40
|
dotenv_1.default.config();
|
|
41
|
-
const { UNCHAINED_HTTP_API = 'http://localhost:31300', UNCHAINED_WS_API = 'wss://localhost:31300', ETH_NODE_URL = 'http://localhost:3000', DEVICE_ID = 'device123', MNEMONIC = 'all all all all all all all all all all all all' } = process.env;
|
|
41
|
+
const { UNCHAINED_HTTP_API = 'http://localhost:31300', UNCHAINED_WS_API = 'wss://localhost:31300', ETH_NODE_URL = 'http://localhost:3000', DEVICE_ID = 'device123', MNEMONIC = 'all all all all all all all all all all all all', } = process.env;
|
|
42
42
|
const toBaseUnit = (amount, precision) => {
|
|
43
43
|
return new bignumber_js_1.default(amount)
|
|
44
44
|
.multipliedBy(new bignumber_js_1.default(10).exponentiatedBy(new bignumber_js_1.default(precision)))
|
|
@@ -53,7 +53,7 @@ const getWallet = async () => {
|
|
|
53
53
|
}
|
|
54
54
|
const nativeAdapterArgs = {
|
|
55
55
|
mnemonic: MNEMONIC,
|
|
56
|
-
deviceId: DEVICE_ID
|
|
56
|
+
deviceId: DEVICE_ID,
|
|
57
57
|
};
|
|
58
58
|
const wallet = new hdwallet_native_1.NativeHDWallet(nativeAdapterArgs);
|
|
59
59
|
await wallet.initialize();
|
|
@@ -88,10 +88,10 @@ const main = async () => {
|
|
|
88
88
|
providers: {
|
|
89
89
|
ws: new unchained.ws.Client(UNCHAINED_WS_API),
|
|
90
90
|
http: new unchained.ethereum.V1Api(new unchained.ethereum.Configuration({
|
|
91
|
-
basePath: UNCHAINED_HTTP_API
|
|
92
|
-
}))
|
|
91
|
+
basePath: UNCHAINED_HTTP_API,
|
|
92
|
+
})),
|
|
93
93
|
},
|
|
94
|
-
rpcUrl: 'https://mainnet.infura.io/v3/d734c7eebcdf400185d7eb67322a7e57'
|
|
94
|
+
rpcUrl: 'https://mainnet.infura.io/v3/d734c7eebcdf400185d7eb67322a7e57',
|
|
95
95
|
});
|
|
96
96
|
const web3Provider = new web3_1.default.providers.HttpProvider(ETH_NODE_URL);
|
|
97
97
|
const web3 = new web3_1.default(web3Provider);
|
|
@@ -101,7 +101,7 @@ const main = async () => {
|
|
|
101
101
|
manager.addSwapper(zrxSwapper);
|
|
102
102
|
const swapper = await manager.getBestSwapper({
|
|
103
103
|
sellAssetId: 'eip155:1/slip44:60',
|
|
104
|
-
buyAssetId: 'eip155:1/erc20:0xc770eefad204b5180df6a14ee197d99d808ee52d'
|
|
104
|
+
buyAssetId: 'eip155:1/erc20:0xc770eefad204b5180df6a14ee197d99d808ee52d',
|
|
105
105
|
});
|
|
106
106
|
if (!swapper)
|
|
107
107
|
return;
|
|
@@ -116,7 +116,7 @@ const main = async () => {
|
|
|
116
116
|
sellAssetAccountNumber: 0,
|
|
117
117
|
sendMax: false,
|
|
118
118
|
receiveAddress: '0xc770eefad204b5180df6a14ee197d99d808ee52d',
|
|
119
|
-
wallet
|
|
119
|
+
wallet,
|
|
120
120
|
});
|
|
121
121
|
}
|
|
122
122
|
catch (e) {
|
|
@@ -137,7 +137,7 @@ const main = async () => {
|
|
|
137
137
|
sellAmount: sellAmountBase,
|
|
138
138
|
sellAsset,
|
|
139
139
|
sellAssetAccountNumber: 0,
|
|
140
|
-
receiveAddress: '0xc770eefad204b5180df6a14ee197d99d808ee52d'
|
|
140
|
+
receiveAddress: '0xc770eefad204b5180df6a14ee197d99d808ee52d',
|
|
141
141
|
});
|
|
142
142
|
const txid = await swapper.executeTrade({ trade, wallet });
|
|
143
143
|
console.info('broadcast tx with id: ', txid);
|
|
@@ -54,7 +54,7 @@ class CowSwapper {
|
|
|
54
54
|
}
|
|
55
55
|
async approveAmount() {
|
|
56
56
|
throw new api_1.SwapError('CowSwapper: approveAmount unimplemented', {
|
|
57
|
-
code: api_1.SwapErrorTypes.RESPONSE_ERROR
|
|
57
|
+
code: api_1.SwapErrorTypes.RESPONSE_ERROR,
|
|
58
58
|
});
|
|
59
59
|
}
|
|
60
60
|
filterBuyAssetsBySellAssetId(args) {
|
|
@@ -14,7 +14,7 @@ async function cowApprovalNeeded({ adapter, web3 }, { quote, wallet }) {
|
|
|
14
14
|
if (assetNamespace !== 'erc20') {
|
|
15
15
|
throw new api_1.SwapError('[cowApprovalNeeded] - unsupported asset namespace', {
|
|
16
16
|
code: api_1.SwapErrorTypes.UNSUPPORTED_NAMESPACE,
|
|
17
|
-
details: { assetNamespace }
|
|
17
|
+
details: { assetNamespace },
|
|
18
18
|
});
|
|
19
19
|
}
|
|
20
20
|
const receiveAddress = await adapter.getAddress({ wallet });
|
|
@@ -23,11 +23,11 @@ async function cowApprovalNeeded({ adapter, web3 }, { quote, wallet }) {
|
|
|
23
23
|
erc20AllowanceAbi: erc20Allowance_abi_1.erc20AllowanceAbi,
|
|
24
24
|
sellAssetErc20Address,
|
|
25
25
|
spenderAddress: constants_1.COW_SWAP_VAULT_RELAYER_ADDRESS,
|
|
26
|
-
ownerAddress: receiveAddress
|
|
26
|
+
ownerAddress: receiveAddress,
|
|
27
27
|
});
|
|
28
28
|
const allowanceOnChain = (0, bignumber_1.bnOrZero)(allowanceResult);
|
|
29
29
|
return {
|
|
30
|
-
approvalNeeded: allowanceOnChain.lte((0, bignumber_1.bnOrZero)(quote.sellAmount))
|
|
30
|
+
approvalNeeded: allowanceOnChain.lte((0, bignumber_1.bnOrZero)(quote.sellAmount)),
|
|
31
31
|
};
|
|
32
32
|
}
|
|
33
33
|
catch (e) {
|
|
@@ -35,7 +35,7 @@ async function cowApprovalNeeded({ adapter, web3 }, { quote, wallet }) {
|
|
|
35
35
|
throw e;
|
|
36
36
|
throw new api_1.SwapError('[cowApprovalNeeded]', {
|
|
37
37
|
cause: e,
|
|
38
|
-
code: api_1.SwapErrorTypes.CHECK_APPROVAL_FAILED
|
|
38
|
+
code: api_1.SwapErrorTypes.CHECK_APPROVAL_FAILED,
|
|
39
39
|
});
|
|
40
40
|
}
|
|
41
41
|
}
|
|
@@ -10,12 +10,12 @@ async function cowApproveInfinite({ adapter, web3 }, { quote, wallet }) {
|
|
|
10
10
|
const allowanceGrantRequired = await (0, helpers_1.grantAllowance)({
|
|
11
11
|
quote: {
|
|
12
12
|
...quote,
|
|
13
|
-
sellAmount: constants_1.MAX_ALLOWANCE
|
|
13
|
+
sellAmount: constants_1.MAX_ALLOWANCE,
|
|
14
14
|
},
|
|
15
15
|
wallet,
|
|
16
16
|
adapter,
|
|
17
17
|
erc20Abi: erc20_abi_1.erc20Abi,
|
|
18
|
-
web3
|
|
18
|
+
web3,
|
|
19
19
|
});
|
|
20
20
|
return allowanceGrantRequired;
|
|
21
21
|
}
|
|
@@ -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.SwapErrorTypes.APPROVE_INFINITE_FAILED
|
|
27
|
+
code: api_1.SwapErrorTypes.APPROVE_INFINITE_FAILED,
|
|
28
28
|
});
|
|
29
29
|
}
|
|
30
30
|
}
|
|
@@ -19,13 +19,13 @@ async function cowBuildTrade(deps, input) {
|
|
|
19
19
|
if (sellAssetNamespace !== 'erc20') {
|
|
20
20
|
throw new api_1.SwapError('[cowBuildTrade] - Sell asset needs to be ERC-20 to use CowSwap', {
|
|
21
21
|
code: api_1.SwapErrorTypes.UNSUPPORTED_PAIR,
|
|
22
|
-
details: { sellAssetNamespace }
|
|
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
27
|
code: api_1.SwapErrorTypes.UNSUPPORTED_PAIR,
|
|
28
|
-
details: { buyAssetChainId }
|
|
28
|
+
details: { buyAssetChainId },
|
|
29
29
|
});
|
|
30
30
|
}
|
|
31
31
|
const buyToken = buyAsset.assetId !== caip_1.ethAssetId ? buyAssetErc20Address : constants_1.COW_SWAP_ETH_MARKER_ADDRESS;
|
|
@@ -54,21 +54,21 @@ async function cowBuildTrade(deps, input) {
|
|
|
54
54
|
partiallyFillable: false,
|
|
55
55
|
from: receiveAddress,
|
|
56
56
|
kind: constants_1.ORDER_KIND_SELL,
|
|
57
|
-
sellAmountBeforeFee: normalizedSellAmount
|
|
57
|
+
sellAmountBeforeFee: normalizedSellAmount,
|
|
58
58
|
});
|
|
59
|
-
const { data: { quote } } = quoteResponse;
|
|
59
|
+
const { data: { quote }, } = quoteResponse;
|
|
60
60
|
const buyCryptoAmount = (0, bignumber_1.bn)(quote.buyAmount).div((0, bignumber_1.bn)(10).exponentiatedBy(buyAsset.precision));
|
|
61
61
|
const sellCryptoAmount = (0, bignumber_1.bn)(quote.sellAmount).div((0, bignumber_1.bn)(10).exponentiatedBy(sellAsset.precision));
|
|
62
62
|
const rate = buyCryptoAmount.div(sellCryptoAmount).toString();
|
|
63
63
|
const data = (0, helpers_1.getApproveContractData)({
|
|
64
64
|
web3,
|
|
65
65
|
spenderAddress: constants_1.COW_SWAP_VAULT_RELAYER_ADDRESS,
|
|
66
|
-
contractAddress: sellAssetErc20Address
|
|
66
|
+
contractAddress: sellAssetErc20Address,
|
|
67
67
|
});
|
|
68
68
|
const feeDataOptions = await adapter.getFeeData({
|
|
69
69
|
to: sellAssetErc20Address,
|
|
70
70
|
value: '0',
|
|
71
|
-
chainSpecific: { from: receiveAddress, contractData: data }
|
|
71
|
+
chainSpecific: { from: receiveAddress, contractData: data },
|
|
72
72
|
});
|
|
73
73
|
const feeData = feeDataOptions['fast'];
|
|
74
74
|
const trade = {
|
|
@@ -77,9 +77,9 @@ async function cowBuildTrade(deps, input) {
|
|
|
77
77
|
fee: '0',
|
|
78
78
|
chainSpecific: {
|
|
79
79
|
estimatedGas: feeData.chainSpecific.gasLimit,
|
|
80
|
-
gasPrice: feeData.chainSpecific.gasPrice
|
|
80
|
+
gasPrice: feeData.chainSpecific.gasPrice,
|
|
81
81
|
},
|
|
82
|
-
tradeFee: '0' // Trade fees for buy Asset are always 0 since trade fees are subtracted from sell asset
|
|
82
|
+
tradeFee: '0', // Trade fees for buy Asset are always 0 since trade fees are subtracted from sell asset
|
|
83
83
|
},
|
|
84
84
|
sellAmount: normalizedSellAmount,
|
|
85
85
|
buyAmount: quote.buyAmount,
|
|
@@ -89,7 +89,7 @@ async function cowBuildTrade(deps, input) {
|
|
|
89
89
|
sellAssetAccountNumber,
|
|
90
90
|
receiveAddress,
|
|
91
91
|
feeAmountInSellToken: quote.feeAmount,
|
|
92
|
-
sellAmountWithoutFee: quote.sellAmount
|
|
92
|
+
sellAmountWithoutFee: quote.sellAmount,
|
|
93
93
|
};
|
|
94
94
|
const allowanceRequired = await (0, helpers_1.getAllowanceRequired)({
|
|
95
95
|
adapter,
|
|
@@ -98,7 +98,7 @@ async function cowBuildTrade(deps, input) {
|
|
|
98
98
|
receiveAddress,
|
|
99
99
|
sellAmount: quote.sellAmount,
|
|
100
100
|
web3: deps.web3,
|
|
101
|
-
erc20AllowanceAbi: erc20Allowance_abi_1.erc20AllowanceAbi
|
|
101
|
+
erc20AllowanceAbi: erc20Allowance_abi_1.erc20AllowanceAbi,
|
|
102
102
|
});
|
|
103
103
|
if (!allowanceRequired.isZero()) {
|
|
104
104
|
trade.feeData.chainSpecific.approvalFee = (0, bignumber_1.bnOrZero)(feeData.chainSpecific.gasLimit)
|
|
@@ -112,7 +112,7 @@ async function cowBuildTrade(deps, input) {
|
|
|
112
112
|
throw e;
|
|
113
113
|
throw new api_1.SwapError('[cowBuildTrade]', {
|
|
114
114
|
cause: e,
|
|
115
|
-
code: api_1.SwapErrorTypes.TRADE_QUOTE_FAILED
|
|
115
|
+
code: api_1.SwapErrorTypes.TRADE_QUOTE_FAILED,
|
|
116
116
|
});
|
|
117
117
|
}
|
|
118
118
|
}
|
|
@@ -18,13 +18,13 @@ async function cowExecuteTrade({ apiUrl, adapter }, { trade, wallet }) {
|
|
|
18
18
|
if (sellAssetNamespace !== 'erc20') {
|
|
19
19
|
throw new api_1.SwapError('[cowExecuteTrade] - Sell asset needs to be ERC-20 to use CowSwap', {
|
|
20
20
|
code: api_1.SwapErrorTypes.UNSUPPORTED_PAIR,
|
|
21
|
-
details: { sellAssetNamespace }
|
|
21
|
+
details: { sellAssetNamespace },
|
|
22
22
|
});
|
|
23
23
|
}
|
|
24
24
|
if (buyAssetChainId !== types_1.KnownChainIds.EthereumMainnet) {
|
|
25
25
|
throw new api_1.SwapError('[cowExecuteTrade] - Buy asset needs to be on ETH mainnet to use CowSwap', {
|
|
26
26
|
code: api_1.SwapErrorTypes.UNSUPPORTED_PAIR,
|
|
27
|
-
details: { buyAssetChainId }
|
|
27
|
+
details: { buyAssetChainId },
|
|
28
28
|
});
|
|
29
29
|
}
|
|
30
30
|
const buyToken = buyAsset.assetId !== caip_1.ethAssetId ? buyAssetErc20Address : constants_1.COW_SWAP_ETH_MARKER_ADDRESS;
|
|
@@ -41,7 +41,7 @@ async function cowExecuteTrade({ apiUrl, adapter }, { trade, wallet }) {
|
|
|
41
41
|
partiallyFillable: false,
|
|
42
42
|
receiver: trade.receiveAddress,
|
|
43
43
|
sellTokenBalance: constants_1.ERC20_TOKEN_BALANCE,
|
|
44
|
-
buyTokenBalance: constants_1.ERC20_TOKEN_BALANCE
|
|
44
|
+
buyTokenBalance: constants_1.ERC20_TOKEN_BALANCE,
|
|
45
45
|
};
|
|
46
46
|
// We need to construct orderDigest, sign it and send it to cowSwap API, in order to submit a trade
|
|
47
47
|
// Some context about this : https://docs.cow.fi/tutorials/how-to-submit-orders-via-the-api/4.-signing-the-order
|
|
@@ -51,9 +51,9 @@ async function cowExecuteTrade({ apiUrl, adapter }, { trade, wallet }) {
|
|
|
51
51
|
const message = {
|
|
52
52
|
messageToSign: {
|
|
53
53
|
addressNList: (0, hdwallet_core_1.bip32ToAddressNList)((0, chain_adapters_1.toRootDerivationPath)(bip44Params)),
|
|
54
|
-
message: ethers_1.ethers.utils.arrayify(orderDigest)
|
|
54
|
+
message: ethers_1.ethers.utils.arrayify(orderDigest),
|
|
55
55
|
},
|
|
56
|
-
wallet
|
|
56
|
+
wallet,
|
|
57
57
|
};
|
|
58
58
|
const signatureOrderDigest = await adapter.signMessage(message);
|
|
59
59
|
// Passing the signature through split/join to normalize the `v` byte.
|
|
@@ -83,7 +83,7 @@ async function cowExecuteTrade({ apiUrl, adapter }, { trade, wallet }) {
|
|
|
83
83
|
...orderToSign,
|
|
84
84
|
signingScheme: constants_1.SIGNING_SCHEME,
|
|
85
85
|
signature,
|
|
86
|
-
from: trade.receiveAddress
|
|
86
|
+
from: trade.receiveAddress,
|
|
87
87
|
});
|
|
88
88
|
return { tradeId: ordersResponse.data };
|
|
89
89
|
}
|
|
@@ -92,7 +92,7 @@ async function cowExecuteTrade({ apiUrl, adapter }, { trade, wallet }) {
|
|
|
92
92
|
throw e;
|
|
93
93
|
throw new api_1.SwapError('[cowExecuteTrade]', {
|
|
94
94
|
cause: e,
|
|
95
|
-
code: api_1.SwapErrorTypes.EXECUTE_TRADE_FAILED
|
|
95
|
+
code: api_1.SwapErrorTypes.EXECUTE_TRADE_FAILED,
|
|
96
96
|
});
|
|
97
97
|
}
|
|
98
98
|
}
|
|
@@ -7,16 +7,16 @@ const cowService_1 = require("../utils/cowService");
|
|
|
7
7
|
async function cowGetTradeTxs(deps, input) {
|
|
8
8
|
try {
|
|
9
9
|
const getOrdersResponse = await cowService_1.cowService.get(`${deps.apiUrl}/v1/orders/${input.tradeId}`);
|
|
10
|
-
const { data: { status } } = getOrdersResponse;
|
|
10
|
+
const { data: { status }, } = getOrdersResponse;
|
|
11
11
|
if (status !== constants_1.ORDER_STATUS_FULFILLED) {
|
|
12
12
|
return {
|
|
13
|
-
sellTxid: ''
|
|
13
|
+
sellTxid: '',
|
|
14
14
|
};
|
|
15
15
|
}
|
|
16
16
|
const getTradesResponse = await cowService_1.cowService.get(`${deps.apiUrl}/v1/trades/?orderUid=${input.tradeId}`);
|
|
17
17
|
return {
|
|
18
18
|
sellTxid: input.tradeId,
|
|
19
|
-
buyTxid: getTradesResponse.data[0].txHash
|
|
19
|
+
buyTxid: getTradesResponse.data[0].txHash,
|
|
20
20
|
};
|
|
21
21
|
}
|
|
22
22
|
catch (e) {
|
|
@@ -24,7 +24,7 @@ async function cowGetTradeTxs(deps, input) {
|
|
|
24
24
|
throw e;
|
|
25
25
|
throw new api_1.SwapError('[cowGetTradeTxs]', {
|
|
26
26
|
cause: e,
|
|
27
|
-
code: api_1.SwapErrorTypes.GET_TRADE_TXS_FAILED
|
|
27
|
+
code: api_1.SwapErrorTypes.GET_TRADE_TXS_FAILED,
|
|
28
28
|
});
|
|
29
29
|
}
|
|
30
30
|
}
|
|
@@ -24,13 +24,13 @@ async function getCowSwapTradeQuote(deps, input) {
|
|
|
24
24
|
if (sellAssetNamespace !== 'erc20') {
|
|
25
25
|
throw new api_1.SwapError('[getCowSwapTradeQuote] - Sell asset needs to be ERC-20 to use CowSwap', {
|
|
26
26
|
code: api_1.SwapErrorTypes.UNSUPPORTED_PAIR,
|
|
27
|
-
details: { sellAssetNamespace }
|
|
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
32
|
code: api_1.SwapErrorTypes.UNSUPPORTED_PAIR,
|
|
33
|
-
details: { buyAssetChainId }
|
|
33
|
+
details: { buyAssetChainId },
|
|
34
34
|
});
|
|
35
35
|
}
|
|
36
36
|
const buyToken = buyAsset.assetId !== caip_1.ethAssetId ? buyAssetErc20Address : constants_1.COW_SWAP_ETH_MARKER_ADDRESS;
|
|
@@ -47,7 +47,7 @@ async function getCowSwapTradeQuote(deps, input) {
|
|
|
47
47
|
partiallyFillable: false,
|
|
48
48
|
from: constants_1.DEFAULT_ADDRESS,
|
|
49
49
|
kind: constants_1.ORDER_KIND_SELL,
|
|
50
|
-
sellAmountBeforeFee: normalizedSellAmount
|
|
50
|
+
sellAmountBeforeFee: normalizedSellAmount,
|
|
51
51
|
};
|
|
52
52
|
/**
|
|
53
53
|
* /v1/quote
|
|
@@ -64,7 +64,7 @@ async function getCowSwapTradeQuote(deps, input) {
|
|
|
64
64
|
* }
|
|
65
65
|
*/
|
|
66
66
|
const quoteResponse = await cowService_1.cowService.post(`${deps.apiUrl}/v1/quote/`, apiInput);
|
|
67
|
-
const { data: { quote } } = quoteResponse;
|
|
67
|
+
const { data: { quote }, } = quoteResponse;
|
|
68
68
|
const buyCryptoAmount = (0, bignumber_1.bn)(quote.buyAmount).div((0, bignumber_1.bn)(10).exponentiatedBy(buyAsset.precision));
|
|
69
69
|
const sellCryptoAmount = (0, bignumber_1.bn)(quote.sellAmount).div((0, bignumber_1.bn)(10).exponentiatedBy(sellAsset.precision));
|
|
70
70
|
const rate = buyCryptoAmount.div(sellCryptoAmount).toString();
|
|
@@ -72,15 +72,15 @@ async function getCowSwapTradeQuote(deps, input) {
|
|
|
72
72
|
const data = (0, helpers_1.getApproveContractData)({
|
|
73
73
|
web3,
|
|
74
74
|
spenderAddress: constants_1.COW_SWAP_VAULT_RELAYER_ADDRESS,
|
|
75
|
-
contractAddress: sellAssetErc20Address
|
|
75
|
+
contractAddress: sellAssetErc20Address,
|
|
76
76
|
});
|
|
77
77
|
const [feeDataOptions, sellAssetUsdRate] = await Promise.all([
|
|
78
78
|
adapter.getFeeData({
|
|
79
79
|
to: sellAssetErc20Address,
|
|
80
80
|
value: '0',
|
|
81
|
-
chainSpecific: { from: receiveAddress, contractData: data }
|
|
81
|
+
chainSpecific: { from: receiveAddress, contractData: data },
|
|
82
82
|
}),
|
|
83
|
-
(0, helpers_2.getUsdRate)(deps, sellAsset)
|
|
83
|
+
(0, helpers_2.getUsdRate)(deps, sellAsset),
|
|
84
84
|
]);
|
|
85
85
|
const feeData = feeDataOptions['fast'];
|
|
86
86
|
// calculating trade fee in USD
|
|
@@ -104,9 +104,9 @@ async function getCowSwapTradeQuote(deps, input) {
|
|
|
104
104
|
gasPrice: feeData.chainSpecific.gasPrice,
|
|
105
105
|
approvalFee: (0, bignumber_1.bnOrZero)(feeData.chainSpecific.gasLimit)
|
|
106
106
|
.multipliedBy((0, bignumber_1.bnOrZero)(feeData.chainSpecific.gasPrice))
|
|
107
|
-
.toString()
|
|
107
|
+
.toString(),
|
|
108
108
|
},
|
|
109
|
-
tradeFee: tradeFeeFiat
|
|
109
|
+
tradeFee: tradeFeeFiat,
|
|
110
110
|
},
|
|
111
111
|
sellAmount: quoteSellAmount,
|
|
112
112
|
buyAmount: quote.buyAmount,
|
|
@@ -114,7 +114,7 @@ async function getCowSwapTradeQuote(deps, input) {
|
|
|
114
114
|
allowanceContract: constants_1.COW_SWAP_VAULT_RELAYER_ADDRESS,
|
|
115
115
|
buyAsset,
|
|
116
116
|
sellAsset,
|
|
117
|
-
sellAssetAccountNumber
|
|
117
|
+
sellAssetAccountNumber,
|
|
118
118
|
};
|
|
119
119
|
}
|
|
120
120
|
catch (e) {
|
|
@@ -124,14 +124,14 @@ async function getCowSwapTradeQuote(deps, input) {
|
|
|
124
124
|
'SellAmountDoesNotCoverFee') {
|
|
125
125
|
throw new api_1.SwapError('[getCowSwapTradeQuote]', {
|
|
126
126
|
cause: e,
|
|
127
|
-
code: api_1.SwapErrorTypes.TRADE_QUOTE_INPUT_LOWER_THAN_FEES
|
|
127
|
+
code: api_1.SwapErrorTypes.TRADE_QUOTE_INPUT_LOWER_THAN_FEES,
|
|
128
128
|
});
|
|
129
129
|
}
|
|
130
130
|
if (e instanceof api_1.SwapError)
|
|
131
131
|
throw e;
|
|
132
132
|
throw new api_1.SwapError('[getCowSwapTradeQuote]', {
|
|
133
133
|
cause: e,
|
|
134
|
-
code: api_1.SwapErrorTypes.TRADE_QUOTE_FAILED
|
|
134
|
+
code: api_1.SwapErrorTypes.TRADE_QUOTE_FAILED,
|
|
135
135
|
});
|
|
136
136
|
}
|
|
137
137
|
}
|
|
@@ -5,5 +5,5 @@ exports.COWSWAP_UNSUPPORTED_ASSETS = void 0;
|
|
|
5
5
|
// We assume all erc20's are supported and remove these explicitely unsupported assets
|
|
6
6
|
exports.COWSWAP_UNSUPPORTED_ASSETS = Object.freeze([
|
|
7
7
|
// Foxy token unsupported by cowswap
|
|
8
|
-
'eip155:1/erc20:0xdc49108ce5c57bc3408c3a5e95f3d864ec386ed3'
|
|
8
|
+
'eip155:1/erc20:0xdc49108ce5c57bc3408c3a5e95f3d864ec386ed3',
|
|
9
9
|
]);
|
|
@@ -22,7 +22,7 @@ exports.ORDER_TYPE_FIELDS = [
|
|
|
22
22
|
{ name: 'kind', type: 'string' },
|
|
23
23
|
{ name: 'partiallyFillable', type: 'bool' },
|
|
24
24
|
{ name: 'sellTokenBalance', type: 'string' },
|
|
25
|
-
{ name: 'buyTokenBalance', type: 'string' }
|
|
25
|
+
{ name: 'buyTokenBalance', type: 'string' },
|
|
26
26
|
];
|
|
27
27
|
const getNowPlusThirtyMinutesTimestamp = () => {
|
|
28
28
|
const ts = new Date();
|
|
@@ -37,7 +37,7 @@ const getUsdRate = async ({ apiUrl }, input) => {
|
|
|
37
37
|
if (assetNamespace !== 'erc20') {
|
|
38
38
|
throw new api_1.SwapError('[getUsdRate] - unsupported asset namespace', {
|
|
39
39
|
code: api_1.SwapErrorTypes.USD_RATE_FAILED,
|
|
40
|
-
details: { assetNamespace }
|
|
40
|
+
details: { assetNamespace },
|
|
41
41
|
});
|
|
42
42
|
}
|
|
43
43
|
if (erc20Address === USDC_CONTRACT_ADDRESS) {
|
|
@@ -58,7 +58,7 @@ const getUsdRate = async ({ apiUrl }, input) => {
|
|
|
58
58
|
partiallyFillable: false,
|
|
59
59
|
from: constants_1.DEFAULT_ADDRESS,
|
|
60
60
|
kind: constants_1.ORDER_KIND_BUY,
|
|
61
|
-
buyAmountAfterFee: buyAmount
|
|
61
|
+
buyAmountAfterFee: buyAmount,
|
|
62
62
|
};
|
|
63
63
|
/**
|
|
64
64
|
* /v1/quote
|
|
@@ -75,11 +75,11 @@ const getUsdRate = async ({ apiUrl }, input) => {
|
|
|
75
75
|
* }
|
|
76
76
|
*/
|
|
77
77
|
const quoteResponse = await cowService_1.cowService.post(`${apiUrl}/v1/quote/`, apiInput);
|
|
78
|
-
const { data: { quote } } = quoteResponse;
|
|
78
|
+
const { data: { quote }, } = quoteResponse;
|
|
79
79
|
const sellCryptoAmount = (0, bignumber_1.bn)(quote.sellAmount).div((0, bignumber_1.bn)(10).exponentiatedBy(asset.precision));
|
|
80
80
|
if (!sellCryptoAmount.gt(0))
|
|
81
81
|
throw new api_1.SwapError('[getUsdRate] - Failed to get sell token amount', {
|
|
82
|
-
code: api_1.SwapErrorTypes.RESPONSE_ERROR
|
|
82
|
+
code: api_1.SwapErrorTypes.RESPONSE_ERROR,
|
|
83
83
|
});
|
|
84
84
|
// dividing $1000 by amount of sell token received
|
|
85
85
|
return (0, bignumber_1.bn)(buyAmountInDollars).div(sellCryptoAmount).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.SwapErrorTypes.USD_RATE_FAILED
|
|
92
|
+
code: api_1.SwapErrorTypes.USD_RATE_FAILED,
|
|
93
93
|
});
|
|
94
94
|
}
|
|
95
95
|
};
|
|
@@ -118,7 +118,7 @@ const domain = (chainId, verifyingContract) => {
|
|
|
118
118
|
name: 'Gnosis Protocol',
|
|
119
119
|
version: 'v2',
|
|
120
120
|
chainId,
|
|
121
|
-
verifyingContract
|
|
121
|
+
verifyingContract,
|
|
122
122
|
};
|
|
123
123
|
};
|
|
124
124
|
exports.domain = domain;
|
|
@@ -18,7 +18,7 @@ class OsmosisSwapper {
|
|
|
18
18
|
async getTradeTxs(tradeResult) {
|
|
19
19
|
return {
|
|
20
20
|
sellTxid: tradeResult.tradeId,
|
|
21
|
-
buyTxid: tradeResult.tradeId
|
|
21
|
+
buyTxid: tradeResult.tradeId,
|
|
22
22
|
};
|
|
23
23
|
}
|
|
24
24
|
async getUsdRate(input) {
|
|
@@ -40,7 +40,7 @@ class OsmosisSwapper {
|
|
|
40
40
|
const maximum = constants_1.MAX_SWAPPER_SELL;
|
|
41
41
|
return {
|
|
42
42
|
minimum,
|
|
43
|
-
maximum
|
|
43
|
+
maximum,
|
|
44
44
|
};
|
|
45
45
|
}
|
|
46
46
|
async approvalNeeded() {
|
|
@@ -48,12 +48,12 @@ class OsmosisSwapper {
|
|
|
48
48
|
}
|
|
49
49
|
async approveInfinite() {
|
|
50
50
|
throw new api_1.SwapError('OsmosisSwapper: approveInfinite unimplemented', {
|
|
51
|
-
code: api_1.SwapErrorTypes.RESPONSE_ERROR
|
|
51
|
+
code: api_1.SwapErrorTypes.RESPONSE_ERROR,
|
|
52
52
|
});
|
|
53
53
|
}
|
|
54
54
|
async approveAmount() {
|
|
55
55
|
throw new api_1.SwapError('Osmosis: approveAmount unimplemented', {
|
|
56
|
-
code: api_1.SwapErrorTypes.RESPONSE_ERROR
|
|
56
|
+
code: api_1.SwapErrorTypes.RESPONSE_ERROR,
|
|
57
57
|
});
|
|
58
58
|
}
|
|
59
59
|
filterBuyAssetsBySellAssetId(args) {
|
|
@@ -69,7 +69,7 @@ class OsmosisSwapper {
|
|
|
69
69
|
const { sellAsset, buyAsset, sellAmount, receiveAddress } = args;
|
|
70
70
|
if (!sellAmount) {
|
|
71
71
|
throw new api_1.SwapError('sellAmount is required', {
|
|
72
|
-
code: api_1.SwapErrorTypes.BUILD_TRADE_FAILED
|
|
72
|
+
code: api_1.SwapErrorTypes.BUILD_TRADE_FAILED,
|
|
73
73
|
});
|
|
74
74
|
}
|
|
75
75
|
const { tradeFee, rate, buyAmount } = await (0, helpers_1.getRateInfo)(sellAsset.symbol, buyAsset.symbol, sellAmount !== '0' ? sellAmount : '1', this.deps.osmoUrl);
|
|
@@ -78,7 +78,7 @@ class OsmosisSwapper {
|
|
|
78
78
|
const osmosisAdapter = this.deps.adapterManager.get(caip_1.osmosisChainId);
|
|
79
79
|
if (!osmosisAdapter)
|
|
80
80
|
throw new api_1.SwapError('Failed to get Osmosis adapter', {
|
|
81
|
-
code: api_1.SwapErrorTypes.BUILD_TRADE_FAILED
|
|
81
|
+
code: api_1.SwapErrorTypes.BUILD_TRADE_FAILED,
|
|
82
82
|
});
|
|
83
83
|
const feeData = await osmosisAdapter.getFeeData({});
|
|
84
84
|
const fee = feeData.fast.txFee;
|
|
@@ -91,14 +91,14 @@ class OsmosisSwapper {
|
|
|
91
91
|
sellAmount: amountBaseSell,
|
|
92
92
|
sellAsset,
|
|
93
93
|
sellAssetAccountNumber: 0,
|
|
94
|
-
sources: [{ name: 'Osmosis', proportion: '100' }]
|
|
94
|
+
sources: [{ name: 'Osmosis', proportion: '100' }],
|
|
95
95
|
};
|
|
96
96
|
}
|
|
97
97
|
async getTradeQuote(input) {
|
|
98
98
|
const { sellAsset, buyAsset, sellAmount } = input;
|
|
99
99
|
if (!sellAmount) {
|
|
100
100
|
throw new api_1.SwapError('sellAmount is required', {
|
|
101
|
-
code: api_1.SwapErrorTypes.RESPONSE_ERROR
|
|
101
|
+
code: api_1.SwapErrorTypes.RESPONSE_ERROR,
|
|
102
102
|
});
|
|
103
103
|
}
|
|
104
104
|
const { tradeFee, rate, buyAmount } = await (0, helpers_1.getRateInfo)(sellAsset.symbol, buyAsset.symbol, sellAmount !== '0' ? sellAmount : '1', this.deps.osmoUrl);
|
|
@@ -106,7 +106,7 @@ class OsmosisSwapper {
|
|
|
106
106
|
const osmosisAdapter = this.deps.adapterManager.get(caip_1.osmosisChainId);
|
|
107
107
|
if (!osmosisAdapter)
|
|
108
108
|
throw new api_1.SwapError('Failed to get Osmosis adapter', {
|
|
109
|
-
code: api_1.SwapErrorTypes.TRADE_QUOTE_FAILED
|
|
109
|
+
code: api_1.SwapErrorTypes.TRADE_QUOTE_FAILED,
|
|
110
110
|
});
|
|
111
111
|
const feeData = await osmosisAdapter.getFeeData({});
|
|
112
112
|
const fee = feeData.fast.txFee;
|
|
@@ -121,7 +121,7 @@ class OsmosisSwapper {
|
|
|
121
121
|
sellAmount,
|
|
122
122
|
buyAmount,
|
|
123
123
|
sources: constants_1.DEFAULT_SOURCE,
|
|
124
|
-
allowanceContract: ''
|
|
124
|
+
allowanceContract: '',
|
|
125
125
|
};
|
|
126
126
|
}
|
|
127
127
|
async executeTrade({ trade, wallet }) {
|
|
@@ -134,7 +134,7 @@ class OsmosisSwapper {
|
|
|
134
134
|
const cosmosAdapter = this.deps.adapterManager.get(caip_1.cosmosChainId);
|
|
135
135
|
if (!cosmosAdapter || !osmosisAdapter) {
|
|
136
136
|
throw new api_1.SwapError('Failed to get adapters', {
|
|
137
|
-
code: api_1.SwapErrorTypes.EXECUTE_TRADE_FAILED
|
|
137
|
+
code: api_1.SwapErrorTypes.EXECUTE_TRADE_FAILED,
|
|
138
138
|
});
|
|
139
139
|
}
|
|
140
140
|
let sellAddress;
|
|
@@ -142,17 +142,17 @@ class OsmosisSwapper {
|
|
|
142
142
|
const gas = feeData.fast.chainSpecific.gasLimit;
|
|
143
143
|
if (!isFromOsmo) {
|
|
144
144
|
const sellBip44Params = cosmosAdapter.buildBIP44Params({
|
|
145
|
-
accountNumber: Number(sellAssetAccountNumber)
|
|
145
|
+
accountNumber: Number(sellAssetAccountNumber),
|
|
146
146
|
});
|
|
147
147
|
sellAddress = await cosmosAdapter.getAddress({ wallet, bip44Params: sellBip44Params });
|
|
148
148
|
if (!sellAddress)
|
|
149
149
|
throw new api_1.SwapError('Failed to get address', {
|
|
150
|
-
code: api_1.SwapErrorTypes.EXECUTE_TRADE_FAILED
|
|
150
|
+
code: api_1.SwapErrorTypes.EXECUTE_TRADE_FAILED,
|
|
151
151
|
});
|
|
152
152
|
const transfer = {
|
|
153
153
|
sender: sellAddress,
|
|
154
154
|
receiver: receiveAddress,
|
|
155
|
-
amount: sellAmount
|
|
155
|
+
amount: sellAmount,
|
|
156
156
|
};
|
|
157
157
|
const responseAccount = await cosmosAdapter.getAccount(sellAddress);
|
|
158
158
|
const accountNumber = responseAccount.chainSpecific.accountNumber || '0';
|
|
@@ -162,7 +162,7 @@ class OsmosisSwapper {
|
|
|
162
162
|
const pollResult = await (0, helpers_1.pollForComplete)(tradeId, this.deps.cosmosUrl);
|
|
163
163
|
if (pollResult !== 'success')
|
|
164
164
|
throw new api_1.SwapError('ibc transfer failed', {
|
|
165
|
-
code: api_1.SwapErrorTypes.EXECUTE_TRADE_FAILED
|
|
165
|
+
code: api_1.SwapErrorTypes.EXECUTE_TRADE_FAILED,
|
|
166
166
|
});
|
|
167
167
|
ibcSellAmount = await (0, helpers_1.pollForAtomChannelBalance)(receiveAddress, this.deps.osmoUrl);
|
|
168
168
|
// delay to ensure all nodes we interact with are up to date at this point
|
|
@@ -171,12 +171,12 @@ class OsmosisSwapper {
|
|
|
171
171
|
}
|
|
172
172
|
else {
|
|
173
173
|
const sellBip44Params = osmosisAdapter.buildBIP44Params({
|
|
174
|
-
accountNumber: Number(sellAssetAccountNumber)
|
|
174
|
+
accountNumber: Number(sellAssetAccountNumber),
|
|
175
175
|
});
|
|
176
176
|
sellAddress = await osmosisAdapter.getAddress({ wallet, bip44Params: sellBip44Params });
|
|
177
177
|
if (!sellAddress)
|
|
178
178
|
throw new api_1.SwapError('failed to get osmoAddress', {
|
|
179
|
-
code: api_1.SwapErrorTypes.EXECUTE_TRADE_FAILED
|
|
179
|
+
code: api_1.SwapErrorTypes.EXECUTE_TRADE_FAILED,
|
|
180
180
|
});
|
|
181
181
|
}
|
|
182
182
|
const osmoAddress = isFromOsmo ? sellAddress : receiveAddress;
|
|
@@ -187,7 +187,7 @@ class OsmosisSwapper {
|
|
|
187
187
|
sellAssetDenom,
|
|
188
188
|
sellAmount: ibcSellAmount !== null && ibcSellAmount !== void 0 ? ibcSellAmount : sellAmount,
|
|
189
189
|
gas,
|
|
190
|
-
wallet
|
|
190
|
+
wallet,
|
|
191
191
|
});
|
|
192
192
|
const signed = await osmosisAdapter.signTransaction(signTxInput);
|
|
193
193
|
const tradeId = await osmosisAdapter.broadcastTransaction(signed);
|
|
@@ -195,13 +195,13 @@ class OsmosisSwapper {
|
|
|
195
195
|
const pollResult = await (0, helpers_1.pollForComplete)(tradeId, this.deps.osmoUrl);
|
|
196
196
|
if (pollResult !== 'success')
|
|
197
197
|
throw new api_1.SwapError('osmo swap failed', {
|
|
198
|
-
code: api_1.SwapErrorTypes.EXECUTE_TRADE_FAILED
|
|
198
|
+
code: api_1.SwapErrorTypes.EXECUTE_TRADE_FAILED,
|
|
199
199
|
});
|
|
200
200
|
const amount = await (0, helpers_1.pollForAtomChannelBalance)(sellAddress, this.deps.osmoUrl);
|
|
201
201
|
const transfer = {
|
|
202
202
|
sender: sellAddress,
|
|
203
203
|
receiver: receiveAddress,
|
|
204
|
-
amount
|
|
204
|
+
amount,
|
|
205
205
|
};
|
|
206
206
|
const ibcResponseAccount = await osmosisAdapter.getAccount(sellAddress);
|
|
207
207
|
const ibcAccountNumber = ibcResponseAccount.chainSpecific.accountNumber || '0';
|