import { DBObject, DB } from '@ethereumjs/util';
export { AddressLike, AsyncEventEmitter, BatchDBOp as BatchDbOp, BigIntLike, BytesLike, DB as Db, DBObject as DbObject, EncodingOpts, Account as EthjsAccount, Address as EthjsAddress, GWEI_TO_WEI, GenesisState, JsonRpcWithdrawal, KECCAK256_RLP, KECCAK256_RLP_ARRAY, KeyEncoding, TypeOutput, ValueEncoding, Withdrawal, WithdrawalData, bytesToUnprefixedHex, bytesToUtf8, concatBytes, ecrecover, ecsign, equalsBytes, fetchFromProvider, getProvider, randomBytes, setLengthLeft, toType, zeros } from '@ethereumjs/util';
import { Hex } from 'viem';
export { Account, BlockNumber, BlockTag, ContractConstructorArgs, ContractFunctionName, CreateEventFilterParameters, DecodeFunctionResultReturnType, EncodeDeployDataParameters, EncodeFunctionDataParameters, Filter, GetEventArgs, HDAccount, Hex } from 'viem';
export { Abi, AbiConstructor, AbiEvent, AbiFunction, AbiItemType, AbiParametersToPrimitiveTypes, Address, ExtractAbiEvent, ExtractAbiEventNames, ExtractAbiEvents, ExtractAbiFunction, ExtractAbiFunctionNames, FormatAbi, ParseAbi, formatAbi, parseAbi } from 'abitype';
import { PrivateKeyAccount } from 'viem/accounts';
export { mnemonicToAccount } from 'viem/accounts';
export { EncodeEventTopicsParameters, boolToBytes, boolToHex, bytesToBigInt, bytesToBigint, bytesToBool, bytesToHex, bytesToNumber, decodeAbiParameters, decodeErrorResult, decodeEventLog, decodeFunctionData, decodeFunctionResult, encodeAbiParameters, encodeDeployData, encodeErrorResult, encodeEventTopics, encodeFunctionData, encodeFunctionResult, encodePacked, formatEther, formatGwei, formatLog, fromBytes, fromHex, fromRlp, getAddress, hexToBigInt, hexToBool, hexToBytes, hexToNumber, hexToString, isAddress, isBytes, isHex, keccak256, numberToHex, parseEther, parseGwei, serializeTransaction, stringToHex, toBytes, toHex, toRlp } from 'viem/utils';
export { Log as EthjsLog } from '@ethereumjs/evm';

type MemoryDb<TKey extends string | number | Uint8Array = Uint8Array, TValue extends string | Uint8Array | Uint8Array | string | DBObject = Uint8Array> = DB<TKey, TValue>;

type CreateMemoryDbFn<TKey extends string | number | Uint8Array = Uint8Array, TValue extends string | Uint8Array | Uint8Array | string | DBObject = Uint8Array> = (initialDb?: Map<TKey, TValue>) => MemoryDb<TKey, TValue>;

/**
 * @internal
 * A simple ethereumjs DB instance that uses an in memory Map as it's backend
 * Pass in an initial DB optionally to prepoulate the DB.
 * @type {import('./CreateMemoryDbFn.js').CreateMemoryDbFn}
 * @throws {never}
 */
declare const createMemoryDb: CreateMemoryDbFn;

declare const PREFUNDED_PRIVATE_KEYS: readonly ["0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", "0x59c6995e998f97a5a0044966f0945389dc9e86dae88c7a8412f4603b6b78690d", "0x5de4111afa1a4b94908f83103eb1f1706367c2e68ca870fc3fb9a804cdab365a", "0x7c852118294e51e653712a81e05800f419141751be58f605c371e15141b007a6", "0x47e179ec197488593b187f80a00eb0da91f1b9d0b13f8733639f19c30a34926a", "0x8b3a350cf5c34c9194ca85829a2df0ec3153be0318b5e2d3348e872092edffba", "0x92db14e403b83dfe3df233f83dfa3a0d7096f21ca9b0d6d6b8d88b2b4ec1564e", "0x4bbbf85ce3377467afe5d46f804f221813b2bb87f24d81f60f1fcdbf7cbf4356", "0xdbda1821b80551c9d65939329250298aa3472ba22feea921c0cf5d620ea67b97", "0x2a871d0798f97d79848a013d4936a73bf4cc922c825d33c1cf7073dff6d409c6"];
declare const PREFUNDED_PUBLIC_KEYS: readonly ["0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266", "0x70997970C51812dc3A010C7d01b50e0d17dc79C8", "0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC", "0x90F79bf6EB2c4f870365E785982E1f101E93b906", "0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65", "0x9965507D1a55bcC2695C58ba16FB37d819B0A4dc", "0x976EA74026E726554dB657fA54763abd0C3a0aa9", "0x14dC79964da2C08b23698B3D3cc7Ca32193d9955", "0x23618e81E3f5cdF7f54C3d65f7FBc0aBf5B21E8f", "0xa0Ee7A142d267C1f36714E4a8F75612F20a79720"];
declare const PREFUNDED_ACCOUNTS: [
    PrivateKeyAccount,
    PrivateKeyAccount,
    PrivateKeyAccount,
    PrivateKeyAccount,
    PrivateKeyAccount,
    PrivateKeyAccount,
    PrivateKeyAccount,
    PrivateKeyAccount,
    PrivateKeyAccount,
    PrivateKeyAccount
];
declare const PREFUNDED_SEED: Readonly<{
    mnemonic: "test test test test test test test test test test test junk";
    derivationPath: "m/44'/60'/0'/0/";
}>;

/**
 * A simple Bloom filter implementation originally from ethereumjs
 */
declare class Bloom {
    bitvector: Uint8Array;
    /**
     * Represents a Bloom filter.
     * @throws {InvalidBytesSizeError} If the byte size of the bitvector is not 256.
     */
    constructor(bitvector?: Uint8Array);
    /**
     * Adds an element to a bit vector of a 64 byte bloom filter.
     * @param e - The element to add
     * @throws {never}
     */
    add(e: Uint8Array): void;
    /**
     * Checks if an element is in the bloom.
     * @param e - The element to check
     * @throws {never}
     */
    check(e: Uint8Array): boolean;
    /**
     * Checks if multiple topics are in a bloom.
     * @returns `true` if every topic is in the bloom
     * @throws {never}
     */
    multiCheck(topics: Uint8Array[]): boolean;
    /**
     * Bitwise or blooms together.
     * @throws {never}
     */
    or(bloom: Bloom): void;
}

/**
 * A type that represents a JSON-serializable value.
 */
type JsonSerializable = bigint | string | number | boolean | null | JsonSerializableArray | JsonSerializableObject | JsonSerializableSet;
/**
 * A type that represents a JSON-serializable array.
 */
type JsonSerializableArray = ReadonlyArray<JsonSerializable>;
/**
 * A type that represents a JSON-serializable object.
 */
type JsonSerializableObject = {
    [key: string]: JsonSerializable;
};
/**
 * A type that represents a JSON-serializable set.
 */
type JsonSerializableSet<T extends bigint | string | number | boolean = bigint | string | number | boolean> = Set<T>;
/**
 * A helper type that converts a bigint to a hex string.
 */
type BigIntToHex<T> = T extends bigint ? Hex : T;
/**
 * A helper type that converts a set to a hex string.
 */
type SetToHex<T> = T extends Set<any> ? Hex : T;
/**
 * A helper type that converts a widened JSON-serializable value to a JSON-serializable value.
 * It replaces bigint with hex strings and sets with arrays.
 */
type SerializeToJson<T> = T extends JsonSerializableSet<infer S> ? ReadonlyArray<S> : T extends JsonSerializableObject ? {
    [P in keyof T]: SerializeToJson<T[P]>;
} : T extends JsonSerializableArray ? SerializeToJson<T[number]>[] : BigIntToHex<SetToHex<T>>;

declare function invariant(condition: any, error?: Error): asserts condition;

export { type BigIntToHex, Bloom, type CreateMemoryDbFn, type JsonSerializable, type JsonSerializableArray, type JsonSerializableObject, type JsonSerializableSet, type MemoryDb, PREFUNDED_ACCOUNTS, PREFUNDED_PRIVATE_KEYS, PREFUNDED_PUBLIC_KEYS, PREFUNDED_SEED, type SerializeToJson, type SetToHex, createMemoryDb, invariant };
