@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/index.js CHANGED
@@ -1,27 +1,24 @@
1
1
  'use strict';
2
2
 
3
3
  var swapSdkCore = require('@pancakeswap/swap-sdk-core');
4
- var address = require('@ethersproject/address');
5
- var invariant4 = require('tiny-invariant');
4
+ var invariant5 = require('tiny-invariant');
5
+ var viem = require('viem');
6
6
  var warning = require('tiny-warning');
7
- var solidity = require('@ethersproject/solidity');
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 invariant4__default = /*#__PURE__*/_interopDefault(invariant4);
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$1) {
15
+ function validateAndParseAddress(address) {
19
16
  try {
20
- const checksummedAddress = address.getAddress(address$1);
21
- warning__default.default(address$1 === checksummedAddress, `${address$1} is not checksummed.`);
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
- invariant4__default.default(false, `${address$1} is not a valid address.`);
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 */]: { name: "Ether", symbol: "ETH", decimals: 18 },
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]: address.getCreate2Address(
324
+ [key]: getCreate2Address_(
171
325
  factoryAddress,
172
- solidity.keccak256(["bytes"], [solidity.pack(["address", "address"], [token0.address, token1.address])]),
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({ factoryAddress: FACTORY_ADDRESS_MAP[tokenA.chainId], tokenA, tokenB });
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
- invariant4__default.default(this.involvesToken(token), "TOKEN");
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
- invariant4__default.default(this.involvesToken(token), "TOKEN");
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
- invariant4__default.default(this.involvesToken(inputAmount.currency), "TOKEN");
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
- invariant4__default.default(this.involvesToken(outputAmount.currency), "TOKEN");
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
- invariant4__default.default(totalSupply.currency.equals(this.liquidityToken), "LIQUIDITY");
438
+ invariant5__default.default(totalSupply.currency.equals(this.liquidityToken), "LIQUIDITY");
281
439
  const tokenAmounts = tokenAmountA.currency.sortsBefore(tokenAmountB.currency) ? [tokenAmountA, tokenAmountB] : [tokenAmountB, tokenAmountA];
282
- invariant4__default.default(tokenAmounts[0].currency.equals(this.token0) && tokenAmounts[1].currency.equals(this.token1), "TOKEN");
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
- invariant4__default.default(this.involvesToken(token), "TOKEN");
298
- invariant4__default.default(totalSupply.currency.equals(this.liquidityToken), "TOTAL_SUPPLY");
299
- invariant4__default.default(liquidity.currency.equals(this.liquidityToken), "LIQUIDITY");
300
- invariant4__default.default(liquidity.quotient <= totalSupply.quotient, "LIQUIDITY");
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
- invariant4__default.default(!!kLast, "K_LAST");
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
- invariant4__default.default(pairs.length > 0, "PAIRS");
489
+ invariant5__default.default(pairs.length > 0, "PAIRS");
332
490
  const { chainId } = pairs[0];
333
- invariant4__default.default(
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
- invariant4__default.default(pairs[0].involvesToken(wrappedInput), "INPUT");
339
- invariant4__default.default(typeof output === "undefined" || pairs[pairs.length - 1].involvesToken(output.wrapped), "OUTPUT");
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
- invariant4__default.default(currentInput.equals(pair.token0) || currentInput.equals(pair.token1), "PATH");
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
- invariant4__default.default(a.inputAmount.currency.equals(b.inputAmount.currency), "INPUT_CURRENCY");
370
- invariant4__default.default(a.outputAmount.currency.equals(b.outputAmount.currency), "OUTPUT_CURRENCY");
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
- invariant4__default.default(amount.currency.equals(route.input), "INPUT");
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
- invariant4__default.default(amount.currency.equals(route.output), "OUTPUT");
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
- invariant4__default.default(!slippageTolerance.lessThan(swapSdkCore.ZERO), "SLIPPAGE_TOLERANCE");
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
- invariant4__default.default(!slippageTolerance.lessThan(swapSdkCore.ZERO), "SLIPPAGE_TOLERANCE");
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
- invariant4__default.default(pairs.length > 0, "PAIRS");
496
- invariant4__default.default(maxHops > 0, "MAX_HOPS");
497
- invariant4__default.default(currencyAmountIn === nextAmountIn || currentPairs.length > 0, "INVALID_RECURSION");
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
- invariant4__default.default(pairs.length > 0, "PAIRS");
574
- invariant4__default.default(maxHops > 0, "MAX_HOPS");
575
- invariant4__default.default(currencyAmountOut === nextAmountOut || currentPairs.length > 0, "INVALID_RECURSION");
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
- invariant4__default.default(!!wnative, "WRAPPED");
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
- invariant4__default.default(!!NATIVE[chainId], "NATIVE_CURRENCY");
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
- invariant4__default.default(!(etherIn && etherOut), "ETHER_IN_OUT");
666
- invariant4__default.default(!("ttl" in options) || options.ttl > 0, "TTL");
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
- invariant4__default.default(!useFeeOnTransfer, "EXACT_OUT_FOT");
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
- invariant4__default.default(!!weth9, "WRAPPED");
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.json
739
- var ERC20_default = [
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.json
761
- var IPancakePair_default = [
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 ethers provider.
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, provider = providers.getDefaultProvider(networks.getNetwork(chainId)), symbol, name) {
1489
- const parsedDecimals = typeof TOKEN_DECIMALS_CACHE?.[chainId]?.[address] === "number" ? TOKEN_DECIMALS_CACHE[chainId][address] : await new contracts.Contract(address, ERC20_default, provider).decimals().then((decimals) => {
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, provider = providers.getDefaultProvider(networks.getNetwork(tokenA.chainId))) {
1508
- invariant4__default.default(tokenA.chainId === tokenB.chainId, "CHAIN_ID");
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 [reserves0, reserves1] = await new contracts.Contract(address, IPancakePair_default, provider).getReserves();
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) {