From 6c210789889aae9c6b7f447eaedc63855f2b10ff Mon Sep 17 00:00:00 2001 From: Ardis Lu Date: Tue, 13 May 2025 22:34:06 -0700 Subject: [PATCH] Support Pectra block headers --- calculate.js | 6 ++++++ calculate.test.js | 29 +++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/calculate.js b/calculate.js index 5983a44..f016198 100644 --- a/calculate.js +++ b/calculate.js @@ -83,6 +83,12 @@ function calculate(block) { header.push(block.parentBeaconBlockRoot); } + // Pectra hard fork + // https://eips.ethereum.org/EIPS/eip-7685#block-header + if (block?.requestsHash) { + header.push(block.requestsHash); + } + const rlp = RLP.encode(header); const hash = keccak256(rlp); diff --git a/calculate.test.js b/calculate.test.js index 220c14e..f983aee 100644 --- a/calculate.test.js +++ b/calculate.test.js @@ -138,6 +138,35 @@ suite('Ethereum', { concurrency: true }, () => { }); deepStrictEqual(hash, '0x736664ff636e9c72f5c1d71ef2626146b4a4289d3c9cc9154e683f6870c3436e'); }); + + test('Block number 22431084 (Pectra)', { concurrency: true }, () => { + const { hash } = calculate({ + "baseFeePerGas": "0x548795d3", + "blobGasUsed": "0x120000", + "difficulty": "0x0", + "excessBlobGas": "0x3020000", + "extraData": "0xd883010f0b846765746888676f312e32342e32856c696e7578", + "gasLimit": "0x22550dd", + "gasUsed": "0x9d8f63", + "logsBloom": "0x1c2d14628013080620b50320a0885ae80185204a6c4841040101d009c41060fb05358520a00d00a540113a514a9e511c83350a088c22223c9281008042a800c40620120e024a19384a006b8856d324a4f0067931056c0d2c1d1072db844081406c4403ade3688228ef2e3ac201984e860e0163601130a7d2032d269401d9314008a8c14f4340130c4859105c0381a30d011902f175982858ad3c30fba23c55fa4b40003aa5c1688b4911a2e09c84e4213436420d50568100001d44080c8001d900a51c6252d429938181c431a0080b17c9342866c40c14d700853586c59a291632736c124b23800a00c6060c25d17e68a5301070438916505419a0550429469d", + "miner": "0xe688b84b23f322a994a53dbf8e15fa82cdb71127", + "mixHash": "0xef1ed97e3e0205c73f287f22c5900944da077daaadad17f57355fe7705cf3b05", + "nonce": "0x0000000000000000", + "number": "0x156456c", + "parentBeaconBlockRoot": "0x947d22746be643f1428031a9ab7c58776ca54e461903bb5e4ba8a73448552967", + "parentHash": "0x28fb2c1d988435955e569451c6ad772f7fb5e61cddd7463c7b60e933ed5ff237", + "receiptsRoot": "0xf2260e554d7827e222789d9851f5f8a8a9bc78b1e81ea68da7314622f049924b", + "requestsHash": "0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "size": "0xae82", + "stateRoot": "0x49d29cd525c7a9f4a33c1e2debc7529f24757c81f689b7276b70018333761b53", + "timestamp": "0x681b3057", + "transactionsRoot": "0x6522a2eba58778c64f0facee1378ddcdb1b5927285f461f9a8314c1b5fe1e5b1", + "uncles": [], + "withdrawalsRoot": "0xc4f495225a2ac0cd4052c3493b36e96d0efe46eb0650ed124a9627f1badcc935" + }); + deepStrictEqual(hash, '0x50c8cab760b2948349c590461b166773c45d8f4858cccf5a43025ab2960152e8'); + }); }); suite('Polygon PoS', { concurrency: true }, () => { -- 2.47.3