@pancakeswap/sdk 3.1.4 → 3.2.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/index.d.ts +14 -5
- package/dist/index.js +375 -232
- package/dist/index.mjs +288 -154
- package/package.json +13 -6
package/dist/index.js
CHANGED
|
@@ -1,92 +1,46 @@
|
|
|
1
|
-
|
|
2
|
-
var __create = Object.create;
|
|
3
|
-
var __defProp = Object.defineProperty;
|
|
4
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __export = (target, all) => {
|
|
9
|
-
for (var name in all)
|
|
10
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
-
};
|
|
12
|
-
var __copyProps = (to, from, except, desc) => {
|
|
13
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
-
for (let key of __getOwnPropNames(from))
|
|
15
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
-
}
|
|
18
|
-
return to;
|
|
19
|
-
};
|
|
20
|
-
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
21
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, mod));
|
|
22
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
1
|
+
'use strict';
|
|
23
2
|
|
|
24
|
-
|
|
25
|
-
var
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
FACTORY_ADDRESS_MAP: () => FACTORY_ADDRESS_MAP,
|
|
31
|
-
INIT_CODE_HASH: () => INIT_CODE_HASH,
|
|
32
|
-
INIT_CODE_HASH_MAP: () => INIT_CODE_HASH_MAP,
|
|
33
|
-
JSBI: () => import_jsbi2.default,
|
|
34
|
-
NATIVE: () => NATIVE,
|
|
35
|
-
Native: () => Native,
|
|
36
|
-
ONE_HUNDRED_PERCENT: () => ONE_HUNDRED_PERCENT,
|
|
37
|
-
Pair: () => Pair,
|
|
38
|
-
Route: () => Route,
|
|
39
|
-
Router: () => Router,
|
|
40
|
-
Trade: () => Trade,
|
|
41
|
-
WBNB: () => WBNB,
|
|
42
|
-
WETH9: () => WETH9,
|
|
43
|
-
WNATIVE: () => WNATIVE,
|
|
44
|
-
ZERO_PERCENT: () => ZERO_PERCENT,
|
|
45
|
-
computePairAddress: () => computePairAddress,
|
|
46
|
-
inputOutputComparator: () => inputOutputComparator,
|
|
47
|
-
isTradeBetter: () => isTradeBetter,
|
|
48
|
-
tradeComparator: () => tradeComparator
|
|
49
|
-
});
|
|
50
|
-
module.exports = __toCommonJS(src_exports);
|
|
51
|
-
var import_jsbi2 = __toESM(require("jsbi"));
|
|
3
|
+
var JSBI = require('jsbi');
|
|
4
|
+
var swapSdkCore = require('@pancakeswap/swap-sdk-core');
|
|
5
|
+
var address = require('@ethersproject/address');
|
|
6
|
+
var invariant4 = require('tiny-invariant');
|
|
7
|
+
var warning = require('tiny-warning');
|
|
8
|
+
var solidity = require('@ethersproject/solidity');
|
|
52
9
|
|
|
53
|
-
|
|
54
|
-
var import_swap_sdk_core2 = require("@pancakeswap/swap-sdk-core");
|
|
10
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
55
11
|
|
|
56
|
-
|
|
57
|
-
var
|
|
12
|
+
var JSBI__default = /*#__PURE__*/_interopDefault(JSBI);
|
|
13
|
+
var invariant4__default = /*#__PURE__*/_interopDefault(invariant4);
|
|
14
|
+
var warning__default = /*#__PURE__*/_interopDefault(warning);
|
|
58
15
|
|
|
59
|
-
// src/
|
|
60
|
-
|
|
61
|
-
var import_tiny_invariant = __toESM(require("tiny-invariant"));
|
|
62
|
-
var import_tiny_warning = __toESM(require("tiny-warning"));
|
|
63
|
-
function validateAndParseAddress(address) {
|
|
16
|
+
// src/index.ts
|
|
17
|
+
function validateAndParseAddress(address$1) {
|
|
64
18
|
try {
|
|
65
|
-
const checksummedAddress =
|
|
66
|
-
|
|
19
|
+
const checksummedAddress = address.getAddress(address$1);
|
|
20
|
+
warning__default.default(address$1 === checksummedAddress, `${address$1} is not checksummed.`);
|
|
67
21
|
return checksummedAddress;
|
|
68
22
|
} catch (error) {
|
|
69
|
-
|
|
23
|
+
invariant4__default.default(false, `${address$1} is not a valid address.`);
|
|
70
24
|
}
|
|
71
25
|
}
|
|
72
26
|
|
|
73
27
|
// src/entities/token.ts
|
|
74
|
-
var ERC20Token = class extends
|
|
28
|
+
var ERC20Token = class extends swapSdkCore.Token {
|
|
75
29
|
constructor(chainId, address, decimals, symbol, name, projectLink) {
|
|
76
30
|
super(chainId, validateAndParseAddress(address), decimals, symbol, name, projectLink);
|
|
77
31
|
}
|
|
78
32
|
};
|
|
79
33
|
|
|
80
34
|
// src/constants.ts
|
|
81
|
-
var ChainId = /* @__PURE__ */ ((
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
return
|
|
35
|
+
var ChainId = /* @__PURE__ */ ((ChainId3) => {
|
|
36
|
+
ChainId3[ChainId3["ETHEREUM"] = 1] = "ETHEREUM";
|
|
37
|
+
ChainId3[ChainId3["GOERLI"] = 5] = "GOERLI";
|
|
38
|
+
ChainId3[ChainId3["BSC"] = 56] = "BSC";
|
|
39
|
+
ChainId3[ChainId3["BSC_TESTNET"] = 97] = "BSC_TESTNET";
|
|
40
|
+
return ChainId3;
|
|
87
41
|
})(ChainId || {});
|
|
88
|
-
var ZERO_PERCENT = new
|
|
89
|
-
var ONE_HUNDRED_PERCENT = new
|
|
42
|
+
var ZERO_PERCENT = new swapSdkCore.Percent("0");
|
|
43
|
+
var ONE_HUNDRED_PERCENT = new swapSdkCore.Percent("1");
|
|
90
44
|
var FACTORY_ADDRESS = "0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73";
|
|
91
45
|
var FACTORY_ADDRESS_ETH = "0x1097053Fd2ea711dad45caCcc45EfF7548fCB362";
|
|
92
46
|
var FACTORY_ADDRESS_MAP = {
|
|
@@ -104,13 +58,48 @@ var INIT_CODE_HASH_MAP = {
|
|
|
104
58
|
[97 /* BSC_TESTNET */]: "0xd0d4c4cd0848c93cb4fd1f498d7013ee6bfb25783ea21593d5834f5d250ece66"
|
|
105
59
|
};
|
|
106
60
|
var WETH9 = {
|
|
107
|
-
[1 /* ETHEREUM */]: new ERC20Token(
|
|
108
|
-
|
|
61
|
+
[1 /* ETHEREUM */]: new ERC20Token(
|
|
62
|
+
1 /* ETHEREUM */,
|
|
63
|
+
"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",
|
|
64
|
+
18,
|
|
65
|
+
"WETH",
|
|
66
|
+
"Wrapped Ether",
|
|
67
|
+
"https://weth.io"
|
|
68
|
+
),
|
|
69
|
+
[5 /* GOERLI */]: new ERC20Token(
|
|
70
|
+
5 /* GOERLI */,
|
|
71
|
+
"0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6",
|
|
72
|
+
18,
|
|
73
|
+
"WETH",
|
|
74
|
+
"Wrapped Ether",
|
|
75
|
+
"https://weth.io"
|
|
76
|
+
)
|
|
109
77
|
};
|
|
110
78
|
var WBNB = {
|
|
111
|
-
[1 /* ETHEREUM */]: new ERC20Token(
|
|
112
|
-
|
|
113
|
-
|
|
79
|
+
[1 /* ETHEREUM */]: new ERC20Token(
|
|
80
|
+
1 /* ETHEREUM */,
|
|
81
|
+
"0x418D75f65a02b3D53B2418FB8E1fe493759c7605",
|
|
82
|
+
18,
|
|
83
|
+
"WBNB",
|
|
84
|
+
"Wrapped BNB",
|
|
85
|
+
"https://www.binance.org"
|
|
86
|
+
),
|
|
87
|
+
[56 /* BSC */]: new ERC20Token(
|
|
88
|
+
56 /* BSC */,
|
|
89
|
+
"0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c",
|
|
90
|
+
18,
|
|
91
|
+
"WBNB",
|
|
92
|
+
"Wrapped BNB",
|
|
93
|
+
"https://www.binance.org"
|
|
94
|
+
),
|
|
95
|
+
[97 /* BSC_TESTNET */]: new ERC20Token(
|
|
96
|
+
97 /* BSC_TESTNET */,
|
|
97
|
+
"0xae13d989daC2f0dEbFf460aC112a837C89BAa7cd",
|
|
98
|
+
18,
|
|
99
|
+
"WBNB",
|
|
100
|
+
"Wrapped BNB",
|
|
101
|
+
"https://www.binance.org"
|
|
102
|
+
)
|
|
114
103
|
};
|
|
115
104
|
var WNATIVE = {
|
|
116
105
|
[1 /* ETHEREUM */]: WETH9[1 /* ETHEREUM */],
|
|
@@ -149,13 +138,6 @@ function isTradeBetter(tradeA, tradeB, minimumDelta = ZERO_PERCENT) {
|
|
|
149
138
|
}
|
|
150
139
|
return tradeA.executionPrice.asFraction.multiply(minimumDelta.add(ONE_HUNDRED_PERCENT)).lessThan(tradeB.executionPrice);
|
|
151
140
|
}
|
|
152
|
-
|
|
153
|
-
// src/entities/pair.ts
|
|
154
|
-
var import_swap_sdk_core3 = require("@pancakeswap/swap-sdk-core");
|
|
155
|
-
var import_address2 = require("@ethersproject/address");
|
|
156
|
-
var import_solidity = require("@ethersproject/solidity");
|
|
157
|
-
var import_jsbi = __toESM(require("jsbi"));
|
|
158
|
-
var import_tiny_invariant2 = __toESM(require("tiny-invariant"));
|
|
159
141
|
var PAIR_ADDRESS_CACHE = {};
|
|
160
142
|
var composeKey = (token0, token1) => `${token0.chainId}-${token0.address}-${token1.address}`;
|
|
161
143
|
var computePairAddress = ({
|
|
@@ -168,7 +150,11 @@ var computePairAddress = ({
|
|
|
168
150
|
if ((PAIR_ADDRESS_CACHE == null ? void 0 : PAIR_ADDRESS_CACHE[key]) === void 0) {
|
|
169
151
|
PAIR_ADDRESS_CACHE = {
|
|
170
152
|
...PAIR_ADDRESS_CACHE,
|
|
171
|
-
[key]:
|
|
153
|
+
[key]: address.getCreate2Address(
|
|
154
|
+
factoryAddress,
|
|
155
|
+
solidity.keccak256(["bytes"], [solidity.pack(["address", "address"], [token0.address, token1.address])]),
|
|
156
|
+
INIT_CODE_HASH_MAP[token0.chainId]
|
|
157
|
+
)
|
|
172
158
|
};
|
|
173
159
|
}
|
|
174
160
|
return PAIR_ADDRESS_CACHE[key];
|
|
@@ -179,24 +165,47 @@ var Pair = class {
|
|
|
179
165
|
}
|
|
180
166
|
constructor(currencyAmountA, tokenAmountB) {
|
|
181
167
|
const tokenAmounts = currencyAmountA.currency.sortsBefore(tokenAmountB.currency) ? [currencyAmountA, tokenAmountB] : [tokenAmountB, currencyAmountA];
|
|
182
|
-
this.liquidityToken = new ERC20Token(
|
|
168
|
+
this.liquidityToken = new ERC20Token(
|
|
169
|
+
tokenAmounts[0].currency.chainId,
|
|
170
|
+
Pair.getAddress(tokenAmounts[0].currency, tokenAmounts[1].currency),
|
|
171
|
+
18,
|
|
172
|
+
"Cake-LP",
|
|
173
|
+
"Pancake LPs"
|
|
174
|
+
);
|
|
183
175
|
this.tokenAmounts = tokenAmounts;
|
|
184
176
|
}
|
|
177
|
+
/**
|
|
178
|
+
* Returns true if the token is either token0 or token1
|
|
179
|
+
* @param token to check
|
|
180
|
+
*/
|
|
185
181
|
involvesToken(token) {
|
|
186
182
|
return token.equals(this.token0) || token.equals(this.token1);
|
|
187
183
|
}
|
|
184
|
+
/**
|
|
185
|
+
* Returns the current mid price of the pair in terms of token0, i.e. the ratio of reserve1 to reserve0
|
|
186
|
+
*/
|
|
188
187
|
get token0Price() {
|
|
189
188
|
const result = this.tokenAmounts[1].divide(this.tokenAmounts[0]);
|
|
190
|
-
return new
|
|
189
|
+
return new swapSdkCore.Price(this.token0, this.token1, result.denominator, result.numerator);
|
|
191
190
|
}
|
|
191
|
+
/**
|
|
192
|
+
* Returns the current mid price of the pair in terms of token1, i.e. the ratio of reserve0 to reserve1
|
|
193
|
+
*/
|
|
192
194
|
get token1Price() {
|
|
193
195
|
const result = this.tokenAmounts[0].divide(this.tokenAmounts[1]);
|
|
194
|
-
return new
|
|
196
|
+
return new swapSdkCore.Price(this.token1, this.token0, result.denominator, result.numerator);
|
|
195
197
|
}
|
|
198
|
+
/**
|
|
199
|
+
* Return the price of the given token in terms of the other token in the pair.
|
|
200
|
+
* @param token token to return price of
|
|
201
|
+
*/
|
|
196
202
|
priceOf(token) {
|
|
197
|
-
|
|
203
|
+
invariant4__default.default(this.involvesToken(token), "TOKEN");
|
|
198
204
|
return token.equals(this.token0) ? this.token0Price : this.token1Price;
|
|
199
205
|
}
|
|
206
|
+
/**
|
|
207
|
+
* Returns the chain ID of the tokens in the pair.
|
|
208
|
+
*/
|
|
200
209
|
get chainId() {
|
|
201
210
|
return this.token0.chainId;
|
|
202
211
|
}
|
|
@@ -213,73 +222,82 @@ var Pair = class {
|
|
|
213
222
|
return this.tokenAmounts[1];
|
|
214
223
|
}
|
|
215
224
|
reserveOf(token) {
|
|
216
|
-
|
|
225
|
+
invariant4__default.default(this.involvesToken(token), "TOKEN");
|
|
217
226
|
return token.equals(this.token0) ? this.reserve0 : this.reserve1;
|
|
218
227
|
}
|
|
219
228
|
getOutputAmount(inputAmount) {
|
|
220
|
-
|
|
221
|
-
if (
|
|
222
|
-
throw new
|
|
229
|
+
invariant4__default.default(this.involvesToken(inputAmount.currency), "TOKEN");
|
|
230
|
+
if (JSBI__default.default.equal(this.reserve0.quotient, swapSdkCore.ZERO) || JSBI__default.default.equal(this.reserve1.quotient, swapSdkCore.ZERO)) {
|
|
231
|
+
throw new swapSdkCore.InsufficientReservesError();
|
|
223
232
|
}
|
|
224
233
|
const inputReserve = this.reserveOf(inputAmount.currency);
|
|
225
234
|
const outputReserve = this.reserveOf(inputAmount.currency.equals(this.token0) ? this.token1 : this.token0);
|
|
226
|
-
const inputAmountWithFee =
|
|
227
|
-
const numerator =
|
|
228
|
-
const denominator =
|
|
229
|
-
const outputAmount =
|
|
230
|
-
|
|
231
|
-
|
|
235
|
+
const inputAmountWithFee = JSBI__default.default.multiply(inputAmount.quotient, swapSdkCore._9975);
|
|
236
|
+
const numerator = JSBI__default.default.multiply(inputAmountWithFee, outputReserve.quotient);
|
|
237
|
+
const denominator = JSBI__default.default.add(JSBI__default.default.multiply(inputReserve.quotient, swapSdkCore._10000), inputAmountWithFee);
|
|
238
|
+
const outputAmount = swapSdkCore.CurrencyAmount.fromRawAmount(
|
|
239
|
+
inputAmount.currency.equals(this.token0) ? this.token1 : this.token0,
|
|
240
|
+
JSBI__default.default.divide(numerator, denominator)
|
|
241
|
+
);
|
|
242
|
+
if (JSBI__default.default.equal(outputAmount.quotient, swapSdkCore.ZERO)) {
|
|
243
|
+
throw new swapSdkCore.InsufficientInputAmountError();
|
|
232
244
|
}
|
|
233
245
|
return [outputAmount, new Pair(inputReserve.add(inputAmount), outputReserve.subtract(outputAmount))];
|
|
234
246
|
}
|
|
235
247
|
getInputAmount(outputAmount) {
|
|
236
|
-
|
|
237
|
-
if (
|
|
238
|
-
throw new
|
|
248
|
+
invariant4__default.default(this.involvesToken(outputAmount.currency), "TOKEN");
|
|
249
|
+
if (JSBI__default.default.equal(this.reserve0.quotient, swapSdkCore.ZERO) || JSBI__default.default.equal(this.reserve1.quotient, swapSdkCore.ZERO) || JSBI__default.default.greaterThanOrEqual(outputAmount.quotient, this.reserveOf(outputAmount.currency).quotient)) {
|
|
250
|
+
throw new swapSdkCore.InsufficientReservesError();
|
|
239
251
|
}
|
|
240
252
|
const outputReserve = this.reserveOf(outputAmount.currency);
|
|
241
253
|
const inputReserve = this.reserveOf(outputAmount.currency.equals(this.token0) ? this.token1 : this.token0);
|
|
242
|
-
const numerator =
|
|
243
|
-
const denominator =
|
|
244
|
-
const inputAmount =
|
|
254
|
+
const numerator = JSBI__default.default.multiply(JSBI__default.default.multiply(inputReserve.quotient, outputAmount.quotient), swapSdkCore._10000);
|
|
255
|
+
const denominator = JSBI__default.default.multiply(JSBI__default.default.subtract(outputReserve.quotient, outputAmount.quotient), swapSdkCore._9975);
|
|
256
|
+
const inputAmount = swapSdkCore.CurrencyAmount.fromRawAmount(
|
|
257
|
+
outputAmount.currency.equals(this.token0) ? this.token1 : this.token0,
|
|
258
|
+
JSBI__default.default.add(JSBI__default.default.divide(numerator, denominator), swapSdkCore.ONE)
|
|
259
|
+
);
|
|
245
260
|
return [inputAmount, new Pair(inputReserve.add(inputAmount), outputReserve.subtract(outputAmount))];
|
|
246
261
|
}
|
|
247
262
|
getLiquidityMinted(totalSupply, tokenAmountA, tokenAmountB) {
|
|
248
|
-
|
|
263
|
+
invariant4__default.default(totalSupply.currency.equals(this.liquidityToken), "LIQUIDITY");
|
|
249
264
|
const tokenAmounts = tokenAmountA.currency.sortsBefore(tokenAmountB.currency) ? [tokenAmountA, tokenAmountB] : [tokenAmountB, tokenAmountA];
|
|
250
|
-
|
|
265
|
+
invariant4__default.default(tokenAmounts[0].currency.equals(this.token0) && tokenAmounts[1].currency.equals(this.token1), "TOKEN");
|
|
251
266
|
let liquidity;
|
|
252
|
-
if (
|
|
253
|
-
liquidity =
|
|
267
|
+
if (JSBI__default.default.equal(totalSupply.quotient, swapSdkCore.ZERO)) {
|
|
268
|
+
liquidity = JSBI__default.default.subtract(
|
|
269
|
+
swapSdkCore.sqrt(JSBI__default.default.multiply(tokenAmounts[0].quotient, tokenAmounts[1].quotient)),
|
|
270
|
+
swapSdkCore.MINIMUM_LIQUIDITY
|
|
271
|
+
);
|
|
254
272
|
} else {
|
|
255
|
-
const amount0 =
|
|
256
|
-
const amount1 =
|
|
257
|
-
liquidity =
|
|
273
|
+
const amount0 = JSBI__default.default.divide(JSBI__default.default.multiply(tokenAmounts[0].quotient, totalSupply.quotient), this.reserve0.quotient);
|
|
274
|
+
const amount1 = JSBI__default.default.divide(JSBI__default.default.multiply(tokenAmounts[1].quotient, totalSupply.quotient), this.reserve1.quotient);
|
|
275
|
+
liquidity = JSBI__default.default.lessThanOrEqual(amount0, amount1) ? amount0 : amount1;
|
|
258
276
|
}
|
|
259
|
-
if (!
|
|
260
|
-
throw new
|
|
277
|
+
if (!JSBI__default.default.greaterThan(liquidity, swapSdkCore.ZERO)) {
|
|
278
|
+
throw new swapSdkCore.InsufficientInputAmountError();
|
|
261
279
|
}
|
|
262
|
-
return
|
|
280
|
+
return swapSdkCore.CurrencyAmount.fromRawAmount(this.liquidityToken, liquidity);
|
|
263
281
|
}
|
|
264
282
|
getLiquidityValue(token, totalSupply, liquidity, feeOn = false, kLast) {
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
283
|
+
invariant4__default.default(this.involvesToken(token), "TOKEN");
|
|
284
|
+
invariant4__default.default(totalSupply.currency.equals(this.liquidityToken), "TOTAL_SUPPLY");
|
|
285
|
+
invariant4__default.default(liquidity.currency.equals(this.liquidityToken), "LIQUIDITY");
|
|
286
|
+
invariant4__default.default(JSBI__default.default.lessThanOrEqual(liquidity.quotient, totalSupply.quotient), "LIQUIDITY");
|
|
269
287
|
let totalSupplyAdjusted;
|
|
270
288
|
if (!feeOn) {
|
|
271
289
|
totalSupplyAdjusted = totalSupply;
|
|
272
290
|
} else {
|
|
273
|
-
|
|
274
|
-
const kLastParsed =
|
|
275
|
-
if (!
|
|
276
|
-
const rootK =
|
|
277
|
-
const rootKLast =
|
|
278
|
-
if (
|
|
279
|
-
const numerator =
|
|
280
|
-
const denominator =
|
|
281
|
-
const feeLiquidity =
|
|
282
|
-
totalSupplyAdjusted = totalSupply.add(
|
|
291
|
+
invariant4__default.default(!!kLast, "K_LAST");
|
|
292
|
+
const kLastParsed = JSBI__default.default.BigInt(kLast);
|
|
293
|
+
if (!JSBI__default.default.equal(kLastParsed, swapSdkCore.ZERO)) {
|
|
294
|
+
const rootK = swapSdkCore.sqrt(JSBI__default.default.multiply(this.reserve0.quotient, this.reserve1.quotient));
|
|
295
|
+
const rootKLast = swapSdkCore.sqrt(kLastParsed);
|
|
296
|
+
if (JSBI__default.default.greaterThan(rootK, rootKLast)) {
|
|
297
|
+
const numerator = JSBI__default.default.multiply(totalSupply.quotient, JSBI__default.default.subtract(rootK, rootKLast));
|
|
298
|
+
const denominator = JSBI__default.default.add(JSBI__default.default.multiply(rootK, swapSdkCore.FIVE), rootKLast);
|
|
299
|
+
const feeLiquidity = JSBI__default.default.divide(numerator, denominator);
|
|
300
|
+
totalSupplyAdjusted = totalSupply.add(swapSdkCore.CurrencyAmount.fromRawAmount(this.liquidityToken, feeLiquidity));
|
|
283
301
|
} else {
|
|
284
302
|
totalSupplyAdjusted = totalSupply;
|
|
285
303
|
}
|
|
@@ -287,26 +305,28 @@ var Pair = class {
|
|
|
287
305
|
totalSupplyAdjusted = totalSupply;
|
|
288
306
|
}
|
|
289
307
|
}
|
|
290
|
-
return
|
|
308
|
+
return swapSdkCore.CurrencyAmount.fromRawAmount(
|
|
309
|
+
token,
|
|
310
|
+
JSBI__default.default.divide(JSBI__default.default.multiply(liquidity.quotient, this.reserveOf(token).quotient), totalSupplyAdjusted.quotient)
|
|
311
|
+
);
|
|
291
312
|
}
|
|
292
313
|
};
|
|
293
|
-
|
|
294
|
-
// src/entities/route.ts
|
|
295
|
-
var import_tiny_invariant3 = __toESM(require("tiny-invariant"));
|
|
296
|
-
var import_swap_sdk_core4 = require("@pancakeswap/swap-sdk-core");
|
|
297
314
|
var Route = class {
|
|
298
315
|
constructor(pairs, input, output) {
|
|
299
316
|
this._midPrice = null;
|
|
300
|
-
|
|
317
|
+
invariant4__default.default(pairs.length > 0, "PAIRS");
|
|
301
318
|
const chainId = pairs[0].chainId;
|
|
302
|
-
|
|
319
|
+
invariant4__default.default(
|
|
320
|
+
pairs.every((pair) => pair.chainId === chainId),
|
|
321
|
+
"CHAIN_IDS"
|
|
322
|
+
);
|
|
303
323
|
const wrappedInput = input.wrapped;
|
|
304
|
-
|
|
305
|
-
|
|
324
|
+
invariant4__default.default(pairs[0].involvesToken(wrappedInput), "INPUT");
|
|
325
|
+
invariant4__default.default(typeof output === "undefined" || pairs[pairs.length - 1].involvesToken(output.wrapped), "OUTPUT");
|
|
306
326
|
const path = [wrappedInput];
|
|
307
327
|
for (const [i, pair] of pairs.entries()) {
|
|
308
328
|
const currentInput = path[i];
|
|
309
|
-
|
|
329
|
+
invariant4__default.default(currentInput.equals(pair.token0) || currentInput.equals(pair.token1), "PATH");
|
|
310
330
|
const output2 = currentInput.equals(pair.token0) ? pair.token1 : pair.token0;
|
|
311
331
|
path.push(output2);
|
|
312
332
|
}
|
|
@@ -320,22 +340,20 @@ var Route = class {
|
|
|
320
340
|
return this._midPrice;
|
|
321
341
|
const prices = [];
|
|
322
342
|
for (const [i, pair] of this.pairs.entries()) {
|
|
323
|
-
prices.push(
|
|
343
|
+
prices.push(
|
|
344
|
+
this.path[i].equals(pair.token0) ? new swapSdkCore.Price(pair.reserve0.currency, pair.reserve1.currency, pair.reserve0.quotient, pair.reserve1.quotient) : new swapSdkCore.Price(pair.reserve1.currency, pair.reserve0.currency, pair.reserve1.quotient, pair.reserve0.quotient)
|
|
345
|
+
);
|
|
324
346
|
}
|
|
325
347
|
const reduced = prices.slice(1).reduce((accumulator, currentValue) => accumulator.multiply(currentValue), prices[0]);
|
|
326
|
-
return this._midPrice = new
|
|
348
|
+
return this._midPrice = new swapSdkCore.Price(this.input, this.output, reduced.denominator, reduced.numerator);
|
|
327
349
|
}
|
|
328
350
|
get chainId() {
|
|
329
351
|
return this.pairs[0].chainId;
|
|
330
352
|
}
|
|
331
353
|
};
|
|
332
|
-
|
|
333
|
-
// src/entities/trade.ts
|
|
334
|
-
var import_tiny_invariant4 = __toESM(require("tiny-invariant"));
|
|
335
|
-
var import_swap_sdk_core5 = require("@pancakeswap/swap-sdk-core");
|
|
336
354
|
function inputOutputComparator(a, b) {
|
|
337
|
-
|
|
338
|
-
|
|
355
|
+
invariant4__default.default(a.inputAmount.currency.equals(b.inputAmount.currency), "INPUT_CURRENCY");
|
|
356
|
+
invariant4__default.default(a.outputAmount.currency.equals(b.outputAmount.currency), "OUTPUT_CURRENCY");
|
|
339
357
|
if (a.outputAmount.equalTo(b.outputAmount)) {
|
|
340
358
|
if (a.inputAmount.equalTo(b.inputAmount)) {
|
|
341
359
|
return 0;
|
|
@@ -364,67 +382,112 @@ function tradeComparator(a, b) {
|
|
|
364
382
|
return a.route.path.length - b.route.path.length;
|
|
365
383
|
}
|
|
366
384
|
var Trade = class {
|
|
385
|
+
/**
|
|
386
|
+
* Constructs an exact in trade with the given amount in and route
|
|
387
|
+
* @param route route of the exact in trade
|
|
388
|
+
* @param amountIn the amount being passed in
|
|
389
|
+
*/
|
|
367
390
|
static exactIn(route, amountIn) {
|
|
368
|
-
return new Trade(route, amountIn,
|
|
391
|
+
return new Trade(route, amountIn, swapSdkCore.TradeType.EXACT_INPUT);
|
|
369
392
|
}
|
|
393
|
+
/**
|
|
394
|
+
* Constructs an exact out trade with the given amount out and route
|
|
395
|
+
* @param route route of the exact out trade
|
|
396
|
+
* @param amountOut the amount returned by the trade
|
|
397
|
+
*/
|
|
370
398
|
static exactOut(route, amountOut) {
|
|
371
|
-
return new Trade(route, amountOut,
|
|
399
|
+
return new Trade(route, amountOut, swapSdkCore.TradeType.EXACT_OUTPUT);
|
|
372
400
|
}
|
|
373
401
|
constructor(route, amount, tradeType) {
|
|
374
402
|
this.route = route;
|
|
375
403
|
this.tradeType = tradeType;
|
|
376
404
|
const tokenAmounts = new Array(route.path.length);
|
|
377
|
-
if (tradeType ===
|
|
378
|
-
|
|
405
|
+
if (tradeType === swapSdkCore.TradeType.EXACT_INPUT) {
|
|
406
|
+
invariant4__default.default(amount.currency.equals(route.input), "INPUT");
|
|
379
407
|
tokenAmounts[0] = amount.wrapped;
|
|
380
408
|
for (let i = 0; i < route.path.length - 1; i++) {
|
|
381
409
|
const pair = route.pairs[i];
|
|
382
410
|
const [outputAmount] = pair.getOutputAmount(tokenAmounts[i]);
|
|
383
411
|
tokenAmounts[i + 1] = outputAmount;
|
|
384
412
|
}
|
|
385
|
-
this.inputAmount =
|
|
386
|
-
this.outputAmount =
|
|
413
|
+
this.inputAmount = swapSdkCore.CurrencyAmount.fromFractionalAmount(route.input, amount.numerator, amount.denominator);
|
|
414
|
+
this.outputAmount = swapSdkCore.CurrencyAmount.fromFractionalAmount(
|
|
415
|
+
route.output,
|
|
416
|
+
tokenAmounts[tokenAmounts.length - 1].numerator,
|
|
417
|
+
tokenAmounts[tokenAmounts.length - 1].denominator
|
|
418
|
+
);
|
|
387
419
|
} else {
|
|
388
|
-
|
|
420
|
+
invariant4__default.default(amount.currency.equals(route.output), "OUTPUT");
|
|
389
421
|
tokenAmounts[tokenAmounts.length - 1] = amount.wrapped;
|
|
390
422
|
for (let i = route.path.length - 1; i > 0; i--) {
|
|
391
423
|
const pair = route.pairs[i - 1];
|
|
392
424
|
const [inputAmount] = pair.getInputAmount(tokenAmounts[i]);
|
|
393
425
|
tokenAmounts[i - 1] = inputAmount;
|
|
394
426
|
}
|
|
395
|
-
this.inputAmount =
|
|
396
|
-
|
|
427
|
+
this.inputAmount = swapSdkCore.CurrencyAmount.fromFractionalAmount(
|
|
428
|
+
route.input,
|
|
429
|
+
tokenAmounts[0].numerator,
|
|
430
|
+
tokenAmounts[0].denominator
|
|
431
|
+
);
|
|
432
|
+
this.outputAmount = swapSdkCore.CurrencyAmount.fromFractionalAmount(route.output, amount.numerator, amount.denominator);
|
|
397
433
|
}
|
|
398
|
-
this.executionPrice = new
|
|
399
|
-
|
|
400
|
-
|
|
434
|
+
this.executionPrice = new swapSdkCore.Price(
|
|
435
|
+
this.inputAmount.currency,
|
|
436
|
+
this.outputAmount.currency,
|
|
437
|
+
this.inputAmount.quotient,
|
|
438
|
+
this.outputAmount.quotient
|
|
439
|
+
);
|
|
440
|
+
this.priceImpact = swapSdkCore.computePriceImpact(route.midPrice, this.inputAmount, this.outputAmount);
|
|
441
|
+
}
|
|
442
|
+
/**
|
|
443
|
+
* Get the minimum amount that must be received from this trade for the given slippage tolerance
|
|
444
|
+
* @param slippageTolerance tolerance of unfavorable slippage from the execution price of this trade
|
|
445
|
+
*/
|
|
401
446
|
minimumAmountOut(slippageTolerance) {
|
|
402
|
-
|
|
403
|
-
if (this.tradeType ===
|
|
447
|
+
invariant4__default.default(!slippageTolerance.lessThan(swapSdkCore.ZERO), "SLIPPAGE_TOLERANCE");
|
|
448
|
+
if (this.tradeType === swapSdkCore.TradeType.EXACT_OUTPUT) {
|
|
404
449
|
return this.outputAmount;
|
|
405
450
|
}
|
|
406
|
-
const slippageAdjustedAmountOut = new
|
|
407
|
-
return
|
|
451
|
+
const slippageAdjustedAmountOut = new swapSdkCore.Fraction(swapSdkCore.ONE).add(slippageTolerance).invert().multiply(this.outputAmount.quotient).quotient;
|
|
452
|
+
return swapSdkCore.CurrencyAmount.fromRawAmount(this.outputAmount.currency, slippageAdjustedAmountOut);
|
|
408
453
|
}
|
|
454
|
+
/**
|
|
455
|
+
* Get the maximum amount in that can be spent via this trade for the given slippage tolerance
|
|
456
|
+
* @param slippageTolerance tolerance of unfavorable slippage from the execution price of this trade
|
|
457
|
+
*/
|
|
409
458
|
maximumAmountIn(slippageTolerance) {
|
|
410
|
-
|
|
411
|
-
if (this.tradeType ===
|
|
459
|
+
invariant4__default.default(!slippageTolerance.lessThan(swapSdkCore.ZERO), "SLIPPAGE_TOLERANCE");
|
|
460
|
+
if (this.tradeType === swapSdkCore.TradeType.EXACT_INPUT) {
|
|
412
461
|
return this.inputAmount;
|
|
413
462
|
}
|
|
414
|
-
const slippageAdjustedAmountIn = new
|
|
415
|
-
return
|
|
416
|
-
}
|
|
463
|
+
const slippageAdjustedAmountIn = new swapSdkCore.Fraction(swapSdkCore.ONE).add(slippageTolerance).multiply(this.inputAmount.quotient).quotient;
|
|
464
|
+
return swapSdkCore.CurrencyAmount.fromRawAmount(this.inputAmount.currency, slippageAdjustedAmountIn);
|
|
465
|
+
}
|
|
466
|
+
/**
|
|
467
|
+
* Given a list of pairs, and a fixed amount in, returns the top `maxNumResults` trades that go from an input token
|
|
468
|
+
* amount to an output token, making at most `maxHops` hops.
|
|
469
|
+
* Note this does not consider aggregation, as routes are linear. It's possible a better route exists by splitting
|
|
470
|
+
* the amount in among multiple routes.
|
|
471
|
+
* @param pairs the pairs to consider in finding the best trade
|
|
472
|
+
* @param nextAmountIn exact amount of input currency to spend
|
|
473
|
+
* @param currencyOut the desired currency out
|
|
474
|
+
* @param maxNumResults maximum number of results to return
|
|
475
|
+
* @param maxHops maximum number of hops a returned trade can make, e.g. 1 hop goes through a single pair
|
|
476
|
+
* @param currentPairs used in recursion; the current list of pairs
|
|
477
|
+
* @param currencyAmountIn used in recursion; the original value of the currencyAmountIn parameter
|
|
478
|
+
* @param bestTrades used in recursion; the current list of best trades
|
|
479
|
+
*/
|
|
417
480
|
static bestTradeExactIn(pairs, currencyAmountIn, currencyOut, { maxNumResults = 3, maxHops = 3 } = {}, currentPairs = [], nextAmountIn = currencyAmountIn, bestTrades = []) {
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
481
|
+
invariant4__default.default(pairs.length > 0, "PAIRS");
|
|
482
|
+
invariant4__default.default(maxHops > 0, "MAX_HOPS");
|
|
483
|
+
invariant4__default.default(currencyAmountIn === nextAmountIn || currentPairs.length > 0, "INVALID_RECURSION");
|
|
421
484
|
const amountIn = nextAmountIn.wrapped;
|
|
422
485
|
const tokenOut = currencyOut.wrapped;
|
|
423
486
|
for (let i = 0; i < pairs.length; i++) {
|
|
424
487
|
const pair = pairs[i];
|
|
425
488
|
if (!pair.token0.equals(amountIn.currency) && !pair.token1.equals(amountIn.currency))
|
|
426
489
|
continue;
|
|
427
|
-
if (pair.reserve0.equalTo(
|
|
490
|
+
if (pair.reserve0.equalTo(swapSdkCore.ZERO) || pair.reserve1.equalTo(swapSdkCore.ZERO))
|
|
428
491
|
continue;
|
|
429
492
|
let amountOut;
|
|
430
493
|
try {
|
|
@@ -437,31 +500,72 @@ var Trade = class {
|
|
|
437
500
|
throw error;
|
|
438
501
|
}
|
|
439
502
|
if (amountOut.currency.equals(tokenOut)) {
|
|
440
|
-
|
|
503
|
+
swapSdkCore.sortedInsert(
|
|
504
|
+
bestTrades,
|
|
505
|
+
new Trade(
|
|
506
|
+
new Route([...currentPairs, pair], currencyAmountIn.currency, currencyOut),
|
|
507
|
+
currencyAmountIn,
|
|
508
|
+
swapSdkCore.TradeType.EXACT_INPUT
|
|
509
|
+
),
|
|
510
|
+
maxNumResults,
|
|
511
|
+
tradeComparator
|
|
512
|
+
);
|
|
441
513
|
} else if (maxHops > 1 && pairs.length > 1) {
|
|
442
514
|
const pairsExcludingThisPair = pairs.slice(0, i).concat(pairs.slice(i + 1, pairs.length));
|
|
443
|
-
Trade.bestTradeExactIn(
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
515
|
+
Trade.bestTradeExactIn(
|
|
516
|
+
pairsExcludingThisPair,
|
|
517
|
+
currencyAmountIn,
|
|
518
|
+
currencyOut,
|
|
519
|
+
{
|
|
520
|
+
maxNumResults,
|
|
521
|
+
maxHops: maxHops - 1
|
|
522
|
+
},
|
|
523
|
+
[...currentPairs, pair],
|
|
524
|
+
amountOut,
|
|
525
|
+
bestTrades
|
|
526
|
+
);
|
|
447
527
|
}
|
|
448
528
|
}
|
|
449
529
|
return bestTrades;
|
|
450
530
|
}
|
|
531
|
+
/**
|
|
532
|
+
* Return the execution price after accounting for slippage tolerance
|
|
533
|
+
* @param slippageTolerance the allowed tolerated slippage
|
|
534
|
+
*/
|
|
451
535
|
worstExecutionPrice(slippageTolerance) {
|
|
452
|
-
return new
|
|
453
|
-
|
|
536
|
+
return new swapSdkCore.Price(
|
|
537
|
+
this.inputAmount.currency,
|
|
538
|
+
this.outputAmount.currency,
|
|
539
|
+
this.maximumAmountIn(slippageTolerance).quotient,
|
|
540
|
+
this.minimumAmountOut(slippageTolerance).quotient
|
|
541
|
+
);
|
|
542
|
+
}
|
|
543
|
+
/**
|
|
544
|
+
* similar to the above method but instead targets a fixed output amount
|
|
545
|
+
* given a list of pairs, and a fixed amount out, returns the top `maxNumResults` trades that go from an input token
|
|
546
|
+
* to an output token amount, making at most `maxHops` hops
|
|
547
|
+
* note this does not consider aggregation, as routes are linear. it's possible a better route exists by splitting
|
|
548
|
+
* the amount in among multiple routes.
|
|
549
|
+
* @param pairs the pairs to consider in finding the best trade
|
|
550
|
+
* @param currencyIn the currency to spend
|
|
551
|
+
* @param nextAmountOut the exact amount of currency out
|
|
552
|
+
* @param maxNumResults maximum number of results to return
|
|
553
|
+
* @param maxHops maximum number of hops a returned trade can make, e.g. 1 hop goes through a single pair
|
|
554
|
+
* @param currentPairs used in recursion; the current list of pairs
|
|
555
|
+
* @param currencyAmountOut used in recursion; the original value of the currencyAmountOut parameter
|
|
556
|
+
* @param bestTrades used in recursion; the current list of best trades
|
|
557
|
+
*/
|
|
454
558
|
static bestTradeExactOut(pairs, currencyIn, currencyAmountOut, { maxNumResults = 3, maxHops = 3 } = {}, currentPairs = [], nextAmountOut = currencyAmountOut, bestTrades = []) {
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
559
|
+
invariant4__default.default(pairs.length > 0, "PAIRS");
|
|
560
|
+
invariant4__default.default(maxHops > 0, "MAX_HOPS");
|
|
561
|
+
invariant4__default.default(currencyAmountOut === nextAmountOut || currentPairs.length > 0, "INVALID_RECURSION");
|
|
458
562
|
const amountOut = nextAmountOut.wrapped;
|
|
459
563
|
const tokenIn = currencyIn.wrapped;
|
|
460
564
|
for (let i = 0; i < pairs.length; i++) {
|
|
461
565
|
const pair = pairs[i];
|
|
462
566
|
if (!pair.token0.equals(amountOut.currency) && !pair.token1.equals(amountOut.currency))
|
|
463
567
|
continue;
|
|
464
|
-
if (pair.reserve0.equalTo(
|
|
568
|
+
if (pair.reserve0.equalTo(swapSdkCore.ZERO) || pair.reserve1.equalTo(swapSdkCore.ZERO))
|
|
465
569
|
continue;
|
|
466
570
|
let amountIn;
|
|
467
571
|
try {
|
|
@@ -474,23 +578,36 @@ var Trade = class {
|
|
|
474
578
|
throw error;
|
|
475
579
|
}
|
|
476
580
|
if (amountIn.currency.equals(tokenIn)) {
|
|
477
|
-
|
|
581
|
+
swapSdkCore.sortedInsert(
|
|
582
|
+
bestTrades,
|
|
583
|
+
new Trade(
|
|
584
|
+
new Route([pair, ...currentPairs], currencyIn, currencyAmountOut.currency),
|
|
585
|
+
currencyAmountOut,
|
|
586
|
+
swapSdkCore.TradeType.EXACT_OUTPUT
|
|
587
|
+
),
|
|
588
|
+
maxNumResults,
|
|
589
|
+
tradeComparator
|
|
590
|
+
);
|
|
478
591
|
} else if (maxHops > 1 && pairs.length > 1) {
|
|
479
592
|
const pairsExcludingThisPair = pairs.slice(0, i).concat(pairs.slice(i + 1, pairs.length));
|
|
480
|
-
Trade.bestTradeExactOut(
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
593
|
+
Trade.bestTradeExactOut(
|
|
594
|
+
pairsExcludingThisPair,
|
|
595
|
+
currencyIn,
|
|
596
|
+
currencyAmountOut,
|
|
597
|
+
{
|
|
598
|
+
maxNumResults,
|
|
599
|
+
maxHops: maxHops - 1
|
|
600
|
+
},
|
|
601
|
+
[pair, ...currentPairs],
|
|
602
|
+
amountIn,
|
|
603
|
+
bestTrades
|
|
604
|
+
);
|
|
484
605
|
}
|
|
485
606
|
}
|
|
486
607
|
return bestTrades;
|
|
487
608
|
}
|
|
488
609
|
};
|
|
489
|
-
|
|
490
|
-
// src/entities/native.ts
|
|
491
|
-
var import_tiny_invariant5 = __toESM(require("tiny-invariant"));
|
|
492
|
-
var import_swap_sdk_core6 = require("@pancakeswap/swap-sdk-core");
|
|
493
|
-
var _Native = class extends import_swap_sdk_core6.NativeCurrency {
|
|
610
|
+
var _Native = class extends swapSdkCore.NativeCurrency {
|
|
494
611
|
constructor({
|
|
495
612
|
chainId,
|
|
496
613
|
decimals,
|
|
@@ -501,14 +618,14 @@ var _Native = class extends import_swap_sdk_core6.NativeCurrency {
|
|
|
501
618
|
}
|
|
502
619
|
get wrapped() {
|
|
503
620
|
const wnative = WNATIVE[this.chainId];
|
|
504
|
-
|
|
621
|
+
invariant4__default.default(!!wnative, "WRAPPED");
|
|
505
622
|
return wnative;
|
|
506
623
|
}
|
|
507
624
|
static onChain(chainId) {
|
|
508
625
|
if (chainId in this.cache) {
|
|
509
626
|
return this.cache[chainId];
|
|
510
627
|
}
|
|
511
|
-
|
|
628
|
+
invariant4__default.default(!!NATIVE[chainId], "NATIVE_CURRENCY");
|
|
512
629
|
const { decimals, name, symbol } = NATIVE[chainId];
|
|
513
630
|
return this.cache[chainId] = new _Native({ chainId, decimals, symbol, name });
|
|
514
631
|
}
|
|
@@ -518,33 +635,32 @@ var _Native = class extends import_swap_sdk_core6.NativeCurrency {
|
|
|
518
635
|
};
|
|
519
636
|
var Native = _Native;
|
|
520
637
|
Native.cache = {};
|
|
521
|
-
|
|
522
|
-
// src/router.ts
|
|
523
|
-
var import_swap_sdk_core7 = require("@pancakeswap/swap-sdk-core");
|
|
524
|
-
var import_tiny_invariant6 = __toESM(require("tiny-invariant"));
|
|
525
638
|
function toHex(currencyAmount) {
|
|
526
639
|
return `0x${currencyAmount.quotient.toString(16)}`;
|
|
527
640
|
}
|
|
528
641
|
var ZERO_HEX = "0x0";
|
|
529
642
|
var Router = class {
|
|
530
|
-
|
|
531
|
-
|
|
643
|
+
/**
|
|
644
|
+
* Produces the on-chain method name to call and the hex encoded parameters to pass as arguments for a given trade.
|
|
645
|
+
* @param trade to produce call parameters for
|
|
646
|
+
* @param options options for the call parameters
|
|
647
|
+
*/
|
|
532
648
|
static swapCallParameters(trade, options) {
|
|
533
649
|
const etherIn = trade.inputAmount.currency.isNative;
|
|
534
650
|
const etherOut = trade.outputAmount.currency.isNative;
|
|
535
|
-
|
|
536
|
-
|
|
651
|
+
invariant4__default.default(!(etherIn && etherOut), "ETHER_IN_OUT");
|
|
652
|
+
invariant4__default.default(!("ttl" in options) || options.ttl > 0, "TTL");
|
|
537
653
|
const to = validateAndParseAddress(options.recipient);
|
|
538
654
|
const amountIn = toHex(trade.maximumAmountIn(options.allowedSlippage));
|
|
539
655
|
const amountOut = toHex(trade.minimumAmountOut(options.allowedSlippage));
|
|
540
656
|
const path = trade.route.path.map((token) => token.address);
|
|
541
|
-
const deadline = "ttl" in options ? `0x${(Math.floor(new Date().getTime() / 1e3) + options.ttl).toString(16)}` : `0x${options.deadline.toString(16)}`;
|
|
657
|
+
const deadline = "ttl" in options ? `0x${(Math.floor(( new Date()).getTime() / 1e3) + options.ttl).toString(16)}` : `0x${options.deadline.toString(16)}`;
|
|
542
658
|
const useFeeOnTransfer = Boolean(options.feeOnTransfer);
|
|
543
659
|
let methodName;
|
|
544
660
|
let args;
|
|
545
661
|
let value;
|
|
546
662
|
switch (trade.tradeType) {
|
|
547
|
-
case
|
|
663
|
+
case swapSdkCore.TradeType.EXACT_INPUT:
|
|
548
664
|
if (etherIn) {
|
|
549
665
|
methodName = useFeeOnTransfer ? "swapExactETHForTokensSupportingFeeOnTransferTokens" : "swapExactETHForTokens";
|
|
550
666
|
args = [amountOut, path, to, deadline];
|
|
@@ -559,8 +675,8 @@ var Router = class {
|
|
|
559
675
|
value = ZERO_HEX;
|
|
560
676
|
}
|
|
561
677
|
break;
|
|
562
|
-
case
|
|
563
|
-
|
|
678
|
+
case swapSdkCore.TradeType.EXACT_OUTPUT:
|
|
679
|
+
invariant4__default.default(!useFeeOnTransfer, "EXACT_OUT_FOT");
|
|
564
680
|
if (etherIn) {
|
|
565
681
|
methodName = "swapETHForExactTokens";
|
|
566
682
|
args = [amountOut, path, to, deadline];
|
|
@@ -583,31 +699,58 @@ var Router = class {
|
|
|
583
699
|
};
|
|
584
700
|
}
|
|
585
701
|
};
|
|
702
|
+
var _Ether = class extends swapSdkCore.NativeCurrency {
|
|
703
|
+
constructor(chainId) {
|
|
704
|
+
super(chainId, 18, "ETH", "Ether");
|
|
705
|
+
}
|
|
706
|
+
get wrapped() {
|
|
707
|
+
const weth9 = WETH9[this.chainId];
|
|
708
|
+
invariant4__default.default(!!weth9, "WRAPPED");
|
|
709
|
+
return weth9;
|
|
710
|
+
}
|
|
711
|
+
static onChain(chainId) {
|
|
712
|
+
if (!this._etherCache[chainId]) {
|
|
713
|
+
this._etherCache[chainId] = new _Ether(chainId);
|
|
714
|
+
}
|
|
715
|
+
return this._etherCache[chainId];
|
|
716
|
+
}
|
|
717
|
+
equals(other) {
|
|
718
|
+
return other.isNative && other.chainId === this.chainId;
|
|
719
|
+
}
|
|
720
|
+
};
|
|
721
|
+
var Ether = _Ether;
|
|
722
|
+
Ether._etherCache = {};
|
|
586
723
|
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
724
|
+
Object.defineProperty(exports, 'JSBI', {
|
|
725
|
+
enumerable: true,
|
|
726
|
+
get: function () { return JSBI__default.default; }
|
|
727
|
+
});
|
|
728
|
+
exports.ChainId = ChainId;
|
|
729
|
+
exports.ERC20Token = ERC20Token;
|
|
730
|
+
exports.Ether = Ether;
|
|
731
|
+
exports.FACTORY_ADDRESS = FACTORY_ADDRESS;
|
|
732
|
+
exports.FACTORY_ADDRESS_MAP = FACTORY_ADDRESS_MAP;
|
|
733
|
+
exports.INIT_CODE_HASH = INIT_CODE_HASH;
|
|
734
|
+
exports.INIT_CODE_HASH_MAP = INIT_CODE_HASH_MAP;
|
|
735
|
+
exports.NATIVE = NATIVE;
|
|
736
|
+
exports.Native = Native;
|
|
737
|
+
exports.ONE_HUNDRED_PERCENT = ONE_HUNDRED_PERCENT;
|
|
738
|
+
exports.Pair = Pair;
|
|
739
|
+
exports.Route = Route;
|
|
740
|
+
exports.Router = Router;
|
|
741
|
+
exports.Trade = Trade;
|
|
742
|
+
exports.WBNB = WBNB;
|
|
743
|
+
exports.WETH9 = WETH9;
|
|
744
|
+
exports.WNATIVE = WNATIVE;
|
|
745
|
+
exports.ZERO_PERCENT = ZERO_PERCENT;
|
|
746
|
+
exports.computePairAddress = computePairAddress;
|
|
747
|
+
exports.inputOutputComparator = inputOutputComparator;
|
|
748
|
+
exports.isTradeBetter = isTradeBetter;
|
|
749
|
+
exports.tradeComparator = tradeComparator;
|
|
750
|
+
exports.validateAndParseAddress = validateAndParseAddress;
|
|
751
|
+
Object.keys(swapSdkCore).forEach(function (k) {
|
|
752
|
+
if (k !== 'default' && !exports.hasOwnProperty(k)) Object.defineProperty(exports, k, {
|
|
753
|
+
enumerable: true,
|
|
754
|
+
get: function () { return swapSdkCore[k]; }
|
|
755
|
+
});
|
|
613
756
|
});
|