{"version":3,"sources":["../src/ClRequest.ts","../src/from-beacon-payload.ts","../src/clique.ts","../src/utils.ts","../src/helpers.ts","../src/header.ts","../src/block.ts","../src/header-from-rpc.ts","../src/from-rpc.ts","../src/index.ts"],"names":["InternalError","concatBytes","numberToHex","EthjsAddress","keccak256","toBytes","originalToType","isHex","Rlp","equalsBytes","tevmDefault","KECCAK256_RLP_ARRAY","KECCAK256_RLP","ConsensusAlgorithm","ConsensusType","bytesToHex","start","bytesToBigInt","ecrecover","hexToBytes","bytesToUtf8","trie","Trie","createWithdrawal","createTxFromBlockBodyData","tx","createTxFromRLP","Capability","BlobEIP4844Transaction","toType","TypeOutput","setLengthLeft","TransactionFactory","MisconfiguredClientError"],"mappings":"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","file":"index.cjs","sourcesContent":["import { InternalError } from '@tevm/errors'\n// Unreleased as of this commit https://github.com/ethereumjs/ethereumjs-monorepo/blob/36cd6069815015f4c0202a3335f755b06a5608e8/packages/util/src/requests.ts#L16\nimport { concatBytes } from '@tevm/utils'\n\n/**\n * Raw bytes representation of a consensus layer request.\n * Used for serializing and deserializing consensus layer requests.\n * @example\n * ```typescript\n * import { RequestBytes } from '@tevm/block'\n *\n * const value: RequestBytes = new Uint8Array([0x01, 0x02, 0x03])\n * ```\n */\nexport type RequestBytes = Uint8Array\n\n/**\n * Structured data for a consensus layer request.\n * Contains the request type and associated binary data.\n * @example\n * ```typescript\n * import { RequestData } from '@tevm/block'\n *\n * const value: RequestData = {\n *   type: 1, // Request type identifier\n *   data: new Uint8Array([0x01, 0x02, 0x03]) // Request payload\n * }\n * ```\n */\nexport interface RequestData {\n\ttype: number\n\tdata: Uint8Array\n}\n\n/**\n * Interface for consensus layer request types.\n * Defines the common structure for different types of consensus layer requests.\n * @example\n * ```typescript\n * import { CLRequestType } from '@tevm/block'\n *\n * // Usually implemented by specific request classes\n * const value: CLRequestType = {\n *   type: 1,\n *   bytes: new Uint8Array([0x01, 0x02, 0x03]),\n *   serialize: () => new Uint8Array([0x01, 0x01, 0x02, 0x03])\n * }\n * ```\n */\nexport interface CLRequestType {\n\treadonly type: number\n\treadonly bytes: Uint8Array\n\tserialize(): Uint8Array\n}\n\n/**\n * Base implementation of a consensus layer request.\n * Used to create and serialize requests between the execution and consensus layers.\n * @example\n * ```typescript\n * import { ClRequest } from '@tevm/block'\n *\n * // Create a request with type 1 and some payload data\n * const instance = new ClRequest(1, new Uint8Array([0x01, 0x02, 0x03]))\n * const serialized = instance.serialize() // Type byte followed by payload\n * ```\n */\nexport class ClRequest implements CLRequestType {\n\ttype: number\n\tbytes: Uint8Array\n\tconstructor(type: number, bytes: Uint8Array) {\n\t\tif (type === undefined) throw new InternalError('request type is required')\n\t\tthis.type = type\n\t\tthis.bytes = bytes\n\t}\n\n\tserialize() {\n\t\treturn concatBytes(Uint8Array.from([this.type]), this.bytes)\n\t}\n}\n","import { type Hex, numberToHex } from '@tevm/utils'\nimport type { ExecutionPayload, VerkleExecutionWitness } from './types.js'\n\ntype BeaconWithdrawal = {\n\tindex: Hex\n\tvalidator_index: Hex\n\taddress: Hex\n\tamount: Hex\n}\n\n// Payload json that one gets using the beacon apis\n// curl localhost:5052/eth/v2/beacon/blocks/56610 | jq .data.message.body.execution_payload\n/**\n * Represents the JSON structure of an execution payload from the Beacon API\n *\n * This type uses snake_case property names as returned by the Beacon API,\n * as opposed to the camelCase used internally in Tevm. Used when fetching\n * execution payloads from a consensus layer client.\n *\n * @see https://ethereum.github.io/beacon-APIs/ for the Beacon API specification\n *\n * @example\n * ```typescript\n * import { BeaconPayloadJson, executionPayloadFromBeaconPayload } from '@tevm/block'\n *\n * // Fetch the payload from a Beacon API\n * async function getExecutionPayload(blockNumber: number) {\n *   const response = await fetch(\n *     `http://localhost:5052/eth/v2/beacon/blocks/${blockNumber}`\n *   )\n *   const data = await response.json()\n *\n *   // Extract and parse the execution payload\n *   const beaconPayload: BeaconPayloadJson = data.data.message.body.execution_payload\n *\n *   // Convert to Tevm's internal ExecutionPayload format\n *   return executionPayloadFromBeaconPayload(beaconPayload)\n * }\n * ```\n */\nexport type BeaconPayloadJson = {\n\tparent_hash: Hex\n\tfee_recipient: Hex\n\tstate_root: Hex\n\treceipts_root: Hex\n\tlogs_bloom: Hex\n\tprev_randao: Hex\n\tblock_number: Hex\n\tgas_limit: Hex\n\tgas_used: Hex\n\ttimestamp: Hex\n\textra_data: Hex\n\tbase_fee_per_gas: Hex\n\tblock_hash: Hex\n\ttransactions: Hex[]\n\twithdrawals?: BeaconWithdrawal[]\n\tblob_gas_used?: Hex\n\texcess_blob_gas?: Hex\n\tparent_beacon_block_root?: Hex\n\t// the casing of VerkleExecutionWitness remains same camel case for now\n\texecution_witness?: VerkleExecutionWitness\n}\n\ntype VerkleProofSnakeJson = {\n\tcommitments_by_path: Hex[]\n\td: Hex\n\tdepth_extension_present: Hex\n\tipa_proof: {\n\t\tcl: Hex[]\n\t\tcr: Hex[]\n\t\tfinal_evaluation: Hex\n\t}\n\tother_stems: Hex[]\n}\n\ntype VerkleStateDiffSnakeJson = {\n\tstem: Hex\n\tsuffix_diffs: {\n\t\tcurrent_value: Hex | null\n\t\tnew_value: Hex | null\n\t\tsuffix: number | string\n\t}[]\n}\n\ntype VerkleExecutionWitnessSnakeJson = {\n\tstate_diff: VerkleStateDiffSnakeJson[]\n\tverkle_proof: VerkleProofSnakeJson\n}\n\nfunction parseExecutionWitnessFromSnakeJson({\n\tstate_diff,\n\tverkle_proof,\n}: VerkleExecutionWitnessSnakeJson): VerkleExecutionWitness {\n\treturn {\n\t\tstateDiff: state_diff.map(({ stem, suffix_diffs }) => ({\n\t\t\tstem,\n\t\t\tsuffixDiffs: suffix_diffs.map(({ current_value, new_value, suffix }) => ({\n\t\t\t\tcurrentValue: current_value,\n\t\t\t\tnewValue: new_value,\n\t\t\t\tsuffix,\n\t\t\t})),\n\t\t})),\n\t\tverkleProof: {\n\t\t\tcommitmentsByPath: verkle_proof.commitments_by_path,\n\t\t\td: verkle_proof.d,\n\t\t\tdepthExtensionPresent: verkle_proof.depth_extension_present,\n\t\t\tipaProof: {\n\t\t\t\tcl: verkle_proof.ipa_proof.cl,\n\t\t\t\tcr: verkle_proof.ipa_proof.cr,\n\t\t\t\tfinalEvaluation: verkle_proof.ipa_proof.final_evaluation,\n\t\t\t},\n\t\t\totherStems: verkle_proof.other_stems,\n\t\t},\n\t}\n}\n\n/**\n * Converts a beacon block execution payload JSON object {@link BeaconPayloadJson} to the {@link ExecutionPayload} data needed to construct a {@link Block}.\n * The JSON data can be retrieved from a consensus layer (CL) client on this Beacon API `/eth/v2/beacon/blocks/[block number]`\n */\nexport function executionPayloadFromBeaconPayload(payload: BeaconPayloadJson): ExecutionPayload {\n\tconst executionPayload: ExecutionPayload = {\n\t\tparentHash: payload.parent_hash,\n\t\tfeeRecipient: payload.fee_recipient,\n\t\tstateRoot: payload.state_root,\n\t\treceiptsRoot: payload.receipts_root,\n\t\tlogsBloom: payload.logs_bloom,\n\t\tprevRandao: payload.prev_randao,\n\t\tblockNumber: numberToHex(BigInt(payload.block_number)),\n\t\tgasLimit: numberToHex(BigInt(payload.gas_limit)),\n\t\tgasUsed: numberToHex(BigInt(payload.gas_used)),\n\t\ttimestamp: numberToHex(BigInt(payload.timestamp)),\n\t\textraData: payload.extra_data,\n\t\tbaseFeePerGas: numberToHex(BigInt(payload.base_fee_per_gas)),\n\t\tblockHash: payload.block_hash,\n\t\ttransactions: payload.transactions,\n\t}\n\n\tif (payload.withdrawals !== undefined && payload.withdrawals !== null) {\n\t\texecutionPayload.withdrawals = payload.withdrawals.map((wd) => ({\n\t\t\tindex: numberToHex(BigInt(wd.index)),\n\t\t\tvalidatorIndex: numberToHex(BigInt(wd.validator_index)),\n\t\t\taddress: wd.address,\n\t\t\tamount: numberToHex(BigInt(wd.amount)),\n\t\t}))\n\t}\n\n\tif (payload.blob_gas_used !== undefined && payload.blob_gas_used !== null) {\n\t\texecutionPayload.blobGasUsed = numberToHex(BigInt(payload.blob_gas_used))\n\t}\n\tif (payload.excess_blob_gas !== undefined && payload.excess_blob_gas !== null) {\n\t\texecutionPayload.excessBlobGas = numberToHex(BigInt(payload.excess_blob_gas))\n\t}\n\tif (payload.parent_beacon_block_root !== undefined && payload.parent_beacon_block_root !== null) {\n\t\texecutionPayload.parentBeaconBlockRoot = payload.parent_beacon_block_root\n\t}\n\tif (payload.execution_witness !== undefined && payload.execution_witness !== null) {\n\t\t// the casing structure in payload could be camel case or snake depending upon the CL\n\t\texecutionPayload.executionWitness =\n\t\t\tpayload.execution_witness.verkleProof !== undefined\n\t\t\t\t? payload.execution_witness\n\t\t\t\t: parseExecutionWitnessFromSnakeJson(payload.execution_witness as unknown as VerkleExecutionWitnessSnakeJson)\n\t}\n\n\treturn executionPayload\n}\n","// Fixed number of extra-data prefix bytes reserved for signer vanity\n/**\n * The fixed number of bytes reserved for the vanity data in Clique consensus extra data\n * In the Clique consensus algorithm, the extraData field of block headers contains:\n * - First CLIQUE_EXTRA_VANITY (32) bytes: vanity data (can be anything)\n * - Followed by signer addresses\n * - Last CLIQUE_EXTRA_SEAL (65) bytes: the signer's signature\n *\n * @example\n * ```typescript\n * import { CLIQUE_EXTRA_VANITY } from '@tevm/block'\n *\n * // Extract vanity data from extraData\n * const vanityData = extraData.slice(0, CLIQUE_EXTRA_VANITY)\n * ```\n */\nexport const CLIQUE_EXTRA_VANITY = 32\n// Fixed number of extra-data suffix bytes reserved for signer seal\n/**\n * The fixed number of bytes reserved for the signer's signature in Clique consensus extra data\n * In the Clique consensus algorithm, the extraData field of block headers contains:\n * - First CLIQUE_EXTRA_VANITY (32) bytes: vanity data\n * - Followed by signer addresses\n * - Last CLIQUE_EXTRA_SEAL (65) bytes: the signer's signature (secp256k1 signature)\n *\n * @example\n * ```typescript\n * import { CLIQUE_EXTRA_SEAL, CLIQUE_EXTRA_VANITY } from '@tevm/block'\n *\n * // Extract the signature from extraData\n * const signature = extraData.slice(extraData.length - CLIQUE_EXTRA_SEAL)\n *\n * // Extract the list of signers from extraData (between vanity and seal)\n * const signersData = extraData.slice(CLIQUE_EXTRA_VANITY, extraData.length - CLIQUE_EXTRA_SEAL)\n * ```\n */\nexport const CLIQUE_EXTRA_SEAL = 65\n","import { EthjsAddress, keccak256, toType as originalToType, toBytes } from '@tevm/utils'\n\n/**\n * Creates a zero-filled buffer of the specified length\n * @param {number} length - The length of the buffer\n * @returns {Uint8Array} A zero-filled Uint8Array\n */\nexport function zeros(length: number): Uint8Array {\n\treturn new Uint8Array(length)\n}\n\n/**\n * Creates the zero address\n * @returns {EthjsAddress} The zero address\n */\nexport function createZeroAddress() {\n\treturn new EthjsAddress(new Uint8Array(20))\n}\n\n/**\n * Creates an address from a public key\n * @param {Uint8Array} publicKey - The public key\n * @returns {EthjsAddress} The address\n */\nexport function createAddressFromPublicKey(publicKey: Uint8Array): EthjsAddress {\n\t// Create address from public key by taking the last 20 bytes of keccak256 hash\n\tconst addressBytes = keccak256(publicKey, 'bytes').slice(-20)\n\treturn new EthjsAddress(addressBytes)\n}\n\n/**\n * Wrapper for toType that handles string inputs properly\n * @param {any} input - The input value\n * @param {number} outputType - The output type\n * @returns {any} The converted value\n */\nexport function safeToType(input: any, outputType: number): any {\n\tif (input === null || input === undefined) {\n\t\treturn undefined\n\t}\n\n\t// Handle string inputs by converting to bytes first\n\tif (typeof input === 'string' && outputType === 2) {\n\t\tconst bytes = toBytes(input)\n\t\treturn originalToType(bytes, outputType as any)\n\t}\n\n\treturn originalToType(input, outputType as any)\n}\n\n/**\n * Gets the v value from a signature\n * @param {any} signature - The signature object\n * @returns {bigint} The v value\n */\nexport function getSignatureV(signature: any): bigint {\n\t// Handle both old format (v) and new format (recovery)\n\tif (signature.v !== undefined) {\n\t\treturn BigInt(signature.v)\n\t}\n\tif (signature.recovery !== undefined) {\n\t\treturn BigInt(signature.recovery) + 27n\n\t}\n\tthrow new Error('Invalid signature format: missing v or recovery')\n}\n","import type { TypedTransaction } from '@tevm/tx'\nimport { BlobEIP4844Transaction } from '@tevm/tx'\nimport { type Hex, isHex } from '@tevm/utils'\nimport type { BlockHeaderBytes, HeaderData } from './types.js'\nimport { safeToType } from './utils.js'\n\n/**\n * Returns a 0x-prefixed hex number string from a hex string or string integer.\n * @param {string} input string to check, convert, and return\n */\nexport const numberToHex = (input?: string): Hex | undefined => {\n\tif (input === undefined) return undefined\n\tif (!isHex(input)) {\n\t\tconst regex = new RegExp(/^\\d+$/) // test to make sure input contains only digits\n\t\tif (!regex.test(input)) {\n\t\t\tconst msg = `Cannot convert string to hex string. numberToHex only supports 0x-prefixed hex or integer strings but the given string was: ${input}`\n\t\t\tthrow new Error(msg)\n\t\t}\n\t\treturn `0x${Number.parseInt(input, 10).toString(16)}`\n\t}\n\treturn input\n}\n\n/**\n * Converts a BlockHeaderBytes array to a HeaderData object\n * @param {BlockHeaderBytes} values - Array of raw header bytes containing block header fields\n * @returns {HeaderData} The converted header data object with named properties\n * @example\n * ```typescript\n * import { valuesArrayToHeaderData } from '@tevm/block'\n *\n * // Convert raw header bytes to a structured HeaderData object\n * const headerData = valuesArrayToHeaderData(blockHeaderBytes)\n * console.log(headerData.parentHash, headerData.stateRoot)\n * ```\n */\nexport function valuesArrayToHeaderData(values: BlockHeaderBytes): HeaderData {\n\tconst [\n\t\tparentHash,\n\t\tuncleHash,\n\t\tcoinbase,\n\t\tstateRoot,\n\t\ttransactionsTrie,\n\t\treceiptTrie,\n\t\tlogsBloom,\n\t\tdifficulty,\n\t\tnumber,\n\t\tgasLimit,\n\t\tgasUsed,\n\t\ttimestamp,\n\t\textraData,\n\t\tmixHash,\n\t\tnonce,\n\t\tbaseFeePerGas,\n\t\twithdrawalsRoot,\n\t\tblobGasUsed,\n\t\texcessBlobGas,\n\t\tparentBeaconBlockRoot,\n\t\trequestsRoot,\n\t] = values\n\n\tif (values.length > 21) {\n\t\tthrow new Error(`invalid header. More values than expected were received. Max: 20, got: ${values.length}`)\n\t}\n\tif (values.length < 15) {\n\t\tthrow new Error(`invalid header. Less values than expected were received. Min: 15, got: ${values.length}`)\n\t}\n\n\treturn {\n\t\t...(parentHash !== undefined ? { parentHash } : {}),\n\t\t...(uncleHash !== undefined ? { uncleHash } : {}),\n\t\t...(coinbase !== undefined ? { coinbase } : {}),\n\t\t...(stateRoot !== undefined ? { stateRoot } : {}),\n\t\t...(transactionsTrie !== undefined ? { transactionsTrie } : {}),\n\t\t...(receiptTrie !== undefined ? { receiptTrie } : {}),\n\t\t...(logsBloom !== undefined ? { logsBloom } : {}),\n\t\t...(difficulty !== undefined ? { difficulty } : {}),\n\t\t...(number !== undefined ? { number } : {}),\n\t\t...(gasLimit !== undefined ? { gasLimit } : {}),\n\t\t...(gasUsed !== undefined ? { gasUsed } : {}),\n\t\t...(timestamp !== undefined ? { timestamp } : {}),\n\t\t...(extraData !== undefined ? { extraData } : {}),\n\t\t...(mixHash !== undefined ? { mixHash } : {}),\n\t\t...(nonce !== undefined ? { nonce } : {}),\n\t\t...(baseFeePerGas !== undefined ? { baseFeePerGas } : {}),\n\t\t...(withdrawalsRoot !== undefined ? { withdrawalsRoot } : {}),\n\t\t...(blobGasUsed !== undefined ? { blobGasUsed } : {}),\n\t\t...(excessBlobGas !== undefined ? { excessBlobGas } : {}),\n\t\t...(parentBeaconBlockRoot !== undefined ? { parentBeaconBlockRoot } : {}),\n\t\t...(requestsRoot !== undefined ? { requestsRoot } : {}),\n\t}\n}\n\n/**\n * Extracts the difficulty value from block header data\n * @param {HeaderData} headerData - The header data object to extract difficulty from\n * @returns {bigint | null} The difficulty as a bigint, or null if not present\n * @example\n * ```typescript\n * import { getDifficulty } from '@tevm/block'\n *\n * // Get the difficulty from a block header\n * const difficulty = getDifficulty(blockHeader)\n * if (difficulty !== null) {\n *   console.log(`Block difficulty: ${difficulty}`)\n * }\n * ```\n */\nexport function getDifficulty(headerData: HeaderData): bigint | null {\n\tconst { difficulty } = headerData\n\tif (difficulty !== undefined) {\n\t\treturn safeToType(difficulty, 1)\n\t}\n\treturn null\n}\n\n/**\n * Counts the total number of blobs in a list of transactions\n * Only EIP-4844 blob transactions contribute to this count\n * @param {TypedTransaction[]} transactions - Array of transactions to analyze\n * @returns {number} The total count of blobs across all blob transactions\n * @example\n * ```typescript\n * import { getNumBlobs } from '@tevm/block'\n *\n * // Count blobs in a block's transactions\n * const blobCount = getNumBlobs(block.transactions)\n * console.log(`Block contains ${blobCount} blobs`)\n * ```\n */\nexport const getNumBlobs = (transactions: TypedTransaction[]) => {\n\tlet numBlobs = 0\n\tfor (const tx of transactions) {\n\t\tif (tx instanceof BlobEIP4844Transaction) {\n\t\t\tnumBlobs += tx.blobVersionedHashes.length\n\t\t}\n\t}\n\treturn numBlobs\n}\n\n/**\n * Approximates `factor * e ** (numerator / denominator)` using Taylor expansion\n */\nexport const fakeExponential = (factor: bigint, numerator: bigint, denominator: bigint) => {\n\tlet i = BigInt(1)\n\tlet output = BigInt(0)\n\tlet numerator_accum = factor * denominator\n\twhile (numerator_accum > BigInt(0)) {\n\t\toutput += numerator_accum\n\t\tnumerator_accum = (numerator_accum * numerator) / (denominator * i)\n\t\ti++\n\t}\n\n\treturn output / denominator\n}\n","import type { CliqueConfig } from '@tevm/common'\nimport { type Common, ConsensusAlgorithm, ConsensusType, tevmDefault } from '@tevm/common'\nimport { Rlp } from '@tevm/rlp'\nimport {\n\tbytesToBigInt,\n\tbytesToHex,\n\tbytesToUtf8,\n\tconcatBytes,\n\tEthjsAddress,\n\tecrecover,\n\tequalsBytes,\n\thexToBytes,\n\tKECCAK256_RLP,\n\tKECCAK256_RLP_ARRAY,\n\tkeccak256,\n\tnumberToHex,\n\ttoBytes,\n} from '@tevm/utils'\nimport { CLIQUE_EXTRA_SEAL, CLIQUE_EXTRA_VANITY } from './clique.js'\nimport { fakeExponential, valuesArrayToHeaderData } from './helpers.js'\nimport type { BlockHeaderBytes, BlockOptions, HeaderData, JsonHeader } from './types.js'\nimport { createAddressFromPublicKey, createZeroAddress, getSignatureV, safeToType, zeros } from './utils.js'\n\ninterface HeaderCache {\n\thash: Uint8Array | undefined\n}\n\nconst DEFAULT_GAS_LIMIT = BigInt('0xffffffffffffff')\n\nconst bigIntToUnpaddedBytes = (n: bigint) => {\n\treturn toBytes(n).slice(2)\n}\n/**\n * An object that represents the block header.\n */\nexport class BlockHeader {\n\tpublic readonly parentHash: Uint8Array\n\tpublic readonly uncleHash: Uint8Array\n\tpublic readonly coinbase: EthjsAddress\n\tpublic readonly stateRoot: Uint8Array\n\tpublic readonly transactionsTrie: Uint8Array\n\tpublic readonly receiptTrie: Uint8Array\n\tpublic readonly logsBloom: Uint8Array\n\tpublic readonly difficulty: bigint\n\tpublic readonly number: bigint\n\tpublic readonly gasLimit: bigint\n\tpublic readonly gasUsed: bigint\n\tpublic readonly timestamp: bigint\n\tpublic readonly extraData: Uint8Array\n\tpublic readonly mixHash: Uint8Array\n\tpublic readonly nonce: Uint8Array\n\tpublic readonly baseFeePerGas?: bigint\n\tpublic readonly withdrawalsRoot?: Uint8Array\n\tpublic readonly blobGasUsed?: bigint\n\tpublic readonly excessBlobGas?: bigint\n\tpublic readonly parentBeaconBlockRoot?: Uint8Array\n\tpublic readonly requestsRoot?: Uint8Array\n\n\tpublic readonly common: Common\n\n\tprotected keccakFunction: (msg: Uint8Array) => Uint8Array\n\n\tprotected cache: HeaderCache = {\n\t\thash: undefined,\n\t}\n\n\t/**\n\t * EIP-4399: After merge to PoS, `mixHash` supplanted as `prevRandao`\n\t */\n\tget prevRandao() {\n\t\tif (!this.common.ethjsCommon.isActivatedEIP(4399)) {\n\t\t\tconst msg = this._errorMsg('The prevRandao parameter can only be accessed when EIP-4399 is activated')\n\t\t\tthrow new Error(msg)\n\t\t}\n\t\treturn this.mixHash\n\t}\n\n\t/**\n\t * Static constructor to create a block header from a header data dictionary\n\t *\n\t * @param headerData\n\t * @param opts\n\t */\n\tpublic static fromHeaderData(headerData: HeaderData, opts: BlockOptions) {\n\t\treturn new BlockHeader(headerData, opts)\n\t}\n\n\t/**\n\t * Static constructor to create a block header from a RLP-serialized header\n\t *\n\t * @param serializedHeaderData\n\t * @param opts\n\t */\n\tpublic static fromRLPSerializedHeader(serializedHeaderData: Uint8Array, opts: BlockOptions) {\n\t\tconst values = Rlp.decode(serializedHeaderData)\n\t\tif (!Array.isArray(values)) {\n\t\t\tthrow new Error('Invalid serialized header input. Must be array')\n\t\t}\n\t\treturn BlockHeader.fromValuesArray(values as Uint8Array[], opts)\n\t}\n\n\t/**\n\t * Static constructor to create a block header from an array of Bytes values\n\t *\n\t * @param values\n\t * @param opts\n\t */\n\tpublic static fromValuesArray(values: BlockHeaderBytes, opts: BlockOptions) {\n\t\tconst headerData = valuesArrayToHeaderData(values)\n\t\tconst { number, baseFeePerGas, excessBlobGas, blobGasUsed, parentBeaconBlockRoot, requestsRoot } = headerData\n\t\tconst header = BlockHeader.fromHeaderData(headerData, opts)\n\t\tif (header.common.ethjsCommon.isActivatedEIP(1559) && baseFeePerGas === undefined) {\n\t\t\tconst eip1559ActivationBlock = toBytes(header.common.ethjsCommon.eipBlock(1559) as bigint)\n\t\t\tif (eip1559ActivationBlock !== undefined && equalsBytes(eip1559ActivationBlock, number as Uint8Array)) {\n\t\t\t\tthrow new Error('invalid header. baseFeePerGas should be provided')\n\t\t\t}\n\t\t}\n\t\tif (header.common.ethjsCommon.isActivatedEIP(4844)) {\n\t\t\tif (excessBlobGas === undefined) {\n\t\t\t\tthrow new Error('invalid header. excessBlobGas should be provided')\n\t\t\t}\n\t\t\tif (blobGasUsed === undefined) {\n\t\t\t\tthrow new Error('invalid header. blobGasUsed should be provided')\n\t\t\t}\n\t\t}\n\t\tif (header.common.ethjsCommon.isActivatedEIP(4788) && parentBeaconBlockRoot === undefined) {\n\t\t\tthrow new Error('invalid header. parentBeaconBlockRoot should be provided')\n\t\t}\n\n\t\tif (header.common.ethjsCommon.isActivatedEIP(7685) && requestsRoot === undefined) {\n\t\t\tthrow new Error('invalid header. requestsRoot should be provided')\n\t\t}\n\t\treturn header\n\t}\n\t/**\n\t * This constructor takes the values, validates them, assigns them and freezes the object.\n\t *\n\t * @deprecated Use the public static factory methods to assist in creating a Header object from\n\t * varying data types. For a default empty header, use {@link BlockHeader.fromHeaderData}.\n\t *\n\t */\n\tconstructor(headerData: HeaderData, opts: BlockOptions) {\n\t\tif (opts.common) {\n\t\t\tthis.common = opts.common.copy()\n\t\t} else {\n\t\t\tthis.common = tevmDefault.copy()\n\t\t}\n\t\tthis.keccakFunction = this.common.ethjsCommon.customCrypto.keccak256 ?? ((value) => keccak256(value, 'bytes'))\n\n\t\tconst skipValidateConsensusFormat = opts.skipConsensusFormatValidation ?? false\n\n\t\tconst defaults = {\n\t\t\tparentHash: zeros(32),\n\t\t\tuncleHash: KECCAK256_RLP_ARRAY,\n\t\t\tcoinbase: createZeroAddress(),\n\t\t\tstateRoot: zeros(32),\n\t\t\ttransactionsTrie: KECCAK256_RLP,\n\t\t\treceiptTrie: KECCAK256_RLP,\n\t\t\tlogsBloom: zeros(256),\n\t\t\tdifficulty: 0n,\n\t\t\tnumber: 0n,\n\t\t\tgasLimit: DEFAULT_GAS_LIMIT,\n\t\t\tgasUsed: 0n,\n\t\t\ttimestamp: 0n,\n\t\t\textraData: new Uint8Array(0),\n\t\t\tmixHash: zeros(32),\n\t\t\tnonce: zeros(8),\n\t\t}\n\n\t\tconst parentHash = safeToType(headerData.parentHash, 2) ?? defaults.parentHash\n\t\tconst uncleHash = safeToType(headerData.uncleHash, 2) ?? defaults.uncleHash\n\t\tconst coinbase = new EthjsAddress(safeToType(headerData.coinbase ?? defaults.coinbase, 2))\n\t\tconst stateRoot = safeToType(headerData.stateRoot, 2) ?? defaults.stateRoot\n\t\tconst transactionsTrie = safeToType(headerData.transactionsTrie, 2) ?? defaults.transactionsTrie\n\t\tconst receiptTrie = safeToType(headerData.receiptTrie, 2) ?? defaults.receiptTrie\n\t\tconst logsBloom = safeToType(headerData.logsBloom, 2) ?? defaults.logsBloom\n\t\tconst difficulty = safeToType(headerData.difficulty, 1) ?? defaults.difficulty\n\t\tconst number = safeToType(headerData.number, 1) ?? defaults.number\n\t\tconst gasLimit = safeToType(headerData.gasLimit, 1) ?? defaults.gasLimit\n\t\tconst gasUsed = safeToType(headerData.gasUsed, 1) ?? defaults.gasUsed\n\t\tconst timestamp = safeToType(headerData.timestamp, 1) ?? defaults.timestamp\n\t\tconst extraData = safeToType(headerData.extraData, 2) ?? defaults.extraData\n\t\tconst mixHash = safeToType(headerData.mixHash, 2) ?? defaults.mixHash\n\t\tconst nonce = safeToType(headerData.nonce, 2) ?? defaults.nonce\n\n\t\tconst setHardfork = opts.setHardfork ?? false\n\t\tif (setHardfork === true) {\n\t\t\tthis.common.ethjsCommon.setHardforkBy({\n\t\t\t\tblockNumber: number,\n\t\t\t\ttimestamp,\n\t\t\t})\n\t\t} else if (typeof setHardfork !== 'boolean') {\n\t\t\tthis.common.ethjsCommon.setHardforkBy({\n\t\t\t\tblockNumber: number,\n\t\t\t\ttimestamp,\n\t\t\t})\n\t\t}\n\n\t\t// Hardfork defaults which couldn't be paired with earlier defaults\n\t\tconst hardforkDefaults = {\n\t\t\tbaseFeePerGas: this.common.ethjsCommon.isActivatedEIP(1559)\n\t\t\t\t? number === this.common.ethjsCommon.hardforkBlock('london')\n\t\t\t\t\t? this.common.ethjsCommon.param('initialBaseFee')\n\t\t\t\t\t: 7n\n\t\t\t\t: undefined,\n\t\t\twithdrawalsRoot: this.common.ethjsCommon.isActivatedEIP(4895) ? KECCAK256_RLP : undefined,\n\t\t\tblobGasUsed: this.common.ethjsCommon.isActivatedEIP(4844) ? 0n : undefined,\n\t\t\texcessBlobGas: this.common.ethjsCommon.isActivatedEIP(4844) ? 0n : undefined,\n\t\t\tparentBeaconBlockRoot: this.common.ethjsCommon.isActivatedEIP(4788) ? zeros(32) : undefined,\n\t\t\trequestsRoot: this.common.ethjsCommon.isActivatedEIP(7685) ? KECCAK256_RLP : undefined,\n\t\t}\n\n\t\tconst baseFeePerGas = safeToType(headerData.baseFeePerGas, 1) ?? hardforkDefaults.baseFeePerGas\n\t\tconst withdrawalsRoot = safeToType(headerData.withdrawalsRoot, 2) ?? hardforkDefaults.withdrawalsRoot\n\t\tconst blobGasUsed = safeToType(headerData.blobGasUsed, 1) ?? hardforkDefaults.blobGasUsed\n\t\tconst excessBlobGas = safeToType(headerData.excessBlobGas, 1) ?? hardforkDefaults.excessBlobGas\n\t\tconst parentBeaconBlockRoot =\n\t\t\tsafeToType(headerData.parentBeaconBlockRoot, 2) ?? hardforkDefaults.parentBeaconBlockRoot\n\t\tconst requestsRoot = safeToType(headerData.requestsRoot, 2) ?? hardforkDefaults.requestsRoot\n\n\t\tif (!this.common.ethjsCommon.isActivatedEIP(1559) && baseFeePerGas !== undefined) {\n\t\t\tthrow new Error('A base fee for a block can only be set with EIP1559 being activated')\n\t\t}\n\n\t\tif (!this.common.ethjsCommon.isActivatedEIP(4895) && withdrawalsRoot !== undefined) {\n\t\t\tthrow new Error('A withdrawalsRoot for a header can only be provided with EIP4895 being activated')\n\t\t}\n\n\t\tif (!this.common.ethjsCommon.isActivatedEIP(4844)) {\n\t\t\tif (blobGasUsed !== undefined) {\n\t\t\t\tthrow new Error('blob gas used can only be provided with EIP4844 activated')\n\t\t\t}\n\n\t\t\tif (excessBlobGas !== undefined) {\n\t\t\t\tthrow new Error('excess blob gas can only be provided with EIP4844 activated')\n\t\t\t}\n\t\t}\n\n\t\tif (!this.common.ethjsCommon.isActivatedEIP(4788) && parentBeaconBlockRoot !== undefined) {\n\t\t\tthrow new Error('A parentBeaconBlockRoot for a header can only be provided with EIP4788 being activated')\n\t\t}\n\n\t\tif (!this.common.ethjsCommon.isActivatedEIP(7685) && requestsRoot !== undefined) {\n\t\t\tthrow new Error('requestsRoot can only be provided with EIP 7685 activated')\n\t\t}\n\n\t\tthis.parentHash = parentHash\n\t\tthis.uncleHash = uncleHash\n\t\tthis.coinbase = coinbase\n\t\tthis.stateRoot = stateRoot\n\t\tthis.transactionsTrie = transactionsTrie\n\t\tthis.receiptTrie = receiptTrie\n\t\tthis.logsBloom = logsBloom\n\t\tthis.difficulty = difficulty\n\t\tthis.number = number\n\t\tthis.gasLimit = gasLimit\n\t\tthis.gasUsed = gasUsed\n\t\tthis.timestamp = timestamp\n\t\tthis.extraData = extraData\n\t\tthis.mixHash = mixHash\n\t\tthis.nonce = nonce\n\t\tthis.baseFeePerGas = baseFeePerGas\n\t\tthis.withdrawalsRoot = withdrawalsRoot\n\t\tthis.blobGasUsed = blobGasUsed\n\t\tthis.excessBlobGas = excessBlobGas\n\t\tthis.parentBeaconBlockRoot = parentBeaconBlockRoot\n\t\tthis.requestsRoot = requestsRoot\n\t\tthis._genericFormatValidation()\n\t\tthis._validateDAOExtraData()\n\n\t\t// Now we have set all the values of this Header, we possibly have set a dummy\n\t\t// `difficulty` value (defaults to 0). If we have a `calcDifficultyFromHeader`\n\t\t// block option parameter, we instead set difficulty to this value.\n\t\tif (opts.calcDifficultyFromHeader && this.common.ethjsCommon.consensusAlgorithm() === ConsensusAlgorithm.Ethash) {\n\t\t\tthis.difficulty = this.ethashCanonicalDifficulty(opts.calcDifficultyFromHeader)\n\t\t}\n\n\t\t// If cliqueSigner is provided, seal block with provided privateKey.\n\t\tif (opts.cliqueSigner) {\n\t\t\t// Ensure extraData is at least length CLIQUE_EXTRA_VANITY + CLIQUE_EXTRA_SEAL\n\t\t\tconst minExtraDataLength = CLIQUE_EXTRA_VANITY + CLIQUE_EXTRA_SEAL\n\t\t\tif (this.extraData.length < minExtraDataLength) {\n\t\t\t\tconst remainingLength = minExtraDataLength - this.extraData.length\n\t\t\t\tthis.extraData = concatBytes(this.extraData, new Uint8Array(remainingLength))\n\t\t\t}\n\n\t\t\tthis.extraData = this.cliqueSealBlock(opts.cliqueSigner)\n\t\t}\n\n\t\t// Validate consensus format after block is sealed (if applicable) so extraData checks will pass\n\t\tif (skipValidateConsensusFormat === false) this._consensusFormatValidation()\n\n\t\tconst freeze = opts?.freeze ?? true\n\t\tif (freeze) {\n\t\t\tObject.freeze(this)\n\t\t}\n\t}\n\n\t/**\n\t * Validates correct buffer lengths, throws if invalid.\n\t */\n\tprotected _genericFormatValidation() {\n\t\tconst { parentHash, stateRoot, transactionsTrie, receiptTrie, mixHash, nonce } = this\n\n\t\tif (parentHash.length !== 32) {\n\t\t\tconst msg = this._errorMsg(`parentHash must be 32 bytes, received ${parentHash.length} bytes`)\n\t\t\tthrow new Error(msg)\n\t\t}\n\t\tif (stateRoot.length !== 32) {\n\t\t\tconst msg = this._errorMsg(`stateRoot must be 32 bytes, received ${stateRoot.length} bytes`)\n\t\t\tthrow new Error(msg)\n\t\t}\n\t\tif (transactionsTrie.length !== 32) {\n\t\t\tconst msg = this._errorMsg(`transactionsTrie must be 32 bytes, received ${transactionsTrie.length} bytes`)\n\t\t\tthrow new Error(msg)\n\t\t}\n\t\tif (receiptTrie.length !== 32) {\n\t\t\tconst msg = this._errorMsg(`receiptTrie must be 32 bytes, received ${receiptTrie.length} bytes`)\n\t\t\tthrow new Error(msg)\n\t\t}\n\t\tif (mixHash.length !== 32) {\n\t\t\tconst msg = this._errorMsg(`mixHash must be 32 bytes, received ${mixHash.length} bytes`)\n\t\t\tthrow new Error(msg)\n\t\t}\n\n\t\tif (nonce.length !== 8) {\n\t\t\tconst msg = this._errorMsg(`nonce must be 8 bytes, received ${nonce.length} bytes`)\n\t\t\tthrow new Error(msg)\n\t\t}\n\n\t\t// check if the block used too much gas\n\t\tif (this.gasUsed > this.gasLimit) {\n\t\t\tconst msg = this._errorMsg(`Invalid block: too much gas used. Used: ${this.gasUsed}, gas limit: ${this.gasLimit}`)\n\t\t\tthrow new Error(msg)\n\t\t}\n\n\t\t// Validation for EIP-1559 blocks\n\t\tif (this.common.ethjsCommon.isActivatedEIP(1559)) {\n\t\t\tif (typeof this.baseFeePerGas !== 'bigint') {\n\t\t\t\tconst msg = this._errorMsg('EIP1559 block has no base fee field')\n\t\t\t\tthrow new Error(msg)\n\t\t\t}\n\t\t\tconst londonHfBlock = this.common.ethjsCommon.hardforkBlock('london')\n\t\t\tif (typeof londonHfBlock === 'bigint' && londonHfBlock !== 0n && this.number === londonHfBlock) {\n\t\t\t\tconst initialBaseFee = this.common.ethjsCommon.param('initialBaseFee')\n\t\t\t\tif (this.baseFeePerGas !== initialBaseFee) {\n\t\t\t\t\tconst msg = this._errorMsg('Initial EIP1559 block does not have initial base fee')\n\t\t\t\t\tthrow new Error(msg)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (this.common.ethjsCommon.isActivatedEIP(4895)) {\n\t\t\tif (this.withdrawalsRoot === undefined) {\n\t\t\t\tconst msg = this._errorMsg('EIP4895 block has no withdrawalsRoot field')\n\t\t\t\tthrow new Error(msg)\n\t\t\t}\n\t\t\tif (this.withdrawalsRoot?.length !== 32) {\n\t\t\t\tconst msg = this._errorMsg(`withdrawalsRoot must be 32 bytes, received ${this.withdrawalsRoot?.length} bytes`)\n\t\t\t\tthrow new Error(msg)\n\t\t\t}\n\t\t}\n\n\t\tif (this.common.ethjsCommon.isActivatedEIP(4788)) {\n\t\t\tif (this.parentBeaconBlockRoot === undefined) {\n\t\t\t\tconst msg = this._errorMsg('EIP4788 block has no parentBeaconBlockRoot field')\n\t\t\t\tthrow new Error(msg)\n\t\t\t}\n\t\t\tif (this.parentBeaconBlockRoot?.length !== 32) {\n\t\t\t\tconst msg = this._errorMsg(\n\t\t\t\t\t`parentBeaconBlockRoot must be 32 bytes, received ${this.parentBeaconBlockRoot?.length} bytes`,\n\t\t\t\t)\n\t\t\t\tthrow new Error(msg)\n\t\t\t}\n\t\t}\n\n\t\tif (this.common.ethjsCommon.isActivatedEIP(7685) === true) {\n\t\t\tif (this.requestsRoot === undefined) {\n\t\t\t\tconst msg = this._errorMsg('EIP7685 block has no requestsRoot field')\n\t\t\t\tthrow new Error(msg)\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks static parameters related to consensus algorithm\n\t * @throws if any check fails\n\t */\n\tprotected _consensusFormatValidation() {\n\t\tconst { nonce, uncleHash, difficulty, extraData, number } = this\n\n\t\t// Consensus type dependent checks\n\t\tif (this.common.ethjsCommon.consensusAlgorithm() === ConsensusAlgorithm.Ethash) {\n\t\t\t// PoW/Ethash\n\t\t\tif (number > 0n && this.extraData.length > this.common.ethjsCommon.param('maxExtraDataSize')) {\n\t\t\t\t// Check length of data on all post-genesis blocks\n\t\t\t\tconst msg = this._errorMsg('invalid amount of extra data')\n\t\t\t\tthrow new Error(msg)\n\t\t\t}\n\t\t}\n\t\tif (this.common.ethjsCommon.consensusAlgorithm() === ConsensusAlgorithm.Clique) {\n\t\t\t// PoA/Clique\n\t\t\tconst minLength = CLIQUE_EXTRA_VANITY + CLIQUE_EXTRA_SEAL\n\t\t\tif (!this.cliqueIsEpochTransition()) {\n\t\t\t\t// ExtraData length on epoch transition\n\t\t\t\tif (this.extraData.length !== minLength) {\n\t\t\t\t\tconst msg = this._errorMsg(\n\t\t\t\t\t\t`extraData must be ${minLength} bytes on non-epoch transition blocks, received ${this.extraData.length} bytes`,\n\t\t\t\t\t)\n\t\t\t\t\tthrow new Error(msg)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst signerLength = this.extraData.length - minLength\n\t\t\t\tif (signerLength % 20 !== 0) {\n\t\t\t\t\tconst msg = this._errorMsg(\n\t\t\t\t\t\t`invalid signer list length in extraData, received signer length of ${signerLength} (not divisible by 20)`,\n\t\t\t\t\t)\n\t\t\t\t\tthrow new Error(msg)\n\t\t\t\t}\n\t\t\t\t// coinbase (beneficiary) on epoch transition\n\t\t\t\tif (!this.coinbase.isZero()) {\n\t\t\t\t\tconst msg = this._errorMsg(\n\t\t\t\t\t\t`coinbase must be filled with zeros on epoch transition blocks, received ${this.coinbase}`,\n\t\t\t\t\t)\n\t\t\t\t\tthrow new Error(msg)\n\t\t\t\t}\n\t\t\t}\n\t\t\t// MixHash format\n\t\t\tif (!equalsBytes(this.mixHash, new Uint8Array(32))) {\n\t\t\t\tconst msg = this._errorMsg(`mixHash must be filled with zeros, received ${this.mixHash}`)\n\t\t\t\tthrow new Error(msg)\n\t\t\t}\n\t\t}\n\t\t// Validation for PoS blocks (EIP-3675)\n\t\tif (this.common.ethjsCommon.consensusType() === ConsensusType.ProofOfStake) {\n\t\t\tlet error = false\n\t\t\tlet errorMsg = ''\n\n\t\t\tif (!equalsBytes(uncleHash, KECCAK256_RLP_ARRAY)) {\n\t\t\t\terrorMsg += `, uncleHash: ${bytesToHex(uncleHash)} (expected: ${bytesToHex(KECCAK256_RLP_ARRAY)})`\n\t\t\t\terror = true\n\t\t\t}\n\t\t\tif (number !== 0n) {\n\t\t\t\t// Skip difficulty, nonce, and extraData check for PoS genesis block as genesis block may have non-zero difficulty (if TD is > 0)\n\t\t\t\tif (difficulty !== 0n) {\n\t\t\t\t\terrorMsg += `, difficulty: ${difficulty} (expected: 0)`\n\t\t\t\t\terror = true\n\t\t\t\t}\n\t\t\t\tif (extraData.length > 32) {\n\t\t\t\t\terrorMsg += `, extraData: ${bytesToHex(extraData)} (cannot exceed 32 bytes length, received ${\n\t\t\t\t\t\textraData.length\n\t\t\t\t\t} bytes)`\n\t\t\t\t\terror = true\n\t\t\t\t}\n\t\t\t\tif (!equalsBytes(nonce, zeros(8))) {\n\t\t\t\t\terrorMsg += `, nonce: ${bytesToHex(nonce)} (expected: ${bytesToHex(zeros(8))})`\n\t\t\t\t\terror = true\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (error) {\n\t\t\t\tconst msg = this._errorMsg(`Invalid PoS block: ${errorMsg}`)\n\t\t\t\tthrow new Error(msg)\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Validates if the block gasLimit remains in the boundaries set by the protocol.\n\t * Throws if out of bounds.\n\t *\n\t * @param parentBlockHeader - the header from the parent `Block` of this header\n\t */\n\tvalidateGasLimit(parentBlockHeader: BlockHeader) {\n\t\tlet parentGasLimit = parentBlockHeader.gasLimit\n\t\t// EIP-1559: assume double the parent gas limit on fork block\n\t\t// to adopt to the new gas target centered logic\n\t\tconst londonHardforkBlock = this.common.ethjsCommon.hardforkBlock('london')\n\t\tif (typeof londonHardforkBlock === 'bigint' && londonHardforkBlock !== 0n && this.number === londonHardforkBlock) {\n\t\t\tconst elasticity = this.common.ethjsCommon.param('elasticityMultiplier')\n\t\t\tparentGasLimit = parentGasLimit * elasticity\n\t\t}\n\t\tconst gasLimit = this.gasLimit\n\n\t\tconst a = parentGasLimit / this.common.ethjsCommon.param('gasLimitBoundDivisor')\n\t\tconst maxGasLimit = parentGasLimit + a\n\t\tconst minGasLimit = parentGasLimit - a\n\n\t\tif (gasLimit >= maxGasLimit) {\n\t\t\tconst msg = this._errorMsg(`gas limit increased too much. Gas limit: ${gasLimit}, max gas limit: ${maxGasLimit}`)\n\t\t\tthrow new Error(msg)\n\t\t}\n\n\t\tif (gasLimit <= minGasLimit) {\n\t\t\tconst msg = this._errorMsg(`gas limit decreased too much. Gas limit: ${gasLimit}, min gas limit: ${minGasLimit}`)\n\t\t\tthrow new Error(msg)\n\t\t}\n\n\t\tif (gasLimit < this.common.ethjsCommon.param('minGasLimit')) {\n\t\t\tconst msg = this._errorMsg(\n\t\t\t\t`gas limit decreased below minimum gas limit. Gas limit: ${gasLimit}, minimum gas limit: ${this.common.ethjsCommon.param('minGasLimit')}`,\n\t\t\t)\n\t\t\tthrow new Error(msg)\n\t\t}\n\t}\n\n\t/**\n\t * Calculates the base fee for a potential next block\n\t */\n\tpublic calcNextBaseFee(): bigint {\n\t\tif (!this.common.ethjsCommon.isActivatedEIP(1559)) {\n\t\t\tconst msg = this._errorMsg('calcNextBaseFee() can only be called with EIP1559 being activated')\n\t\t\tthrow new Error(msg)\n\t\t}\n\t\tlet nextBaseFee: bigint\n\t\tconst elasticity = this.common.ethjsCommon.param('elasticityMultiplier')\n\t\tconst parentGasTarget = this.gasLimit / elasticity\n\n\t\tif (parentGasTarget === this.gasUsed) {\n\t\t\tnextBaseFee = this.baseFeePerGas as bigint\n\t\t} else if (this.gasUsed > parentGasTarget) {\n\t\t\tconst gasUsedDelta = this.gasUsed - parentGasTarget\n\t\t\tconst baseFeeMaxChangeDenominator = this.common.ethjsCommon.param('baseFeeMaxChangeDenominator')\n\n\t\t\tconst calculatedDelta =\n\t\t\t\t((this.baseFeePerGas as bigint) * gasUsedDelta) / parentGasTarget / baseFeeMaxChangeDenominator\n\t\t\tnextBaseFee = (calculatedDelta > 1n ? calculatedDelta : 1n) + (this.baseFeePerGas as bigint)\n\t\t} else {\n\t\t\tconst gasUsedDelta = parentGasTarget - this.gasUsed\n\t\t\tconst baseFeeMaxChangeDenominator = this.common.ethjsCommon.param('baseFeeMaxChangeDenominator')\n\n\t\t\tconst calculatedDelta =\n\t\t\t\t((this.baseFeePerGas as bigint) * gasUsedDelta) / parentGasTarget / baseFeeMaxChangeDenominator\n\t\t\tnextBaseFee =\n\t\t\t\t(this.baseFeePerGas as bigint) - calculatedDelta > 0n ? (this.baseFeePerGas as bigint) - calculatedDelta : 0n\n\t\t}\n\t\treturn nextBaseFee\n\t}\n\n\t/**\n\t * Returns the price per unit of blob gas for a blob transaction in the current/pending block\n\t * @returns the price in gwei per unit of blob gas spent\n\t */\n\tgetBlobGasPrice(): bigint {\n\t\tif (this.excessBlobGas === undefined) {\n\t\t\tthrow new Error('header must have excessBlobGas field populated')\n\t\t}\n\t\treturn this._getBlobGasPrice(this.excessBlobGas)\n\t}\n\n\t/**\n\t * Returns the blob gas price depending upon the `excessBlobGas` value\n\t * @param excessBlobGas\n\t */\n\tprivate _getBlobGasPrice(excessBlobGas: bigint) {\n\t\treturn fakeExponential(\n\t\t\tthis.common.ethjsCommon.param('minBlobGasPrice'),\n\t\t\texcessBlobGas,\n\t\t\tthis.common.ethjsCommon.param('blobGasPriceUpdateFraction'),\n\t\t)\n\t}\n\n\t/**\n\t * Returns the total fee for blob gas spent for including blobs in block.\n\t *\n\t * @param numBlobs number of blobs in the transaction/block\n\t * @returns the total blob gas fee for numBlobs blobs\n\t */\n\tcalcDataFee(numBlobs: number): bigint {\n\t\tconst blobGasPerBlob = this.common.ethjsCommon.param('blobGasPerBlob')\n\t\tconst blobGasUsed = blobGasPerBlob * BigInt(numBlobs)\n\n\t\tconst blobGasPrice = this.getBlobGasPrice()\n\t\treturn blobGasUsed * blobGasPrice\n\t}\n\n\t/**\n\t * Calculates the excess blob gas for next (hopefully) post EIP 4844 block.\n\t */\n\tpublic calcNextExcessBlobGas(): bigint {\n\t\t// The validation of the fields and 4844 activation is already taken care in BlockHeader constructor\n\t\tconst targetGasConsumed = (this.excessBlobGas ?? 0n) + (this.blobGasUsed ?? 0n)\n\t\tconst targetBlobGasPerBlock = this.common.ethjsCommon.param('targetBlobGasPerBlock')\n\n\t\tif (targetGasConsumed <= targetBlobGasPerBlock) {\n\t\t\treturn 0n\n\t\t}\n\t\treturn targetGasConsumed - targetBlobGasPerBlock\n\t}\n\n\t/**\n\t * Calculate the blob gas price of the block built on top of this one\n\t * @returns The blob gas price\n\t */\n\tpublic calcNextBlobGasPrice(): bigint {\n\t\treturn this._getBlobGasPrice(this.calcNextExcessBlobGas())\n\t}\n\n\t/**\n\t * Returns a Uint8Array Array of the raw Bytes in this header, in order.\n\t */\n\traw(): BlockHeaderBytes {\n\t\tconst rawItems = [\n\t\t\tthis.parentHash,\n\t\t\tthis.uncleHash,\n\t\t\tthis.coinbase.bytes,\n\t\t\tthis.stateRoot,\n\t\t\tthis.transactionsTrie,\n\t\t\tthis.receiptTrie,\n\t\t\tthis.logsBloom,\n\t\t\tbigIntToUnpaddedBytes(this.difficulty),\n\t\t\tbigIntToUnpaddedBytes(this.number),\n\t\t\tbigIntToUnpaddedBytes(this.gasLimit),\n\t\t\tbigIntToUnpaddedBytes(this.gasUsed),\n\t\t\tbigIntToUnpaddedBytes(this.timestamp ?? 0n),\n\t\t\tthis.extraData,\n\t\t\tthis.mixHash,\n\t\t\tthis.nonce,\n\t\t]\n\n\t\tif (this.common.ethjsCommon.isActivatedEIP(1559)) {\n\t\t\trawItems.push(bigIntToUnpaddedBytes(this.baseFeePerGas as bigint))\n\t\t}\n\n\t\tif (this.common.ethjsCommon.isActivatedEIP(4895)) {\n\t\t\trawItems.push(this.withdrawalsRoot as Uint8Array)\n\t\t}\n\n\t\t// in kaunstinen 2 verkle is scheduled after withdrawals, will eventually be post deneb hopefully\n\t\tif (this.common.ethjsCommon.isActivatedEIP(6800)) {\n\t\t\t// execution witness is not mandatory part of the the block so nothing to push here\n\t\t\t// but keep this comment segment for clarity regarding the same and move it according as per the\n\t\t\t// HF sequence eventually planned\n\t\t}\n\n\t\tif (this.common.ethjsCommon.isActivatedEIP(4844)) {\n\t\t\trawItems.push(bigIntToUnpaddedBytes(this.blobGasUsed as bigint))\n\t\t\trawItems.push(bigIntToUnpaddedBytes(this.excessBlobGas as bigint))\n\t\t}\n\t\tif (this.common.ethjsCommon.isActivatedEIP(4788)) {\n\t\t\trawItems.push(this.parentBeaconBlockRoot as Uint8Array)\n\t\t}\n\t\tif (this.common.ethjsCommon.isActivatedEIP(7685) === true) {\n\t\t\trawItems.push(this.requestsRoot as Uint8Array)\n\t\t}\n\n\t\treturn rawItems\n\t}\n\n\t/**\n\t * Returns the hash of the block header.\n\t */\n\thash(): Uint8Array {\n\t\tif (Object.isFrozen(this)) {\n\t\t\tif (!this.cache.hash) {\n\t\t\t\tthis.cache.hash = this.keccakFunction(Rlp.encode(this.raw())) as Uint8Array\n\t\t\t}\n\t\t\treturn this.cache.hash\n\t\t}\n\t\treturn this.keccakFunction(Rlp.encode(this.raw()))\n\t}\n\n\t/**\n\t * Checks if the block header is a genesis header.\n\t */\n\tisGenesis(): boolean {\n\t\treturn this.number === 0n\n\t}\n\n\tprotected _requireClique(name: string) {\n\t\tif (this.common.ethjsCommon.consensusAlgorithm() !== ConsensusAlgorithm.Clique) {\n\t\t\tconst msg = this._errorMsg(`BlockHeader.${name}() call only supported for clique PoA networks`)\n\t\t\tthrow new Error(msg)\n\t\t}\n\t}\n\n\t/**\n\t * Returns the canonical difficulty for this block.\n\t *\n\t * @param parentBlockHeader - the header from the parent `Block` of this header\n\t */\n\tethashCanonicalDifficulty(parentBlockHeader: BlockHeader): bigint {\n\t\tif (this.common.ethjsCommon.consensusType() !== ConsensusType.ProofOfWork) {\n\t\t\tconst msg = this._errorMsg('difficulty calculation is only supported on PoW chains')\n\t\t\tthrow new Error(msg)\n\t\t}\n\t\tif (this.common.ethjsCommon.consensusAlgorithm() !== ConsensusAlgorithm.Ethash) {\n\t\t\tconst msg = this._errorMsg('difficulty calculation currently only supports the ethash algorithm')\n\t\t\tthrow new Error(msg)\n\t\t}\n\t\tconst blockTs = this.timestamp\n\t\tconst { timestamp: parentTs, difficulty: parentDif } = parentBlockHeader\n\t\tconst minimumDifficulty = this.common.ethjsCommon.param('minimumDifficulty')\n\t\tconst offset = parentDif / this.common.ethjsCommon.param('difficultyBoundDivisor')\n\t\tlet num = this.number\n\n\t\t// We use a ! here as TS cannot follow this hardfork-dependent logic, but it always gets assigned\n\t\tlet dif!: bigint\n\n\t\tif (this.common.ethjsCommon.gteHardfork('byzantium') === true) {\n\t\t\t// max((2 if len(parent.uncles) else 1) - ((timestamp - parent.timestamp) // 9), -99) (EIP100)\n\t\t\tconst uncleAddend = equalsBytes(parentBlockHeader.uncleHash, KECCAK256_RLP_ARRAY) ? 1 : 2\n\t\t\tlet a = BigInt(uncleAddend) - (blockTs - parentTs) / BigInt(9)\n\t\t\tconst cutoff = BigInt(-99)\n\t\t\t// MAX(cutoff, a)\n\t\t\tif (cutoff > a) {\n\t\t\t\ta = cutoff\n\t\t\t}\n\t\t\tdif = parentDif + offset * a\n\t\t}\n\n\t\tif (this.common.ethjsCommon.gteHardfork('byzantium') === true) {\n\t\t\t// Get delay as parameter from common\n\t\t\tnum = num - this.common.ethjsCommon.param('difficultyBombDelay')\n\t\t\tif (num < 0n) {\n\t\t\t\tnum = 0n\n\t\t\t}\n\t\t} else if (this.common.ethjsCommon.gteHardfork('homestead') === true) {\n\t\t\t// 1 - (block_timestamp - parent_timestamp) // 10\n\t\t\tlet a = 1n - (blockTs - parentTs) / BigInt(10)\n\t\t\tconst cutoff = BigInt(-99)\n\t\t\t// MAX(cutoff, a)\n\t\t\tif (cutoff > a) {\n\t\t\t\ta = cutoff\n\t\t\t}\n\t\t\tdif = parentDif + offset * a\n\t\t} else {\n\t\t\t// pre-homestead\n\t\t\tif (parentTs + this.common.ethjsCommon.param('durationLimit') > blockTs) {\n\t\t\t\tdif = offset + parentDif\n\t\t\t} else {\n\t\t\t\tdif = parentDif - offset\n\t\t\t}\n\t\t}\n\n\t\tconst exp = num / BigInt(100000) - 2n\n\t\tif (exp >= 0) {\n\t\t\tdif = dif + 2n ** exp\n\t\t}\n\n\t\tif (dif < minimumDifficulty) {\n\t\t\tdif = minimumDifficulty\n\t\t}\n\n\t\treturn dif\n\t}\n\n\t/**\n\t * PoA clique signature hash without the seal.\n\t */\n\tcliqueSigHash() {\n\t\tthis._requireClique('cliqueSigHash')\n\t\tconst raw = this.raw()\n\t\traw[12] = this.extraData.subarray(0, this.extraData.length - CLIQUE_EXTRA_SEAL)\n\t\treturn this.keccakFunction(Rlp.encode(raw))\n\t}\n\n\t/**\n\t * Checks if the block header is an epoch transition\n\t * header (only clique PoA, throws otherwise)\n\t */\n\tcliqueIsEpochTransition(): boolean {\n\t\tthis._requireClique('cliqueIsEpochTransition')\n\t\tconst epoch = BigInt((this.common.ethjsCommon.consensusConfig() as CliqueConfig).epoch)\n\t\t// Epoch transition block if the block number has no\n\t\t// remainder on the division by the epoch length\n\t\treturn this.number % epoch === 0n\n\t}\n\n\t/**\n\t * Returns extra vanity data\n\t * (only clique PoA, throws otherwise)\n\t */\n\tcliqueExtraVanity(): Uint8Array {\n\t\tthis._requireClique('cliqueExtraVanity')\n\t\treturn this.extraData.subarray(0, CLIQUE_EXTRA_VANITY)\n\t}\n\n\t/**\n\t * Returns extra seal data\n\t * (only clique PoA, throws otherwise)\n\t */\n\tcliqueExtraSeal(): Uint8Array {\n\t\tthis._requireClique('cliqueExtraSeal')\n\t\treturn this.extraData.subarray(-CLIQUE_EXTRA_SEAL)\n\t}\n\n\t/**\n\t * Seal block with the provided signer.\n\t * Returns the final extraData field to be assigned to `this.extraData`.\n\t * @hidden\n\t */\n\tprivate cliqueSealBlock(privateKey: Uint8Array) {\n\t\tthis._requireClique('cliqueSealBlock')\n\n\t\t// Use custom ecsign if provided, otherwise we can't sign in this sync context\n\t\tconst ecSignFunction = this.common.ethjsCommon.customCrypto?.ecsign\n\t\tif (!ecSignFunction) {\n\t\t\tthrow new Error('ecsign function must be provided in customCrypto for clique signing')\n\t\t}\n\t\tconst signature = ecSignFunction(this.cliqueSigHash(), privateKey)\n\t\tconst v = getSignatureV(signature)\n\t\tconst vBytes = new Uint8Array([Number(v - 27n)])\n\t\t// Convert signature r and s to Uint8Array\n\t\tconst rBytes = toBytes(signature.r)\n\t\tconst sBytes = toBytes(signature.s)\n\t\tconst signatureB = concatBytes(rBytes, sBytes, vBytes)\n\n\t\tconst extraDataWithoutSeal = this.extraData.subarray(0, this.extraData.length - CLIQUE_EXTRA_SEAL)\n\t\tconst extraData = concatBytes(extraDataWithoutSeal, signatureB)\n\t\treturn extraData\n\t}\n\n\t/**\n\t * Returns a list of signers\n\t * (only clique PoA, throws otherwise)\n\t *\n\t * This function throws if not called on an epoch\n\t * transition block and should therefore be used\n\t * in conjunction with {@link BlockHeader.cliqueIsEpochTransition}\n\t */\n\tcliqueEpochTransitionSigners(): EthjsAddress[] {\n\t\tthis._requireClique('cliqueEpochTransitionSigners')\n\t\tif (!this.cliqueIsEpochTransition()) {\n\t\t\tconst msg = this._errorMsg('Signers are only included in epoch transition blocks (clique)')\n\t\t\tthrow new Error(msg)\n\t\t}\n\n\t\tconst start = CLIQUE_EXTRA_VANITY\n\t\tconst end = this.extraData.length - CLIQUE_EXTRA_SEAL\n\t\tconst signerBytes = this.extraData.subarray(start, end)\n\n\t\tconst signerList: Uint8Array[] = []\n\t\tconst signerLength = 20\n\t\tfor (let start = 0; start <= signerBytes.length - signerLength; start += signerLength) {\n\t\t\tsignerList.push(signerBytes.subarray(start, start + signerLength))\n\t\t}\n\t\treturn signerList.map((buf) => new EthjsAddress(buf))\n\t}\n\n\t/**\n\t * Verifies the signature of the block (last 65 bytes of extraData field)\n\t * (only clique PoA, throws otherwise)\n\t *\n\t *  Method throws if signature is invalid\n\t */\n\tcliqueVerifySignature(signerList: EthjsAddress[]): boolean {\n\t\tthis._requireClique('cliqueVerifySignature')\n\t\tconst signerAddress = this.cliqueSigner()\n\t\tconst signerFound = signerList.find((signer) => {\n\t\t\treturn signer.equals(signerAddress)\n\t\t})\n\t\treturn !!signerFound\n\t}\n\n\t/**\n\t * Returns the signer address\n\t */\n\tcliqueSigner(): EthjsAddress {\n\t\tthis._requireClique('cliqueSigner')\n\t\tconst extraSeal = this.cliqueExtraSeal()\n\t\t// Reasonable default for default blocks\n\t\tif (extraSeal.length === 0 || equalsBytes(extraSeal, new Uint8Array(65))) {\n\t\t\treturn createZeroAddress()\n\t\t}\n\t\tconst r = extraSeal.subarray(0, 32)\n\t\tconst s = extraSeal.subarray(32, 64)\n\t\tconst v = bytesToBigInt(extraSeal.subarray(64, 65)) + 27n\n\t\tconst pubKey = ecrecover(this.cliqueSigHash(), v, r, s)\n\t\treturn createAddressFromPublicKey(pubKey)\n\t}\n\n\t/**\n\t * Returns the rlp encoding of the block header.\n\t */\n\tserialize(): Uint8Array {\n\t\treturn Rlp.encode(this.raw())\n\t}\n\n\t/**\n\t * Returns the block header in JSON format.\n\t */\n\ttoJSON(): JsonHeader {\n\t\tconst withdrawalAttr = this.withdrawalsRoot ? { withdrawalsRoot: bytesToHex(this.withdrawalsRoot) } : {}\n\t\tconst jsonDict: JsonHeader = {\n\t\t\tparentHash: bytesToHex(this.parentHash),\n\t\t\tuncleHash: bytesToHex(this.uncleHash),\n\t\t\tcoinbase: this.coinbase.toString(),\n\t\t\tstateRoot: bytesToHex(this.stateRoot),\n\t\t\ttransactionsTrie: bytesToHex(this.transactionsTrie),\n\t\t\t...withdrawalAttr,\n\t\t\treceiptTrie: bytesToHex(this.receiptTrie),\n\t\t\tlogsBloom: bytesToHex(this.logsBloom),\n\t\t\tdifficulty: numberToHex(this.difficulty),\n\t\t\tnumber: numberToHex(this.number),\n\t\t\tgasLimit: numberToHex(this.gasLimit),\n\t\t\tgasUsed: numberToHex(this.gasUsed),\n\t\t\ttimestamp: numberToHex(this.timestamp),\n\t\t\textraData: bytesToHex(this.extraData),\n\t\t\tmixHash: bytesToHex(this.mixHash),\n\t\t\tnonce: bytesToHex(this.nonce),\n\t\t}\n\t\tif (this.common.ethjsCommon.isActivatedEIP(1559)) {\n\t\t\tjsonDict.baseFeePerGas = numberToHex(this.baseFeePerGas as bigint)\n\t\t}\n\t\tif (this.common.ethjsCommon.isActivatedEIP(4844)) {\n\t\t\tjsonDict.blobGasUsed = numberToHex(this.blobGasUsed as bigint)\n\t\t\tjsonDict.excessBlobGas = numberToHex(this.excessBlobGas as bigint)\n\t\t}\n\t\tif (this.common.ethjsCommon.isActivatedEIP(4788)) {\n\t\t\tjsonDict.parentBeaconBlockRoot = bytesToHex(this.parentBeaconBlockRoot as Uint8Array)\n\t\t}\n\t\tif (this.common.ethjsCommon.isActivatedEIP(7685)) {\n\t\t\tjsonDict.requestsRoot = bytesToHex(this.requestsRoot as Uint8Array)\n\t\t}\n\t\treturn jsonDict\n\t}\n\n\t/**\n\t * Validates extra data is DAO_ExtraData for DAO_ForceExtraDataRange blocks after DAO\n\t * activation block (see: https://blog.slock.it/hard-fork-specification-24b889e70703)\n\t */\n\tprotected _validateDAOExtraData() {\n\t\tif (this.common.ethjsCommon.hardforkIsActiveOnBlock('dao', this.number) === false) {\n\t\t\treturn\n\t\t}\n\t\tconst DAOActivationBlock = this.common.ethjsCommon.hardforkBlock('dao')\n\t\tif (DAOActivationBlock === null || this.number < DAOActivationBlock) {\n\t\t\treturn\n\t\t}\n\t\tconst DAO_ExtraData = hexToBytes('0x64616f2d686172642d666f726b')\n\t\tconst DAO_ForceExtraDataRange = BigInt(9)\n\t\tconst drift = this.number - DAOActivationBlock\n\t\tif (drift <= DAO_ForceExtraDataRange && !equalsBytes(this.extraData, DAO_ExtraData)) {\n\t\t\tconst msg = this._errorMsg(\n\t\t\t\t`extraData should be 'dao-hard-fork', got ${bytesToUtf8(this.extraData)} (hex: ${bytesToHex(this.extraData)})`,\n\t\t\t)\n\t\t\tthrow new Error(msg)\n\t\t}\n\t}\n\n\t/**\n\t * Return a compact error string representation of the object\n\t */\n\tpublic errorStr() {\n\t\tlet hash = ''\n\t\ttry {\n\t\t\thash = bytesToHex(this.hash())\n\t\t} catch (_e: any) {\n\t\t\thash = 'error'\n\t\t}\n\t\tlet hf = ''\n\t\ttry {\n\t\t\thf = this.common.ethjsCommon.hardfork()\n\t\t} catch (_e: any) {\n\t\t\thf = 'error'\n\t\t}\n\t\tlet errorStr = `block header number=${this.number} hash=${hash} `\n\t\terrorStr += `hf=${hf} baseFeePerGas=${this.baseFeePerGas ?? 'none'}`\n\t\treturn errorStr\n\t}\n\n\t/**\n\t * Helper function to create an annotated error message\n\t *\n\t * @param msg Base error message\n\t * @hidden\n\t */\n\tprotected _errorMsg(msg: string) {\n\t\treturn `${msg} (${this.errorStr()})`\n\t}\n}\n","import type { Common } from '@tevm/common'\nimport { ConsensusType } from '@tevm/common'\nimport { Rlp } from '@tevm/rlp'\nimport { Trie } from '@tevm/trie'\nimport type { FeeMarketEIP1559Transaction, LegacyTransaction, TypedTransaction } from '@tevm/tx'\nimport { BlobEIP4844Transaction, Capability, createTxFromBlockBodyData, createTxFromRLP } from '@tevm/tx'\nimport {\n\ttype AddressLike,\n\tbytesToHex,\n\tbytesToUtf8,\n\tcreateWithdrawal,\n\tequalsBytes,\n\ttype Hex,\n\thexToBytes,\n\tKECCAK256_RLP,\n\tKECCAK256_RLP_ARRAY,\n\tkeccak256,\n\tWithdrawal,\n} from '@tevm/utils'\nimport { ClRequest } from './ClRequest.js'\nimport type { BeaconPayloadJson } from './from-beacon-payload.js'\nimport { executionPayloadFromBeaconPayload } from './from-beacon-payload.js'\nimport { BlockHeader } from './header.js'\nimport type {\n\tBlockBytes,\n\tBlockData,\n\tBlockOptions,\n\tExecutionPayload,\n\tHeaderData,\n\tJsonBlock,\n\tJsonHeader,\n\tVerkleExecutionWitness,\n} from './types.js'\n\n/**\n * An object that represents the block.\n */\nexport class Block {\n\tpublic readonly header: BlockHeader\n\tpublic readonly transactions: TypedTransaction[] = []\n\tpublic readonly uncleHeaders: BlockHeader[] = []\n\tpublic readonly withdrawals?: Withdrawal[] | undefined\n\tpublic readonly requests?: ClRequest[] | undefined\n\tpublic readonly common: Common\n\tprotected keccakFunction: (msg: Uint8Array) => Uint8Array\n\n\t/**\n\t * EIP-6800: Verkle Proof Data (experimental)\n\t * null implies that the non default executionWitness might exist but not available\n\t * and will not lead to execution of the block via vm with verkle stateless manager\n\t */\n\tpublic readonly executionWitness?: VerkleExecutionWitness | null | undefined\n\n\tprotected cache: {\n\t\ttxTrieRoot?: Uint8Array\n\t\twithdrawalsTrieRoot?: Uint8Array\n\t\trequestsRoot?: Uint8Array\n\t} = {}\n\n\t/**\n\t * Returns the withdrawals trie root for array of Withdrawal.\n\t * @param wts array of Withdrawal to compute the root of\n\t * @param optional emptyTrie to use to generate the root\n\t */\n\tpublic static async genWithdrawalsTrieRoot(wts: Withdrawal[], emptyTrie?: Trie) {\n\t\tconst trie = emptyTrie ?? new Trie()\n\t\tfor (const [i, wt] of wts.entries()) {\n\t\t\tawait trie.put(Rlp.encode(i), Rlp.encode(wt.raw()))\n\t\t}\n\t\treturn trie.root()\n\t}\n\n\t/**\n\t * Returns the txs trie root for array of TypedTransaction\n\t * @param txs array of TypedTransaction to compute the root of\n\t * @param optional emptyTrie to use to generate the root\n\t */\n\tpublic static async genTransactionsTrieRoot(txs: TypedTransaction[], emptyTrie?: Trie) {\n\t\tconst trie = emptyTrie ?? new Trie()\n\t\tfor (const [i, tx] of txs.entries()) {\n\t\t\tawait trie.put(Rlp.encode(i), tx.serialize())\n\t\t}\n\t\treturn trie.root()\n\t}\n\n\t/**\n\t * Returns the requests trie root for an array of CLRequests\n\t * @param requests - an array of CLRequests\n\t * @param emptyTrie optional empty trie used to generate the root\n\t * @returns a 32 byte Uint8Array representing the requests trie root\n\t */\n\tpublic static async genRequestsTrieRoot(requests: ClRequest[], emptyTrie?: Trie) {\n\t\t// TODO validate that Requests should be sorted in monotonically ascending order based on type\n\t\t// and whatever internal sorting logic is defined by each request type\n\t\tconst trie = emptyTrie ?? new Trie()\n\t\tfor (const [i, req] of requests.entries()) {\n\t\t\tawait trie.put(Rlp.encode(i), req.serialize())\n\t\t}\n\t\treturn trie.root()\n\t}\n\n\t/**\n\t * Static constructor to create a block from a block data dictionary\n\t *\n\t * @param blockData\n\t * @param opts\n\t * @deprecated Use createBlock() instead - this method is kept for compatibility\n\t */\n\tpublic static fromBlockData(blockData: BlockData, opts: BlockOptions) {\n\t\tconst {\n\t\t\theader: headerData,\n\t\t\ttransactions: txsData,\n\t\t\tuncleHeaders: uhsData,\n\t\t\twithdrawals: withdrawalsData,\n\t\t\texecutionWitness: executionWitnessData,\n\t\t\trequests: clRequests,\n\t\t} = blockData\n\n\t\tconst header = BlockHeader.fromHeaderData(headerData as HeaderData, opts)\n\n\t\t// parse transactions\n\t\tconst transactions: TypedTransaction[] = []\n\t\tfor (const txData of txsData ?? []) {\n\t\t\t// We should make a new tx using header common in case of setHardfork being activated\n\t\t\t// We aren't doing that atm because it causes a bug with impersonated transactions\n\t\t\ttransactions.push(txData as any)\n\t\t}\n\n\t\t// parse uncle headers\n\t\tconst uncleHeaders = []\n\t\t// Disable this option here (all other options carried over), since this overwrites the provided Difficulty to an incorrect value\n\t\tconst { calcDifficultyFromHeader, ...restOpts } = opts\n\t\tconst uncleOpts: BlockOptions = {\n\t\t\t...restOpts,\n\t\t\t// Use header common in case of setHardfork being activated\n\t\t\tcommon: header.common,\n\t\t}\n\t\t// Uncles are obsolete post-merge, any hardfork by option implies setHardfork\n\t\tif (opts?.setHardfork !== undefined) {\n\t\t\tuncleOpts.setHardfork = true\n\t\t}\n\t\tfor (const uhData of uhsData ?? []) {\n\t\t\tconst uh = BlockHeader.fromHeaderData(uhData, uncleOpts)\n\t\t\tuncleHeaders.push(uh)\n\t\t}\n\n\t\tconst withdrawals = withdrawalsData?.map(createWithdrawal)\n\t\t// The witness data is planned to come in rlp serialized bytes so leave this\n\t\t// stub till that time\n\t\tconst executionWitness = executionWitnessData\n\n\t\treturn new Block(opts, header, transactions, uncleHeaders, withdrawals, clRequests, executionWitness)\n\t}\n\n\t/**\n\t * Static constructor to create a block from a RLP-serialized block\n\t *\n\t * @param serialized\n\t * @param opts\n\t * @deprecated Use createBlockFromRLP() instead - this method is kept for compatibility\n\t */\n\tpublic static fromRLPSerializedBlock(serialized: Uint8Array, opts: BlockOptions) {\n\t\tconst values = Rlp.decode(Uint8Array.from(serialized)) as BlockBytes\n\n\t\tif (!Array.isArray(values)) {\n\t\t\tthrow new Error('Invalid serialized block input. Must be array')\n\t\t}\n\n\t\treturn Block.fromValuesArray(values, opts)\n\t}\n\n\t/**\n\t * Static constructor to create a block from an array of Bytes values\n\t *\n\t * @param values\n\t * @param opts\n\t * @deprecated Use createBlockFromValuesArray() instead - this method is kept for compatibility\n\t */\n\tpublic static fromValuesArray(values: BlockBytes, opts: BlockOptions) {\n\t\tif (values.length > 5) {\n\t\t\tthrow new Error(`invalid block. More values=${values.length} than expected were received (at most 5)`)\n\t\t}\n\n\t\t// First try to load header so that we can use its common (in case of setHardfork being activated)\n\t\t// to correctly make checks on the hardforks\n\t\tconst [headerData, txsData, uhsData, withdrawalBytes, requestBytes, executionWitnessBytes] = values\n\t\tconst header = BlockHeader.fromValuesArray(headerData, opts)\n\n\t\tif (\n\t\t\theader.common.ethjsCommon.isActivatedEIP(4895) &&\n\t\t\t(withdrawalBytes === undefined || !Array.isArray(withdrawalBytes))\n\t\t) {\n\t\t\tthrow new Error('Invalid serialized block input: EIP-4895 is active, and no withdrawals were provided as array')\n\t\t}\n\n\t\t// parse transactions\n\t\tconst transactions = []\n\t\tfor (const txData of txsData ?? []) {\n\t\t\ttransactions.push(\n\t\t\t\tcreateTxFromBlockBodyData(txData, {\n\t\t\t\t\t...opts,\n\t\t\t\t\t// Use header common in case of setHardfork being activated\n\t\t\t\t\tcommon: header.common.ethjsCommon,\n\t\t\t\t}),\n\t\t\t)\n\t\t}\n\n\t\t// parse uncle headers\n\t\tconst uncleHeaders = []\n\t\tconst { calcDifficultyFromHeader: _, ...carriedOverUncleOpts } = opts ?? {}\n\t\tconst uncleOpts: BlockOptions = {\n\t\t\t...carriedOverUncleOpts,\n\t\t\t// Use header common in case of setHardfork being activated\n\t\t\tcommon: header.common,\n\t\t}\n\t\t// Uncles are obsolete post-merge, any hardfork by option implies setHardfork\n\t\tif (opts?.setHardfork !== undefined) {\n\t\t\tuncleOpts.setHardfork = true\n\t\t}\n\t\tfor (const uncleHeaderData of uhsData ?? []) {\n\t\t\tuncleHeaders.push(BlockHeader.fromValuesArray(uncleHeaderData, uncleOpts))\n\t\t}\n\n\t\t// TODO this type is fucked\n\t\tconst withdrawals = (withdrawalBytes as unknown as Array<[number, number, AddressLike, number]>)\n\t\t\t?.map(([index, validatorIndex, address, amount]) => ({\n\t\t\t\tindex: index,\n\t\t\t\tvalidatorIndex: validatorIndex,\n\t\t\t\taddress: address,\n\t\t\t\tamount: amount,\n\t\t\t}))\n\t\t\t?.map((w) => createWithdrawal(w))\n\n\t\tlet requests: ClRequest[] = []\n\t\tif (header.common.ethjsCommon.isActivatedEIP(7685)) {\n\t\t\trequests = (requestBytes as Uint8Array[]).map((bytes) => new ClRequest(bytes[0] as number, bytes.slice(1)))\n\t\t}\n\t\t// executionWitness are not part of the EL fetched blocks via eth_ bodies method\n\t\t// they are currently only available via the engine api constructed blocks\n\t\tlet executionWitness: VerkleExecutionWitness | null = null\n\t\tif (header.common.ethjsCommon.isActivatedEIP(6800)) {\n\t\t\tif (executionWitnessBytes !== undefined) {\n\t\t\t\texecutionWitness = JSON.parse(bytesToUtf8(Rlp.decode(executionWitnessBytes) as Uint8Array))\n\t\t\t} else if (opts?.executionWitness !== undefined) {\n\t\t\t\texecutionWitness = opts.executionWitness\n\t\t\t} else {\n\t\t\t\t// don't assign default witness if eip 6800 is implemented as it leads to incorrect\n\t\t\t\t// assumptions while executing the block. if not present in input implies its unavailable\n\t\t\t\texecutionWitness = null\n\t\t\t}\n\t\t}\n\n\t\treturn new Block(opts, header, transactions, uncleHeaders, withdrawals, requests, executionWitness)\n\t}\n\n\t/**\n\t *  Method to retrieve a block from an execution payload\n\t * @param execution payload constructed from beacon payload\n\t * @param opts {@link BlockOptions}\n\t * @returns the block constructed block\n\t */\n\tpublic static async fromExecutionPayload(payload: ExecutionPayload, opts: BlockOptions): Promise<Block> {\n\t\tconst {\n\t\t\tblockNumber: number,\n\t\t\treceiptsRoot: receiptTrie,\n\t\t\tprevRandao: mixHash,\n\t\t\tfeeRecipient: coinbase,\n\t\t\ttransactions,\n\t\t\twithdrawals: withdrawalsData,\n\t\t\trequestsRoot,\n\t\t\texecutionWitness,\n\t\t} = payload\n\n\t\tconst txs = []\n\t\tfor (const [index, serializedTx] of transactions.entries()) {\n\t\t\ttry {\n\t\t\t\tconst tx = createTxFromRLP(hexToBytes(serializedTx as Hex), {\n\t\t\t\t\tcommon: opts?.common.ethjsCommon,\n\t\t\t\t})\n\t\t\t\ttxs.push(tx)\n\t\t\t} catch (error) {\n\t\t\t\tconst validationError = `Invalid tx at index ${index}: ${error}`\n\t\t\t\tthrow validationError\n\t\t\t}\n\t\t}\n\n\t\tconst reqRoot = requestsRoot === null ? undefined : requestsRoot\n\t\tconst transactionsTrie = await Block.genTransactionsTrieRoot(txs, new Trie({ common: opts?.common.ethjsCommon }))\n\t\tconst withdrawals = withdrawalsData?.map((wData) => createWithdrawal(wData))\n\t\tconst withdrawalsRoot = withdrawals\n\t\t\t? await Block.genWithdrawalsTrieRoot(withdrawals, new Trie({ common: opts?.common.ethjsCommon }))\n\t\t\t: undefined\n\t\tconst header: HeaderData = {\n\t\t\t...payload,\n\t\t\tnumber,\n\t\t\treceiptTrie,\n\t\t\ttransactionsTrie,\n\t\t\twithdrawalsRoot,\n\t\t\tmixHash,\n\t\t\tcoinbase,\n\t\t\trequestsRoot: reqRoot,\n\t\t} as HeaderData\n\n\t\t// we are not setting setHardfork as common is already set to the correct hf\n\t\tconst block = Block.fromBlockData({ header, transactions: txs, withdrawals, executionWitness } as BlockData, opts)\n\t\tif (\n\t\t\tblock.common.ethjsCommon.isActivatedEIP(6800) &&\n\t\t\t(executionWitness === undefined || executionWitness === null)\n\t\t) {\n\t\t\tthrow Error('Missing executionWitness for EIP-6800 activated executionPayload')\n\t\t}\n\t\t// Verify blockHash matches payload\n\t\tif (!equalsBytes(block.hash(), hexToBytes(payload.blockHash as Hex))) {\n\t\t\tconst validationError = `Invalid blockHash, expected: ${payload.blockHash}, received: ${bytesToHex(block.hash())}`\n\t\t\tthrow Error(validationError)\n\t\t}\n\n\t\treturn block\n\t}\n\n\t/**\n\t *  Method to retrieve a block from a beacon payload json\n\t * @param payload json of a beacon beacon fetched from beacon apis\n\t * @param opts {@link BlockOptions}\n\t * @returns the block constructed block\n\t */\n\tpublic static async fromBeaconPayloadJson(payload: BeaconPayloadJson, opts: BlockOptions): Promise<Block> {\n\t\tconst executionPayload = executionPayloadFromBeaconPayload(payload)\n\t\treturn Block.fromExecutionPayload(executionPayload, opts)\n\t}\n\n\t/**\n\t * This constructor takes the values, validates them, assigns them and freezes the object.\n\t * Use the static factory methods to assist in creating a Block object from varying data types and options.\n\t */\n\tconstructor(\n\t\topts: BlockOptions,\n\t\theader?: BlockHeader,\n\t\ttransactions: TypedTransaction[] = [],\n\t\tuncleHeaders: BlockHeader[] = [],\n\t\twithdrawals?: Withdrawal[],\n\t\trequests?: ClRequest[],\n\t\texecutionWitness?: VerkleExecutionWitness | null,\n\t) {\n\t\tthis.header = header ?? BlockHeader.fromHeaderData({}, opts)\n\t\tthis.common = this.header.common\n\t\tthis.keccakFunction = this.common.ethjsCommon.customCrypto.keccak256 ?? ((item) => keccak256(item, 'bytes'))\n\n\t\tthis.transactions = transactions\n\t\tthis.withdrawals = withdrawals ?? (this.common.ethjsCommon.isActivatedEIP(4895) ? [] : undefined)\n\t\tthis.executionWitness = executionWitness\n\t\tthis.requests = requests ?? (this.common.ethjsCommon.isActivatedEIP(7685) ? [] : undefined)\n\t\t// null indicates an intentional absence of value or unavailability\n\t\t// undefined indicates that the executionWitness should be initialized with the default state\n\t\tif (this.common.ethjsCommon.isActivatedEIP(6800) && this.executionWitness === undefined) {\n\t\t\tthis.executionWitness = {\n\t\t\t\tstateDiff: [],\n\t\t\t\tverkleProof: {\n\t\t\t\t\tcommitmentsByPath: [],\n\t\t\t\t\td: '0x',\n\t\t\t\t\tdepthExtensionPresent: '0x',\n\t\t\t\t\tipaProof: {\n\t\t\t\t\t\tcl: [],\n\t\t\t\t\t\tcr: [],\n\t\t\t\t\t\tfinalEvaluation: '0x',\n\t\t\t\t\t},\n\t\t\t\t\totherStems: [],\n\t\t\t\t},\n\t\t\t}\n\t\t}\n\n\t\tthis.uncleHeaders = uncleHeaders\n\t\tif (uncleHeaders.length > 0) {\n\t\t\tthis.validateUncles()\n\t\t\tif (this.common.ethjsCommon.consensusType() === ConsensusType.ProofOfAuthority) {\n\t\t\t\tconst msg = this._errorMsg('Block initialization with uncleHeaders on a PoA network is not allowed')\n\t\t\t\tthrow new Error(msg)\n\t\t\t}\n\t\t\tif (this.common.ethjsCommon.consensusType() === ConsensusType.ProofOfStake) {\n\t\t\t\tconst msg = this._errorMsg('Block initialization with uncleHeaders on a PoS network is not allowed')\n\t\t\t\tthrow new Error(msg)\n\t\t\t}\n\t\t}\n\n\t\tif (!this.common.ethjsCommon.isActivatedEIP(4895) && withdrawals !== undefined) {\n\t\t\tthrow new Error('Cannot have a withdrawals field if EIP 4895 is not active')\n\t\t}\n\n\t\tif (!this.common.ethjsCommon.isActivatedEIP(6800) && executionWitness !== undefined && executionWitness !== null) {\n\t\t\tthrow new Error('Cannot have executionWitness field if EIP 6800 is not active ')\n\t\t}\n\n\t\tif (!this.common.ethjsCommon.isActivatedEIP(7685) && requests !== undefined) {\n\t\t\tthrow new Error('Cannot have requests field if EIP 7685 is not active')\n\t\t}\n\n\t\t// Requests should be sorted in monotonically ascending order based on type\n\t\t// and whatever internal sorting logic is defined by each request type\n\t\tif (requests !== undefined && requests.length > 1) {\n\t\t\tfor (let x = 1; x < requests.length; x++) {\n\t\t\t\tif ((requests[x] as { type: number }).type < (requests[x - 1] as { type: number }).type)\n\t\t\t\t\tthrow new Error('requests are not sorted in ascending order')\n\t\t\t}\n\t\t}\n\t\tconst freeze = opts?.freeze ?? true\n\t\tif (freeze) {\n\t\t\tObject.freeze(this)\n\t\t}\n\t}\n\n\t/**\n\t * Returns a Array of the raw Bytes Arrays of this block, in order.\n\t */\n\traw(): BlockBytes {\n\t\tconst bytesArray = <BlockBytes>[\n\t\t\tthis.header.raw(),\n\t\t\tthis.transactions.map((tx) =>\n\t\t\t\ttx.supports(Capability.EIP2718TypedTransaction) ? tx.serialize() : tx.raw(),\n\t\t\t) as Uint8Array[],\n\t\t\tthis.uncleHeaders.map((uh) => uh.raw()),\n\t\t]\n\t\tconst withdrawalsRaw = this.withdrawals?.map((wt) => wt.raw())\n\t\tif (withdrawalsRaw) {\n\t\t\tbytesArray.push(withdrawalsRaw)\n\t\t}\n\t\tif (this.executionWitness !== undefined && this.executionWitness !== null) {\n\t\t\tconst executionWitnessBytes = Rlp.encode(JSON.stringify(this.executionWitness))\n\t\t\tbytesArray.push(executionWitnessBytes as any)\n\t\t}\n\t\treturn bytesArray\n\t}\n\n\t/**\n\t * Returns the hash of the block.\n\t */\n\thash(): Uint8Array {\n\t\treturn this.header.hash()\n\t}\n\n\t/**\n\t * Determines if this block is the genesis block.\n\t */\n\tisGenesis(): boolean {\n\t\treturn this.header.isGenesis()\n\t}\n\n\t/**\n\t * Returns the rlp encoding of the block.\n\t */\n\tserialize(): Uint8Array {\n\t\treturn Rlp.encode(this.raw())\n\t}\n\n\t/**\n\t * Generates transaction trie for validation.\n\t */\n\tasync genTxTrie(): Promise<Uint8Array> {\n\t\treturn Block.genTransactionsTrieRoot(this.transactions, new Trie({ common: this.common.ethjsCommon }))\n\t}\n\n\t/**\n\t * Validates the transaction trie by generating a trie\n\t * and do a check on the root hash.\n\t * @returns True if the transaction trie is valid, false otherwise\n\t */\n\tasync transactionsTrieIsValid(): Promise<boolean> {\n\t\tlet result: boolean\n\t\tif (this.transactions.length === 0) {\n\t\t\tresult = equalsBytes(this.header.transactionsTrie, KECCAK256_RLP)\n\t\t\treturn result\n\t\t}\n\n\t\tif (this.cache.txTrieRoot === undefined) {\n\t\t\tthis.cache.txTrieRoot = await this.genTxTrie()\n\t\t}\n\t\tresult = equalsBytes(this.cache.txTrieRoot, this.header.transactionsTrie)\n\t\treturn result\n\t}\n\n\tasync requestsTrieIsValid(): Promise<boolean> {\n\t\tif (!this.common.ethjsCommon.isActivatedEIP(7685)) {\n\t\t\tthrow new Error('EIP 7685 is not activated')\n\t\t}\n\n\t\tlet result: boolean\n\t\tif (this.requests?.length === 0) {\n\t\t\tresult = equalsBytes(this.header.requestsRoot as Uint8Array, KECCAK256_RLP)\n\t\t\treturn result\n\t\t}\n\n\t\tif (this.cache.requestsRoot === undefined) {\n\t\t\tthis.cache.requestsRoot = await Block.genRequestsTrieRoot(this.requests ?? [])\n\t\t}\n\n\t\tresult = equalsBytes(this.cache.requestsRoot, this.header.requestsRoot as Uint8Array)\n\n\t\treturn result\n\t}\n\t/**\n\t * Validates transaction signatures and minimum gas requirements.\n\t * @returns {string[]} an array of error strings\n\t */\n\tgetTransactionsValidationErrors(): string[] {\n\t\tconst errors: string[] = []\n\t\tlet blobGasUsed = 0n\n\t\tconst blobGasLimit = this.common.ethjsCommon.param('maxblobGasPerBlock')\n\t\tconst blobGasPerBlob = this.common.ethjsCommon.param('blobGasPerBlob')\n\n\t\t// eslint-disable-next-line prefer-const\n\t\tfor (let [i, tx] of this.transactions.entries()) {\n\t\t\tconst errs = tx.getValidationErrors()\n\t\t\tif (this.common.ethjsCommon.isActivatedEIP(1559)) {\n\t\t\t\tif (tx.supports(Capability.EIP1559FeeMarket)) {\n\t\t\t\t\ttx = tx as FeeMarketEIP1559Transaction\n\t\t\t\t\tif (tx.maxFeePerGas < (this.header.baseFeePerGas as bigint)) {\n\t\t\t\t\t\terrs.push('tx unable to pay base fee (EIP-1559 tx)')\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ttx = tx as LegacyTransaction\n\t\t\t\t\tif (tx.gasPrice < (this.header.baseFeePerGas as bigint)) {\n\t\t\t\t\t\terrs.push('tx unable to pay base fee (non EIP-1559 tx)')\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.common.ethjsCommon.isActivatedEIP(4844)) {\n\t\t\t\tif (tx instanceof BlobEIP4844Transaction) {\n\t\t\t\t\tblobGasUsed += BigInt(tx.numBlobs()) * blobGasPerBlob\n\t\t\t\t\tif (blobGasUsed > blobGasLimit) {\n\t\t\t\t\t\terrs.push(\n\t\t\t\t\t\t\t`tx causes total blob gas of ${blobGasUsed} to exceed maximum blob gas per block of ${blobGasLimit}`,\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\tif (errs.length > 0) {\n\t\t\t\terrors.push(`errors at tx ${i}: ${errs.join(', ')}`)\n\t\t\t}\n\t\t}\n\n\t\tif (this.common.ethjsCommon.isActivatedEIP(4844)) {\n\t\t\tif (blobGasUsed !== this.header.blobGasUsed) {\n\t\t\t\terrors.push(`invalid blobGasUsed expected=${this.header.blobGasUsed} actual=${blobGasUsed}`)\n\t\t\t}\n\t\t}\n\n\t\treturn errors\n\t}\n\n\t/**\n\t * Validates transaction signatures and minimum gas requirements.\n\t * @returns True if all transactions are valid, false otherwise\n\t */\n\ttransactionsAreValid(): boolean {\n\t\tconst errors = this.getTransactionsValidationErrors()\n\n\t\treturn errors.length === 0\n\t}\n\n\t/**\n\t * Validates the block data, throwing if invalid.\n\t * This can be checked on the Block itself without needing access to any parent block\n\t * It checks:\n\t * - All transactions are valid\n\t * - The transactions trie is valid\n\t * - The uncle hash is valid\n\t * @param onlyHeader if only passed the header, skip validating txTrie and unclesHash (default: false)\n\t * @param verifyTxs if set to `false`, will not check for transaction validation errors (default: true)\n\t */\n\tasync validateData(onlyHeader = false, verifyTxs = true): Promise<void> {\n\t\tif (verifyTxs) {\n\t\t\tconst txErrors = this.getTransactionsValidationErrors()\n\t\t\tif (txErrors.length > 0) {\n\t\t\t\tconst msg = this._errorMsg(`invalid transactions: ${txErrors.join(' ')}`)\n\t\t\t\tthrow new Error(msg)\n\t\t\t}\n\t\t}\n\n\t\tif (onlyHeader) {\n\t\t\treturn\n\t\t}\n\n\t\tif (verifyTxs) {\n\t\t\tfor (const [index, tx] of this.transactions.entries()) {\n\t\t\t\tif (!tx.isSigned()) {\n\t\t\t\t\tconst msg = this._errorMsg(`invalid transactions: transaction at index ${index} is unsigned`)\n\t\t\t\t\tthrow new Error(msg)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!(await this.transactionsTrieIsValid())) {\n\t\t\tconst msg = this._errorMsg('invalid transaction trie')\n\t\t\tthrow new Error(msg)\n\t\t}\n\n\t\tif (!this.uncleHashIsValid()) {\n\t\t\tconst msg = this._errorMsg('invalid uncle hash')\n\t\t\tthrow new Error(msg)\n\t\t}\n\n\t\tif (this.common.ethjsCommon.isActivatedEIP(4895) && !(await this.withdrawalsTrieIsValid())) {\n\t\t\tconst msg = this._errorMsg('invalid withdrawals trie')\n\t\t\tthrow new Error(msg)\n\t\t}\n\n\t\t// Validation for Verkle blocks\n\t\t// Unnecessary in this implementation since we're providing defaults if those fields are undefined\n\t\tif (this.common.ethjsCommon.isActivatedEIP(6800)) {\n\t\t\tif (this.executionWitness === undefined) {\n\t\t\t\tthrow new Error('Invalid block: missing executionWitness')\n\t\t\t}\n\t\t\tif (this.executionWitness === null) {\n\t\t\t\tthrow new Error('Invalid block: ethereumjs stateless client needs executionWitness')\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Validates that blob gas fee for each transaction is greater than or equal to the\n\t * blobGasPrice for the block and that total blob gas in block is less than maximum\n\t * blob gas per block\n\t * @param parentHeader header of parent block\n\t */\n\tvalidateBlobTransactions(parentHeader: BlockHeader) {\n\t\tif (this.common.ethjsCommon.isActivatedEIP(4844)) {\n\t\t\tconst blobGasLimit = this.common.ethjsCommon.param('maxblobGasPerBlock')\n\t\t\tconst blobGasPerBlob = this.common.ethjsCommon.param('blobGasPerBlob')\n\t\t\tlet blobGasUsed = 0n\n\n\t\t\tconst expectedExcessBlobGas = parentHeader.calcNextExcessBlobGas()\n\t\t\tif (this.header.excessBlobGas !== expectedExcessBlobGas) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`block excessBlobGas mismatch: have ${this.header.excessBlobGas}, want ${expectedExcessBlobGas}`,\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tlet blobGasPrice: bigint = this.header.getBlobGasPrice()\n\n\t\t\tfor (const tx of this.transactions) {\n\t\t\t\tif (tx instanceof BlobEIP4844Transaction) {\n\t\t\t\t\tblobGasPrice = blobGasPrice ?? this.header.getBlobGasPrice()\n\t\t\t\t\tif (tx.maxFeePerBlobGas < blobGasPrice) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`blob transaction maxFeePerBlobGas ${\n\t\t\t\t\t\t\t\ttx.maxFeePerBlobGas\n\t\t\t\t\t\t\t} < than block blob gas price ${blobGasPrice} - ${this.errorStr()}`,\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\n\t\t\t\t\tblobGasUsed += BigInt(tx.blobVersionedHashes.length) * blobGasPerBlob\n\n\t\t\t\t\tif (blobGasUsed > blobGasLimit) {\n\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t`tx causes total blob gas of ${blobGasUsed} to exceed maximum blob gas per block of ${blobGasLimit}`,\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.header.blobGasUsed !== blobGasUsed) {\n\t\t\t\tthrow new Error(`block blobGasUsed mismatch: have ${this.header.blobGasUsed}, want ${blobGasUsed}`)\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Validates the uncle's hash.\n\t * @returns true if the uncle's hash is valid, false otherwise.\n\t */\n\tuncleHashIsValid(): boolean {\n\t\tif (this.uncleHeaders.length === 0) {\n\t\t\treturn equalsBytes(KECCAK256_RLP_ARRAY, this.header.uncleHash)\n\t\t}\n\t\tconst uncles = this.uncleHeaders.map((uh) => uh.raw())\n\t\tconst raw = Rlp.encode(uncles)\n\t\treturn equalsBytes(this.keccakFunction(raw), this.header.uncleHash)\n\t}\n\n\t/**\n\t * Validates the withdrawal root\n\t * @returns true if the withdrawals trie root is valid, false otherwise\n\t */\n\tasync withdrawalsTrieIsValid(): Promise<boolean> {\n\t\tif (!this.common.ethjsCommon.isActivatedEIP(4895)) {\n\t\t\tthrow new Error('EIP 4895 is not activated')\n\t\t}\n\n\t\tlet result: boolean\n\t\tif (this.withdrawals?.length === 0) {\n\t\t\tresult = equalsBytes(this.header.withdrawalsRoot as Uint8Array, KECCAK256_RLP)\n\t\t\treturn result\n\t\t}\n\n\t\tif (this.cache.withdrawalsTrieRoot === undefined) {\n\t\t\tthis.cache.withdrawalsTrieRoot = await Block.genWithdrawalsTrieRoot(\n\t\t\t\tthis.withdrawals ?? [],\n\t\t\t\tnew Trie({ common: this.common.ethjsCommon }),\n\t\t\t)\n\t\t}\n\t\tresult = equalsBytes(this.cache.withdrawalsTrieRoot, this.header.withdrawalsRoot as Uint8Array)\n\t\treturn result\n\t}\n\n\t/**\n\t * Consistency checks for uncles included in the block, if any.\n\t *\n\t * Throws if invalid.\n\t *\n\t * The rules for uncles checked are the following:\n\t * Header has at most 2 uncles.\n\t * Header does not count an uncle twice.\n\t */\n\tvalidateUncles() {\n\t\tif (this.isGenesis()) {\n\t\t\treturn\n\t\t}\n\n\t\t// Header has at most 2 uncles\n\t\tif (this.uncleHeaders.length > 2) {\n\t\t\tconst msg = this._errorMsg('too many uncle headers')\n\t\t\tthrow new Error(msg)\n\t\t}\n\n\t\t// Header does not count an uncle twice.\n\t\tconst uncleHashes = this.uncleHeaders.map((header) => bytesToHex(header.hash()))\n\t\tif (!(new Set(uncleHashes).size === uncleHashes.length)) {\n\t\t\tconst msg = this._errorMsg('duplicate uncles')\n\t\t\tthrow new Error(msg)\n\t\t}\n\t}\n\n\t/**\n\t * Returns the canonical difficulty for this block.\n\t *\n\t * @param parentBlock - the parent of this `Block`\n\t */\n\tethashCanonicalDifficulty(parentBlock: Block): bigint {\n\t\treturn this.header.ethashCanonicalDifficulty(parentBlock.header)\n\t}\n\n\t/**\n\t * Validates if the block gasLimit remains in the boundaries set by the protocol.\n\t * Throws if invalid\n\t *\n\t * @param parentBlock - the parent of this `Block`\n\t */\n\tvalidateGasLimit(parentBlock: Block) {\n\t\treturn this.header.validateGasLimit(parentBlock.header)\n\t}\n\n\t/**\n\t * Returns the block in JSON format.\n\t */\n\ttoJSON(): JsonBlock {\n\t\tconst withdrawalsAttr = this.withdrawals\n\t\t\t? {\n\t\t\t\t\twithdrawals: this.withdrawals.map((wt) => wt.toJSON()),\n\t\t\t\t}\n\t\t\t: {}\n\t\treturn {\n\t\t\theader: this.header.toJSON(),\n\t\t\ttransactions: this.transactions.map((tx) => tx.toJSON()),\n\t\t\tuncleHeaders: this.uncleHeaders.map((uh) => uh.toJSON()),\n\t\t\t...withdrawalsAttr,\n\t\t\trequests: this.requests?.map((req) => bytesToHex(req.serialize())),\n\t\t} as JsonBlock\n\t}\n\n\ttoExecutionPayload(): ExecutionPayload {\n\t\tconst blockJson = this.toJSON()\n\t\tconst header = blockJson.header as JsonHeader\n\t\tconst transactions = this.transactions.map((tx) => bytesToHex(tx.serialize())) ?? []\n\t\tconst withdrawalsArr = blockJson.withdrawals ? { withdrawals: blockJson.withdrawals } : {}\n\n\t\tconst executionPayload: ExecutionPayload = {\n\t\t\tblockNumber: header.number,\n\t\t\tparentHash: header.parentHash,\n\t\t\tfeeRecipient: header.coinbase,\n\t\t\tstateRoot: header.stateRoot,\n\t\t\treceiptsRoot: header.receiptTrie,\n\t\t\tlogsBloom: header.logsBloom,\n\t\t\tgasLimit: header.gasLimit,\n\t\t\tgasUsed: header.gasUsed,\n\t\t\ttimestamp: header.timestamp,\n\t\t\textraData: header.extraData,\n\t\t\tbaseFeePerGas: header.baseFeePerGas,\n\t\t\tblobGasUsed: header.blobGasUsed,\n\t\t\texcessBlobGas: header.excessBlobGas,\n\t\t\tblockHash: bytesToHex(this.hash()),\n\t\t\tprevRandao: header.mixHash,\n\t\t\ttransactions,\n\t\t\t...withdrawalsArr,\n\t\t\tparentBeaconBlockRoot: header.parentBeaconBlockRoot,\n\t\t\texecutionWitness: this.executionWitness,\n\t\t} as ExecutionPayload\n\n\t\treturn executionPayload\n\t}\n\n\t/**\n\t * Return a compact error string representation of the object\n\t */\n\tpublic errorStr() {\n\t\tlet hash = ''\n\t\ttry {\n\t\t\thash = bytesToHex(this.hash())\n\t\t} catch (_e: any) {\n\t\t\thash = 'error'\n\t\t}\n\t\tlet hf = ''\n\t\ttry {\n\t\t\thf = this.common.ethjsCommon.hardfork()\n\t\t} catch (_e: any) {\n\t\t\thf = 'error'\n\t\t}\n\t\tlet errorStr = `block number=${this.header.number} hash=${hash} `\n\t\terrorStr += `hf=${hf} baseFeePerGas=${this.header.baseFeePerGas ?? 'none'} `\n\t\terrorStr += `txs=${this.transactions.length} uncles=${this.uncleHeaders.length}`\n\t\treturn errorStr\n\t}\n\n\t/**\n\t * Internal helper function to create an annotated error message\n\t *\n\t * @param msg Base error message\n\t * @hidden\n\t */\n\tprotected _errorMsg(msg: string) {\n\t\treturn `${msg} (${this.errorStr()})`\n\t}\n}\n","import type { Hex } from '@tevm/utils'\nimport { BlockHeader } from './header.js'\nimport { numberToHex } from './helpers.js'\n\nimport type { BlockOptions, JsonRpcBlock } from './types.js'\n\n/**\n * Creates a new block header object from Ethereum JSON RPC.\n *\n * @param blockParams - Ethereum JSON RPC of block (eth_getBlockByNumber)\n * @param options - An object describing the blockchain\n */\nexport function blockHeaderFromRpc(blockParams: JsonRpcBlock, options: BlockOptions) {\n\tconst {\n\t\tparentHash,\n\t\tsha3Uncles,\n\t\tminer,\n\t\tstateRoot,\n\t\ttransactionsRoot,\n\t\treceiptsRoot,\n\t\tlogsBloom,\n\t\tdifficulty,\n\t\tnumber,\n\t\tgasLimit,\n\t\tgasUsed,\n\t\ttimestamp,\n\t\textraData,\n\t\tmixHash,\n\t\tnonce,\n\t\tbaseFeePerGas,\n\t\twithdrawalsRoot,\n\t\tblobGasUsed,\n\t\texcessBlobGas,\n\t\tparentBeaconBlockRoot,\n\t\trequestsRoot,\n\t} = blockParams\n\n\tconst blockHeader = BlockHeader.fromHeaderData(\n\t\t{\n\t\t\tparentHash,\n\t\t\tuncleHash: sha3Uncles,\n\t\t\tcoinbase: miner,\n\t\t\tstateRoot,\n\t\t\ttransactionsTrie: transactionsRoot,\n\t\t\treceiptTrie: receiptsRoot,\n\t\t\tlogsBloom,\n\t\t\tdifficulty: numberToHex(difficulty) as Hex,\n\t\t\tnumber,\n\t\t\tgasLimit,\n\t\t\tgasUsed,\n\t\t\ttimestamp,\n\t\t\textraData,\n\t\t\tmixHash: mixHash as Hex,\n\t\t\tnonce,\n\t\t\tbaseFeePerGas: baseFeePerGas as string,\n\t\t\twithdrawalsRoot: withdrawalsRoot as string,\n\t\t\tblobGasUsed: blobGasUsed as string,\n\t\t\texcessBlobGas: excessBlobGas as string,\n\t\t\tparentBeaconBlockRoot: parentBeaconBlockRoot as string,\n\t\t\trequestsRoot: requestsRoot as string,\n\t\t},\n\t\toptions,\n\t)\n\n\treturn blockHeader\n}\n","import { InternalError, MisconfiguredClientError } from '@tevm/errors'\nimport type { TypedTransaction } from '@tevm/tx'\nimport { TransactionFactory } from '@tevm/tx'\nimport { type Hex, hexToBytes, setLengthLeft, TypeOutput, toBytes, toType } from '@tevm/utils'\nimport { ClRequest } from './ClRequest.js'\nimport { blockHeaderFromRpc } from './header-from-rpc.js'\nimport type { BlockData, BlockOptions, JsonRpcBlock } from './index.js'\nimport { Block } from './index.js'\n\nfunction normalizeTxParams(_txParams: any) {\n\tconst txParams = Object.assign({}, _txParams)\n\n\ttxParams.gasLimit = toType(txParams.gasLimit ?? txParams.gas, TypeOutput.BigInt)\n\ttxParams.data = txParams.data === undefined ? txParams.input : txParams.data\n\n\t// check and convert gasPrice and value params\n\ttxParams.gasPrice = txParams.gasPrice !== undefined ? BigInt(txParams.gasPrice) : undefined\n\ttxParams.value = txParams.value !== undefined ? BigInt(txParams.value) : undefined\n\n\t// strict byte length checking\n\ttxParams.to = txParams.to !== null && txParams.to !== undefined ? setLengthLeft(toBytes(txParams.to), 20) : null\n\n\ttxParams.v = toType(txParams.v, TypeOutput.BigInt)\n\n\treturn txParams\n}\n\n/**\n * Creates a new block object from Ethereum JSON RPC.\n *\n * @param blockParams - Ethereum JSON RPC of block (eth_getBlockByNumber)\n * @param uncles - Optional list of Ethereum JSON RPC of uncles (eth_getUncleByBlockHashAndIndex)\n * @param options - An object describing the blockchain\n * @deprecated\n */\nexport function blockFromRpc(blockParams: JsonRpcBlock, options: BlockOptions, uncles: any[] = []) {\n\tconst header = blockHeaderFromRpc(blockParams, options)\n\n\tconst transactions: TypedTransaction[] = []\n\tconst opts = { common: header.common.ethjsCommon }\n\tfor (const _txParams of blockParams.transactions ?? []) {\n\t\tconst txParams = normalizeTxParams(_txParams)\n\t\ttry {\n\t\t\tconst tx = TransactionFactory(txParams, opts)\n\t\t\ttransactions.push(tx)\n\t\t} catch (e) {\n\t\t\tif (e instanceof Error && e.message.includes('The chain ID does not match the chain ID of Common.')) {\n\t\t\t\tthrow new MisconfiguredClientError(\n\t\t\t\t\t'Detected that forked blocks do not have same chain id as the tevm client. To fix this explicitly pass in a `common` property with correct chain id',\n\t\t\t\t)\n\t\t\t}\n\t\t\tif (e instanceof Error) {\n\t\t\t\tthrow new InternalError(e.message, { cause: e })\n\t\t\t}\n\t\t\tthrow new InternalError('Unexpected error', { cause: e })\n\t\t}\n\t}\n\n\tconst uncleHeaders = uncles.map((uh) => blockHeaderFromRpc(uh, options))\n\n\tconst requests = blockParams.requests?.map((req) => {\n\t\tconst bytes = hexToBytes(req as Hex)\n\t\treturn new ClRequest(bytes[0] as number, bytes.slice(1))\n\t})\n\treturn Block.fromBlockData(\n\t\t{\n\t\t\theader,\n\t\t\ttransactions,\n\t\t\tuncleHeaders,\n\t\t\twithdrawals: blockParams.withdrawals,\n\t\t\trequests,\n\t\t} as BlockData,\n\t\toptions,\n\t)\n}\n","export { Block } from './block.js'\nexport { ClRequest } from './ClRequest.js'\nexport { type BeaconPayloadJson, executionPayloadFromBeaconPayload } from './from-beacon-payload.js'\nexport { blockFromRpc } from './from-rpc.js'\nexport { BlockHeader } from './header.js'\nexport { getDifficulty, valuesArrayToHeaderData } from './helpers.js'\nexport * from './types.js'\n\nimport { Block } from './block.js'\nimport type { BeaconPayloadJson } from './from-beacon-payload.js'\nimport { BlockHeader } from './header.js'\nimport type { BlockBytes, BlockData, BlockHeaderBytes, BlockOptions, ExecutionPayload, HeaderData } from './types.js'\n\n/**\n * Creates a block from a block data dictionary\n * @param blockData - The block data\n * @param opts - Options for the block\n * @returns A new Block instance\n * @see Block.fromBlockData\n */\nexport function createBlock(blockData: BlockData, opts: BlockOptions): Block {\n\treturn Block.fromBlockData(blockData, opts)\n}\n\n/**\n * Creates a block from a RLP-serialized block\n * @param serialized - The serialized block data\n * @param opts - Options for the block\n * @returns A new Block instance\n * @see Block.fromRLPSerializedBlock\n */\nexport function createBlockFromRLP(serialized: Uint8Array, opts: BlockOptions): Block {\n\treturn Block.fromRLPSerializedBlock(serialized, opts)\n}\n\n/**\n * Creates a block from an array of Bytes values\n * @param values - The block values array\n * @param opts - Options for the block\n * @returns A new Block instance\n * @see Block.fromValuesArray\n */\nexport function createBlockFromValuesArray(values: BlockBytes, opts: BlockOptions): Block {\n\treturn Block.fromValuesArray(values, opts)\n}\n\n/**\n * Creates a block from an execution payload\n * @param payload - The execution payload\n * @param opts - Options for the block\n * @returns A promise that resolves to a new Block instance\n * @see Block.fromExecutionPayload\n */\nexport async function createBlockFromExecutionPayload(payload: ExecutionPayload, opts: BlockOptions): Promise<Block> {\n\treturn Block.fromExecutionPayload(payload, opts)\n}\n\n/**\n * Creates a block from a beacon payload JSON\n * @param payload - The beacon payload JSON\n * @param opts - Options for the block\n * @returns A promise that resolves to a new Block instance\n * @see Block.fromBeaconPayloadJson\n */\nexport async function createBlockFromBeaconPayload(payload: BeaconPayloadJson, opts: BlockOptions): Promise<Block> {\n\treturn Block.fromBeaconPayloadJson(payload, opts)\n}\n\n/**\n * Creates a block header from header data\n * @param headerData - The header data\n * @param opts - Options for the block header\n * @returns A new BlockHeader instance\n * @see BlockHeader.fromHeaderData\n */\nexport function createBlockHeader(headerData: HeaderData, opts: BlockOptions): BlockHeader {\n\treturn BlockHeader.fromHeaderData(headerData, opts)\n}\n\n/**\n * Creates a block header from a RLP-serialized header\n * @param serializedHeaderData - The serialized header data\n * @param opts - Options for the block header\n * @returns A new BlockHeader instance\n * @see BlockHeader.fromRLPSerializedHeader\n */\nexport function createBlockHeaderFromRLP(serializedHeaderData: Uint8Array, opts: BlockOptions): BlockHeader {\n\treturn BlockHeader.fromRLPSerializedHeader(serializedHeaderData, opts)\n}\n\n/**\n * Creates a block header from an array of Bytes values\n * @param values - The header values array\n * @param opts - Options for the block header\n * @returns A new BlockHeader instance\n * @see BlockHeader.fromValuesArray\n */\nexport function createBlockHeaderFromValuesArray(values: BlockHeaderBytes, opts: BlockOptions): BlockHeader {\n\treturn BlockHeader.fromValuesArray(values, opts)\n}\n"]}