{"version":3,"sources":["../src/internal/forkAndCacheBlock.js","../src/Call/cloneVmWithBlock.js","../src/internal/maybeThrowOnFail.js","../src/Mine/emitEvents.js","../src/BaseCall/zBaseParams.js","../src/Mine/zMineParams.js","../src/Mine/validateMineParams.js","../src/Mine/mineHandler.js","../src/internal/getPendingClient.js","../src/internal/zod/zAddress.js","../src/internal/zod/zHex.js","../src/internal/zod/zBlockParam.js","../src/GetAccount/zGetAccountParams.js","../src/GetAccount/validateGetAccountParams.js","../src/GetAccount/getAccountHandler.js","../src/internal/zod/zBytecode.js","../src/internal/zod/zStorageRoot.js","../src/SetAccount/zSetAccountParams.js","../src/SetAccount/validateSetAccountParams.js","../src/SetAccount/setAccountHandler.js","../src/Contract/createScript.js","../src/internal/getL1FeeInformationOpStack.js","../src/Call/callHandlerOpts.js","../src/internal/createEvmError.js","../src/Call/callHandlerResult.js","../src/internal/evmInputToImpersonatedTx.js","../src/internal/runCallWithTrace.js","../src/internal/prefetchStorageFromAccessList.js","../src/internal/setupPrefetchProxy.js","../src/Call/handleEvmError.js","../src/Call/executeCall.js","../src/Call/handlePendingTransactionsWarning.js","../src/Call/handleStateOverrides.js","../src/CreateTransaction/createTransaction.js","../src/Call/handleAutomining.js","../src/Call/shouldCreateTransaction.js","../src/Call/handleTransactionCreation.js","../src/common/zCallEvents.js","../src/internal/zod/zBlockOverrideSet.js","../src/internal/zod/zStateOverrideSet.js","../src/BaseCall/zBaseCallParams.js","../src/BaseCall/validateBaseCallParams.js","../src/Call/zCallParams.js","../src/Call/validateCallParams.js","../src/Call/callHandler.js","../src/internal/zod/zAbi.js","../src/Contract/zContractParams.js","../src/Contract/validateContractParams.js","../src/Contract/contractHandler.js","../src/internal/decodeRevertReason.js","../src/utils/parseBlockTag.js","../src/Call/callProcedure.js","../src/eth/ethCreateAccessListProcedure.js","../src/eth/getStorageAtHandler.js","../src/SetAccount/setAccountProcedure.js","../src/anvil/anvilSetStorageAtProcedure.js","../src/anvil/anvilDealHandler.js","../src/anvil/anvilDealProcedure.js","../src/anvil/anvilDropTransactionProcedure.js","../src/DumpState/dumpStateHandler.js","../src/DumpState/dumpStateProcedure.js","../src/anvil/anvilDumpStateProcedure.js","../src/anvil/anvilGetAutomineProcedure.js","../src/anvil/anvilImpersonateAccountProcedure.js","../src/anvil/anvilLoadStateProcedure.js","../src/anvil/anvilResetProcedure.js","../src/anvil/anvilSetBalanceProcedure.js","../src/anvil/anvilSetChainIdProcedure.js","../src/anvil/anvilSetCodeProcedure.js","../src/anvil/anvilSetCoinbaseProcedure.js","../src/anvil/anvilSetNonceProcedure.js","../src/anvil/anvilStopImpersonatingAccountProcedure.js","../src/Deploy/deployHandler.js","../src/debug/DebugParams.ts","../src/internal/serializeTraceResult.js","../src/internal/runCallWithCallTrace.js","../src/internal/runCallWithFourbyteTrace.js","../src/internal/runCallWithPrestateTrace.js","../src/debug/traceCallHandler.js","../src/debug/debugTraceBlockProcedure.js","../src/debug/debugTraceCallProcedure.js","../src/debug/debugTraceStateProcedure.js","../src/eth/blockNumberHandler.js","../src/eth/blockNumberProcedure.js","../src/eth/chainIdHandler.js","../src/eth/chainIdProcedure.js","../src/eth/ethBlobBaseFeeProcedure.js","../src/eth/ethCallProcedure.js","../src/eth/ethCoinbaseProcedure.js","../src/eth/ethEstimateGasProcedure.js","../src/utils/txToJsonRpcTx.js","../src/utils/blockToJsonRpcBlock.js","../src/eth/ethGetBlockByHashProcedure.js","../src/eth/ethGetBlockByNumberProcedure.js","../src/eth/ethGetBlockTransactionCountByHashProcedure.js","../src/eth/ethGetBlockTransactionCountByNumberProcedure.js","../src/eth/ethGetFilterChangesProcedure.js","../src/utils/isArray.js","../src/eth/utils/parseBlockParam.js","../src/eth/ethGetLogsHandler.js","../src/eth/ethGetFilterLogsProcedure.js","../src/eth/ethGetLogsProcedure.js","../src/eth/ethGetTransactionByBlockHashAndIndexProcedure.js","../src/eth/ethGetTransactionByBlockNumberAndIndexProcedure.js","../src/eth/ethGetTransactionByHashProcedure.js","../src/eth/ethGetTransactionCountProcedure.js","../src/eth/ethGetTransactionReceipt.js","../src/eth/ethGetTransactionReceiptProcedure.js","../src/utils/generateRandomId.js","../src/eth/ethNewBlockFilterProcedure.js","../src/eth/utils/generateRandomId.js","../src/eth/utils/parseBlockTag.js","../src/eth/ethNewFilterHandler.js","../src/eth/ethNewFilterProcedure.js","../src/eth/ethNewPendingTransactionFilterProcedure.js","../src/eth/ethProtocolVersionProcedure.js","../src/eth/ethSendRawTransactionProcedure.js","../src/eth/ethSendTransactionHandler.js","../src/eth/ethSendTransactionProcedure.js","../src/eth/ethUninstallFilterProcedure.js","../src/eth/gasPriceHandler.js","../src/eth/gasPriceProcedure.js","../src/eth/getBalanceHandler.js","../src/eth/getBalanceProcedure.js","../src/eth/getCodeHandler.js","../src/eth/getCodeProcedure.js","../src/eth/getStorageAtProcedure.js","../src/GetAccount/getAccountProcedure.js","../src/LoadState/zLoadStateParams.js","../src/LoadState/validateLoadStateParams.js","../src/LoadState/loadStateHandler.js","../src/LoadState/loadStateProcedure.js","../src/Mine/mineProcedure.js","../src/createHandlers.js","../src/requestProcedure.js","../src/debug/debugTraceTransactionProcedure.js","../src/eth/ethAccountsHandler.js","../src/eth/ethAccountsProcedure.js","../src/eth/ethCallHandler.js","../src/eth/ethSendRawTransactionHandler.js","../src/eth/ethSignHandler.js","../src/eth/ethSignProcedure.js","../src/eth/ethSignTransactionHandler.js","../src/eth/ethSignTransactionProcedure.js","../src/internal/zod/zBlock.js","../src/Mine/validateMineEvents.js","../src/requestBulkProcedure.js"],"names":["vm","InternalError","createStateManager","createChain","ForkError","bytesToHex","z","errors","InvalidRequestError","InvalidAddressError","InvalidNonceError","InvalidBalanceError","MisconfiguredClientError","UnreachableCodeError","hexToBytes","address","createAddress","AccountNotFoundError","InvalidDeployedBytecodeError","InvalidStorageRootError","keccak256","createAccount","getAddress","createContractAddress","prefundedAccounts","runTx","createImpersonatedTx","InvalidBytecodeError","InternalEvmError","parseAbi","serializeTransaction","encodeFunctionData","decodeFunctionResult","InvalidBlockError","UnknownBlockError","InvalidParamsError","BaseError","StopError","RevertError","OutOfGasError","InvalidOpcodeError","StackOverflowError","StackUnderflowError","InvalidJumpError","OutOfRangeError","InvalidProofError","AuthCallUnsetError","InvalidKzgInputsError","ValueOverflowError","InvalidJumpSubError","CreateCollisionError","InvalidBeginSubError","RefundExhaustedError","InvalidReturnSubError","InvalidCommitmentError","InvalidEofFormatError","StaticStateChangeError","CodeStoreOutOfGasError","InsufficientBalanceError","InvalidInputLengthError","BLS12381InputEmptyError","InitcodeSizeViolationError","InvalidBytecodeResultError","CodeSizeExceedsMaximumError","BLS12381FpNotInFieldError","BLS12381PointNotOnCurveError","toHex","numberToHex","invariant","DefensiveNullCheckError","EvmRevertError","BLS12381InvalidInputLengthError","InvalidGasPriceError","InvalidGasLimitError","GasLimitExceededError","EvmError","trace","code","EthjsAccount","tx","account","treeifyError","InvalidSkipBalanceError","InvalidGasRefundError","InvalidOriginError","InvalidCallerError","InvalidValueError","InvalidDepthError","InvalidSelfdestructError","InvalidToError","InvalidBlobVersionedHashesError","InvalidMaxFeePerGasError","InvalidMaxPriorityFeePerGasError","InvalidAddToMempoolError","InvalidAddToBlockchainError","InvalidSaltError","InvalidDataError","callHandler","numberToBytes","Abi","InvalidAbiError","InvalidArgsError","InvalidFunctionNameError","isHex","RawContractError","getContractError","DecodeFunctionDataError","toFunctionSelector","decodeAbiParameters","hexToString","hexToBigInt","message","ERC20","fromRlp","receiptManager","createMapDb","hexToNumber","MethodNotSupportedError","BlockHeader","Block","encodeDeployData","decodeErrorResult","params","toBytes","createJsonRpcFetcher","InternalRpcError","result","out","generateRandomId","parseBlockTag","topics","stringToHex","createTxFromRLP","TransactionFactory","parseGwei","NoForkUrlSetError","MethodNotFoundError","isBlobEIP4844Tx","BlobGasLimitExceededError","InvalidTransactionError"],"mappings":"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","file":"index.cjs","sourcesContent":["import { createChain } from '@tevm/blockchain'\nimport { InternalError } from '@tevm/errors'\nimport { createStateManager } from '@tevm/state'\n\n// TODO this belongs in vm package actually but it's fine here for now\n\n/**\n * Will fork a given block number and save the state roots to state manager\n * @param {import('@tevm/node').TevmNode} client\n * @param {import('@tevm/block').Block} block\n * @param {boolean} [executeBlock=false]\n * @returns {Promise<import('@tevm/vm').Vm>} A vm that forks the given block\n */\nexport const forkAndCacheBlock = async (client, block, executeBlock = false) => {\n\tclient.logger.debug('Forking a new block based on block tag...')\n\t// if no state root fork the block with a fresh state manager\n\tconst vm = await client.getVm().then((vm) => vm.deepCopy())\n\t// this can't happen making ts happy\n\tif (!client.forkTransport) {\n\t\tthrow new InternalError('Cannot forkAndCacheBlock without a fork url')\n\t}\n\n\tvm.stateManager = createStateManager({\n\t\t...vm.evm.stateManager._baseState.options,\n\t\tfork: {\n\t\t\ttransport: client.forkTransport,\n\t\t\tblockTag: block.header.number,\n\t\t},\n\t})\n\tvm.evm.stateManager = vm.stateManager\n\n\tvm.blockchain = await createChain({\n\t\tfork: {\n\t\t\ttransport: client.forkTransport,\n\t\t\tblockTag: block.header.number,\n\t\t},\n\t\tcommon: vm.common,\n\t\t// TODO silent not being in this type is a bug\n\t\tloggingLevel: /** @type {any}*/ (client.logger.level),\n\t})\n\tvm.evm.blockchain = vm.blockchain\n\n\tawait Promise.all([vm.stateManager.ready(), vm.blockchain.ready()])\n\n\tif (executeBlock) {\n\t\tconst transactions = /** @type {import('@tevm/block').Block}*/ (block).transactions\n\t\tclient.logger.debug({ count: transactions.length }, 'Processing transactions')\n\t\tawait Promise.all(\n\t\t\ttransactions.map(async (tx, i) => {\n\t\t\t\tclient.logger.debug({ txNumber: i, tx }, 'Processing transaction')\n\t\t\t\tawait vm.evm.shallowCopy().runCall(tx)\n\t\t\t}),\n\t\t)\n\n\t\tclient.logger.debug('Finished processing block transactions and saving state root')\n\t}\n\n\tvm.stateManager.saveStateRoot(block.header.stateRoot, await vm.stateManager.dumpCanonicalGenesis())\n\n\treturn vm\n}\n","import { ForkError, InternalError } from '@tevm/errors'\nimport { forkAndCacheBlock } from '../internal/forkAndCacheBlock.js'\n\n/**\n * @internal\n * Prepares the VM for a call given a block tag. This includes\n * - Cloning the VM\n * - Setting the state root\n * - Setting the fork transport if the block is in the past\n * @param {import('@tevm/node').TevmNode} client\n * @param {import('@tevm/block').Block} block\n * @returns {Promise<import('@tevm/vm').Vm | ForkError | InternalError>} VM or errors\n * @throws {never} returns errors as values\n */\nexport const cloneVmWithBlockTag = async (client, block) => {\n\t// 33-37,48-49\n\ttry {\n\t\tclient.logger.debug('Preparing vm to execute a call with block...')\n\t\tconst originalVm = await client.getVm()\n\t\tif (client.forkTransport && !(await originalVm.stateManager.hasStateRoot(block.header.stateRoot))) {\n\t\t\treturn await forkAndCacheBlock(client, block).catch((e) => {\n\t\t\t\treturn new ForkError(e instanceof Error ? e.message : 'Unknown error', { cause: e })\n\t\t\t})\n\t\t}\n\t\tconst vm = await originalVm.deepCopy()\n\t\tawait vm.stateManager.setStateRoot(block.header.stateRoot)\n\t\treturn vm\n\t} catch (e) {\n\t\treturn new InternalError(e instanceof Error ? e.message : 'unknown error', {\n\t\t\tcause: /** @type {Error}*/ (e),\n\t\t})\n\t}\n}\n","/**\n * @internal\n * Internal utility to wrap a handler and handle the `throwOnError` option.\n * If `throwOnError` is true and the handler returns an `errors` array, it will throw an error.\n * Otherwise, it will return the result of the handler.\n * @template {{errors?: any[]}} TResult\n * @param {boolean} throwOnFail whether to throw\n * @param {TResult} result\n * @returns {TResult extends {throwOnError: true} ? Omit<TResult, 'errors'> : TResult}\n */\nexport const maybeThrowOnFail = (throwOnFail, result) => {\n\tif (!throwOnFail) {\n\t\treturn /** @type {any}*/ (result)\n\t}\n\tif ((result?.errors?.length ?? 0) === 1) {\n\t\tthrow result.errors?.[0]\n\t}\n\tif ((result?.errors?.length ?? 0) > 1) {\n\t\tthrow new AggregateError(result?.errors ?? [])\n\t}\n\treturn /** @type {any}*/ (result)\n}\n","import { bytesToHex } from '@tevm/utils'\n\n/**\n * Helper function to call an event handler with a next callback\n * @template T\n * @template A\n * @param {((data: T, secondParam?: A, next?: () => void) => void | Promise<void>) | undefined} handler - Event handler to call\n * @param {T} data - Data to pass to the handler\n * @param {A | undefined} [secondParam] - Optional second parameter\n * @returns {Promise<void>}\n */\nconst callHandler = async (handler, data, secondParam) => {\n\tif (typeof handler === 'function') {\n\t\tlet hasCalledNext = false\n\t\tconst next = () => {\n\t\t\thasCalledNext = true\n\t\t}\n\n\t\ttry {\n\t\t\tlet result\n\t\t\tif (secondParam !== undefined) {\n\t\t\t\tresult = handler(data, secondParam, next)\n\t\t\t} else {\n\t\t\t\t// @ts-expect-error - We know handler is callable with just data and next\n\t\t\t\tresult = handler(data, next)\n\t\t\t}\n\n\t\t\t// Check if the handler returned a promise\n\t\t\tif (result instanceof Promise) {\n\t\t\t\tawait result\n\t\t\t}\n\n\t\t\t// If the handler doesn't call next, we consider it synchronous\n\t\t\tif (!hasCalledNext) {\n\t\t\t\t// Handler completed without calling next, which is fine\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error('Error in event handler:', error)\n\t\t}\n\t}\n}\n\n/**\n * @internal\n * Emits events after successful mine\n * @param {import(\"@tevm/node\").TevmNode} client\n * @param {Array<import('@tevm/block').Block>} newBlocks\n * @param {Map<import('@tevm/utils').Hex,Array<import('@tevm/receipt-manager').TxReceipt>>} newReceipts\n * @param {import('./MineParams.js').MineParams} [params]\n * @returns {Promise<void>}\n */\nexport const emitEvents = async (client, newBlocks, newReceipts, params = {}) => {\n\t// extract event handlers\n\tconst { onBlock, onReceipt, onLog } = params\n\n\t// emit newBlock events\n\tfor (const block of newBlocks) {\n\t\t// Emit global events\n\t\tclient.emit('newBlock', block)\n\n\t\t// Call handler if provided\n\t\tawait callHandler(onBlock, block)\n\n\t\tconst blockHash = bytesToHex(block.hash())\n\t\tconst receipts = newReceipts.get(blockHash)\n\t\tif (!receipts) {\n\t\t\tthrow new Error(\n\t\t\t\t`InternalError: Receipts not found for block hash ${blockHash} in mineHandler. This indicates a bug in tevm.`,\n\t\t\t)\n\t\t}\n\n\t\tfor (const receipt of receipts) {\n\t\t\t// Emit global events\n\t\t\tclient.emit('newReceipt', receipt)\n\n\t\t\t// Call handler if provided\n\t\t\t// @ts-expect-error - Handler types are defined in MineEvents.ts\n\t\t\tawait callHandler(onReceipt, receipt, blockHash)\n\n\t\t\tfor (const log of receipt.logs) {\n\t\t\t\t// Emit global events\n\t\t\t\tclient.emit('newLog', log)\n\n\t\t\t\t// Call handler if provided\n\t\t\t\t// @ts-expect-error - Handler types are defined in MineEvents.ts\n\t\t\t\tawait callHandler(onLog, log, receipt)\n\t\t\t}\n\t\t}\n\t}\n}\n","import { z } from 'zod'\n\n/**\n * Parameters shared across tevm actions\n */\nexport const zBaseParams = z\n\t.object({\n\t\tthrowOnFail: z\n\t\t\t.boolean()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t'If true the action handler will throw errors rather than returning errors an the `errors` property. Defaults to true.',\n\t\t\t),\n\t})\n\t.describe('Properties shared across actions')\n","import { z } from 'zod'\nimport { zBaseParams } from '../BaseCall/zBaseParams.js'\n\n/**\n * Zod validator for a valid mine action invocation\n */\nexport const zMineParams = zBaseParams.extend({\n\tblockCount: z.number().int().gte(0).optional(),\n\tinterval: z.number().int().gte(0).optional(),\n\tonBlock: z.function().optional(),\n\tonReceipt: z.function().optional(),\n\tonLog: z.function().optional(),\n})\n","import { InvalidAddressError, InvalidBalanceError, InvalidNonceError, InvalidRequestError } from '@tevm/errors'\nimport { zMineParams } from './zMineParams.js'\n\n/**\n * @typedef {InvalidAddressError| InvalidBalanceError| InvalidNonceError | InvalidRequestError} ValidateMineParamsError\n */\n\n/**\n * @param {import('./MineParams.js').MineParams} action\n * @returns {Array<ValidateMineParamsError>}\n */\nexport const validateMineParams = (action) => {\n\t/**\n\t * @type {Array<ValidateMineParamsError>}\n\t */\n\tconst errors = []\n\n\tconst parsedParams = zMineParams.safeParse(action)\n\n\tif (parsedParams.success === false) {\n\t\tconst formattedErrors = parsedParams.error.format()\n\t\tformattedErrors._errors.forEach((error) => {\n\t\t\terrors.push(new InvalidRequestError(error))\n\t\t})\n\t\tif (formattedErrors.blockCount) {\n\t\t\tformattedErrors.blockCount._errors.forEach((error) => {\n\t\t\t\terrors.push(new InvalidAddressError(error))\n\t\t\t})\n\t\t}\n\t\tif (formattedErrors.interval) {\n\t\t\tformattedErrors.interval._errors.forEach((error) => {\n\t\t\t\terrors.push(new InvalidNonceError(error))\n\t\t\t})\n\t\t}\n\t\tif (formattedErrors.throwOnFail) {\n\t\t\tformattedErrors.throwOnFail._errors.forEach((error) => {\n\t\t\t\terrors.push(new InvalidBalanceError(error))\n\t\t\t})\n\t\t}\n\t}\n\n\treturn errors\n}\n","import { InternalError, MisconfiguredClientError, UnreachableCodeError } from '@tevm/errors'\nimport { bytesToHex, hexToBytes } from '@tevm/utils'\nimport { maybeThrowOnFail } from '../internal/maybeThrowOnFail.js'\nimport { emitEvents } from './emitEvents.js'\nimport { validateMineParams } from './validateMineParams.js'\n\n// TODO Errors can leave us in bad states\n\n/**\n * @param {import(\"@tevm/node\").TevmNode} client\n * @param {object} [options]\n * @param {boolean} [options.throwOnFail] whether to default to throwing or not when errors occur\n * @returns {import('./MineHandlerType.js').MineHandler}\n */\nexport const mineHandler =\n\t(client, options = {}) =>\n\tasync ({ throwOnFail = options.throwOnFail ?? true, tx, ...params } = {}) => {\n\t\tswitch (client.status) {\n\t\t\tcase 'MINING': {\n\t\t\t\tconst err = new MisconfiguredClientError('Mining is already in progress')\n\t\t\t\treturn maybeThrowOnFail(throwOnFail, { errors: [err] })\n\t\t\t}\n\t\t\tcase 'INITIALIZING': {\n\t\t\t\tawait client.ready()\n\t\t\t\tclient.status = 'MINING'\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase 'SYNCING': {\n\t\t\t\tconst err = new MisconfiguredClientError('Syncing not currently implemented')\n\t\t\t\treturn maybeThrowOnFail(throwOnFail, { errors: [err] })\n\t\t\t}\n\t\t\tcase 'STOPPED': {\n\t\t\t\tconst err = new MisconfiguredClientError('Client is stopped')\n\t\t\t\treturn maybeThrowOnFail(throwOnFail, { errors: [err] })\n\t\t\t}\n\t\t\tcase 'READY': {\n\t\t\t\tclient.status = 'MINING'\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tconst err = new UnreachableCodeError(client.status)\n\t\t\t\treturn maybeThrowOnFail(throwOnFail, { errors: [err] })\n\t\t\t}\n\t\t}\n\t\ttry {\n\t\t\tclient.logger.debug({ throwOnFail, ...params }, 'mineHandler called with params')\n\t\t\tconst errors = validateMineParams(params)\n\t\t\tif (errors.length > 0) {\n\t\t\t\treturn maybeThrowOnFail(throwOnFail, { errors })\n\t\t\t}\n\t\t\tconst { interval = 1, blockCount = 1 } = params\n\n\t\t\t/**\n\t\t\t * @type {Array<import('@tevm/block').Block>}\n\t\t\t */\n\t\t\tconst newBlocks = []\n\t\t\t/**\n\t\t\t * @type {Map<import('@tevm/utils').Hex,Array<import('@tevm/receipt-manager').TxReceipt>>}\n\t\t\t */\n\t\t\tconst newReceipts = new Map()\n\n\t\t\tclient.logger.debug({ blockCount }, 'processing txs')\n\t\t\tconst pool = await client.getTxPool()\n\t\t\tconst originalVm = await client.getVm()\n\n\t\t\tconst vm = await originalVm.deepCopy()\n\t\t\tconst receiptsManager = await client.getReceiptsManager()\n\n\t\t\tfor (let count = 0; count < blockCount; count++) {\n\t\t\t\tconst parentBlock = await vm.blockchain.getCanonicalHeadBlock()\n\n\t\t\t\tlet timestamp = Math.max(Math.floor(Date.now() / 1000), Number(parentBlock.header.timestamp))\n\t\t\t\ttimestamp = count === 0 ? timestamp : timestamp + interval\n\n\t\t\t\tconst blockBuilder = await vm.buildBlock({\n\t\t\t\t\tparentBlock,\n\t\t\t\t\theaderData: {\n\t\t\t\t\t\ttimestamp,\n\t\t\t\t\t\tnumber: parentBlock.header.number + 1n,\n\t\t\t\t\t\t// The following 2 are currently not supported\n\t\t\t\t\t\t// difficulty: undefined,\n\t\t\t\t\t\t// coinbase,\n\t\t\t\t\t\tgasLimit: parentBlock.header.gasLimit,\n\t\t\t\t\t\tbaseFeePerGas: parentBlock.header.calcNextBaseFee(),\n\t\t\t\t\t},\n\t\t\t\t\tblockOpts: {\n\t\t\t\t\t\t// Proof of authority not currently supported\n\t\t\t\t\t\t// cliqueSigner,\n\t\t\t\t\t\t// proof of work not currently supported\n\t\t\t\t\t\t//calcDifficultyFromHeader,\n\t\t\t\t\t\t//ck\n\t\t\t\t\t\tfreeze: false,\n\t\t\t\t\t\tsetHardfork: false,\n\t\t\t\t\t\tputBlockIntoBlockchain: false,\n\t\t\t\t\t\tcommon: vm.common,\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\t// TODO create a Log manager\n\t\t\t\tconst orderedTx =\n\t\t\t\t\ttx !== undefined\n\t\t\t\t\t\t? [\n\t\t\t\t\t\t\t\t(() => {\n\t\t\t\t\t\t\t\t\tconst mempoolTx = pool.getByHash(tx)\n\t\t\t\t\t\t\t\t\tpool.removeByHash(tx)\n\t\t\t\t\t\t\t\t\treturn mempoolTx\n\t\t\t\t\t\t\t\t})(),\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t: await pool.txsByPriceAndNonce({\n\t\t\t\t\t\t\t\tbaseFee: parentBlock.header.calcNextBaseFee(),\n\t\t\t\t\t\t\t})\n\n\t\t\t\tlet index = 0\n\t\t\t\t// TODO we need to actually handle this\n\t\t\t\tconst blockFull = false\n\t\t\t\t/**\n\t\t\t\t * @type {Array<import('@tevm/receipt-manager').TxReceipt>}\n\t\t\t\t */\n\t\t\t\tconst receipts = []\n\t\t\t\twhile (index < orderedTx.length && !blockFull) {\n\t\t\t\t\tconst nextTx = /** @type {import('@tevm/tx').TypedTransaction}*/ (orderedTx[index])\n\t\t\t\t\tclient.logger.debug({ hash: bytesToHex(nextTx.hash()) }, 'new tx added')\n\t\t\t\t\tconst txResult = await blockBuilder.addTransaction(nextTx, {\n\t\t\t\t\t\tskipBalance: true,\n\t\t\t\t\t\tskipNonce: true,\n\t\t\t\t\t\tskipHardForkValidation: true,\n\t\t\t\t\t})\n\t\t\t\t\treceipts.push(txResult.receipt)\n\t\t\t\t\tindex++\n\t\t\t\t}\n\t\t\t\tawait vm.stateManager.checkpoint()\n\t\t\t\tconst createNewStateRoot = true\n\t\t\t\tawait vm.stateManager.commit(createNewStateRoot)\n\t\t\t\tconst block = await blockBuilder.build()\n\t\t\t\tawait Promise.all([receiptsManager.saveReceipts(block, receipts), vm.blockchain.putBlock(block)])\n\t\t\t\tpool.removeNewBlockTxs([block])\n\n\t\t\t\tnewBlocks.push(block)\n\t\t\t\tnewReceipts.set(bytesToHex(block.hash()), receipts)\n\n\t\t\t\tconst value = vm.stateManager._baseState.stateRoots.get(bytesToHex(block.header.stateRoot))\n\n\t\t\t\tif (!value) {\n\t\t\t\t\treturn maybeThrowOnFail(throwOnFail, {\n\t\t\t\t\t\terrors: [\n\t\t\t\t\t\t\tnew InternalError(\n\t\t\t\t\t\t\t\t'InternalError: State root not found in mineHandler. This indicates a potential inconsistency in state management.',\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t],\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\toriginalVm.stateManager.saveStateRoot(block.header.stateRoot, value)\n\t\t\t}\n\t\t\toriginalVm.blockchain = vm.blockchain\n\t\t\toriginalVm.evm.blockchain = vm.evm.blockchain\n\t\t\t// @ts-expect-error\n\t\t\treceiptsManager.chain = vm.evm.blockchain\n\t\t\tawait originalVm.stateManager.setStateRoot(hexToBytes(vm.stateManager._baseState.getCurrentStateRoot()))\n\n\t\t\tawait emitEvents(client, newBlocks, newReceipts, params)\n\n\t\t\treturn { blockHashes: newBlocks.map((b) => bytesToHex(b.hash())) }\n\t\t} catch (e) {\n\t\t\treturn maybeThrowOnFail(throwOnFail, {\n\t\t\t\terrors: [new InternalError(/** @type {Error} */ (e).message, { cause: e })],\n\t\t\t})\n\t\t} finally {\n\t\t\tclient.status = 'READY'\n\t\t}\n\t}\n","import { mineHandler } from '../Mine/mineHandler.js'\n\n/**\n * @param {import(\"@tevm/node\").TevmNode} client\n * @returns {Promise<{pendingClient: import(\"@tevm/node\").TevmNode, blockHashes: Array<import('../common/Hex.js').Hex>, errors?: never} | {errors: Array<import('../Mine/TevmMineError.js').TevmMineError>}>}\n */\nexport const getPendingClient = async (client) => {\n\t// TODO we can do this using fork way more efficiently\n\tconst pendingClient = await client.deepCopy()\n\tconst txPool = await pendingClient.getTxPool()\n\t/**\n\t * @type {Array<import('../common/Hex.js').Hex>}\n\t */\n\tconst blockHashes = []\n\twhile (txPool.txsInPool > 0) {\n\t\tconst { errors, blockHashes: newBlockHashes } = await mineHandler(pendingClient)({ throwOnFail: false })\n\t\tif (errors !== undefined) {\n\t\t\treturn { errors }\n\t\t}\n\t\tblockHashes.push(...newBlockHashes)\n\t}\n\treturn { pendingClient, blockHashes }\n}\n","// import { Address } from 'abitype/zod'\nimport { z } from 'zod'\n\n// TODO: Somehow the type for Address here is broken, but we'll remove zod entirely\n/**\n * Zod validator for a valid ethereum address\n */\nexport const zAddress = z\n\t.string()\n\t.transform((val, ctx) => {\n\t\tconst regex = /^0x[a-fA-F0-9]{40}$/\n\n\t\tif (!regex.test(val)) {\n\t\t\tctx.addIssue({\n\t\t\t\tcode: 'custom',\n\t\t\t\tmessage: `Invalid Address ${val}`,\n\t\t\t})\n\t\t}\n\n\t\treturn val\n\t})\n\t.describe('A valid ethereum address')\n","import { z } from 'zod'\n\nexport const hexRegex = /^0x[0-9a-fA-F]*$/\n\n/**\n * Zod validator for a valid hex string\n */\nexport const zHex = z\n\t.string()\n\t.transform((value, ctx) => {\n\t\tif (!hexRegex.test(value)) {\n\t\t\tctx.addIssue({\n\t\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\t\tmessage: 'value must be a hex string',\n\t\t\t})\n\t\t}\n\t\treturn /** @type {import('@tevm/utils').Hex}*/ (value)\n\t})\n\t.describe('A hex string')\n","import { z } from 'zod'\nimport { zHex } from './zHex.js'\n\nexport const zBlockParam = z.union([\n\tz.literal('latest'),\n\tz.literal('earliest'),\n\tz.literal('pending'),\n\tz.literal('safe'),\n\tz.literal('finalized'),\n\tz.bigint(),\n\tz\n\t\t.number()\n\t\t.transform((n) => BigInt(n)), // Add number support with transformation\n\tzHex,\n])\n","import { z } from 'zod'\nimport { zBaseParams } from '../BaseCall/zBaseParams.js'\nimport { zAddress } from '../internal/zod/zAddress.js'\nimport { zBlockParam } from '../internal/zod/zBlockParam.js'\n\n/**\n * Zod validator for a valid getAccount action\n */\nexport const zGetAccountParams = zBaseParams\n\t.extend({\n\t\taddress: zAddress,\n\t\tblockTag: zBlockParam.optional().describe('Block tag to execute call on. defaults to \"latest\"'),\n\t\treturnStorage: z\n\t\t\t.boolean()\n\t\t\t.optional()\n\t\t\t.describe('If true will return storage. Defaults to false. This can be expensive'),\n\t})\n\t.describe('Params to create an account or contract')\n","import { InvalidAddressError, InvalidRequestError } from '@tevm/errors'\nimport { zGetAccountParams } from './zGetAccountParams.js'\n\n/**\n * @typedef {InvalidRequestError} ValidateGetAccountParamsError\n */\n\n/**\n * @param {import('./GetAccountParams.js').GetAccountParams} action\n * @returns {Array<ValidateGetAccountParamsError>}\n */\nexport const validateGetAccountParams = (action) => {\n\t/**\n\t * @type {Array<ValidateGetAccountParamsError>}\n\t */\n\tconst errors = []\n\n\tconst parsedParams = zGetAccountParams.safeParse(action)\n\n\tif (parsedParams.success === false) {\n\t\tconst formattedErrors = parsedParams.error.format()\n\t\tif (formattedErrors.throwOnFail) {\n\t\t\tfor (const err of formattedErrors.throwOnFail._errors) {\n\t\t\t\terrors.push(\n\t\t\t\t\tnew InvalidRequestError(`Invalid throwOnFail param. throwOnFail must be a boolean or not provided. ${err}`),\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\tif (formattedErrors.returnStorage) {\n\t\t\tfor (const err of formattedErrors.returnStorage._errors) {\n\t\t\t\terrors.push(\n\t\t\t\t\tnew InvalidRequestError(\n\t\t\t\t\t\t`Invalid returnStorage param. returnStorage must be a boolean or not provided. ${err}`,\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\tif (formattedErrors.address) {\n\t\t\tfor (const err of formattedErrors.address._errors) {\n\t\t\t\terrors.push(new InvalidAddressError(`Invalid address param. ${err}`))\n\t\t\t}\n\t\t}\n\t\tif (formattedErrors.blockTag) {\n\t\t\tfor (const err of formattedErrors.blockTag._errors) {\n\t\t\t\terrors.push(new InvalidRequestError(`Invalid blockTag param. ${err}`))\n\t\t\t}\n\t\t}\n\t\tformattedErrors._errors.forEach((error) => {\n\t\t\terrors.push(new InvalidRequestError(error))\n\t\t})\n\t}\n\n\treturn errors\n}\n","import { createAddress } from '@tevm/address'\nimport { AccountNotFoundError, ForkError, InternalError } from '@tevm/errors'\nimport { bytesToHex } from '@tevm/utils'\nimport { cloneVmWithBlockTag } from '../Call/cloneVmWithBlock.js'\nimport { getPendingClient } from '../internal/getPendingClient.js'\nimport { maybeThrowOnFail } from '../internal/maybeThrowOnFail.js'\nimport { validateGetAccountParams } from './validateGetAccountParams.js'\n\n/**\n * Creates an GetAccountHandler for handling account params with Ethereumjs VM\n * @param {import(\"@tevm/node\").TevmNode} client\n * @param {object} [options]\n * @param {boolean} [options.throwOnFail] whether to default to throwing or not when errors occur\n * @returns {import('../GetAccount/GetAccountHandlerType.js').GetAccountHandler}\n */\nexport const getAccountHandler =\n\t(client, options = {}) =>\n\tasync ({ throwOnFail = options.throwOnFail ?? true, ...params }) => {\n\t\tconst vm = await client.getVm()\n\t\t/**\n\t\t * @type {Array<import('../GetAccount/TevmGetAccountError.js').TevmGetAccountError>}\n\t\t */\n\t\tconst errors = validateGetAccountParams(params)\n\t\tif (errors.length > 0) {\n\t\t\treturn maybeThrowOnFail(throwOnFail, {\n\t\t\t\terrors,\n\t\t\t\taddress: params.address,\n\t\t\t\tbalance: 0n,\n\t\t\t\t/**\n\t\t\t\t * @type {`0x${string}`}\n\t\t\t\t */\n\t\t\t\tstorageRoot: '0x',\n\t\t\t\tnonce: 0n,\n\t\t\t\t/**\n\t\t\t\t * @type {`0x${string}`}\n\t\t\t\t */\n\t\t\t\tdeployedBytecode: '0x',\n\t\t\t\t/**\n\t\t\t\t * @type {`0x${string}`}\n\t\t\t\t */\n\t\t\t\tcodeHash: '0x',\n\t\t\t\tisContract: false,\n\t\t\t\tisEmpty: true,\n\t\t\t})\n\t\t}\n\n\t\tconst address = createAddress(params.address)\n\t\ttry {\n\t\t\tif (params.blockTag === 'pending') {\n\t\t\t\tconst mineResult = await getPendingClient(client)\n\t\t\t\tif (mineResult.errors) {\n\t\t\t\t\treturn maybeThrowOnFail(throwOnFail, {\n\t\t\t\t\t\terrors: mineResult.errors,\n\t\t\t\t\t\taddress: params.address,\n\t\t\t\t\t\tbalance: 0n,\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * @type {`0x${string}`}\n\t\t\t\t\t\t */\n\t\t\t\t\t\tstorageRoot: '0x',\n\t\t\t\t\t\tnonce: 0n,\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * @type {`0x${string}`}\n\t\t\t\t\t\t */\n\t\t\t\t\t\tdeployedBytecode: '0x',\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * @type {`0x${string}`}\n\t\t\t\t\t\t */\n\t\t\t\t\t\tcodeHash: '0x',\n\t\t\t\t\t\tisContract: false,\n\t\t\t\t\t\tisEmpty: true,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\treturn getAccountHandler(mineResult.pendingClient, options)({ throwOnFail, ...params, blockTag: 'latest' })\n\t\t\t}\n\t\t\tif (params.blockTag !== 'latest' && params.blockTag !== undefined) {\n\t\t\t\tconst block = await vm.blockchain.getBlockByTag(params.blockTag)\n\t\t\t\tconst clonedVm = await cloneVmWithBlockTag(client, block)\n\t\t\t\tif (clonedVm instanceof ForkError || clonedVm instanceof InternalError) {\n\t\t\t\t\treturn maybeThrowOnFail(throwOnFail, {\n\t\t\t\t\t\terrors: [clonedVm],\n\t\t\t\t\t\taddress: params.address,\n\t\t\t\t\t\tbalance: 0n,\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * @type {`0x${string}`}\n\t\t\t\t\t\t */\n\t\t\t\t\t\tstorageRoot: '0x',\n\t\t\t\t\t\tnonce: 0n,\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * @type {`0x${string}`}\n\t\t\t\t\t\t */\n\t\t\t\t\t\tdeployedBytecode: '0x',\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * @type {`0x${string}`}\n\t\t\t\t\t\t */\n\t\t\t\t\t\tcodeHash: '0x',\n\t\t\t\t\t\tisContract: false,\n\t\t\t\t\t\tisEmpty: true,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\treturn getAccountHandler(\n\t\t\t\t\t{ ...client, getVm: () => Promise.resolve(clonedVm) },\n\t\t\t\t\toptions,\n\t\t\t\t)({ throwOnFail, ...params, blockTag: 'latest' })\n\t\t\t}\n\t\t\tconst res = await vm.stateManager.getAccount(address)\n\t\t\tif (!res) {\n\t\t\t\treturn maybeThrowOnFail(throwOnFail, {\n\t\t\t\t\taddress: params.address,\n\t\t\t\t\tbalance: 0n,\n\t\t\t\t\t/**\n\t\t\t\t\t * @type {`0x${string}`}\n\t\t\t\t\t */\n\t\t\t\t\tstorageRoot: '0x',\n\t\t\t\t\tnonce: 0n,\n\t\t\t\t\t/**\n\t\t\t\t\t * @type {`0x${string}`}\n\t\t\t\t\t */\n\t\t\t\t\tdeployedBytecode: '0x',\n\t\t\t\t\terrors: [new AccountNotFoundError(`account ${params.address} not found`)],\n\t\t\t\t\t/**\n\t\t\t\t\t * @type {`0x${string}`}\n\t\t\t\t\t */\n\t\t\t\t\tcodeHash: '0x',\n\t\t\t\t\tisContract: false,\n\t\t\t\t\tisEmpty: true,\n\t\t\t\t})\n\t\t\t}\n\t\t\tconst code = res?.codeHash !== undefined ? bytesToHex(await vm.stateManager.getCode(address)) : '0x'\n\n\t\t\treturn {\n\t\t\t\t// TODO some of these fields are not in the api and should be added to @tevm/actions\n\t\t\t\taddress: params.address,\n\t\t\t\tbalance: res.balance,\n\t\t\t\tcodeHash: bytesToHex(res.codeHash),\n\t\t\t\tisContract: res.isContract(),\n\t\t\t\tisEmpty: res.isEmpty(),\n\t\t\t\tdeployedBytecode: code,\n\t\t\t\tnonce: res.nonce,\n\t\t\t\tstorageRoot: bytesToHex(res.storageRoot),\n\t\t\t\t...(params.returnStorage\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tstorage: Object.fromEntries(\n\t\t\t\t\t\t\t\tObject.entries(await vm.stateManager.dumpStorage(address)).map(([key, value]) => [\n\t\t\t\t\t\t\t\t\t`0x${key}`,\n\t\t\t\t\t\t\t\t\t/** @type {import('../common/Hex.js').Hex}*/ (value),\n\t\t\t\t\t\t\t\t]),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t}\n\t\t\t\t\t: {}),\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tlet err = e\n\t\t\t// TODO this isn't clean\n\t\t\t// What we are doing here is checking if we threw a known error or not\n\t\t\tif (typeof e !== 'object' || e === null || !('_tag' in e)) {\n\t\t\t\terr = new InternalError('UnexpectedError in getAccountHandler', { cause: /** @type {any}*/ (e) })\n\t\t\t}\n\t\t\terrors.push(/** @type any*/ (err))\n\t\t\treturn maybeThrowOnFail(throwOnFail, {\n\t\t\t\terrors,\n\t\t\t\taddress: params.address,\n\t\t\t\tbalance: 0n,\n\t\t\t\t/**\n\t\t\t\t * @type {`0x${string}`}\n\t\t\t\t */\n\t\t\t\tstorageRoot: '0x',\n\t\t\t\t/**\n\t\t\t\t * @type {`0x${string}`}\n\t\t\t\t */\n\t\t\t\tcodeHash: '0x',\n\t\t\t\tnonce: 0n,\n\t\t\t\t/**\n\t\t\t\t * @type {`0x${string}`}\n\t\t\t\t */\n\t\t\t\tdeployedBytecode: '0x',\n\t\t\t\tisContract: false,\n\t\t\t\tisEmpty: true,\n\t\t\t})\n\t\t}\n\t}\n","import { zHex } from './zHex.js'\n\n/**\n * @param {import('@tevm/utils').Hex} bytecode\n * @returns {boolean}\n */\nconst isValidEthereumBytecode = (bytecode) => {\n\tconst rawBytecode = bytecode.slice(2)\n\tif (rawBytecode.length === 0 || rawBytecode.length % 2 !== 0) {\n\t\treturn false\n\t}\n\treturn true\n}\n\n/**\n * Zod validator for valid Ethereum bytecode\n */\nexport const zBytecode = zHex.refine(isValidEthereumBytecode, { message: 'InvalidLength' }).describe('Valid bytecode')\n","import { z } from 'zod'\n\nconst storageRootRegex = /^0x[0-9a-fA-F]{64}$/\n\n/**\n * Zod validator for valid ethereum storage root\n */\nexport const zStorageRoot = z\n\t.string()\n\t.transform((value, ctx) => {\n\t\tif (!storageRootRegex.test(value)) {\n\t\t\tctx.addIssue({\n\t\t\t\tcode: z.ZodIssueCode.custom,\n\t\t\t\tmessage: 'Value must be a 32-byte hex string (64 hex characters with a 0x prefix)',\n\t\t\t})\n\t\t}\n\t\treturn value\n\t})\n\t.describe('Valid ethereum storage root')\n","import { z } from 'zod'\nimport { zBaseParams } from '../BaseCall/zBaseParams.js'\nimport { zAddress } from '../internal/zod/zAddress.js'\nimport { zBytecode } from '../internal/zod/zBytecode.js'\nimport { zHex } from '../internal/zod/zHex.js'\nimport { zStorageRoot } from '../internal/zod/zStorageRoot.js'\n\n/**\n * Zod validator for a valid setAccount action\n */\nexport const zSetAccountParams = zBaseParams\n\t.extend({\n\t\taddress: zAddress.describe('The ethereum address of the account'),\n\t\tbalance: z.bigint().nonnegative().optional().describe('The balance to give the account'),\n\t\tnonce: z.bigint().nonnegative().optional().describe('The nonce to give the account'),\n\t\tdeployedBytecode: zBytecode\n\t\t\t.optional()\n\t\t\t.describe('The contract bytecode to set at the account address as a >0 byte hex string'),\n\t\tstorageRoot: zStorageRoot\n\t\t\t.optional()\n\t\t\t.describe('The storage root to set at the account address as a 32 byte hex strign'),\n\t\tstate: z.record(zHex, zHex).optional().describe('Overrides entire state with provided state'),\n\t\tstateDiff: z.record(zHex, zHex).optional().describe('Patches the state with the provided state'),\n\t})\n\t.refine(\n\t\t(data) => {\n\t\t\tif (data.state && data.stateDiff) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t},\n\t\t{ message: 'Cannot have both state and stateDiff' },\n\t)\n\t.describe('Params to create an account or contract')\n","import {\n\tInvalidAddressError,\n\tInvalidBalanceError,\n\tInvalidDeployedBytecodeError,\n\tInvalidNonceError,\n\tInvalidRequestError,\n\tInvalidStorageRootError,\n} from '@tevm/errors'\nimport { zSetAccountParams } from './zSetAccountParams.js'\n\n/**\n * @typedef {InvalidAddressError| InvalidBalanceError| InvalidDeployedBytecodeError| InvalidNonceError| InvalidRequestError| InvalidStorageRootError} ValidateSetAccountParamsError\n */\n\n/**\n * @param {import('./SetAccountParams.js').SetAccountParams} action\n * @returns {Array<ValidateSetAccountParamsError>}\n */\nexport const validateSetAccountParams = (action) => {\n\t/**\n\t * @type {Array<ValidateSetAccountParamsError>}\n\t */\n\tconst errors = []\n\n\tconst parsedParams = zSetAccountParams.safeParse(action)\n\n\tif (parsedParams.success === false) {\n\t\tconst formattedErrors = parsedParams.error.format()\n\t\tformattedErrors._errors.forEach((error) => {\n\t\t\terrors.push(new InvalidRequestError(error))\n\t\t})\n\t\tif (formattedErrors.address) {\n\t\t\tformattedErrors.address._errors.forEach((error) => {\n\t\t\t\terrors.push(new InvalidAddressError(error))\n\t\t\t})\n\t\t}\n\t\tif (formattedErrors.nonce) {\n\t\t\tformattedErrors.nonce._errors.forEach((error) => {\n\t\t\t\terrors.push(new InvalidNonceError(error))\n\t\t\t})\n\t\t}\n\t\tif (formattedErrors.balance) {\n\t\t\tformattedErrors.balance._errors.forEach((error) => {\n\t\t\t\terrors.push(new InvalidBalanceError(error))\n\t\t\t})\n\t\t}\n\t\tif (formattedErrors.deployedBytecode) {\n\t\t\tformattedErrors.deployedBytecode._errors.forEach((error) => {\n\t\t\t\terrors.push(new InvalidDeployedBytecodeError(error))\n\t\t\t})\n\t\t}\n\t\tif (formattedErrors.storageRoot) {\n\t\t\tformattedErrors.storageRoot._errors.forEach((error) => {\n\t\t\t\terrors.push(new InvalidStorageRootError(error))\n\t\t\t})\n\t\t}\n\t\tif (formattedErrors.state) {\n\t\t\tformattedErrors.state._errors.forEach((error) => {\n\t\t\t\terrors.push(new InvalidRequestError(error))\n\t\t\t})\n\t\t}\n\t\tif (formattedErrors.stateDiff) {\n\t\t\tformattedErrors.stateDiff._errors.forEach((error) => {\n\t\t\t\terrors.push(new InvalidRequestError(error))\n\t\t\t})\n\t\t}\n\t\tif (formattedErrors.throwOnFail) {\n\t\t\tformattedErrors.throwOnFail._errors.forEach((error) => {\n\t\t\t\terrors.push(new InvalidRequestError(error))\n\t\t\t})\n\t\t}\n\t}\n\n\treturn errors\n}\n","import { createAddress } from '@tevm/address'\nimport { AccountNotFoundError, InternalError } from '@tevm/errors'\nimport { createAccount, hexToBytes, keccak256 } from '@tevm/utils'\nimport { getAccountHandler } from '../GetAccount/getAccountHandler.js'\nimport { maybeThrowOnFail } from '../internal/maybeThrowOnFail.js'\nimport { validateSetAccountParams } from './validateSetAccountParams.js'\n\n/**\n * Creates a handler for setting account state in the Ethereum Virtual Machine\n *\n * This handler allows you to completely modify an account's state, including:\n * - Setting account balance and nonce\n * - Deploying contract bytecode\n * - Modifying contract storage\n * - Setting storage roots directly\n *\n * It's particularly useful for test environments where you need to set up\n * specific contract states or account balances before running tests.\n *\n * @param {import(\"@tevm/node\").TevmNode} client - The TEVM node instance\n * @param {object} [options] - Handler configuration options\n * @param {boolean} [options.throwOnFail] - Whether to throw errors or return them in the result object\n * @returns {import('./SetAccountHandlerType.js').SetAccountHandler} A handler function for setting account state\n * @throws {import('../SetAccount/TevmSetAccountError.js').TevmSetAccountError} When validation fails and throwOnFail is true\n * @throws {InternalError} When there's an error putting the account state and throwOnFail is true\n *\n * @example\n * ```javascript\n * import { createTevmNode } from '@tevm/node'\n * import { setAccountHandler } from '@tevm/actions'\n * import { parseEther } from 'viem'\n *\n * const node = createTevmNode()\n * const handler = setAccountHandler(node)\n *\n * // Set an account with balance and nonce\n * await handler({\n *   address: '0x1234567890123456789012345678901234567890',\n *   balance: parseEther('1000'), // 1000 ETH\n *   nonce: 5n\n * })\n *\n * // Deploy contract bytecode\n * await handler({\n *   address: '0xabcdef1234567890abcdef1234567890abcdef12',\n *   deployedBytecode: '0x608060405234801561001057600080fd5b50600436106100365760003560e01c8063...',\n *   balance: parseEther('10')\n * })\n *\n * // Set specific storage values\n * await handler({\n *   address: '0xabcdef1234567890abcdef1234567890abcdef12',\n *   state: {\n *     // storage slot => value\n *     '0x0000000000000000000000000000000000000000000000000000000000000000': '0x0000000000000000000000000000000000000000000000000000000000000001',\n *     '0x0000000000000000000000000000000000000000000000000000000000000001': '0x0000000000000000000000000000000000000000000000000000000000000002'\n *   }\n * })\n *\n * // Update individual storage slots without clearing others\n * await handler({\n *   address: '0xabcdef1234567890abcdef1234567890abcdef12',\n *   stateDiff: {\n *     '0x0000000000000000000000000000000000000000000000000000000000000000': '0x0000000000000000000000000000000000000000000000000000000000000005'\n *   }\n * })\n * ```\n */\nexport const setAccountHandler =\n\t(client, options = {}) =>\n\tasync (params) => {\n\t\tconst { throwOnFail = options.throwOnFail ?? true } = params\n\t\t/**\n\t\t * @type {Array<import('../SetAccount/TevmSetAccountError.js').TevmSetAccountError>}\n\t\t */\n\t\tconst errors = validateSetAccountParams(params)\n\t\tif (errors.length > 0) {\n\t\t\treturn maybeThrowOnFail(throwOnFail, { errors })\n\t\t}\n\n\t\tconst address = createAddress(params.address)\n\n\t\t/**\n\t\t * @type {Array<Promise<any>>}\n\t\t */\n\t\tconst promises = []\n\t\ttry {\n\t\t\tconst vm = await client.getVm()\n\n\t\t\t// check if account exists\n\t\t\tconst account = await getAccountHandler(client)({ ...params, throwOnFail: false })\n\t\t\tif (account.errors?.length && !(account.errors[0] instanceof AccountNotFoundError)) {\n\t\t\t\tclient.logger.error({ errors: account.errors }, 'there was an unexpected error getting account')\n\t\t\t\tthrow account.errors.length > 1 ? new AggregateError(account.errors) : account.errors[0]\n\t\t\t}\n\n\t\t\t// Build account data object with proper handling of optional properties\n\t\t\t/** @type {Parameters<typeof createAccount>[0]} */\n\t\t\tconst accountData = {\n\t\t\t\tnonce: params.nonce ?? account?.nonce,\n\t\t\t\tbalance: params.balance ?? account?.balance,\n\t\t\t}\n\n\t\t\tconst storageRoot =\n\t\t\t\t(params.storageRoot && hexToBytes(params.storageRoot)) ??\n\t\t\t\t(account?.storageRoot !== undefined && account?.storageRoot !== '0x'\n\t\t\t\t\t? hexToBytes(account.storageRoot)\n\t\t\t\t\t: undefined)\n\n\t\t\tconst codeHash =\n\t\t\t\t(params.deployedBytecode && hexToBytes(keccak256(params.deployedBytecode))) ??\n\t\t\t\t(account?.deployedBytecode !== undefined ? hexToBytes(keccak256(account.deployedBytecode)) : undefined)\n\n\t\t\t// Only add optional properties if they are not undefined\n\t\t\tif (storageRoot !== undefined) {\n\t\t\t\taccountData.storageRoot = storageRoot\n\t\t\t}\n\t\t\tif (codeHash !== undefined) {\n\t\t\t\taccountData.codeHash = codeHash\n\t\t\t}\n\n\t\t\tpromises.push(vm.stateManager.putAccount(address, createAccount(accountData)))\n\t\t\tif (params.deployedBytecode) {\n\t\t\t\tpromises.push(vm.stateManager.putCode(address, hexToBytes(params.deployedBytecode)))\n\t\t\t}\n\t\t\t// state clears state first stateDiff does not\n\t\t\tif (params.state) {\n\t\t\t\tawait vm.stateManager.clearStorage(address)\n\t\t\t}\n\t\t\tconst state = params.state ?? params.stateDiff\n\t\t\tif (state) {\n\t\t\t\tfor (const [key, value] of Object.entries(state)) {\n\t\t\t\t\tpromises.push(\n\t\t\t\t\t\tvm.stateManager.putStorage(\n\t\t\t\t\t\t\taddress,\n\t\t\t\t\t\t\thexToBytes(/** @type {import('@tevm/utils').Hex}*/ (key), { size: 32 }),\n\t\t\t\t\t\t\thexToBytes(value),\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 results = await Promise.allSettled(promises)\n\t\t\tfor (const result of results) {\n\t\t\t\tif (result.status === 'rejected') {\n\t\t\t\t\terrors.push(new InternalError('Unable to put storage', { cause: result.reason }))\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (errors.length > 0) {\n\t\t\t\treturn maybeThrowOnFail(throwOnFail, { errors })\n\t\t\t}\n\t\t\tawait vm.stateManager.checkpoint()\n\t\t\tawait vm.stateManager.commit(false)\n\n\t\t\treturn {}\n\t\t} catch (e) {\n\t\t\terrors.push(new InternalError('Unexpected error setting account', { cause: e }))\n\t\t\treturn maybeThrowOnFail(throwOnFail, { errors })\n\t\t}\n\t}\n","import { createAddress, createContractAddress } from '@tevm/address'\nimport { InternalError, InternalEvmError, InvalidBytecodeError } from '@tevm/errors'\nimport { prefundedAccounts } from '@tevm/node'\nimport { createImpersonatedTx } from '@tevm/tx'\nimport { getAddress, hexToBytes } from '@tevm/utils'\nimport { runTx } from '@tevm/vm'\nimport { getAccountHandler } from '../GetAccount/getAccountHandler.js'\nimport { setAccountHandler } from '../SetAccount/setAccountHandler.js'\n\n/**\n * @internal\n * Creates a script with a randomly generated address\n * @param {import('@tevm/node').TevmNode} client\n * @param {import('@tevm/utils').Hex} [code]\n * @param {import('@tevm/utils').Hex} [deployedBytecode]\n * @param {import('@tevm/utils').Address} [to]\n * @returns {Promise<{errors?: never, address: import('@tevm/utils').Address} | {address?: never, errors: Array<Error>}>}\n */\nexport const createScript = async (client, code, deployedBytecode, to) => {\n\tconst scriptAddress =\n\t\tto ??\n\t\t(() => {\n\t\t\tconst randomBigInt = BigInt(Math.floor(Math.random() * 1_000_000_000_000_000))\n\t\t\treturn getAddress(createContractAddress(createAddress(`0x${'6969'.repeat(10)}`), randomBigInt).toString())\n\t\t})()\n\tconst vm = await client.getVm()\n\n\tif (deployedBytecode) {\n\t\tconst setAccountRes = await setAccountHandler(client)({\n\t\t\taddress: scriptAddress,\n\t\t\tdeployedBytecode,\n\t\t\tthrowOnFail: false,\n\t\t})\n\t\tif (setAccountRes.errors) {\n\t\t\treturn {\n\t\t\t\terrors: setAccountRes.errors,\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\taddress: scriptAddress,\n\t\t}\n\t}\n\n\tif (!code) {\n\t\treturn {\n\t\t\terrors: [new InternalError('Cannot create script without code or deployedBytecode')],\n\t\t}\n\t}\n\n\tconst parentBlock = await vm.blockchain.getCanonicalHeadBlock()\n\tconst priorityFee = 0n\n\n\tconst sender = createAddress(/** @type {import('@tevm/utils').Address}*/ (prefundedAccounts[0]))\n\n\tlet _maxFeePerGas = parentBlock.header.calcNextBaseFee() + priorityFee\n\tconst baseFeePerGas = parentBlock.header.baseFeePerGas ?? 0n\n\tif (_maxFeePerGas < baseFeePerGas) {\n\t\t_maxFeePerGas = baseFeePerGas\n\t}\n\t// TODO tons of dupe\n\tconst dataFee = (() => {\n\t\tlet out = 0n\n\t\tfor (const entry of hexToBytes(code) ?? []) {\n\t\t\t// 4 gas for zero bytes, 16 gas for non-zero bytes (standard EIP-2028 costs)\n\t\t\tout += entry === 0 ? 4n : 16n\n\t\t}\n\t\treturn out\n\t})()\n\tconst baseFee = (() => {\n\t\tlet out = dataFee\n\t\t// Base transaction cost is 21000 gas\n\t\tconst txFee = 21000n\n\t\tout += txFee\n\t\tif (vm.common.ethjsCommon.gteHardfork('homestead')) {\n\t\t\t// Contract creation cost is 32000 gas\n\t\t\tconst txCreationFee = 32000n\n\t\t\tout += txCreationFee\n\t\t}\n\t\treturn out\n\t})()\n\tconst minimumGasLimit = baseFee + BigInt(0xffffffff)\n\tconst gasLimitWithExecutionBuffer = (minimumGasLimit * 11n) / 10n\n\ttry {\n\t\tconst res = await runTx(vm)({\n\t\t\tblock: parentBlock,\n\t\t\ttx: createImpersonatedTx({\n\t\t\t\tmaxFeePerGas: _maxFeePerGas,\n\t\t\t\tmaxPriorityFeePerGas: 0n,\n\t\t\t\tgasLimit: gasLimitWithExecutionBuffer,\n\t\t\t\tdata: code,\n\t\t\t\timpersonatedAddress: sender,\n\t\t\t}),\n\t\t\tskipNonce: true,\n\t\t\tskipBalance: true,\n\t\t\tskipBlockGasLimitValidation: true,\n\t\t\tskipHardForkValidation: true,\n\t\t})\n\t\tif (res.execResult.exceptionError?.error) {\n\t\t\tclient.logger.error('Failed to create script because deployment of script bytecode failed')\n\t\t\tthrow new InvalidBytecodeError(res.execResult.exceptionError.error, {\n\t\t\t\tcause: /** @type {any}*/ (res.execResult.exceptionError),\n\t\t\t})\n\t\t}\n\t\tconst deployedAddress = res.createdAddress\n\t\tif (!deployedAddress) {\n\t\t\treturn {\n\t\t\t\terrors: [new InternalEvmError('Failed to create script')],\n\t\t\t}\n\t\t}\n\t\tconst account = await getAccountHandler(client)({\n\t\t\tthrowOnFail: false,\n\t\t\taddress: /** @type {import('@tevm/utils').Address}*/ (deployedAddress.toString()),\n\t\t\treturnStorage: true,\n\t\t})\n\t\tif (account.errors) {\n\t\t\treturn {\n\t\t\t\terrors: account.errors,\n\t\t\t}\n\t\t}\n\t\tconst setAccountRes = await setAccountHandler(client)({\n\t\t\t...account,\n\t\t\taddress: scriptAddress,\n\t\t\tthrowOnFail: false,\n\t\t\tstateDiff: account.storage ?? {},\n\t\t\tdeployedBytecode: account.deployedBytecode,\n\t\t})\n\t\tif (setAccountRes.errors) {\n\t\t\treturn {\n\t\t\t\terrors: setAccountRes.errors,\n\t\t\t}\n\t\t}\n\t\tawait vm.stateManager.deleteAccount(deployedAddress)\n\t\treturn {\n\t\t\taddress: to ?? scriptAddress,\n\t\t}\n\t} catch (e) {\n\t\treturn {\n\t\t\terrors: [/** @type any*/ (e)],\n\t\t}\n\t}\n}\n","import { createAddress } from '@tevm/address'\nimport { bytesToHex, hexToBytes, parseAbi, serializeTransaction } from '@tevm/utils'\nimport { decodeFunctionResult, encodeFunctionData } from 'viem'\n\nconst abi = parseAbi([\n\t'function getL1GasUsed(bytes memory _data) public view returns (uint256)',\n\t'function getL1Fee(bytes memory _data) external view returns (uint256)',\n\t'function l1BaseFee() public view returns (uint256)',\n\t'function blobBaseFee() public view returns (uint256)',\n])\n/**\n * Gets the fee information for op stack chains for the l1 data fee\n * @param {Uint8Array} data\n * @param {import('@tevm/vm').Vm} vm\n * @returns {Promise<{l1BlobFee: bigint, l1GasUsed: bigint, l1Fee: bigint, l1BaseFee: bigint}>}\n */\nexport const getL1FeeInformationOpStack = async (data, vm) => {\n\t/**\n\t * @type {typeof import('viem/chains').optimism}\n\t */\n\tconst opstackChain = /** @type {any}*/ (vm.common)\n\tconst serializedTx = serializeTransaction({\n\t\tchainId: opstackChain.id,\n\t\tdata: bytesToHex(data ?? new Uint8Array()),\n\t\ttype: 'eip1559',\n\t})\n\tconst to = createAddress(opstackChain.contracts.gasPriceOracle.address)\n\tconst [l1GasUsed, l1Fee, l1BlobFee, l1BaseFee] = await Promise.all([\n\t\tvm.evm.runCall({\n\t\t\tto,\n\t\t\tdata: hexToBytes(\n\t\t\t\tencodeFunctionData({\n\t\t\t\t\tfunctionName: 'getL1GasUsed',\n\t\t\t\t\targs: [serializedTx],\n\t\t\t\t\tabi,\n\t\t\t\t}),\n\t\t\t),\n\t\t}),\n\t\tvm.evm.runCall({\n\t\t\tto,\n\t\t\tdata: hexToBytes(\n\t\t\t\tencodeFunctionData({\n\t\t\t\t\tfunctionName: 'getL1Fee',\n\t\t\t\t\targs: [serializedTx],\n\t\t\t\t\tabi,\n\t\t\t\t}),\n\t\t\t),\n\t\t}),\n\t\tvm.evm.runCall({\n\t\t\tto,\n\t\t\tdata: hexToBytes(\n\t\t\t\tencodeFunctionData({\n\t\t\t\t\tfunctionName: 'blobBaseFee',\n\t\t\t\t\targs: [],\n\t\t\t\t\tabi,\n\t\t\t\t}),\n\t\t\t),\n\t\t}),\n\t\tvm.evm.runCall({\n\t\t\tto,\n\t\t\tdata: hexToBytes(\n\t\t\t\tencodeFunctionData({\n\t\t\t\t\tfunctionName: 'l1BaseFee',\n\t\t\t\t\targs: [],\n\t\t\t\t\tabi,\n\t\t\t\t}),\n\t\t\t),\n\t\t}),\n\t])\n\treturn {\n\t\tl1GasUsed: decodeFunctionResult({\n\t\t\tabi,\n\t\t\tfunctionName: 'getL1GasUsed',\n\t\t\tdata: bytesToHex(l1GasUsed.execResult.returnValue),\n\t\t}),\n\t\tl1Fee: decodeFunctionResult({\n\t\t\tabi,\n\t\t\tfunctionName: 'getL1Fee',\n\t\t\tdata: bytesToHex(l1Fee.execResult.returnValue),\n\t\t}),\n\t\tl1BlobFee: decodeFunctionResult({\n\t\t\tabi,\n\t\t\tfunctionName: 'blobBaseFee',\n\t\t\tdata: bytesToHex(l1BlobFee.execResult.returnValue),\n\t\t}),\n\t\tl1BaseFee: decodeFunctionResult({\n\t\t\tabi,\n\t\t\tfunctionName: 'l1BaseFee',\n\t\t\tdata: bytesToHex(l1BaseFee.execResult.returnValue),\n\t\t}),\n\t}\n}\n","import { createAddress } from '@tevm/address'\nimport { InvalidBlockError, InvalidParamsError, UnknownBlockError } from '@tevm/errors'\nimport { hexToBytes } from '@tevm/utils'\n\n/**\n * @internal\n * @typedef {UnknownBlockError | UnknownBlockError | InvalidParamsError} CallHandlerOptsError\n */\n\n/**\n * @internal\n * Parses user provided params into ethereumjs options to pass into the EVM\n * @param {import('@tevm/node').TevmNode} client\n * @param {import('./CallParams.js').CallParams} params\n * @returns {Promise<{data: Parameters<import('@tevm/evm').Evm['runCall']>[0], errors?: never} | {data?: never, errors: Array<CallHandlerOptsError>}>}\n * @throws { never } Returns all errors as values\n */\nexport const callHandlerOpts = async (client, params) => {\n\t/**\n\t * @type {Parameters<import('@tevm/evm').Evm['runCall']>[0]}\n\t */\n\tconst opts = {}\n\tconst vm = await client.getVm()\n\n\t// TODO need better error handling here\n\tconst block = await (async () => {\n\t\ttry {\n\t\t\tif (params.blockTag === undefined) {\n\t\t\t\treturn vm.blockchain.blocksByTag.get('latest')\n\t\t\t}\n\t\t\tif (typeof params.blockTag === 'bigint') {\n\t\t\t\treturn await vm.blockchain.getBlock(params.blockTag)\n\t\t\t}\n\t\t\tif (typeof params.blockTag === 'string' && params.blockTag.startsWith('0x')) {\n\t\t\t\treturn await vm.blockchain.getBlock(hexToBytes(/** @type {import('@tevm/utils').Hex}*/ (params.blockTag)))\n\t\t\t}\n\t\t\t// TODO support all these and resolve all of them both vs fork and non fork\n\t\t\tif (\n\t\t\t\tparams.blockTag === 'latest' ||\n\t\t\t\tparams.blockTag === 'safe' ||\n\t\t\t\tparams.blockTag === 'pending' ||\n\t\t\t\tparams.blockTag === 'earliest' ||\n\t\t\t\tparams.blockTag === 'finalized'\n\t\t\t) {\n\t\t\t\treturn vm.blockchain.blocksByTag.get(/** */ params.blockTag)\n\t\t\t}\n\t\t\treturn new InvalidBlockError(`Unknown blocktag ${params.blockTag}`)\n\t\t} catch (e) {\n\t\t\treturn new UnknownBlockError(e instanceof Error ? e.message : `Unable to find block ${params.blockTag}`)\n\t\t}\n\t})()\n\tif (block instanceof UnknownBlockError || block instanceof InvalidBlockError || block === undefined) {\n\t\treturn { errors: [block ?? new UnknownBlockError(`Unable to find block ${params.blockTag}`)] }\n\t}\n\n\tclient.logger.debug({ block: block.header }, 'Using block')\n\n\topts.block = block\n\n\t// handle block overrides\n\tif (params.blockOverrideSet) {\n\t\tclient.logger.debug(params.blockOverrideSet, 'callHandlerOpts: Detected a block override set')\n\t\t// TODO this is a known bug we need to implement better support for block tags\n\t\t// We are purposefully ignoring this until the block creation is implemented\n\t\tconst { header } = await vm.blockchain.getCanonicalHeadBlock()\n\t\topts.block = {\n\t\t\t...opts.block,\n\t\t\theader: {\n\t\t\t\t// this isn't in the type but it needs to be here or else block overrides will fail\n\t\t\t\t...{ stateRoot: block.header.stateRoot },\n\t\t\t\tcoinbase:\n\t\t\t\t\tparams.blockOverrideSet.coinbase !== undefined\n\t\t\t\t\t\t? createAddress(params.blockOverrideSet.coinbase)\n\t\t\t\t\t\t: header.coinbase,\n\t\t\t\tnumber: params.blockOverrideSet.number !== undefined ? BigInt(params.blockOverrideSet.number) : header.number,\n\t\t\t\tdifficulty: header.difficulty,\n\t\t\t\tprevRandao: header.prevRandao,\n\t\t\t\tgasLimit:\n\t\t\t\t\tparams.blockOverrideSet.gasLimit !== undefined ? BigInt(params.blockOverrideSet.gasLimit) : header.gasLimit,\n\t\t\t\ttimestamp: params.blockOverrideSet.time !== undefined ? BigInt(params.blockOverrideSet.time) : header.timestamp,\n\t\t\t\tbaseFeePerGas:\n\t\t\t\t\tparams.blockOverrideSet.baseFee !== undefined\n\t\t\t\t\t\t? BigInt(params.blockOverrideSet.baseFee)\n\t\t\t\t\t\t: (header.baseFeePerGas ?? BigInt(0)),\n\t\t\t\tgetBlobGasPrice() {\n\t\t\t\t\tif (params.blockOverrideSet?.blobBaseFee !== undefined) {\n\t\t\t\t\t\treturn BigInt(params.blockOverrideSet.blobBaseFee)\n\t\t\t\t\t}\n\t\t\t\t\treturn header.getBlobGasPrice()\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t}\n\n\tif (params.to) {\n\t\topts.to = createAddress(params.to)\n\t}\n\tif (params.data) {\n\t\topts.data = hexToBytes(params.data)\n\t}\n\tif (params.salt) {\n\t\topts.salt = hexToBytes(params.salt)\n\t}\n\tif (params.depth) {\n\t\topts.depth = params.depth\n\t}\n\tif (params.blobVersionedHashes) {\n\t\topts.blobVersionedHashes = params.blobVersionedHashes\n\t}\n\tif (params.selfdestruct) {\n\t\topts.selfdestruct = params.selfdestruct\n\t}\n\tif (params.gasRefund) {\n\t\topts.gasRefund = BigInt(params.gasRefund)\n\t}\n\tif (params.gasPrice) {\n\t\topts.gasPrice = BigInt(params.gasPrice)\n\t}\n\tif (params.value) {\n\t\topts.value = BigInt(params.value)\n\t}\n\tconst caller =\n\t\tparams.caller ||\n\t\tparams.from ||\n\t\tparams.origin ||\n\t\t(params.createTransaction || params.addToMempool || params.addToBlockchain\n\t\t\t? '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266'\n\t\t\t: `0x${'00'.repeat(20)}`)\n\tif (caller) {\n\t\topts.caller = createAddress(caller)\n\t}\n\tconst origin =\n\t\tparams.origin ||\n\t\tparams.from ||\n\t\tparams.caller ||\n\t\t(params.createTransaction || params.addToMempool || params.addToBlockchain\n\t\t\t? '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266'\n\t\t\t: `0x${'00'.repeat(20)}`)\n\tif (origin) {\n\t\tif (params.skipBalance !== undefined) {\n\t\t\topts.skipBalance = Boolean(params.skipBalance)\n\t\t} else {\n\t\t\topts.skipBalance =\n\t\t\t\tcaller === `0x${'00'.repeat(20)}` &&\n\t\t\t\t(params.createTransaction ?? params.addToMempool ?? params.addToBlockchain ?? false) === false\n\t\t}\n\t\topts.origin = createAddress(origin)\n\t}\n\tif (params.gas) {\n\t\topts.gasLimit = BigInt(params.gas)\n\t}\n\n\tif (\n\t\t(params.createTransaction || params.addToMempool || params.addToBlockchain) &&\n\t\topts.block !== (await vm.blockchain.getCanonicalHeadBlock())\n\t) {\n\t\treturn { errors: [new InvalidParamsError('Creating transactions on past blocks is not currently supported')] }\n\t}\n\n\treturn { data: opts }\n}\n// 36,45-46,84,90\n","import {\n\tAuthCallUnsetError,\n\tBaseError,\n\tBLS12381FpNotInFieldError,\n\tBLS12381InputEmptyError,\n\tBLS12381PointNotOnCurveError,\n\tCodeSizeExceedsMaximumError,\n\tCodeStoreOutOfGasError,\n\tCreateCollisionError,\n\tInitcodeSizeViolationError,\n\tInsufficientBalanceError,\n\tInternalError,\n\tInvalidBeginSubError,\n\tInvalidBytecodeResultError,\n\tInvalidCommitmentError,\n\tInvalidEofFormatError,\n\tInvalidInputLengthError,\n\tInvalidJumpError,\n\tInvalidJumpSubError,\n\tInvalidKzgInputsError,\n\tInvalidOpcodeError,\n\tInvalidProofError,\n\tInvalidReturnSubError,\n\tOutOfGasError,\n\tOutOfRangeError,\n\tRefundExhaustedError,\n\tRevertError,\n\tStackOverflowError,\n\tStackUnderflowError,\n\tStaticStateChangeError,\n\tStopError,\n\tValueOverflowError,\n} from '@tevm/errors'\n\n/**\n * @type {ReturnType<typeof createEvmError>} EvmError\n */\n\n/**\n * @param {import('@tevm/evm').EvmError} error\n */\nexport const createEvmError = (error) => {\n\t// make it so we can always override it for now\n\tif (error instanceof BaseError) {\n\t\treturn /** @type {never}*/ (error)\n\t}\n\n\tconst errorMessage = error?.error\n\n\tswitch (errorMessage) {\n\t\tcase 'stop': {\n\t\t\treturn new StopError(errorMessage, { cause: error })\n\t\t}\n\t\tcase 'revert': {\n\t\t\treturn new RevertError(errorMessage, { cause: error })\n\t\t}\n\t\tcase 'out of gas': {\n\t\t\treturn new OutOfGasError(errorMessage, { cause: error })\n\t\t}\n\t\tcase 'invalid opcode': {\n\t\t\treturn new InvalidOpcodeError(errorMessage, { cause: error })\n\t\t}\n\t\tcase 'stack overflow': {\n\t\t\treturn new StackOverflowError(errorMessage, { cause: error })\n\t\t}\n\t\tcase 'stack underflow': {\n\t\t\treturn new StackUnderflowError(errorMessage, { cause: error })\n\t\t}\n\t\tcase 'invalid JUMP': {\n\t\t\treturn new InvalidJumpError(errorMessage, { cause: error })\n\t\t}\n\t\tcase 'value out of range': {\n\t\t\treturn new OutOfRangeError(errorMessage, { cause: error })\n\t\t}\n\t\tcase 'kzg proof invalid': {\n\t\t\treturn new InvalidProofError(errorMessage, { cause: error })\n\t\t}\n\t\t// @ts-expect-error - This error message is deprecated in ethereumjs v10\n\t\tcase 'attempting to AUTHCALL without AUTH set': {\n\t\t\treturn new AuthCallUnsetError(errorMessage, { cause: error })\n\t\t}\n\t\tcase 'internal error': {\n\t\t\treturn new InternalError(errorMessage, { cause: error })\n\t\t}\n\t\tcase 'kzg inputs invalid': {\n\t\t\treturn new InvalidKzgInputsError(errorMessage, { cause: error })\n\t\t}\n\t\tcase 'value overflow': {\n\t\t\treturn new ValueOverflowError(errorMessage, { cause: error })\n\t\t}\n\t\t// @ts-expect-error - This error message is deprecated in ethereumjs v10\n\t\tcase 'invalid JUMPSUB': {\n\t\t\treturn new InvalidJumpSubError(errorMessage, { cause: error })\n\t\t}\n\t\tcase 'create collision': {\n\t\t\treturn new CreateCollisionError(errorMessage, { cause: error })\n\t\t}\n\t\t// @ts-expect-error - This error message is deprecated in ethereumjs v10\n\t\tcase 'invalid BEGINSUB': {\n\t\t\treturn new InvalidBeginSubError(errorMessage, { cause: error })\n\t\t}\n\t\tcase 'refund exhausted': {\n\t\t\treturn new RefundExhaustedError(errorMessage, { cause: error })\n\t\t}\n\t\t// @ts-expect-error - This error message is deprecated in ethereumjs v10\n\t\tcase 'invalid RETURNSUB': {\n\t\t\treturn new InvalidReturnSubError(errorMessage, { cause: error })\n\t\t}\n\t\tcase 'kzg commitment does not match versioned hash': {\n\t\t\treturn new InvalidCommitmentError(errorMessage, { cause: error })\n\t\t}\n\t\tcase 'invalid EOF format': {\n\t\t\treturn new InvalidEofFormatError(errorMessage, { cause: error })\n\t\t}\n\t\tcase 'static state change': {\n\t\t\treturn new StaticStateChangeError(errorMessage, { cause: error })\n\t\t}\n\t\tcase 'code store out of gas': {\n\t\t\treturn new CodeStoreOutOfGasError(errorMessage, { cause: error })\n\t\t}\n\t\tcase 'insufficient balance': {\n\t\t\treturn new InsufficientBalanceError(errorMessage, { cause: error })\n\t\t}\n\t\tcase 'invalid input length': {\n\t\t\treturn new InvalidInputLengthError(errorMessage, { cause: error })\n\t\t}\n\t\tcase 'input is empty': {\n\t\t\treturn new BLS12381InputEmptyError(errorMessage, { cause: error })\n\t\t}\n\t\tcase 'initcode exceeds max initcode size': {\n\t\t\treturn new InitcodeSizeViolationError(errorMessage, { cause: error })\n\t\t}\n\t\tcase 'invalid bytecode deployed': {\n\t\t\treturn new InvalidBytecodeResultError(errorMessage, { cause: error })\n\t\t}\n\t\tcase 'code size to deposit exceeds maximum code size': {\n\t\t\treturn new CodeSizeExceedsMaximumError(errorMessage, { cause: error })\n\t\t}\n\t\tcase 'fp point not in field': {\n\t\t\treturn new BLS12381FpNotInFieldError(errorMessage, { cause: error })\n\t\t}\n\t\tcase 'point not on curve': {\n\t\t\treturn new BLS12381PointNotOnCurveError(errorMessage, { cause: error })\n\t\t}\n\t\tdefault: {\n\t\t\treturn new InternalError(errorMessage || 'Unknown error', {\n\t\t\t\tcause: error,\n\t\t\t})\n\t\t}\n\t}\n}\n","import { bytesToHex, getAddress, toHex } from '@tevm/utils'\nimport { createEvmError } from '../internal/createEvmError.js'\n\n/**\n * @internal\n * Creates an CallHandler for handling call params with Ethereumjs EVM\n * @param {import('@tevm/vm').RunTxResult & import('@tevm/evm').EvmResult} evmResult\n * @param {import('@tevm/utils').Hex | undefined} txHash\n * @param {import('../common/TraceResult.js').TraceResult | undefined} trace\n * @param {Map<string, Set<string>> | undefined} accessList returned by the evm\n * @returns {import('./CallResult.js').CallResult}\n * @throws {never} any error means the input and output types were invalid or some invariant was broken\n */\nexport const callHandlerResult = (evmResult, txHash, trace, accessList) => {\n\t/**\n\t * @type {import('./CallResult.js').CallResult}\n\t */\n\tconst out = {\n\t\trawData: bytesToHex(/** @type {any} */ (evmResult).execResult.returnValue),\n\t\texecutionGasUsed: /** @type {any} */ (evmResult).execResult.executionGasUsed,\n\t}\n\n\tif (trace) {\n\t\tout.trace = trace\n\t}\n\tif (evmResult.totalGasSpent) {\n\t\tout.totalGasSpent = evmResult.totalGasSpent\n\t}\n\tif (evmResult.minerValue) {\n\t\tout.minerValue = evmResult.minerValue\n\t}\n\tif (evmResult.blobGasUsed) {\n\t\tout.blobGasUsed = evmResult.blobGasUsed\n\t}\n\tif (evmResult.amountSpent) {\n\t\tout.amountSpent = evmResult.amountSpent\n\t}\n\tif (accessList && evmResult.preimages) {\n\t\tout.preimages = Object.fromEntries(\n\t\t\t[...evmResult.preimages.entries()].map(([key, value]) => [key, bytesToHex(value)]),\n\t\t)\n\t}\n\n\tif (accessList) {\n\t\t// this might break next ethjs release\n\t\tout.accessList = /** @type {Record<import('@tevm/utils').Address, Set<import('@tevm/utils').Hex>>} */ (\n\t\t\tObject.fromEntries(\n\t\t\t\t[...accessList.entries()].map(([address, storageKeys]) => {\n\t\t\t\t\tconst hexKeys = new Set([...storageKeys].map((key) => `0x${key}`))\n\t\t\t\t\treturn [`0x${address}`, hexKeys]\n\t\t\t\t}),\n\t\t\t)\n\t\t)\n\t}\n\tif (txHash) {\n\t\tout.txHash = txHash\n\t}\n\n\tif (/** @type {any} */ (evmResult).execResult.gasRefund) {\n\t\tout.gasRefund = evmResult.gasRefund ?? /** @type {any} */ (evmResult).execResult.gasRefund\n\t}\n\tif (/** @type {any} */ (evmResult).execResult.selfdestruct) {\n\t\tout.selfdestruct = new Set(\n\t\t\t[.../** @type {any} */ (evmResult).execResult.selfdestruct].map((address) => getAddress(address)),\n\t\t)\n\t}\n\tif (/** @type {any} */ (evmResult).execResult.gas) {\n\t\tout.gas = /** @type {any} */ (evmResult).execResult.gas\n\t}\n\tif (/** @type {any} */ (evmResult).execResult.logs) {\n\t\t// type Log = [address: Address, topics: Hex[], data: Hex]\n\t\tout.logs = /** @type {any} */ (evmResult).execResult.logs.map(\n\t\t\t(/** @type {[Uint8Array, Uint8Array[], Uint8Array]} */ log) => {\n\t\t\t\tconst [address, topics, data] = log\n\t\t\t\treturn {\n\t\t\t\t\taddress: getAddress(toHex(address)),\n\t\t\t\t\ttopics: topics.map((/** @type {Uint8Array} */ topic) => toHex(topic)),\n\t\t\t\t\tdata: toHex(data),\n\t\t\t\t}\n\t\t\t},\n\t\t)\n\t}\n\tif (/** @type {any} */ (evmResult).execResult.runState) {\n\t\t// don't do anything with runState atm\n\t}\n\tif (/** @type {any} */ (evmResult).execResult.blobGasUsed) {\n\t\tout.blobGasUsed = /** @type {any} */ (evmResult).execResult.blobGasUsed\n\t}\n\tif (/** @type {any} */ (evmResult).execResult.exceptionError) {\n\t\tif (out.errors === undefined) {\n\t\t\tout.errors = []\n\t\t}\n\t\tout.errors.push(createEvmError(/** @type {any} */ (evmResult).execResult.exceptionError))\n\t}\n\n\tif (/** @type {any} */ (evmResult).execResult.createdAddresses) {\n\t\tout.createdAddresses = new Set([.../** @type {any} */ (evmResult).execResult.createdAddresses].map(getAddress))\n\t}\n\n\tif (/** @type {any} */ (evmResult).createdAddress) {\n\t\tout.createdAddress = getAddress(/** @type {any} */ (evmResult).createdAddress.toString())\n\t}\n\treturn out\n}\n","import { createAddress } from '@tevm/address'\nimport { createImpersonatedTx } from '@tevm/tx'\n\n/**\n * @param {import('@tevm/node').TevmNode} client\n */\nexport const evmInputToImpersonatedTx = (client) => {\n\t/**\n\t * @param {import('@tevm/evm').EvmRunCallOpts} evmInput\n\t * @param {bigint } [maxFeePerGas]\n\t * @param {bigint } [maxPriorityFeePerGas]\n\t */\n\treturn async (evmInput, maxFeePerGas, maxPriorityFeePerGas) => {\n\t\tconst vm = await client.getVm()\n\n\t\tconst parentBlock = await vm.blockchain.getCanonicalHeadBlock()\n\t\tconst priorityFee = 0n\n\n\t\tconst sender = evmInput.origin ?? evmInput.caller ?? createAddress(`0x${'00'.repeat(20)}`)\n\n\t\tconst txPool = await client.getTxPool()\n\t\tconst txs = await txPool.getBySenderAddress(sender)\n\n\t\tconst nonce = ((await vm.stateManager.getAccount(sender)) ?? { nonce: 0n }).nonce + BigInt(txs.length)\n\n\t\tclient.logger.debug({ nonce, sender: sender.toString() }, 'creating tx with nonce')\n\n\t\tlet _maxFeePerGas = parentBlock.header.calcNextBaseFee() + priorityFee\n\t\tconst baseFeePerGas = parentBlock.header.baseFeePerGas ?? 0n\n\t\tif (_maxFeePerGas < baseFeePerGas) {\n\t\t\t_maxFeePerGas = baseFeePerGas\n\t\t}\n\t\tif (maxPriorityFeePerGas && _maxFeePerGas < maxPriorityFeePerGas) {\n\t\t\t_maxFeePerGas = maxPriorityFeePerGas\n\t\t}\n\n\t\t// TODO we should be allowing actual real signed tx too here\n\t\t// TODO known bug here we should be allowing unlimited code size here based on user providing option\n\t\t// Just lazily not looking up how to get it from client.getVm().evm yet\n\t\t// Possible we need to make property public on client\n\t\treturn createImpersonatedTx(\n\t\t\t{\n\t\t\t\timpersonatedAddress: sender,\n\t\t\t\tnonce,\n\t\t\t\t// just set to block max for now\n\t\t\t\tgasLimit: parentBlock.header.gasLimit,\n\t\t\t\tmaxFeePerGas: maxFeePerGas ?? _maxFeePerGas,\n\t\t\t\tmaxPriorityFeePerGas: maxPriorityFeePerGas ?? 0n,\n\t\t\t\t...(evmInput.to !== undefined ? { to: evmInput.to } : {}),\n\t\t\t\t...(evmInput.data !== undefined ? { data: evmInput.data } : {}),\n\t\t\t\t...(evmInput.value !== undefined ? { value: evmInput.value } : {}),\n\t\t\t\tgasPrice: null,\n\t\t\t},\n\t\t\t{\n\t\t\t\tallowUnlimitedInitCodeSize: false,\n\t\t\t\tcommon: vm.common.ethjsCommon,\n\t\t\t\t// we don't want to freeze because there is a hack to set tx.hash when building a block\n\t\t\t\tfreeze: false,\n\t\t\t},\n\t\t)\n\t}\n}\n","import { DefensiveNullCheckError } from '@tevm/errors'\nimport { bytesToHex, invariant, numberToHex } from '@tevm/utils'\n/**\n * @internal\n * Prepares a trace to be listened to. If laizlyRun is true, it will return an object with the trace and not run the evm internally\n * @param {import('@tevm/vm').Vm} vm\n * @param {import('@tevm/node').TevmNode['logger']} logger\n * @param {import('@tevm/evm').EvmRunCallOpts} params\n * @param {boolean} [lazilyRun]\n * @returns {Promise<import('@tevm/evm').EvmResult & {trace: import('../common/TraceResult.js').TraceResult}>}\n * @throws {never}\n */\nexport const runCallWithTrace = async (vm, logger, params, lazilyRun = false) => {\n\t/**\n\t * As the evm runs we will be updating this trace object\n\t * and then returning it\n\t */\n\t/** @type {import('../common/TraceResult.js').TraceResult} */\n\tconst trace = {\n\t\tgas: 0n,\n\t\treturnValue: '0x0',\n\t\tfailed: false,\n\t\tstructLogs: [],\n\t}\n\n\t/**\n\t * On every step push a struct log\n\t */\n\tvm.evm.events?.on('step', async (step, next) => {\n\t\tlogger.debug(step, 'runCallWithTrace: new evm step')\n\t\ttrace.structLogs.push({\n\t\t\tpc: step.pc,\n\t\t\top: step.opcode.name,\n\t\t\tgasCost: BigInt(step.opcode.fee) + (step.opcode.dynamicFee ?? 0n),\n\t\t\tgas: step.gasLeft,\n\t\t\tdepth: step.depth,\n\t\t\tstack: step.stack.map((code) => numberToHex(code)),\n\t\t})\n\t\tnext?.()\n\t})\n\n\t/**\n\t * After any internal call push error if any\n\t */\n\tvm.evm.events?.on('afterMessage', (data, next) => {\n\t\tlogger.debug(data.execResult, 'runCallWithTrace: new message result')\n\t\tif (data.execResult.exceptionError !== undefined && trace.structLogs.length > 0) {\n\t\t\t// Mark last opcode trace as error if exception occurs\n\t\t\tconst nextLog = trace.structLogs[trace.structLogs.length - 1]\n\t\t\tinvariant(nextLog, new DefensiveNullCheckError('No structLogs to mark as error'))\n\t\t\t// TODO fix this type\n\t\t\tObject.assign(nextLog, {\n\t\t\t\terror: data.execResult.exceptionError,\n\t\t\t})\n\t\t}\n\t\tnext?.()\n\t})\n\n\tif (lazilyRun) {\n\t\t// TODO internally used function is not typesafe here\n\t\treturn /** @type any*/ ({ trace })\n\t}\n\n\tconst runCallResult = await vm.evm.runCall(params)\n\n\tlogger.debug(runCallResult, 'runCallWithTrace: evm run call complete')\n\n\ttrace.gas = runCallResult.execResult.executionGasUsed\n\ttrace.failed = runCallResult.execResult.exceptionError !== undefined\n\ttrace.returnValue = bytesToHex(runCallResult.execResult.returnValue)\n\n\treturn {\n\t\t...runCallResult,\n\t\ttrace,\n\t}\n}\n","import { createAddress } from '@tevm/address'\nimport { hexToBytes } from 'viem'\n\n/**\n * Prefetches storage for all storage slots in the access list\n * Only triggered after the first storage request to the fork transport\n *\n * @internal\n * @param {import('@tevm/node').TevmNode} client\n * @param {Map<string, Set<string>> | undefined} accessList\n * @returns {Promise<void>}\n */\nexport const prefetchStorageFromAccessList = async (client, accessList) => {\n\tif (!accessList || accessList.size === 0) return\n\n\tconst vm = await client.getVm()\n\tconst stateManager = vm.stateManager\n\n\t// Prefetch all storage slots in parallel\n\tconst prefetchPromises = []\n\n\tfor (const [address, storageKeys] of accessList.entries()) {\n\t\tif (storageKeys.size === 0) continue\n\n\t\t// Create address object once per address\n\t\tconst addressObj = createAddress(address.startsWith('0x') ? address : `0x${address}`)\n\n\t\tfor (const storageKey of storageKeys) {\n\t\t\t// Convert storage key to bytes with proper padding to 32 bytes\n\t\t\tconst hexKey = /** @type {`0x${string}`} */ (storageKey.startsWith('0x') ? storageKey : `0x${storageKey}`)\n\t\t\tconst keyBytes = hexToBytes(hexKey, { size: 32 })\n\n\t\t\t// Queue up storage fetch\n\t\t\tprefetchPromises.push(\n\t\t\t\tstateManager.getStorage(addressObj, keyBytes).catch((error) => {\n\t\t\t\t\tclient.logger.debug(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\taddress: address.startsWith('0x') ? address : `0x${address}`,\n\t\t\t\t\t\t\tstorageKey: storageKey.startsWith('0x') ? storageKey : `0x${storageKey}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t'Error prefetching storage slot from access list',\n\t\t\t\t\t)\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t}\n\n\t// Wait for all prefetch operations to complete\n\tawait Promise.all(prefetchPromises)\n\n\tclient.logger.debug(\n\t\t{ accessListSize: accessList.size, totalStorageSlotsPreloaded: prefetchPromises.length },\n\t\t'Prefetched storage slots from access list',\n\t)\n}\n","import { prefetchStorageFromAccessList } from './prefetchStorageFromAccessList.js'\n\n/**\n * Sets up a proxy around the fork transport to detect storage-related requests\n * and trigger prefetching after the first uncached request\n *\n * @internal\n * @param {import('@tevm/node').TevmNode} client\n * @param {Map<string, Set<string>> | undefined} accessList\n * @returns {Promise<void>}\n */\nexport const setupPrefetchProxy = async (client, accessList) => {\n\tif (!client.forkTransport || !accessList || accessList.size === 0) return\n\n\tlet hasPrefetched = false\n\n\t// Store the original request function\n\tconst originalRequest = client.forkTransport.request.bind(client.forkTransport)\n\n\t// Replace with proxy function\n\tclient.forkTransport.request = async (request) => {\n\t\t// Check if this is a storage-related request\n\t\tif (!hasPrefetched && (request.method === 'eth_getStorageAt' || request.method === 'eth_getProof')) {\n\t\t\tclient.logger.debug({ method: request.method }, 'First storage request detected, triggering prefetch')\n\n\t\t\t// Mark as prefetched to avoid doing it again\n\t\t\thasPrefetched = true\n\n\t\t\t// Trigger prefetching in the background\n\t\t\tprefetchStorageFromAccessList(client, accessList).catch((error) => {\n\t\t\t\tclient.logger.error({ error }, 'Error during storage prefetching after first storage request')\n\t\t\t})\n\t\t}\n\n\t\t// Forward the request to the original implementation\n\t\treturn originalRequest(request)\n\t}\n}\n","import {\n\tAuthCallUnsetError,\n\tBLS12381FpNotInFieldError,\n\tBLS12381InputEmptyError,\n\tBLS12381InvalidInputLengthError,\n\tBLS12381PointNotOnCurveError,\n\tCodeSizeExceedsMaximumError,\n\tCodeStoreOutOfGasError,\n\tCreateCollisionError,\n\tEvmRevertError,\n\tGasLimitExceededError,\n\tInitcodeSizeViolationError,\n\tInsufficientBalanceError,\n\tInternalEvmError,\n\tInvalidAddressError,\n\tInvalidBeginSubError,\n\tInvalidBytecodeResultError,\n\tInvalidCommitmentError,\n\tInvalidEofFormatError,\n\tInvalidGasLimitError,\n\tInvalidGasPriceError,\n\tInvalidInputLengthError,\n\tInvalidJumpError,\n\tInvalidJumpSubError,\n\tInvalidKzgInputsError,\n\tInvalidNonceError,\n\tInvalidOpcodeError,\n\tInvalidProofError,\n\tInvalidReturnSubError,\n\tMisconfiguredClientError,\n\tOutOfGasError,\n\tOutOfRangeError,\n\tRefundExhaustedError,\n\tStackOverflowError,\n\tStackUnderflowError,\n\tStaticStateChangeError,\n\tStopError,\n\tValueOverflowError,\n} from '@tevm/errors'\nimport { EvmError } from '@tevm/evm'\n\n/**\n * @internal\n * Array of every error EVM can throw\n * @type {[typeof AuthCallUnsetError, typeof CodeSizeExceedsMaximumError, typeof CreateCollisionError, typeof InvalidCommitmentError, typeof EvmRevertError, typeof InitcodeSizeViolationError, typeof InsufficientBalanceError, typeof InternalEvmError, typeof InvalidBeginSubError, typeof InvalidBytecodeResultError, typeof InvalidEofFormatError, typeof InvalidInputLengthError, typeof InvalidJumpError, typeof InvalidJumpSubError, typeof InvalidKzgInputsError, typeof InvalidOpcodeError, typeof InvalidProofError, typeof InvalidReturnSubError, typeof OutOfGasError, typeof OutOfRangeError, typeof RefundExhaustedError, typeof StackOverflowError, typeof StackUnderflowError, typeof StaticStateChangeError, typeof StopError, typeof ValueOverflowError, typeof BLS12381InputEmptyError, typeof BLS12381FpNotInFieldError, typeof BLS12381InvalidInputLengthError, typeof BLS12381PointNotOnCurveError, typeof CodeStoreOutOfGasError]}\n */\nconst evmErrors = [\n\tAuthCallUnsetError,\n\tCodeSizeExceedsMaximumError,\n\tCreateCollisionError,\n\tInvalidCommitmentError,\n\tEvmRevertError,\n\tInitcodeSizeViolationError,\n\tInsufficientBalanceError,\n\tInternalEvmError,\n\tInvalidBeginSubError,\n\tInvalidBytecodeResultError,\n\tInvalidEofFormatError,\n\tInvalidInputLengthError,\n\tInvalidJumpError,\n\tInvalidJumpSubError,\n\tInvalidKzgInputsError,\n\tInvalidOpcodeError,\n\tInvalidProofError,\n\tInvalidReturnSubError,\n\tOutOfGasError,\n\tOutOfRangeError,\n\tRefundExhaustedError,\n\tStackOverflowError,\n\tStackUnderflowError,\n\tStaticStateChangeError,\n\tStopError,\n\tValueOverflowError,\n\tBLS12381InputEmptyError,\n\tBLS12381FpNotInFieldError,\n\tBLS12381InvalidInputLengthError,\n\tBLS12381PointNotOnCurveError,\n\tCodeStoreOutOfGasError,\n]\n\n/**\n * @internal\n *  The union of all possible EVM errors\n * @typedef {(typeof evmErrors)[number]} EvmErrorConstructor\n */\n\n/**\n * @internal\n * The union of all possible EVM errors\n * @typedef {AuthCallUnsetError| \t\tBLS12381FpNotInFieldError| BLS12381InputEmptyError| BLS12381InvalidInputLengthError| BLS12381PointNotOnCurveError| CodeStoreOutOfGasError| CodeSizeExceedsMaximumError| CreateCollisionError| InvalidCommitmentError| EvmRevertError| InitcodeSizeViolationError| InsufficientBalanceError| InternalEvmError| InvalidBeginSubError| InvalidBytecodeResultError| InvalidEofFormatError| InvalidInputLengthError| InvalidJumpError| InvalidJumpSubError| InvalidKzgInputsError| InvalidOpcodeError| InvalidProofError| InvalidReturnSubError| OutOfGasError| OutOfRangeError| RefundExhaustedError| StackOverflowError| StackUnderflowError| StaticStateChangeError| StopError| ValueOverflowError} TevmEvmError\n */\n\n/**\n * @internal\n * @typedef {TevmEvmError | InvalidGasPriceError | InvalidAddressError | InvalidGasLimitError} HandleRunTxError\n */\n\n/**\n * @internal\n * Takes an unknown error that is suspected of coming from EVM and returns a strongly typed error\n * @param {unknown} e\n * @returns {HandleRunTxError}\n * @throws {never} returns errors as values\n */\nexport const handleRunTxError = (e) => {\n\tif (e instanceof Error) {\n\t\tif (e.message.includes(\"is less than the block's baseFeePerGas\")) {\n\t\t\treturn new InvalidGasPriceError(e.message, { cause: e })\n\t\t}\n\t\tif (e.message.includes('invalid sender address, address is not an EOA (EIP-3607)')) {\n\t\t\treturn new InvalidAddressError(e.message, { cause: e })\n\t\t}\n\t\tif (e.message.includes('is lower than the minimum gas limit')) {\n\t\t\treturn new InvalidGasLimitError(e.message, { cause: e })\n\t\t}\n\t\tif (e.message.includes('tx has a higher gas limit than the block')) {\n\t\t\treturn new GasLimitExceededError(e.message, { cause: e })\n\t\t}\n\t\tif (e.message.includes('block has a different hardfork than the vm')) {\n\t\t\treturn new MisconfiguredClientError(e.message, { cause: /** @type {any}*/ (e) })\n\t\t}\n\t\tif (e.message.includes(\"the tx doesn't have the correct nonce.\")) {\n\t\t\treturn new InvalidNonceError(e.message, { cause: e })\n\t\t}\n\t\tif (e.message.includes(\"sender doesn't have enough funds to send tx.\")) {\n\t\t\treturn new InsufficientBalanceError(e.message, { cause: /** @type {any}*/ (e) })\n\t\t}\n\t\treturn new InternalEvmError(e.message, { cause: /** @type {any}*/ (e) })\n\t}\n\tif (!(e instanceof EvmError)) {\n\t\treturn new InternalEvmError('Unknown error', { cause: /** @type {any}*/ (e) })\n\t}\n\tconst ErrorConstructor = evmErrors.find((error) => 'EVMErrorMessage' in error && error.EVMErrorMessage === e.error)\n\tif (!ErrorConstructor) {\n\t\treturn new InternalEvmError(`Unknown error: ${e.error}`, { cause: e })\n\t}\n\treturn new ErrorConstructor(e.error, { cause: e })\n}\n","import { runTx } from '@tevm/vm'\nimport { bytesToHex } from 'viem'\nimport { evmInputToImpersonatedTx } from '../internal/evmInputToImpersonatedTx.js'\nimport { runCallWithTrace } from '../internal/runCallWithTrace.js'\nimport { setupPrefetchProxy } from '../internal/setupPrefetchProxy.js'\nimport { handleRunTxError } from './handleEvmError.js'\n\n/**\n * The error returned by executeCall\n * @internal\n * @typedef {import('./handleEvmError.js').HandleRunTxError} ExecuteCallError\n */\n\n/**\n * The return value of executeCall\n * @internal\n * @typedef {{runTxResult: import(\"@tevm/vm\").RunTxResult, trace: import('../common/TraceResult.js').TraceResult | undefined, accessList: undefined | Map<string, Set<string>>}} ExecuteCallResult\n */\n\n/**\n * executeCall encapsalates the internal logic of running a call in the EVM\n * @internal\n * @param {import('@tevm/node').TevmNode} client\n * @param {import(\"@tevm/evm\").EvmRunCallOpts} evmInput\n * @param {import('./CallParams.js').CallParams} params\n * @param {import('../common/CallEvents.js').CallEvents} [events] - Optional event handlers for EVM execution\n * @returns {Promise<(ExecuteCallResult & {errors?: [ExecuteCallError]}) | {errors: [ExecuteCallError]}>}\n * @throws {never} returns errors as values\n */\nexport const executeCall = async (client, evmInput, params, events) => {\n\t/**\n\t * @type {import('../common/TraceResult.js').TraceResult | undefined}\n\t */\n\tlet trace\n\t/**\n\t * evm returns an access list without the 0x prefix\n\t * @type {Map<string, Set<string>> | undefined}\n\t */\n\tlet accessList\n\tconst vm = await client.getVm()\n\n\t// Register event handlers if provided\n\tif (events?.onStep) vm.evm.events?.on('step', events.onStep)\n\tif (events?.onNewContract) vm.evm.events?.on('newContract', events.onNewContract)\n\tif (events?.onBeforeMessage) vm.evm.events?.on('beforeMessage', events.onBeforeMessage)\n\tif (events?.onAfterMessage) vm.evm.events?.on('afterMessage', events.onAfterMessage)\n\n\ttry {\n\t\tconst tx = await evmInputToImpersonatedTx({\n\t\t\t...client,\n\t\t\tgetVm: () => Promise.resolve(vm),\n\t\t})(evmInput, params.maxFeePerGas, params.maxPriorityFeePerGas)\n\t\tif (params.createTrace) {\n\t\t\t// this trace will be filled in when the tx runs\n\t\t\ttrace = await runCallWithTrace(vm, client.logger, evmInput, true).then(({ trace }) => trace)\n\t\t}\n\n\t\t// Always create access list for optimization purposes even if not explicitly requested\n\t\tconst createAccessList = true\n\n\t\tconst runTxResult = await runTx(vm)({\n\t\t\treportAccessList: createAccessList,\n\t\t\treportPreimages: createAccessList,\n\t\t\tskipHardForkValidation: true,\n\t\t\tskipBlockGasLimitValidation: true,\n\t\t\t// we currently set the nonce ourselves user can't set it\n\t\t\tskipNonce: true,\n\t\t\t// we must skipBalance for now because we have no clue what the gasLimit should be so this initial run we set it to block maximum\n\t\t\tskipBalance: true,\n\t\t\t...(evmInput.block !== undefined ? { block: /** @type any*/ (evmInput.block) } : {}),\n\t\t\ttx,\n\t\t})\n\n\t\tif (trace) {\n\t\t\ttrace.gas = /** @type {any} */ (runTxResult).execResult.executionGasUsed\n\t\t\ttrace.failed = false\n\t\t\ttrace.returnValue = bytesToHex(/** @type {any} */ (runTxResult).execResult.returnValue)\n\t\t}\n\n\t\tclient.logger.debug(\n\t\t\t{\n\t\t\t\treturnValue: bytesToHex(/** @type {any} */ (runTxResult).execResult.returnValue),\n\t\t\t\texceptionError: /** @type {any} */ (runTxResult).execResult.exceptionError,\n\t\t\t\texecutionGasUsed: /** @type {any} */ (runTxResult).execResult.executionGasUsed,\n\t\t\t},\n\t\t\t'callHandler: runCall result',\n\t\t)\n\n\t\tif (runTxResult.accessList !== undefined) {\n\t\t\taccessList = new Map(\n\t\t\t\trunTxResult.accessList.map((item) => {\n\t\t\t\t\treturn [item.address, new Set(item.storageKeys)]\n\t\t\t\t}),\n\t\t\t)\n\n\t\t\t// Instead of immediate prefetching, set up the proxy to detect storage requests\n\t\t\tawait setupPrefetchProxy(client, accessList)\n\n\t\t\t// If not explicitly requested, don't include access list in the response\n\t\t\tif (!params.createAccessList) {\n\t\t\t\taccessList = undefined\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\trunTxResult,\n\t\t\taccessList,\n\t\t\ttrace,\n\t\t\t.../** @type {any} */ (\n\t\t\t\trunTxResult.execResult.exceptionError !== undefined\n\t\t\t\t\t? { errors: [handleRunTxError(/** @type {any} */ (runTxResult).execResult.exceptionError)] }\n\t\t\t\t\t: {}\n\t\t\t),\n\t\t}\n\t} catch (e) {\n\t\treturn {\n\t\t\ttrace,\n\t\t\taccessList,\n\t\t\terrors: [handleRunTxError(e)],\n\t\t}\n\t} finally {\n\t\t// Clean up event handlers to prevent memory leaks\n\t\tif (events?.onStep) vm.evm.events?.off('step', events.onStep)\n\t\tif (events?.onNewContract) vm.evm.events?.off('newContract', events.onNewContract)\n\t\tif (events?.onBeforeMessage) vm.evm.events?.off('beforeMessage', events.onBeforeMessage)\n\t\tif (events?.onAfterMessage) vm.evm.events?.off('afterMessage', events.onAfterMessage)\n\t}\n}\n","import { createAddress } from '@tevm/address'\nimport { hexToBytes } from '@tevm/utils'\n\n/**\n * Handles warning for pending transactions in the transaction pool.\n *\n * @param {import('@tevm/node').TevmNode} client - The TEVM base client instance.\n * @param {import('./CallParams.js').CallParams} params - The call parameters.\n * @param {string | undefined} code - The code to execute.\n * @param {string | undefined} deployedBytecode - The deployed bytecode to use.\n * @returns {Promise<void>} A promise that resolves when the check is complete.\n * @throws {never} This function does not throw errors.\n */\nexport const handlePendingTransactionsWarning = async (client, params, code, deployedBytecode) => {\n\tif (\n\t\tcode === undefined &&\n\t\tdeployedBytecode === undefined &&\n\t\tparams.to !== undefined &&\n\t\tparams.data !== undefined &&\n\t\thexToBytes(params.data).length > 0\n\t) {\n\t\tconst vm = await client.getVm()\n\t\tconst isCode = await vm.stateManager\n\t\t\t.getCode(createAddress(params.to))\n\t\t\t.then((code) => code.length > 0)\n\t\t\t.catch(() => false)\n\t\tconst txPool = await client.getTxPool()\n\t\tif (!isCode && txPool.txsInPool > 0) {\n\t\t\tclient.logger.warn(\n\t\t\t\t`No code found for contract address ${params.to}. But there ${\n\t\t\t\t\ttxPool.txsInPool === 1 ? 'is' : 'are'\n\t\t\t\t} ${txPool.txsInPool} pending tx in tx pool. Did you forget to mine a block?`,\n\t\t\t)\n\t\t}\n\t}\n}\n","import { InvalidParamsError } from '@tevm/errors'\nimport { setAccountHandler } from '../SetAccount/setAccountHandler.js'\n\n/**\n * @internal\n * @typedef {InvalidParamsError} HandleStateOverridesError\n */\n\n/**\n * Handles state overrides for the given client and parameters.\n * @param {import('@tevm/node').TevmNode} client\n * @param {import('./CallParams.js').CallParams['stateOverrideSet']} stateOverrideSet\n * @returns {Promise<{errors?: Array<HandleStateOverridesError>}>}\n */\nexport async function handleStateOverrides(client, stateOverrideSet) {\n\tif (stateOverrideSet) {\n\t\tfor (const [address, state] of Object.entries(stateOverrideSet)) {\n\t\t\tconsole.log('setting state', address, state)\n\t\t\tconst res = await setAccountHandler(client)({\n\t\t\t\taddress: /** @type import('@tevm/utils').Address*/ (address),\n\t\t\t\t...(state.nonce !== undefined ? { nonce: state.nonce } : {}),\n\t\t\t\t...(state.balance !== undefined ? { balance: state.balance } : {}),\n\t\t\t\t...(state.code !== undefined ? { deployedBytecode: state.code } : {}),\n\t\t\t\t...(state.state !== undefined ? { state: state.state } : {}),\n\t\t\t\t...(state.stateDiff !== undefined ? { stateDiff: state.stateDiff } : {}),\n\t\t\t\tthrowOnFail: false,\n\t\t\t})\n\t\t\tif (res.errors?.length) {\n\t\t\t\treturn {\n\t\t\t\t\terrors: [\n\t\t\t\t\t\tnew InvalidParamsError('Invalid state override', {\n\t\t\t\t\t\t\tcause: /** @type {Error} */ (res.errors.length === 1 ? res.errors[0] : new AggregateError(res.errors)),\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}\n\t}\n\treturn {}\n}\n","import { createAddress } from '@tevm/address'\nimport { createImpersonatedTx } from '@tevm/tx'\nimport { bytesToHex, EthjsAccount } from '@tevm/utils'\nimport { getAccountHandler } from '../GetAccount/getAccountHandler.js'\nimport { maybeThrowOnFail } from '../internal/maybeThrowOnFail.js'\nimport { setAccountHandler } from '../SetAccount/setAccountHandler.js'\n\n// TODO tevm_call should optionally take a signature too\n// When it takes a real signature (like in case of eth.sendRawTransaction) we should\n// use FeeMarketEIP1559Transaction rather than Impersonated\nconst requireSig = false\n\n/**\n * @param {import('@tevm/node').TevmNode} client\n * @param {boolean} [defaultThrowOnFail]\n */\nexport const createTransaction = (client, defaultThrowOnFail = true) => {\n\t/**\n\t * @param {object} params\n\t * @param {import('@tevm/evm').EvmRunCallOpts} params.evmInput\n\t * @param {import('@tevm/evm').EvmResult} params.evmOutput\n\t * @param {bigint | undefined} [params.maxFeePerGas]\n\t * @param {bigint | undefined} [params.maxPriorityFeePerGas]\n\t * @param {boolean} [params.throwOnFail]\n\t * @param {bigint | undefined} [params.nonceOverride]\n\t */\n\treturn async ({ evmInput, evmOutput, throwOnFail = defaultThrowOnFail, nonceOverride, ...priorityFeeOpts }) => {\n\t\tconst vm = await client.getVm()\n\t\tconst pool = await client.getTxPool()\n\n\t\tconst accountAddress = evmInput.origin ?? createAddress(0)\n\t\tconst account = await vm.stateManager.getAccount(accountAddress).catch(() => new EthjsAccount(0n, 0n))\n\t\tconst hasEth = evmInput.skipBalance || (account?.balance ?? 0n) > 0n\n\t\tif (!hasEth) {\n\t\t\treturn maybeThrowOnFail(throwOnFail, {\n\t\t\t\terrors: [\n\t\t\t\t\t{\n\t\t\t\t\t\t_tag: 'InsufficientBalance',\n\t\t\t\t\t\tname: 'InsufficientBalance',\n\t\t\t\t\t\tmessage: `Insufficientbalance: Account ${accountAddress} attempted to create a transaction with zero eth. Consider adding eth to account or using a different from or origin address`,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t})\n\t\t}\n\t\tconst parentBlock = await vm.blockchain.getCanonicalHeadBlock()\n\t\tconst priorityFee = 0n\n\n\t\tconst dataFee = (() => {\n\t\t\tlet out = 0n\n\t\t\tfor (const entry of evmInput.data ?? []) {\n\t\t\t\t// 4 gas for zero bytes, 16 gas for non-zero bytes (standard EIP-2028 costs)\n\t\t\t\tout += entry === 0 ? 4n : 16n\n\t\t\t}\n\t\t\treturn out\n\t\t})()\n\n\t\tconst baseFee = (() => {\n\t\t\tlet out = dataFee\n\t\t\t// Base transaction cost is 21000 gas\n\t\t\tconst txFee = 21000n\n\t\t\tout += txFee\n\t\t\tconst isCreation = (evmInput.to?.bytes.length ?? 0) === 0\n\t\t\tif (vm.common.ethjsCommon.gteHardfork('homestead') && isCreation) {\n\t\t\t\t// Contract creation cost is 32000 gas\n\t\t\t\tconst txCreationFee = 32000n\n\t\t\t\tout += txCreationFee\n\t\t\t}\n\t\t\treturn out\n\t\t})()\n\n\t\tconst minimumGasLimit = baseFee + evmOutput.execResult.executionGasUsed\n\t\tconst gasLimitWithExecutionBuffer = evmInput.gasLimit ?? (minimumGasLimit * 11n) / 10n\n\n\t\tif (gasLimitWithExecutionBuffer < minimumGasLimit) {\n\t\t\tconsole.warn('The manually set gas limit set by tx is lower than the estimated cost. It may fail once mined.')\n\t\t}\n\n\t\tconst sender = evmInput.origin ?? evmInput.caller ?? createAddress(`0x${'00'.repeat(20)}`)\n\n\t\tconst txPool = await client.getTxPool()\n\t\tconst txs = await txPool.getBySenderAddress(sender)\n\t\tconst accountNonce = ((await vm.stateManager.getAccount(sender)) ?? { nonce: 0n }).nonce\n\n\t\t// Use user-provided nonce if available, otherwise calculate next valid nonce\n\t\tconst nonce =\n\t\t\tnonceOverride !== undefined\n\t\t\t\t? nonceOverride\n\t\t\t\t: (() => {\n\t\t\t\t\t\t// Get the highest transaction nonce from the pool for this sender\n\t\t\t\t\t\tlet highestPoolNonce = accountNonce - 1n\n\t\t\t\t\t\tfor (const tx of txs) {\n\t\t\t\t\t\t\tif (tx.tx.nonce > highestPoolNonce) highestPoolNonce = tx.tx.nonce\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// This ensures we never reuse nor skip a nonce\n\t\t\t\t\t\treturn highestPoolNonce >= accountNonce ? highestPoolNonce + 1n : accountNonce\n\t\t\t\t\t})()\n\t\tclient.logger.debug({ nonce, sender: sender.toString() }, 'creating tx with nonce')\n\n\t\tlet maxFeePerGas = parentBlock.header.calcNextBaseFee() + priorityFee\n\t\tconst baseFeePerGas = parentBlock.header.baseFeePerGas ?? 0n\n\t\tif (maxFeePerGas < baseFeePerGas) {\n\t\t\tmaxFeePerGas = baseFeePerGas\n\t\t}\n\n\t\t// TODO we should be allowing actual real signed tx too here\n\t\t// TODO known bug here we should be allowing unlimited code size here based on user providing option\n\t\t// Just lazily not looking up how to get it from client.getVm().evm yet\n\t\t// Possible we need to make property public on client\n\t\tconst tx = createImpersonatedTx(\n\t\t\t{\n\t\t\t\timpersonatedAddress: sender,\n\t\t\t\tnonce,\n\t\t\t\tgasLimit: gasLimitWithExecutionBuffer,\n\t\t\t\tmaxFeePerGas: priorityFeeOpts.maxFeePerGas ?? maxFeePerGas,\n\t\t\t\tmaxPriorityFeePerGas: priorityFeeOpts.maxPriorityFeePerGas ?? 0n,\n\t\t\t\t...(evmInput.to !== undefined ? { to: evmInput.to } : {}),\n\t\t\t\t...(evmInput.data !== undefined ? { data: evmInput.data } : {}),\n\t\t\t\t...(evmInput.value !== undefined ? { value: evmInput.value } : {}),\n\t\t\t\t// TODO we should handle non EIP-1559 txs here too\n\t\t\t\tgasPrice: null,\n\t\t\t},\n\t\t\t{\n\t\t\t\tallowUnlimitedInitCodeSize: false,\n\t\t\t\tcommon: vm.common.ethjsCommon,\n\t\t\t\t// we don't want to freeze because there is a hack to set tx.hash when building a block\n\t\t\t\tfreeze: false,\n\t\t\t},\n\t\t)\n\t\tclient.logger.debug(tx, 'callHandler: Created a new transaction from transaction data')\n\t\tlet poolPromise =\n\t\t\t/**\n\t\t\t * @type {Promise<{error: null; hash: `0x${string}`;} | {error: string; hash: `0x${string}`;}>}\n\t\t\t */\n\t\t\t(Promise.resolve({}))\n\t\ttry {\n\t\t\tclient.logger.debug({ requireSig, skipBalance: evmInput.skipBalance }, 'callHandler: Adding tx to mempool')\n\t\t\tpoolPromise = pool.add(tx, requireSig, evmInput.skipBalance ?? false)\n\t\t\tconst txHash = bytesToHex(tx.hash())\n\t\t\tclient.logger.debug({ txHash }, 'callHandler: received txHash')\n\t\t\tconst account = await getAccountHandler(client)({\n\t\t\t\taddress: /** @type {import('@tevm/utils').Hex}*/ (sender.toString()),\n\t\t\t})\n\t\t\tconst balanceNeeded = tx.value + gasLimitWithExecutionBuffer * tx.maxFeePerGas\n\t\t\tconst hasBalance = balanceNeeded <= account.balance\n\t\t\tif (evmInput?.skipBalance && !hasBalance) {\n\t\t\t\tawait setAccountHandler(client)({\n\t\t\t\t\taddress: /** @type {import('@tevm/utils').Hex}*/ (sender.toString()),\n\t\t\t\t\tbalance: balanceNeeded,\n\t\t\t\t})\n\t\t\t}\n\t\t\tawait poolPromise\n\t\t\tclient.emit('newPendingTransaction', tx)\n\t\t\treturn {\n\t\t\t\ttxHash,\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tawait poolPromise.catch(() => {})\n\t\t\tif (typeof e === 'object' && e !== null && '_tag' in e && e._tag === 'AccountNotFound') {\n\t\t\t\treturn maybeThrowOnFail(throwOnFail ?? defaultThrowOnFail, {\n\t\t\t\t\terrors: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: 'NoBalanceError',\n\t\t\t\t\t\t\t_tag: 'NoBalanceError',\n\t\t\t\t\t\t\tmessage: 'Attempting to create a transaction with an uninitialized account with no balance',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t\texecutionGasUsed: 0n,\n\t\t\t\t\t/**\n\t\t\t\t\t * @type {`0x${string}`}\n\t\t\t\t\t */\n\t\t\t\t\trawData: '0x',\n\t\t\t\t})\n\t\t\t}\n\t\t\tclient.logger.error(\n\t\t\t\te,\n\t\t\t\t'callHandler: Unexpected error adding transaction to mempool and checkpointing state. Removing transaction from mempool and reverting state',\n\t\t\t)\n\t\t\tpool.removeByHash(bytesToHex(tx.hash()))\n\t\t\t// don't expect this to ever happen at this point but being defensive\n\t\t\tawait vm.stateManager.revert()\n\t\t\treturn maybeThrowOnFail(throwOnFail ?? defaultThrowOnFail, {\n\t\t\t\terrors: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'UnexpectedError',\n\t\t\t\t\t\t_tag: 'UnexpectedError',\n\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\ttypeof e === 'string'\n\t\t\t\t\t\t\t\t? e\n\t\t\t\t\t\t\t\t: e instanceof Error\n\t\t\t\t\t\t\t\t\t? e.message\n\t\t\t\t\t\t\t\t\t: typeof e === 'object' && e !== null && 'message' in e\n\t\t\t\t\t\t\t\t\t\t? e.message\n\t\t\t\t\t\t\t\t\t\t: 'unknown error',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\texecutionGasUsed: 0n,\n\t\t\t\t/**\n\t\t\t\t * @type {`0x${string}`}\n\t\t\t\t */\n\t\t\t\trawData: '0x',\n\t\t\t})\n\t\t}\n\t}\n}\n","import { mineHandler } from '../Mine/mineHandler.js'\n\n/**\n * @internal\n * Runs the mining logic if the client is set to automine or gas mining threshold is reached\n * @param {import(\"@tevm/node\").TevmNode} client\n * @param {import(\"viem\").Hex} [txHash]\n * @param {boolean} [isGasMining] Whether this is being triggered by gas mining\n * @returns {Promise<{blockHashes?: undefined, errors?: import('../Mine/TevmMineError.js').TevmMineError[]} | undefined>} undefined if noop, errors if automining fails, blockHashes if automining succeeds\n * @throws {never} returns errors as values\n */\nexport const handleAutomining = async (client, txHash, isGasMining = false, mineAllTx = true) => {\n\t// Check if auto mining is enabled or if this is a gas mining request\n\tclient.logger.debug(`${client.miningConfig.type === 'auto' ? 'Automining' : 'Gas mining'} transaction ${txHash}...`)\n\n\t// For gas mining mode, determine number of blocks to mine\n\tconst blocks = 1\n\tif (isGasMining && client.miningConfig.type === 'gas' && client.miningConfig.limit) {\n\t\t// In gas mining mode, we can optionally use the limit parameter to determine how many blocks to mine\n\t\t// The limit is a BigInt representing gas threshold, but we could also use it to determine block count\n\t\t// For simplicity, we're mining just one block here, but this could be extended to use the limit\n\t\tclient.logger.debug(`Gas mining mode with limit ${client.miningConfig.limit}`)\n\t}\n\n\t// Mine the specified number of blocks\n\tconst mineRes = await mineHandler(client)({\n\t\t...(mineAllTx || txHash === undefined ? {} : { tx: txHash }),\n\t\tthrowOnFail: false,\n\t\tblockCount: blocks,\n\t})\n\n\tif (mineRes.errors?.length) {\n\t\treturn mineRes\n\t}\n\tclient.logger.debug(mineRes, 'Transaction successfully mined')\n\treturn undefined\n}\n","/**\n * @internal\n * Determines if a transaction should be created based on the parameters\n * @param {import('./CallParams.js').CallParams} params\n * @param {import('@tevm/vm').RunTxResult} runTxResult\n * @throws {never} only if the parameter is invalid based on ts type\n */\nexport const shouldCreateTransaction = (params, runTxResult) => {\n\tconst paramToUse = params.addToMempool ?? params.addToBlockchain ?? params.createTransaction\n\n\tif (paramToUse === undefined) {\n\t\treturn false\n\t}\n\tif (paramToUse === 'always') {\n\t\treturn true\n\t}\n\t// true is now an alias for 'always', not 'on-success'\n\tif (paramToUse === true) {\n\t\treturn true\n\t}\n\tif (paramToUse === false || paramToUse === 'never') {\n\t\treturn false\n\t}\n\tif (paramToUse === 'on-success') {\n\t\treturn runTxResult.execResult.exceptionError === undefined\n\t}\n\t/**\n\t * @type {never} this typechecks that we've exhausted all cases\n\t */\n\tconst invalidOption = paramToUse\n\tthrow new Error(`Invalid value for addToMempool/createTransaction: ${invalidOption}`)\n}\n\n/**\n * @internal\n * Determines if a transaction should be added to the blockchain based on the `addToBlockchain` parameter\n * @param {import('./CallParams.js').CallParams} params\n * @param {import('@tevm/vm').RunTxResult} runTxResult\n * @throws {never} only if the `addToBlockchain` parameter is invalid based on ts type\n */\nexport const shouldAddToBlockchain = (params, runTxResult) => {\n\tif (params.addToBlockchain === undefined) {\n\t\treturn false\n\t}\n\tif (params.addToBlockchain === 'always') {\n\t\treturn true\n\t}\n\t// true is now an alias for 'always', not 'on-success'\n\tif (params.addToBlockchain === true) {\n\t\treturn true\n\t}\n\tif (params.addToBlockchain === false || params.addToBlockchain === 'never') {\n\t\treturn false\n\t}\n\tif (params.addToBlockchain === 'on-success') {\n\t\treturn runTxResult.execResult.exceptionError === undefined\n\t}\n\t/**\n\t * @type {never} this typechecks that we've exhausted all cases\n\t */\n\tconst invalidOption = params.addToBlockchain\n\tthrow new Error(`Invalid addToBlockchain value: ${invalidOption}`)\n}\n","import { createTransaction } from '../CreateTransaction/createTransaction.js'\nimport { handleAutomining } from './handleAutomining.js'\nimport { shouldAddToBlockchain, shouldCreateTransaction } from './shouldCreateTransaction.js'\n\n/**\n * Handles the creation of a transaction based on the call parameters and execution result.\n *\n * @param {import('@tevm/node').TevmNode} client - The TEVM base client instance.\n * @param {import('./CallParams.js').CallParams} params - The call parameters.\n * @param {import('./executeCall.js').ExecuteCallResult} executedCall - The result of the executed call.\n * @param {import('@tevm/evm').EvmRunCallOpts} evmInput - The EVM input parameters.\n * @returns {Promise<{hash: import('@tevm/utils').Hex | undefined, errors?: never} | {hash?: never, errors: Array<import('./TevmCallError.js').TevmCallError>}>} A promise that resolves to the transaction hash or undefined.\n * @throws {never} Returns errors as values\n */\nexport const handleTransactionCreation = async (client, params, executedCall, evmInput) => {\n\t/**\n\t * @type {import('@tevm/utils').Hex | undefined}\n\t */\n\tlet txHash\n\t/**\n\t * @type {Array<import('./TevmCallError.js').TevmCallError>}\n\t */\n\tconst errors = []\n\n\t// Log deprecation warning if createTransaction is used\n\tif (params.createTransaction !== undefined) {\n\t\tclient.logger.warn(\n\t\t\t'The createTransaction parameter is deprecated. Please use addToMempool or addToBlockchain instead.',\n\t\t)\n\t}\n\n\tconst shouldAutoMine =\n\t\tclient.miningConfig.type === 'auto' &&\n\t\t[params.addToMempool, params.addToBlockchain, params.createTransaction].every(\n\t\t\t(param) => param !== false && param !== 'never',\n\t\t)\n\tconst shouldAddToChain = shouldAutoMine || shouldAddToBlockchain(params, executedCall.runTxResult)\n\tconst shouldCreateTx = shouldAddToChain || shouldCreateTransaction(params, executedCall.runTxResult)\n\n\tif (shouldCreateTx) {\n\t\ttry {\n\t\t\tconst txRes = await createTransaction(client)({\n\t\t\t\tthrowOnFail: false,\n\t\t\t\tevmOutput: executedCall.runTxResult,\n\t\t\t\tevmInput,\n\t\t\t\tmaxPriorityFeePerGas: params.maxPriorityFeePerGas,\n\t\t\t\tmaxFeePerGas: params.maxFeePerGas,\n\t\t\t\tnonceOverride: params.nonce,\n\t\t\t})\n\t\t\ttxHash = 'txHash' in txRes ? txRes.txHash : undefined\n\n\t\t\tconst isGasMining = client.miningConfig.type === 'gas'\n\n\t\t\tif (shouldAddToChain && txHash) {\n\t\t\t\tconst autoMiningResult = await handleAutomining(client, txHash, isGasMining, false)\n\n\t\t\t\tif (autoMiningResult?.errors) {\n\t\t\t\t\terrors.push(.../** @type {any} */ (autoMiningResult.errors))\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ('errors' in txRes && txRes.errors) {\n\t\t\t\terrors.push(.../** @type {any} */ (txRes.errors))\n\t\t\t}\n\t\t} catch (error) {\n\t\t\terrors.push(/** @type {any} */ (error))\n\t\t}\n\t}\n\tif (errors.length > 0) {\n\t\treturn {\n\t\t\terrors,\n\t\t}\n\t}\n\treturn { hash: txHash }\n}\n","import { z } from 'zod'\n\n/**\n * Zod schema for EVM execution event handlers\n * These are not part of the JSON-RPC interface but are used internally for call handling\n */\nexport const zCallEvents = z\n\t.object({\n\t\tonStep: z.function().optional().describe('Handler called on each EVM step (instruction execution)'),\n\t\tonNewContract: z.function().optional().describe('Handler called when a new contract is created'),\n\t\tonBeforeMessage: z.function().optional().describe('Handler called before a message (call) is processed'),\n\t\tonAfterMessage: z.function().optional().describe('Handler called after a message (call) is processed'),\n\t})\n\t.partial()\n","import { z } from 'zod'\nimport { zAddress } from './zAddress.js'\n\nexport const zBlockOverrideSet = z.strictObject({\n\tnumber: z.bigint().gte(0n).optional(),\n\ttime: z.bigint().gte(0n).optional(),\n\tgasLimit: z.bigint().gte(0n).optional(),\n\tcoinbase: zAddress.optional(),\n\tbaseFee: z.bigint().gte(0n).optional(),\n\tblobBaseFee: z.bigint().gte(0n).optional(),\n})\n","import { z } from 'zod'\nimport { zAddress } from './zAddress.js'\nimport { zHex } from './zHex.js'\n\nexport const zStateOverrideSet = z.record(\n\tzAddress,\n\tz.strictObject({\n\t\tbalance: z.bigint().gte(0n).optional(),\n\t\tnonce: z.bigint().gte(0n).optional(),\n\t\tcode: zHex.optional(),\n\t\tstate: z.record(zHex, zHex).optional(),\n\t\tstateDiff: z.record(zHex, zHex).optional(),\n\t}),\n)\n","import { z } from 'zod'\nimport { zCallEvents } from '../common/zCallEvents.js'\nimport { zAddress } from '../internal/zod/zAddress.js'\nimport { zBlockOverrideSet } from '../internal/zod/zBlockOverrideSet.js'\nimport { zBlockParam } from '../internal/zod/zBlockParam.js'\nimport { zHex } from '../internal/zod/zHex.js'\nimport { zStateOverrideSet } from '../internal/zod/zStateOverrideSet.js'\nimport { zBaseParams } from './zBaseParams.js'\n\nexport const zBaseCallParams = zBaseParams\n\t.extend({\n\t\t...zCallEvents.shape,\n\t\tcreateTrace: z.boolean().optional().describe('If true, the call will also return a `trace` on the trace property'),\n\t\tcreateAccessList: z\n\t\t\t.boolean()\n\t\t\t.optional()\n\t\t\t.describe('If true, the call will also return a `accessList` on the accessList property'),\n\t\tcreateTransaction: z.union([\n\t\t\tz.boolean().optional().describe('If true, this call is a create transaction. Defaults to false.'),\n\t\t\tz.literal('on-success'),\n\t\t\tz.literal('always'),\n\t\t\tz.literal('never'),\n\t\t]),\n\t\taddToMempool: z.union([\n\t\t\tz.boolean().optional().describe('If true, this call adds the transaction to the mempool. Defaults to false.'),\n\t\t\tz.literal('on-success'),\n\t\t\tz.literal('always'),\n\t\t\tz.literal('never'),\n\t\t]),\n\t\taddToBlockchain: z.union([\n\t\t\tz.boolean().optional().describe('If true, this call adds the transaction to the blockchain. Defaults to false.'),\n\t\t\tz.literal('on-success'),\n\t\t\tz.literal('always'),\n\t\t\tz.literal('never'),\n\t\t]),\n\t\tskipBalance: z.boolean().optional().describe('Set caller to msg.value of less than msg.value Defaults to false.'),\n\t\tgasRefund: z.bigint().nonnegative().optional().describe('Refund counter. Defaults to 0'),\n\t\tblockTag: zBlockParam\n\t\t\t.optional()\n\t\t\t.describe('The block tag as a block number, block hash or one of \"latest\", \"earliest\", \"pending\" or \"safe\"'),\n\t\tgasPrice: z.bigint().optional().describe('The gas price for the call. Defaults to `0`'),\n\t\torigin: zAddress.optional().describe('The address where the call originated from. Defaults to the zero address.'),\n\t\tcaller: zAddress\n\t\t\t.optional()\n\t\t\t.describe('The address that ran this code (`msg.sender`). Defaults to the zero address.'),\n\t\tgas: z\n\t\t\t.bigint()\n\t\t\t.nonnegative()\n\t\t\t.optional()\n\t\t\t.describe('The gas limit for the call. Defaults to `16777215` (`0xffffff`)'),\n\t\tvalue: z\n\t\t\t.bigint()\n\t\t\t.nonnegative()\n\t\t\t.optional()\n\t\t\t.describe('The value in ether that is being sent to `opts.address`. Defaults to `0`'),\n\t\tdepth: z.number().nonnegative().optional().describe('The call depth. Defaults to `0`'),\n\t\tselfdestruct: z.set(zAddress).optional().describe('Addresses to selfdestruct. Defaults to the empty set.'),\n\t\tto: zAddress\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t'The address of the account that is executing this code (`address(this)`). Defaults to the zero address.',\n\t\t\t),\n\t\tblobVersionedHashes: z.array(zHex).optional().describe('Versioned hashes for each blob in a blob transaction'),\n\t\tstateOverrideSet: zStateOverrideSet.optional().describe('State override set for the call'),\n\t\tblockOverrideSet: zBlockOverrideSet.optional().describe('Block override set for the call'),\n\t\tmaxFeePerGas: z\n\t\t\t.bigint()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t'The maximum fee per gas for the call for an EIP-1559 tx. If not set it will be calculated based on the parent block.',\n\t\t\t),\n\t\tmaxPriorityFeePerGas: z\n\t\t\t.bigint()\n\t\t\t.optional()\n\t\t\t.describe('The maximum priority fee per gas for the call for an EIP-1559 tx.'),\n\t})\n\t.refine(\n\t\t(params) => {\n\t\t\t// Validate that addToMempool and addToBlockchain are not both set\n\t\t\tif (params.addToMempool !== undefined && params.addToBlockchain !== undefined) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t},\n\t\t{\n\t\t\tmessage: 'Cannot set both addToMempool and addToBlockchain simultaneously. Use one or the other.',\n\t\t},\n\t)\n\t.describe('Properties shared across call-like actions')\n","import {\n\tInvalidAddToBlockchainError,\n\tInvalidAddToMempoolError,\n\tInvalidBlobVersionedHashesError,\n\tInvalidBlockError,\n\tInvalidCallerError,\n\tInvalidDepthError,\n\tInvalidGasPriceError,\n\tInvalidGasRefundError,\n\tInvalidMaxFeePerGasError,\n\tInvalidMaxPriorityFeePerGasError,\n\tInvalidOriginError,\n\tInvalidParamsError,\n\tInvalidSelfdestructError,\n\tInvalidSkipBalanceError,\n\tInvalidToError,\n\tInvalidValueError,\n} from '@tevm/errors'\nimport { treeifyError } from 'zod'\nimport { zBaseCallParams } from './zBaseCallParams.js'\n\n// TODO we are missing some validation including stateOverrides\n\n/**\n * @typedef {InvalidParamsError| InvalidSkipBalanceError| InvalidGasRefundError| InvalidBlockError| InvalidGasPriceError| InvalidOriginError| InvalidCallerError| InvalidDepthError| InvalidBlobVersionedHashesError| InvalidAddToMempoolError| InvalidAddToBlockchainError} ValidateBaseCallParamsError\n */\n\n/**\n * @internal can break on a minor release\n * Validates that the parameters are correct with zod\n * @param {import('../BaseCall/BaseCallParams.js').BaseCallParams} action\n */\nexport const validateBaseCallParams = (action) => {\n\t/**\n\t * @type {Array<ValidateBaseCallParamsError>}\n\t */\n\tconst errors = []\n\n\tconst parsedParams = zBaseCallParams.safeParse(action)\n\n\tif (parsedParams.success === false) {\n\t\tconst formattedErrors = treeifyError(parsedParams.error)\n\n\t\t// Iterate over the general errors\n\t\tformattedErrors.errors.forEach((error) => {\n\t\t\terrors.push(new InvalidParamsError(error))\n\t\t})\n\n\t\t// Error handling for specific fields\n\t\tif (formattedErrors.properties?.skipBalance) {\n\t\t\tformattedErrors.properties.skipBalance.errors.forEach((error) => {\n\t\t\t\terrors.push(new InvalidSkipBalanceError(error))\n\t\t\t})\n\t\t}\n\n\t\tif (formattedErrors.properties?.gasRefund) {\n\t\t\tformattedErrors.properties.gasRefund.errors.forEach((error) => {\n\t\t\t\terrors.push(new InvalidGasRefundError(error))\n\t\t\t})\n\t\t}\n\n\t\tif (formattedErrors.properties?.blockTag) {\n\t\t\tformattedErrors.properties.blockTag.errors.forEach((error) => {\n\t\t\t\terrors.push(new InvalidBlockError(error))\n\t\t\t})\n\t\t}\n\n\t\tif (formattedErrors.properties?.gas) {\n\t\t\tformattedErrors.properties.gas.errors.forEach((error) => {\n\t\t\t\terrors.push(new InvalidGasPriceError(error))\n\t\t\t})\n\t\t}\n\n\t\tif (formattedErrors.properties?.origin) {\n\t\t\tformattedErrors.properties.origin.errors.forEach((error) => {\n\t\t\t\terrors.push(new InvalidOriginError(error))\n\t\t\t})\n\t\t}\n\n\t\tif (formattedErrors.properties?.caller) {\n\t\t\tformattedErrors.properties.caller.errors.forEach((error) => {\n\t\t\t\terrors.push(new InvalidCallerError(error))\n\t\t\t})\n\t\t}\n\n\t\tif (formattedErrors.properties?.gas) {\n\t\t\tformattedErrors.properties.gas.errors.forEach((error) => {\n\t\t\t\terrors.push(new InvalidGasPriceError(error))\n\t\t\t})\n\t\t}\n\n\t\tif (formattedErrors.properties?.value) {\n\t\t\tformattedErrors.properties.value.errors.forEach((error) => {\n\t\t\t\terrors.push(new InvalidValueError(error))\n\t\t\t})\n\t\t}\n\n\t\tif (formattedErrors.properties?.depth) {\n\t\t\tformattedErrors.properties.depth.errors.forEach((error) => {\n\t\t\t\terrors.push(new InvalidDepthError(error))\n\t\t\t})\n\t\t}\n\n\t\tif (formattedErrors.properties?.selfdestruct) {\n\t\t\tformattedErrors.properties.selfdestruct.errors.forEach((error) => {\n\t\t\t\terrors.push(new InvalidSelfdestructError(error))\n\t\t\t})\n\t\t}\n\n\t\tif (formattedErrors.properties?.to) {\n\t\t\tformattedErrors.properties.to.errors.forEach((error) => {\n\t\t\t\terrors.push(new InvalidToError(error))\n\t\t\t})\n\t\t}\n\n\t\tif (formattedErrors.properties?.blobVersionedHashes) {\n\t\t\tformattedErrors.properties.blobVersionedHashes.errors.forEach((error) => {\n\t\t\t\terrors.push(new InvalidBlobVersionedHashesError(error))\n\t\t\t})\n\t\t\tfor (const [key, value] of Object.entries(formattedErrors.properties?.blobVersionedHashes)) {\n\t\t\t\tif (key === 'errors') continue\n\t\t\t\tif (Array.isArray(value) && value.length > 0 && typeof value[0] === 'object' && 'errors' in value[0]) {\n\t\t\t\t\t// value is { errors: string[] }[]\n\t\t\t\t\tvalue.forEach((item) => {\n\t\t\t\t\t\tif (typeof item === 'object' && 'errors' in item) {\n\t\t\t\t\t\t\titem.errors.forEach((error) => {\n\t\t\t\t\t\t\t\terrors.push(new InvalidBlobVersionedHashesError(error))\n\t\t\t\t\t\t\t})\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}\n\n\t\tif (formattedErrors.properties?.maxFeePerGas) {\n\t\t\tformattedErrors.properties.maxFeePerGas.errors.forEach((error) => {\n\t\t\t\terrors.push(new InvalidMaxFeePerGasError(error))\n\t\t\t})\n\t\t}\n\n\t\tif (formattedErrors.properties?.maxPriorityFeePerGas) {\n\t\t\tformattedErrors.properties.maxPriorityFeePerGas.errors.forEach((error) => {\n\t\t\t\terrors.push(new InvalidMaxPriorityFeePerGasError(error))\n\t\t\t})\n\t\t}\n\n\t\tif (formattedErrors.properties?.addToMempool) {\n\t\t\tformattedErrors.properties.addToMempool.errors.forEach((error) => {\n\t\t\t\terrors.push(new InvalidAddToMempoolError(error))\n\t\t\t})\n\t\t}\n\n\t\tif (formattedErrors.properties?.addToBlockchain) {\n\t\t\tformattedErrors.properties.addToBlockchain.errors.forEach((error) => {\n\t\t\t\terrors.push(new InvalidAddToBlockchainError(error))\n\t\t\t})\n\t\t}\n\n\t\t// if we missed an error let's make sure we handle it here\n\t\t// THis is purely defensive\n\t\tif (errors.length === 0 && parsedParams.success === false) {\n\t\t\terrors.push(new InvalidParamsError(parsedParams.error.message))\n\t\t}\n\t}\n\n\treturn errors\n}\n","// Imported but not used in the code directly\nimport { z } from 'zod'\nimport { zBaseCallParams } from '../BaseCall/zBaseCallParams.js'\nimport { zHex } from '../internal/zod/zHex.js'\n\n/**\n * @internal\n * Zod validator for a valid call action\n */\nexport const zCallParams = z\n\t.intersection(\n\t\tzBaseCallParams,\n\t\tz.object({\n\t\t\tdata: zHex.optional().describe('the data to send'),\n\t\t\tsalt: zHex.optional().describe('the salt to use for the call'),\n\t\t\tcode: zHex.optional().describe('the encoded deployment code to use for the call'),\n\t\t\tdeployedBytecode: zHex\n\t\t\t\t.optional()\n\t\t\t\t.describe('the deployed bytecode to put into state. Use code if you want to encode the deployment code'),\n\t\t}),\n\t)\n\t.refine(\n\t\t(/** @type {any} */ params) => {\n\t\t\tif (params.code && params.deployedBytecode) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t},\n\t\t{ message: 'Cannot have both code and deployedBytecode set' },\n\t)\n\t.refine(\n\t\t(/** @type {any} */ params) => {\n\t\t\tif (params.createTransaction && params.stateOverrideSet) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif (params.createTransaction && params.blockOverrideSet) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t},\n\t\t{\n\t\t\tmessage: 'Cannot have stateOverrideSet or blockOverrideSet for createTransaction',\n\t\t},\n\t)\n\t.describe('Params to make a call to the tevm EVM')\n","import { InvalidBytecodeError, InvalidDataError, InvalidSaltError } from '@tevm/errors'\nimport { validateBaseCallParams } from '../BaseCall/validateBaseCallParams.js'\nimport { zCallParams } from './zCallParams.js'\n\n/**\n * @internal\n * @typedef {InvalidSaltError| InvalidDataError| InvalidBytecodeError | import('../BaseCall/validateBaseCallParams.js').ValidateBaseCallParamsError} ValidateCallParamsError\n */\n\n/**\n * @internal\n * @param {import('../Call/CallParams.js').CallParams} action\n */\nexport const validateCallParams = (action) => {\n\t/**\n\t * @type {Array<ValidateCallParamsError>}\n\t */\n\tconst errors = validateBaseCallParams(action)\n\n\tconst parsedParams = zCallParams.safeParse(action)\n\n\tif (parsedParams.success === false) {\n\t\tconst formattedErrors = parsedParams.error.format()\n\n\t\tif (formattedErrors.salt) {\n\t\t\tformattedErrors.salt._errors.forEach((/** @type {string} */ error) => {\n\t\t\t\terrors.push(new InvalidSaltError(error))\n\t\t\t})\n\t\t}\n\t\tif (formattedErrors.data) {\n\t\t\tformattedErrors.data._errors.forEach((/** @type {string} */ error) => {\n\t\t\t\terrors.push(new InvalidDataError(error))\n\t\t\t})\n\t\t}\n\t\tif (formattedErrors.code) {\n\t\t\tformattedErrors.code._errors.forEach((/** @type {string} */ error) => {\n\t\t\t\terrors.push(new InvalidBytecodeError(error))\n\t\t\t})\n\t\t}\n\t\tif (formattedErrors._errors) {\n\t\t\tformattedErrors._errors.forEach((/** @type {string} */ error) => {\n\t\t\t\terrors.push(new InvalidBytecodeError(error))\n\t\t\t})\n\t\t}\n\t}\n\n\treturn errors\n}\n","import { createAddress } from '@tevm/address'\nimport { numberToBytes } from 'viem'\nimport { createScript } from '../Contract/createScript.js'\nimport { getL1FeeInformationOpStack } from '../internal/getL1FeeInformationOpStack.js'\nimport { getPendingClient } from '../internal/getPendingClient.js'\nimport { maybeThrowOnFail } from '../internal/maybeThrowOnFail.js'\nimport { callHandlerOpts } from './callHandlerOpts.js'\nimport { callHandlerResult } from './callHandlerResult.js'\nimport { cloneVmWithBlockTag } from './cloneVmWithBlock.js'\nimport { executeCall } from './executeCall.js'\nimport { handlePendingTransactionsWarning } from './handlePendingTransactionsWarning.js'\nimport { handleStateOverrides } from './handleStateOverrides.js'\nimport { handleTransactionCreation } from './handleTransactionCreation.js'\nimport { validateCallParams } from './validateCallParams.js'\n\n/**\n * Creates a tree-shakable instance of [`client.tevmCall`](https://tevm.sh/reference/tevm/decorators/type-aliases/tevmactionsapi/#call) action.\n * This function is designed for use with TevmNode and the internal instance of TEVM,\n * and it is distinct from the viem API `tevmCall`.\n *\n * Note: This is the internal logic used by higher-level APIs such as `tevmCall`.\n *\n * @param {import('@tevm/node').TevmNode} client - The TEVM base client instance.\n * @param {object} [options] - Optional parameters.\n * @param {boolean} [options.throwOnFail=true] - Whether to throw an error on failure.\n * @returns {import('./CallHandlerType.js').CallHandler} The call handler function.\n * @throws {import('./TevmCallError.js').TevmCallError} If `throwOnFail` is true, returns `TevmCallError` as value.\n *\n * @example\n * ```typescript\n * import { createTevmNode } from 'tevm/node'\n * import { callHandler } from 'tevm/actions'\n *\n * const client = createTevmNode()\n *\n * const call = callHandler(client)\n *\n * // Add transaction to mempool (requires mining later)\n * const res = await call({\n *   addToMempool: true,\n *   to: `0x${'69'.repeat(20)}`,\n *   value: 420n,\n *   skipBalance: true,\n * })\n * await client.tevmMine()\n *\n * // Or add transaction to blockchain directly (automatically mines)\n * const autoMinedRes = await call({\n *   addToBlockchain: true,\n *   to: `0x${'69'.repeat(20)}`,\n *   value: 420n,\n *   skipBalance: true,\n * })\n * ```\n */\nexport const callHandler =\n\t(client, { throwOnFail: defaultThrowOnFail = true } = {}) =>\n\tasync ({ code, deployedBytecode, onStep, onNewContract, onBeforeMessage, onAfterMessage, ...params }) => {\n\t\tclient.logger.debug(params, 'callHandler: Executing call with params')\n\t\tconst validationErrors = validateCallParams(params)\n\t\tif (validationErrors.length > 0) {\n\t\t\tclient.logger.debug(validationErrors, 'Params do not pass validation')\n\t\t\treturn maybeThrowOnFail(params.throwOnFail ?? defaultThrowOnFail, {\n\t\t\t\terrors: validationErrors,\n\t\t\t\texecutionGasUsed: 0n,\n\t\t\t\t/**\n\t\t\t\t * @type {`0x${string}`}\n\t\t\t\t */\n\t\t\t\trawData: '0x',\n\t\t\t})\n\t\t}\n\t\tconst _params = {\n\t\t\t...params,\n\t\t}\n\n\t\tif (_params.blockTag === 'pending') {\n\t\t\tconst minePending = await getPendingClient(client)\n\t\t\tif (minePending.errors) {\n\t\t\t\tclient.logger.error(minePending.errors)\n\t\t\t\treturn maybeThrowOnFail(_params.throwOnFail ?? defaultThrowOnFail, {\n\t\t\t\t\terrors: minePending.errors,\n\t\t\t\t\texecutionGasUsed: 0n,\n\t\t\t\t\t/**\n\t\t\t\t\t * @type {`0x${string}`}\n\t\t\t\t\t */\n\t\t\t\t\trawData: '0x',\n\t\t\t\t})\n\t\t\t}\n\t\t\t// if we are creating a transaction we want to use the real txpool so the tx gets properly added\n\t\t\tif (\n\t\t\t\t_params.createTransaction ||\n\t\t\t\t_params.addToMempool ||\n\t\t\t\t_params.addToBlockchain ||\n\t\t\t\tclient.miningConfig.type === 'auto'\n\t\t\t) {\n\t\t\t\tconst pendingClientAny = /** @type {any}*/ (minePending.pendingClient)\n\t\t\t\tpendingClientAny.getTxPool = client.getTxPool\n\t\t\t}\n\t\t\treturn callHandler(minePending.pendingClient, {\n\t\t\t\tthrowOnFail: defaultThrowOnFail,\n\t\t\t})({\n\t\t\t\t...(code !== undefined ? { code } : {}),\n\t\t\t\t...(deployedBytecode !== undefined ? { deployedBytecode } : {}),\n\t\t\t\t..._params,\n\t\t\t\tblockTag: 'latest',\n\t\t\t})\n\t\t}\n\n\t\tconst callHandlerRes = await callHandlerOpts(client, _params)\n\t\tif (callHandlerRes.errors) {\n\t\t\treturn maybeThrowOnFail(_params.throwOnFail ?? defaultThrowOnFail, {\n\t\t\t\terrors: callHandlerRes.errors,\n\t\t\t\texecutionGasUsed: 0n,\n\t\t\t\trawData: /** @type {`0x${string}`}*/ ('0x'),\n\t\t\t})\n\t\t}\n\n\t\tconst evmInput = callHandlerRes.data\n\n\t\tconst block = /** @type {import('@tevm/block').Block}*/ (evmInput.block)\n\n\t\tawait handlePendingTransactionsWarning(client, params, code, deployedBytecode)\n\n\t\tconst vm = await cloneVmWithBlockTag(client, block)\n\t\tif (vm instanceof Error) {\n\t\t\treturn maybeThrowOnFail(_params.throwOnFail ?? defaultThrowOnFail, {\n\t\t\t\terrors: [vm],\n\t\t\t\texecutionGasUsed: 0n,\n\t\t\t\t/**\n\t\t\t\t * @type {`0x${string}`}\n\t\t\t\t */\n\t\t\t\trawData: '0x',\n\t\t\t})\n\t\t}\n\n\t\tconst stateOverrideResult = await handleStateOverrides(\n\t\t\t{ ...client, getVm: async () => vm },\n\t\t\tparams.stateOverrideSet,\n\t\t)\n\t\tif (stateOverrideResult.errors) {\n\t\t\treturn maybeThrowOnFail(_params.throwOnFail ?? defaultThrowOnFail, {\n\t\t\t\terrors: stateOverrideResult.errors,\n\t\t\t\texecutionGasUsed: 0n,\n\t\t\t\t/**\n\t\t\t\t * @type {`0x${string}`}\n\t\t\t\t */\n\t\t\t\trawData: '0x',\n\t\t\t})\n\t\t}\n\n\t\tconst scriptResult =\n\t\t\tcode || deployedBytecode\n\t\t\t\t? await createScript({ ...client, getVm: () => vm.ready().then(() => vm) }, code, deployedBytecode, _params.to)\n\t\t\t\t: { address: _params.to, errors: undefined }\n\t\tif (scriptResult.errors) {\n\t\t\tclient.logger.error(scriptResult.errors, 'contractHandler: Errors creating script')\n\t\t\treturn maybeThrowOnFail(_params.throwOnFail ?? defaultThrowOnFail, {\n\t\t\t\t// TODO type errors better in callHandler\n\t\t\t\terrors: /** @type {any}*/ (scriptResult.errors),\n\t\t\t\texecutionGasUsed: 0n,\n\t\t\t\t/**\n\t\t\t\t * @type {`0x${string}`}\n\t\t\t\t */\n\t\t\t\trawData: '0x',\n\t\t\t})\n\t\t}\n\n\t\tif (scriptResult.address !== undefined) {\n\t\t\t// TODO this isn't clean that we are mutating here\n\t\t\tevmInput.to = createAddress(scriptResult.address)\n\t\t\t_params.to = scriptResult.address\n\t\t}\n\n\t\tconst l1FeeInfoPromise =\n\t\t\tvm.common.sourceId !== undefined\n\t\t\t\t? getL1FeeInformationOpStack(evmInput.data ?? numberToBytes(0), vm).catch((e) => {\n\t\t\t\t\t\tclient.logger.warn(e, 'Unable to get l1 fee estimation')\n\t\t\t\t\t\treturn {}\n\t\t\t\t\t})\n\t\t\t\t: Promise.resolve({})\n\n\t\tclient.logger.debug(\n\t\t\t{\n\t\t\t\tto: evmInput.to?.toString(),\n\t\t\t\torigin: evmInput.origin?.toString(),\n\t\t\t\tcaller: evmInput.caller?.toString(),\n\t\t\t\tvalue: evmInput.value?.toString(),\n\t\t\t\tgasLimit: evmInput.gasLimit?.toString(),\n\t\t\t\tdata: evmInput.data,\n\t\t\t},\n\t\t\t'callHandler: Executing runCall with params',\n\t\t)\n\n\t\t// Extract event handlers from original params to pass to executeCall\n\t\t// Only include event handlers that are defined to match CallEvents type\n\t\t/** @type {import('../common/CallEvents.js').CallEvents} */\n\t\tconst eventHandlers = {}\n\t\tif (onStep) eventHandlers.onStep = onStep\n\t\tif (onNewContract) eventHandlers.onNewContract = onNewContract\n\t\tif (onBeforeMessage) eventHandlers.onBeforeMessage = onBeforeMessage\n\t\tif (onAfterMessage) eventHandlers.onAfterMessage = onAfterMessage\n\t\tconst executedCall = await executeCall(\n\t\t\t{ ...client, getVm: () => Promise.resolve(vm) },\n\t\t\tevmInput,\n\t\t\t_params,\n\t\t\teventHandlers,\n\t\t)\n\n\t\t// In such case executeCall failed to execute the transaction and threw an unrecoverable error\n\t\tif (!('runTxResult' in executedCall)) {\n\t\t\treturn maybeThrowOnFail(_params.throwOnFail ?? defaultThrowOnFail, {\n\t\t\t\texecutionGasUsed: /** @type {any}*/ 0n, // transaction was not executed\n\t\t\t\trawData: /** @type {`0x${string}`}*/ ('0x'),\n\t\t\t\terrors: executedCall.errors,\n\t\t\t\t...('trace' in executedCall && executedCall.trace !== undefined ? { trace: executedCall.trace } : {}),\n\t\t\t})\n\t\t}\n\n\t\t// If there is a result, the errors will be runtime evm errors and we might want to still include the transaction\n\t\tconst txResult = await handleTransactionCreation(client, params, executedCall, evmInput)\n\n\t\t// Normal path for execution errors (e.g. revert)\n\t\tif ('runTxResult' in executedCall && (executedCall.errors || txResult.errors)) {\n\t\t\treturn maybeThrowOnFail(_params.throwOnFail ?? defaultThrowOnFail, {\n\t\t\t\t...(vm.common.sourceId !== undefined ? await l1FeeInfoPromise : {}),\n\t\t\t\t...callHandlerResult(executedCall.runTxResult, txResult.hash, executedCall.trace, executedCall.accessList),\n\t\t\t\terrors: /** @type {any}*/ (executedCall.errors ?? txResult.errors),\n\t\t\t})\n\t\t}\n\n\t\treturn maybeThrowOnFail(_params.throwOnFail ?? defaultThrowOnFail, {\n\t\t\t...(vm.common.sourceId !== undefined ? await l1FeeInfoPromise : {}),\n\t\t\t...callHandlerResult(executedCall.runTxResult, txResult.hash, executedCall.trace, executedCall.accessList),\n\t\t})\n\t}\n","import { Abi } from 'abitype/zod'\n\n/**\n * Zod validator for a valid ABI\n */\nexport const zAbi = Abi.describe('A valid ABI')\n","// Imported but not used in the code directly\nimport { z } from 'zod'\nimport { zBaseCallParams } from '../BaseCall/zBaseCallParams.js'\nimport { zAbi } from '../internal/zod/zAbi.js'\nimport { zAddress } from '../internal/zod/zAddress.js'\nimport { zHex } from '../internal/zod/zHex.js'\n\n/**\n * Zod validator for a valid contract action\n */\nexport const zContractParams = z\n\t.intersection(\n\t\tzBaseCallParams,\n\t\tz.object({\n\t\t\tto: zAddress.optional().describe('The required address of the contract to call'),\n\t\t\tabi: zAbi.describe('The abi of the contract'),\n\t\t\targs: z.array(z.any()).optional().describe('The arguments to pass to the function'),\n\t\t\tfunctionName: z.string().describe('The name of the function to call'),\n\t\t\tcode: zHex.optional().describe('the encoded bytecode to use for the call'),\n\t\t\tdeployedBytecode: zHex\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t'deployed bytecode to put into state for contract. If you want to run a constructor use code instead',\n\t\t\t\t),\n\t\t}),\n\t)\n\t.refine(\n\t\t(/** @type {any} */ params) => {\n\t\t\tif (!params.code && !params.to && !params.deployedBytecode) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t},\n\t\t{\n\t\t\tmessage: 'Must have either code or to',\n\t\t},\n\t)\n\t.refine(\n\t\t(/** @type {any} */ params) => {\n\t\t\tif (params.createTransaction && params.stateOverrideSet) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tif (params.createTransaction && params.blockOverrideSet) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t},\n\t\t{\n\t\t\tmessage: 'Cannot have stateOverrideSet or blockOverrideSet for createTransaction',\n\t\t},\n\t)\n\t.describe('Params to execute a contract method in the tevm EVM')\n","import {\n\tInvalidAbiError,\n\tInvalidAddressError,\n\tInvalidArgsError,\n\tInvalidBytecodeError,\n\tInvalidFunctionNameError,\n\tInvalidParamsError,\n} from '@tevm/errors'\nimport { validateBaseCallParams } from '../BaseCall/validateBaseCallParams.js'\nimport { zContractParams } from './zContractParams.js'\n\n/**\n * @typedef {InvalidAbiError| InvalidAddressError| InvalidArgsError| InvalidFunctionNameError | import('../BaseCall/validateBaseCallParams.js').ValidateBaseCallParamsError} ValidateContractParamsError\n */\n\n/**\n * @param {import('./ContractParams.js').ContractParams} action\n * @returns {Array<ValidateContractParamsError>}\n */\nexport const validateContractParams = (action) => {\n\t/**\n\t * @type {Array<ValidateContractParamsError>}\n\t */\n\tconst errors = validateBaseCallParams(action)\n\n\tconst parsedParams = zContractParams.safeParse(action)\n\n\tif (parsedParams.success === false) {\n\t\tconst formattedErrors = parsedParams.error.format()\n\t\tif (formattedErrors._errors) {\n\t\t\tformattedErrors._errors.forEach((/** @type {string} */ error) => {\n\t\t\t\terrors.push(new InvalidParamsError(error))\n\t\t\t})\n\t\t}\n\t\tif (formattedErrors.code) {\n\t\t\tformattedErrors.code._errors.forEach((/** @type {string} */ error) => {\n\t\t\t\terrors.push(new InvalidBytecodeError(error))\n\t\t\t})\n\t\t}\n\t\tif (formattedErrors.deployedBytecode) {\n\t\t\tformattedErrors.deployedBytecode._errors.forEach((/** @type {string} */ error) => {\n\t\t\t\terrors.push(new InvalidBytecodeError(error))\n\t\t\t})\n\t\t}\n\t\tif (formattedErrors.abi) {\n\t\t\tformattedErrors.abi._errors.forEach((/** @type {string} */ error) => {\n\t\t\t\terrors.push(new InvalidAbiError(error))\n\t\t\t})\n\t\t}\n\t\tif (formattedErrors.args) {\n\t\t\tformattedErrors.args._errors.forEach((/** @type {string} */ error) => {\n\t\t\t\terrors.push(new InvalidArgsError(error))\n\t\t\t})\n\t\t}\n\t\tif (formattedErrors.functionName) {\n\t\t\tformattedErrors.functionName._errors.forEach((/** @type {string} */ error) => {\n\t\t\t\terrors.push(new InvalidFunctionNameError(error))\n\t\t\t})\n\t\t}\n\t\tif (formattedErrors.to) {\n\t\t\tformattedErrors.to._errors.forEach((/** @type {string} */ error) => {\n\t\t\t\terrors.push(new InvalidAddressError(error))\n\t\t\t})\n\t\t}\n\t}\n\n\treturn errors\n}\n","import { createAddress } from '@tevm/address'\nimport { DecodeFunctionDataError, InvalidRequestError, RevertError } from '@tevm/errors'\nimport { decodeFunctionResult, encodeFunctionData, isHex } from '@tevm/utils'\nimport { getContractError, RawContractError } from 'viem'\nimport { callHandler } from '../Call/callHandler.js'\nimport { maybeThrowOnFail } from '../internal/maybeThrowOnFail.js'\nimport { validateContractParams } from './validateContractParams.js'\n\n/**\n * Creates a tree-shakable instance of `contractHandler` for handling contract interactions with the Ethereumjs EVM.\n * This function uses `callHandler` under the hood to execute contract calls.\n *\n * Note: This is the internal logic used by higher-level APIs such as `tevmContract`.\n *\n * @param {import('@tevm/node').TevmNode} client - The TEVM base client instance.\n * @param {object} [options] - Optional parameters.\n * @param {boolean} [options.throwOnFail=true] - Whether to throw an error on failure.\n * @returns {import(\"../Contract/ContractHandlerType.js\").ContractHandler} The contract handler function.\n * @throws {import('./TevmCallError.js').TevmCallError} If `throwOnFail` is true, returns `TevmCallError` as value.\n *\n * @example\n * ```typescript\n * import { createTevmNode } from 'tevm/node'\n * import { contractHandler } from 'tevm/actions'\n *\n * const client = createTevmNode()\n *\n * const contract = contractHandler(client)\n *\n * const res = await contract({\n *   to: `0x${'69'.repeat(20)}`,\n *   abi: [{...}], // ABI array\n *   functionName: 'myFunction',\n *   args: [1, 2, 3],\n * })\n * ```\n */\nexport const contractHandler =\n\t(client, { throwOnFail: throwOnFailDefault = true } = {}) =>\n\tasync (params) => {\n\t\tconst errors = validateContractParams(/** @type any*/ (params))\n\t\tif (errors.length > 0) {\n\t\t\tclient.logger.debug(errors, 'contractHandler: Invalid params')\n\t\t\treturn maybeThrowOnFail(params.throwOnFail ?? throwOnFailDefault, {\n\t\t\t\terrors,\n\t\t\t\texecutionGasUsed: 0n,\n\t\t\t\trawData: '0x',\n\t\t\t})\n\t\t}\n\t\tconst vm = await client.getVm()\n\n\t\tconst contract = params.to && (await vm.evm.stateManager.getCode(createAddress(params.to)))\n\t\tconst precompile = params.to && vm.evm.getPrecompile(createAddress(params.to))\n\t\tif (!params.deployedBytecode && !params.code && contract && contract?.length === 0 && !precompile) {\n\t\t\tclient.logger.debug(\n\t\t\t\t{ contract, precompile, to: params.to },\n\t\t\t\t'contractHandler: No contract bytecode nor precompile was found at specified `to` address. Unable to execute contract call.',\n\t\t\t)\n\t\t\treturn maybeThrowOnFail(params.throwOnFail ?? throwOnFailDefault, {\n\t\t\t\trawData: '0x',\n\t\t\t\texecutionGasUsed: 0n,\n\t\t\t\terrors: [\n\t\t\t\t\t{\n\t\t\t\t\t\t_tag: 'InvalidRequestError',\n\t\t\t\t\t\tname: 'InvalidRequestError',\n\t\t\t\t\t\tmessage: `Contract at address ${params.to} does not exist`,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t})\n\t\t}\n\n\t\tlet functionData\n\t\ttry {\n\t\t\tfunctionData = encodeFunctionData(\n\t\t\t\t/** @type {any} */ ({\n\t\t\t\t\tabi: params.abi,\n\t\t\t\t\tfunctionName: params.functionName,\n\t\t\t\t\targs: params.args,\n\t\t\t\t}),\n\t\t\t)\n\t\t} catch (e) {\n\t\t\tclient.logger.debug(e, 'contractHandler: Unable to encode the abi, functionName, and args into hex data')\n\t\t\tconst cause = /** @type {Error}*/ (e)\n\t\t\tconst err = new InvalidRequestError(cause.message, { cause })\n\t\t\treturn maybeThrowOnFail(params.throwOnFail ?? throwOnFailDefault, {\n\t\t\t\trawData: '0x',\n\t\t\t\texecutionGasUsed: 0n,\n\t\t\t\terrors: [err],\n\t\t\t})\n\t\t}\n\n\t\tclient.logger.debug(\n\t\t\t{ functionData },\n\t\t\t'contractHandler: Encoded data, functionName, and args into hex data to execute call',\n\t\t)\n\n\t\tconst result = await callHandler(client, {\n\t\t\tthrowOnFail: throwOnFailDefault,\n\t\t})({\n\t\t\t...params,\n\t\t\tthrowOnFail: false,\n\t\t\tdata: functionData,\n\t\t})\n\n\t\tif (result.errors && result.errors.length > 0) {\n\t\t\tresult.errors = result.errors.map((err) => {\n\t\t\t\tif (isHex(result.rawData) && err instanceof RevertError) {\n\t\t\t\t\tclient.logger.debug(err, 'contractHandler: Contract revert error. Decoding the error')\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (!params.functionName) throw err // we can't decode the error so we'll just return the raw data\n\t\t\t\t\t\t// Create a raw contract error in a format friendly to getContractError, which will also create a sensible causality chain\n\t\t\t\t\t\tconst rawContractError = new RawContractError({ data: result.rawData })\n\t\t\t\t\t\tconst contractError = getContractError(rawContractError, {\n\t\t\t\t\t\t\tabi: /** @type {import('@tevm/utils').Abi} */ (params.abi),\n\t\t\t\t\t\t\targs: params.args,\n\t\t\t\t\t\t\taddress: params.to,\n\t\t\t\t\t\t\tdocsPath: err.docsPath,\n\t\t\t\t\t\t\tfunctionName: params.functionName,\n\t\t\t\t\t\t\tsender: params.caller ?? params.origin,\n\t\t\t\t\t\t})\n\n\t\t\t\t\t\tconst message = contractError.message\n\t\t\t\t\t\tclient.logger.debug(err, message)\n\t\t\t\t\t\treturn new RevertError(message, { cause: contractError })\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tclient.logger.debug(e, 'There was an error decoding error result')\n\t\t\t\t\t\treturn new RevertError(err.message, { cause: err, raw: result.rawData })\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn err\n\t\t\t})\n\t\t\tclient.logger.debug(result.errors, 'contractHandler: Execution errors')\n\t\t\treturn maybeThrowOnFail(params.throwOnFail ?? throwOnFailDefault, result)\n\t\t}\n\n\t\tlet decodedResult\n\t\ttry {\n\t\t\tdecodedResult = decodeFunctionResult(\n\t\t\t\t/** @type {any} */ ({\n\t\t\t\t\tabi: params.abi,\n\t\t\t\t\tdata: result.rawData,\n\t\t\t\t\tfunctionName: params.functionName,\n\t\t\t\t}),\n\t\t\t)\n\t\t} catch (e) {\n\t\t\tif (result.rawData === '0x') {\n\t\t\t\treturn maybeThrowOnFail(params.throwOnFail ?? throwOnFailDefault, {\n\t\t\t\t\terrors: [\n\t\t\t\t\t\tnew Error(\n\t\t\t\t\t\t\t'0x data returned from EVM with no error message. This indicates a the contract was missing or bug in Tevm if no other errors were thrown',\n\t\t\t\t\t\t),\n\t\t\t\t\t],\n\t\t\t\t\trawData: '0x',\n\t\t\t\t\texecutionGasUsed: 0n,\n\t\t\t\t})\n\t\t\t}\n\t\t\tclient.logger.debug(e, 'contractHandler: Error decoding returned call data with provided abi and functionName')\n\t\t\tconst cause = /** @type {Error}*/ (e)\n\t\t\tconst err = new DecodeFunctionDataError(cause.message, { cause })\n\t\t\treturn maybeThrowOnFail(params.throwOnFail ?? throwOnFailDefault, {\n\t\t\t\tdebugContext: {\n\t\t\t\t\tabi: params.abi,\n\t\t\t\t\trawData: result.rawData,\n\t\t\t\t\tfunctionName: params.functionName,\n\t\t\t\t},\n\t\t\t\trawData: '0x',\n\t\t\t\texecutionGasUsed: 0n,\n\t\t\t\terrors: [err],\n\t\t\t})\n\t\t}\n\n\t\tclient.logger.debug(decodedResult, 'contractHandler: decoded data into a final result')\n\n\t\treturn maybeThrowOnFail(params.throwOnFail ?? throwOnFailDefault, {\n\t\t\t.../** @type any */ (result),\n\t\t\tdata: decodedResult,\n\t\t})\n\t}\n","import { decodeAbiParameters, hexToString, toFunctionSelector } from 'viem'\n\n/**\n * Decodes basic revert data similar to Anvil's approach\n * @param {import('@tevm/utils').Hex | string | undefined} data - The revert data\n * @returns {string} - The decoded reason or 'execution reverted' if not decodable\n */\n// TODO: replace with ox utils once (if) shipped (ExecutionError/EVMError)\n// https://github.com/wevm/ox/discussions/83\nexport const decodeRevertReason = (data) => {\n\tif (!data || data === '0x') return 'execution reverted'\n\t/** @type {import('viem').Hex} */\n\tconst hexData =\n\t\ttypeof data === 'string' && data.startsWith('0x')\n\t\t\t? /** @type {import('viem').Hex} */ (data)\n\t\t\t: /** @type {import('viem').Hex} */ (`0x${data}`)\n\n\t// Handle short or malformed data early\n\tconst cleanHex = hexData.slice(2)\n\tif (cleanHex.length === 0 || cleanHex.length % 2 !== 0 || cleanHex.length < 8) {\n\t\treturn 'execution reverted'\n\t}\n\n\tconst ERROR_SELECTOR = toFunctionSelector('Error(string)')\n\tconst PANIC_SELECTOR = toFunctionSelector('Panic(uint256)')\n\n\t// 1. Try Error(string) decoding\n\tif (hexData.toLowerCase().startsWith(ERROR_SELECTOR)) {\n\t\ttry {\n\t\t\tconst reason = decodeAbiParameters([{ type: 'string' }], `0x${hexData.slice(10)}`)[0]\n\t\t\tif (typeof reason === 'string' && reason.length > 0) {\n\t\t\t\treturn `execution reverted: ${reason}`\n\t\t\t}\n\t\t\t// Empty string case\n\t\t\treturn 'execution reverted'\n\t\t} catch {\n\t\t\t// Malformed Error selector data\n\t\t\treturn 'execution reverted'\n\t\t}\n\t}\n\n\t// 2. Try Panic(uint256) decoding\n\tif (hexData.startsWith(PANIC_SELECTOR)) {\n\t\ttry {\n\t\t\tconst code = decodeAbiParameters([{ type: 'uint256' }], `0x${hexData.slice(10)}`)[0]\n\t\t\treturn `execution reverted: Panic(${code.toString()})`\n\t\t} catch {\n\t\t\t// Malformed Panic selector - continue to next step\n\t\t}\n\t}\n\n\t// 3. Try ASCII string decoding before custom error detection\n\ttry {\n\t\tconst decoded = hexToString(hexData)\n\t\tif (/^[\\x20-\\x7E]*$/.test(decoded) && decoded.trim().length > 0) {\n\t\t\treturn `execution reverted: ${decoded.trim()}`\n\t\t}\n\t} catch {}\n\n\t// 4. Custom error handling (requires valid 4-byte selector AND additional data)\n\tif (cleanHex.length > 8) {\n\t\t// More than just a 4-byte selector\n\t\tconst selector = hexData.slice(0, 10)\n\t\tconst errorData = /** @type {import('viem').Hex} */ (`0x${hexData.slice(10)}`)\n\n\t\t// Try UTF-8 first, fallback to hex\n\t\ttry {\n\t\t\tconst utf8 = hexToString(errorData)\n\t\t\tif (/^[\\x20-\\x7E]*$/.test(utf8) && utf8.trim()) {\n\t\t\t\treturn `execution reverted: custom error ${selector}: ${utf8.trim()}`\n\t\t\t}\n\t\t} catch {}\n\t\t// Fallback to hex representation\n\t\treturn `execution reverted: custom error ${selector}: ${errorData}`\n\t}\n\n\t// 5. Final fallback: show as hex (including 4-byte selectors with no data)\n\treturn `execution reverted: custom error ${hexData}`\n}\n","import { hexToBigInt } from '@tevm/utils'\n\n/**\n * @param {import('@tevm/utils').Hex | import('@tevm/utils').BlockTag} blockTag\n * @returns {bigint | import('@tevm/utils').Hex | import('@tevm/utils').BlockTag}\n */\nexport const parseBlockTag = (blockTag) => {\n\tconst blockHashLength = 64 + '0x'.length\n\tconst isBlockNumber = typeof blockTag === 'string' && blockTag.startsWith('0x') && blockTag.length !== blockHashLength\n\tif (isBlockNumber) {\n\t\treturn hexToBigInt(/** @type {import('@tevm/utils').Hex}*/ (blockTag))\n\t}\n\treturn blockTag\n}\n","import { RevertError } from '@tevm/errors'\nimport { hexToBigInt, numberToHex } from '@tevm/utils'\nimport { decodeRevertReason } from '../internal/decodeRevertReason.js'\nimport { parseBlockTag } from '../utils/parseBlockTag.js'\nimport { callHandler } from './callHandler.js'\n\n/**\n * Creates a Call JSON-RPC Procedure for handling call requests with Ethereumjs EVM\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./CallJsonRpcProcedure.js').CallJsonRpcProcedure}\n */\nexport const callProcedure = (client) => async (request) => {\n\tconst { errors = [], ...result } = await callHandler(client)({\n\t\tthrowOnFail: false,\n\t\t...(request.params[1]\n\t\t\t? {\n\t\t\t\t\tstateOverrideSet: Object.fromEntries(\n\t\t\t\t\t\tObject.entries(request.params[1]).map(([address, state]) => [\n\t\t\t\t\t\t\taddress,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t...(state.code ? { code: state.code } : {}),\n\t\t\t\t\t\t\t\t...(state.balance ? { balance: hexToBigInt(state.balance) } : {}),\n\t\t\t\t\t\t\t\t...(state.nonce ? { nonce: hexToBigInt(state.nonce) } : {}),\n\t\t\t\t\t\t\t\t...(state.state ? { state: state.state } : {}),\n\t\t\t\t\t\t\t\t...(state.stateDiff ? { stateDiff: state.stateDiff } : {}),\n\t\t\t\t\t\t\t},\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...(request.params[2]\n\t\t\t? {\n\t\t\t\t\tblockOverrideSet: {\n\t\t\t\t\t\t...(request.params[2].blobBaseFee ? { blobBaseFee: hexToBigInt(request.params[2].blobBaseFee) } : {}),\n\t\t\t\t\t\t...(request.params[2].baseFee ? { baseFee: hexToBigInt(request.params[2].baseFee) } : {}),\n\t\t\t\t\t\t...(request.params[2].gasLimit ? { gasLimit: hexToBigInt(request.params[2].gasLimit) } : {}),\n\t\t\t\t\t\t...(request.params[2].coinbase ? { coinbase: request.params[2].coinbase } : {}),\n\t\t\t\t\t\t...(request.params[2].time ? { time: hexToBigInt(request.params[2].time) } : {}),\n\t\t\t\t\t\t...(request.params[2].number ? { number: hexToBigInt(request.params[2].number) } : {}),\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t: {}),\n\t\t...(request.params[0].code ? { code: request.params[0].code } : {}),\n\t\t...(request.params[0].data ? { data: request.params[0].data } : {}),\n\t\t...(request.params[0].deployedBytecode ? { deployedBytecode: request.params[0].deployedBytecode } : {}),\n\t\t...(request.params[0].createTrace ? { createTrace: request.params[0].createTrace } : {}),\n\t\t...(request.params[0].createAccessList ? { createAccessList: request.params[0].createAccessList } : {}),\n\t\t...(request.params[0].blobVersionedHashes ? { blobVersionedHashes: request.params[0].blobVersionedHashes } : {}),\n\t\t...(request.params[0].caller ? { caller: request.params[0].caller } : {}),\n\t\t...(request.params[0].depth ? { depth: request.params[0].depth } : {}),\n\t\t...(request.params[0].gasPrice ? { gasPrice: hexToBigInt(request.params[0].gasPrice) } : {}),\n\t\t...(request.params[0].gas ? { gas: hexToBigInt(request.params[0].gas) } : {}),\n\t\t...(request.params[0].gasRefund ? { gasRefund: hexToBigInt(request.params[0].gasRefund) } : {}),\n\t\t...(request.params[0].origin ? { origin: request.params[0].origin } : {}),\n\t\t...(request.params[0].salt ? { salt: request.params[0].salt } : {}),\n\t\t...(request.params[0].selfdestruct ? { selfdestruct: new Set(request.params[0].selfdestruct) } : {}),\n\t\t...(request.params[0].skipBalance ? { skipBalance: request.params[0].skipBalance } : {}),\n\t\t...(request.params[0].to ? { to: request.params[0].to } : {}),\n\t\t...(request.params[0].value ? { value: hexToBigInt(request.params[0].value) } : {}),\n\t\t...(request.params[0].blockTag ? { blockTag: parseBlockTag(request.params[0].blockTag) } : {}),\n\t\t...(request.params[0].createTransaction !== undefined\n\t\t\t? { createTransaction: request.params[0].createTransaction }\n\t\t\t: {}),\n\t\t...(request.params[0].addToMempool !== undefined ? { addToMempool: request.params[0].addToMempool } : {}),\n\t\t...(request.params[0].addToBlockchain !== undefined ? { addToBlockchain: request.params[0].addToBlockchain } : {}),\n\t\t...(request.params[0].from ? { from: request.params[0].from } : {}),\n\t\t...(request.params[0].maxFeePerGas ? { maxFeePerGas: hexToBigInt(request.params[0].maxFeePerGas) } : {}),\n\t\t...(request.params[0].maxPriorityFeePerGas\n\t\t\t? { maxPriorityFeePerGas: hexToBigInt(request.params[0].maxPriorityFeePerGas) }\n\t\t\t: {}),\n\t\t...(request.params[0].nonce ? { nonce: hexToBigInt(request.params[0].nonce) } : {}),\n\t})\n\tif (errors.length > 0) {\n\t\tconst error = /** @type {import('./TevmCallError.js').TevmCallError}*/ (errors[0])\n\n\t\t// Decode the reason if it's a revert\n\t\tlet message = error.message\n\t\tif (error.code === RevertError.code) {\n\t\t\tmessage = decodeRevertReason(result.rawData)\n\t\t}\n\n\t\treturn {\n\t\t\tjsonrpc: '2.0',\n\t\t\terror: {\n\t\t\t\tcode: error.code,\n\t\t\t\tmessage,\n\t\t\t\tdata: {\n\t\t\t\t\tdata: result.rawData,\n\t\t\t\t\terrors: errors.map(({ message }) => message),\n\t\t\t\t},\n\t\t\t},\n\t\t\tmethod: 'tevm_call',\n\t\t\t...(request.id === undefined ? {} : { id: request.id }),\n\t\t}\n\t}\n\n\t/**\n\t * @type {Record<`0x${string}`, Array<import('@tevm/utils').Hex>> | undefined}\n\t */\n\tconst accessList =\n\t\tresult.accessList !== undefined\n\t\t\t? Object.fromEntries(Object.entries(result.accessList).map(([key, value]) => [key, [...value]]))\n\t\t\t: undefined\n\n\t/**\n\t * @param {bigint} value\n\t * @returns {import('@tevm/utils').Hex}\n\t */\n\tconst toHex = (value) => /**@type {import('@tevm/utils').Hex}*/ (numberToHex(value))\n\t/**\n\t * @type {import('./CallJsonRpcResponse.js').CallJsonRpcResponse}\n\t */\n\tconst out = {\n\t\tjsonrpc: '2.0',\n\t\tresult: {\n\t\t\texecutionGasUsed: toHex(result.executionGasUsed),\n\t\t\trawData: result.rawData,\n\t\t\t...(result.selfdestruct ? { selfdestruct: [...result.selfdestruct] } : {}),\n\t\t\t...(result.gasRefund ? { gasRefund: toHex(result.gasRefund) } : {}),\n\t\t\t...(result.gas ? { gas: toHex(result.gas) } : {}),\n\t\t\t...(result.logs ? { logs: result.logs } : {}),\n\t\t\t...(result.txHash ? { txHash: result.txHash } : {}),\n\t\t\t...(result.blobGasUsed ? { blobGasUsed: toHex(result.blobGasUsed) } : {}),\n\t\t\t...(accessList !== undefined ? { accessList } : {}),\n\t\t\t...(result.preimages ? { preimages: result.preimages } : {}),\n\t\t\t...(result.l1Fee ? { l1Fee: numberToHex(result.l1Fee) } : {}),\n\t\t\t...(result.l1BaseFee ? { l1BaseFee: numberToHex(result.l1BaseFee) } : {}),\n\t\t\t...(result.l1BlobFee ? { l1BlobFee: numberToHex(result.l1BlobFee) } : {}),\n\t\t\t...(result.l1GasUsed ? { l1GasUsed: numberToHex(result.l1GasUsed) } : {}),\n\t\t\t...(result.amountSpent ? { amountSpent: numberToHex(result.amountSpent) } : {}),\n\t\t\t...(result.baseFee ? { baseFee: numberToHex(result.baseFee) } : {}),\n\t\t\t...(result.totalGasSpent ? { totalGasSpent: numberToHex(result.totalGasSpent) } : {}),\n\t\t\t...(result.trace\n\t\t\t\t? {\n\t\t\t\t\t\ttrace: {\n\t\t\t\t\t\t\t...result.trace,\n\t\t\t\t\t\t\tgas: toHex(result.trace.gas),\n\t\t\t\t\t\t\tstructLogs: result.trace.structLogs.map((log) => ({\n\t\t\t\t\t\t\t\t...log,\n\t\t\t\t\t\t\t\tgas: toHex(log.gas),\n\t\t\t\t\t\t\t\tgasCost: toHex(log.gasCost),\n\t\t\t\t\t\t\t\tstack: [...log.stack],\n\t\t\t\t\t\t\t})),\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t: {}),\n\t\t\t...(result.createdAddress ? { createdAddress: result.createdAddress } : {}),\n\t\t\t...(result.createdAddresses ? { createdAddresses: [...result.createdAddresses] } : {}),\n\t\t},\n\t\tmethod: 'tevm_call',\n\t\t...(request.id === undefined ? {} : { id: request.id }),\n\t}\n\n\treturn out\n}\n","import { callProcedure } from '../Call/callProcedure.js'\n\n/**\n * Creates an access list for a transaction.\n * Returns list of addresses and storage keys that the transaction plans to access.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./EthProcedure.js').EthCreateAccessListJsonRpcProcedure}\n */\nexport const ethCreateAccessListProcedure = (client) => async (req) => {\n\tconst [tx, blockTag] = req.params\n\tconst { data, from, to, gas, gasPrice, value } = tx\n\tconst response = await callProcedure(client)({\n\t\t...(req.id !== undefined ? { id: req.id } : {}),\n\t\tjsonrpc: req.jsonrpc,\n\t\tmethod: 'tevm_call',\n\t\tparams: [\n\t\t\t{\n\t\t\t\t...(gasPrice !== undefined ? { gasPrice } : {}),\n\t\t\t\t...(data !== undefined ? { data } : {}),\n\t\t\t\t...(gas !== undefined ? { gas } : {}),\n\t\t\t\t...(value !== undefined ? { value } : {}),\n\t\t\t\t...(to !== undefined ? { to } : {}),\n\t\t\t\t...(from !== undefined ? { from } : {}),\n\t\t\t\t...(blockTag !== undefined ? { blockTag } : {}),\n\t\t\t\tcreateAccessList: true,\n\t\t\t},\n\t\t],\n\t})\n\n\tif (!response.result || !response.result.accessList) {\n\t\t/**\n\t\t * @type {import('./EthJsonRpcResponse.js').EthCreateAccessListJsonRpcResponse}\n\t\t */\n\t\tconst out = {\n\t\t\tjsonrpc: req.jsonrpc,\n\t\t\tmethod: 'eth_createAccessList',\n\t\t\terror: response.error ?? { code: -32000, message: 'Failed to create access list' },\n\t\t\t...(req.id !== undefined ? { id: req.id } : {}),\n\t\t}\n\t\treturn out\n\t}\n\n\t// Convert the accessList from Record<Address, Set<Hex>> to the expected format\n\tconst formattedAccessList = Object.entries(response.result.accessList).map(([address, storageKeys]) => ({\n\t\taddress: /** @type {import('abitype').Address}*/ (address),\n\t\tstorageKeys: Array.from(storageKeys),\n\t}))\n\n\treturn {\n\t\tjsonrpc: req.jsonrpc,\n\t\tmethod: 'eth_createAccessList',\n\t\tresult: {\n\t\t\taccessList: formattedAccessList,\n\t\t\tgasUsed: response.result.totalGasSpent ?? '0x0',\n\t\t},\n\t\t...(req.id !== undefined ? { id: req.id } : {}),\n\t}\n}\n","import { createAddress } from '@tevm/address'\nimport { ForkError, InternalError } from '@tevm/errors'\nimport { bytesToHex, hexToBytes } from '@tevm/utils'\nimport { cloneVmWithBlockTag } from '../Call/cloneVmWithBlock.js'\nimport { getPendingClient } from '../internal/getPendingClient.js'\n\n/**\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./EthHandler.js').EthGetStorageAtHandler}\n */\nexport const getStorageAtHandler = (client) => async (params) => {\n\tconst vm = await client.getVm()\n\tconst tag = params.blockTag ?? 'latest'\n\tif (tag === 'pending') {\n\t\tconst mineResult = await getPendingClient(client)\n\t\tif (mineResult.errors) {\n\t\t\tthrow mineResult.errors[0]\n\t\t}\n\t\treturn getStorageAtHandler(mineResult.pendingClient)({ ...params, blockTag: 'latest' })\n\t}\n\tif (tag === 'latest') {\n\t\treturn bytesToHex(\n\t\t\tawait vm.stateManager.getStorage(createAddress(params.address), hexToBytes(params.position, { size: 32 })),\n\t\t)\n\t}\n\tconst block = await vm.blockchain.getBlockByTag(tag)\n\tconst clonedVm = await cloneVmWithBlockTag(client, block)\n\n\tif (clonedVm instanceof ForkError || clonedVm instanceof InternalError) {\n\t\tthrow clonedVm\n\t}\n\n\treturn getStorageAtHandler({ ...client, getVm: () => Promise.resolve(clonedVm) })({ ...params, blockTag: 'latest' })\n}\n","import { hexToBigInt } from '@tevm/utils'\nimport { setAccountHandler } from './setAccountHandler.js'\n\n/**\n * Creates an SetAccount JSON-RPC Procedure for handling tevm_setAccount requests with Ethereumjs VM\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./SetAccountJsonRpcProcedure.js').SetAccountJsonRpcProcedure}\n */\nexport const setAccountProcedure = (client) => async (request) => {\n\tconst { errors = [], ...result } = await setAccountHandler(client)({\n\t\tthrowOnFail: false,\n\t\taddress: request.params[0].address,\n\t\t...(request.params[0].nonce ? { nonce: hexToBigInt(request.params[0].nonce) } : {}),\n\t\t...(request.params[0].balance ? { balance: hexToBigInt(request.params[0].balance) } : {}),\n\t\t...(request.params[0].deployedBytecode ? { deployedBytecode: request.params[0].deployedBytecode } : {}),\n\t\t...(request.params[0].storageRoot ? { storageRoot: request.params[0].storageRoot } : {}),\n\t\t...(request.params[0].state ? { state: request.params[0].state } : {}),\n\t\t...(request.params[0].stateDiff ? { stateDiff: request.params[0].stateDiff } : {}),\n\t})\n\tif (errors.length > 0) {\n\t\tconst error = /** @type {import('./TevmSetAccountError.js').TevmSetAccountError}*/ (errors[0])\n\t\treturn {\n\t\t\tjsonrpc: '2.0',\n\t\t\terror: {\n\t\t\t\tcode: error.code,\n\t\t\t\tmessage: error.message,\n\t\t\t\tdata: {\n\t\t\t\t\terrors: errors.map(({ message }) => message),\n\t\t\t\t},\n\t\t\t},\n\t\t\tmethod: 'tevm_setAccount',\n\t\t\t...(request.id === undefined ? {} : { id: request.id }),\n\t\t}\n\t}\n\treturn {\n\t\tjsonrpc: '2.0',\n\t\tresult,\n\t\tmethod: 'tevm_setAccount',\n\t\t...(request.id === undefined ? {} : { id: request.id }),\n\t}\n}\n","import { setAccountProcedure } from '../SetAccount/setAccountProcedure.js'\n\n/**\n * Request handler for anvil_setStorageAt JSON-RPC requests.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./AnvilProcedure.js').AnvilSetStorageAtProcedure}\n */\nexport const anvilSetStorageAtJsonRpcProcedure = (client) => {\n\treturn async (request) => {\n\t\trequest\n\t\tconst result = await setAccountProcedure(client)({\n\t\t\tmethod: 'tevm_setAccount',\n\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\tjsonrpc: '2.0',\n\t\t\tparams: [\n\t\t\t\t{\n\t\t\t\t\taddress: request.params[0],\n\t\t\t\t\tstateDiff: {\n\t\t\t\t\t\t[request.params[1]]: request.params[2],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t],\n\t\t})\n\t\tif (result.error) {\n\t\t\treturn {\n\t\t\t\terror: /** @type {any}*/ (result.error),\n\t\t\t\tjsonrpc: '2.0',\n\t\t\t\tmethod: request.method,\n\t\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tjsonrpc: '2.0',\n\t\t\tmethod: request.method,\n\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\tresult: null,\n\t\t}\n\t}\n}\n","import { ERC20 } from '@tevm/contract'\nimport { numberToHex } from '@tevm/utils'\nimport { encodeFunctionData, hexToBigInt } from 'viem'\nimport { contractHandler } from '../Contract/contractHandler.js'\nimport { ethCreateAccessListProcedure } from '../eth/ethCreateAccessListProcedure.js'\nimport { getStorageAtHandler } from '../eth/getStorageAtHandler.js'\nimport { setAccountHandler } from '../SetAccount/setAccountHandler.js'\nimport { anvilSetStorageAtJsonRpcProcedure } from './anvilSetStorageAtProcedure.js'\n\n/**\n * Deals ERC20 tokens to an account by overriding the storage of balanceOf(account)\n * @param {import('@tevm/node').TevmNode} node\n * @returns {import('./AnvilHandler.js').AnvilDealHandler}\n */\nexport const dealHandler =\n\t(node) =>\n\tasync ({ erc20, account, amount }) => {\n\t\tif (!erc20) {\n\t\t\treturn setAccountHandler(node)({\n\t\t\t\taddress: account,\n\t\t\t\tbalance: amount,\n\t\t\t})\n\t\t}\n\n\t\tconst value = numberToHex(amount, { size: 32 })\n\n\t\t// Get storage slots accessed by balanceOf\n\t\tconst accessListResponse = await ethCreateAccessListProcedure(node)({\n\t\t\tmethod: 'eth_createAccessList',\n\t\t\tparams: [\n\t\t\t\t{\n\t\t\t\t\tto: erc20,\n\t\t\t\t\tdata: encodeFunctionData({\n\t\t\t\t\t\tabi: ERC20.abi,\n\t\t\t\t\t\tfunctionName: 'balanceOf',\n\t\t\t\t\t\targs: [account],\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t],\n\t\t\tid: 1,\n\t\t\tjsonrpc: '2.0',\n\t\t})\n\n\t\tif (!accessListResponse.result?.accessList) {\n\t\t\tconsole.error(accessListResponse.error)\n\t\t\tthrow new Error('Failed to get access list')\n\t\t}\n\n\t\t// Track all storage slots we modify so we can reset them later if needed\n\t\tconst modifiedSlots = []\n\n\t\t// Try each storage slot until we find the right one\n\t\tfor (const { address, storageKeys } of accessListResponse.result.accessList) {\n\t\t\tfor (const slot of storageKeys) {\n\t\t\t\t// Get existing storage value\n\t\t\t\tconst oldValue = await getStorageAtHandler(node)({\n\t\t\t\t\taddress,\n\t\t\t\t\tposition: slot,\n\t\t\t\t\tblockTag: 'latest',\n\t\t\t\t})\n\n\t\t\t\t// Set new value\n\t\t\t\tawait anvilSetStorageAtJsonRpcProcedure(node)({\n\t\t\t\t\tmethod: 'anvil_setStorageAt',\n\t\t\t\t\tparams: [address, slot, value],\n\t\t\t\t\tid: 1,\n\t\t\t\t\tjsonrpc: '2.0',\n\t\t\t\t})\n\n\t\t\t\t// Track modified slot\n\t\t\t\tmodifiedSlots.push({ address, slot, oldValue })\n\n\t\t\t\t// Check if balance updated correctly - with throwOnFail: false to handle errors\n\t\t\t\tconst balanceResponse = await contractHandler(node)({\n\t\t\t\t\tto: erc20,\n\t\t\t\t\tabi: ERC20.abi,\n\t\t\t\t\tfunctionName: 'balanceOf',\n\t\t\t\t\targs: [account],\n\t\t\t\t\tthrowOnFail: false,\n\t\t\t\t})\n\n\t\t\t\t// Check if the balance call succeeded and matches expected value\n\t\t\t\tif (!balanceResponse.errors && balanceResponse.data === hexToBigInt(value)) {\n\t\t\t\t\t// Found correct slot, reset all other slots\n\t\t\t\t\tfor (const { address: resetAddr, slot: resetSlot, oldValue: resetValue } of modifiedSlots) {\n\t\t\t\t\t\t// Skip the correct slot\n\t\t\t\t\t\tif (resetAddr === address && resetSlot === slot) continue\n\n\t\t\t\t\t\t// Reset any other modified slot\n\t\t\t\t\t\tawait anvilSetStorageAtJsonRpcProcedure(node)({\n\t\t\t\t\t\t\tmethod: 'anvil_setStorageAt',\n\t\t\t\t\t\t\tparams: [resetAddr, resetSlot, resetValue],\n\t\t\t\t\t\t\tid: 1,\n\t\t\t\t\t\t\tjsonrpc: '2.0',\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\t// Found correct slot, return success\n\t\t\t\t\treturn {}\n\t\t\t\t}\n\n\t\t\t\t// This slot didn't work, revert it immediately\n\t\t\t\tawait anvilSetStorageAtJsonRpcProcedure(node)({\n\t\t\t\t\tmethod: 'anvil_setStorageAt',\n\t\t\t\t\tparams: [address, slot, oldValue],\n\t\t\t\t\tid: 1,\n\t\t\t\t\tjsonrpc: '2.0',\n\t\t\t\t})\n\n\t\t\t\t// Also remove it from modifiedSlots since we've already reset it\n\t\t\t\tmodifiedSlots.pop()\n\t\t\t}\n\t\t}\n\n\t\t// No valid storage slot found, but all slots should already be reset\n\t\treturn {\n\t\t\terrors: [\n\t\t\t\t{\n\t\t\t\t\tname: 'StorageSlotNotFound',\n\t\t\t\t\tmessage: 'Could not find correct storage slot for balanceOf',\n\t\t\t\t},\n\t\t\t],\n\t\t}\n\t}\n","import { hexToBigInt } from 'viem'\nimport { dealHandler } from './anvilDealHandler.js'\n\n/**\n * JSON-RPC procedure for anvil_deal\n * Deals ERC20 tokens to an account by overriding the storage of balanceOf(account)\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./AnvilProcedure.js').AnvilDealProcedure}\n * @example\n * ```typescript\n * const response = await client.request({\n *   method: 'anvil_deal',\n *   params: [{\n *     erc20: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', // Optional: USDC address\n *     account: '0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266',\n *     amount: 1000000n // 1 USDC (6 decimals)\n *   }],\n *   id: 1,\n *   jsonrpc: '2.0'\n * })\n * ```\n */\nexport const anvilDealJsonRpcProcedure = (client) => async (request) => {\n\tconst [{ erc20, account, amount }] = request.params\n\n\tconst result = await dealHandler(client)({\n\t\t...(erc20 !== undefined ? { erc20 } : {}),\n\t\taccount,\n\t\tamount: hexToBigInt(amount),\n\t})\n\n\tif ('errors' in result && result.errors) {\n\t\t/**\n\t\t * @type {import('./AnvilJsonRpcResponse.js').AnvilDealJsonRpcResponse}\n\t\t */\n\t\tconst out = {\n\t\t\tjsonrpc: request.jsonrpc,\n\t\t\t...(request.id !== undefined ? { id: request.id } : {}),\n\t\t\tmethod: 'anvil_deal',\n\t\t\terror: {\n\t\t\t\t// @ts-expect-error being lazy here\n\t\t\t\tcode: (result.errors[0]?.code ?? -32000).toString(),\n\t\t\t\tmessage: result.errors[0]?.message ?? result.errors[0]?.name ?? 'An unknown error occured',\n\t\t\t},\n\t\t}\n\t\treturn out\n\t}\n\n\treturn {\n\t\tjsonrpc: request.jsonrpc,\n\t\t...(request.id !== undefined ? { id: request.id } : {}),\n\t\tmethod: 'anvil_deal',\n\t\tresult: {},\n\t}\n}\n","import { hexToBytes } from '@tevm/utils'\n\n/**\n * Request handler for anvil_dropTransaction JSON-RPC requests.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./AnvilProcedure.js').AnvilDropTransactionProcedure}\n */\nexport const anvilDropTransactionJsonRpcProcedure = (client) => {\n\treturn async (request) => {\n\t\tconst anvilDropTransactionRequest =\n\t\t\t/** @type {import('./AnvilJsonRpcRequest.js').AnvilDropTransactionJsonRpcRequest}*/\n\t\t\t(request)\n\t\tconst txHash = anvilDropTransactionRequest.params[0].transactionHash\n\t\tconst txPool = await client.getTxPool()\n\t\tif (/** @type {any[]}*/ (txPool.getByHash([hexToBytes(txHash)])).length > 0) {\n\t\t\ttxPool.removeByHash(txHash)\n\t\t} else {\n\t\t\tthrow new Error(\n\t\t\t\t'Only tx in the txpool are allowed to be dropped. Dropping transactions that have already been mined is not yet supported',\n\t\t\t)\n\t\t}\n\t\treturn {\n\t\t\tmethod: anvilDropTransactionRequest.method,\n\t\t\tjsonrpc: '2.0',\n\t\t\tresult: null,\n\t\t\t...(anvilDropTransactionRequest.id ? { id: anvilDropTransactionRequest.id } : {}),\n\t\t}\n\t}\n}\n","import { InternalError } from '@tevm/errors'\nimport { bytesToHex, numberToHex } from '@tevm/utils'\nimport { getPendingClient } from '../internal/getPendingClient.js'\nimport { maybeThrowOnFail } from '../internal/maybeThrowOnFail.js'\n\n/**\n * Converts TevmState with BigInt values to SerializableTevmState with Hex strings\n * @param {import('@tevm/state').TevmState} state - The state to convert\n * @returns {import('@tevm/state').SerializableTevmState} The serializable state\n */\nconst serializeState = (state) => {\n\t/** @type {import('@tevm/state').SerializableTevmState} */\n\tconst serializedState = {}\n\n\tfor (const [address, account] of Object.entries(state)) {\n\t\tserializedState[address] = {\n\t\t\tnonce: numberToHex(account.nonce),\n\t\t\tbalance: numberToHex(account.balance),\n\t\t\tstorageRoot: account.storageRoot,\n\t\t\tcodeHash: account.codeHash,\n\t\t\t...(account.deployedBytecode && { deployedBytecode: account.deployedBytecode }),\n\t\t\t...(account.storage && {\n\t\t\t\tstorage: {\n\t\t\t\t\t...Object.fromEntries(Object.entries(account.storage).map(([key, value]) => [`0x${key}`, value])),\n\t\t\t\t},\n\t\t\t}),\n\t\t}\n\t}\n\n\treturn serializedState\n}\n\n/**\n * Creates a handler for dumping the TEVM state.\n *\n * @param {import(\"@tevm/node\").TevmNode} client - The TEVM client instance.\n * @param {object} [options] - Optional settings.\n * @param {boolean} [options.throwOnFail] - Whether to throw an error if the state dump fails.\n * @returns {import('../DumpState/DumpStateHandlerType.js').DumpStateHandler} - The state dump handler function.\n *\n * @example\n * ```typescript\n * import { createTevmNode } from 'tevm/node'\n * import { dumpStateHandler } from 'tevm/actions'\n *\n * const client = createTevmNode()\n *\n * const dumpState = dumpStateHandler(client)\n *\n * const { state, errors } = await dumpState()\n * if (errors) {\n *   console.error(errors)\n * } else {\n *   console.log(state)\n * }\n * ```\n */\nexport const dumpStateHandler =\n\t(client, options = {}) =>\n\tasync ({ throwOnFail = options.throwOnFail, blockTag = 'latest' } = {}) => {\n\t\ttry {\n\t\t\tconst vm =\n\t\t\t\tblockTag === 'pending'\n\t\t\t\t\t? await getPendingClient(client).then((mineResult) => {\n\t\t\t\t\t\t\tif (mineResult.errors) {\n\t\t\t\t\t\t\t\tthrow mineResult.errors[0]\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn mineResult.pendingClient.getVm()\n\t\t\t\t\t\t})\n\t\t\t\t\t: await client.getVm()\n\t\t\tif ('dumpCanonicalGenesis' in vm.stateManager) {\n\t\t\t\tif (blockTag === 'latest' || blockTag === 'pending') {\n\t\t\t\t\tconst rawState = await vm.stateManager.dumpCanonicalGenesis()\n\t\t\t\t\treturn { state: serializeState(rawState) }\n\t\t\t\t}\n\t\t\t\tconst block = await vm.blockchain.getBlockByTag(blockTag)\n\t\t\t\tif (await vm.stateManager.hasStateRoot(block.header.stateRoot)) {\n\t\t\t\t\tconst rawState = vm.stateManager._baseState.stateRoots.get(bytesToHex(block.header.stateRoot)) ?? {}\n\t\t\t\t\treturn { state: serializeState(rawState) }\n\t\t\t\t}\n\t\t\t\tclient.logger.warn(`State root does not exist for block ${blockTag}. Returning empty state`)\n\t\t\t\treturn { state: {} }\n\t\t\t}\n\t\t\tthrow new InternalError(\n\t\t\t\t'Unsupported state manager. Must use a TEVM state manager from `@tevm/state` package. This may indicate a bug in TEVM internal code.',\n\t\t\t)\n\t\t} catch (e) {\n\t\t\tif (/** @type {import('@tevm/errors').BaseError}*/ (e)._tag) {\n\t\t\t\treturn maybeThrowOnFail(throwOnFail ?? true, {\n\t\t\t\t\tstate: {},\n\t\t\t\t\t// TODO we need to strongly type errors better here\n\t\t\t\t\terrors: [/**@type {any} */ (e)],\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn maybeThrowOnFail(throwOnFail ?? true, {\n\t\t\t\tstate: {},\n\t\t\t\terrors: [e instanceof InternalError ? e : new InternalError('Unexpected error', { cause: e })],\n\t\t\t})\n\t\t}\n\t}\n","import { dumpStateHandler } from './dumpStateHandler.js'\n\n/**\n * Creates a DumpState JSON-RPC Procedure for handling dumpState requests with Ethereumjs EVM\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./DumpStateJsonRpcProcedure.js').DumpStateJsonRpcProcedure}\n */\nexport const dumpStateProcedure = (client) => async (request) => {\n\tconst { errors = [], ...result } = await dumpStateHandler(client)({\n\t\tthrowOnFail: false,\n\t})\n\n\tif (errors.length > 0) {\n\t\tconst error = /** @type {import('./TevmDumpStateError.js').TevmDumpStateError}*/ (errors[0])\n\t\treturn {\n\t\t\tjsonrpc: '2.0',\n\t\t\terror: {\n\t\t\t\tcode: error.code,\n\t\t\t\tmessage: error.message,\n\t\t\t\tdata: {\n\t\t\t\t\terrors: errors.map(({ message }) => message),\n\t\t\t\t},\n\t\t\t},\n\t\t\tmethod: 'tevm_dumpState',\n\t\t\t...(request.id === undefined ? {} : { id: request.id }),\n\t\t}\n\t}\n\treturn {\n\t\tjsonrpc: '2.0',\n\t\tresult: {\n\t\t\tstate: result.state,\n\t\t},\n\t\tmethod: 'tevm_dumpState',\n\t\t...(request.id === undefined ? {} : { id: request.id }),\n\t}\n}\n","// TODO this procedure is implemented completely wrong. Anvil encodes the state into a single hex string? Or maybe the type is wrong?\n\nimport { dumpStateProcedure } from '../DumpState/dumpStateProcedure.js'\n\n/**\n * @experimental\n * Request handler for anvil_dumpState JSON-RPC requests.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./AnvilProcedure.js').AnvilDumpStateProcedure}\n */\nexport const anvilDumpStateJsonRpcProcedure = (client) => {\n\treturn async (request) => {\n\t\treturn /** @type any*/ ({\n\t\t\t...(await dumpStateProcedure(client)({\n\t\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\t\tjsonrpc: '2.0',\n\t\t\t\tmethod: 'tevm_dumpState',\n\t\t\t})),\n\t\t\tmethod: request.method,\n\t\t})\n\t}\n}\n","/**\n * Request handler for anvil_getAutomine JSON-RPC requests.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./AnvilProcedure.js').AnvilGetAutomineProcedure}\n */\nexport const anvilGetAutomineJsonRpcProcedure = (client) => {\n\treturn async (request) => {\n\t\treturn {\n\t\t\tjsonrpc: '2.0',\n\t\t\tmethod: request.method,\n\t\t\tresult: client.miningConfig.type === 'auto',\n\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t}\n\t}\n}\n","import { getAddress } from '@tevm/utils'\n\n/**\n * Request handler for anvil_impersonateAccount JSON-RPC requests.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./AnvilProcedure.js').AnvilImpersonateAccountProcedure}\n */\nexport const anvilImpersonateAccountJsonRpcProcedure = (client) => {\n\treturn async (request) => {\n\t\ttry {\n\t\t\tclient.setImpersonatedAccount(getAddress(request.params[0]))\n\t\t\treturn {\n\t\t\t\tjsonrpc: '2.0',\n\t\t\t\tmethod: request.method,\n\t\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\t\tresult: null,\n\t\t\t}\n\t\t} catch (e) {\n\t\t\treturn {\n\t\t\t\tjsonrpc: '2.0',\n\t\t\t\tmethod: request.method,\n\t\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\t\t// TODO use @tevm/errors\n\t\t\t\terror: {\n\t\t\t\t\tcode: /** @type any*/ (-32602),\n\t\t\t\t\tmessage: /** @type {Error}*/ (e).message,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t}\n}\n","import { createAddress } from '@tevm/address'\nimport { createAccount, fromRlp, hexToBytes } from '@tevm/utils'\n\n/**\n * Request handler for anvil_loadState JSON-RPC requests.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./AnvilProcedure.js').AnvilLoadStateProcedure}\n */\nexport const anvilLoadStateJsonRpcProcedure = (client) => {\n\treturn async (request) => {\n\t\tconst loadStateRequest = /** @type {import('./AnvilJsonRpcRequest.js').AnvilLoadStateJsonRpcRequest}*/ (request)\n\n\t\tconst vm = await client.getVm()\n\n\t\treturn Promise.all(\n\t\t\tObject.entries(loadStateRequest.params[0].state).map(([address, rlpEncodedAccount]) => {\n\t\t\t\tconst rlpBytes = hexToBytes(rlpEncodedAccount)\n\t\t\t\tconst decoded = fromRlp(rlpBytes)\n\t\t\t\tif (!Array.isArray(decoded) || decoded.length !== 4) {\n\t\t\t\t\tthrow new Error('Invalid RLP serialized account')\n\t\t\t\t}\n\t\t\t\tconst [nonce, balance, storageRoot, codeHash] = decoded\n\t\t\t\tconst account = createAccount({\n\t\t\t\t\tnonce,\n\t\t\t\t\tbalance,\n\t\t\t\t\tstorageRoot,\n\t\t\t\t\tcodeHash,\n\t\t\t\t})\n\t\t\t\treturn vm.stateManager.putAccount(createAddress(address), account)\n\t\t\t}),\n\t\t)\n\t\t\t.then(() => {\n\t\t\t\t/**\n\t\t\t\t * @type {import('./AnvilJsonRpcResponse.js').AnvilLoadStateJsonRpcResponse}\n\t\t\t\t */\n\t\t\t\tconst response = {\n\t\t\t\t\tjsonrpc: '2.0',\n\t\t\t\t\tmethod: loadStateRequest.method,\n\t\t\t\t\tresult: null,\n\t\t\t\t\t...(loadStateRequest.id ? { id: loadStateRequest.id } : {}),\n\t\t\t\t}\n\t\t\t\treturn response\n\t\t\t})\n\t\t\t.catch((e) => {\n\t\t\t\t/**\n\t\t\t\t * @type {import('./AnvilJsonRpcResponse.js').AnvilLoadStateJsonRpcResponse}\n\t\t\t\t */\n\t\t\t\tconst response = {\n\t\t\t\t\tjsonrpc: '2.0',\n\t\t\t\t\tmethod: loadStateRequest.method,\n\t\t\t\t\t...(loadStateRequest.id ? { id: loadStateRequest.id } : {}),\n\t\t\t\t\terror: {\n\t\t\t\t\t\t// TODO use @tevm/errors\n\t\t\t\t\t\tcode: /** @type any*/ (-32602),\n\t\t\t\t\t\tmessage: e.message,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t\treturn response\n\t\t\t})\n\t}\n}\n","import { createMapDb } from '@tevm/receipt-manager'\nimport { bytesToHex } from 'viem'\n\n/**\n * Request handler for anvil_reset JSON-RPC requests.\n * If the node is forked, anvil_reset will reset to the forked block.\n * @param {import('@tevm/node').TevmNode} node\n * @returns {import('./AnvilProcedure.js').AnvilResetProcedure}\n * @example\n * const node = createTevmNode()\n * const resetProcedure = anvilResetJsonRpcProcedure(node)\n * const result = await resetProcedure({ method: 'anvil_reset', params: [], id: 1, jsonrpc: '2.0' })\n * console.log(result) // { result: null, method: 'anvil_reset', jsonrpc: '2.0', id: 1 }\n */\nexport const anvilResetJsonRpcProcedure = (node) => {\n\treturn async (request) => {\n\t\t// reset filters\n\t\tconst filters = node.getFilters()\n\t\tfilters.forEach((/** @type {any} */ filter) => {\n\t\t\tnode.removeFilter(filter.id)\n\t\t})\n\n\t\t// reset impersonated account\n\t\tnode.setImpersonatedAccount(undefined)\n\n\t\t// TODO we should add a txPool.reset() method\n\t\tconst txPool = await node.getTxPool()\n\t\tconst txs = await txPool.txsByPriceAndNonce()\n\t\ttxs.forEach((/** @type {any} */ tx) => {\n\t\t\ttxPool.removeByHash(bytesToHex(tx.hash()))\n\t\t})\n\n\t\tconst vm = await node.getVm()\n\t\tconst newStateManager = vm.stateManager.shallowCopy()\n\t\tconst newBlockchain = vm.blockchain.shallowCopy()\n\t\tconst forkedBlock = vm.blockchain.blocksByTag.get('forked')\n\t\tif (forkedBlock) {\n\t\t\tawait newBlockchain.putBlock(forkedBlock)\n\t\t}\n\t\tvm.stateManager = /** @type {any}*/ (newStateManager)\n\t\tvm.evm.stateManager = /** @type {any}*/ (newStateManager)\n\t\tvm.blockchain = newBlockchain\n\t\tvm.evm.blockchain = newBlockchain\n\n\t\t// reset receipts manager\n\t\t/**\n\t\t * @type {any} making this any because we are modifying readonly properties\n\t\t */\n\t\tconst receiptManager = await node.getReceiptsManager()\n\t\t// TODO we should add a receiptManager.reset() method\n\t\treceiptManager.mapDb = createMapDb({ cache: new Map() })\n\t\treceiptManager.chain = newBlockchain\n\n\t\treturn {\n\t\t\tresult: null,\n\t\t\tmethod: request.method,\n\t\t\tjsonrpc: '2.0',\n\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t}\n\t}\n}\n","import { setAccountProcedure } from '../SetAccount/setAccountProcedure.js'\n\n/**\n * Request handler for anvil_setBalance JSON-RPC requests.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./AnvilProcedure.js').AnvilSetBalanceProcedure}\n */\nexport const anvilSetBalanceJsonRpcProcedure = (client) => {\n\treturn async (request) => {\n\t\tconst balanceResult = await setAccountProcedure(client)({\n\t\t\tjsonrpc: request.jsonrpc,\n\t\t\tmethod: 'tevm_setAccount',\n\t\t\tparams: [\n\t\t\t\t{\n\t\t\t\t\taddress: request.params[0],\n\t\t\t\t\tbalance: request.params[1],\n\t\t\t\t},\n\t\t\t],\n\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t})\n\t\tif (balanceResult.error) {\n\t\t\treturn {\n\t\t\t\tjsonrpc: '2.0',\n\t\t\t\tmethod: request.method,\n\t\t\t\terror: /** @type {any}*/ (balanceResult.error),\n\t\t\t\t...(request.id !== undefined ? { id: request.id } : {}),\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tjsonrpc: '2.0',\n\t\t\tmethod: request.method,\n\t\t\tresult: null,\n\t\t\t...(request.id !== undefined ? { id: request.id } : {}),\n\t\t}\n\t}\n}\n","import { MethodNotSupportedError } from '@tevm/errors'\nimport { hexToNumber } from '@tevm/utils'\n\n/**\n * Request handler for anvil_setChainId JSON-RPC requests.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./AnvilProcedure.js').AnvilSetChainIdProcedure}\n */\nexport const anvilSetChainIdJsonRpcProcedure = (client) => {\n\treturn async (request) => {\n\t\tconst chainId = hexToNumber(request.params[0])\n\t\tif (!Number.isInteger(chainId) || chainId <= 0) {\n\t\t\treturn {\n\t\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\t\tmethod: request.method,\n\t\t\t\tjsonrpc: request.jsonrpc,\n\t\t\t\terror: {\n\t\t\t\t\tcode: /** @type any*/ (-32602),\n\t\t\t\t\tmessage: `Invalid id ${chainId}. Must be a positive integer.`,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t\tconst err = new MethodNotSupportedError(\n\t\t\t'UnsupportedMethodError: tevm_contract is not supported. Encode the contract arguments and use tevm_call instead.',\n\t\t)\n\t\tclient.logger.error(err)\n\t\treturn /**@type any*/ ({\n\t\t\tid: /** @type any*/ (request).id,\n\t\t\tjsonrpc: '2.0',\n\t\t\terror: {\n\t\t\t\tcode: err._tag,\n\t\t\t\tmessage: err.message,\n\t\t\t},\n\t\t})\n\t}\n}\n","import { setAccountProcedure } from '../SetAccount/setAccountProcedure.js'\n\n/**\n * Request handler for anvil_setCode JSON-RPC requests.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./AnvilProcedure.js').AnvilSetCodeProcedure}\n */\nexport const anvilSetCodeJsonRpcProcedure = (client) => {\n\treturn async (request) => {\n\t\tconst result = await setAccountProcedure(client)({\n\t\t\tjsonrpc: request.jsonrpc,\n\t\t\tmethod: 'tevm_setAccount',\n\t\t\tparams: [{ address: request.params[0], deployedBytecode: request.params[1] }],\n\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t})\n\t\tif (result.error) {\n\t\t\treturn {\n\t\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\t\tmethod: request.method,\n\t\t\t\tjsonrpc: request.jsonrpc,\n\t\t\t\terror: {\n\t\t\t\t\tcode: /** @type any*/ (-32602),\n\t\t\t\t\tmessage: result.error.message,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\tmethod: request.method,\n\t\t\tjsonrpc: request.jsonrpc,\n\t\t\tresult: null,\n\t\t}\n\t}\n}\n","import { Block, BlockHeader } from '@tevm/block'\nimport { getAddress } from '@tevm/utils'\n\n/**\n * Request handler for anvil_SetCoinbase JSON-RPC requests.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./AnvilProcedure.js').AnvilSetCoinbaseProcedure}\n */\nexport const anvilSetCoinbaseJsonRpcProcedure = (client) => {\n\treturn async (request) => {\n\t\tconst vm = await client.getVm()\n\t\tconst currentBlock = await vm.blockchain.getCanonicalHeadBlock()\n\t\tconst coinbase = getAddress(request.params[0])\n\t\tconst newHeader = BlockHeader.fromHeaderData(\n\t\t\t{\n\t\t\t\t...currentBlock.header.raw(),\n\t\t\t\tcoinbase,\n\t\t\t},\n\t\t\t{\n\t\t\t\tcommon: vm.common,\n\t\t\t\tfreeze: false,\n\t\t\t\tsetHardfork: false,\n\t\t\t},\n\t\t)\n\t\t// TODO this as any is not necessary we shouldn't be doing this instead fix types please\n\t\tconst newBlock = Block.fromBlockData(\n\t\t\t/** @type {any}*/ ({\n\t\t\t\t...currentBlock,\n\t\t\t\twithdrawals: currentBlock.withdrawals,\n\t\t\t\theader: newHeader,\n\t\t\t}),\n\t\t\t{\n\t\t\t\tcommon: vm.common,\n\t\t\t\tfreeze: false,\n\t\t\t\tsetHardfork: false,\n\t\t\t},\n\t\t)\n\t\tawait vm.blockchain.putBlock(newBlock)\n\t\treturn {\n\t\t\tmethod: request.method,\n\t\t\tresult: coinbase,\n\t\t\tjsonrpc: '2.0',\n\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t}\n\t}\n}\n","import { setAccountProcedure } from '../SetAccount/setAccountProcedure.js'\n\n/**\n * Request handler for anvil_setNonce JSON-RPC requests.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./AnvilProcedure.js').AnvilSetNonceProcedure}\n */\nexport const anvilSetNonceJsonRpcProcedure = (client) => {\n\treturn async (request) => {\n\t\tconst balanceResult = await setAccountProcedure(client)({\n\t\t\tjsonrpc: request.jsonrpc,\n\t\t\tmethod: 'tevm_setAccount',\n\t\t\tparams: [\n\t\t\t\t{\n\t\t\t\t\taddress: request.params[0],\n\t\t\t\t\tnonce: request.params[1],\n\t\t\t\t},\n\t\t\t],\n\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t})\n\t\tif (balanceResult.error) {\n\t\t\treturn {\n\t\t\t\tjsonrpc: '2.0',\n\t\t\t\tmethod: request.method,\n\t\t\t\terror: /** @type {any}*/ (balanceResult.error),\n\t\t\t\t...(request.id !== undefined ? { id: request.id } : {}),\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tjsonrpc: '2.0',\n\t\t\tmethod: request.method,\n\t\t\tresult: null,\n\t\t\t...(request.id !== undefined ? { id: request.id } : {}),\n\t\t}\n\t}\n}\n","/**\n * Request handler for anvil_stopImpersonatingAccount JSON-RPC requests.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./AnvilProcedure.js').AnvilStopImpersonatingAccountProcedure}\n */\nexport const anvilStopImpersonatingAccountJsonRpcProcedure = (client) => {\n\treturn async (request) => {\n\t\tclient.setImpersonatedAccount(undefined)\n\t\treturn {\n\t\t\tjsonrpc: '2.0',\n\t\t\tmethod: request.method,\n\t\t\tresult: null,\n\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t}\n\t}\n}\n","import { InvalidRequestError, RevertError } from '@tevm/errors'\nimport { decodeErrorResult, encodeDeployData, isHex } from '@tevm/utils'\nimport { callHandler } from '../Call/callHandler.js'\nimport { maybeThrowOnFail } from '../internal/maybeThrowOnFail.js'\n\n/**\n * Creates a tree-shakable instance of `deployHandler` for handling the deployment of contracts to TEVM.\n * This function uses `callHandler` under the hood to execute the deployment.\n *\n * Note: This is the internal logic used by higher-level APIs such as `tevmDeploy`.\n *\n * @param {import('@tevm/node').TevmNode} client - The TEVM base client instance.\n * @param {object} [options] - Optional parameters.\n * @param {boolean} [options.throwOnFail=true] - Whether to throw an error on failure.\n * @returns {import(\"../Deploy/DeployHandlerType.js\").DeployHandler} The deploy handler function.\n * @throws {import('./TevmCallError.js').TevmCallError} If `throwOnFail` is true, returns `TevmCallError` as value.\n *\n * @example\n * ```typescript\n * import { createTevmNode } from 'tevm/node'\n * import { deployHandler } from 'tevm/actions'\n *\n * const client = createTevmNode()\n *\n * const deploy = deployHandler(client)\n *\n * const res = await deploy({\n *   bytecode: '0x...', // Contract bytecode\n *   abi: [{...}], // ABI array\n *   args: [1, 2, 3], // Constructor arguments\n *   createTransaction: true,\n * })\n * ```\n */\nexport const deployHandler =\n\t(client, { throwOnFail: throwOnFailDefault = true } = {}) =>\n\tasync (params) => {\n\t\tclient.logger.debug({ params }, 'deployHandler called with params')\n\t\t// TODO Moving fast atm we should ideally add validators to zod\n\t\tlet deployData\n\t\ttry {\n\t\t\tdeployData = encodeDeployData(\n\t\t\t\t/** @type {any} */ ({\n\t\t\t\t\tabi: params.abi,\n\t\t\t\t\tbytecode: params.bytecode,\n\t\t\t\t\targs: params.args,\n\t\t\t\t}),\n\t\t\t)\n\t\t} catch (e) {\n\t\t\tclient.logger.debug(e, 'deployHandler: Unable to encode the abi, functionName, and args into hex data')\n\t\t\tconst cause = /** @type {Error}*/ (e)\n\t\t\tconst err = new InvalidRequestError(cause.message, { cause })\n\n\t\t\treturn maybeThrowOnFail(params.throwOnFail ?? throwOnFailDefault, {\n\t\t\t\t/**\n\t\t\t\t * @type {import('@tevm/utils').Hex}\n\t\t\t\t */\n\t\t\t\trawData: '0x',\n\t\t\t\texecutionGasUsed: 0n,\n\t\t\t\terrors: [err],\n\t\t\t})\n\t\t}\n\n\t\tclient.logger.debug({ deployData }, 'deployHandler: Encoded abi bytecode and args into hex data to execute call')\n\n\t\tconst result = await callHandler(client, {\n\t\t\tthrowOnFail: throwOnFailDefault,\n\t\t})({\n\t\t\t...params,\n\t\t\t// Unlike most calls deployments default to true\n\t\t\tcreateTransaction: params.createTransaction !== undefined ? params.createTransaction : true,\n\t\t\tdata: deployData,\n\t\t\tthrowOnFail: false,\n\t\t})\n\n\t\tif (result.errors && result.errors.length > 0) {\n\t\t\tresult.errors = result.errors.map((err) => {\n\t\t\t\tif (isHex(err.message) && err instanceof RevertError) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tclient.logger.debug(err, 'contractHandler: Contract revert error. Decoding the error')\n\t\t\t\t\t\tconst decodedError = decodeErrorResult(\n\t\t\t\t\t\t\t/** @type {any} */ ({\n\t\t\t\t\t\t\t\tabi: params.abi,\n\t\t\t\t\t\t\t\tdata: err.message,\n\t\t\t\t\t\t\t\tfunctionName: 'constructor',\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t)\n\t\t\t\t\t\tconst message = `Revert: ${decodedError.errorName} ${JSON.stringify(decodedError)}`\n\t\t\t\t\t\tclient.logger.debug({ message }, 'Revert message decoded')\n\t\t\t\t\t\treturn new RevertError(message, { cause: /** @type any*/ (err) })\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\tclient.logger.warn(e, 'Unable to decode revert data')\n\t\t\t\t\t\treturn err\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn err\n\t\t\t})\n\t\t\tclient.logger.debug(result.errors, 'contractHandler: Execution errors')\n\t\t\treturn maybeThrowOnFail(params.throwOnFail ?? throwOnFailDefault, result)\n\t\t}\n\n\t\treturn maybeThrowOnFail(params.throwOnFail ?? throwOnFailDefault, result)\n\t}\n","import type { BaseParams } from '../common/BaseParams.js'\nimport type { BlockTag, Hex } from '../common/index.js'\nimport type { EthCallParams } from '../eth/EthParams.js'\nimport type { ExactlyOne } from '../utils/ExactlyOne.js'\n\n/**\n * Config params for trace calls\n */\nexport type TraceParams<\n\tTTracer extends 'callTracer' | 'prestateTracer' | '4byteTracer' | undefined =\n\t\t| 'callTracer'\n\t\t| 'prestateTracer'\n\t\t| '4byteTracer'\n\t\t| undefined,\n\tTDiffMode extends boolean = boolean,\n> = {\n\t/**\n\t * The type of tracer\n\t * Supported tracers: callTracer, prestateTracer, 4byteTracer\n\t */\n\treadonly tracer?: TTracer\n\t/**\n\t * A duration string of decimal numbers that overrides the default timeout of 5 seconds for JavaScript-based tracing calls. Max timeout is \"10s\". Valid time units are \"ns\", \"us\", \"ms\", \"s\" each with optional fraction, such as \"300ms\" or \"2s45ms\".\n\t * @example \"10s\"\n\t */\n\treadonly timeout?: string\n\t/**\n\t * object to specify configurations for the tracer\n\t */\n\treadonly tracerConfig?: {\n\t\t/**\n\t\t * boolean Setting this to true will only trace the main (top-level) call and none of the sub-calls. This avoids extra processing for each call frame if only the top-level call info are required (useful for getting revertReason).\n\t\t */\n\t\t// readonly onlyTopCall?: boolean\n\t\t/**\n\t\t * boolean Setting this to true will disable storage capture. This avoids extra processing for each call frame if storage is not required.\n\t\t */\n\t\t// readonly disableStorage?: boolean\n\t\t/**\n\t\t *\n\t\t */\n\t\t// readonly enableMemory?: boolean\n\t\t/**\n\t\t * boolean Setting this to true will disable stack capture. This avoids extra processing for each call frame if stack is not required.\n\t\t */\n\t\t// readonly disableStack?: boolean\n\t\t/**\n\t\t * When using the prestateTracer, setting this to true will make the tracer return only the state difference between before and after execution.\n\t\t * Default is false which returns the full state of all touched accounts.\n\t\t */\n\t\treadonly diffMode?: TTracer extends 'prestateTracer' ? TDiffMode : never\n\t}\n}\n\n// debug_traceTransaction\n/**\n * Params taken by `debug_traceTransaction` handler\n */\nexport type DebugTraceTransactionParams<\n\tTTracer extends 'callTracer' | 'prestateTracer' | '4byteTracer' | undefined =\n\t\t| 'callTracer'\n\t\t| 'prestateTracer'\n\t\t| '4byteTracer'\n\t\t| undefined,\n\tTDiffMode extends boolean = boolean,\n\tTTTThrowOnError extends boolean = boolean,\n> = BaseParams<TTTThrowOnError> &\n\tTraceParams<TTracer, TDiffMode> & {\n\t\t/**\n\t\t * The transaction hash\n\t\t */\n\t\treadonly transactionHash: Hex\n\t}\n\n// debug_traceCall\n/**\n * Params taken by `debug_traceCall` handler\n */\nexport type DebugTraceCallParams<\n\tTTracer extends 'callTracer' | 'prestateTracer' | '4byteTracer' | undefined =\n\t\t| 'callTracer'\n\t\t| 'prestateTracer'\n\t\t| '4byteTracer'\n\t\t| undefined,\n\tTDiffMode extends boolean = boolean,\n> = TraceParams<TTracer, TDiffMode> & EthCallParams\n\n/**\n * Params taken by `debug_traceBlock` handler\n */\nexport type DebugTraceBlockParams<\n\tTTracer extends 'callTracer' | 'prestateTracer' | '4byteTracer' | undefined =\n\t\t| 'callTracer'\n\t\t| 'prestateTracer'\n\t\t| '4byteTracer'\n\t\t| undefined,\n\tTDiffMode extends boolean = boolean,\n> = TraceParams<TTracer, TDiffMode> &\n\tExactlyOne<\n\t\t{\n\t\t\t/**\n\t\t\t * Block number or hash or tag to trace\n\t\t\t */\n\t\t\t// TODO: vm.blockchain.getBlockByTag actually only supports 'latest'\n\t\t\treadonly blockTag: Hex | Uint8Array | number | bigint | BlockTag\n\t\t\t/**\n\t\t\t * Block number or hash or tag to trace\n\t\t\t */\n\t\t\treadonly block: Hex | Uint8Array | number | bigint | BlockTag\n\t\t\t/**\n\t\t\t * Block hash to trace\n\t\t\t */\n\t\t\treadonly blockHash: Hex | Uint8Array | number | bigint\n\t\t\t/**\n\t\t\t * Block number to trace\n\t\t\t */\n\t\t\treadonly blockNumber: Hex | Uint8Array | number | bigint\n\t\t},\n\t\t'block' | 'blockTag' | 'blockHash' | 'blockNumber'\n\t>\n\n/**\n * State filters\n */\nexport const debugTraceStateFilters = [\n\t'blockchain',\n\t'blockchain.blocksByNumber',\n\t'blockchain.initOptions',\n\t'evm',\n\t'evm.opcodes',\n\t'evm.precompiles',\n\t'evm.common',\n\t'evm.common.eips',\n\t'evm.common.hardfork',\n\t'evm.common.consensus',\n\t'node',\n\t'node.status',\n\t'node.mode',\n\t'node.miningConfig',\n\t'node.filters',\n\t'node.impersonatedAccount',\n\t'pool',\n\t'pool.pool',\n\t'pool.txsByHash',\n\t'pool.txsByNonce',\n\t'pool.txsInNonceOrder',\n\t'pool.txsInPool',\n\t'stateManager',\n\t'stateManager.storage',\n\t'stateManager.stateRoots',\n] as const\n\n/**\n * Type for state filters\n */\nexport type DebugTraceStateFilter = (typeof debugTraceStateFilters)[number]\n\n/**\n * Params taken by `debug_traceState` handler\n */\nexport type DebugTraceStateParams<\n\tTStateFilters extends readonly DebugTraceStateFilter[] = readonly DebugTraceStateFilter[],\n> = {\n\t/**\n\t * Filters to apply to the state\n\t */\n\treadonly filters?: TStateFilters\n\t/**\n\t * Timeout for the state trace\n\t */\n\treadonly timeout?: string\n}\n","import { numberToHex } from '@tevm/utils'\n\n/**\n * @template {'callTracer' | 'prestateTracer' | '4byteTracer' | undefined} TTracer\n * @template {boolean} TDiffMode\n * @template {import('../debug/DebugResult.js').DebugTraceCallResult<TTracer, TDiffMode>} TTraceResult\n * @param {TTraceResult} traceResult\n * @returns {import('../utils/SerializeToJson.js').SerializeToJson<TTraceResult>}\n */\nexport const serializeTraceResult = (traceResult) => {\n\tif ('structLogs' in traceResult) {\n\t\treturn /** @type {any} */ ({\n\t\t\tfailed: traceResult.failed,\n\t\t\tgas: numberToHex(traceResult.gas),\n\t\t\treturnValue: traceResult.returnValue,\n\t\t\tstructLogs: traceResult.structLogs.map((log) => ({\n\t\t\t\t...log,\n\t\t\t\tgas: numberToHex(log.gas),\n\t\t\t\tgasCost: numberToHex(log.gasCost),\n\t\t\t})),\n\t\t})\n\t}\n\n\treturn /** @type {any} */ (traceResult)\n}\n","import { DefensiveNullCheckError } from '@tevm/errors'\nimport { bytesToHex } from '@tevm/utils'\nimport { decodeRevertReason } from './decodeRevertReason.js'\n\n/**\n * @internal\n * Prepares a trace to be listened to. If laizlyRun is true, it will return an object with the trace and not run the evm internally\n * @param {import('@tevm/vm').Vm} vm\n * @param {import('@tevm/node').TevmNode['logger']} logger\n * @param {import('@tevm/evm').EvmRunCallOpts} params\n * @param {boolean} [lazilyRun]\n * @returns {Promise<import('@tevm/evm').EvmResult & {trace: import('../common/CallTraceResult.js').CallTraceResult}>}\n * @throws {never}\n */\nexport const runCallWithCallTrace = async (vm, logger, params, lazilyRun = false) => {\n\t/**\n\t * Stack to track nested calls\n\t * @type {import('../common/TraceCall.js').TraceCall[]}\n\t */\n\tconst callStack = []\n\n\t/**\n\t * Root trace call that will be returned\n\t * @type {import('../common/CallTraceResult.js').CallTraceResult | null}\n\t */\n\tlet rootTrace = null\n\n\t/**\n\t * Before each call/create - build call tree entry\n\t */\n\tvm.evm.events?.on('beforeMessage', async (message, next) => {\n\t\tlogger.debug(message, 'runCallWithCallTrace: beforeMessage event')\n\n\t\t// Determine the trace type based on message properties\n\t\t/** @type {import('../common/TraceType.js').TraceType} */\n\t\tlet traceType = 'CALL'\n\t\tif (message.to === undefined) {\n\t\t\t// Check if this is CREATE2 (has salt) or regular CREATE\n\t\t\ttraceType = message.salt !== undefined ? 'CREATE2' : 'CREATE'\n\t\t} else if (message.delegatecall) {\n\t\t\ttraceType = 'DELEGATECALL'\n\t\t} else if (message.isStatic) {\n\t\t\ttraceType = 'STATICCALL'\n\t\t}\n\t\t// Note: SELFDESTRUCT detection would need to be added here if the EVM message\n\t\t// structure includes a proper selfdestruct property when those operations occur\n\n\t\t// Create trace call entry\n\t\t/** @type {import('../common/TraceCall.js').TraceCall} */\n\t\tconst traceCall = {\n\t\t\ttype: traceType,\n\t\t\tfrom: message.caller.toString(),\n\t\t\tto: message.to ? message.to.toString() : `0x${'0'.repeat(40)}`,\n\t\t\tvalue: message.value ?? 0n,\n\t\t\tgas: message.gasLimit,\n\t\t\tgasUsed: 0n,\n\t\t\tinput: bytesToHex(message.data ?? new Uint8Array(0)),\n\t\t\toutput: '0x',\n\t\t\tcalls: [],\n\t\t}\n\n\t\t// If this is the root call (depth 0), store it as root trace\n\t\tif (message.depth === 0) {\n\t\t\trootTrace = {\n\t\t\t\ttype: traceCall.type,\n\t\t\t\tfrom: traceCall.from,\n\t\t\t\tto: traceCall.to,\n\t\t\t\tvalue: traceCall.value ?? 0n,\n\t\t\t\tgas: traceCall.gas ?? 0n,\n\t\t\t\tgasUsed: traceCall.gasUsed ?? 0n,\n\t\t\t\tinput: traceCall.input,\n\t\t\t\toutput: traceCall.output,\n\t\t\t\tcalls: [],\n\t\t\t}\n\t\t\tcallStack.push(/** @type {import('../common/TraceCall.js').TraceCall} */ (rootTrace))\n\t\t} else {\n\t\t\t// Add this call to the parent's calls array\n\t\t\tconst parent = callStack[callStack.length - 1]\n\t\t\tif (parent) {\n\t\t\t\tif (!parent.calls) {\n\t\t\t\t\tparent.calls = []\n\t\t\t\t}\n\t\t\t\tparent.calls.push(traceCall)\n\t\t\t\tcallStack.push(traceCall)\n\t\t\t}\n\t\t}\n\n\t\tnext?.()\n\t})\n\n\t/**\n\t * After each call/create - capture results and gas usage\n\t */\n\tvm.evm.events?.on('afterMessage', async (result, next) => {\n\t\tlogger.debug(result, 'runCallWithCallTrace: afterMessage event')\n\n\t\tconst currentCall = callStack.pop()\n\t\tif (!currentCall) {\n\t\t\tlogger.warn('runCallWithCallTrace: no current call in stack for afterMessage')\n\t\t\tnext?.()\n\t\t\treturn\n\t\t}\n\n\t\t// Update gas used\n\t\tcurrentCall.gasUsed = result.execResult.executionGasUsed ?? 0n\n\n\t\t// Set output from return value\n\t\tif (result.execResult?.returnValue) {\n\t\t\tcurrentCall.output = bytesToHex(result.execResult.returnValue)\n\t\t}\n\n\t\t// Handle contract creation address for both CREATE and CREATE2\n\t\tif (result.createdAddress && (currentCall.type === 'CREATE' || currentCall.type === 'CREATE2')) {\n\t\t\tcurrentCall.to = result.createdAddress.toString()\n\t\t}\n\n\t\t// Handle errors\n\t\tif (result.execResult?.exceptionError) {\n\t\t\tcurrentCall.error = result.execResult.exceptionError.error\n\n\t\t\t// Extract revert reason if available\n\t\t\tif (result.execResult.exceptionError.error.includes('revert')) {\n\t\t\t\tcurrentCall.revertReason = decodeRevertReason(bytesToHex(result.execResult.returnValue))\n\t\t\t}\n\t\t\tconsole.log(currentCall)\n\t\t}\n\n\t\tnext?.()\n\t})\n\n\tif (lazilyRun) {\n\t\t// Return object with trace without running EVM\n\t\treturn /** @type {any} */ ({ trace: rootTrace })\n\t}\n\n\t// Execute the call\n\tconst runCallResult = await vm.evm.runCall(params)\n\n\tlogger.debug(runCallResult, 'runCallWithCallTrace: evm run call complete')\n\n\t// Ensure we have a root trace\n\tif (!rootTrace) {\n\t\tthrow new DefensiveNullCheckError('Expected root trace to be created during call execution')\n\t}\n\n\trootTrace = /** @type {import('../common/CallTraceResult.js').CallTraceResult} */ (rootTrace)\n\t// Update root trace with final execution results\n\trootTrace.gasUsed = runCallResult.execResult.executionGasUsed\n\tif (runCallResult.execResult.returnValue) {\n\t\trootTrace.output = bytesToHex(runCallResult.execResult.returnValue)\n\t}\n\n\t// Handle errors at root level\n\tif (runCallResult.execResult.exceptionError) {\n\t\t// Add error property to root trace (cast to any to allow additional properties)\n\t\tconst rootTraceWithError = /** @type {any} */ (rootTrace)\n\t\trootTraceWithError.error =\n\t\t\trunCallResult.execResult.exceptionError.error || runCallResult.execResult.exceptionError.toString()\n\n\t\tif (runCallResult.execResult.exceptionError.error?.includes('revert')) {\n\t\t\trootTraceWithError.revertReason = decodeRevertReason(bytesToHex(runCallResult.execResult.returnValue))\n\t\t}\n\t}\n\n\treturn {\n\t\t...runCallResult,\n\t\ttrace: rootTrace,\n\t}\n}\n","import { bytesToHex, getAddress } from '@tevm/utils'\n\n/**\n * @typedef {`${import('@tevm/utils').Hex}-${number}`} SelectorAndSizeKey\n * @typedef {`${import('@tevm/utils').Hex}`} SelectorKey\n */\n/**\n * @internal\n * Prepares a trace to collect 4-byte function selectors from contract calls\n * @param {import('@tevm/vm').Vm} vm\n * @param {import('@tevm/node').TevmNode['logger']} logger\n * @param {import('@tevm/evm').EvmRunCallOpts} params\n * @param {boolean} [lazilyRun]\n * @returns {Promise<import('@tevm/evm').EvmResult & {trace: import('../common/FourbyteTraceResult.js').FourbyteTraceResult}>}\n * @throws {never}\n */\nexport const runCallWithFourbyteTrace = async (vm, logger, params, lazilyRun = false) => {\n\t/**\n\t * Map of selector-calldata_size keys to their call counts\n\t * Format: \"0x{selector}-{calldata_size}\" -> count\n\t * @type {Record<SelectorAndSizeKey, number>}\n\t */\n\tconst selectors = {}\n\t/**\n\t * Map of contract address to selector keys to an array of calldata\n\t * Format: \"0x{contract_address}\" -> \"0x{selector}\" -> [calldata1, calldata2, ...]\n\t * @type {Record<import('@tevm/utils').Address, Record<SelectorKey, import('@tevm/utils').Hex[]>>}\n\t */\n\tconst calldatas = {}\n\n\t/**\n\t * Extract 4-byte selector and calldata size from call data\n\t * @param {Uint8Array} data - Call data\n\t * @returns {{key: SelectorAndSizeKey, selector: SelectorKey, calldata: import('@tevm/utils').Hex, calldataSize: number} | null} - Formatted key and components or null if data is too short\n\t */\n\tconst extractSelectorAndSize = (data) => {\n\t\tif (data.length >= 4) {\n\t\t\tconst selector = bytesToHex(data.slice(0, 4))\n\t\t\tconst calldata = data.slice(4)\n\t\t\tconst calldataSize = calldata.length // Size excluding the 4-byte selector\n\t\t\tconst key = /** @type {SelectorAndSizeKey} */ (`${selector}-${calldataSize}`)\n\t\t\treturn { key, selector, calldata: bytesToHex(calldata), calldataSize }\n\t\t}\n\t\treturn null\n\t}\n\n\t/**\n\t * Before each call/create - collect function selectors\n\t *\n\t * This will capture inner-contract calls if they generate a \"CALL\" opcode (i.e. `this.function()`);\n\t * which is not the case for a \"JUMP\" opcode (i.e. `function()`)\n\t */\n\tvm.evm.events?.on('beforeMessage', async (message, next) => {\n\t\tlogger.debug(message, 'runCallWithFourbyteTrace: beforeMessage event')\n\n\t\t// Only process CALL, DELEGATECALL, and STATICCALL operations\n\t\t// Skip CREATE and CREATE2 as they don't have function selectors\n\t\tif (message.to && message.data && message.data.length >= 4) {\n\t\t\tconst result = extractSelectorAndSize(message.data)\n\t\t\tif (result) {\n\t\t\t\t// Increment counter for this selector-calldata_size combination\n\t\t\t\tselectors[result.key] = (selectors[result.key] ?? 0) + 1\n\t\t\t\t// Add this calldata to the array of calldatas for this selector\n\t\t\t\tconst contractAddress = getAddress(message.to.toString())\n\t\t\t\tcalldatas[contractAddress] = {\n\t\t\t\t\t...(calldatas[contractAddress] ?? {}),\n\t\t\t\t\t[result.selector]: [...(calldatas[contractAddress]?.[result.selector] ?? []), result.calldata],\n\t\t\t\t}\n\n\t\t\t\tlogger.debug(\n\t\t\t\t\t{\n\t\t\t\t\t\tcontractAddress: message.to.toString(),\n\t\t\t\t\t\tkey: result.key,\n\t\t\t\t\t\tselector: result.selector,\n\t\t\t\t\t\tcalldata: result.calldata,\n\t\t\t\t\t\tcalldataSize: result.calldataSize,\n\t\t\t\t\t\tcount: selectors[result.key],\n\t\t\t\t\t},\n\t\t\t\t\t'runCallWithFourbyteTrace: collected selector with calldata size',\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\tnext?.()\n\t})\n\n\tif (lazilyRun) {\n\t\t// Return object with trace without running EVM\n\t\treturn /** @type {any} */ ({ trace: selectors })\n\t}\n\n\t// Execute the call\n\tconst runCallResult = await vm.evm.runCall(params)\n\n\tlogger.debug(runCallResult, 'runCallWithFourbyteTrace: evm run call complete')\n\tlogger.debug(selectors, 'runCallWithFourbyteTrace: collected selectors')\n\n\treturn {\n\t\t...runCallResult,\n\t\ttrace: {\n\t\t\t...selectors,\n\t\t\t...calldatas,\n\t\t},\n\t}\n}\n","import { createAddress } from '@tevm/address'\nimport { DefensiveNullCheckError } from '@tevm/errors'\nimport { bytesToHex, hexToBytes, toHex } from '@tevm/utils'\nimport { evmInputToImpersonatedTx } from './evmInputToImpersonatedTx.js'\n\n/**\n * @internal\n * Executes a call with prestate tracer, which captures account state before and after execution\n * @template {boolean} TDiffMode\n * @param {import('@tevm/node').TevmNode} client\n * @param {import('@tevm/evm').EvmRunCallOpts} evmInput\n * @param {TDiffMode} diffMode If true, only returns state that changed between pre and post execution\n * @returns {Promise<import('@tevm/evm').EvmResult & {trace: import('../common/PrestateTraceResult.js').PrestateTraceResult<TDiffMode>}>}\n * @throws {never}\n */\nexport const runCallWithPrestateTrace = async (client, evmInput, diffMode = /** @type {TDiffMode} */ (false)) => {\n\tconst { logger, getVm } = client\n\tconst vm = await getVm()\n\t// Ensure we start with a clear warmed accounts Map\n\tawait vm.evm.journal.cleanup()\n\n\t// Convert EVM input to a transaction\n\tconst tx = await evmInputToImpersonatedTx(client)(evmInput)\n\t// Run the transaction\n\tlogger.debug(evmInput, 'runCallWithPrestateTrace: executing call using runTx')\n\tconst runTxResult = await vm.runTx({\n\t\ttx,\n\t\tskipHardForkValidation: true,\n\t\tskipBlockGasLimitValidation: true,\n\t\treportAccessList: true,\n\t\treportPreimages: true,\n\t\tpreserveJournal: true,\n\t})\n\n\t// Get the access list and preimages to determine which accounts and storage slots were accessed\n\tconst { accessList: _accessList, preimages: _preimages } = runTxResult\n\tif (!_accessList) throw new DefensiveNullCheckError('Expected access list to be defined')\n\tconst preimages = Array.from(_preimages?.values() ?? []).map((v) => bytesToHex(v))\n\n\t// Transform access list to usable format\n\t/** @type {Map<import('@tevm/utils').Hex, Set<import('@tevm/utils').Hex>>} */\n\tconst accessList = new Map()\n\tfor (const { address, storageKeys } of _accessList) {\n\t\taccessList.set(`0x${address}`, new Set(storageKeys.map((s) => /** @type {import('@tevm/utils').Hex} */ (`0x${s}`))))\n\t}\n\n\t// Capture post-state (from VM after execution)\n\t/** @type {import('../common/PrestateTraceResult.js').PrestateTraceResult<false>} */\n\tconst postState = {}\n\tif (diffMode) {\n\t\tfor (const address of preimages) {\n\t\t\ttry {\n\t\t\t\tconst ethAddress = createAddress(address)\n\t\t\t\tconst slots = accessList.get(address) ?? new Set()\n\t\t\t\tconst accountState = await captureAccountState(vm, logger, ethAddress, slots)\n\n\t\t\t\tif (accountState) postState[address] = accountState\n\t\t\t} catch (err) {\n\t\t\t\tlogger.error(err, `Error capturing post-state for ${address}`)\n\t\t\t}\n\t\t}\n\t}\n\n\t// Revert to pre-execution state\n\tvm.evm.journal.revert()\n\n\t// Capture pre-state (from cloned VM before execution)\n\t/** @type {import('../common/PrestateTraceResult.js').PrestateTraceResult<false>} */\n\tconst preState = {}\n\tfor (const address of preimages) {\n\t\ttry {\n\t\t\tconst ethAddress = createAddress(address)\n\t\t\tconst slots = accessList.get(address) ?? new Set()\n\t\t\tconst accountState = await captureAccountState(vm, logger, ethAddress, slots)\n\n\t\t\tif (accountState) preState[address] = accountState\n\t\t} catch (err) {\n\t\t\tlogger.error(err, `Error capturing pre-state for ${address}`)\n\t\t}\n\t}\n\n\treturn {\n\t\t...runTxResult,\n\t\t// Include both pre and post state only in diffMode\n\t\ttrace: /** @type {any} */ (diffMode ? formatDiffResult(preState, postState) : preState),\n\t}\n}\n\n/**\n * @internal\n * Captures the state of an account, including its storage based on accessed slots\n * @param {import('@tevm/vm').Vm} vm\n * @param {import('@tevm/node').TevmNode['logger']} logger\n * @param {import('@tevm/utils').EthjsAddress} address\n * @param {Set<import('@tevm/utils').Hex>} slots Set of storage slot keys that were accessed\n * @returns {Promise<import('../common/AccountState.js').AccountState | undefined>}\n */\nconst captureAccountState = async (vm, logger, address, slots = new Set()) => {\n\ttry {\n\t\t// Get account details\n\t\tconst account = await vm.stateManager.getAccount(address)\n\t\tif (!account) return undefined\n\n\t\t// Get code\n\t\tconst code = await vm.stateManager.getCode(address)\n\n\t\t// Get storage for all accessed slots\n\t\t/** @type {Record<import('@tevm/utils').Hex, import('@tevm/utils').Hex>} */\n\t\tconst storage = {}\n\t\tfor (const slotHex of slots) {\n\t\t\ttry {\n\t\t\t\t// Convert hex slot to Uint8Array for getContractStorage\n\t\t\t\tconst slotKey = hexToBytes(slotHex)\n\t\t\t\tconst value = await vm.stateManager.getStorage(address, slotKey)\n\t\t\t\tstorage[slotHex] = bytesToHex(value)\n\t\t\t} catch (err) {\n\t\t\t\tlogger.error(err, `Error getting storage at slot ${slotHex} for account ${address.toString()}`)\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tstorage,\n\t\t\tbalance: toHex(account.balance),\n\t\t\tnonce: Number(account.nonce),\n\t\t\tcode: code && code.length > 0 ? bytesToHex(code) : '0x',\n\t\t}\n\t} catch (err) {\n\t\tlogger.error(err, `Error capturing state for account ${address.toString()}`)\n\t\treturn undefined\n\t}\n}\n\n/**\n * @internal\n * Formats the prestate trace result for diffMode\n * @param {import('../common/PrestateTraceResult.js').PrestateTraceResult<true>[\"pre\"]} preState\n * @param {import('../common/PrestateTraceResult.js').PrestateTraceResult<true>[\"post\"]} postState\n * @returns {import('../common/PrestateTraceResult.js').PrestateTraceResult<true>}\n */\nconst formatDiffResult = (preState, postState) => {\n\t/** @type {import('../common/PrestateTraceResult.js').PrestateTraceResult<true>[\"post\"]} */\n\tconst postDiff = {}\n\n\tfor (const address of Object.keys(postState)) {\n\t\tconst addressHex = /** @type {import('@tevm/utils').Hex} */ (address)\n\t\tconst pre = preState[addressHex]\n\t\tconst post = postState[addressHex]\n\t\tif (!post) continue\n\n\t\t// Get all unique slot keys from both pre and post\n\t\tconst allSlots = new Set([...Object.keys(pre?.storage ?? {}), ...Object.keys(post.storage ?? {})])\n\t\t// Build storage diff\n\t\t/** @type {Record<import('@tevm/utils').Hex, import('@tevm/utils').Hex>} */\n\t\tlet storageDiff = {}\n\t\tfor (const slot of allSlots) {\n\t\t\tconst slotHex = /** @type {import('@tevm/utils').Hex} */ (slot)\n\t\t\tconst preValue = pre?.storage?.[slotHex] ?? '0x0'\n\t\t\tconst postValue = post.storage?.[slotHex] ?? '0x0'\n\n\t\t\tstorageDiff = {\n\t\t\t\t...storageDiff,\n\t\t\t\t...(preValue !== postValue ? { [slotHex]: postValue } : {}),\n\t\t\t}\n\t\t}\n\n\t\t// Compare and capture differences\n\t\tconst postDiffAccount = {\n\t\t\t...(pre !== undefined && post.balance !== undefined && pre.balance !== post.balance\n\t\t\t\t? { balance: post.balance }\n\t\t\t\t: {}),\n\t\t\t...(pre !== undefined && post.nonce !== undefined && pre.nonce !== post.nonce ? { nonce: post.nonce } : {}),\n\t\t\t...(pre !== undefined && post.code !== undefined && pre.code !== post.code ? { code: post.code } : {}),\n\t\t\t...(Object.keys(storageDiff).length > 0 ? { storage: storageDiff } : {}),\n\t\t}\n\n\t\t// Only add to diff if there were any changes\n\t\tif (Object.keys(postDiffAccount).length > 0) postDiff[addressHex] = postDiffAccount\n\t}\n\n\t// Return differentials\n\treturn {\n\t\tpre: preState,\n\t\tpost: postDiff,\n\t}\n}\n","import { createAddress } from '@tevm/address'\nimport { hexToBytes } from '@tevm/utils'\nimport { runCallWithCallTrace } from '../internal/runCallWithCallTrace.js'\nimport { runCallWithFourbyteTrace } from '../internal/runCallWithFourbyteTrace.js'\nimport { runCallWithPrestateTrace } from '../internal/runCallWithPrestateTrace.js'\nimport { runCallWithTrace } from '../internal/runCallWithTrace.js'\n\n/**\n * Returns a trace of an eth_call within the context of the given block execution using the final state of the parent block\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./DebugHandler.js').DebugTraceCallHandler} an execution trace of an {@link eth_call} in the context of a given block execution\n * mirroring the output from {@link traceTransaction}\n */\nexport const traceCallHandler =\n\t(client) =>\n\t/**\n\t * @template {'callTracer' | 'prestateTracer' | '4byteTracer'} TTracer\n\t * @template {boolean} TDiffMode\n\t * @param {import('./DebugParams.js').DebugTraceCallParams<TTracer, TDiffMode>} params\n\t * @returns {Promise<import('./DebugResult.js').DebugTraceCallResult<TTracer, TDiffMode>>}\n\t */\n\t(params) => {\n\t\tconst { logger, getVm } = client\n\t\tlogger.debug(params, 'traceCallHandler: executing trace call with params')\n\n\t\tconst callParams = {\n\t\t\t...(params.from !== undefined\n\t\t\t\t? {\n\t\t\t\t\t\torigin: createAddress(params.from),\n\t\t\t\t\t\tcaller: createAddress(params.from),\n\t\t\t\t\t}\n\t\t\t\t: {}),\n\t\t\t...(params.data !== undefined ? { data: hexToBytes(params.data) } : {}),\n\t\t\t...(params.to ? { to: createAddress(params.to) } : {}),\n\t\t\t...(params.gasPrice ? { gasPrice: params.gasPrice } : {}),\n\t\t\t...(params.gas ? { gasLimit: params.gas } : {}),\n\t\t\t...(params.value ? { value: params.value } : {}),\n\t\t}\n\n\t\tif (params.tracer === 'prestateTracer') {\n\t\t\tconst diffMode = params.tracerConfig?.diffMode === true\n\t\t\tlogger.debug({ diffMode }, 'traceCallHandler: using prestateTracer')\n\n\t\t\treturn getVm()\n\t\t\t\t.then((vm) => vm.deepCopy())\n\t\t\t\t.then((vm) => runCallWithPrestateTrace({ ...client, getVm: () => Promise.resolve(vm) }, callParams, diffMode))\n\t\t\t\t.then((res) => /** @type {any} */ (res.trace))\n\t\t}\n\t\tif (params.tracer === 'callTracer') {\n\t\t\treturn getVm()\n\t\t\t\t.then((vm) => vm.deepCopy())\n\t\t\t\t.then((vm) => runCallWithCallTrace(vm, logger, callParams))\n\t\t\t\t.then((res) => /** @type {any} */ (res.trace))\n\t\t}\n\t\tif (params.tracer === '4byteTracer') {\n\t\t\tlogger.debug('traceCallHandler: using 4byteTracer')\n\t\t\treturn getVm()\n\t\t\t\t.then((vm) => vm.deepCopy())\n\t\t\t\t.then((vm) => runCallWithFourbyteTrace(vm, logger, callParams))\n\t\t\t\t.then((res) => /** @type {any} */ (res.trace))\n\t\t}\n\t\treturn getVm()\n\t\t\t.then((vm) => vm.deepCopy())\n\t\t\t.then((vm) => runCallWithTrace(vm, logger, callParams))\n\t\t\t.then((res) => /** @type {any} */ (res.trace))\n\t}\n","import { createAddress } from '@tevm/address'\nimport { createImpersonatedTx } from '@tevm/tx'\nimport { bytesToHex, hexToBigInt } from '@tevm/utils'\nimport { forkAndCacheBlock } from '../internal/forkAndCacheBlock.js'\nimport { serializeTraceResult } from '../internal/serializeTraceResult.js'\nimport { traceCallHandler } from './traceCallHandler.js'\n\n/**\n * Creates a JSON-RPC procedure handler for the `debug_traceBlock` method\n *\n * This handler traces the execution of all transactions in a block, providing\n * detailed traces for each transaction. It handles both block hash and block number\n * identifiers and supports multiple tracer types.\n *\n * @param {import('@tevm/node').TevmNode} client - The TEVM node instance\n * @returns {import('./DebugProcedure.js').DebugTraceBlockProcedure} A handler function for debug_traceBlock requests\n * @throws {Error} If the block cannot be found\n * @throws {Error} If the parent block's state root is not available and cannot be forked\n *\n * @example\n * ```javascript\n * import { createTevmNode } from '@tevm/node'\n * import { debugTraceBlockJsonRpcProcedure } from '@tevm/actions'\n *\n * // Create a node with automatic mining\n * const node = createTevmNode({ miningConfig: { type: 'auto' } })\n *\n * // Get a block\n * const blockNumber = await node.getBlockNumber()\n *\n * // Create the debug procedure handler\n * const debugProcedure = debugTraceBlockJsonRpcProcedure(node)\n *\n * // Trace the block\n * const trace = await debugProcedure({\n *   jsonrpc: '2.0',\n *   method: 'debug_traceBlock',\n *   params: [\n *     blockNumber,  // Or block hash as a hex string\n *     {\n *       tracer: 'callTracer',  // Or 'prestateTracer'\n *       tracerConfig: {\n *         // diffMode: true  // Only for prestateTracer\n *       }\n *     }\n *   ],\n *   id: 1\n * })\n *\n * console.log('Block transaction traces:', trace.result)\n * ```\n */\nexport const debugTraceBlockJsonRpcProcedure = (client) => {\n\t/**\n\t * @template {'callTracer' | 'prestateTracer' | '4byteTracer'} TTracer\n\t * @template {boolean} TDiffMode\n\t * @param {import('./DebugJsonRpcRequest.js').DebugTraceBlockJsonRpcRequest<TTracer, TDiffMode>} request\n\t * @returns {Promise<import('./DebugJsonRpcResponse.js').DebugTraceBlockJsonRpcResponse<TTracer, TDiffMode>>}\n\t */\n\treturn async (request) => {\n\t\t// Parse parameters from the request\n\t\tconst { tracer, timeout, tracerConfig, block: blockParam, blockTag, blockHash, blockNumber } = request.params[0]\n\t\tif (timeout !== undefined) {\n\t\t\tclient.logger.warn('Warning: timeout is currently respected param of debug_traceBlock')\n\t\t}\n\n\t\tclient.logger.debug({ blockTag, tracer, tracerConfig }, 'debug_traceBlock: executing with params')\n\n\t\tlet vm = await client.getVm()\n\t\tconst block = await vm.blockchain.getBlockByTag(blockParam ?? blockTag ?? blockHash ?? blockNumber ?? 'latest')\n\n\t\t// If no transactions in the block, return empty array\n\t\tif (block.transactions.length === 0) {\n\t\t\treturn {\n\t\t\t\tjsonrpc: '2.0',\n\t\t\t\tmethod: request.method,\n\t\t\t\t...(request.id !== undefined ? { id: request.id } : {}),\n\t\t\t\tresult: /** @type {any} */ ([]),\n\t\t\t}\n\t\t}\n\n\t\tconst parentBlock = await vm.blockchain.getBlock(block.header.parentHash)\n\t\t// Ensure the parent block's state root is available\n\t\tconst hasStateRoot = await vm.stateManager.hasStateRoot(parentBlock.header.stateRoot)\n\t\tif (!hasStateRoot && client.forkTransport) {\n\t\t\tvm = await forkAndCacheBlock(client, parentBlock)\n\t\t} else if (!hasStateRoot) {\n\t\t\treturn {\n\t\t\t\tjsonrpc: '2.0',\n\t\t\t\tmethod: request.method,\n\t\t\t\t...(request.id !== undefined ? { id: request.id } : {}),\n\t\t\t\terror: {\n\t\t\t\t\tcode: '-32602',\n\t\t\t\t\tmessage: 'State root not available for parent block',\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\t// Clone the VM and set initial state\n\t\tconst vmClone = await vm.deepCopy()\n\t\tawait vmClone.stateManager.setStateRoot(parentBlock.header.stateRoot)\n\n\t\t// Array to store trace results for each transaction\n\t\t/** @type {import('./DebugResult.js').DebugTraceBlockResult} */\n\t\tconst traceResults = []\n\n\t\t// Trace each transaction in the block\n\t\tfor (let i = 0; i < block.transactions.length; i++) {\n\t\t\tconst blockTx = block.transactions[i]\n\t\t\tif (!blockTx) continue\n\n\t\t\tconst impersonatedTx = createImpersonatedTx(\n\t\t\t\t{\n\t\t\t\t\t...blockTx,\n\t\t\t\t\tgasPrice: null,\n\t\t\t\t\timpersonatedAddress: createAddress(blockTx.getSenderAddress()),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tfreeze: false,\n\t\t\t\t\tcommon: vmClone.common.ethjsCommon,\n\t\t\t\t\tallowUnlimitedInitCodeSize: true,\n\t\t\t\t},\n\t\t\t)\n\t\t\t// Trace the transaction\n\t\t\tconst txParams = impersonatedTx.toJSON()\n\t\t\tconst traceResult = await traceCallHandler({ ...client, getVm: () => Promise.resolve(vmClone) })({\n\t\t\t\ttracer,\n\t\t\t\tfrom: impersonatedTx.getSenderAddress().toString(),\n\t\t\t\tblockTag: bytesToHex(block.header.hash()),\n\t\t\t\t...(txParams.to !== undefined ? { to: txParams.to } : {}),\n\t\t\t\t...(txParams.gasLimit !== undefined ? { gas: hexToBigInt(txParams.gasLimit) } : {}),\n\t\t\t\t...(txParams.gasPrice !== undefined ? { gasPrice: hexToBigInt(txParams.gasPrice) } : {}),\n\t\t\t\t...(txParams.value !== undefined ? { value: hexToBigInt(txParams.value) } : {}),\n\t\t\t\t...(txParams.data !== undefined ? { data: txParams.data } : {}),\n\t\t\t\t...(timeout !== undefined ? { timeout } : {}),\n\t\t\t\t.../** @type {any} */ (tracerConfig !== undefined ? { tracerConfig } : {}),\n\t\t\t})\n\n\t\t\t// Add to results\n\t\t\ttraceResults.push({\n\t\t\t\ttxHash: bytesToHex(blockTx.hash()),\n\t\t\t\ttxIndex: i,\n\t\t\t\tresult: traceResult,\n\t\t\t})\n\n\t\t\t// Actually run the call to update the vmClone state\n\t\t\tawait vmClone.runTx({\n\t\t\t\tblock,\n\t\t\t\tskipNonce: true,\n\t\t\t\tskipBalance: true,\n\t\t\t\tskipHardForkValidation: true,\n\t\t\t\tskipBlockGasLimitValidation: true,\n\t\t\t\ttx: impersonatedTx,\n\t\t\t})\n\t\t}\n\n\t\treturn {\n\t\t\tjsonrpc: '2.0',\n\t\t\tmethod: request.method,\n\t\t\tresult: /** @type {any} */ (\n\t\t\t\ttraceResults.map((trace) => ({ ...trace, result: serializeTraceResult(trace.result) }))\n\t\t\t),\n\t\t\t...(request.id !== undefined ? { id: request.id } : {}),\n\t\t}\n\t}\n}\n","import { hexToBigInt } from '@tevm/utils'\nimport { serializeTraceResult } from '../internal/serializeTraceResult.js'\nimport { traceCallHandler } from './traceCallHandler.js'\n\n/**\n * Request handler for debug_traceCall JSON-RPC requests.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./DebugProcedure.js').DebugTraceCallProcedure}\n */\nexport const debugTraceCallJsonRpcProcedure = (client) => {\n\t/**\n\t * @template {'callTracer' | 'prestateTracer' | '4byteTracer' | undefined} TTracer\n\t * @template {boolean} TDiffMode\n\t * @param {import('./DebugJsonRpcRequest.js').DebugTraceCallJsonRpcRequest<TTracer, TDiffMode>} request\n\t * @returns {Promise<import('./DebugJsonRpcResponse.js').DebugTraceCallJsonRpcResponse<TTracer, TDiffMode>>}\n\t */\n\treturn async (request) => {\n\t\tconst { blockTag, tracer, to, gas, data, from, value, timeout, gasPrice, tracerConfig } = request.params[0]\n\t\tif (timeout !== undefined) {\n\t\t\tclient.logger.warn('Warning: timeout is currently respected param of debug_traceCall')\n\t\t}\n\n\t\tconst traceResult = await traceCallHandler(client)({\n\t\t\ttracer,\n\t\t\t...(to !== undefined ? { to } : {}),\n\t\t\t...(from !== undefined ? { from } : {}),\n\t\t\t...(gas !== undefined ? { gas: typeof gas === 'bigint' ? gas : hexToBigInt(gas) } : {}),\n\t\t\t...(gasPrice !== undefined ? { gasPrice: typeof gasPrice === 'bigint' ? gasPrice : hexToBigInt(gasPrice) } : {}),\n\t\t\t...(value !== undefined ? { value: typeof value === 'bigint' ? value : hexToBigInt(value) } : {}),\n\t\t\t...(data !== undefined ? { data } : {}),\n\t\t\t...(blockTag !== undefined ? { blockTag } : {}),\n\t\t\t...(timeout !== undefined ? { timeout } : {}),\n\t\t\t.../** @type {any} */ (tracerConfig !== undefined ? { tracerConfig } : {}),\n\t\t})\n\n\t\treturn {\n\t\t\tmethod: request.method,\n\t\t\tresult: /** @type {any} */ (serializeTraceResult(traceResult)),\n\t\t\tjsonrpc: '2.0',\n\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t}\n\t}\n}\n","import { debugTraceStateFilters } from './DebugParams.js'\n\n/**\n * Request handler for debug_traceState JSON-RPC requests.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./DebugProcedure.js').DebugTraceStateProcedure}\n */\nexport const debugTraceStateJsonRpcProcedure = (client) => {\n\t/**\n\t * @template {Array<import('./DebugParams.js').DebugTraceStateFilter>} TStateFilters\n\t * @param {import('./DebugJsonRpcRequest.js').DebugTraceStateJsonRpcRequest<TStateFilters>} request\n\t * @returns {Promise<import('./DebugJsonRpcResponse.js').DebugTraceStateJsonRpcResponse<TStateFilters>>}\n\t */\n\treturn async (request) => {\n\t\tconst { filters: _filters, timeout } = request.params[0]\n\t\tif (timeout !== undefined) {\n\t\t\tclient.logger.warn('Warning: timeout is currently respected param of debug_traceState')\n\t\t}\n\n\t\tconst filters = _filters === undefined || _filters.length === 0 ? debugTraceStateFilters : _filters\n\n\t\t/** @type {any} */\n\t\tconst trace = {}\n\n\t\tconst vm = await client.getVm()\n\t\tconst txPool = await client.getTxPool()\n\n\t\t// TODO: do we need to make all of the following json serializable?\n\t\tif (filters.includes('blockchain') || filters.includes('blockchain.blocksByNumber')) {\n\t\t\ttrace['blockchain'] = { blocksByNumber: vm.blockchain.blocksByNumber }\n\t\t}\n\t\tif (filters.includes('blockchain') || filters.includes('blockchain.initOptions')) {\n\t\t\ttrace['blockchain'] = {\n\t\t\t\t...(trace['blockchain'] ?? {}),\n\t\t\t\tinitOptions: vm.blockchain.options,\n\t\t\t}\n\t\t}\n\n\t\tif (filters.includes('evm') || filters.includes('evm.opcodes')) {\n\t\t\ttrace['evm'] = { opcodes: vm.evm.getActiveOpcodes() }\n\t\t}\n\t\tif (filters.includes('evm') || filters.includes('evm.precompiles')) {\n\t\t\ttrace['evm'] = {\n\t\t\t\t...(trace['evm'] ?? {}),\n\t\t\t\tprecompiles: vm.evm.precompiles,\n\t\t\t}\n\t\t}\n\n\t\tif (filters.includes('evm') || filters.includes('evm.common') || filters.includes('evm.common.eips')) {\n\t\t\ttrace['evm'] = {\n\t\t\t\t...(trace['evm'] ?? {}),\n\t\t\t\tcommon: {\n\t\t\t\t\teips: vm.evm.common.eips(),\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t\tif (filters.includes('evm') || filters.includes('evm.common') || filters.includes('evm.common.hardfork')) {\n\t\t\ttrace['evm'] = {\n\t\t\t\t...(trace['evm'] ?? {}),\n\t\t\t\tcommon: {\n\t\t\t\t\t...(trace['evm']?.common ?? {}),\n\t\t\t\t\thardfork: vm.evm.common.hardfork(),\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t\tif (filters.includes('evm') || filters.includes('evm.common') || filters.includes('evm.common.consensus')) {\n\t\t\ttrace['evm'] = {\n\t\t\t\t...(trace['evm'] ?? {}),\n\t\t\t\tcommon: {\n\t\t\t\t\t...(trace['evm']?.common ?? {}),\n\t\t\t\t\tconsensus: {\n\t\t\t\t\t\talgorithm: vm.evm.common.consensusAlgorithm(),\n\t\t\t\t\t\ttype: vm.evm.common.consensusType(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\tif (filters.includes('node') || filters.includes('node.status')) {\n\t\t\ttrace['node'] = {\n\t\t\t\tstatus: client.status,\n\t\t\t}\n\t\t}\n\t\tif (filters.includes('node') || filters.includes('node.mode')) {\n\t\t\ttrace['node'] = {\n\t\t\t\t...(trace['node'] ?? {}),\n\t\t\t\tmode: client.mode,\n\t\t\t}\n\t\t}\n\t\tif (filters.includes('node') || filters.includes('node.miningConfig')) {\n\t\t\ttrace['node'] = {\n\t\t\t\t...(trace['node'] ?? {}),\n\t\t\t\tminingConfig: client.miningConfig,\n\t\t\t}\n\t\t}\n\t\tif (filters.includes('node') || filters.includes('node.filters')) {\n\t\t\ttrace['node'] = {\n\t\t\t\t...(trace['node'] ?? {}),\n\t\t\t\tfilters: client.getFilters(),\n\t\t\t}\n\t\t}\n\t\tif (filters.includes('node') || filters.includes('node.impersonatedAccount')) {\n\t\t\ttrace['node'] = {\n\t\t\t\t...(trace['node'] ?? {}),\n\t\t\t\timpersonatedAccount: client.getImpersonatedAccount(),\n\t\t\t}\n\t\t}\n\n\t\tif (filters.includes('pool') || filters.includes('pool.pool')) {\n\t\t\ttrace['pool'] = {\n\t\t\t\tpool: txPool.pool,\n\t\t\t}\n\t\t}\n\t\tif (filters.includes('pool') || filters.includes('pool.txsByHash')) {\n\t\t\ttrace['pool'] = {\n\t\t\t\t...(trace['pool'] ?? {}),\n\t\t\t\ttxsByHash: txPool.txsByHash,\n\t\t\t}\n\t\t}\n\t\tif (filters.includes('pool') || filters.includes('pool.txsByNonce')) {\n\t\t\ttrace['pool'] = {\n\t\t\t\t...(trace['pool'] ?? {}),\n\t\t\t\ttxsByNonce: txPool.txsByNonce,\n\t\t\t}\n\t\t}\n\t\tif (filters.includes('pool') || filters.includes('pool.txsInNonceOrder')) {\n\t\t\ttrace['pool'] = {\n\t\t\t\t...(trace['pool'] ?? {}),\n\t\t\t\ttxsInNonceOrder: txPool.txsInNonceOrder,\n\t\t\t}\n\t\t}\n\t\tif (filters.includes('pool') || filters.includes('pool.txsInPool')) {\n\t\t\ttrace['pool'] = {\n\t\t\t\t...(trace['pool'] ?? {}),\n\t\t\t\ttxsInPool: txPool.txsInPool,\n\t\t\t}\n\t\t}\n\n\t\tif (filters.includes('stateManager') || filters.includes('stateManager.storage')) {\n\t\t\ttrace['stateManager'] = {\n\t\t\t\t...(trace['stateManager'] ?? {}),\n\t\t\t\tstorage: await vm.stateManager.dumpCanonicalGenesis(),\n\t\t\t}\n\t\t}\n\t\tif (filters.includes('stateManager') || filters.includes('stateManager.stateRoots')) {\n\t\t\ttrace['stateManager'] = {\n\t\t\t\t...(trace['stateManager'] ?? {}),\n\t\t\t\tstateRoots: vm.stateManager._baseState.stateRoots,\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tmethod: request.method,\n\t\t\tresult: /** @type {any} */ (trace),\n\t\t\tjsonrpc: '2.0',\n\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t}\n\t}\n}\n","/**\n * Handler for the `eth_blockNumber` RPC call\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./EthHandler.js').EthBlockNumberHandler}\n */\nexport const blockNumberHandler = (client) => async () => {\n\tconst vm = await client.getVm()\n\treturn vm.blockchain.getCanonicalHeadBlock().then((block) => block.header.number)\n}\n","import { numberToHex } from '@tevm/utils'\nimport { blockNumberHandler } from './blockNumberHandler.js'\n\n/**\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./EthProcedure.js').EthBlockNumberJsonRpcProcedure}\n */\nexport const blockNumberProcedure = (client) => async (req) => ({\n\t...(req.id ? { id: req.id } : {}),\n\tjsonrpc: '2.0',\n\tmethod: req.method,\n\tresult: await blockNumberHandler(client)({}).then(numberToHex),\n})\n","/**\n * Handler for the `eth_chainId` RPC call.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./EthHandler.js').EthChainIdHandler}\n */\nexport const chainIdHandler = (client) => async () => {\n\tconst { common } = await client.getVm()\n\treturn BigInt(common.id)\n}\n","import { numberToHex } from '@tevm/utils'\nimport { chainIdHandler } from './chainIdHandler.js'\n\n/**\n * @param {import('@tevm/node').TevmNode} baseClient\n * @returns {import('./EthProcedure.js').EthChainIdJsonRpcProcedure}\n */\nexport const chainIdProcedure = (baseClient) => async (req) => ({\n\t...(req.id ? { id: req.id } : {}),\n\tjsonrpc: '2.0',\n\tmethod: req.method,\n\t// TODO pass in a client instead\n\tresult: await chainIdHandler(baseClient)({}).then(numberToHex),\n})\n","import { numberToHex } from '@tevm/utils'\n\n/**\n * Request handler for eth_blobBaseFee JSON-RPC requests.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./EthProcedure.js').EthBlobBaseFeeJsonRpcProcedure}\n */\nexport const ethBlobBaseFeeJsonRpcProcedure = (client) => {\n\treturn async (request) => {\n\t\tconst vm = await client.getVm()\n\t\tconst headBlock = await vm.blockchain.getCanonicalHeadBlock()\n\t\treturn {\n\t\t\tresult: numberToHex(headBlock.header.calcNextBlobGasPrice()),\n\t\t\tjsonrpc: '2.0',\n\t\t\tmethod: request.method,\n\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t}\n\t}\n}\n","import { callProcedure } from '../Call/callProcedure.js'\n\n/**\n * Executes a message call without creating a transaction on the block chain.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./EthProcedure.js').EthCallJsonRpcProcedure}\n */\nexport const ethCallProcedure = (client) => async (req) => {\n\tconst [tx, blockTag, stateOverrideSet, blockOverrideSet] = req.params\n\tconst { data, from, to, gas, gasPrice, value } = tx\n\tconst response = await callProcedure(client)({\n\t\t...(req.id !== undefined ? { id: req.id } : {}),\n\t\tjsonrpc: req.jsonrpc,\n\t\tmethod: 'tevm_call',\n\t\tparams: [\n\t\t\t{\n\t\t\t\t...(gasPrice !== undefined ? { gasPrice } : {}),\n\t\t\t\t...(data !== undefined ? { data } : {}),\n\t\t\t\t...(gas !== undefined ? { gas } : {}),\n\t\t\t\t...(value !== undefined ? { value } : {}),\n\t\t\t\t...(to !== undefined ? { to } : {}),\n\t\t\t\t...(from !== undefined ? { from } : {}),\n\t\t\t\t...(blockTag !== undefined ? { blockTag } : {}),\n\t\t\t\taddToBlockchain: false,\n\t\t\t},\n\t\t\tstateOverrideSet,\n\t\t\tblockOverrideSet,\n\t\t],\n\t})\n\tif (!response.result) {\n\t\treturn {\n\t\t\tjsonrpc: req.jsonrpc,\n\t\t\tmethod: 'eth_call',\n\t\t\terror: response.error,\n\t\t\t...(req.id !== undefined ? { id: req.id } : {}),\n\t\t}\n\t}\n\treturn {\n\t\tjsonrpc: req.jsonrpc,\n\t\tmethod: 'eth_call',\n\t\tresult: response.result.rawData,\n\t\t...(req.id !== undefined ? { id: req.id } : {}),\n\t}\n}\n","/**\n * Request handler for eth_coinbase JSON-RPC requests.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./EthProcedure.js').EthCoinbaseJsonRpcProcedure}\n */\nexport const ethCoinbaseJsonRpcProcedure = (client) => {\n\treturn async (request) => {\n\t\treturn {\n\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\tmethod: request.method,\n\t\t\tjsonrpc: request.jsonrpc,\n\t\t\t// same default as hardhat\n\t\t\tresult: await client\n\t\t\t\t.getVm()\n\t\t\t\t.then((vm) => vm.blockchain.getCanonicalHeadBlock())\n\t\t\t\t.then((block) => /** @type {import('@tevm/utils').Address}*/ (block.header.coinbase.toString())),\n\t\t}\n\t}\n}\n","import { callProcedure } from '../Call/callProcedure.js'\n\n/**\n * Request handler for eth_estimateGas JSON-RPC requests.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./EthProcedure.js').EthEstimateGasJsonRpcProcedure}\n */\nexport const ethEstimateGasJsonRpcProcedure = (client) => {\n\treturn async (request) => {\n\t\tconst estimateGasRequest = /** @type {import('./EthJsonRpcRequest.js').EthEstimateGasJsonRpcRequest}*/ (request)\n\t\tconst [_params, blockTag, stateOverrides, blockOverrides] = estimateGasRequest.params\n\n\t\tconst getParams = () => {\n\t\t\t/**\n\t\t\t * @type {import('../Call/CallJsonRpcRequest.js').CallJsonRpcRequest['params']}\n\t\t\t */\n\t\t\tconst params = [\n\t\t\t\t{\n\t\t\t\t\t..._params,\n\t\t\t\t\t...(blockTag !== undefined ? { blockTag } : {}),\n\t\t\t\t},\n\t\t\t]\n\t\t\tif (blockOverrides !== undefined) {\n\t\t\t\tparams.push(stateOverrides ?? {}, blockOverrides)\n\t\t\t}\n\t\t\tif (stateOverrides !== undefined) {\n\t\t\t\tparams.push(...params, stateOverrides)\n\t\t\t}\n\t\t\treturn params\n\t\t}\n\n\t\tconst [baseParams, ...params] = getParams()\n\t\tconst callResult = await callProcedure(client)({\n\t\t\t...estimateGasRequest,\n\t\t\tparams: [\n\t\t\t\t{\n\t\t\t\t\t...baseParams,\n\t\t\t\t\taddToBlockchain: false,\n\t\t\t\t},\n\t\t\t\t...params,\n\t\t\t],\n\t\t\tmethod: 'tevm_call',\n\t\t})\n\t\tif (callResult.error || !callResult.result) {\n\t\t\treturn {\n\t\t\t\t...callResult,\n\t\t\t\tmethod: estimateGasRequest.method,\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tmethod: estimateGasRequest.method,\n\t\t\tresult: callResult.result.totalGasSpent ?? callResult.result.executionGasUsed,\n\t\t\tjsonrpc: '2.0',\n\t\t\t...(estimateGasRequest.id ? { id: estimateGasRequest.id } : {}),\n\t\t}\n\t}\n}\n","import { bytesToHex, numberToHex } from '@tevm/utils'\n\n/**\n * @param {import('@tevm/tx').TypedTransaction | import('@tevm/tx').ImpersonatedTx} tx\n * @param {import('@tevm/block').Block} block\n * @param {number} [txIndex]\n * @returns {import('../common/TransactionResult.js').TransactionResult}\n */\nexport const txToJsonRpcTx = (tx, block, txIndex) => {\n\tconst txJSON = tx.toJSON()\n\t// TODO make this typing less janky\n\treturn /** @type {import('../common/TransactionResult.js').TransactionResult} */ ({\n\t\tblockHash: bytesToHex(block.hash()),\n\t\tblockNumber: numberToHex(block.header.number),\n\t\tfrom: /** @type {import('@tevm/utils').Address}*/ (tx.getSenderAddress().toString()),\n\t\tgas: /** @type {import('@tevm/utils').Hex} **/ (txJSON.gasLimit),\n\t\tgasPrice: /** @type {import('@tevm/utils').Hex}*/ (txJSON.gasPrice ?? txJSON.maxFeePerGas),\n\t\tmaxFeePerGas: txJSON.maxFeePerGas,\n\t\tmaxPriorityFeePerGas: txJSON.maxPriorityFeePerGas,\n\t\ttype: numberToHex(tx.type),\n\t\t...(txJSON.accessList !== undefined ? { accessList: txJSON.accessList } : {}),\n\t\thash: bytesToHex(tx.hash()),\n\t\tinput: /** @type {import('@tevm/utils').Hex} */ (txJSON.data),\n\t\tnonce: /** @type {import('@tevm/utils').Hex}*/ (txJSON.nonce),\n\t\t// these toString existed in ethereumjs but I don't think are necessary\n\t\t...(txJSON.to !== undefined ? { to: /** @type {import('@tevm/utils').Address} */ (txJSON.to.toString()) } : {}),\n\t\t...(txIndex !== undefined ? { transactionIndex: numberToHex(txIndex) } : {}),\n\t\t...(txJSON.value !== undefined\n\t\t\t? { value: typeof txJSON.value === 'string' ? txJSON.value : numberToHex(txJSON.value) }\n\t\t\t: {}),\n\t\t...('isImpersonated' in tx ? { isImpersonated: tx.isImpersonated } : {}),\n\t\t...(txJSON.v !== undefined ? { v: txJSON.v } : {}),\n\t\t...(txJSON.r !== undefined ? { r: txJSON.r } : {}),\n\t\t...(txJSON.s !== undefined ? { s: txJSON.s } : {}),\n\t\t...(txJSON.chainId !== undefined\n\t\t\t? { chainId: typeof txJSON.chainId === 'string' ? txJSON.chainId : numberToHex(txJSON.chainId) }\n\t\t\t: {}),\n\t\tmaxFeePerBlobGas: txJSON.maxFeePerBlobGas,\n\t\tblobVersionedHashes: txJSON.blobVersionedHashes,\n\t})\n}\n","import { bytesToHex, numberToHex, toBytes } from '@tevm/utils'\nimport { txToJsonRpcTx } from './txToJsonRpcTx.js'\n\n/**\n * @param {import('@tevm/block').Block} block\n * @param {boolean} includeTransactions\n * @returns {Promise<Required<import('../eth/EthJsonRpcResponse.js').EthGetBlockByHashJsonRpcResponse>['result']>}\n */\nexport const blockToJsonRpcBlock = async (block, includeTransactions) => {\n\tconst json = block.toJSON()\n\tconst header = /** @type {import('@tevm/block').JsonHeader}*/ (json.header)\n\tconst transactions = block.transactions.map((tx, txIndex) =>\n\t\tincludeTransactions ? txToJsonRpcTx(tx, block, txIndex) : bytesToHex(tx.hash()),\n\t)\n\n\t/**\n\t * @type {import('../eth/EthJsonRpcResponse.js').EthGetBlockByHashJsonRpcResponse['result']}\n\t */\n\tconst out = {\n\t\tnumber: /** @type {import('@tevm/utils').Hex}*/ (header.number),\n\t\thash: bytesToHex(block.hash()),\n\t\tparentHash: /** @type {import('@tevm/utils').Hex}*/ (header.parentHash),\n\t\t// TODO add this to the type\n\t\t...{ mixHash: header.mixHash },\n\t\tnonce: /** @type {import('@tevm/utils').Hex}*/ (header.nonce),\n\t\tsha3Uncles: /** @type {import('@tevm/utils').Hex}*/ (header.uncleHash),\n\t\tlogsBloom: /** @type {import('@tevm/utils').Hex}*/ (header.logsBloom),\n\t\ttransactionsRoot: /** @type {import('@tevm/utils').Hex}*/ (header.transactionsTrie),\n\t\tstateRoot: /** @type {import('@tevm/utils').Hex}*/ (header.stateRoot),\n\t\tminer: /** @type {import('@tevm/utils').Address}*/ (header.coinbase),\n\t\tdifficulty: /** @type {import('@tevm/utils').Hex}*/ (header.difficulty),\n\t\t// TODO we need to actually add this\n\t\ttotalDifficulty: /** @type {import('@tevm/utils').Hex}*/ ('0x0'),\n\t\textraData: /** @type {import('@tevm/utils').Hex}*/ (header.extraData),\n\t\tsize: numberToHex(toBytes(JSON.stringify(json)).byteLength),\n\t\tgasLimit: /** @type {import('@tevm/utils').Hex}*/ (header.gasLimit),\n\t\tgasUsed: /** @type {import('@tevm/utils').Hex}*/ (header.gasUsed),\n\t\ttimestamp: /** @type {import('@tevm/utils').Hex}*/ (header.timestamp),\n\t\tuncles: block.uncleHeaders.map((uh) => bytesToHex(uh.hash())),\n\t\t// TODO fix this type\n\t\ttransactions: /** @type any*/ (transactions),\n\t\t// TODO add this to the type\n\t\t...{ baseFeePerGas: header.baseFeePerGas },\n\t\t...{ receiptsRoot: header.receiptTrie },\n\t\t...(header.withdrawalsRoot !== undefined\n\t\t\t? {\n\t\t\t\t\twithdrawalsRoot: header.withdrawalsRoot,\n\t\t\t\t\twithdrawals: json.withdrawals,\n\t\t\t\t}\n\t\t\t: {}),\n\t\t...(header.blobGasUsed !== undefined ? { blobGasUsed: header.blobGasUsed } : {}),\n\t\t// TODO add this to the type\n\t\t...{ requestsRoot: header.requestsRoot },\n\t\t// TODO add this to the type\n\t\t...{ requests: block.requests?.map((req) => bytesToHex(req.serialize())) },\n\t\t// TODO add this to the type\n\t\t...{ excessBlobGas: header.excessBlobGas },\n\t\t// TODO add this to the type\n\t\t...{ parentBeaconBlockRoot: header.parentBeaconBlockRoot },\n\t}\n\n\treturn out\n}\n","import { hexToBytes } from '@tevm/utils'\nimport { blockToJsonRpcBlock } from '../utils/blockToJsonRpcBlock.js'\n\n/**\n * Request handler for eth_getBlockByHash JSON-RPC requests.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./EthProcedure.js').EthGetBlockByHashJsonRpcProcedure}\n */\nexport const ethGetBlockByHashJsonRpcProcedure = (client) => {\n\treturn async (request) => {\n\t\tconst vm = await client.getVm()\n\t\tconst block = await vm.blockchain.getBlock(hexToBytes(request.params[0]))\n\t\tconst includeTransactions = request.params[1] ?? false\n\t\tconst result = await blockToJsonRpcBlock(block, includeTransactions)\n\t\treturn {\n\t\t\tmethod: request.method,\n\t\t\tresult,\n\t\t\tjsonrpc: '2.0',\n\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t}\n\t}\n}\n","import { createJsonRpcFetcher } from '@tevm/jsonrpc'\nimport { hexToBigInt } from '@tevm/utils'\nimport { blockToJsonRpcBlock } from '../utils/blockToJsonRpcBlock.js'\n\n/**\n * Request handler for eth_getBlockByNumber JSON-RPC requests.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./EthProcedure.js').EthGetBlockByNumberJsonRpcProcedure}\n */\nexport const ethGetBlockByNumberJsonRpcProcedure = (client) => {\n\treturn async (request) => {\n\t\tconst vm = await client.getVm()\n\t\tconst blockTagOrNumber = request.params[0]\n\t\tconst block = await (() => {\n\t\t\tif (blockTagOrNumber.startsWith('0x')) {\n\t\t\t\treturn vm.blockchain.getBlock(hexToBigInt(/** @type {import('@tevm/utils').Hex}*/ (blockTagOrNumber)))\n\t\t\t}\n\t\t\treturn vm.blockchain.blocksByTag.get(/** @type {import('@tevm/utils').BlockTag}*/ (blockTagOrNumber))\n\t\t})()\n\n\t\tif (!block && client.forkTransport) {\n\t\t\tconst fetcher = createJsonRpcFetcher(client.forkTransport)\n\t\t\tconst res = await fetcher.request({\n\t\t\t\tjsonrpc: '2.0',\n\t\t\t\tid: request.id ?? 1,\n\t\t\t\tmethod: request.method,\n\t\t\t\tparams: [blockTagOrNumber, request.params[1] ?? false],\n\t\t\t})\n\t\t\tif (res.error) {\n\t\t\t\treturn {\n\t\t\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\t\t\tmethod: request.method,\n\t\t\t\t\tjsonrpc: request.jsonrpc,\n\t\t\t\t\terror: res.error,\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\t\tmethod: request.method,\n\t\t\t\tjsonrpc: request.jsonrpc,\n\t\t\t\tresult: /** @type {any}*/ (res.result),\n\t\t\t}\n\t\t}\n\t\tif (!block) {\n\t\t\treturn {\n\t\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\t\tmethod: request.method,\n\t\t\t\tjsonrpc: request.jsonrpc,\n\t\t\t\terror: {\n\t\t\t\t\tcode: -32602,\n\t\t\t\t\tmessage: `Invalid block tag ${blockTagOrNumber}`,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t\tconst includeTransactions = request.params[1] ?? false\n\t\tconst result = await blockToJsonRpcBlock(block, includeTransactions)\n\t\treturn {\n\t\t\tmethod: request.method,\n\t\t\tresult,\n\t\t\tjsonrpc: '2.0',\n\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t}\n\t}\n}\n","import { hexToBytes, numberToHex } from '@tevm/utils'\n\n/**\n * Request handler for eth_getBlockTransactionCountByHash JSON-RPC requests.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./EthProcedure.js').EthGetBlockTransactionCountByHashJsonRpcProcedure}\n */\nexport const ethGetBlockTransactionCountByHashJsonRpcProcedure = (client) => {\n\treturn async (request) => {\n\t\tconst vm = await client.getVm()\n\t\tconst block = await vm.blockchain.getBlock(hexToBytes(request.params[0]))\n\t\tconst result = block.transactions.length\n\t\treturn {\n\t\t\tmethod: request.method,\n\t\t\tresult: numberToHex(result),\n\t\t\tjsonrpc: '2.0',\n\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t}\n\t}\n}\n","import { hexToBigInt, numberToHex } from '@tevm/utils'\n\n/**\n * Request handler for eth_getBlockTransactionCountByNumber JSON-RPC requests.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./EthProcedure.js').EthGetBlockTransactionCountByNumberJsonRpcProcedure}\n */\nexport const ethGetBlockTransactionCountByNumberJsonRpcProcedure = (client) => {\n\treturn async (request) => {\n\t\tconst vm = await client.getVm()\n\t\tconst blockTagOrNumber = request.params[0]\n\t\tconst block = await (() => {\n\t\t\tif (blockTagOrNumber.startsWith('0x')) {\n\t\t\t\treturn vm.blockchain.getBlock(hexToBigInt(/** @type {import('@tevm/utils').Hex}*/ (blockTagOrNumber)))\n\t\t\t}\n\t\t\treturn vm.blockchain.blocksByTag.get(/** @type {import('@tevm/utils').BlockTag}*/ (blockTagOrNumber))\n\t\t})()\n\t\tif (!block) {\n\t\t\treturn {\n\t\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\t\tmethod: request.method,\n\t\t\t\tjsonrpc: request.jsonrpc,\n\t\t\t\terror: {\n\t\t\t\t\tcode: -32602,\n\t\t\t\t\tmessage: `Invalid block tag ${blockTagOrNumber}`,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t\tconst result = block.transactions.length\n\t\treturn {\n\t\t\tmethod: request.method,\n\t\t\tresult: numberToHex(result),\n\t\t\tjsonrpc: '2.0',\n\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t}\n\t}\n}\n","import { bytesToHex, numberToHex } from '@tevm/utils'\n\n/**\n * Request handler for eth_getFilterChanges JSON-RPC requests.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./EthProcedure.js').EthGetFilterChangesJsonRpcProcedure}\n */\nexport const ethGetFilterChangesProcedure = (client) => {\n\treturn async (request) => {\n\t\tconst getFilterChangesRequest =\n\t\t\t/** @type {import('./EthJsonRpcRequest.js').EthGetFilterChangesJsonRpcRequest}*/\n\t\t\t(request)\n\t\tconst [id] = getFilterChangesRequest.params\n\t\tconst filter = client.getFilters().get(id)\n\t\tif (!filter) {\n\t\t\treturn {\n\t\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\t\tmethod: request.method,\n\t\t\t\tjsonrpc: request.jsonrpc,\n\t\t\t\terror: {\n\t\t\t\t\tcode: -32601,\n\t\t\t\t\tmessage: 'Method not implemented yet',\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t\tswitch (filter.type) {\n\t\t\tcase 'Log': {\n\t\t\t\tconst { logs } = filter\n\t\t\t\t/**\n\t\t\t\t * @type {import('./EthJsonRpcResponse.js').EthGetFilterChangesJsonRpcResponse}\n\t\t\t\t */\n\t\t\t\tconst response = {\n\t\t\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\t\t\tmethod: request.method,\n\t\t\t\t\tjsonrpc: request.jsonrpc,\n\t\t\t\t\tresult: logs.map((log) => ({\n\t\t\t\t\t\taddress: log.address,\n\t\t\t\t\t\ttopics: log.topics,\n\t\t\t\t\t\tdata: log.data,\n\t\t\t\t\t\tblockNumber: numberToHex(log.blockNumber),\n\t\t\t\t\t\ttransactionHash: log.transactionHash,\n\t\t\t\t\t\ttransactionIndex: numberToHex(log.transactionIndex),\n\t\t\t\t\t\tblockHash: log.blockHash,\n\t\t\t\t\t\tlogIndex: numberToHex(log.logIndex),\n\t\t\t\t\t\tremoved: log.removed,\n\t\t\t\t\t})),\n\t\t\t\t}\n\t\t\t\tfilter.logs = []\n\t\t\t\treturn response\n\t\t\t}\n\t\t\tcase 'Block': {\n\t\t\t\tconst { blocks } = filter\n\t\t\t\t/**\n\t\t\t\t * @type {import('./EthJsonRpcResponse.js').EthGetFilterChangesJsonRpcResponse}\n\t\t\t\t */\n\t\t\t\tconst response = {\n\t\t\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\t\t\t// TODO fix this type\n\t\t\t\t\tresult: /** @type {any} */ (blocks.map((block) => numberToHex(block.header.number))),\n\t\t\t\t\tmethod: request.method,\n\t\t\t\t\tjsonrpc: request.jsonrpc,\n\t\t\t\t}\n\t\t\t\tfilter.blocks = []\n\t\t\t\treturn response\n\t\t\t}\n\t\t\tcase 'PendingTransaction': {\n\t\t\t\tconst { tx } = filter\n\t\t\t\t/**\n\t\t\t\t * @type {import('./EthJsonRpcResponse.js').EthGetFilterChangesJsonRpcResponse}\n\t\t\t\t */\n\t\t\t\tconst response = {\n\t\t\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\t\t\t// TODO fix this type\n\t\t\t\t\tresult: /** @type {any} */ (tx.map((tx) => bytesToHex(tx.hash()))),\n\t\t\t\t\tmethod: request.method,\n\t\t\t\t\tjsonrpc: request.jsonrpc,\n\t\t\t\t}\n\t\t\t\tfilter.tx = []\n\t\t\t\treturn response\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'InternalError: Unknown filter type. This indicates a bug in tevm or potentially a typo in filter type if manually added',\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n}\n","/**\n * Type guard to check if a value is an array of type T or a single value of type T\n * @template T\n * @param {T | T[] | readonly T[]} value\n * @returns {value is T[] | readonly T[]}\n */\nexport function isArray(value) {\n\treturn Array.isArray(value)\n}\n","import { InvalidBlockError } from '@tevm/errors'\nimport { hexToBigInt, hexToBytes } from '@tevm/utils'\n\n/**\n * @param {import('@tevm/blockchain').Chain} blockchain\n * @param {import('../../common/BlockParam.js').BlockParam} blockParam\n * @returns {Promise<bigint >}\n */\nexport const parseBlockParam = async (blockchain, blockParam) => {\n\tif (typeof blockParam === 'number') {\n\t\treturn BigInt(blockParam)\n\t}\n\tif (typeof blockParam === 'bigint') {\n\t\treturn blockParam\n\t}\n\tif (typeof blockParam === 'string' && blockParam.startsWith('0x')) {\n\t\tif (blockParam.length === 66) {\n\t\t\tconst block = await blockchain.getBlock(hexToBytes(/** @type {import('@tevm/utils').Hex}*/ (blockParam)))\n\t\t\treturn BigInt(block.header.number)\n\t\t}\n\t\treturn hexToBigInt(/** @type {import('@tevm/utils').Hex}*/ (blockParam))\n\t}\n\tif (blockParam === 'safe') {\n\t\tconst safeBlock = blockchain.blocksByTag.get('safe')\n\t\t// let's handle it here in case we forget to update it later\n\t\tif (safeBlock) {\n\t\t\treturn safeBlock.header.number\n\t\t}\n\t\tthrow new InvalidBlockError('safe not currently supported as block tag')\n\t}\n\tif (blockParam === 'latest' || blockParam === undefined) {\n\t\tconst safeBlock = blockchain.blocksByTag.get('latest')\n\t\t// let's handle it here in case we forget to update it later\n\t\tif (safeBlock) {\n\t\t\treturn safeBlock.header.number\n\t\t}\n\t\tthrow new InvalidBlockError('latest block does not exist on chain')\n\t}\n\tif (blockParam === 'pending') {\n\t\t// for pending we need to mine a new block and then handle it\n\t\t// let's skip this functionality for now\n\t\tthrow new InvalidBlockError(\n\t\t\t'Pending not yet supported but will be in future. Consider opening an issue or reaching out on telegram if you need this feature to expediate its release',\n\t\t)\n\t}\n\tif (blockParam === 'earliest') {\n\t\treturn BigInt(1)\n\t}\n\tif (blockParam === 'finalized') {\n\t\tthrow new InvalidBlockError('finalized noet yet supported for this feature')\n\t}\n\tblockchain.logger.error({ blockParam }, 'Unknown block param pased to blockNumberHandler')\n\tthrow new InvalidBlockError(`Unknown block param ${blockParam} pased to blockNumberHandler`)\n}\n","import { createAddress } from '@tevm/address'\nimport { createJsonRpcFetcher } from '@tevm/jsonrpc'\nimport { bytesToHex, hexToBigInt, hexToBytes, numberToHex } from '@tevm/utils'\nimport { InternalRpcError } from 'viem'\nimport { getPendingClient } from '../internal/getPendingClient.js'\nimport { isArray } from '../utils/isArray.js'\nimport { parseBlockParam } from './utils/parseBlockParam.js'\n\n// TODO support EIP-234\n/**\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./EthHandler.js').EthGetLogsHandler}\n */\nexport const ethGetLogsHandler = (client) => async (params) => {\n\tclient.logger.debug(params, 'ethGetLogsHandler called with params')\n\tconst vm = await client.getVm()\n\tconst receiptsManager = await client.getReceiptsManager()\n\n\tif (params.filterParams.toBlock === 'pending') {\n\t\tconst mineResult = await getPendingClient(client)\n\t\tif (mineResult.errors) {\n\t\t\tthrow mineResult.errors[0]\n\t\t}\n\t\treturn ethGetLogsHandler(mineResult.pendingClient)({\n\t\t\t...params,\n\t\t\tfilterParams: { ...params.filterParams, toBlock: 'latest' },\n\t\t})\n\t}\n\n\t// TODO make this more parallized\n\tconst fromBlock = await vm.blockchain.getBlock(\n\t\tawait parseBlockParam(vm.blockchain, params.filterParams.fromBlock ?? 0n),\n\t)\n\tconst toBlock = await vm.blockchain.getBlock(\n\t\tawait parseBlockParam(vm.blockchain, params.filterParams.toBlock ?? 'latest'),\n\t)\n\tconst forkedBlock = vm.blockchain.blocksByTag.get('forked')\n\n\t/**\n\t * @type {import('./EthResult.js').EthGetLogsResult}\n\t */\n\tconst logs = []\n\n\tconst fetchFromRpc = forkedBlock && forkedBlock.header.number >= fromBlock.header.number\n\n\tif (fetchFromRpc) {\n\t\t// if the range includes prefork blocks (including fork since we don't have receipts for the fork block) then we need to fetch the logs from the forked chain\n\t\tif (!client.forkTransport) {\n\t\t\tthrow new InternalRpcError(\n\t\t\t\tnew Error(\n\t\t\t\t\t'InternalError: no forkUrl set on client despite a forkBlock. This should be an impossible state and indicates a bug in tevm',\n\t\t\t\t),\n\t\t\t)\n\t\t}\n\t\tconst fetcher = createJsonRpcFetcher(client.forkTransport)\n\t\tconst { result: jsonRpcLogs, error } = await fetcher.request({\n\t\t\tjsonrpc: '2.0',\n\t\t\tid: 1,\n\t\t\tmethod: 'eth_getLogs',\n\t\t\tparams: [\n\t\t\t\t{\n\t\t\t\t\tfromBlock: numberToHex(fromBlock.header.number),\n\t\t\t\t\ttoBlock:\n\t\t\t\t\t\ttoBlock.header.number < forkedBlock.header.number\n\t\t\t\t\t\t\t? numberToHex(toBlock.header.number)\n\t\t\t\t\t\t\t: numberToHex(forkedBlock.header.number),\n\t\t\t\t\taddress: params.filterParams.address,\n\t\t\t\t\ttopics: params.filterParams.topics,\n\t\t\t\t},\n\t\t\t],\n\t\t})\n\t\tif (error) {\n\t\t\tthrow error\n\t\t}\n\t\t/**\n\t\t * @typedef {Object} Log\n\t\t * @property {import('@tevm/utils').Hex} address\n\t\t * @property {Array.<import('@tevm/utils').Hex>} topics\n\t\t * @property {import('@tevm/utils').Hex} data\n\t\t * @property {import('@tevm/utils').Hex} blockNumber\n\t\t * @property {import('@tevm/utils').Hex} transactionHash\n\t\t * @property {import('@tevm/utils').Hex} transactionIndex\n\t\t * @property {import('@tevm/utils').Hex} blockHash\n\t\t * @property {import('@tevm/utils').Hex} logIndex\n\t\t * @property {boolean} removed\n\t\t */\n\n\t\tconst typedLogs =\n\t\t\t/**\n\t\t\t * @type {Array<Log> | undefined}\n\t\t\t */\n\t\t\t(jsonRpcLogs ?? undefined)\n\n\t\tif (typedLogs !== undefined) {\n\t\t\tlogs.push(\n\t\t\t\t...typedLogs.map((log) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tremoved: false,\n\t\t\t\t\t\tlogIndex: hexToBigInt(log.logIndex),\n\t\t\t\t\t\ttransactionIndex: hexToBigInt(log.transactionIndex),\n\t\t\t\t\t\ttransactionHash: log.transactionHash,\n\t\t\t\t\t\tblockHash: log.blockHash,\n\t\t\t\t\t\tblockNumber: hexToBigInt(log.blockNumber),\n\t\t\t\t\t\taddress: log.address,\n\t\t\t\t\t\ttopics: log.topics,\n\t\t\t\t\t\tdata: log.data,\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\t}\n\n\t// if log filter doesn't go into tevm mined blocks then we don't need to check the cache\n\tif (forkedBlock && toBlock.header.number <= forkedBlock.header.number) {\n\t\treturn logs\n\t}\n\n\tconst cachedLogs = await receiptsManager.getLogs(\n\t\tfetchFromRpc ? /** @type {import('@tevm/block').Block}*/ (forkedBlock) : fromBlock,\n\t\ttoBlock,\n\t\tparams.filterParams.address !== undefined ? [createAddress(params.filterParams.address).bytes] : [],\n\t\t// params.filterParams.topics?.map((topic) => hexToBytes(topic)),\n\n\t\tparams.filterParams.topics?.map((topic) => (isArray(topic) ? topic.map(hexToBytes) : hexToBytes(topic))),\n\t)\n\tlogs.push(\n\t\t...cachedLogs.map(({ log, block, tx, txIndex, logIndex }) => ({\n\t\t\t// what does this mean?\n\t\t\tremoved: false,\n\t\t\tlogIndex: BigInt(logIndex),\n\t\t\ttransactionIndex: BigInt(txIndex),\n\t\t\ttransactionHash: bytesToHex(tx.hash()),\n\t\t\tblockHash: bytesToHex(block.hash()),\n\t\t\tblockNumber: block.header.number,\n\t\t\taddress: bytesToHex(log[0]),\n\t\t\ttopics: log[1].map((topic) => bytesToHex(topic)),\n\t\t\tdata: bytesToHex(log[2]),\n\t\t})),\n\t)\n\treturn logs\n}\n","import { numberToHex } from '@tevm/utils'\nimport { ethGetLogsHandler } from './ethGetLogsHandler.js'\n\n/**\n * Request handler for eth_getFilterLogs JSON-RPC requests.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./EthProcedure.js').EthGetFilterLogsJsonRpcProcedure}\n */\nexport const ethGetFilterLogsProcedure = (client) => {\n\treturn async (request) => {\n\t\tconst filter = client.getFilters().get(request.params[0])\n\t\tif (!filter) {\n\t\t\treturn {\n\t\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\t\tmethod: request.method,\n\t\t\t\tjsonrpc: request.jsonrpc,\n\t\t\t\terror: {\n\t\t\t\t\tcode: -32602,\n\t\t\t\t\tmessage: 'Filter not found',\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t\ttry {\n\t\t\tconst ethGetLogsResult = await ethGetLogsHandler(client)({\n\t\t\t\tfilterParams: {\n\t\t\t\t\tfromBlock: filter.logsCriteria.fromBlock?.header?.number ?? 0n,\n\t\t\t\t\ttoBlock: filter.logsCriteria.toBlock?.header?.number ?? 'latest',\n\t\t\t\t\taddress: filter.logsCriteria.address,\n\t\t\t\t\ttopics: filter.logsCriteria.topics,\n\t\t\t\t},\n\t\t\t})\n\t\t\t/**\n\t\t\t * @type {Required<import('./EthJsonRpcResponse.js').EthGetFilterLogsJsonRpcResponse>['result']}\n\t\t\t */\n\t\t\tconst jsonRpcResult = ethGetLogsResult.map((log) => ({\n\t\t\t\taddress: log.address,\n\t\t\t\ttopics: [...log.topics],\n\t\t\t\tdata: log.data,\n\t\t\t\tblockNumber: numberToHex(log.blockNumber),\n\t\t\t\ttransactionHash: log.transactionHash,\n\t\t\t\ttransactionIndex: numberToHex(log.transactionIndex),\n\t\t\t\tblockHash: log.blockHash,\n\t\t\t\tlogIndex: numberToHex(log.logIndex),\n\t\t\t\tremoved: log.removed,\n\t\t\t}))\n\t\t\treturn {\n\t\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\t\tmethod: request.method,\n\t\t\t\tjsonrpc: request.jsonrpc,\n\t\t\t\tresult: jsonRpcResult,\n\t\t\t}\n\t\t} catch (e) {\n\t\t\treturn {\n\t\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\t\tmethod: request.method,\n\t\t\t\tjsonrpc: request.jsonrpc,\n\t\t\t\terror: {\n\t\t\t\t\tcode: -32601,\n\t\t\t\t\tmessage: /** @type {Error}*/ (e).message,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t}\n}\n","import { numberToHex } from '@tevm/utils'\nimport { ethGetLogsHandler } from './ethGetLogsHandler.js'\n\n/**\n * Executes a message call without creating a transaction on the block chain.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./EthProcedure.js').EthGetLogsJsonRpcProcedure}\n */\nexport const ethGetLogsProcedure = (client) => async (req) => {\n\tconst result = await ethGetLogsHandler(client)({\n\t\tfilterParams: req.params[0],\n\t})\n\ttry {\n\t\tconst jsonRpcResult = result.map((log) => ({\n\t\t\taddress: log.address,\n\t\t\ttopics: log.topics,\n\t\t\tdata: log.data,\n\t\t\tblockNumber: numberToHex(log.blockNumber),\n\t\t\ttransactionHash: log.transactionHash,\n\t\t\ttransactionIndex: numberToHex(log.transactionIndex),\n\t\t\tblockHash: log.blockHash,\n\t\t\tlogIndex: numberToHex(log.logIndex),\n\t\t\tremoved: log.removed,\n\t\t}))\n\t\treturn {\n\t\t\tjsonrpc: req.jsonrpc,\n\t\t\t...(req.id !== undefined ? { id: req.id } : {}),\n\t\t\tmethod: req.method,\n\t\t\tresult: jsonRpcResult,\n\t\t}\n\t} catch (e) {\n\t\treturn /** @type {any}*/ ({\n\t\t\tjsonrpc: req.jsonrpc,\n\t\t\t...(req.id !== undefined ? { id: req.id } : {}),\n\t\t\tmethod: req.method,\n\t\t\terror: {\n\t\t\t\tcode: -32000,\n\t\t\t\tmessage: /** @type {Error}*/ (e).message,\n\t\t\t},\n\t\t})\n\t}\n}\n","import { hexToBytes, hexToNumber } from '@tevm/utils'\nimport { txToJsonRpcTx } from '../utils/txToJsonRpcTx.js'\n\n/**\n * Request handler for eth_getTransactionByBlockHashAndIndex JSON-RPC requests.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./EthProcedure.js').EthGetTransactionByBlockHashAndIndexJsonRpcProcedure}\n */\nexport const ethGetTransactionByBlockHashAndIndexJsonRpcProcedure = (client) => {\n\treturn async (request) => {\n\t\tconst vm = await client.getVm()\n\t\tconst block = await vm.blockchain.getBlock(hexToBytes(request.params[0]))\n\t\tconst txIndex = hexToNumber(request.params[1])\n\t\tconst tx = block.transactions[txIndex]\n\t\tif (!tx) {\n\t\t\treturn {\n\t\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\t\tmethod: request.method,\n\t\t\t\tjsonrpc: request.jsonrpc,\n\t\t\t\terror: {\n\t\t\t\t\tcode: -32602,\n\t\t\t\t\tmessage: 'Transaction not found',\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tmethod: request.method,\n\t\t\tresult: txToJsonRpcTx(tx, block, txIndex),\n\t\t\tjsonrpc: '2.0',\n\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t}\n\t}\n}\n","import { hexToBigInt, hexToNumber } from '@tevm/utils'\nimport { txToJsonRpcTx } from '../utils/txToJsonRpcTx.js'\n\n/**\n * Request handler for eth_getTransactionByBlockNumberAndIndex JSON-RPC requests.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./EthProcedure.js').EthGetTransactionByBlockNumberAndIndexJsonRpcProcedure}\n */\nexport const ethGetTransactionByBlockNumberAndIndexJsonRpcProcedure = (client) => {\n\treturn async (request) => {\n\t\tconst vm = await client.getVm()\n\t\tconst blockTagOrNumber = request.params[0]\n\t\tconst block = await (() => {\n\t\t\tif (blockTagOrNumber.startsWith('0x')) {\n\t\t\t\treturn vm.blockchain.getBlock(hexToBigInt(/** @type {import('@tevm/utils').Hex}*/ (blockTagOrNumber)))\n\t\t\t}\n\t\t\treturn vm.blockchain.blocksByTag.get(/** @type {import('@tevm/utils').BlockTag}*/ (blockTagOrNumber))\n\t\t})()\n\t\tif (!block) {\n\t\t\treturn {\n\t\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\t\tmethod: request.method,\n\t\t\t\tjsonrpc: request.jsonrpc,\n\t\t\t\terror: {\n\t\t\t\t\tcode: -32602,\n\t\t\t\t\tmessage: `Invalid block tag ${blockTagOrNumber}`,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t\tconst txIndex = hexToNumber(request.params[1])\n\t\tconst tx = block.transactions[txIndex]\n\t\tif (!tx) {\n\t\t\treturn {\n\t\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\t\tmethod: request.method,\n\t\t\t\tjsonrpc: request.jsonrpc,\n\t\t\t\terror: {\n\t\t\t\t\tcode: -32602,\n\t\t\t\t\tmessage: 'Transaction not found',\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tmethod: request.method,\n\t\t\tresult: txToJsonRpcTx(tx, block, txIndex),\n\t\t\tjsonrpc: '2.0',\n\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t}\n\t}\n}\n","import { createJsonRpcFetcher } from '@tevm/jsonrpc'\nimport { hexToBytes } from '@tevm/utils'\nimport { txToJsonRpcTx } from '../utils/txToJsonRpcTx.js'\n\n/**\n * Request handler for eth_getTransactionByHash JSON-RPC requests.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./EthProcedure.js').EthGetTransactionByHashJsonRpcProcedure}\n */\nexport const ethGetTransactionByHashJsonRpcProcedure = (client) => {\n\treturn async (request) => {\n\t\tconst vm = await client.getVm()\n\t\tconst receiptsManager = await client.getReceiptsManager()\n\t\tconst receipt = await receiptsManager.getReceiptByTxHash(hexToBytes(request.params[0]))\n\t\tif (!receipt && client.forkTransport) {\n\t\t\tconst fetcher = createJsonRpcFetcher(client.forkTransport)\n\t\t\tconst res = await fetcher.request({\n\t\t\t\tjsonrpc: '2.0',\n\t\t\t\tid: request.id ?? 1,\n\t\t\t\tmethod: request.method,\n\t\t\t\tparams: [request.params[0]],\n\t\t\t})\n\t\t\tif (res.error) {\n\t\t\t\treturn {\n\t\t\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\t\t\tmethod: request.method,\n\t\t\t\t\tjsonrpc: request.jsonrpc,\n\t\t\t\t\terror: res.error,\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\t\tmethod: request.method,\n\t\t\t\tresult: /** @type any*/ (res.result),\n\t\t\t\tjsonrpc: '2.0',\n\t\t\t}\n\t\t}\n\t\tif (!receipt) {\n\t\t\treturn {\n\t\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\t\tmethod: request.method,\n\t\t\t\tjsonrpc: request.jsonrpc,\n\t\t\t\terror: {\n\t\t\t\t\tcode: -32602,\n\t\t\t\t\tmessage: 'Transaction not found',\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t\tconst [_receipt, blockHash, txIndex] = receipt\n\t\tconst block = await vm.blockchain.getBlock(blockHash)\n\t\tconst tx = block.transactions[txIndex]\n\t\tif (!tx) {\n\t\t\treturn {\n\t\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\t\tmethod: request.method,\n\t\t\t\tjsonrpc: request.jsonrpc,\n\t\t\t\terror: {\n\t\t\t\t\tcode: -32602,\n\t\t\t\t\tmessage: 'Transaction not found',\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tmethod: request.method,\n\t\t\tresult: txToJsonRpcTx(tx, block, txIndex),\n\t\t\tjsonrpc: '2.0',\n\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t}\n\t}\n}\n","import { createAddress } from '@tevm/address'\nimport { ForkError, InternalEvmError } from '@tevm/errors'\nimport { hexToBigInt, hexToBytes, numberToHex } from '@tevm/utils'\n\n/**\n * Request handler for eth_getFilterLogs JSON-RPC requests.\n * @param {import('@tevm/node').TevmNode} node\n * @returns {import('./EthProcedure.js').EthGetTransactionCountJsonRpcProcedure}\n */\nexport const ethGetTransactionCountProcedure = (node) => {\n\treturn async (request) => {\n\t\tconst [address, tag] = request.params\n\n\t\tconst block = await (async () => {\n\t\t\tconst vm = await node.getVm()\n\t\t\tif (tag.startsWith('0x') && tag.length === 66) {\n\t\t\t\treturn vm.blockchain.getBlock(hexToBytes(/** @type {import('@tevm/utils').Hex}*/ (tag)))\n\t\t\t}\n\t\t\tif (tag.startsWith('0x')) {\n\t\t\t\treturn vm.blockchain.getBlock(hexToBigInt(/** @type {import('@tevm/utils').Hex}*/ (tag)))\n\t\t\t}\n\t\t\tif (tag === 'pending') {\n\t\t\t\t// if pending just get latest we will get pending seperately\n\t\t\t\treturn vm.blockchain.blocksByTag.get('latest')\n\t\t\t}\n\t\t\tif (tag === 'latest' || tag === 'safe' || tag === 'earliest' || tag === 'finalized') {\n\t\t\t\treturn vm.blockchain.blocksByTag.get(tag)\n\t\t\t}\n\t\t\treturn undefined\n\t\t})()\n\t\tif (!block) {\n\t\t\treturn {\n\t\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\t\tmethod: request.method,\n\t\t\t\tjsonrpc: request.jsonrpc,\n\t\t\t\terror: {\n\t\t\t\t\tcode: -32602,\n\t\t\t\t\tmessage: `Invalid block tag ${tag}`,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\tconst pendingCount =\n\t\t\ttag === 'pending'\n\t\t\t\t? await (async () => {\n\t\t\t\t\t\tconst txPool = await node.getTxPool()\n\t\t\t\t\t\tconst pendingTx = await txPool.getBySenderAddress(createAddress(address))\n\t\t\t\t\t\treturn BigInt(pendingTx.length)\n\t\t\t\t\t})()\n\t\t\t\t: 0n\n\n\t\tconst includedCount = await (async () => {\n\t\t\tconst vm = await node.getVm()\n\t\t\tif (!(await vm.stateManager.hasStateRoot(block.header.stateRoot))) {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\tconst stateCopy = await vm.stateManager.deepCopy()\n\t\t\tawait stateCopy.setStateRoot(block.header.stateRoot)\n\t\t\tconst account = await stateCopy.getAccount(createAddress(address))\n\t\t\treturn account?.nonce ?? 0n\n\t\t})()\n\n\t\tif (includedCount === undefined && node.forkTransport) {\n\t\t\ttry {\n\t\t\t\t/**\n\t\t\t\t * @type {import('@tevm/utils').Hex}\n\t\t\t\t */\n\t\t\t\tconst result = await node.forkTransport.request(request)\n\t\t\t\treturn {\n\t\t\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\t\t\tmethod: request.method,\n\t\t\t\t\tjsonrpc: request.jsonrpc,\n\t\t\t\t\tresult: numberToHex(hexToBigInt(result) + pendingCount),\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\tconst err = new ForkError('Unable to resolve eth_getTransactionCount with fork', {\n\t\t\t\t\tcause: /** @type {any}*/ (e),\n\t\t\t\t})\n\t\t\t\treturn {\n\t\t\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\t\t\tmethod: request.method,\n\t\t\t\t\tjsonrpc: request.jsonrpc,\n\t\t\t\t\terror: {\n\t\t\t\t\t\tcode: err.code,\n\t\t\t\t\t\tmessage: err.message,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (includedCount === undefined) {\n\t\t\tconst err = new InternalEvmError(`No state root found for block tag ${tag} in eth_getTransactionCountProcedure`)\n\t\t\tnode.logger.error(err)\n\t\t\treturn {\n\t\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\t\tmethod: request.method,\n\t\t\t\tjsonrpc: request.jsonrpc,\n\t\t\t\terror: {\n\t\t\t\t\tcode: err.code,\n\t\t\t\t\tmessage: err.message,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\tmethod: request.method,\n\t\t\tjsonrpc: request.jsonrpc,\n\t\t\tresult: numberToHex(pendingCount + includedCount),\n\t\t}\n\t}\n}\n","import { createJsonRpcFetcher } from '@tevm/jsonrpc'\nimport { bytesToHex, hexToBytes, numberToHex } from '@tevm/utils'\n\n/**\n * @param {Uint8Array} a\n * @param {Uint8Array} b\n */\nconst uintEquals = (a, b) => {\n\tif (a.length !== b.length) {\n\t\treturn false\n\t}\n\n\tfor (let i = 0; i < a.length; i++) {\n\t\tif (a[i] !== b[i]) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\treturn true\n}\n\n/**\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./EthHandler.js').EthGetTransactionReceiptHandler}\n */\nexport const ethGetTransactionReceiptHandler = (client) => async (params) => {\n\tconst receiptsManager = await client.getReceiptsManager()\n\tconst vm = await client.getVm().then((vm) => vm.deepCopy())\n\n\tconst result = await receiptsManager.getReceiptByTxHash(hexToBytes(params.hash))\n\n\t/**\n\t * If we don't have the receipt check the fork for a receipt\n\t * We currently do not cache it in future we may consider fetching\n\t * entire block here and caching it\n\t */\n\tif (!result && client.forkTransport) {\n\t\tconst fetcher = createJsonRpcFetcher(client.forkTransport)\n\t\tconst { result } = await fetcher.request({\n\t\t\tmethod: 'eth_getTransactionReceipt',\n\t\t\tparams: [params.hash],\n\t\t\tid: 1,\n\t\t\tjsonrpc: '2.0',\n\t\t})\n\t\t// TODO type this\n\t\tconst r = /** @type {any}*/ (result)\n\t\t/**\n\t\t * @type {import('./EthResult.js').EthGetTransactionReceiptResult }\n\t\t */\n\t\treturn (\n\t\t\tr && {\n\t\t\t\tblockHash: r.hex,\n\t\t\t\tblockNumber: BigInt(r.blockNumber),\n\t\t\t\tcumulativeGasUsed: BigInt(r.cumulativeBlockGasUsed),\n\t\t\t\teffectiveGasPrice: BigInt(r.effectiveGasPrice),\n\t\t\t\tfrom: r.from,\n\t\t\t\tgasUsed: BigInt(r.gasUsed),\n\t\t\t\tto: r.to,\n\t\t\t\ttransactionHash: r.transactionHash,\n\t\t\t\ttransactionIndex: BigInt(r.transactionIndex),\n\t\t\t\tcontractAddress: r.contractAddress,\n\t\t\t\tlogsBloom: r.logsBloom,\n\t\t\t\tblobGasUsed: r.blobGasUsed ? BigInt(r.blobGasUsed) : undefined,\n\t\t\t\tblobGasPrice: r.blobGasPrice ? BigInt(r.blobGasPrice) : undefined,\n\t\t\t\troot: r.root,\n\t\t\t\tstatus: r.status,\n\t\t\t\tlogs: r.logs.map(\n\t\t\t\t\t/**\n\t\t\t\t\t * TODO type this\n\t\t\t\t\t * @param {any} log\n\t\t\t\t\t */\n\t\t\t\t\t(log) => ({\n\t\t\t\t\t\taddress: log.address,\n\t\t\t\t\t\tblockHash: log.blockHash,\n\t\t\t\t\t\tblockNumber: BigInt(log.blockNumber),\n\t\t\t\t\t\tdata: log.data,\n\t\t\t\t\t\tlogIndex: log.logIndex,\n\t\t\t\t\t\tremoved: log.removed,\n\t\t\t\t\t\ttopics: log.topics,\n\t\t\t\t\t\ttransactionIndex: BigInt(log.transactionIndex),\n\t\t\t\t\t\ttransactionHash: log.transactionHash,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t}\n\t\t)\n\t}\n\n\tif (!result) {\n\t\treturn null\n\t}\n\n\tconst [receipt, blockHash, txIndex, logIndex] = result\n\tconst block = await vm.blockchain.getBlock(blockHash)\n\t// Check if block is in canonical chain\n\tconst blockByNumber = await vm.blockchain.getBlock(block.header.number)\n\tif (!uintEquals(blockByNumber.hash(), block.hash())) {\n\t\treturn null\n\t}\n\n\tconst parentBlock = await vm.blockchain.getBlock(block.header.parentHash)\n\tconst tx = block.transactions[txIndex]\n\tif (!tx) {\n\t\t// TODO check proxy url\n\t\tthrow {\n\t\t\t// TODO wrong code\n\t\t\tcode: -32602,\n\t\t\tmessage: 'No tx found',\n\t\t}\n\t}\n\t// TODO handle legacy tx\n\tconst effectiveGasPrice =\n\t\t/** @type any*/ (tx).maxPriorityFeePerGas < /** @type any*/ (tx).maxFeePerGas - (block.header.baseFeePerGas ?? 0n)\n\t\t\t? /** @type any*/ (tx).maxPriorityFeePerGas\n\t\t\t: /** @type any*/ (tx).maxFeePerGas - (block.header.baseFeePerGas ?? 0n) + (block.header.baseFeePerGas ?? 0n)\n\n\tvm.common.ethjsCommon.setHardfork(tx.common.hardfork())\n\tawait vm.stateManager.setStateRoot(parentBlock.header.stateRoot)\n\t// Run tx through copied vm to get tx gasUsed and createdAddress\n\tconst runBlockResult = await vm.runBlock({\n\t\tblock,\n\t\troot: parentBlock.header.stateRoot,\n\t\tskipBlockValidation: true,\n\t})\n\n\tconst res = runBlockResult.results[txIndex]\n\tif (!res) {\n\t\tthrow new Error('No result for tx this indicates a bug in the client')\n\t}\n\tconst { totalGasSpent, createdAddress } = res\n\tconst { blobGasPrice, blobGasUsed } = /** @type {any}*/ (runBlockResult.receipts[txIndex])\n\t/**\n\t * @type {import('./EthResult.js').EthGetTransactionReceiptResult}\n\t */\n\treturn {\n\t\tblockHash: bytesToHex(block.hash()),\n\t\tblockNumber: block.header.number,\n\t\tcumulativeGasUsed: receipt.cumulativeBlockGasUsed,\n\t\teffectiveGasPrice: effectiveGasPrice,\n\t\tfrom: tx.getSenderAddress().toString(),\n\t\tgasUsed: totalGasSpent,\n\t\tto: tx.to?.toString() ?? null,\n\t\ttransactionHash: bytesToHex(tx.hash()),\n\t\ttransactionIndex: txIndex,\n\t\tcontractAddress: createdAddress?.toString() ?? null,\n\t\tlogsBloom: bytesToHex(receipt.bitvector),\n\t\tblobGasUsed: blobGasUsed !== undefined ? blobGasUsed : undefined,\n\t\tblobGasPrice: blobGasPrice !== undefined ? blobGasPrice : undefined,\n\t\troot:\n\t\t\t/** @type any*/ (receipt).stateRoot instanceof Uint8Array\n\t\t\t\t? bytesToHex(/** @type any*/ (receipt).stateRoot)\n\t\t\t\t: undefined,\n\t\tstatus:\n\t\t\t/** @type any*/ (receipt).status instanceof Uint8Array\n\t\t\t\t? numberToHex(/** @type any*/ (receipt).status[0])\n\t\t\t\t: typeof (/** @type any*/ (receipt).status) === 'number'\n\t\t\t\t\t? numberToHex(/** @type any*/ (receipt).status)\n\t\t\t\t\t: undefined,\n\t\tlogs: await Promise.all(\n\t\t\treceipt.logs.map((log, i) => ({\n\t\t\t\taddress: bytesToHex(log[0]),\n\t\t\t\tblockHash: block ? bytesToHex(block.hash()) : null,\n\t\t\t\tblockNumber: block ? block.header.number : null,\n\t\t\t\tdata: bytesToHex(log[2]),\n\t\t\t\tlogIndex: logIndex + i,\n\t\t\t\tremoved: false,\n\t\t\t\ttopics: log[1].map((bytes) => bytesToHex(bytes)),\n\t\t\t\ttransactionIndex: txIndex !== undefined ? txIndex : null,\n\t\t\t\ttransactionHash: tx !== undefined ? bytesToHex(tx.hash()) : null,\n\t\t\t})),\n\t\t),\n\t}\n}\n","import { numberToHex } from '@tevm/utils'\nimport { ethGetTransactionReceiptHandler } from './ethGetTransactionReceipt.js'\n\n/**\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./EthProcedure.js').EthGetTransactionReceiptJsonRpcProcedure}\n */\nexport const ethGetTransactionReceiptJsonRpcProcedure = (client) => async (req) => {\n\tconst [txHash] = req.params\n\n\tif (!txHash) {\n\t\t/**\n\t\t * @type {import('./EthJsonRpcResponse.js').EthGetTransactionReceiptJsonRpcResponse}\n\t\t */\n\t\tconst out = {\n\t\t\tjsonrpc: '2.0',\n\t\t\t...(req.id ? { id: req.id } : {}),\n\t\t\tmethod: req.method,\n\t\t\terror: {\n\t\t\t\tcode: -32602,\n\t\t\t\tmessage: 'Invalid params',\n\t\t\t},\n\t\t}\n\t\treturn out\n\t}\n\n\tconst res = await ethGetTransactionReceiptHandler(client)({ hash: txHash })\n\t/**\n\t * @type {import('./EthJsonRpcResponse.js').EthGetTransactionReceiptJsonRpcResponse}\n\t */\n\tconst out = {\n\t\tjsonrpc: '2.0',\n\t\t...(req.id ? { id: req.id } : {}),\n\t\tmethod: req.method,\n\t\tresult: res && {\n\t\t\tblockHash: res.blockHash,\n\t\t\tblockNumber: numberToHex(res.blockNumber),\n\t\t\tcumulativeGasUsed: numberToHex(res.cumulativeGasUsed),\n\t\t\teffectiveGasPrice: numberToHex(res.effectiveGasPrice),\n\t\t\tfrom: res.from,\n\t\t\tto: res.to,\n\t\t\troot: res.root ?? '0x',\n\t\t\tgasUsed: numberToHex(res.gasUsed),\n\t\t\ttransactionHash: res.transactionHash,\n\t\t\ttransactionIndex: numberToHex(res.transactionIndex),\n\t\t\tcontractAddress: res.contractAddress,\n\t\t\tlogs: await Promise.all(\n\t\t\t\tres.logs.map((log) => ({\n\t\t\t\t\taddress: log.address,\n\t\t\t\t\tblockHash: log.blockHash,\n\t\t\t\t\tblockNumber: numberToHex(log.blockNumber),\n\t\t\t\t\tdata: log.data,\n\t\t\t\t\tlogIndex: numberToHex(log.logIndex),\n\t\t\t\t\tremoved: false,\n\t\t\t\t\ttopics: [...log.topics],\n\t\t\t\t\ttransactionIndex: numberToHex(log.transactionIndex),\n\t\t\t\t\ttransactionHash: log.transactionHash,\n\t\t\t\t})),\n\t\t\t),\n\t\t\tlogsBloom: res.logsBloom,\n\t\t\tstatus: res.status ?? '0x0',\n\t\t\t...(res.blobGasUsed !== undefined ? { blobGasUsed: numberToHex(res.blobGasUsed) } : {}),\n\t\t\t...(res.blobGasPrice !== undefined ? { blobGasPrice: numberToHex(res.blobGasPrice) } : {}),\n\t\t},\n\t}\n\treturn out\n}\n","/**\n * @returns {import(\"@tevm/utils\").Hex}\n */\nexport const generateRandomId = () => {\n\treturn `0x${Array.from(crypto.getRandomValues(new Uint8Array(16)))\n\t\t.map((b) => b.toString(16).padStart(2, '0'))\n\t\t.join('')}`\n}\n","import { generateRandomId } from '../utils/generateRandomId.js'\n\n/**\n * Request handler for eth_newBlock JSON-RPC requests.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./EthProcedure.js').EthNewBlockFilterJsonRpcProcedure}\n */\nexport const ethNewBlockFilterProcedure = (client) => {\n\treturn async (request) => {\n\t\tconst newBlockFilterRequest =\n\t\t\t/** @type {import('./EthJsonRpcRequest.js').EthNewBlockFilterJsonRpcRequest}*/\n\t\t\t(request)\n\t\tconst id = generateRandomId()\n\t\t/**\n\t\t * @param {import('@tevm/block').Block} block\n\t\t */\n\t\tconst listener = (block) => {\n\t\t\tconst filter = client.getFilters().get(id)\n\t\t\tif (!filter) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tfilter.blocks.push(block)\n\t\t}\n\t\tclient.setFilter({\n\t\t\tid,\n\t\t\ttype: 'Block',\n\t\t\tcreated: Date.now(),\n\t\t\tlogs: [],\n\t\t\ttx: [],\n\t\t\tblocks: [],\n\t\t\tinstalled: {},\n\t\t\terr: undefined,\n\t\t\tregisteredListeners: [listener],\n\t\t})\n\t\treturn {\n\t\t\t...(newBlockFilterRequest.id ? { id: newBlockFilterRequest.id } : {}),\n\t\t\tmethod: newBlockFilterRequest.method,\n\t\t\tjsonrpc: newBlockFilterRequest.jsonrpc,\n\t\t\tresult: id,\n\t\t}\n\t}\n}\n","/**\n * @returns {import(\"@tevm/utils\").Hex}\n */\nexport const generateRandomId = () => {\n\treturn `0x${Array.from(crypto.getRandomValues(new Uint8Array(16)))\n\t\t.map((b) => b.toString(16).padStart(2, '0'))\n\t\t.join('')}`\n}\n","import { hexToBigInt } from '@tevm/utils'\n\n/**\n * @param {import('@tevm/utils').Hex | import('@tevm/utils').BlockTag | bigint} blockTag\n * @returns {bigint | import('@tevm/utils').Hex | import('@tevm/utils').BlockTag}\n */\nexport const parseBlockTag = (blockTag) => {\n\tconst blockHashLength = 64 + '0x'.length\n\tconst isBlockNumber = typeof blockTag === 'string' && blockTag.startsWith('0x') && blockTag.length !== blockHashLength\n\tif (isBlockNumber) {\n\t\treturn hexToBigInt(/** @type {import('@tevm/utils').Hex}*/ (blockTag))\n\t}\n\treturn blockTag\n}\n","import { createAddress } from '@tevm/address'\nimport { InvalidBlockError, UnknownBlockError } from '@tevm/errors'\nimport { bytesToHex, hexToBytes } from '@tevm/utils'\nimport { isArray } from '../utils/isArray.js'\nimport { generateRandomId } from './utils/generateRandomId.js'\nimport { parseBlockTag } from './utils/parseBlockTag.js'\n\n/**\n * @typedef {UnknownBlockError | InvalidBlockError} EthNewFilterError\n */\n\n/**\n * @param {import('@tevm/node').TevmNode} tevmNode\n * @returns {import('./EthHandler.js').EthNewFilterHandler} ethNewFilterHandler\n */\nexport const ethNewFilterHandler = (tevmNode) => {\n\treturn async (params) => {\n\t\tconst { topics, address, toBlock = 'latest', fromBlock } = params\n\t\tconst vm = await tevmNode.getVm()\n\t\t/**\n\t\t * @param {typeof toBlock} tag\n\t\t */\n\t\tconst getBlock = async (tag) => {\n\t\t\tconst parsedTag = parseBlockTag(tag)\n\t\t\tif (\n\t\t\t\tparsedTag === 'safe' ||\n\t\t\t\tparsedTag === 'latest' ||\n\t\t\t\tparsedTag === 'finalized' ||\n\t\t\t\tparsedTag === 'earliest' ||\n\t\t\t\tparsedTag === 'pending' ||\n\t\t\t\tparsedTag === /** @type any*/ ('forked')\n\t\t\t) {\n\t\t\t\treturn vm.blockchain.blocksByTag.get(parsedTag)\n\t\t\t}\n\t\t\tif (typeof parsedTag === 'string') {\n\t\t\t\treturn vm.blockchain.getBlock(hexToBytes(parsedTag))\n\t\t\t}\n\t\t\tif (typeof tag === 'bigint') {\n\t\t\t\treturn vm.blockchain.getBlock(tag)\n\t\t\t}\n\t\t\tthrow new InvalidBlockError(`Invalid block tag ${tag}`)\n\t\t}\n\t\tconst _toBlock = await getBlock(toBlock)\n\t\tif (!_toBlock) {\n\t\t\tthrow new UnknownBlockError(`Unknown block tag ${toBlock}`)\n\t\t}\n\t\tconst _fromBlock = await getBlock(fromBlock ?? 'latest')\n\t\tif (!_fromBlock) {\n\t\t\tthrow new UnknownBlockError(`Unknown block tag ${fromBlock}`)\n\t\t}\n\n\t\tconst id = generateRandomId()\n\t\t/**\n\t\t * @param {import('@tevm/node').Filter['logs'][number]} log\n\t\t */\n\t\tconst listener = (log) => {\n\t\t\tconst filter = tevmNode.getFilters().get(id)\n\t\t\tif (!filter) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tfilter.logs.push(log)\n\t\t}\n\t\ttevmNode.on('newLog', listener)\n\t\t// populate with past blocks\n\t\tconst receiptsManager = await tevmNode.getReceiptsManager()\n\t\tconst pastLogs = await receiptsManager.getLogs(\n\t\t\t_fromBlock,\n\t\t\t_toBlock,\n\t\t\taddress !== undefined ? [createAddress(address).bytes] : [],\n\t\t\ttopics?.map((topic) => (isArray(topic) ? topic.map(hexToBytes) : hexToBytes(topic))),\n\t\t)\n\t\ttevmNode.setFilter({\n\t\t\tid,\n\t\t\ttype: 'Log',\n\t\t\tcreated: Date.now(),\n\t\t\tlogs: pastLogs.map((log) => {\n\t\t\t\tconst [address, topics, data] = log.log\n\t\t\t\treturn {\n\t\t\t\t\ttopics: /** @type {[import('@tevm/utils').Hex, ...Array<import('@tevm/utils').Hex>]}*/ (\n\t\t\t\t\t\ttopics.map((topic) => bytesToHex(topic))\n\t\t\t\t\t),\n\t\t\t\t\taddress: bytesToHex(address),\n\t\t\t\t\tdata: bytesToHex(data),\n\t\t\t\t\tblockNumber: log.block.header.number,\n\t\t\t\t\ttransactionHash: bytesToHex(log.tx.hash()),\n\t\t\t\t\tremoved: false,\n\t\t\t\t\tlogIndex: log.logIndex,\n\t\t\t\t\tblockHash: bytesToHex(log.block.hash()),\n\t\t\t\t\ttransactionIndex: log.txIndex,\n\t\t\t\t}\n\t\t\t}),\n\t\t\ttx: [],\n\t\t\tblocks: [],\n\t\t\tlogsCriteria: {\n\t\t\t\ttopics,\n\t\t\t\taddress,\n\t\t\t\ttoBlock: toBlock,\n\t\t\t\tfromBlock: fromBlock ?? _fromBlock.header.number,\n\t\t\t},\n\t\t\tinstalled: {},\n\t\t\terr: undefined,\n\t\t\tregisteredListeners: [listener],\n\t\t})\n\t\treturn id\n\t}\n}\n","import { ethNewFilterHandler } from './ethNewFilterHandler.js'\n\n/**\n * Request handler for eth_newFilter JSON-RPC requests.\n * @param {import('@tevm/node').TevmNode} tevmNode\n * @returns {import('./EthProcedure.js').EthNewFilterJsonRpcProcedure}\n */\nexport const ethNewFilterJsonRpcProcedure = (tevmNode) => {\n\treturn async (request) => {\n\t\tconst newFilterRequest = /** @type {import('./EthJsonRpcRequest.js').EthNewFilterJsonRpcRequest}*/ (request)\n\t\ttry {\n\t\t\treturn {\n\t\t\t\tjsonrpc: request.jsonrpc,\n\t\t\t\tmethod: request.method,\n\t\t\t\tresult: await ethNewFilterHandler(tevmNode)(newFilterRequest.params[0]),\n\t\t\t\t...(request.id !== undefined ? { id: request.id } : {}),\n\t\t\t}\n\t\t} catch (e) {\n\t\t\ttevmNode.logger.error(e)\n\t\t\tconst { code, message } = /** @type {import('./ethNewFilterHandler.js').EthNewFilterError}*/ (e)\n\t\t\treturn {\n\t\t\t\terror: {\n\t\t\t\t\tcode,\n\t\t\t\t\tmessage,\n\t\t\t\t},\n\t\t\t\tmethod: request.method,\n\t\t\t\tjsonrpc: request.jsonrpc,\n\t\t\t\t...(request.id !== undefined ? { id: request.id } : {}),\n\t\t\t}\n\t\t}\n\t}\n}\n","import { generateRandomId } from '../utils/generateRandomId.js'\n\n/**\n * Request handler for eth_newPendingTransactionFilter JSON-RPC requests.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./EthProcedure.js').EthNewPendingTransactionFilterJsonRpcProcedure}\n */\nexport const ethNewPendingTransactionFilterProcedure = (client) => {\n\treturn async (request) => {\n\t\tawait client.ready()\n\t\tconst id = generateRandomId()\n\t\t/**\n\t\t * @param {import('@tevm/tx').TypedTransaction} tx\n\t\t */\n\t\tconst listener = (tx) => {\n\t\t\tconst filter = client.getFilters().get(id)\n\t\t\tif (!filter) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tfilter.tx.push(tx)\n\t\t}\n\t\tclient.on('newPendingTransaction', listener)\n\t\tclient.setFilter({\n\t\t\tid,\n\t\t\ttype: 'PendingTransaction',\n\t\t\tcreated: Date.now(),\n\t\t\tlogs: [],\n\t\t\ttx: [],\n\t\t\tblocks: [],\n\t\t\tinstalled: {},\n\t\t\terr: undefined,\n\t\t\tregisteredListeners: [listener],\n\t\t})\n\t\treturn {\n\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\tmethod: request.method,\n\t\t\tjsonrpc: request.jsonrpc,\n\t\t\tresult: id,\n\t\t}\n\t}\n}\n","import { stringToHex } from 'viem'\n\n/**\n * Request handler for eth_protocolVersion JSON-RPC requests.\n * @returns {import('./EthProcedure.js').EthProtocolVersionJsonRpcProcedure}\n */\nexport const ethProtocolVersionJsonRpcProcedure = () => {\n\treturn async (request) => {\n\t\treturn {\n\t\t\tresult: stringToHex('tevm@1.x.x'),\n\t\t\tjsonrpc: '2.0',\n\t\t\tmethod: 'eth_protocolVersion',\n\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t}\n\t}\n}\n","import { InvalidParamsError } from '@tevm/errors'\nimport { createTxFromRLP } from '@tevm/tx'\nimport { bytesToHex, hexToBytes } from '@tevm/utils'\nimport { handleAutomining } from '../Call/handleAutomining.js'\n\n/**\n * Request handler for eth_sendRawTransaction JSON-RPC requests.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./EthProcedure.js').EthSendRawTransactionJsonRpcProcedure}\n */\nexport const ethSendRawTransactionJsonRpcProcedure = (client) => {\n\treturn async (request) => {\n\t\tconst vm = await client.getVm()\n\t\tconst [serializedTx] = request.params\n\t\tconst txBuf = hexToBytes(serializedTx)\n\t\t// Use createTxFromRLP for all transaction types\n\t\tconst tx = createTxFromRLP(txBuf, { common: vm.common.ethjsCommon })\n\t\tif (!tx.isSigned()) {\n\t\t\tconst err = new InvalidParamsError('Transaction must be signed!')\n\t\t\treturn {\n\t\t\t\tmethod: request.method,\n\t\t\t\tjsonrpc: '2.0',\n\t\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\t\terror: {\n\t\t\t\t\tcode: err._tag,\n\t\t\t\t\tmessage: err.message,\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t\tconst txPool = await client.getTxPool()\n\t\tawait txPool.add(tx, true)\n\n\t\tif (client.miningConfig.type === 'auto') {\n\t\t\tawait handleAutomining(client, bytesToHex(tx.hash()), false, true)\n\t\t}\n\n\t\treturn {\n\t\t\tmethod: request.method,\n\t\t\tresult: bytesToHex(tx.hash()),\n\t\t\tjsonrpc: '2.0',\n\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t}\n\t}\n}\n","import { createAddress } from '@tevm/address'\nimport { prefundedAccounts } from '@tevm/node'\nimport { createImpersonatedTx, TransactionFactory } from '@tevm/tx'\nimport { bytesToHex, EthjsAddress } from '@tevm/utils'\nimport { callHandler } from '../Call/callHandler.js'\n\n// TODO we should be properly checking signatures\n\n/**\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./EthHandler.js').EthSendTransactionHandler}\n */\nexport const ethSendTransactionHandler = (client) => async (params) => {\n\tlet tx = TransactionFactory(\n\t\t{\n\t\t\t...params,\n\t\t\tdata: params.data ?? new Uint8Array(),\n\t\t},\n\t\t{ freeze: false },\n\t)\n\tconst impersonatedAccount = client.getImpersonatedAccount()\n\tif (!tx.isSigned() && impersonatedAccount !== undefined) {\n\t\t/**\n\t\t * @type {import(\"@tevm/tx\").FeeMarketEIP1559Transaction & {impersonatedAddress: import('@tevm/utils').EthjsAddress} }\n\t\t **/\n\t\tconst impersonatedTx = /** @type {any}*/ (tx)\n\t\timpersonatedTx.impersonatedAddress = createAddress(impersonatedAccount)\n\t\ttx = createImpersonatedTx(impersonatedTx)\n\t} else if (!tx.isSigned()) {\n\t\tclient.logger.debug(\n\t\t\t'Raw Transaction is not signed. Consider calling impersonate endpoint. In future versions unsigned transactions will be rejected.',\n\t\t)\n\t\t/**\n\t\t * @type {import(\"@tevm/tx\").FeeMarketEIP1559Transaction & {impersonatedAddress: EthjsAddress} }\n\t\t **/\n\t\tconst impersonatedTx = /** @type {any}*/ (tx)\n\t\timpersonatedTx.impersonatedAddress = createAddress(\n\t\t\timpersonatedAccount ?? /** @type {import('@tevm/utils').Address} */ (prefundedAccounts[0]),\n\t\t)\n\t\ttx = createImpersonatedTx(impersonatedTx)\n\t}\n\tconst { errors } = await callHandler(client)({\n\t\t...params,\n\t\tcreateTransaction: true,\n\t\tskipBalance: true,\n\t})\n\tif (errors?.length === 1) {\n\t\tthrow errors[0]\n\t}\n\tif (errors?.length && errors.length > 1) {\n\t\tthrow new AggregateError(errors)\n\t}\n\treturn bytesToHex(tx.hash())\n}\n","import { hexToBigInt } from '@tevm/utils'\nimport { ethSendTransactionHandler } from './ethSendTransactionHandler.js'\n\n/**\n * Request handler for eth_sendTransaction JSON-RPC requests.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./EthProcedure.js').EthSendTransactionJsonRpcProcedure}\n */\nexport const ethSendTransactionJsonRpcProcedure = (client) => {\n\treturn async (request) => {\n\t\tconst sendTransactionRequest = /** @type {import('./EthJsonRpcRequest.js').EthSendTransactionJsonRpcRequest}*/ (\n\t\t\trequest\n\t\t)\n\t\tconst txHash = await ethSendTransactionHandler(client)({\n\t\t\t...(request.params[0].from ? { from: request.params[0].from } : {}),\n\t\t\t...(request.params[0].data ? { data: request.params[0].data } : {}),\n\t\t\t...(request.params[0].to ? { to: request.params[0].to } : {}),\n\t\t\t...(request.params[0].gas ? { gas: hexToBigInt(request.params[0].gas) } : {}),\n\t\t\t...(request.params[0].gasPrice ? { gasPrice: hexToBigInt(request.params[0].gasPrice) } : {}),\n\t\t\t...(request.params[0].value ? { value: hexToBigInt(request.params[0].value) } : {}),\n\t\t})\n\t\treturn {\n\t\t\tmethod: sendTransactionRequest.method,\n\t\t\tresult: txHash,\n\t\t\tjsonrpc: '2.0',\n\t\t\t...(sendTransactionRequest.id ? { id: sendTransactionRequest.id } : {}),\n\t\t}\n\t}\n}\n","/**\n * Request handler for eth_uninstallFilter JSON-RPC requests.\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./EthProcedure.js').EthUninstallFilterJsonRpcProcedure}\n */\nexport const ethUninstallFilterJsonRpcProcedure = (client) => {\n\treturn async (request) => {\n\t\tconst uninstallFilterRequest =\n\t\t\t/** @type {import('./EthJsonRpcRequest.js').EthUninstallFilterJsonRpcRequest}*/\n\t\t\t(request)\n\t\tconst [filterId] = uninstallFilterRequest.params\n\t\tconst filter = client.getFilters().get(filterId)\n\t\tif (!filter) {\n\t\t\treturn {\n\t\t\t\t...(uninstallFilterRequest.id ? { id: uninstallFilterRequest.id } : {}),\n\t\t\t\tmethod: uninstallFilterRequest.method,\n\t\t\t\tjsonrpc: uninstallFilterRequest.jsonrpc,\n\t\t\t\tresult: false,\n\t\t\t}\n\t\t}\n\n\t\tconst [listener] = filter.registeredListeners\n\t\tif (filter.type === 'Log' && listener) {\n\t\t\tclient.removeListener('newLog', listener)\n\t\t} else if (filter.type === 'Block' && listener) {\n\t\t\tclient.removeListener('newBlock', listener)\n\t\t} else if (filter.type === 'PendingTransaction' && listener) {\n\t\t\tclient.removeListener('newPendingTransaction', listener)\n\t\t}\n\t\tclient.removeFilter(filterId)\n\t\treturn {\n\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\tmethod: request.method,\n\t\t\tjsonrpc: request.jsonrpc,\n\t\t\tresult: true,\n\t\t}\n\t}\n}\n","import { createJsonRpcFetcher } from '@tevm/jsonrpc'\nimport { hexToBigInt, parseGwei } from '@tevm/utils'\nimport { blockNumberHandler } from './blockNumberHandler.js'\n\n/**\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./EthHandler.js').EthGasPriceHandler}\n */\nexport const gasPriceHandler = ({ forkTransport, getVm, ...client }) => {\n\t/**\n\t * @type {bigint}\n\t */\n\tlet gasPrice\n\t/**\n\t * @type {bigint}\n\t */\n\tlet blockNumber\n\t// TODO pass in headers\n\treturn async () => {\n\t\tif (!forkTransport) {\n\t\t\treturn parseGwei('1')\n\t\t}\n\t\tconst fetcher = createJsonRpcFetcher(forkTransport)\n\t\tconst newBlockNumber = await blockNumberHandler({ ...client, getVm })({})\n\t\tif (!gasPrice || blockNumber !== newBlockNumber) {\n\t\t\tblockNumber = newBlockNumber\n\t\t\tgasPrice = await fetcher\n\t\t\t\t.request({\n\t\t\t\t\tmethod: 'eth_gasPrice',\n\t\t\t\t\tparams: [],\n\t\t\t\t\tjsonrpc: '2.0',\n\t\t\t\t\tid: 1,\n\t\t\t\t})\n\t\t\t\t.then(({ result }) => {\n\t\t\t\t\treturn hexToBigInt(/** @type {import('@tevm/utils').Hex} */ (result))\n\t\t\t\t})\n\t\t}\n\t\treturn gasPrice\n\t}\n}\n","import { numberToHex } from '@tevm/utils'\nimport { gasPriceHandler } from './gasPriceHandler.js'\n\n/**\n * @param {Parameters<typeof gasPriceHandler>[0]} options\n * @returns {import('./EthProcedure.js').EthGasPriceJsonRpcProcedure}\n */\nexport const gasPriceProcedure =\n\t({ getVm, forkTransport }) =>\n\tasync (req) => ({\n\t\t...(req.id ? { id: req.id } : {}),\n\t\tjsonrpc: '2.0',\n\t\tmethod: req.method,\n\t\t// TODO pass in a client instead\n\t\tresult: await gasPriceHandler(/** @type any*/ ({ getVm, forkTransport }))({}).then(numberToHex),\n\t})\n","import { createAddress } from '@tevm/address'\nimport { NoForkUrlSetError } from '@tevm/errors'\nimport { createJsonRpcFetcher } from '@tevm/jsonrpc'\nimport { bytesToHex, hexToBigInt, numberToHex } from '@tevm/utils'\nimport { getPendingClient } from '../internal/getPendingClient.js'\n\n/**\n * @param {import('@tevm/node').TevmNode} baseClient\n * @returns {import('./EthHandler.js').EthGetBalanceHandler}\n */\nexport const getBalanceHandler =\n\t(baseClient) =>\n\tasync ({ address, blockTag = 'latest' }) => {\n\t\tconst vm = await baseClient.getVm()\n\n\t\tif (blockTag === 'latest') {\n\t\t\tconst account = await vm.stateManager.getAccount(createAddress(address))\n\t\t\treturn account?.balance ?? 0n\n\t\t}\n\t\tif (blockTag === 'pending') {\n\t\t\tconst mineResult = await getPendingClient(baseClient)\n\t\t\tif (mineResult.errors) {\n\t\t\t\tthrow mineResult.errors[0]\n\t\t\t}\n\t\t\treturn getBalanceHandler(mineResult.pendingClient)({ address, blockTag: 'latest' })\n\t\t}\n\t\tconst block =\n\t\t\tvm.blockchain.blocks.get(/** @type any*/ (blockTag)) ??\n\t\t\tvm.blockchain.blocksByTag.get(/** @type any*/ (blockTag)) ??\n\t\t\tvm.blockchain.blocksByNumber.get(/** @type any*/ (blockTag))\n\t\tconst hasStateRoot = block && (await vm.stateManager.hasStateRoot(block.header.stateRoot))\n\t\tif (hasStateRoot) {\n\t\t\tconst root = vm.stateManager._baseState.stateRoots.get(bytesToHex(block.header.stateRoot))\n\t\t\tif (root?.[address]) return root[address].balance\n\t\t}\n\t\t// at this point the block doesn't exist or doesn't have state so we must be in forked mode\n\t\tif (!baseClient.forkTransport) {\n\t\t\tthrow new NoForkUrlSetError('No fork url set')\n\t\t}\n\t\tconst fetcher = createJsonRpcFetcher(baseClient.forkTransport)\n\t\tconst jsonRpcResponse = await fetcher.request({\n\t\t\tjsonrpc: '2.0',\n\t\t\tid: 1,\n\t\t\tmethod: 'eth_getBalance',\n\t\t\tparams: [address, typeof blockTag === 'bigint' ? numberToHex(blockTag) : blockTag],\n\t\t})\n\t\tif (jsonRpcResponse.error) {\n\t\t\t// TODO we should parse this into the correct error type\n\t\t\tthrow jsonRpcResponse.error\n\t\t}\n\t\tif (jsonRpcResponse.result === null) {\n\t\t\treturn 0n\n\t\t}\n\t\t// TODO we should do a typeguard here instead of casting\n\t\treturn hexToBigInt(/** @type {any}*/ (jsonRpcResponse.result))\n\t}\n","import { numberToHex } from '@tevm/utils'\nimport { getBalanceHandler } from './getBalanceHandler.js'\n\n/**\n * @param {Parameters<typeof getBalanceHandler>[0]} baseClient\n * @returns {import('./EthProcedure.js').EthGetBalanceJsonRpcProcedure}\n */\nexport const getBalanceProcedure = (baseClient) => async (req) => {\n\tif (!req.params[1]) {\n\t\tthrow new Error(\n\t\t\t'getBalanceProcedure received invalid parameters: Block parameter (req.params[1]) is missing or invalid. Expected a hex string or block tag (e.g., \"latest\", \"earliest\").',\n\t\t)\n\t}\n\treturn {\n\t\t...(req.id ? { id: req.id } : {}),\n\t\tjsonrpc: '2.0',\n\t\tmethod: req.method,\n\t\tresult: numberToHex(\n\t\t\tawait getBalanceHandler(baseClient)({\n\t\t\t\taddress: req.params[0],\n\t\t\t\t...(req.params[1].startsWith('0x')\n\t\t\t\t\t? { blockNumber: BigInt(req.params[1]) }\n\t\t\t\t\t: {\n\t\t\t\t\t\t\tblockTag: /** @type {import('@tevm/utils').BlockTag}*/ (req.params[1]),\n\t\t\t\t\t\t}),\n\t\t\t}),\n\t\t),\n\t}\n}\n","import { UnknownBlockError } from '@tevm/errors'\nimport { createJsonRpcFetcher } from '@tevm/jsonrpc'\nimport { bytesToHex, getAddress, hexToBytes, isHex } from '@tevm/utils'\nimport { getPendingClient } from '../internal/getPendingClient.js'\n\n/**\n * @param {import('@tevm/node').TevmNode} baseClient\n * @returns {import('./EthHandler.js').EthGetCodeHandler}\n */\nexport const getCodeHandler = (baseClient) => async (params) => {\n\tconst vm = await baseClient.getVm()\n\tconst tag = params.blockTag ?? 'latest'\n\n\tif (tag === 'pending') {\n\t\tconst mineResult = await getPendingClient(baseClient)\n\t\tif (mineResult.errors) {\n\t\t\tthrow mineResult.errors[0]\n\t\t}\n\t\treturn getCodeHandler(mineResult.pendingClient)({ ...params, blockTag: 'latest' })\n\t}\n\n\tconst block = await (async () => {\n\t\tif (tag === 'latest' || tag === 'earliest' || tag === 'safe' || tag === 'finalized') {\n\t\t\treturn vm.blockchain.blocksByTag.get(tag)\n\t\t}\n\t\tif (isHex(tag)) {\n\t\t\treturn vm.blockchain.getBlock(hexToBytes(tag))\n\t\t}\n\t\treturn vm.blockchain.getBlock(tag)\n\t})()\n\n\tif (!block) {\n\t\tthrow new UnknownBlockError(`Unable to find block ${tag}`)\n\t}\n\t/**\n\t * @type {import('viem').Hex | undefined}\n\t */\n\tlet deployedBytecode\n\t// if we have the state cached already grab it from there\n\tif (await vm.stateManager.hasStateRoot(block.header.stateRoot)) {\n\t\tdeployedBytecode = vm.stateManager._baseState.stateRoots.get(bytesToHex(block.header.stateRoot))?.[\n\t\t\tgetAddress(params.address)\n\t\t]?.deployedBytecode\n\t}\n\t// if we don't have it cached and we got a fork client try to fetch it from fork\n\tif (!deployedBytecode && baseClient.forkTransport) {\n\t\tconst fetcher = createJsonRpcFetcher(baseClient.forkTransport)\n\t\treturn fetcher\n\t\t\t.request({\n\t\t\t\tjsonrpc: '2.0',\n\t\t\t\tid: 1,\n\t\t\t\tmethod: 'eth_getCode',\n\t\t\t\tparams: [params.address, tag],\n\t\t\t})\n\t\t\t.then((res) => {\n\t\t\t\tif (res.error) {\n\t\t\t\t\t/**\n\t\t\t\t\t * @type any\n\t\t\t\t\t */\n\t\t\t\t\tconst err = new Error(res.error.message)\n\t\t\t\t\terr._tag = res.error.code\n\t\t\t\t\terr.name = res.error.code\n\t\t\t\t\tthrow err\n\t\t\t\t}\n\t\t\t\treturn /** @type {import('@tevm/utils').Hex}*/ (res.result)\n\t\t\t})\n\t\t\t.catch((err) => {\n\t\t\t\t// TODO handle this in a strongly typed way\n\t\t\t\tif (err.name === 'MethodNotFound') {\n\t\t\t\t\tthrow new Error('Method eth_getCode not supported by fork url')\n\t\t\t\t}\n\t\t\t\tthrow err\n\t\t\t})\n\t}\n\treturn deployedBytecode ?? bytesToHex(new Uint8Array())\n}\n","import { getCodeHandler } from './getCodeHandler.js'\n\n/**\n * @param {Parameters<typeof getCodeHandler>[0]} baseClient\n * @returns {import('./EthProcedure.js').EthGetCodeJsonRpcProcedure}\n */\nexport const getCodeProcedure = (baseClient) => async (req) => ({\n\t...(req.id ? { id: req.id } : {}),\n\tjsonrpc: '2.0',\n\tmethod: req.method,\n\tresult: await getCodeHandler(baseClient)({\n\t\taddress: req.params[0],\n\t\tblockTag: req.params[1],\n\t}),\n})\n","import { getStorageAtHandler } from './getStorageAtHandler.js'\n\n/**\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./EthProcedure.js').EthGetStorageAtJsonRpcProcedure}\n */\nexport const getStorageAtProcedure = (client) => async (req) => ({\n\t...(req.id ? { id: req.id } : {}),\n\tjsonrpc: '2.0',\n\tmethod: req.method,\n\tresult: await getStorageAtHandler(client)({\n\t\taddress: req.params[0],\n\t\tposition: req.params[1],\n\t\tblockTag: req.params[2],\n\t}),\n})\n","import { numberToHex } from '@tevm/utils'\nimport { getAccountHandler } from './getAccountHandler.js'\n\n/**\n * Creates an GetAccount JSON-RPC Procedure for handling account requests with Ethereumjs VM\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./GetAccountJsonRpcProcedure.js').GetAccountJsonRpcProcedure}\n */\nexport const getAccountProcedure = (client) => async (request) => {\n\trequest.params\n\tconst { errors = [], ...result } = await getAccountHandler(client)({\n\t\taddress: request.params[0].address,\n\t\tthrowOnFail: false,\n\t\treturnStorage: request.params[0].returnStorage ?? false,\n\t})\n\tif (errors.length > 0) {\n\t\tconst error = /** @type {import('./TevmGetAccountError.js').TevmGetAccountError}*/ (errors[0])\n\t\treturn {\n\t\t\tjsonrpc: '2.0',\n\t\t\terror: {\n\t\t\t\tcode: error.code,\n\t\t\t\tmessage: error.message,\n\t\t\t\tdata: {\n\t\t\t\t\terrors: errors.map(({ message }) => message),\n\t\t\t\t},\n\t\t\t},\n\t\t\tmethod: 'tevm_getAccount',\n\t\t\t...(request.id === undefined ? {} : { id: request.id }),\n\t\t}\n\t}\n\treturn {\n\t\tjsonrpc: '2.0',\n\t\tresult: /** @type any*/ ({\n\t\t\taddress: result.address,\n\t\t\tbalance: numberToHex(result.balance ?? 0n),\n\t\t\tdeployedBytecode: result.deployedBytecode ?? '0x0',\n\t\t\tnonce: numberToHex(result.nonce ?? 0n),\n\t\t\tstorageRoot: result.storageRoot,\n\t\t\tisContract: result.isContract,\n\t\t\tisEmpty: result.isEmpty,\n\t\t\tcodeHash: result.codeHash,\n\t\t\tstorage: result.storage,\n\t\t}),\n\t\tmethod: 'tevm_getAccount',\n\t\t...(request.id === undefined ? {} : { id: request.id }),\n\t}\n}\n","import { z } from 'zod'\nimport { zBaseParams } from '../BaseCall/zBaseParams.js'\nimport { zHex } from '../internal/zod/zHex.js'\n\n/**\n * Zod validator for a valid load state action\n */\nconst AccountStorage = zBaseParams.extend({\n\tnonce: zHex.describe('The nonce of the account'),\n\tbalance: zHex.describe('The balance of the account'),\n\tstorageRoot: zHex.describe('The storage root of the account'),\n\tcodeHash: zHex.describe('The code hash of the account'),\n\tstorage: z.optional(z.record(zHex, zHex)).describe('The storage of the account'),\n})\n\nexport const zLoadStateParams = z\n\t.object({ state: z.record(zHex, AccountStorage) })\n\t.describe('Properties shared across the load state')\n","import { InvalidRequestError } from '@tevm/errors'\nimport { zLoadStateParams } from './zLoadStateParams.js'\n\n/**\n * Type for errors returned by validateLoadStateParams.\n * @typedef {InvalidRequestError} ValidateLoadStateParamsError\n */\n\n/**\n * Validates the parameters for loading the state into the VM.\n *\n * @param {import('./LoadStateParams.js').LoadStateParams} action - The parameters for the load state action.\n * @returns {Array<ValidateLoadStateParamsError>} - An array of errors, if any.\n *\n * @example\n * ```typescript\n * import { validateLoadStateParams } from 'tevm/actions'\n *\n * const params = { state: {...}  }\n * const errors = validateLoadStateParams(params)\n * if (errors.length > 0) {\n *   console.error('Validation errors:', errors)\n * }\n * ```\n */\nexport const validateLoadStateParams = (action) => {\n\t/**\n\t * @type {Array<ValidateLoadStateParamsError>}\n\t */\n\tconst errors = []\n\n\tconst parsedParams = zLoadStateParams.safeParse(action)\n\n\tif (parsedParams.success === false) {\n\t\tconst formattedErrors = parsedParams.error.format()\n\n\t\tif (formattedErrors._errors) {\n\t\t\tformattedErrors._errors.forEach((error) => {\n\t\t\t\terrors.push(new InvalidRequestError(error))\n\t\t\t})\n\t\t}\n\n\t\tif (formattedErrors.state?._errors) {\n\t\t\tformattedErrors.state._errors.forEach((error) => {\n\t\t\t\terrors.push(new InvalidRequestError(`Invalid state: ${error}`))\n\t\t\t})\n\t\t}\n\t}\n\treturn errors\n}\n","import { InternalError } from '@tevm/errors'\nimport { hexToBigInt } from '@tevm/utils'\nimport { maybeThrowOnFail } from '../internal/maybeThrowOnFail.js'\nimport { validateLoadStateParams } from './validateLoadStateParams.js'\n\n/**\n * Converts SerializableTevmState with Hex strings to TevmState with BigInt values\n * @param {import('@tevm/state').SerializableTevmState} serializedState - The serialized state to convert\n * @returns {import('@tevm/state').TevmState} The deserialized state\n */\nconst deserializeState = (serializedState) => {\n\t/** @type {import('@tevm/state').TevmState} */\n\tconst state = {}\n\n\tfor (const [address, account] of Object.entries(serializedState)) {\n\t\t/** @type {import('@tevm/utils').Address} */\n\t\tconst addressKey = /** @type {import('@tevm/utils').Address} */ (address)\n\t\tstate[addressKey] = {\n\t\t\tnonce: hexToBigInt(account.nonce),\n\t\t\tbalance: hexToBigInt(account.balance),\n\t\t\tstorageRoot: account.storageRoot,\n\t\t\tcodeHash: account.codeHash,\n\t\t\t...(account.deployedBytecode && { deployedBytecode: account.deployedBytecode }),\n\t\t\t...(account.storage && {\n\t\t\t\tstorage: {\n\t\t\t\t\t...Object.fromEntries(Object.entries(account.storage).map(([key, value]) => [key.replace(/^0x/, ''), value])),\n\t\t\t\t},\n\t\t\t}),\n\t\t}\n\t}\n\n\treturn state\n}\n\n/**\n * @internal\n * Creates a handler for loading a previously dumped state into the VM.\n *\n * @param {import(\"@tevm/node\").TevmNode} client - The base client instance.\n * @param {object} [options] - Optional configuration.\n * @param {boolean} [options.throwOnFail] - Whether to throw an error when a failure occurs.\n * @returns {import('./LoadStateHandlerType.js').LoadStateHandler} - The handler function.\n *\n * @example\n * ```typescript\n * import { createClient } from 'tevm'\n * import { loadStateHandler } from 'tevm/actions'\n * import fs from 'fs'\n *\n * const client = createClient()\n * const loadState = loadStateHandler(client)\n *\n * const state = JSON.parse(fs.readFileSync('state.json'))\n * const result = await loadState({ state })\n * if (result.errors) {\n *   console.error('Failed to load state:', result.errors)\n * }\n * ```\n *\n * @see {@link LoadStateParams}\n * @see {@link LoadStateResult}\n * @see {@link TevmLoadStateError}\n */\nexport const loadStateHandler =\n\t(client, options = {}) =>\n\tasync ({ throwOnFail = options.throwOnFail ?? true, ...params }) => {\n\t\tconst errors = validateLoadStateParams(params)\n\t\tif (errors.length > 0) {\n\t\t\treturn maybeThrowOnFail(throwOnFail, { errors })\n\t\t}\n\t\ttry {\n\t\t\tconst vm = await client.getVm()\n\t\t\tif ('generateCanonicalGenesis' in vm.stateManager) {\n\t\t\t\tconst deserializedState = deserializeState(params.state)\n\t\t\t\tawait vm.stateManager.generateCanonicalGenesis(deserializedState)\n\t\t\t} else {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Unsupported state manager. Must use a Tevm state manager from `@tevm/state` package. This may indicate a bug in tevm internal code.',\n\t\t\t\t)\n\t\t\t}\n\t\t\treturn {}\n\t\t} catch (e) {\n\t\t\treturn maybeThrowOnFail(throwOnFail, {\n\t\t\t\terrors: [new InternalError('UnexpectedError', { cause: e })],\n\t\t\t})\n\t\t}\n\t}\n","import { loadStateHandler } from './loadStateHandler.js'\n\n/**\n * Creates a LoadState JSON-RPC Procedure for handling LoadState requests with Ethereumjs EVM\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./LoadStateJsonRpcProcedure.js').LoadStateJsonRpcProcedure}\n */\nexport const loadStateProcedure = (client) => async (request) => {\n\tconst {\n\t\tparams: [{ state }],\n\t} = request\n\n\tconst { errors = [] } = await loadStateHandler(client)({\n\t\tstate: state,\n\t\tthrowOnFail: false,\n\t})\n\n\tif (errors.length > 0) {\n\t\tconst error = /** @type {import('./TevmLoadStateError.js').TevmLoadStateError}*/ (errors[0])\n\t\treturn {\n\t\t\tjsonrpc: '2.0',\n\t\t\terror: {\n\t\t\t\tcode: error.code,\n\t\t\t\tmessage: error.message,\n\t\t\t\tdata: {\n\t\t\t\t\terrors: errors.map(({ message }) => message),\n\t\t\t\t},\n\t\t\t},\n\t\t\tmethod: 'tevm_loadState',\n\t\t\t...(request.id === undefined ? {} : { id: request.id }),\n\t\t}\n\t}\n\treturn {\n\t\tjsonrpc: '2.0',\n\t\tresult: {},\n\t\tmethod: 'tevm_loadState',\n\t\t...(request.id === undefined ? {} : { id: request.id }),\n\t}\n}\n","import { InternalError } from '@tevm/errors'\nimport { hexToNumber } from '@tevm/utils'\nimport { mineHandler } from './mineHandler.js'\n\n/**\n * Creates an Mine JSON-RPC Procedure for handling tevm_mine requests with Ethereumjs VM\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./MineJsonRpcProcedure.js').MineJsonRpcProcedure}\n */\nexport const mineProcedure = (client) => async (request) => {\n\tconst { errors = [], ...result } = await mineHandler(client)({\n\t\tthrowOnFail: false,\n\t\tinterval: hexToNumber(request.params[1] ?? '0x0'),\n\t\tblockCount: hexToNumber(request.params[0] ?? '0x1'),\n\t})\n\tif (errors.length > 0) {\n\t\tconst error = /** @type {import('./TevmMineError.js').TevmMineError}*/ (errors[0])\n\t\treturn {\n\t\t\tjsonrpc: '2.0',\n\t\t\terror: {\n\t\t\t\tcode: error.code,\n\t\t\t\tmessage: error.message,\n\t\t\t\tdata: {\n\t\t\t\t\terrors: errors.map(({ message }) => message),\n\t\t\t\t},\n\t\t\t},\n\t\t\tmethod: 'tevm_mine',\n\t\t\t...(request.id === undefined ? {} : { id: request.id }),\n\t\t}\n\t}\n\tif (!result.blockHashes?.length) {\n\t\tconst error = new InternalError('No blocks were mined')\n\t\treturn {\n\t\t\tjsonrpc: '2.0',\n\t\t\terror: {\n\t\t\t\tcode: error.code,\n\t\t\t\tmessage: error.message,\n\t\t\t},\n\t\t\tmethod: 'tevm_mine',\n\t\t\t...(request.id === undefined ? {} : { id: request.id }),\n\t\t}\n\t}\n\treturn {\n\t\tjsonrpc: '2.0',\n\t\tresult: {\n\t\t\tblockHashes: result.blockHashes ?? [],\n\t\t},\n\t\tmethod: 'tevm_mine',\n\t\t...(request.id === undefined ? {} : { id: request.id }),\n\t}\n}\n","import { MethodNotSupportedError } from '@tevm/errors'\nimport { anvilDealJsonRpcProcedure } from './anvil/anvilDealProcedure.js'\nimport { anvilDropTransactionJsonRpcProcedure } from './anvil/anvilDropTransactionProcedure.js'\nimport { anvilDumpStateJsonRpcProcedure } from './anvil/anvilDumpStateProcedure.js'\nimport { anvilGetAutomineJsonRpcProcedure } from './anvil/anvilGetAutomineProcedure.js'\nimport { anvilImpersonateAccountJsonRpcProcedure } from './anvil/anvilImpersonateAccountProcedure.js'\nimport { anvilLoadStateJsonRpcProcedure } from './anvil/anvilLoadStateProcedure.js'\nimport { anvilResetJsonRpcProcedure } from './anvil/anvilResetProcedure.js'\nimport { anvilSetBalanceJsonRpcProcedure } from './anvil/anvilSetBalanceProcedure.js'\nimport { anvilSetCodeJsonRpcProcedure } from './anvil/anvilSetCodeProcedure.js'\nimport { anvilSetCoinbaseJsonRpcProcedure } from './anvil/anvilSetCoinbaseProcedure.js'\nimport { anvilSetNonceJsonRpcProcedure } from './anvil/anvilSetNonceProcedure.js'\nimport { anvilSetStorageAtJsonRpcProcedure } from './anvil/anvilSetStorageAtProcedure.js'\nimport { anvilStopImpersonatingAccountJsonRpcProcedure } from './anvil/anvilStopImpersonatingAccountProcedure.js'\nimport { callProcedure } from './Call/callProcedure.js'\nimport { dumpStateProcedure } from './DumpState/dumpStateProcedure.js'\nimport { debugTraceBlockJsonRpcProcedure } from './debug/debugTraceBlockProcedure.js'\nimport { debugTraceCallJsonRpcProcedure } from './debug/debugTraceCallProcedure.js'\nimport { debugTraceStateJsonRpcProcedure } from './debug/debugTraceStateProcedure.js'\nimport { debugTraceTransactionJsonRpcProcedure } from './debug/debugTraceTransactionProcedure.js'\nimport { blockNumberProcedure } from './eth/blockNumberProcedure.js'\nimport { chainIdHandler } from './eth/chainIdHandler.js'\nimport { chainIdProcedure } from './eth/chainIdProcedure.js'\nimport { ethBlobBaseFeeJsonRpcProcedure } from './eth/ethBlobBaseFeeProcedure.js'\nimport { ethCallProcedure } from './eth/ethCallProcedure.js'\nimport { ethCoinbaseJsonRpcProcedure } from './eth/ethCoinbaseProcedure.js'\nimport { ethCreateAccessListProcedure } from './eth/ethCreateAccessListProcedure.js'\nimport { ethEstimateGasJsonRpcProcedure } from './eth/ethEstimateGasProcedure.js'\nimport { ethGetBlockByHashJsonRpcProcedure } from './eth/ethGetBlockByHashProcedure.js'\nimport { ethGetBlockByNumberJsonRpcProcedure } from './eth/ethGetBlockByNumberProcedure.js'\nimport { ethGetBlockTransactionCountByHashJsonRpcProcedure } from './eth/ethGetBlockTransactionCountByHashProcedure.js'\nimport { ethGetBlockTransactionCountByNumberJsonRpcProcedure } from './eth/ethGetBlockTransactionCountByNumberProcedure.js'\nimport { ethGetFilterChangesProcedure } from './eth/ethGetFilterChangesProcedure.js'\nimport { ethGetFilterLogsProcedure } from './eth/ethGetFilterLogsProcedure.js'\nimport { ethGetLogsProcedure } from './eth/ethGetLogsProcedure.js'\nimport { ethGetTransactionByBlockHashAndIndexJsonRpcProcedure } from './eth/ethGetTransactionByBlockHashAndIndexProcedure.js'\nimport { ethGetTransactionByBlockNumberAndIndexJsonRpcProcedure } from './eth/ethGetTransactionByBlockNumberAndIndexProcedure.js'\nimport { ethGetTransactionByHashJsonRpcProcedure } from './eth/ethGetTransactionByHashProcedure.js'\nimport { ethGetTransactionCountProcedure } from './eth/ethGetTransactionCountProcedure.js'\nimport { ethGetTransactionReceiptJsonRpcProcedure } from './eth/ethGetTransactionReceiptProcedure.js'\nimport { ethNewBlockFilterProcedure } from './eth/ethNewBlockFilterProcedure.js'\nimport { ethNewFilterJsonRpcProcedure } from './eth/ethNewFilterProcedure.js'\nimport { ethNewPendingTransactionFilterProcedure } from './eth/ethNewPendingTransactionFilterProcedure.js'\nimport { ethProtocolVersionJsonRpcProcedure } from './eth/ethProtocolVersionProcedure.js'\nimport { ethSendRawTransactionJsonRpcProcedure } from './eth/ethSendRawTransactionProcedure.js'\nimport { ethSendTransactionJsonRpcProcedure } from './eth/ethSendTransactionProcedure.js'\nimport { ethUninstallFilterJsonRpcProcedure } from './eth/ethUninstallFilterProcedure.js'\nimport { gasPriceProcedure } from './eth/gasPriceProcedure.js'\nimport { getBalanceProcedure } from './eth/getBalanceProcedure.js'\nimport { getCodeProcedure } from './eth/getCodeProcedure.js'\nimport { getStorageAtProcedure } from './eth/getStorageAtProcedure.js'\nimport { getAccountProcedure } from './GetAccount/getAccountProcedure.js'\nimport { loadStateProcedure } from './LoadState/loadStateProcedure.js'\nimport { mineProcedure } from './Mine/mineProcedure.js'\nimport { setAccountProcedure } from './SetAccount/setAccountProcedure.js'\n\n/**\n * @typedef {ReturnType<typeof createHandlers>} RequestHandlers\n */\n\n/**\n * @internal\n * Creates a mapping of methods to jsonrpc request handlers\n * @param {import('@tevm/node').TevmNode} client\n * @returns Request handlers\n * @example\n */\nexport const createHandlers = (client) => {\n\tconst tevmHandlers = {\n\t\ttevm_call: callProcedure(client),\n\t\t/**\n\t\t * @param {any} request\n\t\t */\n\t\ttevm_contract: (request) => {\n\t\t\tconst err = new MethodNotSupportedError(\n\t\t\t\t'UnsupportedMethodError: tevm_contract is not supported. Encode the contract arguments and use tevm_call instead.',\n\t\t\t)\n\t\t\treturn /**@type any*/ ({\n\t\t\t\tid: /** @type any*/ (request).id,\n\t\t\t\tmethod: request.method,\n\t\t\t\tjsonrpc: '2.0',\n\t\t\t\terror: {\n\t\t\t\t\tcode: err._tag,\n\t\t\t\t\tmessage: err.message,\n\t\t\t\t},\n\t\t\t})\n\t\t},\n\t\ttevm_getAccount: getAccountProcedure(client),\n\t\ttevm_setAccount: setAccountProcedure(client),\n\t\ttevm_dumpState: dumpStateProcedure(client),\n\t\ttevm_loadState: loadStateProcedure(client),\n\t\ttevm_miner: mineProcedure(client),\n\t}\n\n\tconst ethHandlers = {\n\t\teth_blockNumber: blockNumberProcedure(client),\n\t\teth_chainId: chainIdProcedure(client),\n\t\teth_call: ethCallProcedure(client),\n\t\teth_createAccessList: ethCreateAccessListProcedure(client),\n\t\teth_getCode: getCodeProcedure(client),\n\t\teth_getStorageAt: getStorageAtProcedure(client),\n\t\teth_gasPrice: gasPriceProcedure(client),\n\t\teth_getBalance: getBalanceProcedure(client),\n\t\teth_coinbase: ethCoinbaseJsonRpcProcedure(client),\n\t\teth_mining:\n\t\t\t/**\n\t\t\t * @param {any} request}\n\t\t\t */\n\t\t\t(request) => {\n\t\t\t\treturn {\n\t\t\t\t\tresult: client.status === 'MINING',\n\t\t\t\t\tmethod: request.method,\n\t\t\t\t\tjsonrpc: '2.0',\n\t\t\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\t\t}\n\t\t\t},\n\t\teth_syncing:\n\t\t\t/**\n\t\t\t * @param {any} request}\n\t\t\t */\n\t\t\t(request) => {\n\t\t\t\treturn {\n\t\t\t\t\tresult: client.status === 'SYNCING',\n\t\t\t\t\tmethod: request.method,\n\t\t\t\t\tjsonrpc: '2.0',\n\t\t\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t\t\t}\n\t\t\t},\n\t\teth_sendTransaction: ethSendTransactionJsonRpcProcedure(client),\n\t\teth_sendRawTransaction: ethSendRawTransactionJsonRpcProcedure(client),\n\t\teth_estimateGas: ethEstimateGasJsonRpcProcedure(client),\n\t\teth_getTransactionReceipt: ethGetTransactionReceiptJsonRpcProcedure(client),\n\t\teth_getLogs: ethGetLogsProcedure(client),\n\t\teth_getBlockByHash: ethGetBlockByHashJsonRpcProcedure(client),\n\t\teth_getBlockByNumber: ethGetBlockByNumberJsonRpcProcedure(client),\n\t\teth_getBlockTransactionCountByHash: ethGetBlockTransactionCountByHashJsonRpcProcedure(client),\n\t\teth_getBlockTransactionCountByNumber: ethGetBlockTransactionCountByNumberJsonRpcProcedure(client),\n\t\teth_getTransactionByHash: ethGetTransactionByHashJsonRpcProcedure(client),\n\t\teth_getTransactionByBlockHashAndIndex: ethGetTransactionByBlockHashAndIndexJsonRpcProcedure(client),\n\t\teth_getTransactionByBlockNumberAndIndex: ethGetTransactionByBlockNumberAndIndexJsonRpcProcedure(client),\n\t\teth_protocolVersion: ethProtocolVersionJsonRpcProcedure(),\n\t\teth_getTransactionCount: ethGetTransactionCountProcedure(client),\n\t\teth_newFilter: ethNewFilterJsonRpcProcedure(client),\n\t\teth_getFilterLogs: ethGetFilterLogsProcedure(client),\n\t\teth_newBlockFilter: ethNewBlockFilterProcedure(client),\n\t\teth_uninstallFilter: ethUninstallFilterJsonRpcProcedure(client),\n\t\teth_getFilterChanges: ethGetFilterChangesProcedure(client),\n\t\teth_newPendingTransactionFilter: ethNewPendingTransactionFilterProcedure(client),\n\t\teth_blobBaseFee: ethBlobBaseFeeJsonRpcProcedure(client),\n\t}\n\n\tconst anvilHandlers = {\n\t\tanvil_deal: anvilDealJsonRpcProcedure(client),\n\t\tanvil_setCode: anvilSetCodeJsonRpcProcedure(client),\n\t\tanvil_setBalance: anvilSetBalanceJsonRpcProcedure(client),\n\t\tanvil_setNonce: anvilSetNonceJsonRpcProcedure(client),\n\t\tanvil_setChainId: chainIdHandler(client),\n\t\tanvil_getAutomine: anvilGetAutomineJsonRpcProcedure(client),\n\t\tanvil_setCoinbase: anvilSetCoinbaseJsonRpcProcedure(client),\n\t\tanvil_mine: mineProcedure(client),\n\t\tanvil_reset: anvilResetJsonRpcProcedure(client),\n\t\tanvil_dropTransaction: anvilDropTransactionJsonRpcProcedure(client),\n\t\tanvil_dumpState: anvilDumpStateJsonRpcProcedure(client),\n\t\tanvil_loadState: anvilLoadStateJsonRpcProcedure(client),\n\t\tanvil_setStorageAt: anvilSetStorageAtJsonRpcProcedure(client),\n\t\tanvil_impersonateAccount: anvilImpersonateAccountJsonRpcProcedure(client),\n\t\tanvil_stopImpersonatingAccount: anvilStopImpersonatingAccountJsonRpcProcedure(client),\n\t}\n\tconst tevmAnvilHandlers = Object.fromEntries(\n\t\tObject.entries(anvilHandlers).map(([key, value]) => {\n\t\t\treturn [key.replace('anvil', 'tevm'), value]\n\t\t}),\n\t)\n\tconst ganacheHandlers = Object.fromEntries(\n\t\tObject.entries(anvilHandlers).map(([key, value]) => {\n\t\t\treturn [key.replace('anvil', 'ganache'), value]\n\t\t}),\n\t)\n\tconst hardhatHandlers = Object.fromEntries(\n\t\tObject.entries(anvilHandlers).map(([key, value]) => {\n\t\t\treturn [key.replace('anvil', 'hardhat'), value]\n\t\t}),\n\t)\n\n\tconst debugHandlers = {\n\t\tdebug_traceBlock: debugTraceBlockJsonRpcProcedure(client),\n\t\tdebug_traceBlockByHash: debugTraceBlockJsonRpcProcedure(client),\n\t\tdebug_traceBlockByNumber: debugTraceBlockJsonRpcProcedure(client),\n\t\tdebug_traceCall: debugTraceCallJsonRpcProcedure(client),\n\t\tdebug_traceTransaction: debugTraceTransactionJsonRpcProcedure(client),\n\t\tdebug_traceState: debugTraceStateJsonRpcProcedure(client),\n\t}\n\n\tconst allHandlers = {\n\t\t...tevmHandlers,\n\t\t...ethHandlers,\n\t\t...anvilHandlers,\n\t\t...tevmAnvilHandlers,\n\t\t...ganacheHandlers,\n\t\t...hardhatHandlers,\n\t\t...debugHandlers,\n\t}\n\n\treturn allHandlers\n}\n","import { MethodNotFoundError } from '@tevm/errors'\nimport { createHandlers } from './createHandlers.js'\n\n/**\n * Request handler for JSON-RPC requests to Tevm.\n *\n * This implementation of the Tevm requestProcedure spec\n * implements it via the ethereumjs VM.\n *\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./tevm-request-handler/TevmJsonRpcRequestHandler.js').TevmJsonRpcRequestHandler}\n * @example\n * ```typescript\n * const blockNumberResponse = await tevm.request({\n *  method: 'eth_blockNumber',\n *  params: []\n *  id: 1\n *  jsonrpc: '2.0'\n * })\n * const accountResponse = await tevm.request({\n *  method: 'tevm_getAccount',\n *  params: [{address: '0x123...'}]\n *  id: 1\n *  jsonrpc: '2.0'\n * })\n * ```\n * @see {@link createHandlers} where handlers are defined\n */\nexport const requestProcedure = (client) => {\n\tconst handlers = createHandlers(client)\n\treturn async (request) => {\n\t\tawait client.ready()\n\t\tclient.logger.debug({ request }, 'JSON-RPC request received')\n\t\tif (!(request.method in handlers)) {\n\t\t\tconst err = new MethodNotFoundError(`UnsupportedMethodError: Unknown method ${/**@type any*/ (request).method}`)\n\t\t\treturn /** @type {any}*/ ({\n\t\t\t\tid: /** @type any*/ (request).id ?? null,\n\t\t\t\tmethod: /** @type any*/ (request).method,\n\t\t\t\tjsonrpc: '2.0',\n\t\t\t\terror: {\n\t\t\t\t\tcode: err.code,\n\t\t\t\t\tmessage: err.message,\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\t\treturn handlers[/** @type {keyof typeof handlers}*/ (request.method)](request)\n\t}\n}\n","import { createAddress } from '@tevm/address'\nimport { createImpersonatedTx } from '@tevm/tx'\nimport { hexToBigInt, hexToBytes, hexToNumber } from '@tevm/utils'\nimport { forkAndCacheBlock } from '../internal/forkAndCacheBlock.js'\nimport { serializeTraceResult } from '../internal/serializeTraceResult.js'\nimport { requestProcedure } from '../requestProcedure.js'\nimport { traceCallHandler } from './traceCallHandler.js'\n\n/**\n * Creates a JSON-RPC procedure handler for the `debug_traceTransaction` method\n *\n * This handler traces the execution of a historical transaction using the EVM's step-by-step\n * execution tracing capabilities. It reconstructs the state at the point of the transaction\n * by replaying all previous transactions in the block and then provides a detailed trace.\n *\n * @param {import('@tevm/node').TevmNode} client - The TEVM node instance\n * @returns {import('./DebugProcedure.js').DebugTraceTransactionProcedure} A handler function for debug_traceTransaction requests\n * @throws {Error} If the transaction cannot be found\n * @throws {Error} If the parent block's state root is not available and cannot be forked\n *\n * @example\n * ```javascript\n * import { createTevmNode } from '@tevm/node'\n * import { createAddress } from '@tevm/address'\n * import { debugTraceTransactionJsonRpcProcedure } from '@tevm/actions'\n * import { SimpleContract } from '@tevm/contract'\n *\n * // Create a node and deploy a contract\n * const node = createTevmNode({ miningConfig: { type: 'auto' } })\n * const contract = SimpleContract.withAddress(createAddress('0x1234').toString())\n *\n * // Deploy contract\n * const deployResult = await node.tevmDeploy(contract.deploy(1n))\n *\n * // Call a contract method that will create a transaction\n * const callResult = await node.tevmCall({\n *   createTransaction: true,\n *   ...contract.write.set(42n)\n * })\n *\n * // Get the transaction hash from the call result\n * const txHash = callResult.txHash\n *\n * // Create the debug procedure handler\n * const debugProcedure = debugTraceTransactionJsonRpcProcedure(node)\n *\n * // Trace the transaction\n * const trace = await debugProcedure({\n *   jsonrpc: '2.0',\n *   method: 'debug_traceTransaction',\n *   params: [{\n *     transactionHash: txHash,\n *     tracer: 'callTracer' // Or other tracer options\n *   }],\n *   id: 1\n * })\n *\n * console.log('Transaction trace:', trace.result)\n * ```\n */\nexport const debugTraceTransactionJsonRpcProcedure = (client) => {\n\t/**\n\t * @template {'callTracer' | 'prestateTracer' | '4byteTracer'} TTracer\n\t * @template {boolean} TDiffMode\n\t * @param {import('./DebugJsonRpcRequest.js').DebugTraceTransactionJsonRpcRequest<TTracer, TDiffMode>} request\n\t * @returns {Promise<import('./DebugJsonRpcResponse.js').DebugTraceTransactionJsonRpcResponse<TTracer, TDiffMode>>}\n\t */\n\treturn async (request) => {\n\t\tconst { tracer, timeout, tracerConfig, transactionHash } = request.params[0]\n\t\tif (timeout !== undefined) {\n\t\t\tclient.logger.warn('Warning: timeout is currently respected param of debug_traceTransaction')\n\t\t}\n\n\t\tclient.logger.debug({ transactionHash, tracer, tracerConfig }, 'debug_traceTransaction: executing with params')\n\n\t\tconst transactionByHashResponse = await requestProcedure(client)({\n\t\t\tmethod: 'eth_getTransactionByHash',\n\t\t\tparams: [transactionHash],\n\t\t\tjsonrpc: '2.0',\n\t\t\tid: 1,\n\t\t})\n\t\tif (transactionByHashResponse.error) {\n\t\t\treturn {\n\t\t\t\terror: {\n\t\t\t\t\tcode: transactionByHashResponse.error.code.toString(),\n\t\t\t\t\tmessage: transactionByHashResponse.error.message,\n\t\t\t\t},\n\t\t\t\t...(request.id !== undefined ? { id: request.id } : {}),\n\t\t\t\tjsonrpc: '2.0',\n\t\t\t\tmethod: request.method,\n\t\t\t}\n\t\t}\n\n\t\tlet vm = await client.getVm()\n\t\tconst block = await vm.blockchain.getBlock(hexToBytes(transactionByHashResponse.result.blockHash))\n\t\tconst parentBlock = await vm.blockchain.getBlock(block.header.parentHash)\n\t\tconst previousTx = block.transactions.filter(\n\t\t\t(_, i) => i < hexToNumber(transactionByHashResponse.result.transactionIndex),\n\t\t)\n\n\t\t// handle the case where the state root is from a preforked block\n\t\tconst hasStateRoot = await vm.stateManager.hasStateRoot(parentBlock.header.stateRoot)\n\t\tif (!hasStateRoot && client.forkTransport) {\n\t\t\tvm = await forkAndCacheBlock(client, parentBlock)\n\t\t} else if (!hasStateRoot) {\n\t\t\treturn {\n\t\t\t\tjsonrpc: '2.0',\n\t\t\t\tmethod: request.method,\n\t\t\t\t...(request.id !== undefined ? { id: request.id } : {}),\n\t\t\t\terror: {\n\t\t\t\t\tcode: '-32602',\n\t\t\t\t\tmessage: 'State root not available for parent block',\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\t// clone the VM and set initial state\n\t\tconst vmClone = await vm.deepCopy()\n\t\tawait vmClone.stateManager.setStateRoot(parentBlock.header.stateRoot)\n\n\t\t// execute all transactions before the current one committing to the state\n\t\tfor (const tx of previousTx) {\n\t\t\tawait vmClone.runTx({\n\t\t\t\tblock,\n\t\t\t\tskipNonce: true,\n\t\t\t\tskipBalance: true,\n\t\t\t\tskipHardForkValidation: true,\n\t\t\t\tskipBlockGasLimitValidation: true,\n\t\t\t\ttx: createImpersonatedTx(\n\t\t\t\t\t{\n\t\t\t\t\t\t...tx,\n\t\t\t\t\t\tgasPrice: null,\n\t\t\t\t\t\timpersonatedAddress: createAddress(tx.getSenderAddress()),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tfreeze: false,\n\t\t\t\t\t\tcommon: vmClone.common.ethjsCommon,\n\t\t\t\t\t\tallowUnlimitedInitCodeSize: true,\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t})\n\t\t}\n\n\t\t// now execute a debug_traceCall\n\t\tconst traceResult = await traceCallHandler({ ...client, getVm: () => Promise.resolve(vmClone) })({\n\t\t\ttracer,\n\t\t\t...(transactionByHashResponse.result.to !== undefined ? { to: transactionByHashResponse.result.to } : {}),\n\t\t\t...(transactionByHashResponse.result.from !== undefined ? { from: transactionByHashResponse.result.from } : {}),\n\t\t\t...(transactionByHashResponse.result.gas !== undefined\n\t\t\t\t? { gas: hexToBigInt(transactionByHashResponse.result.gas) }\n\t\t\t\t: {}),\n\t\t\t...(transactionByHashResponse.result.gasPrice !== undefined\n\t\t\t\t? { gasPrice: hexToBigInt(transactionByHashResponse.result.gasPrice) }\n\t\t\t\t: {}),\n\t\t\t...(transactionByHashResponse.result.value !== undefined\n\t\t\t\t? { value: hexToBigInt(transactionByHashResponse.result.value) }\n\t\t\t\t: {}),\n\t\t\t...(transactionByHashResponse.result.input !== undefined ? { data: transactionByHashResponse.result.input } : {}),\n\t\t\t...(transactionByHashResponse.result.blockHash !== undefined\n\t\t\t\t? { blockTag: transactionByHashResponse.result.blockHash }\n\t\t\t\t: {}),\n\t\t\t...(timeout !== undefined ? { timeout } : {}),\n\t\t\t.../** @type {any} */ (tracerConfig !== undefined ? { tracerConfig } : {}),\n\t\t})\n\n\t\treturn {\n\t\t\tmethod: request.method,\n\t\t\tresult: /** @type {any} */ (serializeTraceResult(traceResult)),\n\t\t\tjsonrpc: '2.0',\n\t\t\t...(request.id ? { id: request.id } : {}),\n\t\t}\n\t}\n}\n","/**\n * @param {{accounts: ReadonlyArray<import('@tevm/utils').Account>}} params\n * @returns {import('./EthHandler.js').EthAccountsHandler}\n */\nexport const ethAccountsHandler =\n\t({ accounts }) =>\n\tasync () => {\n\t\treturn accounts.map((account) => account.address)\n\t}\n","import { ethAccountsHandler } from './ethAccountsHandler.js'\n\n/**\n * @param {ReadonlyArray<import('@tevm/utils').Account>} accounts\n * @returns {import('./EthProcedure.js').EthAccountsJsonRpcProcedure}\n */\nexport const ethAccountsProcedure = (accounts) => async (req) => ({\n\t...(req.id ? { id: req.id } : {}),\n\tjsonrpc: '2.0',\n\tmethod: req.method,\n\tresult: await ethAccountsHandler({ accounts })({}),\n})\n","import { callHandler } from '../Call/callHandler.js'\n\n/**\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./EthHandler.js').EthCallHandler}\n */\nexport const ethCallHandler = (client) => async (params) => {\n\treturn callHandler(client)({\n\t\t...params,\n\t\tcreateTransaction: false,\n\t\tskipBalance: true,\n\t}).then((res) => {\n\t\tif (res.errors?.length) {\n\t\t\tthrow res.errors?.[0]\n\t\t}\n\t\treturn res.rawData\n\t})\n}\n","import { createAddress } from '@tevm/address'\nimport { BlobGasLimitExceededError, InvalidTransactionError } from '@tevm/errors'\nimport { prefundedAccounts } from '@tevm/node'\nimport { createImpersonatedTx, createTxFromRLP, isBlobEIP4844Tx } from '@tevm/tx'\nimport { bytesToHex, EthjsAddress, hexToBytes } from '@tevm/utils'\nimport { callHandler } from '../Call/callHandler.js'\n\nconst txType = {\n\tLEGACY: 0x00,\n\tACCESS_LIST: 0x01,\n\tEIP1559: 0x02,\n\tBLOB: 0x03,\n\tOPTIMISM_DEPOSIT: 0x7e,\n}\n\n// TODO we should be properly checking signatures\n\n/**\n * @internal\n * @param {import('@tevm/vm').Vm} vm\n * @param {Uint8Array} txBuf\n */\nconst getTx = (vm, txBuf) => {\n\tif (txBuf[0] === txType.OPTIMISM_DEPOSIT) {\n\t\tthrow new Error('Optimism deposit tx are not supported')\n\t}\n\n\t// Use createTxFromRLP for all transaction types\n\tconst tx = createTxFromRLP(txBuf, {\n\t\tcommon: vm.common.ethjsCommon,\n\t\tfreeze: false,\n\t})\n\n\t// Check blob gas limit for blob transactions\n\tif (isBlobEIP4844Tx(tx)) {\n\t\tconst blobGasLimit = /** @type {any} */ (vm.common.ethjsCommon).param('gasConfig', 'maxblobGasPerBlock')\n\t\tconst blobGasPerBlob = /** @type {any} */ (vm.common.ethjsCommon).param('gasConfig', 'blobGasPerBlob')\n\n\t\tconst blobCount = BigInt(tx.blobs?.length ?? 0)\n\t\tconst blobGas = blobCount * blobGasPerBlob\n\t\tif (blobGas > blobGasLimit) {\n\t\t\tthrow new BlobGasLimitExceededError()\n\t\t}\n\t}\n\n\treturn tx\n}\n\n/**\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./EthHandler.js').EthSendRawTransactionHandler}\n */\nexport const ethSendRawTransactionHandler = (client) => async (params) => {\n\tconst vm = await client.getVm()\n\tconst txBuf = hexToBytes(params.data)\n\t/**\n\t * @type {import('@tevm/tx').BlobEIP4844Transaction | import('@tevm/tx').LegacyTransaction | import('@tevm/tx').AccessListEIP2930Transaction | import('@tevm/tx').FeeMarketEIP1559Transaction}\n\t */\n\tlet tx\n\ttry {\n\t\t// huh? why did type break?\n\t\ttx = /** @type {any} */ (getTx(vm, txBuf))\n\t} catch (e) {\n\t\t// TODO type this error\n\t\tthrow new InvalidTransactionError('Invalid transaction. Unable to parse data', { cause: /** @type {Error}*/ (e) })\n\t}\n\tconst impersonatedAccount = client.getImpersonatedAccount()\n\tif (!tx.isSigned() && impersonatedAccount !== undefined) {\n\t\t/**\n\t\t * @type {import(\"@tevm/tx\").FeeMarketEIP1559Transaction & {impersonatedAddress: EthjsAddress} }\n\t\t **/\n\t\tconst impersonatedTx = /** @type {any}*/ (tx)\n\t\timpersonatedTx.impersonatedAddress = createAddress(impersonatedAccount)\n\t\ttx = createImpersonatedTx(impersonatedTx, { common: tx.common })\n\t} else if (!tx.isSigned()) {\n\t\tclient.logger.debug(\n\t\t\t'Raw Transaction is not signed. Consider calling impersonate endpoint. In future versions unsigned transactions will be rejected.',\n\t\t)\n\t\t/**\n\t\t * @type {import(\"@tevm/tx\").FeeMarketEIP1559Transaction & {impersonatedAddress: EthjsAddress} }\n\t\t **/\n\t\tconst impersonatedTx = /** @type {any}*/ (tx)\n\t\timpersonatedTx.impersonatedAddress = createAddress(\n\t\t\timpersonatedAccount ?? /** @type {import('@tevm/utils').Address} */ (prefundedAccounts[0]),\n\t\t)\n\t\ttx = createImpersonatedTx(impersonatedTx)\n\t}\n\t/**\n\t * @type {import('../Call/CallResult.js').CallResult}\n\t */\n\tlet res\n\ttry {\n\t\tres = await callHandler(client)({\n\t\t\tthrowOnFail: false,\n\t\t\tcreateTransaction: 'always',\n\t\t\t...tx,\n\t\t\tfrom: /** @type {import('@tevm/utils').Address}*/ (tx.getSenderAddress().toString()),\n\t\t\tto: /** @type {import('@tevm/utils').Address}*/ (tx.to?.toString()),\n\t\t\t...('blobVersionedHashes' in tx && tx.blobVersionedHashes\n\t\t\t\t? {\n\t\t\t\t\t\tblobVersionedHashes: /** @type {import('@tevm/utils').Hex[]} */ (tx.blobVersionedHashes),\n\t\t\t\t\t}\n\t\t\t\t: {}),\n\t\t\tdata: bytesToHex(tx.data),\n\t\t})\n\t} catch (error) {\n\t\t// TODO type this error\n\t\tthrow new InvalidTransactionError('Invalid transaction. Unable to add transaction to pool', {\n\t\t\tcause: /** @type {Error}*/ (error),\n\t\t})\n\t}\n\n\tif (res.errors?.length === 1) {\n\t\tthrow res.errors[0]\n\t}\n\tif ((res.errors?.length ?? 0) > 0) {\n\t\tthrow new AggregateError(res.errors ?? [])\n\t}\n\n\treturn bytesToHex(tx.hash())\n}\n","// TODO move this to errors package\nexport class MissingAccountError extends Error {\n\t/**\n\t * @type {'MissingAccountError'}\n\t */\n\t_tag = 'MissingAccountError'\n\t/**\n\t * @type {'MissingAccountError'}\n\t * @override\n\t */\n\tname = 'MissingAccountError'\n}\n\n/**\n * @param {{accounts: ReadonlyArray<import('@tevm/utils').HDAccount>}} params\n * @returns {import('./EthHandler.js').EthSignHandler}\n */\nexport const ethSignHandler = ({ accounts }) => {\n\tconst accountsByAddress = Object.fromEntries(accounts.map((account) => [account.address, account]))\n\n\treturn async (params) => {\n\t\t// TODO validate params with zod\n\t\tconst account = accountsByAddress[params.address]\n\t\tif (!account) {\n\t\t\tthrow new MissingAccountError(`Account ${params.address} not found`)\n\t\t}\n\t\treturn account.signMessage({ message: params.data })\n\t}\n}\n","import { ethSignHandler } from './ethSignHandler.js'\n\n/**\n * @param {ReadonlyArray<import('@tevm/utils').HDAccount>} accounts\n * @returns {import('./EthProcedure.js').EthSignJsonRpcProcedure}\n */\nexport const ethSignProcedure = (accounts) => async (req) => ({\n\t...(req.id ? { id: req.id } : {}),\n\tjsonrpc: '2.0',\n\tmethod: req.method,\n\tresult: await ethSignHandler({ accounts })({\n\t\taddress: req.params[0],\n\t\tdata: req.params[1],\n\t}),\n})\n","import { MissingAccountError } from './ethSignHandler.js'\n\n/**\n * Creates a handler for the `eth_signTransaction` JSON-RPC method that signs transactions using the specified accounts\n *\n * This handler enables signing Ethereum transactions without broadcasting them to the network. It creates an EIP-2930\n * transaction signature using the private key of the specified account. The handler automatically retrieves the\n * current chain ID from the node.\n *\n * @param {object} options - Configuration options for the handler\n * @param {ReadonlyArray<import('@tevm/utils').HDAccount>} options.accounts - Array of HD accounts that can be used for signing\n * @param {() => Promise<number>} options.getChainId - Function to retrieve the current chain ID\n * @returns {import('./EthHandler.js').EthSignTransactionHandler} A handler function for eth_signTransaction requests\n * @throws {MissingAccountError} If the requested account (from address) is not found in the provided accounts list\n *\n * @example\n * ```javascript\n * import { ethSignTransactionHandler } from '@tevm/actions'\n * import { mnemonicToAccount, parseGwei } from '@tevm/utils'\n *\n * // Create accounts from a mnemonic\n * const mnemonic = 'test test test test test test test test test test test junk'\n * const accounts = Array.from(Array(10).keys()).map(\n *   (i) => mnemonicToAccount(mnemonic, { addressIndex: i })\n * )\n *\n * // Create the handler\n * const handler = ethSignTransactionHandler({\n *   accounts,\n *   getChainId: async () => 1 // Mainnet\n * })\n *\n * // Sign a transaction\n * try {\n *   const signedTx = await handler({\n *     from: accounts[0].address,\n *     to: '0x1234567890123456789012345678901234567890',\n *     value: 1000000000000000000n, // 1 ETH\n *     gas: 21000n,\n *     gasPrice: parseGwei('20'),\n *     nonce: 0n,\n *     data: '0x'\n *   })\n *\n *   console.log('Signed transaction:', signedTx)\n *   // Can be used with eth_sendRawTransaction\n * } catch (error) {\n *   if (error.name === 'MissingAccountError') {\n *     console.error('Account not found:', error.message)\n *   } else {\n *     console.error('Unexpected error:', error)\n *   }\n * }\n * ```\n */\nexport const ethSignTransactionHandler = ({ getChainId, accounts }) => {\n\tconst accountsByAddress = Object.fromEntries(accounts.map((account) => [account.address, account]))\n\n\treturn async ({ nonce, ...params }) => {\n\t\t// TODO validate params with zod\n\t\tconst account = accountsByAddress[params.from]\n\t\tif (!account) {\n\t\t\tthrow new MissingAccountError(`Account ${params.from} not found`)\n\t\t}\n\t\treturn account.signTransaction({\n\t\t\t...params,\n\t\t\ttype: 'eip2930',\n\t\t\tchainId: Number(await getChainId()),\n\t\t\t...(typeof nonce === 'bigint' ? { nonce: Number(nonce) } : {}),\n\t\t})\n\t}\n}\n","import { hexToBigInt } from '@tevm/utils'\nimport { ethSignTransactionHandler } from './ethSignTransactionHandler.js'\n\n/**\n * @param {Parameters<typeof ethSignTransactionHandler>[0]} options\n * @returns {import('./EthProcedure.js').EthSignTransactionJsonRpcProcedure}\n */\nexport const ethSignTransactionProcedure = (options) => async (req) => ({\n\t...(req.id ? { id: req.id } : {}),\n\tjsonrpc: '2.0',\n\tmethod: req.method,\n\tresult: await ethSignTransactionHandler(options)({\n\t\tfrom: req.params[0].from,\n\t\t...(req.params[0].to ? { to: req.params[0].to } : {}),\n\t\t...(req.params[0].data ? { data: req.params[0].data } : {}),\n\t\t...(req.params[0].value ? { value: hexToBigInt(req.params[0].value) } : {}),\n\t\t...(req.params[0].gas ? { gas: hexToBigInt(req.params[0].gas) } : {}),\n\t\t...(req.params[0].gasPrice ? { gasPrice: hexToBigInt(req.params[0].gasPrice) } : {}),\n\t\t...(req.params[0].nonce ? { nonce: hexToBigInt(req.params[0].nonce) } : {}),\n\t}),\n})\n","import { z } from 'zod'\nimport { zAddress } from './zAddress.js'\n\n/**\n * Zod validator for a block header specification within actions\n */\nexport const zBlock = z\n\t.strictObject({\n\t\tnumber: z.bigint().min(0n).describe('The block number (height) in the blockchain.'),\n\t\tcoinbase: zAddress.describe('The address of the miner or validator who mined or validated the block.'),\n\t\ttimestamp: z.bigint().min(0n).describe('The timestamp at which the block was mined or validated.'),\n\t\tdifficulty: z.bigint().min(0n).describe('The difficulty level of the block (relevant in PoW chains).'),\n\t\tgasLimit: z\n\t\t\t.bigint()\n\t\t\t.min(0n)\n\t\t\t.describe(\n\t\t\t\t'The gas limit for the block, i.e., the maximum amount of gas that can be used by the transactions in the block.',\n\t\t\t),\n\t\tbaseFeePerGas: z\n\t\t\t.bigint()\n\t\t\t.min(0n)\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t'(Optional) The base fee per gas in the block, introduced in EIP-1559 for dynamic transaction fee calculation.',\n\t\t\t),\n\t\tblobGasPrice: z\n\t\t\t.bigint()\n\t\t\t.min(0n)\n\t\t\t.optional()\n\t\t\t.describe('The gas price for the block; may be undefined in blocks after EIP-1559.'),\n\t})\n\t.describe('A valid block header')\n","/**\n * Validates mining event handlers\n * These are not part of the JSON-RPC interface but are used internally for mining operations\n * @param {unknown} events - The event handlers to validate\n * @returns {{ isValid: boolean, errors: Array<{path: string, message: string}> }} - Validation result\n */\nexport const validateMineEvents = (events) => {\n\tif (typeof events !== 'object' || events === null) {\n\t\treturn {\n\t\t\tisValid: false,\n\t\t\terrors: [{ path: '', message: 'Events must be an object' }],\n\t\t}\n\t}\n\n\t/** @type {Array<{path: string, message: string}>} */\n\tconst errors = []\n\tconst handlers = ['onBlock', 'onReceipt', 'onLog']\n\n\tfor (const handler of handlers) {\n\t\tif (handler in events && /** @type {Record<string, unknown>} */ (events)[handler] !== undefined) {\n\t\t\tif (typeof (/** @type {Record<string, unknown>} */ (events)[handler]) !== 'function') {\n\t\t\t\terrors.push({\n\t\t\t\t\tpath: handler,\n\t\t\t\t\tmessage: `${handler} must be a function`,\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check for any keys that aren't in our list of valid handlers\n\tfor (const key in events) {\n\t\tif (!handlers.includes(key)) {\n\t\t\terrors.push({\n\t\t\t\tpath: key,\n\t\t\t\tmessage: `Unknown event handler: ${key}`,\n\t\t\t})\n\t\t}\n\t}\n\n\treturn {\n\t\tisValid: errors.length === 0,\n\t\terrors,\n\t}\n}\n","import { requestProcedure } from './requestProcedure.js'\n\n/**\n * @param {import('@tevm/node').TevmNode} client\n * @returns {import('./tevm-request-handler/TevmJsonRpcBulkRequestHandler.js').TevmJsonRpcBulkRequestHandler}\n */\nexport const requestBulkProcedure = (client) => async (requests) => {\n\tconst handleRequest = requestProcedure(client)\n\tconst responses = await Promise.allSettled(requests.map((request) => handleRequest(/** @type any*/ (request))))\n\treturn responses.map((response, i) => {\n\t\tconst request = /** @type {import(\"@tevm/jsonrpc\").JsonRpcRequest<string, object>} */ (requests[i])\n\t\t// this should never happen\n\t\tif (response.status === 'rejected') {\n\t\t\tclient.logger.error(response.reason)\n\t\t\treturn {\n\t\t\t\tid: request.id,\n\t\t\t\tmethod: request.method,\n\t\t\t\tjsonrpc: '2.0',\n\t\t\t\terror: {\n\t\t\t\t\t// TODO This should be added to @tevm/errors package and rexported in tevm\n\t\t\t\t\tcode: response.reason.code ?? -32000,\n\t\t\t\t\tmessage: response.reason.message ?? 'UnexpectedBulkRequestError',\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\t\treturn response.value\n\t})\n}\n"]}