UNPKG

viem

Version:

TypeScript Interface for Ethereum

156 lines • 7.91 kB
import type { Address } from 'abitype'; import type { transactionType } from '../utils/formatters/transaction.js'; import type { FeeValuesEIP1559, FeeValuesLegacy } from './fee.js'; import type { Log } from './log.js'; import type { Hash, Hex, Signature } from './misc.js'; import type { ValueOf } from './utils.js'; export type AccessList = { address: Address; storageKeys: Hex[]; }[]; export type TransactionType = ValueOf<typeof transactionType> | (string & {}); export type TransactionReceipt<TQuantity = bigint, TIndex = number, TStatus = 'success' | 'reverted', TType = TransactionType> = { /** Hash of block containing this transaction */ blockHash: Hash; /** Number of block containing this transaction */ blockNumber: TQuantity; /** Address of new contract or `null` if no contract was created */ contractAddress: Address | null; /** Gas used by this and all preceding transactions in this block */ cumulativeGasUsed: TQuantity; /** Pre-London, it is equal to the transaction's gasPrice. Post-London, it is equal to the actual gas price paid for inclusion. */ effectiveGasPrice: TQuantity; /** Transaction sender */ from: Address; /** Gas used by this transaction */ gasUsed: TQuantity; /** List of log objects generated by this transaction */ logs: Log<TQuantity, TIndex, false>[]; /** Logs bloom filter */ logsBloom: Hex; /** `success` if this transaction was successful or `reverted` if it failed */ status: TStatus; /** Transaction recipient or `null` if deploying a contract */ to: Address | null; /** Hash of this transaction */ transactionHash: Hash; /** Index of this transaction in the block */ transactionIndex: TIndex; /** Transaction type */ type: TType; }; export type TransactionBase<TQuantity = bigint, TIndex = number, TPending extends boolean = boolean> = { /** Hash of block containing this transaction or `null` if pending */ blockHash: TPending extends true ? null : Hash; /** Number of block containing this transaction or `null` if pending */ blockNumber: TPending extends true ? null : TQuantity; /** Transaction sender */ from: Address; /** Gas provided for transaction execution */ gas: TQuantity; /** Hash of this transaction */ hash: Hash; /** Contract code or a hashed method call */ input: Hex; /** Unique number identifying this transaction */ nonce: TIndex; /** ECDSA signature r */ r: Hex; /** ECDSA signature s */ s: Hex; /** Transaction recipient or `null` if deploying a contract */ to: Address | null; /** Index of this transaction in the block or `null` if pending */ transactionIndex: TPending extends true ? null : TIndex; /** The type represented as hex. */ typeHex: Hex | null; /** ECDSA recovery ID */ v: TQuantity; /** Value in wei sent with this transaction */ value: TQuantity; /** The parity of the y-value of the secp256k1 signature. */ yParity: TIndex; }; export type TransactionLegacy<TQuantity = bigint, TIndex = number, TPending extends boolean = boolean, TType = 'legacy'> = Omit<TransactionBase<TQuantity, TIndex, TPending>, 'yParity'> & FeeValuesLegacy<TQuantity> & { /** EIP-2930 Access List. */ accessList?: never; /** Chain ID that this transaction is valid on. */ chainId?: TIndex; yParity?: never; type: TType; }; export type TransactionEIP2930<TQuantity = bigint, TIndex = number, TPending extends boolean = boolean, TType = 'eip2930'> = TransactionBase<TQuantity, TIndex, TPending> & FeeValuesLegacy<TQuantity> & { /** EIP-2930 Access List. */ accessList: AccessList; /** Chain ID that this transaction is valid on. */ chainId: TIndex; type: TType; }; export type TransactionEIP1559<TQuantity = bigint, TIndex = number, TPending extends boolean = boolean, TType = 'eip1559'> = TransactionBase<TQuantity, TIndex, TPending> & FeeValuesEIP1559<TQuantity> & { /** EIP-2930 Access List. */ accessList: AccessList; /** Chain ID that this transaction is valid on. */ chainId: TIndex; type: TType; }; export type Transaction<TQuantity = bigint, TIndex = number, TPending extends boolean = boolean> = TransactionLegacy<TQuantity, TIndex, TPending> | TransactionEIP2930<TQuantity, TIndex, TPending> | TransactionEIP1559<TQuantity, TIndex, TPending>; export type TransactionRequestBase<TQuantity = bigint, TIndex = number> = { /** Contract code or a hashed method call with encoded args */ data?: Hex; /** Transaction sender */ from: Address; /** Gas provided for transaction execution */ gas?: TQuantity; /** Unique number identifying this transaction */ nonce?: TIndex; /** Transaction recipient */ to?: Address | null; /** Value in wei sent with this transaction */ value?: TQuantity; }; export type TransactionRequestLegacy<TQuantity = bigint, TIndex = number, TTransactionType = 'legacy'> = TransactionRequestBase<TQuantity, TIndex> & Partial<FeeValuesLegacy<TQuantity>> & { accessList?: never; type?: TTransactionType; }; export type TransactionRequestEIP2930<TQuantity = bigint, TIndex = number, TTransactionType = 'eip2930'> = TransactionRequestBase<TQuantity, TIndex> & Partial<FeeValuesLegacy<TQuantity>> & { accessList?: AccessList; type?: TTransactionType; }; export type TransactionRequestEIP1559<TQuantity = bigint, TIndex = number, TTransactionType = 'eip1559'> = TransactionRequestBase<TQuantity, TIndex> & Partial<FeeValuesEIP1559<TQuantity>> & { accessList?: AccessList; type?: TTransactionType; }; export type TransactionRequest<TQuantity = bigint, TIndex = number> = TransactionRequestLegacy<TQuantity, TIndex> | TransactionRequestEIP2930<TQuantity, TIndex> | TransactionRequestEIP1559<TQuantity, TIndex>; export type TransactionSerializedEIP1559 = `0x02${string}`; export type TransactionSerializedEIP2930 = `0x01${string}`; export type TransactionSerializedLegacy = Hex; export type TransactionSerializedGeneric = Hex; export type TransactionSerialized<TType extends TransactionType = 'legacy'> = TType extends 'eip1559' ? TransactionSerializedEIP1559 : TType extends 'eip2930' ? TransactionSerializedEIP2930 : TType extends 'legacy' ? TransactionSerializedLegacy : TransactionSerializedGeneric; export type TransactionSerializableBase<TQuantity = bigint, TIndex = number> = Omit<TransactionRequestBase<TQuantity, TIndex>, 'from'> & Partial<Signature>; export type TransactionSerializableLegacy<TQuantity = bigint, TIndex = number> = TransactionSerializableBase<TQuantity, TIndex> & Partial<FeeValuesLegacy<TQuantity>> & { accessList?: never; chainId?: number; type?: 'legacy'; }; export type TransactionSerializableEIP2930<TQuantity = bigint, TIndex = number> = TransactionSerializableBase<TQuantity, TIndex> & Partial<FeeValuesLegacy<TQuantity>> & { accessList?: AccessList; chainId: number; type?: 'eip2930'; yParity?: number; }; export type TransactionSerializableEIP1559<TQuantity = bigint, TIndex = number> = TransactionSerializableBase<TQuantity, TIndex> & Partial<FeeValuesEIP1559<TQuantity>> & { accessList?: AccessList; chainId: number; type?: 'eip1559'; yParity?: number; }; export type TransactionSerializableGeneric<TQuantity = bigint, TIndex = number> = TransactionSerializableBase<TQuantity, TIndex> & { accessList?: AccessList; chainId?: number; gasPrice?: TQuantity; maxFeePerGas?: TQuantity; maxPriorityFeePerGas?: TQuantity; type: string; }; export type TransactionSerializable<TQuantity = bigint, TIndex = number> = TransactionSerializableLegacy<TQuantity, TIndex> | TransactionSerializableEIP2930<TQuantity, TIndex> | TransactionSerializableEIP1559<TQuantity, TIndex> | TransactionSerializableGeneric<TQuantity, TIndex>; //# sourceMappingURL=transaction.d.ts.map