import type { Address } from 'abitype';
import type { Block, BlockTag } from '../../types/block.js';
import type { FeeValuesEIP1559 } from '../../types/fee.js';
import type { Hex } from '../../types/misc.js';
import type { Index, Quantity, RpcBlock, RpcTransaction as RpcTransaction_, RpcTransactionRequest as RpcTransactionRequest_, TransactionType } from '../../types/rpc.js';
import type { AccessList, Transaction as Transaction_, TransactionBase, TransactionRequest as TransactionRequest_, TransactionRequestBase, TransactionSerializable, TransactionSerializableBase, TransactionSerialized } from '../../types/transaction.js';
import type { NeverBy } from '../../types/utils.js';
type CeloBlockExclude = 'difficulty' | 'gasLimit' | 'mixHash' | 'nonce' | 'uncles';
export type CeloBlockOverrides = {
    randomness: {
        committed: Hex;
        revealed: Hex;
    };
};
export type CeloBlock<TIncludeTransactions extends boolean = boolean, TBlockTag extends BlockTag = BlockTag> = NeverBy<Block<bigint, TIncludeTransactions, TBlockTag, CeloTransaction<TBlockTag extends 'pending' ? true : false>>, CeloBlockExclude> & CeloBlockOverrides;
export type CeloRpcBlockOverrides = {
    randomness: {
        committed: Hex;
        revealed: Hex;
    };
};
export type CeloRpcBlock<TBlockTag extends BlockTag = BlockTag, TIncludeTransactions extends boolean = boolean> = NeverBy<RpcBlock<TBlockTag, TIncludeTransactions, RpcTransaction<TBlockTag extends 'pending' ? true : false>>, CeloBlockExclude> & CeloRpcBlockOverrides;
export type CeloRpcTransaction<TPending extends boolean = boolean> = RpcTransaction<TPending> | RpcTransactionCIP42<TPending> | RpcTransactionCIP64<TPending>;
export type CeloRpcTransactionRequest = RpcTransactionRequest | RpcTransactionRequestCIP42 | RpcTransactionRequestCIP64;
export type CeloTransaction<TPending extends boolean = boolean> = Transaction<TPending> | TransactionCIP42<TPending> | TransactionCIP64<TPending>;
export type CeloTransactionRequest = TransactionRequest | TransactionRequestCIP42 | TransactionRequestCIP64;
export type CeloTransactionSerializable = TransactionSerializableCIP42 | TransactionSerializableCIP64 | CeloTransactionSerializableBase;
export type CeloTransactionSerialized<TType extends CeloTransactionType = 'legacy'> = TransactionSerialized<TType> | TransactionSerializedCIP42 | TransactionSerializedCIP64;
export type CeloTransactionType = TransactionType | 'cip42' | 'cip64';
type RpcTransaction<TPending extends boolean = boolean> = RpcTransaction_<TPending> & {
    feeCurrency: Address | null;
    gatewayFee: Hex | null;
    gatewayFeeRecipient: Address | null;
};
type RpcTransactionRequest = RpcTransactionRequest_ & {
    feeCurrency?: Address;
    gatewayFee?: Hex;
    gatewayFeeRecipient?: Address;
};
export type RpcTransactionCIP42<TPending extends boolean = boolean> = Omit<TransactionBase<Quantity, Index, TPending>, 'typeHex'> & FeeValuesEIP1559<Quantity> & {
    feeCurrency: Address | null;
    gatewayFee: Hex | null;
    gatewayFeeRecipient: Address | null;
    type: '0x7c';
};
export type RpcTransactionCIP64<TPending extends boolean = boolean> = Omit<TransactionBase<Quantity, Index, TPending>, 'typeHex'> & FeeValuesEIP1559<Quantity> & {
    feeCurrency: Address | null;
    gatewayFee?: undefined;
    gatewayFeeRecipient?: undefined;
    type: '0x7b';
};
export type RpcTransactionRequestCIP42 = TransactionRequestBase<Quantity, Index> & Partial<FeeValuesEIP1559<Quantity>> & {
    accessList?: AccessList;
    feeCurrency?: Address;
    gatewayFee?: Hex;
    gatewayFeeRecipient?: Address;
    type?: '0x7c';
};
export type RpcTransactionRequestCIP64 = TransactionRequestBase<Quantity, Index> & Partial<FeeValuesEIP1559<Quantity>> & {
    accessList?: AccessList;
    feeCurrency?: Address;
    gatewayFee?: undefined;
    gatewayFeeRecipient?: undefined;
    type?: '0x7b';
};
type Transaction<TPending extends boolean = boolean> = Transaction_<bigint, number, TPending> & {
    feeCurrency: Address | null;
    gatewayFee: bigint | null;
    gatewayFeeRecipient: Address | null;
};
export type TransactionCIP42<TPending extends boolean = boolean> = TransactionBase<bigint, number, TPending> & FeeValuesEIP1559 & {
    feeCurrency: Address | null;
    gatewayFee: bigint | null;
    gatewayFeeRecipient: Address | null;
    type: 'cip42';
};
export type TransactionCIP64<TPending extends boolean = boolean> = TransactionBase<bigint, number, TPending> & FeeValuesEIP1559 & {
    feeCurrency: Address | null;
    gatewayFee?: undefined;
    gatewayFeeRecipient?: undefined;
    type: 'cip64';
};
type TransactionRequest = TransactionRequest_ & {
    feeCurrency?: Address;
    gatewayFee?: bigint;
    gatewayFeeRecipient?: Address;
};
export type TransactionRequestCIP42 = TransactionRequestBase & Partial<FeeValuesEIP1559> & {
    accessList?: AccessList;
    feeCurrency?: Address;
    gatewayFee?: bigint;
    gatewayFeeRecipient?: Address;
    type?: 'cip42';
};
export type TransactionRequestCIP64 = TransactionRequestBase & Partial<FeeValuesEIP1559> & {
    accessList?: AccessList;
    feeCurrency?: Address;
    gatewayFee?: undefined;
    gatewayFeeRecipient?: undefined;
    type?: 'cip64';
};
export type TransactionSerializableCIP42<TQuantity = bigint, TIndex = number> = TransactionSerializableBase<TQuantity, TIndex> & Partial<FeeValuesEIP1559<TQuantity>> & {
    accessList?: AccessList;
    feeCurrency?: Address;
    gatewayFeeRecipient?: Address;
    gatewayFee?: TQuantity;
    chainId: number;
    type?: 'cip42';
};
export type TransactionSerializableCIP64<TQuantity = bigint, TIndex = number> = TransactionSerializableBase<TQuantity, TIndex> & Partial<FeeValuesEIP1559<TQuantity>> & {
    accessList?: AccessList;
    feeCurrency?: Address;
    gatewayFee?: undefined;
    gatewayFeeRecipient?: undefined;
    chainId: number;
    type?: 'cip64';
};
export type CeloTransactionSerializableBase = TransactionSerializable & {
    feeCurrency?: undefined;
    gatewayFee?: undefined;
    gatewayFeeRecipient?: undefined;
};
export type TransactionSerializedCIP42 = `0x7c${string}`;
export type TransactionSerializedCIP64 = `0x7b${string}`;
export {};
//# sourceMappingURL=types.d.ts.map