@pancakeswap/sdk 5.0.0 → 5.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/constants.d.ts +111 -10
- 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/pair.d.ts.map +1 -1
- package/dist/entities/token.d.ts +31 -1
- package/dist/entities/token.d.ts.map +1 -1
- package/dist/index.js +199 -45
- package/dist/index.mjs +199 -46
- package/package.json +2 -4
package/dist/constants.d.ts
CHANGED
|
@@ -1,33 +1,134 @@
|
|
|
1
1
|
import { Percent } from '@pancakeswap/swap-sdk-core';
|
|
2
|
-
import { Address, Hash } from 'viem';
|
|
3
2
|
import { ERC20Token } from './entities/token';
|
|
4
3
|
export declare enum ChainId {
|
|
5
4
|
ETHEREUM = 1,
|
|
6
5
|
GOERLI = 5,
|
|
7
6
|
BSC = 56,
|
|
8
|
-
BSC_TESTNET = 97
|
|
7
|
+
BSC_TESTNET = 97,
|
|
8
|
+
ZKSYNC_TESTNET = 280,
|
|
9
|
+
ZKSYNC = 324,
|
|
10
|
+
POLYGON_ZKEVM = 1101,
|
|
11
|
+
POLYGON_ZKEVM_TESTNET = 1442,
|
|
12
|
+
ARBITRUM_ONE = 42161,
|
|
13
|
+
ARBITRUM_GOERLI = 421613,
|
|
14
|
+
LINEA_TESTNET = 59140
|
|
9
15
|
}
|
|
10
16
|
export declare const ZERO_PERCENT: Percent;
|
|
11
17
|
export declare const ONE_HUNDRED_PERCENT: Percent;
|
|
12
18
|
export declare const FACTORY_ADDRESS = "0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73";
|
|
13
|
-
export declare const FACTORY_ADDRESS_MAP:
|
|
19
|
+
export declare const FACTORY_ADDRESS_MAP: {
|
|
20
|
+
readonly 1: "0x1097053Fd2ea711dad45caCcc45EfF7548fCB362";
|
|
21
|
+
readonly 5: "0x1097053Fd2ea711dad45caCcc45EfF7548fCB362";
|
|
22
|
+
readonly 56: "0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73";
|
|
23
|
+
readonly 97: "0x6725f303b657a9451d8ba641348b6761a6cc7a17";
|
|
24
|
+
readonly 42161: "0x02a84c1b3BBD7401a5f7fa98a384EBC70bB5749E";
|
|
25
|
+
readonly 421613: "0x333EAE459075b1d7dE8eb57997b5d4eee5F1070a";
|
|
26
|
+
readonly 1101: "0x02a84c1b3BBD7401a5f7fa98a384EBC70bB5749E";
|
|
27
|
+
readonly 1442: "0xBA40c83026213F9cbc79998752721a0312bdB74a";
|
|
28
|
+
readonly 324: "0x0F70cE1e2c0FB5FC3B67E13ed4F422fE82d832bD";
|
|
29
|
+
readonly 280: "0x48a33610Cd0E130af2024D55F67aE72a8C51aC27";
|
|
30
|
+
readonly 59140: "0xB6FAfd4ADbCd21cF665909767e0eD0D05709abfB";
|
|
31
|
+
};
|
|
14
32
|
export declare const INIT_CODE_HASH = "0x00fb7f630766e6a796048ea87d01acd3068e8ff67d078148a3fa3f4a84f69bd5";
|
|
15
|
-
export declare const INIT_CODE_HASH_MAP:
|
|
33
|
+
export declare const INIT_CODE_HASH_MAP: {
|
|
34
|
+
readonly 1: "0x57224589c67f3f30a6b0d7a1b54cf3153ab84563bc609ef41dfb34f8b2974d2d";
|
|
35
|
+
readonly 5: "0x57224589c67f3f30a6b0d7a1b54cf3153ab84563bc609ef41dfb34f8b2974d2d";
|
|
36
|
+
readonly 56: "0x00fb7f630766e6a796048ea87d01acd3068e8ff67d078148a3fa3f4a84f69bd5";
|
|
37
|
+
readonly 97: "0xd0d4c4cd0848c93cb4fd1f498d7013ee6bfb25783ea21593d5834f5d250ece66";
|
|
38
|
+
readonly 42161: "0x57224589c67f3f30a6b0d7a1b54cf3153ab84563bc609ef41dfb34f8b2974d2d";
|
|
39
|
+
readonly 421613: "0x57224589c67f3f30a6b0d7a1b54cf3153ab84563bc609ef41dfb34f8b2974d2d";
|
|
40
|
+
readonly 1101: "0x57224589c67f3f30a6b0d7a1b54cf3153ab84563bc609ef41dfb34f8b2974d2d";
|
|
41
|
+
readonly 1442: "0x57224589c67f3f30a6b0d7a1b54cf3153ab84563bc609ef41dfb34f8b2974d2d";
|
|
42
|
+
readonly 324: "0x0100045707a42494392b3558029b9869f865ff9df8f375dc1bf20b0555093f43";
|
|
43
|
+
readonly 280: "0x0100045707a42494392b3558029b9869f865ff9df8f375dc1bf20b0555093f43";
|
|
44
|
+
readonly 59140: "0x57224589c67f3f30a6b0d7a1b54cf3153ab84563bc609ef41dfb34f8b2974d2d";
|
|
45
|
+
};
|
|
16
46
|
export declare const WETH9: {
|
|
17
47
|
1: ERC20Token;
|
|
18
48
|
5: ERC20Token;
|
|
19
49
|
56: ERC20Token;
|
|
20
50
|
97: ERC20Token;
|
|
51
|
+
42161: ERC20Token;
|
|
52
|
+
421613: ERC20Token;
|
|
53
|
+
324: ERC20Token;
|
|
54
|
+
280: ERC20Token;
|
|
55
|
+
1101: ERC20Token;
|
|
56
|
+
1442: ERC20Token;
|
|
57
|
+
59140: ERC20Token;
|
|
21
58
|
};
|
|
22
59
|
export declare const WBNB: {
|
|
23
60
|
1: ERC20Token;
|
|
24
61
|
56: ERC20Token;
|
|
25
62
|
97: ERC20Token;
|
|
26
63
|
};
|
|
27
|
-
export declare const WNATIVE:
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
64
|
+
export declare const WNATIVE: {
|
|
65
|
+
1: ERC20Token;
|
|
66
|
+
5: ERC20Token;
|
|
67
|
+
56: ERC20Token;
|
|
68
|
+
97: ERC20Token;
|
|
69
|
+
42161: ERC20Token;
|
|
70
|
+
421613: ERC20Token;
|
|
71
|
+
1101: ERC20Token;
|
|
72
|
+
1442: ERC20Token;
|
|
73
|
+
324: ERC20Token;
|
|
74
|
+
280: ERC20Token;
|
|
75
|
+
59140: ERC20Token;
|
|
76
|
+
};
|
|
77
|
+
export declare const NATIVE: {
|
|
78
|
+
1: {
|
|
79
|
+
readonly name: "Ether";
|
|
80
|
+
readonly symbol: "ETH";
|
|
81
|
+
readonly decimals: 18;
|
|
82
|
+
};
|
|
83
|
+
5: {
|
|
84
|
+
name: string;
|
|
85
|
+
symbol: string;
|
|
86
|
+
decimals: number;
|
|
87
|
+
};
|
|
88
|
+
56: {
|
|
89
|
+
name: string;
|
|
90
|
+
symbol: string;
|
|
91
|
+
decimals: number;
|
|
92
|
+
};
|
|
93
|
+
97: {
|
|
94
|
+
name: string;
|
|
95
|
+
symbol: string;
|
|
96
|
+
decimals: number;
|
|
97
|
+
};
|
|
98
|
+
42161: {
|
|
99
|
+
readonly name: "Ether";
|
|
100
|
+
readonly symbol: "ETH";
|
|
101
|
+
readonly decimals: 18;
|
|
102
|
+
};
|
|
103
|
+
421613: {
|
|
104
|
+
name: string;
|
|
105
|
+
symbol: string;
|
|
106
|
+
decimals: number;
|
|
107
|
+
};
|
|
108
|
+
1101: {
|
|
109
|
+
readonly name: "Ether";
|
|
110
|
+
readonly symbol: "ETH";
|
|
111
|
+
readonly decimals: 18;
|
|
112
|
+
};
|
|
113
|
+
1442: {
|
|
114
|
+
readonly name: "Ether";
|
|
115
|
+
readonly symbol: "ETH";
|
|
116
|
+
readonly decimals: 18;
|
|
117
|
+
};
|
|
118
|
+
324: {
|
|
119
|
+
readonly name: "Ether";
|
|
120
|
+
readonly symbol: "ETH";
|
|
121
|
+
readonly decimals: 18;
|
|
122
|
+
};
|
|
123
|
+
280: {
|
|
124
|
+
readonly name: "Ether";
|
|
125
|
+
readonly symbol: "ETH";
|
|
126
|
+
readonly decimals: 18;
|
|
127
|
+
};
|
|
128
|
+
59140: {
|
|
129
|
+
readonly name: "Ether";
|
|
130
|
+
readonly symbol: "ETH";
|
|
131
|
+
readonly decimals: 18;
|
|
132
|
+
};
|
|
133
|
+
};
|
|
33
134
|
//# sourceMappingURL=constants.d.ts.map
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,oBAAY,OAAO;IACjB,QAAQ,IAAI;IACZ,MAAM,IAAI;IACV,GAAG,KAAK;IACR,WAAW,KAAK;IAChB,cAAc,MAAM;IACpB,MAAM,MAAM;IACZ,aAAa,OAAO;IACpB,qBAAqB,OAAO;IAC5B,YAAY,QAAQ;IACpB,eAAe,SAAS;IACxB,aAAa,QAAQ;CACtB;AAED,eAAO,MAAM,YAAY,SAAmB,CAAA;AAC5C,eAAO,MAAM,mBAAmB,SAAmB,CAAA;AAEnD,eAAO,MAAM,eAAe,+CAA+C,CAAA;AAI3E,eAAO,MAAM,mBAAmB;;;;;;;;;;;;CAYa,CAAA;AAE7C,eAAO,MAAM,cAAc,uEAAuE,CAAA;AAGlG,eAAO,MAAM,kBAAkB;;;;;;;;;;;;CAYW,CAAA;AAE1C,eAAO,MAAM,KAAK;;;;;;;;;;;;CAyFjB,CAAA;AAED,eAAO,MAAM,IAAI;;;;CAyBhB,CAAA;AAED,eAAO,MAAM,OAAO;;;;;;;;;;;;CAYmB,CAAA;AAIvC,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BlB,CAAA"}
|
package/dist/entities/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/entities/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/entities/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AACpD,cAAc,QAAQ,CAAA;AACtB,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pair.d.ts","sourceRoot":"","sources":["../../src/entities/pair.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,cAAc,EACd,KAAK,EAML,SAAS,EAEV,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,OAAO,EAYR,MAAM,MAAM,CAAA;AAIb,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"pair.d.ts","sourceRoot":"","sources":["../../src/entities/pair.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,cAAc,EACd,KAAK,EAML,SAAS,EAEV,MAAM,4BAA4B,CAAA;AACnC,OAAO,EACL,OAAO,EAYR,MAAM,MAAM,CAAA;AAIb,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AA4BpC,eAAO,MAAM,kBAAkB;oBAKb,OAAO;YACf,UAAU;YACV,UAAU;MAChB,OAoBH,CAAA;AAED,qBAAa,IAAI;IACf,SAAgB,cAAc,EAAE,UAAU,CAAA;IAE1C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA0D;WAEzE,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO;gBAQtD,eAAe,EAAE,cAAc,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,cAAc,CAAC,UAAU,CAAC;IAcxG;;;OAGG;IACI,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO;IAIhD;;OAEG;IACH,IAAW,WAAW,IAAI,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC,CAGtD;IAED;;OAEG;IACH,IAAW,WAAW,IAAI,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC,CAGtD;IAED;;;OAGG;IACI,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC;IAKhE;;OAEG;IACH,IAAW,OAAO,IAAI,MAAM,CAE3B;IAED,IAAW,MAAM,IAAI,UAAU,CAE9B;IAED,IAAW,MAAM,IAAI,UAAU,CAE9B;IAED,IAAW,QAAQ,IAAI,cAAc,CAAC,UAAU,CAAC,CAEhD;IAED,IAAW,QAAQ,IAAI,cAAc,CAAC,UAAU,CAAC,CAEhD;IAEM,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,cAAc,CAAC,UAAU,CAAC;IAKxD,eAAe,CAAC,WAAW,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC;IAoB5F,cAAc,CAAC,YAAY,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC;IAqB5F,kBAAkB,CACvB,WAAW,EAAE,cAAc,CAAC,UAAU,CAAC,EACvC,YAAY,EAAE,cAAc,CAAC,UAAU,CAAC,EACxC,YAAY,EAAE,cAAc,CAAC,UAAU,CAAC,GACvC,cAAc,CAAC,UAAU,CAAC;IAqBtB,iBAAiB,CACtB,KAAK,EAAE,UAAU,EACjB,WAAW,EAAE,cAAc,CAAC,UAAU,CAAC,EACvC,SAAS,EAAE,cAAc,CAAC,UAAU,CAAC,EACrC,KAAK,UAAQ,EACb,KAAK,CAAC,EAAE,SAAS,GAChB,cAAc,CAAC,UAAU,CAAC;CAiC9B"}
|
package/dist/entities/token.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Token } from '@pancakeswap/swap-sdk-core';
|
|
1
|
+
import { BaseCurrency, Currency, Token } from '@pancakeswap/swap-sdk-core';
|
|
2
2
|
import { Address } from 'viem';
|
|
3
3
|
export interface SerializedToken {
|
|
4
4
|
chainId: number;
|
|
@@ -11,4 +11,34 @@ export interface SerializedToken {
|
|
|
11
11
|
export declare class ERC20Token extends Token {
|
|
12
12
|
constructor(chainId: number, address: Address, decimals: number, symbol: string, name?: string, projectLink?: string);
|
|
13
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* Represents an ERC20 token with a unique address and some metadata.
|
|
16
|
+
*/
|
|
17
|
+
export declare class OnRampCurrency extends BaseCurrency {
|
|
18
|
+
readonly isNative: boolean;
|
|
19
|
+
readonly isToken: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* The contract address on the chain on which this token lives
|
|
22
|
+
*/
|
|
23
|
+
readonly address: `0x${string}`;
|
|
24
|
+
readonly projectLink?: string;
|
|
25
|
+
constructor(chainId: number, address: `0x${string}`, decimals: number, symbol: string, name?: string, projectLink?: string);
|
|
26
|
+
/**
|
|
27
|
+
* Returns true if the two tokens are equivalent, i.e. have the same chainId and address.
|
|
28
|
+
* @param other other token to compare
|
|
29
|
+
*/
|
|
30
|
+
equals(other: Currency): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Returns true if the address of this token sorts before the address of the other token
|
|
33
|
+
* @param other other token to compare
|
|
34
|
+
* @throws if the tokens have the same address
|
|
35
|
+
* @throws if the tokens are on different chains
|
|
36
|
+
*/
|
|
37
|
+
sortsBefore(other: Currency): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Return this token, which does not need to be wrapped
|
|
40
|
+
*/
|
|
41
|
+
get wrapped(): Token;
|
|
42
|
+
get serialize(): SerializedToken;
|
|
43
|
+
}
|
|
14
44
|
//# sourceMappingURL=token.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/entities/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/entities/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAI9B,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,OAAO,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAKD,qBAAa,UAAW,SAAQ,KAAK;gBAEjC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM;CAIvB;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,SAAgB,QAAQ,EAAE,OAAO,CAAA;IAEjC,SAAgB,OAAO,EAAE,OAAO,CAAA;IAEhC;;OAEG;IACH,SAAgB,OAAO,EAAE,KAAK,MAAM,EAAE,CAAA;IAEtC,SAAgB,WAAW,CAAC,EAAE,MAAM,CAAA;gBAGlC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,KAAK,MAAM,EAAE,EACtB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM;IAStB;;;OAGG;IACI,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO;IAIvC;;;;;OAKG;IACI,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO;IAO5C;;OAEG;IACH,IAAW,OAAO,IAAI,KAAK,CAE1B;IAED,IAAW,SAAS,IAAI,eAAe,CAStC;CACF"}
|
package/dist/index.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var swapSdkCore = require('@pancakeswap/swap-sdk-core');
|
|
4
|
+
var invariant5 = require('tiny-invariant');
|
|
4
5
|
var viem = require('viem');
|
|
5
|
-
var invariant4 = require('tiny-invariant');
|
|
6
6
|
var warning = require('tiny-warning');
|
|
7
7
|
var chains = require('viem/chains');
|
|
8
8
|
|
|
9
9
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
10
|
|
|
11
|
-
var
|
|
11
|
+
var invariant5__default = /*#__PURE__*/_interopDefault(invariant5);
|
|
12
12
|
var warning__default = /*#__PURE__*/_interopDefault(warning);
|
|
13
13
|
|
|
14
14
|
// src/constants.ts
|
|
@@ -18,7 +18,7 @@ function validateAndParseAddress(address) {
|
|
|
18
18
|
warning__default.default(address === checksummedAddress, `${address} is not checksummed.`);
|
|
19
19
|
return checksummedAddress;
|
|
20
20
|
} catch (error) {
|
|
21
|
-
|
|
21
|
+
invariant5__default.default(false, `${address} is not a valid address.`);
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
|
|
@@ -28,6 +28,51 @@ var ERC20Token = class extends swapSdkCore.Token {
|
|
|
28
28
|
super(chainId, validateAndParseAddress(address), decimals, symbol, name, projectLink);
|
|
29
29
|
}
|
|
30
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
|
+
};
|
|
31
76
|
|
|
32
77
|
// src/constants.ts
|
|
33
78
|
var ChainId = /* @__PURE__ */ ((ChainId3) => {
|
|
@@ -35,6 +80,13 @@ var ChainId = /* @__PURE__ */ ((ChainId3) => {
|
|
|
35
80
|
ChainId3[ChainId3["GOERLI"] = 5] = "GOERLI";
|
|
36
81
|
ChainId3[ChainId3["BSC"] = 56] = "BSC";
|
|
37
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";
|
|
38
90
|
return ChainId3;
|
|
39
91
|
})(ChainId || {});
|
|
40
92
|
var ZERO_PERCENT = new swapSdkCore.Percent("0");
|
|
@@ -45,7 +97,14 @@ var FACTORY_ADDRESS_MAP = {
|
|
|
45
97
|
[1 /* ETHEREUM */]: FACTORY_ADDRESS_ETH,
|
|
46
98
|
[5 /* GOERLI */]: FACTORY_ADDRESS_ETH,
|
|
47
99
|
[56 /* BSC */]: FACTORY_ADDRESS,
|
|
48
|
-
[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"
|
|
49
108
|
};
|
|
50
109
|
var INIT_CODE_HASH = "0x00fb7f630766e6a796048ea87d01acd3068e8ff67d078148a3fa3f4a84f69bd5";
|
|
51
110
|
var INIT_CODE_HASH_ETH = "0x57224589c67f3f30a6b0d7a1b54cf3153ab84563bc609ef41dfb34f8b2974d2d";
|
|
@@ -53,7 +112,14 @@ var INIT_CODE_HASH_MAP = {
|
|
|
53
112
|
[1 /* ETHEREUM */]: INIT_CODE_HASH_ETH,
|
|
54
113
|
[5 /* GOERLI */]: INIT_CODE_HASH_ETH,
|
|
55
114
|
[56 /* BSC */]: INIT_CODE_HASH,
|
|
56
|
-
[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
|
+
[324 /* ZKSYNC */]: "0x0100045707a42494392b3558029b9869f865ff9df8f375dc1bf20b0555093f43",
|
|
121
|
+
[280 /* ZKSYNC_TESTNET */]: "0x0100045707a42494392b3558029b9869f865ff9df8f375dc1bf20b0555093f43",
|
|
122
|
+
[59140 /* LINEA_TESTNET */]: INIT_CODE_HASH_ETH
|
|
57
123
|
};
|
|
58
124
|
var WETH9 = {
|
|
59
125
|
[1 /* ETHEREUM */]: new ERC20Token(
|
|
@@ -87,6 +153,62 @@ var WETH9 = {
|
|
|
87
153
|
"ETH",
|
|
88
154
|
"ETH",
|
|
89
155
|
"https://ethereum.org"
|
|
156
|
+
),
|
|
157
|
+
[42161 /* ARBITRUM_ONE */]: new ERC20Token(
|
|
158
|
+
42161 /* ARBITRUM_ONE */,
|
|
159
|
+
"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",
|
|
160
|
+
18,
|
|
161
|
+
"WETH",
|
|
162
|
+
"Wrapped Ether",
|
|
163
|
+
"https://weth.io"
|
|
164
|
+
),
|
|
165
|
+
[421613 /* ARBITRUM_GOERLI */]: new ERC20Token(
|
|
166
|
+
421613 /* ARBITRUM_GOERLI */,
|
|
167
|
+
"0xEe01c0CD76354C383B8c7B4e65EA88D00B06f36f",
|
|
168
|
+
18,
|
|
169
|
+
"WETH",
|
|
170
|
+
"Wrapped Ether",
|
|
171
|
+
"https://weth.io"
|
|
172
|
+
),
|
|
173
|
+
[324 /* ZKSYNC */]: new ERC20Token(
|
|
174
|
+
324 /* ZKSYNC */,
|
|
175
|
+
"0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91",
|
|
176
|
+
18,
|
|
177
|
+
"WETH",
|
|
178
|
+
"Wrapped Ether",
|
|
179
|
+
"https://weth.io"
|
|
180
|
+
),
|
|
181
|
+
[280 /* ZKSYNC_TESTNET */]: new ERC20Token(
|
|
182
|
+
280 /* ZKSYNC_TESTNET */,
|
|
183
|
+
"0x02968DB286f24cB18bB5b24903eC8eBFAcf591C0",
|
|
184
|
+
18,
|
|
185
|
+
"WETH",
|
|
186
|
+
"Wrapped Ether",
|
|
187
|
+
"https://weth.io"
|
|
188
|
+
),
|
|
189
|
+
[1101 /* POLYGON_ZKEVM */]: new ERC20Token(
|
|
190
|
+
1101 /* POLYGON_ZKEVM */,
|
|
191
|
+
"0x4F9A0e7FD2Bf6067db6994CF12E4495Df938E6e9",
|
|
192
|
+
18,
|
|
193
|
+
"WETH",
|
|
194
|
+
"Wrapped Ether",
|
|
195
|
+
"https://weth.io"
|
|
196
|
+
),
|
|
197
|
+
[1442 /* POLYGON_ZKEVM_TESTNET */]: new ERC20Token(
|
|
198
|
+
1442 /* POLYGON_ZKEVM_TESTNET */,
|
|
199
|
+
"0x30ec47F7DFae72eA79646e6cf64a8A7db538915b",
|
|
200
|
+
18,
|
|
201
|
+
"WETH",
|
|
202
|
+
"Wrapped Ether",
|
|
203
|
+
"https://weth.io"
|
|
204
|
+
),
|
|
205
|
+
[59140 /* LINEA_TESTNET */]: new ERC20Token(
|
|
206
|
+
59140 /* LINEA_TESTNET */,
|
|
207
|
+
"0x2C1b868d6596a18e32E61B901E4060C872647b6C",
|
|
208
|
+
18,
|
|
209
|
+
"WETH",
|
|
210
|
+
"Wrapped Ether",
|
|
211
|
+
"https://weth.io"
|
|
90
212
|
)
|
|
91
213
|
};
|
|
92
214
|
var WBNB = {
|
|
@@ -119,10 +241,18 @@ var WNATIVE = {
|
|
|
119
241
|
[1 /* ETHEREUM */]: WETH9[1 /* ETHEREUM */],
|
|
120
242
|
[5 /* GOERLI */]: WETH9[5 /* GOERLI */],
|
|
121
243
|
[56 /* BSC */]: WBNB[56 /* BSC */],
|
|
122
|
-
[97 /* BSC_TESTNET */]: WBNB[97 /* BSC_TESTNET */]
|
|
244
|
+
[97 /* BSC_TESTNET */]: WBNB[97 /* BSC_TESTNET */],
|
|
245
|
+
[42161 /* ARBITRUM_ONE */]: WETH9[42161 /* ARBITRUM_ONE */],
|
|
246
|
+
[421613 /* ARBITRUM_GOERLI */]: WETH9[421613 /* ARBITRUM_GOERLI */],
|
|
247
|
+
[1101 /* POLYGON_ZKEVM */]: WETH9[1101 /* POLYGON_ZKEVM */],
|
|
248
|
+
[1442 /* POLYGON_ZKEVM_TESTNET */]: WETH9[1442 /* POLYGON_ZKEVM_TESTNET */],
|
|
249
|
+
[324 /* ZKSYNC */]: WETH9[324 /* ZKSYNC */],
|
|
250
|
+
[280 /* ZKSYNC_TESTNET */]: WETH9[280 /* ZKSYNC_TESTNET */],
|
|
251
|
+
[59140 /* LINEA_TESTNET */]: WETH9[59140 /* LINEA_TESTNET */]
|
|
123
252
|
};
|
|
253
|
+
var ETHER = { name: "Ether", symbol: "ETH", decimals: 18 };
|
|
124
254
|
var NATIVE = {
|
|
125
|
-
[1 /* ETHEREUM */]:
|
|
255
|
+
[1 /* ETHEREUM */]: ETHER,
|
|
126
256
|
[5 /* GOERLI */]: { name: "Goerli Ether", symbol: "GOR", decimals: 18 },
|
|
127
257
|
[56 /* BSC */]: {
|
|
128
258
|
name: "Binance Chain Native Token",
|
|
@@ -133,7 +263,18 @@ var NATIVE = {
|
|
|
133
263
|
name: "Binance Chain Native Token",
|
|
134
264
|
symbol: "tBNB",
|
|
135
265
|
decimals: 18
|
|
136
|
-
}
|
|
266
|
+
},
|
|
267
|
+
[42161 /* ARBITRUM_ONE */]: ETHER,
|
|
268
|
+
[421613 /* ARBITRUM_GOERLI */]: {
|
|
269
|
+
name: "Arbitrum Goerli Ether",
|
|
270
|
+
symbol: "AGOR",
|
|
271
|
+
decimals: 18
|
|
272
|
+
},
|
|
273
|
+
[1101 /* POLYGON_ZKEVM */]: ETHER,
|
|
274
|
+
[1442 /* POLYGON_ZKEVM_TESTNET */]: ETHER,
|
|
275
|
+
[324 /* ZKSYNC */]: ETHER,
|
|
276
|
+
[280 /* ZKSYNC_TESTNET */]: ETHER,
|
|
277
|
+
[59140 /* LINEA_TESTNET */]: ETHER
|
|
137
278
|
};
|
|
138
279
|
|
|
139
280
|
// src/trade.ts
|
|
@@ -161,6 +302,13 @@ function getCreate2Address(from_, salt_, initCodeHash) {
|
|
|
161
302
|
});
|
|
162
303
|
return viem.getAddress(viem.slice(viem.keccak256(viem.concat([viem.toBytes("0xff"), from, salt, viem.toBytes(initCodeHash)])), 12));
|
|
163
304
|
}
|
|
305
|
+
var EMPTY_INPU_HASH = "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470";
|
|
306
|
+
var ZKSYNC_PREFIX = "0x2020dba91b30cc0006188af794c2fb30dd8520db7e2c088b7fc7c103c00ca494";
|
|
307
|
+
function getCreate2AddressZkSync(from, salt, initCodeHash) {
|
|
308
|
+
return viem.getAddress(
|
|
309
|
+
`0x${viem.keccak256(viem.concat([ZKSYNC_PREFIX, viem.pad(from, { size: 32 }), salt, initCodeHash, EMPTY_INPU_HASH])).slice(26)}`
|
|
310
|
+
);
|
|
311
|
+
}
|
|
164
312
|
var computePairAddress = ({
|
|
165
313
|
factoryAddress,
|
|
166
314
|
tokenA,
|
|
@@ -169,9 +317,10 @@ var computePairAddress = ({
|
|
|
169
317
|
const [token0, token1] = tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA];
|
|
170
318
|
const key = composeKey(token0, token1);
|
|
171
319
|
if (PAIR_ADDRESS_CACHE?.[key] === void 0) {
|
|
320
|
+
const getCreate2Address_ = token0.chainId === 280 /* ZKSYNC_TESTNET */ || token1.chainId === 324 /* ZKSYNC */ ? getCreate2AddressZkSync : getCreate2Address;
|
|
172
321
|
PAIR_ADDRESS_CACHE = {
|
|
173
322
|
...PAIR_ADDRESS_CACHE,
|
|
174
|
-
[key]:
|
|
323
|
+
[key]: getCreate2Address_(
|
|
175
324
|
factoryAddress,
|
|
176
325
|
viem.keccak256(viem.encodePacked(["address", "address"], [token0.address, token1.address])),
|
|
177
326
|
INIT_CODE_HASH_MAP[token0.chainId]
|
|
@@ -182,7 +331,11 @@ var computePairAddress = ({
|
|
|
182
331
|
};
|
|
183
332
|
var Pair = class {
|
|
184
333
|
static getAddress(tokenA, tokenB) {
|
|
185
|
-
return computePairAddress({
|
|
334
|
+
return computePairAddress({
|
|
335
|
+
factoryAddress: FACTORY_ADDRESS_MAP[tokenA.chainId],
|
|
336
|
+
tokenA,
|
|
337
|
+
tokenB
|
|
338
|
+
});
|
|
186
339
|
}
|
|
187
340
|
constructor(currencyAmountA, tokenAmountB) {
|
|
188
341
|
const tokenAmounts = currencyAmountA.currency.sortsBefore(tokenAmountB.currency) ? [currencyAmountA, tokenAmountB] : [tokenAmountB, currencyAmountA];
|
|
@@ -221,7 +374,7 @@ var Pair = class {
|
|
|
221
374
|
* @param token token to return price of
|
|
222
375
|
*/
|
|
223
376
|
priceOf(token) {
|
|
224
|
-
|
|
377
|
+
invariant5__default.default(this.involvesToken(token), "TOKEN");
|
|
225
378
|
return token.equals(this.token0) ? this.token0Price : this.token1Price;
|
|
226
379
|
}
|
|
227
380
|
/**
|
|
@@ -243,11 +396,11 @@ var Pair = class {
|
|
|
243
396
|
return this.tokenAmounts[1];
|
|
244
397
|
}
|
|
245
398
|
reserveOf(token) {
|
|
246
|
-
|
|
399
|
+
invariant5__default.default(this.involvesToken(token), "TOKEN");
|
|
247
400
|
return token.equals(this.token0) ? this.reserve0 : this.reserve1;
|
|
248
401
|
}
|
|
249
402
|
getOutputAmount(inputAmount) {
|
|
250
|
-
|
|
403
|
+
invariant5__default.default(this.involvesToken(inputAmount.currency), "TOKEN");
|
|
251
404
|
if (this.reserve0.quotient === swapSdkCore.ZERO || this.reserve1.quotient === swapSdkCore.ZERO) {
|
|
252
405
|
throw new swapSdkCore.InsufficientReservesError();
|
|
253
406
|
}
|
|
@@ -266,7 +419,7 @@ var Pair = class {
|
|
|
266
419
|
return [outputAmount, new Pair(inputReserve.add(inputAmount), outputReserve.subtract(outputAmount))];
|
|
267
420
|
}
|
|
268
421
|
getInputAmount(outputAmount) {
|
|
269
|
-
|
|
422
|
+
invariant5__default.default(this.involvesToken(outputAmount.currency), "TOKEN");
|
|
270
423
|
if (this.reserve0.quotient === swapSdkCore.ZERO || this.reserve1.quotient === swapSdkCore.ZERO || outputAmount.quotient >= this.reserveOf(outputAmount.currency).quotient) {
|
|
271
424
|
throw new swapSdkCore.InsufficientReservesError();
|
|
272
425
|
}
|
|
@@ -281,9 +434,9 @@ var Pair = class {
|
|
|
281
434
|
return [inputAmount, new Pair(inputReserve.add(inputAmount), outputReserve.subtract(outputAmount))];
|
|
282
435
|
}
|
|
283
436
|
getLiquidityMinted(totalSupply, tokenAmountA, tokenAmountB) {
|
|
284
|
-
|
|
437
|
+
invariant5__default.default(totalSupply.currency.equals(this.liquidityToken), "LIQUIDITY");
|
|
285
438
|
const tokenAmounts = tokenAmountA.currency.sortsBefore(tokenAmountB.currency) ? [tokenAmountA, tokenAmountB] : [tokenAmountB, tokenAmountA];
|
|
286
|
-
|
|
439
|
+
invariant5__default.default(tokenAmounts[0].currency.equals(this.token0) && tokenAmounts[1].currency.equals(this.token1), "TOKEN");
|
|
287
440
|
let liquidity;
|
|
288
441
|
if (totalSupply.quotient === swapSdkCore.ZERO) {
|
|
289
442
|
liquidity = swapSdkCore.sqrt(tokenAmounts[0].quotient * tokenAmounts[1].quotient) - swapSdkCore.MINIMUM_LIQUIDITY;
|
|
@@ -298,15 +451,15 @@ var Pair = class {
|
|
|
298
451
|
return swapSdkCore.CurrencyAmount.fromRawAmount(this.liquidityToken, liquidity);
|
|
299
452
|
}
|
|
300
453
|
getLiquidityValue(token, totalSupply, liquidity, feeOn = false, kLast) {
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
454
|
+
invariant5__default.default(this.involvesToken(token), "TOKEN");
|
|
455
|
+
invariant5__default.default(totalSupply.currency.equals(this.liquidityToken), "TOTAL_SUPPLY");
|
|
456
|
+
invariant5__default.default(liquidity.currency.equals(this.liquidityToken), "LIQUIDITY");
|
|
457
|
+
invariant5__default.default(liquidity.quotient <= totalSupply.quotient, "LIQUIDITY");
|
|
305
458
|
let totalSupplyAdjusted;
|
|
306
459
|
if (!feeOn) {
|
|
307
460
|
totalSupplyAdjusted = totalSupply;
|
|
308
461
|
} else {
|
|
309
|
-
|
|
462
|
+
invariant5__default.default(!!kLast, "K_LAST");
|
|
310
463
|
const kLastParsed = BigInt(kLast);
|
|
311
464
|
if (!(kLastParsed === swapSdkCore.ZERO)) {
|
|
312
465
|
const rootK = swapSdkCore.sqrt(this.reserve0.quotient * this.reserve1.quotient);
|
|
@@ -332,19 +485,19 @@ var Pair = class {
|
|
|
332
485
|
var Route = class {
|
|
333
486
|
constructor(pairs, input, output) {
|
|
334
487
|
this._midPrice = null;
|
|
335
|
-
|
|
488
|
+
invariant5__default.default(pairs.length > 0, "PAIRS");
|
|
336
489
|
const { chainId } = pairs[0];
|
|
337
|
-
|
|
490
|
+
invariant5__default.default(
|
|
338
491
|
pairs.every((pair) => pair.chainId === chainId),
|
|
339
492
|
"CHAIN_IDS"
|
|
340
493
|
);
|
|
341
494
|
const wrappedInput = input.wrapped;
|
|
342
|
-
|
|
343
|
-
|
|
495
|
+
invariant5__default.default(pairs[0].involvesToken(wrappedInput), "INPUT");
|
|
496
|
+
invariant5__default.default(typeof output === "undefined" || pairs[pairs.length - 1].involvesToken(output.wrapped), "OUTPUT");
|
|
344
497
|
const path = [wrappedInput];
|
|
345
498
|
for (const [i, pair] of pairs.entries()) {
|
|
346
499
|
const currentInput = path[i];
|
|
347
|
-
|
|
500
|
+
invariant5__default.default(currentInput.equals(pair.token0) || currentInput.equals(pair.token1), "PATH");
|
|
348
501
|
const output2 = currentInput.equals(pair.token0) ? pair.token1 : pair.token0;
|
|
349
502
|
path.push(output2);
|
|
350
503
|
}
|
|
@@ -370,8 +523,8 @@ var Route = class {
|
|
|
370
523
|
}
|
|
371
524
|
};
|
|
372
525
|
function inputOutputComparator(a, b) {
|
|
373
|
-
|
|
374
|
-
|
|
526
|
+
invariant5__default.default(a.inputAmount.currency.equals(b.inputAmount.currency), "INPUT_CURRENCY");
|
|
527
|
+
invariant5__default.default(a.outputAmount.currency.equals(b.outputAmount.currency), "OUTPUT_CURRENCY");
|
|
375
528
|
if (a.outputAmount.equalTo(b.outputAmount)) {
|
|
376
529
|
if (a.inputAmount.equalTo(b.inputAmount)) {
|
|
377
530
|
return 0;
|
|
@@ -421,7 +574,7 @@ var Trade = class {
|
|
|
421
574
|
this.tradeType = tradeType;
|
|
422
575
|
const tokenAmounts = new Array(route.path.length);
|
|
423
576
|
if (tradeType === swapSdkCore.TradeType.EXACT_INPUT) {
|
|
424
|
-
|
|
577
|
+
invariant5__default.default(amount.currency.equals(route.input), "INPUT");
|
|
425
578
|
tokenAmounts[0] = amount.wrapped;
|
|
426
579
|
for (let i = 0; i < route.path.length - 1; i++) {
|
|
427
580
|
const pair = route.pairs[i];
|
|
@@ -435,7 +588,7 @@ var Trade = class {
|
|
|
435
588
|
tokenAmounts[tokenAmounts.length - 1].denominator
|
|
436
589
|
);
|
|
437
590
|
} else {
|
|
438
|
-
|
|
591
|
+
invariant5__default.default(amount.currency.equals(route.output), "OUTPUT");
|
|
439
592
|
tokenAmounts[tokenAmounts.length - 1] = amount.wrapped;
|
|
440
593
|
for (let i = route.path.length - 1; i > 0; i--) {
|
|
441
594
|
const pair = route.pairs[i - 1];
|
|
@@ -462,7 +615,7 @@ var Trade = class {
|
|
|
462
615
|
* @param slippageTolerance tolerance of unfavorable slippage from the execution price of this trade
|
|
463
616
|
*/
|
|
464
617
|
minimumAmountOut(slippageTolerance) {
|
|
465
|
-
|
|
618
|
+
invariant5__default.default(!slippageTolerance.lessThan(swapSdkCore.ZERO), "SLIPPAGE_TOLERANCE");
|
|
466
619
|
if (this.tradeType === swapSdkCore.TradeType.EXACT_OUTPUT) {
|
|
467
620
|
return this.outputAmount;
|
|
468
621
|
}
|
|
@@ -474,7 +627,7 @@ var Trade = class {
|
|
|
474
627
|
* @param slippageTolerance tolerance of unfavorable slippage from the execution price of this trade
|
|
475
628
|
*/
|
|
476
629
|
maximumAmountIn(slippageTolerance) {
|
|
477
|
-
|
|
630
|
+
invariant5__default.default(!slippageTolerance.lessThan(swapSdkCore.ZERO), "SLIPPAGE_TOLERANCE");
|
|
478
631
|
if (this.tradeType === swapSdkCore.TradeType.EXACT_INPUT) {
|
|
479
632
|
return this.inputAmount;
|
|
480
633
|
}
|
|
@@ -496,9 +649,9 @@ var Trade = class {
|
|
|
496
649
|
* @param bestTrades used in recursion; the current list of best trades
|
|
497
650
|
*/
|
|
498
651
|
static bestTradeExactIn(pairs, currencyAmountIn, currencyOut, { maxNumResults = 3, maxHops = 3 } = {}, currentPairs = [], nextAmountIn = currencyAmountIn, bestTrades = []) {
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
652
|
+
invariant5__default.default(pairs.length > 0, "PAIRS");
|
|
653
|
+
invariant5__default.default(maxHops > 0, "MAX_HOPS");
|
|
654
|
+
invariant5__default.default(currencyAmountIn === nextAmountIn || currentPairs.length > 0, "INVALID_RECURSION");
|
|
502
655
|
const amountIn = nextAmountIn.wrapped;
|
|
503
656
|
const tokenOut = currencyOut.wrapped;
|
|
504
657
|
for (let i = 0; i < pairs.length; i++) {
|
|
@@ -574,9 +727,9 @@ var Trade = class {
|
|
|
574
727
|
* @param bestTrades used in recursion; the current list of best trades
|
|
575
728
|
*/
|
|
576
729
|
static bestTradeExactOut(pairs, currencyIn, currencyAmountOut, { maxNumResults = 3, maxHops = 3 } = {}, currentPairs = [], nextAmountOut = currencyAmountOut, bestTrades = []) {
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
730
|
+
invariant5__default.default(pairs.length > 0, "PAIRS");
|
|
731
|
+
invariant5__default.default(maxHops > 0, "MAX_HOPS");
|
|
732
|
+
invariant5__default.default(currencyAmountOut === nextAmountOut || currentPairs.length > 0, "INVALID_RECURSION");
|
|
580
733
|
const amountOut = nextAmountOut.wrapped;
|
|
581
734
|
const tokenIn = currencyIn.wrapped;
|
|
582
735
|
for (let i = 0; i < pairs.length; i++) {
|
|
@@ -636,14 +789,14 @@ var _Native = class extends swapSdkCore.NativeCurrency {
|
|
|
636
789
|
}
|
|
637
790
|
get wrapped() {
|
|
638
791
|
const wnative = WNATIVE[this.chainId];
|
|
639
|
-
|
|
792
|
+
invariant5__default.default(!!wnative, "WRAPPED");
|
|
640
793
|
return wnative;
|
|
641
794
|
}
|
|
642
795
|
static onChain(chainId) {
|
|
643
796
|
if (chainId in this.cache) {
|
|
644
797
|
return this.cache[chainId];
|
|
645
798
|
}
|
|
646
|
-
|
|
799
|
+
invariant5__default.default(!!NATIVE[chainId], "NATIVE_CURRENCY");
|
|
647
800
|
const { decimals, name, symbol } = NATIVE[chainId];
|
|
648
801
|
return this.cache[chainId] = new _Native({ chainId, decimals, symbol, name });
|
|
649
802
|
}
|
|
@@ -666,8 +819,8 @@ var Router = class {
|
|
|
666
819
|
static swapCallParameters(trade, options) {
|
|
667
820
|
const etherIn = trade.inputAmount.currency.isNative;
|
|
668
821
|
const etherOut = trade.outputAmount.currency.isNative;
|
|
669
|
-
|
|
670
|
-
|
|
822
|
+
invariant5__default.default(!(etherIn && etherOut), "ETHER_IN_OUT");
|
|
823
|
+
invariant5__default.default(!("ttl" in options) || options.ttl > 0, "TTL");
|
|
671
824
|
const to = validateAndParseAddress(options.recipient);
|
|
672
825
|
const amountIn = toHex(trade.maximumAmountIn(options.allowedSlippage));
|
|
673
826
|
const amountOut = toHex(trade.minimumAmountOut(options.allowedSlippage));
|
|
@@ -694,7 +847,7 @@ var Router = class {
|
|
|
694
847
|
}
|
|
695
848
|
break;
|
|
696
849
|
case swapSdkCore.TradeType.EXACT_OUTPUT:
|
|
697
|
-
|
|
850
|
+
invariant5__default.default(!useFeeOnTransfer, "EXACT_OUT_FOT");
|
|
698
851
|
if (etherIn) {
|
|
699
852
|
methodName = "swapETHForExactTokens";
|
|
700
853
|
args = [amountOut, path, to, deadline];
|
|
@@ -723,7 +876,7 @@ var _Ether = class extends swapSdkCore.NativeCurrency {
|
|
|
723
876
|
}
|
|
724
877
|
get wrapped() {
|
|
725
878
|
const weth9 = WETH9[this.chainId];
|
|
726
|
-
|
|
879
|
+
invariant5__default.default(!!weth9, "WRAPPED");
|
|
727
880
|
return weth9;
|
|
728
881
|
}
|
|
729
882
|
static onChain(chainId) {
|
|
@@ -1532,7 +1685,7 @@ var Fetcher = class {
|
|
|
1532
1685
|
* @param provider the provider to use to fetch the data
|
|
1533
1686
|
*/
|
|
1534
1687
|
static async fetchPairData(tokenA, tokenB, publicClient = getDefaultClient(tokenA.chainId)) {
|
|
1535
|
-
|
|
1688
|
+
invariant5__default.default(tokenA.chainId === tokenB.chainId, "CHAIN_ID");
|
|
1536
1689
|
const address = Pair.getAddress(tokenA, tokenB);
|
|
1537
1690
|
const pairContract = viem.getContract({
|
|
1538
1691
|
abi: pancakePairV2ABI,
|
|
@@ -1559,6 +1712,7 @@ exports.INIT_CODE_HASH_MAP = INIT_CODE_HASH_MAP;
|
|
|
1559
1712
|
exports.NATIVE = NATIVE;
|
|
1560
1713
|
exports.Native = Native;
|
|
1561
1714
|
exports.ONE_HUNDRED_PERCENT = ONE_HUNDRED_PERCENT;
|
|
1715
|
+
exports.OnRampCurrency = OnRampCurrency;
|
|
1562
1716
|
exports.Pair = Pair;
|
|
1563
1717
|
exports.Route = Route;
|
|
1564
1718
|
exports.Router = Router;
|
package/dist/index.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Percent, Token, Price, ZERO, InsufficientReservesError, _9975, _10000, CurrencyAmount, InsufficientInputAmountError, ONE, sqrt, MINIMUM_LIQUIDITY, TradeType, computePriceImpact, Fraction, sortedInsert, NativeCurrency, FIVE } from '@pancakeswap/swap-sdk-core';
|
|
1
|
+
import { Percent, Token, BaseCurrency, Price, ZERO, InsufficientReservesError, _9975, _10000, CurrencyAmount, InsufficientInputAmountError, ONE, sqrt, MINIMUM_LIQUIDITY, TradeType, computePriceImpact, Fraction, sortedInsert, NativeCurrency, FIVE } from '@pancakeswap/swap-sdk-core';
|
|
2
2
|
export * from '@pancakeswap/swap-sdk-core';
|
|
3
|
+
import invariant5 from 'tiny-invariant';
|
|
3
4
|
import { createPublicClient, http, getAddress, keccak256, encodePacked, getContract, toBytes, pad, isBytes, slice, concat } from 'viem';
|
|
4
|
-
import invariant4 from 'tiny-invariant';
|
|
5
5
|
import warning from 'tiny-warning';
|
|
6
6
|
import { mainnet, bsc, bscTestnet, goerli } from 'viem/chains';
|
|
7
7
|
|
|
@@ -12,7 +12,7 @@ function validateAndParseAddress(address) {
|
|
|
12
12
|
warning(address === checksummedAddress, `${address} is not checksummed.`);
|
|
13
13
|
return checksummedAddress;
|
|
14
14
|
} catch (error) {
|
|
15
|
-
|
|
15
|
+
invariant5(false, `${address} is not a valid address.`);
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
|
|
@@ -22,6 +22,51 @@ var ERC20Token = class extends Token {
|
|
|
22
22
|
super(chainId, validateAndParseAddress(address), decimals, symbol, name, projectLink);
|
|
23
23
|
}
|
|
24
24
|
};
|
|
25
|
+
var OnRampCurrency = class extends BaseCurrency {
|
|
26
|
+
constructor(chainId, address, decimals, symbol, name, projectLink) {
|
|
27
|
+
super(chainId, decimals, symbol, name);
|
|
28
|
+
this.address = address;
|
|
29
|
+
this.projectLink = projectLink;
|
|
30
|
+
this.isNative = address === "0x" && true;
|
|
31
|
+
this.isToken = address !== "0x" && true;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Returns true if the two tokens are equivalent, i.e. have the same chainId and address.
|
|
35
|
+
* @param other other token to compare
|
|
36
|
+
*/
|
|
37
|
+
equals(other) {
|
|
38
|
+
return other.isToken && this.chainId === other.chainId && this.address === other.address;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Returns true if the address of this token sorts before the address of the other token
|
|
42
|
+
* @param other other token to compare
|
|
43
|
+
* @throws if the tokens have the same address
|
|
44
|
+
* @throws if the tokens are on different chains
|
|
45
|
+
*/
|
|
46
|
+
sortsBefore(other) {
|
|
47
|
+
if (!other.isToken)
|
|
48
|
+
return false;
|
|
49
|
+
invariant5(this.chainId === other.chainId, "CHAIN_IDS");
|
|
50
|
+
invariant5(this.address !== other.address, "ADDRESSES");
|
|
51
|
+
return this.address.toLowerCase() < other.address.toLowerCase();
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Return this token, which does not need to be wrapped
|
|
55
|
+
*/
|
|
56
|
+
get wrapped() {
|
|
57
|
+
return this;
|
|
58
|
+
}
|
|
59
|
+
get serialize() {
|
|
60
|
+
return {
|
|
61
|
+
address: this.address,
|
|
62
|
+
chainId: this.chainId,
|
|
63
|
+
decimals: this.decimals,
|
|
64
|
+
symbol: this.symbol,
|
|
65
|
+
name: this.name,
|
|
66
|
+
projectLink: this.projectLink
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
};
|
|
25
70
|
|
|
26
71
|
// src/constants.ts
|
|
27
72
|
var ChainId = /* @__PURE__ */ ((ChainId3) => {
|
|
@@ -29,6 +74,13 @@ var ChainId = /* @__PURE__ */ ((ChainId3) => {
|
|
|
29
74
|
ChainId3[ChainId3["GOERLI"] = 5] = "GOERLI";
|
|
30
75
|
ChainId3[ChainId3["BSC"] = 56] = "BSC";
|
|
31
76
|
ChainId3[ChainId3["BSC_TESTNET"] = 97] = "BSC_TESTNET";
|
|
77
|
+
ChainId3[ChainId3["ZKSYNC_TESTNET"] = 280] = "ZKSYNC_TESTNET";
|
|
78
|
+
ChainId3[ChainId3["ZKSYNC"] = 324] = "ZKSYNC";
|
|
79
|
+
ChainId3[ChainId3["POLYGON_ZKEVM"] = 1101] = "POLYGON_ZKEVM";
|
|
80
|
+
ChainId3[ChainId3["POLYGON_ZKEVM_TESTNET"] = 1442] = "POLYGON_ZKEVM_TESTNET";
|
|
81
|
+
ChainId3[ChainId3["ARBITRUM_ONE"] = 42161] = "ARBITRUM_ONE";
|
|
82
|
+
ChainId3[ChainId3["ARBITRUM_GOERLI"] = 421613] = "ARBITRUM_GOERLI";
|
|
83
|
+
ChainId3[ChainId3["LINEA_TESTNET"] = 59140] = "LINEA_TESTNET";
|
|
32
84
|
return ChainId3;
|
|
33
85
|
})(ChainId || {});
|
|
34
86
|
var ZERO_PERCENT = new Percent("0");
|
|
@@ -39,7 +91,14 @@ var FACTORY_ADDRESS_MAP = {
|
|
|
39
91
|
[1 /* ETHEREUM */]: FACTORY_ADDRESS_ETH,
|
|
40
92
|
[5 /* GOERLI */]: FACTORY_ADDRESS_ETH,
|
|
41
93
|
[56 /* BSC */]: FACTORY_ADDRESS,
|
|
42
|
-
[97 /* BSC_TESTNET */]: "0x6725f303b657a9451d8ba641348b6761a6cc7a17"
|
|
94
|
+
[97 /* BSC_TESTNET */]: "0x6725f303b657a9451d8ba641348b6761a6cc7a17",
|
|
95
|
+
[42161 /* ARBITRUM_ONE */]: "0x02a84c1b3BBD7401a5f7fa98a384EBC70bB5749E",
|
|
96
|
+
[421613 /* ARBITRUM_GOERLI */]: "0x333EAE459075b1d7dE8eb57997b5d4eee5F1070a",
|
|
97
|
+
[1101 /* POLYGON_ZKEVM */]: "0x02a84c1b3BBD7401a5f7fa98a384EBC70bB5749E",
|
|
98
|
+
[1442 /* POLYGON_ZKEVM_TESTNET */]: "0xBA40c83026213F9cbc79998752721a0312bdB74a",
|
|
99
|
+
[324 /* ZKSYNC */]: "0x0F70cE1e2c0FB5FC3B67E13ed4F422fE82d832bD",
|
|
100
|
+
[280 /* ZKSYNC_TESTNET */]: "0x48a33610Cd0E130af2024D55F67aE72a8C51aC27",
|
|
101
|
+
[59140 /* LINEA_TESTNET */]: "0xB6FAfd4ADbCd21cF665909767e0eD0D05709abfB"
|
|
43
102
|
};
|
|
44
103
|
var INIT_CODE_HASH = "0x00fb7f630766e6a796048ea87d01acd3068e8ff67d078148a3fa3f4a84f69bd5";
|
|
45
104
|
var INIT_CODE_HASH_ETH = "0x57224589c67f3f30a6b0d7a1b54cf3153ab84563bc609ef41dfb34f8b2974d2d";
|
|
@@ -47,7 +106,14 @@ var INIT_CODE_HASH_MAP = {
|
|
|
47
106
|
[1 /* ETHEREUM */]: INIT_CODE_HASH_ETH,
|
|
48
107
|
[5 /* GOERLI */]: INIT_CODE_HASH_ETH,
|
|
49
108
|
[56 /* BSC */]: INIT_CODE_HASH,
|
|
50
|
-
[97 /* BSC_TESTNET */]: "0xd0d4c4cd0848c93cb4fd1f498d7013ee6bfb25783ea21593d5834f5d250ece66"
|
|
109
|
+
[97 /* BSC_TESTNET */]: "0xd0d4c4cd0848c93cb4fd1f498d7013ee6bfb25783ea21593d5834f5d250ece66",
|
|
110
|
+
[42161 /* ARBITRUM_ONE */]: INIT_CODE_HASH_ETH,
|
|
111
|
+
[421613 /* ARBITRUM_GOERLI */]: INIT_CODE_HASH_ETH,
|
|
112
|
+
[1101 /* POLYGON_ZKEVM */]: INIT_CODE_HASH_ETH,
|
|
113
|
+
[1442 /* POLYGON_ZKEVM_TESTNET */]: INIT_CODE_HASH_ETH,
|
|
114
|
+
[324 /* ZKSYNC */]: "0x0100045707a42494392b3558029b9869f865ff9df8f375dc1bf20b0555093f43",
|
|
115
|
+
[280 /* ZKSYNC_TESTNET */]: "0x0100045707a42494392b3558029b9869f865ff9df8f375dc1bf20b0555093f43",
|
|
116
|
+
[59140 /* LINEA_TESTNET */]: INIT_CODE_HASH_ETH
|
|
51
117
|
};
|
|
52
118
|
var WETH9 = {
|
|
53
119
|
[1 /* ETHEREUM */]: new ERC20Token(
|
|
@@ -81,6 +147,62 @@ var WETH9 = {
|
|
|
81
147
|
"ETH",
|
|
82
148
|
"ETH",
|
|
83
149
|
"https://ethereum.org"
|
|
150
|
+
),
|
|
151
|
+
[42161 /* ARBITRUM_ONE */]: new ERC20Token(
|
|
152
|
+
42161 /* ARBITRUM_ONE */,
|
|
153
|
+
"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",
|
|
154
|
+
18,
|
|
155
|
+
"WETH",
|
|
156
|
+
"Wrapped Ether",
|
|
157
|
+
"https://weth.io"
|
|
158
|
+
),
|
|
159
|
+
[421613 /* ARBITRUM_GOERLI */]: new ERC20Token(
|
|
160
|
+
421613 /* ARBITRUM_GOERLI */,
|
|
161
|
+
"0xEe01c0CD76354C383B8c7B4e65EA88D00B06f36f",
|
|
162
|
+
18,
|
|
163
|
+
"WETH",
|
|
164
|
+
"Wrapped Ether",
|
|
165
|
+
"https://weth.io"
|
|
166
|
+
),
|
|
167
|
+
[324 /* ZKSYNC */]: new ERC20Token(
|
|
168
|
+
324 /* ZKSYNC */,
|
|
169
|
+
"0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91",
|
|
170
|
+
18,
|
|
171
|
+
"WETH",
|
|
172
|
+
"Wrapped Ether",
|
|
173
|
+
"https://weth.io"
|
|
174
|
+
),
|
|
175
|
+
[280 /* ZKSYNC_TESTNET */]: new ERC20Token(
|
|
176
|
+
280 /* ZKSYNC_TESTNET */,
|
|
177
|
+
"0x02968DB286f24cB18bB5b24903eC8eBFAcf591C0",
|
|
178
|
+
18,
|
|
179
|
+
"WETH",
|
|
180
|
+
"Wrapped Ether",
|
|
181
|
+
"https://weth.io"
|
|
182
|
+
),
|
|
183
|
+
[1101 /* POLYGON_ZKEVM */]: new ERC20Token(
|
|
184
|
+
1101 /* POLYGON_ZKEVM */,
|
|
185
|
+
"0x4F9A0e7FD2Bf6067db6994CF12E4495Df938E6e9",
|
|
186
|
+
18,
|
|
187
|
+
"WETH",
|
|
188
|
+
"Wrapped Ether",
|
|
189
|
+
"https://weth.io"
|
|
190
|
+
),
|
|
191
|
+
[1442 /* POLYGON_ZKEVM_TESTNET */]: new ERC20Token(
|
|
192
|
+
1442 /* POLYGON_ZKEVM_TESTNET */,
|
|
193
|
+
"0x30ec47F7DFae72eA79646e6cf64a8A7db538915b",
|
|
194
|
+
18,
|
|
195
|
+
"WETH",
|
|
196
|
+
"Wrapped Ether",
|
|
197
|
+
"https://weth.io"
|
|
198
|
+
),
|
|
199
|
+
[59140 /* LINEA_TESTNET */]: new ERC20Token(
|
|
200
|
+
59140 /* LINEA_TESTNET */,
|
|
201
|
+
"0x2C1b868d6596a18e32E61B901E4060C872647b6C",
|
|
202
|
+
18,
|
|
203
|
+
"WETH",
|
|
204
|
+
"Wrapped Ether",
|
|
205
|
+
"https://weth.io"
|
|
84
206
|
)
|
|
85
207
|
};
|
|
86
208
|
var WBNB = {
|
|
@@ -113,10 +235,18 @@ var WNATIVE = {
|
|
|
113
235
|
[1 /* ETHEREUM */]: WETH9[1 /* ETHEREUM */],
|
|
114
236
|
[5 /* GOERLI */]: WETH9[5 /* GOERLI */],
|
|
115
237
|
[56 /* BSC */]: WBNB[56 /* BSC */],
|
|
116
|
-
[97 /* BSC_TESTNET */]: WBNB[97 /* BSC_TESTNET */]
|
|
238
|
+
[97 /* BSC_TESTNET */]: WBNB[97 /* BSC_TESTNET */],
|
|
239
|
+
[42161 /* ARBITRUM_ONE */]: WETH9[42161 /* ARBITRUM_ONE */],
|
|
240
|
+
[421613 /* ARBITRUM_GOERLI */]: WETH9[421613 /* ARBITRUM_GOERLI */],
|
|
241
|
+
[1101 /* POLYGON_ZKEVM */]: WETH9[1101 /* POLYGON_ZKEVM */],
|
|
242
|
+
[1442 /* POLYGON_ZKEVM_TESTNET */]: WETH9[1442 /* POLYGON_ZKEVM_TESTNET */],
|
|
243
|
+
[324 /* ZKSYNC */]: WETH9[324 /* ZKSYNC */],
|
|
244
|
+
[280 /* ZKSYNC_TESTNET */]: WETH9[280 /* ZKSYNC_TESTNET */],
|
|
245
|
+
[59140 /* LINEA_TESTNET */]: WETH9[59140 /* LINEA_TESTNET */]
|
|
117
246
|
};
|
|
247
|
+
var ETHER = { name: "Ether", symbol: "ETH", decimals: 18 };
|
|
118
248
|
var NATIVE = {
|
|
119
|
-
[1 /* ETHEREUM */]:
|
|
249
|
+
[1 /* ETHEREUM */]: ETHER,
|
|
120
250
|
[5 /* GOERLI */]: { name: "Goerli Ether", symbol: "GOR", decimals: 18 },
|
|
121
251
|
[56 /* BSC */]: {
|
|
122
252
|
name: "Binance Chain Native Token",
|
|
@@ -127,7 +257,18 @@ var NATIVE = {
|
|
|
127
257
|
name: "Binance Chain Native Token",
|
|
128
258
|
symbol: "tBNB",
|
|
129
259
|
decimals: 18
|
|
130
|
-
}
|
|
260
|
+
},
|
|
261
|
+
[42161 /* ARBITRUM_ONE */]: ETHER,
|
|
262
|
+
[421613 /* ARBITRUM_GOERLI */]: {
|
|
263
|
+
name: "Arbitrum Goerli Ether",
|
|
264
|
+
symbol: "AGOR",
|
|
265
|
+
decimals: 18
|
|
266
|
+
},
|
|
267
|
+
[1101 /* POLYGON_ZKEVM */]: ETHER,
|
|
268
|
+
[1442 /* POLYGON_ZKEVM_TESTNET */]: ETHER,
|
|
269
|
+
[324 /* ZKSYNC */]: ETHER,
|
|
270
|
+
[280 /* ZKSYNC_TESTNET */]: ETHER,
|
|
271
|
+
[59140 /* LINEA_TESTNET */]: ETHER
|
|
131
272
|
};
|
|
132
273
|
|
|
133
274
|
// src/trade.ts
|
|
@@ -155,6 +296,13 @@ function getCreate2Address(from_, salt_, initCodeHash) {
|
|
|
155
296
|
});
|
|
156
297
|
return getAddress(slice(keccak256(concat([toBytes("0xff"), from, salt, toBytes(initCodeHash)])), 12));
|
|
157
298
|
}
|
|
299
|
+
var EMPTY_INPU_HASH = "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470";
|
|
300
|
+
var ZKSYNC_PREFIX = "0x2020dba91b30cc0006188af794c2fb30dd8520db7e2c088b7fc7c103c00ca494";
|
|
301
|
+
function getCreate2AddressZkSync(from, salt, initCodeHash) {
|
|
302
|
+
return getAddress(
|
|
303
|
+
`0x${keccak256(concat([ZKSYNC_PREFIX, pad(from, { size: 32 }), salt, initCodeHash, EMPTY_INPU_HASH])).slice(26)}`
|
|
304
|
+
);
|
|
305
|
+
}
|
|
158
306
|
var computePairAddress = ({
|
|
159
307
|
factoryAddress,
|
|
160
308
|
tokenA,
|
|
@@ -163,9 +311,10 @@ var computePairAddress = ({
|
|
|
163
311
|
const [token0, token1] = tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA];
|
|
164
312
|
const key = composeKey(token0, token1);
|
|
165
313
|
if (PAIR_ADDRESS_CACHE?.[key] === void 0) {
|
|
314
|
+
const getCreate2Address_ = token0.chainId === 280 /* ZKSYNC_TESTNET */ || token1.chainId === 324 /* ZKSYNC */ ? getCreate2AddressZkSync : getCreate2Address;
|
|
166
315
|
PAIR_ADDRESS_CACHE = {
|
|
167
316
|
...PAIR_ADDRESS_CACHE,
|
|
168
|
-
[key]:
|
|
317
|
+
[key]: getCreate2Address_(
|
|
169
318
|
factoryAddress,
|
|
170
319
|
keccak256(encodePacked(["address", "address"], [token0.address, token1.address])),
|
|
171
320
|
INIT_CODE_HASH_MAP[token0.chainId]
|
|
@@ -176,7 +325,11 @@ var computePairAddress = ({
|
|
|
176
325
|
};
|
|
177
326
|
var Pair = class {
|
|
178
327
|
static getAddress(tokenA, tokenB) {
|
|
179
|
-
return computePairAddress({
|
|
328
|
+
return computePairAddress({
|
|
329
|
+
factoryAddress: FACTORY_ADDRESS_MAP[tokenA.chainId],
|
|
330
|
+
tokenA,
|
|
331
|
+
tokenB
|
|
332
|
+
});
|
|
180
333
|
}
|
|
181
334
|
constructor(currencyAmountA, tokenAmountB) {
|
|
182
335
|
const tokenAmounts = currencyAmountA.currency.sortsBefore(tokenAmountB.currency) ? [currencyAmountA, tokenAmountB] : [tokenAmountB, currencyAmountA];
|
|
@@ -215,7 +368,7 @@ var Pair = class {
|
|
|
215
368
|
* @param token token to return price of
|
|
216
369
|
*/
|
|
217
370
|
priceOf(token) {
|
|
218
|
-
|
|
371
|
+
invariant5(this.involvesToken(token), "TOKEN");
|
|
219
372
|
return token.equals(this.token0) ? this.token0Price : this.token1Price;
|
|
220
373
|
}
|
|
221
374
|
/**
|
|
@@ -237,11 +390,11 @@ var Pair = class {
|
|
|
237
390
|
return this.tokenAmounts[1];
|
|
238
391
|
}
|
|
239
392
|
reserveOf(token) {
|
|
240
|
-
|
|
393
|
+
invariant5(this.involvesToken(token), "TOKEN");
|
|
241
394
|
return token.equals(this.token0) ? this.reserve0 : this.reserve1;
|
|
242
395
|
}
|
|
243
396
|
getOutputAmount(inputAmount) {
|
|
244
|
-
|
|
397
|
+
invariant5(this.involvesToken(inputAmount.currency), "TOKEN");
|
|
245
398
|
if (this.reserve0.quotient === ZERO || this.reserve1.quotient === ZERO) {
|
|
246
399
|
throw new InsufficientReservesError();
|
|
247
400
|
}
|
|
@@ -260,7 +413,7 @@ var Pair = class {
|
|
|
260
413
|
return [outputAmount, new Pair(inputReserve.add(inputAmount), outputReserve.subtract(outputAmount))];
|
|
261
414
|
}
|
|
262
415
|
getInputAmount(outputAmount) {
|
|
263
|
-
|
|
416
|
+
invariant5(this.involvesToken(outputAmount.currency), "TOKEN");
|
|
264
417
|
if (this.reserve0.quotient === ZERO || this.reserve1.quotient === ZERO || outputAmount.quotient >= this.reserveOf(outputAmount.currency).quotient) {
|
|
265
418
|
throw new InsufficientReservesError();
|
|
266
419
|
}
|
|
@@ -275,9 +428,9 @@ var Pair = class {
|
|
|
275
428
|
return [inputAmount, new Pair(inputReserve.add(inputAmount), outputReserve.subtract(outputAmount))];
|
|
276
429
|
}
|
|
277
430
|
getLiquidityMinted(totalSupply, tokenAmountA, tokenAmountB) {
|
|
278
|
-
|
|
431
|
+
invariant5(totalSupply.currency.equals(this.liquidityToken), "LIQUIDITY");
|
|
279
432
|
const tokenAmounts = tokenAmountA.currency.sortsBefore(tokenAmountB.currency) ? [tokenAmountA, tokenAmountB] : [tokenAmountB, tokenAmountA];
|
|
280
|
-
|
|
433
|
+
invariant5(tokenAmounts[0].currency.equals(this.token0) && tokenAmounts[1].currency.equals(this.token1), "TOKEN");
|
|
281
434
|
let liquidity;
|
|
282
435
|
if (totalSupply.quotient === ZERO) {
|
|
283
436
|
liquidity = sqrt(tokenAmounts[0].quotient * tokenAmounts[1].quotient) - MINIMUM_LIQUIDITY;
|
|
@@ -292,15 +445,15 @@ var Pair = class {
|
|
|
292
445
|
return CurrencyAmount.fromRawAmount(this.liquidityToken, liquidity);
|
|
293
446
|
}
|
|
294
447
|
getLiquidityValue(token, totalSupply, liquidity, feeOn = false, kLast) {
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
448
|
+
invariant5(this.involvesToken(token), "TOKEN");
|
|
449
|
+
invariant5(totalSupply.currency.equals(this.liquidityToken), "TOTAL_SUPPLY");
|
|
450
|
+
invariant5(liquidity.currency.equals(this.liquidityToken), "LIQUIDITY");
|
|
451
|
+
invariant5(liquidity.quotient <= totalSupply.quotient, "LIQUIDITY");
|
|
299
452
|
let totalSupplyAdjusted;
|
|
300
453
|
if (!feeOn) {
|
|
301
454
|
totalSupplyAdjusted = totalSupply;
|
|
302
455
|
} else {
|
|
303
|
-
|
|
456
|
+
invariant5(!!kLast, "K_LAST");
|
|
304
457
|
const kLastParsed = BigInt(kLast);
|
|
305
458
|
if (!(kLastParsed === ZERO)) {
|
|
306
459
|
const rootK = sqrt(this.reserve0.quotient * this.reserve1.quotient);
|
|
@@ -326,19 +479,19 @@ var Pair = class {
|
|
|
326
479
|
var Route = class {
|
|
327
480
|
constructor(pairs, input, output) {
|
|
328
481
|
this._midPrice = null;
|
|
329
|
-
|
|
482
|
+
invariant5(pairs.length > 0, "PAIRS");
|
|
330
483
|
const { chainId } = pairs[0];
|
|
331
|
-
|
|
484
|
+
invariant5(
|
|
332
485
|
pairs.every((pair) => pair.chainId === chainId),
|
|
333
486
|
"CHAIN_IDS"
|
|
334
487
|
);
|
|
335
488
|
const wrappedInput = input.wrapped;
|
|
336
|
-
|
|
337
|
-
|
|
489
|
+
invariant5(pairs[0].involvesToken(wrappedInput), "INPUT");
|
|
490
|
+
invariant5(typeof output === "undefined" || pairs[pairs.length - 1].involvesToken(output.wrapped), "OUTPUT");
|
|
338
491
|
const path = [wrappedInput];
|
|
339
492
|
for (const [i, pair] of pairs.entries()) {
|
|
340
493
|
const currentInput = path[i];
|
|
341
|
-
|
|
494
|
+
invariant5(currentInput.equals(pair.token0) || currentInput.equals(pair.token1), "PATH");
|
|
342
495
|
const output2 = currentInput.equals(pair.token0) ? pair.token1 : pair.token0;
|
|
343
496
|
path.push(output2);
|
|
344
497
|
}
|
|
@@ -364,8 +517,8 @@ var Route = class {
|
|
|
364
517
|
}
|
|
365
518
|
};
|
|
366
519
|
function inputOutputComparator(a, b) {
|
|
367
|
-
|
|
368
|
-
|
|
520
|
+
invariant5(a.inputAmount.currency.equals(b.inputAmount.currency), "INPUT_CURRENCY");
|
|
521
|
+
invariant5(a.outputAmount.currency.equals(b.outputAmount.currency), "OUTPUT_CURRENCY");
|
|
369
522
|
if (a.outputAmount.equalTo(b.outputAmount)) {
|
|
370
523
|
if (a.inputAmount.equalTo(b.inputAmount)) {
|
|
371
524
|
return 0;
|
|
@@ -415,7 +568,7 @@ var Trade = class {
|
|
|
415
568
|
this.tradeType = tradeType;
|
|
416
569
|
const tokenAmounts = new Array(route.path.length);
|
|
417
570
|
if (tradeType === TradeType.EXACT_INPUT) {
|
|
418
|
-
|
|
571
|
+
invariant5(amount.currency.equals(route.input), "INPUT");
|
|
419
572
|
tokenAmounts[0] = amount.wrapped;
|
|
420
573
|
for (let i = 0; i < route.path.length - 1; i++) {
|
|
421
574
|
const pair = route.pairs[i];
|
|
@@ -429,7 +582,7 @@ var Trade = class {
|
|
|
429
582
|
tokenAmounts[tokenAmounts.length - 1].denominator
|
|
430
583
|
);
|
|
431
584
|
} else {
|
|
432
|
-
|
|
585
|
+
invariant5(amount.currency.equals(route.output), "OUTPUT");
|
|
433
586
|
tokenAmounts[tokenAmounts.length - 1] = amount.wrapped;
|
|
434
587
|
for (let i = route.path.length - 1; i > 0; i--) {
|
|
435
588
|
const pair = route.pairs[i - 1];
|
|
@@ -456,7 +609,7 @@ var Trade = class {
|
|
|
456
609
|
* @param slippageTolerance tolerance of unfavorable slippage from the execution price of this trade
|
|
457
610
|
*/
|
|
458
611
|
minimumAmountOut(slippageTolerance) {
|
|
459
|
-
|
|
612
|
+
invariant5(!slippageTolerance.lessThan(ZERO), "SLIPPAGE_TOLERANCE");
|
|
460
613
|
if (this.tradeType === TradeType.EXACT_OUTPUT) {
|
|
461
614
|
return this.outputAmount;
|
|
462
615
|
}
|
|
@@ -468,7 +621,7 @@ var Trade = class {
|
|
|
468
621
|
* @param slippageTolerance tolerance of unfavorable slippage from the execution price of this trade
|
|
469
622
|
*/
|
|
470
623
|
maximumAmountIn(slippageTolerance) {
|
|
471
|
-
|
|
624
|
+
invariant5(!slippageTolerance.lessThan(ZERO), "SLIPPAGE_TOLERANCE");
|
|
472
625
|
if (this.tradeType === TradeType.EXACT_INPUT) {
|
|
473
626
|
return this.inputAmount;
|
|
474
627
|
}
|
|
@@ -490,9 +643,9 @@ var Trade = class {
|
|
|
490
643
|
* @param bestTrades used in recursion; the current list of best trades
|
|
491
644
|
*/
|
|
492
645
|
static bestTradeExactIn(pairs, currencyAmountIn, currencyOut, { maxNumResults = 3, maxHops = 3 } = {}, currentPairs = [], nextAmountIn = currencyAmountIn, bestTrades = []) {
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
646
|
+
invariant5(pairs.length > 0, "PAIRS");
|
|
647
|
+
invariant5(maxHops > 0, "MAX_HOPS");
|
|
648
|
+
invariant5(currencyAmountIn === nextAmountIn || currentPairs.length > 0, "INVALID_RECURSION");
|
|
496
649
|
const amountIn = nextAmountIn.wrapped;
|
|
497
650
|
const tokenOut = currencyOut.wrapped;
|
|
498
651
|
for (let i = 0; i < pairs.length; i++) {
|
|
@@ -568,9 +721,9 @@ var Trade = class {
|
|
|
568
721
|
* @param bestTrades used in recursion; the current list of best trades
|
|
569
722
|
*/
|
|
570
723
|
static bestTradeExactOut(pairs, currencyIn, currencyAmountOut, { maxNumResults = 3, maxHops = 3 } = {}, currentPairs = [], nextAmountOut = currencyAmountOut, bestTrades = []) {
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
724
|
+
invariant5(pairs.length > 0, "PAIRS");
|
|
725
|
+
invariant5(maxHops > 0, "MAX_HOPS");
|
|
726
|
+
invariant5(currencyAmountOut === nextAmountOut || currentPairs.length > 0, "INVALID_RECURSION");
|
|
574
727
|
const amountOut = nextAmountOut.wrapped;
|
|
575
728
|
const tokenIn = currencyIn.wrapped;
|
|
576
729
|
for (let i = 0; i < pairs.length; i++) {
|
|
@@ -630,14 +783,14 @@ var _Native = class extends NativeCurrency {
|
|
|
630
783
|
}
|
|
631
784
|
get wrapped() {
|
|
632
785
|
const wnative = WNATIVE[this.chainId];
|
|
633
|
-
|
|
786
|
+
invariant5(!!wnative, "WRAPPED");
|
|
634
787
|
return wnative;
|
|
635
788
|
}
|
|
636
789
|
static onChain(chainId) {
|
|
637
790
|
if (chainId in this.cache) {
|
|
638
791
|
return this.cache[chainId];
|
|
639
792
|
}
|
|
640
|
-
|
|
793
|
+
invariant5(!!NATIVE[chainId], "NATIVE_CURRENCY");
|
|
641
794
|
const { decimals, name, symbol } = NATIVE[chainId];
|
|
642
795
|
return this.cache[chainId] = new _Native({ chainId, decimals, symbol, name });
|
|
643
796
|
}
|
|
@@ -660,8 +813,8 @@ var Router = class {
|
|
|
660
813
|
static swapCallParameters(trade, options) {
|
|
661
814
|
const etherIn = trade.inputAmount.currency.isNative;
|
|
662
815
|
const etherOut = trade.outputAmount.currency.isNative;
|
|
663
|
-
|
|
664
|
-
|
|
816
|
+
invariant5(!(etherIn && etherOut), "ETHER_IN_OUT");
|
|
817
|
+
invariant5(!("ttl" in options) || options.ttl > 0, "TTL");
|
|
665
818
|
const to = validateAndParseAddress(options.recipient);
|
|
666
819
|
const amountIn = toHex(trade.maximumAmountIn(options.allowedSlippage));
|
|
667
820
|
const amountOut = toHex(trade.minimumAmountOut(options.allowedSlippage));
|
|
@@ -688,7 +841,7 @@ var Router = class {
|
|
|
688
841
|
}
|
|
689
842
|
break;
|
|
690
843
|
case TradeType.EXACT_OUTPUT:
|
|
691
|
-
|
|
844
|
+
invariant5(!useFeeOnTransfer, "EXACT_OUT_FOT");
|
|
692
845
|
if (etherIn) {
|
|
693
846
|
methodName = "swapETHForExactTokens";
|
|
694
847
|
args = [amountOut, path, to, deadline];
|
|
@@ -717,7 +870,7 @@ var _Ether = class extends NativeCurrency {
|
|
|
717
870
|
}
|
|
718
871
|
get wrapped() {
|
|
719
872
|
const weth9 = WETH9[this.chainId];
|
|
720
|
-
|
|
873
|
+
invariant5(!!weth9, "WRAPPED");
|
|
721
874
|
return weth9;
|
|
722
875
|
}
|
|
723
876
|
static onChain(chainId) {
|
|
@@ -1526,7 +1679,7 @@ var Fetcher = class {
|
|
|
1526
1679
|
* @param provider the provider to use to fetch the data
|
|
1527
1680
|
*/
|
|
1528
1681
|
static async fetchPairData(tokenA, tokenB, publicClient = getDefaultClient(tokenA.chainId)) {
|
|
1529
|
-
|
|
1682
|
+
invariant5(tokenA.chainId === tokenB.chainId, "CHAIN_ID");
|
|
1530
1683
|
const address = Pair.getAddress(tokenA, tokenB);
|
|
1531
1684
|
const pairContract = getContract({
|
|
1532
1685
|
abi: pancakePairV2ABI,
|
|
@@ -1542,4 +1695,4 @@ var Fetcher = class {
|
|
|
1542
1695
|
}
|
|
1543
1696
|
};
|
|
1544
1697
|
|
|
1545
|
-
export { ChainId, ERC20Token, Ether, FACTORY_ADDRESS, FACTORY_ADDRESS_MAP, Fetcher, INIT_CODE_HASH, INIT_CODE_HASH_MAP, NATIVE, Native, ONE_HUNDRED_PERCENT, Pair, Route, Router, Trade, WBNB, WETH9, WNATIVE, ZERO_PERCENT, computePairAddress, inputOutputComparator, isTradeBetter, pancakePairV2ABI, tradeComparator, validateAndParseAddress };
|
|
1698
|
+
export { ChainId, ERC20Token, Ether, FACTORY_ADDRESS, FACTORY_ADDRESS_MAP, Fetcher, INIT_CODE_HASH, INIT_CODE_HASH_MAP, NATIVE, Native, ONE_HUNDRED_PERCENT, OnRampCurrency, Pair, Route, Router, Trade, WBNB, WETH9, WNATIVE, ZERO_PERCENT, computePairAddress, inputOutputComparator, isTradeBetter, pancakePairV2ABI, tradeComparator, validateAndParseAddress };
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pancakeswap/sdk",
|
|
3
3
|
"license": "MIT",
|
|
4
|
-
"version": "5.
|
|
4
|
+
"version": "5.2.0",
|
|
5
5
|
"description": "🛠 An SDK for building applications on top of Pancakeswap.",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"typings": "dist/index.d.ts",
|
|
@@ -27,17 +27,15 @@
|
|
|
27
27
|
"./package.json": "./package.json"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"viem": "^1.0.7",
|
|
31
30
|
"big.js": "^5.2.2",
|
|
32
31
|
"decimal.js-light": "^2.5.0",
|
|
33
32
|
"tiny-invariant": "^1.1.0",
|
|
34
33
|
"tiny-warning": "^1.0.3",
|
|
35
34
|
"toformat": "^2.0.0",
|
|
35
|
+
"viem": "^1.2.9",
|
|
36
36
|
"@pancakeswap/swap-sdk-core": "1.0.0"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@swc/core": "^1.2.215",
|
|
40
|
-
"@swc/jest": "^0.2.21",
|
|
41
39
|
"@types/big.js": "^4.0.5",
|
|
42
40
|
"tsup": "^6.7.0"
|
|
43
41
|
},
|