@paraswap/dex-lib 2.21.0 → 2.21.1-chronos
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/build/config.js +2 -4
- package/build/config.js.map +1 -1
- package/build/dex/balancer-v2/balancer-v2.d.ts +3 -9
- package/build/dex/balancer-v2/balancer-v2.js +0 -83
- package/build/dex/balancer-v2/balancer-v2.js.map +1 -1
- package/build/dex/balancer-v2/constants.d.ts +0 -4
- package/build/dex/balancer-v2/constants.js +1 -6
- package/build/dex/balancer-v2/constants.js.map +1 -1
- package/build/dex/balancer-v2/types.d.ts +1 -20
- package/build/dex/balancer-v2/types.js.map +1 -1
- package/build/dex/curve-v1/constants.d.ts +0 -1
- package/build/dex/curve-v1/constants.js +1 -2
- package/build/dex/curve-v1/constants.js.map +1 -1
- package/build/dex/curve-v1/curve-v1.d.ts +3 -9
- package/build/dex/curve-v1/curve-v1.js +4 -92
- package/build/dex/curve-v1/curve-v1.js.map +1 -1
- package/build/dex/curve-v1/types.d.ts +0 -24
- package/build/dex/curve-v1/types.js +1 -6
- package/build/dex/curve-v1/types.js.map +1 -1
- package/build/dex/curve-v1-factory/constants.d.ts +0 -1
- package/build/dex/curve-v1-factory/constants.js +1 -2
- package/build/dex/curve-v1-factory/constants.js.map +1 -1
- package/build/dex/curve-v1-factory/curve-v1-factory.d.ts +4 -11
- package/build/dex/curve-v1-factory/curve-v1-factory.js +0 -87
- package/build/dex/curve-v1-factory/curve-v1-factory.js.map +1 -1
- package/build/dex/curve-v1-factory/types.d.ts +0 -24
- package/build/dex/curve-v1-factory/types.js +1 -6
- package/build/dex/curve-v1-factory/types.js.map +1 -1
- package/build/dex/curve-v2.d.ts +7 -29
- package/build/dex/curve-v2.js +1 -91
- package/build/dex/curve-v2.js.map +1 -1
- package/build/dex/idex.d.ts +1 -1
- package/build/dex/index.js +2 -4
- package/build/dex/index.js.map +1 -1
- package/build/dex/pancakeswap-v3/pancakeswap-v3.d.ts +2 -2
- package/build/dex/pancakeswap-v3/utils.js.map +1 -1
- package/build/dex/quickswap/config.js +0 -8
- package/build/dex/quickswap/config.js.map +1 -1
- package/build/dex/simple-exchange.d.ts +0 -2
- package/build/dex/simple-exchange.js +0 -1
- package/build/dex/simple-exchange.js.map +1 -1
- package/build/dex/solidly/config.js +13 -0
- package/build/dex/solidly/config.js.map +1 -1
- package/build/dex/solidly/forks-override/chronos.d.ts +3 -0
- package/build/dex/solidly/forks-override/chronos.js +88 -0
- package/build/dex/solidly/forks-override/chronos.js.map +1 -1
- package/build/dex/solidly/solidly.js +1 -0
- package/build/dex/solidly/solidly.js.map +1 -1
- package/build/dex/uniswap-v2/uniswap-v2.d.ts +1 -1
- package/build/dex/uniswap-v2/uniswap-v2.js +1 -1
- package/build/dex/uniswap-v2/uniswap-v2.js.map +1 -1
- package/build/dex/uniswap-v3/constants.d.ts +0 -4
- package/build/dex/uniswap-v3/constants.js +1 -6
- package/build/dex/uniswap-v3/constants.js.map +1 -1
- package/build/dex/uniswap-v3/types.d.ts +3 -20
- package/build/dex/uniswap-v3/types.js.map +1 -1
- package/build/dex/uniswap-v3/uniswap-v3.d.ts +1 -7
- package/build/dex/uniswap-v3/uniswap-v3.js +1 -85
- package/build/dex/uniswap-v3/uniswap-v3.js.map +1 -1
- package/build/dex/woo-fi-v2/config.js +6 -6
- package/build/dex/zerox/index.d.ts +1 -1
- package/build/dex/zerox/index.js +1 -1
- package/build/dex/zerox/index.js.map +1 -1
- package/build/implementations/local-paraswap-sdk.js +1 -5
- package/build/implementations/local-paraswap-sdk.js.map +1 -1
- package/build/router/directswap.js +1 -7
- package/build/router/directswap.js.map +1 -1
- package/build/router/index.js.map +1 -1
- package/build/router/payload-encoder.js +6 -16
- package/build/router/payload-encoder.js.map +1 -1
- package/build/types.d.ts +0 -2
- package/build/utils.d.ts +0 -2
- package/build/utils.js +1 -5
- package/build/utils.js.map +1 -1
- package/package.json +4 -6
- package/src/config.ts +2 -5
- package/src/dex/balancer-v2/balancer-v2-e2e.test.ts +0 -79
- package/src/dex/balancer-v2/balancer-v2.ts +4 -153
- package/src/dex/balancer-v2/constants.ts +0 -5
- package/src/dex/balancer-v2/types.ts +1 -21
- package/src/dex/curve-v1/constants.ts +0 -2
- package/src/dex/curve-v1/curve-v1-e2e.test.ts +0 -57
- package/src/dex/curve-v1/curve-v1.ts +5 -144
- package/src/dex/curve-v1/types.ts +0 -26
- package/src/dex/curve-v1-factory/constants.ts +0 -2
- package/src/dex/curve-v1-factory/curve-v1-factory-e2e.test.ts +0 -1
- package/src/dex/curve-v1-factory/curve-v1-factory.ts +4 -140
- package/src/dex/curve-v1-factory/types.ts +0 -26
- package/src/dex/curve-v2.ts +8 -169
- package/src/dex/idex.ts +0 -6
- package/src/dex/index.ts +2 -4
- package/src/dex/pancakeswap-v3/pancakeswap-v3-e2e.test.ts +6 -3
- package/src/dex/pancakeswap-v3/pancakeswap-v3-integration.test.ts +14 -3
- package/src/dex/pancakeswap-v3/pancakeswap-v3.ts +3 -3
- package/src/dex/pancakeswap-v3/utils.ts +4 -1
- package/src/dex/quickswap/config.ts +0 -9
- package/src/dex/quickswap/quickswap-e2e.test.ts +0 -109
- package/src/dex/simple-exchange.ts +0 -6
- package/src/dex/solidly/config.ts +14 -0
- package/src/dex/solidly/forks-override/chronos.ts +206 -0
- package/src/dex/solidly/solidly-e2e.test.ts +205 -31
- package/src/dex/solidly/solidly-integration.test.ts +141 -0
- package/src/dex/solidly/solidly.ts +1 -0
- package/src/dex/uniswap-v2/uniswap-v2.ts +0 -6
- package/src/dex/uniswap-v3/constants.ts +0 -5
- package/src/dex/uniswap-v3/types.ts +3 -23
- package/src/dex/uniswap-v3/uniswap-v3-e2e.test.ts +2 -100
- package/src/dex/uniswap-v3/uniswap-v3.ts +3 -138
- package/src/dex/woo-fi-v2/config.ts +6 -6
- package/src/dex/zerox/index.ts +0 -7
- package/src/implementations/local-paraswap-sdk.ts +1 -8
- package/src/router/directswap.ts +0 -23
- package/src/router/index.ts +2 -0
- package/src/router/payload-encoder.ts +5 -22
- package/src/types.ts +0 -2
- package/src/utils.ts +0 -5
- package/tests/constants-e2e.ts +9 -4
- package/tests/utils-e2e.ts +20 -140
- package/tests/utils.ts +0 -52
- package/src/abi/DirectSwap.json +0 -1018
- package/src/abi/swaap-v2/vault.json +0 -918
- package/src/dex/quickswap/camelot-v3.ts +0 -15
- package/src/dex/swaap-v2/config.ts +0 -19
- package/src/dex/swaap-v2/constants.ts +0 -37
- package/src/dex/swaap-v2/rate-fetcher.ts +0 -214
- package/src/dex/swaap-v2/swaap-v2-e2e.test.ts +0 -172
- package/src/dex/swaap-v2/swaap-v2-integration.test.ts +0 -142
- package/src/dex/swaap-v2/swaap-v2.ts +0 -901
- package/src/dex/swaap-v2/types.ts +0 -95
- package/src/dex/swaap-v2/utils.ts +0 -36
- package/src/dex/swaap-v2/validators.ts +0 -128
|
@@ -11,6 +11,7 @@ import { Interface, Result } from '@ethersproject/abi';
|
|
|
11
11
|
import solidlyPairABI from '../../abi/solidly/SolidlyPair.json';
|
|
12
12
|
import { SpiritSwapV2 } from './forks-override/spiritSwapV2';
|
|
13
13
|
import { Cone } from './forks-override/cone';
|
|
14
|
+
import { Chronos } from './forks-override/chronos';
|
|
14
15
|
|
|
15
16
|
const amounts18 = [0n, BI_POWS[18], 2000000000000000000n];
|
|
16
17
|
const amounts6 = [0n, BI_POWS[6], 2000000n];
|
|
@@ -628,4 +629,144 @@ describe('Solidly integration tests', () => {
|
|
|
628
629
|
});
|
|
629
630
|
});
|
|
630
631
|
});
|
|
632
|
+
|
|
633
|
+
describe('Arbitrum', () => {
|
|
634
|
+
const network = Network.ARBITRUM;
|
|
635
|
+
const dexHelper = new DummyDexHelper(network);
|
|
636
|
+
const checkOnChainPricing = constructCheckOnChainPricing(dexHelper);
|
|
637
|
+
|
|
638
|
+
describe('Chronos', function () {
|
|
639
|
+
const dexKey = 'Chronos';
|
|
640
|
+
const chronos = new Chronos(network, dexKey, dexHelper);
|
|
641
|
+
|
|
642
|
+
describe('UniswapV2 like pool', function () {
|
|
643
|
+
const TokenASymbol = 'USDC';
|
|
644
|
+
const tokenA = Tokens[network][TokenASymbol];
|
|
645
|
+
const TokenBSymbol = 'WETH';
|
|
646
|
+
const tokenB = Tokens[network][TokenBSymbol];
|
|
647
|
+
|
|
648
|
+
const amounts = amounts18;
|
|
649
|
+
|
|
650
|
+
it('getPoolIdentifiers and getPricesVolume', async function () {
|
|
651
|
+
const blocknumber = await dexHelper.web3Provider.eth.getBlockNumber();
|
|
652
|
+
const pools = await chronos.getPoolIdentifiers(
|
|
653
|
+
tokenA,
|
|
654
|
+
tokenB,
|
|
655
|
+
SwapSide.SELL,
|
|
656
|
+
blocknumber,
|
|
657
|
+
);
|
|
658
|
+
console.log(
|
|
659
|
+
`${TokenASymbol} <> ${TokenBSymbol} Pool Identifiers: `,
|
|
660
|
+
pools,
|
|
661
|
+
);
|
|
662
|
+
|
|
663
|
+
expect(pools.length).toBeGreaterThan(0);
|
|
664
|
+
|
|
665
|
+
const poolPrices = await chronos.getPricesVolume(
|
|
666
|
+
tokenA,
|
|
667
|
+
tokenB,
|
|
668
|
+
amounts,
|
|
669
|
+
SwapSide.SELL,
|
|
670
|
+
blocknumber,
|
|
671
|
+
pools,
|
|
672
|
+
);
|
|
673
|
+
console.log(
|
|
674
|
+
`${TokenASymbol} <> ${TokenBSymbol} Pool Prices: `,
|
|
675
|
+
poolPrices,
|
|
676
|
+
);
|
|
677
|
+
|
|
678
|
+
expect(poolPrices).not.toBeNull();
|
|
679
|
+
checkPoolPrices(poolPrices!, amounts, SwapSide.SELL, dexKey);
|
|
680
|
+
|
|
681
|
+
// Check if onchain pricing equals to calculated ones
|
|
682
|
+
|
|
683
|
+
for (const i in poolPrices || []) {
|
|
684
|
+
await checkOnChainPricing(
|
|
685
|
+
chronos,
|
|
686
|
+
'getAmountOut',
|
|
687
|
+
blocknumber,
|
|
688
|
+
poolPrices![i].prices,
|
|
689
|
+
poolPrices![i].poolAddresses![0],
|
|
690
|
+
tokenA.address,
|
|
691
|
+
amounts,
|
|
692
|
+
);
|
|
693
|
+
}
|
|
694
|
+
});
|
|
695
|
+
|
|
696
|
+
it('getTopPoolsForToken', async function () {
|
|
697
|
+
const poolLiquidity = await chronos.getTopPoolsForToken(
|
|
698
|
+
tokenA.address,
|
|
699
|
+
10,
|
|
700
|
+
);
|
|
701
|
+
console.log(`${TokenASymbol} Top Pools:`, poolLiquidity);
|
|
702
|
+
|
|
703
|
+
checkPoolsLiquidity(poolLiquidity, tokenA.address, dexKey);
|
|
704
|
+
});
|
|
705
|
+
});
|
|
706
|
+
|
|
707
|
+
describe('Curve like stable pool', function () {
|
|
708
|
+
const TokenASymbol = 'USDT';
|
|
709
|
+
const tokenA = Tokens[network][TokenASymbol];
|
|
710
|
+
const TokenBSymbol = 'USDC';
|
|
711
|
+
const tokenB = Tokens[network][TokenBSymbol];
|
|
712
|
+
|
|
713
|
+
const amounts = amounts6;
|
|
714
|
+
|
|
715
|
+
it('getPoolIdentifiers and getPricesVolume', async function () {
|
|
716
|
+
const blocknumber = await dexHelper.web3Provider.eth.getBlockNumber();
|
|
717
|
+
const pools = await chronos.getPoolIdentifiers(
|
|
718
|
+
tokenA,
|
|
719
|
+
tokenB,
|
|
720
|
+
SwapSide.SELL,
|
|
721
|
+
blocknumber,
|
|
722
|
+
);
|
|
723
|
+
console.log(
|
|
724
|
+
`${TokenASymbol} <> ${TokenBSymbol} Pool Identifiers: `,
|
|
725
|
+
pools,
|
|
726
|
+
);
|
|
727
|
+
|
|
728
|
+
expect(pools.length).toBeGreaterThan(0);
|
|
729
|
+
|
|
730
|
+
const poolPrices = await chronos.getPricesVolume(
|
|
731
|
+
tokenA,
|
|
732
|
+
tokenB,
|
|
733
|
+
amounts,
|
|
734
|
+
SwapSide.SELL,
|
|
735
|
+
blocknumber,
|
|
736
|
+
pools,
|
|
737
|
+
);
|
|
738
|
+
console.log(
|
|
739
|
+
`${TokenASymbol} <> ${TokenBSymbol} Pool Prices: `,
|
|
740
|
+
poolPrices,
|
|
741
|
+
);
|
|
742
|
+
|
|
743
|
+
expect(poolPrices).not.toBeNull();
|
|
744
|
+
checkPoolPrices(poolPrices!, amounts, SwapSide.SELL, dexKey);
|
|
745
|
+
|
|
746
|
+
// Check if onchain pricing equals to calculated ones
|
|
747
|
+
for (const i in poolPrices || []) {
|
|
748
|
+
await checkOnChainPricing(
|
|
749
|
+
chronos,
|
|
750
|
+
'getAmountOut',
|
|
751
|
+
blocknumber,
|
|
752
|
+
poolPrices![i].prices,
|
|
753
|
+
poolPrices![i].poolAddresses![0],
|
|
754
|
+
tokenA.address,
|
|
755
|
+
amounts,
|
|
756
|
+
);
|
|
757
|
+
}
|
|
758
|
+
});
|
|
759
|
+
|
|
760
|
+
it('getTopPoolsForToken', async function () {
|
|
761
|
+
const poolLiquidity = await chronos.getTopPoolsForToken(
|
|
762
|
+
tokenA.address,
|
|
763
|
+
10,
|
|
764
|
+
);
|
|
765
|
+
console.log(`${TokenASymbol} Top Pools:`, poolLiquidity);
|
|
766
|
+
|
|
767
|
+
checkPoolsLiquidity(poolLiquidity, tokenA.address, dexKey);
|
|
768
|
+
});
|
|
769
|
+
});
|
|
770
|
+
});
|
|
771
|
+
});
|
|
631
772
|
});
|
|
@@ -788,15 +788,9 @@ export class UniswapV2
|
|
|
788
788
|
destToken: Address,
|
|
789
789
|
srcAmount: NumberAsString,
|
|
790
790
|
destAmount: NumberAsString,
|
|
791
|
-
expectedAmount: NumberAsString,
|
|
792
791
|
_data: UniswapData,
|
|
793
792
|
side: SwapSide,
|
|
794
793
|
permit: string,
|
|
795
|
-
uuid: string,
|
|
796
|
-
feePercent: NumberAsString,
|
|
797
|
-
deadline: NumberAsString,
|
|
798
|
-
partner: string,
|
|
799
|
-
beneficiary: string,
|
|
800
794
|
contractMethod?: string,
|
|
801
795
|
): TxInfo<UniswapParam> {
|
|
802
796
|
if (!contractMethod) throw new Error(`contractMethod need to be passed`);
|
|
@@ -34,8 +34,3 @@ export const ZERO_ORACLE_OBSERVATION = {
|
|
|
34
34
|
export const OUT_OF_RANGE_ERROR_POSTFIX = `INVALID_TICK_BIT_MAP_RANGES`;
|
|
35
35
|
|
|
36
36
|
export const DEFAULT_POOL_INIT_CODE_HASH = `0xe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b54`;
|
|
37
|
-
|
|
38
|
-
export enum DirectMethods {
|
|
39
|
-
directSell = 'directUniV3Swap',
|
|
40
|
-
directBuy = 'directUniV3Buy',
|
|
41
|
-
}
|
|
@@ -57,7 +57,6 @@ export type UniswapV3Data = {
|
|
|
57
57
|
tokenOut: Address;
|
|
58
58
|
fee: NumberAsString;
|
|
59
59
|
}[];
|
|
60
|
-
isApproved?: boolean;
|
|
61
60
|
};
|
|
62
61
|
|
|
63
62
|
export type DexParams = {
|
|
@@ -73,7 +72,7 @@ export type DexParams = {
|
|
|
73
72
|
initHash: string;
|
|
74
73
|
};
|
|
75
74
|
|
|
76
|
-
export type
|
|
75
|
+
export type UniswapV3SellParam = {
|
|
77
76
|
path: string;
|
|
78
77
|
recipient: Address;
|
|
79
78
|
deadline: string;
|
|
@@ -81,7 +80,7 @@ export type UniswapV3SimpleSwapSellParam = {
|
|
|
81
80
|
amountOutMinimum: NumberAsString;
|
|
82
81
|
};
|
|
83
82
|
|
|
84
|
-
export type
|
|
83
|
+
export type UniswapV3BuyParam = {
|
|
85
84
|
path: string;
|
|
86
85
|
recipient: Address;
|
|
87
86
|
deadline: string;
|
|
@@ -89,26 +88,7 @@ export type UniswapV3SimpleSwapBuyParam = {
|
|
|
89
88
|
amountInMaximum: NumberAsString;
|
|
90
89
|
};
|
|
91
90
|
|
|
92
|
-
export type
|
|
93
|
-
| UniswapV3SimpleSwapSellParam
|
|
94
|
-
| UniswapV3SimpleSwapBuyParam;
|
|
95
|
-
|
|
96
|
-
export type UniswapV3Param = [
|
|
97
|
-
fromToken: Address,
|
|
98
|
-
toToken: Address,
|
|
99
|
-
exchange: Address,
|
|
100
|
-
fromAmount: NumberAsString,
|
|
101
|
-
toAmount: NumberAsString,
|
|
102
|
-
expectedAmount: NumberAsString,
|
|
103
|
-
feePercent: NumberAsString,
|
|
104
|
-
deadline: NumberAsString,
|
|
105
|
-
partner: Address,
|
|
106
|
-
isApproved: boolean,
|
|
107
|
-
beneficiary: Address,
|
|
108
|
-
path: string,
|
|
109
|
-
permit: string,
|
|
110
|
-
uuid: string,
|
|
111
|
-
];
|
|
91
|
+
export type UniswapV3Param = UniswapV3SellParam | UniswapV3BuyParam;
|
|
112
92
|
|
|
113
93
|
export enum UniswapV3Functions {
|
|
114
94
|
exactInput = 'exactInput',
|
|
@@ -49,20 +49,6 @@ describe('UniswapV3 E2E', () => {
|
|
|
49
49
|
provider,
|
|
50
50
|
);
|
|
51
51
|
});
|
|
52
|
-
|
|
53
|
-
it('directSwap SELL WETH -> USDC', async () => {
|
|
54
|
-
await testE2E(
|
|
55
|
-
tokens['WETH'],
|
|
56
|
-
tokens['USDC'],
|
|
57
|
-
holders['WETH'],
|
|
58
|
-
'1000000000000000000',
|
|
59
|
-
SwapSide.SELL,
|
|
60
|
-
dexKey,
|
|
61
|
-
ContractMethod.directUniV3Swap,
|
|
62
|
-
network,
|
|
63
|
-
provider,
|
|
64
|
-
);
|
|
65
|
-
});
|
|
66
52
|
});
|
|
67
53
|
|
|
68
54
|
describe('UniswapV3 POLYGON', () => {
|
|
@@ -78,7 +64,7 @@ describe('UniswapV3 E2E', () => {
|
|
|
78
64
|
const tokenBSymbol: string = 'WETH';
|
|
79
65
|
const nativeTokenSymbol = NativeTokenSymbols[network];
|
|
80
66
|
|
|
81
|
-
const tokenAAmount: string = '
|
|
67
|
+
const tokenAAmount: string = '11111000000';
|
|
82
68
|
const tokenBAmount: string = '11000000000000000000';
|
|
83
69
|
const nativeTokenAmount = '11000000000000000000';
|
|
84
70
|
|
|
@@ -89,17 +75,9 @@ describe('UniswapV3 E2E', () => {
|
|
|
89
75
|
ContractMethod.simpleSwap,
|
|
90
76
|
ContractMethod.multiSwap,
|
|
91
77
|
ContractMethod.megaSwap,
|
|
92
|
-
ContractMethod.directUniV3Swap,
|
|
93
|
-
],
|
|
94
|
-
],
|
|
95
|
-
[
|
|
96
|
-
SwapSide.BUY,
|
|
97
|
-
[
|
|
98
|
-
ContractMethod.simpleBuy,
|
|
99
|
-
ContractMethod.buy,
|
|
100
|
-
ContractMethod.directUniV3Buy,
|
|
101
78
|
],
|
|
102
79
|
],
|
|
80
|
+
[SwapSide.BUY, [ContractMethod.simpleBuy, ContractMethod.buy]],
|
|
103
81
|
]);
|
|
104
82
|
|
|
105
83
|
sideToContractMethods.forEach((contractMethods, side) =>
|
|
@@ -224,80 +202,4 @@ describe('UniswapV3 E2E', () => {
|
|
|
224
202
|
}),
|
|
225
203
|
);
|
|
226
204
|
});
|
|
227
|
-
|
|
228
|
-
describe('UniswapV3 Optimism', () => {
|
|
229
|
-
const network = Network.OPTIMISM;
|
|
230
|
-
const tokens = Tokens[network];
|
|
231
|
-
const holders = Holders[network];
|
|
232
|
-
const provider = new StaticJsonRpcProvider(
|
|
233
|
-
generateConfig(network).privateHttpProvider,
|
|
234
|
-
network,
|
|
235
|
-
);
|
|
236
|
-
|
|
237
|
-
const tokenASymbol: string = 'OP';
|
|
238
|
-
const tokenBSymbol: string = 'ETH';
|
|
239
|
-
const nativeTokenSymbol = NativeTokenSymbols[network];
|
|
240
|
-
|
|
241
|
-
const tokenAAmount: string = '1000000000000000000';
|
|
242
|
-
const tokenBAmount: string = '1000000000000000000';
|
|
243
|
-
const nativeTokenAmount = '1000000000000000000';
|
|
244
|
-
|
|
245
|
-
const sideToContractMethods = new Map([
|
|
246
|
-
[
|
|
247
|
-
SwapSide.SELL,
|
|
248
|
-
[
|
|
249
|
-
ContractMethod.simpleSwap,
|
|
250
|
-
ContractMethod.multiSwap,
|
|
251
|
-
ContractMethod.megaSwap,
|
|
252
|
-
],
|
|
253
|
-
],
|
|
254
|
-
[SwapSide.BUY, [ContractMethod.simpleBuy, ContractMethod.buy]],
|
|
255
|
-
]);
|
|
256
|
-
|
|
257
|
-
sideToContractMethods.forEach((contractMethods, side) =>
|
|
258
|
-
contractMethods.forEach((contractMethod: ContractMethod) => {
|
|
259
|
-
describe(`${contractMethod}`, () => {
|
|
260
|
-
it(`${network} ${side} ${contractMethod} ${nativeTokenSymbol} -> ${tokenASymbol}`, async () => {
|
|
261
|
-
await testE2E(
|
|
262
|
-
tokens[nativeTokenSymbol],
|
|
263
|
-
tokens[tokenASymbol],
|
|
264
|
-
holders[nativeTokenSymbol],
|
|
265
|
-
side === SwapSide.SELL ? nativeTokenAmount : tokenAAmount,
|
|
266
|
-
side,
|
|
267
|
-
dexKey,
|
|
268
|
-
contractMethod,
|
|
269
|
-
network,
|
|
270
|
-
provider,
|
|
271
|
-
);
|
|
272
|
-
});
|
|
273
|
-
it(`${network} ${side} ${contractMethod} ${tokenASymbol} -> ${nativeTokenSymbol}`, async () => {
|
|
274
|
-
await testE2E(
|
|
275
|
-
tokens[tokenASymbol],
|
|
276
|
-
tokens[nativeTokenSymbol],
|
|
277
|
-
holders[tokenASymbol],
|
|
278
|
-
side === SwapSide.SELL ? tokenAAmount : nativeTokenAmount,
|
|
279
|
-
side,
|
|
280
|
-
dexKey,
|
|
281
|
-
contractMethod,
|
|
282
|
-
network,
|
|
283
|
-
provider,
|
|
284
|
-
);
|
|
285
|
-
});
|
|
286
|
-
it(`${network} ${side} ${contractMethod} ${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
287
|
-
await testE2E(
|
|
288
|
-
tokens[tokenASymbol],
|
|
289
|
-
tokens[tokenBSymbol],
|
|
290
|
-
holders[tokenASymbol],
|
|
291
|
-
side === SwapSide.SELL ? tokenAAmount : tokenBAmount,
|
|
292
|
-
side,
|
|
293
|
-
dexKey,
|
|
294
|
-
contractMethod,
|
|
295
|
-
network,
|
|
296
|
-
provider,
|
|
297
|
-
);
|
|
298
|
-
});
|
|
299
|
-
});
|
|
300
|
-
}),
|
|
301
|
-
);
|
|
302
|
-
});
|
|
303
205
|
});
|
|
@@ -11,9 +11,6 @@ import {
|
|
|
11
11
|
Logger,
|
|
12
12
|
NumberAsString,
|
|
13
13
|
PoolPrices,
|
|
14
|
-
TxInfo,
|
|
15
|
-
PreprocessTransactionOptions,
|
|
16
|
-
ExchangeTxInfo,
|
|
17
14
|
} from '../../types';
|
|
18
15
|
import { SwapSide, Network, CACHE_PREFIX } from '../../constants';
|
|
19
16
|
import * as CALLDATA_GAS_COST from '../../calldata-gas-cost';
|
|
@@ -22,7 +19,6 @@ import {
|
|
|
22
19
|
getDexKeysWithNetwork,
|
|
23
20
|
interpolate,
|
|
24
21
|
isTruthy,
|
|
25
|
-
uuidToBytes16,
|
|
26
22
|
} from '../../utils';
|
|
27
23
|
import { IDex } from '../../dex/idex';
|
|
28
24
|
import { IDexHelper } from '../../dex-helper/idex-helper';
|
|
@@ -33,7 +29,6 @@ import {
|
|
|
33
29
|
UniswapV3Data,
|
|
34
30
|
UniswapV3Functions,
|
|
35
31
|
UniswapV3Param,
|
|
36
|
-
UniswapV3SimpleSwapParams,
|
|
37
32
|
} from './types';
|
|
38
33
|
import {
|
|
39
34
|
getLocalDeadlineAsFriendlyPlaceholder,
|
|
@@ -44,16 +39,14 @@ import { UniswapV3EventPool } from './uniswap-v3-pool';
|
|
|
44
39
|
import UniswapV3RouterABI from '../../abi/uniswap-v3/UniswapV3Router.abi.json';
|
|
45
40
|
import UniswapV3QuoterABI from '../../abi/uniswap-v3/UniswapV3Quoter.abi.json';
|
|
46
41
|
import UniswapV3MultiABI from '../../abi/uniswap-v3/UniswapMulti.abi.json';
|
|
47
|
-
import DirectSwapABI from '../../abi/DirectSwap.json';
|
|
48
42
|
import UniswapV3StateMulticallABI from '../../abi/uniswap-v3/UniswapV3StateMulticall.abi.json';
|
|
49
43
|
import {
|
|
50
|
-
DirectMethods,
|
|
51
44
|
UNISWAPV3_EFFICIENCY_FACTOR,
|
|
52
45
|
UNISWAPV3_POOL_SEARCH_OVERHEAD,
|
|
53
46
|
UNISWAPV3_TICK_BASE_OVERHEAD,
|
|
54
47
|
UNISWAPV3_TICK_GAS_COST,
|
|
55
48
|
} from './constants';
|
|
56
|
-
import {
|
|
49
|
+
import { DeepReadonly } from 'ts-essentials';
|
|
57
50
|
import { uniswapV3Math } from './contract-math/uniswap-v3-math';
|
|
58
51
|
import { Contract } from 'web3-eth-contract';
|
|
59
52
|
import { AbiItem } from 'web3-utils';
|
|
@@ -63,7 +56,6 @@ import {
|
|
|
63
56
|
DEFAULT_ID_ERC20,
|
|
64
57
|
DEFAULT_ID_ERC20_AS_STRING,
|
|
65
58
|
} from '../../lib/tokens/types';
|
|
66
|
-
import { OptimalSwapExchange } from '@paraswap/core';
|
|
67
59
|
|
|
68
60
|
type PoolPairsInfo = {
|
|
69
61
|
token0: Address;
|
|
@@ -85,8 +77,6 @@ export class UniswapV3
|
|
|
85
77
|
readonly hasConstantPriceLargeAmounts = false;
|
|
86
78
|
readonly needWrapNative = true;
|
|
87
79
|
|
|
88
|
-
readonly directSwapIface = new Interface(DirectSwapABI);
|
|
89
|
-
|
|
90
80
|
intervalTask?: NodeJS.Timeout;
|
|
91
81
|
|
|
92
82
|
public static dexKeysWithNetwork: { key: string; networks: Network[] }[] =
|
|
@@ -123,7 +113,7 @@ export class UniswapV3
|
|
|
123
113
|
// To receive revert reasons
|
|
124
114
|
this.dexHelper.web3Provider.eth.handleRevert = false;
|
|
125
115
|
|
|
126
|
-
//
|
|
116
|
+
// Normalise once all config addresses and use across all scenarios
|
|
127
117
|
this.config = this._toLowerForAllConfigAddresses();
|
|
128
118
|
|
|
129
119
|
this.notExistingPoolSetKey =
|
|
@@ -459,7 +449,6 @@ export class UniswapV3
|
|
|
459
449
|
fee: pool.feeCodeAsString,
|
|
460
450
|
},
|
|
461
451
|
],
|
|
462
|
-
exchange: pool.poolAddress,
|
|
463
452
|
},
|
|
464
453
|
poolIdentifier: this.getPoolIdentifier(
|
|
465
454
|
pool.token0,
|
|
@@ -742,130 +731,6 @@ export class UniswapV3
|
|
|
742
731
|
return arr;
|
|
743
732
|
}
|
|
744
733
|
|
|
745
|
-
getTokenFromAddress(address: Address): Token {
|
|
746
|
-
// In this Dex decimals are not used
|
|
747
|
-
return { address, decimals: 0 };
|
|
748
|
-
}
|
|
749
|
-
|
|
750
|
-
async preProcessTransaction(
|
|
751
|
-
optimalSwapExchange: OptimalSwapExchange<UniswapV3Data>,
|
|
752
|
-
srcToken: Token,
|
|
753
|
-
_0: Token,
|
|
754
|
-
_1: SwapSide,
|
|
755
|
-
options: PreprocessTransactionOptions,
|
|
756
|
-
): Promise<[OptimalSwapExchange<UniswapV3Data>, ExchangeTxInfo]> {
|
|
757
|
-
if (!options.isDirectMethod) {
|
|
758
|
-
return [
|
|
759
|
-
optimalSwapExchange,
|
|
760
|
-
{
|
|
761
|
-
deadline: BigInt(getLocalDeadlineAsFriendlyPlaceholder()),
|
|
762
|
-
},
|
|
763
|
-
];
|
|
764
|
-
}
|
|
765
|
-
|
|
766
|
-
assert(
|
|
767
|
-
optimalSwapExchange.data !== undefined,
|
|
768
|
-
`preProcessTransaction: data field is missing`,
|
|
769
|
-
);
|
|
770
|
-
|
|
771
|
-
let isApproved: boolean | undefined;
|
|
772
|
-
|
|
773
|
-
try {
|
|
774
|
-
this.erc20Contract.options.address =
|
|
775
|
-
this.dexHelper.config.wrapETH(srcToken).address;
|
|
776
|
-
const allowance = await this.erc20Contract.methods
|
|
777
|
-
.allowance(this.augustusAddress, this.config.router)
|
|
778
|
-
.call(undefined, 'latest');
|
|
779
|
-
isApproved =
|
|
780
|
-
BigInt(allowance.toString()) >= BigInt(optimalSwapExchange.srcAmount);
|
|
781
|
-
} catch (e) {
|
|
782
|
-
this.logger.error(
|
|
783
|
-
`preProcessTransaction failed to retrieve allowance info: `,
|
|
784
|
-
e,
|
|
785
|
-
);
|
|
786
|
-
}
|
|
787
|
-
|
|
788
|
-
return [
|
|
789
|
-
{
|
|
790
|
-
...optimalSwapExchange,
|
|
791
|
-
data: {
|
|
792
|
-
...optimalSwapExchange.data,
|
|
793
|
-
isApproved,
|
|
794
|
-
},
|
|
795
|
-
},
|
|
796
|
-
{
|
|
797
|
-
deadline: BigInt(getLocalDeadlineAsFriendlyPlaceholder()),
|
|
798
|
-
},
|
|
799
|
-
];
|
|
800
|
-
}
|
|
801
|
-
|
|
802
|
-
getDirectParam(
|
|
803
|
-
srcToken: Address,
|
|
804
|
-
destToken: Address,
|
|
805
|
-
srcAmount: NumberAsString,
|
|
806
|
-
destAmount: NumberAsString,
|
|
807
|
-
expectedAmount: NumberAsString,
|
|
808
|
-
data: UniswapV3Data,
|
|
809
|
-
side: SwapSide,
|
|
810
|
-
permit: string,
|
|
811
|
-
uuid: string,
|
|
812
|
-
feePercent: NumberAsString,
|
|
813
|
-
deadline: NumberAsString,
|
|
814
|
-
partner: string,
|
|
815
|
-
beneficiary: string,
|
|
816
|
-
contractMethod?: string,
|
|
817
|
-
): TxInfo<UniswapV3Param> {
|
|
818
|
-
if (
|
|
819
|
-
contractMethod !== DirectMethods.directSell &&
|
|
820
|
-
contractMethod !== DirectMethods.directBuy
|
|
821
|
-
) {
|
|
822
|
-
throw new Error(`Invalid contract method ${contractMethod}`);
|
|
823
|
-
}
|
|
824
|
-
|
|
825
|
-
let isApproved: boolean = !!data.isApproved;
|
|
826
|
-
if (data.isApproved === undefined) {
|
|
827
|
-
this.logger.warn(`isApproved is undefined, defaulting to false`);
|
|
828
|
-
}
|
|
829
|
-
|
|
830
|
-
const path = this._encodePath(data.path, side);
|
|
831
|
-
|
|
832
|
-
const swapParams: UniswapV3Param = [
|
|
833
|
-
srcToken,
|
|
834
|
-
destToken,
|
|
835
|
-
this.config.router,
|
|
836
|
-
srcAmount,
|
|
837
|
-
destAmount,
|
|
838
|
-
expectedAmount,
|
|
839
|
-
feePercent,
|
|
840
|
-
deadline,
|
|
841
|
-
partner,
|
|
842
|
-
isApproved,
|
|
843
|
-
beneficiary,
|
|
844
|
-
path,
|
|
845
|
-
permit,
|
|
846
|
-
uuidToBytes16(uuid),
|
|
847
|
-
];
|
|
848
|
-
|
|
849
|
-
const encoder = (...params: UniswapV3Param) => {
|
|
850
|
-
return this.directSwapIface.encodeFunctionData(
|
|
851
|
-
side === SwapSide.SELL
|
|
852
|
-
? DirectMethods.directSell
|
|
853
|
-
: DirectMethods.directBuy,
|
|
854
|
-
[params],
|
|
855
|
-
);
|
|
856
|
-
};
|
|
857
|
-
|
|
858
|
-
return {
|
|
859
|
-
params: swapParams,
|
|
860
|
-
encoder,
|
|
861
|
-
networkFee: '0',
|
|
862
|
-
};
|
|
863
|
-
}
|
|
864
|
-
|
|
865
|
-
static getDirectFunctionName(): string[] {
|
|
866
|
-
return [DirectMethods.directSell, DirectMethods.directBuy];
|
|
867
|
-
}
|
|
868
|
-
|
|
869
734
|
async getSimpleParam(
|
|
870
735
|
srcToken: string,
|
|
871
736
|
destToken: string,
|
|
@@ -880,7 +745,7 @@ export class UniswapV3
|
|
|
880
745
|
: UniswapV3Functions.exactOutput;
|
|
881
746
|
|
|
882
747
|
const path = this._encodePath(data.path, side);
|
|
883
|
-
const swapFunctionParams:
|
|
748
|
+
const swapFunctionParams: UniswapV3Param =
|
|
884
749
|
side === SwapSide.SELL
|
|
885
750
|
? {
|
|
886
751
|
recipient: this.augustusAddress,
|
|
@@ -6,7 +6,7 @@ export const WooFiV2Config: DexConfigMap<DexParams> = {
|
|
|
6
6
|
WooFiV2: {
|
|
7
7
|
[Network.OPTIMISM]: {
|
|
8
8
|
wooPPV2Address: '0xd1778F9DF3eee5473A9640f13682e3846f61fEbC',
|
|
9
|
-
wooOracleV2Address: '
|
|
9
|
+
wooOracleV2Address: '0x464959aD46e64046B891F562cFF202a465D522F3',
|
|
10
10
|
integrationHelperAddress: '0x96329d66074EB8386Ae8bFD6698B2E3FDA87e15E',
|
|
11
11
|
// USDC
|
|
12
12
|
quoteToken: {
|
|
@@ -16,7 +16,7 @@ export const WooFiV2Config: DexConfigMap<DexParams> = {
|
|
|
16
16
|
},
|
|
17
17
|
[Network.BSC]: {
|
|
18
18
|
wooPPV2Address: '0x59dE3B49314Bf5067719364A2Cb43e8525ab93FA',
|
|
19
|
-
wooOracleV2Address: '
|
|
19
|
+
wooOracleV2Address: '0x4B11B9BfAafA840c436a1ddDc13D3738C8ebfD62',
|
|
20
20
|
integrationHelperAddress: '0xAA9c15cd603428cA8ddD45e933F8EfE3Afbcc173',
|
|
21
21
|
// USDT
|
|
22
22
|
quoteToken: {
|
|
@@ -26,7 +26,7 @@ export const WooFiV2Config: DexConfigMap<DexParams> = {
|
|
|
26
26
|
},
|
|
27
27
|
[Network.POLYGON]: {
|
|
28
28
|
wooPPV2Address: '0x7081A38158BD050Ae4a86e38E0225Bc281887d7E',
|
|
29
|
-
wooOracleV2Address: '
|
|
29
|
+
wooOracleV2Address: '0xeFF23B4bE1091b53205E35f3AfCD9C7182bf3062',
|
|
30
30
|
integrationHelperAddress: '0x7Ba560eB735AbDCf9a3a5692272652A0cc81850d',
|
|
31
31
|
// USDC
|
|
32
32
|
quoteToken: {
|
|
@@ -36,7 +36,7 @@ export const WooFiV2Config: DexConfigMap<DexParams> = {
|
|
|
36
36
|
},
|
|
37
37
|
[Network.FANTOM]: {
|
|
38
38
|
wooPPV2Address: '0x286ab107c5E9083dBed35A2B5fb0242538F4f9bf',
|
|
39
|
-
wooOracleV2Address: '
|
|
39
|
+
wooOracleV2Address: '0x8840e26e0ebf7D100A0644DD8576DC62B03cbf04',
|
|
40
40
|
integrationHelperAddress: '0x6641959FE5EED7166F2254cF04b0d20c96776D9A',
|
|
41
41
|
// USDC
|
|
42
42
|
quoteToken: {
|
|
@@ -46,7 +46,7 @@ export const WooFiV2Config: DexConfigMap<DexParams> = {
|
|
|
46
46
|
},
|
|
47
47
|
[Network.ARBITRUM]: {
|
|
48
48
|
wooPPV2Address: '0xeFF23B4bE1091b53205E35f3AfCD9C7182bf3062',
|
|
49
|
-
wooOracleV2Address: '
|
|
49
|
+
wooOracleV2Address: '0x37a9dE70b6734dFCA54395D8061d9411D9910739',
|
|
50
50
|
integrationHelperAddress: '0x28D2B949024FE50627f1EbC5f0Ca3Ca721148E40',
|
|
51
51
|
// USDC
|
|
52
52
|
quoteToken: {
|
|
@@ -56,7 +56,7 @@ export const WooFiV2Config: DexConfigMap<DexParams> = {
|
|
|
56
56
|
},
|
|
57
57
|
[Network.AVALANCHE]: {
|
|
58
58
|
wooPPV2Address: '0x3b3E4b4741e91aF52d0e9ad8660573E951c88524',
|
|
59
|
-
wooOracleV2Address: '
|
|
59
|
+
wooOracleV2Address: '0x9ACA557590F5020BDA4Ba63065Fc3A1253Bf8000',
|
|
60
60
|
integrationHelperAddress: '0x020630613E296c3E9b06186f630D1bF97A2B6Ad1',
|
|
61
61
|
// USDC
|
|
62
62
|
quoteToken: {
|
package/src/dex/zerox/index.ts
CHANGED
|
@@ -269,16 +269,9 @@ export class ZeroX
|
|
|
269
269
|
destToken: Address,
|
|
270
270
|
srcAmount: NumberAsString,
|
|
271
271
|
destAmount: NumberAsString,
|
|
272
|
-
expectedAmount: NumberAsString,
|
|
273
272
|
data: ZeroXData,
|
|
274
273
|
side: SwapSide,
|
|
275
274
|
permit: string,
|
|
276
|
-
uuid: string,
|
|
277
|
-
feePercent: NumberAsString,
|
|
278
|
-
deadline: NumberAsString,
|
|
279
|
-
partner: string,
|
|
280
|
-
beneficiary: string,
|
|
281
|
-
contractMethod?: string,
|
|
282
275
|
): TxInfo<ZeroXParam> {
|
|
283
276
|
const usePermit = permit !== '0x';
|
|
284
277
|
const encoder = (...params: ZeroXParam) => {
|
|
@@ -17,8 +17,6 @@ import {
|
|
|
17
17
|
} from '../types';
|
|
18
18
|
import { SwapSide, NULL_ADDRESS, ContractMethod } from '../constants';
|
|
19
19
|
import { LimitOrderExchange } from '../dex/limit-order-exchange';
|
|
20
|
-
import { v4 as uuid } from 'uuid';
|
|
21
|
-
import { DirectContractMethods } from '@paraswap/core/build/constants';
|
|
22
20
|
|
|
23
21
|
export interface IParaSwapSDK {
|
|
24
22
|
getPrices(
|
|
@@ -207,8 +205,6 @@ export class LocalParaswapSDK implements IParaSwapSDK {
|
|
|
207
205
|
: priceRoute.srcAmount,
|
|
208
206
|
);
|
|
209
207
|
|
|
210
|
-
const contractMethod = priceRoute.contractMethod;
|
|
211
|
-
|
|
212
208
|
// Call preprocessTransaction for each exchange before we build transaction
|
|
213
209
|
try {
|
|
214
210
|
priceRoute.bestRoute = await Promise.all(
|
|
@@ -238,9 +234,6 @@ export class LocalParaswapSDK implements IParaSwapSDK {
|
|
|
238
234
|
{
|
|
239
235
|
slippageFactor,
|
|
240
236
|
txOrigin: userAddress,
|
|
241
|
-
isDirectMethod: DirectContractMethods.includes(
|
|
242
|
-
contractMethod as ContractMethod,
|
|
243
|
-
),
|
|
244
237
|
},
|
|
245
238
|
);
|
|
246
239
|
|
|
@@ -271,7 +264,7 @@ export class LocalParaswapSDK implements IParaSwapSDK {
|
|
|
271
264
|
partnerAddress: NULL_ADDRESS,
|
|
272
265
|
partnerFeePercent: '0',
|
|
273
266
|
deadline: deadline.toString(),
|
|
274
|
-
uuid:
|
|
267
|
+
uuid: '00000000-0000-0000-0000-000000000000',
|
|
275
268
|
});
|
|
276
269
|
}
|
|
277
270
|
}
|