/
on-chain-provider.ts
53 lines (45 loc) · 1.9 KB
/
on-chain-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
import { RubicSdkError } from 'src/common/errors';
import { PriceToken, PriceTokenAmount } from 'src/common/tokens';
import { parseError } from 'src/common/utils/errors';
import { BlockchainName } from 'src/core/blockchain/models/blockchain-name';
import { Web3Public } from 'src/core/blockchain/web3-public-service/web3-public/web3-public';
import { HttpClient } from 'src/core/http-client/models/http-client';
import { Injector } from 'src/core/injector/injector';
import { OnChainCalculationOptions } from 'src/features/on-chain/calculation-manager/providers/common/models/on-chain-calculation-options';
import { OnChainTradeType } from 'src/features/on-chain/calculation-manager/providers/common/models/on-chain-trade-type';
import { OnChainTrade } from 'src/features/on-chain/calculation-manager/providers/common/on-chain-trade/on-chain-trade';
/**
* Abstract class for all on-chain trade providers.
*/
export abstract class OnChainProvider {
public static parseError(err: unknown): RubicSdkError {
return parseError(err, 'Cannot calculate on-chain trade');
}
/**
* Provider blockchain.
*/
public abstract readonly blockchain: BlockchainName;
public readonly supportReceiverAddress: boolean = true;
/**
* Type of provider.
*/
public abstract get type(): OnChainTradeType;
protected abstract get walletAddress(): string;
protected get web3Public(): Web3Public {
return Injector.web3PublicService.getWeb3Public(this.blockchain);
}
protected get httpClient(): HttpClient {
return Injector.httpClient;
}
/**
* Calculates on-chain trade.
* @param from Token to sell with input amount.
* @param to Token to get.
* @param options Additional options.
*/
public abstract calculate(
from: PriceTokenAmount,
to: PriceToken,
options?: OnChainCalculationOptions
): Promise<OnChainTrade>;
}