@pancakeswap/sdk 4.0.0 → 5.1.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/abis/ERC20.d.ts +27 -0
- package/dist/abis/ERC20.d.ts.map +1 -0
- package/dist/abis/IPancakePair.d.ts +561 -0
- package/dist/abis/IPancakePair.d.ts.map +1 -0
- package/dist/constants.d.ts +111 -9
- package/dist/constants.d.ts.map +1 -1
- package/dist/entities/index.d.ts +1 -1
- package/dist/entities/index.d.ts.map +1 -1
- package/dist/entities/native.d.ts.map +1 -1
- package/dist/entities/pair.d.ts +4 -3
- package/dist/entities/pair.d.ts.map +1 -1
- package/dist/entities/token.d.ts +34 -3
- package/dist/entities/token.d.ts.map +1 -1
- package/dist/fetcher.d.ts +4 -3
- package/dist/fetcher.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +251 -63
- package/dist/index.mjs +247 -61
- package/dist/router.d.ts +3 -2
- package/dist/router.d.ts.map +1 -1
- package/dist/utils.d.ts +2 -1
- package/dist/utils.d.ts.map +1 -1
- package/package.json +2 -15
package/dist/index.js
CHANGED
|
@@ -1,27 +1,24 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var swapSdkCore = require('@pancakeswap/swap-sdk-core');
|
|
4
|
-
var
|
|
5
|
-
var
|
|
4
|
+
var invariant5 = require('tiny-invariant');
|
|
5
|
+
var viem = require('viem');
|
|
6
6
|
var warning = require('tiny-warning');
|
|
7
|
-
var
|
|
8
|
-
var contracts = require('@ethersproject/contracts');
|
|
9
|
-
var networks = require('@ethersproject/networks');
|
|
10
|
-
var providers = require('@ethersproject/providers');
|
|
7
|
+
var chains = require('viem/chains');
|
|
11
8
|
|
|
12
9
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
10
|
|
|
14
|
-
var
|
|
11
|
+
var invariant5__default = /*#__PURE__*/_interopDefault(invariant5);
|
|
15
12
|
var warning__default = /*#__PURE__*/_interopDefault(warning);
|
|
16
13
|
|
|
17
14
|
// src/constants.ts
|
|
18
|
-
function validateAndParseAddress(address
|
|
15
|
+
function validateAndParseAddress(address) {
|
|
19
16
|
try {
|
|
20
|
-
const checksummedAddress =
|
|
21
|
-
warning__default.default(address
|
|
17
|
+
const checksummedAddress = viem.getAddress(address);
|
|
18
|
+
warning__default.default(address === checksummedAddress, `${address} is not checksummed.`);
|
|
22
19
|
return checksummedAddress;
|
|
23
20
|
} catch (error) {
|
|
24
|
-
|
|
21
|
+
invariant5__default.default(false, `${address} is not a valid address.`);
|
|
25
22
|
}
|
|
26
23
|
}
|
|
27
24
|
|
|
@@ -31,6 +28,51 @@ var ERC20Token = class extends swapSdkCore.Token {
|
|
|
31
28
|
super(chainId, validateAndParseAddress(address), decimals, symbol, name, projectLink);
|
|
32
29
|
}
|
|
33
30
|
};
|
|
31
|
+
var OnRampCurrency = class extends swapSdkCore.BaseCurrency {
|
|
32
|
+
constructor(chainId, address, decimals, symbol, name, projectLink) {
|
|
33
|
+
super(chainId, decimals, symbol, name);
|
|
34
|
+
this.address = address;
|
|
35
|
+
this.projectLink = projectLink;
|
|
36
|
+
this.isNative = address === "0x" && true;
|
|
37
|
+
this.isToken = address !== "0x" && true;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Returns true if the two tokens are equivalent, i.e. have the same chainId and address.
|
|
41
|
+
* @param other other token to compare
|
|
42
|
+
*/
|
|
43
|
+
equals(other) {
|
|
44
|
+
return other.isToken && this.chainId === other.chainId && this.address === other.address;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Returns true if the address of this token sorts before the address of the other token
|
|
48
|
+
* @param other other token to compare
|
|
49
|
+
* @throws if the tokens have the same address
|
|
50
|
+
* @throws if the tokens are on different chains
|
|
51
|
+
*/
|
|
52
|
+
sortsBefore(other) {
|
|
53
|
+
if (!other.isToken)
|
|
54
|
+
return false;
|
|
55
|
+
invariant5__default.default(this.chainId === other.chainId, "CHAIN_IDS");
|
|
56
|
+
invariant5__default.default(this.address !== other.address, "ADDRESSES");
|
|
57
|
+
return this.address.toLowerCase() < other.address.toLowerCase();
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Return this token, which does not need to be wrapped
|
|
61
|
+
*/
|
|
62
|
+
get wrapped() {
|
|
63
|
+
return this;
|
|
64
|
+
}
|
|
65
|
+
get serialize() {
|
|
66
|
+
return {
|
|
67
|
+
address: this.address,
|
|
68
|
+
chainId: this.chainId,
|
|
69
|
+
decimals: this.decimals,
|
|
70
|
+
symbol: this.symbol,
|
|
71
|
+
name: this.name,
|
|
72
|
+
projectLink: this.projectLink
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
};
|
|
34
76
|
|
|
35
77
|
// src/constants.ts
|
|
36
78
|
var ChainId = /* @__PURE__ */ ((ChainId3) => {
|
|
@@ -38,6 +80,13 @@ var ChainId = /* @__PURE__ */ ((ChainId3) => {
|
|
|
38
80
|
ChainId3[ChainId3["GOERLI"] = 5] = "GOERLI";
|
|
39
81
|
ChainId3[ChainId3["BSC"] = 56] = "BSC";
|
|
40
82
|
ChainId3[ChainId3["BSC_TESTNET"] = 97] = "BSC_TESTNET";
|
|
83
|
+
ChainId3[ChainId3["ZKSYNC_TESTNET"] = 280] = "ZKSYNC_TESTNET";
|
|
84
|
+
ChainId3[ChainId3["ZKSYNC"] = 324] = "ZKSYNC";
|
|
85
|
+
ChainId3[ChainId3["POLYGON_ZKEVM"] = 1101] = "POLYGON_ZKEVM";
|
|
86
|
+
ChainId3[ChainId3["POLYGON_ZKEVM_TESTNET"] = 1442] = "POLYGON_ZKEVM_TESTNET";
|
|
87
|
+
ChainId3[ChainId3["ARBITRUM_ONE"] = 42161] = "ARBITRUM_ONE";
|
|
88
|
+
ChainId3[ChainId3["ARBITRUM_GOERLI"] = 421613] = "ARBITRUM_GOERLI";
|
|
89
|
+
ChainId3[ChainId3["LINEA_TESTNET"] = 59140] = "LINEA_TESTNET";
|
|
41
90
|
return ChainId3;
|
|
42
91
|
})(ChainId || {});
|
|
43
92
|
var ZERO_PERCENT = new swapSdkCore.Percent("0");
|
|
@@ -48,7 +97,14 @@ var FACTORY_ADDRESS_MAP = {
|
|
|
48
97
|
[1 /* ETHEREUM */]: FACTORY_ADDRESS_ETH,
|
|
49
98
|
[5 /* GOERLI */]: FACTORY_ADDRESS_ETH,
|
|
50
99
|
[56 /* BSC */]: FACTORY_ADDRESS,
|
|
51
|
-
[97 /* BSC_TESTNET */]: "0x6725f303b657a9451d8ba641348b6761a6cc7a17"
|
|
100
|
+
[97 /* BSC_TESTNET */]: "0x6725f303b657a9451d8ba641348b6761a6cc7a17",
|
|
101
|
+
[42161 /* ARBITRUM_ONE */]: "0x02a84c1b3BBD7401a5f7fa98a384EBC70bB5749E",
|
|
102
|
+
[421613 /* ARBITRUM_GOERLI */]: "0x333EAE459075b1d7dE8eb57997b5d4eee5F1070a",
|
|
103
|
+
[1101 /* POLYGON_ZKEVM */]: "0x02a84c1b3BBD7401a5f7fa98a384EBC70bB5749E",
|
|
104
|
+
[1442 /* POLYGON_ZKEVM_TESTNET */]: "0xBA40c83026213F9cbc79998752721a0312bdB74a",
|
|
105
|
+
[324 /* ZKSYNC */]: "0x0F70cE1e2c0FB5FC3B67E13ed4F422fE82d832bD",
|
|
106
|
+
[280 /* ZKSYNC_TESTNET */]: "0x48a33610Cd0E130af2024D55F67aE72a8C51aC27",
|
|
107
|
+
[59140 /* LINEA_TESTNET */]: "0xB6FAfd4ADbCd21cF665909767e0eD0D05709abfB"
|
|
52
108
|
};
|
|
53
109
|
var INIT_CODE_HASH = "0x00fb7f630766e6a796048ea87d01acd3068e8ff67d078148a3fa3f4a84f69bd5";
|
|
54
110
|
var INIT_CODE_HASH_ETH = "0x57224589c67f3f30a6b0d7a1b54cf3153ab84563bc609ef41dfb34f8b2974d2d";
|
|
@@ -56,7 +112,15 @@ var INIT_CODE_HASH_MAP = {
|
|
|
56
112
|
[1 /* ETHEREUM */]: INIT_CODE_HASH_ETH,
|
|
57
113
|
[5 /* GOERLI */]: INIT_CODE_HASH_ETH,
|
|
58
114
|
[56 /* BSC */]: INIT_CODE_HASH,
|
|
59
|
-
[97 /* BSC_TESTNET */]: "0xd0d4c4cd0848c93cb4fd1f498d7013ee6bfb25783ea21593d5834f5d250ece66"
|
|
115
|
+
[97 /* BSC_TESTNET */]: "0xd0d4c4cd0848c93cb4fd1f498d7013ee6bfb25783ea21593d5834f5d250ece66",
|
|
116
|
+
[42161 /* ARBITRUM_ONE */]: INIT_CODE_HASH_ETH,
|
|
117
|
+
[421613 /* ARBITRUM_GOERLI */]: INIT_CODE_HASH_ETH,
|
|
118
|
+
[1101 /* POLYGON_ZKEVM */]: INIT_CODE_HASH_ETH,
|
|
119
|
+
[1442 /* POLYGON_ZKEVM_TESTNET */]: INIT_CODE_HASH_ETH,
|
|
120
|
+
// TODO: new chains
|
|
121
|
+
[324 /* ZKSYNC */]: "0x1cb011040b91cd937ddff2327f17c9690653b05b6506e830baadf2493468d657",
|
|
122
|
+
[280 /* ZKSYNC_TESTNET */]: "0x0100045707a42494392b3558029b9869f865ff9df8f375dc1bf20b0555093f43",
|
|
123
|
+
[59140 /* LINEA_TESTNET */]: INIT_CODE_HASH_ETH
|
|
60
124
|
};
|
|
61
125
|
var WETH9 = {
|
|
62
126
|
[1 /* ETHEREUM */]: new ERC20Token(
|
|
@@ -90,6 +154,62 @@ var WETH9 = {
|
|
|
90
154
|
"ETH",
|
|
91
155
|
"ETH",
|
|
92
156
|
"https://ethereum.org"
|
|
157
|
+
),
|
|
158
|
+
[42161 /* ARBITRUM_ONE */]: new ERC20Token(
|
|
159
|
+
42161 /* ARBITRUM_ONE */,
|
|
160
|
+
"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",
|
|
161
|
+
18,
|
|
162
|
+
"WETH",
|
|
163
|
+
"Wrapped Ether",
|
|
164
|
+
"https://weth.io"
|
|
165
|
+
),
|
|
166
|
+
[421613 /* ARBITRUM_GOERLI */]: new ERC20Token(
|
|
167
|
+
421613 /* ARBITRUM_GOERLI */,
|
|
168
|
+
"0xEe01c0CD76354C383B8c7B4e65EA88D00B06f36f",
|
|
169
|
+
18,
|
|
170
|
+
"WETH",
|
|
171
|
+
"Wrapped Ether",
|
|
172
|
+
"https://weth.io"
|
|
173
|
+
),
|
|
174
|
+
[324 /* ZKSYNC */]: new ERC20Token(
|
|
175
|
+
324 /* ZKSYNC */,
|
|
176
|
+
"0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91",
|
|
177
|
+
18,
|
|
178
|
+
"WETH",
|
|
179
|
+
"Wrapped Ether",
|
|
180
|
+
"https://weth.io"
|
|
181
|
+
),
|
|
182
|
+
[280 /* ZKSYNC_TESTNET */]: new ERC20Token(
|
|
183
|
+
280 /* ZKSYNC_TESTNET */,
|
|
184
|
+
"0x02968DB286f24cB18bB5b24903eC8eBFAcf591C0",
|
|
185
|
+
18,
|
|
186
|
+
"WETH",
|
|
187
|
+
"Wrapped Ether",
|
|
188
|
+
"https://weth.io"
|
|
189
|
+
),
|
|
190
|
+
[1101 /* POLYGON_ZKEVM */]: new ERC20Token(
|
|
191
|
+
1101 /* POLYGON_ZKEVM */,
|
|
192
|
+
"0x4F9A0e7FD2Bf6067db6994CF12E4495Df938E6e9",
|
|
193
|
+
18,
|
|
194
|
+
"WETH",
|
|
195
|
+
"Wrapped Ether",
|
|
196
|
+
"https://weth.io"
|
|
197
|
+
),
|
|
198
|
+
[1442 /* POLYGON_ZKEVM_TESTNET */]: new ERC20Token(
|
|
199
|
+
1442 /* POLYGON_ZKEVM_TESTNET */,
|
|
200
|
+
"0x30ec47F7DFae72eA79646e6cf64a8A7db538915b",
|
|
201
|
+
18,
|
|
202
|
+
"WETH",
|
|
203
|
+
"Wrapped Ether",
|
|
204
|
+
"https://weth.io"
|
|
205
|
+
),
|
|
206
|
+
[59140 /* LINEA_TESTNET */]: new ERC20Token(
|
|
207
|
+
59140 /* LINEA_TESTNET */,
|
|
208
|
+
"0x2C1b868d6596a18e32E61B901E4060C872647b6C",
|
|
209
|
+
18,
|
|
210
|
+
"WETH",
|
|
211
|
+
"Wrapped Ether",
|
|
212
|
+
"https://weth.io"
|
|
93
213
|
)
|
|
94
214
|
};
|
|
95
215
|
var WBNB = {
|
|
@@ -122,10 +242,18 @@ var WNATIVE = {
|
|
|
122
242
|
[1 /* ETHEREUM */]: WETH9[1 /* ETHEREUM */],
|
|
123
243
|
[5 /* GOERLI */]: WETH9[5 /* GOERLI */],
|
|
124
244
|
[56 /* BSC */]: WBNB[56 /* BSC */],
|
|
125
|
-
[97 /* BSC_TESTNET */]: WBNB[97 /* BSC_TESTNET */]
|
|
245
|
+
[97 /* BSC_TESTNET */]: WBNB[97 /* BSC_TESTNET */],
|
|
246
|
+
[42161 /* ARBITRUM_ONE */]: WETH9[42161 /* ARBITRUM_ONE */],
|
|
247
|
+
[421613 /* ARBITRUM_GOERLI */]: WETH9[421613 /* ARBITRUM_GOERLI */],
|
|
248
|
+
[1101 /* POLYGON_ZKEVM */]: WETH9[1101 /* POLYGON_ZKEVM */],
|
|
249
|
+
[1442 /* POLYGON_ZKEVM_TESTNET */]: WETH9[1442 /* POLYGON_ZKEVM_TESTNET */],
|
|
250
|
+
[324 /* ZKSYNC */]: WETH9[324 /* ZKSYNC */],
|
|
251
|
+
[280 /* ZKSYNC_TESTNET */]: WETH9[280 /* ZKSYNC_TESTNET */],
|
|
252
|
+
[59140 /* LINEA_TESTNET */]: WETH9[59140 /* LINEA_TESTNET */]
|
|
126
253
|
};
|
|
254
|
+
var ETHER = { name: "Ether", symbol: "ETH", decimals: 18 };
|
|
127
255
|
var NATIVE = {
|
|
128
|
-
[1 /* ETHEREUM */]:
|
|
256
|
+
[1 /* ETHEREUM */]: ETHER,
|
|
129
257
|
[5 /* GOERLI */]: { name: "Goerli Ether", symbol: "GOR", decimals: 18 },
|
|
130
258
|
[56 /* BSC */]: {
|
|
131
259
|
name: "Binance Chain Native Token",
|
|
@@ -136,7 +264,18 @@ var NATIVE = {
|
|
|
136
264
|
name: "Binance Chain Native Token",
|
|
137
265
|
symbol: "tBNB",
|
|
138
266
|
decimals: 18
|
|
139
|
-
}
|
|
267
|
+
},
|
|
268
|
+
[42161 /* ARBITRUM_ONE */]: ETHER,
|
|
269
|
+
[421613 /* ARBITRUM_GOERLI */]: {
|
|
270
|
+
name: "Arbitrum Goerli Ether",
|
|
271
|
+
symbol: "AGOR",
|
|
272
|
+
decimals: 18
|
|
273
|
+
},
|
|
274
|
+
[1101 /* POLYGON_ZKEVM */]: ETHER,
|
|
275
|
+
[1442 /* POLYGON_ZKEVM_TESTNET */]: ETHER,
|
|
276
|
+
[324 /* ZKSYNC */]: ETHER,
|
|
277
|
+
[280 /* ZKSYNC_TESTNET */]: ETHER,
|
|
278
|
+
[59140 /* LINEA_TESTNET */]: ETHER
|
|
140
279
|
};
|
|
141
280
|
|
|
142
281
|
// src/trade.ts
|
|
@@ -157,6 +296,20 @@ function isTradeBetter(tradeA, tradeB, minimumDelta = ZERO_PERCENT) {
|
|
|
157
296
|
}
|
|
158
297
|
var PAIR_ADDRESS_CACHE = {};
|
|
159
298
|
var composeKey = (token0, token1) => `${token0.chainId}-${token0.address}-${token1.address}`;
|
|
299
|
+
function getCreate2Address(from_, salt_, initCodeHash) {
|
|
300
|
+
const from = viem.toBytes(viem.getAddress(from_));
|
|
301
|
+
const salt = viem.pad(viem.isBytes(salt_) ? salt_ : viem.toBytes(salt_), {
|
|
302
|
+
size: 32
|
|
303
|
+
});
|
|
304
|
+
return viem.getAddress(viem.slice(viem.keccak256(viem.concat([viem.toBytes("0xff"), from, salt, viem.toBytes(initCodeHash)])), 12));
|
|
305
|
+
}
|
|
306
|
+
var EMPTY_INPU_HASH = "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470";
|
|
307
|
+
var ZKSYNC_PREFIX = "0x2020dba91b30cc0006188af794c2fb30dd8520db7e2c088b7fc7c103c00ca494";
|
|
308
|
+
function getCreate2AddressZkSync(from, salt, initCodeHash) {
|
|
309
|
+
return viem.getAddress(
|
|
310
|
+
`0x${viem.keccak256(viem.concat([ZKSYNC_PREFIX, viem.pad(from, { size: 32 }), salt, initCodeHash, EMPTY_INPU_HASH])).slice(26)}`
|
|
311
|
+
);
|
|
312
|
+
}
|
|
160
313
|
var computePairAddress = ({
|
|
161
314
|
factoryAddress,
|
|
162
315
|
tokenA,
|
|
@@ -165,11 +318,12 @@ var computePairAddress = ({
|
|
|
165
318
|
const [token0, token1] = tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA];
|
|
166
319
|
const key = composeKey(token0, token1);
|
|
167
320
|
if (PAIR_ADDRESS_CACHE?.[key] === void 0) {
|
|
321
|
+
const getCreate2Address_ = token0.chainId === 280 /* ZKSYNC_TESTNET */ || token1.chainId === 324 /* ZKSYNC */ ? getCreate2AddressZkSync : getCreate2Address;
|
|
168
322
|
PAIR_ADDRESS_CACHE = {
|
|
169
323
|
...PAIR_ADDRESS_CACHE,
|
|
170
|
-
[key]:
|
|
324
|
+
[key]: getCreate2Address_(
|
|
171
325
|
factoryAddress,
|
|
172
|
-
|
|
326
|
+
viem.keccak256(viem.encodePacked(["address", "address"], [token0.address, token1.address])),
|
|
173
327
|
INIT_CODE_HASH_MAP[token0.chainId]
|
|
174
328
|
)
|
|
175
329
|
};
|
|
@@ -178,7 +332,11 @@ var computePairAddress = ({
|
|
|
178
332
|
};
|
|
179
333
|
var Pair = class {
|
|
180
334
|
static getAddress(tokenA, tokenB) {
|
|
181
|
-
return computePairAddress({
|
|
335
|
+
return computePairAddress({
|
|
336
|
+
factoryAddress: FACTORY_ADDRESS_MAP[tokenA.chainId],
|
|
337
|
+
tokenA,
|
|
338
|
+
tokenB
|
|
339
|
+
});
|
|
182
340
|
}
|
|
183
341
|
constructor(currencyAmountA, tokenAmountB) {
|
|
184
342
|
const tokenAmounts = currencyAmountA.currency.sortsBefore(tokenAmountB.currency) ? [currencyAmountA, tokenAmountB] : [tokenAmountB, currencyAmountA];
|
|
@@ -217,7 +375,7 @@ var Pair = class {
|
|
|
217
375
|
* @param token token to return price of
|
|
218
376
|
*/
|
|
219
377
|
priceOf(token) {
|
|
220
|
-
|
|
378
|
+
invariant5__default.default(this.involvesToken(token), "TOKEN");
|
|
221
379
|
return token.equals(this.token0) ? this.token0Price : this.token1Price;
|
|
222
380
|
}
|
|
223
381
|
/**
|
|
@@ -239,11 +397,11 @@ var Pair = class {
|
|
|
239
397
|
return this.tokenAmounts[1];
|
|
240
398
|
}
|
|
241
399
|
reserveOf(token) {
|
|
242
|
-
|
|
400
|
+
invariant5__default.default(this.involvesToken(token), "TOKEN");
|
|
243
401
|
return token.equals(this.token0) ? this.reserve0 : this.reserve1;
|
|
244
402
|
}
|
|
245
403
|
getOutputAmount(inputAmount) {
|
|
246
|
-
|
|
404
|
+
invariant5__default.default(this.involvesToken(inputAmount.currency), "TOKEN");
|
|
247
405
|
if (this.reserve0.quotient === swapSdkCore.ZERO || this.reserve1.quotient === swapSdkCore.ZERO) {
|
|
248
406
|
throw new swapSdkCore.InsufficientReservesError();
|
|
249
407
|
}
|
|
@@ -262,7 +420,7 @@ var Pair = class {
|
|
|
262
420
|
return [outputAmount, new Pair(inputReserve.add(inputAmount), outputReserve.subtract(outputAmount))];
|
|
263
421
|
}
|
|
264
422
|
getInputAmount(outputAmount) {
|
|
265
|
-
|
|
423
|
+
invariant5__default.default(this.involvesToken(outputAmount.currency), "TOKEN");
|
|
266
424
|
if (this.reserve0.quotient === swapSdkCore.ZERO || this.reserve1.quotient === swapSdkCore.ZERO || outputAmount.quotient >= this.reserveOf(outputAmount.currency).quotient) {
|
|
267
425
|
throw new swapSdkCore.InsufficientReservesError();
|
|
268
426
|
}
|
|
@@ -277,9 +435,9 @@ var Pair = class {
|
|
|
277
435
|
return [inputAmount, new Pair(inputReserve.add(inputAmount), outputReserve.subtract(outputAmount))];
|
|
278
436
|
}
|
|
279
437
|
getLiquidityMinted(totalSupply, tokenAmountA, tokenAmountB) {
|
|
280
|
-
|
|
438
|
+
invariant5__default.default(totalSupply.currency.equals(this.liquidityToken), "LIQUIDITY");
|
|
281
439
|
const tokenAmounts = tokenAmountA.currency.sortsBefore(tokenAmountB.currency) ? [tokenAmountA, tokenAmountB] : [tokenAmountB, tokenAmountA];
|
|
282
|
-
|
|
440
|
+
invariant5__default.default(tokenAmounts[0].currency.equals(this.token0) && tokenAmounts[1].currency.equals(this.token1), "TOKEN");
|
|
283
441
|
let liquidity;
|
|
284
442
|
if (totalSupply.quotient === swapSdkCore.ZERO) {
|
|
285
443
|
liquidity = swapSdkCore.sqrt(tokenAmounts[0].quotient * tokenAmounts[1].quotient) - swapSdkCore.MINIMUM_LIQUIDITY;
|
|
@@ -294,15 +452,15 @@ var Pair = class {
|
|
|
294
452
|
return swapSdkCore.CurrencyAmount.fromRawAmount(this.liquidityToken, liquidity);
|
|
295
453
|
}
|
|
296
454
|
getLiquidityValue(token, totalSupply, liquidity, feeOn = false, kLast) {
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
455
|
+
invariant5__default.default(this.involvesToken(token), "TOKEN");
|
|
456
|
+
invariant5__default.default(totalSupply.currency.equals(this.liquidityToken), "TOTAL_SUPPLY");
|
|
457
|
+
invariant5__default.default(liquidity.currency.equals(this.liquidityToken), "LIQUIDITY");
|
|
458
|
+
invariant5__default.default(liquidity.quotient <= totalSupply.quotient, "LIQUIDITY");
|
|
301
459
|
let totalSupplyAdjusted;
|
|
302
460
|
if (!feeOn) {
|
|
303
461
|
totalSupplyAdjusted = totalSupply;
|
|
304
462
|
} else {
|
|
305
|
-
|
|
463
|
+
invariant5__default.default(!!kLast, "K_LAST");
|
|
306
464
|
const kLastParsed = BigInt(kLast);
|
|
307
465
|
if (!(kLastParsed === swapSdkCore.ZERO)) {
|
|
308
466
|
const rootK = swapSdkCore.sqrt(this.reserve0.quotient * this.reserve1.quotient);
|
|
@@ -328,19 +486,19 @@ var Pair = class {
|
|
|
328
486
|
var Route = class {
|
|
329
487
|
constructor(pairs, input, output) {
|
|
330
488
|
this._midPrice = null;
|
|
331
|
-
|
|
489
|
+
invariant5__default.default(pairs.length > 0, "PAIRS");
|
|
332
490
|
const { chainId } = pairs[0];
|
|
333
|
-
|
|
491
|
+
invariant5__default.default(
|
|
334
492
|
pairs.every((pair) => pair.chainId === chainId),
|
|
335
493
|
"CHAIN_IDS"
|
|
336
494
|
);
|
|
337
495
|
const wrappedInput = input.wrapped;
|
|
338
|
-
|
|
339
|
-
|
|
496
|
+
invariant5__default.default(pairs[0].involvesToken(wrappedInput), "INPUT");
|
|
497
|
+
invariant5__default.default(typeof output === "undefined" || pairs[pairs.length - 1].involvesToken(output.wrapped), "OUTPUT");
|
|
340
498
|
const path = [wrappedInput];
|
|
341
499
|
for (const [i, pair] of pairs.entries()) {
|
|
342
500
|
const currentInput = path[i];
|
|
343
|
-
|
|
501
|
+
invariant5__default.default(currentInput.equals(pair.token0) || currentInput.equals(pair.token1), "PATH");
|
|
344
502
|
const output2 = currentInput.equals(pair.token0) ? pair.token1 : pair.token0;
|
|
345
503
|
path.push(output2);
|
|
346
504
|
}
|
|
@@ -366,8 +524,8 @@ var Route = class {
|
|
|
366
524
|
}
|
|
367
525
|
};
|
|
368
526
|
function inputOutputComparator(a, b) {
|
|
369
|
-
|
|
370
|
-
|
|
527
|
+
invariant5__default.default(a.inputAmount.currency.equals(b.inputAmount.currency), "INPUT_CURRENCY");
|
|
528
|
+
invariant5__default.default(a.outputAmount.currency.equals(b.outputAmount.currency), "OUTPUT_CURRENCY");
|
|
371
529
|
if (a.outputAmount.equalTo(b.outputAmount)) {
|
|
372
530
|
if (a.inputAmount.equalTo(b.inputAmount)) {
|
|
373
531
|
return 0;
|
|
@@ -417,7 +575,7 @@ var Trade = class {
|
|
|
417
575
|
this.tradeType = tradeType;
|
|
418
576
|
const tokenAmounts = new Array(route.path.length);
|
|
419
577
|
if (tradeType === swapSdkCore.TradeType.EXACT_INPUT) {
|
|
420
|
-
|
|
578
|
+
invariant5__default.default(amount.currency.equals(route.input), "INPUT");
|
|
421
579
|
tokenAmounts[0] = amount.wrapped;
|
|
422
580
|
for (let i = 0; i < route.path.length - 1; i++) {
|
|
423
581
|
const pair = route.pairs[i];
|
|
@@ -431,7 +589,7 @@ var Trade = class {
|
|
|
431
589
|
tokenAmounts[tokenAmounts.length - 1].denominator
|
|
432
590
|
);
|
|
433
591
|
} else {
|
|
434
|
-
|
|
592
|
+
invariant5__default.default(amount.currency.equals(route.output), "OUTPUT");
|
|
435
593
|
tokenAmounts[tokenAmounts.length - 1] = amount.wrapped;
|
|
436
594
|
for (let i = route.path.length - 1; i > 0; i--) {
|
|
437
595
|
const pair = route.pairs[i - 1];
|
|
@@ -458,7 +616,7 @@ var Trade = class {
|
|
|
458
616
|
* @param slippageTolerance tolerance of unfavorable slippage from the execution price of this trade
|
|
459
617
|
*/
|
|
460
618
|
minimumAmountOut(slippageTolerance) {
|
|
461
|
-
|
|
619
|
+
invariant5__default.default(!slippageTolerance.lessThan(swapSdkCore.ZERO), "SLIPPAGE_TOLERANCE");
|
|
462
620
|
if (this.tradeType === swapSdkCore.TradeType.EXACT_OUTPUT) {
|
|
463
621
|
return this.outputAmount;
|
|
464
622
|
}
|
|
@@ -470,7 +628,7 @@ var Trade = class {
|
|
|
470
628
|
* @param slippageTolerance tolerance of unfavorable slippage from the execution price of this trade
|
|
471
629
|
*/
|
|
472
630
|
maximumAmountIn(slippageTolerance) {
|
|
473
|
-
|
|
631
|
+
invariant5__default.default(!slippageTolerance.lessThan(swapSdkCore.ZERO), "SLIPPAGE_TOLERANCE");
|
|
474
632
|
if (this.tradeType === swapSdkCore.TradeType.EXACT_INPUT) {
|
|
475
633
|
return this.inputAmount;
|
|
476
634
|
}
|
|
@@ -492,9 +650,9 @@ var Trade = class {
|
|
|
492
650
|
* @param bestTrades used in recursion; the current list of best trades
|
|
493
651
|
*/
|
|
494
652
|
static bestTradeExactIn(pairs, currencyAmountIn, currencyOut, { maxNumResults = 3, maxHops = 3 } = {}, currentPairs = [], nextAmountIn = currencyAmountIn, bestTrades = []) {
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
653
|
+
invariant5__default.default(pairs.length > 0, "PAIRS");
|
|
654
|
+
invariant5__default.default(maxHops > 0, "MAX_HOPS");
|
|
655
|
+
invariant5__default.default(currencyAmountIn === nextAmountIn || currentPairs.length > 0, "INVALID_RECURSION");
|
|
498
656
|
const amountIn = nextAmountIn.wrapped;
|
|
499
657
|
const tokenOut = currencyOut.wrapped;
|
|
500
658
|
for (let i = 0; i < pairs.length; i++) {
|
|
@@ -570,9 +728,9 @@ var Trade = class {
|
|
|
570
728
|
* @param bestTrades used in recursion; the current list of best trades
|
|
571
729
|
*/
|
|
572
730
|
static bestTradeExactOut(pairs, currencyIn, currencyAmountOut, { maxNumResults = 3, maxHops = 3 } = {}, currentPairs = [], nextAmountOut = currencyAmountOut, bestTrades = []) {
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
731
|
+
invariant5__default.default(pairs.length > 0, "PAIRS");
|
|
732
|
+
invariant5__default.default(maxHops > 0, "MAX_HOPS");
|
|
733
|
+
invariant5__default.default(currencyAmountOut === nextAmountOut || currentPairs.length > 0, "INVALID_RECURSION");
|
|
576
734
|
const amountOut = nextAmountOut.wrapped;
|
|
577
735
|
const tokenIn = currencyIn.wrapped;
|
|
578
736
|
for (let i = 0; i < pairs.length; i++) {
|
|
@@ -632,14 +790,14 @@ var _Native = class extends swapSdkCore.NativeCurrency {
|
|
|
632
790
|
}
|
|
633
791
|
get wrapped() {
|
|
634
792
|
const wnative = WNATIVE[this.chainId];
|
|
635
|
-
|
|
793
|
+
invariant5__default.default(!!wnative, "WRAPPED");
|
|
636
794
|
return wnative;
|
|
637
795
|
}
|
|
638
796
|
static onChain(chainId) {
|
|
639
797
|
if (chainId in this.cache) {
|
|
640
798
|
return this.cache[chainId];
|
|
641
799
|
}
|
|
642
|
-
|
|
800
|
+
invariant5__default.default(!!NATIVE[chainId], "NATIVE_CURRENCY");
|
|
643
801
|
const { decimals, name, symbol } = NATIVE[chainId];
|
|
644
802
|
return this.cache[chainId] = new _Native({ chainId, decimals, symbol, name });
|
|
645
803
|
}
|
|
@@ -662,8 +820,8 @@ var Router = class {
|
|
|
662
820
|
static swapCallParameters(trade, options) {
|
|
663
821
|
const etherIn = trade.inputAmount.currency.isNative;
|
|
664
822
|
const etherOut = trade.outputAmount.currency.isNative;
|
|
665
|
-
|
|
666
|
-
|
|
823
|
+
invariant5__default.default(!(etherIn && etherOut), "ETHER_IN_OUT");
|
|
824
|
+
invariant5__default.default(!("ttl" in options) || options.ttl > 0, "TTL");
|
|
667
825
|
const to = validateAndParseAddress(options.recipient);
|
|
668
826
|
const amountIn = toHex(trade.maximumAmountIn(options.allowedSlippage));
|
|
669
827
|
const amountOut = toHex(trade.minimumAmountOut(options.allowedSlippage));
|
|
@@ -690,7 +848,7 @@ var Router = class {
|
|
|
690
848
|
}
|
|
691
849
|
break;
|
|
692
850
|
case swapSdkCore.TradeType.EXACT_OUTPUT:
|
|
693
|
-
|
|
851
|
+
invariant5__default.default(!useFeeOnTransfer, "EXACT_OUT_FOT");
|
|
694
852
|
if (etherIn) {
|
|
695
853
|
methodName = "swapETHForExactTokens";
|
|
696
854
|
args = [amountOut, path, to, deadline];
|
|
@@ -719,7 +877,7 @@ var _Ether = class extends swapSdkCore.NativeCurrency {
|
|
|
719
877
|
}
|
|
720
878
|
get wrapped() {
|
|
721
879
|
const weth9 = WETH9[this.chainId];
|
|
722
|
-
|
|
880
|
+
invariant5__default.default(!!weth9, "WRAPPED");
|
|
723
881
|
return weth9;
|
|
724
882
|
}
|
|
725
883
|
static onChain(chainId) {
|
|
@@ -735,8 +893,8 @@ var _Ether = class extends swapSdkCore.NativeCurrency {
|
|
|
735
893
|
var Ether = _Ether;
|
|
736
894
|
Ether._etherCache = {};
|
|
737
895
|
|
|
738
|
-
// src/abis/ERC20.
|
|
739
|
-
var
|
|
896
|
+
// src/abis/ERC20.ts
|
|
897
|
+
var erc20ABI = [
|
|
740
898
|
{
|
|
741
899
|
constant: true,
|
|
742
900
|
inputs: [],
|
|
@@ -757,8 +915,8 @@ var ERC20_default = [
|
|
|
757
915
|
}
|
|
758
916
|
];
|
|
759
917
|
|
|
760
|
-
// src/abis/IPancakePair.
|
|
761
|
-
var
|
|
918
|
+
// src/abis/IPancakePair.ts
|
|
919
|
+
var pancakePairV2ABI = [
|
|
762
920
|
{
|
|
763
921
|
anonymous: false,
|
|
764
922
|
inputs: [
|
|
@@ -1470,6 +1628,24 @@ var IPancakePair_default = [
|
|
|
1470
1628
|
var TOKEN_DECIMALS_CACHE = {
|
|
1471
1629
|
[56 /* BSC */]: {}
|
|
1472
1630
|
};
|
|
1631
|
+
var ethClient = viem.createPublicClient({ chain: chains.mainnet, transport: viem.http() });
|
|
1632
|
+
var bscClient = viem.createPublicClient({ chain: chains.bsc, transport: viem.http() });
|
|
1633
|
+
var bscTestnetClient = viem.createPublicClient({ chain: chains.bscTestnet, transport: viem.http() });
|
|
1634
|
+
var goerliClient = viem.createPublicClient({ chain: chains.goerli, transport: viem.http() });
|
|
1635
|
+
var getDefaultClient = (chainId) => {
|
|
1636
|
+
switch (chainId) {
|
|
1637
|
+
case 1 /* ETHEREUM */:
|
|
1638
|
+
return ethClient;
|
|
1639
|
+
case 56 /* BSC */:
|
|
1640
|
+
return bscClient;
|
|
1641
|
+
case 97 /* BSC_TESTNET */:
|
|
1642
|
+
return bscTestnetClient;
|
|
1643
|
+
case 5 /* GOERLI */:
|
|
1644
|
+
return goerliClient;
|
|
1645
|
+
default:
|
|
1646
|
+
return bscClient;
|
|
1647
|
+
}
|
|
1648
|
+
};
|
|
1473
1649
|
var Fetcher = class {
|
|
1474
1650
|
/**
|
|
1475
1651
|
* Cannot be constructed.
|
|
@@ -1478,15 +1654,20 @@ var Fetcher = class {
|
|
|
1478
1654
|
constructor() {
|
|
1479
1655
|
}
|
|
1480
1656
|
/**
|
|
1481
|
-
* Fetch information for a given token on the given chain, using the given
|
|
1657
|
+
* Fetch information for a given token on the given chain, using the given viem provider.
|
|
1482
1658
|
* @param chainId chain of the token
|
|
1483
1659
|
* @param address address of the token on the chain
|
|
1484
1660
|
* @param provider provider used to fetch the token
|
|
1485
1661
|
* @param symbol symbol of the token
|
|
1486
1662
|
* @param name optional name of the token
|
|
1487
1663
|
*/
|
|
1488
|
-
static async fetchTokenData(chainId, address,
|
|
1489
|
-
const
|
|
1664
|
+
static async fetchTokenData(chainId, address, publicClient = getDefaultClient(chainId), symbol, name) {
|
|
1665
|
+
const erc20 = viem.getContract({
|
|
1666
|
+
abi: erc20ABI,
|
|
1667
|
+
address,
|
|
1668
|
+
publicClient
|
|
1669
|
+
});
|
|
1670
|
+
const parsedDecimals = typeof TOKEN_DECIMALS_CACHE?.[chainId]?.[address] === "number" ? TOKEN_DECIMALS_CACHE[chainId][address] : await erc20.read.decimals().then((decimals) => {
|
|
1490
1671
|
TOKEN_DECIMALS_CACHE = {
|
|
1491
1672
|
...TOKEN_DECIMALS_CACHE,
|
|
1492
1673
|
[chainId]: {
|
|
@@ -1504,10 +1685,15 @@ var Fetcher = class {
|
|
|
1504
1685
|
* @param tokenB second token
|
|
1505
1686
|
* @param provider the provider to use to fetch the data
|
|
1506
1687
|
*/
|
|
1507
|
-
static async fetchPairData(tokenA, tokenB,
|
|
1508
|
-
|
|
1688
|
+
static async fetchPairData(tokenA, tokenB, publicClient = getDefaultClient(tokenA.chainId)) {
|
|
1689
|
+
invariant5__default.default(tokenA.chainId === tokenB.chainId, "CHAIN_ID");
|
|
1509
1690
|
const address = Pair.getAddress(tokenA, tokenB);
|
|
1510
|
-
const
|
|
1691
|
+
const pairContract = viem.getContract({
|
|
1692
|
+
abi: pancakePairV2ABI,
|
|
1693
|
+
address,
|
|
1694
|
+
publicClient
|
|
1695
|
+
});
|
|
1696
|
+
const [reserves0, reserves1] = await pairContract.read.getReserves();
|
|
1511
1697
|
const balances = tokenA.sortsBefore(tokenB) ? [reserves0, reserves1] : [reserves1, reserves0];
|
|
1512
1698
|
return new Pair(
|
|
1513
1699
|
swapSdkCore.CurrencyAmount.fromRawAmount(tokenA, balances[0]),
|
|
@@ -1527,6 +1713,7 @@ exports.INIT_CODE_HASH_MAP = INIT_CODE_HASH_MAP;
|
|
|
1527
1713
|
exports.NATIVE = NATIVE;
|
|
1528
1714
|
exports.Native = Native;
|
|
1529
1715
|
exports.ONE_HUNDRED_PERCENT = ONE_HUNDRED_PERCENT;
|
|
1716
|
+
exports.OnRampCurrency = OnRampCurrency;
|
|
1530
1717
|
exports.Pair = Pair;
|
|
1531
1718
|
exports.Route = Route;
|
|
1532
1719
|
exports.Router = Router;
|
|
@@ -1538,6 +1725,7 @@ exports.ZERO_PERCENT = ZERO_PERCENT;
|
|
|
1538
1725
|
exports.computePairAddress = computePairAddress;
|
|
1539
1726
|
exports.inputOutputComparator = inputOutputComparator;
|
|
1540
1727
|
exports.isTradeBetter = isTradeBetter;
|
|
1728
|
+
exports.pancakePairV2ABI = pancakePairV2ABI;
|
|
1541
1729
|
exports.tradeComparator = tradeComparator;
|
|
1542
1730
|
exports.validateAndParseAddress = validateAndParseAddress;
|
|
1543
1731
|
Object.keys(swapSdkCore).forEach(function (k) {
|