UNPKG

ox

Version:

Ethereum Standard Library

172 lines 5.89 kB
import type * as Errors from './Errors.js'; import * as Hex from './Hex.js'; import type { Compute, OneOf } from './internal/types.js'; export type FeeHistory<bigintType = bigint> = Compute<{ /** * An array of block base fees per gas (in wei). This includes the next block after * the newest of the returned range, because this value can be derived from the newest block. * Zeroes are returned for pre-EIP-1559 blocks. */ baseFeePerGas: bigintType[]; /** An array of block gas used ratios. These are calculated as the ratio of gasUsed and gasLimit. */ gasUsedRatio: number[]; /** Lowest number block of the returned range. */ oldestBlock: bigintType; /** An array of effective priority fees (in wei) per gas data points from a single block. All zeroes are returned if the block is empty. */ reward?: bigintType[][] | undefined; }>; export type FeeHistoryRpc = FeeHistory<Hex.Hex>; export type FeeValuesLegacy<bigintType = bigint> = { /** Base fee per gas. */ gasPrice: bigintType; }; export type FeeValuesLegacyRpc = FeeValuesLegacy<Hex.Hex>; export type FeeValuesEip1559<bigintType = bigint> = { /** Total fee per gas in wei (gasPrice/baseFeePerGas + maxPriorityFeePerGas). */ maxFeePerGas: bigintType; /** Max priority fee per gas (in wei). */ maxPriorityFeePerGas: bigintType; }; export type FeeValuesEip1559Rpc = FeeValuesEip1559<Hex.Hex>; export type FeeValuesEip4844<bigintType = bigint> = { /** Maximum total fee per gas sender is willing to pay for blob gas (in wei). */ maxFeePerBlobGas: bigintType; /** Total fee per gas in wei (gasPrice/baseFeePerGas + maxPriorityFeePerGas). */ maxFeePerGas: bigintType; /** Max priority fee per gas (in wei). */ maxPriorityFeePerGas: bigintType; }; export type FeeValuesEip4844Rpc = FeeValuesEip4844<Hex.Hex>; export type FeeValues<bigintType = bigint> = OneOf<FeeValuesLegacy<bigintType> | FeeValuesEip1559<bigintType> | FeeValuesEip4844<bigintType>>; export type FeeValuesRpc = OneOf<FeeValuesLegacyRpc | FeeValuesEip1559Rpc | FeeValuesEip4844Rpc>; export type FeeValuesType = 'legacy' | 'eip1559' | 'eip4844'; /** * Converts a {@link ox#Fee.FeeHistoryRpc} to a {@link ox#Fee.FeeHistory}. * * @example * ```ts twoslash * import { Fee } from 'ox' * * const history = Fee.fromHistoryRpc({ * baseFeePerGas: ['0x01', '0x02'], * gasUsedRatio: [0.5, 0.6], * oldestBlock: '0x10', * reward: [['0x01']] * }) * // @log: { baseFeePerGas: [1n, 2n], gasUsedRatio: [0.5, 0.6], oldestBlock: 16n, reward: [[1n]] } * ``` * * @param history - The RPC fee history to convert. * @returns An instantiated {@link ox#Fee.FeeHistory}. */ export declare function fromHistoryRpc(history: FeeHistoryRpc): FeeHistory; export declare namespace fromHistoryRpc { type ErrorType = Errors.GlobalErrorType; } /** * Converts a {@link ox#Fee.FeeHistory} to a {@link ox#Fee.FeeHistoryRpc}. * * @example * ```ts twoslash * import { Fee } from 'ox' * * const rpc = Fee.toHistoryRpc({ * baseFeePerGas: [1n, 2n], * gasUsedRatio: [0.5, 0.6], * oldestBlock: 16n, * reward: [[1n]] * }) * ``` * * @param history - The fee history to convert. * @returns An RPC fee history. */ export declare function toHistoryRpc(history: FeeHistory): FeeHistoryRpc; export declare namespace toHistoryRpc { type ErrorType = Errors.GlobalErrorType; } /** * Estimates a `maxFeePerGas` from a base fee, a priority tip, and a multiplier * applied to the base fee: * * ``` * maxFeePerGas = baseFeePerGas * multiplier + maxPriorityFeePerGas * ``` * * The multiplier is supplied as `multiplierNumerator / multiplierDenominator` * to keep the math in `bigint`. The default is `2 / 1` (i.e. 2x), matching the * common wallet/relay heuristic for headroom against base-fee bumps. * * @example * ```ts twoslash * import { Fee } from 'ox' * * Fee.estimateMaxFeePerGas({ * baseFeePerGas: 100n, * maxPriorityFeePerGas: 5n * }) * // @log: 205n * * Fee.estimateMaxFeePerGas({ * baseFeePerGas: 100n, * maxPriorityFeePerGas: 5n, * multiplierNumerator: 3n, * multiplierDenominator: 2n * }) * // @log: 155n (= 100n * 3n / 2n + 5n) * ``` * * @param args.baseFeePerGas - Block base fee per gas. * @param args.maxPriorityFeePerGas - Tip per gas. * @param args.multiplierNumerator - Numerator of the base-fee multiplier (default `2n`). * @param args.multiplierDenominator - Denominator of the base-fee multiplier (default `1n`). * @returns Suggested `maxFeePerGas`. */ export declare function estimateMaxFeePerGas(args: { baseFeePerGas: bigint; maxPriorityFeePerGas: bigint; multiplierNumerator?: bigint | undefined; multiplierDenominator?: bigint | undefined; }): bigint; export declare namespace estimateMaxFeePerGas { type ErrorType = Errors.GlobalErrorType; } /** * Computes the effective gas price an EIP-1559 transaction will pay: * * ``` * effective = min(maxFeePerGas, baseFeePerGas + maxPriorityFeePerGas) * ``` * * @example * ```ts twoslash * import { Fee } from 'ox' * * Fee.effectiveGasPrice({ * baseFeePerGas: 100n, * maxFeePerGas: 200n, * maxPriorityFeePerGas: 50n * }) * // @log: 150n (= 100n + 50n) * * Fee.effectiveGasPrice({ * baseFeePerGas: 100n, * maxFeePerGas: 120n, * maxPriorityFeePerGas: 50n * }) * // @log: 120n (capped at maxFeePerGas) * ``` * * @param args.baseFeePerGas - Block base fee per gas. * @param args.maxFeePerGas - Sender-supplied `maxFeePerGas`. * @param args.maxPriorityFeePerGas - Sender-supplied tip. * @returns Effective gas price (in wei). */ export declare function effectiveGasPrice(args: { baseFeePerGas: bigint; maxFeePerGas: bigint; maxPriorityFeePerGas: bigint; }): bigint; export declare namespace effectiveGasPrice { type ErrorType = Errors.GlobalErrorType; } //# sourceMappingURL=Fee.d.ts.map