@pancakeswap/sdk 5.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/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 +200 -45
- package/dist/index.mjs +200 -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: "0x1cb011040b91cd937ddff2327f17c9690653b05b6506e830baadf2493468d657";
|
|
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;;;;;;;;;;;;CAaW,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,15 @@ 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
|
+
// TODO: new chains
|
|
121
|
+
[324 /* ZKSYNC */]: "0x1cb011040b91cd937ddff2327f17c9690653b05b6506e830baadf2493468d657",
|
|
122
|
+
[280 /* ZKSYNC_TESTNET */]: "0x0100045707a42494392b3558029b9869f865ff9df8f375dc1bf20b0555093f43",
|
|
123
|
+
[59140 /* LINEA_TESTNET */]: INIT_CODE_HASH_ETH
|
|
57
124
|
};
|
|
58
125
|
var WETH9 = {
|
|
59
126
|
[1 /* ETHEREUM */]: new ERC20Token(
|
|
@@ -87,6 +154,62 @@ var WETH9 = {
|
|
|
87
154
|
"ETH",
|
|
88
155
|
"ETH",
|
|
89
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"
|
|
90
213
|
)
|
|
91
214
|
};
|
|
92
215
|
var WBNB = {
|
|
@@ -119,10 +242,18 @@ var WNATIVE = {
|
|
|
119
242
|
[1 /* ETHEREUM */]: WETH9[1 /* ETHEREUM */],
|
|
120
243
|
[5 /* GOERLI */]: WETH9[5 /* GOERLI */],
|
|
121
244
|
[56 /* BSC */]: WBNB[56 /* BSC */],
|
|
122
|
-
[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 */]
|
|
123
253
|
};
|
|
254
|
+
var ETHER = { name: "Ether", symbol: "ETH", decimals: 18 };
|
|
124
255
|
var NATIVE = {
|
|
125
|
-
[1 /* ETHEREUM */]:
|
|
256
|
+
[1 /* ETHEREUM */]: ETHER,
|
|
126
257
|
[5 /* GOERLI */]: { name: "Goerli Ether", symbol: "GOR", decimals: 18 },
|
|
127
258
|
[56 /* BSC */]: {
|
|
128
259
|
name: "Binance Chain Native Token",
|
|
@@ -133,7 +264,18 @@ var NATIVE = {
|
|
|
133
264
|
name: "Binance Chain Native Token",
|
|
134
265
|
symbol: "tBNB",
|
|
135
266
|
decimals: 18
|
|
136
|
-
}
|
|
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
|
|
137
279
|
};
|
|
138
280
|
|
|
139
281
|
// src/trade.ts
|
|
@@ -161,6 +303,13 @@ function getCreate2Address(from_, salt_, initCodeHash) {
|
|
|
161
303
|
});
|
|
162
304
|
return viem.getAddress(viem.slice(viem.keccak256(viem.concat([viem.toBytes("0xff"), from, salt, viem.toBytes(initCodeHash)])), 12));
|
|
163
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
|
+
}
|
|
164
313
|
var computePairAddress = ({
|
|
165
314
|
factoryAddress,
|
|
166
315
|
tokenA,
|
|
@@ -169,9 +318,10 @@ var computePairAddress = ({
|
|
|
169
318
|
const [token0, token1] = tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA];
|
|
170
319
|
const key = composeKey(token0, token1);
|
|
171
320
|
if (PAIR_ADDRESS_CACHE?.[key] === void 0) {
|
|
321
|
+
const getCreate2Address_ = token0.chainId === 280 /* ZKSYNC_TESTNET */ || token1.chainId === 324 /* ZKSYNC */ ? getCreate2AddressZkSync : getCreate2Address;
|
|
172
322
|
PAIR_ADDRESS_CACHE = {
|
|
173
323
|
...PAIR_ADDRESS_CACHE,
|
|
174
|
-
[key]:
|
|
324
|
+
[key]: getCreate2Address_(
|
|
175
325
|
factoryAddress,
|
|
176
326
|
viem.keccak256(viem.encodePacked(["address", "address"], [token0.address, token1.address])),
|
|
177
327
|
INIT_CODE_HASH_MAP[token0.chainId]
|
|
@@ -182,7 +332,11 @@ var computePairAddress = ({
|
|
|
182
332
|
};
|
|
183
333
|
var Pair = class {
|
|
184
334
|
static getAddress(tokenA, tokenB) {
|
|
185
|
-
return computePairAddress({
|
|
335
|
+
return computePairAddress({
|
|
336
|
+
factoryAddress: FACTORY_ADDRESS_MAP[tokenA.chainId],
|
|
337
|
+
tokenA,
|
|
338
|
+
tokenB
|
|
339
|
+
});
|
|
186
340
|
}
|
|
187
341
|
constructor(currencyAmountA, tokenAmountB) {
|
|
188
342
|
const tokenAmounts = currencyAmountA.currency.sortsBefore(tokenAmountB.currency) ? [currencyAmountA, tokenAmountB] : [tokenAmountB, currencyAmountA];
|
|
@@ -221,7 +375,7 @@ var Pair = class {
|
|
|
221
375
|
* @param token token to return price of
|
|
222
376
|
*/
|
|
223
377
|
priceOf(token) {
|
|
224
|
-
|
|
378
|
+
invariant5__default.default(this.involvesToken(token), "TOKEN");
|
|
225
379
|
return token.equals(this.token0) ? this.token0Price : this.token1Price;
|
|
226
380
|
}
|
|
227
381
|
/**
|
|
@@ -243,11 +397,11 @@ var Pair = class {
|
|
|
243
397
|
return this.tokenAmounts[1];
|
|
244
398
|
}
|
|
245
399
|
reserveOf(token) {
|
|
246
|
-
|
|
400
|
+
invariant5__default.default(this.involvesToken(token), "TOKEN");
|
|
247
401
|
return token.equals(this.token0) ? this.reserve0 : this.reserve1;
|
|
248
402
|
}
|
|
249
403
|
getOutputAmount(inputAmount) {
|
|
250
|
-
|
|
404
|
+
invariant5__default.default(this.involvesToken(inputAmount.currency), "TOKEN");
|
|
251
405
|
if (this.reserve0.quotient === swapSdkCore.ZERO || this.reserve1.quotient === swapSdkCore.ZERO) {
|
|
252
406
|
throw new swapSdkCore.InsufficientReservesError();
|
|
253
407
|
}
|
|
@@ -266,7 +420,7 @@ var Pair = class {
|
|
|
266
420
|
return [outputAmount, new Pair(inputReserve.add(inputAmount), outputReserve.subtract(outputAmount))];
|
|
267
421
|
}
|
|
268
422
|
getInputAmount(outputAmount) {
|
|
269
|
-
|
|
423
|
+
invariant5__default.default(this.involvesToken(outputAmount.currency), "TOKEN");
|
|
270
424
|
if (this.reserve0.quotient === swapSdkCore.ZERO || this.reserve1.quotient === swapSdkCore.ZERO || outputAmount.quotient >= this.reserveOf(outputAmount.currency).quotient) {
|
|
271
425
|
throw new swapSdkCore.InsufficientReservesError();
|
|
272
426
|
}
|
|
@@ -281,9 +435,9 @@ var Pair = class {
|
|
|
281
435
|
return [inputAmount, new Pair(inputReserve.add(inputAmount), outputReserve.subtract(outputAmount))];
|
|
282
436
|
}
|
|
283
437
|
getLiquidityMinted(totalSupply, tokenAmountA, tokenAmountB) {
|
|
284
|
-
|
|
438
|
+
invariant5__default.default(totalSupply.currency.equals(this.liquidityToken), "LIQUIDITY");
|
|
285
439
|
const tokenAmounts = tokenAmountA.currency.sortsBefore(tokenAmountB.currency) ? [tokenAmountA, tokenAmountB] : [tokenAmountB, tokenAmountA];
|
|
286
|
-
|
|
440
|
+
invariant5__default.default(tokenAmounts[0].currency.equals(this.token0) && tokenAmounts[1].currency.equals(this.token1), "TOKEN");
|
|
287
441
|
let liquidity;
|
|
288
442
|
if (totalSupply.quotient === swapSdkCore.ZERO) {
|
|
289
443
|
liquidity = swapSdkCore.sqrt(tokenAmounts[0].quotient * tokenAmounts[1].quotient) - swapSdkCore.MINIMUM_LIQUIDITY;
|
|
@@ -298,15 +452,15 @@ var Pair = class {
|
|
|
298
452
|
return swapSdkCore.CurrencyAmount.fromRawAmount(this.liquidityToken, liquidity);
|
|
299
453
|
}
|
|
300
454
|
getLiquidityValue(token, totalSupply, liquidity, feeOn = false, kLast) {
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
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");
|
|
305
459
|
let totalSupplyAdjusted;
|
|
306
460
|
if (!feeOn) {
|
|
307
461
|
totalSupplyAdjusted = totalSupply;
|
|
308
462
|
} else {
|
|
309
|
-
|
|
463
|
+
invariant5__default.default(!!kLast, "K_LAST");
|
|
310
464
|
const kLastParsed = BigInt(kLast);
|
|
311
465
|
if (!(kLastParsed === swapSdkCore.ZERO)) {
|
|
312
466
|
const rootK = swapSdkCore.sqrt(this.reserve0.quotient * this.reserve1.quotient);
|
|
@@ -332,19 +486,19 @@ var Pair = class {
|
|
|
332
486
|
var Route = class {
|
|
333
487
|
constructor(pairs, input, output) {
|
|
334
488
|
this._midPrice = null;
|
|
335
|
-
|
|
489
|
+
invariant5__default.default(pairs.length > 0, "PAIRS");
|
|
336
490
|
const { chainId } = pairs[0];
|
|
337
|
-
|
|
491
|
+
invariant5__default.default(
|
|
338
492
|
pairs.every((pair) => pair.chainId === chainId),
|
|
339
493
|
"CHAIN_IDS"
|
|
340
494
|
);
|
|
341
495
|
const wrappedInput = input.wrapped;
|
|
342
|
-
|
|
343
|
-
|
|
496
|
+
invariant5__default.default(pairs[0].involvesToken(wrappedInput), "INPUT");
|
|
497
|
+
invariant5__default.default(typeof output === "undefined" || pairs[pairs.length - 1].involvesToken(output.wrapped), "OUTPUT");
|
|
344
498
|
const path = [wrappedInput];
|
|
345
499
|
for (const [i, pair] of pairs.entries()) {
|
|
346
500
|
const currentInput = path[i];
|
|
347
|
-
|
|
501
|
+
invariant5__default.default(currentInput.equals(pair.token0) || currentInput.equals(pair.token1), "PATH");
|
|
348
502
|
const output2 = currentInput.equals(pair.token0) ? pair.token1 : pair.token0;
|
|
349
503
|
path.push(output2);
|
|
350
504
|
}
|
|
@@ -370,8 +524,8 @@ var Route = class {
|
|
|
370
524
|
}
|
|
371
525
|
};
|
|
372
526
|
function inputOutputComparator(a, b) {
|
|
373
|
-
|
|
374
|
-
|
|
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");
|
|
375
529
|
if (a.outputAmount.equalTo(b.outputAmount)) {
|
|
376
530
|
if (a.inputAmount.equalTo(b.inputAmount)) {
|
|
377
531
|
return 0;
|
|
@@ -421,7 +575,7 @@ var Trade = class {
|
|
|
421
575
|
this.tradeType = tradeType;
|
|
422
576
|
const tokenAmounts = new Array(route.path.length);
|
|
423
577
|
if (tradeType === swapSdkCore.TradeType.EXACT_INPUT) {
|
|
424
|
-
|
|
578
|
+
invariant5__default.default(amount.currency.equals(route.input), "INPUT");
|
|
425
579
|
tokenAmounts[0] = amount.wrapped;
|
|
426
580
|
for (let i = 0; i < route.path.length - 1; i++) {
|
|
427
581
|
const pair = route.pairs[i];
|
|
@@ -435,7 +589,7 @@ var Trade = class {
|
|
|
435
589
|
tokenAmounts[tokenAmounts.length - 1].denominator
|
|
436
590
|
);
|
|
437
591
|
} else {
|
|
438
|
-
|
|
592
|
+
invariant5__default.default(amount.currency.equals(route.output), "OUTPUT");
|
|
439
593
|
tokenAmounts[tokenAmounts.length - 1] = amount.wrapped;
|
|
440
594
|
for (let i = route.path.length - 1; i > 0; i--) {
|
|
441
595
|
const pair = route.pairs[i - 1];
|
|
@@ -462,7 +616,7 @@ var Trade = class {
|
|
|
462
616
|
* @param slippageTolerance tolerance of unfavorable slippage from the execution price of this trade
|
|
463
617
|
*/
|
|
464
618
|
minimumAmountOut(slippageTolerance) {
|
|
465
|
-
|
|
619
|
+
invariant5__default.default(!slippageTolerance.lessThan(swapSdkCore.ZERO), "SLIPPAGE_TOLERANCE");
|
|
466
620
|
if (this.tradeType === swapSdkCore.TradeType.EXACT_OUTPUT) {
|
|
467
621
|
return this.outputAmount;
|
|
468
622
|
}
|
|
@@ -474,7 +628,7 @@ var Trade = class {
|
|
|
474
628
|
* @param slippageTolerance tolerance of unfavorable slippage from the execution price of this trade
|
|
475
629
|
*/
|
|
476
630
|
maximumAmountIn(slippageTolerance) {
|
|
477
|
-
|
|
631
|
+
invariant5__default.default(!slippageTolerance.lessThan(swapSdkCore.ZERO), "SLIPPAGE_TOLERANCE");
|
|
478
632
|
if (this.tradeType === swapSdkCore.TradeType.EXACT_INPUT) {
|
|
479
633
|
return this.inputAmount;
|
|
480
634
|
}
|
|
@@ -496,9 +650,9 @@ var Trade = class {
|
|
|
496
650
|
* @param bestTrades used in recursion; the current list of best trades
|
|
497
651
|
*/
|
|
498
652
|
static bestTradeExactIn(pairs, currencyAmountIn, currencyOut, { maxNumResults = 3, maxHops = 3 } = {}, currentPairs = [], nextAmountIn = currencyAmountIn, bestTrades = []) {
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
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");
|
|
502
656
|
const amountIn = nextAmountIn.wrapped;
|
|
503
657
|
const tokenOut = currencyOut.wrapped;
|
|
504
658
|
for (let i = 0; i < pairs.length; i++) {
|
|
@@ -574,9 +728,9 @@ var Trade = class {
|
|
|
574
728
|
* @param bestTrades used in recursion; the current list of best trades
|
|
575
729
|
*/
|
|
576
730
|
static bestTradeExactOut(pairs, currencyIn, currencyAmountOut, { maxNumResults = 3, maxHops = 3 } = {}, currentPairs = [], nextAmountOut = currencyAmountOut, bestTrades = []) {
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
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");
|
|
580
734
|
const amountOut = nextAmountOut.wrapped;
|
|
581
735
|
const tokenIn = currencyIn.wrapped;
|
|
582
736
|
for (let i = 0; i < pairs.length; i++) {
|
|
@@ -636,14 +790,14 @@ var _Native = class extends swapSdkCore.NativeCurrency {
|
|
|
636
790
|
}
|
|
637
791
|
get wrapped() {
|
|
638
792
|
const wnative = WNATIVE[this.chainId];
|
|
639
|
-
|
|
793
|
+
invariant5__default.default(!!wnative, "WRAPPED");
|
|
640
794
|
return wnative;
|
|
641
795
|
}
|
|
642
796
|
static onChain(chainId) {
|
|
643
797
|
if (chainId in this.cache) {
|
|
644
798
|
return this.cache[chainId];
|
|
645
799
|
}
|
|
646
|
-
|
|
800
|
+
invariant5__default.default(!!NATIVE[chainId], "NATIVE_CURRENCY");
|
|
647
801
|
const { decimals, name, symbol } = NATIVE[chainId];
|
|
648
802
|
return this.cache[chainId] = new _Native({ chainId, decimals, symbol, name });
|
|
649
803
|
}
|
|
@@ -666,8 +820,8 @@ var Router = class {
|
|
|
666
820
|
static swapCallParameters(trade, options) {
|
|
667
821
|
const etherIn = trade.inputAmount.currency.isNative;
|
|
668
822
|
const etherOut = trade.outputAmount.currency.isNative;
|
|
669
|
-
|
|
670
|
-
|
|
823
|
+
invariant5__default.default(!(etherIn && etherOut), "ETHER_IN_OUT");
|
|
824
|
+
invariant5__default.default(!("ttl" in options) || options.ttl > 0, "TTL");
|
|
671
825
|
const to = validateAndParseAddress(options.recipient);
|
|
672
826
|
const amountIn = toHex(trade.maximumAmountIn(options.allowedSlippage));
|
|
673
827
|
const amountOut = toHex(trade.minimumAmountOut(options.allowedSlippage));
|
|
@@ -694,7 +848,7 @@ var Router = class {
|
|
|
694
848
|
}
|
|
695
849
|
break;
|
|
696
850
|
case swapSdkCore.TradeType.EXACT_OUTPUT:
|
|
697
|
-
|
|
851
|
+
invariant5__default.default(!useFeeOnTransfer, "EXACT_OUT_FOT");
|
|
698
852
|
if (etherIn) {
|
|
699
853
|
methodName = "swapETHForExactTokens";
|
|
700
854
|
args = [amountOut, path, to, deadline];
|
|
@@ -723,7 +877,7 @@ var _Ether = class extends swapSdkCore.NativeCurrency {
|
|
|
723
877
|
}
|
|
724
878
|
get wrapped() {
|
|
725
879
|
const weth9 = WETH9[this.chainId];
|
|
726
|
-
|
|
880
|
+
invariant5__default.default(!!weth9, "WRAPPED");
|
|
727
881
|
return weth9;
|
|
728
882
|
}
|
|
729
883
|
static onChain(chainId) {
|
|
@@ -1532,7 +1686,7 @@ var Fetcher = class {
|
|
|
1532
1686
|
* @param provider the provider to use to fetch the data
|
|
1533
1687
|
*/
|
|
1534
1688
|
static async fetchPairData(tokenA, tokenB, publicClient = getDefaultClient(tokenA.chainId)) {
|
|
1535
|
-
|
|
1689
|
+
invariant5__default.default(tokenA.chainId === tokenB.chainId, "CHAIN_ID");
|
|
1536
1690
|
const address = Pair.getAddress(tokenA, tokenB);
|
|
1537
1691
|
const pairContract = viem.getContract({
|
|
1538
1692
|
abi: pancakePairV2ABI,
|
|
@@ -1559,6 +1713,7 @@ exports.INIT_CODE_HASH_MAP = INIT_CODE_HASH_MAP;
|
|
|
1559
1713
|
exports.NATIVE = NATIVE;
|
|
1560
1714
|
exports.Native = Native;
|
|
1561
1715
|
exports.ONE_HUNDRED_PERCENT = ONE_HUNDRED_PERCENT;
|
|
1716
|
+
exports.OnRampCurrency = OnRampCurrency;
|
|
1562
1717
|
exports.Pair = Pair;
|
|
1563
1718
|
exports.Route = Route;
|
|
1564
1719
|
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,15 @@ 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
|
+
// TODO: new chains
|
|
115
|
+
[324 /* ZKSYNC */]: "0x1cb011040b91cd937ddff2327f17c9690653b05b6506e830baadf2493468d657",
|
|
116
|
+
[280 /* ZKSYNC_TESTNET */]: "0x0100045707a42494392b3558029b9869f865ff9df8f375dc1bf20b0555093f43",
|
|
117
|
+
[59140 /* LINEA_TESTNET */]: INIT_CODE_HASH_ETH
|
|
51
118
|
};
|
|
52
119
|
var WETH9 = {
|
|
53
120
|
[1 /* ETHEREUM */]: new ERC20Token(
|
|
@@ -81,6 +148,62 @@ var WETH9 = {
|
|
|
81
148
|
"ETH",
|
|
82
149
|
"ETH",
|
|
83
150
|
"https://ethereum.org"
|
|
151
|
+
),
|
|
152
|
+
[42161 /* ARBITRUM_ONE */]: new ERC20Token(
|
|
153
|
+
42161 /* ARBITRUM_ONE */,
|
|
154
|
+
"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",
|
|
155
|
+
18,
|
|
156
|
+
"WETH",
|
|
157
|
+
"Wrapped Ether",
|
|
158
|
+
"https://weth.io"
|
|
159
|
+
),
|
|
160
|
+
[421613 /* ARBITRUM_GOERLI */]: new ERC20Token(
|
|
161
|
+
421613 /* ARBITRUM_GOERLI */,
|
|
162
|
+
"0xEe01c0CD76354C383B8c7B4e65EA88D00B06f36f",
|
|
163
|
+
18,
|
|
164
|
+
"WETH",
|
|
165
|
+
"Wrapped Ether",
|
|
166
|
+
"https://weth.io"
|
|
167
|
+
),
|
|
168
|
+
[324 /* ZKSYNC */]: new ERC20Token(
|
|
169
|
+
324 /* ZKSYNC */,
|
|
170
|
+
"0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91",
|
|
171
|
+
18,
|
|
172
|
+
"WETH",
|
|
173
|
+
"Wrapped Ether",
|
|
174
|
+
"https://weth.io"
|
|
175
|
+
),
|
|
176
|
+
[280 /* ZKSYNC_TESTNET */]: new ERC20Token(
|
|
177
|
+
280 /* ZKSYNC_TESTNET */,
|
|
178
|
+
"0x02968DB286f24cB18bB5b24903eC8eBFAcf591C0",
|
|
179
|
+
18,
|
|
180
|
+
"WETH",
|
|
181
|
+
"Wrapped Ether",
|
|
182
|
+
"https://weth.io"
|
|
183
|
+
),
|
|
184
|
+
[1101 /* POLYGON_ZKEVM */]: new ERC20Token(
|
|
185
|
+
1101 /* POLYGON_ZKEVM */,
|
|
186
|
+
"0x4F9A0e7FD2Bf6067db6994CF12E4495Df938E6e9",
|
|
187
|
+
18,
|
|
188
|
+
"WETH",
|
|
189
|
+
"Wrapped Ether",
|
|
190
|
+
"https://weth.io"
|
|
191
|
+
),
|
|
192
|
+
[1442 /* POLYGON_ZKEVM_TESTNET */]: new ERC20Token(
|
|
193
|
+
1442 /* POLYGON_ZKEVM_TESTNET */,
|
|
194
|
+
"0x30ec47F7DFae72eA79646e6cf64a8A7db538915b",
|
|
195
|
+
18,
|
|
196
|
+
"WETH",
|
|
197
|
+
"Wrapped Ether",
|
|
198
|
+
"https://weth.io"
|
|
199
|
+
),
|
|
200
|
+
[59140 /* LINEA_TESTNET */]: new ERC20Token(
|
|
201
|
+
59140 /* LINEA_TESTNET */,
|
|
202
|
+
"0x2C1b868d6596a18e32E61B901E4060C872647b6C",
|
|
203
|
+
18,
|
|
204
|
+
"WETH",
|
|
205
|
+
"Wrapped Ether",
|
|
206
|
+
"https://weth.io"
|
|
84
207
|
)
|
|
85
208
|
};
|
|
86
209
|
var WBNB = {
|
|
@@ -113,10 +236,18 @@ var WNATIVE = {
|
|
|
113
236
|
[1 /* ETHEREUM */]: WETH9[1 /* ETHEREUM */],
|
|
114
237
|
[5 /* GOERLI */]: WETH9[5 /* GOERLI */],
|
|
115
238
|
[56 /* BSC */]: WBNB[56 /* BSC */],
|
|
116
|
-
[97 /* BSC_TESTNET */]: WBNB[97 /* BSC_TESTNET */]
|
|
239
|
+
[97 /* BSC_TESTNET */]: WBNB[97 /* BSC_TESTNET */],
|
|
240
|
+
[42161 /* ARBITRUM_ONE */]: WETH9[42161 /* ARBITRUM_ONE */],
|
|
241
|
+
[421613 /* ARBITRUM_GOERLI */]: WETH9[421613 /* ARBITRUM_GOERLI */],
|
|
242
|
+
[1101 /* POLYGON_ZKEVM */]: WETH9[1101 /* POLYGON_ZKEVM */],
|
|
243
|
+
[1442 /* POLYGON_ZKEVM_TESTNET */]: WETH9[1442 /* POLYGON_ZKEVM_TESTNET */],
|
|
244
|
+
[324 /* ZKSYNC */]: WETH9[324 /* ZKSYNC */],
|
|
245
|
+
[280 /* ZKSYNC_TESTNET */]: WETH9[280 /* ZKSYNC_TESTNET */],
|
|
246
|
+
[59140 /* LINEA_TESTNET */]: WETH9[59140 /* LINEA_TESTNET */]
|
|
117
247
|
};
|
|
248
|
+
var ETHER = { name: "Ether", symbol: "ETH", decimals: 18 };
|
|
118
249
|
var NATIVE = {
|
|
119
|
-
[1 /* ETHEREUM */]:
|
|
250
|
+
[1 /* ETHEREUM */]: ETHER,
|
|
120
251
|
[5 /* GOERLI */]: { name: "Goerli Ether", symbol: "GOR", decimals: 18 },
|
|
121
252
|
[56 /* BSC */]: {
|
|
122
253
|
name: "Binance Chain Native Token",
|
|
@@ -127,7 +258,18 @@ var NATIVE = {
|
|
|
127
258
|
name: "Binance Chain Native Token",
|
|
128
259
|
symbol: "tBNB",
|
|
129
260
|
decimals: 18
|
|
130
|
-
}
|
|
261
|
+
},
|
|
262
|
+
[42161 /* ARBITRUM_ONE */]: ETHER,
|
|
263
|
+
[421613 /* ARBITRUM_GOERLI */]: {
|
|
264
|
+
name: "Arbitrum Goerli Ether",
|
|
265
|
+
symbol: "AGOR",
|
|
266
|
+
decimals: 18
|
|
267
|
+
},
|
|
268
|
+
[1101 /* POLYGON_ZKEVM */]: ETHER,
|
|
269
|
+
[1442 /* POLYGON_ZKEVM_TESTNET */]: ETHER,
|
|
270
|
+
[324 /* ZKSYNC */]: ETHER,
|
|
271
|
+
[280 /* ZKSYNC_TESTNET */]: ETHER,
|
|
272
|
+
[59140 /* LINEA_TESTNET */]: ETHER
|
|
131
273
|
};
|
|
132
274
|
|
|
133
275
|
// src/trade.ts
|
|
@@ -155,6 +297,13 @@ function getCreate2Address(from_, salt_, initCodeHash) {
|
|
|
155
297
|
});
|
|
156
298
|
return getAddress(slice(keccak256(concat([toBytes("0xff"), from, salt, toBytes(initCodeHash)])), 12));
|
|
157
299
|
}
|
|
300
|
+
var EMPTY_INPU_HASH = "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470";
|
|
301
|
+
var ZKSYNC_PREFIX = "0x2020dba91b30cc0006188af794c2fb30dd8520db7e2c088b7fc7c103c00ca494";
|
|
302
|
+
function getCreate2AddressZkSync(from, salt, initCodeHash) {
|
|
303
|
+
return getAddress(
|
|
304
|
+
`0x${keccak256(concat([ZKSYNC_PREFIX, pad(from, { size: 32 }), salt, initCodeHash, EMPTY_INPU_HASH])).slice(26)}`
|
|
305
|
+
);
|
|
306
|
+
}
|
|
158
307
|
var computePairAddress = ({
|
|
159
308
|
factoryAddress,
|
|
160
309
|
tokenA,
|
|
@@ -163,9 +312,10 @@ var computePairAddress = ({
|
|
|
163
312
|
const [token0, token1] = tokenA.sortsBefore(tokenB) ? [tokenA, tokenB] : [tokenB, tokenA];
|
|
164
313
|
const key = composeKey(token0, token1);
|
|
165
314
|
if (PAIR_ADDRESS_CACHE?.[key] === void 0) {
|
|
315
|
+
const getCreate2Address_ = token0.chainId === 280 /* ZKSYNC_TESTNET */ || token1.chainId === 324 /* ZKSYNC */ ? getCreate2AddressZkSync : getCreate2Address;
|
|
166
316
|
PAIR_ADDRESS_CACHE = {
|
|
167
317
|
...PAIR_ADDRESS_CACHE,
|
|
168
|
-
[key]:
|
|
318
|
+
[key]: getCreate2Address_(
|
|
169
319
|
factoryAddress,
|
|
170
320
|
keccak256(encodePacked(["address", "address"], [token0.address, token1.address])),
|
|
171
321
|
INIT_CODE_HASH_MAP[token0.chainId]
|
|
@@ -176,7 +326,11 @@ var computePairAddress = ({
|
|
|
176
326
|
};
|
|
177
327
|
var Pair = class {
|
|
178
328
|
static getAddress(tokenA, tokenB) {
|
|
179
|
-
return computePairAddress({
|
|
329
|
+
return computePairAddress({
|
|
330
|
+
factoryAddress: FACTORY_ADDRESS_MAP[tokenA.chainId],
|
|
331
|
+
tokenA,
|
|
332
|
+
tokenB
|
|
333
|
+
});
|
|
180
334
|
}
|
|
181
335
|
constructor(currencyAmountA, tokenAmountB) {
|
|
182
336
|
const tokenAmounts = currencyAmountA.currency.sortsBefore(tokenAmountB.currency) ? [currencyAmountA, tokenAmountB] : [tokenAmountB, currencyAmountA];
|
|
@@ -215,7 +369,7 @@ var Pair = class {
|
|
|
215
369
|
* @param token token to return price of
|
|
216
370
|
*/
|
|
217
371
|
priceOf(token) {
|
|
218
|
-
|
|
372
|
+
invariant5(this.involvesToken(token), "TOKEN");
|
|
219
373
|
return token.equals(this.token0) ? this.token0Price : this.token1Price;
|
|
220
374
|
}
|
|
221
375
|
/**
|
|
@@ -237,11 +391,11 @@ var Pair = class {
|
|
|
237
391
|
return this.tokenAmounts[1];
|
|
238
392
|
}
|
|
239
393
|
reserveOf(token) {
|
|
240
|
-
|
|
394
|
+
invariant5(this.involvesToken(token), "TOKEN");
|
|
241
395
|
return token.equals(this.token0) ? this.reserve0 : this.reserve1;
|
|
242
396
|
}
|
|
243
397
|
getOutputAmount(inputAmount) {
|
|
244
|
-
|
|
398
|
+
invariant5(this.involvesToken(inputAmount.currency), "TOKEN");
|
|
245
399
|
if (this.reserve0.quotient === ZERO || this.reserve1.quotient === ZERO) {
|
|
246
400
|
throw new InsufficientReservesError();
|
|
247
401
|
}
|
|
@@ -260,7 +414,7 @@ var Pair = class {
|
|
|
260
414
|
return [outputAmount, new Pair(inputReserve.add(inputAmount), outputReserve.subtract(outputAmount))];
|
|
261
415
|
}
|
|
262
416
|
getInputAmount(outputAmount) {
|
|
263
|
-
|
|
417
|
+
invariant5(this.involvesToken(outputAmount.currency), "TOKEN");
|
|
264
418
|
if (this.reserve0.quotient === ZERO || this.reserve1.quotient === ZERO || outputAmount.quotient >= this.reserveOf(outputAmount.currency).quotient) {
|
|
265
419
|
throw new InsufficientReservesError();
|
|
266
420
|
}
|
|
@@ -275,9 +429,9 @@ var Pair = class {
|
|
|
275
429
|
return [inputAmount, new Pair(inputReserve.add(inputAmount), outputReserve.subtract(outputAmount))];
|
|
276
430
|
}
|
|
277
431
|
getLiquidityMinted(totalSupply, tokenAmountA, tokenAmountB) {
|
|
278
|
-
|
|
432
|
+
invariant5(totalSupply.currency.equals(this.liquidityToken), "LIQUIDITY");
|
|
279
433
|
const tokenAmounts = tokenAmountA.currency.sortsBefore(tokenAmountB.currency) ? [tokenAmountA, tokenAmountB] : [tokenAmountB, tokenAmountA];
|
|
280
|
-
|
|
434
|
+
invariant5(tokenAmounts[0].currency.equals(this.token0) && tokenAmounts[1].currency.equals(this.token1), "TOKEN");
|
|
281
435
|
let liquidity;
|
|
282
436
|
if (totalSupply.quotient === ZERO) {
|
|
283
437
|
liquidity = sqrt(tokenAmounts[0].quotient * tokenAmounts[1].quotient) - MINIMUM_LIQUIDITY;
|
|
@@ -292,15 +446,15 @@ var Pair = class {
|
|
|
292
446
|
return CurrencyAmount.fromRawAmount(this.liquidityToken, liquidity);
|
|
293
447
|
}
|
|
294
448
|
getLiquidityValue(token, totalSupply, liquidity, feeOn = false, kLast) {
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
449
|
+
invariant5(this.involvesToken(token), "TOKEN");
|
|
450
|
+
invariant5(totalSupply.currency.equals(this.liquidityToken), "TOTAL_SUPPLY");
|
|
451
|
+
invariant5(liquidity.currency.equals(this.liquidityToken), "LIQUIDITY");
|
|
452
|
+
invariant5(liquidity.quotient <= totalSupply.quotient, "LIQUIDITY");
|
|
299
453
|
let totalSupplyAdjusted;
|
|
300
454
|
if (!feeOn) {
|
|
301
455
|
totalSupplyAdjusted = totalSupply;
|
|
302
456
|
} else {
|
|
303
|
-
|
|
457
|
+
invariant5(!!kLast, "K_LAST");
|
|
304
458
|
const kLastParsed = BigInt(kLast);
|
|
305
459
|
if (!(kLastParsed === ZERO)) {
|
|
306
460
|
const rootK = sqrt(this.reserve0.quotient * this.reserve1.quotient);
|
|
@@ -326,19 +480,19 @@ var Pair = class {
|
|
|
326
480
|
var Route = class {
|
|
327
481
|
constructor(pairs, input, output) {
|
|
328
482
|
this._midPrice = null;
|
|
329
|
-
|
|
483
|
+
invariant5(pairs.length > 0, "PAIRS");
|
|
330
484
|
const { chainId } = pairs[0];
|
|
331
|
-
|
|
485
|
+
invariant5(
|
|
332
486
|
pairs.every((pair) => pair.chainId === chainId),
|
|
333
487
|
"CHAIN_IDS"
|
|
334
488
|
);
|
|
335
489
|
const wrappedInput = input.wrapped;
|
|
336
|
-
|
|
337
|
-
|
|
490
|
+
invariant5(pairs[0].involvesToken(wrappedInput), "INPUT");
|
|
491
|
+
invariant5(typeof output === "undefined" || pairs[pairs.length - 1].involvesToken(output.wrapped), "OUTPUT");
|
|
338
492
|
const path = [wrappedInput];
|
|
339
493
|
for (const [i, pair] of pairs.entries()) {
|
|
340
494
|
const currentInput = path[i];
|
|
341
|
-
|
|
495
|
+
invariant5(currentInput.equals(pair.token0) || currentInput.equals(pair.token1), "PATH");
|
|
342
496
|
const output2 = currentInput.equals(pair.token0) ? pair.token1 : pair.token0;
|
|
343
497
|
path.push(output2);
|
|
344
498
|
}
|
|
@@ -364,8 +518,8 @@ var Route = class {
|
|
|
364
518
|
}
|
|
365
519
|
};
|
|
366
520
|
function inputOutputComparator(a, b) {
|
|
367
|
-
|
|
368
|
-
|
|
521
|
+
invariant5(a.inputAmount.currency.equals(b.inputAmount.currency), "INPUT_CURRENCY");
|
|
522
|
+
invariant5(a.outputAmount.currency.equals(b.outputAmount.currency), "OUTPUT_CURRENCY");
|
|
369
523
|
if (a.outputAmount.equalTo(b.outputAmount)) {
|
|
370
524
|
if (a.inputAmount.equalTo(b.inputAmount)) {
|
|
371
525
|
return 0;
|
|
@@ -415,7 +569,7 @@ var Trade = class {
|
|
|
415
569
|
this.tradeType = tradeType;
|
|
416
570
|
const tokenAmounts = new Array(route.path.length);
|
|
417
571
|
if (tradeType === TradeType.EXACT_INPUT) {
|
|
418
|
-
|
|
572
|
+
invariant5(amount.currency.equals(route.input), "INPUT");
|
|
419
573
|
tokenAmounts[0] = amount.wrapped;
|
|
420
574
|
for (let i = 0; i < route.path.length - 1; i++) {
|
|
421
575
|
const pair = route.pairs[i];
|
|
@@ -429,7 +583,7 @@ var Trade = class {
|
|
|
429
583
|
tokenAmounts[tokenAmounts.length - 1].denominator
|
|
430
584
|
);
|
|
431
585
|
} else {
|
|
432
|
-
|
|
586
|
+
invariant5(amount.currency.equals(route.output), "OUTPUT");
|
|
433
587
|
tokenAmounts[tokenAmounts.length - 1] = amount.wrapped;
|
|
434
588
|
for (let i = route.path.length - 1; i > 0; i--) {
|
|
435
589
|
const pair = route.pairs[i - 1];
|
|
@@ -456,7 +610,7 @@ var Trade = class {
|
|
|
456
610
|
* @param slippageTolerance tolerance of unfavorable slippage from the execution price of this trade
|
|
457
611
|
*/
|
|
458
612
|
minimumAmountOut(slippageTolerance) {
|
|
459
|
-
|
|
613
|
+
invariant5(!slippageTolerance.lessThan(ZERO), "SLIPPAGE_TOLERANCE");
|
|
460
614
|
if (this.tradeType === TradeType.EXACT_OUTPUT) {
|
|
461
615
|
return this.outputAmount;
|
|
462
616
|
}
|
|
@@ -468,7 +622,7 @@ var Trade = class {
|
|
|
468
622
|
* @param slippageTolerance tolerance of unfavorable slippage from the execution price of this trade
|
|
469
623
|
*/
|
|
470
624
|
maximumAmountIn(slippageTolerance) {
|
|
471
|
-
|
|
625
|
+
invariant5(!slippageTolerance.lessThan(ZERO), "SLIPPAGE_TOLERANCE");
|
|
472
626
|
if (this.tradeType === TradeType.EXACT_INPUT) {
|
|
473
627
|
return this.inputAmount;
|
|
474
628
|
}
|
|
@@ -490,9 +644,9 @@ var Trade = class {
|
|
|
490
644
|
* @param bestTrades used in recursion; the current list of best trades
|
|
491
645
|
*/
|
|
492
646
|
static bestTradeExactIn(pairs, currencyAmountIn, currencyOut, { maxNumResults = 3, maxHops = 3 } = {}, currentPairs = [], nextAmountIn = currencyAmountIn, bestTrades = []) {
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
647
|
+
invariant5(pairs.length > 0, "PAIRS");
|
|
648
|
+
invariant5(maxHops > 0, "MAX_HOPS");
|
|
649
|
+
invariant5(currencyAmountIn === nextAmountIn || currentPairs.length > 0, "INVALID_RECURSION");
|
|
496
650
|
const amountIn = nextAmountIn.wrapped;
|
|
497
651
|
const tokenOut = currencyOut.wrapped;
|
|
498
652
|
for (let i = 0; i < pairs.length; i++) {
|
|
@@ -568,9 +722,9 @@ var Trade = class {
|
|
|
568
722
|
* @param bestTrades used in recursion; the current list of best trades
|
|
569
723
|
*/
|
|
570
724
|
static bestTradeExactOut(pairs, currencyIn, currencyAmountOut, { maxNumResults = 3, maxHops = 3 } = {}, currentPairs = [], nextAmountOut = currencyAmountOut, bestTrades = []) {
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
725
|
+
invariant5(pairs.length > 0, "PAIRS");
|
|
726
|
+
invariant5(maxHops > 0, "MAX_HOPS");
|
|
727
|
+
invariant5(currencyAmountOut === nextAmountOut || currentPairs.length > 0, "INVALID_RECURSION");
|
|
574
728
|
const amountOut = nextAmountOut.wrapped;
|
|
575
729
|
const tokenIn = currencyIn.wrapped;
|
|
576
730
|
for (let i = 0; i < pairs.length; i++) {
|
|
@@ -630,14 +784,14 @@ var _Native = class extends NativeCurrency {
|
|
|
630
784
|
}
|
|
631
785
|
get wrapped() {
|
|
632
786
|
const wnative = WNATIVE[this.chainId];
|
|
633
|
-
|
|
787
|
+
invariant5(!!wnative, "WRAPPED");
|
|
634
788
|
return wnative;
|
|
635
789
|
}
|
|
636
790
|
static onChain(chainId) {
|
|
637
791
|
if (chainId in this.cache) {
|
|
638
792
|
return this.cache[chainId];
|
|
639
793
|
}
|
|
640
|
-
|
|
794
|
+
invariant5(!!NATIVE[chainId], "NATIVE_CURRENCY");
|
|
641
795
|
const { decimals, name, symbol } = NATIVE[chainId];
|
|
642
796
|
return this.cache[chainId] = new _Native({ chainId, decimals, symbol, name });
|
|
643
797
|
}
|
|
@@ -660,8 +814,8 @@ var Router = class {
|
|
|
660
814
|
static swapCallParameters(trade, options) {
|
|
661
815
|
const etherIn = trade.inputAmount.currency.isNative;
|
|
662
816
|
const etherOut = trade.outputAmount.currency.isNative;
|
|
663
|
-
|
|
664
|
-
|
|
817
|
+
invariant5(!(etherIn && etherOut), "ETHER_IN_OUT");
|
|
818
|
+
invariant5(!("ttl" in options) || options.ttl > 0, "TTL");
|
|
665
819
|
const to = validateAndParseAddress(options.recipient);
|
|
666
820
|
const amountIn = toHex(trade.maximumAmountIn(options.allowedSlippage));
|
|
667
821
|
const amountOut = toHex(trade.minimumAmountOut(options.allowedSlippage));
|
|
@@ -688,7 +842,7 @@ var Router = class {
|
|
|
688
842
|
}
|
|
689
843
|
break;
|
|
690
844
|
case TradeType.EXACT_OUTPUT:
|
|
691
|
-
|
|
845
|
+
invariant5(!useFeeOnTransfer, "EXACT_OUT_FOT");
|
|
692
846
|
if (etherIn) {
|
|
693
847
|
methodName = "swapETHForExactTokens";
|
|
694
848
|
args = [amountOut, path, to, deadline];
|
|
@@ -717,7 +871,7 @@ var _Ether = class extends NativeCurrency {
|
|
|
717
871
|
}
|
|
718
872
|
get wrapped() {
|
|
719
873
|
const weth9 = WETH9[this.chainId];
|
|
720
|
-
|
|
874
|
+
invariant5(!!weth9, "WRAPPED");
|
|
721
875
|
return weth9;
|
|
722
876
|
}
|
|
723
877
|
static onChain(chainId) {
|
|
@@ -1526,7 +1680,7 @@ var Fetcher = class {
|
|
|
1526
1680
|
* @param provider the provider to use to fetch the data
|
|
1527
1681
|
*/
|
|
1528
1682
|
static async fetchPairData(tokenA, tokenB, publicClient = getDefaultClient(tokenA.chainId)) {
|
|
1529
|
-
|
|
1683
|
+
invariant5(tokenA.chainId === tokenB.chainId, "CHAIN_ID");
|
|
1530
1684
|
const address = Pair.getAddress(tokenA, tokenB);
|
|
1531
1685
|
const pairContract = getContract({
|
|
1532
1686
|
abi: pancakePairV2ABI,
|
|
@@ -1542,4 +1696,4 @@ var Fetcher = class {
|
|
|
1542
1696
|
}
|
|
1543
1697
|
};
|
|
1544
1698
|
|
|
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 };
|
|
1699
|
+
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.1.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
|
},
|