@xchainjs/xchain-evm
Version:
Genereic EVM client for XChainJS
179 lines (178 loc) • 7.04 kB
TypeScript
import { Address, BaseAmount, TokenAsset } from '@xchainjs/xchain-util';
import { Signer, Contract, Provider, InterfaceAbi } from 'ethers';
import BigNumber from 'bignumber.js';
/**
* Maximum approval amount possible, set to 2^256 - 1.
*/
export declare const MAX_APPROVAL: BigNumber;
/**
* Validate the given address.
*
* @param {Address} address The address to validate.
* @returns {boolean} `true` if the address is valid, otherwise `false`.
*/
export declare const validateAddress: (address: Address) => boolean;
/**
* Get token address from asset.
*
* @param {TokenAsset} asset The asset to extract the token address from.
* @returns {Address|null} The token address if found, otherwise `null`.
*/
export declare const getTokenAddress: (asset: TokenAsset) => Address | null;
/**
* Check if the symbol is valid.
*
* @param {string|null|undefined} symbol The symbol to validate.
* @returns {boolean} `true` if the symbol is valid and has a length of at least 3, otherwise `false`.
*/
export declare const validateSymbol: (symbol?: string | null) => boolean;
/**
* Calculate fees by multiplying gas price and gas limit.
*
* @returns {Fees} The calculated fee.
*/
export declare const getFee: ({ gasPrice, gasLimit, decimals, }: {
gasPrice: BaseAmount;
gasLimit: BigNumber;
decimals: number;
}) => BaseAmount;
/**
* Get address prefix based on the network.
*
* @returns {string} The address prefix based on the network ('0x').
*/
export declare const getPrefix: () => string;
/**
* Filter self transactions from an array of transactions.
*
* @param {T[]} txs The transactions array.
* @returns {T[]} The filtered transactions array with self transactions removed.
*/
export declare const filterSelfTxs: <T extends {
from: string;
to: string;
hash: string;
}>(txs: T[]) => T[];
/**
* Returns approval amount. If amount is not provided, returns `MAX_APPROVAL`.
* An explicit amount (including zero) is returned as-is, enabling revocation.
*
* @param {BaseAmount} amount The amount to check.
* @returns {ethers.BigNumber} The approval amount.
*/
export declare const getApprovalAmount: (amount?: BaseAmount) => BigNumber;
/**
* Estimate gas required for calling a contract function.
*
* @param {object} params Parameters for estimating gas.
* @param {Provider} provider Provider to interact with the contract.
* @param {Address} contractAddress The contract address.
* @param {ContractInterface} abi The contract ABI json.
* @param {string} funcName The function to be called.
* @param {unknown[]} funcParams The parameters of the function.
* @returns {BigNumber} The estimated gas required for the function call.
*/
export declare const estimateCall: ({ provider, contractAddress, abi, funcName, funcParams, }: {
provider: Provider;
contractAddress: Address;
abi: InterfaceAbi;
funcName: string;
funcParams?: unknown[];
}) => Promise<BigNumber>;
/**
* Calls a contract function.
*
* @param {Provider} provider The provider to interact with the contract.
* @param {Signer} signer The signer of the transaction (optional - needed for sending transactions only).
* @param {Address} contractAddress The contract address.
* @param {ContractInterface} abi The contract ABI json.
* @param {string} funcName The function to be called.
* @param {unknown[]} funcParams (optional) The parameters of the function.
* @returns {Promise<T>} The result of the contract function call.
*/
export declare const call: <T>({ provider, signer, contractAddress, abi, funcName, funcParams, }: {
provider: Provider;
signer?: Signer;
contractAddress: Address;
abi: InterfaceAbi;
funcName: string;
funcParams?: unknown[];
}) => Promise<T>;
/**
* Load a contract.
*
* @param {Provider} provider The provider to interact with the contract.
* @param {Address} contractAddress The contract address.
* @param {ContractInterface} abi The contract ABI json.
* @returns {Promise<ethers.Contract>} The loaded contract instance.
*/
export declare const getContract: ({ provider, contractAddress, abi, }: {
provider: Provider;
contractAddress: Address;
abi: InterfaceAbi;
}) => Promise<Contract>;
/**
* Estimate gas for calling `approve`.
*
* @param {Provider} provider The provider to interact with the contract.
* @param {Address} contractAddress The contract address.
* @param {Address} spenderAddress The spender address.
* @param {Address} fromAddress The address a transaction is sent from.
* @param {ContractInterface} abi The contract ABI json.
* @param {BaseAmount} amount (optional) The amount of token. By default, it will be unlimited token allowance.
* @returns {Promise<ethers.BigNumber>} The estimated gas.
*/
export declare function estimateApprove({ provider, contractAddress, spenderAddress, fromAddress, abi, amount, }: {
provider: Provider;
contractAddress: Address;
spenderAddress: Address;
fromAddress: Address;
abi: InterfaceAbi;
amount?: BaseAmount;
}): Promise<BigNumber>;
/**
* Get the current allowance for a spender on a token contract.
*
* @param {Provider} provider The provider to interact with the contract.
* @param {Address} contractAddress The contract (ERC20 token) address.
* @param {Address} spenderAddress The spender address (router).
* @param {Address} fromAddress The token owner address.
* @returns {Promise<BigNumber>} The current allowance.
*/
export declare function getAllowance({ provider, contractAddress, spenderAddress, fromAddress, }: {
provider: Provider;
contractAddress: Address;
spenderAddress: Address;
fromAddress: Address;
}): Promise<BigNumber>;
/**
* Check allowance.
*
* @param {Provider} provider The provider to interact with the contract.
* @param {Address} contractAddress The contract (ERC20 token) address.
* @param {Address} spenderAddress The spender address (router).
* @param {Address} fromAddress The address a transaction is sent from.
* @param {BaseAmount} amount The amount to check if it's allowed to spend or not (optional).
* @param {number} walletIndex (optional) HD wallet index
* @returns {Promise<boolean>} `true` if the spender is allowed to spend the specified amount, `false` otherwise.
*/
export declare function isApproved({ provider, contractAddress, spenderAddress, fromAddress, amount, }: {
provider: Provider;
contractAddress: Address;
spenderAddress: Address;
fromAddress: Address;
amount?: BaseAmount;
}): Promise<boolean>;
/**
* Removes `0x` or `0X` from the beginning of the address string.
*
* @param {Address} addr The address to remove the `0x` or `0X` prefix from.
* @returns {string} The address without the `0x` or `0X` prefix.
*/
export declare const strip0x: (addr: Address) => string;
/**
* Get the chain identifier the provider is connected with
* @param {Provider} provider Provider
* @returns {number} the chain identifier the provider is connected with
*/
export declare const getNetworkId: (provider: Provider) => Promise<number>;