/
quick-swap-v3-provider.ts
64 lines (56 loc) · 3.26 KB
/
quick-swap-v3-provider.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import { BLOCKCHAIN_NAME } from 'src/core/blockchain/models/blockchain-name';
import { EvmWeb3Pure } from 'src/core/blockchain/web3-pure/typed-web3-pure/evm-web3-pure/evm-web3-pure';
import { createTokenNativeAddressProxyInPathStartAndEnd } from 'src/features/common/utils/token-native-address-proxy';
import {
ON_CHAIN_TRADE_TYPE,
OnChainTradeType
} from 'src/features/on-chain/calculation-manager/providers/common/models/on-chain-trade-type';
import { AlgebraQuoterController } from 'src/features/on-chain/calculation-manager/providers/dexes/common/algebra/algebra-quoter-controller';
import { UniswapV3AlgebraTradeStructOmitPath } from 'src/features/on-chain/calculation-manager/providers/dexes/common/uniswap-v3-algebra-abstract/models/uniswap-v3-algebra-trade-struct';
import { UniswapV3AlgebraAbstractProvider } from 'src/features/on-chain/calculation-manager/providers/dexes/common/uniswap-v3-algebra-abstract/uniswap-v3-algebra-abstract-provider';
import { defaultPolygonProviderConfiguration } from 'src/features/on-chain/calculation-manager/providers/dexes/polygon/default-constants';
import { QUICK_SWAP_V3_PROVIDER_CONFIGURATION } from 'src/features/on-chain/calculation-manager/providers/dexes/polygon/quick-swap-v3/constants/provider-configuration';
import {
QUICK_SWAP_V3_ROUTER_CONTRACT_ABI,
QUICK_SWAP_V3_ROUTER_CONTRACT_ADDRESS
} from 'src/features/on-chain/calculation-manager/providers/dexes/polygon/quick-swap-v3/constants/swap-router-contract-data';
import { QuickSwapV3Route } from 'src/features/on-chain/calculation-manager/providers/dexes/polygon/quick-swap-v3/models/quick-swap-v3-route';
import { QuickSwapV3Trade } from 'src/features/on-chain/calculation-manager/providers/dexes/polygon/quick-swap-v3/quick-swap-v3-trade';
import {
QUICK_SWAP_V3_QUOTER_CONTRACT_ABI,
QUICK_SWAP_V3_QUOTER_CONTRACT_ADDRESS
} from 'src/features/on-chain/calculation-manager/providers/dexes/polygon/quick-swap-v3/utils/quoter-controller/constants/quoter-contract-data';
export class QuickSwapV3Provider extends UniswapV3AlgebraAbstractProvider<QuickSwapV3Trade> {
protected readonly contractAddress = QUICK_SWAP_V3_ROUTER_CONTRACT_ADDRESS;
protected readonly contractAbi = QUICK_SWAP_V3_ROUTER_CONTRACT_ABI;
public readonly blockchain = BLOCKCHAIN_NAME.POLYGON;
protected readonly OnChainTradeClass = QuickSwapV3Trade;
protected readonly providerConfiguration = QUICK_SWAP_V3_PROVIDER_CONFIGURATION;
protected readonly quoterController = new AlgebraQuoterController(
this.blockchain,
defaultPolygonProviderConfiguration.routingProvidersAddresses,
QUICK_SWAP_V3_QUOTER_CONTRACT_ADDRESS,
QUICK_SWAP_V3_QUOTER_CONTRACT_ABI
);
public get type(): OnChainTradeType {
return ON_CHAIN_TRADE_TYPE.QUICK_SWAP_V3;
}
protected createTradeInstance(
tradeStruct: UniswapV3AlgebraTradeStructOmitPath,
route: QuickSwapV3Route,
providerAddress: string
): QuickSwapV3Trade {
const path = createTokenNativeAddressProxyInPathStartAndEnd(
route.path,
EvmWeb3Pure.nativeTokenAddress
);
return new QuickSwapV3Trade(
{
...tradeStruct,
path,
route
},
providerAddress
);
}
}