@yaswap/evm 2.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/CHANGELOG.md +5 -0
- package/dist/lib/chain/EvmChainProvider.d.ts +86 -0
- package/dist/lib/chain/EvmChainProvider.js +237 -0
- package/dist/lib/chain/EvmChainProvider.js.map +1 -0
- package/dist/lib/chain/EvmMulticallProvider.d.ts +96 -0
- package/dist/lib/chain/EvmMulticallProvider.js +78 -0
- package/dist/lib/chain/EvmMulticallProvider.js.map +1 -0
- package/dist/lib/chain/OptimismChainProvider.d.ts +14 -0
- package/dist/lib/chain/OptimismChainProvider.js +56 -0
- package/dist/lib/chain/OptimismChainProvider.js.map +1 -0
- package/dist/lib/fee/EIP1559FeeApiProvider/ethereum.d.ts +27 -0
- package/dist/lib/fee/EIP1559FeeApiProvider/ethereum.js +40 -0
- package/dist/lib/fee/EIP1559FeeApiProvider/ethereum.js.map +1 -0
- package/dist/lib/fee/EIP1559FeeApiProvider/index.d.ts +9 -0
- package/dist/lib/fee/EIP1559FeeApiProvider/index.js +46 -0
- package/dist/lib/fee/EIP1559FeeApiProvider/index.js.map +1 -0
- package/dist/lib/fee/EIP1559FeeApiProvider/polygon.d.ts +19 -0
- package/dist/lib/fee/EIP1559FeeApiProvider/polygon.js +40 -0
- package/dist/lib/fee/EIP1559FeeApiProvider/polygon.js.map +1 -0
- package/dist/lib/fee/EIP1559FeeProvider.d.ts +10 -0
- package/dist/lib/fee/EIP1559FeeProvider.js +73 -0
- package/dist/lib/fee/EIP1559FeeProvider.js.map +1 -0
- package/dist/lib/fee/RpcFeeProvider.d.ts +10 -0
- package/dist/lib/fee/RpcFeeProvider.js +46 -0
- package/dist/lib/fee/RpcFeeProvider.js.map +1 -0
- package/dist/lib/index.d.ts +19 -0
- package/dist/lib/index.js +62 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/naming/EnsProvider.d.ts +16 -0
- package/dist/lib/naming/EnsProvider.js +37 -0
- package/dist/lib/naming/EnsProvider.js.map +1 -0
- package/dist/lib/networks.d.ts +27 -0
- package/dist/lib/networks.js +192 -0
- package/dist/lib/networks.js.map +1 -0
- package/dist/lib/nft/CovalentNftProvider.d.ts +11 -0
- package/dist/lib/nft/CovalentNftProvider.js +67 -0
- package/dist/lib/nft/CovalentNftProvider.js.map +1 -0
- package/dist/lib/nft/EvmNftProvider.d.ts +34 -0
- package/dist/lib/nft/EvmNftProvider.js +197 -0
- package/dist/lib/nft/EvmNftProvider.js.map +1 -0
- package/dist/lib/nft/InfuraNftProvider.d.ts +11 -0
- package/dist/lib/nft/InfuraNftProvider.js +69 -0
- package/dist/lib/nft/InfuraNftProvider.js.map +1 -0
- package/dist/lib/nft/OpenSeaNftProvider.d.ts +10 -0
- package/dist/lib/nft/OpenSeaNftProvider.js +67 -0
- package/dist/lib/nft/OpenSeaNftProvider.js.map +1 -0
- package/dist/lib/swap/EvmBaseSwapProvider.d.ts +31 -0
- package/dist/lib/swap/EvmBaseSwapProvider.js +314 -0
- package/dist/lib/swap/EvmBaseSwapProvider.js.map +1 -0
- package/dist/lib/swap/EvmSwapProvider.d.ts +21 -0
- package/dist/lib/swap/EvmSwapProvider.js +205 -0
- package/dist/lib/swap/EvmSwapProvider.js.map +1 -0
- package/dist/lib/typechain/ERC1155.d.ts +187 -0
- package/dist/lib/typechain/ERC1155.js +3 -0
- package/dist/lib/typechain/ERC1155.js.map +1 -0
- package/dist/lib/typechain/ERC165.d.ts +43 -0
- package/dist/lib/typechain/ERC165.js +3 -0
- package/dist/lib/typechain/ERC165.js.map +1 -0
- package/dist/lib/typechain/ERC20.d.ts +193 -0
- package/dist/lib/typechain/ERC20.js +3 -0
- package/dist/lib/typechain/ERC20.js.map +1 -0
- package/dist/lib/typechain/ERC721.d.ts +220 -0
- package/dist/lib/typechain/ERC721.js +3 -0
- package/dist/lib/typechain/ERC721.js.map +1 -0
- package/dist/lib/typechain/IERC1155.d.ts +179 -0
- package/dist/lib/typechain/IERC1155.js +3 -0
- package/dist/lib/typechain/IERC1155.js.map +1 -0
- package/dist/lib/typechain/IERC1155MetadataURI.d.ts +187 -0
- package/dist/lib/typechain/IERC1155MetadataURI.js +3 -0
- package/dist/lib/typechain/IERC1155MetadataURI.js.map +1 -0
- package/dist/lib/typechain/IERC1155Receiver.d.ts +75 -0
- package/dist/lib/typechain/IERC1155Receiver.js +3 -0
- package/dist/lib/typechain/IERC1155Receiver.js.map +1 -0
- package/dist/lib/typechain/IERC165.d.ts +43 -0
- package/dist/lib/typechain/IERC165.js +3 -0
- package/dist/lib/typechain/IERC165.js.map +1 -0
- package/dist/lib/typechain/IERC20.d.ts +137 -0
- package/dist/lib/typechain/IERC20.js +3 -0
- package/dist/lib/typechain/IERC20.js.map +1 -0
- package/dist/lib/typechain/IERC20Metadata.d.ts +161 -0
- package/dist/lib/typechain/IERC20Metadata.js +3 -0
- package/dist/lib/typechain/IERC20Metadata.js.map +1 -0
- package/dist/lib/typechain/IERC721.d.ts +202 -0
- package/dist/lib/typechain/IERC721.js +3 -0
- package/dist/lib/typechain/IERC721.js.map +1 -0
- package/dist/lib/typechain/IERC721Metadata.d.ts +226 -0
- package/dist/lib/typechain/IERC721Metadata.js +3 -0
- package/dist/lib/typechain/IERC721Metadata.js.map +1 -0
- package/dist/lib/typechain/IERC721Receiver.d.ts +51 -0
- package/dist/lib/typechain/IERC721Receiver.js +3 -0
- package/dist/lib/typechain/IERC721Receiver.js.map +1 -0
- package/dist/lib/typechain/ILiqualityHTLC.d.ts +142 -0
- package/dist/lib/typechain/ILiqualityHTLC.js +3 -0
- package/dist/lib/typechain/ILiqualityHTLC.js.map +1 -0
- package/dist/lib/typechain/LiqualityHTLC.d.ts +192 -0
- package/dist/lib/typechain/LiqualityHTLC.js +3 -0
- package/dist/lib/typechain/LiqualityHTLC.js.map +1 -0
- package/dist/lib/typechain/Multicall3.d.ts +293 -0
- package/dist/lib/typechain/Multicall3.js +3 -0
- package/dist/lib/typechain/Multicall3.js.map +1 -0
- package/dist/lib/typechain/TestERC20.d.ts +209 -0
- package/dist/lib/typechain/TestERC20.js +3 -0
- package/dist/lib/typechain/TestERC20.js.map +1 -0
- package/dist/lib/typechain/common.d.ts +21 -0
- package/dist/lib/typechain/common.js +3 -0
- package/dist/lib/typechain/common.js.map +1 -0
- package/dist/lib/typechain/factories/ERC1155__factory.d.ts +60 -0
- package/dist/lib/typechain/factories/ERC1155__factory.js +364 -0
- package/dist/lib/typechain/factories/ERC1155__factory.js.map +1 -0
- package/dist/lib/typechain/factories/ERC165__factory.d.ts +22 -0
- package/dist/lib/typechain/factories/ERC165__factory.js +39 -0
- package/dist/lib/typechain/factories/ERC165__factory.js.map +1 -0
- package/dist/lib/typechain/factories/ERC20__factory.d.ts +60 -0
- package/dist/lib/typechain/factories/ERC20__factory.js +327 -0
- package/dist/lib/typechain/factories/ERC20__factory.js.map +1 -0
- package/dist/lib/typechain/factories/ERC721__factory.d.ts +60 -0
- package/dist/lib/typechain/factories/ERC721__factory.js +387 -0
- package/dist/lib/typechain/factories/ERC721__factory.js.map +1 -0
- package/dist/lib/typechain/factories/IERC1155MetadataURI__factory.d.ts +35 -0
- package/dist/lib/typechain/factories/IERC1155MetadataURI__factory.js +332 -0
- package/dist/lib/typechain/factories/IERC1155MetadataURI__factory.js.map +1 -0
- package/dist/lib/typechain/factories/IERC1155Receiver__factory.d.ts +22 -0
- package/dist/lib/typechain/factories/IERC1155Receiver__factory.js +117 -0
- package/dist/lib/typechain/factories/IERC1155Receiver__factory.js.map +1 -0
- package/dist/lib/typechain/factories/IERC1155__factory.d.ts +35 -0
- package/dist/lib/typechain/factories/IERC1155__factory.js +313 -0
- package/dist/lib/typechain/factories/IERC1155__factory.js.map +1 -0
- package/dist/lib/typechain/factories/IERC165__factory.d.ts +22 -0
- package/dist/lib/typechain/factories/IERC165__factory.js +39 -0
- package/dist/lib/typechain/factories/IERC165__factory.js.map +1 -0
- package/dist/lib/typechain/factories/IERC20Metadata__factory.d.ts +35 -0
- package/dist/lib/typechain/factories/IERC20Metadata__factory.js +242 -0
- package/dist/lib/typechain/factories/IERC20Metadata__factory.js.map +1 -0
- package/dist/lib/typechain/factories/IERC20__factory.d.ts +35 -0
- package/dist/lib/typechain/factories/IERC20__factory.js +203 -0
- package/dist/lib/typechain/factories/IERC20__factory.js.map +1 -0
- package/dist/lib/typechain/factories/IERC721Metadata__factory.d.ts +35 -0
- package/dist/lib/typechain/factories/IERC721Metadata__factory.js +350 -0
- package/dist/lib/typechain/factories/IERC721Metadata__factory.js.map +1 -0
- package/dist/lib/typechain/factories/IERC721Receiver__factory.d.ts +22 -0
- package/dist/lib/typechain/factories/IERC721Receiver__factory.js +54 -0
- package/dist/lib/typechain/factories/IERC721Receiver__factory.js.map +1 -0
- package/dist/lib/typechain/factories/IERC721__factory.d.ts +35 -0
- package/dist/lib/typechain/factories/IERC721__factory.js +305 -0
- package/dist/lib/typechain/factories/IERC721__factory.js.map +1 -0
- package/dist/lib/typechain/factories/ILiqualityHTLC__factory.d.ts +69 -0
- package/dist/lib/typechain/factories/ILiqualityHTLC__factory.js +225 -0
- package/dist/lib/typechain/factories/ILiqualityHTLC__factory.js.map +1 -0
- package/dist/lib/typechain/factories/LiqualityHTLC__factory.d.ts +87 -0
- package/dist/lib/typechain/factories/LiqualityHTLC__factory.js +290 -0
- package/dist/lib/typechain/factories/LiqualityHTLC__factory.js.map +1 -0
- package/dist/lib/typechain/factories/Multicall3__factory.d.ts +56 -0
- package/dist/lib/typechain/factories/Multicall3__factory.js +479 -0
- package/dist/lib/typechain/factories/Multicall3__factory.js.map +1 -0
- package/dist/lib/typechain/factories/TestERC20__factory.d.ts +56 -0
- package/dist/lib/typechain/factories/TestERC20__factory.js +334 -0
- package/dist/lib/typechain/factories/TestERC20__factory.js.map +1 -0
- package/dist/lib/typechain/index.d.ts +34 -0
- package/dist/lib/typechain/index.js +38 -0
- package/dist/lib/typechain/index.js.map +1 -0
- package/dist/lib/types.d.ts +107 -0
- package/dist/lib/types.js +9 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/utils.d.ts +35 -0
- package/dist/lib/utils.js +184 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/lib/wallet/EvmBaseWalletProvider.d.ts +19 -0
- package/dist/lib/wallet/EvmBaseWalletProvider.js +153 -0
- package/dist/lib/wallet/EvmBaseWalletProvider.js.map +1 -0
- package/dist/lib/wallet/EvmWalletProvider.d.ts +20 -0
- package/dist/lib/wallet/EvmWalletProvider.js +91 -0
- package/dist/lib/wallet/EvmWalletProvider.js.map +1 -0
- package/package.json +43 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { Chain, Fee } from '@yaswap/client';
|
|
2
|
+
import { AddressType, Asset, BigNumber, Block, FeeDetails, Network, TokenDetails, Transaction } from '@yaswap/types';
|
|
3
|
+
import { StaticJsonRpcProvider } from '@ethersproject/providers';
|
|
4
|
+
import { EthersBlock, EthersBlockWithTransactions, EthersTransactionResponse } from '../types';
|
|
5
|
+
import { EvmMulticallProvider } from './EvmMulticallProvider';
|
|
6
|
+
/**
|
|
7
|
+
* Represents a connection to any EVM network.
|
|
8
|
+
* Used to fetch chain specific data like blocks, transactions, balances and fees. It uses {@link https://docs.ethers.io/v5/api | ethersjs}
|
|
9
|
+
*
|
|
10
|
+
* Example:
|
|
11
|
+
* ```typescript
|
|
12
|
+
* import { providers } from 'ethers';
|
|
13
|
+
* import { EvmNetworks, EvmChainProvider } from '@yaswap/evm';
|
|
14
|
+
*
|
|
15
|
+
* const provider = new providers.StaticJsonRpcProvider(EvmNetworks.ganache.rpcUrl);
|
|
16
|
+
* const chainProvider = new EvmChainProvider(EvmNetworks.ganache, provider, null);
|
|
17
|
+
* ```
|
|
18
|
+
* @public
|
|
19
|
+
*
|
|
20
|
+
*/
|
|
21
|
+
export declare class EvmChainProvider extends Chain<StaticJsonRpcProvider> {
|
|
22
|
+
multicall: EvmMulticallProvider;
|
|
23
|
+
private _logger;
|
|
24
|
+
/**
|
|
25
|
+
* @param network - See {@link EvmNetworks}
|
|
26
|
+
* @param provider - Instance of {@link https://docs.ethers.io/v5/api/providers/jsonrpc-provider/#StaticJsonRpcProvider | StaticJsonRpcProvider}
|
|
27
|
+
* If not passed, it's created internally based on the `rpcUrl` from the network parameter.
|
|
28
|
+
* @param feeProvider - Instance of {@link Fee}.
|
|
29
|
+
* If not passed, it uses {@link https://docs.ethers.io/v5/api/providers/provider/#Provider-getFeeData | getFeeData} from the ethers provider.
|
|
30
|
+
*/
|
|
31
|
+
constructor(network: Network, provider?: StaticJsonRpcProvider, feeProvider?: Fee, multicall?: boolean);
|
|
32
|
+
/**
|
|
33
|
+
* Used to fetch the name, decimals and symbols of an ERC20 token
|
|
34
|
+
* @param asset - the address of the token contract
|
|
35
|
+
* @returns
|
|
36
|
+
*/
|
|
37
|
+
getTokenDetails(asset: string): Promise<TokenDetails>;
|
|
38
|
+
/**
|
|
39
|
+
* @param blockHash - the hash of the block
|
|
40
|
+
* @returns
|
|
41
|
+
* If `includeTx` is `false` the `_raw` object type is {@link https://docs.ethers.io/v5/api/providers/types/#providers-Block | EthersBlock}.
|
|
42
|
+
*
|
|
43
|
+
* If `includeTx` is `true` the `_raw` object type {@link https://docs.ethers.io/v5/api/providers/types/#providers-BlockWithTransactions | BlockWithTransactions}
|
|
44
|
+
* and `transactions` array with type {@link https://docs.ethers.io/v5/api/providers/types/#providers-TransactionResponse | EthersTransactionResponse}
|
|
45
|
+
*/
|
|
46
|
+
getBlockByHash(blockHash: string, includeTx?: boolean): Promise<Block<EthersBlock | EthersBlockWithTransactions, EthersTransactionResponse>>;
|
|
47
|
+
/**
|
|
48
|
+
* @param blockNumber - the number of the block. If not passed, it fetches the latest block
|
|
49
|
+
* @returns
|
|
50
|
+
* If `includeTx` is `false` the `_raw` object type is {@link https://docs.ethers.io/v5/api/providers/types/#providers-Block | EthersBlock}.
|
|
51
|
+
*
|
|
52
|
+
* If `includeTx` is `true` the `_raw` object type {@link https://docs.ethers.io/v5/api/providers/types/#providers-BlockWithTransactions | BlockWithTransactions}
|
|
53
|
+
* and `transactions` array with type {@link https://docs.ethers.io/v5/api/providers/types/#providers-TransactionResponse | EthersTransactionResponse}
|
|
54
|
+
*/
|
|
55
|
+
getBlockByNumber(blockNumber?: number, includeTx?: boolean): Promise<Block<EthersBlock | EthersBlockWithTransactions, EthersTransactionResponse>>;
|
|
56
|
+
/**
|
|
57
|
+
* @returns resolves with the latest block number
|
|
58
|
+
*/
|
|
59
|
+
getBlockHeight(): Promise<number>;
|
|
60
|
+
/**
|
|
61
|
+
* @param txHash - the transaction hash prefixed with `0x`
|
|
62
|
+
* @returns a transaction object with _raw object type
|
|
63
|
+
* of {@link https://docs.ethers.io/v5/api/providers/types/#providers-TransactionResponse | EthersTransactionResponse}
|
|
64
|
+
*/
|
|
65
|
+
getTransactionByHash(txHash: string): Promise<Transaction<EthersTransactionResponse>>;
|
|
66
|
+
/**
|
|
67
|
+
* @param addresses - currently fetches the balances only for `addresses[0]`
|
|
68
|
+
* @param assets - the list of assets
|
|
69
|
+
* @returns - the balances of `assets` in the passed order
|
|
70
|
+
*/
|
|
71
|
+
getBalance(addresses: AddressType[], assets: Asset[]): Promise<BigNumber[]>;
|
|
72
|
+
/**
|
|
73
|
+
* @param rawTransaction - the signed transaction
|
|
74
|
+
* @returns the hash of the transaction
|
|
75
|
+
*/
|
|
76
|
+
sendRawTransaction(rawTransaction: string): Promise<string>;
|
|
77
|
+
/**
|
|
78
|
+
* If the `feeProvider` is not defined, it fetches the fees from {@link https://docs.ethers.io/v5/api/providers/provider/#Provider-getFeeData | getFeeData}
|
|
79
|
+
*/
|
|
80
|
+
getFees(): Promise<FeeDetails>;
|
|
81
|
+
/**
|
|
82
|
+
* @throws {@link UnsupportedMethodError} if the ethers provider doesn't support rpc calls
|
|
83
|
+
*/
|
|
84
|
+
sendRpcRequest(method: string, params: any[]): Promise<any>;
|
|
85
|
+
private _getBlock;
|
|
86
|
+
}
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.EvmChainProvider = void 0;
|
|
13
|
+
const client_1 = require("@yaswap/client");
|
|
14
|
+
const errors_1 = require("@yaswap/errors");
|
|
15
|
+
const logger_1 = require("@yaswap/logger");
|
|
16
|
+
const types_1 = require("@yaswap/types");
|
|
17
|
+
const utils_1 = require("@yaswap/utils");
|
|
18
|
+
const providers_1 = require("@ethersproject/providers");
|
|
19
|
+
const RpcFeeProvider_1 = require("../fee/RpcFeeProvider");
|
|
20
|
+
const typechain_1 = require("../typechain");
|
|
21
|
+
const utils_2 = require("../utils");
|
|
22
|
+
const EvmMulticallProvider_1 = require("./EvmMulticallProvider");
|
|
23
|
+
/**
|
|
24
|
+
* Represents a connection to any EVM network.
|
|
25
|
+
* Used to fetch chain specific data like blocks, transactions, balances and fees. It uses {@link https://docs.ethers.io/v5/api | ethersjs}
|
|
26
|
+
*
|
|
27
|
+
* Example:
|
|
28
|
+
* ```typescript
|
|
29
|
+
* import { providers } from 'ethers';
|
|
30
|
+
* import { EvmNetworks, EvmChainProvider } from '@yaswap/evm';
|
|
31
|
+
*
|
|
32
|
+
* const provider = new providers.StaticJsonRpcProvider(EvmNetworks.ganache.rpcUrl);
|
|
33
|
+
* const chainProvider = new EvmChainProvider(EvmNetworks.ganache, provider, null);
|
|
34
|
+
* ```
|
|
35
|
+
* @public
|
|
36
|
+
*
|
|
37
|
+
*/
|
|
38
|
+
class EvmChainProvider extends client_1.Chain {
|
|
39
|
+
/**
|
|
40
|
+
* @param network - See {@link EvmNetworks}
|
|
41
|
+
* @param provider - Instance of {@link https://docs.ethers.io/v5/api/providers/jsonrpc-provider/#StaticJsonRpcProvider | StaticJsonRpcProvider}
|
|
42
|
+
* If not passed, it's created internally based on the `rpcUrl` from the network parameter.
|
|
43
|
+
* @param feeProvider - Instance of {@link Fee}.
|
|
44
|
+
* If not passed, it uses {@link https://docs.ethers.io/v5/api/providers/provider/#Provider-getFeeData | getFeeData} from the ethers provider.
|
|
45
|
+
*/
|
|
46
|
+
constructor(network, provider, feeProvider, multicall = true) {
|
|
47
|
+
super(network, provider, feeProvider);
|
|
48
|
+
this._logger = new logger_1.Logger(`EvmChainProvider ${network.chainId}`);
|
|
49
|
+
if (!provider && this.network.rpcUrl) {
|
|
50
|
+
this.provider = new providers_1.StaticJsonRpcProvider(this.network.rpcUrl, this.network.chainId);
|
|
51
|
+
}
|
|
52
|
+
if (!feeProvider) {
|
|
53
|
+
this.feeProvider = new RpcFeeProvider_1.RpcFeeProvider(this.provider);
|
|
54
|
+
}
|
|
55
|
+
if (multicall) {
|
|
56
|
+
this.multicall = new EvmMulticallProvider_1.EvmMulticallProvider(this.provider);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Used to fetch the name, decimals and symbols of an ERC20 token
|
|
61
|
+
* @param asset - the address of the token contract
|
|
62
|
+
* @returns
|
|
63
|
+
*/
|
|
64
|
+
getTokenDetails(asset) {
|
|
65
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
66
|
+
try {
|
|
67
|
+
if (this.multicall) {
|
|
68
|
+
const [decimals, name, symbol] = yield this.multicall.multicall(['decimals', 'name', 'symbol'].map((method) => {
|
|
69
|
+
return {
|
|
70
|
+
target: asset,
|
|
71
|
+
abi: typechain_1.ERC20__factory.abi,
|
|
72
|
+
name: method,
|
|
73
|
+
params: [],
|
|
74
|
+
};
|
|
75
|
+
}));
|
|
76
|
+
return { decimals, name, symbol };
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
const token = typechain_1.ERC20__factory.connect(asset, this.provider);
|
|
80
|
+
const [decimals, name, symbol] = yield Promise.all([token.decimals(), token.name(), token.symbol()]);
|
|
81
|
+
return { decimals, name, symbol };
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
this._logger.error(err);
|
|
86
|
+
throw new errors_1.NodeError(`Cannot fetch details for ${asset}`);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* @param blockHash - the hash of the block
|
|
92
|
+
* @returns
|
|
93
|
+
* If `includeTx` is `false` the `_raw` object type is {@link https://docs.ethers.io/v5/api/providers/types/#providers-Block | EthersBlock}.
|
|
94
|
+
*
|
|
95
|
+
* If `includeTx` is `true` the `_raw` object type {@link https://docs.ethers.io/v5/api/providers/types/#providers-BlockWithTransactions | BlockWithTransactions}
|
|
96
|
+
* and `transactions` array with type {@link https://docs.ethers.io/v5/api/providers/types/#providers-TransactionResponse | EthersTransactionResponse}
|
|
97
|
+
*/
|
|
98
|
+
getBlockByHash(blockHash, includeTx = false) {
|
|
99
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
100
|
+
return this._getBlock((0, utils_1.ensure0x)(blockHash), includeTx);
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* @param blockNumber - the number of the block. If not passed, it fetches the latest block
|
|
105
|
+
* @returns
|
|
106
|
+
* If `includeTx` is `false` the `_raw` object type is {@link https://docs.ethers.io/v5/api/providers/types/#providers-Block | EthersBlock}.
|
|
107
|
+
*
|
|
108
|
+
* If `includeTx` is `true` the `_raw` object type {@link https://docs.ethers.io/v5/api/providers/types/#providers-BlockWithTransactions | BlockWithTransactions}
|
|
109
|
+
* and `transactions` array with type {@link https://docs.ethers.io/v5/api/providers/types/#providers-TransactionResponse | EthersTransactionResponse}
|
|
110
|
+
*/
|
|
111
|
+
getBlockByNumber(blockNumber, includeTx = false) {
|
|
112
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
113
|
+
if (!blockNumber) {
|
|
114
|
+
blockNumber = yield this.getBlockHeight();
|
|
115
|
+
}
|
|
116
|
+
return this._getBlock(blockNumber, includeTx);
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* @returns resolves with the latest block number
|
|
121
|
+
*/
|
|
122
|
+
getBlockHeight() {
|
|
123
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
124
|
+
return this.provider.getBlockNumber();
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* @param txHash - the transaction hash prefixed with `0x`
|
|
129
|
+
* @returns a transaction object with _raw object type
|
|
130
|
+
* of {@link https://docs.ethers.io/v5/api/providers/types/#providers-TransactionResponse | EthersTransactionResponse}
|
|
131
|
+
*/
|
|
132
|
+
getTransactionByHash(txHash) {
|
|
133
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
134
|
+
const _txHash = (0, utils_1.ensure0x)(txHash);
|
|
135
|
+
const tx = yield this.provider.getTransaction(_txHash);
|
|
136
|
+
if (!tx) {
|
|
137
|
+
throw new errors_1.TxNotFoundError('Transaction not found');
|
|
138
|
+
}
|
|
139
|
+
const result = (0, utils_2.parseTxResponse)(tx);
|
|
140
|
+
if (result.confirmations > 0) {
|
|
141
|
+
const receipt = yield this.provider.getTransactionReceipt(_txHash);
|
|
142
|
+
return (0, utils_2.parseTxResponse)(tx, receipt);
|
|
143
|
+
}
|
|
144
|
+
return result;
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* @param addresses - currently fetches the balances only for `addresses[0]`
|
|
149
|
+
* @param assets - the list of assets
|
|
150
|
+
* @returns - the balances of `assets` in the passed order
|
|
151
|
+
*/
|
|
152
|
+
getBalance(addresses, assets) {
|
|
153
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
154
|
+
const user = addresses[0].toString();
|
|
155
|
+
if (this.multicall) {
|
|
156
|
+
try {
|
|
157
|
+
const balances = yield this.multicall.getMultipleBalances(user, assets);
|
|
158
|
+
return balances;
|
|
159
|
+
}
|
|
160
|
+
catch (_err) {
|
|
161
|
+
// fallback to fetching without multicall
|
|
162
|
+
this.multicall = null;
|
|
163
|
+
const balances = yield this.getBalance(addresses, assets);
|
|
164
|
+
this.multicall = new EvmMulticallProvider_1.EvmMulticallProvider(this.provider);
|
|
165
|
+
return balances;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
const allBalancePromise = assets.map((a) => {
|
|
170
|
+
try {
|
|
171
|
+
if (a.type === types_1.AssetTypes.native) {
|
|
172
|
+
return this.provider.getBalance(user);
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
return typechain_1.ERC20__factory.connect(a.contractAddress, this.provider).balanceOf(user);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
catch (err) {
|
|
179
|
+
this._logger.debug(`no multicall getBalance error ${a}`, err);
|
|
180
|
+
return null;
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
const balances = (yield Promise.all(allBalancePromise)).map((b) => (b ? new types_1.BigNumber(b.toString()) : null));
|
|
184
|
+
return balances;
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* @param rawTransaction - the signed transaction
|
|
190
|
+
* @returns the hash of the transaction
|
|
191
|
+
*/
|
|
192
|
+
sendRawTransaction(rawTransaction) {
|
|
193
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
194
|
+
const tx = yield this.provider.sendTransaction((0, utils_1.ensure0x)(rawTransaction));
|
|
195
|
+
return tx.hash;
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* If the `feeProvider` is not defined, it fetches the fees from {@link https://docs.ethers.io/v5/api/providers/provider/#Provider-getFeeData | getFeeData}
|
|
200
|
+
*/
|
|
201
|
+
getFees() {
|
|
202
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
203
|
+
return this.feeProvider.getFees();
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* @throws {@link UnsupportedMethodError} if the ethers provider doesn't support rpc calls
|
|
208
|
+
*/
|
|
209
|
+
sendRpcRequest(method, params) {
|
|
210
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
211
|
+
if (!this.provider.send) {
|
|
212
|
+
throw new errors_1.UnsupportedMethodError('Method not supported.');
|
|
213
|
+
}
|
|
214
|
+
return this.provider.send(method, params);
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
_getBlock(blockTag, includeTx) {
|
|
218
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
219
|
+
if (includeTx) {
|
|
220
|
+
const blockWithTx = yield this.provider.getBlockWithTransactions(blockTag);
|
|
221
|
+
if (!blockWithTx) {
|
|
222
|
+
throw new errors_1.BlockNotFoundError(blockTag);
|
|
223
|
+
}
|
|
224
|
+
return (0, utils_2.parseBlockResponse)(blockWithTx, blockWithTx.transactions);
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
const block = yield this.provider.getBlock(blockTag);
|
|
228
|
+
if (!block) {
|
|
229
|
+
throw new errors_1.BlockNotFoundError(blockTag);
|
|
230
|
+
}
|
|
231
|
+
return (0, utils_2.parseBlockResponse)(block);
|
|
232
|
+
}
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
exports.EvmChainProvider = EvmChainProvider;
|
|
237
|
+
//# sourceMappingURL=EvmChainProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EvmChainProvider.js","sourceRoot":"","sources":["../../../lib/chain/EvmChainProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { AddressType, Asset, BigNumber } from '@yaswap/types';
|
|
2
|
+
import { BaseProvider } from '@ethersproject/providers';
|
|
3
|
+
import { MulticallData } from '../types';
|
|
4
|
+
export declare class EvmMulticallProvider {
|
|
5
|
+
private _multicallAddress;
|
|
6
|
+
private _multicall;
|
|
7
|
+
constructor(chainProvider: BaseProvider, multicallAddress?: string);
|
|
8
|
+
getMulticallAddress(): string;
|
|
9
|
+
buildBalanceCallData(asset: Asset, user: AddressType): {
|
|
10
|
+
target: string;
|
|
11
|
+
abi: {
|
|
12
|
+
inputs: ({
|
|
13
|
+
internalType: string;
|
|
14
|
+
name: string;
|
|
15
|
+
type: string;
|
|
16
|
+
components?: undefined;
|
|
17
|
+
} | {
|
|
18
|
+
components: {
|
|
19
|
+
internalType: string;
|
|
20
|
+
name: string;
|
|
21
|
+
type: string;
|
|
22
|
+
}[];
|
|
23
|
+
internalType: string;
|
|
24
|
+
name: string;
|
|
25
|
+
type: string;
|
|
26
|
+
})[];
|
|
27
|
+
name: string;
|
|
28
|
+
outputs: ({
|
|
29
|
+
internalType: string;
|
|
30
|
+
name: string;
|
|
31
|
+
type: string;
|
|
32
|
+
components?: undefined;
|
|
33
|
+
} | {
|
|
34
|
+
components: {
|
|
35
|
+
internalType: string;
|
|
36
|
+
name: string;
|
|
37
|
+
type: string;
|
|
38
|
+
}[];
|
|
39
|
+
internalType: string;
|
|
40
|
+
name: string;
|
|
41
|
+
type: string;
|
|
42
|
+
})[];
|
|
43
|
+
stateMutability: string;
|
|
44
|
+
type: string;
|
|
45
|
+
}[];
|
|
46
|
+
name: string;
|
|
47
|
+
params: AddressType[];
|
|
48
|
+
} | {
|
|
49
|
+
target: string;
|
|
50
|
+
abi: ({
|
|
51
|
+
inputs: {
|
|
52
|
+
internalType: string;
|
|
53
|
+
name: string;
|
|
54
|
+
type: string;
|
|
55
|
+
}[];
|
|
56
|
+
stateMutability: string;
|
|
57
|
+
type: string;
|
|
58
|
+
anonymous?: undefined;
|
|
59
|
+
name?: undefined;
|
|
60
|
+
outputs?: undefined;
|
|
61
|
+
} | {
|
|
62
|
+
anonymous: boolean;
|
|
63
|
+
inputs: {
|
|
64
|
+
indexed: boolean;
|
|
65
|
+
internalType: string;
|
|
66
|
+
name: string;
|
|
67
|
+
type: string;
|
|
68
|
+
}[];
|
|
69
|
+
name: string;
|
|
70
|
+
type: string;
|
|
71
|
+
stateMutability?: undefined;
|
|
72
|
+
outputs?: undefined;
|
|
73
|
+
} | {
|
|
74
|
+
inputs: {
|
|
75
|
+
internalType: string;
|
|
76
|
+
name: string;
|
|
77
|
+
type: string;
|
|
78
|
+
}[];
|
|
79
|
+
name: string;
|
|
80
|
+
outputs: {
|
|
81
|
+
internalType: string;
|
|
82
|
+
name: string;
|
|
83
|
+
type: string;
|
|
84
|
+
}[];
|
|
85
|
+
stateMutability: string;
|
|
86
|
+
type: string;
|
|
87
|
+
anonymous?: undefined;
|
|
88
|
+
})[];
|
|
89
|
+
name: string;
|
|
90
|
+
params: AddressType[];
|
|
91
|
+
};
|
|
92
|
+
setMulticallAddress(multicallAddress: string): void;
|
|
93
|
+
getEthBalance(address: string): Promise<BigNumber>;
|
|
94
|
+
getMultipleBalances(address: AddressType, assets: Asset[]): Promise<BigNumber[]>;
|
|
95
|
+
multicall<T extends any[] = any[]>(calls: ReadonlyArray<MulticallData>): Promise<T>;
|
|
96
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.EvmMulticallProvider = void 0;
|
|
13
|
+
const types_1 = require("@yaswap/types");
|
|
14
|
+
const abi_1 = require("@ethersproject/abi");
|
|
15
|
+
const typechain_1 = require("../typechain");
|
|
16
|
+
class EvmMulticallProvider {
|
|
17
|
+
// https://github.com/mds1/multicall
|
|
18
|
+
constructor(chainProvider, multicallAddress = '0xcA11bde05977b3631167028862bE2a173976CA11') {
|
|
19
|
+
this._multicallAddress = multicallAddress;
|
|
20
|
+
this._multicall = typechain_1.Multicall3__factory.connect(this._multicallAddress, chainProvider);
|
|
21
|
+
}
|
|
22
|
+
getMulticallAddress() {
|
|
23
|
+
return this._multicallAddress;
|
|
24
|
+
}
|
|
25
|
+
buildBalanceCallData(asset, user) {
|
|
26
|
+
if (asset.type === types_1.AssetTypes.native) {
|
|
27
|
+
return {
|
|
28
|
+
target: this._multicallAddress,
|
|
29
|
+
abi: typechain_1.Multicall3__factory.abi,
|
|
30
|
+
name: 'getEthBalance',
|
|
31
|
+
params: [user],
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
return {
|
|
36
|
+
target: asset.contractAddress,
|
|
37
|
+
abi: typechain_1.ERC20__factory.abi,
|
|
38
|
+
name: 'balanceOf',
|
|
39
|
+
params: [user],
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
setMulticallAddress(multicallAddress) {
|
|
44
|
+
this._multicall = typechain_1.Multicall3__factory.connect(multicallAddress, this._multicall.provider);
|
|
45
|
+
this._multicallAddress = multicallAddress;
|
|
46
|
+
}
|
|
47
|
+
getEthBalance(address) {
|
|
48
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
49
|
+
return new types_1.BigNumber((yield this._multicall.getEthBalance(address)).toString());
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
getMultipleBalances(address, assets) {
|
|
53
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
54
|
+
const user = address.toString();
|
|
55
|
+
const result = yield this.multicall(assets.map((asset) => this.buildBalanceCallData(asset, user)));
|
|
56
|
+
return result.map((r) => (r ? new types_1.BigNumber(r.toString()) : null));
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
multicall(calls) {
|
|
60
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
61
|
+
const aggregatedCallData = calls.map((call) => {
|
|
62
|
+
const callData = new abi_1.Interface(call.abi).encodeFunctionData(call.name, call.params);
|
|
63
|
+
return { target: call.target, callData };
|
|
64
|
+
});
|
|
65
|
+
const result = yield this._multicall.callStatic.tryAggregate(false, aggregatedCallData);
|
|
66
|
+
return calls.map((call, index) => {
|
|
67
|
+
const [success, returnData] = result[index];
|
|
68
|
+
if (success) {
|
|
69
|
+
const decodedResult = new abi_1.Interface(call.abi).decodeFunctionResult(call.name, returnData);
|
|
70
|
+
return decodedResult.length === 1 ? decodedResult[0] : decodedResult;
|
|
71
|
+
}
|
|
72
|
+
return null;
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.EvmMulticallProvider = EvmMulticallProvider;
|
|
78
|
+
//# sourceMappingURL=EvmMulticallProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EvmMulticallProvider.js","sourceRoot":"","sources":["../../../lib/chain/EvmMulticallProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { FeeDetails, Network } from '@yaswap/types';
|
|
2
|
+
import { L2Provider } from '@eth-optimism/sdk';
|
|
3
|
+
import { StaticJsonRpcProvider } from '@ethersproject/providers';
|
|
4
|
+
import { FeeOptions } from '../types';
|
|
5
|
+
import { EvmChainProvider } from './EvmChainProvider';
|
|
6
|
+
export declare class OptimismChainProvider extends EvmChainProvider {
|
|
7
|
+
private feeOptions;
|
|
8
|
+
protected provider: L2Provider<StaticJsonRpcProvider>;
|
|
9
|
+
constructor(network: Network, provider: L2Provider<StaticJsonRpcProvider>, feeOptions?: FeeOptions, multicall?: boolean);
|
|
10
|
+
getProvider(): L2Provider<StaticJsonRpcProvider>;
|
|
11
|
+
setProvider(provider: L2Provider<StaticJsonRpcProvider>): void;
|
|
12
|
+
getFees(): Promise<FeeDetails>;
|
|
13
|
+
private calculateFee;
|
|
14
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.OptimismChainProvider = void 0;
|
|
13
|
+
const types_1 = require("@yaswap/types");
|
|
14
|
+
const utils_1 = require("../utils");
|
|
15
|
+
const EvmChainProvider_1 = require("./EvmChainProvider");
|
|
16
|
+
class OptimismChainProvider extends EvmChainProvider_1.EvmChainProvider {
|
|
17
|
+
constructor(network, provider, feeOptions, multicall = true) {
|
|
18
|
+
super(network, provider, null, multicall);
|
|
19
|
+
this.feeOptions = {
|
|
20
|
+
slowMultiplier: (feeOptions === null || feeOptions === void 0 ? void 0 : feeOptions.slowMultiplier) || 1,
|
|
21
|
+
averageMultiplier: (feeOptions === null || feeOptions === void 0 ? void 0 : feeOptions.averageMultiplier) || 1.5,
|
|
22
|
+
fastMultiplier: (feeOptions === null || feeOptions === void 0 ? void 0 : feeOptions.fastMultiplier) || 2,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
getProvider() {
|
|
26
|
+
return this.provider;
|
|
27
|
+
}
|
|
28
|
+
setProvider(provider) {
|
|
29
|
+
this.provider = provider;
|
|
30
|
+
}
|
|
31
|
+
getFees() {
|
|
32
|
+
var _a;
|
|
33
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
34
|
+
const l2FeeData = yield this.provider.getFeeData();
|
|
35
|
+
const l2BaseGasPrice = new types_1.BigNumber((_a = l2FeeData.gasPrice) === null || _a === void 0 ? void 0 : _a.toString()).div(1e9).toNumber();
|
|
36
|
+
const l2Fee = this.calculateFee(l2BaseGasPrice);
|
|
37
|
+
const l1FeeData = yield this.provider.getL1GasPrice();
|
|
38
|
+
const l1BaseGasPrice = new types_1.BigNumber(l1FeeData.toString()).div(1e9).toNumber();
|
|
39
|
+
const l1Fee = this.calculateFee(l1BaseGasPrice);
|
|
40
|
+
return {
|
|
41
|
+
slow: { fee: l2Fee.slow, multilayerFee: { l1: l1Fee.slow, l2: l2Fee.slow } },
|
|
42
|
+
average: { fee: l2Fee.average, multilayerFee: { l1: l1Fee.average, l2: l2Fee.average } },
|
|
43
|
+
fast: { fee: l2Fee.fast, multilayerFee: { l1: l1Fee.fast, l2: l2Fee.fast } },
|
|
44
|
+
};
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
calculateFee(fee) {
|
|
48
|
+
return {
|
|
49
|
+
slow: (0, utils_1.calculateFee)(fee, this.feeOptions.slowMultiplier),
|
|
50
|
+
average: (0, utils_1.calculateFee)(fee, this.feeOptions.averageMultiplier),
|
|
51
|
+
fast: (0, utils_1.calculateFee)(fee, this.feeOptions.fastMultiplier),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
exports.OptimismChainProvider = OptimismChainProvider;
|
|
56
|
+
//# sourceMappingURL=OptimismChainProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OptimismChainProvider.js","sourceRoot":"","sources":["../../../lib/chain/OptimismChainProvider.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,yCAA+D;AAI/D,oCAAwC;AACxC,yDAAsD;AAEtD,MAAa,qBAAsB,SAAQ,mCAAgB;IAIvD,YAAY,OAAgB,EAAE,QAA2C,EAAE,UAAuB,EAAE,SAAS,GAAG,IAAI;QAChH,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QAE1C,IAAI,CAAC,UAAU,GAAG;YACd,cAAc,EAAE,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,cAAc,KAAI,CAAC;YAC/C,iBAAiB,EAAE,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,iBAAiB,KAAI,GAAG;YACvD,cAAc,EAAE,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,cAAc,KAAI,CAAC;SAClD,CAAC;IACN,CAAC;IAED,WAAW;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,WAAW,CAAC,QAA2C;QACnD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;IAEY,OAAO;;;YAChB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;YACnD,MAAM,cAAc,GAAG,IAAI,iBAAS,CAAC,MAAA,SAAS,CAAC,QAAQ,0CAAE,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;YACzF,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;YAEhD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;YACtD,MAAM,cAAc,GAAG,IAAI,iBAAS,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;YAC/E,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;YAEhD,OAAO;gBACH,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE;gBAC5E,OAAO,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE;gBACxF,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE;aAC/E,CAAC;;KACL;IAEO,YAAY,CAAC,GAAW;QAC5B,OAAO;YACH,IAAI,EAAE,IAAA,oBAAY,EAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;YACvD,OAAO,EAAE,IAAA,oBAAY,EAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC;YAC7D,IAAI,EAAE,IAAA,oBAAY,EAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;SAC1D,CAAC;IACN,CAAC;CACJ;AA7CD,sDA6CC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { FeeDetails } from '@yaswap/types';
|
|
2
|
+
export declare class EthereumFeeParser {
|
|
3
|
+
parse(response: EthereumResponse): FeeDetails;
|
|
4
|
+
}
|
|
5
|
+
export interface EthereumResponse {
|
|
6
|
+
code: number;
|
|
7
|
+
data: Data;
|
|
8
|
+
raw: Raw;
|
|
9
|
+
}
|
|
10
|
+
interface Data {
|
|
11
|
+
timestamp: number;
|
|
12
|
+
fast: number;
|
|
13
|
+
standard: number;
|
|
14
|
+
slow: number;
|
|
15
|
+
}
|
|
16
|
+
interface Raw {
|
|
17
|
+
etherscan: Etherscan;
|
|
18
|
+
}
|
|
19
|
+
interface Etherscan {
|
|
20
|
+
LastBlock: string;
|
|
21
|
+
SafeGasPrice: string;
|
|
22
|
+
ProposeGasPrice: string;
|
|
23
|
+
FastGasPrice: string;
|
|
24
|
+
suggestBaseFee: string;
|
|
25
|
+
gasUsedRatio: string;
|
|
26
|
+
}
|
|
27
|
+
export {};
|