{"version":3,"sources":["../src/DEFAULT_CHAIN_ID.js","../src/GENESIS_STATE.js","../src/getBlockNumber.js","../src/getChainId.js","../src/statePersister.js","../src/createTevmNode.js","../src/EIP1193EventEmitterTypes.ts"],"names":["parseEther","createJsonRpcFetcher","hexToBigInt","hexToNumber","dumpCanonicalGenesis","toHex","logger","createLogger","createCommon","tevmDefault","createChain","bytesToHex","createStateManager","KECCAK256_RLP","keccak256","createEvm","p256VerifyPrecompile","p","vm","createVm","TxPool","ReceiptsManager","createMapDb","eventEmitter","baseClient","impersonatedAccount","setImpersonatedAccount","getAddress"],"mappings":"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","file":"index.cjs","sourcesContent":["export const DEFAULT_CHAIN_ID = 900\n","import { parseEther } from '@tevm/utils'\n\n/**\n * These are the same accounts hardhat and anvil start with 10000 eth\n * Also including zero address\n * @type {ReadonlyArray<import('@tevm/utils').Address>}\n */\nexport const prefundedAccounts = [\n\t'0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\n\t'0x70997970C51812dc3A010C7d01b50e0d17dc79C8',\n\t'0x3C44CdDdB6a900fa2b585dd299e03d12FA4293BC',\n\t'0x90F79bf6EB2c4f870365E785982E1f101E93b906',\n\t'0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65',\n\t'0x9965507D1a55bcC2695C58ba16FB37d819B0A4dc',\n\t'0x976EA74026E726554dB657fA54763abd0C3a0aa9',\n\t'0x14dC79964da2C08b23698B3D3cc7Ca32193d9955',\n\t'0x23618e81E3f5cdF7f54C3d65f7FBc0aBf5B21E8f',\n\t'0xa0Ee7A142d267C1f36714E4a8F75612F20a79720',\n]\n\nconst INITIAL_ACCOUNTS = [`0x${'00'.repeat(20)}`, ...prefundedAccounts]\n\nconst INITIAL_BALANCE = parseEther('1000')\n\nconst multicall3Contract = {\n\tnonce: 0n,\n\tbalance: 0n,\n\tstorageRoot: '0x',\n\tdeployedBytecode:\n\t\t'0x6080604052600436106100f35760003560e01c80634d2301cc1161008a578063a8b0574e11610059578063a8b0574e1461025a578063bce38bd714610275578063c3077fa914610288578063ee82ac5e1461029b57600080fd5b80634d2301cc146101ec57806372425d9d1461022157806382ad56cb1461023457806386d516e81461024757600080fd5b80633408e470116100c65780633408e47014610191578063399542e9146101a45780633e64a696146101c657806342cbb15c146101d957600080fd5b80630f28c97d146100f8578063174dea711461011a578063252dba421461013a57806327e86d6e1461015b575b600080fd5b34801561010457600080fd5b50425b6040519081526020015b60405180910390f35b61012d610128366004610a85565b6102ba565b6040516101119190610bbe565b61014d610148366004610a85565b6104ef565b604051610111929190610bd8565b34801561016757600080fd5b50437fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0140610107565b34801561019d57600080fd5b5046610107565b6101b76101b2366004610c60565b610690565b60405161011193929190610cba565b3480156101d257600080fd5b5048610107565b3480156101e557600080fd5b5043610107565b3480156101f857600080fd5b50610107610207366004610ce2565b73ffffffffffffffffffffffffffffffffffffffff163190565b34801561022d57600080fd5b5044610107565b61012d610242366004610a85565b6106ab565b34801561025357600080fd5b5045610107565b34801561026657600080fd5b50604051418152602001610111565b61012d610283366004610c60565b61085a565b6101b7610296366004610a85565b610a1a565b3480156102a757600080fd5b506101076102b6366004610d18565b4090565b60606000828067ffffffffffffffff8111156102d8576102d8610d31565b60405190808252806020026020018201604052801561031e57816020015b6040805180820190915260008152606060208201528152602001906001900390816102f65790505b5092503660005b8281101561047757600085828151811061034157610341610d60565b6020026020010151905087878381811061035d5761035d610d60565b905060200281019061036f9190610d8f565b6040810135958601959093506103886020850185610ce2565b73ffffffffffffffffffffffffffffffffffffffff16816103ac6060870187610dcd565b6040516103ba929190610e32565b60006040518083038185875af1925050503d80600081146103f7576040519150601f19603f3d011682016040523d82523d6000602084013e6103fc565b606091505b50602080850191909152901515808452908501351761046d577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260846000fd5b5050600101610325565b508234146104e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4d756c746963616c6c333a2076616c7565206d69736d6174636800000000000060448201526064015b60405180910390fd5b50505092915050565b436060828067ffffffffffffffff81111561050c5761050c610d31565b60405190808252806020026020018201604052801561053f57816020015b606081526020019060019003908161052a5790505b5091503660005b8281101561068657600087878381811061056257610562610d60565b90506020028101906105749190610e42565b92506105836020840184610ce2565b73ffffffffffffffffffffffffffffffffffffffff166105a66020850185610dcd565b6040516105b4929190610e32565b6000604051808303816000865af19150503d80600081146105f1576040519150601f19603f3d011682016040523d82523d6000602084013e6105f6565b606091505b5086848151811061060957610609610d60565b602090810291909101015290508061067d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060448201526064016104dd565b50600101610546565b5050509250929050565b43804060606106a086868661085a565b905093509350939050565b6060818067ffffffffffffffff8111156106c7576106c7610d31565b60405190808252806020026020018201604052801561070d57816020015b6040805180820190915260008152606060208201528152602001906001900390816106e55790505b5091503660005b828110156104e657600084828151811061073057610730610d60565b6020026020010151905086868381811061074c5761074c610d60565b905060200281019061075e9190610e76565b925061076d6020840184610ce2565b73ffffffffffffffffffffffffffffffffffffffff166107906040850185610dcd565b60405161079e929190610e32565b6000604051808303816000865af19150503d80600081146107db576040519150601f19603f3d011682016040523d82523d6000602084013e6107e0565b606091505b506020808401919091529015158083529084013517610851577f08c379a000000000000000000000000000000000000000000000000000000000600052602060045260176024527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060445260646000fd5b50600101610714565b6060818067ffffffffffffffff81111561087657610876610d31565b6040519080825280602002602001820160405280156108bc57816020015b6040805180820190915260008152606060208201528152602001906001900390816108945790505b5091503660005b82811015610a105760008482815181106108df576108df610d60565b602002602001015190508686838181106108fb576108fb610d60565b905060200281019061090d9190610e42565b925061091c6020840184610ce2565b73ffffffffffffffffffffffffffffffffffffffff1661093f6020850185610dcd565b60405161094d929190610e32565b6000604051808303816000865af19150503d806000811461098a576040519150601f19603f3d011682016040523d82523d6000602084013e61098f565b606091505b506020830152151581528715610a07578051610a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4d756c746963616c6c333a2063616c6c206661696c656400000000000000000060448201526064016104dd565b506001016108c3565b5050509392505050565b6000806060610a2b60018686610690565b919790965090945092505050565b60008083601f840112610a4b57600080fd5b50813567ffffffffffffffff811115610a6357600080fd5b6020830191508360208260051b8501011115610a7e57600080fd5b9250929050565b60008060208385031215610a9857600080fd5b823567ffffffffffffffff811115610aaf57600080fd5b610abb85828601610a39565b90969095509350505050565b6000815180845260005b81811015610aed57602081850181015186830182015201610ad1565b81811115610aff576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600082825180855260208086019550808260051b84010181860160005b84811015610bb1578583037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001895281518051151584528401516040858501819052610b9d81860183610ac7565b9a86019a9450505090830190600101610b4f565b5090979650505050505050565b602081526000610bd16020830184610b32565b9392505050565b600060408201848352602060408185015281855180845260608601915060608160051b870101935082870160005b82811015610c52577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0888703018452610c40868351610ac7565b95509284019290840190600101610c06565b509398975050505050505050565b600080600060408486031215610c7557600080fd5b83358015158114610c8557600080fd5b9250602084013567ffffffffffffffff811115610ca157600080fd5b610cad86828701610a39565b9497909650939450505050565b838152826020820152606060408201526000610cd96060830184610b32565b95945050505050565b600060208284031215610cf457600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610bd157600080fd5b600060208284031215610d2a57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81833603018112610dc357600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112610e0257600080fd5b83018035915067ffffffffffffffff821115610e1d57600080fd5b602001915036819003821315610a7e57600080fd5b8183823760009101908152919050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112610dc357600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1833603018112610dc357600080fdfea2646970667358221220bb2b5c71a328032f97c676ae39a1ec2148d3e5d6f73d95e9b17910152d61f16264736f6c634300080c0033',\n}\n\n/**\n * @type {import('@tevm/state').TevmState}\n */\nexport const GENESIS_STATE = Object.fromEntries(\n\tINITIAL_ACCOUNTS.map((address) => [\n\t\taddress,\n\t\t{\n\t\t\tnonce: 0n,\n\t\t\tbalance: INITIAL_BALANCE,\n\t\t\tstorageRoot: '0x',\n\t\t\tcodeHash: '0x',\n\t\t},\n\t\tmulticall3Contract,\n\t]),\n)\n// We don't need to check this as it's just used for testing code coverage\n// The actual functionality of the module is already complete above\n","import { createJsonRpcFetcher } from '@tevm/jsonrpc'\nimport { hexToBigInt } from '@tevm/utils'\n\n/**\n * @param {{request: import('viem').EIP1193RequestFn} | import('viem').Transport} client\n */\nexport const getBlockNumber = async (client) => {\n\tconst transport = typeof client === 'function' ? client({}) : client\n\tconst fetcher = createJsonRpcFetcher(transport)\n\tconst { result: blockNumber, error } = await fetcher.request({\n\t\tjsonrpc: '2.0',\n\t\tmethod: 'eth_blockNumber',\n\t\tid: 1,\n\t\tparams: [],\n\t})\n\tif (error || blockNumber === undefined) {\n\t\tthrow error\n\t}\n\treturn hexToBigInt(/** @type {import(\"@tevm/utils\").Hex}*/ (blockNumber))\n}\n","import { createJsonRpcFetcher } from '@tevm/jsonrpc'\nimport { hexToNumber } from '@tevm/utils'\n\n/**\n * @param {{request: import('viem').EIP1193RequestFn} | import('viem').Transport} client\n */\nexport const getChainId = async (client) => {\n\tconst transport = typeof client === 'function' ? client({}) : client\n\tconst fetcher = createJsonRpcFetcher(transport)\n\tconst { result: chainId, error } = await fetcher.request({\n\t\tjsonrpc: '2.0',\n\t\tmethod: 'eth_chainId',\n\t\tid: 1,\n\t\tparams: [],\n\t})\n\tif (error || chainId === undefined) {\n\t\tthrow error\n\t}\n\treturn hexToNumber(/** @type {import(\"@tevm/utils\").Hex}*/ (chainId))\n}\n","import { dumpCanonicalGenesis } from '@tevm/state'\nimport { toHex } from '@tevm/utils'\n\n/**\n * @param {import('@tevm/sync-storage-persister').SyncStoragePersister} persister\n * @param {import('@tevm/logger').Logger} logger\n * @returns {(state: import('@tevm/state').BaseState) => void}\n */\nexport const statePersister = (persister, logger) => (stateManager) => {\n\tlogger.debug('persisting state manager...')\n\tdumpCanonicalGenesis(stateManager)()\n\t\t.then((state) => {\n\t\t\t/**\n\t\t\t * @type {import('@tevm/state').ParameterizedTevmState}\n\t\t\t */\n\t\t\tconst parsedState = {}\n\n\t\t\tfor (const [k, v] of Object.entries(state)) {\n\t\t\t\tconst { nonce, balance, storageRoot, codeHash } = v\n\t\t\t\tparsedState[k] = {\n\t\t\t\t\t...v,\n\t\t\t\t\tnonce: toHex(nonce),\n\t\t\t\t\tbalance: toHex(balance),\n\t\t\t\t\tstorageRoot: storageRoot,\n\t\t\t\t\tcodeHash: codeHash,\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpersister.persistTevmState(parsedState)\n\t\t})\n\t\t.catch((error) => {\n\t\t\tlogger.error('Failed to persist state:', error)\n\t\t})\n}\n","import { createChain } from '@tevm/blockchain'\nimport { createCommon, tevmDefault } from '@tevm/common'\nimport { createEvm } from '@tevm/evm'\nimport { createLogger } from '@tevm/logger'\nimport { p256VerifyPrecompile } from '@tevm/precompiles'\nimport { createMapDb, ReceiptsManager } from '@tevm/receipt-manager'\nimport { createStateManager } from '@tevm/state'\nimport { TxPool } from '@tevm/txpool'\nimport { bytesToHex, getAddress, hexToBigInt, KECCAK256_RLP, keccak256 } from '@tevm/utils'\nimport { createVm } from '@tevm/vm'\nimport { DEFAULT_CHAIN_ID } from './DEFAULT_CHAIN_ID.js'\nimport { GENESIS_STATE } from './GENESIS_STATE.js'\nimport { getBlockNumber } from './getBlockNumber.js'\nimport { getChainId } from './getChainId.js'\nimport { statePersister } from './statePersister.js'\n\n// TODO the common code is not very good and should be moved to common package\n// it has rotted from a previous implementation where the chainId was not used by vm\n\n/**\n * Creates the base instance of a memory client\n * @param {import('./TevmNodeOptions.js').TevmNodeOptions} [options]\n * @returns {import('./TevmNode.js').TevmNode}\n * @example\n * ```ts\n *  ```\n */\nexport const createTevmNode = (options = {}) => {\n\t// for now we just only work with eip-1193 provider but later\n\t// we can consider dynamically passing in chain retries etc\n\tconst transport = (() => {\n\t\tif (typeof options?.fork?.transport === 'function') {\n\t\t\treturn options.fork.transport({})\n\t\t}\n\t\treturn options.fork?.transport\n\t})()\n\t/**\n\t * @type {import('@tevm/utils').Address | undefined}\n\t */\n\tlet impersonatedAccount\n\t/**\n\t * @param {import('@tevm/utils').Address | undefined} address\n\t * returns {void}\n\t */\n\tconst setImpersonatedAccount = (address) => {\n\t\timpersonatedAccount = address\n\t}\n\n\tconst loggingLevel = options.loggingLevel ?? 'warn'\n\tconst logger = createLogger({\n\t\tname: 'TevmClient',\n\t\tlevel: loggingLevel,\n\t})\n\n\t/**\n\t * @returns {Promise<import('@tevm/state').StateOptions>}\n\t */\n\tconst getStateManagerOpts = async () => {\n\t\tif (transport) {\n\t\t\t// if the user passed in latest we must use an explicit block tag\n\t\t\tconst blockTag = await blockTagPromise\n\t\t\treturn {\n\t\t\t\tloggingLevel,\n\t\t\t\t...(options.persister ? { onCommit: statePersister(options.persister, logger) } : {}),\n\t\t\t\tfork: {\n\t\t\t\t\t...options.fork,\n\t\t\t\t\ttransport,\n\t\t\t\t\tblockTag,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tloggingLevel,\n\t\t\t...(options.storageCache !== undefined ? { storageCache: options.storageCache } : {}),\n\t\t\t...(options.contractCache !== undefined ? { contractCache: options.contractCache } : {}),\n\t\t\t...(options.accountsCache !== undefined ? { accountsCache: options.accountsCache } : {}),\n\t\t\t...(options.fork?.transport ? { ...options.fork, transport } : {}),\n\t\t\t...(options.persister !== undefined ? { onCommit: statePersister(options.persister, logger) } : {}),\n\t\t}\n\t}\n\n\t/**\n\t * Create the extend function in a generic way\n\t * @param {import('./TevmNode.js').TevmNode} client\n\t * @returns {import('./TevmNode.js').TevmNode['extend']}\n\t */\n\tconst extend = (client) => (extension) => {\n\t\tObject.assign(client, extension(client))\n\t\treturn /** @type {any}*/ (client)\n\t}\n\n\tconst chainIdPromise = (async () => {\n\t\tif (options?.common) {\n\t\t\treturn options?.common.id\n\t\t}\n\t\tif (transport) {\n\t\t\tconst id = await getChainId(transport)\n\t\t\treturn id\n\t\t}\n\t\treturn DEFAULT_CHAIN_ID\n\t})().then((chainId) => {\n\t\tlogger.debug({ chainId }, 'Creating client with chainId')\n\t\treturn BigInt(chainId)\n\t})\n\n\tconst blockTagPromise = (async () => {\n\t\tif (options.fork === undefined) {\n\t\t\t// this is ultimately unused\n\t\t\treturn 0n\n\t\t}\n\t\t// TODO handle other moving block tags like `safe`\n\t\t// we need to fetch the latest block number and return that otherwise we may have inconsistencies from block number changing\n\t\tif (options.fork.blockTag === undefined || options.fork.blockTag === 'latest') {\n\t\t\tconst latestBlockNumber = await getBlockNumber(options.fork.transport)\n\t\t\tlogger.debug({ latestBlockNumber }, 'fetched fork block number from provided forkurl')\n\t\t\treturn latestBlockNumber\n\t\t}\n\t\treturn options.fork.blockTag\n\t})()\n\n\tconst chainCommonPromise = chainIdPromise\n\t\t.then((chainId) => {\n\t\t\tif (options.common) {\n\t\t\t\treturn createCommon({\n\t\t\t\t\t...options.common,\n\t\t\t\t\tid: Number(chainId),\n\t\t\t\t\tloggingLevel: options.loggingLevel ?? 'warn',\n\t\t\t\t\thardfork: /** @type {import('@tevm/common').Hardfork}*/ (options.common.ethjsCommon.hardfork()) ?? 'prague',\n\t\t\t\t\teips: options.common.ethjsCommon.eips(),\n\t\t\t\t\tcustomCrypto: options.common.ethjsCommon.customCrypto,\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn createCommon({\n\t\t\t\t...tevmDefault,\n\t\t\t\tid: Number(chainId),\n\t\t\t\tloggingLevel: options.loggingLevel ?? 'warn',\n\t\t\t\thardfork: 'prague',\n\t\t\t\teips: [],\n\t\t\t})\n\t\t})\n\t\t.then((common) => {\n\t\t\t// ALWAYS Copy common so we don't modify the global instances since it's stateful!\n\t\t\tconst copy = common.copy()\n\t\t\treturn copy\n\t\t})\n\n\tconst blockchainPromise = Promise.all([chainCommonPromise, blockTagPromise]).then(([common, blockTag]) => {\n\t\treturn createChain({\n\t\t\tloggingLevel,\n\t\t\tcommon,\n\t\t\t...(options.fork?.transport !== undefined\n\t\t\t\t? {\n\t\t\t\t\t\tfork: {\n\t\t\t\t\t\t\ttransport: {\n\t\t\t\t\t\t\t\trequest:\n\t\t\t\t\t\t\t\t\ttypeof options.fork.transport === 'function'\n\t\t\t\t\t\t\t\t\t\t? options.fork.transport({}).request\n\t\t\t\t\t\t\t\t\t\t: options.fork.transport.request,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tblockTag,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t: {}),\n\t\t})\n\t})\n\n\tconst stateManagerPromise = blockchainPromise\n\t\t.then(async (blockchain) => {\n\t\t\t// wait for blockchain to initialize so we have the correct state root\n\t\t\tawait blockchain.ready()\n\t\t\treturn blockchain\n\t\t})\n\t\t.then((chain) => chain.getCanonicalHeadBlock())\n\t\t.then(async (headBlock) => {\n\t\t\tconst stateRootHex = bytesToHex(headBlock.header.stateRoot)\n\t\t\tconst restoredState = options.persister?.restoreState()\n\t\t\tif (restoredState) {\n\t\t\t\tlogger.debug(restoredState, 'Restoring persisted state...')\n\t\t\t\tlogger.warn(\n\t\t\t\t\t'State persistence is an experimental feature. It currently does not persist the blockchain state only the EVM state.',\n\t\t\t\t)\n\t\t\t\t/**\n\t\t\t\t * @type {import('@tevm/state').TevmState}\n\t\t\t\t */\n\t\t\t\tconst parsedState = {}\n\t\t\t\tfor (const [k, v] of Object.entries(restoredState)) {\n\t\t\t\t\tconst { nonce, balance, storageRoot, codeHash } = v\n\t\t\t\t\tparsedState[/** @type {import('@tevm/utils').Address}*/ (k)] = {\n\t\t\t\t\t\t...v,\n\t\t\t\t\t\tnonce: hexToBigInt(nonce),\n\t\t\t\t\t\tbalance: hexToBigInt(balance),\n\t\t\t\t\t\tstorageRoot: storageRoot,\n\t\t\t\t\t\tcodeHash: codeHash,\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// We might want to double check we aren't forking and overwriting this somehow\n\t\t\t\t// TODO we should be storing blockchain state too\n\t\t\t\tconst manager = createStateManager({\n\t\t\t\t\tgenesisState: parsedState,\n\t\t\t\t\tcurrentStateRoot: bytesToHex(headBlock.header.stateRoot),\n\t\t\t\t\tstateRoots: new Map([[stateRootHex, parsedState]]),\n\t\t\t\t\t...(await getStateManagerOpts()),\n\t\t\t\t})\n\t\t\t\tawait manager.ready()\n\t\t\t\treturn manager\n\t\t\t}\n\t\t\tconst genesisState = {\n\t\t\t\t...GENESIS_STATE,\n\t\t\t\t// add predeploys to genesis state\n\t\t\t\t...Object.fromEntries(\n\t\t\t\t\t(options.customPredeploys ?? []).map((predeploy) => [\n\t\t\t\t\t\tpredeploy.contract.address,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tnonce: 0n,\n\t\t\t\t\t\t\tdeployedBytecode: predeploy.contract.deployedBytecode,\n\t\t\t\t\t\t\t// TODO this is definitely wrong but should work\n\t\t\t\t\t\t\tstorageRoot: bytesToHex(KECCAK256_RLP),\n\t\t\t\t\t\t\tcodeHash: keccak256(predeploy.contract.deployedBytecode),\n\t\t\t\t\t\t},\n\t\t\t\t\t]),\n\t\t\t\t),\n\t\t\t}\n\t\t\tconst opts = await getStateManagerOpts()\n\t\t\treturn createStateManager({\n\t\t\t\t...opts,\n\t\t\t\tcurrentStateRoot: stateRootHex,\n\t\t\t\tstateRoots: new Map([[bytesToHex(headBlock.header.stateRoot), genesisState]]),\n\t\t\t\tgenesisState,\n\t\t\t})\n\t\t})\n\n\tconst evmPromise = Promise.all([chainCommonPromise, stateManagerPromise, blockchainPromise]).then(\n\t\t([common, stateManager, blockchain]) => {\n\t\t\treturn createEvm({\n\t\t\t\tcommon,\n\t\t\t\tstateManager,\n\t\t\t\tblockchain,\n\t\t\t\tallowUnlimitedContractSize: options.allowUnlimitedContractSize ?? false,\n\t\t\t\tcustomPrecompiles: [\n\t\t\t\t\t...[p256VerifyPrecompile()].filter(\n\t\t\t\t\t\t(p) =>\n\t\t\t\t\t\t\t!new Set((options.customPrecompiles ?? []).map((p) => p.address.toString())).has(p.address.toString()),\n\t\t\t\t\t),\n\t\t\t\t\t...(options.customPrecompiles ?? []),\n\t\t\t\t],\n\t\t\t\tprofiler: options.profiler ?? false,\n\t\t\t\tloggingLevel,\n\t\t\t})\n\t\t},\n\t)\n\n\tconst vmPromise = Promise.all([evmPromise, chainCommonPromise]).then(([evm, common]) => {\n\t\tconst vm = createVm({\n\t\t\tstateManager: evm.stateManager,\n\t\t\tevm: evm,\n\t\t\t// TODO this inherited type is wrong thus we need to cast this\n\t\t\tblockchain: /** @type {import('@tevm/blockchain').Chain} */ (evm.blockchain),\n\t\t\tcommon,\n\t\t})\n\t\treturn vm\n\t})\n\n\tconst txPoolPromise = vmPromise.then((vm) => new TxPool({ vm }))\n\tconst receiptManagerPromise = vmPromise.then((vm) => {\n\t\tlogger.debug('initializing receipts manager...')\n\t\treturn new ReceiptsManager(createMapDb({ cache: new Map() }), vm.blockchain)\n\t})\n\t/**\n\t * @type {Map<import('viem').Hex, import('./Filter.js').Filter>}\n\t */\n\tconst filters = new Map()\n\n\tconst createEventEmitter = () => {\n\t\t/** @type {Map<string | symbol, Array<Function>>} */\n\t\tconst events = new Map()\n\t\t/**\n\t\t * @type {import('./EIP1193EventEmitterTypes.js').EIP1193EventEmitter}\n\t\t */\n\t\tconst eventEmitter = {\n\t\t\ton(eventName, listener) {\n\t\t\t\tconst listeners = events.get(eventName) || []\n\t\t\t\tlisteners.push(listener)\n\t\t\t\tevents.set(eventName, listeners)\n\t\t\t},\n\t\t\tremoveListener(eventName, listener) {\n\t\t\t\tconst listeners = events.get(eventName)\n\t\t\t\tif (listeners) {\n\t\t\t\t\tconst index = listeners.indexOf(listener)\n\t\t\t\t\tif (index !== -1) {\n\t\t\t\t\t\tlisteners.splice(index, 1)\n\t\t\t\t\t\tif (listeners.length === 0) {\n\t\t\t\t\t\t\tevents.delete(eventName)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\temit(eventName, ...args) {\n\t\t\t\tconst listeners = events.get(eventName)\n\t\t\t\tif (listeners?.length) {\n\t\t\t\t\tlisteners.forEach((listener) => {\n\t\t\t\t\t\tlistener(...args)\n\t\t\t\t\t})\n\t\t\t\t\treturn true // Event was successfully emitted\n\t\t\t\t}\n\t\t\t\treturn false // No listeners for the event\n\t\t\t},\n\t\t}\n\t\treturn eventEmitter\n\t}\n\tconst eventEmitter = createEventEmitter()\n\n\tconst readyPromise = (async () => {\n\t\tawait blockchainPromise.then((b) => b.ready())\n\t\tawait stateManagerPromise.then((b) => b.ready())\n\t\tawait vmPromise.then((vm) => vm.ready())\n\t\teventEmitter.emit('connect')\n\t\treturn /** @type {true}*/ (true)\n\t})()\n\n\t/**\n\t * @param {import('./TevmNode.js').TevmNode} baseClient\n\t * @returns {import('./TevmNode.js').TevmNode['deepCopy']}\n\t */\n\tconst deepCopy = (baseClient) => async () => {\n\t\t/**\n\t\t * @type {import('@tevm/utils').Address | undefined}\n\t\t */\n\t\tlet impersonatedAccount\n\t\t/**\n\t\t * @param {import('@tevm/utils').Address | undefined} address\n\t\t * returns {void}\n\t\t */\n\t\tconst setImpersonatedAccount = (address) => {\n\t\t\timpersonatedAccount = address && getAddress(address)\n\t\t}\n\t\tawait readyPromise\n\t\tconst oldVm = await vmPromise\n\t\tconst vm = await oldVm.deepCopy()\n\t\tconst oldReceiptsManager = await receiptManagerPromise\n\t\tconst receiptsManager = oldReceiptsManager.deepCopy(vm.blockchain)\n\t\tconst oldTxPool = await txPoolPromise\n\t\tconst txPool = oldTxPool.deepCopy({ vm })\n\t\t/**\n\t\t * @type {Map<import('viem').Hex, import('./Filter.js').Filter>}\n\t\t */\n\t\tconst newFilters = new Map(filters)\n\t\t// don't copy registered events because that would be confusing\n\t\tconst eventEmitter = createEventEmitter()\n\t\t/**\n\t\t * @type {import('./TevmNode.js').TevmNode}\n\t\t */\n\t\tconst copiedClient = {\n\t\t\t...eventEmitter,\n\t\t\tlogger: baseClient.logger,\n\t\t\tgetReceiptsManager: async () => Promise.resolve(receiptsManager),\n\t\t\tgetTxPool: async () => Promise.resolve(txPool),\n\t\t\tgetVm: async () => Promise.resolve(vm),\n\t\t\tminingConfig: baseClient.miningConfig,\n\t\t\tmode: baseClient.mode,\n\t\t\t...('forkTransport' in baseClient\n\t\t\t\t? {\n\t\t\t\t\t\tforkTransport: {\n\t\t\t\t\t\t\trequest: baseClient.forkTransport.request,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t: {}),\n\t\t\textend: (extension) => extend(baseClient)(extension),\n\t\t\tdeepCopy: () => deepCopy(copiedClient)(),\n\t\t\tready: () => Promise.resolve(true),\n\t\t\tgetFilters: () => newFilters,\n\t\t\tgetImpersonatedAccount() {\n\t\t\t\treturn impersonatedAccount\n\t\t\t},\n\t\t\tsetImpersonatedAccount,\n\t\t\tsetFilter: (filter) => {\n\t\t\t\tnewFilters.set(filter.id, filter)\n\t\t\t},\n\t\t\tremoveFilter: (filterId) => {\n\t\t\t\tnewFilters.delete(filterId)\n\t\t\t},\n\t\t\tstatus: 'READY',\n\t\t}\n\t\treturn copiedClient\n\t}\n\n\t/**\n\t * Create and return the baseClient\n\t * It will be syncronously created but some functionality\n\t * will be asyncronously blocked by initialization of vm and chainId\n\t * @type {import('./TevmNode.js').TevmNode}\n\t */\n\tconst baseClient = {\n\t\t...eventEmitter,\n\t\tlogger,\n\t\tgetReceiptsManager: async () => {\n\t\t\tawait readyPromise\n\t\t\treturn receiptManagerPromise\n\t\t},\n\t\tgetTxPool: async () => {\n\t\t\tawait readyPromise\n\t\t\treturn txPoolPromise\n\t\t},\n\t\tgetVm: async () => {\n\t\t\tawait readyPromise\n\t\t\treturn vmPromise\n\t\t},\n\t\tminingConfig: options.miningConfig ?? { type: 'manual' },\n\t\tmode: transport ? 'fork' : 'normal',\n\t\t...(transport\n\t\t\t? {\n\t\t\t\t\tforkTransport: transport,\n\t\t\t\t}\n\t\t\t: {}),\n\t\textend: (extension) => extend(baseClient)(extension),\n\t\tready: () => readyPromise,\n\t\tgetImpersonatedAccount() {\n\t\t\treturn impersonatedAccount\n\t\t},\n\t\tsetImpersonatedAccount,\n\t\tgetFilters: () => filters,\n\t\tsetFilter: (filter) => {\n\t\t\tfilters.set(filter.id, filter)\n\t\t},\n\t\tremoveFilter: (filterId) => {\n\t\t\tfilters.delete(filterId)\n\t\t},\n\t\tstatus: 'INITIALIZING',\n\t\tdeepCopy: () => deepCopy(baseClient)(),\n\t\tdebug: async () => {\n\t\t\tconst txPool = await txPoolPromise\n\t\t\tconst vm = await vmPromise\n\t\t\tconst receiptManager = await receiptManagerPromise\n\t\t\treturn {\n\t\t\t\tchainName: vm.common.name,\n\t\t\t\tstatus: baseClient.status,\n\t\t\t\tmode: baseClient.mode,\n\t\t\t\tminingConfig: baseClient.miningConfig,\n\t\t\t\tregisteredFilters: baseClient.getFilters(),\n\t\t\t\tblocks: {\n\t\t\t\t\tlatest: vm.blockchain.blocksByTag.get('latest')?.header.toJSON(),\n\t\t\t\t\tforked: vm.blockchain.blocksByTag.get('forked')?.header.toJSON(),\n\t\t\t\t},\n\t\t\t\ttxsInMempool: txPool.txsInPool,\n\t\t\t\tstate: await vm.stateManager.dumpCanonicalGenesis(),\n\t\t\t\thardfork: vm.common.ethjsCommon.hardfork(),\n\t\t\t\teips: vm.common.ethjsCommon.eips(),\n\t\t\t\tchainId: vm.common.id,\n\t\t\t\treceipts: await receiptManager.getLogs(\n\t\t\t\t\t/** @type {import('@tevm/block').Block}*/ (\n\t\t\t\t\t\tvm.blockchain.blocksByTag.get('forked') ?? vm.blockchain.blocksByNumber.get(0n)\n\t\t\t\t\t),\n\t\t\t\t\t/** @type {import('@tevm/block').Block}*/ (vm.blockchain.blocksByTag.get('latest')),\n\t\t\t\t),\n\t\t\t}\n\t\t},\n\t}\n\n\teventEmitter.on('connect', () => {\n\t\tif (baseClient.status !== 'INITIALIZING') {\n\t\t\treturn\n\t\t}\n\t\tbaseClient.status = 'READY'\n\t})\n\n\treturn baseClient\n}\n","// this file is adapted from viem\n// see it here https://github.com/wevm/viem/blob/main/src/types/eip1193.ts\n// Copied from viem commit a098c98231d47ccac9bda1a944880b034020a1b5\n// We copy it here for easier developer experience internally and also\n// to lock in these types independent of viem potentially making changes\nimport type { Block } from '@tevm/block'\nimport type { TxReceipt } from '@tevm/receipt-manager'\nimport type { ImpersonatedTx, TypedTransaction } from '@tevm/tx'\nimport type { Address } from '@tevm/utils'\nimport type { GetFilterLogsReturnType } from 'viem'\n\nexport type ProviderConnectInfo = {\n\tchainId: string\n}\n\nexport type ProviderMessage = {\n\ttype: string\n\tdata: unknown\n}\n\nexport class ProviderRpcError extends Error {\n\tcode: number\n\tdetails: string\n\n\tconstructor(code: number, message: string) {\n\t\tsuper(message)\n\t\tthis.code = code\n\t\tthis.details = message\n\t}\n}\n\nexport type EIP1193EventMap = {\n\taccountsChanged(accounts: Address[]): void\n\tchainChanged(chainId: string): void\n\tconnect(connectInfo: ProviderConnectInfo): void\n\tdisconnect(error: ProviderRpcError): void\n\tmessage(message: ProviderMessage): void\n\t// These aren't standardized I'm adding the below ones for internal use\n\t// If standardized versions of these exist already we should consider switching to them in future\n\tnewPendingTransaction(tx: TypedTransaction | ImpersonatedTx): void\n\tnewReceipt(receipt: TxReceipt): void\n\tnewBlock(block: Block): void\n\tnewLog(log: GetFilterLogsReturnType[number]): void\n}\n\nexport type EIP1193Events = {\n\ton<TEvent extends keyof EIP1193EventMap>(event: TEvent, listener: EIP1193EventMap[TEvent]): void\n\tremoveListener<TEvent extends keyof EIP1193EventMap>(event: TEvent, listener: EIP1193EventMap[TEvent]): void\n}\n/**\n * A very minimal EventEmitter interface\n */\nexport type EIP1193EventEmitter = EIP1193Events & {\n\t/**\n\t * Emit an event.\n\t * @param {string | symbol} eventName - The event name.\n\t * @param  {...any} args - Arguments to pass to the event listeners.\n\t * @returns {boolean} True if the event was emitted, false otherwise.\n\t */\n\temit(eventName: keyof EIP1193EventMap, ...args: any[]): boolean\n}\n"]}