viem
Version:
161 lines • 8.69 kB
TypeScript
import type { Address } from 'abitype';
import type { EstimateFeesPerGasReturnType } from '../actions/public/estimateFeesPerGas.js';
import type { PrepareTransactionRequestParameters } from '../actions/wallet/prepareTransactionRequest.js';
import type { Client } from '../clients/createClient.js';
import type { Transport } from '../clients/transports/createTransport.js';
import type { Account } from '../types/account.js';
import type { FeeValuesType } from '../types/fee.js';
import type { TransactionSerializable, TransactionSerializableGeneric, TransactionSerializedGeneric } from '../types/transaction.js';
import type { IsNarrowable, IsUndefined, Prettify } from '../types/utils.js';
import type { FormattedBlock } from '../utils/formatters/block.js';
import type { SerializeTransactionFn } from '../utils/transaction/serializeTransaction.js';
export type Chain<formatters extends ChainFormatters | undefined = ChainFormatters | undefined, custom extends Record<string, unknown> | undefined = Record<string, unknown> | undefined> = {
/** Collection of block explorers */
blockExplorers?: {
[key: string]: ChainBlockExplorer;
default: ChainBlockExplorer;
} | undefined;
/** Collection of contracts */
contracts?: Prettify<{
[key: string]: ChainContract | {
[sourceId: number]: ChainContract | undefined;
} | undefined;
} & {
ensRegistry?: ChainContract | undefined;
ensUniversalResolver?: ChainContract | undefined;
multicall3?: ChainContract | undefined;
universalSignatureVerifier?: ChainContract | undefined;
}> | undefined;
/** Collection of ENS TLDs for the chain. */
ensTlds?: readonly string[] | undefined;
/** ID in number form */
id: number;
/** Human-readable name */
name: string;
/** Currency used by chain */
nativeCurrency: ChainNativeCurrency;
/** Collection of RPC endpoints */
rpcUrls: {
[key: string]: ChainRpcUrls;
default: ChainRpcUrls;
};
/** Source Chain ID (ie. the L1 chain) */
sourceId?: number | undefined;
/** Flag for test networks */
testnet?: boolean | undefined;
} & ChainConfig<formatters, custom>;
export type ChainConfig<formatters extends ChainFormatters | undefined = ChainFormatters | undefined, custom extends Record<string, unknown> | undefined = Record<string, unknown> | undefined> = {
/** Custom chain data. */
custom?: custom | undefined;
/** Modifies how fees are derived. */
fees?: ChainFees<formatters | undefined> | undefined;
/** Modifies how data is formatted and typed (e.g. blocks and transactions) */
formatters?: formatters | undefined;
/** Modifies how data is serialized (e.g. transactions). */
serializers?: ChainSerializers<formatters> | undefined;
};
export type ChainFeesFnParameters<formatters extends ChainFormatters | undefined = ChainFormatters | undefined> = {
/** The latest block. */
block: Prettify<FormattedBlock<Omit<Chain, 'formatters'> & {
formatters: formatters;
}>>;
client: Client<Transport, Chain>;
/**
* A transaction request. This value will be undefined if the caller
* is outside of a transaction request context (e.g. a direct call to
* the `estimateFeesPerGas` Action).
*/
request?: PrepareTransactionRequestParameters<Omit<Chain, 'formatters'> & {
formatters: formatters;
}, Account | undefined, undefined> | undefined;
};
export type ChainEstimateFeesPerGasFnParameters<formatters extends ChainFormatters | undefined = ChainFormatters | undefined> = {
/** A function to multiply the base fee based on the `baseFeeMultiplier` value. */
multiply: (x: bigint) => bigint;
/** The type of fees to return. */
type: FeeValuesType;
} & ChainFeesFnParameters<formatters>;
export type ChainEstimateFeesPerGasFn<formatters extends ChainFormatters | undefined = ChainFormatters | undefined> = (args: ChainEstimateFeesPerGasFnParameters<formatters>) => Promise<EstimateFeesPerGasReturnType | null>;
export type ChainMaxPriorityFeePerGasFn<formatters extends ChainFormatters | undefined = ChainFormatters | undefined> = (args: ChainFeesFnParameters<formatters>) => Promise<bigint | null> | bigint | null;
export type ChainFees<formatters extends ChainFormatters | undefined = ChainFormatters | undefined> = {
/**
* The fee multiplier to use to account for fee fluctuations.
* Used in the [`estimateFeesPerGas` Action](/docs/actions/public/estimateFeesPerGas).
*
* @default 1.2
*/
baseFeeMultiplier?: number | ((args: ChainFeesFnParameters<formatters>) => Promise<number> | number);
/**
* The default `maxPriorityFeePerGas` to use when a priority
* fee is not defined upon sending a transaction.
*
* Overrides the return value in the [`estimateMaxPriorityFeePerGas` Action](/docs/actions/public/estimateMaxPriorityFeePerGas).
*/
maxPriorityFeePerGas?: bigint | ChainMaxPriorityFeePerGasFn<formatters> | undefined;
/** @deprecated Use `maxPriorityFeePerGas` instead. */
defaultPriorityFee?: bigint | ChainMaxPriorityFeePerGasFn<formatters> | undefined;
/**
* Allows customization of fee per gas values (e.g. `maxFeePerGas`/`maxPriorityFeePerGas`).
*
* Overrides the return value in the [`estimateFeesPerGas` Action](/docs/actions/public/estimateFeesPerGas).
*/
estimateFeesPerGas?: ChainEstimateFeesPerGasFn<formatters> | undefined;
};
export type ChainFormatters = {
/** Modifies how the Block structure is formatted & typed. */
block?: ChainFormatter<'block'> | undefined;
/** Modifies how the Transaction structure is formatted & typed. */
transaction?: ChainFormatter<'transaction'> | undefined;
/** Modifies how the TransactionReceipt structure is formatted & typed. */
transactionReceipt?: ChainFormatter<'transactionReceipt'> | undefined;
/** Modifies how the TransactionRequest structure is formatted & typed. */
transactionRequest?: ChainFormatter<'transactionRequest'> | undefined;
};
export type ChainFormatter<type extends string = string> = {
format: (args: any) => any;
type: type;
};
export type ChainSerializers<formatters extends ChainFormatters | undefined = undefined, transaction extends TransactionSerializableGeneric = formatters extends ChainFormatters ? formatters['transactionRequest'] extends ChainFormatter ? TransactionSerializableGeneric & Parameters<formatters['transactionRequest']['format']>[0] : TransactionSerializable : TransactionSerializable> = {
/** Modifies how Transactions are serialized. */
transaction?: SerializeTransactionFn<transaction, TransactionSerializedGeneric> | undefined;
};
export type ExtractChainFormatterExclude<chain extends Chain | undefined, type extends keyof ChainFormatters> = chain extends {
formatters?: infer formatters extends ChainFormatters;
} ? formatters[type] extends {
exclude: infer exclude;
} ? Extract<exclude, readonly string[]>[number] : '' : '';
export type ExtractChainFormatterParameters<chain extends Chain | undefined, type extends keyof ChainFormatters, fallback> = chain extends {
formatters?: infer formatters extends ChainFormatters;
} ? formatters[type] extends ChainFormatter ? Parameters<formatters[type]['format']>[0] : fallback : fallback;
export type ExtractChainFormatterReturnType<chain extends Chain | undefined, type extends keyof ChainFormatters, fallback> = IsNarrowable<chain, Chain> extends true ? chain extends {
formatters?: {
[_ in type]?: infer formatter extends ChainFormatter;
} | undefined;
} ? chain['formatters'] extends undefined ? fallback : IsNarrowable<formatter, ChainFormatter<type>> extends true ? ReturnType<formatter['format']> : fallback : fallback : fallback;
export type DeriveChain<chain extends Chain | undefined, chainOverride extends Chain | undefined> = chainOverride extends Chain ? chainOverride : chain;
export type GetChainParameter<chain extends Chain | undefined, chainOverride extends Chain | undefined = Chain | undefined> = IsUndefined<chain> extends true ? {
chain: chainOverride | null;
} : {
chain?: chainOverride | null | undefined;
};
type ChainBlockExplorer = {
name: string;
url: string;
apiUrl?: string | undefined;
};
export type ChainContract = {
address: Address;
blockCreated?: number | undefined;
};
type ChainNativeCurrency = {
name: string;
/** 2-6 characters long */
symbol: string;
decimals: number;
};
type ChainRpcUrls = {
http: readonly string[];
webSocket?: readonly string[] | undefined;
};
export {};
//# sourceMappingURL=chain.d.ts.map