@shapeshiftoss/swapper 9.14.0 → 9.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api.d.ts +12 -2
- package/dist/api.js +1 -0
- package/dist/manager/SwapperManager.js +3 -3
- package/dist/swappercli.js +8 -8
- package/dist/swappers/cow/CowSwapper.d.ts +2 -1
- package/dist/swappers/cow/CowSwapper.js +5 -2
- package/dist/swappers/cow/cowApprovalNeeded/cowApprovalNeeded.js +4 -4
- package/dist/swappers/cow/{cowApproveInfinite/cowApproveInfinite.d.ts → cowApprove/cowApprove.d.ts} +2 -1
- package/dist/swappers/cow/cowApprove/cowApprove.js +56 -0
- package/dist/swappers/cow/cowBuildTrade/cowBuildTrade.js +11 -11
- package/dist/swappers/cow/cowExecuteTrade/cowExecuteTrade.js +7 -7
- package/dist/swappers/cow/cowGetTradeTxs/cowGetTradeTxs.js +4 -4
- package/dist/swappers/cow/getCowSwapMinMax/getCowSwapMinMax.js +1 -1
- package/dist/swappers/cow/getCowSwapTradeQuote/getCowSwapTradeQuote.js +12 -12
- package/dist/swappers/cow/utils/blacklist.js +1 -1
- package/dist/swappers/cow/utils/cowService.js +2 -2
- package/dist/swappers/cow/utils/helpers/helpers.js +7 -7
- package/dist/swappers/osmosis/OsmosisSwapper.d.ts +1 -0
- package/dist/swappers/osmosis/OsmosisSwapper.js +24 -19
- package/dist/swappers/osmosis/utils/helpers.d.ts +1 -1
- package/dist/swappers/osmosis/utils/helpers.js +35 -35
- package/dist/swappers/test/TestSwapper.d.ts +1 -0
- package/dist/swappers/test/TestSwapper.js +6 -1
- package/dist/swappers/thorchain/ThorchainSwapper.d.ts +1 -0
- package/dist/swappers/thorchain/ThorchainSwapper.js +17 -12
- 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.d.ts +2 -1
- package/dist/swappers/zrx/ZrxSwapper.js +7 -4
- 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.d.ts +4 -0
- package/dist/swappers/zrx/zrxApprove/zrxApprove.js +62 -0
- package/dist/swappers/zrx/zrxBuildTrade/zrxBuildTrade.js +13 -11
- package/dist/swappers/zrx/zrxExecuteTrade/zrxExecuteTrade.js +6 -6
- package/package.json +1 -1
- package/dist/swappers/cow/cowApproveInfinite/cowApproveInfinite.js +0 -31
- package/dist/swappers/zrx/zrxApproveInfinite/zrxApproveInfinite.d.ts +0 -3
- package/dist/swappers/zrx/zrxApproveInfinite/zrxApproveInfinite.js +0 -42
package/dist/api.d.ts
CHANGED
|
@@ -129,10 +129,14 @@ export declare type ExecuteTradeInput<C extends ChainId> = {
|
|
|
129
129
|
export declare type TradeResult = {
|
|
130
130
|
tradeId: string;
|
|
131
131
|
};
|
|
132
|
-
export declare type
|
|
132
|
+
export declare type ApproveInput<C extends ChainId> = {
|
|
133
133
|
quote: TradeQuote<C>;
|
|
134
134
|
wallet: HDWallet;
|
|
135
135
|
};
|
|
136
|
+
export declare type ApproveInfiniteInput<C extends ChainId> = ApproveInput<C>;
|
|
137
|
+
export declare type ApproveAmountInput<C extends ChainId> = ApproveInput<C> & {
|
|
138
|
+
amount?: string;
|
|
139
|
+
};
|
|
136
140
|
export declare type ApprovalNeededInput<C extends ChainId> = {
|
|
137
141
|
quote: TradeQuote<C>;
|
|
138
142
|
wallet: HDWallet;
|
|
@@ -163,6 +167,7 @@ export declare type TradeTxs = {
|
|
|
163
167
|
export declare enum SwapErrorTypes {
|
|
164
168
|
ALLOWANCE_REQUIRED_FAILED = "ALLOWANCE_REQUIRED_FAILED",
|
|
165
169
|
APPROVE_INFINITE_FAILED = "APPROVE_INFINITE_FAILED",
|
|
170
|
+
APPROVE_AMOUNT_FAILED = "APPROVE_AMOUNT_FAILED",
|
|
166
171
|
BUILD_TRADE_FAILED = "BUILD_TRADE_FAILED",
|
|
167
172
|
CHECK_APPROVAL_FAILED = "CHECK_APPROVAL_FAILED",
|
|
168
173
|
EXECUTE_TRADE_FAILED = "EXECUTE_TRADE_FAILED",
|
|
@@ -187,7 +192,7 @@ export declare enum SwapErrorTypes {
|
|
|
187
192
|
TRADE_FAILED = "TRADE_FAILED"
|
|
188
193
|
}
|
|
189
194
|
export interface Swapper<T extends ChainId> {
|
|
190
|
-
/** Human
|
|
195
|
+
/** Human-readable swapper name */
|
|
191
196
|
readonly name: string;
|
|
192
197
|
/** perform any necessary async initialization */
|
|
193
198
|
initialize?(): Promise<void>;
|
|
@@ -217,6 +222,11 @@ export interface Swapper<T extends ChainId> {
|
|
|
217
222
|
* Get the txid of an approve infinite transaction
|
|
218
223
|
*/
|
|
219
224
|
approveInfinite(args: ApproveInfiniteInput<T>): Promise<string>;
|
|
225
|
+
/**
|
|
226
|
+
* Get the txid of an approve amount transaction
|
|
227
|
+
* If no amount is specified the sell amount of the quote will be used
|
|
228
|
+
*/
|
|
229
|
+
approveAmount(args: ApproveAmountInput<T>): Promise<string>;
|
|
220
230
|
/**
|
|
221
231
|
* Get supported buyAssetId's by sellAssetId
|
|
222
232
|
*/
|
package/dist/api.js
CHANGED
|
@@ -18,6 +18,7 @@ var SwapErrorTypes;
|
|
|
18
18
|
(function (SwapErrorTypes) {
|
|
19
19
|
SwapErrorTypes["ALLOWANCE_REQUIRED_FAILED"] = "ALLOWANCE_REQUIRED_FAILED";
|
|
20
20
|
SwapErrorTypes["APPROVE_INFINITE_FAILED"] = "APPROVE_INFINITE_FAILED";
|
|
21
|
+
SwapErrorTypes["APPROVE_AMOUNT_FAILED"] = "APPROVE_AMOUNT_FAILED";
|
|
21
22
|
SwapErrorTypes["BUILD_TRADE_FAILED"] = "BUILD_TRADE_FAILED";
|
|
22
23
|
SwapErrorTypes["CHECK_APPROVAL_FAILED"] = "CHECK_APPROVAL_FAILED";
|
|
23
24
|
SwapErrorTypes["EXECUTE_TRADE_FAILED"] = "EXECUTE_TRADE_FAILED";
|
|
@@ -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);
|
|
@@ -3,7 +3,7 @@ import { AssetId } from '@shapeshiftoss/caip';
|
|
|
3
3
|
import { ethereum } from '@shapeshiftoss/chain-adapters';
|
|
4
4
|
import { KnownChainIds } from '@shapeshiftoss/types';
|
|
5
5
|
import Web3 from 'web3';
|
|
6
|
-
import { ApprovalNeededInput, ApprovalNeededOutput, ApproveInfiniteInput, BuildTradeInput, BuyAssetBySellIdInput, ExecuteTradeInput, GetTradeQuoteInput, Swapper, SwapperType, TradeQuote, TradeResult, TradeTxs } from '../../api';
|
|
6
|
+
import { ApprovalNeededInput, ApprovalNeededOutput, ApproveAmountInput, ApproveInfiniteInput, BuildTradeInput, BuyAssetBySellIdInput, ExecuteTradeInput, GetTradeQuoteInput, Swapper, SwapperType, TradeQuote, TradeResult, TradeTxs } from '../../api';
|
|
7
7
|
import { CowTrade } from './types';
|
|
8
8
|
export declare type CowSwapperDeps = {
|
|
9
9
|
apiUrl: string;
|
|
@@ -21,6 +21,7 @@ export declare class CowSwapper implements Swapper<KnownChainIds.EthereumMainnet
|
|
|
21
21
|
executeTrade(args: ExecuteTradeInput<KnownChainIds.EthereumMainnet>): Promise<TradeResult>;
|
|
22
22
|
approvalNeeded(args: ApprovalNeededInput<KnownChainIds.EthereumMainnet>): Promise<ApprovalNeededOutput>;
|
|
23
23
|
approveInfinite(args: ApproveInfiniteInput<KnownChainIds.EthereumMainnet>): Promise<string>;
|
|
24
|
+
approveAmount(args: ApproveAmountInput<KnownChainIds.EthereumMainnet>): Promise<string>;
|
|
24
25
|
filterBuyAssetsBySellAssetId(args: BuyAssetBySellIdInput): AssetId[];
|
|
25
26
|
filterAssetIdsBySellable(assetIds: AssetId[]): AssetId[];
|
|
26
27
|
getTradeTxs(args: TradeResult): Promise<TradeTxs>;
|
|
@@ -19,7 +19,7 @@ const caip_1 = require("@shapeshiftoss/caip");
|
|
|
19
19
|
const types_1 = require("@shapeshiftoss/types");
|
|
20
20
|
const api_1 = require("../../api");
|
|
21
21
|
const cowApprovalNeeded_1 = require("./cowApprovalNeeded/cowApprovalNeeded");
|
|
22
|
-
const
|
|
22
|
+
const cowApprove_1 = require("./cowApprove/cowApprove");
|
|
23
23
|
const cowBuildTrade_1 = require("./cowBuildTrade/cowBuildTrade");
|
|
24
24
|
const cowExecuteTrade_1 = require("./cowExecuteTrade/cowExecuteTrade");
|
|
25
25
|
const cowGetTradeTxs_1 = require("./cowGetTradeTxs/cowGetTradeTxs");
|
|
@@ -50,7 +50,10 @@ class CowSwapper {
|
|
|
50
50
|
return (0, cowApprovalNeeded_1.cowApprovalNeeded)(this.deps, args);
|
|
51
51
|
}
|
|
52
52
|
async approveInfinite(args) {
|
|
53
|
-
return (0,
|
|
53
|
+
return (0, cowApprove_1.cowApproveInfinite)(this.deps, args);
|
|
54
|
+
}
|
|
55
|
+
async approveAmount(args) {
|
|
56
|
+
return (0, cowApprove_1.cowApproveAmount)(this.deps, args);
|
|
54
57
|
}
|
|
55
58
|
filterBuyAssetsBySellAssetId(args) {
|
|
56
59
|
const { assetIds = [], sellAssetId } = 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
|
}
|
package/dist/swappers/cow/{cowApproveInfinite/cowApproveInfinite.d.ts → cowApprove/cowApprove.d.ts}
RENAMED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { KnownChainIds } from '@shapeshiftoss/types';
|
|
2
|
-
import { ApproveInfiniteInput } from '../../../api';
|
|
2
|
+
import { ApproveAmountInput, ApproveInfiniteInput } from '../../../api';
|
|
3
3
|
import { CowSwapperDeps } from '../CowSwapper';
|
|
4
4
|
export declare function cowApproveInfinite({ adapter, web3 }: CowSwapperDeps, { quote, wallet }: ApproveInfiniteInput<KnownChainIds.EthereumMainnet>): Promise<string>;
|
|
5
|
+
export declare function cowApproveAmount({ adapter, web3 }: CowSwapperDeps, { quote, wallet, amount }: ApproveAmountInput<KnownChainIds.EthereumMainnet>): Promise<string>;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cowApproveAmount = exports.cowApproveInfinite = void 0;
|
|
4
|
+
const api_1 = require("../../../api");
|
|
5
|
+
const erc20_abi_1 = require("../../utils/abi/erc20-abi");
|
|
6
|
+
const helpers_1 = require("../../utils/helpers/helpers");
|
|
7
|
+
const constants_1 = require("../utils/constants");
|
|
8
|
+
async function cowApproveInfinite({ adapter, web3 }, { quote, wallet }) {
|
|
9
|
+
try {
|
|
10
|
+
const allowanceGrantRequired = await (0, helpers_1.grantAllowance)({
|
|
11
|
+
quote: {
|
|
12
|
+
...quote,
|
|
13
|
+
sellAmount: constants_1.MAX_ALLOWANCE,
|
|
14
|
+
},
|
|
15
|
+
wallet,
|
|
16
|
+
adapter,
|
|
17
|
+
erc20Abi: erc20_abi_1.erc20Abi,
|
|
18
|
+
web3,
|
|
19
|
+
});
|
|
20
|
+
return allowanceGrantRequired;
|
|
21
|
+
}
|
|
22
|
+
catch (e) {
|
|
23
|
+
if (e instanceof api_1.SwapError)
|
|
24
|
+
throw e;
|
|
25
|
+
throw new api_1.SwapError('[cowApproveInfinite]', {
|
|
26
|
+
cause: e,
|
|
27
|
+
code: api_1.SwapErrorTypes.APPROVE_INFINITE_FAILED,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
exports.cowApproveInfinite = cowApproveInfinite;
|
|
32
|
+
async function cowApproveAmount({ adapter, web3 }, { quote, wallet, amount }) {
|
|
33
|
+
try {
|
|
34
|
+
const approvalAmount = amount !== null && amount !== void 0 ? amount : quote.sellAmount;
|
|
35
|
+
const allowanceGrantRequired = await (0, helpers_1.grantAllowance)({
|
|
36
|
+
quote: {
|
|
37
|
+
...quote,
|
|
38
|
+
sellAmount: approvalAmount,
|
|
39
|
+
},
|
|
40
|
+
wallet,
|
|
41
|
+
adapter,
|
|
42
|
+
erc20Abi: erc20_abi_1.erc20Abi,
|
|
43
|
+
web3,
|
|
44
|
+
});
|
|
45
|
+
return allowanceGrantRequired;
|
|
46
|
+
}
|
|
47
|
+
catch (e) {
|
|
48
|
+
if (e instanceof api_1.SwapError)
|
|
49
|
+
throw e;
|
|
50
|
+
throw new api_1.SwapError('[cowApproveAmount]', {
|
|
51
|
+
cause: e,
|
|
52
|
+
code: api_1.SwapErrorTypes.APPROVE_AMOUNT_FAILED,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.cowApproveAmount = cowApproveAmount;
|
|
@@ -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;
|
|
@@ -15,6 +15,7 @@ export declare class OsmosisSwapper implements Swapper<ChainId> {
|
|
|
15
15
|
}): Promise<MinMaxOutput>;
|
|
16
16
|
approvalNeeded(): Promise<ApprovalNeededOutput>;
|
|
17
17
|
approveInfinite(): Promise<string>;
|
|
18
|
+
approveAmount(): Promise<string>;
|
|
18
19
|
filterBuyAssetsBySellAssetId(args: BuyAssetBySellIdInput): string[];
|
|
19
20
|
filterAssetIdsBySellable(): AssetId[];
|
|
20
21
|
buildTrade(args: BuildTradeInput): Promise<Trade<ChainId>>;
|