@luxfi/exchange 0.2.0 → 1.0.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/contracts/abis/amm-v2-factory.d.ts +148 -0
- package/dist/contracts/abis/amm-v2-factory.d.ts.map +1 -0
- package/dist/contracts/abis/amm-v2-factory.js +52 -0
- package/dist/contracts/abis/amm-v2-pair.d.ts +236 -0
- package/dist/contracts/abis/amm-v2-pair.d.ts.map +1 -0
- package/dist/contracts/abis/amm-v2-pair.js +88 -0
- package/dist/contracts/abis/amm-v2-router.d.ts +496 -0
- package/dist/contracts/abis/amm-v2-router.d.ts.map +1 -0
- package/dist/contracts/abis/amm-v2-router.js +149 -0
- package/dist/contracts/abis/amm-v3-factory.d.ts +152 -0
- package/dist/contracts/abis/amm-v3-factory.d.ts.map +1 -0
- package/dist/contracts/abis/amm-v3-factory.js +48 -0
- package/dist/contracts/abis/amm-v3-pool.d.ts +254 -0
- package/dist/contracts/abis/amm-v3-pool.d.ts.map +1 -0
- package/dist/contracts/abis/amm-v3-pool.js +84 -0
- package/dist/contracts/abis/index.d.ts +8 -5
- package/dist/contracts/abis/index.d.ts.map +1 -1
- package/dist/contracts/abis/index.js +13 -6
- package/dist/contracts/abis/lux-amm-v2-factory.d.ts +148 -0
- package/dist/contracts/abis/lux-amm-v2-factory.d.ts.map +1 -0
- package/dist/contracts/abis/lux-amm-v2-factory.js +52 -0
- package/dist/contracts/abis/lux-amm-v2-pair.d.ts +236 -0
- package/dist/contracts/abis/lux-amm-v2-pair.d.ts.map +1 -0
- package/dist/contracts/abis/lux-amm-v2-pair.js +88 -0
- package/dist/contracts/abis/lux-amm-v2-router.d.ts +496 -0
- package/dist/contracts/abis/lux-amm-v2-router.d.ts.map +1 -0
- package/dist/contracts/abis/lux-amm-v2-router.js +149 -0
- package/dist/contracts/abis/lux-amm-v3-factory.d.ts +152 -0
- package/dist/contracts/abis/lux-amm-v3-factory.d.ts.map +1 -0
- package/dist/contracts/abis/lux-amm-v3-factory.js +48 -0
- package/dist/contracts/abis/lux-amm-v3-pool.d.ts +254 -0
- package/dist/contracts/abis/lux-amm-v3-pool.d.ts.map +1 -0
- package/dist/contracts/abis/lux-amm-v3-pool.js +84 -0
- package/dist/contracts/addresses.d.ts +18 -48
- package/dist/contracts/addresses.d.ts.map +1 -1
- package/dist/contracts/addresses.js +30 -22
- package/dist/tokens/index.d.ts +25 -0
- package/dist/tokens/index.d.ts.map +1 -1
- package/dist/tokens/index.js +90 -5
- package/package.json +2 -2
- package/src/contracts/abis/{uniswap-v2-factory.ts → amm-v2-factory.ts} +6 -2
- package/src/contracts/abis/{uniswap-v2-pair.ts → amm-v2-pair.ts} +6 -2
- package/src/contracts/abis/{uniswap-v2-router.ts → amm-v2-router.ts} +6 -2
- package/src/contracts/abis/{uniswap-v3-factory.ts → amm-v3-factory.ts} +6 -2
- package/src/contracts/abis/{uniswap-v3-pool.ts → amm-v3-pool.ts} +6 -2
- package/src/contracts/abis/index.ts +16 -6
- package/src/contracts/abis/pool-manager.ts +1 -1
- package/src/contracts/addresses.ts +53 -52
- package/src/hooks/use-pools.ts +8 -6
- package/src/hooks/use-positions.ts +3 -3
- package/src/hooks/use-swap-quote.ts +1 -1
- package/src/hooks/use-swap.ts +1 -1
- package/src/tokens/index.ts +148 -32
|
@@ -30,6 +30,10 @@ export const LUX_TESTNET_CONTRACTS = {
|
|
|
30
30
|
WLUX: '0x732740c5c895C9FCF619930ed4293fc858eb44c7',
|
|
31
31
|
WETH: '0xd9956542B51032d940ef076d70B69410667277A3',
|
|
32
32
|
MULTICALL: '0xd25F88CBdAe3c2CCA3Bb75FC4E723b44C0Ea362F',
|
|
33
|
+
// Bridge tokens (testnet deployments)
|
|
34
|
+
LETH: '0x60E0a8167FC13dE89348978860466C9ceC24B9ba',
|
|
35
|
+
LBTC: '0x1E48D32a4F5e9f08DB9aE4959163300FaF8A6C8e',
|
|
36
|
+
LUSD: '0xb84112ac9318a0b2319aa11d4d10e9762b25f7f4',
|
|
33
37
|
// AMM V2
|
|
34
38
|
V2_FACTORY: '0x81C3669B139D92909AA67DbF74a241b10540d919',
|
|
35
39
|
V2_ROUTER: '0xDB6c703c80BFaE5F9a56482d3c8535f27E1136EB',
|
|
@@ -44,38 +48,42 @@ export const LUX_TESTNET_CONTRACTS = {
|
|
|
44
48
|
V3_NFT_DESCRIPTOR: '0x53B1aAA5b6DDFD4eD00D0A7b5Ef333dc74B605b5',
|
|
45
49
|
};
|
|
46
50
|
/**
|
|
47
|
-
* DEX Precompile addresses (native AMM)
|
|
48
|
-
* These provide sub-microsecond execution
|
|
51
|
+
* DEX Precompile addresses (native AMM - Uniswap v4 style singleton PoolManager)
|
|
52
|
+
* These provide sub-microsecond execution via native Go implementation
|
|
49
53
|
*
|
|
50
|
-
*
|
|
51
|
-
* -
|
|
52
|
-
* -
|
|
54
|
+
* Address format: 0x0000...00LPNUMBER (addresses end with LP number)
|
|
55
|
+
* LP-9010: DEX Precompile - Native HFT Order Book (PoolManager)
|
|
56
|
+
* LP-9011: Oracle Precompile - Multi-Source Price Aggregation
|
|
53
57
|
*
|
|
54
|
-
* @see ~/work/lux/precompile/
|
|
58
|
+
* @see ~/work/lux/precompile/registry/registry.go for the full address scheme
|
|
59
|
+
* @see ~/work/lux/dex/pkg/gateway/lux/provider.go for gateway implementation
|
|
55
60
|
*/
|
|
56
61
|
export const DEX_PRECOMPILES = {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
62
|
+
// Core DEX (LP-9010 series - Uniswap v4 style)
|
|
63
|
+
POOL_MANAGER: '0x0000000000000000000000000000000000009010', // LP-9010
|
|
64
|
+
SWAP_ROUTER: '0x0000000000000000000000000000000000009012', // LP-9012
|
|
65
|
+
HOOKS_REGISTRY: '0x0000000000000000000000000000000000009013', // LP-9013
|
|
66
|
+
FLASH_LOAN: '0x0000000000000000000000000000000000009014', // LP-9014
|
|
67
|
+
// DeFi Extensions
|
|
68
|
+
ORACLE_HUB: '0x0000000000000000000000000000000000009011', // LP-9011
|
|
69
|
+
CLOB: '0x0000000000000000000000000000000000009020', // LP-9020
|
|
70
|
+
VAULT: '0x0000000000000000000000000000000000009030', // LP-9030
|
|
71
|
+
// Bridges (LP-6xxx)
|
|
72
|
+
TELEPORT: '0x0000000000000000000000000000000000006010', // LP-6010
|
|
64
73
|
};
|
|
65
74
|
/**
|
|
66
75
|
* Contract addresses for Lux Dev (1337)
|
|
76
|
+
* Deterministic CREATE addresses from DeployFullStack.s.sol deployed by anvil account 0
|
|
77
|
+
* Account 0: 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
|
|
67
78
|
*/
|
|
68
79
|
export const LUX_DEV_CONTRACTS = {
|
|
69
|
-
// Core
|
|
70
|
-
WLUX: '
|
|
80
|
+
// Core - Nonce 0
|
|
81
|
+
WLUX: '0x5FbDB2315678afecb367f032d93F642f64180aa3',
|
|
71
82
|
MULTICALL: '0xd25F88CBdAe3c2CCA3Bb75FC4E723b44C0Ea362F',
|
|
72
|
-
// Bridged tokens (
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
USDT: '0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9',
|
|
77
|
-
DAI: '0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9',
|
|
78
|
-
AI: '0x0B306BF915C4d645ff596e518fAf3F9669b97016',
|
|
83
|
+
// Bridged tokens (deterministic deployment nonces 1-3)
|
|
84
|
+
LETH: '0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512', // Nonce 1
|
|
85
|
+
LBTC: '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0', // Nonce 2
|
|
86
|
+
LUSD: '0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9', // Nonce 3
|
|
79
87
|
// AMM V2
|
|
80
88
|
V2_FACTORY: '0x959922bE3CAee4b8Cd9a407cc3ac1C251C2007B1',
|
|
81
89
|
V2_ROUTER: '0x9A9f2CCfdE556A7E9Ff0848998Aa4a0CFD8863AE',
|
package/dist/tokens/index.d.ts
CHANGED
|
@@ -28,9 +28,22 @@ export declare const WLUX_DEV: Token;
|
|
|
28
28
|
export declare const LUSD: Token;
|
|
29
29
|
/**
|
|
30
30
|
* Bridge tokens (L-prefix for assets bridged to Lux)
|
|
31
|
+
* These are the canonical mainnet addresses from @luxfi/config
|
|
31
32
|
*/
|
|
32
33
|
export declare const LETH: Token;
|
|
33
34
|
export declare const LBTC: Token;
|
|
35
|
+
/**
|
|
36
|
+
* Testnet bridge tokens
|
|
37
|
+
*/
|
|
38
|
+
export declare const LETH_TESTNET: Token;
|
|
39
|
+
export declare const LBTC_TESTNET: Token;
|
|
40
|
+
export declare const LUSD_TESTNET: Token;
|
|
41
|
+
/**
|
|
42
|
+
* Dev mode bridge tokens (deterministic CREATE addresses)
|
|
43
|
+
*/
|
|
44
|
+
export declare const LETH_DEV: Token;
|
|
45
|
+
export declare const LBTC_DEV: Token;
|
|
46
|
+
export declare const LUSD_DEV: Token;
|
|
34
47
|
/**
|
|
35
48
|
* Major tokens on Lux Mainnet
|
|
36
49
|
*/
|
|
@@ -54,6 +67,18 @@ export declare const LUX_MAINNET_TOKENS: Token[];
|
|
|
54
67
|
* Default token list for Zoo Mainnet
|
|
55
68
|
*/
|
|
56
69
|
export declare const ZOO_MAINNET_TOKENS: Token[];
|
|
70
|
+
/**
|
|
71
|
+
* Default token list for Lux Testnet
|
|
72
|
+
*/
|
|
73
|
+
export declare const LUX_TESTNET_TOKENS: Token[];
|
|
74
|
+
/**
|
|
75
|
+
* Default token list for Lux Dev
|
|
76
|
+
*/
|
|
77
|
+
export declare const LUX_DEV_TOKENS: Token[];
|
|
78
|
+
/**
|
|
79
|
+
* Get tokens for a chain
|
|
80
|
+
*/
|
|
81
|
+
export declare function getTokensForChain(chainId: number): Token[];
|
|
57
82
|
/**
|
|
58
83
|
* Get wrapped native token for chain
|
|
59
84
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tokens/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAEnC;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,KAOxB,CAAA;AAED,eAAO,MAAM,UAAU,EAAE,KAOxB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tokens/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAEnC;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,KAOxB,CAAA;AAED,eAAO,MAAM,UAAU,EAAE,KAOxB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAOtB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,IAAI,EAAE,KAMlB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,IAAI,EAAE,KAMlB,CAAA;AAED,eAAO,MAAM,IAAI,EAAE,KAMlB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,KAM1B,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAA;AAED,eAAO,MAAM,OAAO,EAAE,KAMrB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,IAAI,EAAE,KAMlB,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAAK,EAWrC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAAK,EAMrC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAAK,EAKrC,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,KAAK,EAKjC,CAAA;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE,CAa1D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAWnE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAEnD"}
|
package/dist/tokens/index.js
CHANGED
|
@@ -35,7 +35,8 @@ export const WLUX_TESTNET = {
|
|
|
35
35
|
name: 'Wrapped LUX',
|
|
36
36
|
};
|
|
37
37
|
export const WLUX_DEV = {
|
|
38
|
-
address
|
|
38
|
+
// Deterministic CREATE address from DeployFullStack.s.sol (nonce 0)
|
|
39
|
+
address: '0x5FbDB2315678afecb367f032d93F642f64180aa3',
|
|
39
40
|
chainId: 1337,
|
|
40
41
|
decimals: 18,
|
|
41
42
|
symbol: 'WLUX',
|
|
@@ -45,29 +46,78 @@ export const WLUX_DEV = {
|
|
|
45
46
|
* Stablecoins
|
|
46
47
|
*/
|
|
47
48
|
export const LUSD = {
|
|
48
|
-
address: '
|
|
49
|
+
address: '0x4B1BfA76eD63F1A0aD2E4f40b3F46C45E8F7A4E2',
|
|
49
50
|
chainId: 96369,
|
|
50
|
-
decimals:
|
|
51
|
+
decimals: 6, // USDC-compatible decimals
|
|
51
52
|
symbol: 'LUSD',
|
|
52
53
|
name: 'Lux Dollar',
|
|
53
54
|
};
|
|
54
55
|
/**
|
|
55
56
|
* Bridge tokens (L-prefix for assets bridged to Lux)
|
|
57
|
+
* These are the canonical mainnet addresses from @luxfi/config
|
|
56
58
|
*/
|
|
57
59
|
export const LETH = {
|
|
58
|
-
address: '
|
|
60
|
+
address: '0xAA3AE95816a4A6FbC6b8Ed5a6C06f22A96A80C8C',
|
|
59
61
|
chainId: 96369,
|
|
60
62
|
decimals: 18,
|
|
61
63
|
symbol: 'LETH',
|
|
62
64
|
name: 'Lux ETH',
|
|
63
65
|
};
|
|
64
66
|
export const LBTC = {
|
|
65
|
-
address: '
|
|
67
|
+
address: '0x526903E35E7106D62ED3B5d77E14e51d024Aa1D3',
|
|
66
68
|
chainId: 96369,
|
|
67
69
|
decimals: 8,
|
|
68
70
|
symbol: 'LBTC',
|
|
69
71
|
name: 'Lux BTC',
|
|
70
72
|
};
|
|
73
|
+
/**
|
|
74
|
+
* Testnet bridge tokens
|
|
75
|
+
*/
|
|
76
|
+
export const LETH_TESTNET = {
|
|
77
|
+
address: '0x60E0a8167FC13dE89348978860466C9ceC24B9ba',
|
|
78
|
+
chainId: 96368,
|
|
79
|
+
decimals: 18,
|
|
80
|
+
symbol: 'LETH',
|
|
81
|
+
name: 'Lux ETH',
|
|
82
|
+
};
|
|
83
|
+
export const LBTC_TESTNET = {
|
|
84
|
+
address: '0x1E48D32a4F5e9f08DB9aE4959163300FaF8A6C8e',
|
|
85
|
+
chainId: 96368,
|
|
86
|
+
decimals: 8,
|
|
87
|
+
symbol: 'LBTC',
|
|
88
|
+
name: 'Lux BTC',
|
|
89
|
+
};
|
|
90
|
+
export const LUSD_TESTNET = {
|
|
91
|
+
address: '0xb84112ac9318a0b2319aa11d4d10e9762b25f7f4',
|
|
92
|
+
chainId: 96368,
|
|
93
|
+
decimals: 18,
|
|
94
|
+
symbol: 'LUSD',
|
|
95
|
+
name: 'Lux Dollar',
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* Dev mode bridge tokens (deterministic CREATE addresses)
|
|
99
|
+
*/
|
|
100
|
+
export const LETH_DEV = {
|
|
101
|
+
address: '0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512',
|
|
102
|
+
chainId: 1337,
|
|
103
|
+
decimals: 18,
|
|
104
|
+
symbol: 'LETH',
|
|
105
|
+
name: 'Lux ETH',
|
|
106
|
+
};
|
|
107
|
+
export const LBTC_DEV = {
|
|
108
|
+
address: '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0',
|
|
109
|
+
chainId: 1337,
|
|
110
|
+
decimals: 8,
|
|
111
|
+
symbol: 'LBTC',
|
|
112
|
+
name: 'Lux BTC',
|
|
113
|
+
};
|
|
114
|
+
export const LUSD_DEV = {
|
|
115
|
+
address: '0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9',
|
|
116
|
+
chainId: 1337,
|
|
117
|
+
decimals: 6,
|
|
118
|
+
symbol: 'LUSD',
|
|
119
|
+
name: 'Lux Dollar',
|
|
120
|
+
};
|
|
71
121
|
/**
|
|
72
122
|
* Major tokens on Lux Mainnet
|
|
73
123
|
*/
|
|
@@ -162,6 +212,41 @@ export const ZOO_MAINNET_TOKENS = [
|
|
|
162
212
|
USDT_ZOO,
|
|
163
213
|
WETH_ZOO,
|
|
164
214
|
];
|
|
215
|
+
/**
|
|
216
|
+
* Default token list for Lux Testnet
|
|
217
|
+
*/
|
|
218
|
+
export const LUX_TESTNET_TOKENS = [
|
|
219
|
+
WLUX_TESTNET,
|
|
220
|
+
LETH_TESTNET,
|
|
221
|
+
LBTC_TESTNET,
|
|
222
|
+
LUSD_TESTNET,
|
|
223
|
+
];
|
|
224
|
+
/**
|
|
225
|
+
* Default token list for Lux Dev
|
|
226
|
+
*/
|
|
227
|
+
export const LUX_DEV_TOKENS = [
|
|
228
|
+
WLUX_DEV,
|
|
229
|
+
LETH_DEV,
|
|
230
|
+
LBTC_DEV,
|
|
231
|
+
LUSD_DEV,
|
|
232
|
+
];
|
|
233
|
+
/**
|
|
234
|
+
* Get tokens for a chain
|
|
235
|
+
*/
|
|
236
|
+
export function getTokensForChain(chainId) {
|
|
237
|
+
switch (chainId) {
|
|
238
|
+
case 96369:
|
|
239
|
+
return LUX_MAINNET_TOKENS;
|
|
240
|
+
case 96368:
|
|
241
|
+
return LUX_TESTNET_TOKENS;
|
|
242
|
+
case 1337:
|
|
243
|
+
return LUX_DEV_TOKENS;
|
|
244
|
+
case 200200:
|
|
245
|
+
return ZOO_MAINNET_TOKENS;
|
|
246
|
+
default:
|
|
247
|
+
return [];
|
|
248
|
+
}
|
|
249
|
+
}
|
|
165
250
|
/**
|
|
166
251
|
* Get wrapped native token for chain
|
|
167
252
|
*/
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@luxfi/exchange",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "Lux Exchange SDK - React hooks and utilities for Lux DEX",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
"repository": {
|
|
69
69
|
"type": "git",
|
|
70
70
|
"url": "https://github.com/luxfi/exchange.git",
|
|
71
|
-
"directory": "
|
|
71
|
+
"directory": "pkgs/exchange"
|
|
72
72
|
},
|
|
73
73
|
"keywords": [
|
|
74
74
|
"lux",
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* AMM V2 Factory ABI
|
|
3
|
+
* Compatible with Lux V2 Factory interface
|
|
3
4
|
*/
|
|
4
|
-
export const
|
|
5
|
+
export const AMM_V2_FACTORY_ABI = [
|
|
5
6
|
{
|
|
6
7
|
type: 'function',
|
|
7
8
|
name: 'getPair',
|
|
@@ -47,3 +48,6 @@ export const UNISWAP_V2_FACTORY_ABI = [
|
|
|
47
48
|
],
|
|
48
49
|
},
|
|
49
50
|
] as const
|
|
51
|
+
|
|
52
|
+
/** @deprecated Use AMM_V2_FACTORY_ABI instead */
|
|
53
|
+
export const LUX_V2_FACTORY_ABI = AMM_V2_FACTORY_ABI
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* AMM V2 Pair ABI
|
|
3
|
+
* Compatible with Lux V2 Pair interface
|
|
3
4
|
*/
|
|
4
|
-
export const
|
|
5
|
+
export const AMM_V2_PAIR_ABI = [
|
|
5
6
|
{
|
|
6
7
|
type: 'function',
|
|
7
8
|
name: 'token0',
|
|
@@ -83,3 +84,6 @@ export const UNISWAP_V2_PAIR_ABI = [
|
|
|
83
84
|
],
|
|
84
85
|
},
|
|
85
86
|
] as const
|
|
87
|
+
|
|
88
|
+
/** @deprecated Use AMM_V2_PAIR_ABI instead */
|
|
89
|
+
export const LUX_V2_PAIR_ABI = AMM_V2_PAIR_ABI
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* AMM V2 Router ABI
|
|
3
|
+
* Compatible with Lux V2 Router02 interface
|
|
3
4
|
*/
|
|
4
|
-
export const
|
|
5
|
+
export const AMM_V2_ROUTER_ABI = [
|
|
5
6
|
{
|
|
6
7
|
type: 'function',
|
|
7
8
|
name: 'factory',
|
|
@@ -144,3 +145,6 @@ export const UNISWAP_V2_ROUTER_ABI = [
|
|
|
144
145
|
stateMutability: 'nonpayable',
|
|
145
146
|
},
|
|
146
147
|
] as const
|
|
148
|
+
|
|
149
|
+
/** @deprecated Use AMM_V2_ROUTER_ABI instead */
|
|
150
|
+
export const LUX_V2_ROUTER_ABI = AMM_V2_ROUTER_ABI
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* AMM V3 Factory ABI
|
|
3
|
+
* Compatible with Lux V3 Factory interface
|
|
3
4
|
*/
|
|
4
|
-
export const
|
|
5
|
+
export const AMM_V3_FACTORY_ABI = [
|
|
5
6
|
{
|
|
6
7
|
type: 'function',
|
|
7
8
|
name: 'getPool',
|
|
@@ -43,3 +44,6 @@ export const UNISWAP_V3_FACTORY_ABI = [
|
|
|
43
44
|
],
|
|
44
45
|
},
|
|
45
46
|
] as const
|
|
47
|
+
|
|
48
|
+
/** @deprecated Use AMM_V3_FACTORY_ABI instead */
|
|
49
|
+
export const LUX_V3_FACTORY_ABI = AMM_V3_FACTORY_ABI
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* AMM V3 Pool ABI
|
|
3
|
+
* Compatible with Lux V3 Pool interface
|
|
3
4
|
*/
|
|
4
|
-
export const
|
|
5
|
+
export const AMM_V3_POOL_ABI = [
|
|
5
6
|
{
|
|
6
7
|
type: 'function',
|
|
7
8
|
name: 'token0',
|
|
@@ -79,3 +80,6 @@ export const UNISWAP_V3_POOL_ABI = [
|
|
|
79
80
|
],
|
|
80
81
|
},
|
|
81
82
|
] as const
|
|
83
|
+
|
|
84
|
+
/** @deprecated Use AMM_V3_POOL_ABI instead */
|
|
85
|
+
export const LUX_V3_POOL_ABI = AMM_V3_POOL_ABI
|
|
@@ -1,17 +1,27 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Contract ABIs for Lux Exchange
|
|
3
|
+
*
|
|
4
|
+
* AMM V2/V3 - Concentrated liquidity AMM (Lux V2/V3 compatible)
|
|
5
|
+
* DEX V4 - Hook-based DEX with singleton pool manager (Lux V4 compatible)
|
|
3
6
|
*/
|
|
4
7
|
|
|
5
|
-
|
|
6
|
-
export {
|
|
7
|
-
export {
|
|
8
|
-
export {
|
|
9
|
-
|
|
8
|
+
// AMM V2 ABIs
|
|
9
|
+
export { AMM_V2_ROUTER_ABI, LUX_V2_ROUTER_ABI } from './amm-v2-router'
|
|
10
|
+
export { AMM_V2_FACTORY_ABI, LUX_V2_FACTORY_ABI } from './amm-v2-factory'
|
|
11
|
+
export { AMM_V2_PAIR_ABI, LUX_V2_PAIR_ABI } from './amm-v2-pair'
|
|
12
|
+
|
|
13
|
+
// AMM V3 ABIs
|
|
14
|
+
export { AMM_V3_FACTORY_ABI, LUX_V3_FACTORY_ABI } from './amm-v3-factory'
|
|
15
|
+
export { AMM_V3_POOL_ABI, LUX_V3_POOL_ABI } from './amm-v3-pool'
|
|
16
|
+
|
|
17
|
+
// AMM V3 Periphery ABIs
|
|
10
18
|
export { SWAP_ROUTER_ABI } from './swap-router'
|
|
11
19
|
export { QUOTER_V2_ABI } from './quoter-v2'
|
|
12
20
|
export { NFT_POSITION_MANAGER_ABI } from './nft-position-manager'
|
|
21
|
+
|
|
22
|
+
// Common ABIs
|
|
13
23
|
export { ERC20_ABI } from './erc20'
|
|
14
24
|
|
|
15
|
-
// DEX Precompile ABIs
|
|
25
|
+
// DEX V4 Precompile ABIs
|
|
16
26
|
export { POOL_MANAGER_ABI } from './pool-manager'
|
|
17
27
|
export { DEX_SWAP_ROUTER_ABI } from './dex-swap-router'
|
|
@@ -7,89 +7,90 @@ import type { Address } from 'viem'
|
|
|
7
7
|
* Contract addresses for Lux Mainnet (96369)
|
|
8
8
|
*/
|
|
9
9
|
export const LUX_MAINNET_CONTRACTS = {
|
|
10
|
-
// Core
|
|
11
|
-
WLUX: '
|
|
10
|
+
// Core — verified on-chain 2026-03-05 (149M supply)
|
|
11
|
+
WLUX: '0x4888e4a2ee0f03051c72d2bd3acf755ed3498b3e' as Address,
|
|
12
12
|
MULTICALL: '0xd25F88CBdAe3c2CCA3Bb75FC4E723b44C0Ea362F' as Address,
|
|
13
13
|
|
|
14
|
-
// Bridge tokens
|
|
15
|
-
LETH: '
|
|
16
|
-
LBTC: '
|
|
17
|
-
LUSD: '
|
|
14
|
+
// Bridge tokens — verified on-chain via V3 pools and bridge MPC
|
|
15
|
+
LETH: '0x60E0a8167FC13dE89348978860466C9ceC24B9ba' as Address,
|
|
16
|
+
LBTC: '0x1E48D32a4F5e9f08DB9aE4959163300FaF8A6C8e' as Address,
|
|
17
|
+
LUSD: '0x848Cff46eb323f323b6Bbe1Df274E40793d7f2c2' as Address,
|
|
18
|
+
LSOL: '0x26B40f650156C7EbF9e087Dd0dca181Fe87625B7' as Address,
|
|
19
|
+
LTON: '0x3141b94b89691009b950c96e97Bff48e0C543E3C' as Address,
|
|
20
|
+
LAVAX: '0x0e4bD0DD67c15dECfBBBdbbE07FC9d51D737693D' as Address,
|
|
18
21
|
|
|
19
|
-
// AMM V2 (
|
|
20
|
-
V2_FACTORY: '
|
|
21
|
-
V2_ROUTER: '
|
|
22
|
+
// AMM V2 (CREATE2) — 1 pair on-chain
|
|
23
|
+
V2_FACTORY: '0xD173926A10A0C4eCd3A51B1422270b65Df0551c1' as Address,
|
|
24
|
+
V2_ROUTER: '0xAe2cf1E403aAFE6C05A5b8Ef63EB19ba591d8511' as Address,
|
|
22
25
|
|
|
23
|
-
// AMM V3 (
|
|
24
|
-
V3_FACTORY: '
|
|
26
|
+
// AMM V3 (CREATE2) — 8+ pools, active trading, verified on-chain
|
|
27
|
+
V3_FACTORY: '0x80bBc7C4C7a59C899D1B37BC14539A22D5830a84' as Address,
|
|
25
28
|
V3_SWAP_ROUTER: '0xE8fb25086C8652c92f5AF90D730Bac7C63Fc9A58' as Address,
|
|
26
29
|
V3_SWAP_ROUTER_02: '0x939bC0Bca6F9B9c52E6e3AD8A3C590b5d9B9D10E' as Address,
|
|
27
30
|
V3_QUOTER: '0x12e2B76FaF4dDA5a173a4532916bb6Bfa3645275' as Address,
|
|
28
31
|
V3_QUOTER_V2: '0x15C729fdd833Ba675edd466Dfc63E1B737925A4c' as Address,
|
|
29
|
-
V3_TICK_LENS: '0x57A22965AdA0e52D785A9Aa155beF423D573b879' as Address,
|
|
30
32
|
V3_NFT_POSITION_MANAGER: '0x7a4C48B9dae0b7c396569b34042fcA604150Ee28' as Address,
|
|
31
|
-
V3_NFT_DESCRIPTOR: '0x53B1aAA5b6DDFD4eD00D0A7b5Ef333dc74B605b5' as Address,
|
|
32
33
|
} as const
|
|
33
34
|
|
|
34
35
|
/**
|
|
35
36
|
* Contract addresses for Lux Testnet (96368)
|
|
36
37
|
*/
|
|
37
38
|
export const LUX_TESTNET_CONTRACTS = {
|
|
38
|
-
// Core
|
|
39
|
-
WLUX: '
|
|
40
|
-
WETH: '0xd9956542B51032d940ef076d70B69410667277A3' as Address,
|
|
39
|
+
// Core — deployed via DeployMultiNetwork.s.sol 2026-02-27
|
|
40
|
+
WLUX: '0xDe5310d0Eccc04C8987cB66Ff6b89Ee793442C91' as Address,
|
|
41
41
|
MULTICALL: '0xd25F88CBdAe3c2CCA3Bb75FC4E723b44C0Ea362F' as Address,
|
|
42
42
|
|
|
43
|
-
//
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
// Bridge tokens — deployed via DeployMultiNetwork.s.sol 2026-02-27
|
|
44
|
+
LETH: '0xA695a8A66fbe3E32d15a531db04185313595771A' as Address,
|
|
45
|
+
LBTC: '0x5a88986958ea76Dd043f834542724F081cA1443B' as Address,
|
|
46
|
+
LUSDC: '0x8a3fad1c7FB94461621351aa6A983B6f814F039c' as Address,
|
|
46
47
|
|
|
47
|
-
// AMM
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
V3_SWAP_ROUTER_02: '0x939bC0Bca6F9B9c52E6e3AD8A3C590b5d9B9D10E' as Address,
|
|
51
|
-
V3_QUOTER: '0x12e2B76FaF4dDA5a173a4532916bb6Bfa3645275' as Address,
|
|
52
|
-
V3_QUOTER_V2: '0x15C729fdd833Ba675edd466Dfc63E1B737925A4c' as Address,
|
|
53
|
-
V3_TICK_LENS: '0x57A22965AdA0e52D785A9Aa155beF423D573b879' as Address,
|
|
54
|
-
V3_NFT_POSITION_MANAGER: '0x7a4C48B9dae0b7c396569b34042fcA604150Ee28' as Address,
|
|
55
|
-
V3_NFT_DESCRIPTOR: '0x53B1aAA5b6DDFD4eD00D0A7b5Ef333dc74B605b5' as Address,
|
|
48
|
+
// AMM V2 — deployed via DeployMultiNetwork.s.sol 2026-02-27
|
|
49
|
+
V2_FACTORY: '0x1DD4e6cbC6B8FD032fCAD5A3B0a45e446A014637' as Address,
|
|
50
|
+
V2_ROUTER: '0xb06B31521Afc434F87Fe4852c98FC15A26c92aE8' as Address,
|
|
56
51
|
} as const
|
|
57
52
|
|
|
58
53
|
/**
|
|
59
|
-
* DEX Precompile addresses (native AMM)
|
|
60
|
-
* These provide sub-microsecond execution
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
* -
|
|
64
|
-
* -
|
|
65
|
-
*
|
|
66
|
-
* @see ~/work/lux/precompile/
|
|
54
|
+
* DEX Precompile addresses (native AMM - Lux v4 style singleton PoolManager)
|
|
55
|
+
* These provide sub-microsecond execution via native Go implementation
|
|
56
|
+
*
|
|
57
|
+
* Address format: 0x0000...00LPNUMBER (addresses end with LP number)
|
|
58
|
+
* LP-9010: DEX Precompile - Native HFT Order Book (PoolManager)
|
|
59
|
+
* LP-9011: Oracle Precompile - Multi-Source Price Aggregation
|
|
60
|
+
*
|
|
61
|
+
* @see ~/work/lux/precompile/registry/registry.go for the full address scheme
|
|
62
|
+
* @see ~/work/lux/dex/pkg/gateway/lux/provider.go for gateway implementation
|
|
67
63
|
*/
|
|
68
64
|
export const DEX_PRECOMPILES = {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
65
|
+
// Core DEX (LP-9010 series - Lux v4 style)
|
|
66
|
+
POOL_MANAGER: '0x0000000000000000000000000000000000009010' as Address, // LP-9010
|
|
67
|
+
SWAP_ROUTER: '0x0000000000000000000000000000000000009012' as Address, // LP-9012
|
|
68
|
+
HOOKS_REGISTRY: '0x0000000000000000000000000000000000009013' as Address, // LP-9013
|
|
69
|
+
FLASH_LOAN: '0x0000000000000000000000000000000000009014' as Address, // LP-9014
|
|
70
|
+
|
|
71
|
+
// DeFi Extensions
|
|
72
|
+
ORACLE_HUB: '0x0000000000000000000000000000000000009011' as Address, // LP-9011
|
|
73
|
+
CLOB: '0x0000000000000000000000000000000000009020' as Address, // LP-9020
|
|
74
|
+
VAULT: '0x0000000000000000000000000000000000009030' as Address, // LP-9030
|
|
75
|
+
|
|
76
|
+
// Bridges (LP-6xxx)
|
|
77
|
+
TELEPORT: '0x0000000000000000000000000000000000006010' as Address, // LP-6010
|
|
76
78
|
} as const
|
|
77
79
|
|
|
78
80
|
/**
|
|
79
81
|
* Contract addresses for Lux Dev (1337)
|
|
82
|
+
* Deterministic CREATE addresses from DeployFullStack.s.sol deployed by anvil account 0
|
|
83
|
+
* Account 0: 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
|
|
80
84
|
*/
|
|
81
85
|
export const LUX_DEV_CONTRACTS = {
|
|
82
|
-
// Core
|
|
83
|
-
WLUX: '
|
|
86
|
+
// Core - Nonce 0
|
|
87
|
+
WLUX: '0x5FbDB2315678afecb367f032d93F642f64180aa3' as Address,
|
|
84
88
|
MULTICALL: '0xd25F88CBdAe3c2CCA3Bb75FC4E723b44C0Ea362F' as Address,
|
|
85
89
|
|
|
86
|
-
// Bridged tokens (
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
USDT: '0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9' as Address,
|
|
91
|
-
DAI: '0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9' as Address,
|
|
92
|
-
AI: '0x0B306BF915C4d645ff596e518fAf3F9669b97016' as Address,
|
|
90
|
+
// Bridged tokens (deterministic deployment nonces 1-3)
|
|
91
|
+
LETH: '0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512' as Address, // Nonce 1
|
|
92
|
+
LBTC: '0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0' as Address, // Nonce 2
|
|
93
|
+
LUSD: '0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9' as Address, // Nonce 3
|
|
93
94
|
|
|
94
95
|
// AMM V2
|
|
95
96
|
V2_FACTORY: '0x959922bE3CAee4b8Cd9a407cc3ac1C251C2007B1' as Address,
|
package/src/hooks/use-pools.ts
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
import { useQuery } from '@tanstack/react-query'
|
|
4
4
|
import { usePublicClient } from 'wagmi'
|
|
5
5
|
import { getContracts } from '../contracts'
|
|
6
|
-
import {
|
|
6
|
+
import { LUX_V3_FACTORY_ABI, LUX_V3_POOL_ABI } from '../contracts/abis'
|
|
7
|
+
import { LUX_MAINNET_CONTRACTS } from '../contracts/addresses'
|
|
7
8
|
import type { Address } from 'viem'
|
|
8
9
|
|
|
9
10
|
export interface Pool {
|
|
@@ -28,6 +29,7 @@ export function usePool(
|
|
|
28
29
|
) {
|
|
29
30
|
const publicClient = usePublicClient({ chainId })
|
|
30
31
|
const contracts = getContracts(chainId)
|
|
32
|
+
const v3Factory = 'V3_FACTORY' in contracts ? contracts.V3_FACTORY : LUX_MAINNET_CONTRACTS.V3_FACTORY
|
|
31
33
|
|
|
32
34
|
return useQuery({
|
|
33
35
|
queryKey: ['pool', token0, token1, fee, chainId],
|
|
@@ -37,8 +39,8 @@ export function usePool(
|
|
|
37
39
|
try {
|
|
38
40
|
// Get pool address from factory
|
|
39
41
|
const poolAddress = await publicClient.readContract({
|
|
40
|
-
address:
|
|
41
|
-
abi:
|
|
42
|
+
address: v3Factory,
|
|
43
|
+
abi: LUX_V3_FACTORY_ABI,
|
|
42
44
|
functionName: 'getPool',
|
|
43
45
|
args: [token0, token1, fee],
|
|
44
46
|
})
|
|
@@ -51,17 +53,17 @@ export function usePool(
|
|
|
51
53
|
const [slot0, liquidity, tickSpacing] = await Promise.all([
|
|
52
54
|
publicClient.readContract({
|
|
53
55
|
address: poolAddress,
|
|
54
|
-
abi:
|
|
56
|
+
abi: LUX_V3_POOL_ABI,
|
|
55
57
|
functionName: 'slot0',
|
|
56
58
|
}),
|
|
57
59
|
publicClient.readContract({
|
|
58
60
|
address: poolAddress,
|
|
59
|
-
abi:
|
|
61
|
+
abi: LUX_V3_POOL_ABI,
|
|
60
62
|
functionName: 'liquidity',
|
|
61
63
|
}),
|
|
62
64
|
publicClient.readContract({
|
|
63
65
|
address: poolAddress,
|
|
64
|
-
abi:
|
|
66
|
+
abi: LUX_V3_POOL_ABI,
|
|
65
67
|
functionName: 'tickSpacing',
|
|
66
68
|
}),
|
|
67
69
|
])
|
|
@@ -33,7 +33,7 @@ export function usePositions(owner: Address | undefined, chainId: number) {
|
|
|
33
33
|
try {
|
|
34
34
|
// Get number of positions
|
|
35
35
|
const balance = await publicClient.readContract({
|
|
36
|
-
address: contracts.V3_NFT_POSITION_MANAGER,
|
|
36
|
+
address: (contracts as any).V3_NFT_POSITION_MANAGER,
|
|
37
37
|
abi: NFT_POSITION_MANAGER_ABI,
|
|
38
38
|
functionName: 'balanceOf',
|
|
39
39
|
args: [owner],
|
|
@@ -45,7 +45,7 @@ export function usePositions(owner: Address | undefined, chainId: number) {
|
|
|
45
45
|
const tokenIds = await Promise.all(
|
|
46
46
|
Array.from({ length: Number(balance) }, (_, i) =>
|
|
47
47
|
publicClient.readContract({
|
|
48
|
-
address: contracts.V3_NFT_POSITION_MANAGER,
|
|
48
|
+
address: (contracts as any).V3_NFT_POSITION_MANAGER,
|
|
49
49
|
abi: NFT_POSITION_MANAGER_ABI,
|
|
50
50
|
functionName: 'tokenOfOwnerByIndex',
|
|
51
51
|
args: [owner, BigInt(i)],
|
|
@@ -57,7 +57,7 @@ export function usePositions(owner: Address | undefined, chainId: number) {
|
|
|
57
57
|
const positions = await Promise.all(
|
|
58
58
|
tokenIds.map(async (tokenId) => {
|
|
59
59
|
const position = await publicClient.readContract({
|
|
60
|
-
address: contracts.V3_NFT_POSITION_MANAGER,
|
|
60
|
+
address: (contracts as any).V3_NFT_POSITION_MANAGER,
|
|
61
61
|
abi: NFT_POSITION_MANAGER_ABI,
|
|
62
62
|
functionName: 'positions',
|
|
63
63
|
args: [tokenId],
|
|
@@ -43,7 +43,7 @@ export function useSwapQuote({
|
|
|
43
43
|
try {
|
|
44
44
|
// Call QuoterV2 for quote
|
|
45
45
|
const result = await publicClient.simulateContract({
|
|
46
|
-
address: contracts.V3_QUOTER_V2,
|
|
46
|
+
address: (contracts as any).V3_QUOTER_V2,
|
|
47
47
|
abi: QUOTER_V2_ABI,
|
|
48
48
|
functionName: 'quoteExactInputSingle',
|
|
49
49
|
args: [
|
package/src/hooks/use-swap.ts
CHANGED
|
@@ -31,7 +31,7 @@ export function useSwap() {
|
|
|
31
31
|
const isNativeIn = isNativeToken(params.tokenIn)
|
|
32
32
|
|
|
33
33
|
const txHash = await writeContractAsync({
|
|
34
|
-
address: contracts.V3_SWAP_ROUTER_02,
|
|
34
|
+
address: (contracts as any).V3_SWAP_ROUTER_02 ?? contracts.V2_ROUTER,
|
|
35
35
|
abi: SWAP_ROUTER_ABI,
|
|
36
36
|
functionName: 'exactInputSingle',
|
|
37
37
|
args: [
|