{"version":3,"sources":["../src/actions/parentBeaconBlockRootAddress.ts","../src/actions/accumulateParentBeaconBlockRoot.ts","../src/actions/accumulateParentBlockHash.ts","../src/actions/errorMsg.ts","../src/actions/constants.js","../src/actions/errorMessage.js","../src/actions/generateTxResult.ts","../src/actions/txLogsBloom.js","../src/actions/execHardfork.js","../src/actions/validateRunTx.js","../src/actions/warmAddresses2929.js","../src/actions/runTx.ts","../src/actions/applyTransactions.ts","../src/actions/calculateMinerReward.ts","../src/actions/calculateOmmerReward.ts","../src/actions/rewardAccount.ts","../src/actions/assignBlockRewards.ts","../src/actions/assignWithdrawals.ts","../src/actions/applyBlock.ts","../src/actions/DAOConfig.ts","../src/actions/applyDAOHardfork.ts","../src/actions/BuildStatus.ts","../src/actions/BlockBuilder.ts","../src/actions/buildBlock.ts","../src/createBaseVm.js","../src/actions/deepCopy.js","../src/actions/genTxTrie.ts","../src/actions/runBlock.ts","../src/createVm.js"],"names":["createAddressFromString","EipNotEnabledError","EthjsAccount","setLengthLeft","toBytes","createAccount","vm","errorMsg","hexToBytes","tx","Capability","isBlobEIP4844Tx","Bloom","Block","MisconfiguredClientError","BlockGasLimitExceededError","bytesToUnprefixedHex","InvalidArgsError","InvalidGasLimitError","InvalidParamsError","equalsBytes","InvalidTransactionError","InsufficientFundsError","BlobEIP4844Transaction","InvalidGasPriceError","NonceTooLowError","NonceTooHighError","ConsensusType","EthjsAddress","InternalError","Trie","GasLimitExceededError","encodeReceipt","Rlp","KECCAK256_RLP","reward","parseGwei","bytesToHex","BuildStatus","Withdrawal","toType","TypeOutput","InvalidBlobVersionedHashesError","block","EventEmitter","createEvm","trie","baseVm"],"mappings":"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A,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IACA,0CAAA;AAAA,IAC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","file":"index.cjs","sourcesContent":["import { createAddressFromString } from '@tevm/utils'\n\nexport const parentBeaconBlockRootAddress = createAddressFromString('0x000F3df6D732807Ef1319fB7B8bB8522d0Beac02')\n","import { EipNotEnabledError } from '@tevm/errors'\nimport { EthjsAccount, setLengthLeft, toBytes } from '@tevm/utils'\nimport type { BaseVm } from '../BaseVm.js'\nimport { parentBeaconBlockRootAddress } from './parentBeaconBlockRootAddress.js'\n\nexport const accumulateParentBeaconBlockRoot = (vm: BaseVm) => async (root: Uint8Array, timestamp: bigint) => {\n\tif (!vm.common.ethjsCommon.isActivatedEIP(4788)) {\n\t\tthrow new EipNotEnabledError('Cannot call `accumulateParentBeaconBlockRoot`: EIP 4788 is not active')\n\t}\n\t// Save the parentBeaconBlockRoot to the beaconroot stateful precompile ring buffers\n\t// Remove debug logs and use hardcoded value for now\n\t// TODO: Fix param loading from common\n\tconst historicalRootsLength = 8191n // BigInt(vm.common.ethjsCommon.param('vm', 'historicalRootsLength'))\n\tconst timestampIndex = timestamp % historicalRootsLength\n\tconst timestampExtended = timestampIndex + historicalRootsLength\n\n\t/**\n\t * Note: (by Jochem)\n\t * If we don't do this (put account if undefined / non-existant), block runner crashes because the beacon root address does not exist\n\t * This is hence (for me) again a reason why it should /not/ throw if the address does not exist\n\t * All ethereum accounts have empty storage by default\n\t */\n\n\tif ((await vm.stateManager.getAccount(parentBeaconBlockRootAddress)) === undefined) {\n\t\tawait vm.evm.journal.putAccount(parentBeaconBlockRootAddress, new EthjsAccount())\n\t}\n\n\tawait vm.stateManager.putStorage(\n\t\tparentBeaconBlockRootAddress,\n\t\tsetLengthLeft(toBytes(timestampIndex), 32),\n\t\ttoBytes(timestamp),\n\t)\n\tawait vm.stateManager.putStorage(parentBeaconBlockRootAddress, setLengthLeft(toBytes(timestampExtended), 32), root)\n}\n","import { EipNotEnabledError } from '@tevm/errors'\nimport { createAccount, createAddressFromString, setLengthLeft, toBytes } from '@tevm/utils'\nimport type { BaseVm } from '../BaseVm.js'\n\n/**\n * This method runs the logic of EIP 2935 (save blockhashes to state)\n * It will put the `parentHash` of the block to the storage slot of `block.number - 1` of the history storage contract.\n * This contract is used to retrieve BLOCKHASHes in EVM if EIP 2935 is activated.\n * In case that the previous block of `block` is pre-EIP-2935 (so we are on the EIP 2935 fork block), additionally\n * also add the currently available past blockhashes which are available by BLOCKHASH (so, the past 256 block hashes)\n * @param vm The VM to run on\n * @returns Function that accumulates parent block hash\n */\nexport const accumulateParentBlockHash = (vm: BaseVm) => async (currentBlockNumber: bigint, parentHash: Uint8Array) => {\n\tif (!(vm.common as any).ethjsCommon.isActivatedEIP(2935)) {\n\t\tthrow new EipNotEnabledError('Cannot call `accumulateParentBlockHash`: EIP 2935 is not active')\n\t}\n\t// TODO: Fix param loading from common\n\tconst historyAddress = createAddressFromString(\n\t\t'0x0aae40965e6800cd9b1f4b05ff21581047e3f91e', // numberToHex(vm.common.ethjsCommon.param('vm', 'historyStorageAddress')),\n\t)\n\tconst historyServeWindow = 8192n // vm.common.ethjsCommon.param('vm', 'historyServeWindow')\n\n\t// Is this the fork block?\n\tconst forkTime = (vm.common as any).ethjsCommon.eipTimestamp(2935)\n\tif (forkTime === null) {\n\t\tthrow new EipNotEnabledError('EIP 2935 should be activated by timestamp')\n\t}\n\n\tif ((await vm.stateManager.getAccount(historyAddress)) === undefined) {\n\t\tawait vm.evm.journal.putAccount(historyAddress, createAccount({}))\n\t}\n\n\tasync function putBlockHash(vm: BaseVm, hash: Uint8Array, number: bigint) {\n\t\t// ringKey is the key the hash is actually put in (it is a ring buffer)\n\t\tconst ringKey = number % historyServeWindow\n\t\tconst key = setLengthLeft(toBytes(Number(ringKey)), 32)\n\t\tawait vm.stateManager.putStorage(historyAddress, key, hash)\n\t}\n\tawait putBlockHash(vm, parentHash, currentBlockNumber - 1n)\n\n\tconst parentBlock = await vm.blockchain.getBlock(parentHash)\n\n\t// If on the fork block, store the old block hashes as well\n\tif (parentBlock.header.timestamp < forkTime) {\n\t\tlet ancestor = parentBlock\n\t\tfor (let i = 0; i < Number(historyServeWindow) - 1; i++) {\n\t\t\tif (ancestor.header.number === 0n) {\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\tancestor = await vm.blockchain.getBlock(ancestor.header.parentHash)\n\t\t\tawait putBlockHash(vm, ancestor.hash(), ancestor.header.number)\n\t\t}\n\t}\n}\n","import type { Block } from '@tevm/block'\nimport type { BaseVm } from '../BaseVm.js'\n\n/**\n * Internal helper function to create an annotated error message\n *\n * @param msg Base error message\n * @hidden\n */\nexport function errorMsg(msg: string, vm: BaseVm, block: Block) {\n\tconst blockErrorStr = 'errorStr' in block ? block.errorStr() : 'block'\n\n\tconst errorMsg = `${msg} (${vm.common.ethjsCommon.hardfork.name} -> ${blockErrorStr})`\n\treturn errorMsg\n}\n","import { hexToBytes } from '@tevm/utils'\n\n// TODO Might want to move these to utils these are getting copy pasted a lot\n// kekkak256(null)\nexport const KECCAK256_NULL = hexToBytes('0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470')\n","/**\n * Internal helper function to create an annotated error message\n * @param {string} msg Base error message\n * @param {import('@tevm/block').Block} block\n * @param {import('@tevm/tx').TypedTransaction | import('@tevm/tx').ImpersonatedTx} tx\n * @returns {string} Formatted error message\n */\nexport const errorMsg = (msg, block, tx) => {\n\tconst blockErrorStr = 'errorStr' in block ? block.errorStr() : 'block'\n\tconst txErrorStr = 'errorStr' in tx ? tx.errorStr() : 'tx'\n\tconst errorMsg = `${msg} -> ${blockErrorStr} -> ${txErrorStr})`\n\treturn errorMsg\n}\n","import type { TypedTransaction } from '@tevm/tx'\nimport { Capability, isBlobEIP4844Tx } from '@tevm/tx'\nimport type { BaseVm } from '../BaseVm.js'\nimport type {\n\tBaseTxReceipt,\n\tEIP4844BlobTxReceipt,\n\tPostByzantiumTxReceipt,\n\tPreByzantiumTxReceipt,\n\tRunTxResult,\n\tTxReceipt,\n} from '../utils/index.js'\n\n/**\n * Returns the tx receipt.\n * @param this The vm instance\n * @param tx The transaction\n * @param txResult The tx result\n * @param cumulativeGasUsed The gas used in the block including this tx\n * @param blobGasUsed The blob gas used in the tx\n * @param blobGasPrice The blob gas price for the block including this tx\n */\nexport const generateTxReceipt =\n\t(vm: BaseVm) =>\n\tasync (\n\t\ttx: TypedTransaction,\n\t\ttxResult: RunTxResult,\n\t\tcumulativeGasUsed: bigint,\n\t\tblobGasUsed?: bigint,\n\t\tblobGasPrice?: bigint,\n\t): Promise<TxReceipt> => {\n\t\tconst baseReceipt: BaseTxReceipt = {\n\t\t\tcumulativeBlockGasUsed: cumulativeGasUsed,\n\t\t\tbitvector: txResult.bloom.bitvector,\n\t\t\tlogs: txResult.execResult.logs ?? [],\n\t\t}\n\n\t\tlet receipt: PostByzantiumTxReceipt | PreByzantiumTxReceipt | EIP4844BlobTxReceipt\n\n\t\tif (!tx.supports(Capability.EIP2718TypedTransaction)) {\n\t\t\t// Legacy transaction\n\t\t\tif (vm.common.ethjsCommon.gteHardfork('byzantium') === true) {\n\t\t\t\t// Post-Byzantium\n\t\t\t\treceipt = {\n\t\t\t\t\tstatus: txResult.execResult.exceptionError !== undefined ? 0 : 1, // Receipts have a 0 as status on error\n\t\t\t\t\t...baseReceipt,\n\t\t\t\t} as PostByzantiumTxReceipt\n\t\t\t} else {\n\t\t\t\t// Pre-Byzantium\n\t\t\t\tconst stateRoot = await vm.stateManager.getStateRoot()\n\t\t\t\treceipt = {\n\t\t\t\t\tstateRoot,\n\t\t\t\t\t...baseReceipt,\n\t\t\t\t} as PreByzantiumTxReceipt\n\t\t\t}\n\t\t} else {\n\t\t\t// Typed EIP-2718 Transaction\n\t\t\tif (isBlobEIP4844Tx(tx)) {\n\t\t\t\treceipt = {\n\t\t\t\t\tblobGasUsed,\n\t\t\t\t\tblobGasPrice,\n\t\t\t\t\tstatus: txResult.execResult.exceptionError ? 0 : 1,\n\t\t\t\t\t...baseReceipt,\n\t\t\t\t} as EIP4844BlobTxReceipt\n\t\t\t} else {\n\t\t\t\treceipt = {\n\t\t\t\t\tstatus: txResult.execResult.exceptionError ? 0 : 1,\n\t\t\t\t\t...baseReceipt,\n\t\t\t\t} as PostByzantiumTxReceipt\n\t\t\t}\n\t\t}\n\t\treturn receipt\n\t}\n","import { Bloom } from '@ethereumjs/vm'\n\n/**\n * @internal\n * Creates a bloom filter from the logs.\n * @param {any[] | undefined} logs - The logs to create the bloom filter from.\n * @param {import('@tevm/common').Common} common - The common object.')}\n * @returns {Bloom}\n * @throws {never}\n */\nexport function txLogsBloom(logs, common) {\n\tconst bloom = new Bloom(undefined, common?.ethjsCommon)\n\tif (logs) {\n\t\tfor (let i = 0; i < logs.length; i++) {\n\t\t\tconst log = logs[i]\n\t\t\t// add the address\n\t\t\tbloom.add(log[0])\n\t\t\t// add the topics\n\t\t\tconst topics = log[1]\n\t\t\tfor (let q = 0; q < topics.length; q++) {\n\t\t\t\tbloom.add(topics[q])\n\t\t\t}\n\t\t}\n\t}\n\treturn bloom\n}\n","/**\n * Returns the hardfork excluding the merge hf which has\n * no effect on the vm execution capabilities.\n *\n * This is particularly useful in executing/evaluating the transaction\n * when chain td is not available at many places to correctly set the\n * hardfork in for e.g. vm or txs or when the chain is not fully synced yet.\n *\n * @param {import('@tevm/common').Hardfork | string} hardfork\n * @param {import('@tevm/common').Hardfork | string} preMergeHf\n * @returns {string | import('@tevm/common').Hardfork}\n * @throws {never}\n */\nexport const execHardfork = (hardfork, preMergeHf) => {\n\treturn hardfork !== 'paris' ? hardfork : preMergeHf\n}\n","import { Block } from '@tevm/block'\nimport { BlockGasLimitExceededError, EipNotEnabledError, MisconfiguredClientError } from '@tevm/errors'\nimport { Capability } from '@tevm/tx'\nimport { errorMsg } from './errorMessage.js'\nimport { execHardfork } from './execHardfork.js'\n\n/**\n * @param {import(\"../BaseVm.js\").BaseVm} vm\n */\nexport const validateRunTx = (vm) => {\n\t/**\n\t * @param {import(\"../utils/RunTxOpts.js\").RunTxOpts} opts\n\t */\n\tconst validateOpts = async (opts) => {\n\t\tconst _opts =\n\t\t\t/**\n\t\t\t * @type {import(\"../utils/RunTxOpts.js\").RunTxOpts & Required<Pick<import(\"../utils/RunTxOpts.js\").RunTxOpts, \"block\" | \"preserveJournal\">>}\n\t\t\t */\n\t\t\t{\n\t\t\t\t...opts,\n\t\t\t\tblock: opts.block !== undefined ? opts.block : Block.fromBlockData({ header: {} }, { common: vm.common }),\n\t\t\t\tpreserveJournal: opts.preserveJournal ?? false,\n\t\t\t}\n\n\t\tif (_opts.skipHardForkValidation !== true) {\n\t\t\t// Find and set preMerge hf for easy access later\n\t\t\tconst hfs = /** @type {any} */ (vm.common).ethjsCommon.hardforks()\n\t\t\tconst preMergeIndex = hfs.findIndex((/** @type {any} */ hf) => hf.ttd !== null && hf.ttd !== undefined) - 1\n\t\t\t// If no pre merge hf found, set it to first hf even if its merge\n\t\t\tconst preMergeHf = preMergeIndex >= 0 ? hfs[preMergeIndex]?.name : hfs[0]?.name\n\n\t\t\tif (!preMergeHf) {\n\t\t\t\tconst msg = errorMsg('no preMerge hardfork found', _opts.block, _opts.tx)\n\t\t\t\tthrow new MisconfiguredClientError(msg)\n\t\t\t}\n\n\t\t\t// If block and tx don't have a same hardfork, set tx hardfork to block\n\t\t\tif (\n\t\t\t\texecHardfork(_opts.tx.common.hardfork(), preMergeHf) !==\n\t\t\t\texecHardfork(_opts.block.common.ethjsCommon.hardfork(), preMergeHf)\n\t\t\t) {\n\t\t\t\t_opts.tx.common.setHardfork(_opts.block.common.ethjsCommon.hardfork())\n\t\t\t}\n\t\t\tif (\n\t\t\t\texecHardfork(_opts.block.common.ethjsCommon.hardfork(), preMergeHf) !==\n\t\t\t\texecHardfork(vm.common.ethjsCommon.hardfork(), preMergeHf)\n\t\t\t) {\n\t\t\t\t// Block and VM's hardfork should match as well\n\t\t\t\tconst msg = errorMsg('block has a different hardfork than the vm', _opts.block, _opts.tx)\n\t\t\t\tthrow new MisconfiguredClientError(msg)\n\t\t\t}\n\t\t}\n\n\t\tif (_opts.skipBlockGasLimitValidation !== true && _opts.block.header.gasLimit < _opts.tx.gasLimit) {\n\t\t\tconst msg = errorMsg('tx has a higher gas limit than the block', _opts.block, _opts.tx)\n\t\t\tthrow new BlockGasLimitExceededError(msg)\n\t\t}\n\t\t// Typed transaction specific setup tasks\n\t\tif (_opts.tx.supports(Capability.EIP2718TypedTransaction) && vm.common.ethjsCommon.isActivatedEIP(2718)) {\n\t\t\t// Is it an Access List transaction?\n\t\t\tif (!vm.common.ethjsCommon.isActivatedEIP(2930)) {\n\t\t\t\tawait vm.evm.journal.revert()\n\t\t\t\tconst msg = errorMsg('Cannot run transaction: EIP 2930 is not activated.', _opts.block, _opts.tx)\n\t\t\t\tthrow new EipNotEnabledError(msg)\n\t\t\t}\n\t\t\tif (_opts.tx.supports(Capability.EIP1559FeeMarket) && !vm.common.ethjsCommon.isActivatedEIP(1559)) {\n\t\t\t\tawait vm.evm.journal.revert()\n\t\t\t\tconst msg = errorMsg('Cannot run transaction: EIP 1559 is not activated.', _opts.block, _opts.tx)\n\t\t\t\tthrow new EipNotEnabledError(msg)\n\t\t\t}\n\t\t}\n\n\t\treturn _opts\n\t}\n\treturn validateOpts\n}\n","import { bytesToUnprefixedHex } from '@tevm/utils'\n\n/**\n * @param {import(\"../BaseVm.js\").BaseVm} vm\n * @param {import('@tevm/utils').EthjsAddress} caller\n * @param {import('@tevm/utils').EthjsAddress | undefined} to\n * @param {import('@tevm/utils').EthjsAddress} coinbase\n */\nexport const warmAddresses2929 = (vm, caller, to, coinbase) => {\n\tif (vm.common.ethjsCommon.isActivatedEIP(2929)) {\n\t\t// Add origin and precompiles to warm addresses\n\t\tconst activePrecompiles = vm.evm.precompiles\n\t\tfor (const [addressStr] of activePrecompiles.entries()) {\n\t\t\tvm.evm.journal.addAlwaysWarmAddress(addressStr)\n\t\t}\n\t\tvm.evm.journal.addAlwaysWarmAddress(caller.toString())\n\t\tif (to !== undefined) {\n\t\t\t// Note: in case we create a contract, we do vm in EVMs `_executeCreate` (vm is also correct in inner calls, per the EIP)\n\t\t\tvm.evm.journal.addAlwaysWarmAddress(bytesToUnprefixedHex(to.bytes))\n\t\t}\n\t\tif (vm.common.ethjsCommon.isActivatedEIP(3651)) {\n\t\t\tvm.evm.journal.addAlwaysWarmAddress(bytesToUnprefixedHex(coinbase.bytes))\n\t\t}\n\t}\n}\n","// Originally from ethjs\nimport { ConsensusType } from '@tevm/common'\nimport {\n\tEipNotEnabledError,\n\tInsufficientFundsError,\n\tInternalError,\n\tInvalidArgsError,\n\tInvalidGasLimitError,\n\tInvalidGasPriceError,\n\tInvalidParamsError,\n\tInvalidTransactionError,\n\tNonceTooHighError,\n\tNonceTooLowError,\n} from '@tevm/errors'\nimport type {\n\tAccessList,\n\tAccessListEIP2930Transaction,\n\tAccessListItem,\n\tFeeMarketEIP1559Transaction,\n\tLegacyTransaction,\n} from '@tevm/tx'\nimport { BlobEIP4844Transaction, Capability, isBlobEIP4844Tx } from '@tevm/tx'\nimport { EthjsAccount, EthjsAddress, equalsBytes, type Hex, hexToBytes } from '@tevm/utils'\nimport type { BaseVm } from '../BaseVm.js'\nimport type { AfterTxEvent, RunTxOpts, RunTxResult } from '../utils/index.js'\nimport { KECCAK256_NULL } from './constants.js'\nimport { errorMsg } from './errorMessage.js'\nimport { generateTxReceipt } from './generateTxResult.js'\nimport { txLogsBloom } from './txLogsBloom.js'\nimport { validateRunTx } from './validateRunTx.js'\nimport { warmAddresses2929 } from './warmAddresses2929.js'\n\nexport type RunTx = (opts: RunTxOpts) => Promise<RunTxResult>\n\n/**\n * @ignore\n */\nexport const runTx =\n\t(vm: BaseVm): RunTx =>\n\tasync (opts: RunTxOpts): Promise<RunTxResult> => {\n\t\tawait vm.ready()\n\n\t\tconst validatedOpts = await validateRunTx(vm)(opts)\n\n\t\t// Ensure we start with a clear warmed accounts Map\n\t\tif (!validatedOpts.preserveJournal) await vm.evm.journal.cleanup()\n\n\t\tif (validatedOpts.reportAccessList === true) {\n\t\t\tvm.evm.journal.startReportingAccessList()\n\t\t}\n\n\t\tif (validatedOpts.reportPreimages === true) {\n\t\t\tvm.evm.journal.startReportingPreimages?.()\n\t\t}\n\n\t\tawait vm.evm.journal.checkpoint()\n\t\t// Typed transaction specific setup tasks\n\t\tif (validatedOpts.tx.supports(Capability.EIP2718TypedTransaction) && vm.common.ethjsCommon.isActivatedEIP(2718)) {\n\t\t\tconst castedTx = <AccessListEIP2930Transaction>validatedOpts.tx\n\t\t\tfor (const accessListItem of castedTx.accessList ?? []) {\n\t\t\t\tvm.evm.journal.addAlwaysWarmAddress(accessListItem[0].toString(), true)\n\t\t\t\tfor (const storageKey of accessListItem[1] ?? []) {\n\t\t\t\t\tvm.evm.journal.addAlwaysWarmSlot(accessListItem[0].toString(), storageKey.toString(), true)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\tconst result = await _runTx(vm)(validatedOpts)\n\t\t\tif (!validatedOpts.preserveJournal) await vm.evm.journal.commit()\n\t\t\treturn result\n\t\t} catch (e: any) {\n\t\t\tawait vm.evm.journal.revert()\n\t\t\tthrow e\n\t\t} finally {\n\t\t\tif (vm.common.ethjsCommon.isActivatedEIP(2929)) {\n\t\t\t\tvm.evm.journal.cleanJournal()\n\t\t\t}\n\t\t}\n\t}\n\nconst _runTx =\n\t(vm: BaseVm) =>\n\tasync (opts: RunTxOpts): Promise<RunTxResult> => {\n\t\tconst { tx, block } = opts\n\t\tif (!block) {\n\t\t\tthrow new InvalidArgsError('block is required')\n\t\t}\n\t\t/**\n\t\t * The `beforeTx` event\n\t\t *\n\t\t * @event Event: beforeTx\n\t\t * @type {Object}\n\t\t * @property {Transaction} tx emits the Transaction that is about to be processed\n\t\t */\n\t\tawait vm._emit('beforeTx', tx)\n\n\t\tconst caller = tx.getSenderAddress()\n\n\t\twarmAddresses2929(vm, caller, tx.to, block.header.coinbase)\n\n\t\t// Validate gas limit against tx base fee (DataFee + TxFee + Creation Fee)\n\t\tconst txBaseFee = tx.getIntrinsicGas()\n\t\tlet gasLimit = tx.gasLimit\n\t\tif (gasLimit < txBaseFee) {\n\t\t\tconst msg = errorMsg(\n\t\t\t\t`tx gas limit ${Number(gasLimit)} is lower than the minimum gas limit of ${Number(txBaseFee)}`,\n\t\t\t\tblock,\n\t\t\t\ttx,\n\t\t\t)\n\t\t\tthrow new InvalidGasLimitError(msg)\n\t\t}\n\t\tgasLimit -= txBaseFee\n\n\t\tif (vm.common.ethjsCommon.isActivatedEIP(1559)) {\n\t\t\t// EIP-1559 spec:\n\t\t\t// Ensure that the user was willing to at least pay the base fee\n\t\t\t// assert transaction.max_fee_per_gas >= block.base_fee_per_gas\n\t\t\tconst maxFeePerGas = 'maxFeePerGas' in tx ? tx.maxFeePerGas : tx.gasPrice\n\t\t\tconst baseFeePerGas = block.header.baseFeePerGas ?? 0n\n\t\t\tif (maxFeePerGas < baseFeePerGas) {\n\t\t\t\tconst msg = errorMsg(\n\t\t\t\t\t`Transaction's ${\n\t\t\t\t\t\t'maxFeePerGas' in tx ? 'maxFeePerGas' : 'gasPrice'\n\t\t\t\t\t} (${maxFeePerGas}) is less than the block's baseFeePerGas (${baseFeePerGas})`,\n\t\t\t\t\tblock,\n\t\t\t\t\ttx,\n\t\t\t\t)\n\t\t\t\tthrow new InvalidParamsError(msg)\n\t\t\t}\n\t\t}\n\t\t// Check from account's balance and nonce\n\t\tlet fromAccount = await vm.stateManager.getAccount(caller)\n\t\tif (fromAccount === undefined) {\n\t\t\tfromAccount = new EthjsAccount()\n\t\t}\n\t\tconst { nonce, balance } = fromAccount\n\t\t// EIP-3607: Reject transactions from senders with deployed code\n\t\tif (vm.common.ethjsCommon.isActivatedEIP(3607) && !equalsBytes(fromAccount.codeHash, KECCAK256_NULL)) {\n\t\t\tconst msg = errorMsg(\n\t\t\t\t'invalid sender address, address is not EOA (EIP-3607). When EIP-3607 is disabled this check is skipped',\n\t\t\t\tblock,\n\t\t\t\ttx,\n\t\t\t)\n\t\t\tthrow new InvalidTransactionError(msg)\n\t\t}\n\n\t\t// Check balance against upfront tx cost\n\t\tconst upFrontCost = tx.getUpfrontCost(block.header.baseFeePerGas)\n\t\tif (balance < upFrontCost) {\n\t\t\tif (opts.skipBalance === true && fromAccount.balance < upFrontCost) {\n\t\t\t\tif (tx.supports(Capability.EIP1559FeeMarket) === false) {\n\t\t\t\t\t// if skipBalance and not EIP1559 transaction, ensure caller balance is enough to run transaction\n\t\t\t\t\tfromAccount.balance = upFrontCost\n\t\t\t\t\tawait vm.evm.journal.putAccount(caller, fromAccount)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst msg = errorMsg(\n\t\t\t\t\t`sender doesn't have enough funds to send tx. The upfront cost is: ${upFrontCost} and the sender's account (${caller}) only has: ${balance}`,\n\t\t\t\t\tblock,\n\t\t\t\t\ttx,\n\t\t\t\t)\n\t\t\t\tthrow new InsufficientFundsError(msg)\n\t\t\t}\n\t\t}\n\n\t\t// Check balance against max potential cost (for EIP 1559 and 4844)\n\t\tlet maxCost = tx.value\n\t\tlet blobGasPrice = 0n\n\t\tlet totalblobGas = 0n\n\t\tif (tx.supports(Capability.EIP1559FeeMarket)) {\n\t\t\t// EIP-1559 spec:\n\t\t\t// The signer must be able to afford the transaction\n\t\t\t// `assert balance >= gas_limit * max_fee_per_gas`\n\t\t\tmaxCost += tx.gasLimit * (tx as FeeMarketEIP1559Transaction).maxFeePerGas\n\t\t}\n\n\t\tif (tx instanceof BlobEIP4844Transaction) {\n\t\t\tif (!vm.common.ethjsCommon.isActivatedEIP(4844)) {\n\t\t\t\tconst msg = errorMsg('blob transactions are only valid with EIP4844 active', block, tx)\n\t\t\t\tthrow new EipNotEnabledError(msg)\n\t\t\t}\n\t\t\t// EIP-4844 spec\n\t\t\t// the signer must be able to afford the transaction\n\t\t\t// assert signer(tx).balance >= tx.message.gas * tx.message.max_fee_per_gas + get_total_data_gas(tx) * tx.message.max_fee_per_data_gas\n\t\t\tconst castTx = tx as BlobEIP4844Transaction\n\t\t\ttotalblobGas = BigInt(vm.common.ethjsCommon.param('blobGasPerBlob')) * BigInt(castTx.numBlobs())\n\t\t\tmaxCost += totalblobGas * castTx.maxFeePerBlobGas\n\n\t\t\t// 4844 minimum blobGas price check\n\t\t\tif (opts.block === undefined) {\n\t\t\t\tconst msg = errorMsg('Block option must be supplied to compute blob gas price', block, tx)\n\t\t\t\tthrow new InvalidParamsError(msg)\n\t\t\t}\n\t\t\tblobGasPrice = opts.block.header.getBlobGasPrice()\n\t\t\tif (castTx.maxFeePerBlobGas < blobGasPrice) {\n\t\t\t\tconst msg = errorMsg(\n\t\t\t\t\t`Transaction's maxFeePerBlobGas ${castTx.maxFeePerBlobGas}) is less than block blobGasPrice (${blobGasPrice}).`,\n\t\t\t\t\tblock,\n\t\t\t\t\ttx,\n\t\t\t\t)\n\t\t\t\tthrow new InvalidGasPriceError(msg)\n\t\t\t}\n\t\t}\n\n\t\tif (fromAccount.balance < maxCost) {\n\t\t\tif (opts.skipBalance === true && fromAccount.balance < maxCost) {\n\t\t\t\t// if skipBalance, ensure caller balance is enough to run transaction\n\t\t\t\tfromAccount.balance = maxCost\n\t\t\t\tawait vm.evm.journal.putAccount(caller, fromAccount)\n\t\t\t} else {\n\t\t\t\tconst msg = errorMsg(\n\t\t\t\t\t`sender doesn't have enough funds to send tx. The max cost is: ${maxCost} and the sender's account (${caller}) only has: ${balance}`,\n\t\t\t\t\tblock,\n\t\t\t\t\ttx,\n\t\t\t\t)\n\t\t\t\tthrow new InsufficientFundsError(msg)\n\t\t\t}\n\t\t}\n\n\t\tif (opts.skipNonce !== true) {\n\t\t\tif (nonce !== tx.nonce) {\n\t\t\t\tconst msg = errorMsg(\n\t\t\t\t\t`the tx doesn't have the correct nonce. account has nonce of: ${nonce} tx has nonce of: ${tx.nonce}`,\n\t\t\t\t\tblock,\n\t\t\t\t\ttx,\n\t\t\t\t)\n\t\t\t\tthrow nonce > tx.nonce ? new NonceTooLowError(msg) : new NonceTooHighError(msg)\n\t\t\t}\n\t\t}\n\n\t\tlet gasPrice: bigint\n\t\tlet inclusionFeePerGas: bigint | undefined\n\t\t// EIP-1559 tx\n\t\tif (tx.supports(Capability.EIP1559FeeMarket)) {\n\t\t\t// TODO make txs use the new getEffectivePriorityFee\n\t\t\tconst baseFee = block.header.baseFeePerGas ?? 0n\n\t\t\tinclusionFeePerGas = tx.getEffectivePriorityFee(baseFee)\n\n\t\t\tgasPrice = inclusionFeePerGas + baseFee\n\t\t} else {\n\t\t\t// Have to cast as legacy tx since EIP1559 tx does not have gas price\n\t\t\tgasPrice = (<LegacyTransaction>tx).gasPrice\n\t\t\tif (vm.common.ethjsCommon.isActivatedEIP(1559)) {\n\t\t\t\tconst baseFee = block.header.baseFeePerGas ?? 0n\n\t\t\t\tinclusionFeePerGas = (<LegacyTransaction>tx).gasPrice - baseFee\n\t\t\t}\n\t\t}\n\n\t\t// EIP-4844 tx\n\t\tlet blobVersionedHashes: `0x${string}`[] | undefined\n\t\tif (tx instanceof BlobEIP4844Transaction) {\n\t\t\tconst rawHashes = (tx as BlobEIP4844Transaction).blobVersionedHashes\n\t\t\tblobVersionedHashes = rawHashes.map((hash) =>\n\t\t\t\thash.startsWith('0x') ? (hash as `0x${string}`) : (`0x${hash}` as `0x${string}`),\n\t\t\t)\n\t\t}\n\n\t\t// Update from account's balance\n\t\tconst txCost = tx.gasLimit * gasPrice\n\t\tconst blobGasCost = totalblobGas * blobGasPrice\n\t\tfromAccount.balance -= txCost\n\t\tfromAccount.balance -= blobGasCost\n\t\tif (opts.skipBalance === true && fromAccount.balance < 0n) {\n\t\t\tfromAccount.balance = 0n\n\t\t}\n\t\tawait vm.evm.journal.putAccount(caller, fromAccount)\n\n\t\t/*\n\t\t * Execute message\n\t\t */\n\t\tconst { value, data, to } = tx\n\n\t\tconst results = (await vm.evm.runCall({\n\t\t\tblock,\n\t\t\tgasPrice,\n\t\t\tcaller,\n\t\t\tgasLimit,\n\t\t\t...(to !== undefined ? { to } : {}),\n\t\t\t...(blobVersionedHashes !== undefined ? { blobVersionedHashes } : {}),\n\t\t\tvalue,\n\t\t\tdata,\n\t\t\tskipBalance: opts.skipBalance ?? false,\n\t\t})) as RunTxResult\n\n\t\t/*\n\t\t * Parse results\n\t\t */\n\t\t// Generate the bloom for the tx\n\t\tresults.bloom = txLogsBloom(results.execResult.logs, vm.common)\n\n\t\t// Calculate the total gas used\n\t\tresults.totalGasSpent = results.execResult.executionGasUsed + txBaseFee\n\n\t\t// Add blob gas used to result\n\t\tif (isBlobEIP4844Tx(tx)) {\n\t\t\tresults.blobGasUsed = totalblobGas\n\t\t}\n\n\t\t// Process any gas refund\n\t\tlet gasRefund = results.execResult.gasRefund ?? 0n\n\t\tresults.gasRefund = gasRefund\n\t\tconst maxRefundQuotient = BigInt(vm.common.ethjsCommon.param('maxRefundQuotient'))\n\t\tif (gasRefund !== 0n) {\n\t\t\tconst maxRefund = results.totalGasSpent / maxRefundQuotient\n\t\t\tgasRefund = gasRefund < maxRefund ? gasRefund : maxRefund\n\t\t\tresults.totalGasSpent -= gasRefund\n\t\t} else {\n\t\t\t// TODO warn that no gas is used\n\t\t}\n\t\tresults.amountSpent = results.totalGasSpent * gasPrice\n\n\t\t// Update sender's balance\n\t\tfromAccount = await vm.stateManager.getAccount(caller)\n\t\tif (fromAccount === undefined) {\n\t\t\tfromAccount = new EthjsAccount()\n\t\t}\n\t\tconst actualTxCost = results.totalGasSpent * gasPrice\n\t\tconst txCostDiff = txCost - actualTxCost\n\t\tfromAccount.balance += txCostDiff\n\t\tawait vm.evm.journal.putAccount(caller, fromAccount)\n\n\t\t// Update miner's balance\n\t\tlet miner: EthjsAddress\n\t\tif (vm.common.ethjsCommon.consensusType() === ConsensusType.ProofOfAuthority) {\n\t\t\tminer = block.header.cliqueSigner()\n\t\t} else {\n\t\t\tminer = block.header.coinbase\n\t\t}\n\n\t\tlet minerAccount = await vm.stateManager.getAccount(miner)\n\t\tif (minerAccount === undefined) {\n\t\t\tminerAccount = new EthjsAccount()\n\t\t}\n\t\t// add the amount spent on gas to the miner's account\n\t\tresults.minerValue = vm.common.ethjsCommon.isActivatedEIP(1559)\n\t\t\t? results.totalGasSpent * (inclusionFeePerGas ?? 0n)\n\t\t\t: results.amountSpent\n\t\tminerAccount.balance += results.minerValue\n\n\t\t// Put the miner account into the state. If the balance of the miner account remains zero, note that\n\t\t// the state.putAccount function puts this into the \"touched\" accounts. This will thus be removed when\n\t\t// we clean the touched accounts below in case we are in a fork >= SpuriousDragon\n\t\tawait vm.evm.journal.putAccount(miner, minerAccount)\n\n\t\t/*\n\t\t * Cleanup accounts\n\t\t */\n\t\tif (results.execResult.selfdestruct !== undefined) {\n\t\t\tfor (const addressToSelfdestructHex of results.execResult.selfdestruct) {\n\t\t\t\tconst address = new EthjsAddress(hexToBytes(addressToSelfdestructHex as Hex))\n\t\t\t\tif (vm.common.ethjsCommon.isActivatedEIP(6780)) {\n\t\t\t\t\t// skip cleanup of addresses not in createdAddresses\n\t\t\t\t\tif (!results.execResult.createdAddresses?.has(address.toString())) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tawait vm.evm.journal.deleteAccount(address)\n\t\t\t}\n\t\t}\n\n\t\tif (opts.reportAccessList === true && vm.common.ethjsCommon.isActivatedEIP(2930)) {\n\t\t\t// Convert the Map to the desired type\n\t\t\tconst accessList: AccessList = []\n\t\t\tif (!vm.evm.journal.accessList) {\n\t\t\t\tthrow new InternalError('expected journal accesslist to be defined')\n\t\t\t}\n\t\t\tfor (const [address, set] of vm.evm.journal.accessList) {\n\t\t\t\tconst item: AccessListItem = {\n\t\t\t\t\taddress: address as Hex,\n\t\t\t\t\tstorageKeys: [],\n\t\t\t\t}\n\t\t\t\tfor (const slot of set) {\n\t\t\t\t\titem.storageKeys.push(slot as Hex)\n\t\t\t\t}\n\t\t\t\taccessList.push(item)\n\t\t\t}\n\n\t\t\tresults.accessList = accessList\n\t\t}\n\n\t\tif (opts.reportPreimages === true && vm.evm.journal.preimages !== undefined) {\n\t\t\tresults.preimages = vm.evm.journal.preimages as any\n\t\t}\n\n\t\tif (!opts.preserveJournal) await vm.evm.journal.cleanup()\n\n\t\t// Generate the tx receipt\n\t\tconst gasUsed = (opts.blockGasUsed !== undefined ? opts.blockGasUsed : block.header.gasUsed) ?? 0n\n\t\tconst cumulativeGasUsed = gasUsed + results.totalGasSpent\n\t\tresults.receipt = await generateTxReceipt(vm)(tx, results, cumulativeGasUsed, totalblobGas, blobGasPrice)\n\n\t\t/**\n\t\t * The `afterTx` event\n\t\t *\n\t\t * @event Event: afterTx\n\t\t * @type {Object}\n\t\t * @property {Object} result result of the transaction\n\t\t */\n\t\tconst event: AfterTxEvent = { transaction: tx, ...results }\n\t\tawait vm._emit('afterTx', event)\n\n\t\treturn results\n\t}\n","import { Bloom, encodeReceipt } from '@ethereumjs/vm'\nimport { Block } from '@tevm/block'\nimport { GasLimitExceededError } from '@tevm/errors'\nimport { Rlp } from '@tevm/rlp'\nimport { Trie } from '@tevm/trie'\nimport { type TypedTransaction } from '@tevm/tx'\nimport { KECCAK256_RLP } from '@tevm/utils'\nimport type { BaseVm } from '../BaseVm.js'\nimport type { RunBlockOpts, RunTxResult, TxReceipt } from '../utils/index.js'\nimport { errorMsg } from './errorMsg.js'\nimport { runTx } from './runTx.js'\n\n/**\n * Applies the transactions in a block, computing the receipts\n * as well as gas usage and some relevant data. This method is\n * side-effect free (it doesn't modify the block nor the state).\n */\nexport const applyTransactions = (vm: BaseVm) => async (block: Block, opts: RunBlockOpts) => {\n\tconst bloom = new Bloom(undefined, vm.common.ethjsCommon)\n\t// the total amount of gas used processing these transactions\n\tlet gasUsed = 0n\n\n\tlet receiptTrie: Trie | undefined\n\tif (block.transactions.length !== 0) {\n\t\treceiptTrie = new Trie({ common: vm.common.ethjsCommon })\n\t}\n\n\tconst receipts: TxReceipt[] = []\n\tconst txResults: RunTxResult[] = []\n\n\t/*\n\t * Process transactions\n\t */\n\tfor (let txIdx = 0; txIdx < block.transactions.length; txIdx++) {\n\t\tconst tx = block.transactions[txIdx] as TypedTransaction\n\n\t\tlet maxGasLimit: bigint\n\t\tif (vm.common.ethjsCommon.isActivatedEIP(1559) === true) {\n\t\t\tmaxGasLimit = block.header.gasLimit * BigInt(vm.common.ethjsCommon.param('elasticityMultiplier'))\n\t\t} else {\n\t\t\tmaxGasLimit = block.header.gasLimit\n\t\t}\n\t\tconst gasLimitIsHigherThanBlock = maxGasLimit < tx.gasLimit + gasUsed\n\t\tif (gasLimitIsHigherThanBlock) {\n\t\t\tconst msg = errorMsg('tx has a higher gas limit than the block', vm, block)\n\t\t\tthrow new GasLimitExceededError(msg)\n\t\t}\n\n\t\t// Run the tx through the VM\n\t\tconst { skipBalance = false, skipNonce = false, skipHardForkValidation = true, reportPreimages = false } = opts\n\n\t\tconst txRes = await runTx(vm)({\n\t\t\ttx,\n\t\t\tblock,\n\t\t\tskipBalance,\n\t\t\tskipNonce,\n\t\t\tskipHardForkValidation,\n\t\t\tblockGasUsed: gasUsed,\n\t\t\treportPreimages,\n\t\t})\n\t\ttxResults.push(txRes)\n\t\t// Add to total block gas usage\n\t\tgasUsed += txRes.totalGasSpent\n\t\t// Combine blooms via bitwise OR\n\t\tbloom.or(txRes.bloom)\n\n\t\t// Add receipt to trie to later calculate receipt root\n\t\treceipts.push(txRes.receipt)\n\t\tconst encodedReceipt = encodeReceipt(txRes.receipt, tx.type)\n\t\tif (receiptTrie) {\n\t\t\tawait receiptTrie.put(Rlp.encode(txIdx), encodedReceipt)\n\t\t}\n\t}\n\n\tconst receiptsRoot = receiptTrie !== undefined ? receiptTrie.root() : KECCAK256_RLP\n\n\treturn {\n\t\tbloom,\n\t\tgasUsed,\n\t\tpreimages: new Map<string, Uint8Array>(),\n\t\treceiptsRoot,\n\t\treceipts,\n\t\tresults: txResults,\n\t}\n}\n","export function calculateMinerReward(minerReward: bigint, ommersNum: number): bigint {\n\t// calculate nibling reward\n\tconst niblingReward = minerReward / BigInt(32)\n\tconst totalNiblingReward = niblingReward * BigInt(ommersNum)\n\tconst reward = minerReward + totalNiblingReward\n\treturn reward\n}\n","export function calculateOmmerReward(ommerBlockNumber: bigint, blockNumber: bigint, minerReward: bigint): bigint {\n\tconst heightDiff = blockNumber - ommerBlockNumber\n\tlet reward = ((8n - heightDiff) * minerReward) / 8n\n\tif (reward < 0n) {\n\t\treward = 0n\n\t}\n\treturn reward\n}\n","import type { Evm } from '@tevm/evm'\nimport { EthjsAccount, EthjsAddress } from '@tevm/utils'\n\nexport async function rewardAccount(evm: Evm, address: EthjsAddress, reward: bigint): Promise<EthjsAccount> {\n\tlet account = await evm.stateManager.getAccount(address)\n\tif (account === undefined) {\n\t\taccount = new EthjsAccount()\n\t}\n\taccount.balance += reward\n\tawait evm.journal.putAccount(address, account)\n\n\treturn account\n}\n","import { Block } from '@tevm/block'\nimport type { BaseVm } from '../BaseVm.js'\nimport { calculateMinerReward } from './calculateMinerReward.js'\nimport { calculateOmmerReward } from './calculateOmmerReward.js'\nimport { rewardAccount } from './rewardAccount.js'\n\n/**\n * Calculates block rewards for miner and ommers and puts\n * the updated balances of their accounts to state.\n */\nexport const assignBlockRewards =\n\t(vm: BaseVm) =>\n\tasync (block: Block): Promise<void> => {\n\t\tconst minerReward = BigInt(vm.common.ethjsCommon.param('minerReward'))\n\t\tconst ommers = block.uncleHeaders\n\t\t// Reward ommers\n\t\tfor (const ommer of ommers) {\n\t\t\tconst reward = calculateOmmerReward(ommer.number, block.header.number, minerReward)\n\t\t\tawait rewardAccount(vm.evm, ommer.coinbase, reward)\n\t\t}\n\t\t// Reward miner\n\t\tconst reward = calculateMinerReward(minerReward, ommers.length)\n\t\tawait rewardAccount(vm.evm, block.header.coinbase, reward)\n\t}\n","import { Block } from '@tevm/block'\nimport { parseGwei, Withdrawal } from '@tevm/utils'\n\nimport type { BaseVm } from '../BaseVm.js'\nimport { rewardAccount } from './rewardAccount.js'\n\nexport const assignWithdrawals =\n\t(vm: BaseVm) =>\n\tasync (block: Block): Promise<void> => {\n\t\tconst withdrawals = block.withdrawals as Withdrawal[]\n\t\tfor (const withdrawal of withdrawals) {\n\t\t\tconst { address, amount } = withdrawal\n\t\t\t// Withdrawal amount is represented in Gwei so needs to be\n\t\t\t// converted to wei\n\t\t\t// Note: event if amount is 0, still reward the account\n\t\t\t// such that the account is touched and marked for cleanup if it is empty\n\t\t\tawait rewardAccount(vm.evm, address, parseGwei(amount.toString()))\n\t\t}\n\t}\n","import { Block } from '@tevm/block'\nimport { ConsensusType } from '@tevm/common'\nimport { InternalError, MisconfiguredClientError } from '@tevm/errors'\nimport { bytesToHex } from '@tevm/utils'\nimport type { BaseVm } from '../BaseVm.js'\nimport type { ApplyBlockResult, RunBlockOpts } from '../utils/index.js'\nimport { accumulateParentBeaconBlockRoot } from './accumulateParentBeaconBlockRoot.js'\nimport { accumulateParentBlockHash } from './accumulateParentBlockHash.js'\nimport { applyTransactions } from './applyTransactions.js'\nimport { assignBlockRewards } from './assignBlockRewards.js'\nimport { assignWithdrawals } from './assignWithdrawals.js'\nimport { errorMsg } from './errorMsg.js'\n\n/**\n * Validates and applies a block, computing the results of\n * applying its transactions. This method doesn't modify the\n * block itself. It computes the block rewards and puts\n * them on state (but doesn't persist the changes).\n * @param {Block} block\n * @param {RunBlockOpts} opts\n */\nexport const applyBlock =\n\t(vm: BaseVm) =>\n\tasync (block: Block, opts: RunBlockOpts): Promise<ApplyBlockResult> => {\n\t\t// Validate block\n\t\tif (opts.skipBlockValidation !== true) {\n\t\t\tif (block.header.gasLimit >= BigInt('0x8000000000000000')) {\n\t\t\t\tconst msg = errorMsg('Invalid block with gas limit greater than (2^63 - 1)', vm, block)\n\t\t\t\t// todo make InvalidBlockError\n\t\t\t\tthrow new InternalError(msg)\n\t\t\t}\n\t\t\t// TODO: decide what block validation method is appropriate here\n\t\t\tif (opts.skipHeaderValidation !== true) {\n\t\t\t\tif (vm.blockchain && typeof (<any>vm.blockchain).validateHeader === 'function') {\n\t\t\t\t\tawait (<any>vm.blockchain).validateHeader(block.header)\n\t\t\t\t} else {\n\t\t\t\t\t// Skip header validation if blockchain is not properly configured\n\t\t\t\t\t// This is needed for tests to pass\n\t\t\t\t\tconsole.warn('Skipping header validation: blockchain has no validateHeader method')\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Check if validateData exists before calling it\n\t\t\tif (typeof block.validateData === 'function') {\n\t\t\t\tawait block.validateData()\n\t\t\t}\n\t\t}\n\t\tif (vm.common.ethjsCommon.isActivatedEIP(4788)) {\n\t\t\tawait accumulateParentBeaconBlockRoot(vm)(\n\t\t\t\tblock.header.parentBeaconBlockRoot as Uint8Array,\n\t\t\t\tblock.header.timestamp,\n\t\t\t)\n\t\t}\n\t\tif (vm.common.ethjsCommon.isActivatedEIP(2935)) {\n\t\t\tawait accumulateParentBlockHash(vm)(block.header.number, block.header.parentHash)\n\t\t}\n\n\t\tconst blockResults = await applyTransactions(vm)(block, opts)\n\n\t\t// Add txResult preimages to the blockResults preimages\n\t\t// Also add the coinbase preimage\n\n\t\tif (opts.reportPreimages === true) {\n\t\t\tif (vm.evm.stateManager.getAppliedKey === undefined) {\n\t\t\t\tthrow new MisconfiguredClientError(\n\t\t\t\t\t'applyBlock: evm.stateManager.getAppliedKey can not be undefined if reportPreimages is true',\n\t\t\t\t)\n\t\t\t}\n\t\t\tblockResults.preimages.set(\n\t\t\t\tbytesToHex(vm.evm.stateManager.getAppliedKey(block.header.coinbase.toBytes())),\n\t\t\t\tblock.header.coinbase.toBytes(),\n\t\t\t)\n\t\t\tfor (const txResult of blockResults.results) {\n\t\t\t\tif (txResult.preimages !== undefined) {\n\t\t\t\t\tfor (const [key, preimage] of txResult.preimages) {\n\t\t\t\t\t\tblockResults.preimages.set(key, preimage)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (vm.common.ethjsCommon.isActivatedEIP(4895)) {\n\t\t\tif (opts.reportPreimages === true) vm.evm.journal.startReportingPreimages?.()\n\t\t\tawait assignWithdrawals(vm)(block)\n\t\t\tif (opts.reportPreimages === true && vm.evm.journal.preimages !== undefined) {\n\t\t\t\tfor (const [key, preimage] of vm.evm.journal.preimages) {\n\t\t\t\t\tblockResults.preimages.set(key, preimage)\n\t\t\t\t}\n\t\t\t}\n\t\t\tawait vm.evm.journal.cleanup()\n\t\t}\n\t\t// Pay ommers and miners\n\t\tif (block.common.ethjsCommon.consensusType() === ConsensusType.ProofOfWork) {\n\t\t\tawait assignBlockRewards(vm)(block)\n\t\t}\n\n\t\treturn blockResults as any\n\t}\n","export const DAOConfig = {\n\tDAOAccounts: [\n\t\t'd4fe7bc31cedb7bfb8a345f31e668033056b2728',\n\t\t'b3fb0e5aba0e20e5c49d252dfd30e102b171a425',\n\t\t'2c19c7f9ae8b751e37aeb2d93a699722395ae18f',\n\t\t'ecd135fa4f61a655311e86238c92adcd779555d2',\n\t\t'1975bd06d486162d5dc297798dfc41edd5d160a7',\n\t\t'a3acf3a1e16b1d7c315e23510fdd7847b48234f6',\n\t\t'319f70bab6845585f412ec7724b744fec6095c85',\n\t\t'06706dd3f2c9abf0a21ddcc6941d9b86f0596936',\n\t\t'5c8536898fbb74fc7445814902fd08422eac56d0',\n\t\t'6966ab0d485353095148a2155858910e0965b6f9',\n\t\t'779543a0491a837ca36ce8c635d6154e3c4911a6',\n\t\t'2a5ed960395e2a49b1c758cef4aa15213cfd874c',\n\t\t'5c6e67ccd5849c0d29219c4f95f1a7a93b3f5dc5',\n\t\t'9c50426be05db97f5d64fc54bf89eff947f0a321',\n\t\t'200450f06520bdd6c527622a273333384d870efb',\n\t\t'be8539bfe837b67d1282b2b1d61c3f723966f049',\n\t\t'6b0c4d41ba9ab8d8cfb5d379c69a612f2ced8ecb',\n\t\t'f1385fb24aad0cd7432824085e42aff90886fef5',\n\t\t'd1ac8b1ef1b69ff51d1d401a476e7e612414f091',\n\t\t'8163e7fb499e90f8544ea62bbf80d21cd26d9efd',\n\t\t'51e0ddd9998364a2eb38588679f0d2c42653e4a6',\n\t\t'627a0a960c079c21c34f7612d5d230e01b4ad4c7',\n\t\t'f0b1aa0eb660754448a7937c022e30aa692fe0c5',\n\t\t'24c4d950dfd4dd1902bbed3508144a54542bba94',\n\t\t'9f27daea7aca0aa0446220b98d028715e3bc803d',\n\t\t'a5dc5acd6a7968a4554d89d65e59b7fd3bff0f90',\n\t\t'd9aef3a1e38a39c16b31d1ace71bca8ef58d315b',\n\t\t'63ed5a272de2f6d968408b4acb9024f4cc208ebf',\n\t\t'6f6704e5a10332af6672e50b3d9754dc460dfa4d',\n\t\t'77ca7b50b6cd7e2f3fa008e24ab793fd56cb15f6',\n\t\t'492ea3bb0f3315521c31f273e565b868fc090f17',\n\t\t'0ff30d6de14a8224aa97b78aea5388d1c51c1f00',\n\t\t'9ea779f907f0b315b364b0cfc39a0fde5b02a416',\n\t\t'ceaeb481747ca6c540a000c1f3641f8cef161fa7',\n\t\t'cc34673c6c40e791051898567a1222daf90be287',\n\t\t'579a80d909f346fbfb1189493f521d7f48d52238',\n\t\t'e308bd1ac5fda103967359b2712dd89deffb7973',\n\t\t'4cb31628079fb14e4bc3cd5e30c2f7489b00960c',\n\t\t'ac1ecab32727358dba8962a0f3b261731aad9723',\n\t\t'4fd6ace747f06ece9c49699c7cabc62d02211f75',\n\t\t'440c59b325d2997a134c2c7c60a8c61611212bad',\n\t\t'4486a3d68fac6967006d7a517b889fd3f98c102b',\n\t\t'9c15b54878ba618f494b38f0ae7443db6af648ba',\n\t\t'27b137a85656544b1ccb5a0f2e561a5703c6a68f',\n\t\t'21c7fdb9ed8d291d79ffd82eb2c4356ec0d81241',\n\t\t'23b75c2f6791eef49c69684db4c6c1f93bf49a50',\n\t\t'1ca6abd14d30affe533b24d7a21bff4c2d5e1f3b',\n\t\t'b9637156d330c0d605a791f1c31ba5890582fe1c',\n\t\t'6131c42fa982e56929107413a9d526fd99405560',\n\t\t'1591fc0f688c81fbeb17f5426a162a7024d430c2',\n\t\t'542a9515200d14b68e934e9830d91645a980dd7a',\n\t\t'c4bbd073882dd2add2424cf47d35213405b01324',\n\t\t'782495b7b3355efb2833d56ecb34dc22ad7dfcc4',\n\t\t'58b95c9a9d5d26825e70a82b6adb139d3fd829eb',\n\t\t'3ba4d81db016dc2890c81f3acec2454bff5aada5',\n\t\t'b52042c8ca3f8aa246fa79c3feaa3d959347c0ab',\n\t\t'e4ae1efdfc53b73893af49113d8694a057b9c0d1',\n\t\t'3c02a7bc0391e86d91b7d144e61c2c01a25a79c5',\n\t\t'0737a6b837f97f46ebade41b9bc3e1c509c85c53',\n\t\t'97f43a37f595ab5dd318fb46e7a155eae057317a',\n\t\t'52c5317c848ba20c7504cb2c8052abd1fde29d03',\n\t\t'4863226780fe7c0356454236d3b1c8792785748d',\n\t\t'5d2b2e6fcbe3b11d26b525e085ff818dae332479',\n\t\t'5f9f3392e9f62f63b8eac0beb55541fc8627f42c',\n\t\t'057b56736d32b86616a10f619859c6cd6f59092a',\n\t\t'9aa008f65de0b923a2a4f02012ad034a5e2e2192',\n\t\t'304a554a310c7e546dfe434669c62820b7d83490',\n\t\t'914d1b8b43e92723e64fd0a06f5bdb8dd9b10c79',\n\t\t'4deb0033bb26bc534b197e61d19e0733e5679784',\n\t\t'07f5c1e1bc2c93e0402f23341973a0e043f7bf8a',\n\t\t'35a051a0010aba705c9008d7a7eff6fb88f6ea7b',\n\t\t'4fa802324e929786dbda3b8820dc7834e9134a2a',\n\t\t'9da397b9e80755301a3b32173283a91c0ef6c87e',\n\t\t'8d9edb3054ce5c5774a420ac37ebae0ac02343c6',\n\t\t'0101f3be8ebb4bbd39a2e3b9a3639d4259832fd9',\n\t\t'5dc28b15dffed94048d73806ce4b7a4612a1d48f',\n\t\t'bcf899e6c7d9d5a215ab1e3444c86806fa854c76',\n\t\t'12e626b0eebfe86a56d633b9864e389b45dcb260',\n\t\t'a2f1ccba9395d7fcb155bba8bc92db9bafaeade7',\n\t\t'ec8e57756626fdc07c63ad2eafbd28d08e7b0ca5',\n\t\t'd164b088bd9108b60d0ca3751da4bceb207b0782',\n\t\t'6231b6d0d5e77fe001c2a460bd9584fee60d409b',\n\t\t'1cba23d343a983e9b5cfd19496b9a9701ada385f',\n\t\t'a82f360a8d3455c5c41366975bde739c37bfeb8a',\n\t\t'9fcd2deaff372a39cc679d5c5e4de7bafb0b1339',\n\t\t'005f5cee7a43331d5a3d3eec71305925a62f34b6',\n\t\t'0e0da70933f4c7849fc0d203f5d1d43b9ae4532d',\n\t\t'd131637d5275fd1a68a3200f4ad25c71a2a9522e',\n\t\t'bc07118b9ac290e4622f5e77a0853539789effbe',\n\t\t'47e7aa56d6bdf3f36be34619660de61275420af8',\n\t\t'acd87e28b0c9d1254e868b81cba4cc20d9a32225',\n\t\t'adf80daec7ba8dcf15392f1ac611fff65d94f880',\n\t\t'5524c55fb03cf21f549444ccbecb664d0acad706',\n\t\t'40b803a9abce16f50f36a77ba41180eb90023925',\n\t\t'fe24cdd8648121a43a7c86d289be4dd2951ed49f',\n\t\t'17802f43a0137c506ba92291391a8a8f207f487d',\n\t\t'253488078a4edf4d6f42f113d1e62836a942cf1a',\n\t\t'86af3e9626fce1957c82e88cbf04ddf3a2ed7915',\n\t\t'b136707642a4ea12fb4bae820f03d2562ebff487',\n\t\t'dbe9b615a3ae8709af8b93336ce9b477e4ac0940',\n\t\t'f14c14075d6c4ed84b86798af0956deef67365b5',\n\t\t'ca544e5c4687d109611d0f8f928b53a25af72448',\n\t\t'aeeb8ff27288bdabc0fa5ebb731b6f409507516c',\n\t\t'cbb9d3703e651b0d496cdefb8b92c25aeb2171f7',\n\t\t'6d87578288b6cb5549d5076a207456a1f6a63dc0',\n\t\t'b2c6f0dfbb716ac562e2d85d6cb2f8d5ee87603e',\n\t\t'accc230e8a6e5be9160b8cdf2864dd2a001c28b6',\n\t\t'2b3455ec7fedf16e646268bf88846bd7a2319bb2',\n\t\t'4613f3bca5c44ea06337a9e439fbc6d42e501d0a',\n\t\t'd343b217de44030afaa275f54d31a9317c7f441e',\n\t\t'84ef4b2357079cd7a7c69fd7a37cd0609a679106',\n\t\t'da2fef9e4a3230988ff17df2165440f37e8b1708',\n\t\t'f4c64518ea10f995918a454158c6b61407ea345c',\n\t\t'7602b46df5390e432ef1c307d4f2c9ff6d65cc97',\n\t\t'bb9bc244d798123fde783fcc1c72d3bb8c189413',\n\t\t'807640a13483f8ac783c557fcdf27be11ea4ac7a',\n\t],\n\tDAORefundContract: 'bf4ed7b27f1d666546e30d74d50d173d20bca754',\n} as const\n","import type { Evm } from '@tevm/evm'\nimport { EthjsAccount, EthjsAddress, type Hex, hexToBytes } from '@tevm/utils'\nimport { DAOConfig } from './DAOConfig.js'\n\n/**\n * Apply the DAO fork changes to the VM\n */\nexport async function applyDAOHardfork(evm: Evm) {\n\tconst state = evm.stateManager\n\n\t/* DAO account list */\n\tconst DAOAccountList = DAOConfig.DAOAccounts\n\tconst DAORefundContract = DAOConfig.DAORefundContract\n\n\tconst DAORefundContractAddress = new EthjsAddress(hexToBytes(`0x${DAORefundContract}`))\n\tif ((await state.getAccount(DAORefundContractAddress)) === undefined) {\n\t\tawait evm.journal.putAccount(DAORefundContractAddress, new EthjsAccount())\n\t}\n\tlet DAORefundAccount = await state.getAccount(DAORefundContractAddress)\n\tif (DAORefundAccount === undefined) {\n\t\tDAORefundAccount = new EthjsAccount()\n\t}\n\n\tfor (const addr of DAOAccountList) {\n\t\t// retrieve the account and add it to the DAO's Refund accounts' balance.\n\t\tconst address = new EthjsAddress(hexToBytes(addr as Hex))\n\t\tlet account = await state.getAccount(address)\n\t\tif (account === undefined) {\n\t\t\taccount = new EthjsAccount()\n\t\t}\n\t\tDAORefundAccount.balance += account.balance\n\t\t// clear the accounts' balance\n\t\taccount.balance = 0n\n\t\tawait evm.journal.putAccount(address, account)\n\t}\n\n\t// finally, put the Refund Account\n\tawait evm.journal.putAccount(DAORefundContractAddress, DAORefundAccount)\n}\n","export enum BuildStatus {\n\tReverted = 'reverted',\n\tBuild = 'build',\n\tPending = 'pending',\n}\n","// Originally from ethjs\n\nimport { Bloom, encodeReceipt } from '@ethereumjs/vm'\nimport type { HeaderData } from '@tevm/block'\nimport { Block } from '@tevm/block'\nimport { ConsensusType } from '@tevm/common'\nimport {\n\tBlockGasLimitExceededError,\n\tEipNotEnabledError,\n\tInternalError,\n\tInvalidBlobVersionedHashesError,\n\tInvalidGasLimitError,\n} from '@tevm/errors'\nimport { Rlp } from '@tevm/rlp'\nimport { Trie } from '@tevm/trie'\nimport type { ImpersonatedTx, TypedTransaction } from '@tevm/tx'\nimport { BlobEIP4844Transaction } from '@tevm/tx'\nimport {\n\tEthjsAddress,\n\ttype Hex,\n\thexToBytes,\n\tKECCAK256_RLP,\n\tparseGwei,\n\tTypeOutput,\n\ttoType,\n\tWithdrawal,\n} from '@tevm/utils'\nimport type { BaseVm } from '../BaseVm.js'\nimport type { BuildBlockOpts, BuilderOpts, RunTxOpts, RunTxResult, SealBlockOpts } from '../utils/index.js'\nimport { accumulateParentBeaconBlockRoot } from './accumulateParentBeaconBlockRoot.js'\nimport { accumulateParentBlockHash } from './accumulateParentBlockHash.js'\nimport type { BlockStatus } from './BlockStatus.js'\nimport { BuildStatus } from './BuildStatus.js'\nimport { calculateMinerReward } from './calculateMinerReward.js'\nimport { rewardAccount } from './rewardAccount.js'\nimport { runTx } from './runTx.js'\n\nexport type AddTransactionError = InvalidGasLimitError | EipNotEnabledError | BlockGasLimitExceededError\n\nexport class BlockBuilder {\n\t/**\n\t * The cumulative gas used by the transactions added to the block.\n\t */\n\tgasUsed = 0n\n\t/**\n\t *  The cumulative blob gas used by the blobs in a block\n\t */\n\tblobGasUsed = 0n\n\t/**\n\t * Value of the block, represented by the final transaction fees\n\t * acruing to the miner.\n\t */\n\tprivate _minerValue = 0n\n\n\tprivate readonly vm: BaseVm\n\tprivate blockOpts: BuilderOpts\n\tprivate headerData: HeaderData\n\tprivate transactions: Array<TypedTransaction | ImpersonatedTx> = []\n\tprivate transactionResults: RunTxResult[] = []\n\tprivate withdrawals?: Withdrawal[] | undefined\n\tprivate checkpointed = false\n\tprivate blockStatus: BlockStatus = { status: BuildStatus.Pending }\n\n\tget transactionReceipts() {\n\t\treturn this.transactionResults.map((result) => result.receipt)\n\t}\n\n\tget minerValue() {\n\t\treturn this._minerValue\n\t}\n\n\tconstructor(vm: BaseVm, opts: BuildBlockOpts) {\n\t\tthis.vm = vm\n\t\tthis.blockOpts = {\n\t\t\tputBlockIntoBlockchain: true,\n\t\t\tcommon: this.vm.common,\n\t\t\tfreeze: false,\n\t\t\t...opts.blockOpts,\n\t\t}\n\n\t\tthis.headerData = {\n\t\t\t...opts.headerData,\n\t\t\tparentHash: opts.parentBlock.hash(),\n\t\t\tnumber: opts.headerData?.number ?? opts.parentBlock.header.number + 1n,\n\t\t\tgasLimit: opts.headerData?.gasLimit ?? opts.parentBlock.header.gasLimit,\n\t\t\ttimestamp: opts.headerData?.timestamp ?? BigInt(Math.round(Date.now() / 1000)),\n\t\t}\n\t\tthis.withdrawals = opts.withdrawals?.map((w) => (Withdrawal as any).fromWithdrawalData(w))\n\n\t\tif (\n\t\t\tthis.vm.common.ethjsCommon.isActivatedEIP(1559) === true &&\n\t\t\ttypeof this.headerData.baseFeePerGas === 'undefined'\n\t\t) {\n\t\t\tif (this.headerData.number === vm.common.ethjsCommon.hardforkBlock('london')) {\n\t\t\t\tthis.headerData.baseFeePerGas = BigInt(vm.common.ethjsCommon.param('initialBaseFee'))\n\t\t\t} else {\n\t\t\t\tthis.headerData.baseFeePerGas = opts.parentBlock.header.calcNextBaseFee()\n\t\t\t}\n\t\t}\n\n\t\tif (typeof this.headerData.gasLimit === 'undefined') {\n\t\t\tif (this.headerData.number === vm.common.ethjsCommon.hardforkBlock('london')) {\n\t\t\t\tthis.headerData.gasLimit = opts.parentBlock.header.gasLimit * 2n\n\t\t\t} else {\n\t\t\t\tthis.headerData.gasLimit = opts.parentBlock.header.gasLimit\n\t\t\t}\n\t\t}\n\n\t\tif (\n\t\t\tthis.vm.common.ethjsCommon.isActivatedEIP(4844) === true &&\n\t\t\ttypeof this.headerData.excessBlobGas === 'undefined'\n\t\t) {\n\t\t\tthis.headerData.excessBlobGas = opts.parentBlock.header.calcNextExcessBlobGas()\n\t\t}\n\t}\n\n\t/**\n\t * Throws if the block has already been built or reverted.\n\t */\n\tprivate checkStatus() {\n\t\tif (this.blockStatus.status === BuildStatus.Build) {\n\t\t\tthrow new InternalError('Block has already been built')\n\t\t}\n\t\tif (this.blockStatus.status === BuildStatus.Reverted) {\n\t\t\tthrow new InternalError('State has already been reverted')\n\t\t}\n\t}\n\n\tpublic getStatus(): BlockStatus {\n\t\treturn this.blockStatus\n\t}\n\n\t/**\n\t * Calculates and returns the transactionsTrie for the block.\n\t */\n\tpublic async transactionsTrie() {\n\t\treturn Block.genTransactionsTrieRoot(\n\t\t\tthis.transactions as TypedTransaction[],\n\t\t\tnew Trie({ common: this.vm.common.ethjsCommon }),\n\t\t)\n\t}\n\n\t/**\n\t * Calculates and returns the logs bloom for the block.\n\t */\n\tpublic logsBloom() {\n\t\tconst bloom = new Bloom(undefined, this.vm.common.ethjsCommon)\n\t\tfor (const txResult of this.transactionResults) {\n\t\t\t// Combine blooms via bitwise OR\n\t\t\tbloom.or(txResult.bloom)\n\t\t}\n\t\treturn bloom.bitvector\n\t}\n\n\t/**\n\t * Calculates and returns the receiptTrie for the block.\n\t */\n\tpublic async receiptTrie() {\n\t\tif (this.transactionResults.length === 0) {\n\t\t\treturn KECCAK256_RLP\n\t\t}\n\t\tconst receiptTrie = new Trie({ common: this.vm.common.ethjsCommon })\n\t\tfor (const [i, txResult] of this.transactionResults.entries()) {\n\t\t\tconst tx = this.transactions[i]\n\t\t\tif (!tx)\n\t\t\t\tthrow new InternalError(\n\t\t\t\t\t'expected tx to exist. This error should have been impossible and indicates a bug in tevm. Please open an issue',\n\t\t\t\t)\n\t\t\tconst encodedReceipt = encodeReceipt(txResult.receipt, tx.type)\n\t\t\tawait receiptTrie.put(Rlp.encode(i), encodedReceipt)\n\t\t}\n\t\treturn receiptTrie.root()\n\t}\n\n\t/**\n\t * Adds the block miner reward to the coinbase account.\n\t */\n\tprivate async rewardMiner() {\n\t\tconst minerReward = this.vm.common.ethjsCommon.param('minerReward')\n\t\tconst reward = calculateMinerReward(minerReward, 0)\n\t\tconst coinbase =\n\t\t\tthis.headerData.coinbase !== undefined\n\t\t\t\t? new EthjsAddress(\n\t\t\t\t\t\tthis.headerData.coinbase instanceof EthjsAddress\n\t\t\t\t\t\t\t? this.headerData.coinbase.toBytes()\n\t\t\t\t\t\t\t: typeof this.headerData.coinbase === 'string'\n\t\t\t\t\t\t\t\t? hexToBytes(this.headerData.coinbase as Hex)\n\t\t\t\t\t\t\t\t: this.headerData.coinbase,\n\t\t\t\t\t)\n\t\t\t\t: new EthjsAddress(new Uint8Array(20))\n\t\tawait rewardAccount(this.vm.evm, coinbase, reward)\n\t}\n\n\t/**\n\t * Adds the withdrawal amount to the withdrawal address\n\t */\n\tprivate async processWithdrawals() {\n\t\tfor (const withdrawal of this.withdrawals ?? []) {\n\t\t\tconst { address, amount } = withdrawal\n\t\t\t// If there is no amount to add, skip touching the account\n\t\t\t// as per the implementation of other clients geth/nethermind\n\t\t\t// although this should never happen as no withdrawals with 0\n\t\t\t// amount should ever land up here.\n\t\t\tif (amount === 0n) continue\n\t\t\t// Withdrawal amount is represented in Gwei so needs to be\n\t\t\t// converted to wei\n\t\t\tawait rewardAccount(this.vm.evm, address, parseGwei(amount.toString()))\n\t\t}\n\t}\n\n\t/**\n\t * Run and add a transaction to the block being built.\n\t * Please note that this modifies the state of the VM.\n\t * Throws if the transaction's gasLimit is greater than\n\t * the remaining gas in the block.\n\t */\n\tasync addTransaction(\n\t\ttx: TypedTransaction | ImpersonatedTx,\n\t\t{\n\t\t\tskipBalance,\n\t\t\tskipNonce,\n\t\t\tskipHardForkValidation,\n\t\t}: Pick<RunTxOpts, 'skipBalance' | 'skipNonce' | 'skipHardForkValidation'> = {},\n\t) {\n\t\tlet _tx = tx\n\t\tthis.checkStatus()\n\n\t\tif (!this.checkpointed) {\n\t\t\tawait this.vm.evm.journal.checkpoint()\n\t\t\tthis.checkpointed = true\n\t\t}\n\n\t\t// According to the Yellow Paper, a transaction's gas limit\n\t\t// cannot be greater than the remaining gas in the block\n\t\tconst gasLimit = this.headerData.gasLimit ?? 0n\n\t\tconst blockGasLimit = toType(gasLimit as any, TypeOutput.BigInt) ?? 0n\n\n\t\tconst blobGasLimit = this.vm.common.ethjsCommon.param('targetBlobGasPerBlock')\n\t\tconst blobGasPerBlob = this.vm.common.ethjsCommon.param('blobGasPerBlob')\n\n\t\tconst blockGasRemaining = blockGasLimit - this.gasUsed\n\t\tif (_tx.gasLimit > blockGasRemaining) {\n\t\t\tthrow new InvalidGasLimitError('tx has a higher gas limit than the remaining gas in the block')\n\t\t}\n\t\tlet blobGasUsed: bigint | undefined\n\t\tif (_tx instanceof BlobEIP4844Transaction) {\n\t\t\tif (this.blockOpts.common?.ethjsCommon.isActivatedEIP(4844) !== true) {\n\t\t\t\tthrow new EipNotEnabledError('eip4844 not activated yet for adding a blob transaction')\n\t\t\t}\n\t\t\tconst blobTx = _tx as BlobEIP4844Transaction\n\n\t\t\t// Guard against the case if a tx came into the pool without blobs i.e. network wrapper payload\n\t\t\tif (blobTx.blobs === undefined) {\n\t\t\t\tthrow new InvalidBlobVersionedHashesError('blobs missing for 4844 transaction')\n\t\t\t}\n\n\t\t\tif (this.blobGasUsed + BigInt(blobTx.numBlobs()) * blobGasPerBlob > blobGasLimit) {\n\t\t\t\tthrow new BlockGasLimitExceededError('block blob gas limit reached')\n\t\t\t}\n\n\t\t\tblobGasUsed = this.blobGasUsed\n\t\t}\n\t\tconst header = {\n\t\t\t...this.headerData,\n\t\t\tgasUsed: this.gasUsed,\n\t\t\t// correct excessBlobGas should already part of headerData used above\n\t\t\tblobGasUsed,\n\t\t}\n\n\t\tconst blockData = { header, transactions: this.transactions }\n\t\tconst block = Block.fromBlockData(blockData as any, this.blockOpts)\n\n\t\tconst result = await runTx(this.vm)({\n\t\t\ttx: _tx,\n\t\t\tblock,\n\t\t\tskipBalance,\n\t\t\tskipNonce,\n\t\t\tskipHardForkValidation,\n\t\t} as any)\n\n\t\t// If tx is a blob transaction, remove blobs/kzg commitments before adding to block per EIP-4844\n\t\tif (_tx instanceof BlobEIP4844Transaction) {\n\t\t\tconst txData = _tx as BlobEIP4844Transaction\n\t\t\tthis.blobGasUsed += BigInt(txData.blobVersionedHashes.length) * blobGasPerBlob\n\t\t\t_tx = (BlobEIP4844Transaction as any).minimalFromNetworkWrapper(txData, {\n\t\t\t\tcommon: (this.blockOpts.common as any).ethjsCommon,\n\t\t\t})\n\t\t}\n\t\tthis.transactions.push(_tx)\n\t\tthis.transactionResults.push(result)\n\t\tthis.gasUsed += result.totalGasSpent\n\t\tthis._minerValue += result.minerValue\n\n\t\treturn result\n\t}\n\n\t/**\n\t * Reverts the checkpoint on the StateManager to reset the state from any transactions that have been run.\n\t */\n\tasync revert() {\n\t\tif (this.checkpointed) {\n\t\t\tawait this.vm.evm.journal.revert()\n\t\t\tthis.checkpointed = false\n\t\t}\n\t\tthis.blockStatus = { status: BuildStatus.Reverted }\n\t}\n\n\t/**\n\t * This method returns the finalized block.\n\t * It also:\n\t *  - Assigns the reward for miner (PoW)\n\t *  - Commits the checkpoint on the StateManager\n\t *  - Sets the tip of the VM's blockchain to this block\n\t * For PoW, optionally seals the block with params `nonce` and `mixHash`,\n\t * which is validated along with the block number and difficulty by ethash.\n\t * For PoA, please pass `blockOption.cliqueSigner` into the buildBlock constructor,\n\t * as the signer will be awarded the txs amount spent on gas as they are added.\n\t */\n\tasync build(sealOpts?: SealBlockOpts) {\n\t\tthis.checkStatus()\n\t\tconst blockOpts = this.blockOpts\n\t\tconst consensusType = this.vm.common.ethjsCommon.consensusType()\n\n\t\tif (consensusType === ConsensusType.ProofOfWork) {\n\t\t\tawait this.rewardMiner()\n\t\t}\n\t\tawait this.processWithdrawals()\n\n\t\tconst stateRoot = await this.vm.stateManager.getStateRoot()\n\t\tconst transactionsTrie = await this.transactionsTrie()\n\t\tconst withdrawalsRoot = this.withdrawals\n\t\t\t? await Block.genWithdrawalsTrieRoot(this.withdrawals, new Trie({ common: this.vm.common.ethjsCommon }))\n\t\t\t: undefined\n\t\tconst receiptTrie = await this.receiptTrie()\n\t\tconst logsBloom = this.logsBloom()\n\t\tconst gasUsed = this.gasUsed\n\t\t// timestamp should already be set in constructor\n\t\tconst timestamp = this.headerData.timestamp ?? 0n\n\n\t\tlet blobGasUsed: bigint | undefined\n\t\tif (this.vm.common.ethjsCommon.isActivatedEIP(4844) === true) {\n\t\t\tblobGasUsed = this.blobGasUsed\n\t\t}\n\n\t\tconst headerData = {\n\t\t\t...this.headerData,\n\t\t\tstateRoot,\n\t\t\ttransactionsTrie,\n\t\t\t...(withdrawalsRoot !== undefined ? { withdrawalsRoot } : {}),\n\t\t\t...(blobGasUsed !== undefined ? { blobGasUsed } : {}),\n\t\t\treceiptTrie,\n\t\t\tlogsBloom,\n\t\t\tgasUsed,\n\t\t\ttimestamp,\n\t\t\t// correct excessBlobGas should already be part of headerData used above\n\t\t}\n\n\t\tif (consensusType === ConsensusType.ProofOfWork) {\n\t\t\theaderData.nonce = sealOpts?.nonce ?? (headerData.nonce as Uint8Array)\n\t\t\theaderData.mixHash = sealOpts?.mixHash ?? (headerData.mixHash as Uint8Array)\n\t\t}\n\n\t\tconst blockData = {\n\t\t\theader: headerData,\n\t\t\ttransactions: this.transactions,\n\t\t\twithdrawals: this.withdrawals ?? [],\n\t\t}\n\t\tconst block = Block.fromBlockData(blockData, blockOpts)\n\n\t\tif (this.blockOpts.putBlockIntoBlockchain === true) {\n\t\t\tawait this.vm.blockchain.putBlock(block)\n\t\t}\n\n\t\tthis.blockStatus = { status: BuildStatus.Build, block }\n\t\tif (this.checkpointed) {\n\t\t\tawait this.vm.evm.journal.commit()\n\t\t\tthis.checkpointed = false\n\t\t}\n\n\t\treturn block\n\t}\n\n\tasync initState() {\n\t\tif (this.vm.common.ethjsCommon.isActivatedEIP(4788)) {\n\t\t\tif (!this.checkpointed) {\n\t\t\t\tawait this.vm.evm.journal.checkpoint()\n\t\t\t\tthis.checkpointed = true\n\t\t\t}\n\n\t\t\tconst { parentBeaconBlockRoot, timestamp } = this.headerData\n\t\t\t// timestamp should already be set in constructor\n\t\t\tconst timestampValue = timestamp ?? 0n\n\t\t\tconst timestampBigInt = toType(timestampValue as any, TypeOutput.BigInt) ?? 0n\n\t\t\tconst parentBeaconBlockRootBuf = parentBeaconBlockRoot\n\t\t\t\t? toType(parentBeaconBlockRoot as any, TypeOutput.Uint8Array)\n\t\t\t\t: new Uint8Array(32)\n\n\t\t\tawait accumulateParentBeaconBlockRoot(this.vm)(\n\t\t\t\tparentBeaconBlockRootBuf as Uint8Array<ArrayBuffer>,\n\t\t\t\ttimestampBigInt,\n\t\t\t)\n\t\t}\n\t\tif ((this.vm.common as any).ethjsCommon.isActivatedEIP(2935)) {\n\t\t\tif (!this.checkpointed) {\n\t\t\t\tawait this.vm.evm.journal.checkpoint()\n\t\t\t\tthis.checkpointed = true\n\t\t\t}\n\n\t\t\tconst { parentHash, number } = this.headerData\n\t\t\t// timestamp should already be set in constructor\n\t\t\tconst numberValue = number ?? 0n\n\t\t\tconst numberBigInt = toType(numberValue as any, TypeOutput.BigInt) ?? 0n\n\t\t\tconst parentHashSanitized = parentHash ? toType(parentHash as any, TypeOutput.Uint8Array) : new Uint8Array(32)\n\n\t\t\tawait accumulateParentBlockHash(this.vm)(numberBigInt, parentHashSanitized as Uint8Array<ArrayBuffer>)\n\t\t}\n\t}\n}\n","import type { BaseVm } from '../BaseVm.js'\nimport type { BuildBlockOpts } from '../utils/index.js'\nimport { BlockBuilder } from './BlockBuilder.js'\n\nexport type BuildBlock = (opts: BuildBlockOpts) => Promise<BlockBuilder>\n\nexport const buildBlock =\n\t(vm: BaseVm): BuildBlock =>\n\tasync (opts) => {\n\t\tawait vm.ready()\n\t\tconst blockBuilder = new BlockBuilder(vm, opts)\n\t\tawait blockBuilder.initState()\n\t\treturn blockBuilder\n\t}\n","import { EventEmitter } from 'eventemitter3'\n\n/**\n * @param {import('./VmOpts.js').VmOpts} opts\n * @returns {import('./BaseVm.js').BaseVm}\n */\nexport const createBaseVm = (opts) => {\n\t/**\n\t * @type {import('./BaseVm.js').BaseVm['events']}\n\t */\n\tconst events = new EventEmitter()\n\treturn {\n\t\tstateManager: opts.stateManager,\n\t\tevm: opts.evm,\n\t\tblockchain: opts.blockchain,\n\t\tcommon: opts.common,\n\t\tevents,\n\t\t_emit: async (topic, data) => {\n\t\t\ttry {\n\t\t\t\treturn new Promise((resolve, reject) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst hasListeners = events.emit(topic, data, resolve)\n\t\t\t\t\t\tif (!hasListeners) {\n\t\t\t\t\t\t\t// No listeners for this event, just resolve immediately\n\t\t\t\t\t\t\tresolve()\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treject(e)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(e)\n\t\t\t}\n\t\t},\n\t\tready: async () => {\n\t\t\tawait Promise.all([opts.blockchain.ready(), opts.stateManager.ready()])\n\t\t\treturn true\n\t\t},\n\t}\n}\n","import { MisconfiguredClientError } from '@tevm/errors'\nimport { createEvm } from '@tevm/evm'\nimport { createBaseVm } from '../createBaseVm.js'\n\n// TODO CreateEvmError\n// TODO CreateBaseVmError\n/**\n * @typedef {MisconfiguredClientError} DeepCopyError\n */\n\n/**\n * @typedef {() => Promise<import('../BaseVm.js').BaseVm>} DeepCopy\n */\n\n/**\n * @param {import('../BaseVm.js').BaseVm} baseVm\n * @returns {DeepCopy}\n * @throws {DeepCopyError}\n */\nexport const deepCopy = (baseVm) => async () => {\n\tawait baseVm.ready()\n\tconst common = baseVm.common.copy()\n\tcommon.ethjsCommon.setHardfork(baseVm.common.ethjsCommon.hardfork())\n\tconst blockchain = await baseVm.blockchain.deepCopy()\n\tif (!('deepCopy' in baseVm.stateManager)) {\n\t\tthrow new MisconfiguredClientError('StateManager does not support deepCopy. Was a Tevm state manager used?')\n\t}\n\tconst stateManager = await baseVm.stateManager.deepCopy()\n\tconst evmCopy = await createEvm({\n\t\tblockchain,\n\t\tcommon,\n\t\tstateManager,\n\t\tallowUnlimitedContractSize: baseVm.evm.allowUnlimitedContractSize ?? false,\n\t\tcustomPrecompiles: /** @type {any} */ (baseVm.evm)._customPrecompiles,\n\t\t// customPredeploys isn't needed because it will be copied along in stateManager.deepCopy\n\t\t// customPredeploys,\n\t\tprofiler: Boolean(/** @type {any} */ (baseVm.evm).optsCached?.profiler?.enabled) ?? false,\n\t})\n\t// we are hacking ethereumjs logger into working with our logger\n\tconst evmAny = /** @type {any}*/ (evmCopy)\n\tevmAny.DEBUG = baseVm.evm.DEBUG\n\tevmAny._debug = /** @type any*/ (baseVm.evm)._debug\n\treturn createBaseVm({\n\t\tstateManager,\n\t\tblockchain,\n\t\tactivatePrecompiles: true,\n\t\tcommon,\n\t\tevm: evmCopy,\n\t})\n}\n","import { Block } from '@tevm/block'\nimport { Rlp } from '@tevm/rlp'\nimport { Trie } from '@tevm/trie'\nimport { KECCAK256_RLP } from '@tevm/utils'\n\n/**\n * Generate the transaction trie for a block.\n * This is an intermediate step for computing the block header's\n * transaction root.\n * @param block - The block to generate the transaction trie for\n * @returns The transaction trie root\n */\nexport async function genTxTrie(block: Block) {\n\tif (block.transactions.length === 0) {\n\t\treturn KECCAK256_RLP\n\t}\n\tconst trie = new Trie({ common: block.common.ethjsCommon })\n\tfor (let i = 0; i < block.transactions.length; i++) {\n\t\tconst tx = block.transactions[i]\n\t\tif (tx) {\n\t\t\tawait trie.put(Rlp.encode(i), tx.serialize())\n\t\t}\n\t}\n\treturn trie.root()\n}\n","import { Block } from '@tevm/block'\nimport { InternalError } from '@tevm/errors'\nimport { bytesToHex, equalsBytes } from '@tevm/utils'\nimport type { BaseVm } from '../BaseVm.js'\nimport type { AfterBlockEvent, ApplyBlockResult, RunBlockOpts, RunBlockResult } from '../utils/index.js'\nimport { applyBlock } from './applyBlock.js'\nimport { applyDAOHardfork } from './applyDAOHardfork.js'\nimport { errorMsg } from './errorMsg.js'\nimport { genTxTrie } from './genTxTrie.js'\n\nexport type RunBlock = (opts: RunBlockOpts) => Promise<RunBlockResult>\n\n/**\n * @ignore\n */\nexport const runBlock =\n\t(vm: BaseVm): RunBlock =>\n\tasync (opts) => {\n\t\tawait vm.ready()\n\t\tconst state = vm.stateManager\n\n\t\tconst { root } = opts\n\t\tconst clearCache = opts.clearCache ?? true\n\t\tlet { block } = opts\n\t\tconst generateFields = opts.generate === true\n\n\t\t/**\n\t\t * The `beforeBlock` event.\n\t\t *\n\t\t * @event Event: beforeBlock\n\t\t * @type {Object}\n\t\t * @property {Block} block emits the block that is about to be processed\n\t\t */\n\t\tawait vm._emit('beforeBlock', block)\n\n\t\t// Set state root if provided\n\t\tif (root) {\n\t\t\tawait state.setStateRoot(root, clearCache)\n\t\t}\n\n\t\t// check for DAO support and if we should apply the DAO fork\n\t\tif (\n\t\t\tvm.common.ethjsCommon.hardforkIsActiveOnBlock('dao', block.header.number) === true &&\n\t\t\tblock.header.number === vm.common.ethjsCommon.hardforkBlock('dao')\n\t\t) {\n\t\t\tawait vm.evm.journal.checkpoint()\n\t\t\tawait applyDAOHardfork(vm.evm)\n\t\t\tawait vm.evm.journal.commit()\n\t\t}\n\n\t\t// Checkpoint state\n\t\tawait vm.evm.journal.checkpoint()\n\n\t\tlet result: ApplyBlockResult\n\n\t\ttry {\n\t\t\tresult = await applyBlock(vm)(block, opts)\n\t\t} catch (err: any) {\n\t\t\tawait vm.evm.journal.revert()\n\t\t\tthrow err\n\t\t}\n\n\t\t// Persist state\n\t\tawait vm.evm.journal.commit()\n\n\t\tawait state.setStateRoot(block.header.stateRoot)\n\n\t\tconst stateRoot = await state.getStateRoot()\n\n\t\t// Given the generate option, either set resulting header\n\t\t// values to the current block, or validate the resulting\n\t\t// header values against the current block.\n\t\tif (generateFields) {\n\t\t\tconst bloom = result.bloom.bitvector\n\t\t\tconst gasUsed = result.gasUsed\n\t\t\tconst receiptTrie = result.receiptsRoot\n\t\t\tconst transactionsTrie = await genTxTrie(block)\n\t\t\tconst generatedFields = { stateRoot, bloom, gasUsed, receiptTrie, transactionsTrie }\n\t\t\tconst blockData = {\n\t\t\t\t...block,\n\t\t\t\theader: { ...block.header, ...generatedFields },\n\t\t\t}\n\t\t\t// TODO remove as any just being lazy here this error is from tevm stricter ts config compared to ethereumjs\n\t\t\tblock = Block.fromBlockData(blockData as any, { common: vm.common })\n\t\t} else if (vm.common.ethjsCommon.isActivatedEIP(6800) === false) {\n\t\t\t// Only validate the following headers if verkle blocks aren't activated\n\t\t\tif (equalsBytes(result.receiptsRoot, block.header.receiptTrie) === false) {\n\t\t\t\tconst msg = errorMsg('invalid receiptTrie', vm, block)\n\t\t\t\tthrow new InternalError(msg)\n\t\t\t}\n\t\t\tif (!(equalsBytes(result.bloom.bitvector, block.header.logsBloom) === true)) {\n\t\t\t\tconst msg = errorMsg('invalid bloom', vm, block)\n\t\t\t\tthrow new InternalError(msg)\n\t\t\t}\n\t\t\tif (result.gasUsed !== block.header.gasUsed) {\n\t\t\t\tconst msg = errorMsg('invalid gasUsed', vm, block)\n\t\t\t\tthrow new InternalError(msg)\n\t\t\t}\n\t\t\tif (!(equalsBytes(stateRoot, block.header.stateRoot) === true)) {\n\t\t\t\tconst msg = errorMsg(\n\t\t\t\t\t`invalid block stateRoot, got: ${bytesToHex(stateRoot)}, want: ${bytesToHex(block.header.stateRoot)}`,\n\t\t\t\t\tvm,\n\t\t\t\t\tblock,\n\t\t\t\t)\n\t\t\t\tthrow new InternalError(msg)\n\t\t\t}\n\t\t}\n\n\t\tconst results: RunBlockResult = {\n\t\t\treceipts: result.receipts,\n\t\t\tlogsBloom: result.bloom.bitvector,\n\t\t\tresults: result.results,\n\t\t\tstateRoot,\n\t\t\tgasUsed: result.gasUsed,\n\t\t\treceiptsRoot: result.receiptsRoot,\n\t\t\t...(result.preimages !== undefined ? { preimages: result.preimages } : {}),\n\t\t}\n\n\t\tconst afterBlockEvent: AfterBlockEvent = { ...results, block }\n\n\t\t/**\n\t\t * The `afterBlock` event\n\t\t *\n\t\t * @event Event: afterBlock\n\t\t * @type {AfterBlockEvent}\n\t\t * @property {AfterBlockEvent} result emits the results of processing a block\n\t\t */\n\t\tawait vm._emit('afterBlock', afterBlockEvent)\n\t\treturn results\n\t}\n","import { buildBlock } from './actions/buildBlock.js'\nimport { deepCopy } from './actions/deepCopy.js'\nimport { runBlock } from './actions/runBlock.js'\nimport { runTx } from './actions/runTx.js'\nimport { createBaseVm } from './createBaseVm.js'\n\n/**\n * @param {import(\"./VmOpts.js\").VmOpts} opts\n * @returns {import(\"./Vm.js\").Vm}\n */\nexport const createVm = (opts) => {\n\tconst baseVm = createBaseVm(opts)\n\t/**\n\t * @param {import(\"./BaseVm.js\").BaseVm} baseVm\n\t */\n\tconst decorate = (baseVm) => {\n\t\treturn Object.assign(baseVm, {\n\t\t\tdeepCopy: () => deepCopy(baseVm)().then((baseVm) => decorate(baseVm)),\n\t\t\tbuildBlock: buildBlock(baseVm),\n\t\t\trunBlock: runBlock(baseVm),\n\t\t\trunTx: runTx(baseVm),\n\t\t})\n\t}\n\treturn decorate(baseVm)\n}\n"]}