From 19f37003fb53cf7864f7583505749008f4440a86 Mon Sep 17 00:00:00 2001 From: Guillaume Ballet <3272758+gballet@users.noreply.github.com> Date: Tue, 3 Feb 2026 12:19:40 +0100 Subject: [PATCH 001/161] trie/bintrie: fix debug_executionWitness for binary tree (#33739) The `Witness` method was not implemented for the binary tree, which caused `debug_excutionWitness` to panic. This PR fixes that. Note that the `TransitionTrie` version isn't implemented, and that's on purpose: more thought must be given to what should go in the global witness. --- trie/bintrie/trie.go | 2 +- trie/bintrie/trie_test.go | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/trie/bintrie/trie.go b/trie/bintrie/trie.go index c082d57bdf..966d236c08 100644 --- a/trie/bintrie/trie.go +++ b/trie/bintrie/trie.go @@ -424,5 +424,5 @@ func (t *BinaryTrie) PrefetchStorage(addr common.Address, keys [][]byte) error { // Witness returns a set containing all trie nodes that have been accessed. func (t *BinaryTrie) Witness() map[string][]byte { - panic("not implemented") + return t.tracer.Values() } diff --git a/trie/bintrie/trie_test.go b/trie/bintrie/trie_test.go index ca02cfaa1f..050cc8d940 100644 --- a/trie/bintrie/trie_test.go +++ b/trie/bintrie/trie_test.go @@ -22,6 +22,7 @@ import ( "testing" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/trie" ) var ( @@ -195,3 +196,29 @@ func TestMerkleizeMultipleEntries(t *testing.T) { t.Fatalf("invalid root, expected=%x, got = %x", expected, got) } } + +func TestBinaryTrieWitness(t *testing.T) { + tracer := trie.NewPrevalueTracer() + + tr := &BinaryTrie{ + root: NewBinaryNode(), + tracer: tracer, + } + if w := tr.Witness(); len(w) != 0 { + t.Fatal("expected empty witness for fresh trie") + } + + tracer.Put([]byte("path1"), []byte("blob1")) + tracer.Put([]byte("path2"), []byte("blob2")) + + witness := tr.Witness() + if len(witness) != 2 { + t.Fatalf("expected 2 witness entries, got %d", len(witness)) + } + if !bytes.Equal(witness[string([]byte("path1"))], []byte("blob1")) { + t.Fatal("unexpected witness value for path1") + } + if !bytes.Equal(witness[string([]byte("path2"))], []byte("blob2")) { + t.Fatal("unexpected witness value for path2") + } +} From b9288765a36e4ec8e41165504d35dc7314d6810c Mon Sep 17 00:00:00 2001 From: mmsqe Date: Tue, 3 Feb 2026 20:11:47 +0800 Subject: [PATCH 002/161] accounts/usbwallet: add support for Ledger Nano Gen5 (#33297) adds support for the 0x0008 / 0x8000 product ID (Ledger Apex | Nano Gen5). --- accounts/usbwallet/hub.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/accounts/usbwallet/hub.go b/accounts/usbwallet/hub.go index 81457b7da2..6f8ac0d8d9 100644 --- a/accounts/usbwallet/hub.go +++ b/accounts/usbwallet/hub.go @@ -43,6 +43,14 @@ const refreshCycle = time.Second // trashing. const refreshThrottling = 500 * time.Millisecond +const ( + // deviceUsagePage identifies Ledger devices by HID usage page (0xffa0) on Windows and macOS. + // See: https://github.com/LedgerHQ/ledger-live/blob/05a2980e838955a11a1418da638ef8ac3df4fb74/libs/ledgerjs/packages/hw-transport-node-hid-noevents/src/TransportNodeHid.ts + deviceUsagePage = 0xffa0 + // deviceInterface identifies Ledger devices by USB interface number (0) on Linux. + deviceInterface = 0 +) + // Hub is a accounts.Backend that can find and handle generic USB hardware wallets. type Hub struct { scheme string // Protocol scheme prefixing account and wallet URLs. @@ -82,6 +90,7 @@ func NewLedgerHub() (*Hub, error) { 0x0005, /* Ledger Nano S Plus */ 0x0006, /* Ledger Nano FTS */ 0x0007, /* Ledger Flex */ + 0x0008, /* Ledger Nano Gen5 */ 0x0000, /* WebUSB Ledger Blue */ 0x1000, /* WebUSB Ledger Nano S */ @@ -89,7 +98,8 @@ func NewLedgerHub() (*Hub, error) { 0x5000, /* WebUSB Ledger Nano S Plus */ 0x6000, /* WebUSB Ledger Nano FTS */ 0x7000, /* WebUSB Ledger Flex */ - }, 0xffa0, 0, newLedgerDriver) + 0x8000, /* WebUSB Ledger Nano Gen5 */ + }, deviceUsagePage, deviceInterface, newLedgerDriver) } // NewTrezorHubWithHID creates a new hardware wallet manager for Trezor devices. From 54a91b3ad899bd44221763196bfaa09557cba5ad Mon Sep 17 00:00:00 2001 From: Lessa <230214854+adblesss@users.noreply.github.com> Date: Tue, 3 Feb 2026 08:36:59 -0500 Subject: [PATCH 003/161] core/types, internal/ethapi, signer/core/apitypes: avoid copying 128KB blobs in range loops (#33717) kzg4844.Blob is 131072 bytes. Using `for _, blob := range` copies the entire blob on each iteration. With up to 6 blobs per transaction, this wastes ~768KB of memory copies. Switch to index-based iteration and pass pointers directly. --- core/types/tx_blob.go | 4 ++-- internal/ethapi/transaction_args.go | 12 ++++++------ signer/core/apitypes/types.go | 16 ++++++++-------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/core/types/tx_blob.go b/core/types/tx_blob.go index bbfd3c98db..31aadb5419 100644 --- a/core/types/tx_blob.go +++ b/core/types/tx_blob.go @@ -118,8 +118,8 @@ func (sc *BlobTxSidecar) ToV1() error { } if sc.Version == BlobSidecarVersion0 { proofs := make([]kzg4844.Proof, 0, len(sc.Blobs)*kzg4844.CellProofsPerBlob) - for _, blob := range sc.Blobs { - cellProofs, err := kzg4844.ComputeCellProofs(&blob) + for i := range sc.Blobs { + cellProofs, err := kzg4844.ComputeCellProofs(&sc.Blobs[i]) if err != nil { return err } diff --git a/internal/ethapi/transaction_args.go b/internal/ethapi/transaction_args.go index 23aa8e5947..22d1adfa57 100644 --- a/internal/ethapi/transaction_args.go +++ b/internal/ethapi/transaction_args.go @@ -329,8 +329,8 @@ func (args *TransactionArgs) setBlobTxSidecar(ctx context.Context, config sideca commitments = make([]kzg4844.Commitment, n) proofs = make([]kzg4844.Proof, 0, proofLen) ) - for i, b := range args.Blobs { - c, err := kzg4844.BlobToCommitment(&b) + for i := range args.Blobs { + c, err := kzg4844.BlobToCommitment(&args.Blobs[i]) if err != nil { return fmt.Errorf("blobs[%d]: error computing commitment: %v", i, err) } @@ -338,13 +338,13 @@ func (args *TransactionArgs) setBlobTxSidecar(ctx context.Context, config sideca switch config.blobSidecarVersion { case types.BlobSidecarVersion0: - p, err := kzg4844.ComputeBlobProof(&b, c) + p, err := kzg4844.ComputeBlobProof(&args.Blobs[i], c) if err != nil { return fmt.Errorf("blobs[%d]: error computing proof: %v", i, err) } proofs = append(proofs, p) case types.BlobSidecarVersion1: - ps, err := kzg4844.ComputeCellProofs(&b) + ps, err := kzg4844.ComputeCellProofs(&args.Blobs[i]) if err != nil { return fmt.Errorf("blobs[%d]: error computing proof: %v", i, err) } @@ -356,8 +356,8 @@ func (args *TransactionArgs) setBlobTxSidecar(ctx context.Context, config sideca } else { switch config.blobSidecarVersion { case types.BlobSidecarVersion0: - for i, b := range args.Blobs { - if err := kzg4844.VerifyBlobProof(&b, args.Commitments[i], args.Proofs[i]); err != nil { + for i := range args.Blobs { + if err := kzg4844.VerifyBlobProof(&args.Blobs[i], args.Commitments[i], args.Proofs[i]); err != nil { return fmt.Errorf("failed to verify blob proof: %v", err) } } diff --git a/signer/core/apitypes/types.go b/signer/core/apitypes/types.go index 81b7f8c80e..401f4fba07 100644 --- a/signer/core/apitypes/types.go +++ b/signer/core/apitypes/types.go @@ -242,8 +242,8 @@ func (args *SendTxArgs) validateTxSidecar() error { if args.Proofs != nil { if len(args.Proofs) == n { // v1 transaction - for i, b := range args.Blobs { - if err := kzg4844.VerifyBlobProof(&b, args.Commitments[i], args.Proofs[i]); err != nil { + for i := range args.Blobs { + if err := kzg4844.VerifyBlobProof(&args.Blobs[i], args.Commitments[i], args.Proofs[i]); err != nil { return fmt.Errorf("failed to verify blob proof: %v", err) } } @@ -259,8 +259,8 @@ func (args *SendTxArgs) validateTxSidecar() error { if args.Commitments == nil { // Generate commitment and proof. commitments := make([]kzg4844.Commitment, n) - for i, b := range args.Blobs { - c, err := kzg4844.BlobToCommitment(&b) + for i := range args.Blobs { + c, err := kzg4844.BlobToCommitment(&args.Blobs[i]) if err != nil { return fmt.Errorf("blobs[%d]: error computing commitment: %v", i, err) } @@ -269,8 +269,8 @@ func (args *SendTxArgs) validateTxSidecar() error { var proofs []kzg4844.Proof if args.BlobVersion == types.BlobSidecarVersion1 { proofs = make([]kzg4844.Proof, 0, n*kzg4844.CellProofsPerBlob) - for i, b := range args.Blobs { - p, err := kzg4844.ComputeCellProofs(&b) + for i := range args.Blobs { + p, err := kzg4844.ComputeCellProofs(&args.Blobs[i]) if err != nil { return fmt.Errorf("blobs[%d]: error computing cell proof: %v", i, err) } @@ -278,8 +278,8 @@ func (args *SendTxArgs) validateTxSidecar() error { } } else { proofs = make([]kzg4844.Proof, 0, n) - for i, b := range args.Blobs { - p, err := kzg4844.ComputeBlobProof(&b, commitments[i]) + for i := range args.Blobs { + p, err := kzg4844.ComputeBlobProof(&args.Blobs[i], commitments[i]) if err != nil { return fmt.Errorf("blobs[%d]: error computing proof: %v", i, err) } From 8e1de223ad46b23bb397f7eff7844858d69a0be1 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Tue, 3 Feb 2026 22:55:27 +0100 Subject: [PATCH 004/161] crypto/keccak: vendor in golang.org/x/crypto/sha3 (#33323) The upstream libray has removed the assembly-based implementation of keccak. We need to maintain our own library to avoid a peformance regression. --------- Co-authored-by: lightclient --- accounts/accounts.go | 4 +- cmd/evm/internal/t8ntool/execution.go | 4 +- common/types.go | 4 +- consensus/clique/clique.go | 4 +- consensus/ethash/consensus.go | 4 +- core/rawdb/accessors_chain_test.go | 15 +- core/rlp_test.go | 4 +- core/state/snapshot/generate_test.go | 9 +- core/state_processor_test.go | 4 +- crypto/keccak.go | 6 +- crypto/keccak/LICENSE | 27 + crypto/keccak/README.md | 6 + crypto/keccak/hashes.go | 44 + crypto/keccak/keccakf.go | 414 ++ crypto/keccak/keccakf_amd64.go | 13 + crypto/keccak/keccakf_amd64.s | 5419 +++++++++++++++++ crypto/keccak/sha3.go | 244 + crypto/keccak/sha3_test.go | 210 + .../keccak/testdata/keccakKats.json.deflate | Bin 0 -> 540828 bytes eth/protocols/snap/sync_test.go | 6 +- internal/blocktest/test_hash.go | 4 +- p2p/dnsdisc/tree.go | 6 +- p2p/enode/idscheme.go | 6 +- p2p/rlpx/rlpx.go | 6 +- tests/state_test_util.go | 4 +- trie/trie_test.go | 10 +- 26 files changed, 6421 insertions(+), 56 deletions(-) create mode 100644 crypto/keccak/LICENSE create mode 100644 crypto/keccak/README.md create mode 100644 crypto/keccak/hashes.go create mode 100644 crypto/keccak/keccakf.go create mode 100644 crypto/keccak/keccakf_amd64.go create mode 100644 crypto/keccak/keccakf_amd64.s create mode 100644 crypto/keccak/sha3.go create mode 100644 crypto/keccak/sha3_test.go create mode 100644 crypto/keccak/testdata/keccakKats.json.deflate diff --git a/accounts/accounts.go b/accounts/accounts.go index 7bd911577a..6249beed0d 100644 --- a/accounts/accounts.go +++ b/accounts/accounts.go @@ -24,8 +24,8 @@ import ( "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto/keccak" "github.com/ethereum/go-ethereum/event" - "golang.org/x/crypto/sha3" ) // Account represents an Ethereum account located at a specific location defined @@ -196,7 +196,7 @@ func TextHash(data []byte) []byte { // This gives context to the signed message and prevents signing of transactions. func TextAndHash(data []byte) ([]byte, string) { msg := fmt.Sprintf("\x19Ethereum Signed Message:\n%d%s", len(data), data) - hasher := sha3.NewLegacyKeccak256() + hasher := keccak.NewLegacyKeccak256() hasher.Write([]byte(msg)) return hasher.Sum(nil), msg } diff --git a/cmd/evm/internal/t8ntool/execution.go b/cmd/evm/internal/t8ntool/execution.go index 44f15c322c..693ec9f4a9 100644 --- a/cmd/evm/internal/t8ntool/execution.go +++ b/cmd/evm/internal/t8ntool/execution.go @@ -33,6 +33,7 @@ import ( "github.com/ethereum/go-ethereum/core/tracing" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/crypto/keccak" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" @@ -40,7 +41,6 @@ import ( "github.com/ethereum/go-ethereum/trie" "github.com/ethereum/go-ethereum/triedb" "github.com/holiman/uint256" - "golang.org/x/crypto/sha3" ) type Prestate struct { @@ -415,7 +415,7 @@ func MakePreState(db ethdb.Database, accounts types.GenesisAlloc, isBintrie bool } func rlpHash(x any) (h common.Hash) { - hw := sha3.NewLegacyKeccak256() + hw := keccak.NewLegacyKeccak256() rlp.Encode(hw, x) hw.Sum(h[:0]) return h diff --git a/common/types.go b/common/types.go index a96d6c7c83..308b8ed879 100644 --- a/common/types.go +++ b/common/types.go @@ -30,7 +30,7 @@ import ( "strings" "github.com/ethereum/go-ethereum/common/hexutil" - "golang.org/x/crypto/sha3" + "github.com/ethereum/go-ethereum/crypto/keccak" ) // Lengths of hashes and addresses in bytes. @@ -271,7 +271,7 @@ func (a *Address) checksumHex() []byte { buf := a.hex() // compute checksum - sha := sha3.NewLegacyKeccak256() + sha := keccak.NewLegacyKeccak256() sha.Write(buf[2:]) hash := sha.Sum(nil) for i := 2; i < len(buf); i++ { diff --git a/consensus/clique/clique.go b/consensus/clique/clique.go index a6f02c8c2b..87cd407a71 100644 --- a/consensus/clique/clique.go +++ b/consensus/clique/clique.go @@ -37,12 +37,12 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/crypto/keccak" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/trie" - "golang.org/x/crypto/sha3" ) const ( @@ -642,7 +642,7 @@ func (c *Clique) Close() error { // SealHash returns the hash of a block prior to it being sealed. func SealHash(header *types.Header) (hash common.Hash) { - hasher := sha3.NewLegacyKeccak256() + hasher := keccak.NewLegacyKeccak256() encodeSigHeader(hasher, header) hasher.(crypto.KeccakState).Read(hash[:]) return hash diff --git a/consensus/ethash/consensus.go b/consensus/ethash/consensus.go index 376cbac8c0..f90001fc1a 100644 --- a/consensus/ethash/consensus.go +++ b/consensus/ethash/consensus.go @@ -31,11 +31,11 @@ import ( "github.com/ethereum/go-ethereum/core/tracing" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/crypto/keccak" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/trie" "github.com/holiman/uint256" - "golang.org/x/crypto/sha3" ) // Ethash proof-of-work protocol constants. @@ -527,7 +527,7 @@ func (ethash *Ethash) FinalizeAndAssemble(chain consensus.ChainHeaderReader, hea // SealHash returns the hash of a block prior to it being sealed. func (ethash *Ethash) SealHash(header *types.Header) (hash common.Hash) { - hasher := sha3.NewLegacyKeccak256() + hasher := keccak.NewLegacyKeccak256() enc := []interface{}{ header.ParentHash, diff --git a/core/rawdb/accessors_chain_test.go b/core/rawdb/accessors_chain_test.go index 02d51f4dd2..280fc21e8f 100644 --- a/core/rawdb/accessors_chain_test.go +++ b/core/rawdb/accessors_chain_test.go @@ -28,9 +28,9 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/crypto/keccak" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" - "golang.org/x/crypto/sha3" ) // Tests block header storage and retrieval operations. @@ -52,10 +52,7 @@ func TestHeaderStorage(t *testing.T) { if entry := ReadHeaderRLP(db, header.Hash(), header.Number.Uint64()); entry == nil { t.Fatalf("Stored header RLP not found") } else { - hasher := sha3.NewLegacyKeccak256() - hasher.Write(entry) - - if hash := common.BytesToHash(hasher.Sum(nil)); hash != header.Hash() { + if hash := crypto.Keccak256Hash(entry); hash != header.Hash() { t.Fatalf("Retrieved RLP header mismatch: have %v, want %v", entry, header) } } @@ -72,8 +69,7 @@ func TestBodyStorage(t *testing.T) { // Create a test body to move around the database and make sure it's really new body := &types.Body{Uncles: []*types.Header{{Extra: []byte("test header")}}} - - hasher := sha3.NewLegacyKeccak256() + hasher := keccak.NewLegacyKeccak256() rlp.Encode(hasher, body) hash := common.BytesToHash(hasher.Sum(nil)) @@ -90,10 +86,7 @@ func TestBodyStorage(t *testing.T) { if entry := ReadBodyRLP(db, hash, 0); entry == nil { t.Fatalf("Stored body RLP not found") } else { - hasher := sha3.NewLegacyKeccak256() - hasher.Write(entry) - - if calc := common.BytesToHash(hasher.Sum(nil)); calc != hash { + if calc := crypto.Keccak256Hash(entry); calc != hash { t.Fatalf("Retrieved RLP body mismatch: have %v, want %v", entry, body) } } diff --git a/core/rlp_test.go b/core/rlp_test.go index 69efa82551..f3655bf533 100644 --- a/core/rlp_test.go +++ b/core/rlp_test.go @@ -25,9 +25,9 @@ import ( "github.com/ethereum/go-ethereum/consensus/ethash" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/crypto/keccak" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" - "golang.org/x/crypto/sha3" ) func getBlock(transactions int, uncles int, dataSize int) *types.Block { @@ -147,7 +147,7 @@ func BenchmarkHashing(b *testing.B) { blockRlp, _ = rlp.EncodeToBytes(block) } var got common.Hash - var hasher = sha3.NewLegacyKeccak256() + var hasher = keccak.NewLegacyKeccak256() b.Run("iteratorhashing", func(b *testing.B) { for b.Loop() { var hash common.Hash diff --git a/core/state/snapshot/generate_test.go b/core/state/snapshot/generate_test.go index 4488630095..7fb4c152dc 100644 --- a/core/state/snapshot/generate_test.go +++ b/core/state/snapshot/generate_test.go @@ -25,6 +25,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rlp" @@ -34,16 +35,10 @@ import ( "github.com/ethereum/go-ethereum/triedb/hashdb" "github.com/ethereum/go-ethereum/triedb/pathdb" "github.com/holiman/uint256" - "golang.org/x/crypto/sha3" ) func hashData(input []byte) common.Hash { - var hasher = sha3.NewLegacyKeccak256() - var hash common.Hash - hasher.Reset() - hasher.Write(input) - hasher.Sum(hash[:0]) - return hash + return crypto.Keccak256Hash(input) } // Tests that snapshot generation from an empty database. diff --git a/core/state_processor_test.go b/core/state_processor_test.go index 9d6cbdbc8b..3bf372800b 100644 --- a/core/state_processor_test.go +++ b/core/state_processor_test.go @@ -31,10 +31,10 @@ import ( "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/crypto/keccak" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/trie" "github.com/holiman/uint256" - "golang.org/x/crypto/sha3" ) func u64(val uint64) *uint64 { return &val } @@ -398,7 +398,7 @@ func GenerateBadBlock(parent *types.Block, engine consensus.Engine, txs types.Tr var receipts []*types.Receipt // The post-state result doesn't need to be correct (this is a bad block), but we do need something there // Preferably something unique. So let's use a combo of blocknum + txhash - hasher := sha3.NewLegacyKeccak256() + hasher := keccak.NewLegacyKeccak256() hasher.Write(header.Number.Bytes()) var cumulativeGas uint64 var nBlobs int diff --git a/crypto/keccak.go b/crypto/keccak.go index 0ad79a63c1..3fafddc92e 100644 --- a/crypto/keccak.go +++ b/crypto/keccak.go @@ -22,17 +22,17 @@ import ( "sync" "github.com/ethereum/go-ethereum/common" - "golang.org/x/crypto/sha3" + "github.com/ethereum/go-ethereum/crypto/keccak" ) // NewKeccakState creates a new KeccakState func NewKeccakState() KeccakState { - return sha3.NewLegacyKeccak256().(KeccakState) + return keccak.NewLegacyKeccak256().(KeccakState) } var hasherPool = sync.Pool{ New: func() any { - return sha3.NewLegacyKeccak256().(KeccakState) + return keccak.NewLegacyKeccak256().(KeccakState) }, } diff --git a/crypto/keccak/LICENSE b/crypto/keccak/LICENSE new file mode 100644 index 0000000000..2a7cf70da6 --- /dev/null +++ b/crypto/keccak/LICENSE @@ -0,0 +1,27 @@ +Copyright 2009 The Go Authors. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google LLC nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/crypto/keccak/README.md b/crypto/keccak/README.md new file mode 100644 index 0000000000..295a5b958c --- /dev/null +++ b/crypto/keccak/README.md @@ -0,0 +1,6 @@ +This is a vendored and modified copy of golang.org/x/crypto/sha3, with an assembly +implementation of keccak256. We wish to retain the assembly implementation, +which was removed in v0.44.0. + +Ethereum uses a 'legacy' variant of Keccak, which was defined before it became SHA3. As +such, we cannot use the standard library crypto/sha3 package. diff --git a/crypto/keccak/hashes.go b/crypto/keccak/hashes.go new file mode 100644 index 0000000000..c78c5fe992 --- /dev/null +++ b/crypto/keccak/hashes.go @@ -0,0 +1,44 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package keccak + +// This file provides functions for creating instances of the SHA-3 +// and SHAKE hash functions, as well as utility functions for hashing +// bytes. + +import ( + "hash" +) + +const ( + dsbyteSHA3 = 0b00000110 + dsbyteKeccak = 0b00000001 + dsbyteShake = 0b00011111 + dsbyteCShake = 0b00000100 + + // rateK[c] is the rate in bytes for Keccak[c] where c is the capacity in + // bits. Given the sponge size is 1600 bits, the rate is 1600 - c bits. + rateK256 = (1600 - 256) / 8 + rateK448 = (1600 - 448) / 8 + rateK512 = (1600 - 512) / 8 + rateK768 = (1600 - 768) / 8 + rateK1024 = (1600 - 1024) / 8 +) + +// NewLegacyKeccak256 creates a new Keccak-256 hash. +// +// Only use this function if you require compatibility with an existing cryptosystem +// that uses non-standard padding. All other users should use New256 instead. +func NewLegacyKeccak256() hash.Hash { + return &state{rate: rateK512, outputLen: 32, dsbyte: dsbyteKeccak} +} + +// NewLegacyKeccak512 creates a new Keccak-512 hash. +// +// Only use this function if you require compatibility with an existing cryptosystem +// that uses non-standard padding. All other users should use New512 instead. +func NewLegacyKeccak512() hash.Hash { + return &state{rate: rateK1024, outputLen: 64, dsbyte: dsbyteKeccak} +} diff --git a/crypto/keccak/keccakf.go b/crypto/keccak/keccakf.go new file mode 100644 index 0000000000..82694fa4a3 --- /dev/null +++ b/crypto/keccak/keccakf.go @@ -0,0 +1,414 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !amd64 || purego || !gc + +package keccak + +import "math/bits" + +// rc stores the round constants for use in the ι step. +var rc = [24]uint64{ + 0x0000000000000001, + 0x0000000000008082, + 0x800000000000808A, + 0x8000000080008000, + 0x000000000000808B, + 0x0000000080000001, + 0x8000000080008081, + 0x8000000000008009, + 0x000000000000008A, + 0x0000000000000088, + 0x0000000080008009, + 0x000000008000000A, + 0x000000008000808B, + 0x800000000000008B, + 0x8000000000008089, + 0x8000000000008003, + 0x8000000000008002, + 0x8000000000000080, + 0x000000000000800A, + 0x800000008000000A, + 0x8000000080008081, + 0x8000000000008080, + 0x0000000080000001, + 0x8000000080008008, +} + +// keccakF1600 applies the Keccak permutation to a 1600b-wide +// state represented as a slice of 25 uint64s. +func keccakF1600(a *[25]uint64) { + // Implementation translated from Keccak-inplace.c + // in the keccak reference code. + var t, bc0, bc1, bc2, bc3, bc4, d0, d1, d2, d3, d4 uint64 + + for i := 0; i < 24; i += 4 { + // Combines the 5 steps in each round into 2 steps. + // Unrolls 4 rounds per loop and spreads some steps across rounds. + + // Round 1 + bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] + bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] + bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] + bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] + bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] + d0 = bc4 ^ (bc1<<1 | bc1>>63) + d1 = bc0 ^ (bc2<<1 | bc2>>63) + d2 = bc1 ^ (bc3<<1 | bc3>>63) + d3 = bc2 ^ (bc4<<1 | bc4>>63) + d4 = bc3 ^ (bc0<<1 | bc0>>63) + + bc0 = a[0] ^ d0 + t = a[6] ^ d1 + bc1 = bits.RotateLeft64(t, 44) + t = a[12] ^ d2 + bc2 = bits.RotateLeft64(t, 43) + t = a[18] ^ d3 + bc3 = bits.RotateLeft64(t, 21) + t = a[24] ^ d4 + bc4 = bits.RotateLeft64(t, 14) + a[0] = bc0 ^ (bc2 &^ bc1) ^ rc[i] + a[6] = bc1 ^ (bc3 &^ bc2) + a[12] = bc2 ^ (bc4 &^ bc3) + a[18] = bc3 ^ (bc0 &^ bc4) + a[24] = bc4 ^ (bc1 &^ bc0) + + t = a[10] ^ d0 + bc2 = bits.RotateLeft64(t, 3) + t = a[16] ^ d1 + bc3 = bits.RotateLeft64(t, 45) + t = a[22] ^ d2 + bc4 = bits.RotateLeft64(t, 61) + t = a[3] ^ d3 + bc0 = bits.RotateLeft64(t, 28) + t = a[9] ^ d4 + bc1 = bits.RotateLeft64(t, 20) + a[10] = bc0 ^ (bc2 &^ bc1) + a[16] = bc1 ^ (bc3 &^ bc2) + a[22] = bc2 ^ (bc4 &^ bc3) + a[3] = bc3 ^ (bc0 &^ bc4) + a[9] = bc4 ^ (bc1 &^ bc0) + + t = a[20] ^ d0 + bc4 = bits.RotateLeft64(t, 18) + t = a[1] ^ d1 + bc0 = bits.RotateLeft64(t, 1) + t = a[7] ^ d2 + bc1 = bits.RotateLeft64(t, 6) + t = a[13] ^ d3 + bc2 = bits.RotateLeft64(t, 25) + t = a[19] ^ d4 + bc3 = bits.RotateLeft64(t, 8) + a[20] = bc0 ^ (bc2 &^ bc1) + a[1] = bc1 ^ (bc3 &^ bc2) + a[7] = bc2 ^ (bc4 &^ bc3) + a[13] = bc3 ^ (bc0 &^ bc4) + a[19] = bc4 ^ (bc1 &^ bc0) + + t = a[5] ^ d0 + bc1 = bits.RotateLeft64(t, 36) + t = a[11] ^ d1 + bc2 = bits.RotateLeft64(t, 10) + t = a[17] ^ d2 + bc3 = bits.RotateLeft64(t, 15) + t = a[23] ^ d3 + bc4 = bits.RotateLeft64(t, 56) + t = a[4] ^ d4 + bc0 = bits.RotateLeft64(t, 27) + a[5] = bc0 ^ (bc2 &^ bc1) + a[11] = bc1 ^ (bc3 &^ bc2) + a[17] = bc2 ^ (bc4 &^ bc3) + a[23] = bc3 ^ (bc0 &^ bc4) + a[4] = bc4 ^ (bc1 &^ bc0) + + t = a[15] ^ d0 + bc3 = bits.RotateLeft64(t, 41) + t = a[21] ^ d1 + bc4 = bits.RotateLeft64(t, 2) + t = a[2] ^ d2 + bc0 = bits.RotateLeft64(t, 62) + t = a[8] ^ d3 + bc1 = bits.RotateLeft64(t, 55) + t = a[14] ^ d4 + bc2 = bits.RotateLeft64(t, 39) + a[15] = bc0 ^ (bc2 &^ bc1) + a[21] = bc1 ^ (bc3 &^ bc2) + a[2] = bc2 ^ (bc4 &^ bc3) + a[8] = bc3 ^ (bc0 &^ bc4) + a[14] = bc4 ^ (bc1 &^ bc0) + + // Round 2 + bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] + bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] + bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] + bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] + bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] + d0 = bc4 ^ (bc1<<1 | bc1>>63) + d1 = bc0 ^ (bc2<<1 | bc2>>63) + d2 = bc1 ^ (bc3<<1 | bc3>>63) + d3 = bc2 ^ (bc4<<1 | bc4>>63) + d4 = bc3 ^ (bc0<<1 | bc0>>63) + + bc0 = a[0] ^ d0 + t = a[16] ^ d1 + bc1 = bits.RotateLeft64(t, 44) + t = a[7] ^ d2 + bc2 = bits.RotateLeft64(t, 43) + t = a[23] ^ d3 + bc3 = bits.RotateLeft64(t, 21) + t = a[14] ^ d4 + bc4 = bits.RotateLeft64(t, 14) + a[0] = bc0 ^ (bc2 &^ bc1) ^ rc[i+1] + a[16] = bc1 ^ (bc3 &^ bc2) + a[7] = bc2 ^ (bc4 &^ bc3) + a[23] = bc3 ^ (bc0 &^ bc4) + a[14] = bc4 ^ (bc1 &^ bc0) + + t = a[20] ^ d0 + bc2 = bits.RotateLeft64(t, 3) + t = a[11] ^ d1 + bc3 = bits.RotateLeft64(t, 45) + t = a[2] ^ d2 + bc4 = bits.RotateLeft64(t, 61) + t = a[18] ^ d3 + bc0 = bits.RotateLeft64(t, 28) + t = a[9] ^ d4 + bc1 = bits.RotateLeft64(t, 20) + a[20] = bc0 ^ (bc2 &^ bc1) + a[11] = bc1 ^ (bc3 &^ bc2) + a[2] = bc2 ^ (bc4 &^ bc3) + a[18] = bc3 ^ (bc0 &^ bc4) + a[9] = bc4 ^ (bc1 &^ bc0) + + t = a[15] ^ d0 + bc4 = bits.RotateLeft64(t, 18) + t = a[6] ^ d1 + bc0 = bits.RotateLeft64(t, 1) + t = a[22] ^ d2 + bc1 = bits.RotateLeft64(t, 6) + t = a[13] ^ d3 + bc2 = bits.RotateLeft64(t, 25) + t = a[4] ^ d4 + bc3 = bits.RotateLeft64(t, 8) + a[15] = bc0 ^ (bc2 &^ bc1) + a[6] = bc1 ^ (bc3 &^ bc2) + a[22] = bc2 ^ (bc4 &^ bc3) + a[13] = bc3 ^ (bc0 &^ bc4) + a[4] = bc4 ^ (bc1 &^ bc0) + + t = a[10] ^ d0 + bc1 = bits.RotateLeft64(t, 36) + t = a[1] ^ d1 + bc2 = bits.RotateLeft64(t, 10) + t = a[17] ^ d2 + bc3 = bits.RotateLeft64(t, 15) + t = a[8] ^ d3 + bc4 = bits.RotateLeft64(t, 56) + t = a[24] ^ d4 + bc0 = bits.RotateLeft64(t, 27) + a[10] = bc0 ^ (bc2 &^ bc1) + a[1] = bc1 ^ (bc3 &^ bc2) + a[17] = bc2 ^ (bc4 &^ bc3) + a[8] = bc3 ^ (bc0 &^ bc4) + a[24] = bc4 ^ (bc1 &^ bc0) + + t = a[5] ^ d0 + bc3 = bits.RotateLeft64(t, 41) + t = a[21] ^ d1 + bc4 = bits.RotateLeft64(t, 2) + t = a[12] ^ d2 + bc0 = bits.RotateLeft64(t, 62) + t = a[3] ^ d3 + bc1 = bits.RotateLeft64(t, 55) + t = a[19] ^ d4 + bc2 = bits.RotateLeft64(t, 39) + a[5] = bc0 ^ (bc2 &^ bc1) + a[21] = bc1 ^ (bc3 &^ bc2) + a[12] = bc2 ^ (bc4 &^ bc3) + a[3] = bc3 ^ (bc0 &^ bc4) + a[19] = bc4 ^ (bc1 &^ bc0) + + // Round 3 + bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] + bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] + bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] + bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] + bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] + d0 = bc4 ^ (bc1<<1 | bc1>>63) + d1 = bc0 ^ (bc2<<1 | bc2>>63) + d2 = bc1 ^ (bc3<<1 | bc3>>63) + d3 = bc2 ^ (bc4<<1 | bc4>>63) + d4 = bc3 ^ (bc0<<1 | bc0>>63) + + bc0 = a[0] ^ d0 + t = a[11] ^ d1 + bc1 = bits.RotateLeft64(t, 44) + t = a[22] ^ d2 + bc2 = bits.RotateLeft64(t, 43) + t = a[8] ^ d3 + bc3 = bits.RotateLeft64(t, 21) + t = a[19] ^ d4 + bc4 = bits.RotateLeft64(t, 14) + a[0] = bc0 ^ (bc2 &^ bc1) ^ rc[i+2] + a[11] = bc1 ^ (bc3 &^ bc2) + a[22] = bc2 ^ (bc4 &^ bc3) + a[8] = bc3 ^ (bc0 &^ bc4) + a[19] = bc4 ^ (bc1 &^ bc0) + + t = a[15] ^ d0 + bc2 = bits.RotateLeft64(t, 3) + t = a[1] ^ d1 + bc3 = bits.RotateLeft64(t, 45) + t = a[12] ^ d2 + bc4 = bits.RotateLeft64(t, 61) + t = a[23] ^ d3 + bc0 = bits.RotateLeft64(t, 28) + t = a[9] ^ d4 + bc1 = bits.RotateLeft64(t, 20) + a[15] = bc0 ^ (bc2 &^ bc1) + a[1] = bc1 ^ (bc3 &^ bc2) + a[12] = bc2 ^ (bc4 &^ bc3) + a[23] = bc3 ^ (bc0 &^ bc4) + a[9] = bc4 ^ (bc1 &^ bc0) + + t = a[5] ^ d0 + bc4 = bits.RotateLeft64(t, 18) + t = a[16] ^ d1 + bc0 = bits.RotateLeft64(t, 1) + t = a[2] ^ d2 + bc1 = bits.RotateLeft64(t, 6) + t = a[13] ^ d3 + bc2 = bits.RotateLeft64(t, 25) + t = a[24] ^ d4 + bc3 = bits.RotateLeft64(t, 8) + a[5] = bc0 ^ (bc2 &^ bc1) + a[16] = bc1 ^ (bc3 &^ bc2) + a[2] = bc2 ^ (bc4 &^ bc3) + a[13] = bc3 ^ (bc0 &^ bc4) + a[24] = bc4 ^ (bc1 &^ bc0) + + t = a[20] ^ d0 + bc1 = bits.RotateLeft64(t, 36) + t = a[6] ^ d1 + bc2 = bits.RotateLeft64(t, 10) + t = a[17] ^ d2 + bc3 = bits.RotateLeft64(t, 15) + t = a[3] ^ d3 + bc4 = bits.RotateLeft64(t, 56) + t = a[14] ^ d4 + bc0 = bits.RotateLeft64(t, 27) + a[20] = bc0 ^ (bc2 &^ bc1) + a[6] = bc1 ^ (bc3 &^ bc2) + a[17] = bc2 ^ (bc4 &^ bc3) + a[3] = bc3 ^ (bc0 &^ bc4) + a[14] = bc4 ^ (bc1 &^ bc0) + + t = a[10] ^ d0 + bc3 = bits.RotateLeft64(t, 41) + t = a[21] ^ d1 + bc4 = bits.RotateLeft64(t, 2) + t = a[7] ^ d2 + bc0 = bits.RotateLeft64(t, 62) + t = a[18] ^ d3 + bc1 = bits.RotateLeft64(t, 55) + t = a[4] ^ d4 + bc2 = bits.RotateLeft64(t, 39) + a[10] = bc0 ^ (bc2 &^ bc1) + a[21] = bc1 ^ (bc3 &^ bc2) + a[7] = bc2 ^ (bc4 &^ bc3) + a[18] = bc3 ^ (bc0 &^ bc4) + a[4] = bc4 ^ (bc1 &^ bc0) + + // Round 4 + bc0 = a[0] ^ a[5] ^ a[10] ^ a[15] ^ a[20] + bc1 = a[1] ^ a[6] ^ a[11] ^ a[16] ^ a[21] + bc2 = a[2] ^ a[7] ^ a[12] ^ a[17] ^ a[22] + bc3 = a[3] ^ a[8] ^ a[13] ^ a[18] ^ a[23] + bc4 = a[4] ^ a[9] ^ a[14] ^ a[19] ^ a[24] + d0 = bc4 ^ (bc1<<1 | bc1>>63) + d1 = bc0 ^ (bc2<<1 | bc2>>63) + d2 = bc1 ^ (bc3<<1 | bc3>>63) + d3 = bc2 ^ (bc4<<1 | bc4>>63) + d4 = bc3 ^ (bc0<<1 | bc0>>63) + + bc0 = a[0] ^ d0 + t = a[1] ^ d1 + bc1 = bits.RotateLeft64(t, 44) + t = a[2] ^ d2 + bc2 = bits.RotateLeft64(t, 43) + t = a[3] ^ d3 + bc3 = bits.RotateLeft64(t, 21) + t = a[4] ^ d4 + bc4 = bits.RotateLeft64(t, 14) + a[0] = bc0 ^ (bc2 &^ bc1) ^ rc[i+3] + a[1] = bc1 ^ (bc3 &^ bc2) + a[2] = bc2 ^ (bc4 &^ bc3) + a[3] = bc3 ^ (bc0 &^ bc4) + a[4] = bc4 ^ (bc1 &^ bc0) + + t = a[5] ^ d0 + bc2 = bits.RotateLeft64(t, 3) + t = a[6] ^ d1 + bc3 = bits.RotateLeft64(t, 45) + t = a[7] ^ d2 + bc4 = bits.RotateLeft64(t, 61) + t = a[8] ^ d3 + bc0 = bits.RotateLeft64(t, 28) + t = a[9] ^ d4 + bc1 = bits.RotateLeft64(t, 20) + a[5] = bc0 ^ (bc2 &^ bc1) + a[6] = bc1 ^ (bc3 &^ bc2) + a[7] = bc2 ^ (bc4 &^ bc3) + a[8] = bc3 ^ (bc0 &^ bc4) + a[9] = bc4 ^ (bc1 &^ bc0) + + t = a[10] ^ d0 + bc4 = bits.RotateLeft64(t, 18) + t = a[11] ^ d1 + bc0 = bits.RotateLeft64(t, 1) + t = a[12] ^ d2 + bc1 = bits.RotateLeft64(t, 6) + t = a[13] ^ d3 + bc2 = bits.RotateLeft64(t, 25) + t = a[14] ^ d4 + bc3 = bits.RotateLeft64(t, 8) + a[10] = bc0 ^ (bc2 &^ bc1) + a[11] = bc1 ^ (bc3 &^ bc2) + a[12] = bc2 ^ (bc4 &^ bc3) + a[13] = bc3 ^ (bc0 &^ bc4) + a[14] = bc4 ^ (bc1 &^ bc0) + + t = a[15] ^ d0 + bc1 = bits.RotateLeft64(t, 36) + t = a[16] ^ d1 + bc2 = bits.RotateLeft64(t, 10) + t = a[17] ^ d2 + bc3 = bits.RotateLeft64(t, 15) + t = a[18] ^ d3 + bc4 = bits.RotateLeft64(t, 56) + t = a[19] ^ d4 + bc0 = bits.RotateLeft64(t, 27) + a[15] = bc0 ^ (bc2 &^ bc1) + a[16] = bc1 ^ (bc3 &^ bc2) + a[17] = bc2 ^ (bc4 &^ bc3) + a[18] = bc3 ^ (bc0 &^ bc4) + a[19] = bc4 ^ (bc1 &^ bc0) + + t = a[20] ^ d0 + bc3 = bits.RotateLeft64(t, 41) + t = a[21] ^ d1 + bc4 = bits.RotateLeft64(t, 2) + t = a[22] ^ d2 + bc0 = bits.RotateLeft64(t, 62) + t = a[23] ^ d3 + bc1 = bits.RotateLeft64(t, 55) + t = a[24] ^ d4 + bc2 = bits.RotateLeft64(t, 39) + a[20] = bc0 ^ (bc2 &^ bc1) + a[21] = bc1 ^ (bc3 &^ bc2) + a[22] = bc2 ^ (bc4 &^ bc3) + a[23] = bc3 ^ (bc0 &^ bc4) + a[24] = bc4 ^ (bc1 &^ bc0) + } +} diff --git a/crypto/keccak/keccakf_amd64.go b/crypto/keccak/keccakf_amd64.go new file mode 100644 index 0000000000..cb6eca44c3 --- /dev/null +++ b/crypto/keccak/keccakf_amd64.go @@ -0,0 +1,13 @@ +// Copyright 2015 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build amd64 && !purego && gc + +package keccak + +// This function is implemented in keccakf_amd64.s. + +//go:noescape + +func keccakF1600(a *[25]uint64) diff --git a/crypto/keccak/keccakf_amd64.s b/crypto/keccak/keccakf_amd64.s new file mode 100644 index 0000000000..99e2f16e97 --- /dev/null +++ b/crypto/keccak/keccakf_amd64.s @@ -0,0 +1,5419 @@ +// Code generated by command: go run keccakf_amd64_asm.go -out ../keccakf_amd64.s -pkg sha3. DO NOT EDIT. + +//go:build amd64 && !purego && gc + +// func keccakF1600(a *[25]uint64) +TEXT ·keccakF1600(SB), $200-8 + MOVQ a+0(FP), DI + + // Convert the user state into an internal state + NOTQ 8(DI) + NOTQ 16(DI) + NOTQ 64(DI) + NOTQ 96(DI) + NOTQ 136(DI) + NOTQ 160(DI) + + // Execute the KeccakF permutation + MOVQ (DI), SI + MOVQ 8(DI), BP + MOVQ 32(DI), R15 + XORQ 40(DI), SI + XORQ 48(DI), BP + XORQ 72(DI), R15 + XORQ 80(DI), SI + XORQ 88(DI), BP + XORQ 112(DI), R15 + XORQ 120(DI), SI + XORQ 128(DI), BP + XORQ 152(DI), R15 + XORQ 160(DI), SI + XORQ 168(DI), BP + MOVQ 176(DI), DX + MOVQ 184(DI), R8 + XORQ 192(DI), R15 + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(DI), R12 + XORQ 56(DI), DX + XORQ R15, BX + XORQ 96(DI), R12 + XORQ 136(DI), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(DI), R13 + XORQ 64(DI), R8 + XORQ SI, CX + XORQ 104(DI), R13 + XORQ 144(DI), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (DI), R10 + MOVQ 48(DI), R11 + XORQ R13, R9 + MOVQ 96(DI), R12 + MOVQ 144(DI), R13 + MOVQ 192(DI), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x0000000000000001, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (SP) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(SP) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(SP) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(SP) + MOVQ R12, 8(SP) + MOVQ R12, BP + + // Result g + MOVQ 72(DI), R11 + XORQ R9, R11 + MOVQ 80(DI), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(DI), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(DI), R13 + MOVQ 176(DI), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(SP) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(SP) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(SP) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(SP) + + // Result k + MOVQ 8(DI), R10 + MOVQ 56(DI), R11 + MOVQ 104(DI), R12 + MOVQ 152(DI), R13 + MOVQ 160(DI), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(SP) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(SP) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(SP) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(SP) + XORQ R10, R15 + + // Result m + MOVQ 40(DI), R11 + XORQ BX, R11 + MOVQ 88(DI), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(DI), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(DI), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(DI), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(SP) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(SP) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(SP) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(SP) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(SP) + XORQ R11, R15 + + // Result s + MOVQ 16(DI), R10 + MOVQ 64(DI), R11 + MOVQ 112(DI), R12 + XORQ DX, R10 + MOVQ 120(DI), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(DI), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(SP) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(SP) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(SP) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(SP) + MOVQ R8, 184(SP) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(SP), R12 + XORQ 56(SP), DX + XORQ R15, BX + XORQ 96(SP), R12 + XORQ 136(SP), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(SP), R13 + XORQ 64(SP), R8 + XORQ SI, CX + XORQ 104(SP), R13 + XORQ 144(SP), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (SP), R10 + MOVQ 48(SP), R11 + XORQ R13, R9 + MOVQ 96(SP), R12 + MOVQ 144(SP), R13 + MOVQ 192(SP), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x0000000000008082, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (DI) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(DI) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(DI) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(DI) + MOVQ R12, 8(DI) + MOVQ R12, BP + + // Result g + MOVQ 72(SP), R11 + XORQ R9, R11 + MOVQ 80(SP), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(SP), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(SP), R13 + MOVQ 176(SP), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(DI) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(DI) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(DI) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(DI) + + // Result k + MOVQ 8(SP), R10 + MOVQ 56(SP), R11 + MOVQ 104(SP), R12 + MOVQ 152(SP), R13 + MOVQ 160(SP), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(DI) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(DI) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(DI) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(DI) + XORQ R10, R15 + + // Result m + MOVQ 40(SP), R11 + XORQ BX, R11 + MOVQ 88(SP), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(SP), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(SP), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(SP), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(DI) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(DI) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(DI) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(DI) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(DI) + XORQ R11, R15 + + // Result s + MOVQ 16(SP), R10 + MOVQ 64(SP), R11 + MOVQ 112(SP), R12 + XORQ DX, R10 + MOVQ 120(SP), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(SP), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(DI) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(DI) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(DI) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(DI) + MOVQ R8, 184(DI) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(DI), R12 + XORQ 56(DI), DX + XORQ R15, BX + XORQ 96(DI), R12 + XORQ 136(DI), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(DI), R13 + XORQ 64(DI), R8 + XORQ SI, CX + XORQ 104(DI), R13 + XORQ 144(DI), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (DI), R10 + MOVQ 48(DI), R11 + XORQ R13, R9 + MOVQ 96(DI), R12 + MOVQ 144(DI), R13 + MOVQ 192(DI), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x800000000000808a, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (SP) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(SP) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(SP) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(SP) + MOVQ R12, 8(SP) + MOVQ R12, BP + + // Result g + MOVQ 72(DI), R11 + XORQ R9, R11 + MOVQ 80(DI), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(DI), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(DI), R13 + MOVQ 176(DI), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(SP) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(SP) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(SP) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(SP) + + // Result k + MOVQ 8(DI), R10 + MOVQ 56(DI), R11 + MOVQ 104(DI), R12 + MOVQ 152(DI), R13 + MOVQ 160(DI), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(SP) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(SP) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(SP) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(SP) + XORQ R10, R15 + + // Result m + MOVQ 40(DI), R11 + XORQ BX, R11 + MOVQ 88(DI), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(DI), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(DI), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(DI), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(SP) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(SP) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(SP) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(SP) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(SP) + XORQ R11, R15 + + // Result s + MOVQ 16(DI), R10 + MOVQ 64(DI), R11 + MOVQ 112(DI), R12 + XORQ DX, R10 + MOVQ 120(DI), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(DI), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(SP) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(SP) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(SP) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(SP) + MOVQ R8, 184(SP) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(SP), R12 + XORQ 56(SP), DX + XORQ R15, BX + XORQ 96(SP), R12 + XORQ 136(SP), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(SP), R13 + XORQ 64(SP), R8 + XORQ SI, CX + XORQ 104(SP), R13 + XORQ 144(SP), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (SP), R10 + MOVQ 48(SP), R11 + XORQ R13, R9 + MOVQ 96(SP), R12 + MOVQ 144(SP), R13 + MOVQ 192(SP), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x8000000080008000, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (DI) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(DI) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(DI) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(DI) + MOVQ R12, 8(DI) + MOVQ R12, BP + + // Result g + MOVQ 72(SP), R11 + XORQ R9, R11 + MOVQ 80(SP), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(SP), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(SP), R13 + MOVQ 176(SP), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(DI) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(DI) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(DI) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(DI) + + // Result k + MOVQ 8(SP), R10 + MOVQ 56(SP), R11 + MOVQ 104(SP), R12 + MOVQ 152(SP), R13 + MOVQ 160(SP), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(DI) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(DI) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(DI) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(DI) + XORQ R10, R15 + + // Result m + MOVQ 40(SP), R11 + XORQ BX, R11 + MOVQ 88(SP), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(SP), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(SP), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(SP), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(DI) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(DI) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(DI) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(DI) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(DI) + XORQ R11, R15 + + // Result s + MOVQ 16(SP), R10 + MOVQ 64(SP), R11 + MOVQ 112(SP), R12 + XORQ DX, R10 + MOVQ 120(SP), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(SP), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(DI) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(DI) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(DI) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(DI) + MOVQ R8, 184(DI) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(DI), R12 + XORQ 56(DI), DX + XORQ R15, BX + XORQ 96(DI), R12 + XORQ 136(DI), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(DI), R13 + XORQ 64(DI), R8 + XORQ SI, CX + XORQ 104(DI), R13 + XORQ 144(DI), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (DI), R10 + MOVQ 48(DI), R11 + XORQ R13, R9 + MOVQ 96(DI), R12 + MOVQ 144(DI), R13 + MOVQ 192(DI), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x000000000000808b, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (SP) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(SP) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(SP) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(SP) + MOVQ R12, 8(SP) + MOVQ R12, BP + + // Result g + MOVQ 72(DI), R11 + XORQ R9, R11 + MOVQ 80(DI), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(DI), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(DI), R13 + MOVQ 176(DI), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(SP) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(SP) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(SP) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(SP) + + // Result k + MOVQ 8(DI), R10 + MOVQ 56(DI), R11 + MOVQ 104(DI), R12 + MOVQ 152(DI), R13 + MOVQ 160(DI), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(SP) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(SP) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(SP) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(SP) + XORQ R10, R15 + + // Result m + MOVQ 40(DI), R11 + XORQ BX, R11 + MOVQ 88(DI), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(DI), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(DI), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(DI), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(SP) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(SP) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(SP) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(SP) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(SP) + XORQ R11, R15 + + // Result s + MOVQ 16(DI), R10 + MOVQ 64(DI), R11 + MOVQ 112(DI), R12 + XORQ DX, R10 + MOVQ 120(DI), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(DI), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(SP) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(SP) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(SP) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(SP) + MOVQ R8, 184(SP) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(SP), R12 + XORQ 56(SP), DX + XORQ R15, BX + XORQ 96(SP), R12 + XORQ 136(SP), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(SP), R13 + XORQ 64(SP), R8 + XORQ SI, CX + XORQ 104(SP), R13 + XORQ 144(SP), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (SP), R10 + MOVQ 48(SP), R11 + XORQ R13, R9 + MOVQ 96(SP), R12 + MOVQ 144(SP), R13 + MOVQ 192(SP), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x0000000080000001, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (DI) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(DI) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(DI) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(DI) + MOVQ R12, 8(DI) + MOVQ R12, BP + + // Result g + MOVQ 72(SP), R11 + XORQ R9, R11 + MOVQ 80(SP), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(SP), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(SP), R13 + MOVQ 176(SP), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(DI) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(DI) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(DI) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(DI) + + // Result k + MOVQ 8(SP), R10 + MOVQ 56(SP), R11 + MOVQ 104(SP), R12 + MOVQ 152(SP), R13 + MOVQ 160(SP), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(DI) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(DI) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(DI) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(DI) + XORQ R10, R15 + + // Result m + MOVQ 40(SP), R11 + XORQ BX, R11 + MOVQ 88(SP), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(SP), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(SP), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(SP), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(DI) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(DI) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(DI) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(DI) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(DI) + XORQ R11, R15 + + // Result s + MOVQ 16(SP), R10 + MOVQ 64(SP), R11 + MOVQ 112(SP), R12 + XORQ DX, R10 + MOVQ 120(SP), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(SP), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(DI) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(DI) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(DI) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(DI) + MOVQ R8, 184(DI) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(DI), R12 + XORQ 56(DI), DX + XORQ R15, BX + XORQ 96(DI), R12 + XORQ 136(DI), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(DI), R13 + XORQ 64(DI), R8 + XORQ SI, CX + XORQ 104(DI), R13 + XORQ 144(DI), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (DI), R10 + MOVQ 48(DI), R11 + XORQ R13, R9 + MOVQ 96(DI), R12 + MOVQ 144(DI), R13 + MOVQ 192(DI), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x8000000080008081, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (SP) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(SP) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(SP) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(SP) + MOVQ R12, 8(SP) + MOVQ R12, BP + + // Result g + MOVQ 72(DI), R11 + XORQ R9, R11 + MOVQ 80(DI), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(DI), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(DI), R13 + MOVQ 176(DI), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(SP) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(SP) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(SP) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(SP) + + // Result k + MOVQ 8(DI), R10 + MOVQ 56(DI), R11 + MOVQ 104(DI), R12 + MOVQ 152(DI), R13 + MOVQ 160(DI), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(SP) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(SP) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(SP) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(SP) + XORQ R10, R15 + + // Result m + MOVQ 40(DI), R11 + XORQ BX, R11 + MOVQ 88(DI), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(DI), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(DI), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(DI), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(SP) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(SP) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(SP) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(SP) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(SP) + XORQ R11, R15 + + // Result s + MOVQ 16(DI), R10 + MOVQ 64(DI), R11 + MOVQ 112(DI), R12 + XORQ DX, R10 + MOVQ 120(DI), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(DI), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(SP) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(SP) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(SP) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(SP) + MOVQ R8, 184(SP) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(SP), R12 + XORQ 56(SP), DX + XORQ R15, BX + XORQ 96(SP), R12 + XORQ 136(SP), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(SP), R13 + XORQ 64(SP), R8 + XORQ SI, CX + XORQ 104(SP), R13 + XORQ 144(SP), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (SP), R10 + MOVQ 48(SP), R11 + XORQ R13, R9 + MOVQ 96(SP), R12 + MOVQ 144(SP), R13 + MOVQ 192(SP), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x8000000000008009, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (DI) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(DI) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(DI) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(DI) + MOVQ R12, 8(DI) + MOVQ R12, BP + + // Result g + MOVQ 72(SP), R11 + XORQ R9, R11 + MOVQ 80(SP), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(SP), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(SP), R13 + MOVQ 176(SP), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(DI) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(DI) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(DI) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(DI) + + // Result k + MOVQ 8(SP), R10 + MOVQ 56(SP), R11 + MOVQ 104(SP), R12 + MOVQ 152(SP), R13 + MOVQ 160(SP), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(DI) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(DI) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(DI) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(DI) + XORQ R10, R15 + + // Result m + MOVQ 40(SP), R11 + XORQ BX, R11 + MOVQ 88(SP), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(SP), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(SP), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(SP), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(DI) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(DI) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(DI) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(DI) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(DI) + XORQ R11, R15 + + // Result s + MOVQ 16(SP), R10 + MOVQ 64(SP), R11 + MOVQ 112(SP), R12 + XORQ DX, R10 + MOVQ 120(SP), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(SP), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(DI) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(DI) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(DI) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(DI) + MOVQ R8, 184(DI) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(DI), R12 + XORQ 56(DI), DX + XORQ R15, BX + XORQ 96(DI), R12 + XORQ 136(DI), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(DI), R13 + XORQ 64(DI), R8 + XORQ SI, CX + XORQ 104(DI), R13 + XORQ 144(DI), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (DI), R10 + MOVQ 48(DI), R11 + XORQ R13, R9 + MOVQ 96(DI), R12 + MOVQ 144(DI), R13 + MOVQ 192(DI), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x000000000000008a, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (SP) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(SP) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(SP) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(SP) + MOVQ R12, 8(SP) + MOVQ R12, BP + + // Result g + MOVQ 72(DI), R11 + XORQ R9, R11 + MOVQ 80(DI), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(DI), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(DI), R13 + MOVQ 176(DI), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(SP) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(SP) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(SP) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(SP) + + // Result k + MOVQ 8(DI), R10 + MOVQ 56(DI), R11 + MOVQ 104(DI), R12 + MOVQ 152(DI), R13 + MOVQ 160(DI), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(SP) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(SP) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(SP) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(SP) + XORQ R10, R15 + + // Result m + MOVQ 40(DI), R11 + XORQ BX, R11 + MOVQ 88(DI), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(DI), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(DI), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(DI), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(SP) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(SP) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(SP) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(SP) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(SP) + XORQ R11, R15 + + // Result s + MOVQ 16(DI), R10 + MOVQ 64(DI), R11 + MOVQ 112(DI), R12 + XORQ DX, R10 + MOVQ 120(DI), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(DI), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(SP) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(SP) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(SP) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(SP) + MOVQ R8, 184(SP) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(SP), R12 + XORQ 56(SP), DX + XORQ R15, BX + XORQ 96(SP), R12 + XORQ 136(SP), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(SP), R13 + XORQ 64(SP), R8 + XORQ SI, CX + XORQ 104(SP), R13 + XORQ 144(SP), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (SP), R10 + MOVQ 48(SP), R11 + XORQ R13, R9 + MOVQ 96(SP), R12 + MOVQ 144(SP), R13 + MOVQ 192(SP), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x0000000000000088, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (DI) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(DI) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(DI) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(DI) + MOVQ R12, 8(DI) + MOVQ R12, BP + + // Result g + MOVQ 72(SP), R11 + XORQ R9, R11 + MOVQ 80(SP), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(SP), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(SP), R13 + MOVQ 176(SP), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(DI) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(DI) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(DI) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(DI) + + // Result k + MOVQ 8(SP), R10 + MOVQ 56(SP), R11 + MOVQ 104(SP), R12 + MOVQ 152(SP), R13 + MOVQ 160(SP), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(DI) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(DI) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(DI) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(DI) + XORQ R10, R15 + + // Result m + MOVQ 40(SP), R11 + XORQ BX, R11 + MOVQ 88(SP), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(SP), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(SP), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(SP), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(DI) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(DI) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(DI) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(DI) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(DI) + XORQ R11, R15 + + // Result s + MOVQ 16(SP), R10 + MOVQ 64(SP), R11 + MOVQ 112(SP), R12 + XORQ DX, R10 + MOVQ 120(SP), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(SP), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(DI) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(DI) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(DI) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(DI) + MOVQ R8, 184(DI) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(DI), R12 + XORQ 56(DI), DX + XORQ R15, BX + XORQ 96(DI), R12 + XORQ 136(DI), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(DI), R13 + XORQ 64(DI), R8 + XORQ SI, CX + XORQ 104(DI), R13 + XORQ 144(DI), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (DI), R10 + MOVQ 48(DI), R11 + XORQ R13, R9 + MOVQ 96(DI), R12 + MOVQ 144(DI), R13 + MOVQ 192(DI), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x0000000080008009, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (SP) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(SP) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(SP) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(SP) + MOVQ R12, 8(SP) + MOVQ R12, BP + + // Result g + MOVQ 72(DI), R11 + XORQ R9, R11 + MOVQ 80(DI), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(DI), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(DI), R13 + MOVQ 176(DI), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(SP) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(SP) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(SP) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(SP) + + // Result k + MOVQ 8(DI), R10 + MOVQ 56(DI), R11 + MOVQ 104(DI), R12 + MOVQ 152(DI), R13 + MOVQ 160(DI), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(SP) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(SP) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(SP) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(SP) + XORQ R10, R15 + + // Result m + MOVQ 40(DI), R11 + XORQ BX, R11 + MOVQ 88(DI), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(DI), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(DI), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(DI), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(SP) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(SP) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(SP) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(SP) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(SP) + XORQ R11, R15 + + // Result s + MOVQ 16(DI), R10 + MOVQ 64(DI), R11 + MOVQ 112(DI), R12 + XORQ DX, R10 + MOVQ 120(DI), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(DI), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(SP) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(SP) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(SP) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(SP) + MOVQ R8, 184(SP) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(SP), R12 + XORQ 56(SP), DX + XORQ R15, BX + XORQ 96(SP), R12 + XORQ 136(SP), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(SP), R13 + XORQ 64(SP), R8 + XORQ SI, CX + XORQ 104(SP), R13 + XORQ 144(SP), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (SP), R10 + MOVQ 48(SP), R11 + XORQ R13, R9 + MOVQ 96(SP), R12 + MOVQ 144(SP), R13 + MOVQ 192(SP), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x000000008000000a, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (DI) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(DI) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(DI) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(DI) + MOVQ R12, 8(DI) + MOVQ R12, BP + + // Result g + MOVQ 72(SP), R11 + XORQ R9, R11 + MOVQ 80(SP), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(SP), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(SP), R13 + MOVQ 176(SP), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(DI) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(DI) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(DI) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(DI) + + // Result k + MOVQ 8(SP), R10 + MOVQ 56(SP), R11 + MOVQ 104(SP), R12 + MOVQ 152(SP), R13 + MOVQ 160(SP), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(DI) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(DI) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(DI) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(DI) + XORQ R10, R15 + + // Result m + MOVQ 40(SP), R11 + XORQ BX, R11 + MOVQ 88(SP), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(SP), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(SP), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(SP), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(DI) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(DI) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(DI) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(DI) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(DI) + XORQ R11, R15 + + // Result s + MOVQ 16(SP), R10 + MOVQ 64(SP), R11 + MOVQ 112(SP), R12 + XORQ DX, R10 + MOVQ 120(SP), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(SP), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(DI) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(DI) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(DI) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(DI) + MOVQ R8, 184(DI) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(DI), R12 + XORQ 56(DI), DX + XORQ R15, BX + XORQ 96(DI), R12 + XORQ 136(DI), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(DI), R13 + XORQ 64(DI), R8 + XORQ SI, CX + XORQ 104(DI), R13 + XORQ 144(DI), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (DI), R10 + MOVQ 48(DI), R11 + XORQ R13, R9 + MOVQ 96(DI), R12 + MOVQ 144(DI), R13 + MOVQ 192(DI), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x000000008000808b, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (SP) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(SP) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(SP) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(SP) + MOVQ R12, 8(SP) + MOVQ R12, BP + + // Result g + MOVQ 72(DI), R11 + XORQ R9, R11 + MOVQ 80(DI), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(DI), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(DI), R13 + MOVQ 176(DI), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(SP) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(SP) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(SP) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(SP) + + // Result k + MOVQ 8(DI), R10 + MOVQ 56(DI), R11 + MOVQ 104(DI), R12 + MOVQ 152(DI), R13 + MOVQ 160(DI), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(SP) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(SP) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(SP) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(SP) + XORQ R10, R15 + + // Result m + MOVQ 40(DI), R11 + XORQ BX, R11 + MOVQ 88(DI), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(DI), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(DI), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(DI), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(SP) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(SP) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(SP) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(SP) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(SP) + XORQ R11, R15 + + // Result s + MOVQ 16(DI), R10 + MOVQ 64(DI), R11 + MOVQ 112(DI), R12 + XORQ DX, R10 + MOVQ 120(DI), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(DI), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(SP) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(SP) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(SP) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(SP) + MOVQ R8, 184(SP) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(SP), R12 + XORQ 56(SP), DX + XORQ R15, BX + XORQ 96(SP), R12 + XORQ 136(SP), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(SP), R13 + XORQ 64(SP), R8 + XORQ SI, CX + XORQ 104(SP), R13 + XORQ 144(SP), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (SP), R10 + MOVQ 48(SP), R11 + XORQ R13, R9 + MOVQ 96(SP), R12 + MOVQ 144(SP), R13 + MOVQ 192(SP), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x800000000000008b, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (DI) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(DI) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(DI) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(DI) + MOVQ R12, 8(DI) + MOVQ R12, BP + + // Result g + MOVQ 72(SP), R11 + XORQ R9, R11 + MOVQ 80(SP), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(SP), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(SP), R13 + MOVQ 176(SP), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(DI) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(DI) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(DI) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(DI) + + // Result k + MOVQ 8(SP), R10 + MOVQ 56(SP), R11 + MOVQ 104(SP), R12 + MOVQ 152(SP), R13 + MOVQ 160(SP), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(DI) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(DI) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(DI) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(DI) + XORQ R10, R15 + + // Result m + MOVQ 40(SP), R11 + XORQ BX, R11 + MOVQ 88(SP), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(SP), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(SP), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(SP), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(DI) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(DI) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(DI) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(DI) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(DI) + XORQ R11, R15 + + // Result s + MOVQ 16(SP), R10 + MOVQ 64(SP), R11 + MOVQ 112(SP), R12 + XORQ DX, R10 + MOVQ 120(SP), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(SP), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(DI) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(DI) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(DI) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(DI) + MOVQ R8, 184(DI) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(DI), R12 + XORQ 56(DI), DX + XORQ R15, BX + XORQ 96(DI), R12 + XORQ 136(DI), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(DI), R13 + XORQ 64(DI), R8 + XORQ SI, CX + XORQ 104(DI), R13 + XORQ 144(DI), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (DI), R10 + MOVQ 48(DI), R11 + XORQ R13, R9 + MOVQ 96(DI), R12 + MOVQ 144(DI), R13 + MOVQ 192(DI), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x8000000000008089, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (SP) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(SP) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(SP) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(SP) + MOVQ R12, 8(SP) + MOVQ R12, BP + + // Result g + MOVQ 72(DI), R11 + XORQ R9, R11 + MOVQ 80(DI), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(DI), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(DI), R13 + MOVQ 176(DI), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(SP) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(SP) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(SP) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(SP) + + // Result k + MOVQ 8(DI), R10 + MOVQ 56(DI), R11 + MOVQ 104(DI), R12 + MOVQ 152(DI), R13 + MOVQ 160(DI), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(SP) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(SP) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(SP) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(SP) + XORQ R10, R15 + + // Result m + MOVQ 40(DI), R11 + XORQ BX, R11 + MOVQ 88(DI), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(DI), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(DI), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(DI), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(SP) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(SP) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(SP) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(SP) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(SP) + XORQ R11, R15 + + // Result s + MOVQ 16(DI), R10 + MOVQ 64(DI), R11 + MOVQ 112(DI), R12 + XORQ DX, R10 + MOVQ 120(DI), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(DI), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(SP) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(SP) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(SP) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(SP) + MOVQ R8, 184(SP) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(SP), R12 + XORQ 56(SP), DX + XORQ R15, BX + XORQ 96(SP), R12 + XORQ 136(SP), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(SP), R13 + XORQ 64(SP), R8 + XORQ SI, CX + XORQ 104(SP), R13 + XORQ 144(SP), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (SP), R10 + MOVQ 48(SP), R11 + XORQ R13, R9 + MOVQ 96(SP), R12 + MOVQ 144(SP), R13 + MOVQ 192(SP), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x8000000000008003, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (DI) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(DI) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(DI) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(DI) + MOVQ R12, 8(DI) + MOVQ R12, BP + + // Result g + MOVQ 72(SP), R11 + XORQ R9, R11 + MOVQ 80(SP), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(SP), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(SP), R13 + MOVQ 176(SP), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(DI) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(DI) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(DI) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(DI) + + // Result k + MOVQ 8(SP), R10 + MOVQ 56(SP), R11 + MOVQ 104(SP), R12 + MOVQ 152(SP), R13 + MOVQ 160(SP), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(DI) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(DI) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(DI) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(DI) + XORQ R10, R15 + + // Result m + MOVQ 40(SP), R11 + XORQ BX, R11 + MOVQ 88(SP), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(SP), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(SP), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(SP), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(DI) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(DI) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(DI) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(DI) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(DI) + XORQ R11, R15 + + // Result s + MOVQ 16(SP), R10 + MOVQ 64(SP), R11 + MOVQ 112(SP), R12 + XORQ DX, R10 + MOVQ 120(SP), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(SP), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(DI) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(DI) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(DI) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(DI) + MOVQ R8, 184(DI) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(DI), R12 + XORQ 56(DI), DX + XORQ R15, BX + XORQ 96(DI), R12 + XORQ 136(DI), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(DI), R13 + XORQ 64(DI), R8 + XORQ SI, CX + XORQ 104(DI), R13 + XORQ 144(DI), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (DI), R10 + MOVQ 48(DI), R11 + XORQ R13, R9 + MOVQ 96(DI), R12 + MOVQ 144(DI), R13 + MOVQ 192(DI), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x8000000000008002, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (SP) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(SP) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(SP) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(SP) + MOVQ R12, 8(SP) + MOVQ R12, BP + + // Result g + MOVQ 72(DI), R11 + XORQ R9, R11 + MOVQ 80(DI), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(DI), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(DI), R13 + MOVQ 176(DI), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(SP) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(SP) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(SP) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(SP) + + // Result k + MOVQ 8(DI), R10 + MOVQ 56(DI), R11 + MOVQ 104(DI), R12 + MOVQ 152(DI), R13 + MOVQ 160(DI), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(SP) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(SP) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(SP) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(SP) + XORQ R10, R15 + + // Result m + MOVQ 40(DI), R11 + XORQ BX, R11 + MOVQ 88(DI), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(DI), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(DI), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(DI), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(SP) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(SP) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(SP) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(SP) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(SP) + XORQ R11, R15 + + // Result s + MOVQ 16(DI), R10 + MOVQ 64(DI), R11 + MOVQ 112(DI), R12 + XORQ DX, R10 + MOVQ 120(DI), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(DI), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(SP) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(SP) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(SP) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(SP) + MOVQ R8, 184(SP) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(SP), R12 + XORQ 56(SP), DX + XORQ R15, BX + XORQ 96(SP), R12 + XORQ 136(SP), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(SP), R13 + XORQ 64(SP), R8 + XORQ SI, CX + XORQ 104(SP), R13 + XORQ 144(SP), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (SP), R10 + MOVQ 48(SP), R11 + XORQ R13, R9 + MOVQ 96(SP), R12 + MOVQ 144(SP), R13 + MOVQ 192(SP), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x8000000000000080, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (DI) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(DI) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(DI) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(DI) + MOVQ R12, 8(DI) + MOVQ R12, BP + + // Result g + MOVQ 72(SP), R11 + XORQ R9, R11 + MOVQ 80(SP), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(SP), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(SP), R13 + MOVQ 176(SP), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(DI) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(DI) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(DI) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(DI) + + // Result k + MOVQ 8(SP), R10 + MOVQ 56(SP), R11 + MOVQ 104(SP), R12 + MOVQ 152(SP), R13 + MOVQ 160(SP), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(DI) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(DI) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(DI) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(DI) + XORQ R10, R15 + + // Result m + MOVQ 40(SP), R11 + XORQ BX, R11 + MOVQ 88(SP), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(SP), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(SP), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(SP), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(DI) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(DI) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(DI) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(DI) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(DI) + XORQ R11, R15 + + // Result s + MOVQ 16(SP), R10 + MOVQ 64(SP), R11 + MOVQ 112(SP), R12 + XORQ DX, R10 + MOVQ 120(SP), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(SP), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(DI) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(DI) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(DI) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(DI) + MOVQ R8, 184(DI) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(DI), R12 + XORQ 56(DI), DX + XORQ R15, BX + XORQ 96(DI), R12 + XORQ 136(DI), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(DI), R13 + XORQ 64(DI), R8 + XORQ SI, CX + XORQ 104(DI), R13 + XORQ 144(DI), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (DI), R10 + MOVQ 48(DI), R11 + XORQ R13, R9 + MOVQ 96(DI), R12 + MOVQ 144(DI), R13 + MOVQ 192(DI), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x000000000000800a, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (SP) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(SP) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(SP) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(SP) + MOVQ R12, 8(SP) + MOVQ R12, BP + + // Result g + MOVQ 72(DI), R11 + XORQ R9, R11 + MOVQ 80(DI), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(DI), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(DI), R13 + MOVQ 176(DI), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(SP) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(SP) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(SP) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(SP) + + // Result k + MOVQ 8(DI), R10 + MOVQ 56(DI), R11 + MOVQ 104(DI), R12 + MOVQ 152(DI), R13 + MOVQ 160(DI), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(SP) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(SP) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(SP) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(SP) + XORQ R10, R15 + + // Result m + MOVQ 40(DI), R11 + XORQ BX, R11 + MOVQ 88(DI), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(DI), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(DI), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(DI), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(SP) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(SP) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(SP) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(SP) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(SP) + XORQ R11, R15 + + // Result s + MOVQ 16(DI), R10 + MOVQ 64(DI), R11 + MOVQ 112(DI), R12 + XORQ DX, R10 + MOVQ 120(DI), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(DI), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(SP) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(SP) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(SP) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(SP) + MOVQ R8, 184(SP) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(SP), R12 + XORQ 56(SP), DX + XORQ R15, BX + XORQ 96(SP), R12 + XORQ 136(SP), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(SP), R13 + XORQ 64(SP), R8 + XORQ SI, CX + XORQ 104(SP), R13 + XORQ 144(SP), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (SP), R10 + MOVQ 48(SP), R11 + XORQ R13, R9 + MOVQ 96(SP), R12 + MOVQ 144(SP), R13 + MOVQ 192(SP), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x800000008000000a, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (DI) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(DI) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(DI) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(DI) + MOVQ R12, 8(DI) + MOVQ R12, BP + + // Result g + MOVQ 72(SP), R11 + XORQ R9, R11 + MOVQ 80(SP), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(SP), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(SP), R13 + MOVQ 176(SP), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(DI) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(DI) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(DI) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(DI) + + // Result k + MOVQ 8(SP), R10 + MOVQ 56(SP), R11 + MOVQ 104(SP), R12 + MOVQ 152(SP), R13 + MOVQ 160(SP), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(DI) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(DI) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(DI) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(DI) + XORQ R10, R15 + + // Result m + MOVQ 40(SP), R11 + XORQ BX, R11 + MOVQ 88(SP), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(SP), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(SP), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(SP), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(DI) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(DI) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(DI) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(DI) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(DI) + XORQ R11, R15 + + // Result s + MOVQ 16(SP), R10 + MOVQ 64(SP), R11 + MOVQ 112(SP), R12 + XORQ DX, R10 + MOVQ 120(SP), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(SP), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(DI) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(DI) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(DI) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(DI) + MOVQ R8, 184(DI) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(DI), R12 + XORQ 56(DI), DX + XORQ R15, BX + XORQ 96(DI), R12 + XORQ 136(DI), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(DI), R13 + XORQ 64(DI), R8 + XORQ SI, CX + XORQ 104(DI), R13 + XORQ 144(DI), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (DI), R10 + MOVQ 48(DI), R11 + XORQ R13, R9 + MOVQ 96(DI), R12 + MOVQ 144(DI), R13 + MOVQ 192(DI), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x8000000080008081, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (SP) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(SP) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(SP) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(SP) + MOVQ R12, 8(SP) + MOVQ R12, BP + + // Result g + MOVQ 72(DI), R11 + XORQ R9, R11 + MOVQ 80(DI), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(DI), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(DI), R13 + MOVQ 176(DI), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(SP) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(SP) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(SP) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(SP) + + // Result k + MOVQ 8(DI), R10 + MOVQ 56(DI), R11 + MOVQ 104(DI), R12 + MOVQ 152(DI), R13 + MOVQ 160(DI), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(SP) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(SP) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(SP) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(SP) + XORQ R10, R15 + + // Result m + MOVQ 40(DI), R11 + XORQ BX, R11 + MOVQ 88(DI), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(DI), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(DI), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(DI), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(SP) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(SP) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(SP) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(SP) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(SP) + XORQ R11, R15 + + // Result s + MOVQ 16(DI), R10 + MOVQ 64(DI), R11 + MOVQ 112(DI), R12 + XORQ DX, R10 + MOVQ 120(DI), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(DI), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(SP) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(SP) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(SP) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(SP) + MOVQ R8, 184(SP) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(SP), R12 + XORQ 56(SP), DX + XORQ R15, BX + XORQ 96(SP), R12 + XORQ 136(SP), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(SP), R13 + XORQ 64(SP), R8 + XORQ SI, CX + XORQ 104(SP), R13 + XORQ 144(SP), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (SP), R10 + MOVQ 48(SP), R11 + XORQ R13, R9 + MOVQ 96(SP), R12 + MOVQ 144(SP), R13 + MOVQ 192(SP), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x8000000000008080, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (DI) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(DI) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(DI) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(DI) + MOVQ R12, 8(DI) + MOVQ R12, BP + + // Result g + MOVQ 72(SP), R11 + XORQ R9, R11 + MOVQ 80(SP), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(SP), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(SP), R13 + MOVQ 176(SP), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(DI) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(DI) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(DI) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(DI) + + // Result k + MOVQ 8(SP), R10 + MOVQ 56(SP), R11 + MOVQ 104(SP), R12 + MOVQ 152(SP), R13 + MOVQ 160(SP), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(DI) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(DI) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(DI) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(DI) + XORQ R10, R15 + + // Result m + MOVQ 40(SP), R11 + XORQ BX, R11 + MOVQ 88(SP), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(SP), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(SP), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(SP), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(DI) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(DI) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(DI) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(DI) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(DI) + XORQ R11, R15 + + // Result s + MOVQ 16(SP), R10 + MOVQ 64(SP), R11 + MOVQ 112(SP), R12 + XORQ DX, R10 + MOVQ 120(SP), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(SP), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(DI) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(DI) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(DI) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(DI) + MOVQ R8, 184(DI) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(DI), R12 + XORQ 56(DI), DX + XORQ R15, BX + XORQ 96(DI), R12 + XORQ 136(DI), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(DI), R13 + XORQ 64(DI), R8 + XORQ SI, CX + XORQ 104(DI), R13 + XORQ 144(DI), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (DI), R10 + MOVQ 48(DI), R11 + XORQ R13, R9 + MOVQ 96(DI), R12 + MOVQ 144(DI), R13 + MOVQ 192(DI), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x0000000080000001, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (SP) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(SP) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(SP) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(SP) + MOVQ R12, 8(SP) + MOVQ R12, BP + + // Result g + MOVQ 72(DI), R11 + XORQ R9, R11 + MOVQ 80(DI), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(DI), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(DI), R13 + MOVQ 176(DI), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(SP) + XORQ AX, SI + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(SP) + XORQ AX, BP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(SP) + NOTQ R14 + XORQ R10, R15 + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(SP) + + // Result k + MOVQ 8(DI), R10 + MOVQ 56(DI), R11 + MOVQ 104(DI), R12 + MOVQ 152(DI), R13 + MOVQ 160(DI), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(SP) + XORQ AX, SI + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(SP) + XORQ AX, BP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(SP) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(SP) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(SP) + XORQ R10, R15 + + // Result m + MOVQ 40(DI), R11 + XORQ BX, R11 + MOVQ 88(DI), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(DI), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(DI), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(DI), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(SP) + XORQ AX, SI + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(SP) + XORQ AX, BP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(SP) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(SP) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(SP) + XORQ R11, R15 + + // Result s + MOVQ 16(DI), R10 + MOVQ 64(DI), R11 + MOVQ 112(DI), R12 + XORQ DX, R10 + MOVQ 120(DI), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(DI), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(SP) + ROLQ $0x27, R12 + XORQ R9, R15 + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(SP) + XORQ BX, SI + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(SP) + XORQ CX, BP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(SP) + MOVQ R8, 184(SP) + + // Prepare round + MOVQ BP, BX + ROLQ $0x01, BX + MOVQ 16(SP), R12 + XORQ 56(SP), DX + XORQ R15, BX + XORQ 96(SP), R12 + XORQ 136(SP), DX + XORQ DX, R12 + MOVQ R12, CX + ROLQ $0x01, CX + MOVQ 24(SP), R13 + XORQ 64(SP), R8 + XORQ SI, CX + XORQ 104(SP), R13 + XORQ 144(SP), R8 + XORQ R8, R13 + MOVQ R13, DX + ROLQ $0x01, DX + MOVQ R15, R8 + XORQ BP, DX + ROLQ $0x01, R8 + MOVQ SI, R9 + XORQ R12, R8 + ROLQ $0x01, R9 + + // Result b + MOVQ (SP), R10 + MOVQ 48(SP), R11 + XORQ R13, R9 + MOVQ 96(SP), R12 + MOVQ 144(SP), R13 + MOVQ 192(SP), R14 + XORQ CX, R11 + ROLQ $0x2c, R11 + XORQ DX, R12 + XORQ BX, R10 + ROLQ $0x2b, R12 + MOVQ R11, SI + MOVQ $0x8000000080008008, AX + ORQ R12, SI + XORQ R10, AX + XORQ AX, SI + MOVQ SI, (DI) + XORQ R9, R14 + ROLQ $0x0e, R14 + MOVQ R10, R15 + ANDQ R11, R15 + XORQ R14, R15 + MOVQ R15, 32(DI) + XORQ R8, R13 + ROLQ $0x15, R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 16(DI) + NOTQ R12 + ORQ R10, R14 + ORQ R13, R12 + XORQ R13, R14 + XORQ R11, R12 + MOVQ R14, 24(DI) + MOVQ R12, 8(DI) + NOP + + // Result g + MOVQ 72(SP), R11 + XORQ R9, R11 + MOVQ 80(SP), R12 + ROLQ $0x14, R11 + XORQ BX, R12 + ROLQ $0x03, R12 + MOVQ 24(SP), R10 + MOVQ R11, AX + ORQ R12, AX + XORQ R8, R10 + MOVQ 128(SP), R13 + MOVQ 176(SP), R14 + ROLQ $0x1c, R10 + XORQ R10, AX + MOVQ AX, 40(DI) + NOP + XORQ CX, R13 + ROLQ $0x2d, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 48(DI) + NOP + XORQ DX, R14 + ROLQ $0x3d, R14 + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 64(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 72(DI) + NOTQ R14 + NOP + ORQ R14, R13 + XORQ R12, R13 + MOVQ R13, 56(DI) + + // Result k + MOVQ 8(SP), R10 + MOVQ 56(SP), R11 + MOVQ 104(SP), R12 + MOVQ 152(SP), R13 + MOVQ 160(SP), R14 + XORQ DX, R11 + ROLQ $0x06, R11 + XORQ R8, R12 + ROLQ $0x19, R12 + MOVQ R11, AX + ORQ R12, AX + XORQ CX, R10 + ROLQ $0x01, R10 + XORQ R10, AX + MOVQ AX, 80(DI) + NOP + XORQ R9, R13 + ROLQ $0x08, R13 + MOVQ R12, AX + ANDQ R13, AX + XORQ R11, AX + MOVQ AX, 88(DI) + NOP + XORQ BX, R14 + ROLQ $0x12, R14 + NOTQ R13 + MOVQ R13, AX + ANDQ R14, AX + XORQ R12, AX + MOVQ AX, 96(DI) + MOVQ R14, AX + ORQ R10, AX + XORQ R13, AX + MOVQ AX, 104(DI) + ANDQ R11, R10 + XORQ R14, R10 + MOVQ R10, 112(DI) + NOP + + // Result m + MOVQ 40(SP), R11 + XORQ BX, R11 + MOVQ 88(SP), R12 + ROLQ $0x24, R11 + XORQ CX, R12 + MOVQ 32(SP), R10 + ROLQ $0x0a, R12 + MOVQ R11, AX + MOVQ 136(SP), R13 + ANDQ R12, AX + XORQ R9, R10 + MOVQ 184(SP), R14 + ROLQ $0x1b, R10 + XORQ R10, AX + MOVQ AX, 120(DI) + NOP + XORQ DX, R13 + ROLQ $0x0f, R13 + MOVQ R12, AX + ORQ R13, AX + XORQ R11, AX + MOVQ AX, 128(DI) + NOP + XORQ R8, R14 + ROLQ $0x38, R14 + NOTQ R13 + MOVQ R13, AX + ORQ R14, AX + XORQ R12, AX + MOVQ AX, 136(DI) + ORQ R10, R11 + XORQ R14, R11 + MOVQ R11, 152(DI) + ANDQ R10, R14 + XORQ R13, R14 + MOVQ R14, 144(DI) + NOP + + // Result s + MOVQ 16(SP), R10 + MOVQ 64(SP), R11 + MOVQ 112(SP), R12 + XORQ DX, R10 + MOVQ 120(SP), R13 + ROLQ $0x3e, R10 + XORQ R8, R11 + MOVQ 168(SP), R14 + ROLQ $0x37, R11 + XORQ R9, R12 + MOVQ R10, R9 + XORQ CX, R14 + ROLQ $0x02, R14 + ANDQ R11, R9 + XORQ R14, R9 + MOVQ R9, 192(DI) + ROLQ $0x27, R12 + NOP + NOTQ R11 + XORQ BX, R13 + MOVQ R11, BX + ANDQ R12, BX + XORQ R10, BX + MOVQ BX, 160(DI) + NOP + ROLQ $0x29, R13 + MOVQ R12, CX + ORQ R13, CX + XORQ R11, CX + MOVQ CX, 168(DI) + NOP + MOVQ R13, DX + MOVQ R14, R8 + ANDQ R14, DX + ORQ R10, R8 + XORQ R12, DX + XORQ R13, R8 + MOVQ DX, 176(DI) + MOVQ R8, 184(DI) + + // Revert the internal state to the user state + NOTQ 8(DI) + NOTQ 16(DI) + NOTQ 64(DI) + NOTQ 96(DI) + NOTQ 136(DI) + NOTQ 160(DI) + RET diff --git a/crypto/keccak/sha3.go b/crypto/keccak/sha3.go new file mode 100644 index 0000000000..a554323244 --- /dev/null +++ b/crypto/keccak/sha3.go @@ -0,0 +1,244 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package keccak + +import ( + "crypto/subtle" + "encoding/binary" + "errors" + "unsafe" + + "golang.org/x/sys/cpu" +) + +// spongeDirection indicates the direction bytes are flowing through the sponge. +type spongeDirection int + +const ( + // spongeAbsorbing indicates that the sponge is absorbing input. + spongeAbsorbing spongeDirection = iota + // spongeSqueezing indicates that the sponge is being squeezed. + spongeSqueezing +) + +type state struct { + a [1600 / 8]byte // main state of the hash + + // a[n:rate] is the buffer. If absorbing, it's the remaining space to XOR + // into before running the permutation. If squeezing, it's the remaining + // output to produce before running the permutation. + n, rate int + + // dsbyte contains the "domain separation" bits and the first bit of + // the padding. Sections 6.1 and 6.2 of [1] separate the outputs of the + // SHA-3 and SHAKE functions by appending bitstrings to the message. + // Using a little-endian bit-ordering convention, these are "01" for SHA-3 + // and "1111" for SHAKE, or 00000010b and 00001111b, respectively. Then the + // padding rule from section 5.1 is applied to pad the message to a multiple + // of the rate, which involves adding a "1" bit, zero or more "0" bits, and + // a final "1" bit. We merge the first "1" bit from the padding into dsbyte, + // giving 00000110b (0x06) and 00011111b (0x1f). + // [1] http://csrc.nist.gov/publications/drafts/fips-202/fips_202_draft.pdf + // "Draft FIPS 202: SHA-3 Standard: Permutation-Based Hash and + // Extendable-Output Functions (May 2014)" + dsbyte byte + + outputLen int // the default output size in bytes + state spongeDirection // whether the sponge is absorbing or squeezing +} + +// BlockSize returns the rate of sponge underlying this hash function. +func (d *state) BlockSize() int { return d.rate } + +// Size returns the output size of the hash function in bytes. +func (d *state) Size() int { return d.outputLen } + +// Reset clears the internal state by zeroing the sponge state and +// the buffer indexes, and setting Sponge.state to absorbing. +func (d *state) Reset() { + // Zero the permutation's state. + for i := range d.a { + d.a[i] = 0 + } + d.state = spongeAbsorbing + d.n = 0 +} + +func (d *state) clone() *state { + ret := *d + return &ret +} + +// permute applies the KeccakF-1600 permutation. +func (d *state) permute() { + var a *[25]uint64 + if cpu.IsBigEndian { + a = new([25]uint64) + for i := range a { + a[i] = binary.LittleEndian.Uint64(d.a[i*8:]) + } + } else { + a = (*[25]uint64)(unsafe.Pointer(&d.a)) + } + + keccakF1600(a) + d.n = 0 + + if cpu.IsBigEndian { + for i := range a { + binary.LittleEndian.PutUint64(d.a[i*8:], a[i]) + } + } +} + +// pads appends the domain separation bits in dsbyte, applies +// the multi-bitrate 10..1 padding rule, and permutes the state. +func (d *state) padAndPermute() { + // Pad with this instance's domain-separator bits. We know that there's + // at least one byte of space in the sponge because, if it were full, + // permute would have been called to empty it. dsbyte also contains the + // first one bit for the padding. See the comment in the state struct. + d.a[d.n] ^= d.dsbyte + // This adds the final one bit for the padding. Because of the way that + // bits are numbered from the LSB upwards, the final bit is the MSB of + // the last byte. + d.a[d.rate-1] ^= 0x80 + // Apply the permutation + d.permute() + d.state = spongeSqueezing +} + +// Write absorbs more data into the hash's state. It panics if any +// output has already been read. +func (d *state) Write(p []byte) (n int, err error) { + if d.state != spongeAbsorbing { + panic("sha3: Write after Read") + } + + n = len(p) + + for len(p) > 0 { + x := subtle.XORBytes(d.a[d.n:d.rate], d.a[d.n:d.rate], p) + d.n += x + p = p[x:] + + // If the sponge is full, apply the permutation. + if d.n == d.rate { + d.permute() + } + } + + return +} + +// Read squeezes an arbitrary number of bytes from the sponge. +func (d *state) Read(out []byte) (n int, err error) { + // If we're still absorbing, pad and apply the permutation. + if d.state == spongeAbsorbing { + d.padAndPermute() + } + + n = len(out) + + // Now, do the squeezing. + for len(out) > 0 { + // Apply the permutation if we've squeezed the sponge dry. + if d.n == d.rate { + d.permute() + } + + x := copy(out, d.a[d.n:d.rate]) + d.n += x + out = out[x:] + } + + return +} + +// Sum applies padding to the hash state and then squeezes out the desired +// number of output bytes. It panics if any output has already been read. +func (d *state) Sum(in []byte) []byte { + if d.state != spongeAbsorbing { + panic("sha3: Sum after Read") + } + + // Make a copy of the original hash so that caller can keep writing + // and summing. + dup := d.clone() + hash := make([]byte, dup.outputLen, 64) // explicit cap to allow stack allocation + dup.Read(hash) + return append(in, hash...) +} + +const ( + magicSHA3 = "sha\x08" + magicShake = "sha\x09" + magicCShake = "sha\x0a" + magicKeccak = "sha\x0b" + // magic || rate || main state || n || sponge direction + marshaledSize = len(magicSHA3) + 1 + 200 + 1 + 1 +) + +func (d *state) MarshalBinary() ([]byte, error) { + return d.AppendBinary(make([]byte, 0, marshaledSize)) +} + +func (d *state) AppendBinary(b []byte) ([]byte, error) { + switch d.dsbyte { + case dsbyteSHA3: + b = append(b, magicSHA3...) + case dsbyteShake: + b = append(b, magicShake...) + case dsbyteCShake: + b = append(b, magicCShake...) + case dsbyteKeccak: + b = append(b, magicKeccak...) + default: + panic("unknown dsbyte") + } + // rate is at most 168, and n is at most rate. + b = append(b, byte(d.rate)) + b = append(b, d.a[:]...) + b = append(b, byte(d.n), byte(d.state)) + return b, nil +} + +func (d *state) UnmarshalBinary(b []byte) error { + if len(b) != marshaledSize { + return errors.New("sha3: invalid hash state") + } + + magic := string(b[:len(magicSHA3)]) + b = b[len(magicSHA3):] + switch { + case magic == magicSHA3 && d.dsbyte == dsbyteSHA3: + case magic == magicShake && d.dsbyte == dsbyteShake: + case magic == magicCShake && d.dsbyte == dsbyteCShake: + case magic == magicKeccak && d.dsbyte == dsbyteKeccak: + default: + return errors.New("sha3: invalid hash state identifier") + } + + rate := int(b[0]) + b = b[1:] + if rate != d.rate { + return errors.New("sha3: invalid hash state function") + } + + copy(d.a[:], b) + b = b[len(d.a):] + + n, state := int(b[0]), spongeDirection(b[1]) + if n > d.rate { + return errors.New("sha3: invalid hash state") + } + d.n = n + if state != spongeAbsorbing && state != spongeSqueezing { + return errors.New("sha3: invalid hash state") + } + d.state = state + + return nil +} diff --git a/crypto/keccak/sha3_test.go b/crypto/keccak/sha3_test.go new file mode 100644 index 0000000000..28a20ec72d --- /dev/null +++ b/crypto/keccak/sha3_test.go @@ -0,0 +1,210 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package keccak + +// Tests include all the ShortMsgKATs provided by the Keccak team at +// https://github.com/gvanas/KeccakCodePackage +// +// They only include the zero-bit case of the bitwise testvectors +// published by NIST in the draft of FIPS-202. + +import ( + "bytes" + "compress/flate" + "encoding" + "encoding/hex" + "encoding/json" + "hash" + "math/rand" + "os" + "strings" + "testing" +) + +const ( + testString = "brekeccakkeccak koax koax" + katFilename = "testdata/keccakKats.json.deflate" +) + +// testDigests contains functions returning hash.Hash instances +// with output-length equal to the KAT length for SHA-3, Keccak +// and SHAKE instances. +var testDigests = map[string]func() hash.Hash{ + "Keccak-256": NewLegacyKeccak256, + "Keccak-512": NewLegacyKeccak512, +} + +// decodeHex converts a hex-encoded string into a raw byte string. +func decodeHex(s string) []byte { + b, err := hex.DecodeString(s) + if err != nil { + panic(err) + } + return b +} + +// structs used to marshal JSON test-cases. +type KeccakKats struct { + Kats map[string][]struct { + Digest string `json:"digest"` + Length int64 `json:"length"` + Message string `json:"message"` + + // Defined only for cSHAKE + N string `json:"N"` + S string `json:"S"` + } +} + +// TestKeccakKats tests the SHA-3 and Shake implementations against all the +// ShortMsgKATs from https://github.com/gvanas/KeccakCodePackage +// (The testvectors are stored in keccakKats.json.deflate due to their length.) +func TestKeccakKats(t *testing.T) { + // Read the KATs. + deflated, err := os.Open(katFilename) + if err != nil { + t.Errorf("error opening %s: %s", katFilename, err) + } + file := flate.NewReader(deflated) + dec := json.NewDecoder(file) + var katSet KeccakKats + err = dec.Decode(&katSet) + if err != nil { + t.Errorf("error decoding KATs: %s", err) + } + + for algo, function := range testDigests { + d := function() + for _, kat := range katSet.Kats[algo] { + d.Reset() + in, err := hex.DecodeString(kat.Message) + if err != nil { + t.Errorf("error decoding KAT: %s", err) + } + d.Write(in[:kat.Length/8]) + got := strings.ToUpper(hex.EncodeToString(d.Sum(nil))) + if got != kat.Digest { + t.Errorf("function=%s, length=%d\nmessage:\n %s\ngot:\n %s\nwanted:\n %s", + algo, kat.Length, kat.Message, got, kat.Digest) + t.Logf("wanted %+v", kat) + t.FailNow() + } + continue + } + } +} + +// TestKeccak does a basic test of the non-standardized Keccak hash functions. +func TestKeccak(t *testing.T) { + tests := []struct { + fn func() hash.Hash + data []byte + want string + }{ + { + NewLegacyKeccak256, + []byte("abc"), + "4e03657aea45a94fc7d47ba826c8d667c0d1e6e33a64a036ec44f58fa12d6c45", + }, + { + NewLegacyKeccak512, + []byte("abc"), + "18587dc2ea106b9a1563e32b3312421ca164c7f1f07bc922a9c83d77cea3a1e5d0c69910739025372dc14ac9642629379540c17e2a65b19d77aa511a9d00bb96", + }, + } + + for _, u := range tests { + h := u.fn() + h.Write(u.data) + got := h.Sum(nil) + want := decodeHex(u.want) + if !bytes.Equal(got, want) { + t.Errorf("unexpected hash for size %d: got '%x' want '%s'", h.Size()*8, got, u.want) + } + } +} + +// TestUnalignedWrite tests that writing data in an arbitrary pattern with +// small input buffers. +func TestUnalignedWrite(t *testing.T) { + buf := sequentialBytes(0x10000) + for alg, df := range testDigests { + d := df() + d.Reset() + d.Write(buf) + want := d.Sum(nil) + d.Reset() + for i := 0; i < len(buf); { + // Cycle through offsets which make a 137 byte sequence. + // Because 137 is prime this sequence should exercise all corner cases. + offsets := [17]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1} + for _, j := range offsets { + if v := len(buf) - i; v < j { + j = v + } + d.Write(buf[i : i+j]) + i += j + } + } + got := d.Sum(nil) + if !bytes.Equal(got, want) { + t.Errorf("Unaligned writes, alg=%s\ngot %q, want %q", alg, got, want) + } + } +} + +// sequentialBytes produces a buffer of size consecutive bytes 0x00, 0x01, ..., used for testing. +// +// The alignment of each slice is intentionally randomized to detect alignment +// issues in the implementation. See https://golang.org/issue/37644. +// Ideally, the compiler should fuzz the alignment itself. +// (See https://golang.org/issue/35128.) +func sequentialBytes(size int) []byte { + alignmentOffset := rand.Intn(8) + result := make([]byte, size+alignmentOffset)[alignmentOffset:] + for i := range result { + result[i] = byte(i) + } + return result +} + +func TestMarshalUnmarshal(t *testing.T) { + t.Run("Keccak-256", func(t *testing.T) { testMarshalUnmarshal(t, NewLegacyKeccak256()) }) + t.Run("Keccak-512", func(t *testing.T) { testMarshalUnmarshal(t, NewLegacyKeccak512()) }) +} + +// TODO(filippo): move this to crypto/internal/cryptotest. +func testMarshalUnmarshal(t *testing.T, h hash.Hash) { + buf := make([]byte, 200) + rand.Read(buf) + n := rand.Intn(200) + h.Write(buf) + want := h.Sum(nil) + h.Reset() + h.Write(buf[:n]) + b, err := h.(encoding.BinaryMarshaler).MarshalBinary() + if err != nil { + t.Errorf("MarshalBinary: %v", err) + } + h.Write(bytes.Repeat([]byte{0}, 200)) + if err := h.(encoding.BinaryUnmarshaler).UnmarshalBinary(b); err != nil { + t.Errorf("UnmarshalBinary: %v", err) + } + h.Write(buf[n:]) + got := h.Sum(nil) + if !bytes.Equal(got, want) { + t.Errorf("got %x, want %x", got, want) + } +} + +// BenchmarkPermutationFunction measures the speed of the permutation function +// with no input data. +func BenchmarkPermutationFunction(b *testing.B) { + b.SetBytes(int64(200)) + var lanes [25]uint64 + for i := 0; i < b.N; i++ { + keccakF1600(&lanes) + } +} diff --git a/crypto/keccak/testdata/keccakKats.json.deflate b/crypto/keccak/testdata/keccakKats.json.deflate new file mode 100644 index 0000000000000000000000000000000000000000..7a94c2f8bce62c70664cda859a30845cab713c24 GIT binary patch literal 540828 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

r46_VrdCQ_>b^q8k=CXV-{AK%%}5RO9u(dzXPu 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 z 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

FTjCk4EfUM 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%0DqQa){X-aj;KFxu|u-~Y19U#!gK<<*(t+rgptqG^ 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


;$zL+MxI{G7r<YyJ|ZNOj7 zgc{S*ed5kuF+8O3*_$a4Fhk{sYV=rCZfBgeT*$G{OsM}kM)dV-d%s6LX9(LS=9{}- z@tjFHaqqbCH^?;J6`559oNbPkMAtS_&M^zUiIs6YR#57$pStsQ>Uk7lynz=?H8U(7 z%a3hA_Np+Qs+D!iJ!!kBV*VNX$^rhY4a5L`<^!RaUU8`*E1&vjxKnUW?_2TW-aE9K zBwEBi1bFj+-C*EXBo=H@q&NE;jf8?%>_zcy;jo<;u6RpkM`|_jl*QA1>!SBj|Gg%f zW{cmTFy*1ovf95u0%&E}rQXOvjz(a=2jSX>D|VU` z)bbMUbq9REbVS{dtFV<|Y^OKBLGnXPjcT=&VpTWA9&U&ZQQQLRO&QUpw_px3bUgrW zqkWYU9kW{I5Rmd0XpLq-tTgu(y0V;mQ$H{I6ZZI65omPZqsX+!OHn?NwX%JKzJ`Iq z(KyulF6>0#w4+xZ?WT8AD{ALyVL6=CRTSrHG8i5Ti&qKky51ehraea12^GiIH~0(h z`lcqVR3`o5%9CJ{H0=XxQ)llvLV7{Yk>S;jeE^XC&85_ir6xOaem!pUF6TT_ebohg zoA28Uui#vU?9p5AQMPr?ynT&j010{m)awFBHm~C6Fjh|>4oUT8)^SySyNFrki)xB* zqd3}wm9sQ-Jm{$oJP&Y(w5V8Mf+cGE<|x9aA`!iA$E8X9CUyEe4x@JM^NA!F^s#)b z@%|YbA@S$&s4R$o3-$ogWKTbu~{#l zS+u?`Pq)*%`h}G5045(wSK5Hd5`n5cJPRi_%+yqv>67Y|6f=Z${3xDD=8QFFfE>B= zwM7Z~Mi$4l*nc)L5`Bs8Io-JDsxGoqR$tW{Pw1S-*9GYjbj!e3PAXXM69rW!nS~87 z%1WOtd-|O|lTOKKk7BtzN*)c3Gm*KaTd_Qr^(8LXjr}~PoH8E1eU2>nwUXo!XH@6$ zWHDMux>KxkAN5)@lz6%iDV{KG%r@u|R{5jlCcHH7GBZ+bH z9_GIG8GkL*qhs>fRy^{He#IaZ^0n7%S-!>0FS^RYb*IXQse%)>He>%9w$bFSkEh2$fk zFvl~CNz;!W|6Wqxyeud{-*oJaVe8Rv5#@k$hkKu7nztu~m+NBB0{L&Fn4lZ8QEXR33GSn>2s^t=zCZjzHC)fIk^L9~w%siXQ{n~-=P;YvXA0+`9 z*?XPiqKYlwPv%5vZ%qj%`HNl&=Q# zjoooQ2Aq*?Bmx6?j)d#!9^@=HLc>RJ_^!RWC2403`HOfuJ)hB8cOEN+8?%`2FD*-c zMk;!ceZLeW(}CM2t0a<1lan=6U&|6u#}-Z|?^)Fl7*!IQkIvc?m*td)GK6;h*6eNd#O$gdp zk69ia&lq2}&+mM-{7V$u$l15Ez4q?fFxRXG*{`u6z||?r?4K66H?DZ_iSrQ}&y0tQ z?)G-(#-ZCRrz?2mdn4m{-!~r?O2Sk)SMkJy&t#sP)k@qfeR!pV^{K}PwZWgIaC_=y zb?k6imbTEW$@dS4rifG3uP8oI6n3^5OZzA(4fw3xbMSK|&kWr)Iz8C&2w^qE#kr4r znty&I4S4R{IdziRhl)T_Xc-`uX{dr{7wJk z(Gj&GJAH@yrhGp8k4<9_J-K!3o}I(vRvB~kk#rbMs>krO2{c7EOYV5qDT6uV(;XJ4 zP>0wtL#`1f9lp@bo)jX}zXj}?X~m;_wBKU!kkGn*C1n*7vx#&lI(QX6H<`~M5bq5M zn!q~kF@SF|>-KtFc@(srT6HC_R-M$O>#w52B>|)!Txx817fT2C*O9R5t8!x!=iyLJ z>#f+8#~ZsZR5Z6#+mk8xYwlDEhMG&~+-q)|+I{LO*a~?}=@IWEweP{{=c4-A8upd9 z5I=lgjx~dk32L`FdU?Lw$t}E>RF>A_fRgB2Nr5wheZNc>X2-#M-{$T#fX7g;BooZe zNjLQ`IQB@hsLQZnEk2qb^>&XlM*ALi0m&ldk00W;e!)!eC0AT| z1v4!%`Nq=Ra=1ex(!7tzsCM&(;~9q{+Rpg`K`s>vv1F*w(r2^^kOdXcn$d`$%-D%H zjBfRNM8DIlZF~5YxRw*Q&`I&+aRcowRvfv|D*SaHwCGoF0hsAFyf3+@2VV944$hKS zcP{CVcMGnLepO5V+2FW_^te0OozL)UYG!DG>olCGV=_H1mp!J}!l523^T*u>AA$vc zukk#9_-ipgQkM!eBiv$J=^;7r*5f1h$kR(ri5mukX>qyU_wc=egTSg6ttPABRV~T$ z3MA263tw(vyIqcRXut4rDuw2(9D&cI(U30A<1??69g1(F!0-ZxF$-YJCZ4WuCjQZf zdrlz0cFk!+mRESR+dp3?>@+w9xgqX(2IwZI^7S=kS?;=$?n> z-(Bc9n9%PbUyZU;Iq7jqG=LDVLm`~+{N!PI-D`G6y`U=P>zHU$)6a_E136vjEvr-b z6qr9Sgt41?@8O6+R8}LLeykwa6y8%Zy_DkpWl}N4G*lhE({nBQ_L2`7O@mo@3X~sJ zxd*i`Rwd0m?tUu{zS6meiwy2DM!JK23J25ADg4OPK)mJlNS=cq(U|H7)dBG;m%dUN zPaQ>Jd5@`KgVFl?K?}~?bRtnPo}7JxmrGnp03^llWJ`St9*)dg1+Nr7=7Lo1ofYv# zF11qCRk9hfx7*Q1Y(RQQZVGNWA2U7G@5X{!=>zRL*RbO2V)6v-FIO7vcHlz1-IJ32 zkm{tE$#9-8Tb(%@dzf!UyDA6++D#}(Wc)-kuwKJ>G*CvZC2X#)opYnFf-F{VKEWSZ zhhDwQ_Z7akLAwWGK4-d0w#xH)w_VI*3UJW&YTPKLh(FD_6#hIsEd}C@OB2xT=N#kH z=fwMmA|D56c|}lIGmPsNcoVZSR;JvRIF#$$;&Y`Ej1IKS{mkEPA31TWXq$F7;63@E z-1DB@D{Ku!ehrzM&zxZ-MKmdVYU}bP^4PcC9?RPhpBnTbNZuVRS@86)GkeQU$Y5==+5V{s9rm)k5PZ;K%WRelA&yvrORuf5#j6p1kZ#xRol0o9`H9&tXyw?g#mw?M+zSN4kZSJTQ?%di}!8KW)3nQi$)> zw~>7P6)OZ}WfwO;157D%`r2n`7E@ruGT?^b+UrMvgi>?u(0yAVkVpZi)hC1mzx?z_ z1={+&QSCaBxbK73UYu-@?8Me-yEiqjxf(+m%aiSTt=PuoHaXjLofTAbbEZ4KS^+{dJp(ASE&Zg)$ed;AZH;dgJB*oWsBJw ztm|PnNK982>c-XP)d}{5Z#}y;jAL&%%-4VMZpN;Lmb6gd@)IyD-#KYZ)nb9TN{ov> zUGRu>7ZO>5=Pj`y8NSyCpe^e&FWbhC0y%@Z}J!U{km} zuDC|Ha2M4;$aBaHzc{BIUm-fjjbM>HN>0Z@GhH_MhGE?HbKMJx#fpx`Y ziZ2C#+za|QcgMeHOTXcsii=PFr3LIGqCQ^VfyPnP|NBs$HcES>!jXXbQEu2I+J{?0 z4kTZJ5zo=<554lzqf|PdEt_uQ3S0)&r#Yb)4PAV(^^n=Qe8O#&AB$$UT#nmvDFVLv ztVzr-ZCO(#i5WOlf+&o>7;8IEGf9Ach8EM8aWMwY*RuuYvRa17^F{Z?6C8ba6$DC7 zky+~rkqD$d@#t~tIma<7K(o~2D=4q>LqyR<{Nje?oCGOHamF(Qd=atkIj1g%Jd@jD`d5i|;IeFOnUwhf$dP0!bwsR$Xb07Zpg>1BB( zAA-pu9x=&aiZ5$DfO5bQP@?I0N?&fFr=R=Dt_LFeO?@ah*Jlnqgaask+x81D$c&OD z69WdKkaD7XujsoS_7pq=V5m2@{DtFTps8?)~AmXeD9kY zs}S!!P#%4R0xr~bXRh&DIKu3Kl8t24tW6BIf#AAJG16^F2U2-K{6z^4d_@AiWl81j;JKo>*Qj?ooYM{CxfI z0as4XyPGH1c#Nxf{r7t8HZ@%NY&aqMo~-K(ZS_bM=WstB?DA^bSA`F5t_)j0ncTQX zi1vMtZFU+8l?k;Q7UcLfHFgTg|BMNsOxUl1F_nN|EXIhB7&IYtFO4vI(9UJ0<-V7*>+Fuy>&z@)K^Ot(S3 zPl2Mq9jNLrsVBeAnJIh_dKay_XdZmrxSuz@?>Y8eYV+3wobb>`v{YT_9<@={kT7qY zM+#8R?&@vefVIkdqU^IwMC912R_duIjuJi(DIV0WX!9UEe;Rrz{du6uPYCXAUamVS zXl%3ny?#62%*`v1qE4M7PL`~Niznk2T^;58-bpDZ+GFrnvmsvjrbGG& z{tl$?)yI?{j>_~|0KRg@i-xaFht|2Z^8l;VksV!+8qmbb4 zR}tb^bR63*CZF~YjMffCz-^JN!S4-G%{F~PPL45Y5Zs<@4xQ5B^h4r#AOC#>jp?8M z={_ql>^os~OgZ8Mpy0ZnTSEJs*#l==60r@U}9X1bibnnc~x-mc`x)G1!6FiAn=iV5qlEc$| z*P5I{04g72!8E*-emT}cIeBrW?K{QC&q!rx-sWWca+zIDJX%`Z_mvRZ44>n&aBP$5 z;VY<3_2Sz%l6N$q{UWt;kKjJEc1mh~`*!krW`S9-9Sapr7A~vzKVG-R6vG&muho-A zeT(-S#l_FoN^R+I#8G%M&X!v~gV4fgh;eO^BN3VWHSE|ydBLZt8Vxcb+SBhIF&mO75(Bt;#2lMee=TSsZ zJ$*{PHe@86LlDI1ye?&#^hnF5PO%0UY-Wx7y4<(xZD-$4WG8G?W`0R;ZT1;Tt0yh2 zr`T=Wrh>TLJjyp1en<9U1*HgLlt2Bl4YxgF#$t?89je>wUoO z+9d+8q+Ma7YPo;_Y`Vo$%HLQ{#yoyB-ytzPFu8YUO_2vy-OKFOHIWJ_oyXGKC%R9m z+}-zMk3Wj)o|5odoBn%bN%_yC)p?le+nd~}2zIuQ8ro`Dzbm5E1CQbko5PW&TP6n= zuSYG7ujq8MMjsA8mgN4a>e;$3dm}?m2u^G|m*-A3-7&}JP6wk`EXOBu*_}K8o9zExvIyvClsnBg3CyNe8&4C4@le-&DF@{mucw#?%Uw z*7LDXHO_m$6Fw7H?%;aDf5n%cvKK0NjO05x)vKWGlJB9^7w;Tkmh^q;38ocl6hJ~6 z8H-llSRjag6tB`BTqoJ*_YQ*iePn@l#GHY#cj0wuy6rl=?d723CR;b!m>4xrxs=cb1@Iz5M;bn_~`c>HsdUYI<~j;ZNPgqZ{e_~*$8v?7hV6o5L)JQQOj>M z%C)=9!MVo|UM_a*^n(Ix4PxJL3fbE)kzrrBbJ;05WJ^RXRF^IaW=AH_WZI3M&qfb< zAEY!`vPa%%3jE$HpI5*v#^k2PH{tcg^DDOAwpsB&Q_|@Tnbkcacn-?ts!AkvNmpEC z&Y~|l1=<r$+$9;~bN?>#e;%@q z^3rhLktfjn{lU3dR~nNJb-yJ?Y@|bVdJW>lFS_k$Pp;s%osmFqenYAIy@L~QzdcwK z_XcM&KO{{XOdndwX#J#Ad4syg);&{uf*xF~(jm%;9IVc=uagP2wHjrH^~}IqG+XCA zPJDYh_A{cVK4D)YtkP6PiMvfN-94rUzX0x*iZ84T$RL|`0HJxJmKiY~h|XQf^Et&- za?71Ebn`64OYgr*DheUx)wfd=meXNB&lNU!EGa~2;W(S@V4P+e&9D88-i2(bG2%LK zs$Z_5@%zs>X?%htcegK`7GC48$Y0L_gV&{J$#2VqBZgs{H4!ie!gU(hY;t6mItLN&qzY+BLvcxC1FS_Sp2pOKiFR z`LBh|cV>`cgNt3^_ZA<91f9XJaq|v75`|Y=;Wk~yD)|ms+kUaOI|8^k%9jcptfQ_t zpU+HqZDjC^0C1^wIF{Z0z%R-LPVWF9Vh_{+-Fq>m(uLIB5+F}Lre6*nWElNruY!uK z5Y%$!C~|=FfmdVhiHDo}>Bwpq4VW`$X7X~1v%i}^-tVFinzn8wv1FOZ<#A@1HkY?H z^k#mI--e!+mx4ntJ%*DR(KjC3jM?G8%e?$~-1?;!f60aJ*GmOXW zsc}B%%Zk&YO%3N?G-37$dLl}hU2Uls$R^IICeP@dEN)=a%W)WRZ``;Fe_ zJ<*TsGaUeZ_-K#Ktv`aCv-B!X6-(dmZ9s4F6Oldx@z~LJ(akAaicd_{>en4^BTrc~ z7+f33Mm<^QJDk+Z4P>PRT5_^(+&iatDQ|YNRh4Va&HTe1zNdo<8WJhcNXvoNRRZXKv|``qBK{vP}I| zv-Xn>@VP$3fqg3(v`yH1XrCl42&IFRLBS7N!Bht=a!5{m4e(~v0DXM{^6?D0reLYNXGvgzY z_Bp~?PkWHgNg6}wk;{*}jicM;I$x&OscOsX>zJ)wxh7G&iBY8E3_6uizAWf6OUt3F!8!xo zW8rswrOG_c83}WdFgVb8W3G&>+&Oz%>+6$Z@HDBRlg_|zce6)ap7QRyZuyyYBM#Er zg>&5Cc1D_SG76N z+p@`Q`K>~}wR{Ds5%zm2@+AFoJu2O|qQJgcdJ0uS#$CFl)1yh6Psw#reFGZp3PsMP zJy*Qyg!aitfLj=Q!Q_KyG1wB!QC)1;#8pR5zngjM!K-m#_FVhi9HmDurErnlB>_-K?dG=*O{n)sqpBwes3TWKfz;g7)tQ#i z8GGPNHS|1iO`{c9=U#e}tnX-%eZCcM1z&x)$cXP9%mNg!%^}~jB!S5qgaWsC8FFnL z&%)?3;jQ@mOL6at#e0_9XCkHOq6=eIXU0{5S;!+vE=S<;V?uINWRv{N!92Jejc3UU zkybSc?`i5~Sy~8S;Js(u&4*gt1&eQ2JL+dJZwJmzj>~kuH^R3^4UU~BufC$mOWga# z_6<55#>u6A3V4JrN-8YXc}y&Z=}1L_T{d$wwtljWb^OWe;D@8zpjFIstzA(L9kZt4 zp(|1e341#ctc6xC;+JXRwAJTxd0lceEn+aDb*!1U4dF>Az4SY(d|Dbg1ZwN884(@Q z_wq%{LHxAyJ#!&S4vx>E2nt_%dYtvZDr8jB`Mva+X32=U zAScsZpYA_(fVdN-(D=*j-;QWUDbD&RkM#m zyiIVmo+|ft0+nz&SCA=lP>DDmIXb(Ku!Y%H=Xdf5Wbz+jSCS;zZo{s`Q6!ff#QPt~ zp_hMIj^5ZE@w>CKG=P9a0le93moa+w?$7HVjB*V_)8MAb6v@>GG-uAH`S&In!FAxv zBRh|_Nh}_K-&9jv5#Z^oa{=cq^gp5A{?8SxS=c3yDEm^8D^+XXhRp6qFzW% zXUW*eu4aLxkTHs-4SWCMAiNs4sP`$)Gdd-BL@NAy@&C$uA6cbL;05y2o=4yqz_E0> zfEM)jim*>%)t5WA_Zp)Cp^$!A19O+o;N3CXcI9$(l{ZwM(IdH7ocr*~&OLigI-2TjB9rH=BkeFGI+Y`XdX;v*4Ux9bZdSbY9nc|=R?%d|hUl32Q9w5dv zOg~SHoO6^<5$T~t1tQT1yu3?(&+pnwiv7Ew#Erx=GLul8_IdQe7yWO2l~+=&ktu^< zud%PA-*AJ_MtaQ1?fo)zk=CSE=w2kp74T`gW7YQ-ZJvEPw=4lOR9WA5c|@bAx9aGn zQzjZ5k68ZFOz7xs&5@eixp-3`M?t5Z<7eN7yc z(E~f*jk`8(kf0Q?5dmoCK8X(aS*?6ot_fFUZdD}2u`nwTu!k@upQ!`PiD=&ln1?r- zbRkYa9+Iht{Shu-S8#o~cs&gd_2$l*$`F3FH(_rzV7E>tLr70MdOcy8Pab*zA`7@4 zO+!)jIyL<^25Sv&$6lAulWWW`e2o-w9^Ez4J-*=YlgX^C><%+P;=ZM^M%j@TyFqqk z?PM)f5_87=-sEaCje!c7=Sj)K`=(u`fBh7iL=m%Aw@Wt=o3zG6neMbZ?Fu6e<(D!d z1A8pg^NC5s?|qJM47;2L1So05xcMsAp@;e*uckb=`xTNHr6j0HF+d5ck_8!L>5R42oQFH1rS9PF&A zxWl$2Sex~T8w`^PufUfxp3>dy`j{)Ob3^^&?qI+7&cDY=f{1t#mR2rGumzcFL@G^# zN3rgV5=%jES)DhJHF~%cH;-~_!!KTOH3;rm^xE8cD{mnSfE=0mjzYzQd6j5vU+=?X zhfa$#(G3e6-8G^Rkf^zV*LeSVjDu;M&c1aiZ?*;rb6IEB4jLR+guJT}NI81SjOVCfcP9F$Ffd&H?wgY!J^#u9~$|KH8gW=Z(8sp2L z!Wg_Bmz0n8eYhVGZf}0`;8BvC<7(0mm&Hj_{ENkb5+A|Gd!>}?J{4CZ%x}J)j-gh_g`H0N^rT}3kxPcM#X&xvagYYtK6tNoI30R-=l8#tTH%V5(&2V^2~Ra&<*0J)OV@ivrmv_Gfr&az7M4yBSN)2N%w2W zKi?rF-fq6q3wZbQ48M8sO5Rr~`#dRqm)_0>6|y33>k2ZzWLfI1n>1RG^1U-R>cS>| zAWG0dhfzYO8Ky4ea-9&_2Tu4<^XwZssf1Hb{Z!+Zq3uU@_-}6Se_qSxMUCZ6=7Rx1 zc~5m;@2VLa@~d}Z4l0X=wsfp;3s6QCKb^^dT|1J(eWgiyw8JI34{6-afbYHJ1>CJ{ zuu8ZnwkdS%B+hx;9iEyy>{f3PXvFoeBk~TGCkD2rn2PPeCz|MC?jucIs(g6p@i-BI zr8b@_#n|tel%~g_yQ6zZsUKTf40t*#$G*cjdwS`_E}wGoNUc*}py0KbkyU6ointoF zdfMX@YX@2#u4L`A>kw4AHg93yCp$vtqa}QANdqqP0=wB`G$wWZ^O%oZk?oStsPiluCLAeP8{hYa8B|@tpJ#n8jBHDZ1>Jrf0-kS^!GLVkPn4yn1F z8vP<+*%5q;%TJwGN4!e(!Kj_hy66vBPbZ3aV*yP*N;~3u4WiS(`$@x4IzTrHYt(fQ z2A}bnW8MJ|O#E@hli>DcA7P_PF^_ZgVA0b7i?eA@BeF7{x{-VdZr_qy#94MGZs?Kb zW7T9rGI=@dvR2|r?~%$^FUuzGy;T19d)WB%f|ko~SnF=nccQgvb8Y)>2P_v-hrqQg zL1n^AaqkJ5&9;aFh>n<^DFffWnrPnItlyV8X!!O?OAC~Ip=<{~Ni-AOH!TM7Yuf>p zIC~$x_;O~O64y=%aE6UFN6hDVCvS<$#Y1xX*c|6$YBl%kkqj6e0lcS?{bVs&SnjDJ z#T!NAdrhUq#Hoxf)Yn;Cb^;I5**SjG=IE{9(O4~M%@$Z|F1BmSCuAvvUYX1F_Jz9| zJu$WT$|XDnVG()OymN5m*Zwm$_evT(FuoD!WGLYupp3}a>JipBBm2+(dJC*a{cwd& z4=X&)P?!z(1W?3LIrH-Xj|)5x;|-AW^7HQM+Fg zr|kjPhsML2e&)^k6TkY_0G8tjL?gB5sF__7&2B!CReCeVCloEO?VDr1TUGri+Rpi0 zu@v1hJ;~biDt=dqa_0V=<|0f%(uo7^DR52EN2jjR_V;Gd&ZMPn0MY3?!!7qIOn+tK zbLX1LX5#B=Y|EiC{YWU?@Kc2@FmMaxAW#Fc;}ivII2Q5TzVbmd)|V4J49%LzlZ1VS z@)1!B#RYMY@H0(Fwzkaul;ymwZEf{s4zAs~A#!&BP>*BN?}68&D-RRygrC@>AnC3FEVgJ12~FPYmgjz`8xoC_NTW zM;}%`j|7~|)*RDbIn_sws70-oy&`OaJ=p!$Zs)l^YO%EI9G4Dvd&mU?iS_r_ zfP0F+C;E4f{%Kui@aI)63(IZBdS8COZvTdvQxkF>)+%E3E2m`>GO9H(?x$J({1IX=6Mq z{U1R@-x877Jh`vv@f1}HA>Cc&=wrR;kEb~uWmSLT9&wCox34hPt3MKS?eGLy=z+{+ zzeUq1Nl0VF8}T*D9X-1;gQALk&W!5Bu{V%Z6>`4NoQya)3kPu zeC|LWLDLlZ@}{$4RPiMCaT|UtcWJ9Oy7i10|FaR(8c3|368esGbX>R`4@$!$Vi{SO zQ>V#KJoaz%s0|$=cmf3PVh6y9N&Wnb;lKyYl){17C!FgPpU|Z-;D2} z3IJqu6x>I)yzWv5`NNC-()bEij%GHJlwJ$jdEyw=kvRev!%x5*U8#P?#1SFG}mI|^y3Nd7h&;c zAkZ-_z%TVHV_pHV-kE#LF58i}tN{2@CeG}4y%(M{SM=r)2ZIQHRPPiNHD7#Fqa6Mvw<@QCC2MKbqpCHRznh=J= z&Ih8l=*)T3zW^A1VeqXrLcM7IIZ(xZ3}79mPZ`-wvyZXtX9_ljpCUYTQX>0YmgYQn z4#Nf`tOszAfh6@@fbYC&*ZRi7#f2^@9B4e)`Suqve9uSY#(*J^%)zVlU3gr}M<0?$ z?8(X1!q~XTJ3T!t%X90gO-9ANj^6^1)$NPqpan-f^w|61Y{zmnc?ftQzOJV;lJsY= zpW)v|#BK33C$YzTYI`=X@yc6N}NaS*$t@Z2dmwd`a-LEZS{}c9k_0GC>-S}ebKa;Ub87I+^@D=zN?k@Wt{m01m z+=aK*%P8%Mo)eEISzc%|rRp<7>a8GI&^R0M@u-rkSZP-~szawO+*c#CR%Sgx*FeW}h~ z((YIrYp2bVm_42rfG;E`&K?_NHDdX?&EFJLd?DDR4qFZY(DjPyy*>pra`%mYeW%Yd z1w9p)@oRbsh9Or2n!vB2!{G~jZont(0V&efMhxj3f5^phD8J|C8Mmn=?Mh~k%&)oX zF__SpitK@{v+&5shW5ODzXHEk!w2r0Be=om-e!?Ed?(dU#RyGB+;#G+KIDkxTX3@x zUF#Z1cMP7(8uxNF^1(DabH#y?$%!^%?TVQl=@9S&Q4>XlEKhr-?+Js@?@e&0Wk}dc zC%U-5pQ(3{tSlvU6PEbk7eDJ)=HfjVDKK(Xv!BZO-ZL)N2-PE_OB-|eFm$%-y`4;v zkmzRD#kVMrpdCR>+isdUJm*niQ8I_BD>sWiWBasv3I-RyAlvV#6E#7$vyNNYNWBuM zb~#4xHrnz@Ot?JvsY!FcuU_^W$x51O=B$-w*7!0-*#o!E^d*=9j{Nib*67dc+s~4J zW#?@p9D2(c^J=byk4YIR-A5$8)UdhR&|A|U6L%h_S2 zaa6u1rG38SCRzjRwy%H7yh-&u;6o&UTZe3_DWWs&J4;eu)?lTGF9uaHZWJ({GrNfz z2)vuDPo~>iL;C4ca`qxmJ-Is*(_5e4_)PbOwDgOr>$rwAeq-;ESDJ?Bb1B3cjxPp| zxro00)x&`Cw0uzT4!o*GbvUOclsKvZ89(QasblV@#qD@OIR#c7d+RnyqJR`0!^CpW zGjNcADD>%?$GM~vp4PqpY|>l?p4;Co`w0PPW$sHC4>@}1V`h7_LGzdjNUtBZol;vS z#hoS>`PTHEr!RrtKDu_~f{}(JoEsB1LI7^yHodx@y$E7yC5nEJ^VRG#i+Ax0<+T*_ zMY`-~_P1B>yfx&VS7nZ97GrQYt?=Q=W3af@_UHqKByg1-epu*}*RJfYG3VL$5BWw* zx8CAa1s?wx-s9-NUZ6+6fTkXi0}!x%_;Sls+b1j#Z2bmk5q3w#U2bK~gz@{-t=nNV zk#$JW&Q87xaXdlS^+p$rnNDuE;bR;V++K)q)i-i*9nAVmmNiA))`nhioU1$1d(X`? zL(7~rOGts9ynd?6vr=>%ysD{ld*qAQ5 zA;NGRsdLTrA@-sf!fC4S8sh4kG>X&L4V1oA?{ zi$B{+xCa?8GC1`3+xTVSCqBcWBNZOus{QH~tSK*1A6tC2h(y1D7m=O^y?5?t1U=E5 zp>M)Mua@hp?p7-|ayGuJna6V1QN zwj-BQZ~)rl`u0ll;m$jS*`@mRJD*40f$F;$Dfe^d75M|q7LJUQ1zJLAk6&h{RifT@ zf-3Fz{qf8kft$BA$p&<1J7HOiQyB^6_?H|AWLiDn!B2e^jpc;tl%BIu-&3uXdl8OE zQ_|!)^SFYt&?P<++We*eDS7QM-GE%_iK+l!7C@@Ex#~N|@ovvk8kGf41o+Jwq^Ir^ zn=TsMfBM&BH-p9}c|lsDVb9GqvvsNu6Qma&FCl1~pZh)seF^y>}wYTn~-U!5VL zYXUx19;)Mu4TaKY?U;A=6It9%`3Qys^Yu2URuoM5-ez9Y$nkq;*FjF%v!?@% zs}GMu!{U@3-B|6pMR%7_1aU)ithojEaMI@0NP5!rVpy+Sy*R-qSRT>q04(*Fbm~~>;aQBnw})(u?``gjcwEkUx~{_iL(TV zeKQYM+4L>;0~PhS;#={F*Ww!AJuO0!8OtI$eQhG2^2kSUpyMc4;3=SJ341k6&sLi0 zVxYZ+ewx3>oK5@X!7lqy9Rl^Y6>XBQf3FI}7Bg39q77mR>t;xOS!DuSC(863G+Z7T$(t&*P$10FwxP(Kt9@B z2Okv9nQq|NQ%O1cw5315*+y6cy{F7T@k5|ZiPP8yo?lcU34<(d3k2dd5gaVNW)=Dc z85ZD(>pz|L|eb-h>@zd#z!I&)#gY<&D22y{5`H9}Y1=%<_r z44BI;9cgM+MTX-(O$rDPc~4(>tnm8o*~`uT*|3yxQ#t28&CjBT;tf+gLauK3Sr1)) z-149OJQHW$CW1$+uix9`9<)QX?!K$S3b?eMSL@WRV}{>2xgWzT#SStj)EIUKx_5ZDA5C>Ht%F)=!4`#Bz9b1kr@pwIZa z*W>)9mUTl0zvZ^Zpm)DF4zg`-p(mhDbln7eJXtfnxFwqg9Tn}A8XTGy6Pmku92}RB zUAEnnIaVP2Y0i9oA`b*i?cJ%EyOJ#<>dT^NXimtuEob=gK`{*AKB>C#@+w z;C72?c&d9T_W_M$mt-8cV2;=N_$eq(Pqg{O|wq8rmBc4z<+Hv7Fi(0*9qaltG&ATLspsW(vB(vK`OXV?^ zqBr+(S&7bmmnW{bR%c%Q`kIa2PT*SCS6?M`V;bE~pA^T(jUS^Q;p1UaqmN)(z5)&d z<~2ugksg9)R@RvU?clF}a?(Vjo+3jWW$vckOKkFXKpCTxe03(0$TC=OOvNPf;MfqD5e#81=l z?9UZ=Jg&_f0XzydsdJ8(zlFH%_k4*vvND{J^f;gF>VjQpsP>Gd3q|?0=!}0h#o(Kd zw0)kzxs*auwd}*KXv3w%d3@L5^XICFfIEDM!R4TXRPyDt8#KPO zk5xA9_u?&|L?&xUTEiMc9NLQ((cjZ}EPC5fzm;~cw&W~jJ@TFkMI5I6PyhQ1%-Xe& zQBT6mSb$NDt(=>OzgXLQm@BCXtZPn)6I*{TEn^DKzFLea6$KRth^Rj7!JgB2h2$0V z@q7yBW~)6?Ng<4?hhz_b7Ik&))=B4Mq2Lz+Ve32!@dOTIK*5ElF!P>;yf4AZNC zDM2XaDQ}#-tvyQQTu|FHEhh;5bT&sX_$%8B9ip}?GWj!oy2zM#siePDgc&*VonsfA z7>v`JS0C+Fb6^L;b#G?UrM`82>lAcBRl?N4_yq-bJ)(nfM+ov=S`V6rq}(> z@WGwbOu1;49&wnujEL^c=;t!9$4@&fnc0NwlRQHH8NEN!2`WQ#8(T6?KAH?G00dAgh^yE@N- z5z@JIMau3Wp>zhb8WJGQ8eLdg!q4snCi1+pM9raAL;(IcATD20r?+8ixTzL0@H$m)ku zdhShFinHNtG1~$D7TMENZ?0poQMm4P$cs$=0wvE18n7Mz4$t*%oql|n z08*Yv^Gw#Ga;=kNx!JV*u6JEimZ?5cO;C4B(0UKt4%)*L_Zr7P4}VO`?@6LB(?po2 z;PG}jn=oe&w`+n{Y;iG!w=ZSp1bg51bYjY;Zt1a`u1Qf^u?`7*RtiC)i?COorj`qtb zCz&h6QTYV?^)fXK0($(Je3bp|vS=3_xsrqjI^j-?pDTu|dpZHk9LXba!cubK;>sy2L zhAk~_>ety^clCPdL@3{hH980lBda&(Sg{b^07F226}k#FG-hu+Y3y(NW$(TTngQpU zRq*kxj5SU4Jw%b=3Um28 zYq<|_Uv>YEGxG|eL%zE37D86WcMhes9C89I(Lb-4S#bgyp-PHa3@yI#h@5g55FG;bFyD+@c$K#EGryQm8g|Q?r?E{`ZaD}O_u&+Q<*L@`_$4I{| zFv`s}z6k#J;m`T|!uRcuM3OS0&u*WHk@&k&uQURzZgiqyGMWpZb(}aH<232o)oxny z*jf=m-4oGedylC-osS~?;E^9EICy6dF>5@g^x4-&t-B~Zs2ae|)LY-dOSAcMV5eSg zx%$Mpk=M+~cM|`&8ccfC$0Y32fWjdIBOWSYZs!XlgL>0ru+#}o$2jSI9rvlei%4eV z<2@eLZ>!o3e8PARAnei2x7Ov>m1CRwmCKP3uj9wYBx4@ExqVg{x|Z%e*!L`)dNAwf zVWFzC*(t_ZZ`BfQj9Bc?N_`xB|@)4rOxt|do+7}x6u(uvpZR*6Ow``U+q?LpGi>zlcEWKDjPqIBh z@-?i~+bOVoUDYqJkk#@l|8Oh21D8Lm42k;sFqm5@0M5NYpiioninB;VbX%T2EwFvH zza#C7b;|+8sh&IMzE4*>jd-ddf;_~9x)-{c)x8*dv zEyO6UU!0_zY^p`WiP-Azb@y!LmHZw}3hfnaz4wWbLI0xJ9ICM7HqDoZHE^0bOd$`z zy+4-$0*|75HEznm3)3ra34aH(?NC7R6Xq(~T5<4Kq$GJuS81*%!efYf{g#m9@T0~y z`$bC3D4o+f!tZa+mC6CQ@<^u=BJ}cc1Iwhn_E;|ZgIJzaB0Mbh{+_e=65}f?h7X$K zj6n(q#os01&#PbC*_`eeipn9*3+#RRXis9^H8mnEccVKzrn^3ClW@p}&bdT#9iKp2 z3+MZ}cYrmK z00MWsvBq*}6Yi6)R95oY^>QWQay4o>I|*AJ7ZtPU~jw_jDFnQIr82|t`pxrcE-35rH+MB7i*rv16ZU}EB;R%aDqXO8KWA(sGkF>gqP$q zxX{@w_})u4@uR5Pg5ivfA;MMq`y(0S2H6c{%VANH`1CnzJW!0+iz&g9|!Bkg@BswzZ%+W7i zHd>ak&kdg0a07?wG8Met-7Z`{hKgIU(^ z;qz7y;_N(%UDPob6f1=80%4n9coNDCLA|B)ePjgA(A_@q_Q3_z(+!vR<{-rJuOU_@ zoho+tb3qrra7~@*p7D8hx#|( z`XOC1UnB&VobcSISTKlncRy!Fe5Bq%Hy!p1QF3b9(faI>w$smEBKc~R- zne!lanzkQjILGZN@$V)bjvW+E(SYLucmigFkT3cH0rhJFh;O791wp^g-C@#WPlEts zl%}MitvU>T&vsexny;Zx8$I+nz3cGJRU=dqueL^~&GiV)aMuWlV*;R46f1<(LfHqf$%52hvwYUM(!- zr-SXSH8^yv62Xo>5Xpe{4hZ>NlMdnF>csF)Xx+jndLPmCc^y9$i^InQm7@H!Q{>LX z%F>gP`}vVb9GZP~*5@I4x#(TS$JO~FEap05;^T6sZdsCh=GEX^gOA7_l1xnNle2)A z2%vb3#yvUjFn)P?^c|DjZMG91%D$!29=hPL->D0Jzrw%DKs`pT{%EB#6#{yJR?JS( zm$@oHYJOIY-%l$EiB+rhGOdPF@+TF+atD%*j9p!vS0MXYrt zm(SiOA6Z7^3MRTZua&#COoP(l5R&VwVr-@C|?Vz2`kmSs=9X-#j32L z=BZ|K^PTD4`Ojn~^57ge*03z$ck9hV86QV}wCmD$jc~=1XAb76jhG^5nL1o|C(osT zo1vUuaW>hGJ{^JpP88yS?Z<-%)fJK@7w?6m@pK8}Y_(__oFAr^yc)b+pdn zU_{?o)he~Ox^DFx*UzKb;_ZSh1d_n|OoLc4cj&xIWNo7R_@FgL_CD}Aw>NvF6{)%- z{T_(9y4!PM-h`PQ82_Sai2<3vMl0p6C-Xy`(T)xh5q1E5YU6QoiF=v}NiKA%s`{H@ z2Vn@S$jcMe>k*qzLB4u~b{q1G+`nwSZ?08)r6X=E!U;S;f;40sL<^5X=*x%d15vg>)p7a~4-Y6Ow z{y-3})cO1-xW^723`0-E`=tBo@wAag#_Y)jP%od)vY~Vie(pm8O7Rf$2}3s9&r|5Q1)J!Kx48dY8@c4EtQ5lIvhlJc z8NFWXoWQ+FNgJY*F{L6fdD%-*FnYVnBFH| z95oIZyKNK>Zd~+>Q+A$cNaITw0q}G+>07tA=H+>RK|aHqsc8n;h=oMIegE- zN$4K?HoGrvlYyBPSnE?V>=TOL_o=%H2uC0z@Eiv5Q)Rg>55-cF5oI+7&Z(zF!LLn4 zynC^jnnapw#q6JofnysIho2ZX_r5sITJ%=qd~?E(7H;h~pP1?~x!t{@6#aFM@Ubp0 zck(ELv#h#vR0{Hu#7OIz7egs0DPlsyA2E|ozsKM=j|9P$rE|8lnD_QPC44||nZOQR zne6etQR68Oq32e~{dqKo+2x~8xWBZXz;UVFA1dYL?IIz@U@xMZaFpK#n#y7E0ig4$ z3IG+$Xxv%2QD^Uvd+mHo@MsKs^A)Jf@{=#;OdL4)zQn5ubs+W!>ia&(OgdZvk>^-Lz{0Jp+>;NjMnR_OJh`c z>-#j-%5=x|kq*zhPv%F^FDqaFrXu9Z0i%+BV(yh?BslerXWLUOPiSt`XBDB3kG>90 z@rmARn$>3b4IS~bfw%YaD(FFv3D~{fClG~hy3O20j#B{2cgT()i#{5COAQHk!XH{b zyr=ibH?ds4CbocAS@v_4+#FL8MN~WWXp;%FZd_m;i89p3y6W7q?=rsD zs~VXM@FpB!MIgZ3QayP|0OH6E9Doha8*Oc}Cdm@B-`LnQSNi?$m)b1*B`Lq{fm9D~ zXo?J!*|VdgI%wPS{&U9X3Z#U_Z8I^dlku?V0$Z!0$zVk5)n)+(V89#Sx6(Ttx$~XH zoz>I+>Su`Fig30I1Q#7m4w;KYG#_(?R1J6vmqrSGNu-P_p%JoQW%b%LFOtm~i^VQY zd0asmNTpZcg0#5<+o(_J*ne=4{f#yfDA1bakyI z*ZRr~4o{rnZy*nx&*jC*4fWfQ-GO=;O5;G|IhYI^Z12AM6hX)TN7N2==iLQ{_bLmP zrV->i5_%A&6~>3U6=hk(hIAJq0G&I_IF$W2^Ri0f8PJ3@*5Fp!DsW z&Ep+);8Vn}?zrWomrKV$h`&-Bs<=;2nd~5#P0GN!iXT=wVQ%@&#h*$Nn@6FlY@m9J zrqRyUQHwb?c=E)#k=rJ&3NABWfihVpv2q&ZM-~RvuYQ^8hs1yfxF7c5Rwv9_#l1W) zlIIAgJyqXBGMjV`+8iJHre0&)V-=1f(`<~4!!7nrp;K;gUO#E32$i+kPaZ+E^5zp3 zVeG~0w&$s02cpv$9erOpwms!-timU}ykK&Od_!FFti0SFPIcKRlFdpM4mm#QxMWqr zg6BI-0eXb_;bNrYp(Y%;=45dKFFkdq$(KEz*o*VIJMEr+B#F*cn$A(IbBHbJm09?v8BfnFUunF2 z9sn{wdA#w`2vyBzoqYtaJ_(Qc4FuLB!t_MeU?86oLOjVX2_$wjD2$(MZM{Z0k|ILv zM{m`XB$~7wvG2UXYM|5d*RP*J!xXTjcNwclFZ!e%lGB3cWv&}V9iPdIWB51c&HFB1 z)eympjrxQ(7JsUlT%w*}sL7*xnw4JSl;({0t_F^UF)~}>{f6=K8qVP5+ybX7D(l&o ztY=(GV=_QFJO3;OPJVDAE}_3i9o4OTE`2U^PgzR}S75&NcnGqNDsc1PEW*j=3&%etsH9IkaGk$Y`-yR zae4uWUDHP7bEG=q;kOx{BG|JrdvC!O$XiKRx5U3mt=H)~{95dS)(!+*z2jIX?`;dg zimfMKs;=4)!I;Q31%H*C&bN!WTFX0LRk<3c^2LnC^h>pHJqi|S)r>VRw!IMGm&)h7 zSBd04Qxszwd9O6Iv7FM48!Sk~A>5gEq8}O?Xc7l!4kKOSoIYYJ^^z0Mklhm^VZj$) zTH2?|#&tGAfaZo;R)9~3#g+GT(zZIL`%WFHCrUNdQ;aNjl5{wz_%i(#CLRzI1T> z>HG&tI`=kQq@xrQyI5b8s9UE;@FD4vScwotud`m6BN%~ChC@apE#9fU#@PGTXCNr;~FPEQegA0EJ{5VVK$~{ zfz&GRclvEoPN$nCI+rz{F%P!e^K=;n^%K^OZ z&NQ$^eMb=qg^{;_?q%+SN&OA5QPqyr(&af2@5YVmQe^*K4F2}vjcT}lztbS;&h9TG z)r<2d6r>aLh=rX78Q^B8F@pE6b>_Z~=XrVkrcCc)tvaI8za6Rd(wqGlUFlqsq4L;Gptt&>x@ov_p27B5yaEY4fYDY zUy-XX8A)<)khBbP zx~SW<9*eE!Ue*k+EeV3rx4?X%N=XNn53<26%er_(znN-t2q84Gv-1J5!^Gsq_#}My&K*nc*D|Bz5%0g z*daS+_$m*cmu2!h*=j;@d2!$boV{@yeamdm)dcZPVa zHavWqc*OV|k5~Tb^m}^&vIv)T9#6pzvFNdv96z_T{myacw9f?3Ir!dH%2}wG0S~O; z?ysO_3fPne^5OEM<+pp z77*--34vGh?o|ScM_#bUGYTIfrTCynrhT1Q8IbQuOGz1bU%9eLNT1;6>rd4qBpJzzsWb620=9hIV&gLb4O zeGz)|y~~D%N*Xe|+ww`umZ%Q%>motBbqqceAoTK6OA$g{$3(AGp75-5^`y6U@45Cl zsNh-ab~+JAx!)J~Q82nG4w<)?yF-@(g})EB8d(n9_QY*m$A`0IC}Exk20;c2N3E75 z3}W=L&^NyvcB5Y`8(yo_P`u6eiEya`^a~*&_#Ld{?i$hQ%#g^(H_=BA`-2r-VMOy9 zD=g+grk$8?3OL?SEM)+se-#9H2$8lkl6gF(+1sqwpCUL{Nd?@cIT+w+k>kPhbF*c{ zZ~Kecw`7mk6GR<3-&XgG1GbUBLdHT^(ni*cBo=C`k>4l+yRrS4tc$K{4_rjxL=g~J zpCvj@$Dd{nt@(~`w8!U>u%;hdVcF1OYwW4H=Arj!;5x7r_^*ldsdESveD78k@Pv7f z3V*HTQxZvs0WP~ah2fL^Tw-l;jMxddUb?n1(@P8^nrS)v4S?`?&Uc6YPoImA@o38dJwHkAEdsJ1KV$Yai^WqM_pxkE`oyJ_;$!`{T64B)pof8 z2tFp7uT|TdZk#K*$|yJdCZ$--VCi-+EvL&P*)8CS6gw$@_7fQWxq%FLsrNEHX!I5{ zRWCj^EdEHP@@ejufV1#BL8c`MQ%L@5J_$t)_~M~0C6>XQv52(lqhl$igIy2CKGU|M z_0wU$c{H)tW@y?dIId5@&(DNiXOtp3P1Zu*-+HSmxNu(XWuT{#!+;1Rc530l#pr#Q z@{~%G9z@cD`1Wfr7>-b*TEe5&i~iW0gpQ94!I5vX>t5IUeWjoCZK9nEV8;|~lr-gK ztu;Sc^->}pkPsg@+fN1EiQ&dI#~b@3)>QN>ncubo;!Zg~20@m0WeN$V0!KWE>a!7I zjG8MC8pDWgK$Duc)C+tC)oZ=!^iNC3tB#%uO%~_gC$G_A>uZQ+f=9^0`ZBpgThL0} zcuEv4WY1#7Jse#L5rEJF%+ff=((*U+0}qZeIvqG?#Q?ehTT~ly%wk;5k;8gEcY#aE zI`|D*#nYh~oQDTVF28yMUMGU?sp#uxfQ{_|`IXSbV7{OK6AmLt^>AG^cp{B^D5}i) z>_Mf*_qVxfo*nXU#4GU_z&+;$CSQDI@yRkNZU>NFGb9b-bvURDJ-!t$TyiDwaeVEm zzI**rs_Y{Zn-lkCgBhb2I{Y2PJyMM{b??w{6?nw&o3e6;NRw~f^#{_okl=o2c5KJe zubqiJCv}EdkxY4O8&%)iO5}@YuYbooFW3@=$9EohO=g9V&cU{=gyT+nAs(*Ho+_3F z6DCm-ES~{Hxld;gjONkz-)X?G3GsKB;Q&o}gMEj{;rh+Cv)WE@)dYwty2xlARd9ZG zQ3pg0+ylsq$#g-UfYK49sQGAj*kPl_#v* zqpJtbF;sn}orZcDf_ninGblzl^zOl_SI&~}0JLBKwu+WxgC$;E*A_g0;d0v?i8E-2 zy@8`P&|cD$YNpCIiTcdYzajD2=gyK{Sk}6T4p2pW_}djm?|LQo$hq0OWa)W&?P{KL zwTka1Ly}{EAG<)3^#!J0xn1oP_$2!}6EAOA^2Ft+*L~mIVHDE1B({ zbP}lLfv`OO;N}SI=fR7$XeO>hMXzw11=$_(UBOxF5DlWM3IX^MZQ{wHQ)HYK#x$TlX7?a-Vm-EF!xyT?f0+5!FOS^ z1<$NaIzONi-zVfP#r?{Qp0X!BTQB?Rgn?sMcAxO+o-X0SXrG&jR$k7o;!wPJKqQZ(Tl0 zzZ;d+Bi z?!w9s$Fq}gazg+HEtkxL5=HN^Z*Hwb5CGZTyXVZg_I`apE)<``*nDz~B>Ee>GdFN6 z;Ik{H)1yPTwKNy?<*@J6AKrP;-~L%TwH`Jzbf@jCaSj>$x}T4(G|@gCnld2Sc*bM= zIMid%xiKu7rqGy@Xc(?s*ww7jVkbgO-t`EwUGpNl5_!xlFAQB9hVz;9?w6S?-*Q7@5d{uXf21=Yd>Ld99^Rb1nI~|BZz==IwC=0NtH@^-&F4E^%20Hk{8G-_ zR*OFV3a(Gm>UYXOXueU8A$CPDz3_gMlOU8!5Eq+wrT8q4`3p;E{YE<^MqeB~#_Vqy zv9sLc-+6I05IBkDsl$#>&6ga6uP@Z~9N!@YDPW7!tID>o;+nyL$xSmTRI-(uv*Hht zpcqTO4e8bQ{%t4B4UTptUetO^52NDq-fGX}OX1wKHU6G*MP9gbMHbIy+98IWrxfC? zjA8}#C&2m|Hdb9l=N4ijpMy0|!3DLV8oa!`{k?p;>>{)-{rOT5806FqI{uyUZco{( zOK}hJXQ1)r5Zks34rhZfKljs

%y|=lM+9bx#X7Na5GWAL^|x9M}^ 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 literal 0 HcmV?d00001 diff --git a/eth/protocols/snap/sync_test.go b/eth/protocols/snap/sync_test.go index 713b358ff8..ed83af860a 100644 --- a/eth/protocols/snap/sync_test.go +++ b/eth/protocols/snap/sync_test.go @@ -32,6 +32,7 @@ import ( "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/crypto/keccak" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/internal/testrand" "github.com/ethereum/go-ethereum/log" @@ -41,7 +42,6 @@ import ( "github.com/ethereum/go-ethereum/triedb" "github.com/ethereum/go-ethereum/triedb/pathdb" "github.com/holiman/uint256" - "golang.org/x/crypto/sha3" ) func TestHashing(t *testing.T) { @@ -55,7 +55,7 @@ func TestHashing(t *testing.T) { } var want, got string var old = func() { - hasher := sha3.NewLegacyKeccak256() + hasher := keccak.NewLegacyKeccak256() for i := 0; i < len(bytecodes); i++ { hasher.Reset() hasher.Write(bytecodes[i]) @@ -88,7 +88,7 @@ func BenchmarkHashing(b *testing.B) { bytecodes[i] = buf } var old = func() { - hasher := sha3.NewLegacyKeccak256() + hasher := keccak.NewLegacyKeccak256() for i := 0; i < len(bytecodes); i++ { hasher.Reset() hasher.Write(bytecodes[i]) diff --git a/internal/blocktest/test_hash.go b/internal/blocktest/test_hash.go index b3e7098e2b..5e5b1202de 100644 --- a/internal/blocktest/test_hash.go +++ b/internal/blocktest/test_hash.go @@ -27,7 +27,7 @@ import ( "hash" "github.com/ethereum/go-ethereum/common" - "golang.org/x/crypto/sha3" + "github.com/ethereum/go-ethereum/crypto/keccak" ) // testHasher is the helper tool for transaction/receipt list hashing. @@ -39,7 +39,7 @@ type testHasher struct { // NewHasher returns a new testHasher instance. func NewHasher() *testHasher { - return &testHasher{hasher: sha3.NewLegacyKeccak256()} + return &testHasher{hasher: keccak.NewLegacyKeccak256()} } // Reset resets the hash state. diff --git a/p2p/dnsdisc/tree.go b/p2p/dnsdisc/tree.go index a8295ac9eb..a629d6291f 100644 --- a/p2p/dnsdisc/tree.go +++ b/p2p/dnsdisc/tree.go @@ -28,10 +28,10 @@ import ( "strings" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/crypto/keccak" "github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/p2p/enr" "github.com/ethereum/go-ethereum/rlp" - "golang.org/x/crypto/sha3" ) // Tree is a merkle tree of node records. @@ -262,7 +262,7 @@ const ( ) func subdomain(e entry) string { - h := sha3.NewLegacyKeccak256() + h := keccak.NewLegacyKeccak256() io.WriteString(h, e.String()) return b32format.EncodeToString(h.Sum(nil)[:16]) } @@ -272,7 +272,7 @@ func (e *rootEntry) String() string { } func (e *rootEntry) sigHash() []byte { - h := sha3.NewLegacyKeccak256() + h := keccak.NewLegacyKeccak256() fmt.Fprintf(h, rootPrefix+" e=%s l=%s seq=%d", e.eroot, e.lroot, e.seq) return h.Sum(nil) } diff --git a/p2p/enode/idscheme.go b/p2p/enode/idscheme.go index db7841c047..313815c465 100644 --- a/p2p/enode/idscheme.go +++ b/p2p/enode/idscheme.go @@ -23,9 +23,9 @@ import ( "github.com/ethereum/go-ethereum/common/math" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/crypto/keccak" "github.com/ethereum/go-ethereum/p2p/enr" "github.com/ethereum/go-ethereum/rlp" - "golang.org/x/crypto/sha3" ) // ValidSchemes is a List of known secure identity schemes. @@ -49,7 +49,7 @@ func SignV4(r *enr.Record, privkey *ecdsa.PrivateKey) error { cpy.Set(enr.ID("v4")) cpy.Set(Secp256k1(privkey.PublicKey)) - h := sha3.NewLegacyKeccak256() + h := keccak.NewLegacyKeccak256() rlp.Encode(h, cpy.AppendElements(nil)) sig, err := crypto.Sign(h.Sum(nil), privkey) if err != nil { @@ -70,7 +70,7 @@ func (V4ID) Verify(r *enr.Record, sig []byte) error { return errors.New("invalid public key") } - h := sha3.NewLegacyKeccak256() + h := keccak.NewLegacyKeccak256() rlp.Encode(h, r.AppendElements(nil)) if !crypto.VerifySignature(entry, h.Sum(nil), sig) { return enr.ErrInvalidSig diff --git a/p2p/rlpx/rlpx.go b/p2p/rlpx/rlpx.go index 0dc4ecbe2d..40a5c38fcb 100644 --- a/p2p/rlpx/rlpx.go +++ b/p2p/rlpx/rlpx.go @@ -36,9 +36,9 @@ import ( "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/crypto/ecies" + "github.com/ethereum/go-ethereum/crypto/keccak" "github.com/ethereum/go-ethereum/rlp" "github.com/golang/snappy" - "golang.org/x/crypto/sha3" ) // Conn is an RLPx network connection. It wraps a low-level network connection. The @@ -486,10 +486,10 @@ func (h *handshakeState) secrets(auth, authResp []byte) (Secrets, error) { } // setup sha3 instances for the MACs - mac1 := sha3.NewLegacyKeccak256() + mac1 := keccak.NewLegacyKeccak256() mac1.Write(xor(s.MAC, h.respNonce)) mac1.Write(auth) - mac2 := sha3.NewLegacyKeccak256() + mac2 := keccak.NewLegacyKeccak256() mac2.Write(xor(s.MAC, h.initNonce)) mac2.Write(authResp) if h.initiator { diff --git a/tests/state_test_util.go b/tests/state_test_util.go index 3c1df35157..7525081f84 100644 --- a/tests/state_test_util.go +++ b/tests/state_test_util.go @@ -38,6 +38,7 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/crypto/keccak" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" @@ -45,7 +46,6 @@ import ( "github.com/ethereum/go-ethereum/triedb/hashdb" "github.com/ethereum/go-ethereum/triedb/pathdb" "github.com/holiman/uint256" - "golang.org/x/crypto/sha3" ) // StateTest checks transaction processing without block context. @@ -496,7 +496,7 @@ func (tx *stTransaction) toMessage(ps stPostState, baseFee *big.Int) (*core.Mess } func rlpHash(x interface{}) (h common.Hash) { - hw := sha3.NewLegacyKeccak256() + hw := keccak.NewLegacyKeccak256() rlp.Encode(hw, x) hw.Sum(h[:0]) return h diff --git a/trie/trie_test.go b/trie/trie_test.go index b8b8edb33e..3423cde59c 100644 --- a/trie/trie_test.go +++ b/trie/trie_test.go @@ -35,12 +35,12 @@ import ( "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/crypto/keccak" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/internal/testrand" "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/trie/trienode" "github.com/holiman/uint256" - "golang.org/x/crypto/sha3" ) func init() { @@ -968,7 +968,7 @@ func TestCommitSequenceStackTrie(t *testing.T) { prng := rand.New(rand.NewSource(int64(count))) // This spongeDb is used to check the sequence of disk-db-writes s := &spongeDb{ - sponge: sha3.NewLegacyKeccak256(), + sponge: keccak.NewLegacyKeccak256(), id: "a", values: make(map[string]string), } @@ -977,7 +977,7 @@ func TestCommitSequenceStackTrie(t *testing.T) { // Another sponge is used for the stacktrie commits stackTrieSponge := &spongeDb{ - sponge: sha3.NewLegacyKeccak256(), + sponge: keccak.NewLegacyKeccak256(), id: "b", values: make(map[string]string), } @@ -1040,7 +1040,7 @@ func TestCommitSequenceStackTrie(t *testing.T) { // not fit into 32 bytes, rlp-encoded. However, it's still the correct thing to do. func TestCommitSequenceSmallRoot(t *testing.T) { s := &spongeDb{ - sponge: sha3.NewLegacyKeccak256(), + sponge: keccak.NewLegacyKeccak256(), id: "a", values: make(map[string]string), } @@ -1049,7 +1049,7 @@ func TestCommitSequenceSmallRoot(t *testing.T) { // Another sponge is used for the stacktrie commits stackTrieSponge := &spongeDb{ - sponge: sha3.NewLegacyKeccak256(), + sponge: keccak.NewLegacyKeccak256(), id: "b", values: make(map[string]string), } From bba41f80721dedfebb9a434cfad598751a9e2eac Mon Sep 17 00:00:00 2001 From: Marius van der Wijden Date: Wed, 4 Feb 2026 04:50:19 +0100 Subject: [PATCH 005/161] core/txpool/legacypool: reduce unnecessary allocations during add (#33701) Not many allocs we save here, but it also cleans up the logic and should speed up the process a tiny bit --- core/txpool/legacypool/legacypool.go | 34 ++++++++++++---------------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/core/txpool/legacypool/legacypool.go b/core/txpool/legacypool/legacypool.go index e17b12f7f2..36970c820e 100644 --- a/core/txpool/legacypool/legacypool.go +++ b/core/txpool/legacypool/legacypool.go @@ -908,8 +908,8 @@ func (pool *LegacyPool) addRemoteSync(tx *types.Transaction) error { func (pool *LegacyPool) Add(txs []*types.Transaction, sync bool) []error { // Filter out known ones without obtaining the pool lock or recovering signatures var ( - errs = make([]error, len(txs)) - news = make([]*types.Transaction, 0, len(txs)) + hasValid bool + errs = make([]error, len(txs)) ) for i, tx := range txs { // If the transaction is known, pre-set the error slot @@ -927,26 +927,17 @@ func (pool *LegacyPool) Add(txs []*types.Transaction, sync bool) []error { invalidTxMeter.Mark(1) continue } - // Accumulate all unknown transactions for deeper processing - news = append(news, tx) + hasValid = true } - if len(news) == 0 { + if !hasValid { return errs } // Process all the new transaction and merge any errors into the original slice pool.mu.Lock() - newErrs, dirtyAddrs := pool.addTxsLocked(news) + dirtyAddrs := pool.addTxsLocked(txs, errs) pool.mu.Unlock() - var nilSlot = 0 - for _, err := range newErrs { - for errs[nilSlot] != nil { - nilSlot++ - } - errs[nilSlot] = err - nilSlot++ - } // Reorg the pool internals if needed and return done := pool.requestPromoteExecutables(dirtyAddrs) if sync { @@ -957,14 +948,19 @@ func (pool *LegacyPool) Add(txs []*types.Transaction, sync bool) []error { // addTxsLocked attempts to queue a batch of transactions if they are valid. // The transaction pool lock must be held. -// Returns the error for each tx, and the set of accounts that might became promotable. -func (pool *LegacyPool) addTxsLocked(txs []*types.Transaction) ([]error, *accountSet) { +// Sets the error for each tx, and the set of accounts that might became promotable. +// We only try to add txs that have no error set in the errs slice. +// If adding the transaction returns an error, we set the error in the errs slice. +// Requires len(txs) == len(errs). +func (pool *LegacyPool) addTxsLocked(txs []*types.Transaction, errs []error) *accountSet { var ( dirty = newAccountSet(pool.signer) - errs = make([]error, len(txs)) valid int64 ) for i, tx := range txs { + if errs[i] != nil { + continue + } replaced, err := pool.add(tx) errs[i] = err if err == nil { @@ -975,7 +971,7 @@ func (pool *LegacyPool) addTxsLocked(txs []*types.Transaction) ([]error, *accoun } } validTxMeter.Mark(valid) - return errs, dirty + return dirty } // Status returns the status (unknown/pending/queued) of a batch of transactions @@ -1397,7 +1393,7 @@ func (pool *LegacyPool) reset(oldHead, newHead *types.Header) { // Inject any transactions discarded due to reorgs log.Debug("Reinjecting stale transactions", "count", len(reinject)) core.SenderCacher().Recover(pool.signer, reinject) - pool.addTxsLocked(reinject) + pool.addTxsLocked(reinject, make([]error, len(reinject))) } // promoteExecutables moves transactions that have become processable from the From 6b82cef68fbc40898d4327a363c027eb78671dc8 Mon Sep 17 00:00:00 2001 From: vickkkkkyy Date: Wed, 4 Feb 2026 20:19:50 +0800 Subject: [PATCH 006/161] metrics: add missing GaugeInfo case in GetAll() (#33748) GetAll did not return GaugeInfo metrics, which affects "chain/info" and "geth/info". --- metrics/registry.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/metrics/registry.go b/metrics/registry.go index 6070f3d0e9..1541a81fdd 100644 --- a/metrics/registry.go +++ b/metrics/registry.go @@ -143,6 +143,8 @@ func (r *StandardRegistry) GetAll() map[string]map[string]interface{} { values["value"] = metric.Snapshot().Value() case *GaugeFloat64: values["value"] = metric.Snapshot().Value() + case *GaugeInfo: + values["value"] = metric.Snapshot().Value() case *Healthcheck: values["error"] = nil metric.Check() From 7b7be249cb937abba4eac096c01bdd887af339e2 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Wed, 4 Feb 2026 20:16:24 +0100 Subject: [PATCH 007/161] rlp: add RawList for working with un-decoded lists (#33755) This adds a new type wrapper that decodes as a list, but does not actually decode the contents of the list. The type parameter exists as a marker, and enables decoding the elements lazily. RawList can also be used for building a list incrementally. --- rlp/encode.go | 23 +++++ rlp/iterator.go | 51 +++++++---- rlp/iterator_test.go | 8 ++ rlp/raw.go | 117 +++++++++++++++++++++++++ rlp/raw_test.go | 202 +++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 386 insertions(+), 15 deletions(-) diff --git a/rlp/encode.go b/rlp/encode.go index ed99275739..ba8959ee6f 100644 --- a/rlp/encode.go +++ b/rlp/encode.go @@ -102,6 +102,29 @@ func EncodeToReader(val interface{}) (size int, r io.Reader, err error) { return buf.size(), &encReader{buf: buf}, nil } +// EncodeToRawList encodes val as an RLP list and returns it as a RawList. +func EncodeToRawList[T any](val []T) (RawList[T], error) { + if len(val) == 0 { + return RawList[T]{}, nil + } + + // Encode the value to an internal buffer. + buf := getEncBuffer() + defer encBufferPool.Put(buf) + if err := buf.encode(val); err != nil { + return RawList[T]{}, err + } + + // Create the RawList. RawList assumes the initial list header is padded + // 9 bytes, so we have to determine the offset where the value should be + // placed. + contentSize := buf.lheads[0].size + bytes := make([]byte, contentSize+9) + offset := 9 - headsize(uint64(contentSize)) + buf.copyTo(bytes[offset:]) + return RawList[T]{enc: bytes}, nil +} + type listhead struct { offset int // index of this header in string data size int // total size of encoded data (including list headers) diff --git a/rlp/iterator.go b/rlp/iterator.go index 05567fa05b..a67e6651f5 100644 --- a/rlp/iterator.go +++ b/rlp/iterator.go @@ -16,14 +16,16 @@ package rlp -type listIterator struct { - data []byte - next []byte - err error +// Iterator is an iterator over the elements of an encoded container. +type Iterator struct { + data []byte + next []byte + offset int + err error } -// NewListIterator creates an iterator for the (list) represented by data -func NewListIterator(data RawValue) (*listIterator, error) { +// NewListIterator creates an iterator for the (list) represented by data. +func NewListIterator(data RawValue) (*Iterator, error) { k, t, c, err := readKind(data) if err != nil { return nil, err @@ -31,16 +33,18 @@ func NewListIterator(data RawValue) (*listIterator, error) { if k != List { return nil, ErrExpectedList } - it := &listIterator{ - data: data[t : t+c], - } + it := &Iterator{data: data[t : t+c], offset: int(t)} return it, nil } +func newIterator(data []byte) *Iterator { + return &Iterator{data: data} +} + // Next forwards the iterator one step. // Returns true if there is a next item or an error occurred on this step (check Err()). // On parse error, the iterator is marked finished and subsequent calls return false. -func (it *listIterator) Next() bool { +func (it *Iterator) Next() bool { if len(it.data) == 0 { return false } @@ -52,17 +56,34 @@ func (it *listIterator) Next() bool { it.data = nil return true } - it.next = it.data[:t+c] - it.data = it.data[t+c:] + length := t + c + it.next = it.data[:length] + it.data = it.data[length:] + it.offset += int(length) it.err = nil return true } -// Value returns the current value -func (it *listIterator) Value() []byte { +// Count returns the remaining number of items. +// Note this is O(n) and the result may be incorrect if the list data is invalid. +// The returned count is always an upper bound on the remaining items +// that will be visited by the iterator. +func (it *Iterator) Count() int { + count, _ := CountValues(it.data) + return count +} + +// Value returns the current value. +func (it *Iterator) Value() []byte { return it.next } -func (it *listIterator) Err() error { +// Offset returns the offset of the current value into the list data. +func (it *Iterator) Offset() int { + return it.offset - len(it.next) +} + +// Err returns the error that caused Next to return false, if any. +func (it *Iterator) Err() error { return it.err } diff --git a/rlp/iterator_test.go b/rlp/iterator_test.go index a22aaec862..8ea26dad1b 100644 --- a/rlp/iterator_test.go +++ b/rlp/iterator_test.go @@ -38,10 +38,18 @@ func TestIterator(t *testing.T) { t.Fatal("expected two elems, got zero") } txs := it.Value() + if offset := it.Offset(); offset != 3 { + t.Fatal("wrong offset", offset, "want 3") + } + // Check that uncles exist if !it.Next() { t.Fatal("expected two elems, got one") } + if offset := it.Offset(); offset != 219 { + t.Fatal("wrong offset", offset, "want 219") + } + txit, err := NewListIterator(txs) if err != nil { t.Fatal(err) diff --git a/rlp/raw.go b/rlp/raw.go index f284da3f6d..876a503d70 100644 --- a/rlp/raw.go +++ b/rlp/raw.go @@ -17,8 +17,10 @@ package rlp import ( + "fmt" "io" "reflect" + "slices" ) // RawValue represents an encoded RLP value and can be used to delay @@ -28,6 +30,121 @@ type RawValue []byte var rawValueType = reflect.TypeFor[RawValue]() +// RawList represents an encoded RLP list. +type RawList[T any] struct { + // The list is stored in encoded form. + // Note this buffer has some special properties: + // + // - if the buffer is nil, it's the zero value, representing + // an empty list. + // - if the buffer is non-nil, it must have a length of at least + // 9 bytes, which is reserved padding for the encoded list header. + // The remaining bytes, enc[9:], store the content bytes of the list. + // + // The implementation code mostly works with the Content method because it + // returns something valid either way. + enc []byte +} + +// Content returns the RLP-encoded data of the list. +// This does not include the list-header. +// The return value is a direct reference to the internal buffer, not a copy. +func (r *RawList[T]) Content() []byte { + if r.enc == nil { + return nil + } else { + return r.enc[9:] + } +} + +// EncodeRLP writes the encoded list to the writer. +func (r RawList[T]) EncodeRLP(w io.Writer) error { + _, err := w.Write(r.Bytes()) + return err +} + +// Bytes returns the RLP encoding of the list. +// Note the return value aliases the internal buffer. +func (r *RawList[T]) Bytes() []byte { + if r == nil || r.enc == nil { + return []byte{0xC0} // zero value encodes as empty list + } + n := puthead(r.enc, 0xC0, 0xF7, uint64(len(r.Content()))) + copy(r.enc[9-n:], r.enc[:n]) + return r.enc[9-n:] +} + +// DecodeRLP decodes the list. This does not perform validation of the items! +func (r *RawList[T]) DecodeRLP(s *Stream) error { + k, size, err := s.Kind() + if err != nil { + return err + } + if k != List { + return fmt.Errorf("%w for %T", ErrExpectedList, r) + } + enc := make([]byte, 9+size) + if err := s.readFull(enc[9:]); err != nil { + return err + } + *r = RawList[T]{enc: enc} + return nil +} + +// Items decodes and returns all items in the list. +func (r *RawList[T]) Items() ([]T, error) { + items := make([]T, r.Len()) + it := r.ContentIterator() + for i := 0; it.Next(); i++ { + if err := DecodeBytes(it.Value(), &items[i]); err != nil { + return items[:i], err + } + } + return items, nil +} + +// Len returns the number of items in the list. +func (r *RawList[T]) Len() int { + len, _ := CountValues(r.Content()) + return len +} + +// Size returns the encoded size of the list. +func (r *RawList[T]) Size() uint64 { + return ListSize(uint64(len(r.Content()))) +} + +// Empty returns true if the list contains no items. +func (r *RawList[T]) Empty() bool { + return len(r.Content()) == 0 +} + +// ContentIterator returns an iterator over the content of the list. +// Note the offsets returned by iterator.Offset are relative to the +// Content bytes of the list. +func (r *RawList[T]) ContentIterator() *Iterator { + return newIterator(r.Content()) +} + +// Append adds an item to the end of the list. +func (r *RawList[T]) Append(item T) error { + if r.enc == nil { + r.enc = make([]byte, 9) + } + + eb := getEncBuffer() + defer encBufferPool.Put(eb) + + if err := eb.encode(item); err != nil { + return err + } + prevEnd := len(r.enc) + end := prevEnd + eb.size() + r.enc = slices.Grow(r.enc, eb.size())[:end] + eb.copyTo(r.enc[prevEnd:end]) + return nil +} + // StringSize returns the encoded size of a string. func StringSize(s string) uint64 { switch n := len(s); n { diff --git a/rlp/raw_test.go b/rlp/raw_test.go index 2ed77b384c..9a4c68050c 100644 --- a/rlp/raw_test.go +++ b/rlp/raw_test.go @@ -19,11 +19,213 @@ package rlp import ( "bytes" "errors" + "fmt" "io" + "reflect" "testing" "testing/quick" ) +type rawListTest[T any] struct { + input string + content string + items []T + length int +} + +func (test rawListTest[T]) name() string { + return fmt.Sprintf("%T-%d", *new(T), test.length) +} + +func (test rawListTest[T]) run(t *testing.T) { + // check decoding and properties + input := unhex(test.input) + inputSize := len(input) + var rl RawList[T] + if err := DecodeBytes(input, &rl); err != nil { + t.Fatal("decode failed:", err) + } + if l := rl.Len(); l != test.length { + t.Fatalf("wrong Len %d, want %d", l, test.length) + } + if sz := rl.Size(); sz != uint64(inputSize) { + t.Fatalf("wrong Size %d, want %d", sz, inputSize) + } + items, err := rl.Items() + if err != nil { + t.Fatal("Items failed:", err) + } + if !reflect.DeepEqual(items, test.items) { + t.Fatal("wrong items:", items) + } + if !bytes.Equal(rl.Content(), unhex(test.content)) { + t.Fatalf("wrong Content %x, want %s", rl.Content(), test.content) + } + if !bytes.Equal(rl.Bytes(), unhex(test.input)) { + t.Fatalf("wrong Bytes %x, want %s", rl.Bytes(), test.input) + } + + // check iterator + it := rl.ContentIterator() + i := 0 + if count := it.Count(); count != test.length { + t.Fatalf("iterator has wrong Count %d, want %d", count, test.length) + } + for it.Next() { + var item T + if err := DecodeBytes(it.Value(), &item); err != nil { + t.Fatalf("item %d decode error: %v", i, err) + } + if !reflect.DeepEqual(item, items[i]) { + t.Fatalf("iterator has wrong item %v at %d", item, i) + } + i++ + } + if i != test.length { + t.Fatalf("iterator produced %d values, want %d", i, test.length) + } + if it.Err() != nil { + t.Fatalf("iterator error: %v", it.Err()) + } + + // check encoding round trip + output, err := EncodeToBytes(&rl) + if err != nil { + t.Fatal("encode error:", err) + } + if !bytes.Equal(output, unhex(test.input)) { + t.Fatalf("encoding does not round trip: %x", output) + } + + // check EncodeToRawList on items produces same bytes + encRL, err := EncodeToRawList(test.items) + if err != nil { + t.Fatal("EncodeToRawList error:", err) + } + encRLOutput, err := EncodeToBytes(&encRL) + if err != nil { + t.Fatal("EncodeToBytes of encoded list failed:", err) + } + if !bytes.Equal(encRLOutput, output) { + t.Fatalf("wrong encoding of EncodeToRawList result: %x", encRLOutput) + } +} + +func TestRawList(t *testing.T) { + tests := []interface { + name() string + run(t *testing.T) + }{ + rawListTest[uint64]{ + input: "C0", + content: "", + items: []uint64{}, + length: 0, + }, + rawListTest[uint64]{ + input: "C3010203", + content: "010203", + items: []uint64{1, 2, 3}, + length: 3, + }, + rawListTest[simplestruct]{ + input: "C6C20102C20304", + content: "C20102C20304", + items: []simplestruct{{1, "\x02"}, {3, "\x04"}}, + length: 2, + }, + rawListTest[string]{ + input: "F83C836161618362626283636363836464648365656583666666836767678368686883696969836A6A6A836B6B6B836C6C6C836D6D6D836E6E6E836F6F6F", + content: "836161618362626283636363836464648365656583666666836767678368686883696969836A6A6A836B6B6B836C6C6C836D6D6D836E6E6E836F6F6F", + items: []string{"aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg", "hhh", "iii", "jjj", "kkk", "lll", "mmm", "nnn", "ooo"}, + length: 15, + }, + } + + for _, test := range tests { + t.Run(test.name(), test.run) + } +} + +func TestRawListEmpty(t *testing.T) { + // zero value list + var rl RawList[uint64] + b, _ := EncodeToBytes(&rl) + if !bytes.Equal(b, unhex("C0")) { + t.Fatalf("empty RawList has wrong encoding %x", b) + } + if !rl.Empty() { + t.Fatal("list should be Empty") + } + if rl.Len() != 0 { + t.Fatalf("empty list has Len %d", rl.Len()) + } + if rl.Size() != 1 { + t.Fatalf("empty list has Size %d", rl.Size()) + } + if len(rl.Content()) > 0 { + t.Fatalf("empty list has non-empty Content") + } + if !bytes.Equal(rl.Bytes(), []byte{0xC0}) { + t.Fatalf("empty list has wrong encoding") + } + + // nil pointer + var nilptr *RawList[uint64] + b, _ = EncodeToBytes(nilptr) + if !bytes.Equal(b, unhex("C0")) { + t.Fatalf("nil pointer to RawList has wrong encoding %x", b) + } +} + +// This checks that *RawList works in an 'optional' context. +func TestRawListOptional(t *testing.T) { + type foo struct { + L *RawList[uint64] `rlp:"optional"` + } + // nil pointer encoding + var empty foo + b, _ := EncodeToBytes(empty) + if !bytes.Equal(b, unhex("C0")) { + t.Fatalf("nil pointer to RawList has wrong encoding %x", b) + } + // decoding + var dec foo + if err := DecodeBytes(unhex("C0"), &dec); err != nil { + t.Fatal(err) + } + if dec.L != nil { + t.Fatal("rawlist was decoded as non-nil") + } +} + +func TestRawListAppend(t *testing.T) { + var rl RawList[simplestruct] + + v1 := simplestruct{1, "one"} + v2 := simplestruct{2, "two"} + if err := rl.Append(v1); err != nil { + t.Fatal("append 1 failed:", err) + } + if err := rl.Append(v2); err != nil { + t.Fatal("append 2 failed:", err) + } + + if rl.Len() != 2 { + t.Fatalf("wrong Len %d", rl.Len()) + } + if rl.Size() != 13 { + t.Fatalf("wrong Size %d", rl.Size()) + } + if !bytes.Equal(rl.Content(), unhex("C501836F6E65 C5028374776F")) { + t.Fatalf("wrong Content %x", rl.Content()) + } + encoded, _ := EncodeToBytes(&rl) + if !bytes.Equal(encoded, unhex("CC C501836F6E65 C5028374776F")) { + t.Fatalf("wrong encoding %x", encoded) + } +} + func TestCountValues(t *testing.T) { tests := []struct { input string // note: spaces in input are stripped by unhex From 14c2408957599c096409375d33d59ca3b7048733 Mon Sep 17 00:00:00 2001 From: Sina M <1591639+s1na@users.noreply.github.com> Date: Fri, 6 Feb 2026 07:57:41 +0100 Subject: [PATCH 008/161] internal/ethapi: fix error code for revert in eth_simulateV1 (#33007) The error code for revert should be consistent with eth_call and be 3. --- internal/ethapi/errors.go | 1 - internal/ethapi/simulate.go | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/internal/ethapi/errors.go b/internal/ethapi/errors.go index 30711a0167..e406c36d6c 100644 --- a/internal/ethapi/errors.go +++ b/internal/ethapi/errors.go @@ -112,7 +112,6 @@ const ( errCodeClientLimitExceeded = -38026 errCodeInternalError = -32603 errCodeInvalidParams = -32602 - errCodeReverted = -32000 errCodeVMError = -32015 errCodeTxSyncTimeout = 4 ) diff --git a/internal/ethapi/simulate.go b/internal/ethapi/simulate.go index 3c08061313..c9396cd327 100644 --- a/internal/ethapi/simulate.go +++ b/internal/ethapi/simulate.go @@ -310,7 +310,7 @@ func (sim *simulator) processBlock(ctx context.Context, block *simBlock, header, if errors.Is(result.Err, vm.ErrExecutionReverted) { // If the result contains a revert reason, try to unpack it. revertErr := newRevertError(result.Revert()) - callRes.Error = &callError{Message: revertErr.Error(), Code: errCodeReverted, Data: revertErr.ErrorData().(string)} + callRes.Error = &callError{Message: revertErr.Error(), Code: revertErr.ErrorCode(), Data: revertErr.ErrorData().(string)} } else { callRes.Error = &callError{Message: result.Err.Error(), Code: errCodeVMError} } From aa457eda4b7351602f50bf6c152b619985e48611 Mon Sep 17 00:00:00 2001 From: Csaba Kiraly Date: Fri, 6 Feb 2026 12:48:09 +0100 Subject: [PATCH 009/161] core/txpool/blobpool: reset counters and gapped on Clear (#33775) Clear was only used in tests, but it was missing some of the cleanup. Signed-off-by: Csaba Kiraly --- core/txpool/blobpool/blobpool.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/txpool/blobpool/blobpool.go b/core/txpool/blobpool/blobpool.go index 27441ac2e2..3947ba50a1 100644 --- a/core/txpool/blobpool/blobpool.go +++ b/core/txpool/blobpool/blobpool.go @@ -2096,6 +2096,11 @@ func (p *BlobPool) Clear() { p.index = make(map[common.Address][]*blobTxMeta) p.spent = make(map[common.Address]*uint256.Int) + // Reset counters and the gapped buffer + p.stored = 0 + p.gapped = make(map[common.Address][]*types.Transaction) + p.gappedSource = make(map[common.Hash]common.Address) + var ( basefee = uint256.MustFromBig(eip1559.CalcBaseFee(p.chain.Config(), p.head.Load())) blobfee = uint256.NewInt(params.BlobTxMinBlobGasprice) From 9967fb7c5c22a8dabc56593c2b2c1fcd30f31868 Mon Sep 17 00:00:00 2001 From: vickkkkkyy Date: Fri, 6 Feb 2026 20:07:55 +0800 Subject: [PATCH 010/161] metrics: add missing ResettingTimer case in GetAll() (#33749) Follow-up to https://github.com/ethereum/go-ethereum/pull/33748 Same issue - ResettingTimer can be registered via loadOrRegister() but GetAll() silently drops it during JSON export. The prometheus exporter handles it fine (collector.go:70), so this is just an oversight in the JSON path. Note: ResettingTimer.Snapshot() resets the timer by design, which is consistent with how the prometheus exporter uses it. --- metrics/registry.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/metrics/registry.go b/metrics/registry.go index 1541a81fdd..0294c5c44b 100644 --- a/metrics/registry.go +++ b/metrics/registry.go @@ -188,6 +188,18 @@ func (r *StandardRegistry) GetAll() map[string]map[string]interface{} { values["5m.rate"] = t.Rate5() values["15m.rate"] = t.Rate15() values["mean.rate"] = t.RateMean() + case *ResettingTimer: + t := metric.Snapshot() + ps := t.Percentiles([]float64{0.5, 0.75, 0.95, 0.99, 0.999}) + values["count"] = t.Count() + values["min"] = t.Min() + values["max"] = t.Max() + values["mean"] = t.Mean() + values["median"] = ps[0] + values["75%"] = ps[1] + values["95%"] = ps[2] + values["99%"] = ps[3] + values["99.9%"] = ps[4] } data[name] = values }) From e64c8d8e2651233da3b3de7ab8bd6a756288293a Mon Sep 17 00:00:00 2001 From: Forostovec Date: Fri, 6 Feb 2026 14:10:30 +0200 Subject: [PATCH 011/161] core/rawdb: check pruning tail in HasBody and HasReceipts (#33747) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Problem `HasBody` and `HasReceipts` returned `true` for pruned blocks because they only checked `isCanon()` which verifies the hash table — but hash/header tables have `prunable: false` while body/receipt tables have `prunable: true`. After `TruncateTail()`, hashes still exist but bodies/receipts are gone. This caused inconsistency: `HasBody()` returns `true`, but `ReadBody()` returns `nil`. ### Changes Both functions now check `db.Tail()` when the block is in ancient store. If `number < tail`, the data has been pruned and the function correctly returns `false`. This aligns `HasBody`/`HasReceipts` behavior with `ReadBody`/`ReadReceipts` and fixes potential issues in `skeleton.linked()` which relies on these checks during sync. --- core/rawdb/accessors_chain.go | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/core/rawdb/accessors_chain.go b/core/rawdb/accessors_chain.go index 6ae64fb2fd..14308dd698 100644 --- a/core/rawdb/accessors_chain.go +++ b/core/rawdb/accessors_chain.go @@ -424,7 +424,13 @@ func WriteBodyRLP(db ethdb.KeyValueWriter, hash common.Hash, number uint64, rlp // HasBody verifies the existence of a block body corresponding to the hash. func HasBody(db ethdb.Reader, hash common.Hash, number uint64) bool { if isCanon(db, number, hash) { - return true + // Block is in ancient store, but bodies can be pruned. + // Check if the block number is above the pruning tail. + tail, _ := db.Tail() + if number >= tail { + return true + } + return false } if has, err := db.Has(blockBodyKey(number, hash)); !has || err != nil { return false @@ -466,7 +472,13 @@ func DeleteBody(db ethdb.KeyValueWriter, hash common.Hash, number uint64) { // to a block. func HasReceipts(db ethdb.Reader, hash common.Hash, number uint64) bool { if isCanon(db, number, hash) { - return true + // Block is in ancient store, but receipts can be pruned. + // Check if the block number is above the pruning tail. + tail, _ := db.Tail() + if number >= tail { + return true + } + return false } if has, err := db.Has(blockReceiptsKey(number, hash)); !has || err != nil { return false From ad459f4fac247e066d7b0514a215b32b400d4cf0 Mon Sep 17 00:00:00 2001 From: Marius van der Wijden Date: Fri, 6 Feb 2026 13:26:31 +0100 Subject: [PATCH 012/161] metrics: reduce allocations for metrics (#33699) --- metrics/counter.go | 5 ++++- metrics/counter_float64.go | 5 ++++- metrics/gauge.go | 5 ++++- metrics/gauge_float64.go | 5 ++++- metrics/gauge_info.go | 5 ++++- metrics/histogram.go | 10 ++++++++-- metrics/meter.go | 5 ++++- metrics/registry.go | 7 ------- metrics/registry_test.go | 27 ++++++++++++++++++++++++++- metrics/resetting_timer.go | 5 ++++- metrics/runtimehistogram.go | 6 ++++-- metrics/timer.go | 5 ++++- 12 files changed, 70 insertions(+), 20 deletions(-) diff --git a/metrics/counter.go b/metrics/counter.go index c884e9a178..0e4d93bfbc 100644 --- a/metrics/counter.go +++ b/metrics/counter.go @@ -7,7 +7,10 @@ import ( // GetOrRegisterCounter returns an existing Counter or constructs and registers // a new Counter. func GetOrRegisterCounter(name string, r Registry) *Counter { - return getOrRegister(name, NewCounter, r) + if r == nil { + r = DefaultRegistry + } + return r.GetOrRegister(name, func() any { return NewCounter() }).(*Counter) } // NewCounter constructs a new Counter. diff --git a/metrics/counter_float64.go b/metrics/counter_float64.go index 6cc73d89a2..caaaeb7be7 100644 --- a/metrics/counter_float64.go +++ b/metrics/counter_float64.go @@ -8,7 +8,10 @@ import ( // GetOrRegisterCounterFloat64 returns an existing *CounterFloat64 or constructs and registers // a new CounterFloat64. func GetOrRegisterCounterFloat64(name string, r Registry) *CounterFloat64 { - return getOrRegister(name, NewCounterFloat64, r) + if r == nil { + r = DefaultRegistry + } + return r.GetOrRegister(name, func() any { return NewCounterFloat64() }).(*CounterFloat64) } // NewCounterFloat64 constructs a new CounterFloat64. diff --git a/metrics/gauge.go b/metrics/gauge.go index 20de95255b..39d5ccb3bc 100644 --- a/metrics/gauge.go +++ b/metrics/gauge.go @@ -11,7 +11,10 @@ func (g GaugeSnapshot) Value() int64 { return int64(g) } // GetOrRegisterGauge returns an existing Gauge or constructs and registers a // new Gauge. func GetOrRegisterGauge(name string, r Registry) *Gauge { - return getOrRegister(name, NewGauge, r) + if r == nil { + r = DefaultRegistry + } + return r.GetOrRegister(name, func() any { return NewGauge() }).(*Gauge) } // NewGauge constructs a new Gauge. diff --git a/metrics/gauge_float64.go b/metrics/gauge_float64.go index 48524e4c3f..c7a1df0a23 100644 --- a/metrics/gauge_float64.go +++ b/metrics/gauge_float64.go @@ -8,7 +8,10 @@ import ( // GetOrRegisterGaugeFloat64 returns an existing GaugeFloat64 or constructs and registers a // new GaugeFloat64. func GetOrRegisterGaugeFloat64(name string, r Registry) *GaugeFloat64 { - return getOrRegister(name, NewGaugeFloat64, r) + if r == nil { + r = DefaultRegistry + } + return r.GetOrRegister(name, func() any { return NewGaugeFloat64() }).(*GaugeFloat64) } // GaugeFloat64Snapshot is a read-only copy of a GaugeFloat64. diff --git a/metrics/gauge_info.go b/metrics/gauge_info.go index 34ac917919..30c5114085 100644 --- a/metrics/gauge_info.go +++ b/metrics/gauge_info.go @@ -16,7 +16,10 @@ func (val GaugeInfoValue) String() string { // GetOrRegisterGaugeInfo returns an existing GaugeInfo or constructs and registers a // new GaugeInfo. func GetOrRegisterGaugeInfo(name string, r Registry) *GaugeInfo { - return getOrRegister(name, NewGaugeInfo, r) + if r == nil { + r = DefaultRegistry + } + return r.GetOrRegister(name, func() any { return NewGaugeInfo() }).(*GaugeInfo) } // NewGaugeInfo constructs a new GaugeInfo. diff --git a/metrics/histogram.go b/metrics/histogram.go index 18bf6e3d2b..467457abdb 100644 --- a/metrics/histogram.go +++ b/metrics/histogram.go @@ -23,13 +23,19 @@ type Histogram interface { // GetOrRegisterHistogram returns an existing Histogram or constructs and // registers a new StandardHistogram. func GetOrRegisterHistogram(name string, r Registry, s Sample) Histogram { - return getOrRegister(name, func() Histogram { return NewHistogram(s) }, r) + if r == nil { + r = DefaultRegistry + } + return r.GetOrRegister(name, func() any { return NewHistogram(s) }).(Histogram) } // GetOrRegisterHistogramLazy returns an existing Histogram or constructs and // registers a new StandardHistogram. func GetOrRegisterHistogramLazy(name string, r Registry, s func() Sample) Histogram { - return getOrRegister(name, func() Histogram { return NewHistogram(s()) }, r) + if r == nil { + r = DefaultRegistry + } + return r.GetOrRegister(name, func() any { return NewHistogram(s()) }).(Histogram) } // NewHistogram constructs a new StandardHistogram from a Sample. diff --git a/metrics/meter.go b/metrics/meter.go index ee23af10eb..2829774d8c 100644 --- a/metrics/meter.go +++ b/metrics/meter.go @@ -12,7 +12,10 @@ import ( // Be sure to unregister the meter from the registry once it is of no use to // allow for garbage collection. func GetOrRegisterMeter(name string, r Registry) *Meter { - return getOrRegister(name, NewMeter, r) + if r == nil { + r = DefaultRegistry + } + return r.GetOrRegister(name, func() any { return NewMeter() }).(*Meter) } // NewMeter constructs a new Meter and launches a goroutine. diff --git a/metrics/registry.go b/metrics/registry.go index 0294c5c44b..298598a9aa 100644 --- a/metrics/registry.go +++ b/metrics/registry.go @@ -345,13 +345,6 @@ func GetOrRegister(name string, i func() interface{}) interface{} { return DefaultRegistry.GetOrRegister(name, i) } -func getOrRegister[T any](name string, ctor func() T, r Registry) T { - if r == nil { - r = DefaultRegistry - } - return r.GetOrRegister(name, func() any { return ctor() }).(T) -} - // Register the given metric under the given name. Returns a ErrDuplicateMetric // if a metric by the given name is already registered. func Register(name string, i interface{}) error { diff --git a/metrics/registry_test.go b/metrics/registry_test.go index 6af0796da9..1aad7a0028 100644 --- a/metrics/registry_test.go +++ b/metrics/registry_test.go @@ -14,6 +14,31 @@ func BenchmarkRegistry(b *testing.B) { } } +func BenchmarkRegistryGetOrRegister(b *testing.B) { + sample := func() Sample { return nil } + tests := []struct { + name string + ctor func() any + }{ + {name: "counter", ctor: func() any { return GetOrRegisterCounter("counter", DefaultRegistry) }}, + {name: "gauge", ctor: func() any { return GetOrRegisterGauge("gauge", DefaultRegistry) }}, + {name: "gaugefloat64", ctor: func() any { return GetOrRegisterGaugeFloat64("gaugefloat64", DefaultRegistry) }}, + {name: "histogram", ctor: func() any { return GetOrRegisterHistogram("histogram", DefaultRegistry, sample()) }}, + {name: "meter", ctor: func() any { return GetOrRegisterMeter("meter", DefaultRegistry) }}, + {name: "timer", ctor: func() any { return GetOrRegisterTimer("timer", DefaultRegistry) }}, + {name: "gaugeinfo", ctor: func() any { return GetOrRegisterGaugeInfo("gaugeinfo", DefaultRegistry) }}, + {name: "resettingtimer", ctor: func() any { return GetOrRegisterResettingTimer("resettingtimer", DefaultRegistry) }}, + {name: "runtimehistogramlazy", ctor: func() any { return GetOrRegisterHistogramLazy("runtimehistogramlazy", DefaultRegistry, sample) }}, + } + for _, test := range tests { + b.Run(test.name, func(b *testing.B) { + for i := 0; i < b.N; i++ { + test.ctor() + } + }) + } +} + func BenchmarkRegistryGetOrRegisterParallel_8(b *testing.B) { benchmarkRegistryGetOrRegisterParallel(b, 8) } @@ -268,7 +293,7 @@ func TestPrefixedChildRegistryGet(t *testing.T) { } func TestChildPrefixedRegistryRegister(t *testing.T) { - r := NewPrefixedChildRegistry(DefaultRegistry, "prefix.") + r := NewPrefixedChildRegistry(NewRegistry(), "prefix.") err := r.Register("foo", NewCounter()) c := NewCounter() Register("bar", c) diff --git a/metrics/resetting_timer.go b/metrics/resetting_timer.go index 8aa7dc1488..a3f46e52e0 100644 --- a/metrics/resetting_timer.go +++ b/metrics/resetting_timer.go @@ -8,7 +8,10 @@ import ( // GetOrRegisterResettingTimer returns an existing ResettingTimer or constructs and registers a // new ResettingTimer. func GetOrRegisterResettingTimer(name string, r Registry) *ResettingTimer { - return getOrRegister(name, NewResettingTimer, r) + if r == nil { + r = DefaultRegistry + } + return r.GetOrRegister(name, func() any { return NewResettingTimer() }).(*ResettingTimer) } // NewRegisteredResettingTimer constructs and registers a new ResettingTimer. diff --git a/metrics/runtimehistogram.go b/metrics/runtimehistogram.go index efbed498af..e975a570a4 100644 --- a/metrics/runtimehistogram.go +++ b/metrics/runtimehistogram.go @@ -8,8 +8,10 @@ import ( ) func getOrRegisterRuntimeHistogram(name string, scale float64, r Registry) *runtimeHistogram { - constructor := func() Histogram { return newRuntimeHistogram(scale) } - return getOrRegister(name, constructor, r).(*runtimeHistogram) + if r == nil { + r = DefaultRegistry + } + return r.GetOrRegister(name, func() any { return newRuntimeHistogram(scale) }).(*runtimeHistogram) } // runtimeHistogram wraps a runtime/metrics histogram. diff --git a/metrics/timer.go b/metrics/timer.go index 894bdfc327..8082b31947 100644 --- a/metrics/timer.go +++ b/metrics/timer.go @@ -10,7 +10,10 @@ import ( // Be sure to unregister the meter from the registry once it is of no use to // allow for garbage collection. func GetOrRegisterTimer(name string, r Registry) *Timer { - return getOrRegister(name, NewTimer, r) + if r == nil { + r = DefaultRegistry + } + return r.GetOrRegister(name, func() any { return NewTimer() }).(*Timer) } // NewCustomTimer constructs a new Timer from a Histogram and a Meter. From 777265620d1d6fa51558aace39c86b957445e97b Mon Sep 17 00:00:00 2001 From: GarmashAlex Date: Fri, 6 Feb 2026 17:13:37 +0300 Subject: [PATCH 013/161] core/rawdb: close freezer table in InspectFreezerTable (#33776) --- core/rawdb/ancient_utils.go | 1 + 1 file changed, 1 insertion(+) diff --git a/core/rawdb/ancient_utils.go b/core/rawdb/ancient_utils.go index 0ed974b745..8c6b18df08 100644 --- a/core/rawdb/ancient_utils.go +++ b/core/rawdb/ancient_utils.go @@ -166,6 +166,7 @@ func InspectFreezerTable(ancient string, freezerName string, tableName string, s if err != nil { return err } + defer table.Close() table.dumpIndexStdout(start, end) return nil } From bc0db302ed01aea315971b9fadf468846ab45ee6 Mon Sep 17 00:00:00 2001 From: sashass1315 Date: Mon, 9 Feb 2026 09:39:55 +0200 Subject: [PATCH 014/161] core/vm: add missing PUSH0 handler in EIP-8024 test mini-interpreter (#33785) --- core/vm/instructions_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/vm/instructions_test.go b/core/vm/instructions_test.go index 56cb2686a6..88290a07e6 100644 --- a/core/vm/instructions_test.go +++ b/core/vm/instructions_test.go @@ -1149,6 +1149,8 @@ func TestEIP8024_Execution(t *testing.T) { _, err = opJumpdest(&pc, evm, scope) case ISZERO: _, err = opIszero(&pc, evm, scope) + case PUSH0: + _, err = opPush0(&pc, evm, scope) case DUPN: _, err = opDupN(&pc, evm, scope) case SWAPN: From c12959dc8c2dc8c1e6b1e9b2640d268231d5bc83 Mon Sep 17 00:00:00 2001 From: vickkkkkyy Date: Mon, 9 Feb 2026 15:49:53 +0800 Subject: [PATCH 015/161] core/rawdb: fix incorrect tail value in unindexTransactions log output (#33796) --- core/rawdb/chain_iterator.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/rawdb/chain_iterator.go b/core/rawdb/chain_iterator.go index f846d4d16c..afa1aa7a4c 100644 --- a/core/rawdb/chain_iterator.go +++ b/core/rawdb/chain_iterator.go @@ -357,9 +357,9 @@ func unindexTransactions(db ethdb.Database, from uint64, to uint64, interrupt ch } select { case <-interrupt: - logger("Transaction unindexing interrupted", "blocks", blocks, "txs", txs, "tail", to, "elapsed", common.PrettyDuration(time.Since(start))) + logger("Transaction unindexing interrupted", "blocks", blocks, "txs", txs, "tail", nextNum, "elapsed", common.PrettyDuration(time.Since(start))) default: - logger("Unindexed transactions", "blocks", blocks, "txs", txs, "tail", to, "elapsed", common.PrettyDuration(time.Since(start))) + logger("Unindexed transactions", "blocks", blocks, "txs", txs, "tail", nextNum, "elapsed", common.PrettyDuration(time.Since(start))) } } From c9b7ae422c1d2d4a4de859007553a4ad2118afdb Mon Sep 17 00:00:00 2001 From: shazam8253 <54690736+shazam8253@users.noreply.github.com> Date: Mon, 9 Feb 2026 10:30:19 -0500 Subject: [PATCH 016/161] internal/era: New EraE implementation (#32157) Here is a draft for the New EraE implementation. The code follows along with the spec listed at https://hackmd.io/pIZlxnitSciV5wUgW6W20w. --------- Co-authored-by: shantichanal <158101918+shantichanal@users.noreply.github.com> Co-authored-by: lightclient Co-authored-by: MariusVanDerWijden Co-authored-by: Sina Mahmoodi --- cmd/era/main.go | 128 ++++-- cmd/geth/chaincmd.go | 45 ++- cmd/utils/cmd.go | 158 +++++--- cmd/utils/flags.go | 6 + cmd/utils/history_test.go | 260 +++++++------ core/rawdb/eradb/eradb.go | 19 +- core/types/receipt.go | 30 ++ core/types/receipt_test.go | 39 ++ go.mod | 2 +- internal/era/accumulator.go | 21 +- internal/era/era.go | 366 +++++------------- internal/era/eradl/eradl.go | 4 +- internal/era/execdb/builder.go | 332 ++++++++++++++++ internal/era/execdb/era_test.go | 348 +++++++++++++++++ internal/era/execdb/iterator.go | 240 ++++++++++++ internal/era/execdb/reader.go | 296 ++++++++++++++ internal/era/{ => onedb}/builder.go | 54 ++- .../{era_test.go => onedb/builder_test.go} | 14 +- internal/era/{ => onedb}/iterator.go | 19 +- internal/era/onedb/reader.go | 279 +++++++++++++ internal/era/proof.go | 36 ++ 21 files changed, 2151 insertions(+), 545 deletions(-) create mode 100644 internal/era/execdb/builder.go create mode 100644 internal/era/execdb/era_test.go create mode 100644 internal/era/execdb/iterator.go create mode 100644 internal/era/execdb/reader.go rename internal/era/{ => onedb}/builder.go (84%) rename internal/era/{era_test.go => onedb/builder_test.go} (95%) rename internal/era/{ => onedb}/iterator.go (89%) create mode 100644 internal/era/onedb/reader.go create mode 100644 internal/era/proof.go diff --git a/cmd/era/main.go b/cmd/era/main.go index 35a889d4dc..1c26f44ad4 100644 --- a/cmd/era/main.go +++ b/cmd/era/main.go @@ -30,6 +30,8 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/internal/era" + "github.com/ethereum/go-ethereum/internal/era/execdb" + "github.com/ethereum/go-ethereum/internal/era/onedb" "github.com/ethereum/go-ethereum/internal/ethapi" "github.com/ethereum/go-ethereum/internal/flags" "github.com/ethereum/go-ethereum/params" @@ -53,7 +55,7 @@ var ( eraSizeFlag = &cli.IntFlag{ Name: "size", Usage: "number of blocks per era", - Value: era.MaxEra1Size, + Value: era.MaxSize, } txsFlag = &cli.BoolFlag{ Name: "txs", @@ -131,7 +133,7 @@ func block(ctx *cli.Context) error { return nil } -// info prints some high-level information about the era1 file. +// info prints some high-level information about the era file. func info(ctx *cli.Context) error { epoch, err := strconv.ParseUint(ctx.Args().First(), 10, 64) if err != nil { @@ -142,33 +144,34 @@ func info(ctx *cli.Context) error { return err } defer e.Close() - acc, err := e.Accumulator() - if err != nil { - return fmt.Errorf("error reading accumulator: %w", err) + var ( + accHex string + tdStr string + ) + if acc, err := e.Accumulator(); err == nil { + accHex = acc.Hex() } - td, err := e.InitialTD() - if err != nil { - return fmt.Errorf("error reading total difficulty: %w", err) + if td, err := e.InitialTD(); err == nil { + tdStr = td.String() } info := struct { - Accumulator common.Hash `json:"accumulator"` - TotalDifficulty *big.Int `json:"totalDifficulty"` - StartBlock uint64 `json:"startBlock"` - Count uint64 `json:"count"` + Accumulator string `json:"accumulator,omitempty"` + TotalDifficulty string `json:"totalDifficulty,omitempty"` + StartBlock uint64 `json:"startBlock"` + Count uint64 `json:"count"` }{ - acc, td, e.Start(), e.Count(), + accHex, tdStr, e.Start(), e.Count(), } b, _ := json.MarshalIndent(info, "", " ") fmt.Println(string(b)) return nil } -// open opens an era1 file at a certain epoch. -func open(ctx *cli.Context, epoch uint64) (*era.Era, error) { - var ( - dir = ctx.String(dirFlag.Name) - network = ctx.String(networkFlag.Name) - ) +// open opens an era file at a certain epoch. +func open(ctx *cli.Context, epoch uint64) (era.Era, error) { + dir := ctx.String(dirFlag.Name) + network := ctx.String(networkFlag.Name) + entries, err := era.ReadDir(dir, network) if err != nil { return nil, fmt.Errorf("error reading era dir: %w", err) @@ -176,7 +179,28 @@ func open(ctx *cli.Context, epoch uint64) (*era.Era, error) { if epoch >= uint64(len(entries)) { return nil, fmt.Errorf("epoch out-of-bounds: last %d, want %d", len(entries)-1, epoch) } - return era.Open(filepath.Join(dir, entries[epoch])) + path := filepath.Join(dir, entries[epoch]) + return openByPath(path) +} + +// openByPath tries to open a single file as either eraE or era1 based on extension, +// falling back to the other reader if needed. +func openByPath(path string) (era.Era, error) { + switch strings.ToLower(filepath.Ext(path)) { + case ".erae": + if e, err := execdb.Open(path); err != nil { + return nil, err + } else { + return e, nil + } + case ".era1": + if e, err := onedb.Open(path); err != nil { + return nil, err + } else { + return e, nil + } + } + return nil, fmt.Errorf("unsupported or unreadable era file: %s", path) } // verify checks each era1 file in a directory to ensure it is well-formed and @@ -203,18 +227,58 @@ func verify(ctx *cli.Context) error { return fmt.Errorf("error reading %s: %w", dir, err) } - if len(entries) != len(roots) { - return errors.New("number of era1 files should match the number of accumulator hashes") + // Build the verification list respecting the rule: + // era1: must have accumulator, always verify + // erae: verify only if accumulator exists (pre-merge) + + // Build list of files to verify. + verify := make([]string, 0, len(entries)) + + for _, name := range entries { + path := filepath.Join(dir, name) + ext := strings.ToLower(filepath.Ext(name)) + + switch ext { + case ".era1": + e, err := onedb.Open(path) + if err != nil { + return fmt.Errorf("error opening era1 file %s: %w", name, err) + } + _, accErr := e.Accumulator() + e.Close() + if accErr != nil { + return fmt.Errorf("era1 file %s missing accumulator: %w", name, accErr) + } + verify = append(verify, path) + + case ".erae": + e, err := execdb.Open(path) + if err != nil { + return fmt.Errorf("error opening erae file %s: %w", name, err) + } + _, accErr := e.Accumulator() + e.Close() + if accErr == nil { + verify = append(verify, path) // pre-merge only + } + default: + return fmt.Errorf("unsupported era file: %s", name) + } + } + + if len(verify) != len(roots) { + return fmt.Errorf("mismatch between eras to verify (%d) and provided roots (%d)", len(verify), len(roots)) } // Verify each epoch matches the expected root. for i, want := range roots { // Wrap in function so defers don't stack. err := func() error { - name := entries[i] - e, err := era.Open(filepath.Join(dir, name)) + path := verify[i] + name := filepath.Base(path) + e, err := openByPath(path) if err != nil { - return fmt.Errorf("error opening era1 file %s: %w", name, err) + return fmt.Errorf("error opening era file %s: %w", name, err) } defer e.Close() // Read accumulator and check against expected. @@ -243,7 +307,7 @@ func verify(ctx *cli.Context) error { } // checkAccumulator verifies the accumulator matches the data in the Era. -func checkAccumulator(e *era.Era) error { +func checkAccumulator(e era.Era) error { var ( err error want common.Hash @@ -257,7 +321,7 @@ func checkAccumulator(e *era.Era) error { if td, err = e.InitialTD(); err != nil { return fmt.Errorf("error reading total difficulty: %w", err) } - it, err := era.NewIterator(e) + it, err := e.Iterator() if err != nil { return fmt.Errorf("error making era iterator: %w", err) } @@ -290,9 +354,13 @@ func checkAccumulator(e *era.Era) error { if rr != block.ReceiptHash() { return fmt.Errorf("receipt root in block %d mismatch: want %s, got %s", block.NumberU64(), block.ReceiptHash(), rr) } - hashes = append(hashes, block.Hash()) - td.Add(td, block.Difficulty()) - tds = append(tds, new(big.Int).Set(td)) + // Only include pre-merge blocks in accumulator calculation. + // Post-merge blocks have difficulty == 0. + if block.Difficulty().Sign() > 0 { + hashes = append(hashes, block.Hash()) + td.Add(td, block.Difficulty()) + tds = append(tds, new(big.Int).Set(td)) + } } if it.Error() != nil { return fmt.Errorf("error reading block %d: %w", it.Number(), it.Error()) diff --git a/cmd/geth/chaincmd.go b/cmd/geth/chaincmd.go index 9d04dd0f1b..1ccb78d622 100644 --- a/cmd/geth/chaincmd.go +++ b/cmd/geth/chaincmd.go @@ -20,6 +20,7 @@ import ( "encoding/json" "errors" "fmt" + "io" "os" "path/filepath" "regexp" @@ -43,6 +44,8 @@ import ( "github.com/ethereum/go-ethereum/internal/debug" "github.com/ethereum/go-ethereum/internal/era" "github.com/ethereum/go-ethereum/internal/era/eradl" + "github.com/ethereum/go-ethereum/internal/era/execdb" + "github.com/ethereum/go-ethereum/internal/era/onedb" "github.com/ethereum/go-ethereum/internal/flags" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/node" @@ -153,7 +156,7 @@ be gzipped.`, Name: "import-history", Usage: "Import an Era archive", ArgsUsage: "", - Flags: slices.Concat([]cli.Flag{utils.TxLookupLimitFlag, utils.TransactionHistoryFlag}, utils.DatabaseFlags, utils.NetworkFlags), + Flags: slices.Concat([]cli.Flag{utils.TxLookupLimitFlag, utils.TransactionHistoryFlag, utils.EraFormatFlag}, utils.DatabaseFlags, utils.NetworkFlags), Description: ` The import-history command will import blocks and their corresponding receipts from Era archives. @@ -164,7 +167,7 @@ from Era archives. Name: "export-history", Usage: "Export blockchain history to Era archives", ArgsUsage: " ", - Flags: utils.DatabaseFlags, + Flags: slices.Concat([]cli.Flag{utils.EraFormatFlag}, utils.DatabaseFlags), Description: ` The export-history command will export blocks and their corresponding receipts into Era archives. Eras are typically packaged in steps of 8192 blocks. @@ -516,15 +519,27 @@ func importHistory(ctx *cli.Context) error { network = networks[0] } - if err := utils.ImportHistory(chain, dir, network); err != nil { + var ( + format = ctx.String(utils.EraFormatFlag.Name) + from func(era.ReadAtSeekCloser) (era.Era, error) + ) + switch format { + case "era1", "era": + from = onedb.From + case "erae": + from = execdb.From + default: + return fmt.Errorf("unknown --era.format %q (expected 'era1' or 'erae')", format) + } + if err := utils.ImportHistory(chain, dir, network, from); err != nil { return err } + fmt.Printf("Import done in %v\n", time.Since(start)) return nil } -// exportHistory exports chain history in Era archives at a specified -// directory. +// exportHistory exports chain history in Era archives at a specified directory. func exportHistory(ctx *cli.Context) error { if ctx.Args().Len() != 3 { utils.Fatalf("usage: %s", ctx.Command.ArgsUsage) @@ -550,10 +565,26 @@ func exportHistory(ctx *cli.Context) error { if head := chain.CurrentSnapBlock(); uint64(last) > head.Number.Uint64() { utils.Fatalf("Export error: block number %d larger than head block %d\n", uint64(last), head.Number.Uint64()) } - err := utils.ExportHistory(chain, dir, uint64(first), uint64(last), uint64(era.MaxEra1Size)) - if err != nil { + + var ( + format = ctx.String(utils.EraFormatFlag.Name) + filename func(network string, epoch int, root common.Hash) string + newBuilder func(w io.Writer) era.Builder + ) + switch format { + case "era1", "era": + newBuilder = func(w io.Writer) era.Builder { return onedb.NewBuilder(w) } + filename = func(network string, epoch int, root common.Hash) string { return onedb.Filename(network, epoch, root) } + case "erae": + newBuilder = func(w io.Writer) era.Builder { return execdb.NewBuilder(w) } + filename = func(network string, epoch int, root common.Hash) string { return execdb.Filename(network, epoch, root) } + default: + return fmt.Errorf("unknown archive format %q (use 'era1' or 'erae')", format) + } + if err := utils.ExportHistory(chain, dir, uint64(first), uint64(last), newBuilder, filename); err != nil { utils.Fatalf("Export error: %v\n", err) } + fmt.Printf("Export done in %v\n", time.Since(start)) return nil } diff --git a/cmd/utils/cmd.go b/cmd/utils/cmd.go index 3e337a3d00..995724e6fc 100644 --- a/cmd/utils/cmd.go +++ b/cmd/utils/cmd.go @@ -57,6 +57,8 @@ const ( importBatchSize = 2500 ) +type EraFileFormat int + // ErrImportInterrupted is returned when the user interrupts the import process. var ErrImportInterrupted = errors.New("interrupted") @@ -250,7 +252,7 @@ func readList(filename string) ([]string, error) { // ImportHistory imports Era1 files containing historical block information, // starting from genesis. The assumption is held that the provided chain // segment in Era1 file should all be canonical and verified. -func ImportHistory(chain *core.BlockChain, dir string, network string) error { +func ImportHistory(chain *core.BlockChain, dir string, network string, from func(f era.ReadAtSeekCloser) (era.Era, error)) error { if chain.CurrentSnapBlock().Number.BitLen() != 0 { return errors.New("history import only supported when starting from genesis") } @@ -263,42 +265,49 @@ func ImportHistory(chain *core.BlockChain, dir string, network string) error { return fmt.Errorf("unable to read checksums.txt: %w", err) } if len(checksums) != len(entries) { - return fmt.Errorf("expected equal number of checksums and entries, have: %d checksums, %d entries", len(checksums), len(entries)) + return fmt.Errorf("expected equal number of checksums and entries, have: %d checksums, %d entries", + len(checksums), len(entries)) } + var ( start = time.Now() reported = time.Now() imported = 0 h = sha256.New() - buf = bytes.NewBuffer(nil) + scratch = bytes.NewBuffer(nil) ) - for i, filename := range entries { + + for i, file := range entries { err := func() error { - f, err := os.Open(filepath.Join(dir, filename)) + path := filepath.Join(dir, file) + + // validate against checksum file in directory + f, err := os.Open(path) if err != nil { - return fmt.Errorf("unable to open era: %w", err) + return fmt.Errorf("open %s: %w", path, err) } defer f.Close() - - // Validate checksum. if _, err := io.Copy(h, f); err != nil { - return fmt.Errorf("unable to recalculate checksum: %w", err) - } - if have, want := common.BytesToHash(h.Sum(buf.Bytes()[:])).Hex(), checksums[i]; have != want { - return fmt.Errorf("checksum mismatch: have %s, want %s", have, want) + return fmt.Errorf("checksum %s: %w", path, err) } + got := common.BytesToHash(h.Sum(scratch.Bytes()[:])).Hex() + want := checksums[i] h.Reset() - buf.Reset() + scratch.Reset() + if got != want { + return fmt.Errorf("%s checksum mismatch: have %s want %s", file, got, want) + } // Import all block data from Era1. - e, err := era.From(f) + e, err := from(f) if err != nil { return fmt.Errorf("error opening era: %w", err) } - it, err := era.NewIterator(e) + it, err := e.Iterator() if err != nil { - return fmt.Errorf("error making era reader: %w", err) + return fmt.Errorf("error creating iterator: %w", err) } + for it.Next() { block, err := it.Block() if err != nil { @@ -311,26 +320,28 @@ func ImportHistory(chain *core.BlockChain, dir string, network string) error { if err != nil { return fmt.Errorf("error reading receipts %d: %w", it.Number(), err) } - encReceipts := types.EncodeBlockReceiptLists([]types.Receipts{receipts}) - if _, err := chain.InsertReceiptChain([]*types.Block{block}, encReceipts, math.MaxUint64); err != nil { + enc := types.EncodeBlockReceiptLists([]types.Receipts{receipts}) + if _, err := chain.InsertReceiptChain([]*types.Block{block}, enc, math.MaxUint64); err != nil { return fmt.Errorf("error inserting body %d: %w", it.Number(), err) } - imported += 1 + imported++ - // Give the user some feedback that something is happening. if time.Since(reported) >= 8*time.Second { - log.Info("Importing Era files", "head", it.Number(), "imported", imported, "elapsed", common.PrettyDuration(time.Since(start))) + log.Info("Importing Era files", "head", it.Number(), "imported", imported, + "elapsed", common.PrettyDuration(time.Since(start))) imported = 0 reported = time.Now() } } + if err := it.Error(); err != nil { + return err + } return nil }() if err != nil { return err } } - return nil } @@ -389,7 +400,6 @@ func ExportAppendChain(blockchain *core.BlockChain, fn string, first uint64, las return err } defer fh.Close() - var writer io.Writer = fh if strings.HasSuffix(fn, ".gz") { writer = gzip.NewWriter(writer) @@ -405,7 +415,7 @@ func ExportAppendChain(blockchain *core.BlockChain, fn string, first uint64, las // ExportHistory exports blockchain history into the specified directory, // following the Era format. -func ExportHistory(bc *core.BlockChain, dir string, first, last, step uint64) error { +func ExportHistory(bc *core.BlockChain, dir string, first, last uint64, newBuilder func(io.Writer) era.Builder, filename func(network string, epoch int, lastBlockHash common.Hash) string) error { log.Info("Exporting blockchain history", "dir", dir) if head := bc.CurrentBlock().Number.Uint64(); head < last { log.Warn("Last block beyond head, setting last = head", "head", head, "last", last) @@ -418,76 +428,100 @@ func ExportHistory(bc *core.BlockChain, dir string, first, last, step uint64) er if err := os.MkdirAll(dir, os.ModePerm); err != nil { return fmt.Errorf("error creating output directory: %w", err) } + var ( start = time.Now() reported = time.Now() h = sha256.New() buf = bytes.NewBuffer(nil) + td = new(big.Int) checksums []string ) - td := new(big.Int) - for i := uint64(0); i < first; i++ { - td.Add(td, bc.GetHeaderByNumber(i).Difficulty) + + // Compute initial TD by accumulating difficulty from genesis to first-1. + // This is necessary because TD is no longer stored in the database. Only + // compute if a segment of the export is pre-merge. + b := bc.GetBlockByNumber(first) + if b == nil { + return fmt.Errorf("block #%d not found", first) } - for i := first; i <= last; i += step { - err := func() error { - filename := filepath.Join(dir, era.Filename(network, int(i/step), common.Hash{})) - f, err := os.Create(filename) + if first > 0 && b.Difficulty().Sign() != 0 { + log.Info("Computing initial total difficulty", "from", 0, "to", first-1) + for i := uint64(0); i < first; i++ { + b := bc.GetBlockByNumber(i) + if b == nil { + return fmt.Errorf("block #%d not found while computing initial TD", i) + } + td.Add(td, b.Difficulty()) + } + log.Info("Initial total difficulty computed", "td", td) + } + + for batch := first; batch <= last; batch += uint64(era.MaxSize) { + idx := int(batch / uint64(era.MaxSize)) + tmpPath := filepath.Join(dir, filename(network, idx, common.Hash{})) + + if err := func() error { + f, err := os.Create(tmpPath) if err != nil { - return fmt.Errorf("could not create era file: %w", err) + return err } defer f.Close() - w := era.NewBuilder(f) - for j := uint64(0); j < step && j <= last-i; j++ { - var ( - n = i + j - block = bc.GetBlockByNumber(n) - ) + builder := newBuilder(f) + + for j := uint64(0); j < uint64(era.MaxSize) && batch+j <= last; j++ { + n := batch + j + block := bc.GetBlockByNumber(n) if block == nil { - return fmt.Errorf("export failed on #%d: not found", n) + return fmt.Errorf("block #%d not found", n) } - receipts := bc.GetReceiptsByHash(block.Hash()) - if receipts == nil { - return fmt.Errorf("export failed on #%d: receipts not found", n) + receipt := bc.GetReceiptsByHash(block.Hash()) + if receipt == nil { + return fmt.Errorf("receipts for #%d missing", n) } - td.Add(td, block.Difficulty()) - if err := w.Add(block, receipts, new(big.Int).Set(td)); err != nil { + + // For pre-merge blocks, pass accumulated TD. + // For post-merge blocks (difficulty == 0), pass nil TD. + var blockTD *big.Int + if block.Difficulty().Sign() != 0 { + td.Add(td, block.Difficulty()) + blockTD = new(big.Int).Set(td) + } + + if err := builder.Add(block, receipt, blockTD); err != nil { return err } } - root, err := w.Finalize() + id, err := builder.Finalize() if err != nil { - return fmt.Errorf("export failed to finalize %d: %w", step/i, err) + return err } - // Set correct filename with root. - os.Rename(filename, filepath.Join(dir, era.Filename(network, int(i/step), root))) - - // Compute checksum of entire Era1. if _, err := f.Seek(0, io.SeekStart); err != nil { return err } - if _, err := io.Copy(h, f); err != nil { - return fmt.Errorf("unable to calculate checksum: %w", err) - } - checksums = append(checksums, common.BytesToHash(h.Sum(buf.Bytes()[:])).Hex()) h.Reset() buf.Reset() - return nil - }() - if err != nil { + if _, err := io.Copy(h, f); err != nil { + return err + } + checksums = append(checksums, common.BytesToHash(h.Sum(buf.Bytes()[:])).Hex()) + + // Close before rename. It's required on Windows. + f.Close() + final := filepath.Join(dir, filename(network, idx, id)) + return os.Rename(tmpPath, final) + }(); err != nil { return err } + if time.Since(reported) >= 8*time.Second { - log.Info("Exporting blocks", "exported", i, "elapsed", common.PrettyDuration(time.Since(start))) + log.Info("export progress", "exported", batch, "elapsed", common.PrettyDuration(time.Since(start))) reported = time.Now() } } - os.WriteFile(filepath.Join(dir, "checksums.txt"), []byte(strings.Join(checksums, "\n")), os.ModePerm) - - log.Info("Exported blockchain to", "dir", dir) - + _ = os.WriteFile(filepath.Join(dir, "checksums.txt"), []byte(strings.Join(checksums, "\n")), os.ModePerm) return nil } diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 91448c520c..6e19766773 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -1042,6 +1042,12 @@ Please note that --` + MetricsHTTPFlag.Name + ` must be set to start the server. Value: metrics.DefaultConfig.InfluxDBOrganization, Category: flags.MetricsCategory, } + + // Era flags are a group of flags related to the era archive format. + EraFormatFlag = &cli.StringFlag{ + Name: "era.format", + Usage: "Archive format: 'era1' or 'erae'", + } ) var ( diff --git a/cmd/utils/history_test.go b/cmd/utils/history_test.go index 994756eda5..6631946129 100644 --- a/cmd/utils/history_test.go +++ b/cmd/utils/history_test.go @@ -33,6 +33,8 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/internal/era" + "github.com/ethereum/go-ethereum/internal/era/execdb" + "github.com/ethereum/go-ethereum/internal/era/onedb" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/trie" "github.com/ethereum/go-ethereum/triedb" @@ -44,136 +46,148 @@ var ( ) func TestHistoryImportAndExport(t *testing.T) { - var ( - key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") - address = crypto.PubkeyToAddress(key.PublicKey) - genesis = &core.Genesis{ - Config: params.TestChainConfig, - Alloc: types.GenesisAlloc{address: {Balance: big.NewInt(1000000000000000000)}}, - } - signer = types.LatestSigner(genesis.Config) - ) - - // Generate chain. - db, blocks, _ := core.GenerateChainWithGenesis(genesis, ethash.NewFaker(), int(count), func(i int, g *core.BlockGen) { - if i == 0 { - return - } - tx, err := types.SignNewTx(key, signer, &types.DynamicFeeTx{ - ChainID: genesis.Config.ChainID, - Nonce: uint64(i - 1), - GasTipCap: common.Big0, - GasFeeCap: g.PrevBlock(0).BaseFee(), - Gas: 50000, - To: &common.Address{0xaa}, - Value: big.NewInt(int64(i)), - Data: nil, - AccessList: nil, - }) - if err != nil { - t.Fatalf("error creating tx: %v", err) - } - g.AddTx(tx) - }) - - // Initialize BlockChain. - chain, err := core.NewBlockChain(db, genesis, ethash.NewFaker(), nil) - if err != nil { - t.Fatalf("unable to initialize chain: %v", err) - } - if _, err := chain.InsertChain(blocks); err != nil { - t.Fatalf("error inserting chain: %v", err) - } - - // Make temp directory for era files. - dir := t.TempDir() - - // Export history to temp directory. - if err := ExportHistory(chain, dir, 0, count, step); err != nil { - t.Fatalf("error exporting history: %v", err) - } - - // Read checksums. - b, err := os.ReadFile(filepath.Join(dir, "checksums.txt")) - if err != nil { - t.Fatalf("failed to read checksums: %v", err) - } - checksums := strings.Split(string(b), "\n") - - // Verify each Era. - entries, _ := era.ReadDir(dir, "mainnet") - for i, filename := range entries { - func() { - f, err := os.Open(filepath.Join(dir, filename)) - if err != nil { - t.Fatalf("error opening era file: %v", err) - } + for _, tt := range []struct { + name string + builder func(io.Writer) era.Builder + filename func(network string, epoch int, root common.Hash) string + from func(f era.ReadAtSeekCloser) (era.Era, error) + }{ + {"era1", onedb.NewBuilder, onedb.Filename, onedb.From}, + {"erae", execdb.NewBuilder, execdb.Filename, execdb.From}, + } { + t.Run(tt.name, func(t *testing.T) { var ( - h = sha256.New() - buf = bytes.NewBuffer(nil) + key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + address = crypto.PubkeyToAddress(key.PublicKey) + genesis = &core.Genesis{ + Config: params.TestChainConfig, + Alloc: types.GenesisAlloc{address: {Balance: big.NewInt(1000000000000000000)}}, + } + signer = types.LatestSigner(genesis.Config) ) - if _, err := io.Copy(h, f); err != nil { - t.Fatalf("unable to recalculate checksum: %v", err) - } - if got, want := common.BytesToHash(h.Sum(buf.Bytes()[:])).Hex(), checksums[i]; got != want { - t.Fatalf("checksum %d does not match: got %s, want %s", i, got, want) - } - e, err := era.From(f) - if err != nil { - t.Fatalf("error opening era: %v", err) - } - defer e.Close() - it, err := era.NewIterator(e) - if err != nil { - t.Fatalf("error making era reader: %v", err) - } - for j := 0; it.Next(); j++ { - n := i*int(step) + j - if it.Error() != nil { - t.Fatalf("error reading block entry %d: %v", n, it.Error()) + + // Generate chain. + db, blocks, _ := core.GenerateChainWithGenesis(genesis, ethash.NewFaker(), int(count), func(i int, g *core.BlockGen) { + if i == 0 { + return } - block, receipts, err := it.BlockAndReceipts() + tx, err := types.SignNewTx(key, signer, &types.DynamicFeeTx{ + ChainID: genesis.Config.ChainID, + Nonce: uint64(i - 1), + GasTipCap: common.Big0, + GasFeeCap: g.PrevBlock(0).BaseFee(), + Gas: 50000, + To: &common.Address{0xaa}, + Value: big.NewInt(int64(i)), + Data: nil, + AccessList: nil, + }) if err != nil { - t.Fatalf("error reading block entry %d: %v", n, err) - } - want := chain.GetBlockByNumber(uint64(n)) - if want, got := uint64(n), block.NumberU64(); want != got { - t.Fatalf("blocks out of order: want %d, got %d", want, got) - } - if want.Hash() != block.Hash() { - t.Fatalf("block hash mismatch %d: want %s, got %s", n, want.Hash().Hex(), block.Hash().Hex()) - } - if got := types.DeriveSha(block.Transactions(), trie.NewStackTrie(nil)); got != want.TxHash() { - t.Fatalf("tx hash %d mismatch: want %s, got %s", n, want.TxHash(), got) - } - if got := types.CalcUncleHash(block.Uncles()); got != want.UncleHash() { - t.Fatalf("uncle hash %d mismatch: want %s, got %s", n, want.UncleHash(), got) - } - if got := types.DeriveSha(receipts, trie.NewStackTrie(nil)); got != want.ReceiptHash() { - t.Fatalf("receipt root %d mismatch: want %s, got %s", n, want.ReceiptHash(), got) + t.Fatalf("error creating tx: %v", err) } + g.AddTx(tx) + }) + + // Initialize BlockChain. + chain, err := core.NewBlockChain(db, genesis, ethash.NewFaker(), nil) + if err != nil { + t.Fatalf("unable to initialize chain: %v", err) + } + if _, err := chain.InsertChain(blocks); err != nil { + t.Fatalf("error inserting chain: %v", err) } - }() - } - // Now import Era. - db2, err := rawdb.Open(rawdb.NewMemoryDatabase(), rawdb.OpenOptions{}) - if err != nil { - panic(err) - } - t.Cleanup(func() { - db2.Close() - }) + // Make temp directory for era files. + dir := t.TempDir() - genesis.MustCommit(db2, triedb.NewDatabase(db2, triedb.HashDefaults)) - imported, err := core.NewBlockChain(db2, genesis, ethash.NewFaker(), nil) - if err != nil { - t.Fatalf("unable to initialize chain: %v", err) - } - if err := ImportHistory(imported, dir, "mainnet"); err != nil { - t.Fatalf("failed to import chain: %v", err) - } - if have, want := imported.CurrentHeader(), chain.CurrentHeader(); have.Hash() != want.Hash() { - t.Fatalf("imported chain does not match expected, have (%d, %s) want (%d, %s)", have.Number, have.Hash(), want.Number, want.Hash()) + // Export history to temp directory. + if err := ExportHistory(chain, dir, 0, count, tt.builder, tt.filename); err != nil { + t.Fatalf("error exporting history: %v", err) + } + + // Read checksums. + b, err := os.ReadFile(filepath.Join(dir, "checksums.txt")) + if err != nil { + t.Fatalf("failed to read checksums: %v", err) + } + checksums := strings.Split(string(b), "\n") + + // Verify each Era. + entries, _ := era.ReadDir(dir, "mainnet") + for i, filename := range entries { + func() { + f, err := os.Open(filepath.Join(dir, filename)) + if err != nil { + t.Fatalf("error opening era file: %v", err) + } + var ( + h = sha256.New() + buf = bytes.NewBuffer(nil) + ) + if _, err := io.Copy(h, f); err != nil { + t.Fatalf("unable to recalculate checksum: %v", err) + } + if got, want := common.BytesToHash(h.Sum(buf.Bytes()[:])).Hex(), checksums[i]; got != want { + t.Fatalf("checksum %d does not match: got %s, want %s", i, got, want) + } + e, err := tt.from(f) + if err != nil { + t.Fatalf("error opening era: %v", err) + } + defer e.Close() + it, err := e.Iterator() + if err != nil { + t.Fatalf("error making era reader: %v", err) + } + for j := 0; it.Next(); j++ { + n := i*int(step) + j + if it.Error() != nil { + t.Fatalf("error reading block entry %d: %v", n, it.Error()) + } + block, receipts, err := it.BlockAndReceipts() + if err != nil { + t.Fatalf("error reading block entry %d: %v", n, err) + } + want := chain.GetBlockByNumber(uint64(n)) + if want, got := uint64(n), block.NumberU64(); want != got { + t.Fatalf("blocks out of order: want %d, got %d", want, got) + } + if want.Hash() != block.Hash() { + t.Fatalf("block hash mismatch %d: want %s, got %s", n, want.Hash().Hex(), block.Hash().Hex()) + } + if got := types.DeriveSha(block.Transactions(), trie.NewStackTrie(nil)); got != want.TxHash() { + t.Fatalf("tx hash %d mismatch: want %s, got %s", n, want.TxHash(), got) + } + if got := types.CalcUncleHash(block.Uncles()); got != want.UncleHash() { + t.Fatalf("uncle hash %d mismatch: want %s, got %s", n, want.UncleHash(), got) + } + if got := types.DeriveSha(receipts, trie.NewStackTrie(nil)); got != want.ReceiptHash() { + t.Fatalf("receipt root %d mismatch: want %s, got %s", n, want.ReceiptHash(), got) + } + } + }() + } + + // Now import Era. + db2, err := rawdb.Open(rawdb.NewMemoryDatabase(), rawdb.OpenOptions{}) + if err != nil { + panic(err) + } + t.Cleanup(func() { + db2.Close() + }) + + genesis.MustCommit(db2, triedb.NewDatabase(db2, triedb.HashDefaults)) + imported, err := core.NewBlockChain(db2, genesis, ethash.NewFaker(), nil) + if err != nil { + t.Fatalf("unable to initialize chain: %v", err) + } + if err := ImportHistory(imported, dir, "mainnet", tt.from); err != nil { + t.Fatalf("failed to import chain: %v", err) + } + if have, want := imported.CurrentHeader(), chain.CurrentHeader(); have.Hash() != want.Hash() { + t.Fatalf("imported chain does not match expected, have (%d, %s) want (%d, %s)", have.Number, have.Hash(), want.Number, want.Hash()) + } + }) } } diff --git a/core/rawdb/eradb/eradb.go b/core/rawdb/eradb/eradb.go index a552b94da9..d715c824ed 100644 --- a/core/rawdb/eradb/eradb.go +++ b/core/rawdb/eradb/eradb.go @@ -27,6 +27,7 @@ import ( "github.com/ethereum/go-ethereum/common/lru" "github.com/ethereum/go-ethereum/internal/era" + "github.com/ethereum/go-ethereum/internal/era/onedb" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rlp" ) @@ -51,7 +52,7 @@ type Store struct { type fileCacheEntry struct { refcount int // reference count. This is protected by Store.mu! opened chan struct{} // signals opening of file has completed - file *era.Era // the file + file *onedb.Era // the file err error // error from opening the file } @@ -102,7 +103,7 @@ func (db *Store) Close() { // GetRawBody returns the raw body for a given block number. func (db *Store) GetRawBody(number uint64) ([]byte, error) { - epoch := number / uint64(era.MaxEra1Size) + epoch := number / uint64(era.MaxSize) entry := db.getEraByEpoch(epoch) if entry.err != nil { if errors.Is(entry.err, fs.ErrNotExist) { @@ -117,7 +118,7 @@ func (db *Store) GetRawBody(number uint64) ([]byte, error) { // GetRawReceipts returns the raw receipts for a given block number. func (db *Store) GetRawReceipts(number uint64) ([]byte, error) { - epoch := number / uint64(era.MaxEra1Size) + epoch := number / uint64(era.MaxSize) entry := db.getEraByEpoch(epoch) if entry.err != nil { if errors.Is(entry.err, fs.ErrNotExist) { @@ -249,7 +250,7 @@ func (db *Store) getCacheEntry(epoch uint64) (stat fileCacheStatus, entry *fileC } // fileOpened is called after an era file has been successfully opened. -func (db *Store) fileOpened(epoch uint64, entry *fileCacheEntry, file *era.Era) { +func (db *Store) fileOpened(epoch uint64, entry *fileCacheEntry, file *onedb.Era) { db.mu.Lock() defer db.mu.Unlock() @@ -282,7 +283,7 @@ func (db *Store) fileFailedToOpen(epoch uint64, entry *fileCacheEntry, err error entry.err = err } -func (db *Store) openEraFile(epoch uint64) (*era.Era, error) { +func (db *Store) openEraFile(epoch uint64) (*onedb.Era, error) { // File name scheme is --. glob := fmt.Sprintf("*-%05d-*.era1", epoch) matches, err := filepath.Glob(filepath.Join(db.datadir, glob)) @@ -297,17 +298,17 @@ func (db *Store) openEraFile(epoch uint64) (*era.Era, error) { } filename := matches[0] - e, err := era.Open(filename) + e, err := onedb.Open(filename) if err != nil { return nil, err } // Sanity-check start block. - if e.Start()%uint64(era.MaxEra1Size) != 0 { + if e.Start()%uint64(era.MaxSize) != 0 { e.Close() - return nil, fmt.Errorf("pre-merge era1 file has invalid boundary. %d %% %d != 0", e.Start(), era.MaxEra1Size) + return nil, fmt.Errorf("pre-merge era1 file has invalid boundary. %d %% %d != 0", e.Start(), era.MaxSize) } log.Debug("Opened era1 file", "epoch", epoch) - return e, nil + return e.(*onedb.Era), nil } // doneWithFile signals that the caller has finished using a file. diff --git a/core/types/receipt.go b/core/types/receipt.go index 5b6669f274..ba7d9900f0 100644 --- a/core/types/receipt.go +++ b/core/types/receipt.go @@ -424,3 +424,33 @@ func EncodeBlockReceiptLists(receipts []Receipts) []rlp.RawValue { } return result } + +// SlimReceipt is a wrapper around a Receipt with RLP serialization that omits +// the Bloom field and includes the tx type. Used for era files. +type SlimReceipt Receipt + +type slimReceiptRLP struct { + Type uint8 + StatusEncoding []byte + CumulativeGasUsed uint64 + Logs []*Log +} + +// EncodeRLP implements rlp.Encoder, encoding the receipt as +// [tx-type, post-state-or-status, cumulative-gas, logs]. +func (r *SlimReceipt) EncodeRLP(w io.Writer) error { + data := &slimReceiptRLP{r.Type, (*Receipt)(r).statusEncoding(), r.CumulativeGasUsed, r.Logs} + return rlp.Encode(w, data) +} + +// DecodeRLP implements rlp.Decoder. +func (r *SlimReceipt) DecodeRLP(s *rlp.Stream) error { + var data slimReceiptRLP + if err := s.Decode(&data); err != nil { + return err + } + r.Type = data.Type + r.CumulativeGasUsed = data.CumulativeGasUsed + r.Logs = data.Logs + return (*Receipt)(r).setStatus(data.StatusEncoding) +} diff --git a/core/types/receipt_test.go b/core/types/receipt_test.go index 8f805ff096..676d9c3d30 100644 --- a/core/types/receipt_test.go +++ b/core/types/receipt_test.go @@ -512,6 +512,45 @@ func TestReceiptUnmarshalBinary(t *testing.T) { } } +func TestSlimReceiptEncodingDecoding(t *testing.T) { + tests := []*Receipt{ + legacyReceipt, + accessListReceipt, + eip1559Receipt, + { + Type: BlobTxType, + Status: ReceiptStatusSuccessful, + CumulativeGasUsed: 100, + Logs: []*Log{}, + }, + } + for i, want := range tests { + enc, err := rlp.EncodeToBytes((*SlimReceipt)(want)) + if err != nil { + t.Fatalf("test %d: encode error: %v", i, err) + } + got := new(SlimReceipt) + if err := rlp.DecodeBytes(enc, got); err != nil { + t.Fatalf("test %d: decode error: %v", i, err) + } + if got.Type != want.Type { + t.Errorf("test %d: Type mismatch: got %d, want %d", i, got.Type, want.Type) + } + if got.Status != want.Status { + t.Errorf("test %d: Status mismatch: got %d, want %d", i, got.Status, want.Status) + } + if !bytes.Equal(got.PostState, want.PostState) { + t.Errorf("test %d: PostState mismatch: got %x, want %x", i, got.PostState, want.PostState) + } + if got.CumulativeGasUsed != want.CumulativeGasUsed { + t.Errorf("test %d: CumulativeGasUsed mismatch: got %d, want %d", i, got.CumulativeGasUsed, want.CumulativeGasUsed) + } + if len(got.Logs) != len(want.Logs) { + t.Errorf("test %d: Logs length mismatch: got %d, want %d", i, len(got.Logs), len(want.Logs)) + } + } +} + func clearComputedFieldsOnReceipts(receipts []*Receipt) []*Receipt { r := make([]*Receipt, len(receipts)) for i, receipt := range receipts { diff --git a/go.mod b/go.mod index 306b08ff1a..cd6e4ee63b 100644 --- a/go.mod +++ b/go.mod @@ -44,6 +44,7 @@ require ( github.com/jackpal/go-nat-pmp v1.0.2 github.com/jedisct1/go-minisign v0.0.0-20230811132847-661be99b8267 github.com/karalabe/hid v1.0.1-0.20240306101548-573246063e52 + github.com/klauspost/compress v1.17.8 github.com/kylelemons/godebug v1.1.0 github.com/mattn/go-colorable v0.1.13 github.com/mattn/go-isatty v0.0.20 @@ -126,7 +127,6 @@ require ( github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/kilic/bls12-381 v0.1.0 // indirect - github.com/klauspost/compress v1.17.8 // indirect github.com/klauspost/cpuid/v2 v2.0.9 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect diff --git a/internal/era/accumulator.go b/internal/era/accumulator.go index 83a761f1fd..72e36fe00f 100644 --- a/internal/era/accumulator.go +++ b/internal/era/accumulator.go @@ -20,6 +20,7 @@ import ( "errors" "fmt" "math/big" + "slices" "github.com/ethereum/go-ethereum/common" ssz "github.com/ferranbt/fastssz" @@ -31,8 +32,8 @@ func ComputeAccumulator(hashes []common.Hash, tds []*big.Int) (common.Hash, erro if len(hashes) != len(tds) { return common.Hash{}, errors.New("must have equal number hashes as td values") } - if len(hashes) > MaxEra1Size { - return common.Hash{}, fmt.Errorf("too many records: have %d, max %d", len(hashes), MaxEra1Size) + if len(hashes) > MaxSize { + return common.Hash{}, fmt.Errorf("too many records: have %d, max %d", len(hashes), MaxSize) } hh := ssz.NewHasher() for i := range hashes { @@ -43,7 +44,7 @@ func ComputeAccumulator(hashes []common.Hash, tds []*big.Int) (common.Hash, erro } hh.Append(root[:]) } - hh.MerkleizeWithMixin(0, uint64(len(hashes)), uint64(MaxEra1Size)) + hh.MerkleizeWithMixin(0, uint64(len(hashes)), uint64(MaxSize)) return hh.HashRoot() } @@ -69,23 +70,15 @@ func (h *headerRecord) HashTreeRoot() ([32]byte, error) { // HashTreeRootWith ssz hashes the headerRecord object with a hasher. func (h *headerRecord) HashTreeRootWith(hh ssz.HashWalker) (err error) { hh.PutBytes(h.Hash[:]) - td := bigToBytes32(h.TotalDifficulty) + td := BigToBytes32(h.TotalDifficulty) hh.PutBytes(td[:]) hh.Merkleize(0) return } // bigToBytes32 converts a big.Int into a little-endian 32-byte array. -func bigToBytes32(n *big.Int) (b [32]byte) { +func BigToBytes32(n *big.Int) (b [32]byte) { n.FillBytes(b[:]) - reverseOrder(b[:]) + slices.Reverse(b[:]) return } - -// reverseOrder reverses the byte order of a slice. -func reverseOrder(b []byte) []byte { - for i := 0; i < 16; i++ { - b[i], b[32-i-1] = b[32-i-1], b[i] - } - return b -} diff --git a/internal/era/era.go b/internal/era/era.go index 118c67abfd..ed481c810e 100644 --- a/internal/era/era.go +++ b/internal/era/era.go @@ -1,4 +1,4 @@ -// Copyright 2024 The go-ethereum Authors +// Copyright 2025 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify @@ -17,7 +17,6 @@ package era import ( - "encoding/binary" "fmt" "io" "math/big" @@ -25,293 +24,132 @@ import ( "path" "strconv" "strings" - "sync" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/internal/era/e2store" - "github.com/ethereum/go-ethereum/rlp" - "github.com/golang/snappy" ) +// Type constants for the e2store entries in the Era1 and EraE formats. var ( - TypeVersion uint16 = 0x3265 - TypeCompressedHeader uint16 = 0x03 - TypeCompressedBody uint16 = 0x04 - TypeCompressedReceipts uint16 = 0x05 - TypeTotalDifficulty uint16 = 0x06 - TypeAccumulator uint16 = 0x07 - TypeBlockIndex uint16 = 0x3266 + TypeVersion uint16 = 0x3265 + TypeCompressedHeader uint16 = 0x03 + TypeCompressedBody uint16 = 0x04 + TypeCompressedReceipts uint16 = 0x05 + TypeTotalDifficulty uint16 = 0x06 + TypeAccumulator uint16 = 0x07 + TypeCompressedSlimReceipts uint16 = 0x08 // uses eth/69 encoding + TypeProof uint16 = 0x09 + TypeBlockIndex uint16 = 0x3266 + TypeComponentIndex uint16 = 0x3267 - MaxEra1Size = 8192 + MaxSize = 8192 + // headerSize uint64 = 8 ) -// Filename returns a recognizable Era1-formatted file name for the specified -// epoch and network. -func Filename(network string, epoch int, root common.Hash) string { - return fmt.Sprintf("%s-%05d-%s.era1", network, epoch, root.Hex()[2:10]) -} - -// ReadDir reads all the era1 files in a directory for a given network. -// Format: --.era1 -func ReadDir(dir, network string) ([]string, error) { - entries, err := os.ReadDir(dir) - if err != nil { - return nil, fmt.Errorf("error reading directory %s: %w", dir, err) - } - var ( - next = uint64(0) - eras []string - ) - for _, entry := range entries { - if path.Ext(entry.Name()) != ".era1" { - continue - } - parts := strings.Split(entry.Name(), "-") - if len(parts) != 3 || parts[0] != network { - // Invalid era1 filename, skip. - continue - } - if epoch, err := strconv.ParseUint(parts[1], 10, 64); err != nil { - return nil, fmt.Errorf("malformed era1 filename: %s", entry.Name()) - } else if epoch != next { - return nil, fmt.Errorf("missing epoch %d", next) - } - next += 1 - eras = append(eras, entry.Name()) - } - return eras, nil -} - type ReadAtSeekCloser interface { io.ReaderAt io.Seeker io.Closer } -// Era reads and Era1 file. -type Era struct { - f ReadAtSeekCloser // backing era1 file - s *e2store.Reader // e2store reader over f - m metadata // start, count, length info - mu *sync.Mutex // lock for buf - buf [8]byte // buffer reading entry offsets +// Iterator provides sequential access to blocks in an era file. +type Iterator interface { + // Next advances to the next block. Returns true if a block is available, + // false when iteration is complete or an error occurred. + Next() bool + + // Number returns the block number of the current block. + Number() uint64 + + // Block returns the current block. + Block() (*types.Block, error) + + // BlockAndReceipts returns the current block and its receipts. + BlockAndReceipts() (*types.Block, types.Receipts, error) + + // Receipts returns the receipts for the current block. + Receipts() (types.Receipts, error) + + // Error returns any error encountered during iteration. + Error() error } -// From returns an Era backed by f. -func From(f ReadAtSeekCloser) (*Era, error) { - m, err := readMetadata(f) - if err != nil { - return nil, err - } - return &Era{ - f: f, - s: e2store.NewReader(f), - m: m, - mu: new(sync.Mutex), - }, nil +// Builder constructs era files from blocks and receipts. +// +// Builders handle three epoch types automatically: +// - Pre-merge: all blocks have difficulty > 0, TD is stored for each block +// - Transition: starts pre-merge, ends post-merge; TD stored for all blocks +// - Post-merge: all blocks have difficulty == 0, no TD stored +type Builder interface { + // Add appends a block and its receipts to the era file. + // For pre-merge blocks, td must be provided. + // For post-merge blocks, td should be nil. + Add(block *types.Block, receipts types.Receipts, td *big.Int) error + + // AddRLP appends RLP-encoded block components to the era file. + // For pre-merge blocks, td and difficulty must be provided. + // For post-merge blocks, td and difficulty should be nil. + AddRLP(header, body, receipts []byte, number uint64, hash common.Hash, td, difficulty *big.Int) error + + // Finalize writes all collected entries and returns the epoch identifier. + // For Era1 (onedb): returns the accumulator root. + // For EraE (execdb): returns the last block hash. + Finalize() (common.Hash, error) + + // Accumulator returns the accumulator root after Finalize has been called. + // Returns nil for post-merge epochs where no accumulator exists. + Accumulator() *common.Hash } -// Open returns an Era backed by the given filename. -func Open(filename string) (*Era, error) { - f, err := os.Open(filename) - if err != nil { - return nil, err - } - return From(f) +// Era represents the interface for reading era data. +type Era interface { + Close() error + Start() uint64 + Count() uint64 + Iterator() (Iterator, error) + GetBlockByNumber(num uint64) (*types.Block, error) + GetRawBodyByNumber(num uint64) ([]byte, error) + GetRawReceiptsByNumber(num uint64) ([]byte, error) + InitialTD() (*big.Int, error) + Accumulator() (common.Hash, error) } -func (e *Era) Close() error { - return e.f.Close() -} +// ReadDir reads all the era files in a directory for a given network. +// Format: --.erae or --.era1 +func ReadDir(dir, network string) ([]string, error) { + entries, err := os.ReadDir(dir) -// GetBlockByNumber returns the block for the given block number. -func (e *Era) GetBlockByNumber(num uint64) (*types.Block, error) { - if e.m.start > num || e.m.start+e.m.count <= num { - return nil, fmt.Errorf("out-of-bounds: %d not in [%d, %d)", num, e.m.start, e.m.start+e.m.count) - } - off, err := e.readOffset(num) if err != nil { - return nil, err + return nil, fmt.Errorf("error reading directory %s: %w", dir, err) } - r, n, err := newSnappyReader(e.s, TypeCompressedHeader, off) - if err != nil { - return nil, err - } - var header types.Header - if err := rlp.Decode(r, &header); err != nil { - return nil, err - } - off += n - r, _, err = newSnappyReader(e.s, TypeCompressedBody, off) - if err != nil { - return nil, err - } - var body types.Body - if err := rlp.Decode(r, &body); err != nil { - return nil, err - } - return types.NewBlockWithHeader(&header).WithBody(body), nil -} - -// GetRawBodyByNumber returns the RLP-encoded body for the given block number. -func (e *Era) GetRawBodyByNumber(num uint64) ([]byte, error) { - if e.m.start > num || e.m.start+e.m.count <= num { - return nil, fmt.Errorf("out-of-bounds: %d not in [%d, %d)", num, e.m.start, e.m.start+e.m.count) - } - off, err := e.readOffset(num) - if err != nil { - return nil, err - } - off, err = e.s.SkipN(off, 1) - if err != nil { - return nil, err - } - r, _, err := newSnappyReader(e.s, TypeCompressedBody, off) - if err != nil { - return nil, err - } - return io.ReadAll(r) -} - -// GetRawReceiptsByNumber returns the RLP-encoded receipts for the given block number. -func (e *Era) GetRawReceiptsByNumber(num uint64) ([]byte, error) { - if e.m.start > num || e.m.start+e.m.count <= num { - return nil, fmt.Errorf("out-of-bounds: %d not in [%d, %d)", num, e.m.start, e.m.start+e.m.count) - } - off, err := e.readOffset(num) - if err != nil { - return nil, err - } - - // Skip over header and body. - off, err = e.s.SkipN(off, 2) - if err != nil { - return nil, err - } - - r, _, err := newSnappyReader(e.s, TypeCompressedReceipts, off) - if err != nil { - return nil, err - } - return io.ReadAll(r) -} - -// Accumulator reads the accumulator entry in the Era1 file. -func (e *Era) Accumulator() (common.Hash, error) { - entry, err := e.s.Find(TypeAccumulator) - if err != nil { - return common.Hash{}, err - } - return common.BytesToHash(entry.Value), nil -} - -// InitialTD returns initial total difficulty before the difficulty of the -// first block of the Era1 is applied. -func (e *Era) InitialTD() (*big.Int, error) { var ( - r io.Reader - header types.Header - rawTd []byte - n int64 - off int64 - err error + next = uint64(0) + eras []string + dirType string ) - - // Read first header. - if off, err = e.readOffset(e.m.start); err != nil { - return nil, err + for _, entry := range entries { + ext := path.Ext(entry.Name()) + if ext != ".erae" && ext != ".era1" { + continue + } + if dirType == "" { + dirType = ext + } + parts := strings.Split(entry.Name(), "-") + if len(parts) != 3 || parts[0] != network { + // Invalid era filename, skip. + continue + } + if epoch, err := strconv.ParseUint(parts[1], 10, 64); err != nil { + return nil, fmt.Errorf("malformed era filenames: %s", entry.Name()) + } else if epoch != next { + return nil, fmt.Errorf("missing epoch %d", next) + } + if dirType != ext { + return nil, fmt.Errorf("directory %s contains mixed era file formats: want %s, have %s", dir, dirType, ext) + } + next += 1 + eras = append(eras, entry.Name()) } - if r, n, err = newSnappyReader(e.s, TypeCompressedHeader, off); err != nil { - return nil, err - } - if err := rlp.Decode(r, &header); err != nil { - return nil, err - } - off += n - - // Skip over header and body. - off, err = e.s.SkipN(off, 2) - if err != nil { - return nil, err - } - - // Read total difficulty after first block. - if r, _, err = e.s.ReaderAt(TypeTotalDifficulty, off); err != nil { - return nil, err - } - rawTd, err = io.ReadAll(r) - if err != nil { - return nil, err - } - td := new(big.Int).SetBytes(reverseOrder(rawTd)) - return td.Sub(td, header.Difficulty), nil -} - -// Start returns the listed start block. -func (e *Era) Start() uint64 { - return e.m.start -} - -// Count returns the total number of blocks in the Era1. -func (e *Era) Count() uint64 { - return e.m.count -} - -// readOffset reads a specific block's offset from the block index. The value n -// is the absolute block number desired. -func (e *Era) readOffset(n uint64) (int64, error) { - var ( - blockIndexRecordOffset = e.m.length - 24 - int64(e.m.count)*8 // skips start, count, and header - firstIndex = blockIndexRecordOffset + 16 // first index after header / start-num - indexOffset = int64(n-e.m.start) * 8 // desired index * size of indexes - offOffset = firstIndex + indexOffset // offset of block offset - ) - e.mu.Lock() - defer e.mu.Unlock() - clear(e.buf[:]) - if _, err := e.f.ReadAt(e.buf[:], offOffset); err != nil { - return 0, err - } - // Since the block offset is relative from the start of the block index record - // we need to add the record offset to it's offset to get the block's absolute - // offset. - return blockIndexRecordOffset + int64(binary.LittleEndian.Uint64(e.buf[:])), nil -} - -// newSnappyReader returns a snappy.Reader for the e2store entry value at off. -func newSnappyReader(e *e2store.Reader, expectedType uint16, off int64) (io.Reader, int64, error) { - r, n, err := e.ReaderAt(expectedType, off) - if err != nil { - return nil, 0, err - } - return snappy.NewReader(r), int64(n), err -} - -// metadata wraps the metadata in the block index. -type metadata struct { - start uint64 - count uint64 - length int64 -} - -// readMetadata reads the metadata stored in an Era1 file's block index. -func readMetadata(f ReadAtSeekCloser) (m metadata, err error) { - // Determine length of reader. - if m.length, err = f.Seek(0, io.SeekEnd); err != nil { - return - } - b := make([]byte, 16) - // Read count. It's the last 8 bytes of the file. - if _, err = f.ReadAt(b[:8], m.length-8); err != nil { - return - } - m.count = binary.LittleEndian.Uint64(b) - // Read start. It's at the offset -sizeof(m.count) - - // count*sizeof(indexEntry) - sizeof(m.start) - if _, err = f.ReadAt(b[8:], m.length-16-int64(m.count*8)); err != nil { - return - } - m.start = binary.LittleEndian.Uint64(b[8:]) - return + return eras, nil } diff --git a/internal/era/eradl/eradl.go b/internal/era/eradl/eradl.go index 30bd2bc0d5..375b9ad15b 100644 --- a/internal/era/eradl/eradl.go +++ b/internal/era/eradl/eradl.go @@ -86,8 +86,8 @@ func (l *Loader) DownloadAll(destDir string) error { // DownloadBlockRange fetches the era1 files for the given block range. func (l *Loader) DownloadBlockRange(start, end uint64, destDir string) error { - startEpoch := start / uint64(era.MaxEra1Size) - endEpoch := end / uint64(era.MaxEra1Size) + startEpoch := start / uint64(era.MaxSize) + endEpoch := end / uint64(era.MaxSize) return l.DownloadEpochRange(startEpoch, endEpoch, destDir) } diff --git a/internal/era/execdb/builder.go b/internal/era/execdb/builder.go new file mode 100644 index 0000000000..da7f6a08c3 --- /dev/null +++ b/internal/era/execdb/builder.go @@ -0,0 +1,332 @@ +// Copyright 2025 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package execdb + +// EraE file format specification. +// +// The format can be summarized with the following expression: +// +// eraE := Version | CompressedHeader* | CompressedBody* | CompressedSlimReceipts* | TotalDifficulty* | other-entries* | Accumulator? | ComponentIndex +// +// Each basic element is its own e2store entry: +// +// Version = { type: 0x3265, data: nil } +// CompressedHeader = { type: 0x03, data: snappyFramed(rlp(header)) } +// CompressedBody = { type: 0x04, data: snappyFramed(rlp(body)) } +// CompressedSlimReceipts = { type: 0x08, data: snappyFramed(rlp([tx-type, post-state-or-status, cumulative-gas, logs])) } +// TotalDifficulty = { type: 0x06, data: uint256 (header.total_difficulty) } +// AccumulatorRoot = { type: 0x07, data: hash_tree_root(List(HeaderRecord, 8192)) } +// ComponentIndex = { type: 0x3267, data: component-index } +// +// Notes: +// - TotalDifficulty is present for pre-merge and merge transition epochs. +// For pure post-merge epochs, TotalDifficulty is omitted entirely. +// - In merge transition epochs, post-merge blocks store the final total +// difficulty (the TD at which the merge occurred). +// - AccumulatorRoot is only written for pre-merge epochs. +// - HeaderRecord is defined in the Portal Network specification. +// - Proofs (type 0x09) are defined in the spec but not yet supported in this implementation. +// +// ComponentIndex stores relative offsets to each block's components: +// +// component-index := starting-number | indexes | indexes | ... | component-count | count +// indexes := header-offset | body-offset | receipts-offset | td-offset? +// +// All values are little-endian uint64. +// +// Due to the accumulator size limit of 8192, the maximum number of blocks in an +// EraE file is also 8192. + +import ( + "bytes" + "encoding/binary" + "errors" + "fmt" + "io" + "math/big" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/internal/era" + "github.com/ethereum/go-ethereum/internal/era/e2store" + "github.com/ethereum/go-ethereum/rlp" + "github.com/golang/snappy" +) + +// Builder is used to build an EraE e2store file. It collects block entries and +// writes them to the underlying e2store.Writer. +type Builder struct { + w *e2store.Writer + + headers [][]byte + hashes []common.Hash // only pre-merge block hashes, for accumulator + bodies [][]byte + receipts [][]byte + tds []*big.Int + + startNum *uint64 + ttd *big.Int // terminal total difficulty + last common.Hash // hash of last block added + accumulator *common.Hash // accumulator root, set by Finalize (nil for post-merge) + + written uint64 + + buf *bytes.Buffer + snappy *snappy.Writer +} + +// NewBuilder returns a new Builder instance. +func NewBuilder(w io.Writer) era.Builder { + return &Builder{ + w: e2store.NewWriter(w), + } +} + +// Add writes a block entry and its receipts into the e2store file. +func (b *Builder) Add(block *types.Block, receipts types.Receipts, td *big.Int) error { + eh, err := rlp.EncodeToBytes(block.Header()) + if err != nil { + return fmt.Errorf("encode header: %w", err) + } + eb, err := rlp.EncodeToBytes(block.Body()) + if err != nil { + return fmt.Errorf("encode body: %w", err) + } + + rs := make([]*types.SlimReceipt, len(receipts)) + for i, receipt := range receipts { + rs[i] = (*types.SlimReceipt)(receipt) + } + er, err := rlp.EncodeToBytes(rs) + if err != nil { + return fmt.Errorf("encode receipts: %w", err) + } + + return b.AddRLP(eh, eb, er, block.Number().Uint64(), block.Hash(), td, block.Difficulty()) +} + +// AddRLP takes the RLP encoded block components and writes them to the underlying e2store file. +// The builder automatically handles transition epochs where both pre and post-merge blocks exist. +func (b *Builder) AddRLP(header, body, receipts []byte, number uint64, blockHash common.Hash, td, difficulty *big.Int) error { + if len(b.headers) >= era.MaxSize { + return fmt.Errorf("exceeds max size %d", era.MaxSize) + } + // Set starting block number on first add. + if b.startNum == nil { + b.startNum = new(uint64) + *b.startNum = number + } + + if difficulty == nil { + return fmt.Errorf("invalid block: difficulty is nil") + } + hasDifficulty := difficulty.Sign() > 0 + // Expect td to be nil for post-merge blocks + // and non-nil for pre-merge blocks. + if hasDifficulty != (td != nil) { + return fmt.Errorf("TD and difficulty mismatch: expected both nil or both non-nil") + } + // After the merge, difficulty must be nil. + post := (b.tds == nil && len(b.headers) > 0) || b.ttd != nil + if post && hasDifficulty { + return fmt.Errorf("post-merge epoch: cannot accept total difficulty for block %d", number) + } + + // If this marks the start of the transition, record final total + // difficulty value. + if b.ttd == nil && len(b.tds) > 0 && !hasDifficulty { + b.ttd = new(big.Int).Set(b.tds[len(b.tds)-1]) + } + + // Record block data. + b.headers = append(b.headers, header) + b.bodies = append(b.bodies, body) + b.receipts = append(b.receipts, receipts) + b.last = blockHash + + // Conditionally write the total difficulty and block hashes. + // - Pre-merge: store total difficulty and block hashes. + // - Transition: only store total difficulty. + // - Post-merge: store neither. + if hasDifficulty { + b.hashes = append(b.hashes, blockHash) + b.tds = append(b.tds, new(big.Int).Set(td)) + } else if b.ttd != nil { + b.tds = append(b.tds, new(big.Int).Set(b.ttd)) + } else { + // Post-merge: no TD or block hashes stored. + } + + return nil +} + +// Accumulator returns the accumulator root after Finalize has been called. +// Returns nil for post-merge epochs where no accumulator exists. +func (b *Builder) Accumulator() *common.Hash { + return b.accumulator +} + +type offsets struct { + headers []uint64 + bodies []uint64 + receipts []uint64 + tds []uint64 +} + +// Finalize writes all collected block entries to the e2store file. +// For pre-merge or transition epochs, the accumulator root is computed over +// pre-merge blocks and written. For pure post-merge epochs, no accumulator +// is written. Always returns the last block hash as the epoch identifier. +func (b *Builder) Finalize() (common.Hash, error) { + if b.startNum == nil { + return common.Hash{}, errors.New("no blocks added, cannot finalize") + } + // Write version before writing any blocks. + if n, err := b.w.Write(era.TypeVersion, nil); err != nil { + return common.Hash{}, fmt.Errorf("write version entry: %w", err) + } else { + b.written += uint64(n) + } + + // Convert TD values to byte-level LE representation. + var tds [][]byte + for _, td := range b.tds { + tds = append(tds, uint256LE(td)) + } + + // Create snappy writer. + b.buf = bytes.NewBuffer(nil) + b.snappy = snappy.NewBufferedWriter(b.buf) + + var o offsets + for _, section := range []struct { + typ uint16 + data [][]byte + compressed bool + offsets *[]uint64 + }{ + {era.TypeCompressedHeader, b.headers, true, &o.headers}, + {era.TypeCompressedBody, b.bodies, true, &o.bodies}, + {era.TypeCompressedSlimReceipts, b.receipts, true, &o.receipts}, + {era.TypeTotalDifficulty, tds, false, &o.tds}, + } { + for _, data := range section.data { + *section.offsets = append(*section.offsets, b.written) + if section.compressed { + // Write snappy compressed data. + if err := b.snappyWrite(section.typ, data); err != nil { + return common.Hash{}, err + } + } else { + // Directly write uncompressed data. + n, err := b.w.Write(section.typ, data) + if err != nil { + return common.Hash{}, err + } + b.written += uint64(n) + } + } + } + + // Compute and write accumulator root only for epochs that started pre-merge. + // The accumulator is computed over only the pre-merge blocks (b.hashes). + // Pure post-merge epochs have no accumulator. + if len(b.tds) > 0 { + accRoot, err := era.ComputeAccumulator(b.hashes, b.tds[:len(b.hashes)]) + if err != nil { + return common.Hash{}, fmt.Errorf("compute accumulator: %w", err) + } + if n, err := b.w.Write(era.TypeAccumulator, accRoot[:]); err != nil { + return common.Hash{}, fmt.Errorf("write accumulator: %w", err) + } else { + b.written += uint64(n) + } + b.accumulator = &accRoot + if err := b.writeIndex(&o); err != nil { + return common.Hash{}, err + } + return b.last, nil + } + + // Pure post-merge epoch: no accumulator. + if err := b.writeIndex(&o); err != nil { + return common.Hash{}, err + } + return b.last, nil +} + +// uin256LE writes 32 byte big integers to little endian. +func uint256LE(v *big.Int) []byte { + b := v.FillBytes(make([]byte, 32)) + for i := 0; i < 16; i++ { + b[i], b[31-i] = b[31-i], b[i] + } + return b +} + +// SnappyWrite compresses the input data using snappy and writes it to the e2store file. +func (b *Builder) snappyWrite(typ uint16, in []byte) error { + b.buf.Reset() + b.snappy.Reset(b.buf) + if _, err := b.snappy.Write(in); err != nil { + return fmt.Errorf("error snappy encoding: %w", err) + } + if err := b.snappy.Flush(); err != nil { + return fmt.Errorf("error flushing snappy encoding: %w", err) + } + n, err := b.w.Write(typ, b.buf.Bytes()) + b.written += uint64(n) + if err != nil { + return fmt.Errorf("error writing e2store entry: %w", err) + } + return nil +} + +// writeIndex writes the component index to the file. +func (b *Builder) writeIndex(o *offsets) error { + count := len(o.headers) + + // Post-merge, we only index headers, bodies, and receipts. Pre-merge, we also + // need to index the total difficulties. + componentCount := 3 + if len(o.tds) > 0 { + componentCount++ + } + + // Offsets are stored relative to the index position (negative, stored as uint64). + base := int64(b.written) + rel := func(abs uint64) uint64 { return uint64(int64(abs) - base) } + + var buf bytes.Buffer + write := func(v uint64) { binary.Write(&buf, binary.LittleEndian, v) } + + write(*b.startNum) + for i := range o.headers { + write(rel(o.headers[i])) + write(rel(o.bodies[i])) + write(rel(o.receipts[i])) + if len(o.tds) > 0 { + write(rel(o.tds[i])) + } + } + write(uint64(componentCount)) + write(uint64(count)) + + n, err := b.w.Write(era.TypeComponentIndex, buf.Bytes()) + b.written += uint64(n) + return err +} diff --git a/internal/era/execdb/era_test.go b/internal/era/execdb/era_test.go new file mode 100644 index 0000000000..f66931b9ed --- /dev/null +++ b/internal/era/execdb/era_test.go @@ -0,0 +1,348 @@ +// Copyright 2025 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package execdb + +import ( + "bytes" + "fmt" + "io" + "math/big" + "os" + "slices" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/rlp" +) + +func TestEraE(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + start uint64 + preMerge int + postMerge int + accumulator bool // whether accumulator should exist + }{ + { + name: "pre-merge", + start: 0, + preMerge: 128, + postMerge: 0, + accumulator: true, + }, + { + name: "post-merge", + start: 0, + preMerge: 0, + postMerge: 64, + accumulator: false, + }, + { + name: "transition", + start: 0, + preMerge: 32, + postMerge: 32, + accumulator: true, + }, + { + name: "non-zero-start", + start: 8192, + preMerge: 64, + postMerge: 0, + accumulator: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + + f, err := os.CreateTemp(t.TempDir(), "erae-test") + if err != nil { + t.Fatalf("error creating temp file: %v", err) + } + defer f.Close() + + // Build test data. + type blockData struct { + header, body, receipts []byte + hash common.Hash + td *big.Int + difficulty *big.Int + } + var ( + builder = NewBuilder(f) + blocks []blockData + totalBlocks = tt.preMerge + tt.postMerge + finalTD = big.NewInt(int64(tt.preMerge)) + ) + + // Add pre-merge blocks. + for i := 0; i < tt.preMerge; i++ { + num := tt.start + uint64(i) + blk := blockData{ + header: mustEncode(&types.Header{Number: big.NewInt(int64(num)), Difficulty: big.NewInt(1)}), + body: mustEncode(&types.Body{Transactions: []*types.Transaction{types.NewTransaction(0, common.Address{byte(i)}, nil, 0, nil, nil)}}), + receipts: mustEncode([]types.SlimReceipt{{CumulativeGasUsed: uint64(i)}}), + hash: common.Hash{byte(i)}, + td: big.NewInt(int64(i + 1)), + difficulty: big.NewInt(1), + } + blocks = append(blocks, blk) + if err := builder.AddRLP(blk.header, blk.body, blk.receipts, num, blk.hash, blk.td, blk.difficulty); err != nil { + t.Fatalf("error adding pre-merge block %d: %v", i, err) + } + } + + // Add post-merge blocks. + for i := 0; i < tt.postMerge; i++ { + idx := tt.preMerge + i + num := tt.start + uint64(idx) + blk := blockData{ + header: mustEncode(&types.Header{Number: big.NewInt(int64(num)), Difficulty: big.NewInt(0)}), + body: mustEncode(&types.Body{}), + receipts: mustEncode([]types.SlimReceipt{}), + hash: common.Hash{byte(idx)}, + difficulty: big.NewInt(0), + } + blocks = append(blocks, blk) + if err := builder.AddRLP(blk.header, blk.body, blk.receipts, num, blk.hash, nil, big.NewInt(0)); err != nil { + t.Fatalf("error adding post-merge block %d: %v", idx, err) + } + } + + // Finalize and check return values. + epochID, err := builder.Finalize() + if err != nil { + t.Fatalf("error finalizing: %v", err) + } + + // Verify epoch ID is always the last block hash. + expectedLastHash := blocks[len(blocks)-1].hash + if epochID != expectedLastHash { + t.Fatalf("wrong epoch ID: want %s, got %s", expectedLastHash.Hex(), epochID.Hex()) + } + + // Verify accumulator presence. + if tt.accumulator { + if builder.Accumulator() == nil { + t.Fatal("expected non-nil accumulator") + } + } else { + if builder.Accumulator() != nil { + t.Fatalf("expected nil accumulator, got %s", builder.Accumulator().Hex()) + } + } + + // Open and verify the era file. + e, err := Open(f.Name()) + if err != nil { + t.Fatalf("failed to open era: %v", err) + } + defer e.Close() + + // Verify metadata. + if e.Start() != tt.start { + t.Fatalf("wrong start block: want %d, got %d", tt.start, e.Start()) + } + if e.Count() != uint64(totalBlocks) { + t.Fatalf("wrong block count: want %d, got %d", totalBlocks, e.Count()) + } + + // Verify accumulator in file. + if tt.accumulator { + accRoot, err := e.Accumulator() + if err != nil { + t.Fatalf("error getting accumulator: %v", err) + } + if accRoot != *builder.Accumulator() { + t.Fatalf("accumulator mismatch: builder has %s, file contains %s", + builder.Accumulator().Hex(), accRoot.Hex()) + } + } else { + if _, err := e.Accumulator(); err == nil { + t.Fatal("expected error when reading accumulator from post-merge epoch") + } + } + + // Verify blocks via raw iterator. + it, err := NewRawIterator(e) + if err != nil { + t.Fatalf("failed to make iterator: %v", err) + } + for i := 0; i < totalBlocks; i++ { + if !it.Next() { + t.Fatalf("expected more entries at %d", i) + } + if it.Error() != nil { + t.Fatalf("unexpected error: %v", it.Error()) + } + + // Check header. + rawHeader, err := io.ReadAll(it.Header) + if err != nil { + t.Fatalf("error reading header: %v", err) + } + if !bytes.Equal(rawHeader, blocks[i].header) { + t.Fatalf("mismatched header at %d", i) + } + + // Check body. + rawBody, err := io.ReadAll(it.Body) + if err != nil { + t.Fatalf("error reading body: %v", err) + } + if !bytes.Equal(rawBody, blocks[i].body) { + t.Fatalf("mismatched body at %d", i) + } + + // Check receipts. + rawReceipts, err := io.ReadAll(it.Receipts) + if err != nil { + t.Fatalf("error reading receipts: %v", err) + } + if !bytes.Equal(rawReceipts, blocks[i].receipts) { + t.Fatalf("mismatched receipts at %d", i) + } + + // Check TD (only for epochs that have TD stored). + if tt.preMerge > 0 && it.TotalDifficulty != nil { + rawTd, err := io.ReadAll(it.TotalDifficulty) + if err != nil { + t.Fatalf("error reading TD: %v", err) + } + slices.Reverse(rawTd) + td := new(big.Int).SetBytes(rawTd) + var expectedTD *big.Int + if i < tt.preMerge { + expectedTD = blocks[i].td + } else { + // Post-merge blocks in transition epoch use final TD. + expectedTD = finalTD + } + if td.Cmp(expectedTD) != 0 { + t.Fatalf("mismatched TD at %d: want %s, got %s", i, expectedTD, td) + } + } + } + + // Verify random access. + for _, blockNum := range []uint64{tt.start, tt.start + uint64(totalBlocks) - 1} { + blk, err := e.GetBlockByNumber(blockNum) + if err != nil { + t.Fatalf("error getting block %d: %v", blockNum, err) + } + if blk.Number().Uint64() != blockNum { + t.Fatalf("wrong block number: want %d, got %d", blockNum, blk.Number().Uint64()) + } + } + + // Verify out-of-range access fails. + if _, err := e.GetBlockByNumber(tt.start + uint64(totalBlocks)); err == nil { + t.Fatal("expected error for out-of-range block") + } + if tt.start > 0 { + if _, err := e.GetBlockByNumber(tt.start - 1); err == nil { + t.Fatal("expected error for block before start") + } + } + + // Verify high-level iterator. + hlIt, err := e.Iterator() + if err != nil { + t.Fatalf("failed to create iterator: %v", err) + } + count := 0 + for hlIt.Next() { + blk, err := hlIt.Block() + if err != nil { + t.Fatalf("error getting block: %v", err) + } + if blk.Number().Uint64() != tt.start+uint64(count) { + t.Fatalf("wrong block number: want %d, got %d", tt.start+uint64(count), blk.Number().Uint64()) + } + count++ + } + if hlIt.Error() != nil { + t.Fatalf("iterator error: %v", hlIt.Error()) + } + if count != totalBlocks { + t.Fatalf("wrong iteration count: want %d, got %d", totalBlocks, count) + } + }) + } +} + +// TestInitialTD tests the InitialTD calculation separately since it requires +// specific TD/difficulty values. +func TestInitialTD(t *testing.T) { + t.Parallel() + + f, err := os.CreateTemp(t.TempDir(), "erae-initial-td-test") + if err != nil { + t.Fatalf("error creating temp file: %v", err) + } + defer f.Close() + + builder := NewBuilder(f) + + // First block: difficulty=5, TD=10, so initial TD = 10-5 = 5. + header := mustEncode(&types.Header{Number: big.NewInt(0), Difficulty: big.NewInt(5)}) + body := mustEncode(&types.Body{}) + receipts := mustEncode([]types.SlimReceipt{}) + + if err := builder.AddRLP(header, body, receipts, 0, common.Hash{0}, big.NewInt(10), big.NewInt(5)); err != nil { + t.Fatalf("error adding block: %v", err) + } + + // Second block: difficulty=3, TD=13. + header2 := mustEncode(&types.Header{Number: big.NewInt(1), Difficulty: big.NewInt(3)}) + if err := builder.AddRLP(header2, body, receipts, 1, common.Hash{1}, big.NewInt(13), big.NewInt(3)); err != nil { + t.Fatalf("error adding block: %v", err) + } + + if _, err := builder.Finalize(); err != nil { + t.Fatalf("error finalizing: %v", err) + } + + e, err := Open(f.Name()) + if err != nil { + t.Fatalf("failed to open era: %v", err) + } + defer e.Close() + + initialTD, err := e.InitialTD() + if err != nil { + t.Fatalf("error getting initial TD: %v", err) + } + + // Initial TD should be TD[0] - Difficulty[0] = 10 - 5 = 5. + if initialTD.Cmp(big.NewInt(5)) != 0 { + t.Fatalf("wrong initial TD: want 5, got %s", initialTD) + } +} + +func mustEncode(obj any) []byte { + b, err := rlp.EncodeToBytes(obj) + if err != nil { + panic(fmt.Sprintf("failed to encode obj: %v", err)) + } + return b +} diff --git a/internal/era/execdb/iterator.go b/internal/era/execdb/iterator.go new file mode 100644 index 0000000000..8d17ac00a9 --- /dev/null +++ b/internal/era/execdb/iterator.go @@ -0,0 +1,240 @@ +// Copyright 2025 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package execdb + +import ( + "errors" + "io" + "math/big" + "slices" + + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/internal/era" + "github.com/ethereum/go-ethereum/internal/era/e2store" + "github.com/ethereum/go-ethereum/rlp" + "github.com/klauspost/compress/snappy" +) + +type Iterator struct { + inner *RawIterator + block *types.Block // cache for decoded block +} + +// NewIterator returns a header/body/receipt iterator over the archive. +// Call Next immediately to position on the first block. +func NewIterator(e era.Era) (era.Iterator, error) { + inner, err := NewRawIterator(e.(*Era)) + if err != nil { + return nil, err + } + return &Iterator{inner: inner}, nil +} + +// Next advances to the next block entry. +func (it *Iterator) Next() bool { + it.block = nil + return it.inner.Next() +} + +// Number is the number of the block currently loaded. +func (it *Iterator) Number() uint64 { return it.inner.next - 1 } + +// Error returns any iteration error (EOF is reported as nil, identical +// to the Era‑1 iterator behaviour). +func (it *Iterator) Error() error { return it.inner.Error() } + +// Block decodes the current header+body into a *types.Block. +func (it *Iterator) Block() (*types.Block, error) { + if it.block != nil { + return it.block, nil + } + if it.inner.Header == nil || it.inner.Body == nil { + return nil, errors.New("header and body must be non‑nil") + } + var ( + h types.Header + b types.Body + ) + if err := rlp.Decode(it.inner.Header, &h); err != nil { + return nil, err + } + if err := rlp.Decode(it.inner.Body, &b); err != nil { + return nil, err + } + it.block = types.NewBlockWithHeader(&h).WithBody(b) + return it.block, nil +} + +// Receipts decodes receipts for the current block. +func (it *Iterator) Receipts() (types.Receipts, error) { + block, err := it.Block() + if err != nil { + return nil, err + } + if it.inner.Receipts == nil { + return nil, errors.New("receipts must be non‑nil") + } + var rs []*types.SlimReceipt + if err := rlp.Decode(it.inner.Receipts, &rs); err != nil { + return nil, err + } + if len(rs) != len(block.Transactions()) { + return nil, errors.New("number of txs does not match receipts") + } + receipts := make([]*types.Receipt, len(rs)) + for i, receipt := range rs { + receipts[i] = (*types.Receipt)(receipt) + receipts[i].Bloom = types.CreateBloom(receipts[i]) + } + return receipts, nil +} + +// BlockAndReceipts is a convenience wrapper. +func (it *Iterator) BlockAndReceipts() (*types.Block, types.Receipts, error) { + b, err := it.Block() + if err != nil { + return nil, nil, err + } + r, err := it.Receipts() + if err != nil { + return nil, nil, err + } + return b, r, nil +} + +// TotalDifficulty returns the TD at the current position (if present). +func (it *Iterator) TotalDifficulty() (*big.Int, error) { + if it.inner.TotalDifficulty == nil { + return nil, errors.New("total‑difficulty stream is nil") + } + tdBytes, err := io.ReadAll(it.inner.TotalDifficulty) + if err != nil { + return nil, err + } + slices.Reverse(tdBytes) + return new(big.Int).SetBytes(tdBytes), nil +} + +// ----------------------------------------------------------------------------- +// Low‑level iterator (raw TLV/offset handling, no decoding) +// ----------------------------------------------------------------------------- + +type RawIterator struct { + e *Era + next uint64 // next block to pull + err error + + Header io.Reader + Body io.Reader + Receipts io.Reader + TotalDifficulty io.Reader // nil when archive omits TD +} + +// NewRawIterator creates an iterator positioned *before* the first block. +func NewRawIterator(e *Era) (*RawIterator, error) { + return &RawIterator{e: e, next: e.m.start}, nil +} + +// Next loads the next block’s components; returns false on EOF or error. +func (it *RawIterator) Next() bool { + it.err = nil // clear previous error + + if it.next >= it.e.m.start+it.e.m.count { + it.clear() + return false + } + + headerOffset, err := it.e.headerOff(it.next) + if err != nil { + it.setErr(err) + return false + } + it.Header, _, err = newSnappyReader(it.e.s, era.TypeCompressedHeader, headerOffset) + if err != nil { + it.setErr(err) + return false + } + + bodyOffset, err := it.e.bodyOff(it.next) + if err != nil { + it.setErr(err) + return false + } + it.Body, _, err = newSnappyReader(it.e.s, era.TypeCompressedBody, bodyOffset) + if err != nil { + it.setErr(err) + return false + } + + receiptsOffset, err := it.e.receiptOff(it.next) + if err != nil { + it.setErr(err) + return false + } + it.Receipts, _, err = newSnappyReader(it.e.s, era.TypeCompressedSlimReceipts, receiptsOffset) + if err != nil { + it.setErr(err) + return false + } + + // Check if TD component is present in this file (pre-merge or merge-transition epoch). + if int(td) < int(it.e.m.components) { + tdOffset, err := it.e.tdOff(it.next) + if err != nil { + it.setErr(err) + return false + } + it.TotalDifficulty, _, err = it.e.s.ReaderAt(era.TypeTotalDifficulty, tdOffset) + if err != nil { + it.setErr(err) + return false + } + } else { + it.TotalDifficulty = nil + } + + it.next++ + return true +} + +func (it *RawIterator) Number() uint64 { return it.next - 1 } + +func (it *RawIterator) Error() error { + if it.err == io.EOF { + return nil + } + return it.err +} + +func (it *RawIterator) setErr(err error) { + it.err = err + it.clear() +} + +func (it *RawIterator) clear() { + it.Header, it.Body, it.Receipts, it.TotalDifficulty = nil, nil, nil, nil +} + +// newSnappyReader behaves like era.newSnappyReader: returns a snappy.Reader +// plus the length of the underlying TLV payload so callers can advance offsets. +func newSnappyReader(r *e2store.Reader, typ uint16, off int64) (io.Reader, int64, error) { + raw, n, err := r.ReaderAt(typ, off) + if err != nil { + return nil, 0, err + } + return snappy.NewReader(raw), int64(n), nil +} diff --git a/internal/era/execdb/reader.go b/internal/era/execdb/reader.go new file mode 100644 index 0000000000..d0aaad1748 --- /dev/null +++ b/internal/era/execdb/reader.go @@ -0,0 +1,296 @@ +// Copyright 2025 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package execdb + +import ( + "encoding/binary" + "fmt" + "io" + "math/big" + "os" + "slices" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/internal/era" + "github.com/ethereum/go-ethereum/internal/era/e2store" + "github.com/ethereum/go-ethereum/rlp" + "github.com/klauspost/compress/snappy" +) + +// Era object represents an era file that contains blocks and their components. +type Era struct { + f era.ReadAtSeekCloser + s *e2store.Reader + m metadata // metadata for the Era file +} + +// Filename returns a recognizable filename for an EraE file. +// The filename uses the last block hash to uniquely identify the epoch's content. +func Filename(network string, epoch int, lastBlockHash common.Hash) string { + return fmt.Sprintf("%s-%05d-%s.erae", network, epoch, lastBlockHash.Hex()[2:10]) +} + +// Open accesses the era file. +func Open(path string) (*Era, error) { + f, err := os.Open(path) + if err != nil { + return nil, err + } + e := &Era{f: f, s: e2store.NewReader(f)} + if err := e.loadIndex(); err != nil { + f.Close() + return nil, err + } + return e, nil +} + +// Close closes the era file safely. +func (e *Era) Close() error { + if e.f == nil { + return nil + } + err := e.f.Close() + e.f = nil + return err +} + +// From returns an Era backed by f. +func From(f era.ReadAtSeekCloser) (era.Era, error) { + e := &Era{f: f, s: e2store.NewReader(f)} + if err := e.loadIndex(); err != nil { + f.Close() + return nil, err + } + return e, nil +} + +// Start retrieves the starting block number. +func (e *Era) Start() uint64 { + return e.m.start +} + +// Count retrieves the count of blocks present. +func (e *Era) Count() uint64 { + return e.m.count +} + +// Iterator returns an iterator over the era file. +func (e *Era) Iterator() (era.Iterator, error) { + return NewIterator(e) +} + +// GetBlockByNumber retrieves the block if present within the era file. +func (e *Era) GetBlockByNumber(blockNum uint64) (*types.Block, error) { + h, err := e.GetHeader(blockNum) + if err != nil { + return nil, err + } + b, err := e.GetBody(blockNum) + if err != nil { + return nil, err + } + return types.NewBlockWithHeader(h).WithBody(*b), nil +} + +// GetHeader retrieves the header from the era file through the cached offset table. +func (e *Era) GetHeader(num uint64) (*types.Header, error) { + off, err := e.headerOff(num) + if err != nil { + return nil, err + } + + r, _, err := e.s.ReaderAt(era.TypeCompressedHeader, off) + if err != nil { + return nil, err + } + + r = snappy.NewReader(r) + var h types.Header + return &h, rlp.Decode(r, &h) +} + +// GetBody retrieves the body from the era file through cached offset table. +func (e *Era) GetBody(num uint64) (*types.Body, error) { + off, err := e.bodyOff(num) + if err != nil { + return nil, err + } + + r, _, err := e.s.ReaderAt(era.TypeCompressedBody, off) + if err != nil { + return nil, err + } + + r = snappy.NewReader(r) + var b types.Body + return &b, rlp.Decode(r, &b) +} + +// GetTD retrieves the td from the era file through cached offset table. +func (e *Era) GetTD(blockNum uint64) (*big.Int, error) { + off, err := e.tdOff(blockNum) + if err != nil { + return nil, err + } + r, _, err := e.s.ReaderAt(era.TypeTotalDifficulty, off) + if err != nil { + return nil, err + } + buf, _ := io.ReadAll(r) + slices.Reverse(buf) + td := new(big.Int).SetBytes(buf) + return td, nil +} + +// GetRawBodyByNumber returns the RLP-encoded body for the given block number. +func (e *Era) GetRawBodyByNumber(blockNum uint64) ([]byte, error) { + off, err := e.bodyOff(blockNum) + if err != nil { + return nil, err + } + r, _, err := e.s.ReaderAt(era.TypeCompressedBody, off) + if err != nil { + return nil, err + } + r = snappy.NewReader(r) + return io.ReadAll(r) +} + +// GetRawReceiptsByNumber returns the RLP-encoded receipts for the given block number. +func (e *Era) GetRawReceiptsByNumber(blockNum uint64) ([]byte, error) { + off, err := e.receiptOff(blockNum) + if err != nil { + return nil, err + } + r, _, err := e.s.ReaderAt(era.TypeCompressedSlimReceipts, off) + if err != nil { + return nil, err + } + r = snappy.NewReader(r) + return io.ReadAll(r) +} + +// InitialTD returns initial total difficulty before the difficulty of the +// first block of the Era is applied. Returns an error if TD is not available +// (e.g., post-merge epoch). +func (e *Era) InitialTD() (*big.Int, error) { + // Check if TD component exists. + if int(td) >= int(e.m.components) { + return nil, fmt.Errorf("total difficulty not available in this epoch") + } + + // Get first header to read its difficulty. + header, err := e.GetHeader(e.m.start) + if err != nil { + return nil, fmt.Errorf("read first header: %w", err) + } + + // Get TD after first block using the index. + firstTD, err := e.GetTD(e.m.start) + if err != nil { + return nil, fmt.Errorf("read first TD: %w", err) + } + + // Initial TD = TD[0] - Difficulty[0] + return new(big.Int).Sub(firstTD, header.Difficulty), nil +} + +// Accumulator reads the accumulator entry in the EraE file if it exists. +// Note that one premerge erae files will contain an accumulator entry. +func (e *Era) Accumulator() (common.Hash, error) { + entry, err := e.s.Find(era.TypeAccumulator) + if err != nil { + return common.Hash{}, err + } + return common.BytesToHash(entry.Value), nil +} + +// loadIndex loads in the index table containing all offsets and caches it. +func (e *Era) loadIndex() error { + var err error + e.m.length, err = e.f.Seek(0, io.SeekEnd) + if err != nil { + return err + } + + b := make([]byte, 16) + if _, err = e.f.ReadAt(b, e.m.length-16); err != nil { + return err + } + e.m.components = binary.LittleEndian.Uint64(b[0:8]) + e.m.count = binary.LittleEndian.Uint64(b[8:16]) + + payloadlen := 8 + 8*e.m.count*e.m.components + 16 // 8 for start block, 8 per property per block, 16 for the number of properties and the number of blocks + tlvstart := e.m.length - int64(payloadlen) - 8 + _, err = e.f.ReadAt(b[:8], tlvstart+8) + if err != nil { + return err + } + + e.m.start = binary.LittleEndian.Uint64(b[:8]) + return nil +} + +// headerOff, bodyOff, receiptOff, and tdOff return the offsets of the respective components for a given block number. +func (e *Era) headerOff(num uint64) (int64, error) { return e.indexOffset(num, header) } +func (e *Era) bodyOff(num uint64) (int64, error) { return e.indexOffset(num, body) } +func (e *Era) receiptOff(num uint64) (int64, error) { return e.indexOffset(num, receipts) } +func (e *Era) tdOff(num uint64) (int64, error) { return e.indexOffset(num, td) } + +// indexOffset calculates offset to a certain component for a block number within a file. +func (e *Era) indexOffset(n uint64, component componentType) (int64, error) { + if n < e.m.start || n >= e.m.start+e.m.count { + return 0, fmt.Errorf("block %d out of range [%d,%d)", n, e.m.start, e.m.start+e.m.count) + } + if int(component) >= int(e.m.components) { + return 0, fmt.Errorf("component %d not present", component) + } + + payloadlen := 8 + 8*e.m.count*e.m.components + 16 // 8 for start block, 8 per property per block, 16 for the number of properties and the number of blocks + indstart := e.m.length - int64(payloadlen) - 8 + + rec := (n-e.m.start)*e.m.components + uint64(component) + pos := indstart + 8 + 8 + int64(rec*8) + + var buf [8]byte + if _, err := e.f.ReadAt(buf[:], pos); err != nil { + return 0, err + } + rel := binary.LittleEndian.Uint64(buf[:]) + return int64(rel) + indstart, nil +} + +// metadata contains the information about the era file that is written into the file. +type metadata struct { + start uint64 // start block number + count uint64 // number of blocks in the era + components uint64 // number of properties + length int64 // length of the file in bytes +} + +// componentType represents the integer form of a specific type that can be present in the era file. +type componentType int + +// header, body, receipts, td, and proof are the different types of components that can be present in the era file. +const ( + header componentType = iota + body + receipts + td + proof +) diff --git a/internal/era/builder.go b/internal/era/onedb/builder.go similarity index 84% rename from internal/era/builder.go rename to internal/era/onedb/builder.go index 975561564c..6497bf4f60 100644 --- a/internal/era/builder.go +++ b/internal/era/onedb/builder.go @@ -14,7 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -package era +package onedb import ( "bytes" @@ -26,6 +26,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/internal/era" "github.com/ethereum/go-ethereum/internal/era/e2store" "github.com/ethereum/go-ethereum/rlp" "github.com/golang/snappy" @@ -72,20 +73,22 @@ import ( // Due to the accumulator size limit of 8192, the maximum number of blocks in // an Era1 batch is also 8192. type Builder struct { - w *e2store.Writer - startNum *uint64 - startTd *big.Int - indexes []uint64 - hashes []common.Hash - tds []*big.Int - written int + w *e2store.Writer + startNum *uint64 + startTd *big.Int + indexes []uint64 + hashes []common.Hash + tds []*big.Int + accumulator *common.Hash // accumulator root, set by Finalize + + written int buf *bytes.Buffer snappy *snappy.Writer } // NewBuilder returns a new Builder instance. -func NewBuilder(w io.Writer) *Builder { +func NewBuilder(w io.Writer) era.Builder { buf := bytes.NewBuffer(nil) return &Builder{ w: e2store.NewWriter(w), @@ -117,7 +120,7 @@ func (b *Builder) Add(block *types.Block, receipts types.Receipts, td *big.Int) func (b *Builder) AddRLP(header, body, receipts []byte, number uint64, hash common.Hash, td, difficulty *big.Int) error { // Write Era1 version entry before first block. if b.startNum == nil { - n, err := b.w.Write(TypeVersion, nil) + n, err := b.w.Write(era.TypeVersion, nil) if err != nil { return err } @@ -126,8 +129,8 @@ func (b *Builder) AddRLP(header, body, receipts []byte, number uint64, hash comm b.startTd = new(big.Int).Sub(td, difficulty) b.written += n } - if len(b.indexes) >= MaxEra1Size { - return fmt.Errorf("exceeds maximum batch size of %d", MaxEra1Size) + if len(b.indexes) >= era.MaxSize { + return fmt.Errorf("exceeds maximum batch size of %d", era.MaxSize) } b.indexes = append(b.indexes, uint64(b.written)) @@ -135,19 +138,19 @@ func (b *Builder) AddRLP(header, body, receipts []byte, number uint64, hash comm b.tds = append(b.tds, td) // Write block data. - if err := b.snappyWrite(TypeCompressedHeader, header); err != nil { + if err := b.snappyWrite(era.TypeCompressedHeader, header); err != nil { return err } - if err := b.snappyWrite(TypeCompressedBody, body); err != nil { + if err := b.snappyWrite(era.TypeCompressedBody, body); err != nil { return err } - if err := b.snappyWrite(TypeCompressedReceipts, receipts); err != nil { + if err := b.snappyWrite(era.TypeCompressedReceipts, receipts); err != nil { return err } // Also write total difficulty, but don't snappy encode. - btd := bigToBytes32(td) - n, err := b.w.Write(TypeTotalDifficulty, btd[:]) + btd := era.BigToBytes32(td) + n, err := b.w.Write(era.TypeTotalDifficulty, btd[:]) b.written += n if err != nil { return err @@ -157,21 +160,24 @@ func (b *Builder) AddRLP(header, body, receipts []byte, number uint64, hash comm } // Finalize computes the accumulator and block index values, then writes the -// corresponding e2store entries. +// corresponding e2store entries. Era1 always has an accumulator, so this +// always returns a valid hash. func (b *Builder) Finalize() (common.Hash, error) { if b.startNum == nil { return common.Hash{}, errors.New("finalize called on empty builder") } // Compute accumulator root and write entry. - root, err := ComputeAccumulator(b.hashes, b.tds) + root, err := era.ComputeAccumulator(b.hashes, b.tds) if err != nil { return common.Hash{}, fmt.Errorf("error calculating accumulator root: %w", err) } - n, err := b.w.Write(TypeAccumulator, root[:]) + n, err := b.w.Write(era.TypeAccumulator, root[:]) b.written += n if err != nil { return common.Hash{}, fmt.Errorf("error writing accumulator: %w", err) } + b.accumulator = &root + // Get beginning of index entry to calculate block relative offset. base := int64(b.written) @@ -196,13 +202,19 @@ func (b *Builder) Finalize() (common.Hash, error) { binary.LittleEndian.PutUint64(index[8+count*8:], uint64(count)) // Finally, write the block index entry. - if _, err := b.w.Write(TypeBlockIndex, index); err != nil { + if _, err := b.w.Write(era.TypeBlockIndex, index); err != nil { return common.Hash{}, fmt.Errorf("unable to write block index: %w", err) } return root, nil } +// Accumulator returns the accumulator root after Finalize has been called. +// For Era1, this always returns a non-nil value since all blocks are pre-merge. +func (b *Builder) Accumulator() *common.Hash { + return b.accumulator +} + // snappyWrite is a small helper to take care snappy encoding and writing an e2store entry. func (b *Builder) snappyWrite(typ uint16, in []byte) error { var ( diff --git a/internal/era/era_test.go b/internal/era/onedb/builder_test.go similarity index 95% rename from internal/era/era_test.go rename to internal/era/onedb/builder_test.go index 31fa0076a6..bc7a1d9e63 100644 --- a/internal/era/era_test.go +++ b/internal/era/onedb/builder_test.go @@ -14,7 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -package era +package onedb import ( "bytes" @@ -22,6 +22,7 @@ import ( "io" "math/big" "os" + "slices" "testing" "github.com/ethereum/go-ethereum/common" @@ -82,7 +83,11 @@ func TestEra1Builder(t *testing.T) { t.Fatalf("failed to open era: %v", err) } defer e.Close() - it, err := NewRawIterator(e) + eraPtr, ok := e.(*Era) + if !ok { + t.Fatalf("failed to assert *Era type") + } + it, err := NewRawIterator(eraPtr) if err != nil { t.Fatalf("failed to make iterator: %s", err) } @@ -119,7 +124,7 @@ func TestEra1Builder(t *testing.T) { if !bytes.Equal(rawReceipts, chain.receipts[i]) { t.Fatalf("mismatched receipts: want %s, got %s", chain.receipts[i], rawReceipts) } - receipts, err := getReceiptsByNumber(e, i) + receipts, err := getReceiptsByNumber(eraPtr, i) if err != nil { t.Fatalf("error reading receipts: %v", err) } @@ -136,7 +141,8 @@ func TestEra1Builder(t *testing.T) { if err != nil { t.Fatalf("error reading td: %v", err) } - td := new(big.Int).SetBytes(reverseOrder(rawTd)) + slices.Reverse(rawTd) + td := new(big.Int).SetBytes(rawTd) if td.Cmp(chain.tds[i]) != 0 { t.Fatalf("mismatched tds: want %s, got %s", chain.tds[i], td) } diff --git a/internal/era/iterator.go b/internal/era/onedb/iterator.go similarity index 89% rename from internal/era/iterator.go rename to internal/era/onedb/iterator.go index 3c4f82d850..b80fbabbc5 100644 --- a/internal/era/iterator.go +++ b/internal/era/onedb/iterator.go @@ -14,14 +14,16 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -package era +package onedb import ( "errors" "io" "math/big" + "slices" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/internal/era" "github.com/ethereum/go-ethereum/rlp" ) @@ -32,8 +34,8 @@ type Iterator struct { // NewIterator returns a new Iterator instance. Next must be immediately // called on new iterators to load the first item. -func NewIterator(e *Era) (*Iterator, error) { - inner, err := NewRawIterator(e) +func NewIterator(e era.Era) (era.Iterator, error) { + inner, err := NewRawIterator(e.(*Era)) if err != nil { return nil, err } @@ -107,7 +109,8 @@ func (it *Iterator) TotalDifficulty() (*big.Int, error) { if err != nil { return nil, err } - return new(big.Int).SetBytes(reverseOrder(td)), nil + slices.Reverse(td) + return new(big.Int).SetBytes(td), nil } // RawIterator reads an RLP-encode Era1 entries. @@ -151,22 +154,22 @@ func (it *RawIterator) Next() bool { return false } var n int64 - if it.Header, n, it.err = newSnappyReader(it.e.s, TypeCompressedHeader, off); it.err != nil { + if it.Header, n, it.err = newSnappyReader(it.e.s, era.TypeCompressedHeader, off); it.err != nil { it.clear() return true } off += n - if it.Body, n, it.err = newSnappyReader(it.e.s, TypeCompressedBody, off); it.err != nil { + if it.Body, n, it.err = newSnappyReader(it.e.s, era.TypeCompressedBody, off); it.err != nil { it.clear() return true } off += n - if it.Receipts, n, it.err = newSnappyReader(it.e.s, TypeCompressedReceipts, off); it.err != nil { + if it.Receipts, n, it.err = newSnappyReader(it.e.s, era.TypeCompressedReceipts, off); it.err != nil { it.clear() return true } off += n - if it.TotalDifficulty, _, it.err = it.e.s.ReaderAt(TypeTotalDifficulty, off); it.err != nil { + if it.TotalDifficulty, _, it.err = it.e.s.ReaderAt(era.TypeTotalDifficulty, off); it.err != nil { it.clear() return true } diff --git a/internal/era/onedb/reader.go b/internal/era/onedb/reader.go new file mode 100644 index 0000000000..df93ca8211 --- /dev/null +++ b/internal/era/onedb/reader.go @@ -0,0 +1,279 @@ +// Copyright 2025 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package onedb + +import ( + "encoding/binary" + "fmt" + "io" + "math/big" + "os" + "slices" + "sync" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/internal/era" + "github.com/ethereum/go-ethereum/internal/era/e2store" + "github.com/ethereum/go-ethereum/rlp" + "github.com/golang/snappy" +) + +// Filename returns a recognizable Era1-formatted file name for the specified +// epoch and network. +func Filename(network string, epoch int, root common.Hash) string { + return fmt.Sprintf("%s-%05d-%s.era1", network, epoch, root.Hex()[2:10]) +} + +type ReadAtSeekCloser interface { + io.ReaderAt + io.Seeker + io.Closer +} + +// Era reads and Era1 file. +type Era struct { + f ReadAtSeekCloser // backing era1 file + s *e2store.Reader // e2store reader over f + m metadata // start, count, length info + mu *sync.Mutex // lock for buf + buf [8]byte // buffer reading entry offsets +} + +// From returns an Era backed by f. +func From(f era.ReadAtSeekCloser) (era.Era, error) { + m, err := readMetadata(f) + if err != nil { + return nil, err + } + return &Era{ + f: f, + s: e2store.NewReader(f), + m: m, + mu: new(sync.Mutex), + }, nil +} + +// Open returns an Era backed by the given filename. +func Open(filename string) (era.Era, error) { + f, err := os.Open(filename) + if err != nil { + return nil, err + } + return From(f) +} + +func (e *Era) Close() error { + return e.f.Close() +} + +// Iterator returns an iterator over the era file. +func (e *Era) Iterator() (era.Iterator, error) { + return NewIterator(e) +} + +// GetBlockByNumber returns the block for the given block number. +func (e *Era) GetBlockByNumber(num uint64) (*types.Block, error) { + if e.m.start > num || e.m.start+e.m.count <= num { + return nil, fmt.Errorf("out-of-bounds: %d not in [%d, %d)", num, e.m.start, e.m.start+e.m.count) + } + off, err := e.readOffset(num) + if err != nil { + return nil, err + } + r, n, err := newSnappyReader(e.s, era.TypeCompressedHeader, off) + if err != nil { + return nil, err + } + var header types.Header + if err := rlp.Decode(r, &header); err != nil { + return nil, err + } + off += n + r, _, err = newSnappyReader(e.s, era.TypeCompressedBody, off) + if err != nil { + return nil, err + } + var body types.Body + if err := rlp.Decode(r, &body); err != nil { + return nil, err + } + return types.NewBlockWithHeader(&header).WithBody(body), nil +} + +// GetRawBodyByNumber returns the RLP-encoded body for the given block number. +func (e *Era) GetRawBodyByNumber(num uint64) ([]byte, error) { + if e.m.start > num || e.m.start+e.m.count <= num { + return nil, fmt.Errorf("out-of-bounds: %d not in [%d, %d)", num, e.m.start, e.m.start+e.m.count) + } + off, err := e.readOffset(num) + if err != nil { + return nil, err + } + off, err = e.s.SkipN(off, 1) + if err != nil { + return nil, err + } + r, _, err := newSnappyReader(e.s, era.TypeCompressedBody, off) + if err != nil { + return nil, err + } + return io.ReadAll(r) +} + +// GetRawReceiptsByNumber returns the RLP-encoded receipts for the given block number. +func (e *Era) GetRawReceiptsByNumber(num uint64) ([]byte, error) { + if e.m.start > num || e.m.start+e.m.count <= num { + return nil, fmt.Errorf("out-of-bounds: %d not in [%d, %d)", num, e.m.start, e.m.start+e.m.count) + } + off, err := e.readOffset(num) + if err != nil { + return nil, err + } + + // Skip over header and body. + off, err = e.s.SkipN(off, 2) + if err != nil { + return nil, err + } + + r, _, err := newSnappyReader(e.s, era.TypeCompressedReceipts, off) + if err != nil { + return nil, err + } + return io.ReadAll(r) +} + +// Accumulator reads the accumulator entry in the Era1 file. +func (e *Era) Accumulator() (common.Hash, error) { + entry, err := e.s.Find(era.TypeAccumulator) + if err != nil { + return common.Hash{}, err + } + return common.BytesToHash(entry.Value), nil +} + +// InitialTD returns initial total difficulty before the difficulty of the +// first block of the Era1 is applied. +func (e *Era) InitialTD() (*big.Int, error) { + var ( + r io.Reader + header types.Header + rawTd []byte + n int64 + off int64 + err error + ) + + // Read first header. + if off, err = e.readOffset(e.m.start); err != nil { + return nil, err + } + if r, n, err = newSnappyReader(e.s, era.TypeCompressedHeader, off); err != nil { + return nil, err + } + if err := rlp.Decode(r, &header); err != nil { + return nil, err + } + off += n + + // Skip over header and body. + off, err = e.s.SkipN(off, 2) + if err != nil { + return nil, err + } + + // Read total difficulty after first block. + if r, _, err = e.s.ReaderAt(era.TypeTotalDifficulty, off); err != nil { + return nil, err + } + rawTd, err = io.ReadAll(r) + if err != nil { + return nil, err + } + slices.Reverse(rawTd) + td := new(big.Int).SetBytes(rawTd) + return td.Sub(td, header.Difficulty), nil +} + +// Start returns the listed start block. +func (e *Era) Start() uint64 { + return e.m.start +} + +// Count returns the total number of blocks in the Era1. +func (e *Era) Count() uint64 { + return e.m.count +} + +// readOffset reads a specific block's offset from the block index. The value n +// is the absolute block number desired. +func (e *Era) readOffset(n uint64) (int64, error) { + var ( + blockIndexRecordOffset = e.m.length - 24 - int64(e.m.count)*8 // skips start, count, and header + firstIndex = blockIndexRecordOffset + 16 // first index after header / start-num + indexOffset = int64(n-e.m.start) * 8 // desired index * size of indexes + offOffset = firstIndex + indexOffset // offset of block offset + ) + e.mu.Lock() + defer e.mu.Unlock() + clear(e.buf[:]) + if _, err := e.f.ReadAt(e.buf[:], offOffset); err != nil { + return 0, err + } + // Since the block offset is relative from the start of the block index record + // we need to add the record offset to it's offset to get the block's absolute + // offset. + return blockIndexRecordOffset + int64(binary.LittleEndian.Uint64(e.buf[:])), nil +} + +// newSnappyReader returns a snappy.Reader for the e2store entry value at off. +func newSnappyReader(e *e2store.Reader, expectedType uint16, off int64) (io.Reader, int64, error) { + r, n, err := e.ReaderAt(expectedType, off) + if err != nil { + return nil, 0, err + } + return snappy.NewReader(r), int64(n), err +} + +// metadata wraps the metadata in the block index. +type metadata struct { + start uint64 + count uint64 + length int64 +} + +// readMetadata reads the metadata stored in an Era1 file's block index. +func readMetadata(f ReadAtSeekCloser) (m metadata, err error) { + // Determine length of reader. + if m.length, err = f.Seek(0, io.SeekEnd); err != nil { + return + } + b := make([]byte, 16) + // Read count. It's the last 8 bytes of the file. + if _, err = f.ReadAt(b[:8], m.length-8); err != nil { + return + } + m.count = binary.LittleEndian.Uint64(b) + // Read start. It's at the offset -sizeof(m.count) - + // count*sizeof(indexEntry) - sizeof(m.start) + if _, err = f.ReadAt(b[8:], m.length-16-int64(m.count*8)); err != nil { + return + } + m.start = binary.LittleEndian.Uint64(b[8:]) + return +} diff --git a/internal/era/proof.go b/internal/era/proof.go new file mode 100644 index 0000000000..464d9e6fe5 --- /dev/null +++ b/internal/era/proof.go @@ -0,0 +1,36 @@ +// Copyright 2025 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . +package era + +import ( + "io" + + "github.com/ethereum/go-ethereum/rlp" +) + +type ProofVariant uint16 + +const ( + ProofNone ProofVariant = iota +) + +// Proof is the interface for all block proof types in the package. +// It's a stub for later integration into Era. +type Proof interface { + EncodeRLP(w io.Writer) error + DecodeRLP(s *rlp.Stream) error + Variant() ProofVariant +} From 32a35bfcd3fc9d8016cf8f7e5cd68157a0b621bc Mon Sep 17 00:00:00 2001 From: vickkkkkyy Date: Tue, 10 Feb 2026 10:01:01 +0800 Subject: [PATCH 017/161] cmd/geth: fix wrong flag names in influxdb metrics error messages (#33804) --- cmd/geth/config.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/geth/config.go b/cmd/geth/config.go index 87627467d2..a420a3e40d 100644 --- a/cmd/geth/config.go +++ b/cmd/geth/config.go @@ -398,9 +398,9 @@ func applyMetricConfig(ctx *cli.Context, cfg *gethConfig) { ctx.IsSet(utils.MetricsInfluxDBBucketFlag.Name) if enableExport && v2FlagIsSet { - utils.Fatalf("Flags --influxdb.metrics.organization, --influxdb.metrics.token, --influxdb.metrics.bucket are only available for influxdb-v2") + utils.Fatalf("Flags --%s, --%s, --%s are only available for influxdb-v2", utils.MetricsInfluxDBOrganizationFlag.Name, utils.MetricsInfluxDBTokenFlag.Name, utils.MetricsInfluxDBBucketFlag.Name) } else if enableExportV2 && v1FlagIsSet { - utils.Fatalf("Flags --influxdb.metrics.username, --influxdb.metrics.password are only available for influxdb-v1") + utils.Fatalf("Flags --%s, --%s are only available for influxdb-v1", utils.MetricsInfluxDBUsernameFlag.Name, utils.MetricsInfluxDBPasswordFlag.Name) } } } From 7faa676b031d2823ea572dda41afc9f084616626 Mon Sep 17 00:00:00 2001 From: Galoretka Date: Tue, 10 Feb 2026 04:10:56 +0200 Subject: [PATCH 018/161] core/rawdb: close directory fd on Readdirnames error in cleanup (#33798) --- core/rawdb/freezer_resettable.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/core/rawdb/freezer_resettable.go b/core/rawdb/freezer_resettable.go index f531e668c3..5494a648c8 100644 --- a/core/rawdb/freezer_resettable.go +++ b/core/rawdb/freezer_resettable.go @@ -221,13 +221,12 @@ func cleanup(path string) error { if err != nil { return err } + defer dir.Close() + names, err := dir.Readdirnames(0) if err != nil { return err } - if cerr := dir.Close(); cerr != nil { - return cerr - } for _, name := range names { if name == filepath.Base(path)+tmpSuffix { log.Info("Removed leftover freezer directory", "name", name) From bbb1ab8d16f2cf83fdc1bd63acb6af87dc52ef7f Mon Sep 17 00:00:00 2001 From: Jonny Rhea <5555162+jrhea@users.noreply.github.com> Date: Mon, 9 Feb 2026 20:11:26 -0600 Subject: [PATCH 019/161] core/vm: 8024 tests should enforce explicit errors (#33787) This PR makes `TestEIP8024_Execution` verify explicit error types (e.g., `ErrStackUnderflow` vs `ErrInvalidOpCode`) rather than accepting any error. It also fails fast on unexpected opcodes in the mini-interpreter to avoid false positives from missing opcode handling. --- core/vm/instructions_test.go | 109 ++++++++++++++++++++++++----------- 1 file changed, 75 insertions(+), 34 deletions(-) diff --git a/core/vm/instructions_test.go b/core/vm/instructions_test.go index 88290a07e6..3f776146f1 100644 --- a/core/vm/instructions_test.go +++ b/core/vm/instructions_test.go @@ -19,6 +19,7 @@ package vm import ( "bytes" "encoding/json" + "errors" "fmt" "math/big" "os" @@ -1013,10 +1014,11 @@ func TestEIP8024_Execution(t *testing.T) { evm := NewEVM(BlockContext{}, nil, params.TestChainConfig, Config{}) tests := []struct { - name string - codeHex string - wantErr bool - wantVals []uint64 + name string + codeHex string + wantErr error + wantOpcode OpCode + wantVals []uint64 }{ { name: "DUPN", @@ -1069,55 +1071,70 @@ func TestEIP8024_Execution(t *testing.T) { }, }, { - name: "INVALID_SWAPN_LOW", - codeHex: "e75b", - wantErr: true, + name: "INVALID_SWAPN_LOW", + codeHex: "e75b", + wantErr: &ErrInvalidOpCode{}, + wantOpcode: SWAPN, }, { name: "JUMP over INVALID_DUPN", codeHex: "600456e65b", - wantErr: false, + wantErr: nil, + }, + { + name: "UNDERFLOW_DUPN_1", + codeHex: "6000808080808080808080808080808080e600", + wantErr: &ErrStackUnderflow{}, + wantOpcode: DUPN, }, // Additional test cases { - name: "INVALID_DUPN_LOW", - codeHex: "e65b", - wantErr: true, + name: "INVALID_DUPN_LOW", + codeHex: "e65b", + wantErr: &ErrInvalidOpCode{}, + wantOpcode: DUPN, }, { - name: "INVALID_EXCHANGE_LOW", - codeHex: "e850", - wantErr: true, + name: "INVALID_EXCHANGE_LOW", + codeHex: "e850", + wantErr: &ErrInvalidOpCode{}, + wantOpcode: EXCHANGE, }, { - name: "INVALID_DUPN_HIGH", - codeHex: "e67f", - wantErr: true, + name: "INVALID_DUPN_HIGH", + codeHex: "e67f", + wantErr: &ErrInvalidOpCode{}, + wantOpcode: DUPN, }, { - name: "INVALID_SWAPN_HIGH", - codeHex: "e77f", - wantErr: true, + name: "INVALID_SWAPN_HIGH", + codeHex: "e77f", + wantErr: &ErrInvalidOpCode{}, + wantOpcode: SWAPN, }, { - name: "INVALID_EXCHANGE_HIGH", - codeHex: "e87f", - wantErr: true, + name: "INVALID_EXCHANGE_HIGH", + codeHex: "e87f", + wantErr: &ErrInvalidOpCode{}, + wantOpcode: EXCHANGE, }, { - name: "UNDERFLOW_DUPN", - codeHex: "5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5fe600", // (n=17, need 17 items, have 16) - wantErr: true, + name: "UNDERFLOW_DUPN_2", + codeHex: "5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5fe600", // (n=17, need 17 items, have 16) + wantErr: &ErrStackUnderflow{}, + wantOpcode: DUPN, }, { - name: "UNDERFLOW_SWAPN", - codeHex: "5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5fe700", // (n=17, need 18 items, have 17) - wantErr: true, + name: "UNDERFLOW_SWAPN", + codeHex: "5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5fe700", // (n=17, need 18 items, have 17) + wantErr: &ErrStackUnderflow{}, + wantOpcode: SWAPN, }, { - name: "UNDERFLOW_EXCHANGE", - codeHex: "60016002e801", // (n,m)=(1,2), need 3 items, have 2 - wantErr: true, + name: "UNDERFLOW_EXCHANGE", + codeHex: "60016002e801", // (n,m)=(1,2), need 3 items, have 2 + wantErr: &ErrStackUnderflow{}, + wantOpcode: EXCHANGE, }, { name: "PC_INCREMENT", @@ -1133,6 +1150,7 @@ func TestEIP8024_Execution(t *testing.T) { pc := uint64(0) scope := &ScopeContext{Stack: stack, Contract: &Contract{Code: code}} var err error + var errOp OpCode for pc < uint64(len(code)) && err == nil { op := code[pc] switch OpCode(op) { @@ -1158,14 +1176,37 @@ func TestEIP8024_Execution(t *testing.T) { case EXCHANGE: _, err = opExchange(&pc, evm, scope) default: - err = &ErrInvalidOpCode{opcode: OpCode(op)} + t.Fatalf("unexpected opcode %s at pc=%d", OpCode(op), pc) + } + if err != nil { + errOp = OpCode(op) } pc++ } - if tc.wantErr { + if tc.wantErr != nil { + // Fail because we wanted an error, but didn't get one. if err == nil { t.Fatalf("expected error, got nil") } + // Fail if the wrong opcode threw an error. + if errOp != tc.wantOpcode { + t.Fatalf("expected error from opcode %s, got %s", tc.wantOpcode, errOp) + } + // Fail if we don't get the error we expect. + switch tc.wantErr.(type) { + case *ErrInvalidOpCode: + var want *ErrInvalidOpCode + if !errors.As(err, &want) { + t.Fatalf("expected ErrInvalidOpCode, got %v", err) + } + case *ErrStackUnderflow: + var want *ErrStackUnderflow + if !errors.As(err, &want) { + t.Fatalf("expected ErrStackUnderflow, got %v", err) + } + default: + t.Fatalf("unsupported wantErr type %T", tc.wantErr) + } return } if err != nil { From 986d115da797e8b46ea6fd58af42092bb8b8f981 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felf=C3=B6ldi=20Zsolt?= Date: Tue, 10 Feb 2026 14:15:18 +0100 Subject: [PATCH 020/161] eth: fix targetView==nil case (#33810) This PR fixes a panic in a corner case situation when a `ChainEvent` is received by `eth.Ethereum.updateFilterMapsHeads()` but the given chain section does not exist in `BlockChain` any more. This can happen during chain rewind because chain events are processed asynchronously. Ignoring the event in this case is ok, the final event will point to the final rewound head and the indexer will be updated. Note that similar issues will not happen once we transition to https://github.com/ethereum/go-ethereum/pull/32292 and the new indexer built on top of this. Until then, the current fix should be fine. --- eth/backend.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/eth/backend.go b/eth/backend.go index aed1542aeb..eaa68b501c 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -495,6 +495,9 @@ func (s *Ethereum) updateFilterMapsHeads() { if head == nil || newHead.Hash() != head.Hash() { head = newHead chainView := s.newChainView(head) + if chainView == nil { + return + } historyCutoff, _ := s.blockchain.HistoryPruningCutoff() var finalBlock uint64 if fb := s.blockchain.CurrentFinalBlock(); fb != nil { From e2d21d0e9cc6cd25e1066b79eedf8ad9934fdc28 Mon Sep 17 00:00:00 2001 From: vickkkkkyy Date: Tue, 10 Feb 2026 21:48:23 +0800 Subject: [PATCH 021/161] ethdb/pebble: fix CompactionDebtConcurrency comment (#33805) --- ethdb/pebble/pebble.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ethdb/pebble/pebble.go b/ethdb/pebble/pebble.go index 395daa6cf4..6b549f40d9 100644 --- a/ethdb/pebble/pebble.go +++ b/ethdb/pebble/pebble.go @@ -307,7 +307,7 @@ func New(file string, cache int, handles int, namespace string, readonly bool) ( // These two settings define the conditions under which compaction concurrency // is increased. Specifically, one additional compaction job will be enabled when: // - there is one more overlapping sub-level0; - // - there is an additional 512 MB of compaction debt; + // - there is an additional 256 MB of compaction debt; // // The maximum concurrency is still capped by MaxConcurrentCompactions, but with // these settings compactions can scale up more readily. From 4d4883731eeacc8247f1261cfc851c30ad8cae49 Mon Sep 17 00:00:00 2001 From: sashass1315 Date: Tue, 10 Feb 2026 16:05:39 +0200 Subject: [PATCH 022/161] trie: fix embedded node size validation (#33803) The `decodeRef` function used `size > hashLen` to reject oversized embedded nodes, but this incorrectly allowed nodes of exactly 32 bytes through. The encoding side (hasher.go, stacktrie.go) consistently uses `len(enc) < 32` to decide whether to embed a node inline, meaning nodes of 32+ bytes are always hash-referenced. The error message itself already stated `want size < 32`, confirming the intended threshold. Changed `size > hashLen` to `size >= hashLen` in `decodeRef` to align the decoding validation with the encoding logic, the Yellow Paper spec, and the surrounding comments. --- trie/node.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/trie/node.go b/trie/node.go index 3f14f07d63..bff2d0516a 100644 --- a/trie/node.go +++ b/trie/node.go @@ -225,7 +225,7 @@ func decodeRef(buf []byte) (node, []byte, error) { case kind == rlp.List: // 'embedded' node reference. The encoding must be smaller // than a hash in order to be valid. - if size := len(buf) - len(rest); size > hashLen { + if size := len(buf) - len(rest); size >= hashLen { err := fmt.Errorf("oversized embedded node (size is %d bytes, want size < %d)", size, hashLen) return nil, buf, err } From 15a9e92bbd310eca6da2e0f49c34b2e503dfbc00 Mon Sep 17 00:00:00 2001 From: Ragnar Date: Tue, 10 Feb 2026 18:54:37 +0200 Subject: [PATCH 023/161] ethclient/gethclient: callTracer methods (#31510) Added methods `TraceCallWithCallTracer` and `TraceTransactionWithCallTracer`. Fixes #28182 --------- Co-authored-by: Sina Mahmoodi --- ethclient/gethclient/gen_callframe_json.go | 104 ++++++++++++++++++ ethclient/gethclient/gen_calllog_json.go | 61 +++++++++++ ethclient/gethclient/gethclient.go | 120 +++++++++++++++++++++ ethclient/gethclient/gethclient_test.go | 64 +++++++++++ 4 files changed, 349 insertions(+) create mode 100644 ethclient/gethclient/gen_callframe_json.go create mode 100644 ethclient/gethclient/gen_calllog_json.go diff --git a/ethclient/gethclient/gen_callframe_json.go b/ethclient/gethclient/gen_callframe_json.go new file mode 100644 index 0000000000..48df2790cc --- /dev/null +++ b/ethclient/gethclient/gen_callframe_json.go @@ -0,0 +1,104 @@ +// Code generated by github.com/fjl/gencodec. DO NOT EDIT. + +package gethclient + +import ( + "encoding/json" + "math/big" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" +) + +var _ = (*callFrameMarshaling)(nil) + +// MarshalJSON marshals as JSON. +func (c CallFrame) MarshalJSON() ([]byte, error) { + type CallFrame0 struct { + Type string `json:"type"` + From common.Address `json:"from"` + Gas hexutil.Uint64 `json:"gas"` + GasUsed hexutil.Uint64 `json:"gasUsed"` + To *common.Address `json:"to,omitempty"` + Input hexutil.Bytes `json:"input"` + Output hexutil.Bytes `json:"output,omitempty"` + Error string `json:"error,omitempty"` + RevertReason string `json:"revertReason,omitempty"` + Calls []CallFrame `json:"calls,omitempty"` + Logs []CallLog `json:"logs,omitempty"` + Value *hexutil.Big `json:"value,omitempty"` + } + var enc CallFrame0 + enc.Type = c.Type + enc.From = c.From + enc.Gas = hexutil.Uint64(c.Gas) + enc.GasUsed = hexutil.Uint64(c.GasUsed) + enc.To = c.To + enc.Input = c.Input + enc.Output = c.Output + enc.Error = c.Error + enc.RevertReason = c.RevertReason + enc.Calls = c.Calls + enc.Logs = c.Logs + enc.Value = (*hexutil.Big)(c.Value) + return json.Marshal(&enc) +} + +// UnmarshalJSON unmarshals from JSON. +func (c *CallFrame) UnmarshalJSON(input []byte) error { + type CallFrame0 struct { + Type *string `json:"type"` + From *common.Address `json:"from"` + Gas *hexutil.Uint64 `json:"gas"` + GasUsed *hexutil.Uint64 `json:"gasUsed"` + To *common.Address `json:"to,omitempty"` + Input *hexutil.Bytes `json:"input"` + Output *hexutil.Bytes `json:"output,omitempty"` + Error *string `json:"error,omitempty"` + RevertReason *string `json:"revertReason,omitempty"` + Calls []CallFrame `json:"calls,omitempty"` + Logs []CallLog `json:"logs,omitempty"` + Value *hexutil.Big `json:"value,omitempty"` + } + var dec CallFrame0 + if err := json.Unmarshal(input, &dec); err != nil { + return err + } + if dec.Type != nil { + c.Type = *dec.Type + } + if dec.From != nil { + c.From = *dec.From + } + if dec.Gas != nil { + c.Gas = uint64(*dec.Gas) + } + if dec.GasUsed != nil { + c.GasUsed = uint64(*dec.GasUsed) + } + if dec.To != nil { + c.To = dec.To + } + if dec.Input != nil { + c.Input = *dec.Input + } + if dec.Output != nil { + c.Output = *dec.Output + } + if dec.Error != nil { + c.Error = *dec.Error + } + if dec.RevertReason != nil { + c.RevertReason = *dec.RevertReason + } + if dec.Calls != nil { + c.Calls = dec.Calls + } + if dec.Logs != nil { + c.Logs = dec.Logs + } + if dec.Value != nil { + c.Value = (*big.Int)(dec.Value) + } + return nil +} diff --git a/ethclient/gethclient/gen_calllog_json.go b/ethclient/gethclient/gen_calllog_json.go new file mode 100644 index 0000000000..50e25d4bb3 --- /dev/null +++ b/ethclient/gethclient/gen_calllog_json.go @@ -0,0 +1,61 @@ +// Code generated by github.com/fjl/gencodec. DO NOT EDIT. + +package gethclient + +import ( + "encoding/json" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" +) + +var _ = (*callLogMarshaling)(nil) + +// MarshalJSON marshals as JSON. +func (c CallLog) MarshalJSON() ([]byte, error) { + type CallLog struct { + Address common.Address `json:"address"` + Topics []common.Hash `json:"topics"` + Data hexutil.Bytes `json:"data"` + Index hexutil.Uint `json:"index"` + Position hexutil.Uint `json:"position"` + } + var enc CallLog + enc.Address = c.Address + enc.Topics = c.Topics + enc.Data = c.Data + enc.Index = hexutil.Uint(c.Index) + enc.Position = hexutil.Uint(c.Position) + return json.Marshal(&enc) +} + +// UnmarshalJSON unmarshals from JSON. +func (c *CallLog) UnmarshalJSON(input []byte) error { + type CallLog struct { + Address *common.Address `json:"address"` + Topics []common.Hash `json:"topics"` + Data *hexutil.Bytes `json:"data"` + Index *hexutil.Uint `json:"index"` + Position *hexutil.Uint `json:"position"` + } + var dec CallLog + if err := json.Unmarshal(input, &dec); err != nil { + return err + } + if dec.Address != nil { + c.Address = *dec.Address + } + if dec.Topics != nil { + c.Topics = dec.Topics + } + if dec.Data != nil { + c.Data = *dec.Data + } + if dec.Index != nil { + c.Index = uint(*dec.Index) + } + if dec.Position != nil { + c.Position = uint(*dec.Position) + } + return nil +} diff --git a/ethclient/gethclient/gethclient.go b/ethclient/gethclient/gethclient.go index c2013bca2c..e677e2bb21 100644 --- a/ethclient/gethclient/gethclient.go +++ b/ethclient/gethclient/gethclient.go @@ -19,10 +19,12 @@ package gethclient import ( "context" + "encoding/json" "fmt" "math/big" "runtime" "runtime/debug" + "time" "github.com/ethereum/go-ethereum" "github.com/ethereum/go-ethereum/common" @@ -229,6 +231,124 @@ func (ec *Client) TraceBlock(ctx context.Context, hash common.Hash, config *trac return result, nil } +// CallTracerConfig configures the call tracer for +// TraceTransactionWithCallTracer and TraceCallWithCallTracer. +type CallTracerConfig struct { + // OnlyTopCall, when true, limits tracing to the main (top-level) call only. + OnlyTopCall bool + // WithLog, when true, includes log emissions in the trace output. + WithLog bool + // Timeout is the maximum duration the tracer may run. + // Zero means the server default (5s). + Timeout time.Duration +} + +//go:generate go run github.com/fjl/gencodec -type CallLog -field-override callLogMarshaling -out gen_calllog_json.go + +// CallLog represents a log emitted during a traced call. +type CallLog struct { + Address common.Address `json:"address"` + Topics []common.Hash `json:"topics"` + Data []byte `json:"data"` + Index uint `json:"index"` + Position uint `json:"position"` +} + +type callLogMarshaling struct { + Data hexutil.Bytes + Index hexutil.Uint + Position hexutil.Uint +} + +//go:generate go run github.com/fjl/gencodec -type CallFrame -field-override callFrameMarshaling -out gen_callframe_json.go + +// CallFrame contains the result of a call tracer run. +type CallFrame struct { + Type string `json:"type"` + From common.Address `json:"from"` + Gas uint64 `json:"gas"` + GasUsed uint64 `json:"gasUsed"` + To *common.Address `json:"to,omitempty"` + Input []byte `json:"input"` + Output []byte `json:"output,omitempty"` + Error string `json:"error,omitempty"` + RevertReason string `json:"revertReason,omitempty"` + Calls []CallFrame `json:"calls,omitempty"` + Logs []CallLog `json:"logs,omitempty"` + Value *big.Int `json:"value,omitempty"` +} + +type callFrameMarshaling struct { + Gas hexutil.Uint64 + GasUsed hexutil.Uint64 + Input hexutil.Bytes + Output hexutil.Bytes + Value *hexutil.Big +} + +// TraceTransactionWithCallTracer traces a transaction with the call tracer +// and returns a typed CallFrame. If config is nil, defaults are used. +func (ec *Client) TraceTransactionWithCallTracer(ctx context.Context, txHash common.Hash, config *CallTracerConfig) (*CallFrame, error) { + var result CallFrame + err := ec.c.CallContext(ctx, &result, "debug_traceTransaction", txHash, callTracerConfig(config)) + if err != nil { + return nil, err + } + return &result, nil +} + +// TraceCallWithCallTracer executes a call with the call tracer and returns +// a typed CallFrame. blockNrOrHash selects the block context for the call. +// overrides specifies state overrides (nil for none), blockOverrides specifies +// block header overrides (nil for none), and config configures the tracer +// (nil for defaults). +func (ec *Client) TraceCallWithCallTracer(ctx context.Context, msg ethereum.CallMsg, blockNrOrHash rpc.BlockNumberOrHash, overrides map[common.Address]OverrideAccount, blockOverrides *BlockOverrides, config *CallTracerConfig) (*CallFrame, error) { + var result CallFrame + err := ec.c.CallContext(ctx, &result, "debug_traceCall", toCallArg(msg), blockNrOrHash, callTraceCallConfig(config, overrides, blockOverrides)) + if err != nil { + return nil, err + } + return &result, nil +} + +// callTracerConfig converts a CallTracerConfig to the wire-format TraceConfig. +func callTracerConfig(config *CallTracerConfig) *tracers.TraceConfig { + tracer := "callTracer" + tc := &tracers.TraceConfig{Tracer: &tracer} + if config != nil { + if config.OnlyTopCall || config.WithLog { + cfg, _ := json.Marshal(struct { + OnlyTopCall bool `json:"onlyTopCall"` + WithLog bool `json:"withLog"` + }{config.OnlyTopCall, config.WithLog}) + tc.TracerConfig = cfg + } + if config.Timeout != 0 { + s := config.Timeout.String() + tc.Timeout = &s + } + } + return tc +} + +// callTraceCallConfig builds the wire-format TraceCallConfig for debug_traceCall, +// bundling tracer settings with optional state and block overrides. +func callTraceCallConfig(config *CallTracerConfig, overrides map[common.Address]OverrideAccount, blockOverrides *BlockOverrides) interface{} { + tc := callTracerConfig(config) + // debug_traceCall expects a single config object that includes both + // tracer settings and any state/block overrides. + type traceCallConfig struct { + *tracers.TraceConfig + StateOverrides map[common.Address]OverrideAccount `json:"stateOverrides,omitempty"` + BlockOverrides *BlockOverrides `json:"blockOverrides,omitempty"` + } + return &traceCallConfig{ + TraceConfig: tc, + StateOverrides: overrides, + BlockOverrides: blockOverrides, + } +} + func toBlockNumArg(number *big.Int) string { if number == nil { return "latest" diff --git a/ethclient/gethclient/gethclient_test.go b/ethclient/gethclient/gethclient_test.go index 0eed63cacf..4d8ccfcb6f 100644 --- a/ethclient/gethclient/gethclient_test.go +++ b/ethclient/gethclient/gethclient_test.go @@ -34,6 +34,7 @@ import ( "github.com/ethereum/go-ethereum/eth/ethconfig" "github.com/ethereum/go-ethereum/eth/filters" "github.com/ethereum/go-ethereum/eth/tracers" + _ "github.com/ethereum/go-ethereum/eth/tracers/native" "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/params" @@ -161,6 +162,12 @@ func TestGethClient(t *testing.T) { }, { "TestCallContractWithBlockOverrides", func(t *testing.T) { testCallContractWithBlockOverrides(t, client) }, + }, { + "TestTraceTransactionWithCallTracer", + func(t *testing.T) { testTraceTransactionWithCallTracer(t, client, txHashes) }, + }, { + "TestTraceCallWithCallTracer", + func(t *testing.T) { testTraceCallWithCallTracer(t, client) }, }, // The testaccesslist is a bit time-sensitive: the newTestBackend imports // one block. The `testAccessList` fails if the miner has not yet created a @@ -620,3 +627,60 @@ func testCallContractWithBlockOverrides(t *testing.T, client *rpc.Client) { t.Fatalf("unexpected result: %x", res) } } + +func testTraceTransactionWithCallTracer(t *testing.T, client *rpc.Client, txHashes []common.Hash) { + ec := New(client) + for _, txHash := range txHashes { + // With nil config (defaults). + result, err := ec.TraceTransactionWithCallTracer(context.Background(), txHash, nil) + if err != nil { + t.Fatalf("nil config: %v", err) + } + if result.Type != "CALL" { + t.Fatalf("unexpected type: %s", result.Type) + } + if result.From == (common.Address{}) { + t.Fatal("from is zero") + } + if result.Gas == 0 { + t.Fatal("gas is zero") + } + + // With explicit config. + result, err = ec.TraceTransactionWithCallTracer(context.Background(), txHash, + &CallTracerConfig{}, + ) + if err != nil { + t.Fatalf("explicit config: %v", err) + } + if result.Type != "CALL" { + t.Fatalf("unexpected type: %s", result.Type) + } + } +} + +func testTraceCallWithCallTracer(t *testing.T, client *rpc.Client) { + ec := New(client) + msg := ethereum.CallMsg{ + From: testAddr, + To: &common.Address{}, + Gas: 21000, + GasPrice: big.NewInt(1000000000), + Value: big.NewInt(1), + } + result, err := ec.TraceCallWithCallTracer(context.Background(), msg, + rpc.BlockNumberOrHashWithNumber(rpc.LatestBlockNumber), nil, nil, nil, + ) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if result.Type != "CALL" { + t.Fatalf("unexpected type: %s", result.Type) + } + if result.From == (common.Address{}) { + t.Fatal("from is zero") + } + if result.Gas == 0 { + t.Fatal("gas is zero") + } +} From 30656d714edaf4756729bad0672cde5790128a8f Mon Sep 17 00:00:00 2001 From: phrwlk Date: Wed, 11 Feb 2026 12:42:17 +0200 Subject: [PATCH 024/161] trie/bintrie: use correct key mapping in GetStorage and DeleteStorage (#33807) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GetStorage and DeleteStorage used GetBinaryTreeKey to compute the tree key, while UpdateStorage used GetBinaryTreeKeyStorageSlot. The latter applies storage slot remapping (header offset for slots <64, main storage prefix for the rest), so reads and deletes were targeting different tree locations than writes. Replace GetBinaryTreeKey with GetBinaryTreeKeyStorageSlot in both GetStorage and DeleteStorage to match UpdateStorage. Add a regression test that verifies the write→read→delete→read round-trip for main storage slots. --- trie/bintrie/trie.go | 4 +-- trie/bintrie/trie_test.go | 70 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 2 deletions(-) diff --git a/trie/bintrie/trie.go b/trie/bintrie/trie.go index 966d236c08..ecdd002331 100644 --- a/trie/bintrie/trie.go +++ b/trie/bintrie/trie.go @@ -236,7 +236,7 @@ func (t *BinaryTrie) GetAccount(addr common.Address) (*types.StateAccount, error // not be modified by the caller. If a node was not found in the database, a // trie.MissingNodeError is returned. func (t *BinaryTrie) GetStorage(addr common.Address, key []byte) ([]byte, error) { - return t.root.Get(GetBinaryTreeKey(addr, key), t.nodeResolver) + return t.root.Get(GetBinaryTreeKeyStorageSlot(addr, key), t.nodeResolver) } // UpdateAccount updates the account information for the given address. @@ -302,7 +302,7 @@ func (t *BinaryTrie) DeleteAccount(addr common.Address) error { // DeleteStorage removes any existing value for key from the trie. If a node was not // found in the database, a trie.MissingNodeError is returned. func (t *BinaryTrie) DeleteStorage(addr common.Address, key []byte) error { - k := GetBinaryTreeKey(addr, key) + k := GetBinaryTreeKeyStorageSlot(addr, key) var zero [HashSize]byte root, err := t.root.Insert(k, zero[:], t.nodeResolver, 0) if err != nil { diff --git a/trie/bintrie/trie_test.go b/trie/bintrie/trie_test.go index 050cc8d940..256fd218e2 100644 --- a/trie/bintrie/trie_test.go +++ b/trie/bintrie/trie_test.go @@ -22,7 +22,9 @@ import ( "testing" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/trie" + "github.com/holiman/uint256" ) var ( @@ -197,6 +199,74 @@ func TestMerkleizeMultipleEntries(t *testing.T) { } } +// TestStorageRoundTrip verifies that GetStorage and DeleteStorage use the same +// key mapping as UpdateStorage (GetBinaryTreeKeyStorageSlot). This is a regression +// test: previously GetStorage and DeleteStorage used GetBinaryTreeKey directly, +// which produced different tree keys and broke the read/delete path. +func TestStorageRoundTrip(t *testing.T) { + tracer := trie.NewPrevalueTracer() + tr := &BinaryTrie{ + root: NewBinaryNode(), + tracer: tracer, + } + addr := common.HexToAddress("0x1234567890abcdef1234567890abcdef12345678") + + // Create an account first so the root becomes an InternalNode, + // which is the realistic state when storage operations happen. + acc := &types.StateAccount{ + Nonce: 1, + Balance: uint256.NewInt(1000), + CodeHash: common.HexToHash("c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470").Bytes(), + } + if err := tr.UpdateAccount(addr, acc, 0); err != nil { + t.Fatalf("UpdateAccount error: %v", err) + } + + // Test main storage slots (key[31] >= 64 or key[:31] != 0). + // These produce a different stem than the account data, so after + // UpdateAccount + UpdateStorage the root is an InternalNode. + // Note: header slots (key[31] < 64, key[:31] == 0) share the same + // stem as account data and are covered by GetAccount/UpdateAccount path. + slots := []common.Hash{ + common.HexToHash("00000000000000000000000000000000000000000000000000000000000000FF"), // main storage (slot 255) + common.HexToHash("0100000000000000000000000000000000000000000000000000000000000001"), // main storage (non-zero prefix) + } + val := common.TrimLeftZeroes(common.HexToHash("00000000000000000000000000000000000000000000000000000000deadbeef").Bytes()) + + for _, slot := range slots { + // Write + if err := tr.UpdateStorage(addr, slot[:], val); err != nil { + t.Fatalf("UpdateStorage(%x) error: %v", slot, err) + } + // Read back + got, err := tr.GetStorage(addr, slot[:]) + if err != nil { + t.Fatalf("GetStorage(%x) error: %v", slot, err) + } + if len(got) == 0 { + t.Fatalf("GetStorage(%x) returned empty, expected value", slot) + } + // Verify value (right-justified in 32 bytes) + var expected [HashSize]byte + copy(expected[HashSize-len(val):], val) + if !bytes.Equal(got, expected[:]) { + t.Fatalf("GetStorage(%x) = %x, want %x", slot, got, expected) + } + // Delete + if err := tr.DeleteStorage(addr, slot[:]); err != nil { + t.Fatalf("DeleteStorage(%x) error: %v", slot, err) + } + // Verify deleted (should read as zero, not the old value) + got, err = tr.GetStorage(addr, slot[:]) + if err != nil { + t.Fatalf("GetStorage(%x) after delete error: %v", slot, err) + } + if len(got) > 0 && !bytes.Equal(got, zero[:]) { + t.Fatalf("GetStorage(%x) after delete = %x, expected zero", slot, got) + } + } +} + func TestBinaryTrieWitness(t *testing.T) { tracer := trie.NewPrevalueTracer() From 341907cdb8c30e85dcb6458d3fdbd9445ce8a8a4 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Wed, 11 Feb 2026 14:50:24 +0100 Subject: [PATCH 025/161] rlp: return Iterator as non-pointer (#33818) Most uses of the iterator are like this: it, _ := rlp.NewListIterator(data) for it.Next() { do(it.Value()) } This doesn't require the iterator to be a pointer and it's better to have it stack-allocated. AFAIK the compiler cannot prove it is OK to stack-allocate when it is returned as a pointer because the methods of `Iterator` use pointer receiver and also mutate the object. The iterator type was not exported until very recently, so I think it is still OK to change this API. --- rlp/iterator.go | 12 ++++++------ rlp/raw.go | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/rlp/iterator.go b/rlp/iterator.go index a67e6651f5..f1f214c4bc 100644 --- a/rlp/iterator.go +++ b/rlp/iterator.go @@ -25,20 +25,20 @@ type Iterator struct { } // NewListIterator creates an iterator for the (list) represented by data. -func NewListIterator(data RawValue) (*Iterator, error) { +func NewListIterator(data RawValue) (Iterator, error) { k, t, c, err := readKind(data) if err != nil { - return nil, err + return Iterator{}, err } if k != List { - return nil, ErrExpectedList + return Iterator{}, ErrExpectedList } - it := &Iterator{data: data[t : t+c], offset: int(t)} + it := newIterator(data[t:t+c], int(t)) return it, nil } -func newIterator(data []byte) *Iterator { - return &Iterator{data: data} +func newIterator(data []byte, initialOffset int) Iterator { + return Iterator{data: data, offset: initialOffset} } // Next forwards the iterator one step. diff --git a/rlp/raw.go b/rlp/raw.go index 876a503d70..8d171ce0f6 100644 --- a/rlp/raw.go +++ b/rlp/raw.go @@ -122,8 +122,8 @@ func (r *RawList[T]) Empty() bool { // ContentIterator returns an iterator over the content of the list. // Note the offsets returned by iterator.Offset are relative to the // Content bytes of the list. -func (r *RawList[T]) ContentIterator() *Iterator { - return newIterator(r.Content()) +func (r *RawList[T]) ContentIterator() Iterator { + return newIterator(r.Content(), 0) } // Append adds an item to the end of the list. From 3011d83e6fd24872c25dbf9f85a31cd4a05bd72f Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Wed, 11 Feb 2026 14:50:39 +0100 Subject: [PATCH 026/161] cmd/evm/internal/t8ntool, core/rawdb: fix RLP iterator error handling (#33820) This fixes two cases where `Iterator.Err()` was misused. The method will only return an error after `Next()` has returned false, so it makes no sense to check for the error within the loop itself. --- cmd/evm/internal/t8ntool/transaction.go | 7 ++++--- core/rawdb/accessors_indexes.go | 6 +++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/cmd/evm/internal/t8ntool/transaction.go b/cmd/evm/internal/t8ntool/transaction.go index 0f39df0753..4ba7b5f130 100644 --- a/cmd/evm/internal/t8ntool/transaction.go +++ b/cmd/evm/internal/t8ntool/transaction.go @@ -115,9 +115,6 @@ func Transaction(ctx *cli.Context) error { } var results []result for it.Next() { - if err := it.Err(); err != nil { - return NewError(ErrorIO, err) - } var tx types.Transaction err := rlp.DecodeBytes(it.Value(), &tx) if err != nil { @@ -188,6 +185,10 @@ func Transaction(ctx *cli.Context) error { } results = append(results, r) } + if err := it.Err(); err != nil { + return NewError(ErrorIO, err) + } + out, err := json.MarshalIndent(results, "", " ") fmt.Println(string(out)) return err diff --git a/core/rawdb/accessors_indexes.go b/core/rawdb/accessors_indexes.go index 10eb454015..8c8c3ec9bb 100644 --- a/core/rawdb/accessors_indexes.go +++ b/core/rawdb/accessors_indexes.go @@ -147,9 +147,6 @@ func findTxInBlockBody(blockbody rlp.RawValue, target common.Hash) (*types.Trans } txIndex := uint64(0) for iter.Next() { - if iter.Err() != nil { - return nil, 0, iter.Err() - } // The preimage for the hash calculation of legacy transactions // is just their RLP encoding. For typed (EIP-2718) transactions, // which are encoded as byte arrays, the preimage is the content of @@ -171,6 +168,9 @@ func findTxInBlockBody(blockbody rlp.RawValue, target common.Hash) (*types.Trans } txIndex++ } + if iter.Err() != nil { + return nil, 0, iter.Err() + } return nil, 0, errors.New("transaction not found") } From 919b238c82cce36c5af2b7ce5c5f4d6546b26982 Mon Sep 17 00:00:00 2001 From: sashass1315 Date: Wed, 11 Feb 2026 16:14:43 +0200 Subject: [PATCH 027/161] triedb/pathdb: return nodeLoc by value to avoid heap allocation (#33819) --- triedb/pathdb/database.go | 2 +- triedb/pathdb/difflayer.go | 4 ++-- triedb/pathdb/disklayer.go | 10 +++++----- triedb/pathdb/reader.go | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/triedb/pathdb/database.go b/triedb/pathdb/database.go index f7c0ba1398..5255602a4e 100644 --- a/triedb/pathdb/database.go +++ b/triedb/pathdb/database.go @@ -45,7 +45,7 @@ type layer interface { // Note: // - the returned node is not a copy, please don't modify it. // - no error will be returned if the requested node is not found in database. - node(owner common.Hash, path []byte, depth int) ([]byte, common.Hash, *nodeLoc, error) + node(owner common.Hash, path []byte, depth int) ([]byte, common.Hash, nodeLoc, error) // account directly retrieves the account RLP associated with a particular // hash in the slim data format. An error will be returned if the read diff --git a/triedb/pathdb/difflayer.go b/triedb/pathdb/difflayer.go index ae523c979c..8ca3a39cf3 100644 --- a/triedb/pathdb/difflayer.go +++ b/triedb/pathdb/difflayer.go @@ -79,7 +79,7 @@ func (dl *diffLayer) parentLayer() layer { // node implements the layer interface, retrieving the trie node blob with the // provided node information. No error will be returned if the node is not found. -func (dl *diffLayer) node(owner common.Hash, path []byte, depth int) ([]byte, common.Hash, *nodeLoc, error) { +func (dl *diffLayer) node(owner common.Hash, path []byte, depth int) ([]byte, common.Hash, nodeLoc, error) { // Hold the lock, ensure the parent won't be changed during the // state accessing. dl.lock.RLock() @@ -91,7 +91,7 @@ func (dl *diffLayer) node(owner common.Hash, path []byte, depth int) ([]byte, co dirtyNodeHitMeter.Mark(1) dirtyNodeHitDepthHist.Update(int64(depth)) dirtyNodeReadMeter.Mark(int64(len(n.Blob))) - return n.Blob, n.Hash, &nodeLoc{loc: locDiffLayer, depth: depth}, nil + return n.Blob, n.Hash, nodeLoc{loc: locDiffLayer, depth: depth}, nil } // Trie node unknown to this layer, resolve from parent return dl.parent.node(owner, path, depth+1) diff --git a/triedb/pathdb/disklayer.go b/triedb/pathdb/disklayer.go index 911959dfa9..5bad19b4f5 100644 --- a/triedb/pathdb/disklayer.go +++ b/triedb/pathdb/disklayer.go @@ -112,12 +112,12 @@ func (dl *diskLayer) markStale() { // node implements the layer interface, retrieving the trie node with the // provided node info. No error will be returned if the node is not found. -func (dl *diskLayer) node(owner common.Hash, path []byte, depth int) ([]byte, common.Hash, *nodeLoc, error) { +func (dl *diskLayer) node(owner common.Hash, path []byte, depth int) ([]byte, common.Hash, nodeLoc, error) { dl.lock.RLock() defer dl.lock.RUnlock() if dl.stale { - return nil, common.Hash{}, nil, errSnapshotStale + return nil, common.Hash{}, nodeLoc{}, errSnapshotStale } // Try to retrieve the trie node from the not-yet-written node buffer first // (both the live one and the frozen one). Note the buffer is lock free since @@ -129,7 +129,7 @@ func (dl *diskLayer) node(owner common.Hash, path []byte, depth int) ([]byte, co dirtyNodeHitMeter.Mark(1) dirtyNodeReadMeter.Mark(int64(len(n.Blob))) dirtyNodeHitDepthHist.Update(int64(depth)) - return n.Blob, n.Hash, &nodeLoc{loc: locDirtyCache, depth: depth}, nil + return n.Blob, n.Hash, nodeLoc{loc: locDirtyCache, depth: depth}, nil } } } @@ -141,7 +141,7 @@ func (dl *diskLayer) node(owner common.Hash, path []byte, depth int) ([]byte, co if blob := dl.nodes.Get(nil, key); len(blob) > 0 { cleanNodeHitMeter.Mark(1) cleanNodeReadMeter.Mark(int64(len(blob))) - return blob, crypto.Keccak256Hash(blob), &nodeLoc{loc: locCleanCache, depth: depth}, nil + return blob, crypto.Keccak256Hash(blob), nodeLoc{loc: locCleanCache, depth: depth}, nil } cleanNodeMissMeter.Mark(1) } @@ -161,7 +161,7 @@ func (dl *diskLayer) node(owner common.Hash, path []byte, depth int) ([]byte, co dl.nodes.Set(key, blob) cleanNodeWriteMeter.Mark(int64(len(blob))) } - return blob, crypto.Keccak256Hash(blob), &nodeLoc{loc: locDiskLayer, depth: depth}, nil + return blob, crypto.Keccak256Hash(blob), nodeLoc{loc: locDiskLayer, depth: depth}, nil } // account directly retrieves the account RLP associated with a particular diff --git a/triedb/pathdb/reader.go b/triedb/pathdb/reader.go index f55e015ee6..aaa64e902c 100644 --- a/triedb/pathdb/reader.go +++ b/triedb/pathdb/reader.go @@ -47,7 +47,7 @@ type nodeLoc struct { } // string returns the string representation of node location. -func (loc *nodeLoc) string() string { +func (loc nodeLoc) string() string { return fmt.Sprintf("loc: %s, depth: %d", loc.loc, loc.depth) } From 995fa79bf505542f3bdf0dbf8528b3dc8ad05bbc Mon Sep 17 00:00:00 2001 From: Sina M <1591639+s1na@users.noreply.github.com> Date: Wed, 11 Feb 2026 16:25:42 +0100 Subject: [PATCH 028/161] eth/tracers: tests for bad block tracing (#33821) Fixes #30833 --- eth/tracers/api_test.go | 347 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 347 insertions(+) diff --git a/eth/tracers/api_test.go b/eth/tracers/api_test.go index 609c3f4d8b..f76c35a1d5 100644 --- a/eth/tracers/api_test.go +++ b/eth/tracers/api_test.go @@ -1373,3 +1373,350 @@ func TestStandardTraceBlockToFile(t *testing.T) { } } } + +func TestTraceBadBlock(t *testing.T) { + t.Parallel() + + var ( + accounts = newAccounts(2) + storageContract = common.HexToAddress("0x00000000000000000000000000000000deadbeef") + signer = types.HomesteadSigner{} + txHashs = make([]common.Hash, 0, 2) + genesis = &core.Genesis{ + Config: params.TestChainConfig, + Alloc: types.GenesisAlloc{ + accounts[0].addr: {Balance: big.NewInt(params.Ether)}, + accounts[1].addr: {Balance: big.NewInt(params.Ether)}, + storageContract: { + Nonce: 1, + Balance: big.NewInt(0), + Code: []byte{ + byte(vm.PUSH1), 0x2a, // push 42 + byte(vm.PUSH1), 0x00, // push slot 0 + byte(vm.SSTORE), // sstore(0, 42) + byte(vm.STOP), + }, + }, + }, + } + ) + backend := newTestBackend(t, 1, genesis, func(i int, b *core.BlockGen) { + // tx 0: plain transfer + tx, _ := types.SignTx(types.NewTx(&types.LegacyTx{ + Nonce: 0, + To: &accounts[1].addr, + Value: big.NewInt(1000), + Gas: params.TxGas, + GasPrice: b.BaseFee(), + Data: nil}), + signer, accounts[0].key) + b.AddTx(tx) + txHashs = append(txHashs, tx.Hash()) + + // tx 1: call storage contract (executes PUSH1, PUSH1, SSTORE, STOP) + tx, _ = types.SignTx(types.NewTx(&types.LegacyTx{ + Nonce: 1, + To: &storageContract, + Value: big.NewInt(0), + Gas: 50000, + GasPrice: b.BaseFee(), + Data: nil}), + signer, accounts[0].key) + b.AddTx(tx) + txHashs = append(txHashs, tx.Hash()) + }) + defer backend.teardown() + + // Write the block as a bad block so parent state is available + block := backend.chain.GetBlockByNumber(1) + rawdb.WriteBadBlock(backend.chaindb, block) + + api := NewAPI(backend) + result, err := api.TraceBadBlock(context.Background(), block.Hash(), nil) + if err != nil { + t.Fatalf("want no error, have %v", err) + } + if len(result) != 2 { + t.Fatalf("expected 2 tx traces, got %d", len(result)) + } + + // First tx: plain transfer + have, _ := json.Marshal(result) + var traces []struct { + TxHash common.Hash `json:"txHash"` + Result struct { + Gas uint64 `json:"gas"` + Failed bool `json:"failed"` + StructLogs []json.RawMessage `json:"structLogs"` + } `json:"result"` + } + if err := json.Unmarshal(have, &traces); err != nil { + t.Fatalf("failed to unmarshal traces: %v", err) + } + if traces[0].TxHash != txHashs[0] { + t.Errorf("tx 0: hash mismatch, have %v, want %v", traces[0].TxHash, txHashs[0]) + } + if traces[0].Result.Gas != params.TxGas { + t.Errorf("tx 0: gas mismatch, have %d, want %d", traces[0].Result.Gas, params.TxGas) + } + if len(traces[0].Result.StructLogs) != 0 { + t.Errorf("tx 0: expected empty structLogs for plain transfer, got %d entries", len(traces[0].Result.StructLogs)) + } + + // Second tx: contract call + if traces[1].TxHash != txHashs[1] { + t.Errorf("tx 1: hash mismatch, have %v, want %v", traces[1].TxHash, txHashs[1]) + } + if traces[1].Result.Failed { + t.Error("tx 1: expected success, got failed") + } + // Contract has 4 opcodes: PUSH1, PUSH1, SSTORE, STOP + if len(traces[1].Result.StructLogs) != 4 { + t.Errorf("tx 1: expected 4 structLog entries for contract call, got %d", len(traces[1].Result.StructLogs)) + } + + // Non-existent bad block + _, err = api.TraceBadBlock(context.Background(), common.Hash{42}, nil) + if err == nil { + t.Fatal("want error for non-existent bad block, have none") + } + wantErr := fmt.Sprintf("bad block %#x not found", common.Hash{42}) + if err.Error() != wantErr { + t.Errorf("error mismatch, want '%s', have '%v'", wantErr, err) + } +} + +func TestIntermediateRoots(t *testing.T) { + t.Parallel() + + // Initialize test accounts and a contract that writes to storage. + var ( + accounts = newAccounts(2) + storageContract = common.HexToAddress("0x00000000000000000000000000000000deadbeef") + signer = types.HomesteadSigner{} + genesis = &core.Genesis{ + Config: params.TestChainConfig, + Alloc: types.GenesisAlloc{ + accounts[0].addr: {Balance: big.NewInt(params.Ether)}, + accounts[1].addr: {Balance: big.NewInt(params.Ether)}, + // Contract: SSTORE(CALLVALUE, CALLVALUE) + storageContract: { + Nonce: 1, + Balance: big.NewInt(0), + Code: []byte{ + byte(vm.CALLVALUE), + byte(vm.CALLVALUE), + byte(vm.SSTORE), + byte(vm.STOP), + }, + }, + }, + } + ) + backend := newTestBackend(t, 1, genesis, func(i int, b *core.BlockGen) { + // tx 0: plain transfer + tx, _ := types.SignTx(types.NewTx(&types.LegacyTx{ + Nonce: 0, + To: &accounts[1].addr, + Value: big.NewInt(1000), + Gas: params.TxGas, + GasPrice: b.BaseFee(), + Data: nil}), + signer, accounts[0].key) + b.AddTx(tx) + + // tx 1: sstore(1, 1) + tx, _ = types.SignTx(types.NewTx(&types.LegacyTx{ + Nonce: 1, + To: &storageContract, + Value: big.NewInt(1), + Gas: 50000, + GasPrice: b.BaseFee(), + Data: nil}), + signer, accounts[0].key) + b.AddTx(tx) + + // tx 2: sstore(2, 2) + tx, _ = types.SignTx(types.NewTx(&types.LegacyTx{ + Nonce: 2, + To: &storageContract, + Value: big.NewInt(2), + Gas: 50000, + GasPrice: b.BaseFee(), + Data: nil}), + signer, accounts[0].key) + b.AddTx(tx) + }) + defer backend.teardown() + + api := NewAPI(backend) + block := backend.chain.GetBlockByNumber(1) + + // Should return one root per tx + roots, err := api.IntermediateRoots(context.Background(), block.Hash(), nil) + if err != nil { + t.Fatalf("want no error, have %v", err) + } + if len(roots) != 3 { + t.Fatalf("root count mismatch, have %d, want 3", len(roots)) + } + for i, root := range roots { + if root == (common.Hash{}) { + t.Errorf("root[%d] should not be zero", i) + } + } + if roots[0] == roots[1] { + t.Error("root[0] and root[1] should differ (transfer vs sstore)") + } + if roots[1] == roots[2] { + t.Error("root[1] and root[2] should differ (sstore to different slots)") + } + + // Intermediate roots of a bad block + rawdb.WriteBadBlock(backend.chaindb, block) + badRoots, err := api.IntermediateRoots(context.Background(), block.Hash(), nil) + if err != nil { + t.Fatalf("want no error for bad block fallback, have %v", err) + } + if !reflect.DeepEqual(roots, badRoots) { + t.Errorf("bad block roots mismatch, have %v, want %v", badRoots, roots) + } + + // Genesis block: should return error + genesisBlock := backend.chain.GetBlockByNumber(0) + _, err = api.IntermediateRoots(context.Background(), genesisBlock.Hash(), nil) + if err == nil || err.Error() != "genesis is not traceable" { + t.Fatalf("want 'genesis is not traceable' error, have %v", err) + } + + // Non-existent block: should return error + _, err = api.IntermediateRoots(context.Background(), common.Hash{42}, nil) + if err == nil { + t.Fatal("want error for non-existent block, have none") + } + wantErr := fmt.Sprintf("block %#x not found", common.Hash{42}) + if err.Error() != wantErr { + t.Errorf("error mismatch, want '%s', have '%v'", wantErr, err) + } +} + +func TestStandardTraceBadBlockToFile(t *testing.T) { + var ( + key, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + address = crypto.PubkeyToAddress(key.PublicKey) + funds = big.NewInt(1000000000000000) + + aa = common.HexToAddress("0x7217d81b76bdd8707601e959454e3d776aee5f43") + aaCode = []byte{byte(vm.PUSH1), 0x00, byte(vm.POP)} + + bb = common.HexToAddress("0x7217d81b76bdd8707601e959454e3d776aee5f44") + bbCode = []byte{byte(vm.PUSH2), 0x00, 0x01, byte(vm.POP)} + ) + + genesis := &core.Genesis{ + Config: params.TestChainConfig, + Alloc: types.GenesisAlloc{ + address: {Balance: funds}, + aa: { + Code: aaCode, + Nonce: 1, + Balance: big.NewInt(0), + }, + bb: { + Code: bbCode, + Nonce: 1, + Balance: big.NewInt(0), + }, + }, + } + txHashs := make([]common.Hash, 0, 2) + backend := newTestBackend(t, 1, genesis, func(i int, b *core.BlockGen) { + b.SetCoinbase(common.Address{1}) + tx, _ := types.SignTx(types.NewTx(&types.LegacyTx{ + Nonce: 0, + To: &aa, + Value: big.NewInt(0), + Gas: 50000, + GasPrice: b.BaseFee(), + Data: nil, + }), types.HomesteadSigner{}, key) + b.AddTx(tx) + txHashs = append(txHashs, tx.Hash()) + + tx, _ = types.SignTx(types.NewTx(&types.LegacyTx{ + Nonce: 1, + To: &bb, + Value: big.NewInt(1), + Gas: 100000, + GasPrice: b.BaseFee(), + Data: nil, + }), types.HomesteadSigner{}, key) + b.AddTx(tx) + txHashs = append(txHashs, tx.Hash()) + }) + defer backend.teardown() + + // Write the block as a bad block + block := backend.chain.GetBlockByNumber(1) + rawdb.WriteBadBlock(backend.chaindb, block) + + var testSuite = []struct { + config *StdTraceConfig + want []string + }{ + { + // All txs traced + config: nil, + want: []string{ + `{"pc":0,"op":96,"gas":"0x7148","gasCost":"0x3","memSize":0,"stack":[],"depth":1,"refund":0,"opName":"PUSH1"} +{"pc":2,"op":80,"gas":"0x7145","gasCost":"0x2","memSize":0,"stack":["0x0"],"depth":1,"refund":0,"opName":"POP"} +{"pc":3,"op":0,"gas":"0x7143","gasCost":"0x0","memSize":0,"stack":[],"depth":1,"refund":0,"opName":"STOP"} +{"output":"","gasUsed":"0x5"} +`, + `{"pc":0,"op":97,"gas":"0x13498","gasCost":"0x3","memSize":0,"stack":[],"depth":1,"refund":0,"opName":"PUSH2"} +{"pc":3,"op":80,"gas":"0x13495","gasCost":"0x2","memSize":0,"stack":["0x1"],"depth":1,"refund":0,"opName":"POP"} +{"pc":4,"op":0,"gas":"0x13493","gasCost":"0x0","memSize":0,"stack":[],"depth":1,"refund":0,"opName":"STOP"} +{"output":"","gasUsed":"0x5"} +`, + }, + }, + { + // Specific tx traced + config: &StdTraceConfig{TxHash: txHashs[1]}, + want: []string{ + `{"pc":0,"op":97,"gas":"0x13498","gasCost":"0x3","memSize":0,"stack":[],"depth":1,"refund":0,"opName":"PUSH2"} +{"pc":3,"op":80,"gas":"0x13495","gasCost":"0x2","memSize":0,"stack":["0x1"],"depth":1,"refund":0,"opName":"POP"} +{"pc":4,"op":0,"gas":"0x13493","gasCost":"0x0","memSize":0,"stack":[],"depth":1,"refund":0,"opName":"STOP"} +{"output":"","gasUsed":"0x5"} +`, + }, + }, + } + + api := NewAPI(backend) + for i, tc := range testSuite { + txTraces, err := api.StandardTraceBadBlockToFile(context.Background(), block.Hash(), tc.config) + if err != nil { + t.Fatalf("test %d: unexpected error %v", i, err) + } + if len(txTraces) != len(tc.want) { + t.Fatalf("test %d: file count mismatch, have %d, want %d", i, len(txTraces), len(tc.want)) + } + for j, traceFileName := range txTraces { + defer os.Remove(traceFileName) + traceReceived, err := os.ReadFile(traceFileName) + if err != nil { + t.Fatalf("test %d: could not read trace file: %v", i, err) + } + if tc.want[j] != string(traceReceived) { + t.Fatalf("test %d, trace %d: result mismatch\nhave:\n%s\nwant:\n%s", i, j, string(traceReceived), tc.want[j]) + } + } + } + + // Non-existent bad block + _, err := api.StandardTraceBadBlockToFile(context.Background(), common.Hash{42}, nil) + if err == nil { + t.Fatal("want error for non-existent bad block, have none") + } +} From 9426444825e14c6f727f2e03a991d3b28d686eba Mon Sep 17 00:00:00 2001 From: Sina M <1591639+s1na@users.noreply.github.com> Date: Wed, 11 Feb 2026 22:03:08 +0100 Subject: [PATCH 029/161] internal/era: update eraE type IDs to match spec (#33827) Update to match the spec: https://github.com/eth-clients/e2store-format-specs/pull/16 --------- Co-authored-by: lightclient --- internal/era/era.go | 4 ++-- internal/era/execdb/builder.go | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/era/era.go b/internal/era/era.go index ed481c810e..a3c8465bc4 100644 --- a/internal/era/era.go +++ b/internal/era/era.go @@ -37,8 +37,8 @@ var ( TypeCompressedReceipts uint16 = 0x05 TypeTotalDifficulty uint16 = 0x06 TypeAccumulator uint16 = 0x07 - TypeCompressedSlimReceipts uint16 = 0x08 // uses eth/69 encoding - TypeProof uint16 = 0x09 + TypeCompressedSlimReceipts uint16 = 0x0a // uses eth/69 encoding + TypeProof uint16 = 0x0b TypeBlockIndex uint16 = 0x3266 TypeComponentIndex uint16 = 0x3267 diff --git a/internal/era/execdb/builder.go b/internal/era/execdb/builder.go index da7f6a08c3..6246b9caae 100644 --- a/internal/era/execdb/builder.go +++ b/internal/era/execdb/builder.go @@ -27,7 +27,7 @@ package execdb // Version = { type: 0x3265, data: nil } // CompressedHeader = { type: 0x03, data: snappyFramed(rlp(header)) } // CompressedBody = { type: 0x04, data: snappyFramed(rlp(body)) } -// CompressedSlimReceipts = { type: 0x08, data: snappyFramed(rlp([tx-type, post-state-or-status, cumulative-gas, logs])) } +// CompressedSlimReceipts = { type: 0x0a, data: snappyFramed(rlp([tx-type, post-state-or-status, cumulative-gas, logs])) } // TotalDifficulty = { type: 0x06, data: uint256 (header.total_difficulty) } // AccumulatorRoot = { type: 0x07, data: hash_tree_root(List(HeaderRecord, 8192)) } // ComponentIndex = { type: 0x3267, data: component-index } From f2869793dfbb66aeab64cc40542a89946c2d1874 Mon Sep 17 00:00:00 2001 From: Sina M <1591639+s1na@users.noreply.github.com> Date: Thu, 12 Feb 2026 10:33:12 +0100 Subject: [PATCH 030/161] node: http2 for JSON-RPC API (#33812) The reasoning for using the cleartext format here is that the JSON-RPC API is internal only. Providers which expose it publicly already put it behind a proxy which handles also the encryption. --- node/rpcstack.go | 3 +++ node/rpcstack_test.go | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/node/rpcstack.go b/node/rpcstack.go index a1cc832f9f..a9ac88e4de 100644 --- a/node/rpcstack.go +++ b/node/rpcstack.go @@ -138,6 +138,9 @@ func (h *httpServer) start() error { // Initialize the server. h.server = &http.Server{Handler: h} + h.server.Protocols = new(http.Protocols) + h.server.Protocols.SetHTTP1(true) + h.server.Protocols.SetUnencryptedHTTP2(true) if h.timeouts != (rpc.HTTPTimeouts{}) { CheckTimeouts(&h.timeouts) h.server.ReadTimeout = h.timeouts.ReadTimeout diff --git a/node/rpcstack_test.go b/node/rpcstack_test.go index 54e58cccb2..bd75dac4eb 100644 --- a/node/rpcstack_test.go +++ b/node/rpcstack_test.go @@ -593,6 +593,38 @@ func TestHTTPWriteTimeout(t *testing.T) { }) } +func TestHTTP2H2C(t *testing.T) { + srv := createAndStartServer(t, &httpConfig{}, false, &wsConfig{}, nil) + defer srv.stop() + + // Create an HTTP/2 cleartext client. + transport := &http.Transport{} + transport.Protocols = new(http.Protocols) + transport.Protocols.SetUnencryptedHTTP2(true) + client := &http.Client{Transport: transport} + + body := strings.NewReader(`{"jsonrpc":"2.0","id":1,"method":"rpc_modules","params":[]}`) + resp, err := client.Post("http://"+srv.listenAddr(), "application/json", body) + if err != nil { + t.Fatal(err) + } + defer resp.Body.Close() + + if resp.StatusCode != 200 { + t.Fatalf("expected status 200, got %d", resp.StatusCode) + } + if resp.Proto != "HTTP/2.0" { + t.Fatalf("expected HTTP/2.0, got %s", resp.Proto) + } + result, err := io.ReadAll(resp.Body) + if err != nil { + t.Fatal(err) + } + if !strings.Contains(string(result), "jsonrpc") { + t.Fatalf("unexpected response: %s", result) + } +} + func apis() []rpc.API { return []rpc.API{ { From ece2b19ac06c9e2597d70a61af5cbde4e69eaeff Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Fri, 13 Feb 2026 13:09:19 +0100 Subject: [PATCH 031/161] rlp: add AppendRaw method to RawList (#33834) This is helpful when building a list from already-encoded elements. --- rlp/raw.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/rlp/raw.go b/rlp/raw.go index 8d171ce0f6..96ad0427c8 100644 --- a/rlp/raw.go +++ b/rlp/raw.go @@ -145,6 +145,14 @@ func (r *RawList[T]) Append(item T) error { return nil } +// AppendRaw adds an encoded item to the list. +func (r *RawList[T]) AppendRaw(b []byte) { + if r.enc == nil { + r.enc = make([]byte, 9) + } + r.enc = append(r.enc, b...) +} + // StringSize returns the encoded size of a string. func StringSize(s string) uint64 { switch n := len(s); n { From 4f38a76438fae14030fc43d49578c996fcc1d8c5 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Fri, 13 Feb 2026 21:52:47 +0100 Subject: [PATCH 032/161] rlp: validate and cache element count in RawList (#33840) This changes `RawList` to ensure the count of items is always valid. Lists with invalid structure, i.e. ones where an element exceeds the size of the container, are now detected during decoding of the `RawList` and thus cannot exist. Also remove `RawList.Empty` since it is now fully redundant, and `Iterator.Count` since it returns incorrect results in the presence of invalid input. There are no callers of these methods (yet). --- rlp/encode.go | 2 +- rlp/iterator.go | 9 -------- rlp/raw.go | 33 ++++++++++++++++++++-------- rlp/raw_test.go | 58 ++++++++++++++++++++++++++++++++++++++++++++----- 4 files changed, 77 insertions(+), 25 deletions(-) diff --git a/rlp/encode.go b/rlp/encode.go index ba8959ee6f..9d04e6324a 100644 --- a/rlp/encode.go +++ b/rlp/encode.go @@ -122,7 +122,7 @@ func EncodeToRawList[T any](val []T) (RawList[T], error) { bytes := make([]byte, contentSize+9) offset := 9 - headsize(uint64(contentSize)) buf.copyTo(bytes[offset:]) - return RawList[T]{enc: bytes}, nil + return RawList[T]{enc: bytes, length: len(val)}, nil } type listhead struct { diff --git a/rlp/iterator.go b/rlp/iterator.go index f1f214c4bc..d6151eabd7 100644 --- a/rlp/iterator.go +++ b/rlp/iterator.go @@ -64,15 +64,6 @@ func (it *Iterator) Next() bool { return true } -// Count returns the remaining number of items. -// Note this is O(n) and the result may be incorrect if the list data is invalid. -// The returned count is always an upper bound on the remaining items -// that will be visited by the iterator. -func (it *Iterator) Count() int { - count, _ := CountValues(it.data) - return count -} - // Value returns the current value. func (it *Iterator) Value() []byte { return it.next diff --git a/rlp/raw.go b/rlp/raw.go index 96ad0427c8..69946f6d22 100644 --- a/rlp/raw.go +++ b/rlp/raw.go @@ -44,6 +44,9 @@ type RawList[T any] struct { // The implementation code mostly works with the Content method because it // returns something valid either way. enc []byte + + // length holds the number of items in the list. + length int } // Content returns the RLP-encoded data of the list. @@ -87,7 +90,14 @@ func (r *RawList[T]) DecodeRLP(s *Stream) error { if err := s.readFull(enc[9:]); err != nil { return err } - *r = RawList[T]{enc: enc} + n, err := CountValues(enc[9:]) + if err != nil { + if err == ErrValueTooLarge { + return ErrElemTooLarge + } + return err + } + *r = RawList[T]{enc: enc, length: n} return nil } @@ -105,8 +115,7 @@ func (r *RawList[T]) Items() ([]T, error) { // Len returns the number of items in the list. func (r *RawList[T]) Len() int { - len, _ := CountValues(r.Content()) - return len + return r.length } // Size returns the encoded size of the list. @@ -114,11 +123,6 @@ func (r *RawList[T]) Size() uint64 { return ListSize(uint64(len(r.Content()))) } -// Empty returns true if the list contains no items. -func (r *RawList[T]) Empty() bool { - return len(r.Content()) == 0 -} - // ContentIterator returns an iterator over the content of the list. // Note the offsets returned by iterator.Offset are relative to the // Content bytes of the list. @@ -142,15 +146,26 @@ func (r *RawList[T]) Append(item T) error { end := prevEnd + eb.size() r.enc = slices.Grow(r.enc, eb.size())[:end] eb.copyTo(r.enc[prevEnd:end]) + r.length++ return nil } // AppendRaw adds an encoded item to the list. -func (r *RawList[T]) AppendRaw(b []byte) { +// The given byte slice must contain exactly one RLP value. +func (r *RawList[T]) AppendRaw(b []byte) error { + _, tagsize, contentsize, err := readKind(b) + if err != nil { + return err + } + if tagsize+contentsize != uint64(len(b)) { + return fmt.Errorf("rlp: input has trailing bytes in AppendRaw") + } if r.enc == nil { r.enc = make([]byte, 9) } r.enc = append(r.enc, b...) + r.length++ + return nil } // StringSize returns the encoded size of a string. diff --git a/rlp/raw_test.go b/rlp/raw_test.go index 9a4c68050c..49ac3dcc62 100644 --- a/rlp/raw_test.go +++ b/rlp/raw_test.go @@ -68,9 +68,6 @@ func (test rawListTest[T]) run(t *testing.T) { // check iterator it := rl.ContentIterator() i := 0 - if count := it.Count(); count != test.length { - t.Fatalf("iterator has wrong Count %d, want %d", count, test.length) - } for it.Next() { var item T if err := DecodeBytes(it.Value(), &item); err != nil { @@ -154,9 +151,6 @@ func TestRawListEmpty(t *testing.T) { if !bytes.Equal(b, unhex("C0")) { t.Fatalf("empty RawList has wrong encoding %x", b) } - if !rl.Empty() { - t.Fatal("list should be Empty") - } if rl.Len() != 0 { t.Fatalf("empty list has Len %d", rl.Len()) } @@ -226,6 +220,58 @@ func TestRawListAppend(t *testing.T) { } } +func TestRawListAppendRaw(t *testing.T) { + var rl RawList[uint64] + + if err := rl.AppendRaw(unhex("01")); err != nil { + t.Fatal("AppendRaw(01) failed:", err) + } + if err := rl.AppendRaw(unhex("820102")); err != nil { + t.Fatal("AppendRaw(820102) failed:", err) + } + if rl.Len() != 2 { + t.Fatalf("wrong Len %d after valid appends", rl.Len()) + } + + if err := rl.AppendRaw(nil); err == nil { + t.Fatal("AppendRaw(nil) should fail") + } + if err := rl.AppendRaw(unhex("0102")); err == nil { + t.Fatal("AppendRaw(0102) should fail due to trailing bytes") + } + if err := rl.AppendRaw(unhex("8201")); err == nil { + t.Fatal("AppendRaw(8201) should fail due to truncated value") + } + if rl.Len() != 2 { + t.Fatalf("wrong Len %d after invalid appends, want 2", rl.Len()) + } +} + +func TestRawListDecodeInvalid(t *testing.T) { + tests := []struct { + input string + err error + }{ + // Single item with non-canonical size (0x81 wrapping byte <= 0x7F). + {input: "C28142", err: ErrCanonSize}, + // Single item claiming more bytes than available in the list. + {input: "C484020202", err: ErrElemTooLarge}, + // Two items, second has non-canonical size. + {input: "C3018142", err: ErrCanonSize}, + // Two items, second claims more bytes than remain in the list. + {input: "C401830202", err: ErrElemTooLarge}, + // Item is a sub-list whose declared size exceeds available bytes. + {input: "C3C40102", err: ErrElemTooLarge}, + } + for _, test := range tests { + var rl RawList[RawValue] + err := DecodeBytes(unhex(test.input), &rl) + if !errors.Is(err, test.err) { + t.Errorf("input %s: error mismatch: got %v, want %v", test.input, err, test.err) + } + } +} + func TestCountValues(t *testing.T) { tests := []struct { input string // note: spaces in input are stripped by unhex From ac85a6f25449a7b96505637e18c988b3142d47bf Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Fri, 13 Feb 2026 23:53:42 +0100 Subject: [PATCH 033/161] rlp: add back Iterator.Count, with fixes (#33841) I removed `Iterator.Count` in #33840, because it appeared to be unused and did not provide the documented invariant: the returned count should always be an upper bound on the number of iterations allowed by `Next`. In order to make `Count` work, the semantics of `CountValues` has to change to return the number of items up and including the invalid one. I have reviewed all callsites of `CountValues` to assess if changing this is safe. There aren't that many, and the only call that doesn't check the error and return is in the trie node parser, `trie.decodeNodeUnsafe`. There, we distinguish the node type based on the number of items, and it previously returned an error for item count zero. In order to avoid any potential issue that could result from this change, I'm adding an error check in that function, though it isn't necessary. --- rlp/iterator.go | 9 ++++++ rlp/iterator_test.go | 66 ++++++++++++++++++++++++++++++++++++++++++++ rlp/raw.go | 2 +- rlp/raw_test.go | 6 ++-- trie/node.go | 9 ++++-- 5 files changed, 85 insertions(+), 7 deletions(-) diff --git a/rlp/iterator.go b/rlp/iterator.go index d6151eabd7..9e41cec947 100644 --- a/rlp/iterator.go +++ b/rlp/iterator.go @@ -69,6 +69,15 @@ func (it *Iterator) Value() []byte { return it.next } +// Count returns the remaining number of items. +// Note this is O(n) and the result may be incorrect if the list data is invalid. +// The returned count is always an upper bound on the remaining items +// that will be visited by the iterator. +func (it *Iterator) Count() int { + count, _ := CountValues(it.data) + return count +} + // Offset returns the offset of the current value into the list data. func (it *Iterator) Offset() int { return it.offset - len(it.next) diff --git a/rlp/iterator_test.go b/rlp/iterator_test.go index 8ea26dad1b..275d4371c7 100644 --- a/rlp/iterator_test.go +++ b/rlp/iterator_test.go @@ -17,6 +17,7 @@ package rlp import ( + "io" "testing" "github.com/ethereum/go-ethereum/common/hexutil" @@ -54,6 +55,9 @@ func TestIterator(t *testing.T) { if err != nil { t.Fatal(err) } + if c := txit.Count(); c != 2 { + t.Fatal("wrong Count:", c) + } var i = 0 for txit.Next() { if txit.err != nil { @@ -65,3 +69,65 @@ func TestIterator(t *testing.T) { t.Errorf("count wrong, expected %d got %d", i, exp) } } + +func TestIteratorErrors(t *testing.T) { + tests := []struct { + input []byte + wantCount int // expected Count before iterating + wantErr error + }{ + // Second item string header claims 3 bytes content, but only 2 remain. + {unhex("C4 01 83AABB"), 2, ErrValueTooLarge}, + // Second item truncated: B9 requires 2 size bytes, none available. + {unhex("C2 01 B9"), 2, io.ErrUnexpectedEOF}, + // 0x05 should be encoded directly, not as 81 05. + {unhex("C3 01 8105"), 2, ErrCanonSize}, + // Long-form string header B8 used for 1-byte content (< 56). + {unhex("C4 01 B801AA"), 2, ErrCanonSize}, + // Long-form list header F8 used for 1-byte content (< 56). + {unhex("C4 01 F80101"), 2, ErrCanonSize}, + } + for _, tt := range tests { + it, err := NewListIterator(tt.input) + if err != nil { + t.Fatal("NewListIterator error:", err) + } + if c := it.Count(); c != tt.wantCount { + t.Fatalf("%x: Count = %d, want %d", tt.input, c, tt.wantCount) + } + n := 0 + for it.Next() { + if it.Err() != nil { + break + } + n++ + } + if wantN := tt.wantCount - 1; n != wantN { + t.Fatalf("%x: got %d valid items, want %d", tt.input, n, wantN) + } + if it.Err() != tt.wantErr { + t.Fatalf("%x: got error %v, want %v", tt.input, it.Err(), tt.wantErr) + } + if it.Next() { + t.Fatalf("%x: Next returned true after error", tt.input) + } + } +} + +func FuzzIteratorCount(f *testing.F) { + examples := [][]byte{unhex("010203"), unhex("018142"), unhex("01830202")} + for _, e := range examples { + f.Add(e) + } + f.Fuzz(func(t *testing.T, in []byte) { + it := newIterator(in, 0) + count := it.Count() + i := 0 + for it.Next() { + i++ + } + if i != count { + t.Fatalf("%x: count %d not equal to %d iterations", in, count, i) + } + }) +} diff --git a/rlp/raw.go b/rlp/raw.go index 69946f6d22..08ec667158 100644 --- a/rlp/raw.go +++ b/rlp/raw.go @@ -285,7 +285,7 @@ func CountValues(b []byte) (int, error) { for ; len(b) > 0; i++ { _, tagsize, size, err := readKind(b) if err != nil { - return 0, err + return i + 1, err } b = b[tagsize+size:] } diff --git a/rlp/raw_test.go b/rlp/raw_test.go index 49ac3dcc62..112c5d7897 100644 --- a/rlp/raw_test.go +++ b/rlp/raw_test.go @@ -288,9 +288,9 @@ func TestCountValues(t *testing.T) { {"820101 820202 8403030303 04", 4, nil}, // size errors - {"8142", 0, ErrCanonSize}, - {"01 01 8142", 0, ErrCanonSize}, - {"02 84020202", 0, ErrValueTooLarge}, + {"8142", 1, ErrCanonSize}, + {"01 01 8142", 3, ErrCanonSize}, + {"02 84020202", 2, ErrValueTooLarge}, { input: "A12000BF49F440A1CD0527E4D06E2765654C0F56452257516D793A9B8D604DCFDF2AB853F851808D10000000000000000000000000A056E81F171BCC55A6FF8345E692C0F86E5B48E01B996CADC001622FB5E363B421A0C5D2460186F7233C927E7DB2DCC703C0E500B653CA82273B7BFAD8045D85A470", diff --git a/trie/node.go b/trie/node.go index bff2d0516a..7022116048 100644 --- a/trie/node.go +++ b/trie/node.go @@ -161,11 +161,14 @@ func decodeNodeUnsafe(hash, buf []byte) (node, error) { if err != nil { return nil, fmt.Errorf("decode error: %v", err) } - switch c, _ := rlp.CountValues(elems); c { - case 2: + c, err := rlp.CountValues(elems) + switch { + case err != nil: + return nil, fmt.Errorf("invalid node list: %v", err) + case c == 2: n, err := decodeShort(hash, elems) return n, wrapError(err, "short") - case 17: + case c == 17: n, err := decodeFull(hash, elems) return n, wrapError(err, "full") default: From d8b92cb9e60fc8785c84f1afb35e64c9312eb35d Mon Sep 17 00:00:00 2001 From: Jonny Rhea <5555162+jrhea@users.noreply.github.com> Date: Fri, 13 Feb 2026 18:00:14 -0600 Subject: [PATCH 034/161] rpc,internal/telemetry: fix deferred spanEnd to capture errors via pointer (#33772) The endSpan closure accepted error by value, meaning deferred calls like defer spanEnd(err) captured the error at defer-time (always nil), not at function-return time. This meant errors were never recorded on spans. - Changed endSpan to accept *error - Updated all call sites in rpc/handler.go to pass error pointers, and adjusted handleCall to avoid propagating child-span errors to the parent - Added TestTracingHTTPErrorRecording to verify that errors from RPC methods are properly recorded on the rpc.runMethod span --- internal/telemetry/telemetry.go | 18 +++++++------- rpc/handler.go | 18 +++++++------- rpc/tracing_test.go | 44 +++++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+), 18 deletions(-) diff --git a/internal/telemetry/telemetry.go b/internal/telemetry/telemetry.go index 6bd16da66c..470bafed25 100644 --- a/internal/telemetry/telemetry.go +++ b/internal/telemetry/telemetry.go @@ -46,12 +46,12 @@ func BoolAttribute(key string, val bool) Attribute { } // StartSpan creates a SpanKind=INTERNAL span. -func StartSpan(ctx context.Context, spanName string, attributes ...Attribute) (context.Context, trace.Span, func(error)) { +func StartSpan(ctx context.Context, spanName string, attributes ...Attribute) (context.Context, trace.Span, func(*error)) { return StartSpanWithTracer(ctx, otel.Tracer(""), spanName, attributes...) } // StartSpanWithTracer requires a tracer to be passed in and creates a SpanKind=INTERNAL span. -func StartSpanWithTracer(ctx context.Context, tracer trace.Tracer, name string, attributes ...Attribute) (context.Context, trace.Span, func(error)) { +func StartSpanWithTracer(ctx context.Context, tracer trace.Tracer, name string, attributes ...Attribute) (context.Context, trace.Span, func(*error)) { return startSpan(ctx, tracer, trace.SpanKindInternal, name, attributes...) } @@ -67,7 +67,7 @@ type RPCInfo struct { // The span name is formatted as $rpcSystem.$rpcService/$rpcMethod // (e.g. "jsonrpc.engine/newPayloadV4") which follows the Open Telemetry // semantic convensions: https://opentelemetry.io/docs/specs/semconv/rpc/rpc-spans/#span-name. -func StartServerSpan(ctx context.Context, tracer trace.Tracer, rpc RPCInfo, others ...Attribute) (context.Context, func(error)) { +func StartServerSpan(ctx context.Context, tracer trace.Tracer, rpc RPCInfo, others ...Attribute) (context.Context, func(*error)) { var ( name = fmt.Sprintf("%s.%s/%s", rpc.System, rpc.Service, rpc.Method) attributes = append([]Attribute{ @@ -84,7 +84,7 @@ func StartServerSpan(ctx context.Context, tracer trace.Tracer, rpc RPCInfo, othe } // startSpan creates a span with the given kind. -func startSpan(ctx context.Context, tracer trace.Tracer, kind trace.SpanKind, spanName string, attributes ...Attribute) (context.Context, trace.Span, func(error)) { +func startSpan(ctx context.Context, tracer trace.Tracer, kind trace.SpanKind, spanName string, attributes ...Attribute) (context.Context, trace.Span, func(*error)) { ctx, span := tracer.Start(ctx, spanName, trace.WithSpanKind(kind)) if len(attributes) > 0 { span.SetAttributes(attributes...) @@ -93,11 +93,11 @@ func startSpan(ctx context.Context, tracer trace.Tracer, kind trace.SpanKind, sp } // endSpan ends the span and handles error recording. -func endSpan(span trace.Span) func(error) { - return func(err error) { - if err != nil { - span.RecordError(err) - span.SetStatus(codes.Error, err.Error()) +func endSpan(span trace.Span) func(*error) { + return func(err *error) { + if err != nil && *err != nil { + span.RecordError(*err) + span.SetStatus(codes.Error, (*err).Error()) } span.End() } diff --git a/rpc/handler.go b/rpc/handler.go index 4ac3a26df1..c0af162f13 100644 --- a/rpc/handler.go +++ b/rpc/handler.go @@ -524,7 +524,6 @@ func (h *handler) handleCall(cp *callProc, msg *jsonrpcMessage) *jsonrpcMessage } // Start root span for the request. - var err error rpcInfo := telemetry.RPCInfo{ System: "jsonrpc", Service: service, @@ -535,24 +534,25 @@ func (h *handler) handleCall(cp *callProc, msg *jsonrpcMessage) *jsonrpcMessage telemetry.BoolAttribute("rpc.batch", cp.isBatch), } ctx, spanEnd := telemetry.StartServerSpan(cp.ctx, h.tracer(), rpcInfo, attrib...) - defer spanEnd(err) + defer spanEnd(nil) // don't propagate errors to parent spans // Start tracing span before parsing arguments. _, _, pSpanEnd := telemetry.StartSpanWithTracer(ctx, h.tracer(), "rpc.parsePositionalArguments") - args, err := parsePositionalArguments(msg.Params, callb.argTypes) - pSpanEnd(err) - if err != nil { - return msg.errorResponse(&invalidParamsError{err.Error()}) + args, pErr := parsePositionalArguments(msg.Params, callb.argTypes) + pSpanEnd(&pErr) + if pErr != nil { + return msg.errorResponse(&invalidParamsError{pErr.Error()}) } start := time.Now() // Start tracing span before running the method. rctx, _, rSpanEnd := telemetry.StartSpanWithTracer(ctx, h.tracer(), "rpc.runMethod") answer := h.runMethod(rctx, msg, callb, args) + var rErr error if answer.Error != nil { - err = errors.New(answer.Error.Message) + rErr = errors.New(answer.Error.Message) } - rSpanEnd(err) + rSpanEnd(&rErr) // Collect the statistics for RPC calls if metrics is enabled. rpcRequestGauge.Inc(1) @@ -625,7 +625,7 @@ func (h *handler) runMethod(ctx context.Context, msg *jsonrpcMessage, callb *cal if response.Error != nil { err = errors.New(response.Error.Message) } - spanEnd(err) + spanEnd(&err) return response } diff --git a/rpc/tracing_test.go b/rpc/tracing_test.go index f32a647e6f..5a04c901fd 100644 --- a/rpc/tracing_test.go +++ b/rpc/tracing_test.go @@ -23,6 +23,7 @@ import ( "go.opentelemetry.io/otel" "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/codes" "go.opentelemetry.io/otel/propagation" sdktrace "go.opentelemetry.io/otel/sdk/trace" "go.opentelemetry.io/otel/sdk/trace/tracetest" @@ -141,6 +142,49 @@ func TestTracingHTTP(t *testing.T) { } } +// TestTracingErrorRecording verifies that errors are recorded on spans. +func TestTracingHTTPErrorRecording(t *testing.T) { + t.Parallel() + server, tracer, exporter := newTracingServer(t) + httpsrv := httptest.NewServer(server) + t.Cleanup(httpsrv.Close) + client, err := DialHTTP(httpsrv.URL) + if err != nil { + t.Fatalf("failed to dial: %v", err) + } + t.Cleanup(client.Close) + + // Call a method that returns an error. + var result any + err = client.Call(&result, "test_returnError") + if err == nil { + t.Fatal("expected error from test_returnError") + } + + // Flush and verify spans recorded the error. + if err := tracer.ForceFlush(context.Background()); err != nil { + t.Fatalf("failed to flush: %v", err) + } + spans := exporter.GetSpans() + + // Only the runMethod span should have error status. + if len(spans) == 0 { + t.Fatal("no spans were emitted") + } + for _, span := range spans { + switch span.Name { + case "rpc.runMethod": + if span.Status.Code != codes.Error { + t.Errorf("expected %s span status Error, got %v", span.Name, span.Status.Code) + } + default: + if span.Status.Code == codes.Error { + t.Errorf("unexpected error status on span %s", span.Name) + } + } + } +} + // TestTracingBatchHTTP verifies that RPC spans are emitted for batched JSON-RPC calls over HTTP. func TestTracingBatchHTTP(t *testing.T) { t.Parallel() From c50e5edfafe408d911f3cdd2191a6808dc95cb42 Mon Sep 17 00:00:00 2001 From: Jonny Rhea <5555162+jrhea@users.noreply.github.com> Date: Fri, 13 Feb 2026 18:02:10 -0600 Subject: [PATCH 035/161] cmd/geth, internal/telemetry: wire OpenTelemetry tracing via CLI flags (#33484) This PR adds OpenTelemetry tracing configuration to geth via command-line flags. When enabled, geth initializes the global OpenTelemetry TracerProvider and installs standard trace context propagation. When disabled (the default), tracing remains a no-op and behavior is unchanged. Co-authored-by: Felix Lange --- cmd/geth/config.go | 9 +- cmd/geth/main.go | 7 + cmd/keeper/go.mod | 4 +- cmd/keeper/go.sum | 16 +- cmd/utils/flags.go | 71 ++++++++ .../gen_balance_change_reason_stringer.go | 5 +- .../gen_code_change_reason_stringer.go | 5 +- .../gen_nonce_change_reason_stringer.go | 5 +- go.mod | 22 ++- go.sum | 46 +++-- internal/telemetry/tracesetup/setup.go | 162 ++++++++++++++++++ node/config.go | 26 ++- 12 files changed, 337 insertions(+), 41 deletions(-) create mode 100644 internal/telemetry/tracesetup/setup.go diff --git a/cmd/geth/config.go b/cmd/geth/config.go index a420a3e40d..7943d95d65 100644 --- a/cmd/geth/config.go +++ b/cmd/geth/config.go @@ -39,6 +39,7 @@ import ( "github.com/ethereum/go-ethereum/eth/catalyst" "github.com/ethereum/go-ethereum/eth/ethconfig" "github.com/ethereum/go-ethereum/internal/flags" + "github.com/ethereum/go-ethereum/internal/telemetry/tracesetup" "github.com/ethereum/go-ethereum/internal/version" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/metrics" @@ -239,9 +240,15 @@ func makeFullNode(ctx *cli.Context) *node.Node { cfg.Eth.OverrideVerkle = &v } - // Start metrics export if enabled + // Start metrics export if enabled. utils.SetupMetrics(&cfg.Metrics) + // Setup OpenTelemetry reporting if enabled. + if err := tracesetup.SetupTelemetry(cfg.Node.OpenTelemetry, stack); err != nil { + utils.Fatalf("failed to setup OpenTelemetry: %v", err) + } + + // Add Ethereum service. backend, eth := utils.RegisterEthService(stack, &cfg.Eth) // Create gauge with geth system and build information diff --git a/cmd/geth/main.go b/cmd/geth/main.go index 9aabaaba98..2291e0aafa 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -196,6 +196,13 @@ var ( utils.RPCTxSyncDefaultTimeoutFlag, utils.RPCTxSyncMaxTimeoutFlag, utils.RPCGlobalRangeLimitFlag, + utils.RPCTelemetryFlag, + utils.RPCTelemetryEndpointFlag, + utils.RPCTelemetryUserFlag, + utils.RPCTelemetryPasswordFlag, + utils.RPCTelemetryInstanceIDFlag, + utils.RPCTelemetryTagsFlag, + utils.RPCTelemetrySampleRatioFlag, } metricsFlags = []cli.Flag{ diff --git a/cmd/keeper/go.mod b/cmd/keeper/go.mod index cee1ce05a7..c193f4fc2d 100644 --- a/cmd/keeper/go.mod +++ b/cmd/keeper/go.mod @@ -32,8 +32,8 @@ require ( github.com/supranational/blst v0.3.16-0.20250831170142-f48500c1fdbe // indirect github.com/tklauser/go-sysconf v0.3.12 // indirect github.com/tklauser/numcpus v0.6.1 // indirect - golang.org/x/crypto v0.36.0 // indirect - golang.org/x/sync v0.12.0 // indirect + golang.org/x/crypto v0.44.0 // indirect + golang.org/x/sync v0.18.0 // indirect golang.org/x/sys v0.39.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect ) diff --git a/cmd/keeper/go.sum b/cmd/keeper/go.sum index 62f10968e2..e9c081e605 100644 --- a/cmd/keeper/go.sum +++ b/cmd/keeper/go.sum @@ -108,22 +108,22 @@ github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFA github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= -golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= -golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= +golang.org/x/crypto v0.44.0 h1:A97SsFvM3AIwEEmTBiaxPPTYpDC47w720rdiiUvgoAU= +golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc= golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df h1:UA2aFVmmsIlefxMk29Dp2juaUSth8Pyn3Tq5Y5mJGME= golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= -golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= -golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I= +golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk= golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= -golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= -golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= -google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= -google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= +golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= +google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= +google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 6e19766773..3cb365b108 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -1043,6 +1043,49 @@ Please note that --` + MetricsHTTPFlag.Name + ` must be set to start the server. Category: flags.MetricsCategory, } + // RPC Telemetry + RPCTelemetryFlag = &cli.BoolFlag{ + Name: "rpc.telemetry", + Usage: "Enable RPC telemetry", + Category: flags.APICategory, + } + + RPCTelemetryEndpointFlag = &cli.StringFlag{ + Name: "rpc.telemetry.endpoint", + Usage: "Defines where RPC telemetry is sent (e.g., http://localhost:4318)", + Category: flags.APICategory, + } + + RPCTelemetryUserFlag = &cli.StringFlag{ + Name: "rpc.telemetry.username", + Usage: "HTTP Basic Auth username for OpenTelemetry", + Category: flags.APICategory, + } + + RPCTelemetryPasswordFlag = &cli.StringFlag{ + Name: "rpc.telemetry.password", + Usage: "HTTP Basic Auth password for OpenTelemetry", + Category: flags.APICategory, + } + + RPCTelemetryInstanceIDFlag = &cli.StringFlag{ + Name: "rpc.telemetry.instance-id", + Usage: "OpenTelemetry instance ID", + Category: flags.APICategory, + } + + RPCTelemetryTagsFlag = &cli.StringFlag{ + Name: "rpc.telemetry.tags", + Usage: "Comma-separated tags (key/values) added as attributes to the OpenTelemetry resource struct", + Category: flags.APICategory, + } + + RPCTelemetrySampleRatioFlag = &cli.Float64Flag{ + Name: "rpc.telemetry.sample-ratio", + Usage: "Defines the sampling ratio for RPC telemetry (0.0 to 1.0)", + Value: 1.0, + Category: flags.APICategory, + } // Era flags are a group of flags related to the era archive format. EraFormatFlag = &cli.StringFlag{ Name: "era.format", @@ -1438,6 +1481,7 @@ func SetNodeConfig(ctx *cli.Context, cfg *node.Config) { setNodeUserIdent(ctx, cfg) SetDataDir(ctx, cfg) setSmartCard(ctx, cfg) + setOpenTelemetry(ctx, cfg) if ctx.IsSet(JWTSecretFlag.Name) { cfg.JWTSecret = ctx.String(JWTSecretFlag.Name) @@ -1505,6 +1549,33 @@ func setSmartCard(ctx *cli.Context, cfg *node.Config) { cfg.SmartCardDaemonPath = path } +func setOpenTelemetry(ctx *cli.Context, cfg *node.Config) { + tcfg := &cfg.OpenTelemetry + if ctx.IsSet(RPCTelemetryFlag.Name) { + tcfg.Enabled = ctx.Bool(RPCTelemetryFlag.Name) + } + if ctx.IsSet(RPCTelemetryEndpointFlag.Name) { + tcfg.Endpoint = ctx.String(RPCTelemetryEndpointFlag.Name) + } + if ctx.IsSet(RPCTelemetryUserFlag.Name) { + tcfg.AuthUser = ctx.String(RPCTelemetryUserFlag.Name) + } + if ctx.IsSet(RPCTelemetryPasswordFlag.Name) { + tcfg.AuthPassword = ctx.String(RPCTelemetryPasswordFlag.Name) + } + if ctx.IsSet(RPCTelemetryInstanceIDFlag.Name) { + tcfg.InstanceID = ctx.String(RPCTelemetryInstanceIDFlag.Name) + } + if ctx.IsSet(RPCTelemetryTagsFlag.Name) { + tcfg.Tags = ctx.String(RPCTelemetryTagsFlag.Name) + } + tcfg.SampleRatio = ctx.Float64(RPCTelemetrySampleRatioFlag.Name) + + if tcfg.Endpoint != "" && !tcfg.Enabled { + log.Warn(fmt.Sprintf("OpenTelemetry endpoint configured but telemetry is not enabled, use --%s to enable.", RPCTelemetryFlag.Name)) + } +} + func SetDataDir(ctx *cli.Context, cfg *node.Config) { switch { case ctx.IsSet(DataDirFlag.Name): diff --git a/core/tracing/gen_balance_change_reason_stringer.go b/core/tracing/gen_balance_change_reason_stringer.go index 250b521193..f0edfad872 100644 --- a/core/tracing/gen_balance_change_reason_stringer.go +++ b/core/tracing/gen_balance_change_reason_stringer.go @@ -31,8 +31,9 @@ const _BalanceChangeReason_name = "UnspecifiedBalanceIncreaseRewardMineUncleBala var _BalanceChangeReason_index = [...]uint16{0, 11, 41, 71, 96, 125, 160, 181, 205, 231, 256, 264, 276, 303, 330, 361, 367} func (i BalanceChangeReason) String() string { - if i >= BalanceChangeReason(len(_BalanceChangeReason_index)-1) { + idx := int(i) - 0 + if i < 0 || idx >= len(_BalanceChangeReason_index)-1 { return "BalanceChangeReason(" + strconv.FormatInt(int64(i), 10) + ")" } - return _BalanceChangeReason_name[_BalanceChangeReason_index[i]:_BalanceChangeReason_index[i+1]] + return _BalanceChangeReason_name[_BalanceChangeReason_index[idx]:_BalanceChangeReason_index[idx+1]] } diff --git a/core/tracing/gen_code_change_reason_stringer.go b/core/tracing/gen_code_change_reason_stringer.go index 9372954063..2531b10471 100644 --- a/core/tracing/gen_code_change_reason_stringer.go +++ b/core/tracing/gen_code_change_reason_stringer.go @@ -22,8 +22,9 @@ const _CodeChangeReason_name = "UnspecifiedContractCreationGenesisAuthorizationA var _CodeChangeReason_index = [...]uint8{0, 11, 27, 34, 47, 65, 77, 83} func (i CodeChangeReason) String() string { - if i >= CodeChangeReason(len(_CodeChangeReason_index)-1) { + idx := int(i) - 0 + if i < 0 || idx >= len(_CodeChangeReason_index)-1 { return "CodeChangeReason(" + strconv.FormatInt(int64(i), 10) + ")" } - return _CodeChangeReason_name[_CodeChangeReason_index[i]:_CodeChangeReason_index[i+1]] + return _CodeChangeReason_name[_CodeChangeReason_index[idx]:_CodeChangeReason_index[idx+1]] } diff --git a/core/tracing/gen_nonce_change_reason_stringer.go b/core/tracing/gen_nonce_change_reason_stringer.go index cd19200db8..8c9099b7ce 100644 --- a/core/tracing/gen_nonce_change_reason_stringer.go +++ b/core/tracing/gen_nonce_change_reason_stringer.go @@ -23,8 +23,9 @@ const _NonceChangeReason_name = "UnspecifiedGenesisEoACallContractCreatorNewCont var _NonceChangeReason_index = [...]uint8{0, 11, 18, 25, 40, 51, 64, 70, 82} func (i NonceChangeReason) String() string { - if i >= NonceChangeReason(len(_NonceChangeReason_index)-1) { + idx := int(i) - 0 + if i < 0 || idx >= len(_NonceChangeReason_index)-1 { return "NonceChangeReason(" + strconv.FormatInt(int64(i), 10) + ")" } - return _NonceChangeReason_name[_NonceChangeReason_index[i]:_NonceChangeReason_index[i+1]] + return _NonceChangeReason_name[_NonceChangeReason_index[idx]:_NonceChangeReason_index[idx+1]] } diff --git a/go.mod b/go.mod index cd6e4ee63b..e15d29a6c5 100644 --- a/go.mod +++ b/go.mod @@ -62,27 +62,35 @@ require ( github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 github.com/urfave/cli/v2 v2.27.5 go.opentelemetry.io/otel v1.39.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.39.0 go.opentelemetry.io/otel/sdk v1.39.0 go.opentelemetry.io/otel/trace v1.39.0 go.uber.org/automaxprocs v1.5.2 go.uber.org/goleak v1.3.0 - golang.org/x/crypto v0.36.0 + golang.org/x/crypto v0.44.0 golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df - golang.org/x/sync v0.12.0 + golang.org/x/sync v0.18.0 golang.org/x/sys v0.39.0 - golang.org/x/text v0.23.0 + golang.org/x/text v0.31.0 golang.org/x/time v0.9.0 - golang.org/x/tools v0.29.0 - google.golang.org/protobuf v1.34.2 + golang.org/x/tools v0.38.0 + google.golang.org/protobuf v1.36.11 gopkg.in/natefinch/lumberjack.v2 v2.2.1 gopkg.in/yaml.v3 v3.0.1 ) require ( + github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect go.opentelemetry.io/otel/metric v1.39.0 // indirect + go.opentelemetry.io/proto/otlp v1.9.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20251222181119-0a764e51fe1b // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20251222181119-0a764e51fe1b // indirect + google.golang.org/grpc v1.77.0 // indirect ) require ( @@ -153,8 +161,8 @@ require ( github.com/tklauser/go-sysconf v0.3.12 // indirect github.com/tklauser/numcpus v0.6.1 // indirect github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect - golang.org/x/mod v0.22.0 // indirect - golang.org/x/net v0.38.0 // indirect + golang.org/x/mod v0.29.0 // indirect + golang.org/x/net v0.47.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect ) diff --git a/go.sum b/go.sum index dad819e09d..fe2a64eaec 100644 --- a/go.sum +++ b/go.sum @@ -52,6 +52,8 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/bits-and-blooms/bitset v1.20.0 h1:2F+rfL86jE2d/bmw7OhqUg2Sj/1rURkBn3MdfoPyRVU= github.com/bits-and-blooms/bitset v1.20.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= +github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= +github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= @@ -194,6 +196,8 @@ github.com/grafana/pyroscope-go/godeltaprof v0.1.9 h1:c1Us8i6eSmkW+Ez05d3co8kasn github.com/grafana/pyroscope-go/godeltaprof v0.1.9/go.mod h1:2+l7K7twW49Ct4wFluZD3tZ6e0SjanjcUUBPVD/UuGU= github.com/graph-gophers/graphql-go v1.3.0 h1:Eb9x/q6MFpCLz7jBCiP/WTxjSDrYLR1QY41SORZyNJ0= github.com/graph-gophers/graphql-go v1.3.0/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 h1:NmZ1PKzSTQbuGHw9DGPFomqkkLWMC+vZCkfs+FHv1Vg= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3/go.mod h1:zQrxl1YP88HQlA6i9c63DSVPFklWpGX4OWAc9bFuaH4= github.com/hashicorp/go-bexpr v0.1.10 h1:9kuI5PFotCboP3dkDYFr/wi0gg0QVbSNz5oFRpxn4uE= github.com/hashicorp/go-bexpr v0.1.10/go.mod h1:oxlubA2vC/gFVfX1A6JGp7ls7uCDlfJn732ehYYg+g0= github.com/holiman/billy v0.0.0-20250707135307-f2f9b9aae7db h1:IZUYC/xb3giYwBLMnr8d0TGTzPKFGNTCGgGLoyeX330= @@ -378,6 +382,10 @@ go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= go.opentelemetry.io/otel v1.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48= go.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0 h1:f0cb2XPmrqn4XMy9PNliTgRKJgS5WcL/u0/WRYGz4t0= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0/go.mod h1:vnakAaFckOMiMtOIhFI2MNH4FYrZzXCYxmb1LlhoGz8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.39.0 h1:Ckwye2FpXkYgiHX7fyVrN1uA/UYd9ounqqTuSNAv0k4= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.39.0/go.mod h1:teIFJh5pW2y+AN7riv6IBPX2DuesS3HgP39mwOspKwU= go.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0= go.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs= go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18= @@ -386,6 +394,8 @@ go.opentelemetry.io/otel/sdk/metric v1.39.0 h1:cXMVVFVgsIf2YL6QkRF4Urbr/aMInf+2W go.opentelemetry.io/otel/sdk/metric v1.39.0/go.mod h1:xq9HEVH7qeX69/JnwEfp6fVq5wosJsY1mt4lLfYdVew= go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI= go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA= +go.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A= +go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4= go.uber.org/automaxprocs v1.5.2 h1:2LxUOGiR3O6tw8ui5sZa2LAaHnsviZdVOUZw4fvbnME= go.uber.org/automaxprocs v1.5.2/go.mod h1:eRbA25aqJrxAbsLO0xy5jVwPt7FQnRgjW+efnwa1WM0= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= @@ -398,16 +408,16 @@ golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWP golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= -golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= -golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= +golang.org/x/crypto v0.44.0 h1:A97SsFvM3AIwEEmTBiaxPPTYpDC47w720rdiiUvgoAU= +golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc= golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df h1:UA2aFVmmsIlefxMk29Dp2juaUSth8Pyn3Tq5Y5mJGME= golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= -golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= +golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA= +golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -423,8 +433,8 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= -golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8= -golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY= +golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -433,8 +443,8 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= -golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I= +golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -486,8 +496,8 @@ golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= -golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= +golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= +golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= golang.org/x/time v0.0.0-20201208040808-7e3f01d25324/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY= @@ -499,21 +509,29 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.29.0 h1:Xx0h3TtM9rzQpQuR4dKLrdglAmCEN5Oi+P74JdhdzXE= -golang.org/x/tools v0.29.0/go.mod h1:KMQVMRsVxU6nHCFXrBPhDB8XncLNLM0lIy/F14RP588= +golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ= +golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= +gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= +google.golang.org/genproto/googleapis/api v0.0.0-20251222181119-0a764e51fe1b h1:uA40e2M6fYRBf0+8uN5mLlqUtV192iiksiICIBkYJ1E= +google.golang.org/genproto/googleapis/api v0.0.0-20251222181119-0a764e51fe1b/go.mod h1:Xa7le7qx2vmqB/SzWUBa7KdMjpdpAHlh5QCSnjessQk= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251222181119-0a764e51fe1b h1:Mv8VFug0MP9e5vUxfBcE3vUkV6CImK3cMNMIDFjmzxU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20251222181119-0a764e51fe1b/go.mod h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ= +google.golang.org/grpc v1.77.0 h1:wVVY6/8cGA6vvffn+wWK5ToddbgdU3d8MNENr4evgXM= +google.golang.org/grpc v1.77.0/go.mod h1:z0BY1iVj0q8E1uSQCjL9cppRj+gnZjzDnzV0dHhrNig= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= -google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= +google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= diff --git a/internal/telemetry/tracesetup/setup.go b/internal/telemetry/tracesetup/setup.go new file mode 100644 index 0000000000..9637ca1a9b --- /dev/null +++ b/internal/telemetry/tracesetup/setup.go @@ -0,0 +1,162 @@ +// Copyright 2026 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package tracesetup + +import ( + "context" + "encoding/base64" + "fmt" + "net/url" + "strings" + "time" + + "github.com/ethereum/go-ethereum/internal/version" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/node" + "go.opentelemetry.io/otel" + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/exporters/otlp/otlptrace" + "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp" + "go.opentelemetry.io/otel/propagation" + "go.opentelemetry.io/otel/sdk/resource" + sdktrace "go.opentelemetry.io/otel/sdk/trace" + semconv "go.opentelemetry.io/otel/semconv/v1.38.0" +) + +const startStopTimeout = 10 * time.Second + +// Service wraps the provider to implement node.Lifecycle. +type Service struct { + endpoint string + exporter *otlptrace.Exporter + provider *sdktrace.TracerProvider +} + +// Start implements node.Lifecycle. +func (t *Service) Start() error { + ctx, cancel := context.WithTimeout(context.Background(), startStopTimeout) + defer cancel() + if err := t.exporter.Start(ctx); err != nil { + log.Error("OpenTelemetry exporter didn't start", "endpoint", t.endpoint, "err", err) + return err + } + log.Info("OpenTelemetry trace export enabled", "endpoint", t.endpoint) + return nil +} + +// Stop implements node.Lifecycle. +func (t *Service) Stop() error { + ctx, cancel := context.WithTimeout(context.Background(), startStopTimeout) + defer cancel() + if err := t.provider.Shutdown(ctx); err != nil { + log.Error("Failed to stop OpenTelemetry service", "err", err) + return err + } + log.Debug("OpenTelemetry stopped") + return nil +} + +// SetupTelemetry initializes telemetry with the given parameters. +func SetupTelemetry(cfg node.OpenTelemetryConfig, stack *node.Node) error { + if !cfg.Enabled { + return nil + } + if cfg.SampleRatio < 0 || cfg.SampleRatio > 1 { + return fmt.Errorf("invalid sample ratio: %f", cfg.SampleRatio) + } + // Create exporter based on endpoint URL + u, err := url.Parse(cfg.Endpoint) + if err != nil { + return fmt.Errorf("invalid rpc tracing endpoint URL: %w", err) + } + var exporter *otlptrace.Exporter + switch u.Scheme { + case "http", "https": + opts := []otlptracehttp.Option{ + otlptracehttp.WithEndpoint(u.Host), + } + if u.Scheme == "http" { + opts = append(opts, otlptracehttp.WithInsecure()) + } + if u.Path != "" && u.Path != "/" { + opts = append(opts, otlptracehttp.WithURLPath(u.Path)) + } + if cfg.AuthUser != "" { + opts = append(opts, otlptracehttp.WithHeaders(map[string]string{ + "Authorization": "Basic " + base64.StdEncoding.EncodeToString([]byte(cfg.AuthUser+":"+cfg.AuthPassword)), + })) + } + exporter = otlptracehttp.NewUnstarted(opts...) + default: + return fmt.Errorf("unsupported telemetry url scheme: %s", u.Scheme) + } + + // Define sampler such that if no parent span is available, + // then sampleRatio of traces are sampled; otherwise, inherit + // the parent's sampling decision. + sampler := sdktrace.ParentBased(sdktrace.TraceIDRatioBased(cfg.SampleRatio)) + + // Define batch span processor options + batchOpts := []sdktrace.BatchSpanProcessorOption{ + // The maximum number of spans that can be queued before dropping + sdktrace.WithMaxQueueSize(sdktrace.DefaultMaxExportBatchSize), + // The maximum number of spans to export in a single batch + sdktrace.WithMaxExportBatchSize(sdktrace.DefaultMaxExportBatchSize), + // How long an export operation can take before timing out + sdktrace.WithExportTimeout(time.Duration(sdktrace.DefaultExportTimeout) * time.Millisecond), + // How often to export, even if the batch isn't full + sdktrace.WithBatchTimeout(time.Duration(sdktrace.DefaultScheduleDelay) * time.Millisecond), + } + + // Define resource attributes + var attr = []attribute.KeyValue{ + semconv.ServiceName("geth"), + attribute.String("client.name", version.ClientName("geth")), + } + // Add instance ID if provided + if cfg.InstanceID != "" { + attr = append(attr, semconv.ServiceInstanceID(cfg.InstanceID)) + } + // Add custom tags if provided + if cfg.Tags != "" { + for tag := range strings.SplitSeq(cfg.Tags, ",") { + key, value, ok := strings.Cut(tag, "=") + if ok { + attr = append(attr, attribute.String(key, value)) + } + } + } + res := resource.NewWithAttributes(semconv.SchemaURL, attr...) + + // Configure TracerProvider and set it as the global tracer provider + tp := sdktrace.NewTracerProvider( + sdktrace.WithSampler(sampler), + sdktrace.WithBatcher(exporter, batchOpts...), + sdktrace.WithResource(res), + ) + otel.SetTracerProvider(tp) + + // Set global propagator for context propagation + // Note: This is needed for distributed tracing + otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator( + propagation.TraceContext{}, + propagation.Baggage{}, + )) + service := &Service{endpoint: cfg.Endpoint, exporter: exporter, provider: tp} + stack.RegisterLifecycle(service) + return nil +} diff --git a/node/config.go b/node/config.go index dc436876cc..255b0f0aa9 100644 --- a/node/config.go +++ b/node/config.go @@ -191,9 +191,7 @@ type Config struct { GraphQLVirtualHosts []string `toml:",omitempty"` // Logger is a custom logger to use with the p2p.Server. - Logger log.Logger `toml:",omitempty"` - - oldGethResourceWarning bool + Logger log.Logger `toml:"-,omitempty"` // AllowUnprotectedTxs allows non EIP-155 protected transactions to be send over RPC. AllowUnprotectedTxs bool `toml:",omitempty"` @@ -210,7 +208,29 @@ type Config struct { // EnablePersonal enables the deprecated personal namespace. EnablePersonal bool `toml:"-"` + // Configures database engine used by the node. DBEngine string `toml:",omitempty"` + + // Configures OpenTelemetry reporting. + OpenTelemetry OpenTelemetryConfig `toml:",omitempty"` + + oldGethResourceWarning bool +} + +// OpenTelemetryConfig has settings for +type OpenTelemetryConfig struct { + Enabled bool `toml:",omitempty"` + + Tags string `toml:",omitempty"` + InstanceID string `toml:",omitempty"` + + // Exporter endpoint. + Endpoint string `toml:",omitempty"` + AuthUser string `toml:",omitempty"` + AuthPassword string `toml:",omitempty"` + + // Percentage of sampled traces. + SampleRatio float64 `toml:",omitempty"` } // IPCEndpoint resolves an IPC endpoint based on a configured value, taking into From ad88b68a467b6b3cb9d6a8a24f0ec74e8aa77565 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Sat, 14 Feb 2026 08:00:03 +0100 Subject: [PATCH 036/161] internal/download: show progress bar only if server gives length (#33842) Fixes this: https://ci.appveyor.com/project/ethereum/go-ethereum/builds/53538177/job/ptosr48pvvwkjskb#L43 --- internal/download/download.go | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/internal/download/download.go b/internal/download/download.go index 26c7795ce5..c59c8a90c3 100644 --- a/internal/download/download.go +++ b/internal/download/download.go @@ -205,7 +205,10 @@ func (db *ChecksumDB) DownloadFile(url, dstPath string) error { if err != nil { return err } - dst := newDownloadWriter(fd, resp.ContentLength) + var dst io.WriteCloser = fd + if resp.ContentLength > 0 { + dst = newDownloadWriter(fd, resp.ContentLength) + } _, err = io.Copy(dst, resp.Body) dst.Close() if err != nil { From 0cba803fbafb12e9daaea53b76de847842ab3055 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Sun, 15 Feb 2026 14:21:16 +0100 Subject: [PATCH 037/161] eth/protocols/eth, eth/protocols/snap: delayed p2p message decoding (#33835) This changes the p2p protocol handlers to delay message decoding. It's the first part of a larger change that will delay decoding all the way through message processing. For responses, we delay the decoding until it is confirmed that the response matches an active request and does not exceed its limits. In order to make this work, all messages have been changed to use rlp.RawList instead of a slice of the decoded item type. For block bodies specifically, the decoding has been delayed all the way until after verification of the response hash. The role of p2p/tracker.Tracker changes significantly in this PR. The Tracker's original purpose was to maintain metrics about requests and responses in the peer-to-peer protocols. Each protocol maintained a single global Tracker instance. As of this change, the Tracker is now always active (regardless of metrics collection), and there is a separate instance of it for each peer. Whenever a response arrives, it is first verified that a request exists for it in the tracker. The tracker is also the place where limits are kept. --- cmd/devp2p/internal/ethtest/protocol.go | 6 - cmd/devp2p/internal/ethtest/snap.go | 7 +- cmd/devp2p/internal/ethtest/suite.go | 95 ++++---- cmd/devp2p/internal/ethtest/transaction.go | 17 +- eth/downloader/downloader_test.go | 41 ++-- eth/downloader/fetchers_concurrent_bodies.go | 11 +- eth/downloader/queue.go | 67 +++--- eth/downloader/queue_test.go | 25 ++- eth/handler_eth.go | 59 +++-- eth/handler_eth_test.go | 14 +- eth/protocols/eth/dispatcher.go | 35 ++- eth/protocols/eth/handler_test.go | 92 ++++++-- eth/protocols/eth/handlers.go | 212 ++++++++++++------ eth/protocols/eth/peer.go | 70 +++--- eth/protocols/eth/protocol.go | 49 ++--- eth/protocols/eth/protocol_test.go | 36 +-- eth/protocols/eth/receipt.go | 217 +++++++++---------- eth/protocols/eth/receipt_test.go | 26 ++- eth/protocols/snap/handler.go | 153 ++++++++++--- eth/protocols/snap/peer.go | 73 +++++-- eth/protocols/snap/protocol.go | 30 ++- eth/protocols/snap/sync.go | 14 +- eth/protocols/snap/sync_test.go | 76 +++---- eth/protocols/snap/tracker.go | 26 --- p2p/tracker/tracker.go | 197 +++++++++++------ p2p/tracker/tracker_test.go | 64 ++++++ 26 files changed, 1105 insertions(+), 607 deletions(-) delete mode 100644 eth/protocols/snap/tracker.go create mode 100644 p2p/tracker/tracker_test.go diff --git a/cmd/devp2p/internal/ethtest/protocol.go b/cmd/devp2p/internal/ethtest/protocol.go index af76082318..a21d1ca7a1 100644 --- a/cmd/devp2p/internal/ethtest/protocol.go +++ b/cmd/devp2p/internal/ethtest/protocol.go @@ -86,9 +86,3 @@ func protoOffset(proto Proto) uint64 { panic("unhandled protocol") } } - -// msgTypePtr is the constraint for protocol message types. -type msgTypePtr[U any] interface { - *U - Kind() byte -} diff --git a/cmd/devp2p/internal/ethtest/snap.go b/cmd/devp2p/internal/ethtest/snap.go index f4fce0931f..7c1ca70cc0 100644 --- a/cmd/devp2p/internal/ethtest/snap.go +++ b/cmd/devp2p/internal/ethtest/snap.go @@ -30,6 +30,7 @@ import ( "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/eth/protocols/snap" "github.com/ethereum/go-ethereum/internal/utesting" + "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/trie" "github.com/ethereum/go-ethereum/trie/trienode" ) @@ -937,10 +938,14 @@ func (s *Suite) snapGetTrieNodes(t *utesting.T, tc *trieNodesTest) error { } // write0 request + paths, err := rlp.EncodeToRawList(tc.paths) + if err != nil { + panic(err) + } req := &snap.GetTrieNodesPacket{ ID: uint64(rand.Int63()), Root: tc.root, - Paths: tc.paths, + Paths: paths, Bytes: tc.nBytes, } msg, err := conn.snapRequest(snap.GetTrieNodesMsg, req) diff --git a/cmd/devp2p/internal/ethtest/suite.go b/cmd/devp2p/internal/ethtest/suite.go index c23360bf82..8bb488e358 100644 --- a/cmd/devp2p/internal/ethtest/suite.go +++ b/cmd/devp2p/internal/ethtest/suite.go @@ -34,6 +34,7 @@ import ( "github.com/ethereum/go-ethereum/internal/utesting" "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/rlp" "github.com/holiman/uint256" ) @@ -151,7 +152,11 @@ func (s *Suite) TestGetBlockHeaders(t *utesting.T) { if err != nil { t.Fatalf("failed to get headers for given request: %v", err) } - if !headersMatch(expected, headers.BlockHeadersRequest) { + received, err := headers.List.Items() + if err != nil { + t.Fatalf("invalid headers received: %v", err) + } + if !headersMatch(expected, received) { t.Fatalf("header mismatch: \nexpected %v \ngot %v", expected, headers) } } @@ -237,7 +242,7 @@ concurrently, with different request IDs.`) // Wait for responses. // Note they can arrive in either order. - resp, err := collectResponses(conn, 2, func(msg *eth.BlockHeadersPacket) uint64 { + resp, err := collectHeaderResponses(conn, 2, func(msg *eth.BlockHeadersPacket) uint64 { if msg.RequestId != 111 && msg.RequestId != 222 { t.Fatalf("response with unknown request ID: %v", msg.RequestId) } @@ -248,17 +253,11 @@ concurrently, with different request IDs.`) } // Check if headers match. - resp1 := resp[111] - if expected, err := s.chain.GetHeaders(req1); err != nil { - t.Fatalf("failed to get expected headers for request 1: %v", err) - } else if !headersMatch(expected, resp1.BlockHeadersRequest) { - t.Fatalf("header mismatch for request ID %v: \nexpected %v \ngot %v", 111, expected, resp1) + if err := s.checkHeadersAgainstChain(req1, resp[111]); err != nil { + t.Fatal(err) } - resp2 := resp[222] - if expected, err := s.chain.GetHeaders(req2); err != nil { - t.Fatalf("failed to get expected headers for request 2: %v", err) - } else if !headersMatch(expected, resp2.BlockHeadersRequest) { - t.Fatalf("header mismatch for request ID %v: \nexpected %v \ngot %v", 222, expected, resp2) + if err := s.checkHeadersAgainstChain(req2, resp[222]); err != nil { + t.Fatal(err) } } @@ -303,8 +302,8 @@ same request ID. The node should handle the request by responding to both reques // Wait for the responses. They can arrive in either order, and we can't tell them // apart by their request ID, so use the number of headers instead. - resp, err := collectResponses(conn, 2, func(msg *eth.BlockHeadersPacket) uint64 { - id := uint64(len(msg.BlockHeadersRequest)) + resp, err := collectHeaderResponses(conn, 2, func(msg *eth.BlockHeadersPacket) uint64 { + id := uint64(msg.List.Len()) if id != 2 && id != 3 { t.Fatalf("invalid number of headers in response: %d", id) } @@ -315,26 +314,35 @@ same request ID. The node should handle the request by responding to both reques } // Check if headers match. - resp1 := resp[2] - if expected, err := s.chain.GetHeaders(request1); err != nil { - t.Fatalf("failed to get expected headers for request 1: %v", err) - } else if !headersMatch(expected, resp1.BlockHeadersRequest) { - t.Fatalf("headers mismatch: \nexpected %v \ngot %v", expected, resp1) + if err := s.checkHeadersAgainstChain(request1, resp[2]); err != nil { + t.Fatal(err) } - resp2 := resp[3] - if expected, err := s.chain.GetHeaders(request2); err != nil { - t.Fatalf("failed to get expected headers for request 2: %v", err) - } else if !headersMatch(expected, resp2.BlockHeadersRequest) { - t.Fatalf("headers mismatch: \nexpected %v \ngot %v", expected, resp2) + if err := s.checkHeadersAgainstChain(request2, resp[3]); err != nil { + t.Fatal(err) } } +func (s *Suite) checkHeadersAgainstChain(req *eth.GetBlockHeadersPacket, resp *eth.BlockHeadersPacket) error { + received2, err := resp.List.Items() + if err != nil { + return fmt.Errorf("invalid headers in response with request ID %v (%d items): %v", resp.RequestId, resp.List.Len(), err) + } + if expected, err := s.chain.GetHeaders(req); err != nil { + return fmt.Errorf("test chain failed to get expected headers for request: %v", err) + } else if !headersMatch(expected, received2) { + return fmt.Errorf("header mismatch for request ID %v (%d items): \nexpected %v \ngot %v", resp.RequestId, resp.List.Len(), expected, resp) + } + return nil +} + // collectResponses waits for n messages of type T on the given connection. // The messsages are collected according to the 'identity' function. -func collectResponses[T any, P msgTypePtr[T]](conn *Conn, n int, identity func(P) uint64) (map[uint64]P, error) { - resp := make(map[uint64]P, n) +// +// This function is written in a generic way to handle +func collectHeaderResponses(conn *Conn, n int, identity func(*eth.BlockHeadersPacket) uint64) (map[uint64]*eth.BlockHeadersPacket, error) { + resp := make(map[uint64]*eth.BlockHeadersPacket, n) for range n { - r := new(T) + r := new(eth.BlockHeadersPacket) if err := conn.ReadMsg(ethProto, eth.BlockHeadersMsg, r); err != nil { return resp, fmt.Errorf("read error: %v", err) } @@ -373,10 +381,8 @@ and expects a response.`) if got, want := headers.RequestId, req.RequestId; got != want { t.Fatalf("unexpected request id") } - if expected, err := s.chain.GetHeaders(req); err != nil { - t.Fatalf("failed to get expected block headers: %v", err) - } else if !headersMatch(expected, headers.BlockHeadersRequest) { - t.Fatalf("header mismatch: \nexpected %v \ngot %v", expected, headers) + if err := s.checkHeadersAgainstChain(req, headers); err != nil { + t.Fatal(err) } } @@ -407,9 +413,8 @@ func (s *Suite) TestGetBlockBodies(t *utesting.T) { if got, want := resp.RequestId, req.RequestId; got != want { t.Fatalf("unexpected request id in respond", got, want) } - bodies := resp.BlockBodiesResponse - if len(bodies) != len(req.GetBlockBodiesRequest) { - t.Fatalf("wrong bodies in response: expected %d bodies, got %d", len(req.GetBlockBodiesRequest), len(bodies)) + if resp.List.Len() != len(req.GetBlockBodiesRequest) { + t.Fatalf("wrong bodies in response: expected %d bodies, got %d", len(req.GetBlockBodiesRequest), resp.List.Len()) } } @@ -433,7 +438,7 @@ func (s *Suite) TestGetReceipts(t *utesting.T) { } } - // Create block bodies request. + // Create receipts request. req := ð.GetReceiptsPacket{ RequestId: 66, GetReceiptsRequest: (eth.GetReceiptsRequest)(hashes), @@ -449,8 +454,8 @@ func (s *Suite) TestGetReceipts(t *utesting.T) { if got, want := resp.RequestId, req.RequestId; got != want { t.Fatalf("unexpected request id in respond", got, want) } - if len(resp.List) != len(req.GetReceiptsRequest) { - t.Fatalf("wrong bodies in response: expected %d bodies, got %d", len(req.GetReceiptsRequest), len(resp.List)) + if resp.List.Len() != len(req.GetReceiptsRequest) { + t.Fatalf("wrong receipts in response: expected %d receipts, got %d", len(req.GetReceiptsRequest), resp.List.Len()) } } @@ -804,7 +809,11 @@ on another peer connection using GetPooledTransactions.`) if got, want := msg.RequestId, req.RequestId; got != want { t.Fatalf("unexpected request id in response: got %d, want %d", got, want) } - for _, got := range msg.PooledTransactionsResponse { + responseTxs, err := msg.List.Items() + if err != nil { + t.Fatalf("invalid transactions in response: %v", err) + } + for _, got := range responseTxs { if _, exists := set[got.Hash()]; !exists { t.Fatalf("unexpected tx received: %v", got.Hash()) } @@ -976,7 +985,9 @@ func (s *Suite) TestBlobViolations(t *utesting.T) { if err := conn.ReadMsg(ethProto, eth.GetPooledTransactionsMsg, req); err != nil { t.Fatalf("reading pooled tx request failed: %v", err) } - resp := eth.PooledTransactionsPacket{RequestId: req.RequestId, PooledTransactionsResponse: test.resp} + + encTxs, _ := rlp.EncodeToRawList(test.resp) + resp := eth.PooledTransactionsPacket{RequestId: req.RequestId, List: encTxs} if err := conn.Write(ethProto, eth.PooledTransactionsMsg, resp); err != nil { t.Fatalf("writing pooled tx response failed: %v", err) } @@ -1104,7 +1115,8 @@ func (s *Suite) testBadBlobTx(t *utesting.T, tx *types.Transaction, badTx *types // the good peer is connected, and has announced the tx. // proceed to send the incorrect one from the bad peer. - resp := eth.PooledTransactionsPacket{RequestId: req.RequestId, PooledTransactionsResponse: eth.PooledTransactionsResponse(types.Transactions{badTx})} + encTxs, _ := rlp.EncodeToRawList([]*types.Transaction{badTx}) + resp := eth.PooledTransactionsPacket{RequestId: req.RequestId, List: encTxs} if err := conn.Write(ethProto, eth.PooledTransactionsMsg, resp); err != nil { errc <- fmt.Errorf("writing pooled tx response failed: %v", err) return @@ -1164,7 +1176,8 @@ func (s *Suite) testBadBlobTx(t *utesting.T, tx *types.Transaction, badTx *types return } - resp := eth.PooledTransactionsPacket{RequestId: req.RequestId, PooledTransactionsResponse: eth.PooledTransactionsResponse(types.Transactions{tx})} + encTxs, _ := rlp.EncodeToRawList([]*types.Transaction{tx}) + resp := eth.PooledTransactionsPacket{RequestId: req.RequestId, List: encTxs} if err := conn.Write(ethProto, eth.PooledTransactionsMsg, resp); err != nil { errc <- fmt.Errorf("writing pooled tx response failed: %v", err) return diff --git a/cmd/devp2p/internal/ethtest/transaction.go b/cmd/devp2p/internal/ethtest/transaction.go index cbbbbce8d9..8ce26f3e1a 100644 --- a/cmd/devp2p/internal/ethtest/transaction.go +++ b/cmd/devp2p/internal/ethtest/transaction.go @@ -26,6 +26,7 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/eth/protocols/eth" "github.com/ethereum/go-ethereum/internal/utesting" + "github.com/ethereum/go-ethereum/rlp" ) // sendTxs sends the given transactions to the node and @@ -51,7 +52,8 @@ func (s *Suite) sendTxs(t *utesting.T, txs []*types.Transaction) error { return fmt.Errorf("peering failed: %v", err) } - if err = sendConn.Write(ethProto, eth.TransactionsMsg, eth.TransactionsPacket(txs)); err != nil { + encTxs, _ := rlp.EncodeToRawList(txs) + if err = sendConn.Write(ethProto, eth.TransactionsMsg, eth.TransactionsPacket{RawList: encTxs}); err != nil { return fmt.Errorf("failed to write message to connection: %v", err) } @@ -68,7 +70,8 @@ func (s *Suite) sendTxs(t *utesting.T, txs []*types.Transaction) error { } switch msg := msg.(type) { case *eth.TransactionsPacket: - for _, tx := range *msg { + txs, _ := msg.Items() + for _, tx := range txs { got[tx.Hash()] = true } case *eth.NewPooledTransactionHashesPacket: @@ -80,9 +83,10 @@ func (s *Suite) sendTxs(t *utesting.T, txs []*types.Transaction) error { if err != nil { t.Logf("invalid GetBlockHeaders request: %v", err) } + encHeaders, _ := rlp.EncodeToRawList(headers) recvConn.Write(ethProto, eth.BlockHeadersMsg, ð.BlockHeadersPacket{ - RequestId: msg.RequestId, - BlockHeadersRequest: headers, + RequestId: msg.RequestId, + List: encHeaders, }) default: return fmt.Errorf("unexpected eth wire msg: %s", pretty.Sdump(msg)) @@ -167,9 +171,10 @@ func (s *Suite) sendInvalidTxs(t *utesting.T, txs []*types.Transaction) error { if err != nil { t.Logf("invalid GetBlockHeaders request: %v", err) } + encHeaders, _ := rlp.EncodeToRawList(headers) recvConn.Write(ethProto, eth.BlockHeadersMsg, ð.BlockHeadersPacket{ - RequestId: msg.RequestId, - BlockHeadersRequest: headers, + RequestId: msg.RequestId, + List: encHeaders, }) default: return fmt.Errorf("unexpected eth message: %v", pretty.Sdump(msg)) diff --git a/eth/downloader/downloader_test.go b/eth/downloader/downloader_test.go index 7fa2522a3d..e5d4a7c59b 100644 --- a/eth/downloader/downloader_test.go +++ b/eth/downloader/downloader_test.go @@ -214,10 +214,12 @@ func (dlp *downloadTesterPeer) RequestHeadersByNumber(origin uint64, amount int, func (dlp *downloadTesterPeer) RequestBodies(hashes []common.Hash, sink chan *eth.Response) (*eth.Request, error) { blobs := eth.ServiceGetBlockBodiesQuery(dlp.chain, hashes) - bodies := make([]*eth.BlockBody, len(blobs)) + bodies := make([]*types.Body, len(blobs)) + ethbodies := make([]eth.BlockBody, len(blobs)) for i, blob := range blobs { - bodies[i] = new(eth.BlockBody) + bodies[i] = new(types.Body) rlp.DecodeBytes(blob, bodies[i]) + rlp.DecodeBytes(blob, ðbodies[i]) } var ( txsHashes = make([]common.Hash, len(bodies)) @@ -239,9 +241,13 @@ func (dlp *downloadTesterPeer) RequestBodies(hashes []common.Hash, sink chan *et Peer: dlp.id, } res := ð.Response{ - Req: req, - Res: (*eth.BlockBodiesResponse)(&bodies), - Meta: [][]common.Hash{txsHashes, uncleHashes, withdrawalHashes}, + Req: req, + Res: (*eth.BlockBodiesResponse)(ðbodies), + Meta: eth.BlockBodyHashes{ + TransactionRoots: txsHashes, + UncleHashes: uncleHashes, + WithdrawalRoots: withdrawalHashes, + }, Time: 1, Done: make(chan error, 1), // Ignore the returned status } @@ -290,14 +296,14 @@ func (dlp *downloadTesterPeer) ID() string { // RequestAccountRange fetches a batch of accounts rooted in a specific account // trie, starting with the origin. -func (dlp *downloadTesterPeer) RequestAccountRange(id uint64, root, origin, limit common.Hash, bytes uint64) error { +func (dlp *downloadTesterPeer) RequestAccountRange(id uint64, root, origin, limit common.Hash, bytes int) error { // Create the request and service it req := &snap.GetAccountRangePacket{ ID: id, Root: root, Origin: origin, Limit: limit, - Bytes: bytes, + Bytes: uint64(bytes), } slimaccs, proofs := snap.ServiceGetAccountRangeQuery(dlp.chain, req) @@ -316,7 +322,7 @@ func (dlp *downloadTesterPeer) RequestAccountRange(id uint64, root, origin, limi // RequestStorageRanges fetches a batch of storage slots belonging to one or // more accounts. If slots from only one account is requested, an origin marker // may also be used to retrieve from there. -func (dlp *downloadTesterPeer) RequestStorageRanges(id uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, bytes uint64) error { +func (dlp *downloadTesterPeer) RequestStorageRanges(id uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, bytes int) error { // Create the request and service it req := &snap.GetStorageRangesPacket{ ID: id, @@ -324,7 +330,7 @@ func (dlp *downloadTesterPeer) RequestStorageRanges(id uint64, root common.Hash, Root: root, Origin: origin, Limit: limit, - Bytes: bytes, + Bytes: uint64(bytes), } storage, proofs := snap.ServiceGetStorageRangesQuery(dlp.chain, req) @@ -341,25 +347,28 @@ func (dlp *downloadTesterPeer) RequestStorageRanges(id uint64, root common.Hash, } // RequestByteCodes fetches a batch of bytecodes by hash. -func (dlp *downloadTesterPeer) RequestByteCodes(id uint64, hashes []common.Hash, bytes uint64) error { +func (dlp *downloadTesterPeer) RequestByteCodes(id uint64, hashes []common.Hash, bytes int) error { req := &snap.GetByteCodesPacket{ ID: id, Hashes: hashes, - Bytes: bytes, + Bytes: uint64(bytes), } codes := snap.ServiceGetByteCodesQuery(dlp.chain, req) go dlp.dl.downloader.SnapSyncer.OnByteCodes(dlp, id, codes) return nil } -// RequestTrieNodes fetches a batch of account or storage trie nodes rooted in -// a specific state trie. -func (dlp *downloadTesterPeer) RequestTrieNodes(id uint64, root common.Hash, paths []snap.TrieNodePathSet, bytes uint64) error { +// RequestTrieNodes fetches a batch of account or storage trie nodes. +func (dlp *downloadTesterPeer) RequestTrieNodes(id uint64, root common.Hash, count int, paths []snap.TrieNodePathSet, bytes int) error { + encPaths, err := rlp.EncodeToRawList(paths) + if err != nil { + panic(err) + } req := &snap.GetTrieNodesPacket{ ID: id, Root: root, - Paths: paths, - Bytes: bytes, + Paths: encPaths, + Bytes: uint64(bytes), } nodes, _ := snap.ServiceGetTrieNodesQuery(dlp.chain, req, time.Now()) go dlp.dl.downloader.SnapSyncer.OnTrieNodes(dlp, id, nodes) diff --git a/eth/downloader/fetchers_concurrent_bodies.go b/eth/downloader/fetchers_concurrent_bodies.go index 56359b33c9..6a8eb35219 100644 --- a/eth/downloader/fetchers_concurrent_bodies.go +++ b/eth/downloader/fetchers_concurrent_bodies.go @@ -88,15 +88,14 @@ func (q *bodyQueue) request(peer *peerConnection, req *fetchRequest, resCh chan // deliver is responsible for taking a generic response packet from the concurrent // fetcher, unpacking the body data and delivering it to the downloader's queue. func (q *bodyQueue) deliver(peer *peerConnection, packet *eth.Response) (int, error) { - txs, uncles, withdrawals := packet.Res.(*eth.BlockBodiesResponse).Unpack() - hashsets := packet.Meta.([][]common.Hash) // {txs hashes, uncle hashes, withdrawal hashes} - - accepted, err := q.queue.DeliverBodies(peer.id, txs, hashsets[0], uncles, hashsets[1], withdrawals, hashsets[2]) + resp := packet.Res.(*eth.BlockBodiesResponse) + meta := packet.Meta.(eth.BlockBodyHashes) + accepted, err := q.queue.DeliverBodies(peer.id, meta, *resp) switch { - case err == nil && len(txs) == 0: + case err == nil && len(*resp) == 0: peer.log.Trace("Requested bodies delivered") case err == nil: - peer.log.Trace("Delivered new batch of bodies", "count", len(txs), "accepted", accepted) + peer.log.Trace("Delivered new batch of bodies", "count", len(*resp), "accepted", accepted) default: peer.log.Debug("Failed to deliver retrieved bodies", "err", err) } diff --git a/eth/downloader/queue.go b/eth/downloader/queue.go index 76a14345e5..c0cb9b174a 100644 --- a/eth/downloader/queue.go +++ b/eth/downloader/queue.go @@ -29,11 +29,10 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/prque" "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/crypto/kzg4844" "github.com/ethereum/go-ethereum/eth/ethconfig" + "github.com/ethereum/go-ethereum/eth/protocols/eth" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/metrics" - "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" ) @@ -559,63 +558,54 @@ func (q *queue) expire(peer string, pendPool map[string]*fetchRequest, taskQueue // DeliverBodies injects a block body retrieval response into the results queue. // The method returns the number of blocks bodies accepted from the delivery and // also wakes any threads waiting for data delivery. -func (q *queue) DeliverBodies(id string, txLists [][]*types.Transaction, txListHashes []common.Hash, - uncleLists [][]*types.Header, uncleListHashes []common.Hash, - withdrawalLists [][]*types.Withdrawal, withdrawalListHashes []common.Hash, -) (int, error) { +func (q *queue) DeliverBodies(id string, hashes eth.BlockBodyHashes, bodies []eth.BlockBody) (int, error) { q.lock.Lock() defer q.lock.Unlock() + var txLists [][]*types.Transaction + var uncleLists [][]*types.Header + var withdrawalLists [][]*types.Withdrawal + validate := func(index int, header *types.Header) error { - if txListHashes[index] != header.TxHash { + if hashes.TransactionRoots[index] != header.TxHash { return errInvalidBody } - if uncleListHashes[index] != header.UncleHash { + if hashes.UncleHashes[index] != header.UncleHash { return errInvalidBody } if header.WithdrawalsHash == nil { // nil hash means that withdrawals should not be present in body - if withdrawalLists[index] != nil { + if bodies[index].Withdrawals != nil { return errInvalidBody } } else { // non-nil hash: body must have withdrawals - if withdrawalLists[index] == nil { + if bodies[index].Withdrawals == nil { return errInvalidBody } - if withdrawalListHashes[index] != *header.WithdrawalsHash { + if hashes.WithdrawalRoots[index] != *header.WithdrawalsHash { return errInvalidBody } } - // Blocks must have a number of blobs corresponding to the header gas usage, - // and zero before the Cancun hardfork. - var blobs int - for _, tx := range txLists[index] { - // Count the number of blobs to validate against the header's blobGasUsed - blobs += len(tx.BlobHashes()) - // Validate the data blobs individually too - if tx.Type() == types.BlobTxType { - if len(tx.BlobHashes()) == 0 { - return errInvalidBody - } - for _, hash := range tx.BlobHashes() { - if !kzg4844.IsValidVersionedHash(hash[:]) { - return errInvalidBody - } - } - if tx.BlobTxSidecar() != nil { - return errInvalidBody - } - } + // decode + txs, err := bodies[index].Transactions.Items() + if err != nil { + return fmt.Errorf("%w: bad transactions: %v", errInvalidBody, err) } - if header.BlobGasUsed != nil { - if want := *header.BlobGasUsed / params.BlobTxBlobGasPerBlob; uint64(blobs) != want { // div because the header is surely good vs the body might be bloated - return errInvalidBody + txLists = append(txLists, txs) + uncles, err := bodies[index].Uncles.Items() + if err != nil { + return fmt.Errorf("%w: bad uncles: %v", errInvalidBody, err) + } + uncleLists = append(uncleLists, uncles) + if bodies[index].Withdrawals != nil { + withdrawals, err := bodies[index].Withdrawals.Items() + if err != nil { + return fmt.Errorf("%w: bad withdrawals: %v", errInvalidBody, err) } + withdrawalLists = append(withdrawalLists, withdrawals) } else { - if blobs != 0 { - return errInvalidBody - } + withdrawalLists = append(withdrawalLists, nil) } return nil } @@ -626,8 +616,9 @@ func (q *queue) DeliverBodies(id string, txLists [][]*types.Transaction, txListH result.Withdrawals = withdrawalLists[index] result.SetBodyDone() } + nresults := len(hashes.TransactionRoots) return q.deliver(id, q.blockTaskPool, q.blockTaskQueue, q.blockPendPool, - bodyReqTimer, bodyInMeter, bodyDropMeter, len(txLists), validate, reconstruct) + bodyReqTimer, bodyInMeter, bodyDropMeter, nresults, validate, reconstruct) } // DeliverReceipts injects a receipt retrieval response into the results queue. diff --git a/eth/downloader/queue_test.go b/eth/downloader/queue_test.go index ca71a769de..c7e8a0d1d6 100644 --- a/eth/downloader/queue_test.go +++ b/eth/downloader/queue_test.go @@ -30,8 +30,10 @@ import ( "github.com/ethereum/go-ethereum/consensus/ethash" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/eth/protocols/eth" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" + "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/trie" ) @@ -323,26 +325,31 @@ func XTestDelivery(t *testing.T) { emptyList []*types.Header txset [][]*types.Transaction uncleset [][]*types.Header + bodies []eth.BlockBody ) numToSkip := rand.Intn(len(f.Headers)) for _, hdr := range f.Headers[0 : len(f.Headers)-numToSkip] { - txset = append(txset, world.getTransactions(hdr.Number.Uint64())) + txs := world.getTransactions(hdr.Number.Uint64()) + txset = append(txset, txs) uncleset = append(uncleset, emptyList) + txsList, _ := rlp.EncodeToRawList(txs) + bodies = append(bodies, eth.BlockBody{Transactions: txsList}) + } + hashes := eth.BlockBodyHashes{ + TransactionRoots: make([]common.Hash, len(txset)), + UncleHashes: make([]common.Hash, len(uncleset)), + WithdrawalRoots: make([]common.Hash, len(txset)), } - var ( - txsHashes = make([]common.Hash, len(txset)) - uncleHashes = make([]common.Hash, len(uncleset)) - ) hasher := trie.NewStackTrie(nil) for i, txs := range txset { - txsHashes[i] = types.DeriveSha(types.Transactions(txs), hasher) + hashes.TransactionRoots[i] = types.DeriveSha(types.Transactions(txs), hasher) } for i, uncles := range uncleset { - uncleHashes[i] = types.CalcUncleHash(uncles) + hashes.UncleHashes[i] = types.CalcUncleHash(uncles) } + time.Sleep(100 * time.Millisecond) - _, err := q.DeliverBodies(peer.id, txset, txsHashes, uncleset, uncleHashes, nil, nil) - if err != nil { + if _, err := q.DeliverBodies(peer.id, hashes, bodies); err != nil { fmt.Printf("delivered %d bodies %v\n", len(txset), err) } } else { diff --git a/eth/handler_eth.go b/eth/handler_eth.go index 11742b14ad..8704a86af4 100644 --- a/eth/handler_eth.go +++ b/eth/handler_eth.go @@ -20,6 +20,7 @@ import ( "errors" "fmt" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/eth/protocols/eth" @@ -61,19 +62,42 @@ func (h *ethHandler) Handle(peer *eth.Peer, packet eth.Packet) error { return h.txFetcher.Notify(peer.ID(), packet.Types, packet.Sizes, packet.Hashes) case *eth.TransactionsPacket: - for _, tx := range *packet { - if tx.Type() == types.BlobTxType { - return errors.New("disallowed broadcast blob transaction") - } + txs, err := packet.Items() + if err != nil { + return fmt.Errorf("Transactions: %v", err) } - return h.txFetcher.Enqueue(peer.ID(), *packet, false) + if err := handleTransactions(peer, txs, true); err != nil { + return fmt.Errorf("Transactions: %v", err) + } + return h.txFetcher.Enqueue(peer.ID(), txs, false) - case *eth.PooledTransactionsResponse: - // If we receive any blob transactions missing sidecars, or with - // sidecars that don't correspond to the versioned hashes reported - // in the header, disconnect from the sending peer. - for _, tx := range *packet { - if tx.Type() == types.BlobTxType { + case *eth.PooledTransactionsPacket: + txs, err := packet.List.Items() + if err != nil { + return fmt.Errorf("PooledTransactions: %v", err) + } + if err := handleTransactions(peer, txs, false); err != nil { + return fmt.Errorf("PooledTransactions: %v", err) + } + return h.txFetcher.Enqueue(peer.ID(), txs, true) + + default: + return fmt.Errorf("unexpected eth packet type: %T", packet) + } +} + +// handleTransactions marks all given transactions as known to the peer +// and performs basic validations. +func handleTransactions(peer *eth.Peer, list []*types.Transaction, directBroadcast bool) error { + seen := make(map[common.Hash]struct{}) + for _, tx := range list { + if tx.Type() == types.BlobTxType { + if directBroadcast { + return errors.New("disallowed broadcast blob transaction") + } else { + // If we receive any blob transactions missing sidecars, or with + // sidecars that don't correspond to the versioned hashes reported + // in the header, disconnect from the sending peer. if tx.BlobTxSidecar() == nil { return errors.New("received sidecar-less blob transaction") } @@ -82,9 +106,16 @@ func (h *ethHandler) Handle(peer *eth.Peer, packet eth.Packet) error { } } } - return h.txFetcher.Enqueue(peer.ID(), *packet, true) - default: - return fmt.Errorf("unexpected eth packet type: %T", packet) + // Check for duplicates. + hash := tx.Hash() + if _, exists := seen[hash]; exists { + return fmt.Errorf("multiple copies of the same hash %v", hash) + } + seen[hash] = struct{}{} + + // Mark as known. + peer.MarkTransaction(hash) } + return nil } diff --git a/eth/handler_eth_test.go b/eth/handler_eth_test.go index 1343cae03e..0330713071 100644 --- a/eth/handler_eth_test.go +++ b/eth/handler_eth_test.go @@ -60,11 +60,19 @@ func (h *testEthHandler) Handle(peer *eth.Peer, packet eth.Packet) error { return nil case *eth.TransactionsPacket: - h.txBroadcasts.Send(([]*types.Transaction)(*packet)) + txs, err := packet.Items() + if err != nil { + return err + } + h.txBroadcasts.Send(txs) return nil - case *eth.PooledTransactionsResponse: - h.txBroadcasts.Send(([]*types.Transaction)(*packet)) + case *eth.PooledTransactionsPacket: + txs, err := packet.List.Items() + if err != nil { + return err + } + h.txBroadcasts.Send(txs) return nil default: diff --git a/eth/protocols/eth/dispatcher.go b/eth/protocols/eth/dispatcher.go index cba40596fc..3f78fb4646 100644 --- a/eth/protocols/eth/dispatcher.go +++ b/eth/protocols/eth/dispatcher.go @@ -22,6 +22,7 @@ import ( "time" "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/tracker" ) var ( @@ -47,9 +48,10 @@ type Request struct { sink chan *Response // Channel to deliver the response on cancel chan struct{} // Channel to cancel requests ahead of time - code uint64 // Message code of the request packet - want uint64 // Message code of the response packet - data interface{} // Data content of the request packet + code uint64 // Message code of the request packet + want uint64 // Message code of the response packet + numItems int // Number of requested items + data interface{} // Data content of the request packet Peer string // Demultiplexer if cross-peer requests are batched together Sent time.Time // Timestamp when the request was sent @@ -190,19 +192,30 @@ func (p *Peer) dispatchResponse(res *Response, metadata func() interface{}) erro func (p *Peer) dispatcher() { pending := make(map[uint64]*Request) +loop: for { select { case reqOp := <-p.reqDispatch: req := reqOp.req req.Sent = time.Now() - requestTracker.Track(p.id, p.version, req.code, req.want, req.id) - err := p2p.Send(p.rw, req.code, req.data) - reqOp.fail <- err - - if err == nil { - pending[req.id] = req + treq := tracker.Request{ + ID: req.id, + ReqCode: req.code, + RespCode: req.want, + Size: req.numItems, } + if err := p.tracker.Track(treq); err != nil { + reqOp.fail <- err + continue loop + } + if err := p2p.Send(p.rw, req.code, req.data); err != nil { + reqOp.fail <- err + continue loop + } + + pending[req.id] = req + reqOp.fail <- nil case cancelOp := <-p.reqCancel: // Retrieve the pending request to cancel and short circuit if it @@ -220,9 +233,6 @@ func (p *Peer) dispatcher() { res := resOp.res res.Req = pending[res.id] - // Independent if the request exists or not, track this packet - requestTracker.Fulfil(p.id, p.version, res.code, res.id) - switch { case res.Req == nil: // Response arrived with an untracked ID. Since even cancelled @@ -249,6 +259,7 @@ func (p *Peer) dispatcher() { } case <-p.term: + p.tracker.Stop() return } } diff --git a/eth/protocols/eth/handler_test.go b/eth/protocols/eth/handler_test.go index 65c491f815..8f7f82c3a1 100644 --- a/eth/protocols/eth/handler_test.go +++ b/eth/protocols/eth/handler_test.go @@ -23,9 +23,11 @@ import ( "math/big" "math/rand" "os" + "reflect" "testing" "time" + "github.com/davecgh/go-spew/spew" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/consensus/beacon" "github.com/ethereum/go-ethereum/consensus/ethash" @@ -42,6 +44,7 @@ import ( "github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/trie" "github.com/holiman/uint256" ) @@ -360,8 +363,8 @@ func testGetBlockHeaders(t *testing.T, protocol uint) { GetBlockHeadersRequest: tt.query, }) if err := p2p.ExpectMsg(peer.app, BlockHeadersMsg, &BlockHeadersPacket{ - RequestId: 123, - BlockHeadersRequest: headers, + RequestId: 123, + List: encodeRL(headers), }); err != nil { t.Errorf("test %d: headers mismatch: %v", i, err) } @@ -374,7 +377,7 @@ func testGetBlockHeaders(t *testing.T, protocol uint) { RequestId: 456, GetBlockHeadersRequest: tt.query, }) - expected := &BlockHeadersPacket{RequestId: 456, BlockHeadersRequest: headers} + expected := &BlockHeadersPacket{RequestId: 456, List: encodeRL(headers)} if err := p2p.ExpectMsg(peer.app, BlockHeadersMsg, expected); err != nil { t.Errorf("test %d by hash: headers mismatch: %v", i, err) } @@ -437,7 +440,7 @@ func testGetBlockBodies(t *testing.T, protocol uint) { // Collect the hashes to request, and the response to expect var ( hashes []common.Hash - bodies []*BlockBody + bodies []BlockBody seen = make(map[int64]bool) ) for j := 0; j < tt.random; j++ { @@ -449,7 +452,7 @@ func testGetBlockBodies(t *testing.T, protocol uint) { block := backend.chain.GetBlockByNumber(uint64(num)) hashes = append(hashes, block.Hash()) if len(bodies) < tt.expected { - bodies = append(bodies, &BlockBody{Transactions: block.Transactions(), Uncles: block.Uncles(), Withdrawals: block.Withdrawals()}) + bodies = append(bodies, encodeBody(block)) } break } @@ -459,7 +462,7 @@ func testGetBlockBodies(t *testing.T, protocol uint) { hashes = append(hashes, hash) if tt.available[j] && len(bodies) < tt.expected { block := backend.chain.GetBlockByHash(hash) - bodies = append(bodies, &BlockBody{Transactions: block.Transactions(), Uncles: block.Uncles(), Withdrawals: block.Withdrawals()}) + bodies = append(bodies, encodeBody(block)) } } @@ -469,14 +472,69 @@ func testGetBlockBodies(t *testing.T, protocol uint) { GetBlockBodiesRequest: hashes, }) if err := p2p.ExpectMsg(peer.app, BlockBodiesMsg, &BlockBodiesPacket{ - RequestId: 123, - BlockBodiesResponse: bodies, + RequestId: 123, + List: encodeRL(bodies), }); err != nil { t.Fatalf("test %d: bodies mismatch: %v", i, err) } } } +func encodeBody(b *types.Block) BlockBody { + body := BlockBody{ + Transactions: encodeRL([]*types.Transaction(b.Transactions())), + Uncles: encodeRL(b.Uncles()), + } + if b.Withdrawals() != nil { + wd := encodeRL([]*types.Withdrawal(b.Withdrawals())) + body.Withdrawals = &wd + } + return body +} + +func TestHashBody(t *testing.T) { + key, _ := crypto.HexToECDSA("8a1f9a8f95be41cd7ccb6168179afb4504aefe388d1e14474d32c45c72ce7b7a") + signer := types.NewCancunSigner(big.NewInt(1)) + + // create block 1 + header := &types.Header{Number: big.NewInt(11)} + txs := []*types.Transaction{ + types.MustSignNewTx(key, signer, &types.DynamicFeeTx{ + ChainID: big.NewInt(1), + Nonce: 1, + Data: []byte("testing"), + }), + types.MustSignNewTx(key, signer, &types.LegacyTx{ + Nonce: 2, + Data: []byte("testing"), + }), + } + uncles := []*types.Header{{Number: big.NewInt(10)}} + body1 := &types.Body{Transactions: txs, Uncles: uncles} + block1 := types.NewBlock(header, body1, nil, trie.NewStackTrie(nil)) + + // create block 2 (has withdrawals) + header2 := &types.Header{Number: big.NewInt(12)} + body2 := &types.Body{ + Withdrawals: []*types.Withdrawal{{Index: 10}, {Index: 11}}, + } + block2 := types.NewBlock(header2, body2, nil, trie.NewStackTrie(nil)) + + expectedHashes := BlockBodyHashes{ + TransactionRoots: []common.Hash{block1.TxHash(), block2.TxHash()}, + WithdrawalRoots: []common.Hash{common.Hash{}, *block2.Header().WithdrawalsHash}, + UncleHashes: []common.Hash{block1.UncleHash(), block2.UncleHash()}, + } + + // compute hash like protocol handler does + protocolBodies := []BlockBody{encodeBody(block1), encodeBody(block2)} + hashes := hashBodyParts(protocolBodies) + if !reflect.DeepEqual(hashes, expectedHashes) { + t.Errorf("wrong hashes: %s", spew.Sdump(hashes)) + t.Logf("expected: %s", spew.Sdump(expectedHashes)) + } +} + // Tests that the transaction receipts can be retrieved based on hashes. func TestGetBlockReceipts68(t *testing.T) { testGetBlockReceipts(t, ETH68) } @@ -528,13 +586,13 @@ func testGetBlockReceipts(t *testing.T, protocol uint) { // Collect the hashes to request, and the response to expect var ( hashes []common.Hash - receipts []*ReceiptList68 + receipts rlp.RawList[*ReceiptList68] ) for i := uint64(0); i <= backend.chain.CurrentBlock().Number.Uint64(); i++ { block := backend.chain.GetBlockByNumber(i) hashes = append(hashes, block.Hash()) trs := backend.chain.GetReceiptsByHash(block.Hash()) - receipts = append(receipts, NewReceiptList68(trs)) + receipts.Append(NewReceiptList68(trs)) } // Send the hash request and verify the response @@ -688,10 +746,18 @@ func testGetPooledTransaction(t *testing.T, blobTx bool) { RequestId: 123, GetPooledTransactionsRequest: []common.Hash{tx.Hash()}, }) - if err := p2p.ExpectMsg(peer.app, PooledTransactionsMsg, PooledTransactionsPacket{ - RequestId: 123, - PooledTransactionsResponse: []*types.Transaction{tx}, + if err := p2p.ExpectMsg(peer.app, PooledTransactionsMsg, &PooledTransactionsPacket{ + RequestId: 123, + List: encodeRL([]*types.Transaction{tx}), }); err != nil { t.Errorf("pooled transaction mismatch: %v", err) } } + +func encodeRL[T any](slice []T) rlp.RawList[T] { + rl, err := rlp.EncodeToRawList(slice) + if err != nil { + panic(err) + } + return rl +} diff --git a/eth/protocols/eth/handlers.go b/eth/protocols/eth/handlers.go index aad3353d88..7f1ccc360d 100644 --- a/eth/protocols/eth/handlers.go +++ b/eth/protocols/eth/handlers.go @@ -17,23 +17,22 @@ package eth import ( + "bytes" "encoding/json" "errors" "fmt" - "time" + "math" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/p2p/tracker" "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/trie" ) -// requestTracker is a singleton tracker for eth/66 and newer request times. -var requestTracker = tracker.New(ProtocolName, 5*time.Minute) - func handleGetBlockHeaders(backend Backend, msg Decoder, peer *Peer) error { // Decode the complex header query var query GetBlockHeadersPacket @@ -356,9 +355,18 @@ func handleBlockHeaders(backend Backend, msg Decoder, peer *Peer) error { if err := msg.Decode(res); err != nil { return err } + tresp := tracker.Response{ID: res.RequestId, MsgCode: BlockHeadersMsg, Size: res.List.Len()} + if err := peer.tracker.Fulfil(tresp); err != nil { + return fmt.Errorf("BlockHeaders: %w", err) + } + headers, err := res.List.Items() + if err != nil { + return fmt.Errorf("BlockHeaders: %w", err) + } + metadata := func() interface{} { - hashes := make([]common.Hash, len(res.BlockHeadersRequest)) - for i, header := range res.BlockHeadersRequest { + hashes := make([]common.Hash, len(headers)) + for i, header := range headers { hashes[i] = header.Hash() } return hashes @@ -366,7 +374,7 @@ func handleBlockHeaders(backend Backend, msg Decoder, peer *Peer) error { return peer.dispatchResponse(&Response{ id: res.RequestId, code: BlockHeadersMsg, - Res: &res.BlockHeadersRequest, + Res: (*BlockHeadersRequest)(&headers), }, metadata) } @@ -376,53 +384,150 @@ func handleBlockBodies(backend Backend, msg Decoder, peer *Peer) error { if err := msg.Decode(res); err != nil { return err } - metadata := func() interface{} { - var ( - txsHashes = make([]common.Hash, len(res.BlockBodiesResponse)) - uncleHashes = make([]common.Hash, len(res.BlockBodiesResponse)) - withdrawalHashes = make([]common.Hash, len(res.BlockBodiesResponse)) - ) - hasher := trie.NewStackTrie(nil) - for i, body := range res.BlockBodiesResponse { - txsHashes[i] = types.DeriveSha(types.Transactions(body.Transactions), hasher) - uncleHashes[i] = types.CalcUncleHash(body.Uncles) - if body.Withdrawals != nil { - withdrawalHashes[i] = types.DeriveSha(types.Withdrawals(body.Withdrawals), hasher) - } - } - return [][]common.Hash{txsHashes, uncleHashes, withdrawalHashes} + + // Check against the request. + length := res.List.Len() + tresp := tracker.Response{ID: res.RequestId, MsgCode: BlockBodiesMsg, Size: length} + if err := peer.tracker.Fulfil(tresp); err != nil { + return fmt.Errorf("BlockBodies: %w", err) } + + // Collect items and dispatch. + items, err := res.List.Items() + if err != nil { + return fmt.Errorf("BlockBodies: %w", err) + } + metadata := func() any { return hashBodyParts(items) } return peer.dispatchResponse(&Response{ id: res.RequestId, code: BlockBodiesMsg, - Res: &res.BlockBodiesResponse, + Res: (*BlockBodiesResponse)(&items), }, metadata) } +// BlockBodyHashes contains the lists of block body part roots for a list of block bodies. +type BlockBodyHashes struct { + TransactionRoots []common.Hash + WithdrawalRoots []common.Hash + UncleHashes []common.Hash +} + +func hashBodyParts(items []BlockBody) BlockBodyHashes { + h := BlockBodyHashes{ + TransactionRoots: make([]common.Hash, len(items)), + WithdrawalRoots: make([]common.Hash, len(items)), + UncleHashes: make([]common.Hash, len(items)), + } + hasher := trie.NewStackTrie(nil) + for i, body := range items { + // txs + txsList := newDerivableRawList(&body.Transactions, writeTxForHash) + h.TransactionRoots[i] = types.DeriveSha(txsList, hasher) + // uncles + if body.Uncles.Len() == 0 { + h.UncleHashes[i] = types.EmptyUncleHash + } else { + h.UncleHashes[i] = crypto.Keccak256Hash(body.Uncles.Bytes()) + } + // withdrawals + if body.Withdrawals != nil { + wdlist := newDerivableRawList(body.Withdrawals, nil) + h.WithdrawalRoots[i] = types.DeriveSha(wdlist, hasher) + } + } + return h +} + +// derivableRawList implements types.DerivableList for a serialized RLP list. +type derivableRawList struct { + data []byte + offsets []uint32 + write func([]byte, *bytes.Buffer) +} + +func newDerivableRawList[T any](list *rlp.RawList[T], write func([]byte, *bytes.Buffer)) *derivableRawList { + dl := derivableRawList{data: list.Content(), write: write} + if dl.write == nil { + // default transform is identity + dl.write = func(b []byte, buf *bytes.Buffer) { buf.Write(b) } + } + // Assert to ensure 32-bit offsets are valid. This can never trigger + // unless a block body component or p2p receipt list is larger than 4GB. + if uint(len(dl.data)) > math.MaxUint32 { + panic("list data too big for derivableRawList") + } + it := list.ContentIterator() + dl.offsets = make([]uint32, list.Len()) + for i := 0; it.Next(); i++ { + dl.offsets[i] = uint32(it.Offset()) + } + return &dl +} + +// Len returns the number of items in the list. +func (dl *derivableRawList) Len() int { + return len(dl.offsets) +} + +// EncodeIndex writes the i'th item to the buffer. +func (dl *derivableRawList) EncodeIndex(i int, buf *bytes.Buffer) { + start := dl.offsets[i] + end := uint32(len(dl.data)) + if i != len(dl.offsets)-1 { + end = dl.offsets[i+1] + } + dl.write(dl.data[start:end], buf) +} + +// writeTxForHash changes a transaction in 'network encoding' into the format used for +// the transactions MPT. +func writeTxForHash(tx []byte, buf *bytes.Buffer) { + k, content, _, _ := rlp.Split(tx) + if k == rlp.List { + buf.Write(tx) // legacy tx + } else { + buf.Write(content) // typed tx + } +} + func handleReceipts[L ReceiptsList](backend Backend, msg Decoder, peer *Peer) error { // A batch of receipts arrived to one of our previous requests res := new(ReceiptsPacket[L]) if err := msg.Decode(res); err != nil { return err } + + tresp := tracker.Response{ID: res.RequestId, MsgCode: ReceiptsMsg, Size: res.List.Len()} + if err := peer.tracker.Fulfil(tresp); err != nil { + return fmt.Errorf("Receipts: %w", err) + } + // Assign temporary hashing buffer to each list item, the same buffer is shared // between all receipt list instances. + receiptLists, err := res.List.Items() + if err != nil { + return fmt.Errorf("Receipts: %w", err) + } buffers := new(receiptListBuffers) - for i := range res.List { - res.List[i].setBuffers(buffers) + for i := range receiptLists { + receiptLists[i].setBuffers(buffers) } metadata := func() interface{} { hasher := trie.NewStackTrie(nil) - hashes := make([]common.Hash, len(res.List)) - for i := range res.List { - hashes[i] = types.DeriveSha(res.List[i], hasher) + hashes := make([]common.Hash, len(receiptLists)) + for i := range receiptLists { + hashes[i] = types.DeriveSha(receiptLists[i].Derivable(), hasher) } return hashes } var enc ReceiptsRLPResponse - for i := range res.List { - enc = append(enc, res.List[i].EncodeForStorage()) + for i := range receiptLists { + encReceipts, err := receiptLists[i].EncodeForStorage() + if err != nil { + return fmt.Errorf("Receipts: invalid list %d: %v", i, err) + } + enc = append(enc, encReceipts) } return peer.dispatchResponse(&Response{ id: res.RequestId, @@ -446,7 +551,7 @@ func handleNewPooledTransactionHashes(backend Backend, msg Decoder, peer *Peer) } // Schedule all the unknown hashes for retrieval for _, hash := range ann.Hashes { - peer.markTransaction(hash) + peer.MarkTransaction(hash) } return backend.Handle(peer, ann) } @@ -494,19 +599,8 @@ func handleTransactions(backend Backend, msg Decoder, peer *Peer) error { if err := msg.Decode(&txs); err != nil { return err } - // Duplicate transactions are not allowed - seen := make(map[common.Hash]struct{}) - for i, tx := range txs { - // Validate and mark the remote transaction - if tx == nil { - return fmt.Errorf("Transactions: transaction %d is nil", i) - } - hash := tx.Hash() - if _, exists := seen[hash]; exists { - return fmt.Errorf("Transactions: multiple copies of the same hash %v", hash) - } - seen[hash] = struct{}{} - peer.markTransaction(hash) + if txs.Len() > maxTransactionAnnouncements { + return fmt.Errorf("too many transactions") } return backend.Handle(peer, &txs) } @@ -516,28 +610,22 @@ func handlePooledTransactions(backend Backend, msg Decoder, peer *Peer) error { if !backend.AcceptTxs() { return nil } - // Transactions can be processed, parse all of them and deliver to the pool - var txs PooledTransactionsPacket - if err := msg.Decode(&txs); err != nil { + + // Check against request and decode. + var resp PooledTransactionsPacket + if err := msg.Decode(&resp); err != nil { return err } - // Duplicate transactions are not allowed - seen := make(map[common.Hash]struct{}) - for i, tx := range txs.PooledTransactionsResponse { - // Validate and mark the remote transaction - if tx == nil { - return fmt.Errorf("PooledTransactions: transaction %d is nil", i) - } - hash := tx.Hash() - if _, exists := seen[hash]; exists { - return fmt.Errorf("PooledTransactions: multiple copies of the same hash %v", hash) - } - seen[hash] = struct{}{} - peer.markTransaction(hash) + tresp := tracker.Response{ + ID: resp.RequestId, + MsgCode: PooledTransactionsMsg, + Size: resp.List.Len(), + } + if err := peer.tracker.Fulfil(tresp); err != nil { + return fmt.Errorf("PooledTransactions: %w", err) } - requestTracker.Fulfil(peer.id, peer.version, PooledTransactionsMsg, txs.RequestId) - return backend.Handle(peer, &txs.PooledTransactionsResponse) + return backend.Handle(peer, &resp) } func handleBlockRangeUpdate(backend Backend, msg Decoder, peer *Peer) error { diff --git a/eth/protocols/eth/peer.go b/eth/protocols/eth/peer.go index df20c672c0..4ea2d7158c 100644 --- a/eth/protocols/eth/peer.go +++ b/eth/protocols/eth/peer.go @@ -19,11 +19,13 @@ package eth import ( "math/rand" "sync/atomic" + "time" mapset "github.com/deckarep/golang-set/v2" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/tracker" "github.com/ethereum/go-ethereum/rlp" ) @@ -43,9 +45,10 @@ const ( // Peer is a collection of relevant information we have about a `eth` peer. type Peer struct { + *p2p.Peer // The embedded P2P package peer + id string // Unique ID for the peer, cached - *p2p.Peer // The embedded P2P package peer rw p2p.MsgReadWriter // Input/output streams for snap version uint // Protocol version negotiated lastRange atomic.Pointer[BlockRangeUpdatePacket] @@ -55,6 +58,7 @@ type Peer struct { txBroadcast chan []common.Hash // Channel used to queue transaction propagation requests txAnnounce chan []common.Hash // Channel used to queue transaction announcement requests + tracker *tracker.Tracker reqDispatch chan *request // Dispatch channel to send requests and track then until fulfillment reqCancel chan *cancel // Dispatch channel to cancel pending requests and untrack them resDispatch chan *response // Dispatch channel to fulfil pending requests and untrack them @@ -65,14 +69,17 @@ type Peer struct { // NewPeer creates a wrapper for a network connection and negotiated protocol // version. func NewPeer(version uint, p *p2p.Peer, rw p2p.MsgReadWriter, txpool TxPool) *Peer { + cap := p2p.Cap{Name: ProtocolName, Version: version} + id := p.ID().String() peer := &Peer{ - id: p.ID().String(), + id: id, Peer: p, rw: rw, version: version, knownTxs: newKnownCache(maxKnownTxs), txBroadcast: make(chan []common.Hash), txAnnounce: make(chan []common.Hash), + tracker: tracker.New(cap, id, 5*time.Minute), reqDispatch: make(chan *request), reqCancel: make(chan *cancel), resDispatch: make(chan *response), @@ -115,9 +122,9 @@ func (p *Peer) KnownTransaction(hash common.Hash) bool { return p.knownTxs.Contains(hash) } -// markTransaction marks a transaction as known for the peer, ensuring that it +// MarkTransaction marks a transaction as known for the peer, ensuring that it // will never be propagated to this particular peer. -func (p *Peer) markTransaction(hash common.Hash) { +func (p *Peer) MarkTransaction(hash common.Hash) { // If we reached the memory allowance, drop a previously known transaction hash p.knownTxs.Add(hash) } @@ -222,10 +229,11 @@ func (p *Peer) RequestOneHeader(hash common.Hash, sink chan *Response) (*Request id := rand.Uint64() req := &Request{ - id: id, - sink: sink, - code: GetBlockHeadersMsg, - want: BlockHeadersMsg, + id: id, + sink: sink, + code: GetBlockHeadersMsg, + want: BlockHeadersMsg, + numItems: 1, data: &GetBlockHeadersPacket{ RequestId: id, GetBlockHeadersRequest: &GetBlockHeadersRequest{ @@ -249,10 +257,11 @@ func (p *Peer) RequestHeadersByHash(origin common.Hash, amount int, skip int, re id := rand.Uint64() req := &Request{ - id: id, - sink: sink, - code: GetBlockHeadersMsg, - want: BlockHeadersMsg, + id: id, + sink: sink, + code: GetBlockHeadersMsg, + want: BlockHeadersMsg, + numItems: amount, data: &GetBlockHeadersPacket{ RequestId: id, GetBlockHeadersRequest: &GetBlockHeadersRequest{ @@ -276,10 +285,11 @@ func (p *Peer) RequestHeadersByNumber(origin uint64, amount int, skip int, rever id := rand.Uint64() req := &Request{ - id: id, - sink: sink, - code: GetBlockHeadersMsg, - want: BlockHeadersMsg, + id: id, + sink: sink, + code: GetBlockHeadersMsg, + want: BlockHeadersMsg, + numItems: amount, data: &GetBlockHeadersPacket{ RequestId: id, GetBlockHeadersRequest: &GetBlockHeadersRequest{ @@ -303,10 +313,11 @@ func (p *Peer) RequestBodies(hashes []common.Hash, sink chan *Response) (*Reques id := rand.Uint64() req := &Request{ - id: id, - sink: sink, - code: GetBlockBodiesMsg, - want: BlockBodiesMsg, + id: id, + sink: sink, + code: GetBlockBodiesMsg, + want: BlockBodiesMsg, + numItems: len(hashes), data: &GetBlockBodiesPacket{ RequestId: id, GetBlockBodiesRequest: hashes, @@ -324,10 +335,11 @@ func (p *Peer) RequestReceipts(hashes []common.Hash, sink chan *Response) (*Requ id := rand.Uint64() req := &Request{ - id: id, - sink: sink, - code: GetReceiptsMsg, - want: ReceiptsMsg, + id: id, + sink: sink, + code: GetReceiptsMsg, + want: ReceiptsMsg, + numItems: len(hashes), data: &GetReceiptsPacket{ RequestId: id, GetReceiptsRequest: hashes, @@ -344,7 +356,15 @@ func (p *Peer) RequestTxs(hashes []common.Hash) error { p.Log().Trace("Fetching batch of transactions", "count", len(hashes)) id := rand.Uint64() - requestTracker.Track(p.id, p.version, GetPooledTransactionsMsg, PooledTransactionsMsg, id) + err := p.tracker.Track(tracker.Request{ + ID: id, + ReqCode: GetPooledTransactionsMsg, + RespCode: PooledTransactionsMsg, + Size: len(hashes), + }) + if err != nil { + return err + } return p2p.Send(p.rw, GetPooledTransactionsMsg, &GetPooledTransactionsPacket{ RequestId: id, GetPooledTransactionsRequest: hashes, diff --git a/eth/protocols/eth/protocol.go b/eth/protocols/eth/protocol.go index 7c41e7a996..6ab800f4f4 100644 --- a/eth/protocols/eth/protocol.go +++ b/eth/protocols/eth/protocol.go @@ -49,6 +49,9 @@ var protocolLengths = map[uint]uint64{ETH68: 17, ETH69: 18} // maxMessageSize is the maximum cap on the size of a protocol message. const maxMessageSize = 10 * 1024 * 1024 +// This is the maximum number of transactions in a Transactions message. +const maxTransactionAnnouncements = 5000 + const ( StatusMsg = 0x00 NewBlockHashesMsg = 0x01 @@ -127,7 +130,9 @@ func (p *NewBlockHashesPacket) Unpack() ([]common.Hash, []uint64) { } // TransactionsPacket is the network packet for broadcasting new transactions. -type TransactionsPacket []*types.Transaction +type TransactionsPacket struct { + rlp.RawList[*types.Transaction] +} // GetBlockHeadersRequest represents a block header query. type GetBlockHeadersRequest struct { @@ -185,7 +190,7 @@ type BlockHeadersRequest []*types.Header // BlockHeadersPacket represents a block header response over with request ID wrapping. type BlockHeadersPacket struct { RequestId uint64 - BlockHeadersRequest + List rlp.RawList[*types.Header] } // BlockHeadersRLPResponse represents a block header response, to use when we already @@ -213,14 +218,11 @@ type GetBlockBodiesPacket struct { GetBlockBodiesRequest } -// BlockBodiesResponse is the network packet for block content distribution. -type BlockBodiesResponse []*BlockBody - // BlockBodiesPacket is the network packet for block content distribution with // request ID wrapping. type BlockBodiesPacket struct { RequestId uint64 - BlockBodiesResponse + List rlp.RawList[BlockBody] } // BlockBodiesRLPResponse is used for replying to block body requests, in cases @@ -234,25 +236,14 @@ type BlockBodiesRLPPacket struct { BlockBodiesRLPResponse } +// BlockBodiesResponse is the network packet for block content distribution. +type BlockBodiesResponse []BlockBody + // BlockBody represents the data content of a single block. type BlockBody struct { - Transactions []*types.Transaction // Transactions contained within a block - Uncles []*types.Header // Uncles contained within a block - Withdrawals []*types.Withdrawal `rlp:"optional"` // Withdrawals contained within a block -} - -// Unpack retrieves the transactions and uncles from the range packet and returns -// them in a split flat format that's more consistent with the internal data structures. -func (p *BlockBodiesResponse) Unpack() ([][]*types.Transaction, [][]*types.Header, [][]*types.Withdrawal) { - var ( - txset = make([][]*types.Transaction, len(*p)) - uncleset = make([][]*types.Header, len(*p)) - withdrawalset = make([][]*types.Withdrawal, len(*p)) - ) - for i, body := range *p { - txset[i], uncleset[i], withdrawalset[i] = body.Transactions, body.Uncles, body.Withdrawals - } - return txset, uncleset, withdrawalset + Transactions rlp.RawList[*types.Transaction] + Uncles rlp.RawList[*types.Header] + Withdrawals *rlp.RawList[*types.Withdrawal] `rlp:"optional"` } // GetReceiptsRequest represents a block receipts query. @@ -271,15 +262,15 @@ type ReceiptsResponse []types.Receipts type ReceiptsList interface { *ReceiptList68 | *ReceiptList69 setBuffers(*receiptListBuffers) - EncodeForStorage() rlp.RawValue - types.DerivableList + EncodeForStorage() (rlp.RawValue, error) + Derivable() types.DerivableList } // ReceiptsPacket is the network packet for block receipts distribution with // request ID wrapping. type ReceiptsPacket[L ReceiptsList] struct { RequestId uint64 - List []L + List rlp.RawList[L] } // ReceiptsRLPResponse is used for receipts, when we already have it encoded @@ -314,7 +305,7 @@ type PooledTransactionsResponse []*types.Transaction // with request ID wrapping. type PooledTransactionsPacket struct { RequestId uint64 - PooledTransactionsResponse + List rlp.RawList[*types.Transaction] } // PooledTransactionsRLPResponse is the network packet for transaction distribution, used @@ -367,8 +358,8 @@ func (*NewPooledTransactionHashesPacket) Kind() byte { return NewPooledTransac func (*GetPooledTransactionsRequest) Name() string { return "GetPooledTransactions" } func (*GetPooledTransactionsRequest) Kind() byte { return GetPooledTransactionsMsg } -func (*PooledTransactionsResponse) Name() string { return "PooledTransactions" } -func (*PooledTransactionsResponse) Kind() byte { return PooledTransactionsMsg } +func (*PooledTransactionsPacket) Name() string { return "PooledTransactions" } +func (*PooledTransactionsPacket) Kind() byte { return PooledTransactionsMsg } func (*GetReceiptsRequest) Name() string { return "GetReceipts" } func (*GetReceiptsRequest) Kind() byte { return GetReceiptsMsg } diff --git a/eth/protocols/eth/protocol_test.go b/eth/protocols/eth/protocol_test.go index 8a2559a6c5..e37d72dcd6 100644 --- a/eth/protocols/eth/protocol_test.go +++ b/eth/protocols/eth/protocol_test.go @@ -78,34 +78,34 @@ func TestEmptyMessages(t *testing.T) { for i, msg := range []any{ // Headers GetBlockHeadersPacket{1111, nil}, - BlockHeadersPacket{1111, nil}, // Bodies GetBlockBodiesPacket{1111, nil}, - BlockBodiesPacket{1111, nil}, BlockBodiesRLPPacket{1111, nil}, // Receipts GetReceiptsPacket{1111, nil}, // Transactions GetPooledTransactionsPacket{1111, nil}, - PooledTransactionsPacket{1111, nil}, PooledTransactionsRLPPacket{1111, nil}, // Headers - BlockHeadersPacket{1111, BlockHeadersRequest([]*types.Header{})}, + BlockHeadersPacket{1111, encodeRL([]*types.Header{})}, // Bodies GetBlockBodiesPacket{1111, GetBlockBodiesRequest([]common.Hash{})}, - BlockBodiesPacket{1111, BlockBodiesResponse([]*BlockBody{})}, + BlockBodiesPacket{1111, encodeRL([]BlockBody{})}, BlockBodiesRLPPacket{1111, BlockBodiesRLPResponse([]rlp.RawValue{})}, // Receipts GetReceiptsPacket{1111, GetReceiptsRequest([]common.Hash{})}, - ReceiptsPacket[*ReceiptList68]{1111, []*ReceiptList68{}}, - ReceiptsPacket[*ReceiptList69]{1111, []*ReceiptList69{}}, + ReceiptsPacket[*ReceiptList68]{1111, encodeRL([]*ReceiptList68{})}, + ReceiptsPacket[*ReceiptList69]{1111, encodeRL([]*ReceiptList69{})}, // Transactions GetPooledTransactionsPacket{1111, GetPooledTransactionsRequest([]common.Hash{})}, - PooledTransactionsPacket{1111, PooledTransactionsResponse([]*types.Transaction{})}, + PooledTransactionsPacket{1111, encodeRL([]*types.Transaction{})}, PooledTransactionsRLPPacket{1111, PooledTransactionsRLPResponse([]rlp.RawValue{})}, } { - if have, _ := rlp.EncodeToBytes(msg); !bytes.Equal(have, want) { + have, err := rlp.EncodeToBytes(msg) + if err != nil { + t.Errorf("test %d, type %T, error: %v", i, msg, err) + } else if !bytes.Equal(have, want) { t.Errorf("test %d, type %T, have\n\t%x\nwant\n\t%x", i, msg, have, want) } } @@ -116,7 +116,7 @@ func TestMessages(t *testing.T) { // Some basic structs used during testing var ( header *types.Header - blockBody *BlockBody + blockBody BlockBody blockBodyRlp rlp.RawValue txs []*types.Transaction txRlps []rlp.RawValue @@ -150,9 +150,9 @@ func TestMessages(t *testing.T) { } } // init the block body data, both object and rlp form - blockBody = &BlockBody{ - Transactions: txs, - Uncles: []*types.Header{header}, + blockBody = BlockBody{ + Transactions: encodeRL(txs), + Uncles: encodeRL([]*types.Header{header}), } blockBodyRlp, err = rlp.EncodeToBytes(blockBody) if err != nil { @@ -211,7 +211,7 @@ func TestMessages(t *testing.T) { common.FromHex("ca820457c682270f050580"), }, { - BlockHeadersPacket{1111, BlockHeadersRequest{header}}, + BlockHeadersPacket{1111, encodeRL([]*types.Header{header})}, common.FromHex("f90202820457f901fcf901f9a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000940000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008208ae820d0582115c8215b3821a0a827788a00000000000000000000000000000000000000000000000000000000000000000880000000000000000"), }, { @@ -219,7 +219,7 @@ func TestMessages(t *testing.T) { common.FromHex("f847820457f842a000000000000000000000000000000000000000000000000000000000deadc0dea000000000000000000000000000000000000000000000000000000000feedbeef"), }, { - BlockBodiesPacket{1111, BlockBodiesResponse([]*BlockBody{blockBody})}, + BlockBodiesPacket{1111, encodeRL([]BlockBody{blockBody})}, common.FromHex("f902dc820457f902d6f902d3f8d2f867088504a817c8088302e2489435353535353535353535353535353535353535358202008025a064b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c12a064b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c10f867098504a817c809830334509435353535353535353535353535353535353535358202d98025a052f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afba052f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afbf901fcf901f9a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000940000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008208ae820d0582115c8215b3821a0a827788a00000000000000000000000000000000000000000000000000000000000000000880000000000000000"), }, { // Identical to non-rlp-shortcut version @@ -231,7 +231,7 @@ func TestMessages(t *testing.T) { common.FromHex("f847820457f842a000000000000000000000000000000000000000000000000000000000deadc0dea000000000000000000000000000000000000000000000000000000000feedbeef"), }, { - ReceiptsPacket[*ReceiptList68]{1111, []*ReceiptList68{NewReceiptList68(receipts)}}, + ReceiptsPacket[*ReceiptList68]{1111, encodeRL([]*ReceiptList68{NewReceiptList68(receipts)})}, common.FromHex("f902e6820457f902e0f902ddf901688082014db9010000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000004000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000f85ff85d940000000000000000000000000000000000000011f842a0000000000000000000000000000000000000000000000000000000000000deada0000000000000000000000000000000000000000000000000000000000000beef830100ffb9016f01f9016b018201bcb9010000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000001000000000000000000000000000000000000000000000000040000000000000000000000000004000000000000000000000000000000000000000000000000000000008000400000000000000000000000000000000000000000000000000000000000000000000000000000040f862f860940000000000000000000000000000000000000022f842a00000000000000000000000000000000000000000000000000000000000005668a0000000000000000000000000000000000000000000000000000000000000977386020f0f0f0608"), }, { @@ -240,7 +240,7 @@ func TestMessages(t *testing.T) { common.FromHex("f902e6820457f902e0f902ddf901688082014db9010000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000004000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000f85ff85d940000000000000000000000000000000000000011f842a0000000000000000000000000000000000000000000000000000000000000deada0000000000000000000000000000000000000000000000000000000000000beef830100ffb9016f01f9016b018201bcb9010000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000001000000000000000000000000000000000000000000000000040000000000000000000000000004000000000000000000000000000000000000000000000000000000008000400000000000000000000000000000000000000000000000000000000000000000000000000000040f862f860940000000000000000000000000000000000000022f842a00000000000000000000000000000000000000000000000000000000000005668a0000000000000000000000000000000000000000000000000000000000000977386020f0f0f0608"), }, { - ReceiptsPacket[*ReceiptList69]{1111, []*ReceiptList69{NewReceiptList69(receipts)}}, + ReceiptsPacket[*ReceiptList69]{1111, encodeRL([]*ReceiptList69{NewReceiptList69(receipts)})}, common.FromHex("f8da820457f8d5f8d3f866808082014df85ff85d940000000000000000000000000000000000000011f842a0000000000000000000000000000000000000000000000000000000000000deada0000000000000000000000000000000000000000000000000000000000000beef830100fff86901018201bcf862f860940000000000000000000000000000000000000022f842a00000000000000000000000000000000000000000000000000000000000005668a0000000000000000000000000000000000000000000000000000000000000977386020f0f0f0608"), }, { @@ -248,7 +248,7 @@ func TestMessages(t *testing.T) { common.FromHex("f847820457f842a000000000000000000000000000000000000000000000000000000000deadc0dea000000000000000000000000000000000000000000000000000000000feedbeef"), }, { - PooledTransactionsPacket{1111, PooledTransactionsResponse(txs)}, + PooledTransactionsPacket{1111, encodeRL(txs)}, common.FromHex("f8d7820457f8d2f867088504a817c8088302e2489435353535353535353535353535353535353535358202008025a064b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c12a064b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c10f867098504a817c809830334509435353535353535353535353535353535353535358202d98025a052f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afba052f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afb"), }, { diff --git a/eth/protocols/eth/receipt.go b/eth/protocols/eth/receipt.go index 45c4766b17..06956df9f2 100644 --- a/eth/protocols/eth/receipt.go +++ b/eth/protocols/eth/receipt.go @@ -50,8 +50,8 @@ func newReceipt(tr *types.Receipt) Receipt { } // decode68 parses a receipt in the eth/68 network encoding. -func (r *Receipt) decode68(buf *receiptListBuffers, s *rlp.Stream) error { - k, size, err := s.Kind() +func (r *Receipt) decode68(b []byte) error { + k, content, _, err := rlp.Split(b) if err != nil { return err } @@ -59,65 +59,84 @@ func (r *Receipt) decode68(buf *receiptListBuffers, s *rlp.Stream) error { *r = Receipt{} if k == rlp.List { // Legacy receipt. - return r.decodeInnerList(s, false, true) + return r.decodeInnerList(b, false, true) } // Typed receipt. - if size < 2 || size > maxReceiptSize { - return fmt.Errorf("invalid receipt size %d", size) + if len(content) < 2 || len(content) > maxReceiptSize { + return fmt.Errorf("invalid receipt size %d", len(content)) } - buf.tmp.Reset() - buf.tmp.Grow(int(size)) - payload := buf.tmp.Bytes()[:int(size)] - if err := s.ReadBytes(payload); err != nil { - return err - } - r.TxType = payload[0] - s2 := rlp.NewStream(bytes.NewReader(payload[1:]), 0) - return r.decodeInnerList(s2, false, true) + r.TxType = content[0] + return r.decodeInnerList(content[1:], false, true) } // decode69 parses a receipt in the eth/69 network encoding. -func (r *Receipt) decode69(s *rlp.Stream) error { +func (r *Receipt) decode69(b []byte) error { *r = Receipt{} - return r.decodeInnerList(s, true, false) + return r.decodeInnerList(b, true, false) } // decodeDatabase parses a receipt in the basic database encoding. -func (r *Receipt) decodeDatabase(txType byte, s *rlp.Stream) error { +func (r *Receipt) decodeDatabase(txType byte, b []byte) error { *r = Receipt{TxType: txType} - return r.decodeInnerList(s, false, false) + return r.decodeInnerList(b, false, false) } -func (r *Receipt) decodeInnerList(s *rlp.Stream, readTxType, readBloom bool) error { - _, err := s.List() +func (r *Receipt) decodeInnerList(input []byte, readTxType, readBloom bool) error { + input, _, err := rlp.SplitList(input) if err != nil { - return err + return fmt.Errorf("inner list: %v", err) } + + // txType if readTxType { - r.TxType, err = s.Uint8() + var txType uint64 + txType, input, err = rlp.SplitUint64(input) if err != nil { return fmt.Errorf("invalid txType: %w", err) } + if txType > 0x7f { + return fmt.Errorf("invalid txType: too large") + } + r.TxType = byte(txType) } - r.PostStateOrStatus, err = s.Bytes() + + // status + r.PostStateOrStatus, input, err = rlp.SplitString(input) if err != nil { return fmt.Errorf("invalid postStateOrStatus: %w", err) } - r.GasUsed, err = s.Uint64() + if len(r.PostStateOrStatus) > 1 && len(r.PostStateOrStatus) != 32 { + return fmt.Errorf("invalid postStateOrStatus length %d", len(r.PostStateOrStatus)) + } + + // gas + r.GasUsed, input, err = rlp.SplitUint64(input) if err != nil { return fmt.Errorf("invalid gasUsed: %w", err) } + + // bloom if readBloom { - var b types.Bloom - if err := s.ReadBytes(b[:]); err != nil { + var bloomBytes []byte + bloomBytes, input, err = rlp.SplitString(input) + if err != nil { return fmt.Errorf("invalid bloom: %v", err) } + if len(bloomBytes) != types.BloomByteLength { + return fmt.Errorf("invalid bloom length %d", len(bloomBytes)) + } } - r.Logs, err = s.Raw() + + // logs + _, rest, err := rlp.SplitList(input) if err != nil { return fmt.Errorf("invalid logs: %w", err) } - return s.ListEnd() + if len(rest) != 0 { + return fmt.Errorf("junk at end of receipt") + } + r.Logs = input + return nil } // encodeForStorage produces the the storage encoding, i.e. the result matches @@ -223,32 +242,45 @@ func initBuffers(buf **receiptListBuffers) { } // encodeForStorage encodes a list of receipts for the database. -func (buf *receiptListBuffers) encodeForStorage(rs []Receipt) rlp.RawValue { +func (buf *receiptListBuffers) encodeForStorage(rs rlp.RawList[Receipt], decode func([]byte, *Receipt) error) (rlp.RawValue, error) { var out bytes.Buffer w := &buf.enc w.Reset(&out) outer := w.List() - for _, receipts := range rs { - receipts.encodeForStorage(w) + it := rs.ContentIterator() + for it.Next() { + var receipt Receipt + if err := decode(it.Value(), &receipt); err != nil { + return nil, err + } + receipt.encodeForStorage(w) + } + if it.Err() != nil { + return nil, fmt.Errorf("bad list: %v", it.Err()) } w.ListEnd(outer) w.Flush() - return out.Bytes() + return out.Bytes(), nil } // ReceiptList68 is a block receipt list as downloaded by eth/68. // This also implements types.DerivableList for validation purposes. type ReceiptList68 struct { buf *receiptListBuffers - items []Receipt + items rlp.RawList[Receipt] } // NewReceiptList68 creates a receipt list. // This is slow, and exists for testing purposes. func NewReceiptList68(trs []*types.Receipt) *ReceiptList68 { - rl := &ReceiptList68{items: make([]Receipt, len(trs))} - for i, tr := range trs { - rl.items[i] = newReceipt(tr) + rl := new(ReceiptList68) + initBuffers(&rl.buf) + enc := rlp.NewEncoderBuffer(nil) + for _, tr := range trs { + r := newReceipt(tr) + r.encodeForNetwork68(rl.buf, &enc) + rl.items.AppendRaw(enc.ToBytes()) + enc.Reset(nil) } return rl } @@ -266,17 +298,12 @@ func blockReceiptsToNetwork68(blockReceipts, blockBody rlp.RawValue) ([]byte, er buf receiptListBuffers ) blockReceiptIter, _ := rlp.NewListIterator(blockReceipts) - innerReader := bytes.NewReader(nil) - innerStream := rlp.NewStream(innerReader, 0) w := rlp.NewEncoderBuffer(&out) outer := w.List() for i := 0; blockReceiptIter.Next(); i++ { - content := blockReceiptIter.Value() - innerReader.Reset(content) - innerStream.Reset(innerReader, uint64(len(content))) - var r Receipt txType, _ := nextTxType() - if err := r.decodeDatabase(txType, innerStream); err != nil { + var r Receipt + if err := r.decodeDatabase(txType, blockReceiptIter.Value()); err != nil { return nil, fmt.Errorf("invalid database receipt %d: %v", i, err) } r.encodeForNetwork68(&buf, &w) @@ -292,64 +319,51 @@ func (rl *ReceiptList68) setBuffers(buf *receiptListBuffers) { } // EncodeForStorage encodes the receipts for storage into the database. -func (rl *ReceiptList68) EncodeForStorage() rlp.RawValue { +func (rl *ReceiptList68) EncodeForStorage() (rlp.RawValue, error) { initBuffers(&rl.buf) - return rl.buf.encodeForStorage(rl.items) + return rl.buf.encodeForStorage(rl.items, func(data []byte, r *Receipt) error { + return r.decode68(data) + }) } -// Len implements types.DerivableList. -func (rl *ReceiptList68) Len() int { - return len(rl.items) -} - -// EncodeIndex implements types.DerivableList. -func (rl *ReceiptList68) EncodeIndex(i int, out *bytes.Buffer) { +// Derivable turns the receipts into a list that can derive the root hash. +func (rl *ReceiptList68) Derivable() types.DerivableList { initBuffers(&rl.buf) - rl.items[i].encodeForHash(rl.buf, out) + return newDerivableRawList(&rl.items, func(data []byte, outbuf *bytes.Buffer) { + var r Receipt + if r.decode68(data) == nil { + r.encodeForHash(rl.buf, outbuf) + } + }) } // DecodeRLP decodes a list of receipts from the network format. func (rl *ReceiptList68) DecodeRLP(s *rlp.Stream) error { - initBuffers(&rl.buf) - if _, err := s.List(); err != nil { - return err - } - for i := 0; s.MoreDataInList(); i++ { - var item Receipt - err := item.decode68(rl.buf, s) - if err != nil { - return fmt.Errorf("receipt %d: %v", i, err) - } - rl.items = append(rl.items, item) - } - return s.ListEnd() + return rl.items.DecodeRLP(s) } // EncodeRLP encodes the list into the network format of eth/68. -func (rl *ReceiptList68) EncodeRLP(_w io.Writer) error { - initBuffers(&rl.buf) - w := rlp.NewEncoderBuffer(_w) - outer := w.List() - for i := range rl.items { - rl.items[i].encodeForNetwork68(rl.buf, &w) - } - w.ListEnd(outer) - return w.Flush() +func (rl *ReceiptList68) EncodeRLP(w io.Writer) error { + return rl.items.EncodeRLP(w) } // ReceiptList69 is the block receipt list as downloaded by eth/69. // This implements types.DerivableList for validation purposes. type ReceiptList69 struct { buf *receiptListBuffers - items []Receipt + items rlp.RawList[Receipt] } // NewReceiptList69 creates a receipt list. // This is slow, and exists for testing purposes. func NewReceiptList69(trs []*types.Receipt) *ReceiptList69 { - rl := &ReceiptList69{items: make([]Receipt, len(trs))} - for i, tr := range trs { - rl.items[i] = newReceipt(tr) + rl := new(ReceiptList69) + enc := rlp.NewEncoderBuffer(nil) + for _, tr := range trs { + r := newReceipt(tr) + r.encodeForNetwork69(&enc) + rl.items.AppendRaw(enc.ToBytes()) + enc.Reset(nil) } return rl } @@ -360,47 +374,32 @@ func (rl *ReceiptList69) setBuffers(buf *receiptListBuffers) { } // EncodeForStorage encodes the receipts for storage into the database. -func (rl *ReceiptList69) EncodeForStorage() rlp.RawValue { +func (rl *ReceiptList69) EncodeForStorage() (rlp.RawValue, error) { initBuffers(&rl.buf) - return rl.buf.encodeForStorage(rl.items) + return rl.buf.encodeForStorage(rl.items, func(data []byte, r *Receipt) error { + return r.decode69(data) + }) } -// Len implements types.DerivableList. -func (rl *ReceiptList69) Len() int { - return len(rl.items) -} - -// EncodeIndex implements types.DerivableList. -func (rl *ReceiptList69) EncodeIndex(i int, out *bytes.Buffer) { +// Derivable turns the receipts into a list that can derive the root hash. +func (rl *ReceiptList69) Derivable() types.DerivableList { initBuffers(&rl.buf) - rl.items[i].encodeForHash(rl.buf, out) + return newDerivableRawList(&rl.items, func(data []byte, outbuf *bytes.Buffer) { + var r Receipt + if r.decode69(data) == nil { + r.encodeForHash(rl.buf, outbuf) + } + }) } // DecodeRLP decodes a list receipts from the network format. func (rl *ReceiptList69) DecodeRLP(s *rlp.Stream) error { - if _, err := s.List(); err != nil { - return err - } - for i := 0; s.MoreDataInList(); i++ { - var item Receipt - err := item.decode69(s) - if err != nil { - return fmt.Errorf("receipt %d: %v", i, err) - } - rl.items = append(rl.items, item) - } - return s.ListEnd() + return rl.items.DecodeRLP(s) } // EncodeRLP encodes the list into the network format of eth/69. -func (rl *ReceiptList69) EncodeRLP(_w io.Writer) error { - w := rlp.NewEncoderBuffer(_w) - outer := w.List() - for i := range rl.items { - rl.items[i].encodeForNetwork69(&w) - } - w.ListEnd(outer) - return w.Flush() +func (rl *ReceiptList69) EncodeRLP(w io.Writer) error { + return rl.items.EncodeRLP(w) } // blockReceiptsToNetwork69 takes a slice of rlp-encoded receipts, and transactions, diff --git a/eth/protocols/eth/receipt_test.go b/eth/protocols/eth/receipt_test.go index 3c73c07396..39a2728f7f 100644 --- a/eth/protocols/eth/receipt_test.go +++ b/eth/protocols/eth/receipt_test.go @@ -63,6 +63,18 @@ var receiptsTests = []struct { input: []types.ReceiptForStorage{{CumulativeGasUsed: 555, Status: 1, Logs: receiptsTestLogs2}}, txs: []*types.Transaction{types.NewTx(&types.AccessListTx{})}, }, + { + input: []types.ReceiptForStorage{ + {CumulativeGasUsed: 111, PostState: common.HexToHash("0x1111").Bytes(), Logs: receiptsTestLogs1}, + {CumulativeGasUsed: 222, Status: 0, Logs: receiptsTestLogs2}, + {CumulativeGasUsed: 333, Status: 1, Logs: nil}, + }, + txs: []*types.Transaction{ + types.NewTx(&types.LegacyTx{}), + types.NewTx(&types.AccessListTx{}), + types.NewTx(&types.DynamicFeeTx{}), + }, + }, } func init() { @@ -103,7 +115,10 @@ func TestReceiptList69(t *testing.T) { if err := rlp.DecodeBytes(network, &rl); err != nil { t.Fatalf("test[%d]: can't decode network receipts: %v", i, err) } - rlStorageEnc := rl.EncodeForStorage() + rlStorageEnc, err := rl.EncodeForStorage() + if err != nil { + t.Fatalf("test[%d]: error from EncodeForStorage: %v", i, err) + } if !bytes.Equal(rlStorageEnc, canonDB) { t.Fatalf("test[%d]: re-encoded receipts not equal\nhave: %x\nwant: %x", i, rlStorageEnc, canonDB) } @@ -113,7 +128,7 @@ func TestReceiptList69(t *testing.T) { } // compute root hash from ReceiptList69 and compare. - responseHash := types.DeriveSha(&rl, trie.NewStackTrie(nil)) + responseHash := types.DeriveSha(rl.Derivable(), trie.NewStackTrie(nil)) if responseHash != test.root { t.Fatalf("test[%d]: wrong root hash from ReceiptList69\nhave: %v\nwant: %v", i, responseHash, test.root) } @@ -140,7 +155,10 @@ func TestReceiptList68(t *testing.T) { if err := rlp.DecodeBytes(network, &rl); err != nil { t.Fatalf("test[%d]: can't decode network receipts: %v", i, err) } - rlStorageEnc := rl.EncodeForStorage() + rlStorageEnc, err := rl.EncodeForStorage() + if err != nil { + t.Fatalf("test[%d]: error from EncodeForStorage: %v", i, err) + } if !bytes.Equal(rlStorageEnc, canonDB) { t.Fatalf("test[%d]: re-encoded receipts not equal\nhave: %x\nwant: %x", i, rlStorageEnc, canonDB) } @@ -150,7 +168,7 @@ func TestReceiptList68(t *testing.T) { } // compute root hash from ReceiptList68 and compare. - responseHash := types.DeriveSha(&rl, trie.NewStackTrie(nil)) + responseHash := types.DeriveSha(rl.Derivable(), trie.NewStackTrie(nil)) if responseHash != test.root { t.Fatalf("test[%d]: wrong root hash from ReceiptList68\nhave: %v\nwant: %v", i, responseHash, test.root) } diff --git a/eth/protocols/snap/handler.go b/eth/protocols/snap/handler.go index 3249720f90..071a0419fb 100644 --- a/eth/protocols/snap/handler.go +++ b/eth/protocols/snap/handler.go @@ -31,6 +31,8 @@ import ( "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/p2p/enr" + "github.com/ethereum/go-ethereum/p2p/tracker" + "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/trie" "github.com/ethereum/go-ethereum/trie/trienode" "github.com/ethereum/go-ethereum/triedb/database" @@ -94,6 +96,7 @@ func MakeProtocols(backend Backend) []p2p.Protocol { Length: protocolLengths[version], Run: func(p *p2p.Peer, rw p2p.MsgReadWriter) error { return backend.RunPeer(NewPeer(version, p, rw), func(peer *Peer) error { + defer peer.Close() return Handle(backend, peer) }) }, @@ -149,7 +152,6 @@ func HandleMessage(backend Backend, peer *Peer) error { // Handle the message depending on its contents switch { case msg.Code == GetAccountRangeMsg: - // Decode the account retrieval request var req GetAccountRangePacket if err := msg.Decode(&req); err != nil { return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) @@ -165,23 +167,40 @@ func HandleMessage(backend Backend, peer *Peer) error { }) case msg.Code == AccountRangeMsg: - // A range of accounts arrived to one of our previous requests - res := new(AccountRangePacket) + res := new(accountRangeInput) if err := msg.Decode(res); err != nil { return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) } + + // Check response validity. + if len := res.Proof.Len(); len > 128 { + return fmt.Errorf("AccountRange: invalid proof (length %d)", len) + } + tresp := tracker.Response{ID: res.ID, MsgCode: AccountRangeMsg, Size: len(res.Accounts.Content())} + if err := peer.tracker.Fulfil(tresp); err != nil { + return err + } + + // Decode. + accounts, err := res.Accounts.Items() + if err != nil { + return fmt.Errorf("AccountRange: invalid accounts list: %v", err) + } + proof, err := res.Proof.Items() + if err != nil { + return fmt.Errorf("AccountRange: invalid proof: %v", err) + } + // Ensure the range is monotonically increasing - for i := 1; i < len(res.Accounts); i++ { - if bytes.Compare(res.Accounts[i-1].Hash[:], res.Accounts[i].Hash[:]) >= 0 { - return fmt.Errorf("accounts not monotonically increasing: #%d [%x] vs #%d [%x]", i-1, res.Accounts[i-1].Hash[:], i, res.Accounts[i].Hash[:]) + for i := 1; i < len(accounts); i++ { + if bytes.Compare(accounts[i-1].Hash[:], accounts[i].Hash[:]) >= 0 { + return fmt.Errorf("accounts not monotonically increasing: #%d [%x] vs #%d [%x]", i-1, accounts[i-1].Hash[:], i, accounts[i].Hash[:]) } } - requestTracker.Fulfil(peer.id, peer.version, AccountRangeMsg, res.ID) - return backend.Handle(peer, res) + return backend.Handle(peer, &AccountRangePacket{res.ID, accounts, proof}) case msg.Code == GetStorageRangesMsg: - // Decode the storage retrieval request var req GetStorageRangesPacket if err := msg.Decode(&req); err != nil { return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) @@ -197,25 +216,42 @@ func HandleMessage(backend Backend, peer *Peer) error { }) case msg.Code == StorageRangesMsg: - // A range of storage slots arrived to one of our previous requests - res := new(StorageRangesPacket) + res := new(storageRangesInput) if err := msg.Decode(res); err != nil { return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) } + + // Check response validity. + if len := res.Proof.Len(); len > 128 { + return fmt.Errorf("StorageRangesMsg: invalid proof (length %d)", len) + } + tresp := tracker.Response{ID: res.ID, MsgCode: StorageRangesMsg, Size: len(res.Slots.Content())} + if err := peer.tracker.Fulfil(tresp); err != nil { + return fmt.Errorf("StorageRangesMsg: %w", err) + } + + // Decode. + slotLists, err := res.Slots.Items() + if err != nil { + return fmt.Errorf("AccountRange: invalid accounts list: %v", err) + } + proof, err := res.Proof.Items() + if err != nil { + return fmt.Errorf("AccountRange: invalid proof: %v", err) + } + // Ensure the ranges are monotonically increasing - for i, slots := range res.Slots { + for i, slots := range slotLists { for j := 1; j < len(slots); j++ { if bytes.Compare(slots[j-1].Hash[:], slots[j].Hash[:]) >= 0 { return fmt.Errorf("storage slots not monotonically increasing for account #%d: #%d [%x] vs #%d [%x]", i, j-1, slots[j-1].Hash[:], j, slots[j].Hash[:]) } } } - requestTracker.Fulfil(peer.id, peer.version, StorageRangesMsg, res.ID) - return backend.Handle(peer, res) + return backend.Handle(peer, &StorageRangesPacket{res.ID, slotLists, proof}) case msg.Code == GetByteCodesMsg: - // Decode bytecode retrieval request var req GetByteCodesPacket if err := msg.Decode(&req); err != nil { return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) @@ -230,17 +266,25 @@ func HandleMessage(backend Backend, peer *Peer) error { }) case msg.Code == ByteCodesMsg: - // A batch of byte codes arrived to one of our previous requests - res := new(ByteCodesPacket) + res := new(byteCodesInput) if err := msg.Decode(res); err != nil { return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) } - requestTracker.Fulfil(peer.id, peer.version, ByteCodesMsg, res.ID) - return backend.Handle(peer, res) + length := res.Codes.Len() + tresp := tracker.Response{ID: res.ID, MsgCode: ByteCodesMsg, Size: length} + if err := peer.tracker.Fulfil(tresp); err != nil { + return fmt.Errorf("ByteCodes: %w", err) + } + + codes, err := res.Codes.Items() + if err != nil { + return fmt.Errorf("ByteCodes: %w", err) + } + + return backend.Handle(peer, &ByteCodesPacket{res.ID, codes}) case msg.Code == GetTrieNodesMsg: - // Decode trie node retrieval request var req GetTrieNodesPacket if err := msg.Decode(&req); err != nil { return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) @@ -257,14 +301,21 @@ func HandleMessage(backend Backend, peer *Peer) error { }) case msg.Code == TrieNodesMsg: - // A batch of trie nodes arrived to one of our previous requests - res := new(TrieNodesPacket) + res := new(trieNodesInput) if err := msg.Decode(res); err != nil { return fmt.Errorf("%w: message %v: %v", errDecode, msg, err) } - requestTracker.Fulfil(peer.id, peer.version, TrieNodesMsg, res.ID) - return backend.Handle(peer, res) + tresp := tracker.Response{ID: res.ID, MsgCode: TrieNodesMsg, Size: res.Nodes.Len()} + if err := peer.tracker.Fulfil(tresp); err != nil { + return fmt.Errorf("TrieNodes: %w", err) + } + nodes, err := res.Nodes.Items() + if err != nil { + return fmt.Errorf("TrieNodes: %w", err) + } + + return backend.Handle(peer, &TrieNodesPacket{res.ID, nodes}) default: return fmt.Errorf("%w: %v", errInvalidMsgCode, msg.Code) @@ -512,21 +563,32 @@ func ServiceGetTrieNodesQuery(chain *core.BlockChain, req *GetTrieNodesPacket, s if reader == nil { reader, _ = triedb.StateReader(req.Root) } + // Retrieve trie nodes until the packet size limit is reached var ( - nodes [][]byte - bytes uint64 - loads int // Trie hash expansions to count database reads + outerIt = req.Paths.ContentIterator() + nodes [][]byte + bytes uint64 + loads int // Trie hash expansions to count database reads ) - for _, pathset := range req.Paths { - switch len(pathset) { + for outerIt.Next() { + innerIt, err := rlp.NewListIterator(outerIt.Value()) + if err != nil { + return nodes, err + } + + switch innerIt.Count() { case 0: // Ensure we penalize invalid requests return nil, fmt.Errorf("%w: zero-item pathset requested", errBadRequest) case 1: // If we're only retrieving an account trie node, fetch it directly - blob, resolved, err := accTrie.GetNode(pathset[0]) + accKey := nextBytes(&innerIt) + if accKey == nil { + return nodes, fmt.Errorf("%w: invalid account node request", errBadRequest) + } + blob, resolved, err := accTrie.GetNode(accKey) loads += resolved // always account database reads, even for failures if err != nil { break @@ -535,33 +597,41 @@ func ServiceGetTrieNodesQuery(chain *core.BlockChain, req *GetTrieNodesPacket, s bytes += uint64(len(blob)) default: - var stRoot common.Hash - // Storage slots requested, open the storage trie and retrieve from there + accKey := nextBytes(&innerIt) + if accKey == nil { + return nodes, fmt.Errorf("%w: invalid account storage request", errBadRequest) + } + var stRoot common.Hash if reader == nil { // We don't have the requested state snapshotted yet (or it is stale), // but can look up the account via the trie instead. - account, err := accTrie.GetAccountByHash(common.BytesToHash(pathset[0])) + account, err := accTrie.GetAccountByHash(common.BytesToHash(accKey)) loads += 8 // We don't know the exact cost of lookup, this is an estimate if err != nil || account == nil { break } stRoot = account.Root } else { - account, err := reader.Account(common.BytesToHash(pathset[0])) + account, err := reader.Account(common.BytesToHash(accKey)) loads++ // always account database reads, even for failures if err != nil || account == nil { break } stRoot = common.BytesToHash(account.Root) } - id := trie.StorageTrieID(req.Root, common.BytesToHash(pathset[0]), stRoot) + + id := trie.StorageTrieID(req.Root, common.BytesToHash(accKey), stRoot) stTrie, err := trie.NewStateTrie(id, triedb) loads++ // always account database reads, even for failures if err != nil { break } - for _, path := range pathset[1:] { + for innerIt.Next() { + path, _, err := rlp.SplitString(innerIt.Value()) + if err != nil { + return nil, fmt.Errorf("%w: invalid storage key: %v", errBadRequest, err) + } blob, resolved, err := stTrie.GetNode(path) loads += resolved // always account database reads, even for failures if err != nil { @@ -584,6 +654,17 @@ func ServiceGetTrieNodesQuery(chain *core.BlockChain, req *GetTrieNodesPacket, s return nodes, nil } +func nextBytes(it *rlp.Iterator) []byte { + if !it.Next() { + return nil + } + content, _, err := rlp.SplitString(it.Value()) + if err != nil { + return nil + } + return content +} + // NodeInfo represents a short summary of the `snap` sub-protocol metadata // known about the host peer. type NodeInfo struct{} diff --git a/eth/protocols/snap/peer.go b/eth/protocols/snap/peer.go index c57931678c..0b96de4158 100644 --- a/eth/protocols/snap/peer.go +++ b/eth/protocols/snap/peer.go @@ -17,9 +17,13 @@ package snap import ( + "time" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/p2p" + "github.com/ethereum/go-ethereum/p2p/tracker" + "github.com/ethereum/go-ethereum/rlp" ) // Peer is a collection of relevant information we have about a `snap` peer. @@ -29,6 +33,7 @@ type Peer struct { *p2p.Peer // The embedded P2P package peer rw p2p.MsgReadWriter // Input/output streams for snap version uint // Protocol version negotiated + tracker *tracker.Tracker logger log.Logger // Contextual logger with the peer id injected } @@ -36,22 +41,26 @@ type Peer struct { // NewPeer creates a wrapper for a network connection and negotiated protocol // version. func NewPeer(version uint, p *p2p.Peer, rw p2p.MsgReadWriter) *Peer { + cap := p2p.Cap{Name: ProtocolName, Version: version} id := p.ID().String() return &Peer{ id: id, Peer: p, rw: rw, version: version, + tracker: tracker.New(cap, id, 1*time.Minute), logger: log.New("peer", id[:8]), } } // NewFakePeer creates a fake snap peer without a backing p2p peer, for testing purposes. func NewFakePeer(version uint, id string, rw p2p.MsgReadWriter) *Peer { + cap := p2p.Cap{Name: ProtocolName, Version: version} return &Peer{ id: id, rw: rw, version: version, + tracker: tracker.New(cap, id, 1*time.Minute), logger: log.New("peer", id[:8]), } } @@ -71,63 +80,99 @@ func (p *Peer) Log() log.Logger { return p.logger } +// Close releases resources associated with the peer. +func (p *Peer) Close() { + p.tracker.Stop() +} + // RequestAccountRange fetches a batch of accounts rooted in a specific account // trie, starting with the origin. -func (p *Peer) RequestAccountRange(id uint64, root common.Hash, origin, limit common.Hash, bytes uint64) error { +func (p *Peer) RequestAccountRange(id uint64, root common.Hash, origin, limit common.Hash, bytes int) error { p.logger.Trace("Fetching range of accounts", "reqid", id, "root", root, "origin", origin, "limit", limit, "bytes", common.StorageSize(bytes)) - requestTracker.Track(p.id, p.version, GetAccountRangeMsg, AccountRangeMsg, id) + err := p.tracker.Track(tracker.Request{ + ReqCode: GetAccountRangeMsg, + RespCode: AccountRangeMsg, + ID: id, + Size: 2 * bytes, + }) + if err != nil { + return err + } return p2p.Send(p.rw, GetAccountRangeMsg, &GetAccountRangePacket{ ID: id, Root: root, Origin: origin, Limit: limit, - Bytes: bytes, + Bytes: uint64(bytes), }) } // RequestStorageRanges fetches a batch of storage slots belonging to one or more // accounts. If slots from only one account is requested, an origin marker may also // be used to retrieve from there. -func (p *Peer) RequestStorageRanges(id uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, bytes uint64) error { +func (p *Peer) RequestStorageRanges(id uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, bytes int) error { if len(accounts) == 1 && origin != nil { p.logger.Trace("Fetching range of large storage slots", "reqid", id, "root", root, "account", accounts[0], "origin", common.BytesToHash(origin), "limit", common.BytesToHash(limit), "bytes", common.StorageSize(bytes)) } else { p.logger.Trace("Fetching ranges of small storage slots", "reqid", id, "root", root, "accounts", len(accounts), "first", accounts[0], "bytes", common.StorageSize(bytes)) } - requestTracker.Track(p.id, p.version, GetStorageRangesMsg, StorageRangesMsg, id) + + p.tracker.Track(tracker.Request{ + ReqCode: GetStorageRangesMsg, + RespCode: StorageRangesMsg, + ID: id, + Size: 2 * bytes, + }) return p2p.Send(p.rw, GetStorageRangesMsg, &GetStorageRangesPacket{ ID: id, Root: root, Accounts: accounts, Origin: origin, Limit: limit, - Bytes: bytes, + Bytes: uint64(bytes), }) } // RequestByteCodes fetches a batch of bytecodes by hash. -func (p *Peer) RequestByteCodes(id uint64, hashes []common.Hash, bytes uint64) error { +func (p *Peer) RequestByteCodes(id uint64, hashes []common.Hash, bytes int) error { p.logger.Trace("Fetching set of byte codes", "reqid", id, "hashes", len(hashes), "bytes", common.StorageSize(bytes)) - requestTracker.Track(p.id, p.version, GetByteCodesMsg, ByteCodesMsg, id) + err := p.tracker.Track(tracker.Request{ + ReqCode: GetByteCodesMsg, + RespCode: ByteCodesMsg, + ID: id, + Size: len(hashes), // ByteCodes is limited by the length of the hash list. + }) + if err != nil { + return err + } return p2p.Send(p.rw, GetByteCodesMsg, &GetByteCodesPacket{ ID: id, Hashes: hashes, - Bytes: bytes, + Bytes: uint64(bytes), }) } // RequestTrieNodes fetches a batch of account or storage trie nodes rooted in -// a specific state trie. -func (p *Peer) RequestTrieNodes(id uint64, root common.Hash, paths []TrieNodePathSet, bytes uint64) error { +// a specific state trie. The `count` is the total count of paths being requested. +func (p *Peer) RequestTrieNodes(id uint64, root common.Hash, count int, paths []TrieNodePathSet, bytes int) error { p.logger.Trace("Fetching set of trie nodes", "reqid", id, "root", root, "pathsets", len(paths), "bytes", common.StorageSize(bytes)) - requestTracker.Track(p.id, p.version, GetTrieNodesMsg, TrieNodesMsg, id) + err := p.tracker.Track(tracker.Request{ + ReqCode: GetTrieNodesMsg, + RespCode: TrieNodesMsg, + ID: id, + Size: count, // TrieNodes is limited by number of items. + }) + if err != nil { + return err + } + encPaths, _ := rlp.EncodeToRawList(paths) return p2p.Send(p.rw, GetTrieNodesMsg, &GetTrieNodesPacket{ ID: id, Root: root, - Paths: paths, - Bytes: bytes, + Paths: encPaths, + Bytes: uint64(bytes), }) } diff --git a/eth/protocols/snap/protocol.go b/eth/protocols/snap/protocol.go index 0db206b081..25fe25822b 100644 --- a/eth/protocols/snap/protocol.go +++ b/eth/protocols/snap/protocol.go @@ -78,6 +78,12 @@ type GetAccountRangePacket struct { Bytes uint64 // Soft limit at which to stop returning data } +type accountRangeInput struct { + ID uint64 // ID of the request this is a response for + Accounts rlp.RawList[*AccountData] // List of consecutive accounts from the trie + Proof rlp.RawList[[]byte] // List of trie nodes proving the account range +} + // AccountRangePacket represents an account query response. type AccountRangePacket struct { ID uint64 // ID of the request this is a response for @@ -123,6 +129,12 @@ type GetStorageRangesPacket struct { Bytes uint64 // Soft limit at which to stop returning data } +type storageRangesInput struct { + ID uint64 // ID of the request this is a response for + Slots rlp.RawList[[]*StorageData] // Lists of consecutive storage slots for the requested accounts + Proof rlp.RawList[[]byte] // Merkle proofs for the *last* slot range, if it's incomplete +} + // StorageRangesPacket represents a storage slot query response. type StorageRangesPacket struct { ID uint64 // ID of the request this is a response for @@ -161,6 +173,11 @@ type GetByteCodesPacket struct { Bytes uint64 // Soft limit at which to stop returning data } +type byteCodesInput struct { + ID uint64 // ID of the request this is a response for + Codes rlp.RawList[[]byte] // Requested contract bytecodes +} + // ByteCodesPacket represents a contract bytecode query response. type ByteCodesPacket struct { ID uint64 // ID of the request this is a response for @@ -169,10 +186,10 @@ type ByteCodesPacket struct { // GetTrieNodesPacket represents a state trie node query. type GetTrieNodesPacket struct { - ID uint64 // Request ID to match up responses with - Root common.Hash // Root hash of the account trie to serve - Paths []TrieNodePathSet // Trie node hashes to retrieve the nodes for - Bytes uint64 // Soft limit at which to stop returning data + ID uint64 // Request ID to match up responses with + Root common.Hash // Root hash of the account trie to serve + Paths rlp.RawList[TrieNodePathSet] // Trie node hashes to retrieve the nodes for + Bytes uint64 // Soft limit at which to stop returning data } // TrieNodePathSet is a list of trie node paths to retrieve. A naive way to @@ -187,6 +204,11 @@ type GetTrieNodesPacket struct { // that a slot is accessed before the account path is fully expanded. type TrieNodePathSet [][]byte +type trieNodesInput struct { + ID uint64 // ID of the request this is a response for + Nodes rlp.RawList[[]byte] // Requested state trie nodes +} + // TrieNodesPacket represents a state trie node query response. type TrieNodesPacket struct { ID uint64 // ID of the request this is a response for diff --git a/eth/protocols/snap/sync.go b/eth/protocols/snap/sync.go index cf4e494645..08e85c896a 100644 --- a/eth/protocols/snap/sync.go +++ b/eth/protocols/snap/sync.go @@ -412,19 +412,19 @@ type SyncPeer interface { // RequestAccountRange fetches a batch of accounts rooted in a specific account // trie, starting with the origin. - RequestAccountRange(id uint64, root, origin, limit common.Hash, bytes uint64) error + RequestAccountRange(id uint64, root, origin, limit common.Hash, bytes int) error // RequestStorageRanges fetches a batch of storage slots belonging to one or // more accounts. If slots from only one account is requested, an origin marker // may also be used to retrieve from there. - RequestStorageRanges(id uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, bytes uint64) error + RequestStorageRanges(id uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, bytes int) error // RequestByteCodes fetches a batch of bytecodes by hash. - RequestByteCodes(id uint64, hashes []common.Hash, bytes uint64) error + RequestByteCodes(id uint64, hashes []common.Hash, bytes int) error // RequestTrieNodes fetches a batch of account or storage trie nodes rooted in // a specific state trie. - RequestTrieNodes(id uint64, root common.Hash, paths []TrieNodePathSet, bytes uint64) error + RequestTrieNodes(id uint64, root common.Hash, count int, paths []TrieNodePathSet, bytes int) error // Log retrieves the peer's own contextual logger. Log() log.Logger @@ -1102,7 +1102,7 @@ func (s *Syncer) assignAccountTasks(success chan *accountResponse, fail chan *ac if cap < minRequestSize { // Don't bother with peers below a bare minimum performance cap = minRequestSize } - if err := peer.RequestAccountRange(reqid, root, req.origin, req.limit, uint64(cap)); err != nil { + if err := peer.RequestAccountRange(reqid, root, req.origin, req.limit, cap); err != nil { peer.Log().Debug("Failed to request account range", "err", err) s.scheduleRevertAccountRequest(req) } @@ -1359,7 +1359,7 @@ func (s *Syncer) assignStorageTasks(success chan *storageResponse, fail chan *st if subtask != nil { origin, limit = req.origin[:], req.limit[:] } - if err := peer.RequestStorageRanges(reqid, root, accounts, origin, limit, uint64(cap)); err != nil { + if err := peer.RequestStorageRanges(reqid, root, accounts, origin, limit, cap); err != nil { log.Debug("Failed to request storage", "err", err) s.scheduleRevertStorageRequest(req) } @@ -1492,7 +1492,7 @@ func (s *Syncer) assignTrienodeHealTasks(success chan *trienodeHealResponse, fai defer s.pend.Done() // Attempt to send the remote request and revert if it fails - if err := peer.RequestTrieNodes(reqid, root, pathsets, maxRequestSize); err != nil { + if err := peer.RequestTrieNodes(reqid, root, len(paths), pathsets, maxRequestSize); err != nil { log.Debug("Failed to request trienode healers", "err", err) s.scheduleRevertTrienodeHealRequest(req) } diff --git a/eth/protocols/snap/sync_test.go b/eth/protocols/snap/sync_test.go index ed83af860a..b11ad4e78a 100644 --- a/eth/protocols/snap/sync_test.go +++ b/eth/protocols/snap/sync_test.go @@ -119,10 +119,10 @@ func BenchmarkHashing(b *testing.B) { } type ( - accountHandlerFunc func(t *testPeer, requestId uint64, root common.Hash, origin common.Hash, limit common.Hash, cap uint64) error - storageHandlerFunc func(t *testPeer, requestId uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, max uint64) error - trieHandlerFunc func(t *testPeer, requestId uint64, root common.Hash, paths []TrieNodePathSet, cap uint64) error - codeHandlerFunc func(t *testPeer, id uint64, hashes []common.Hash, max uint64) error + accountHandlerFunc func(t *testPeer, requestId uint64, root common.Hash, origin common.Hash, limit common.Hash, cap int) error + storageHandlerFunc func(t *testPeer, requestId uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, max int) error + trieHandlerFunc func(t *testPeer, requestId uint64, root common.Hash, paths []TrieNodePathSet, cap int) error + codeHandlerFunc func(t *testPeer, id uint64, hashes []common.Hash, max int) error ) type testPeer struct { @@ -182,21 +182,21 @@ Trienode requests: %d `, t.nAccountRequests, t.nStorageRequests, t.nBytecodeRequests, t.nTrienodeRequests) } -func (t *testPeer) RequestAccountRange(id uint64, root, origin, limit common.Hash, bytes uint64) error { +func (t *testPeer) RequestAccountRange(id uint64, root, origin, limit common.Hash, bytes int) error { t.logger.Trace("Fetching range of accounts", "reqid", id, "root", root, "origin", origin, "limit", limit, "bytes", common.StorageSize(bytes)) t.nAccountRequests++ go t.accountRequestHandler(t, id, root, origin, limit, bytes) return nil } -func (t *testPeer) RequestTrieNodes(id uint64, root common.Hash, paths []TrieNodePathSet, bytes uint64) error { +func (t *testPeer) RequestTrieNodes(id uint64, root common.Hash, count int, paths []TrieNodePathSet, bytes int) error { t.logger.Trace("Fetching set of trie nodes", "reqid", id, "root", root, "pathsets", len(paths), "bytes", common.StorageSize(bytes)) t.nTrienodeRequests++ go t.trieRequestHandler(t, id, root, paths, bytes) return nil } -func (t *testPeer) RequestStorageRanges(id uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, bytes uint64) error { +func (t *testPeer) RequestStorageRanges(id uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, bytes int) error { t.nStorageRequests++ if len(accounts) == 1 && origin != nil { t.logger.Trace("Fetching range of large storage slots", "reqid", id, "root", root, "account", accounts[0], "origin", common.BytesToHash(origin), "limit", common.BytesToHash(limit), "bytes", common.StorageSize(bytes)) @@ -207,7 +207,7 @@ func (t *testPeer) RequestStorageRanges(id uint64, root common.Hash, accounts [] return nil } -func (t *testPeer) RequestByteCodes(id uint64, hashes []common.Hash, bytes uint64) error { +func (t *testPeer) RequestByteCodes(id uint64, hashes []common.Hash, bytes int) error { t.nBytecodeRequests++ t.logger.Trace("Fetching set of byte codes", "reqid", id, "hashes", len(hashes), "bytes", common.StorageSize(bytes)) go t.codeRequestHandler(t, id, hashes, bytes) @@ -215,7 +215,7 @@ func (t *testPeer) RequestByteCodes(id uint64, hashes []common.Hash, bytes uint6 } // defaultTrieRequestHandler is a well-behaving handler for trie healing requests -func defaultTrieRequestHandler(t *testPeer, requestId uint64, root common.Hash, paths []TrieNodePathSet, cap uint64) error { +func defaultTrieRequestHandler(t *testPeer, requestId uint64, root common.Hash, paths []TrieNodePathSet, cap int) error { // Pass the response var nodes [][]byte for _, pathset := range paths { @@ -244,7 +244,7 @@ func defaultTrieRequestHandler(t *testPeer, requestId uint64, root common.Hash, } // defaultAccountRequestHandler is a well-behaving handler for AccountRangeRequests -func defaultAccountRequestHandler(t *testPeer, id uint64, root common.Hash, origin common.Hash, limit common.Hash, cap uint64) error { +func defaultAccountRequestHandler(t *testPeer, id uint64, root common.Hash, origin common.Hash, limit common.Hash, cap int) error { keys, vals, proofs := createAccountRequestResponse(t, root, origin, limit, cap) if err := t.remote.OnAccounts(t, id, keys, vals, proofs); err != nil { t.test.Errorf("Remote side rejected our delivery: %v", err) @@ -254,8 +254,8 @@ func defaultAccountRequestHandler(t *testPeer, id uint64, root common.Hash, orig return nil } -func createAccountRequestResponse(t *testPeer, root common.Hash, origin common.Hash, limit common.Hash, cap uint64) (keys []common.Hash, vals [][]byte, proofs [][]byte) { - var size uint64 +func createAccountRequestResponse(t *testPeer, root common.Hash, origin common.Hash, limit common.Hash, cap int) (keys []common.Hash, vals [][]byte, proofs [][]byte) { + var size int if limit == (common.Hash{}) { limit = common.MaxHash } @@ -266,7 +266,7 @@ func createAccountRequestResponse(t *testPeer, root common.Hash, origin common.H if bytes.Compare(origin[:], entry.k) <= 0 { keys = append(keys, common.BytesToHash(entry.k)) vals = append(vals, entry.v) - size += uint64(32 + len(entry.v)) + size += 32 + len(entry.v) } // If we've exceeded the request threshold, abort if bytes.Compare(entry.k, limit[:]) >= 0 { @@ -290,7 +290,7 @@ func createAccountRequestResponse(t *testPeer, root common.Hash, origin common.H } // defaultStorageRequestHandler is a well-behaving storage request handler -func defaultStorageRequestHandler(t *testPeer, requestId uint64, root common.Hash, accounts []common.Hash, bOrigin, bLimit []byte, max uint64) error { +func defaultStorageRequestHandler(t *testPeer, requestId uint64, root common.Hash, accounts []common.Hash, bOrigin, bLimit []byte, max int) error { hashes, slots, proofs := createStorageRequestResponse(t, root, accounts, bOrigin, bLimit, max) if err := t.remote.OnStorage(t, requestId, hashes, slots, proofs); err != nil { t.test.Errorf("Remote side rejected our delivery: %v", err) @@ -299,7 +299,7 @@ func defaultStorageRequestHandler(t *testPeer, requestId uint64, root common.Has return nil } -func defaultCodeRequestHandler(t *testPeer, id uint64, hashes []common.Hash, max uint64) error { +func defaultCodeRequestHandler(t *testPeer, id uint64, hashes []common.Hash, max int) error { var bytecodes [][]byte for _, h := range hashes { bytecodes = append(bytecodes, getCodeByHash(h)) @@ -311,8 +311,8 @@ func defaultCodeRequestHandler(t *testPeer, id uint64, hashes []common.Hash, max return nil } -func createStorageRequestResponse(t *testPeer, root common.Hash, accounts []common.Hash, origin, limit []byte, max uint64) (hashes [][]common.Hash, slots [][][]byte, proofs [][]byte) { - var size uint64 +func createStorageRequestResponse(t *testPeer, root common.Hash, accounts []common.Hash, origin, limit []byte, max int) (hashes [][]common.Hash, slots [][][]byte, proofs [][]byte) { + var size int for _, account := range accounts { // The first account might start from a different origin and end sooner var originHash common.Hash @@ -338,7 +338,7 @@ func createStorageRequestResponse(t *testPeer, root common.Hash, accounts []comm } keys = append(keys, common.BytesToHash(entry.k)) vals = append(vals, entry.v) - size += uint64(32 + len(entry.v)) + size += 32 + len(entry.v) if bytes.Compare(entry.k, limitHash[:]) >= 0 { break } @@ -377,8 +377,8 @@ func createStorageRequestResponse(t *testPeer, root common.Hash, accounts []comm // createStorageRequestResponseAlwaysProve tests a cornercase, where the peer always // supplies the proof for the last account, even if it is 'complete'. -func createStorageRequestResponseAlwaysProve(t *testPeer, root common.Hash, accounts []common.Hash, bOrigin, bLimit []byte, max uint64) (hashes [][]common.Hash, slots [][][]byte, proofs [][]byte) { - var size uint64 +func createStorageRequestResponseAlwaysProve(t *testPeer, root common.Hash, accounts []common.Hash, bOrigin, bLimit []byte, max int) (hashes [][]common.Hash, slots [][][]byte, proofs [][]byte) { + var size int max = max * 3 / 4 var origin common.Hash @@ -395,7 +395,7 @@ func createStorageRequestResponseAlwaysProve(t *testPeer, root common.Hash, acco } keys = append(keys, common.BytesToHash(entry.k)) vals = append(vals, entry.v) - size += uint64(32 + len(entry.v)) + size += 32 + len(entry.v) if size > max { exit = true } @@ -433,34 +433,34 @@ func createStorageRequestResponseAlwaysProve(t *testPeer, root common.Hash, acco } // emptyRequestAccountRangeFn is a rejects AccountRangeRequests -func emptyRequestAccountRangeFn(t *testPeer, requestId uint64, root common.Hash, origin common.Hash, limit common.Hash, cap uint64) error { +func emptyRequestAccountRangeFn(t *testPeer, requestId uint64, root common.Hash, origin common.Hash, limit common.Hash, cap int) error { t.remote.OnAccounts(t, requestId, nil, nil, nil) return nil } -func nonResponsiveRequestAccountRangeFn(t *testPeer, requestId uint64, root common.Hash, origin common.Hash, limit common.Hash, cap uint64) error { +func nonResponsiveRequestAccountRangeFn(t *testPeer, requestId uint64, root common.Hash, origin common.Hash, limit common.Hash, cap int) error { return nil } -func emptyTrieRequestHandler(t *testPeer, requestId uint64, root common.Hash, paths []TrieNodePathSet, cap uint64) error { +func emptyTrieRequestHandler(t *testPeer, requestId uint64, root common.Hash, paths []TrieNodePathSet, cap int) error { t.remote.OnTrieNodes(t, requestId, nil) return nil } -func nonResponsiveTrieRequestHandler(t *testPeer, requestId uint64, root common.Hash, paths []TrieNodePathSet, cap uint64) error { +func nonResponsiveTrieRequestHandler(t *testPeer, requestId uint64, root common.Hash, paths []TrieNodePathSet, cap int) error { return nil } -func emptyStorageRequestHandler(t *testPeer, requestId uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, max uint64) error { +func emptyStorageRequestHandler(t *testPeer, requestId uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, max int) error { t.remote.OnStorage(t, requestId, nil, nil, nil) return nil } -func nonResponsiveStorageRequestHandler(t *testPeer, requestId uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, max uint64) error { +func nonResponsiveStorageRequestHandler(t *testPeer, requestId uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, max int) error { return nil } -func proofHappyStorageRequestHandler(t *testPeer, requestId uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, max uint64) error { +func proofHappyStorageRequestHandler(t *testPeer, requestId uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, max int) error { hashes, slots, proofs := createStorageRequestResponseAlwaysProve(t, root, accounts, origin, limit, max) if err := t.remote.OnStorage(t, requestId, hashes, slots, proofs); err != nil { t.test.Errorf("Remote side rejected our delivery: %v", err) @@ -475,7 +475,7 @@ func proofHappyStorageRequestHandler(t *testPeer, requestId uint64, root common. // return nil //} -func corruptCodeRequestHandler(t *testPeer, id uint64, hashes []common.Hash, max uint64) error { +func corruptCodeRequestHandler(t *testPeer, id uint64, hashes []common.Hash, max int) error { var bytecodes [][]byte for _, h := range hashes { // Send back the hashes @@ -489,7 +489,7 @@ func corruptCodeRequestHandler(t *testPeer, id uint64, hashes []common.Hash, max return nil } -func cappedCodeRequestHandler(t *testPeer, id uint64, hashes []common.Hash, max uint64) error { +func cappedCodeRequestHandler(t *testPeer, id uint64, hashes []common.Hash, max int) error { var bytecodes [][]byte for _, h := range hashes[:1] { bytecodes = append(bytecodes, getCodeByHash(h)) @@ -503,11 +503,11 @@ func cappedCodeRequestHandler(t *testPeer, id uint64, hashes []common.Hash, max } // starvingStorageRequestHandler is somewhat well-behaving storage handler, but it caps the returned results to be very small -func starvingStorageRequestHandler(t *testPeer, requestId uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, max uint64) error { +func starvingStorageRequestHandler(t *testPeer, requestId uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, max int) error { return defaultStorageRequestHandler(t, requestId, root, accounts, origin, limit, 500) } -func starvingAccountRequestHandler(t *testPeer, requestId uint64, root common.Hash, origin common.Hash, limit common.Hash, cap uint64) error { +func starvingAccountRequestHandler(t *testPeer, requestId uint64, root common.Hash, origin common.Hash, limit common.Hash, cap int) error { return defaultAccountRequestHandler(t, requestId, root, origin, limit, 500) } @@ -515,7 +515,7 @@ func starvingAccountRequestHandler(t *testPeer, requestId uint64, root common.Ha // return defaultAccountRequestHandler(t, requestId-1, root, origin, 500) //} -func corruptAccountRequestHandler(t *testPeer, requestId uint64, root common.Hash, origin common.Hash, limit common.Hash, cap uint64) error { +func corruptAccountRequestHandler(t *testPeer, requestId uint64, root common.Hash, origin common.Hash, limit common.Hash, cap int) error { hashes, accounts, proofs := createAccountRequestResponse(t, root, origin, limit, cap) if len(proofs) > 0 { proofs = proofs[1:] @@ -529,7 +529,7 @@ func corruptAccountRequestHandler(t *testPeer, requestId uint64, root common.Has } // corruptStorageRequestHandler doesn't provide good proofs -func corruptStorageRequestHandler(t *testPeer, requestId uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, max uint64) error { +func corruptStorageRequestHandler(t *testPeer, requestId uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, max int) error { hashes, slots, proofs := createStorageRequestResponse(t, root, accounts, origin, limit, max) if len(proofs) > 0 { proofs = proofs[1:] @@ -542,7 +542,7 @@ func corruptStorageRequestHandler(t *testPeer, requestId uint64, root common.Has return nil } -func noProofStorageRequestHandler(t *testPeer, requestId uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, max uint64) error { +func noProofStorageRequestHandler(t *testPeer, requestId uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, max int) error { hashes, slots, _ := createStorageRequestResponse(t, root, accounts, origin, limit, max) if err := t.remote.OnStorage(t, requestId, hashes, slots, nil); err != nil { t.logger.Info("remote error on delivery (as expected)", "error", err) @@ -577,7 +577,7 @@ func testSyncBloatedProof(t *testing.T, scheme string) { source.accountTrie = sourceAccountTrie.Copy() source.accountValues = elems - source.accountRequestHandler = func(t *testPeer, requestId uint64, root common.Hash, origin common.Hash, limit common.Hash, cap uint64) error { + source.accountRequestHandler = func(t *testPeer, requestId uint64, root common.Hash, origin common.Hash, limit common.Hash, cap int) error { var ( keys []common.Hash vals [][]byte @@ -1165,7 +1165,7 @@ func testSyncNoStorageAndOneCodeCappedPeer(t *testing.T, scheme string) { var counter int syncer := setupSyncer( nodeScheme, - mkSource("capped", func(t *testPeer, id uint64, hashes []common.Hash, max uint64) error { + mkSource("capped", func(t *testPeer, id uint64, hashes []common.Hash, max int) error { counter++ return cappedCodeRequestHandler(t, id, hashes, max) }), @@ -1432,7 +1432,7 @@ func testSyncWithUnevenStorage(t *testing.T, scheme string) { source.accountValues = accounts source.setStorageTries(storageTries) source.storageValues = storageElems - source.storageRequestHandler = func(t *testPeer, reqId uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, max uint64) error { + source.storageRequestHandler = func(t *testPeer, reqId uint64, root common.Hash, accounts []common.Hash, origin, limit []byte, max int) error { return defaultStorageRequestHandler(t, reqId, root, accounts, origin, limit, 128) // retrieve storage in large mode } return source diff --git a/eth/protocols/snap/tracker.go b/eth/protocols/snap/tracker.go deleted file mode 100644 index 2cf59cc23a..0000000000 --- a/eth/protocols/snap/tracker.go +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright 2021 The go-ethereum Authors -// This file is part of the go-ethereum library. -// -// The go-ethereum library is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// The go-ethereum library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with the go-ethereum library. If not, see . - -package snap - -import ( - "time" - - "github.com/ethereum/go-ethereum/p2p/tracker" -) - -// requestTracker is a singleton tracker for request times. -var requestTracker = tracker.New(ProtocolName, time.Minute) diff --git a/p2p/tracker/tracker.go b/p2p/tracker/tracker.go index a1cf6f1119..3a9135aa3b 100644 --- a/p2p/tracker/tracker.go +++ b/p2p/tracker/tracker.go @@ -18,52 +18,63 @@ package tracker import ( "container/list" + "errors" "fmt" "sync" "time" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/metrics" + "github.com/ethereum/go-ethereum/p2p" ) const ( - // trackedGaugeName is the prefix of the per-packet request tracking. trackedGaugeName = "p2p/tracked" - - // lostMeterName is the prefix of the per-packet request expirations. - lostMeterName = "p2p/lost" - - // staleMeterName is the prefix of the per-packet stale responses. - staleMeterName = "p2p/stale" - - // waitHistName is the prefix of the per-packet (req only) waiting time histograms. - waitHistName = "p2p/wait" + lostMeterName = "p2p/lost" + staleMeterName = "p2p/stale" + waitHistName = "p2p/wait" // maxTrackedPackets is a huge number to act as a failsafe on the number of // pending requests the node will track. It should never be hit unless an // attacker figures out a way to spin requests. - maxTrackedPackets = 100000 + maxTrackedPackets = 10000 ) -// request tracks sent network requests which have not yet received a response. -type request struct { - peer string - version uint // Protocol version +var ( + ErrNoMatchingRequest = errors.New("no matching request") + ErrTooManyItems = errors.New("response is larger than request allows") + ErrCollision = errors.New("request ID collision") + ErrCodeMismatch = errors.New("wrong response code for request") + ErrLimitReached = errors.New("request limit reached") + ErrStopped = errors.New("tracker stopped") +) - reqCode uint64 // Protocol message code of the request - resCode uint64 // Protocol message code of the expected response +// Request tracks sent network requests which have not yet received a response. +type Request struct { + ID uint64 // Request ID + Size int // Number/size of requested items + ReqCode uint64 // Protocol message code of the request + RespCode uint64 // Protocol message code of the expected response time time.Time // Timestamp when the request was made expire *list.Element // Expiration marker to untrack it } +type Response struct { + ID uint64 // Request ID of the response + MsgCode uint64 // Protocol message code + Size int // number/size of items in response +} + // Tracker is a pending network request tracker to measure how much time it takes // a remote peer to respond. type Tracker struct { - protocol string // Protocol capability identifier for the metrics - timeout time.Duration // Global timeout after which to drop a tracked packet + cap p2p.Cap // Protocol capability identifier for the metrics - pending map[uint64]*request // Currently pending requests + peer string // Peer ID + timeout time.Duration // Global timeout after which to drop a tracked packet + + pending map[uint64]*Request // Currently pending requests expire *list.List // Linked list tracking the expiration order wake *time.Timer // Timer tracking the expiration of the next item @@ -72,52 +83,53 @@ type Tracker struct { // New creates a new network request tracker to monitor how much time it takes to // fill certain requests and how individual peers perform. -func New(protocol string, timeout time.Duration) *Tracker { +func New(cap p2p.Cap, peerID string, timeout time.Duration) *Tracker { return &Tracker{ - protocol: protocol, - timeout: timeout, - pending: make(map[uint64]*request), - expire: list.New(), + cap: cap, + peer: peerID, + timeout: timeout, + pending: make(map[uint64]*Request), + expire: list.New(), } } // Track adds a network request to the tracker to wait for a response to arrive // or until the request it cancelled or times out. -func (t *Tracker) Track(peer string, version uint, reqCode uint64, resCode uint64, id uint64) { - if !metrics.Enabled() { - return - } +func (t *Tracker) Track(req Request) error { t.lock.Lock() defer t.lock.Unlock() + if t.expire == nil { + return ErrStopped + } + // If there's a duplicate request, we've just random-collided (or more probably, // we have a bug), report it. We could also add a metric, but we're not really // expecting ourselves to be buggy, so a noisy warning should be enough. - if _, ok := t.pending[id]; ok { - log.Error("Network request id collision", "protocol", t.protocol, "version", version, "code", reqCode, "id", id) - return + if _, ok := t.pending[req.ID]; ok { + log.Error("Network request id collision", "cap", t.cap, "code", req.ReqCode, "id", req.ID) + return ErrCollision } // If we have too many pending requests, bail out instead of leaking memory if pending := len(t.pending); pending >= maxTrackedPackets { - log.Error("Request tracker exceeded allowance", "pending", pending, "peer", peer, "protocol", t.protocol, "version", version, "code", reqCode) - return + log.Error("Request tracker exceeded allowance", "pending", pending, "peer", t.peer, "cap", t.cap, "code", req.ReqCode) + return ErrLimitReached } + // Id doesn't exist yet, start tracking it - t.pending[id] = &request{ - peer: peer, - version: version, - reqCode: reqCode, - resCode: resCode, - time: time.Now(), - expire: t.expire.PushBack(id), + req.time = time.Now() + req.expire = t.expire.PushBack(req.ID) + t.pending[req.ID] = &req + + if metrics.Enabled() { + t.trackedGauge(req.ReqCode).Inc(1) } - g := fmt.Sprintf("%s/%s/%d/%#02x", trackedGaugeName, t.protocol, version, reqCode) - metrics.GetOrRegisterGauge(g, nil).Inc(1) // If we've just inserted the first item, start the expiration timer if t.wake == nil { t.wake = time.AfterFunc(t.timeout, t.clean) } + return nil } // clean is called automatically when a preset time passes without a response @@ -142,11 +154,10 @@ func (t *Tracker) clean() { t.expire.Remove(head) delete(t.pending, id) - g := fmt.Sprintf("%s/%s/%d/%#02x", trackedGaugeName, t.protocol, req.version, req.reqCode) - metrics.GetOrRegisterGauge(g, nil).Dec(1) - - m := fmt.Sprintf("%s/%s/%d/%#02x", lostMeterName, t.protocol, req.version, req.reqCode) - metrics.GetOrRegisterMeter(m, nil).Mark(1) + if metrics.Enabled() { + t.trackedGauge(req.ReqCode).Dec(1) + t.lostMeter(req.ReqCode).Mark(1) + } } t.schedule() } @@ -161,46 +172,92 @@ func (t *Tracker) schedule() { t.wake = time.AfterFunc(time.Until(t.pending[t.expire.Front().Value.(uint64)].time.Add(t.timeout)), t.clean) } -// Fulfil fills a pending request, if any is available, reporting on various metrics. -func (t *Tracker) Fulfil(peer string, version uint, code uint64, id uint64) { - if !metrics.Enabled() { - return +// Stop reclaims resources of the tracker. +func (t *Tracker) Stop() { + t.lock.Lock() + defer t.lock.Unlock() + + if t.wake != nil { + t.wake.Stop() + t.wake = nil } + if metrics.Enabled() { + // Ensure metrics are decremented for pending requests. + counts := make(map[uint64]int64) + for _, req := range t.pending { + counts[req.ReqCode]++ + } + for code, count := range counts { + t.trackedGauge(code).Dec(count) + } + } + clear(t.pending) + t.expire = nil +} + +// Fulfil fills a pending request, if any is available, reporting on various metrics. +func (t *Tracker) Fulfil(resp Response) error { t.lock.Lock() defer t.lock.Unlock() // If it's a non existing request, track as stale response - req, ok := t.pending[id] + req, ok := t.pending[resp.ID] if !ok { - m := fmt.Sprintf("%s/%s/%d/%#02x", staleMeterName, t.protocol, version, code) - metrics.GetOrRegisterMeter(m, nil).Mark(1) - return + if metrics.Enabled() { + t.staleMeter(resp.MsgCode).Mark(1) + } + return ErrNoMatchingRequest } + // If the response is funky, it might be some active attack - if req.peer != peer || req.version != version || req.resCode != code { - log.Warn("Network response id collision", - "have", fmt.Sprintf("%s:%s/%d:%d", peer, t.protocol, version, code), - "want", fmt.Sprintf("%s:%s/%d:%d", peer, t.protocol, req.version, req.resCode), + if req.RespCode != resp.MsgCode { + log.Warn("Network response code collision", + "have", fmt.Sprintf("%s:%s/%d:%d", t.peer, t.cap.Name, t.cap.Version, resp.MsgCode), + "want", fmt.Sprintf("%s:%s/%d:%d", t.peer, t.cap.Name, t.cap.Version, req.RespCode), ) - return + return ErrCodeMismatch } + if resp.Size > req.Size { + return ErrTooManyItems + } + // Everything matches, mark the request serviced and meter it wasHead := req.expire.Prev() == nil t.expire.Remove(req.expire) - delete(t.pending, id) + delete(t.pending, req.ID) if wasHead { if t.wake.Stop() { t.schedule() } } - g := fmt.Sprintf("%s/%s/%d/%#02x", trackedGaugeName, t.protocol, req.version, req.reqCode) - metrics.GetOrRegisterGauge(g, nil).Dec(1) - h := fmt.Sprintf("%s/%s/%d/%#02x", waitHistName, t.protocol, req.version, req.reqCode) - sampler := func() metrics.Sample { - return metrics.ResettingSample( - metrics.NewExpDecaySample(1028, 0.015), - ) + // Update request metrics. + if metrics.Enabled() { + t.trackedGauge(req.ReqCode).Dec(1) + t.waitHistogram(req.ReqCode).Update(time.Since(req.time).Microseconds()) } - metrics.GetOrRegisterHistogramLazy(h, nil, sampler).Update(time.Since(req.time).Microseconds()) + return nil +} + +func (t *Tracker) trackedGauge(code uint64) *metrics.Gauge { + name := fmt.Sprintf("%s/%s/%d/%#02x", trackedGaugeName, t.cap.Name, t.cap.Version, code) + return metrics.GetOrRegisterGauge(name, nil) +} + +func (t *Tracker) lostMeter(code uint64) *metrics.Meter { + name := fmt.Sprintf("%s/%s/%d/%#02x", lostMeterName, t.cap.Name, t.cap.Version, code) + return metrics.GetOrRegisterMeter(name, nil) +} + +func (t *Tracker) staleMeter(code uint64) *metrics.Meter { + name := fmt.Sprintf("%s/%s/%d/%#02x", staleMeterName, t.cap.Name, t.cap.Version, code) + return metrics.GetOrRegisterMeter(name, nil) +} + +func (t *Tracker) waitHistogram(code uint64) metrics.Histogram { + name := fmt.Sprintf("%s/%s/%d/%#02x", waitHistName, t.cap.Name, t.cap.Version, code) + sampler := func() metrics.Sample { + return metrics.ResettingSample(metrics.NewExpDecaySample(1028, 0.015)) + } + return metrics.GetOrRegisterHistogramLazy(name, nil, sampler) } diff --git a/p2p/tracker/tracker_test.go b/p2p/tracker/tracker_test.go new file mode 100644 index 0000000000..a37a59f70f --- /dev/null +++ b/p2p/tracker/tracker_test.go @@ -0,0 +1,64 @@ +// Copyright 2026 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package tracker + +import ( + "testing" + "time" + + "github.com/ethereum/go-ethereum/metrics" + "github.com/ethereum/go-ethereum/p2p" +) + +// This checks that metrics gauges for pending requests are be decremented when a +// Tracker is stopped. +func TestMetricsOnStop(t *testing.T) { + metrics.Enable() + + cap := p2p.Cap{Name: "test", Version: 1} + tr := New(cap, "peer1", time.Minute) + + // Track some requests with different ReqCodes. + var id uint64 + for i := 0; i < 3; i++ { + tr.Track(Request{ID: id, ReqCode: 0x01, RespCode: 0x02, Size: 1}) + id++ + } + for i := 0; i < 5; i++ { + tr.Track(Request{ID: id, ReqCode: 0x03, RespCode: 0x04, Size: 1}) + id++ + } + + gauge1 := tr.trackedGauge(0x01) + gauge2 := tr.trackedGauge(0x03) + + if gauge1.Snapshot().Value() != 3 { + t.Fatalf("gauge1 value mismatch: got %d, want 3", gauge1.Snapshot().Value()) + } + if gauge2.Snapshot().Value() != 5 { + t.Fatalf("gauge2 value mismatch: got %d, want 5", gauge2.Snapshot().Value()) + } + + tr.Stop() + + if gauge1.Snapshot().Value() != 0 { + t.Fatalf("gauge1 value after stop: got %d, want 0", gauge1.Snapshot().Value()) + } + if gauge2.Snapshot().Value() != 0 { + t.Fatalf("gauge2 value after stop: got %d, want 0", gauge2.Snapshot().Value()) + } +} From a4b3898f9041fd7c77130dc17ba2b80441a998af Mon Sep 17 00:00:00 2001 From: Jonny Rhea <5555162+jrhea@users.noreply.github.com> Date: Tue, 17 Feb 2026 07:12:42 -0600 Subject: [PATCH 038/161] internal/telemetry: don't create internal spans without parents (#33780) This prevents orphaned spans from appearing in traces. --- internal/telemetry/telemetry.go | 5 ++ internal/telemetry/telemetry_test.go | 98 ++++++++++++++++++++++++++++ 2 files changed, 103 insertions(+) create mode 100644 internal/telemetry/telemetry_test.go diff --git a/internal/telemetry/telemetry.go b/internal/telemetry/telemetry.go index 470bafed25..27fe9b0a7a 100644 --- a/internal/telemetry/telemetry.go +++ b/internal/telemetry/telemetry.go @@ -52,6 +52,11 @@ func StartSpan(ctx context.Context, spanName string, attributes ...Attribute) (c // StartSpanWithTracer requires a tracer to be passed in and creates a SpanKind=INTERNAL span. func StartSpanWithTracer(ctx context.Context, tracer trace.Tracer, name string, attributes ...Attribute) (context.Context, trace.Span, func(*error)) { + // Don't create a span if there's no parent span in the context. + parent := trace.SpanFromContext(ctx) + if !parent.SpanContext().IsValid() { + return ctx, parent, func(*error) {} + } return startSpan(ctx, tracer, trace.SpanKindInternal, name, attributes...) } diff --git a/internal/telemetry/telemetry_test.go b/internal/telemetry/telemetry_test.go new file mode 100644 index 0000000000..def85b735e --- /dev/null +++ b/internal/telemetry/telemetry_test.go @@ -0,0 +1,98 @@ +// Copyright 2026 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package telemetry + +import ( + "context" + "testing" + + sdktrace "go.opentelemetry.io/otel/sdk/trace" + "go.opentelemetry.io/otel/sdk/trace/tracetest" + "go.opentelemetry.io/otel/trace" +) + +// newTestTracer creates a TracerProvider backed by an in-memory exporter. +func newTestTracer(t *testing.T) (trace.Tracer, *sdktrace.TracerProvider, *tracetest.InMemoryExporter) { + t.Helper() + exporter := tracetest.NewInMemoryExporter() + tp := sdktrace.NewTracerProvider(sdktrace.WithSyncer(exporter)) + t.Cleanup(func() { _ = tp.Shutdown(context.Background()) }) + return tp.Tracer("test"), tp, exporter +} + +func TestStartSpanWithTracer_NoParent(t *testing.T) { + t.Parallel() + tracer, tp, exporter := newTestTracer(t) + + // Create a span without a parent. + ctx := context.Background() + retCtx, _, endSpan := StartSpanWithTracer(ctx, tracer, "should-not-exist") + endSpan(nil) + + // The returned context should be the original context (unchanged). + if retCtx != ctx { + t.Fatal("expected original context to be returned unchanged") + } + + // Flush and verify no spans were recorded. + if err := tp.ForceFlush(context.Background()); err != nil { + t.Fatalf("failed to flush: %v", err) + } + spans := exporter.GetSpans() + if len(spans) != 0 { + t.Fatalf("expected no spans, got %d", len(spans)) + } +} + +func TestStartSpanWithTracer_WithParent(t *testing.T) { + t.Parallel() + tracer, tp, exporter := newTestTracer(t) + + // Create a parent span to establish a valid span context. + ctx, parentSpan := tracer.Start(context.Background(), "parent") + defer parentSpan.End() + + // Should create a real child span. + _, _, endSpan := StartSpanWithTracer(ctx, tracer, "child") + endSpan(nil) + + // Flush and verify the child span was recorded. + parentSpan.End() + if err := tp.ForceFlush(context.Background()); err != nil { + t.Fatalf("failed to flush: %v", err) + } + spans := exporter.GetSpans() + var childSpan *tracetest.SpanStub + for i := range spans { + if spans[i].Name == "child" { + childSpan = &spans[i] + break + } + } + if childSpan == nil { + t.Fatal("child span not found") + } + + // Verify it is parented to the correct trace. + if childSpan.Parent.TraceID() != parentSpan.SpanContext().TraceID() { + t.Errorf("trace ID mismatch: got %s, want %s", + childSpan.Parent.TraceID(), parentSpan.SpanContext().TraceID()) + } + if childSpan.SpanKind != trace.SpanKindInternal { + t.Errorf("expected SpanKindInternal, got %v", childSpan.SpanKind) + } +} From 550ca91b179493e5c0394ee644efed3deefb890e Mon Sep 17 00:00:00 2001 From: Sina M <1591639+s1na@users.noreply.github.com> Date: Tue, 17 Feb 2026 15:42:48 +0100 Subject: [PATCH 039/161] consensus/misc: hardening header verification (#33860) Defensively check parent's base fee before using it for calculations. --- consensus/misc/eip1559/eip1559.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/consensus/misc/eip1559/eip1559.go b/consensus/misc/eip1559/eip1559.go index a90bd744b2..9a4cd320a8 100644 --- a/consensus/misc/eip1559/eip1559.go +++ b/consensus/misc/eip1559/eip1559.go @@ -43,6 +43,10 @@ func VerifyEIP1559Header(config *params.ChainConfig, parent, header *types.Heade if header.BaseFee == nil { return errors.New("header is missing baseFee") } + // Verify the parent header is not malformed + if config.IsLondon(parent.Number) && parent.BaseFee == nil { + return errors.New("parent header is missing baseFee") + } // Verify the baseFee is correct based on the parent header. expectedBaseFee := CalcBaseFee(config, parent) if header.BaseFee.Cmp(expectedBaseFee) != 0 { From c709c19b40f4b6655d7944c3fb0c36a14c6774d6 Mon Sep 17 00:00:00 2001 From: Jonny Rhea <5555162+jrhea@users.noreply.github.com> Date: Tue, 17 Feb 2026 10:08:57 -0600 Subject: [PATCH 040/161] eth/catalyst: add initial OpenTelemetry tracing for newPayload (#33521) This PR adds initial OpenTelemetry tracing to the Engine API, focusing on engine_newPayload*. ``` jsonrpc.engine/newPayloadV4 | |- engine.newPayload [block.number, block.hash, tx.count] | |- core.blockchain.InsertBlockWithoutSetHead | |- bc.processor.Process | | |- core.ApplyTransactionWithEVM [tx.hash, tx.index] | | |- core.ApplyTransactionWithEVM [tx.hash, tx.index] | | |- ... (one per transaction) | | |- core.postExecution | |- bc.validator.ValidateState ``` --------- Co-authored-by: Felix Lange --- cmd/keeper/go.mod | 6 ++++ cmd/keeper/go.sum | 19 +++++++++++ cmd/keeper/main.go | 3 +- core/block_validator_test.go | 3 +- core/blockchain.go | 45 +++++++++++++++----------- core/blockchain_test.go | 5 +-- core/state_processor.go | 54 +++++++++++++++++++++----------- core/stateless.go | 6 ++-- core/types.go | 3 +- eth/api_debug.go | 4 +-- eth/catalyst/api.go | 29 +++++++++++------ eth/catalyst/api_test.go | 32 +++++++++---------- eth/catalyst/simulated_beacon.go | 14 ++++++++- eth/catalyst/witness.go | 19 +++++------ eth/state_accessor.go | 2 +- 15 files changed, 162 insertions(+), 82 deletions(-) diff --git a/cmd/keeper/go.mod b/cmd/keeper/go.mod index c193f4fc2d..388b2e0610 100644 --- a/cmd/keeper/go.mod +++ b/cmd/keeper/go.mod @@ -20,6 +20,8 @@ require ( github.com/ethereum/c-kzg-4844/v2 v2.1.5 // indirect github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab // indirect github.com/ferranbt/fastssz v0.1.4 // indirect + github.com/go-logr/logr v1.4.3 // indirect + github.com/go-logr/stdr v1.2.2 // indirect github.com/go-ole/go-ole v1.3.0 // indirect github.com/gofrs/flock v0.12.1 // indirect github.com/golang/snappy v1.0.0 // indirect @@ -32,6 +34,10 @@ require ( github.com/supranational/blst v0.3.16-0.20250831170142-f48500c1fdbe // indirect github.com/tklauser/go-sysconf v0.3.12 // indirect github.com/tklauser/numcpus v0.6.1 // indirect + go.opentelemetry.io/auto/sdk v1.2.1 // indirect + go.opentelemetry.io/otel v1.39.0 // indirect + go.opentelemetry.io/otel/metric v1.39.0 // indirect + go.opentelemetry.io/otel/trace v1.39.0 // indirect golang.org/x/crypto v0.44.0 // indirect golang.org/x/sync v0.18.0 // indirect golang.org/x/sys v0.39.0 // indirect diff --git a/cmd/keeper/go.sum b/cmd/keeper/go.sum index e9c081e605..2c24542c3b 100644 --- a/cmd/keeper/go.sum +++ b/cmd/keeper/go.sum @@ -48,6 +48,11 @@ github.com/ferranbt/fastssz v0.1.4 h1:OCDB+dYDEQDvAgtAGnTSidK1Pe2tW3nFV40XyMkTeD github.com/ferranbt/fastssz v0.1.4/go.mod h1:Ea3+oeoRGGLGm5shYAeDgu6PGUlcvQhE2fILyD9+tGg= github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps= github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= @@ -59,6 +64,10 @@ github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v1.0.0 h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs= github.com/golang/snappy v1.0.0/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= github.com/holiman/uint256 v1.3.2 h1:a9EgMPSC1AAaj1SZL5zIQD3WbwTuHrMGOerLjGmM/TA= @@ -108,6 +117,16 @@ github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFA github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= +go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= +go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= +go.opentelemetry.io/otel v1.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48= +go.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8= +go.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0= +go.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs= +go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18= +go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE= +go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI= +go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA= golang.org/x/crypto v0.44.0 h1:A97SsFvM3AIwEEmTBiaxPPTYpDC47w720rdiiUvgoAU= golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc= golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df h1:UA2aFVmmsIlefxMk29Dp2juaUSth8Pyn3Tq5Y5mJGME= diff --git a/cmd/keeper/main.go b/cmd/keeper/main.go index 9b459f6f36..df6881acbf 100644 --- a/cmd/keeper/main.go +++ b/cmd/keeper/main.go @@ -17,6 +17,7 @@ package main import ( + "context" "fmt" "os" "runtime/debug" @@ -52,7 +53,7 @@ func main() { } vmConfig := vm.Config{} - crossStateRoot, crossReceiptRoot, err := core.ExecuteStateless(chainConfig, vmConfig, payload.Block, payload.Witness) + crossStateRoot, crossReceiptRoot, err := core.ExecuteStateless(context.Background(), chainConfig, vmConfig, payload.Block, payload.Witness) if err != nil { fmt.Fprintf(os.Stderr, "stateless self-validation failed: %v\n", err) os.Exit(10) diff --git a/core/block_validator_test.go b/core/block_validator_test.go index fcc99effd0..0280862e3c 100644 --- a/core/block_validator_test.go +++ b/core/block_validator_test.go @@ -17,6 +17,7 @@ package core import ( + "context" "math/big" "testing" "time" @@ -210,7 +211,7 @@ func testHeaderVerificationForMerging(t *testing.T, isClique bool) { t.Fatalf("post-block %d: unexpected result returned: %v", i, result) case <-time.After(25 * time.Millisecond): } - chain.InsertBlockWithoutSetHead(postBlocks[i], false) + chain.InsertBlockWithoutSetHead(context.Background(), postBlocks[i], false) } // Verify the blocks with pre-merge blocks and post-merge blocks diff --git a/core/blockchain.go b/core/blockchain.go index 6f1db96463..d41f301243 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -18,6 +18,7 @@ package core import ( + "context" "errors" "fmt" "io" @@ -47,6 +48,7 @@ import ( "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/event" "github.com/ethereum/go-ethereum/internal/syncx" + "github.com/ethereum/go-ethereum/internal/telemetry" "github.com/ethereum/go-ethereum/internal/version" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/metrics" @@ -1818,7 +1820,7 @@ func (bc *BlockChain) InsertChain(chain types.Blocks) (int, error) { } defer bc.chainmu.Unlock() - _, n, err := bc.insertChain(chain, true, false) // No witness collection for mass inserts (would get super large) + _, n, err := bc.insertChain(context.Background(), chain, true, false) // No witness collection for mass inserts (would get super large) return n, err } @@ -1830,7 +1832,7 @@ func (bc *BlockChain) InsertChain(chain types.Blocks) (int, error) { // racey behaviour. If a sidechain import is in progress, and the historic state // is imported, but then new canon-head is added before the actual sidechain // completes, then the historic state could be pruned again -func (bc *BlockChain) insertChain(chain types.Blocks, setHead bool, makeWitness bool) (*stateless.Witness, int, error) { +func (bc *BlockChain) insertChain(ctx context.Context, chain types.Blocks, setHead bool, makeWitness bool) (*stateless.Witness, int, error) { // If the chain is terminating, don't even bother starting up. if bc.insertStopped() { return nil, 0, nil @@ -1912,11 +1914,11 @@ func (bc *BlockChain) insertChain(chain types.Blocks, setHead bool, makeWitness if setHead { // First block is pruned, insert as sidechain and reorg only if TD grows enough log.Debug("Pruned ancestor, inserting as sidechain", "number", block.Number(), "hash", block.Hash()) - return bc.insertSideChain(block, it, makeWitness) + return bc.insertSideChain(ctx, block, it, makeWitness) } else { // We're post-merge and the parent is pruned, try to recover the parent state log.Debug("Pruned ancestor", "number", block.Number(), "hash", block.Hash()) - _, err := bc.recoverAncestors(block, makeWitness) + _, err := bc.recoverAncestors(ctx, block, makeWitness) return nil, it.index, err } // Some other error(except ErrKnownBlock) occurred, abort. @@ -1988,7 +1990,7 @@ func (bc *BlockChain) insertChain(chain types.Blocks, setHead bool, makeWitness } // The traced section of block import. start := time.Now() - res, err := bc.ProcessBlock(parent.Root, block, setHead, makeWitness && len(chain) == 1) + res, err := bc.ProcessBlock(ctx, parent.Root, block, setHead, makeWitness && len(chain) == 1) if err != nil { return nil, it.index, err } @@ -2073,7 +2075,7 @@ func (bpr *blockProcessingResult) Stats() *ExecuteStats { // ProcessBlock executes and validates the given block. If there was no error // it writes the block and associated state to database. -func (bc *BlockChain) ProcessBlock(parentRoot common.Hash, block *types.Block, setHead bool, makeWitness bool) (result *blockProcessingResult, blockEndErr error) { +func (bc *BlockChain) ProcessBlock(ctx context.Context, parentRoot common.Hash, block *types.Block, setHead bool, makeWitness bool) (result *blockProcessingResult, blockEndErr error) { var ( err error startTime = time.Now() @@ -2164,7 +2166,9 @@ func (bc *BlockChain) ProcessBlock(parentRoot common.Hash, block *types.Block, s // Process block using the parent state as reference point pstart := time.Now() - res, err := bc.processor.Process(block, statedb, bc.cfg.VmConfig) + pctx, _, spanEnd := telemetry.StartSpan(ctx, "bc.processor.Process") + res, err := bc.processor.Process(pctx, block, statedb, bc.cfg.VmConfig) + spanEnd(&err) if err != nil { bc.reportBadBlock(block, res, err) return nil, err @@ -2172,7 +2176,10 @@ func (bc *BlockChain) ProcessBlock(parentRoot common.Hash, block *types.Block, s ptime := time.Since(pstart) vstart := time.Now() - if err := bc.validator.ValidateState(block, statedb, res, false); err != nil { + _, _, spanEnd = telemetry.StartSpan(ctx, "bc.validator.ValidateState") + err = bc.validator.ValidateState(block, statedb, res, false) + spanEnd(&err) + if err != nil { bc.reportBadBlock(block, res, err) return nil, err } @@ -2195,7 +2202,7 @@ func (bc *BlockChain) ProcessBlock(parentRoot common.Hash, block *types.Block, s task := types.NewBlockWithHeader(context).WithBody(*block.Body()) // Run the stateless self-cross-validation - crossStateRoot, crossReceiptRoot, err := ExecuteStateless(bc.chainConfig, bc.cfg.VmConfig, task, witness) + crossStateRoot, crossReceiptRoot, err := ExecuteStateless(ctx, bc.chainConfig, bc.cfg.VmConfig, task, witness) if err != nil { return nil, fmt.Errorf("stateless self-validation failed: %v", err) } @@ -2282,7 +2289,7 @@ func (bc *BlockChain) ProcessBlock(parentRoot common.Hash, block *types.Block, s // The method writes all (header-and-body-valid) blocks to disk, then tries to // switch over to the new chain if the TD exceeded the current chain. // insertSideChain is only used pre-merge. -func (bc *BlockChain) insertSideChain(block *types.Block, it *insertIterator, makeWitness bool) (*stateless.Witness, int, error) { +func (bc *BlockChain) insertSideChain(ctx context.Context, block *types.Block, it *insertIterator, makeWitness bool) (*stateless.Witness, int, error) { var current = bc.CurrentBlock() // The first sidechain block error is already verified to be ErrPrunedAncestor. @@ -2363,7 +2370,7 @@ func (bc *BlockChain) insertSideChain(block *types.Block, it *insertIterator, ma // memory here. if len(blocks) >= 2048 || memory > 64*1024*1024 { log.Info("Importing heavy sidechain segment", "blocks", len(blocks), "start", blocks[0].NumberU64(), "end", block.NumberU64()) - if _, _, err := bc.insertChain(blocks, true, false); err != nil { + if _, _, err := bc.insertChain(ctx, blocks, true, false); err != nil { return nil, 0, err } blocks, memory = blocks[:0], 0 @@ -2377,7 +2384,7 @@ func (bc *BlockChain) insertSideChain(block *types.Block, it *insertIterator, ma } if len(blocks) > 0 { log.Info("Importing sidechain segment", "start", blocks[0].NumberU64(), "end", blocks[len(blocks)-1].NumberU64()) - return bc.insertChain(blocks, true, makeWitness) + return bc.insertChain(ctx, blocks, true, makeWitness) } return nil, 0, nil } @@ -2386,7 +2393,7 @@ func (bc *BlockChain) insertSideChain(block *types.Block, it *insertIterator, ma // all the ancestor blocks since that. // recoverAncestors is only used post-merge. // We return the hash of the latest block that we could correctly validate. -func (bc *BlockChain) recoverAncestors(block *types.Block, makeWitness bool) (common.Hash, error) { +func (bc *BlockChain) recoverAncestors(ctx context.Context, block *types.Block, makeWitness bool) (common.Hash, error) { // Gather all the sidechain hashes (full blocks may be memory heavy) var ( hashes []common.Hash @@ -2426,7 +2433,7 @@ func (bc *BlockChain) recoverAncestors(block *types.Block, makeWitness bool) (co } else { b = bc.GetBlock(hashes[i], numbers[i]) } - if _, _, err := bc.insertChain(types.Blocks{b}, false, makeWitness && i == 0); err != nil { + if _, _, err := bc.insertChain(ctx, types.Blocks{b}, false, makeWitness && i == 0); err != nil { return b.ParentHash(), err } } @@ -2653,14 +2660,16 @@ func (bc *BlockChain) reorg(oldHead *types.Header, newHead *types.Header) error // The key difference between the InsertChain is it won't do the canonical chain // updating. It relies on the additional SetCanonical call to finalize the entire // procedure. -func (bc *BlockChain) InsertBlockWithoutSetHead(block *types.Block, makeWitness bool) (*stateless.Witness, error) { +func (bc *BlockChain) InsertBlockWithoutSetHead(ctx context.Context, block *types.Block, makeWitness bool) (witness *stateless.Witness, err error) { + _, _, spanEnd := telemetry.StartSpan(ctx, "core.blockchain.InsertBlockWithoutSetHead") + defer spanEnd(&err) if !bc.chainmu.TryLock() { return nil, errChainStopped } defer bc.chainmu.Unlock() - witness, _, err := bc.insertChain(types.Blocks{block}, false, makeWitness) - return witness, err + witness, _, err = bc.insertChain(ctx, types.Blocks{block}, false, makeWitness) + return } // SetCanonical rewinds the chain to set the new head block as the specified @@ -2674,7 +2683,7 @@ func (bc *BlockChain) SetCanonical(head *types.Block) (common.Hash, error) { // Re-execute the reorged chain in case the head state is missing. if !bc.HasState(head.Root()) { - if latestValidHash, err := bc.recoverAncestors(head, false); err != nil { + if latestValidHash, err := bc.recoverAncestors(context.Background(), head, false); err != nil { return latestValidHash, err } log.Info("Recovered head state", "number", head.Number(), "hash", head.Hash()) diff --git a/core/blockchain_test.go b/core/blockchain_test.go index 73ffce93fb..13ce690518 100644 --- a/core/blockchain_test.go +++ b/core/blockchain_test.go @@ -18,6 +18,7 @@ package core import ( "bytes" + "context" "errors" "fmt" gomath "math" @@ -160,7 +161,7 @@ func testBlockChainImport(chain types.Blocks, blockchain *BlockChain) error { if err != nil { return err } - res, err := blockchain.processor.Process(block, statedb, vm.Config{}) + res, err := blockchain.processor.Process(context.Background(), block, statedb, vm.Config{}) if err != nil { blockchain.reportBadBlock(block, res, err) return err @@ -3456,7 +3457,7 @@ func testSetCanonical(t *testing.T, scheme string) { gen.AddTx(tx) }) for _, block := range side { - _, err := chain.InsertBlockWithoutSetHead(block, false) + _, err := chain.InsertBlockWithoutSetHead(context.Background(), block, false) if err != nil { t.Fatalf("Failed to insert into chain: %v", err) } diff --git a/core/state_processor.go b/core/state_processor.go index b4b22e4318..6eea74bdd8 100644 --- a/core/state_processor.go +++ b/core/state_processor.go @@ -17,6 +17,7 @@ package core import ( + "context" "fmt" "math/big" @@ -27,6 +28,7 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/internal/telemetry" "github.com/ethereum/go-ethereum/params" ) @@ -57,7 +59,7 @@ func (p *StateProcessor) chainConfig() *params.ChainConfig { // Process returns the receipts and logs accumulated during the process and // returns the amount of gas that was used in the process. If any of the // transactions failed to execute due to insufficient gas it will return an error. -func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg vm.Config) (*ProcessResult, error) { +func (p *StateProcessor) Process(ctx context.Context, block *types.Block, statedb *state.StateDB, cfg vm.Config) (*ProcessResult, error) { var ( config = p.chainConfig() receipts types.Receipts @@ -101,30 +103,21 @@ func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg return nil, fmt.Errorf("could not apply tx %d [%v]: %w", i, tx.Hash().Hex(), err) } statedb.SetTxContext(tx.Hash(), i) - + _, _, spanEnd := telemetry.StartSpan(ctx, "core.ApplyTransactionWithEVM", + telemetry.StringAttribute("tx.hash", tx.Hash().Hex()), + telemetry.Int64Attribute("tx.index", int64(i)), + ) receipt, err := ApplyTransactionWithEVM(msg, gp, statedb, blockNumber, blockHash, context.Time, tx, usedGas, evm) + spanEnd(&err) if err != nil { return nil, fmt.Errorf("could not apply tx %d [%v]: %w", i, tx.Hash().Hex(), err) } receipts = append(receipts, receipt) allLogs = append(allLogs, receipt.Logs...) } - // Read requests if Prague is enabled. - var requests [][]byte - if config.IsPrague(block.Number(), block.Time()) { - requests = [][]byte{} - // EIP-6110 - if err := ParseDepositLogs(&requests, allLogs, config); err != nil { - return nil, fmt.Errorf("failed to parse deposit logs: %w", err) - } - // EIP-7002 - if err := ProcessWithdrawalQueue(&requests, evm); err != nil { - return nil, fmt.Errorf("failed to process withdrawal queue: %w", err) - } - // EIP-7251 - if err := ProcessConsolidationQueue(&requests, evm); err != nil { - return nil, fmt.Errorf("failed to process consolidation queue: %w", err) - } + requests, err := postExecution(ctx, config, block, allLogs, evm) + if err != nil { + return nil, err } // Finalize the block, applying any consensus engine specific extras (e.g. block rewards) @@ -138,6 +131,31 @@ func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg }, nil } +// postExecution processes the post-execution system calls if Prague is enabled. +func postExecution(ctx context.Context, config *params.ChainConfig, block *types.Block, allLogs []*types.Log, evm *vm.EVM) (requests [][]byte, err error) { + _, _, spanEnd := telemetry.StartSpan(ctx, "core.postExecution") + defer spanEnd(&err) + + // Read requests if Prague is enabled. + if config.IsPrague(block.Number(), block.Time()) { + requests = [][]byte{} + // EIP-6110 + if err := ParseDepositLogs(&requests, allLogs, config); err != nil { + return requests, fmt.Errorf("failed to parse deposit logs: %w", err) + } + // EIP-7002 + if err := ProcessWithdrawalQueue(&requests, evm); err != nil { + return requests, fmt.Errorf("failed to process withdrawal queue: %w", err) + } + // EIP-7251 + if err := ProcessConsolidationQueue(&requests, evm); err != nil { + return requests, fmt.Errorf("failed to process consolidation queue: %w", err) + } + } + + return requests, nil +} + // ApplyTransactionWithEVM attempts to apply a transaction to the given state database // and uses the input parameters for its environment similar to ApplyTransaction. However, // this method takes an already created EVM instance as input. diff --git a/core/stateless.go b/core/stateless.go index b20c909da6..88d8ed8138 100644 --- a/core/stateless.go +++ b/core/stateless.go @@ -17,6 +17,8 @@ package core import ( + "context" + "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/lru" "github.com/ethereum/go-ethereum/consensus/beacon" @@ -40,7 +42,7 @@ import ( // - It cannot be placed outside of core, because it needs to construct a dud headerchain // // TODO(karalabe): Would be nice to resolve both issues above somehow and move it. -func ExecuteStateless(config *params.ChainConfig, vmconfig vm.Config, block *types.Block, witness *stateless.Witness) (common.Hash, common.Hash, error) { +func ExecuteStateless(ctx context.Context, config *params.ChainConfig, vmconfig vm.Config, block *types.Block, witness *stateless.Witness) (common.Hash, common.Hash, error) { // Sanity check if the supplied block accidentally contains a set root or // receipt hash. If so, be very loud, but still continue. if block.Root() != (common.Hash{}) { @@ -66,7 +68,7 @@ func ExecuteStateless(config *params.ChainConfig, vmconfig vm.Config, block *typ validator := NewBlockValidator(config, nil) // No chain, we only validate the state, not the block // Run the stateless blocks processing and self-validate certain fields - res, err := processor.Process(block, db, vmconfig) + res, err := processor.Process(ctx, block, db, vmconfig) if err != nil { return common.Hash{}, common.Hash{}, err } diff --git a/core/types.go b/core/types.go index bed20802ab..87bbfcff58 100644 --- a/core/types.go +++ b/core/types.go @@ -17,6 +17,7 @@ package core import ( + "context" "sync/atomic" "github.com/ethereum/go-ethereum/core/state" @@ -48,7 +49,7 @@ type Processor interface { // Process processes the state changes according to the Ethereum rules by running // the transaction messages using the statedb and applying any rewards to both // the processor (coinbase) and any included uncles. - Process(block *types.Block, statedb *state.StateDB, cfg vm.Config) (*ProcessResult, error) + Process(ctx context.Context, block *types.Block, statedb *state.StateDB, cfg vm.Config) (*ProcessResult, error) } // ProcessResult contains the values computed by Process. diff --git a/eth/api_debug.go b/eth/api_debug.go index db1b842e90..d4ef4cc87d 100644 --- a/eth/api_debug.go +++ b/eth/api_debug.go @@ -503,7 +503,7 @@ func (api *DebugAPI) ExecutionWitness(bn rpc.BlockNumber) (*stateless.ExtWitness if parent == nil { return &stateless.ExtWitness{}, fmt.Errorf("block number %v found, but parent missing", bn) } - result, err := bc.ProcessBlock(parent.Root, block, false, true) + result, err := bc.ProcessBlock(context.Background(), parent.Root, block, false, true) if err != nil { return nil, err } @@ -520,7 +520,7 @@ func (api *DebugAPI) ExecutionWitnessByHash(hash common.Hash) (*stateless.ExtWit if parent == nil { return &stateless.ExtWitness{}, fmt.Errorf("block number %x found, but parent missing", hash) } - result, err := bc.ProcessBlock(parent.Root, block, false, true) + result, err := bc.ProcessBlock(context.Background(), parent.Root, block, false, true) if err != nil { return nil, err } diff --git a/eth/catalyst/api.go b/eth/catalyst/api.go index e6ecf4ff6a..1850e4ce40 100644 --- a/eth/catalyst/api.go +++ b/eth/catalyst/api.go @@ -18,6 +18,7 @@ package catalyst import ( + "context" "errors" "fmt" "reflect" @@ -35,6 +36,7 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/eth" "github.com/ethereum/go-ethereum/eth/ethconfig" + "github.com/ethereum/go-ethereum/internal/telemetry" "github.com/ethereum/go-ethereum/internal/version" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/miner" @@ -625,15 +627,15 @@ func (api *ConsensusAPI) getBlobs(hashes []common.Hash, v2 bool) ([]*engine.Blob var invalidStatus = engine.PayloadStatusV1{Status: engine.INVALID} // NewPayloadV1 creates an Eth1 block, inserts it in the chain, and returns the status of the chain. -func (api *ConsensusAPI) NewPayloadV1(params engine.ExecutableData) (engine.PayloadStatusV1, error) { +func (api *ConsensusAPI) NewPayloadV1(ctx context.Context, params engine.ExecutableData) (engine.PayloadStatusV1, error) { if params.Withdrawals != nil { return invalidStatus, paramsErr("withdrawals not supported in V1") } - return api.newPayload(params, nil, nil, nil, false) + return api.newPayload(ctx, params, nil, nil, nil, false) } // NewPayloadV2 creates an Eth1 block, inserts it in the chain, and returns the status of the chain. -func (api *ConsensusAPI) NewPayloadV2(params engine.ExecutableData) (engine.PayloadStatusV1, error) { +func (api *ConsensusAPI) NewPayloadV2(ctx context.Context, params engine.ExecutableData) (engine.PayloadStatusV1, error) { var ( cancun = api.config().IsCancun(api.config().LondonBlock, params.Timestamp) shanghai = api.config().IsShanghai(api.config().LondonBlock, params.Timestamp) @@ -650,11 +652,11 @@ func (api *ConsensusAPI) NewPayloadV2(params engine.ExecutableData) (engine.Payl case params.BlobGasUsed != nil: return invalidStatus, paramsErr("non-nil blobGasUsed pre-cancun") } - return api.newPayload(params, nil, nil, nil, false) + return api.newPayload(ctx, params, nil, nil, nil, false) } // NewPayloadV3 creates an Eth1 block, inserts it in the chain, and returns the status of the chain. -func (api *ConsensusAPI) NewPayloadV3(params engine.ExecutableData, versionedHashes []common.Hash, beaconRoot *common.Hash) (engine.PayloadStatusV1, error) { +func (api *ConsensusAPI) NewPayloadV3(ctx context.Context, params engine.ExecutableData, versionedHashes []common.Hash, beaconRoot *common.Hash) (engine.PayloadStatusV1, error) { switch { case params.Withdrawals == nil: return invalidStatus, paramsErr("nil withdrawals post-shanghai") @@ -669,11 +671,11 @@ func (api *ConsensusAPI) NewPayloadV3(params engine.ExecutableData, versionedHas case !api.checkFork(params.Timestamp, forks.Cancun): return invalidStatus, unsupportedForkErr("newPayloadV3 must only be called for cancun payloads") } - return api.newPayload(params, versionedHashes, beaconRoot, nil, false) + return api.newPayload(ctx, params, versionedHashes, beaconRoot, nil, false) } // NewPayloadV4 creates an Eth1 block, inserts it in the chain, and returns the status of the chain. -func (api *ConsensusAPI) NewPayloadV4(params engine.ExecutableData, versionedHashes []common.Hash, beaconRoot *common.Hash, executionRequests []hexutil.Bytes) (engine.PayloadStatusV1, error) { +func (api *ConsensusAPI) NewPayloadV4(ctx context.Context, params engine.ExecutableData, versionedHashes []common.Hash, beaconRoot *common.Hash, executionRequests []hexutil.Bytes) (engine.PayloadStatusV1, error) { switch { case params.Withdrawals == nil: return invalidStatus, paramsErr("nil withdrawals post-shanghai") @@ -694,10 +696,10 @@ func (api *ConsensusAPI) NewPayloadV4(params engine.ExecutableData, versionedHas if err := validateRequests(requests); err != nil { return engine.PayloadStatusV1{Status: engine.INVALID}, engine.InvalidParams.With(err) } - return api.newPayload(params, versionedHashes, beaconRoot, requests, false) + return api.newPayload(ctx, params, versionedHashes, beaconRoot, requests, false) } -func (api *ConsensusAPI) newPayload(params engine.ExecutableData, versionedHashes []common.Hash, beaconRoot *common.Hash, requests [][]byte, witness bool) (engine.PayloadStatusV1, error) { +func (api *ConsensusAPI) newPayload(ctx context.Context, params engine.ExecutableData, versionedHashes []common.Hash, beaconRoot *common.Hash, requests [][]byte, witness bool) (result engine.PayloadStatusV1, err error) { // The locking here is, strictly, not required. Without these locks, this can happen: // // 1. NewPayload( execdata-N ) is invoked from the CL. It goes all the way down to @@ -711,6 +713,13 @@ func (api *ConsensusAPI) newPayload(params engine.ExecutableData, versionedHashe // sequentially. // Hence, we use a lock here, to be sure that the previous call has finished before we // check whether we already have the block locally. + var attrs = []telemetry.Attribute{ + telemetry.Int64Attribute("block.number", int64(params.Number)), + telemetry.StringAttribute("block.hash", params.BlockHash.Hex()), + telemetry.Int64Attribute("tx.count", int64(len(params.Transactions))), + } + ctx, _, spanEnd := telemetry.StartSpan(ctx, "engine.newPayload", attrs...) + defer spanEnd(&err) api.newPayloadLock.Lock() defer api.newPayloadLock.Unlock() @@ -789,7 +798,7 @@ func (api *ConsensusAPI) newPayload(params engine.ExecutableData, versionedHashe } log.Trace("Inserting block without sethead", "hash", block.Hash(), "number", block.Number()) start := time.Now() - proofs, err := api.eth.BlockChain().InsertBlockWithoutSetHead(block, witness) + proofs, err := api.eth.BlockChain().InsertBlockWithoutSetHead(ctx, block, witness) processingTime := time.Since(start) if err != nil { log.Warn("NewPayload: inserting block failed", "error", err) diff --git a/eth/catalyst/api_test.go b/eth/catalyst/api_test.go index 4d7246d4ed..7eb26065dc 100644 --- a/eth/catalyst/api_test.go +++ b/eth/catalyst/api_test.go @@ -314,7 +314,7 @@ func TestEth2NewBlock(t *testing.T) { if err != nil { t.Fatalf("Failed to convert executable data to block %v", err) } - newResp, err := api.NewPayloadV1(*execData) + newResp, err := api.NewPayloadV1(context.Background(), *execData) switch { case err != nil: t.Fatalf("Failed to insert block: %v", err) @@ -356,7 +356,7 @@ func TestEth2NewBlock(t *testing.T) { if err != nil { t.Fatalf("Failed to convert executable data to block %v", err) } - newResp, err := api.NewPayloadV1(*execData) + newResp, err := api.NewPayloadV1(context.Background(), *execData) if err != nil || newResp.Status != "VALID" { t.Fatalf("Failed to insert block: %v", err) } @@ -502,7 +502,7 @@ func setupBlocks(t *testing.T, ethservice *eth.Ethereum, n int, parent *types.He } envelope := getNewEnvelope(t, api, parent, w, h) - execResp, err := api.newPayload(*envelope.ExecutionPayload, []common.Hash{}, h, envelope.Requests, false) + execResp, err := api.newPayload(context.Background(), *envelope.ExecutionPayload, []common.Hash{}, h, envelope.Requests, false) if err != nil { t.Fatalf("can't execute payload: %v", err) } @@ -648,7 +648,7 @@ func TestNewPayloadOnInvalidChain(t *testing.T) { t.Fatalf("payload should not be empty") } } - execResp, err := api.NewPayloadV1(*payload.ExecutionPayload) + execResp, err := api.NewPayloadV1(context.Background(), *payload.ExecutionPayload) if err != nil { t.Fatalf("can't execute payload: %v", err) } @@ -708,7 +708,7 @@ func TestEmptyBlocks(t *testing.T) { // (1) check LatestValidHash by sending a normal payload (P1'') payload := getNewPayload(t, api, commonAncestor, nil, nil) - status, err := api.NewPayloadV1(*payload) + status, err := api.NewPayloadV1(context.Background(), *payload) if err != nil { t.Fatal(err) } @@ -724,7 +724,7 @@ func TestEmptyBlocks(t *testing.T) { payload.GasUsed += 1 payload = setBlockhash(payload) // Now latestValidHash should be the common ancestor - status, err = api.NewPayloadV1(*payload) + status, err = api.NewPayloadV1(context.Background(), *payload) if err != nil { t.Fatal(err) } @@ -742,7 +742,7 @@ func TestEmptyBlocks(t *testing.T) { payload.ParentHash = common.Hash{1} payload = setBlockhash(payload) // Now latestValidHash should be the common ancestor - status, err = api.NewPayloadV1(*payload) + status, err = api.NewPayloadV1(context.Background(), *payload) if err != nil { t.Fatal(err) } @@ -859,7 +859,7 @@ func TestTrickRemoteBlockCache(t *testing.T) { // feed the payloads to node B for _, payload := range invalidChain { - status, err := apiB.NewPayloadV1(*payload) + status, err := apiB.NewPayloadV1(context.Background(), *payload) if err != nil { panic(err) } @@ -892,7 +892,7 @@ func TestInvalidBloom(t *testing.T) { // (1) check LatestValidHash by sending a normal payload (P1'') payload := getNewPayload(t, api, commonAncestor, nil, nil) payload.LogsBloom = append(payload.LogsBloom, byte(1)) - status, err := api.NewPayloadV1(*payload) + status, err := api.NewPayloadV1(context.Background(), *payload) if err != nil { t.Fatal(err) } @@ -931,7 +931,7 @@ func TestSimultaneousNewBlock(t *testing.T) { for ii := 0; ii < 10; ii++ { go func() { defer wg.Done() - if newResp, err := api.NewPayloadV1(*execData); err != nil { + if newResp, err := api.NewPayloadV1(context.Background(), *execData); err != nil { errMu.Lock() testErr = fmt.Errorf("failed to insert block: %w", err) errMu.Unlock() @@ -1038,7 +1038,7 @@ func TestWithdrawals(t *testing.T) { } // 10: verify locally built block - if status, err := api.NewPayloadV2(*execData.ExecutionPayload); err != nil { + if status, err := api.NewPayloadV2(context.Background(), *execData.ExecutionPayload); err != nil { t.Fatalf("error validating payload: %v", err) } else if status.Status != engine.VALID { t.Fatalf("invalid payload") @@ -1082,7 +1082,7 @@ func TestWithdrawals(t *testing.T) { if err != nil { t.Fatalf("error getting payload, err=%v", err) } - if status, err := api.NewPayloadV2(*execData.ExecutionPayload); err != nil { + if status, err := api.NewPayloadV2(context.Background(), *execData.ExecutionPayload); err != nil { t.Fatalf("error validating payload: %v", err) } else if status.Status != engine.VALID { t.Fatalf("invalid payload") @@ -1225,9 +1225,9 @@ func TestNilWithdrawals(t *testing.T) { } var status engine.PayloadStatusV1 if !shanghai { - status, err = api.NewPayloadV1(*execData.ExecutionPayload) + status, err = api.NewPayloadV1(context.Background(), *execData.ExecutionPayload) } else { - status, err = api.NewPayloadV2(*execData.ExecutionPayload) + status, err = api.NewPayloadV2(context.Background(), *execData.ExecutionPayload) } if err != nil { t.Fatalf("error validating payload: %v", err.(*engine.EngineAPIError).ErrorData()) @@ -1598,7 +1598,7 @@ func TestParentBeaconBlockRoot(t *testing.T) { } // 11: verify locally built block - if status, err := api.NewPayloadV3(*execData.ExecutionPayload, []common.Hash{}, &common.Hash{42}); err != nil { + if status, err := api.NewPayloadV3(context.Background(), *execData.ExecutionPayload, []common.Hash{}, &common.Hash{42}); err != nil { t.Fatalf("error validating payload: %v", err) } else if status.Status != engine.VALID { t.Fatalf("invalid payload") @@ -1705,7 +1705,7 @@ func TestWitnessCreationAndConsumption(t *testing.T) { envelope.ExecutionPayload.StateRoot = wantStateRoot envelope.ExecutionPayload.ReceiptsRoot = wantReceiptRoot - res2, err := api.NewPayloadWithWitnessV3(*envelope.ExecutionPayload, []common.Hash{}, &common.Hash{42}) + res2, err := api.NewPayloadWithWitnessV3(context.Background(), *envelope.ExecutionPayload, []common.Hash{}, &common.Hash{42}) if err != nil { t.Fatalf("error executing stateless payload witness: %v", err) } diff --git a/eth/catalyst/simulated_beacon.go b/eth/catalyst/simulated_beacon.go index 92f9798e71..25d8b7df78 100644 --- a/eth/catalyst/simulated_beacon.go +++ b/eth/catalyst/simulated_beacon.go @@ -17,6 +17,7 @@ package catalyst import ( + "context" "crypto/rand" "crypto/sha256" "errors" @@ -32,11 +33,13 @@ import ( "github.com/ethereum/go-ethereum/crypto/kzg4844" "github.com/ethereum/go-ethereum/eth" "github.com/ethereum/go-ethereum/event" + "github.com/ethereum/go-ethereum/internal/telemetry" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/node" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/params/forks" "github.com/ethereum/go-ethereum/rpc" + "go.opentelemetry.io/otel" ) const devEpochLength = 32 @@ -191,6 +194,7 @@ func (c *SimulatedBeacon) sealBlock(withdrawals []*types.Withdrawal, timestamp u } version := payloadVersion(c.eth.BlockChain().Config(), timestamp) + tracer := otel.Tracer("") var random [32]byte rand.Read(random[:]) @@ -255,8 +259,16 @@ func (c *SimulatedBeacon) sealBlock(withdrawals []*types.Withdrawal, timestamp u requests = envelope.Requests } + // Create a server span for newPayload, simulating the consensus client + // sending the execution payload for validation. + npCtx, npSpanEnd := telemetry.StartServerSpan(context.Background(), tracer, telemetry.RPCInfo{ + System: "jsonrpc", + Service: "engine", + Method: "newPayloadV" + fmt.Sprintf("%d", version), + }) // Mark the payload as canon - _, err = c.engineAPI.newPayload(*payload, blobHashes, beaconRoot, requests, false) + _, err = c.engineAPI.newPayload(npCtx, *payload, blobHashes, beaconRoot, requests, false) + npSpanEnd(&err) if err != nil { return err } diff --git a/eth/catalyst/witness.go b/eth/catalyst/witness.go index 0df612a695..14ca29e079 100644 --- a/eth/catalyst/witness.go +++ b/eth/catalyst/witness.go @@ -17,6 +17,7 @@ package catalyst import ( + "context" "errors" "strconv" "time" @@ -86,16 +87,16 @@ func (api *ConsensusAPI) ForkchoiceUpdatedWithWitnessV3(update engine.Forkchoice // NewPayloadWithWitnessV1 is analogous to NewPayloadV1, only it also generates // and returns a stateless witness after running the payload. -func (api *ConsensusAPI) NewPayloadWithWitnessV1(params engine.ExecutableData) (engine.PayloadStatusV1, error) { +func (api *ConsensusAPI) NewPayloadWithWitnessV1(ctx context.Context, params engine.ExecutableData) (engine.PayloadStatusV1, error) { if params.Withdrawals != nil { return engine.PayloadStatusV1{Status: engine.INVALID}, engine.InvalidParams.With(errors.New("withdrawals not supported in V1")) } - return api.newPayload(params, nil, nil, nil, true) + return api.newPayload(ctx, params, nil, nil, nil, true) } // NewPayloadWithWitnessV2 is analogous to NewPayloadV2, only it also generates // and returns a stateless witness after running the payload. -func (api *ConsensusAPI) NewPayloadWithWitnessV2(params engine.ExecutableData) (engine.PayloadStatusV1, error) { +func (api *ConsensusAPI) NewPayloadWithWitnessV2(ctx context.Context, params engine.ExecutableData) (engine.PayloadStatusV1, error) { var ( cancun = api.config().IsCancun(api.config().LondonBlock, params.Timestamp) shanghai = api.config().IsShanghai(api.config().LondonBlock, params.Timestamp) @@ -112,12 +113,12 @@ func (api *ConsensusAPI) NewPayloadWithWitnessV2(params engine.ExecutableData) ( case params.BlobGasUsed != nil: return invalidStatus, paramsErr("non-nil blobGasUsed pre-cancun") } - return api.newPayload(params, nil, nil, nil, true) + return api.newPayload(ctx, params, nil, nil, nil, true) } // NewPayloadWithWitnessV3 is analogous to NewPayloadV3, only it also generates // and returns a stateless witness after running the payload. -func (api *ConsensusAPI) NewPayloadWithWitnessV3(params engine.ExecutableData, versionedHashes []common.Hash, beaconRoot *common.Hash) (engine.PayloadStatusV1, error) { +func (api *ConsensusAPI) NewPayloadWithWitnessV3(ctx context.Context, params engine.ExecutableData, versionedHashes []common.Hash, beaconRoot *common.Hash) (engine.PayloadStatusV1, error) { switch { case params.Withdrawals == nil: return invalidStatus, paramsErr("nil withdrawals post-shanghai") @@ -132,12 +133,12 @@ func (api *ConsensusAPI) NewPayloadWithWitnessV3(params engine.ExecutableData, v case !api.checkFork(params.Timestamp, forks.Cancun): return invalidStatus, unsupportedForkErr("newPayloadV3 must only be called for cancun payloads") } - return api.newPayload(params, versionedHashes, beaconRoot, nil, true) + return api.newPayload(ctx, params, versionedHashes, beaconRoot, nil, true) } // NewPayloadWithWitnessV4 is analogous to NewPayloadV4, only it also generates // and returns a stateless witness after running the payload. -func (api *ConsensusAPI) NewPayloadWithWitnessV4(params engine.ExecutableData, versionedHashes []common.Hash, beaconRoot *common.Hash, executionRequests []hexutil.Bytes) (engine.PayloadStatusV1, error) { +func (api *ConsensusAPI) NewPayloadWithWitnessV4(ctx context.Context, params engine.ExecutableData, versionedHashes []common.Hash, beaconRoot *common.Hash, executionRequests []hexutil.Bytes) (engine.PayloadStatusV1, error) { switch { case params.Withdrawals == nil: return invalidStatus, paramsErr("nil withdrawals post-shanghai") @@ -158,7 +159,7 @@ func (api *ConsensusAPI) NewPayloadWithWitnessV4(params engine.ExecutableData, v if err := validateRequests(requests); err != nil { return engine.PayloadStatusV1{Status: engine.INVALID}, engine.InvalidParams.With(err) } - return api.newPayload(params, versionedHashes, beaconRoot, requests, true) + return api.newPayload(ctx, params, versionedHashes, beaconRoot, requests, true) } // ExecuteStatelessPayloadV1 is analogous to NewPayloadV1, only it operates in @@ -283,7 +284,7 @@ func (api *ConsensusAPI) executeStatelessPayload(params engine.ExecutableData, v api.lastNewPayloadUpdate.Store(time.Now().Unix()) log.Trace("Executing block statelessly", "number", block.Number(), "hash", params.BlockHash) - stateRoot, receiptRoot, err := core.ExecuteStateless(api.config(), vm.Config{}, block, witness) + stateRoot, receiptRoot, err := core.ExecuteStateless(context.Background(), api.config(), vm.Config{}, block, witness) if err != nil { log.Warn("ExecuteStatelessPayload: execution failed", "err", err) errorMsg := err.Error() diff --git a/eth/state_accessor.go b/eth/state_accessor.go index 79c91043a3..1261320b58 100644 --- a/eth/state_accessor.go +++ b/eth/state_accessor.go @@ -147,7 +147,7 @@ func (eth *Ethereum) hashState(ctx context.Context, block *types.Block, reexec u if current = eth.blockchain.GetBlockByNumber(next); current == nil { return nil, nil, fmt.Errorf("block #%d not found", next) } - _, err := eth.blockchain.Processor().Process(current, statedb, vm.Config{}) + _, err := eth.blockchain.Processor().Process(ctx, current, statedb, vm.Config{}) if err != nil { return nil, nil, fmt.Errorf("processing block %d failed: %v", current.NumberU64(), err) } From 9b78f45e337f01e66b505c35b74415751b2a0a28 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Tue, 17 Feb 2026 17:01:39 +0100 Subject: [PATCH 041/161] crypto/secp256k1: fix coordinate check --- crypto/secp256k1/curve.go | 4 ++++ crypto/secp256k1/ext.h | 6 ++++-- crypto/signature_nocgo.go | 7 +++++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/crypto/secp256k1/curve.go b/crypto/secp256k1/curve.go index b82b147e3c..504602f5be 100644 --- a/crypto/secp256k1/curve.go +++ b/crypto/secp256k1/curve.go @@ -73,6 +73,10 @@ func (bitCurve *BitCurve) Params() *elliptic.CurveParams { // IsOnCurve returns true if the given (x,y) lies on the BitCurve. func (bitCurve *BitCurve) IsOnCurve(x, y *big.Int) bool { + if x.Cmp(bitCurve.P) >= 0 || y.Cmp(bitCurve.P) >= 0 { + return false + } + // y² = x³ + b y2 := new(big.Int).Mul(y, y) //y² y2.Mod(y2, bitCurve.P) //y²%P diff --git a/crypto/secp256k1/ext.h b/crypto/secp256k1/ext.h index 1c485e2603..baafb4404b 100644 --- a/crypto/secp256k1/ext.h +++ b/crypto/secp256k1/ext.h @@ -109,8 +109,10 @@ int secp256k1_ext_scalar_mul(const secp256k1_context* ctx, unsigned char *point, ARG_CHECK(scalar != NULL); (void)ctx; - secp256k1_fe_set_b32_limit(&feX, point); - secp256k1_fe_set_b32_limit(&feY, point+32); + if (!secp256k1_fe_set_b32_limit(&feX, point) || + !secp256k1_fe_set_b32_limit(&feY, point+32)) { + return 0; + } secp256k1_ge_set_xy(&ge, &feX, &feY); secp256k1_scalar_set_b32(&s, scalar, &overflow); if (overflow || secp256k1_scalar_is_zero(&s)) { diff --git a/crypto/signature_nocgo.go b/crypto/signature_nocgo.go index 9dce1057fa..0aab7180d3 100644 --- a/crypto/signature_nocgo.go +++ b/crypto/signature_nocgo.go @@ -167,6 +167,13 @@ type btCurve struct { *secp256k1.KoblitzCurve } +func (curve btCurve) IsOnCurve(x, y *big.Int) bool { + if x.Cmp(secp256k1.Params().P) >= 0 || y.Cmp(secp256k1.Params().P) >= 0 { + return false + } + return curve.KoblitzCurve.IsOnCurve(x, y) +} + // Marshal converts a point given as (x, y) into a byte slice. func (curve btCurve) Marshal(x, y *big.Int) []byte { byteLen := (curve.Params().BitSize + 7) / 8 From 0cf3d3ba4f7062fd2bbf2bda10972d528974e876 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Tue, 17 Feb 2026 17:09:41 +0100 Subject: [PATCH 042/161] version: release go-ethereum v1.17.0 stable --- version/version.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/version/version.go b/version/version.go index bcb61f27b1..6c7124fca2 100644 --- a/version/version.go +++ b/version/version.go @@ -17,8 +17,8 @@ package version const ( - Major = 1 // Major version component of the current release - Minor = 17 // Minor version component of the current release - Patch = 0 // Patch version component of the current release - Meta = "unstable" // Version metadata to append to the version string + Major = 1 // Major version component of the current release + Minor = 17 // Minor version component of the current release + Patch = 0 // Patch version component of the current release + Meta = "stable" // Version metadata to append to the version string ) From 105427690630efea4bf78350064afd79ec8baffc Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Tue, 17 Feb 2026 17:17:00 +0100 Subject: [PATCH 043/161] version: begin v1.17.1 release cycle --- version/version.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/version/version.go b/version/version.go index 6c7124fca2..007906734d 100644 --- a/version/version.go +++ b/version/version.go @@ -17,8 +17,8 @@ package version const ( - Major = 1 // Major version component of the current release - Minor = 17 // Minor version component of the current release - Patch = 0 // Patch version component of the current release - Meta = "stable" // Version metadata to append to the version string + Major = 1 // Major version component of the current release + Minor = 17 // Minor version component of the current release + Patch = 1 // Patch version component of the current release + Meta = "unstable" // Version metadata to append to the version string ) From 3eed0580d4dc40fb15a14e1b0e9fc6985fefbfd7 Mon Sep 17 00:00:00 2001 From: spencer Date: Tue, 17 Feb 2026 19:42:53 +0000 Subject: [PATCH 044/161] cmd/evm: add --opcode.count flag to t8n (#33800) Adds `--opcode.count=` flag to `evm t8n` that writes per-opcode execution frequency counts to a JSON file (relative to `--output.basedir`). --------- Co-authored-by: MariusVanDerWijden Co-authored-by: Sina Mahmoodi --- cmd/evm/internal/t8ntool/execution.go | 3 ++ cmd/evm/internal/t8ntool/file_tracer.go | 20 ++++++--- cmd/evm/internal/t8ntool/flags.go | 5 +++ cmd/evm/internal/t8ntool/transition.go | 35 ++++++++++++++-- cmd/evm/main.go | 1 + cmd/evm/testdata/1/exp.json | 2 +- cmd/evm/testdata/13/exp2.json | 4 +- cmd/evm/testdata/23/exp.json | 2 +- cmd/evm/testdata/24/exp.json | 4 +- cmd/evm/testdata/25/exp.json | 2 +- cmd/evm/testdata/28/exp.json | 2 +- cmd/evm/testdata/29/exp.json | 2 +- cmd/evm/testdata/3/exp.json | 2 +- cmd/evm/testdata/30/exp.json | 4 +- cmd/evm/testdata/33/exp.json | 2 +- eth/tracers/native/mux.go | 15 +++++-- eth/tracers/native/opcode_counter.go | 55 +++++++++++++++++++++++++ 17 files changed, 134 insertions(+), 26 deletions(-) create mode 100644 eth/tracers/native/opcode_counter.go diff --git a/cmd/evm/internal/t8ntool/execution.go b/cmd/evm/internal/t8ntool/execution.go index 693ec9f4a9..532d6e6b94 100644 --- a/cmd/evm/internal/t8ntool/execution.go +++ b/cmd/evm/internal/t8ntool/execution.go @@ -265,6 +265,9 @@ func (pre *Prestate) Apply(vmConfig vm.Config, chainConfig *params.ChainConfig, gaspool.SetGas(prevGas) continue } + if receipt.Logs == nil { + receipt.Logs = []*types.Log{} + } includedTxs = append(includedTxs, tx) if hashError != nil { return nil, nil, nil, NewError(ErrorMissingBlockhash, hashError) diff --git a/cmd/evm/internal/t8ntool/file_tracer.go b/cmd/evm/internal/t8ntool/file_tracer.go index 38fc35bd32..d032252cba 100644 --- a/cmd/evm/internal/t8ntool/file_tracer.go +++ b/cmd/evm/internal/t8ntool/file_tracer.go @@ -56,27 +56,35 @@ func (l *fileWritingTracer) Write(p []byte) (n int, err error) { return n, nil } -// newFileWriter creates a set of hooks which wraps inner hooks (typically a logger), +// newFileWriter creates a tracer which wraps inner hooks (typically a logger), // and writes the output to a file, one file per transaction. -func newFileWriter(baseDir string, innerFn func(out io.Writer) *tracing.Hooks) *tracing.Hooks { +func newFileWriter(baseDir string, innerFn func(out io.Writer) *tracing.Hooks) *tracers.Tracer { t := &fileWritingTracer{ baseDir: baseDir, suffix: "jsonl", } t.inner = innerFn(t) // instantiate the inner tracer - return t.hooks() + return &tracers.Tracer{ + Hooks: t.hooks(), + GetResult: func() (json.RawMessage, error) { return json.RawMessage("{}"), nil }, + Stop: func(err error) {}, + } } -// newResultWriter creates a set of hooks wraps and invokes an underlying tracer, +// newResultWriter creates a tracer that wraps and invokes an underlying tracer, // and writes the result (getResult-output) to file, one per transaction. -func newResultWriter(baseDir string, tracer *tracers.Tracer) *tracing.Hooks { +func newResultWriter(baseDir string, tracer *tracers.Tracer) *tracers.Tracer { t := &fileWritingTracer{ baseDir: baseDir, getResult: tracer.GetResult, inner: tracer.Hooks, suffix: "json", } - return t.hooks() + return &tracers.Tracer{ + Hooks: t.hooks(), + GetResult: func() (json.RawMessage, error) { return json.RawMessage("{}"), nil }, + Stop: func(err error) {}, + } } // OnTxStart creates a new output-file specific for this transaction, and invokes diff --git a/cmd/evm/internal/t8ntool/flags.go b/cmd/evm/internal/t8ntool/flags.go index a6ec33eacf..078d304927 100644 --- a/cmd/evm/internal/t8ntool/flags.go +++ b/cmd/evm/internal/t8ntool/flags.go @@ -162,6 +162,11 @@ var ( strings.Join(vm.ActivateableEips(), ", ")), Value: "GrayGlacier", } + OpcodeCountFlag = &cli.StringFlag{ + Name: "opcode.count", + Usage: "If set, opcode execution counts will be written to this file (relative to output.basedir).", + Value: "", + } VerbosityFlag = &cli.IntFlag{ Name: "verbosity", Usage: "sets the verbosity level", diff --git a/cmd/evm/internal/t8ntool/transition.go b/cmd/evm/internal/t8ntool/transition.go index af60333cbd..d7cdc98e74 100644 --- a/cmd/evm/internal/t8ntool/transition.go +++ b/cmd/evm/internal/t8ntool/transition.go @@ -37,6 +37,7 @@ import ( "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/eth/tracers" "github.com/ethereum/go-ethereum/eth/tracers/logger" + "github.com/ethereum/go-ethereum/eth/tracers/native" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/tests" @@ -167,14 +168,15 @@ func Transition(ctx *cli.Context) error { } // Configure tracer + var tracer *tracers.Tracer if ctx.IsSet(TraceTracerFlag.Name) { // Custom tracing config := json.RawMessage(ctx.String(TraceTracerConfigFlag.Name)) - tracer, err := tracers.DefaultDirectory.New(ctx.String(TraceTracerFlag.Name), + innerTracer, err := tracers.DefaultDirectory.New(ctx.String(TraceTracerFlag.Name), nil, config, chainConfig) if err != nil { return NewError(ErrorConfig, fmt.Errorf("failed instantiating tracer: %v", err)) } - vmConfig.Tracer = newResultWriter(baseDir, tracer) + tracer = newResultWriter(baseDir, innerTracer) } else if ctx.Bool(TraceFlag.Name) { // JSON opcode tracing logConfig := &logger.Config{ DisableStack: ctx.Bool(TraceDisableStackFlag.Name), @@ -182,20 +184,45 @@ func Transition(ctx *cli.Context) error { EnableReturnData: ctx.Bool(TraceEnableReturnDataFlag.Name), } if ctx.Bool(TraceEnableCallFramesFlag.Name) { - vmConfig.Tracer = newFileWriter(baseDir, func(out io.Writer) *tracing.Hooks { + tracer = newFileWriter(baseDir, func(out io.Writer) *tracing.Hooks { return logger.NewJSONLoggerWithCallFrames(logConfig, out) }) } else { - vmConfig.Tracer = newFileWriter(baseDir, func(out io.Writer) *tracing.Hooks { + tracer = newFileWriter(baseDir, func(out io.Writer) *tracing.Hooks { return logger.NewJSONLogger(logConfig, out) }) } } + // Configure opcode counter + var opcodeTracer *tracers.Tracer + if ctx.IsSet(OpcodeCountFlag.Name) && ctx.String(OpcodeCountFlag.Name) != "" { + opcodeTracer = native.NewOpcodeCounter() + if tracer != nil { + // If we have an existing tracer, multiplex with the opcode tracer + mux, _ := native.NewMuxTracer([]string{"trace", "opcode"}, []*tracers.Tracer{tracer, opcodeTracer}) + vmConfig.Tracer = mux.Hooks + } else { + vmConfig.Tracer = opcodeTracer.Hooks + } + } else if tracer != nil { + vmConfig.Tracer = tracer.Hooks + } // Run the test and aggregate the result s, result, body, err := prestate.Apply(vmConfig, chainConfig, txIt, ctx.Int64(RewardFlag.Name)) if err != nil { return err } + // Write opcode counts if enabled + if opcodeTracer != nil { + fname := ctx.String(OpcodeCountFlag.Name) + result, err := opcodeTracer.GetResult() + if err != nil { + return NewError(ErrorJson, fmt.Errorf("failed getting opcode counts: %v", err)) + } + if err := saveFile(baseDir, fname, result); err != nil { + return err + } + } // Dump the execution result var ( collector = make(Alloc) diff --git a/cmd/evm/main.go b/cmd/evm/main.go index 57741b5f9c..77a06bec26 100644 --- a/cmd/evm/main.go +++ b/cmd/evm/main.go @@ -161,6 +161,7 @@ var ( t8ntool.ForknameFlag, t8ntool.ChainIDFlag, t8ntool.RewardFlag, + t8ntool.OpcodeCountFlag, }, } diff --git a/cmd/evm/testdata/1/exp.json b/cmd/evm/testdata/1/exp.json index 6537c9517d..f596cb5e67 100644 --- a/cmd/evm/testdata/1/exp.json +++ b/cmd/evm/testdata/1/exp.json @@ -24,7 +24,7 @@ "status": "0x1", "cumulativeGasUsed": "0x5208", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "logs": null, + "logs": [], "transactionHash": "0x0557bacce3375c98d806609b8d5043072f0b6a8bae45ae5a67a00d3a1a18d673", "contractAddress": "0x0000000000000000000000000000000000000000", "gasUsed": "0x5208", diff --git a/cmd/evm/testdata/13/exp2.json b/cmd/evm/testdata/13/exp2.json index f716289cf7..260721e22f 100644 --- a/cmd/evm/testdata/13/exp2.json +++ b/cmd/evm/testdata/13/exp2.json @@ -12,7 +12,7 @@ "status": "0x0", "cumulativeGasUsed": "0x84d0", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "logs": null, + "logs": [], "transactionHash": "0xa98a24882ea90916c6a86da650fbc6b14238e46f0af04a131ce92be897507476", "contractAddress": "0x0000000000000000000000000000000000000000", "gasUsed": "0x84d0", @@ -27,7 +27,7 @@ "status": "0x0", "cumulativeGasUsed": "0x109a0", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "logs": null, + "logs": [], "transactionHash": "0x36bad80acce7040c45fd32764b5c2b2d2e6f778669fb41791f73f546d56e739a", "contractAddress": "0x0000000000000000000000000000000000000000", "gasUsed": "0x84d0", diff --git a/cmd/evm/testdata/23/exp.json b/cmd/evm/testdata/23/exp.json index 2d9cd492db..803411de46 100644 --- a/cmd/evm/testdata/23/exp.json +++ b/cmd/evm/testdata/23/exp.json @@ -11,7 +11,7 @@ "status": "0x1", "cumulativeGasUsed": "0x520b", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "logs": null, + "logs": [], "transactionHash": "0x72fadbef39cd251a437eea619cfeda752271a5faaaa2147df012e112159ffb81", "contractAddress": "0x0000000000000000000000000000000000000000", "gasUsed": "0x520b", diff --git a/cmd/evm/testdata/24/exp.json b/cmd/evm/testdata/24/exp.json index 0dd552e112..bbde70c631 100644 --- a/cmd/evm/testdata/24/exp.json +++ b/cmd/evm/testdata/24/exp.json @@ -27,7 +27,7 @@ "status": "0x1", "cumulativeGasUsed": "0xa861", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "logs": null, + "logs": [], "transactionHash": "0x92ea4a28224d033afb20e0cc2b290d4c7c2d61f6a4800a680e4e19ac962ee941", "contractAddress": "0x0000000000000000000000000000000000000000", "gasUsed": "0xa861", @@ -41,7 +41,7 @@ "status": "0x1", "cumulativeGasUsed": "0x10306", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "logs": null, + "logs": [], "transactionHash": "0x16b1d912f1d664f3f60f4e1b5f296f3c82a64a1a253117b4851d18bc03c4f1da", "contractAddress": "0x0000000000000000000000000000000000000000", "gasUsed": "0x5aa5", diff --git a/cmd/evm/testdata/25/exp.json b/cmd/evm/testdata/25/exp.json index 3dac46aa60..25cac55dc0 100644 --- a/cmd/evm/testdata/25/exp.json +++ b/cmd/evm/testdata/25/exp.json @@ -23,7 +23,7 @@ "status": "0x1", "cumulativeGasUsed": "0x5208", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "logs": null, + "logs": [], "transactionHash": "0x92ea4a28224d033afb20e0cc2b290d4c7c2d61f6a4800a680e4e19ac962ee941", "contractAddress": "0x0000000000000000000000000000000000000000", "gasUsed": "0x5208", diff --git a/cmd/evm/testdata/28/exp.json b/cmd/evm/testdata/28/exp.json index 15b29bc0ac..f67ff76087 100644 --- a/cmd/evm/testdata/28/exp.json +++ b/cmd/evm/testdata/28/exp.json @@ -28,7 +28,7 @@ "status": "0x1", "cumulativeGasUsed": "0xa865", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "logs": null, + "logs": [], "transactionHash": "0x7508d7139d002a4b3a26a4f12dec0d87cb46075c78bf77a38b569a133b509262", "contractAddress": "0x0000000000000000000000000000000000000000", "gasUsed": "0xa865", diff --git a/cmd/evm/testdata/29/exp.json b/cmd/evm/testdata/29/exp.json index 69c8661aa8..cb4b5eaa28 100644 --- a/cmd/evm/testdata/29/exp.json +++ b/cmd/evm/testdata/29/exp.json @@ -26,7 +26,7 @@ "status": "0x1", "cumulativeGasUsed": "0x5208", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "logs": null, + "logs": [], "transactionHash": "0x84f70aba406a55628a0620f26d260f90aeb6ccc55fed6ec2ac13dd4f727032ed", "contractAddress": "0x0000000000000000000000000000000000000000", "gasUsed": "0x5208", diff --git a/cmd/evm/testdata/3/exp.json b/cmd/evm/testdata/3/exp.json index 807cdccfb4..36bf2604af 100644 --- a/cmd/evm/testdata/3/exp.json +++ b/cmd/evm/testdata/3/exp.json @@ -24,7 +24,7 @@ "status": "0x1", "cumulativeGasUsed": "0x521f", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "logs": null, + "logs": [], "transactionHash": "0x72fadbef39cd251a437eea619cfeda752271a5faaaa2147df012e112159ffb81", "contractAddress": "0x0000000000000000000000000000000000000000", "gasUsed": "0x521f", diff --git a/cmd/evm/testdata/30/exp.json b/cmd/evm/testdata/30/exp.json index 9861f5a071..7df3b78820 100644 --- a/cmd/evm/testdata/30/exp.json +++ b/cmd/evm/testdata/30/exp.json @@ -25,7 +25,7 @@ "status": "0x1", "cumulativeGasUsed": "0x5208", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "logs": null, + "logs": [], "transactionHash": "0xa98a24882ea90916c6a86da650fbc6b14238e46f0af04a131ce92be897507476", "contractAddress": "0x0000000000000000000000000000000000000000", "gasUsed": "0x5208", @@ -40,7 +40,7 @@ "status": "0x1", "cumulativeGasUsed": "0xa410", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", - "logs": null, + "logs": [], "transactionHash": "0x36bad80acce7040c45fd32764b5c2b2d2e6f778669fb41791f73f546d56e739a", "contractAddress": "0x0000000000000000000000000000000000000000", "gasUsed": "0x5208", diff --git a/cmd/evm/testdata/33/exp.json b/cmd/evm/testdata/33/exp.json index b40ca9fee2..73aaf80a28 100644 --- a/cmd/evm/testdata/33/exp.json +++ b/cmd/evm/testdata/33/exp.json @@ -44,7 +44,7 @@ "root": "0x", "status": "0x1", "cumulativeGasUsed": "0x15fa9", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","logs": null,"transactionHash": "0x0417aab7c1d8a3989190c3167c132876ce9b8afd99262c5a0f9d06802de3d7ef", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","logs": [],"transactionHash": "0x0417aab7c1d8a3989190c3167c132876ce9b8afd99262c5a0f9d06802de3d7ef", "contractAddress": "0x0000000000000000000000000000000000000000", "gasUsed": "0x15fa9", "effectiveGasPrice": null, diff --git a/eth/tracers/native/mux.go b/eth/tracers/native/mux.go index 37fc64f3f5..b7d6f29a6a 100644 --- a/eth/tracers/native/mux.go +++ b/eth/tracers/native/mux.go @@ -28,7 +28,7 @@ import ( ) func init() { - tracers.DefaultDirectory.Register("muxTracer", newMuxTracer, false) + tracers.DefaultDirectory.Register("muxTracer", newMuxTracerFromConfig, false) } // muxTracer is a go implementation of the Tracer interface which @@ -38,8 +38,8 @@ type muxTracer struct { tracers []*tracers.Tracer } -// newMuxTracer returns a new mux tracer. -func newMuxTracer(ctx *tracers.Context, cfg json.RawMessage, chainConfig *params.ChainConfig) (*tracers.Tracer, error) { +// newMuxTracerFromConfig returns a new mux tracer. +func newMuxTracerFromConfig(ctx *tracers.Context, cfg json.RawMessage, chainConfig *params.ChainConfig) (*tracers.Tracer, error) { var config map[string]json.RawMessage if err := json.Unmarshal(cfg, &config); err != nil { return nil, err @@ -54,7 +54,16 @@ func newMuxTracer(ctx *tracers.Context, cfg json.RawMessage, chainConfig *params objects = append(objects, t) names = append(names, k) } + return NewMuxTracer(names, objects) +} +// NewMuxTracer creates a multiplexing tracer that fans out tracing hooks to +// multiple child tracers. Each hook invocation is forwarded to all children, +// in the order they are provided. +// +// The names parameter associates a label with each tracer, used as keys in +// the aggregated JSON result returned by GetResult. +func NewMuxTracer(names []string, objects []*tracers.Tracer) (*tracers.Tracer, error) { t := &muxTracer{names: names, tracers: objects} return &tracers.Tracer{ Hooks: &tracing.Hooks{ diff --git a/eth/tracers/native/opcode_counter.go b/eth/tracers/native/opcode_counter.go new file mode 100644 index 0000000000..d859b275f0 --- /dev/null +++ b/eth/tracers/native/opcode_counter.go @@ -0,0 +1,55 @@ +// Copyright 2025 The go-ethereum Authors +// This file is part of go-ethereum. +// +// go-ethereum is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// go-ethereum is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with go-ethereum. If not, see . + +package native + +import ( + "encoding/json" + + "github.com/ethereum/go-ethereum/core/tracing" + "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/eth/tracers" +) + +// opcodeCounter is a simple tracer that counts how many times each opcode is executed. +type opcodeCounter struct { + counts [256]uint64 +} + +// NewOpcodeCounter returns a new opcodeCounter tracer. +func NewOpcodeCounter() *tracers.Tracer { + c := &opcodeCounter{} + return &tracers.Tracer{ + Hooks: &tracing.Hooks{ + OnOpcode: func(pc uint64, op byte, gas, cost uint64, scope tracing.OpContext, rData []byte, depth int, err error) { + c.counts[op]++ + }, + }, + GetResult: c.getResult, + Stop: func(err error) {}, + } +} + +// getResult returns the opcode counts keyed by opcode name. +func (c *opcodeCounter) getResult() (json.RawMessage, error) { + out := make(map[string]uint64) + for op, count := range c.counts { + if count != 0 { + out[vm.OpCode(op).String()] = count + } + } + return json.Marshal(out) +} From 01fe1d716c0e2b22eca5d94bef37795843d70b9c Mon Sep 17 00:00:00 2001 From: rjl493456442 Date: Wed, 18 Feb 2026 08:40:23 +0800 Subject: [PATCH 045/161] core/vm: disable the value transfer in syscall (#33741) In src/ethereum/forks/amsterdam/vm/interpreter.py:299-304, the caller address is only tracked for block level accessList when there's a value transfer: ```python if message.should_transfer_value and message.value != 0: # Track value transfer sender_balance = get_account(state, message.caller).balance recipient_balance = get_account(state, message.current_target).balance track_address(message.state_changes, message.caller) # Line 304 ``` Since system transactions have should_transfer_value=False and value=0, this condition is never met, so the caller (SYSTEM_ADDRESS) is not tracked. This condition is applied for the syscall in the geth implementation, aligning with the spec of EIP7928. --------- Co-authored-by: Felix Lange --- core/vm/evm.go | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/core/vm/evm.go b/core/vm/evm.go index c365f637d2..503e25d427 100644 --- a/core/vm/evm.go +++ b/core/vm/evm.go @@ -245,13 +245,14 @@ func (evm *EVM) Call(caller common.Address, addr common.Address, input []byte, g if evm.depth > int(params.CallCreateDepth) { return nil, gas, ErrDepth } - // Fail if we're trying to transfer more than the available balance - if !value.IsZero() && !evm.Context.CanTransfer(evm.StateDB, caller, value) { + syscall := isSystemCall(caller) + + // Fail if we're trying to transfer more than the available balance. + if !syscall && !value.IsZero() && !evm.Context.CanTransfer(evm.StateDB, caller, value) { return nil, gas, ErrInsufficientBalance } snapshot := evm.StateDB.Snapshot() p, isPrecompile := evm.precompile(addr) - if !evm.StateDB.Exist(addr) { if !isPrecompile && evm.chainRules.IsEIP4762 && !isSystemCall(caller) { // Add proof of absence to witness @@ -275,8 +276,12 @@ func (evm *EVM) Call(caller common.Address, addr common.Address, input []byte, g } evm.StateDB.CreateAccount(addr) } - evm.Context.Transfer(evm.StateDB, caller, addr, value) - + // Perform the value transfer only in non-syscall mode. + // Calling this is required even for zero-value transfers, + // to ensure the state clearing mechanism is applied. + if !syscall { + evm.Context.Transfer(evm.StateDB, caller, addr, value) + } if isPrecompile { ret, gas, err = RunPrecompiledContract(p, input, gas, evm.Config.Tracer) } else { @@ -302,7 +307,6 @@ func (evm *EVM) Call(caller common.Address, addr common.Address, input []byte, g if evm.Config.Tracer != nil && evm.Config.Tracer.OnGasChange != nil { evm.Config.Tracer.OnGasChange(gas, 0, tracing.GasChangeCallFailedExecution) } - gas = 0 } // TODO: consider clearing up unused snapshots: From 2a62df38159d979d7897b87c2d4b2c60fae94bf2 Mon Sep 17 00:00:00 2001 From: Sina M <1591639+s1na@users.noreply.github.com> Date: Wed, 18 Feb 2026 18:28:53 +0100 Subject: [PATCH 046/161] .github: fix actions 32bit test (#33866) --- .github/workflows/go.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index 50c9fe7f75..507057afe5 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -69,8 +69,8 @@ jobs: - name: Install cross toolchain run: | - apt-get update - apt-get -yq --no-install-suggests --no-install-recommends install gcc-multilib + sudo apt-get update + sudo apt-get -yq --no-install-suggests --no-install-recommends install gcc-multilib - name: Build run: go run build/ci.go test -arch 386 -short -p 8 From 54f72c796fb4f8cdf3e050d73af27eb400a6f2bc Mon Sep 17 00:00:00 2001 From: rjl493456442 Date: Thu, 19 Feb 2026 18:43:44 +0800 Subject: [PATCH 047/161] core/rawdb: revert "check pruning tail in HasBody and HasReceipts" (#33865) Reverts ethereum/go-ethereum#33747. This change suffers an unexpected issue during the sync with `history.chain=postmerge`. --- core/rawdb/accessors_chain.go | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/core/rawdb/accessors_chain.go b/core/rawdb/accessors_chain.go index 14308dd698..6ae64fb2fd 100644 --- a/core/rawdb/accessors_chain.go +++ b/core/rawdb/accessors_chain.go @@ -424,13 +424,7 @@ func WriteBodyRLP(db ethdb.KeyValueWriter, hash common.Hash, number uint64, rlp // HasBody verifies the existence of a block body corresponding to the hash. func HasBody(db ethdb.Reader, hash common.Hash, number uint64) bool { if isCanon(db, number, hash) { - // Block is in ancient store, but bodies can be pruned. - // Check if the block number is above the pruning tail. - tail, _ := db.Tail() - if number >= tail { - return true - } - return false + return true } if has, err := db.Has(blockBodyKey(number, hash)); !has || err != nil { return false @@ -472,13 +466,7 @@ func DeleteBody(db ethdb.KeyValueWriter, hash common.Hash, number uint64) { // to a block. func HasReceipts(db ethdb.Reader, hash common.Hash, number uint64) bool { if isCanon(db, number, hash) { - // Block is in ancient store, but receipts can be pruned. - // Check if the block number is above the pruning tail. - tail, _ := db.Tail() - if number >= tail { - return true - } - return false + return true } if has, err := db.Has(blockReceiptsKey(number, hash)); !has || err != nil { return false From 6d865ccd303d2dbad4c562584af4a59cdc40a76a Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Sat, 21 Feb 2026 20:52:43 +0100 Subject: [PATCH 048/161] build: upgrade -dlgo version to 1.25.7 (#33874) --- build/checksums.txt | 84 ++++++++++++++++++++++----------------------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/build/checksums.txt b/build/checksums.txt index 98ee3a91ef..ee1c950d21 100644 --- a/build/checksums.txt +++ b/build/checksums.txt @@ -5,49 +5,49 @@ # https://github.com/ethereum/execution-spec-tests/releases/download/v5.1.0 a3192784375acec7eaec492799d5c5d0c47a2909a3cc40178898e4ecd20cc416 fixtures_develop.tar.gz -# version:golang 1.25.1 +# version:golang 1.25.7 # https://go.dev/dl/ -d010c109cee94d80efe681eab46bdea491ac906bf46583c32e9f0dbb0bd1a594 go1.25.1.src.tar.gz -1d622468f767a1b9fe1e1e67bd6ce6744d04e0c68712adc689748bbeccb126bb go1.25.1.darwin-amd64.tar.gz -68deebb214f39d542e518ebb0598a406ab1b5a22bba8ec9ade9f55fb4dd94a6c go1.25.1.darwin-arm64.tar.gz -d03cdcbc9bd8baf5cf028de390478e9e2b3e4d0afe5a6582dedc19bfe6a263b2 go1.25.1.linux-386.tar.gz -7716a0d940a0f6ae8e1f3b3f4f36299dc53e31b16840dbd171254312c41ca12e go1.25.1.linux-amd64.tar.gz -65a3e34fb2126f55b34e1edfc709121660e1be2dee6bdf405fc399a63a95a87d go1.25.1.linux-arm64.tar.gz -eb949be683e82a99e9861dafd7057e31ea40b161eae6c4cd18fdc0e8c4ae6225 go1.25.1.linux-armv6l.tar.gz -be13d5479b8c75438f2efcaa8c191fba3af684b3228abc9c99c7aa8502f34424 go1.25.1.windows-386.zip -4a974de310e7ee1d523d2fcedb114ba5fa75408c98eb3652023e55ccf3fa7cab go1.25.1.windows-amd64.zip -45ab4290adbd6ee9e7f18f0d57eaa9008fdbef590882778ed93eac3c8cca06c5 go1.25.1.aix-ppc64.tar.gz -2e3c1549bed3124763774d648f291ac42611232f48320ebbd23517c909c09b81 go1.25.1.dragonfly-amd64.tar.gz -dc0198dd4ec520e13f26798def8750544edf6448d8e9c43fd2a814e4885932af go1.25.1.freebsd-386.tar.gz -c4f1a7e7b258406e6f3b677ecdbd97bbb23ff9c0d44be4eb238a07d360f69ac8 go1.25.1.freebsd-amd64.tar.gz -7772fc5ff71ed39297ec0c1599fc54e399642c9b848eac989601040923b0de9c go1.25.1.freebsd-arm.tar.gz -5bb011d5d5b6218b12189f07aa0be618ab2002662fff1ca40afba7389735c207 go1.25.1.freebsd-arm64.tar.gz -ccac716240cb049bebfafcb7eebc3758512178a4c51fc26da9cc032035d850c8 go1.25.1.freebsd-riscv64.tar.gz -cc53910ffb9fcfdd988a9fa25b5423bae1cfa01b19616be646700e1f5453b466 go1.25.1.illumos-amd64.tar.gz -efe809f923bcedab44bf7be2b3af8d182b512b1bf9c07d302e0c45d26c8f56f3 go1.25.1.linux-loong64.tar.gz -c0de33679f6ed68991dc42dc4a602e74a666e3e166c1748ee1b5d1a7ea2ffbb2 go1.25.1.linux-mips.tar.gz -c270f7b0c0bdfbcd54fef4481227c40d41bb518f9ae38ee930870f04a0a6a589 go1.25.1.linux-mips64.tar.gz -80be871ba9c944f34d1868cdf5047e1cf2e1289fe08cdb90e2453d2f0d6965ae go1.25.1.linux-mips64le.tar.gz -9f09defa9bb22ebf2cde76162f40958564e57ce5c2b3649bc063bebcbc9294c1 go1.25.1.linux-mipsle.tar.gz -2c76b7d278c1d43ad19d478ad3f0f05e7b782b64b90870701b314fa48b5f43c6 go1.25.1.linux-ppc64.tar.gz -8b0c8d3ee5b1b5c28b6bd63dc4438792012e01d03b4bf7a61d985c87edab7d1f go1.25.1.linux-ppc64le.tar.gz -22fe934a9d0c9c57275716c55b92d46ebd887cec3177c9140705efa9f84ba1e2 go1.25.1.linux-riscv64.tar.gz -9cfe517ba423f59f3738ca5c3d907c103253cffbbcc2987142f79c5de8c1bf93 go1.25.1.linux-s390x.tar.gz -6af8a08353e76205d5b743dd7a3f0126684f96f62be0a31b75daf9837e512c46 go1.25.1.netbsd-386.tar.gz -e5d534ff362edb1bd8c8e10892b6a027c4c1482454245d1529167676498684c7 go1.25.1.netbsd-amd64.tar.gz -88bcf39254fdcea6a199c1c27d787831b652427ce60851ae9e41a3d7eb477f45 go1.25.1.netbsd-arm.tar.gz -d7c2eabe1d04ee47bcaea2816fdd90dbd25d90d4dfa756faa9786c788e4f3a4e go1.25.1.netbsd-arm64.tar.gz -14a2845977eb4dde11d929858c437a043467c427db87899935e90cee04a38d72 go1.25.1.openbsd-386.tar.gz -d27ac54b38a13a09c81e67c82ac70d387037341c85c3399291c73e13e83fdd8c go1.25.1.openbsd-amd64.tar.gz -0f4ab5f02500afa4befd51fed1e8b45e4d07ca050f641cc3acc76eaa4027b2c3 go1.25.1.openbsd-arm.tar.gz -d46c3bd156843656f7f3cb0dec27ea51cd926ec3f7b80744bf8156e67c1c812f go1.25.1.openbsd-arm64.tar.gz -c550514c67f22e409be10e40eace761e2e43069f4ef086ae6e60aac736c2b679 go1.25.1.openbsd-ppc64.tar.gz -8a09a8714a2556eb13fc1f10b7ce2553fcea4971e3330fc3be0efd24aab45734 go1.25.1.openbsd-riscv64.tar.gz -b0e1fefaf0c7abd71f139a54eee9767944aff5f0bc9d69c968234804884e552f go1.25.1.plan9-386.tar.gz -e94732c94f149690aa0ab11c26090577211b4a988137cb2c03ec0b54e750402e go1.25.1.plan9-amd64.tar.gz -7eb80e9de1e817d9089a54e8c7c5c8d8ed9e5fb4d4a012fc0f18fc422a484f0c go1.25.1.plan9-arm.tar.gz -1261dfad7c4953c0ab90381bc1242dc54e394db7485c59349428d532b2273343 go1.25.1.solaris-amd64.tar.gz -04bc3c078e9e904c4d58d6ac2532a5bdd402bd36a9ff0b5949b3c5e6006a05ee go1.25.1.windows-arm64.zip +178f2832820274b43e177d32f06a3ebb0129e427dd20a5e4c88df2c1763cf10a go1.25.7.src.tar.gz +81bf2a1f20633f62d55d826d82dde3b0570cf1408a91e15781b266037299285b go1.25.7.aix-ppc64.tar.gz +bf5050a2152f4053837b886e8d9640c829dbacbc3370f913351eb0904cb706f5 go1.25.7.darwin-amd64.tar.gz +ff18369ffad05c57d5bed888b660b31385f3c913670a83ef557cdfd98ea9ae1b go1.25.7.darwin-arm64.tar.gz +c5dccd7f192dd7b305dc209fb316ac1917776d74bd8e4d532ef2772f305bf42a go1.25.7.dragonfly-amd64.tar.gz +a2de97c8ac74bf64b0ae73fe9d379e61af530e061bc7f8f825044172ffe61a8b go1.25.7.freebsd-386.tar.gz +055f9e138787dcafa81eb0314c8ff70c6dd0f6dba1e8a6957fef5d5efd1ab8fd go1.25.7.freebsd-amd64.tar.gz +60e7f7a7c990f0b9539ac8ed668155746997d404643a4eecd47b3dee1b7e710b go1.25.7.freebsd-arm.tar.gz +631e03d5fd4c526e2f499154d8c6bf4cb081afb2fff171c428722afc9539d53a go1.25.7.freebsd-arm64.tar.gz +8a264fd685823808140672812e3ad9c43f6ad59444c0dc14cdd3a1351839ddd5 go1.25.7.freebsd-riscv64.tar.gz +57c672447d906a1bcab98f2b11492d54521a791aacbb4994a25169e59cbe289a go1.25.7.illumos-amd64.tar.gz +2866517e9ca81e6a2e85a930e9b11bc8a05cfeb2fc6dc6cb2765e7fb3c14b715 go1.25.7.linux-386.tar.gz +12e6d6a191091ae27dc31f6efc630e3a3b8ba409baf3573d955b196fdf086005 go1.25.7.linux-amd64.tar.gz +ba611a53534135a81067240eff9508cd7e256c560edd5d8c2fef54f083c07129 go1.25.7.linux-arm64.tar.gz +1ba07e0eb86b839e72467f4b5c7a5597d07f30bcf5563c951410454f7cda5266 go1.25.7.linux-armv6l.tar.gz +775753fc5952a334c415f08768df2f0b73a3228a16e8f5f63d545daacb4e3357 go1.25.7.linux-loong64.tar.gz +1a023bb367c5fbb4c637a2f6dc23ff17c6591ad929ce16ea88c74d857153b307 go1.25.7.linux-mips.tar.gz +a8e97223d8aa6fdfd45f132a4784d2f536bbac5f3d63a24b63d33b6bfe1549af go1.25.7.linux-mips64.tar.gz +eb9edb6223330d5e20275667c65dea076b064c08e595fe4eba5d7d6055cfaccf go1.25.7.linux-mips64le.tar.gz +9c1e693552a5f9bb9e0012d1c5e01456ecefbc59bef53a77305222ce10aba368 go1.25.7.linux-mipsle.tar.gz +28a788798e7329acbbc0ac2caa5e4368b1e5ede646cc24429c991214cfb45c63 go1.25.7.linux-ppc64.tar.gz +42124c0edc92464e2b37b2d7fcd3658f0c47ebd6a098732415a522be8cb88e3f go1.25.7.linux-ppc64le.tar.gz +88d59c6893c8425875d6eef8e3434bc2fa2552e5ad4c058c6cd8cd710a0301c8 go1.25.7.linux-riscv64.tar.gz +c6b77facf666dc68195ecab05dbf0ebb4e755b2a8b7734c759880557f1c29b0c go1.25.7.linux-s390x.tar.gz +f14c184d9ade0ee04c7735d4071257b90896ecbde1b32adae84135f055e6399b go1.25.7.netbsd-386.tar.gz +7e7389e404dca1088c31f0fc07f1dd60891d7182bcd621469c14f7e79eceb3ff go1.25.7.netbsd-amd64.tar.gz +70388bb3ef2f03dbf1357e9056bd09034a67e018262557354f8cf549766b3f9d go1.25.7.netbsd-arm.tar.gz +8c1cda9d25bfc9b18d24d5f95fc23949dd3ff99fa408a6cfa40e2cf12b07e362 go1.25.7.netbsd-arm64.tar.gz +42f0d1bfbe39b8401cccb84dd66b30795b97bfc9620dfdc17c5cd4fcf6495cb0 go1.25.7.openbsd-386.tar.gz +e514879c0a28bc32123cd52c4c093de912477fe83f36a6d07517d066ef55391a go1.25.7.openbsd-amd64.tar.gz +8cd22530695a0218232bf7efea8f162df1697a3106942ac4129b8c3de39ce4ef go1.25.7.openbsd-arm.tar.gz +938720f6ebc0d1c53d7840321d3a31f29fd02496e84a6538f442a9311dc1cc9a go1.25.7.openbsd-arm64.tar.gz +a4c378b73b98f89a3596c2ef51aabbb28783d9ca29f7e317d8ca07939660ce6f go1.25.7.openbsd-ppc64.tar.gz +937b58734fbeaa8c7941a0e4285e7e84b7885396e8d11c23f9ab1a8ff10ff20e go1.25.7.openbsd-riscv64.tar.gz +61a093c8c5244916f25740316386bb9f141545dcf01b06a79d1c78ece488403e go1.25.7.plan9-386.tar.gz +7fc8f6689c9de8ccb7689d2278035fa83c2d601409101840df6ddfe09ba58699 go1.25.7.plan9-amd64.tar.gz +9661dff8eaeeb62f1c3aadbc5ff189a2e6744e1ec885e32dbcb438f58a34def5 go1.25.7.plan9-arm.tar.gz +28ecba0e1d7950c8b29a4a04962dd49c3bf5221f55a44f17d98f369f82859cf4 go1.25.7.solaris-amd64.tar.gz +baa6b488291801642fa620026169e38bec2da2ac187cd3ae2145721cf826bbc3 go1.25.7.windows-386.zip +c75e5f4ff62d085cc0017be3ad19d5536f46825fa05db06ec468941f847e3228 go1.25.7.windows-amd64.zip +807033f85931bc4a589ca8497535dcbeb1f30d506e47fa200f5f04c4a71c3d9f go1.25.7.windows-arm64.zip # version:golangci 2.4.0 # https://github.com/golangci/golangci-lint/releases/ From 453d0f92999299527615e400eac4bacb717109c6 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Sat, 21 Feb 2026 20:53:02 +0100 Subject: [PATCH 049/161] build: upgrade to golangci-lint v2.10.1 (#33875) --- build/checksums.txt | 81 ++++++++++++++++++++++++++++----------------- 1 file changed, 51 insertions(+), 30 deletions(-) diff --git a/build/checksums.txt b/build/checksums.txt index ee1c950d21..ba80a3e201 100644 --- a/build/checksums.txt +++ b/build/checksums.txt @@ -49,37 +49,58 @@ baa6b488291801642fa620026169e38bec2da2ac187cd3ae2145721cf826bbc3 go1.25.7.windo c75e5f4ff62d085cc0017be3ad19d5536f46825fa05db06ec468941f847e3228 go1.25.7.windows-amd64.zip 807033f85931bc4a589ca8497535dcbeb1f30d506e47fa200f5f04c4a71c3d9f go1.25.7.windows-arm64.zip -# version:golangci 2.4.0 +# version:golangci 2.10.1 # https://github.com/golangci/golangci-lint/releases/ -# https://github.com/golangci/golangci-lint/releases/download/v2.4.0/ -7904ce63f79db44934939cf7a063086ea0ea98e9b19eba0a9d52ccdd0d21951c golangci-lint-2.4.0-darwin-amd64.tar.gz -cd4dd53fa09b6646baff5fd22b8c64d91db02c21c7496df27992d75d34feec59 golangci-lint-2.4.0-darwin-arm64.tar.gz -d58f426ebe14cc257e81562b4bf37a488ffb4ffbbb3ec73041eb3b38bb25c0e1 golangci-lint-2.4.0-freebsd-386.tar.gz -6ec4a6177fc6c0dd541fbcb3a7612845266d020d35cc6fa92959220cdf64ca39 golangci-lint-2.4.0-freebsd-amd64.tar.gz -4d473e3e71c01feaa915a0604fb35758b41284fb976cdeac3f842118d9ee7e17 golangci-lint-2.4.0-freebsd-armv6.tar.gz -58727746c6530801a3f9a702a5945556a5eb7e88809222536dd9f9d54cafaeff golangci-lint-2.4.0-freebsd-armv7.tar.gz -fbf28c662760e24c32f82f8d16dffdb4a82de7726a52ba1fad94f890c22997ea golangci-lint-2.4.0-illumos-amd64.tar.gz -a15a000a8981ef665e971e0f67e2acda9066a9e37a59344393b7351d8fb49c81 golangci-lint-2.4.0-linux-386.tar.gz -fae792524c04424c0ac369f5b8076f04b45cf29fc945a370e55d369a8dc11840 golangci-lint-2.4.0-linux-amd64.tar.gz -70ac11f55b80ec78fd3a879249cc9255121b8dfd7f7ed4fc46ed137f4abf17e7 golangci-lint-2.4.0-linux-arm64.tar.gz -4acdc40e5cebe99e4e7ced358a05b2e71789f409b41cb4f39bbb86ccfa14b1dc golangci-lint-2.4.0-linux-armv6.tar.gz -2a68749568fa22b4a97cb88dbea655595563c795076536aa6c087f7968784bf3 golangci-lint-2.4.0-linux-armv7.tar.gz -9e3369afb023711036dcb0b4f45c9fe2792af962fa1df050c9f6ac101a6c5d73 golangci-lint-2.4.0-linux-loong64.tar.gz -bb9143d6329be2c4dbfffef9564078e7da7d88e7dde6c829b6263d98e072229e golangci-lint-2.4.0-linux-mips64.tar.gz -5ad1765b40d56cd04d4afd805b3ba6f4bfd9b36181da93c31e9b17e483d8608d golangci-lint-2.4.0-linux-mips64le.tar.gz -918936fb9c0d5ba96bef03cf4348b03938634cfcced49be1e9bb29cb5094fa73 golangci-lint-2.4.0-linux-ppc64le.tar.gz -f7474c638e1fb67ebbdc654b55ca0125377ea0bc88e8fee8d964a4f24eacf828 golangci-lint-2.4.0-linux-riscv64.tar.gz -b617a9543997c8bfceaffa88a75d4e595030c6add69fba800c1e4d8f5fe253dd golangci-lint-2.4.0-linux-s390x.tar.gz -7db027b03a9ba328f795215b04f594036837bc7dd0dd7cd16776b02a6167981c golangci-lint-2.4.0-netbsd-386.tar.gz -52d8f9393f4313df0a62b752c37775e3af0b818e43e8dd28954351542d7c60bc golangci-lint-2.4.0-netbsd-amd64.tar.gz -5c0086027fb5a4af3829e530c8115db4b35d11afe1914322eef528eb8cd38c69 golangci-lint-2.4.0-netbsd-arm64.tar.gz -6b779d6ed1aed87cefe195cc11759902b97a76551b593312c6833f2635a3488f golangci-lint-2.4.0-netbsd-armv6.tar.gz -f00d1f4b7ec3468a0f9fffd0d9ea036248b029b7621cbc9a59c449ef94356d09 golangci-lint-2.4.0-netbsd-armv7.tar.gz -3ce671b0b42b58e35066493aab75a7e2826c9e079988f1ba5d814a4029faaf87 golangci-lint-2.4.0-windows-386.zip -003112f7a56746feaabf20b744054bf9acdf900c9e77176383623c4b1d76aaa9 golangci-lint-2.4.0-windows-amd64.zip -dc0c2092af5d47fc2cd31a1dfe7b4c7e765fab22de98bd21ef2ffcc53ad9f54f golangci-lint-2.4.0-windows-arm64.zip -0263d23e20a260cb1592d35e12a388f99efe2c51b3611fdc66fbd9db1fce664d golangci-lint-2.4.0-windows-armv6.zip -9403c03bf648e6313036e0273149d44bad1b9ad53889b6d00e4ccb842ba3c058 golangci-lint-2.4.0-windows-armv7.zip +# https://github.com/golangci/golangci-lint/releases/download/v2.10.1 +66fb0da81b8033b477f97eea420d4b46b230ca172b8bb87c6610109f3772b6b6 golangci-lint-2.10.1-darwin-amd64.tar.gz +03bfadf67e52b441b7ec21305e501c717df93c959836d66c7f97312654acb297 golangci-lint-2.10.1-darwin-arm64.tar.gz +c9a44658ccc8f7b8dbbd4ae6020ba91c1a5d3987f4d91ced0f7d2bea013e57ca golangci-lint-2.10.1-freebsd-386.tar.gz +a513c5cb4e0f5bd5767001af9d5e97e7868cfc2d9c46739a4df93e713cfb24af golangci-lint-2.10.1-freebsd-amd64.tar.gz +2ef38eefc4b5cee2febacb75a30579526e5656c16338a921d80e59a8e87d4425 golangci-lint-2.10.1-freebsd-arm64.tar.gz +8fea6766318b4829e766bbe325f10191d75297dcc44ae35bf374816037878e38 golangci-lint-2.10.1-freebsd-armv6.tar.gz +30b629870574d6254f3e8804e5a74b34f98e1263c9d55465830d739c88b862ed golangci-lint-2.10.1-freebsd-armv7.tar.gz +c0db839f866ce80b1b6c96167aa101cfe50d9c936f42d942a3c1cbdc1801af68 golangci-lint-2.10.1-illumos-amd64.tar.gz +280eb56636e9175f671cd7b755d7d67f628ae2ed00a164d1e443c43c112034e5 golangci-lint-2.10.1-linux-386.deb +065a7d99da61dc7dfbfef2e2d7053dd3fa6672598f2747117aa4bb5f45e7df7f golangci-lint-2.10.1-linux-386.rpm +a55918c03bb413b2662287653ab2ae2fef4e37428b247dad6348724adde9d770 golangci-lint-2.10.1-linux-386.tar.gz +8aa9b3aa14f39745eeb7fc7ff50bcac683e785397d1e4bc9afd2184b12c4ce86 golangci-lint-2.10.1-linux-amd64.deb +62a111688e9e305032334a2cbc84f4d971b64bb3bffc99d3f80081d57fb25e32 golangci-lint-2.10.1-linux-amd64.rpm +dfa775874cf0561b404a02a8f4481fc69b28091da95aa697259820d429b09c99 golangci-lint-2.10.1-linux-amd64.tar.gz +b3f36937e8ea1660739dc0f5c892ea59c9c21ed4e75a91a25957c561f7f79a55 golangci-lint-2.10.1-linux-arm64.deb +36d50314d53683b1f1a2a6cedfb5a9468451b481c64ab9e97a8e843ea088074d golangci-lint-2.10.1-linux-arm64.rpm +6652b42ae02915eb2f9cb2a2e0cac99514c8eded8388d88ae3e06e1a52c00de8 golangci-lint-2.10.1-linux-arm64.tar.gz +a32d8d318e803496812dd3461f250e52ccc7f53c47b95ce404a9cf55778ceb6a golangci-lint-2.10.1-linux-armv6.deb +41d065f4c8ea165a1531abea644988ee2e973e4f0b49f9725ed3b979dac45112 golangci-lint-2.10.1-linux-armv6.rpm +59159a4df03aabbde69d15c7b7b3df143363cbb41f4bd4b200caffb8e34fb734 golangci-lint-2.10.1-linux-armv6.tar.gz +b2e8ec0e050a1e2251dfe1561434999d202f5a3f9fa47ce94378b0fd1662ea5a golangci-lint-2.10.1-linux-armv7.deb +28c9331429a497da27e9c77846063bd0e8275e878ffedb4eb9e9f21d24771cc0 golangci-lint-2.10.1-linux-armv7.rpm +818f33e95b273e3769284b25563b51ef6a294e9e25acf140fda5830c075a1a59 golangci-lint-2.10.1-linux-armv7.tar.gz +6b6b85ed4b7c27f51097dd681523000409dde835e86e6e314e87be4bb013e2ab golangci-lint-2.10.1-linux-loong64.deb +94050a0cf06169e2ae44afb307dcaafa7d7c3b38c0c23b5652cf9cb60f0c337f golangci-lint-2.10.1-linux-loong64.rpm +25820300fccb8c961c1cdcb1f77928040c079e04c43a3a5ceb34b1cb4a1c5c8d golangci-lint-2.10.1-linux-loong64.tar.gz +98bf39d10139fdcaa37f94950e9bbb8888660ae468847ae0bf1cb5bf67c1f68b golangci-lint-2.10.1-linux-mips64.deb +df3ce5f03808dcceaa8b683d1d06e95c885f09b59dc8e15deb840fbe2b3e3299 golangci-lint-2.10.1-linux-mips64.rpm +972508dda523067e6e6a1c8e6609d63bc7c4153819c11b947d439235cf17bac2 golangci-lint-2.10.1-linux-mips64.tar.gz +1d37f2919e183b5bf8b1777ed8c4b163d3b491d0158355a7999d647655cbbeb6 golangci-lint-2.10.1-linux-mips64le.deb +e341d031002cd09a416329ed40f674231051a38544b8f94deb2d1708ce1f4a6f golangci-lint-2.10.1-linux-mips64le.rpm +393560122b9cb5538df0c357d30eb27b6ee563533fbb9b138c8db4fd264002af golangci-lint-2.10.1-linux-mips64le.tar.gz +21ca46b6a96442e8957677a3ca059c6b93674a68a01b1c71f4e5df0ea2e96d19 golangci-lint-2.10.1-linux-ppc64le.deb +57fe0cbca0a9bbdf1547c5e8aa7d278e6896b438d72a541bae6bc62c38b43d1e golangci-lint-2.10.1-linux-ppc64le.rpm +e2883db9fa51584e5e203c64456f29993550a7faadc84e3faccdb48f0669992e golangci-lint-2.10.1-linux-ppc64le.tar.gz +aa6da0e98ab0ba3bb7582e112174c349907d5edfeff90a551dca3c6eecf92fc0 golangci-lint-2.10.1-linux-riscv64.deb +3c68d76cd884a7aad206223a980b9c20bb9ea74b560fa27ed02baf2389189234 golangci-lint-2.10.1-linux-riscv64.rpm +3bca11bfac4197205639cbd4676a5415054e629ac6c12ea10fcbe33ef852d9c3 golangci-lint-2.10.1-linux-riscv64.tar.gz +0c6aed2ce49db2586adbac72c80d871f06feb1caf4c0763a5ca98fec809a8f0b golangci-lint-2.10.1-linux-s390x.deb +16c285adfe1061d69dd8e503be69f87c7202857c6f4add74ac02e3571158fbec golangci-lint-2.10.1-linux-s390x.rpm +21011ad368eb04f024201b832095c6b5f96d0888de194cca5bfe4d9307d6364b golangci-lint-2.10.1-linux-s390x.tar.gz +7b5191e77a70485918712e31ed55159956323e4911bab1b67569c9d86e1b75eb golangci-lint-2.10.1-netbsd-386.tar.gz +07801fd38d293ebad10826f8285525a39ea91ce5ddad77d05bfa90bda9c884a9 golangci-lint-2.10.1-netbsd-amd64.tar.gz +7e7219d71c1bf33b98c328c93dc0560706dd896a1c43c44696e5222fc9d7446e golangci-lint-2.10.1-netbsd-arm64.tar.gz +92fbc90b9eec0e572269b0f5492a2895c426b086a68372fde49b7e4d4020863e golangci-lint-2.10.1-netbsd-armv6.tar.gz +f67b3ae1f47caeefa507a4ebb0c8336958a19011fe48766443212030f75d004b golangci-lint-2.10.1-netbsd-armv7.tar.gz +a40bc091c10cea84eaee1a90b84b65f5e8652113b0a600bb099e4e4d9d7caddb golangci-lint-2.10.1-windows-386.zip +c60c87695e79db8e320f0e5be885059859de52bb5ee5f11be5577828570bc2a3 golangci-lint-2.10.1-windows-amd64.zip +636ab790c8dcea8034aa34aba6031ca3893d68f7eda000460ab534341fadbab1 golangci-lint-2.10.1-windows-arm64.zip # This is the builder on PPA that will build Go itself (inception-y), don't modify! # From 00cbd2e6f4f406d872844e4d488f2a3180b39977 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Sun, 22 Feb 2026 21:58:47 +0100 Subject: [PATCH 050/161] p2p/discover/v5wire: use Whoareyou.ChallengeData instead of storing encoded packet (#31547) This changes the challenge resend logic again to use the existing `ChallengeData` field of `v5wire.Whoareyou` instead of storing a second copy of the packet in `Whoareyou.Encoded`. It's more correct this way since `ChallengeData` is supposed to be the data that is used by the ID verification procedure. Also adapts the cross-client test to verify this behavior. Follow-up to #31543 --- cmd/devp2p/internal/v5test/discv5tests.go | 29 ++++++++++-------- p2p/discover/v5_udp_test.go | 11 +++---- p2p/discover/v5wire/encoding.go | 36 ++++++++++++++--------- p2p/discover/v5wire/encoding_test.go | 29 ++++++++++++++++++ p2p/discover/v5wire/msg.go | 17 ++++++----- 5 files changed, 83 insertions(+), 39 deletions(-) diff --git a/cmd/devp2p/internal/v5test/discv5tests.go b/cmd/devp2p/internal/v5test/discv5tests.go index 2139cd8ca6..efe9144069 100644 --- a/cmd/devp2p/internal/v5test/discv5tests.go +++ b/cmd/devp2p/internal/v5test/discv5tests.go @@ -52,7 +52,7 @@ func (s *Suite) AllTests() []utesting.Test { {Name: "Ping", Fn: s.TestPing}, {Name: "PingLargeRequestID", Fn: s.TestPingLargeRequestID}, {Name: "PingMultiIP", Fn: s.TestPingMultiIP}, - {Name: "PingHandshakeInterrupted", Fn: s.TestPingHandshakeInterrupted}, + {Name: "HandshakeResend", Fn: s.TestHandshakeResend}, {Name: "TalkRequest", Fn: s.TestTalkRequest}, {Name: "FindnodeZeroDistance", Fn: s.TestFindnodeZeroDistance}, {Name: "FindnodeResults", Fn: s.TestFindnodeResults}, @@ -158,22 +158,20 @@ the attempt from a different IP.`) } } -// TestPingHandshakeInterrupted starts a handshake, but doesn't finish it and sends a second ordinary message -// packet instead of a handshake message packet. The remote node should respond with -// another WHOAREYOU challenge for the second packet. -func (s *Suite) TestPingHandshakeInterrupted(t *utesting.T) { - t.Log(`TestPingHandshakeInterrupted starts a handshake, but doesn't finish it and sends a second ordinary message -packet instead of a handshake message packet. The remote node should respond with -another WHOAREYOU challenge for the second packet.`) - +// TestHandshakeResend starts a handshake, but doesn't finish it and sends a second ordinary message +// packet instead of a handshake message packet. The remote node should repeat the previous WHOAREYOU +// challenge for the first PING. +func (s *Suite) TestHandshakeResend(t *utesting.T) { conn, l1 := s.listen1(t) defer conn.close() // First PING triggers challenge. ping := &v5wire.Ping{ReqID: conn.nextReqID()} conn.write(l1, ping, nil) + var challenge1 *v5wire.Whoareyou switch resp := conn.read(l1).(type) { case *v5wire.Whoareyou: + challenge1 = resp t.Logf("got WHOAREYOU for PING") default: t.Fatal("expected WHOAREYOU, got", resp) @@ -181,9 +179,16 @@ another WHOAREYOU challenge for the second packet.`) // Send second PING. ping2 := &v5wire.Ping{ReqID: conn.nextReqID()} - switch resp := conn.reqresp(l1, ping2).(type) { - case *v5wire.Pong: - checkPong(t, resp, ping2, l1) + conn.write(l1, ping2, nil) + switch resp := conn.read(l1).(type) { + case *v5wire.Whoareyou: + if resp.Nonce != challenge1.Nonce { + t.Fatalf("wrong nonce %x in WHOAREYOU (want %x)", resp.Nonce[:], challenge1.Nonce[:]) + } + if !bytes.Equal(resp.ChallengeData, challenge1.ChallengeData) { + t.Fatalf("wrong ChallengeData in resent WHOAREYOU (want %x)", resp.ChallengeData, challenge1.ChallengeData) + } + resp.Node = conn.remote default: t.Fatal("expected WHOAREYOU, got", resp) } diff --git a/p2p/discover/v5_udp_test.go b/p2p/discover/v5_udp_test.go index 6abe20d7a4..9429fbaf0a 100644 --- a/p2p/discover/v5_udp_test.go +++ b/p2p/discover/v5_udp_test.go @@ -856,10 +856,10 @@ type testCodecFrame struct { } func (c *testCodec) Encode(toID enode.ID, addr string, p v5wire.Packet, _ *v5wire.Whoareyou) ([]byte, v5wire.Nonce, error) { - // To match the behavior of v5wire.Codec, we return the cached encoding of - // WHOAREYOU challenges. - if wp, ok := p.(*v5wire.Whoareyou); ok && len(wp.Encoded) > 0 { - return wp.Encoded, wp.Nonce, nil + if wp, ok := p.(*v5wire.Whoareyou); ok && len(wp.ChallengeData) > 0 { + // To match the behavior of v5wire.Codec, we return the cached encoding of + // WHOAREYOU challenges. + return wp.ChallengeData, wp.Nonce, nil } c.ctr++ @@ -874,7 +874,7 @@ func (c *testCodec) Encode(toID enode.ID, addr string, p v5wire.Packet, _ *v5wir // Store recently sent challenges. if w, ok := p.(*v5wire.Whoareyou); ok { w.Nonce = authTag - w.Encoded = frame + w.ChallengeData = frame if c.sentChallenges == nil { c.sentChallenges = make(map[enode.ID]*v5wire.Whoareyou) } @@ -911,6 +911,7 @@ func (c *testCodec) decodeFrame(input []byte) (frame testCodecFrame, p v5wire.Pa case v5wire.WhoareyouPacket: dec := new(v5wire.Whoareyou) err = rlp.DecodeBytes(frame.Packet, &dec) + dec.ChallengeData = bytes.Clone(input) p = dec default: p, err = v5wire.DecodeMessage(frame.Ptype, frame.Packet) diff --git a/p2p/discover/v5wire/encoding.go b/p2p/discover/v5wire/encoding.go index d6a30a17ca..9a5bbd4612 100644 --- a/p2p/discover/v5wire/encoding.go +++ b/p2p/discover/v5wire/encoding.go @@ -190,10 +190,16 @@ func (c *Codec) Encode(id enode.ID, addr string, packet Packet, challenge *Whoar ) switch { case packet.Kind() == WhoareyouPacket: - // just send the WHOAREYOU packet raw again, rather than the re-encoded challenge data w := packet.(*Whoareyou) - if len(w.Encoded) > 0 { - return w.Encoded, w.Nonce, nil + if len(w.ChallengeData) > 0 { + // This WHOAREYOU packet was encoded before, so it's a resend. + // The unmasked packet content is stored in w.ChallengeData. + // Just apply the masking again to finish encoding. + c.buf.Reset() + c.buf.Write(w.ChallengeData) + copy(head.IV[:], w.ChallengeData) + enc := applyMasking(id, head.IV, c.buf.Bytes()) + return enc, w.Nonce, nil } head, err = c.encodeWhoareyou(id, packet.(*Whoareyou)) case challenge != nil: @@ -228,7 +234,6 @@ func (c *Codec) Encode(id enode.ID, addr string, packet Packet, challenge *Whoar if err != nil { return nil, Nonce{}, err } - challenge.Encoded = bytes.Clone(enc) c.sc.storeSentHandshake(id, addr, challenge) return enc, head.Nonce, err } @@ -246,14 +251,10 @@ func (c *Codec) Encode(id enode.ID, addr string, packet Packet, challenge *Whoar // EncodeRaw encodes a packet with the given header. func (c *Codec) EncodeRaw(id enode.ID, head Header, msgdata []byte) ([]byte, error) { + // header c.writeHeaders(&head) - - // Apply masking. - masked := c.buf.Bytes()[sizeofMaskingIV:] - mask := head.mask(id) - mask.XORKeyStream(masked[:], masked[:]) - - // Write message data. + applyMasking(id, head.IV, c.buf.Bytes()) + // message data c.buf.Write(msgdata) return c.buf.Bytes(), nil } @@ -463,7 +464,7 @@ func (c *Codec) Decode(inputData []byte, addr string) (src enode.ID, n *enode.No // Unmask the static header. var head Header copy(head.IV[:], input[:sizeofMaskingIV]) - mask := head.mask(c.localnode.ID()) + mask := createMask(c.localnode.ID(), head.IV) staticHeader := input[sizeofMaskingIV:sizeofStaticPacketData] mask.XORKeyStream(staticHeader, staticHeader) @@ -679,10 +680,17 @@ func (h *StaticHeader) checkValid(packetLen int, protocolID [6]byte) error { } // mask returns a cipher for 'masking' / 'unmasking' packet headers. -func (h *Header) mask(destID enode.ID) cipher.Stream { +func createMask(destID enode.ID, iv [16]byte) cipher.Stream { block, err := aes.NewCipher(destID[:16]) if err != nil { panic("can't create cipher") } - return cipher.NewCTR(block, h.IV[:]) + return cipher.NewCTR(block, iv[:]) +} + +func applyMasking(destID enode.ID, iv [16]byte, packet []byte) []byte { + masked := packet[sizeofMaskingIV:] + mask := createMask(destID, iv) + mask.XORKeyStream(masked[:], masked[:]) + return packet } diff --git a/p2p/discover/v5wire/encoding_test.go b/p2p/discover/v5wire/encoding_test.go index 5774cb3d8c..dd7ec6d53c 100644 --- a/p2p/discover/v5wire/encoding_test.go +++ b/p2p/discover/v5wire/encoding_test.go @@ -269,6 +269,35 @@ func TestHandshake_BadHandshakeAttack(t *testing.T) { net.nodeB.expectDecodeErr(t, errUnexpectedHandshake, findnode) } +func TestEncodeWhoareyouResend(t *testing.T) { + t.Parallel() + net := newHandshakeTest() + defer net.close() + + // A -> B WHOAREYOU + challenge := &Whoareyou{ + Nonce: Nonce{1, 2, 3, 4}, + IDNonce: testIDnonce, + RecordSeq: 0, + } + enc, _ := net.nodeA.encode(t, net.nodeB, challenge) + net.nodeB.expectDecode(t, WhoareyouPacket, enc) + whoareyou1 := bytes.Clone(enc) + + if len(challenge.ChallengeData) == 0 { + t.Fatal("ChallengeData not assigned by encode") + } + + // A -> B WHOAREYOU + // Send the same challenge again. This should produce exactly + // the same bytes as the first send. + enc, _ = net.nodeA.encode(t, net.nodeB, challenge) + whoareyou2 := bytes.Clone(enc) + if !bytes.Equal(whoareyou2, whoareyou1) { + t.Fatal("re-encoded challenge not equal to first") + } +} + // This test checks some malformed packets. func TestDecodeErrorsV5(t *testing.T) { t.Parallel() diff --git a/p2p/discover/v5wire/msg.go b/p2p/discover/v5wire/msg.go index 089fd4ebdc..e5c29276ca 100644 --- a/p2p/discover/v5wire/msg.go +++ b/p2p/discover/v5wire/msg.go @@ -63,19 +63,20 @@ type ( // WHOAREYOU contains the handshake challenge. Whoareyou struct { - ChallengeData []byte // Encoded challenge - Nonce Nonce // Nonce of request packet - IDNonce [16]byte // Identity proof data - RecordSeq uint64 // ENR sequence number of recipient + Nonce Nonce // Nonce of request packet + IDNonce [16]byte // Identity proof data + RecordSeq uint64 // ENR sequence number of recipient // Node is the locally known node record of recipient. // This must be set by the caller of Encode. - Node *enode.Node + Node *enode.Node `rlp:"-"` + + // ChallengeData stores the unmasked encoding of the whole packet. This is the + // input data for verification. It is assigned by both Encode and Decode + // operations. + ChallengeData []byte `rlp:"-"` sent mclock.AbsTime // for handshake GC. - - // Encoded is packet raw data for sending out, but should not be include in the RLP encoding. - Encoded []byte `rlp:"-"` } // PING is sent during liveness checks. From d3dd48e59db28ea04bd92e4337cdd488ccb8fbec Mon Sep 17 00:00:00 2001 From: Csaba Kiraly Date: Mon, 23 Feb 2026 07:27:25 -0600 Subject: [PATCH 051/161] metrics: allow changing influxdb interval (#33767) The PR exposes the InfuxDB reporting interval as a CLI parameter, which was previously fixed 10s. Default is still kept at 10s. Note that decreasing the interval comes with notable extra traffic and load on InfluxDB. --- cmd/geth/chaincmd.go | 1 + cmd/geth/config.go | 3 +++ cmd/geth/main.go | 1 + cmd/utils/flags.go | 16 ++++++++++++---- metrics/config.go | 24 ++++++++++++++---------- 5 files changed, 31 insertions(+), 14 deletions(-) diff --git a/cmd/geth/chaincmd.go b/cmd/geth/chaincmd.go index 1ccb78d622..f4e15afebe 100644 --- a/cmd/geth/chaincmd.go +++ b/cmd/geth/chaincmd.go @@ -111,6 +111,7 @@ if one is set. Otherwise it prints the genesis from the datadir.`, utils.MetricsInfluxDBUsernameFlag, utils.MetricsInfluxDBPasswordFlag, utils.MetricsInfluxDBTagsFlag, + utils.MetricsInfluxDBIntervalFlag, utils.MetricsInfluxDBTokenFlag, utils.MetricsInfluxDBBucketFlag, utils.MetricsInfluxDBOrganizationFlag, diff --git a/cmd/geth/config.go b/cmd/geth/config.go index 7943d95d65..720d1ef9fc 100644 --- a/cmd/geth/config.go +++ b/cmd/geth/config.go @@ -377,6 +377,9 @@ func applyMetricConfig(ctx *cli.Context, cfg *gethConfig) { if ctx.IsSet(utils.MetricsInfluxDBTagsFlag.Name) { cfg.Metrics.InfluxDBTags = ctx.String(utils.MetricsInfluxDBTagsFlag.Name) } + if ctx.IsSet(utils.MetricsInfluxDBIntervalFlag.Name) { + cfg.Metrics.InfluxDBInterval = ctx.Duration(utils.MetricsInfluxDBIntervalFlag.Name) + } if ctx.IsSet(utils.MetricsEnableInfluxDBV2Flag.Name) { cfg.Metrics.EnableInfluxDBV2 = ctx.Bool(utils.MetricsEnableInfluxDBV2Flag.Name) } diff --git a/cmd/geth/main.go b/cmd/geth/main.go index 2291e0aafa..ca75775be2 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -216,6 +216,7 @@ var ( utils.MetricsInfluxDBUsernameFlag, utils.MetricsInfluxDBPasswordFlag, utils.MetricsInfluxDBTagsFlag, + utils.MetricsInfluxDBIntervalFlag, utils.MetricsEnableInfluxDBV2Flag, utils.MetricsInfluxDBTokenFlag, utils.MetricsInfluxDBBucketFlag, diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 3cb365b108..eee75d886a 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -1016,6 +1016,13 @@ Please note that --` + MetricsHTTPFlag.Name + ` must be set to start the server. Category: flags.MetricsCategory, } + MetricsInfluxDBIntervalFlag = &cli.DurationFlag{ + Name: "metrics.influxdb.interval", + Usage: "Interval between metrics reports to InfluxDB (with time unit, e.g. 10s)", + Value: metrics.DefaultConfig.InfluxDBInterval, + Category: flags.MetricsCategory, + } + MetricsEnableInfluxDBV2Flag = &cli.BoolFlag{ Name: "metrics.influxdbv2", Usage: "Enable metrics export/push to an external InfluxDB v2 database", @@ -2246,13 +2253,14 @@ func SetupMetrics(cfg *metrics.Config) { bucket = cfg.InfluxDBBucket organization = cfg.InfluxDBOrganization tagsMap = SplitTagsFlag(cfg.InfluxDBTags) + interval = cfg.InfluxDBInterval ) if enableExport { - log.Info("Enabling metrics export to InfluxDB") - go influxdb.InfluxDBWithTags(metrics.DefaultRegistry, 10*time.Second, endpoint, database, username, password, "geth.", tagsMap) + log.Info("Enabling metrics export to InfluxDB", "interval", interval) + go influxdb.InfluxDBWithTags(metrics.DefaultRegistry, interval, endpoint, database, username, password, "geth.", tagsMap) } else if enableExportV2 { - log.Info("Enabling metrics export to InfluxDB (v2)") - go influxdb.InfluxDBV2WithTags(metrics.DefaultRegistry, 10*time.Second, endpoint, token, bucket, organization, "geth.", tagsMap) + log.Info("Enabling metrics export to InfluxDB (v2)", "interval", interval) + go influxdb.InfluxDBV2WithTags(metrics.DefaultRegistry, interval, endpoint, token, bucket, organization, "geth.", tagsMap) } // Expvar exporter. diff --git a/metrics/config.go b/metrics/config.go index 72f94dd194..3d3cb693fd 100644 --- a/metrics/config.go +++ b/metrics/config.go @@ -16,18 +16,21 @@ package metrics +import "time" + // Config contains the configuration for the metric collection. type Config struct { - Enabled bool `toml:",omitempty"` - EnabledExpensive bool `toml:"-"` - HTTP string `toml:",omitempty"` - Port int `toml:",omitempty"` - EnableInfluxDB bool `toml:",omitempty"` - InfluxDBEndpoint string `toml:",omitempty"` - InfluxDBDatabase string `toml:",omitempty"` - InfluxDBUsername string `toml:",omitempty"` - InfluxDBPassword string `toml:",omitempty"` - InfluxDBTags string `toml:",omitempty"` + Enabled bool `toml:",omitempty"` + EnabledExpensive bool `toml:"-"` + HTTP string `toml:",omitempty"` + Port int `toml:",omitempty"` + EnableInfluxDB bool `toml:",omitempty"` + InfluxDBEndpoint string `toml:",omitempty"` + InfluxDBDatabase string `toml:",omitempty"` + InfluxDBUsername string `toml:",omitempty"` + InfluxDBPassword string `toml:",omitempty"` + InfluxDBTags string `toml:",omitempty"` + InfluxDBInterval time.Duration `toml:",omitempty"` EnableInfluxDBV2 bool `toml:",omitempty"` InfluxDBToken string `toml:",omitempty"` @@ -47,6 +50,7 @@ var DefaultConfig = Config{ InfluxDBUsername: "test", InfluxDBPassword: "test", InfluxDBTags: "host=localhost", + InfluxDBInterval: 10 * time.Second, // influxdbv2-specific flags EnableInfluxDBV2: false, From e40aa46e88d122d8a95a11fb05c7b396a1c49746 Mon Sep 17 00:00:00 2001 From: Marius van der Wijden Date: Mon, 23 Feb 2026 15:56:31 +0100 Subject: [PATCH 052/161] eth/catalyst: implement testing_buildBlockV1 (#33656) implements https://github.com/ethereum/execution-apis/pull/710/changes#r2712256529 --------- Co-authored-by: Felix Lange --- beacon/engine/types.go | 4 +- cmd/geth/consolecmd_test.go | 2 +- eth/catalyst/api.go | 3 +- eth/catalyst/api_testing.go | 79 +++++++++++++++ eth/catalyst/api_testing_test.go | 121 +++++++++++++++++++++++ eth/catalyst/simulated_beacon.go | 1 + eth/tracers/logger/access_list_tracer.go | 5 +- internal/ethapi/override/override.go | 8 +- miner/payload_building.go | 23 +++++ miner/worker.go | 38 +++++-- 10 files changed, 270 insertions(+), 14 deletions(-) create mode 100644 eth/catalyst/api_testing.go create mode 100644 eth/catalyst/api_testing_test.go diff --git a/beacon/engine/types.go b/beacon/engine/types.go index da9b6568f2..206bc02b0c 100644 --- a/beacon/engine/types.go +++ b/beacon/engine/types.go @@ -213,7 +213,7 @@ func encodeTransactions(txs []*types.Transaction) [][]byte { return enc } -func decodeTransactions(enc [][]byte) ([]*types.Transaction, error) { +func DecodeTransactions(enc [][]byte) ([]*types.Transaction, error) { var txs = make([]*types.Transaction, len(enc)) for i, encTx := range enc { var tx types.Transaction @@ -251,7 +251,7 @@ func ExecutableDataToBlock(data ExecutableData, versionedHashes []common.Hash, b // for stateless execution, so it skips checking if the executable data hashes to // the requested hash (stateless has to *compute* the root hash, it's not given). func ExecutableDataToBlockNoHash(data ExecutableData, versionedHashes []common.Hash, beaconRoot *common.Hash, requests [][]byte) (*types.Block, error) { - txs, err := decodeTransactions(data.Transactions) + txs, err := DecodeTransactions(data.Transactions) if err != nil { return nil, err } diff --git a/cmd/geth/consolecmd_test.go b/cmd/geth/consolecmd_test.go index 871e8c175f..12ee7e7dd1 100644 --- a/cmd/geth/consolecmd_test.go +++ b/cmd/geth/consolecmd_test.go @@ -30,7 +30,7 @@ import ( ) const ( - ipcAPIs = "admin:1.0 debug:1.0 engine:1.0 eth:1.0 miner:1.0 net:1.0 rpc:1.0 txpool:1.0 web3:1.0" + ipcAPIs = "admin:1.0 debug:1.0 engine:1.0 eth:1.0 miner:1.0 net:1.0 rpc:1.0 testing:1.0 txpool:1.0 web3:1.0" httpAPIs = "eth:1.0 net:1.0 rpc:1.0 web3:1.0" ) diff --git a/eth/catalyst/api.go b/eth/catalyst/api.go index 1850e4ce40..b38d8fd5bf 100644 --- a/eth/catalyst/api.go +++ b/eth/catalyst/api.go @@ -47,9 +47,10 @@ import ( "github.com/ethereum/go-ethereum/rpc" ) -// Register adds the engine API to the full node. +// Register adds the engine API and related APIs to the full node. func Register(stack *node.Node, backend *eth.Ethereum) error { stack.RegisterAPIs([]rpc.API{ + newTestingAPI(backend), { Namespace: "engine", Service: NewConsensusAPI(backend), diff --git a/eth/catalyst/api_testing.go b/eth/catalyst/api_testing.go new file mode 100644 index 0000000000..8586029468 --- /dev/null +++ b/eth/catalyst/api_testing.go @@ -0,0 +1,79 @@ +// Copyright 2026 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package catalyst + +import ( + "errors" + + "github.com/ethereum/go-ethereum/beacon/engine" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/miner" + "github.com/ethereum/go-ethereum/rpc" +) + +// testingAPI implements the testing_ namespace. +// It's an engine-API adjacent namespace for testing purposes. +type testingAPI struct { + eth *eth.Ethereum +} + +func newTestingAPI(backend *eth.Ethereum) rpc.API { + return rpc.API{ + Namespace: "testing", + Service: &testingAPI{backend}, + Version: "1.0", + Authenticated: false, + } +} + +func (api *testingAPI) BuildBlockV1(parentHash common.Hash, payloadAttributes engine.PayloadAttributes, transactions *[]hexutil.Bytes, extraData *hexutil.Bytes) (*engine.ExecutionPayloadEnvelope, error) { + if api.eth.BlockChain().CurrentBlock().Hash() != parentHash { + return nil, errors.New("parentHash is not current head") + } + // If transactions is empty but not nil, build an empty block + // If the transactions is nil, build a block with the current transactions from the txpool + // If the transactions is not nil and not empty, build a block with the transactions + buildEmpty := transactions != nil && len(*transactions) == 0 + var txs []*types.Transaction + if transactions != nil { + dec := make([][]byte, 0, len(*transactions)) + for _, tx := range *transactions { + dec = append(dec, tx) + } + var err error + txs, err = engine.DecodeTransactions(dec) + if err != nil { + return nil, err + } + } + extra := make([]byte, 0) + if extraData != nil { + extra = *extraData + } + args := &miner.BuildPayloadArgs{ + Parent: parentHash, + Timestamp: payloadAttributes.Timestamp, + FeeRecipient: payloadAttributes.SuggestedFeeRecipient, + Random: payloadAttributes.Random, + Withdrawals: payloadAttributes.Withdrawals, + BeaconRoot: payloadAttributes.BeaconRoot, + } + return api.eth.Miner().BuildTestingPayload(args, txs, buildEmpty, extra) +} diff --git a/eth/catalyst/api_testing_test.go b/eth/catalyst/api_testing_test.go new file mode 100644 index 0000000000..fd4d28d26a --- /dev/null +++ b/eth/catalyst/api_testing_test.go @@ -0,0 +1,121 @@ +// Copyright 2026 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package catalyst + +import ( + "context" + "math/big" + "testing" + + "github.com/ethereum/go-ethereum/beacon/engine" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/params" +) + +func TestBuildBlockV1(t *testing.T) { + genesis, blocks := generateMergeChain(5, true) + n, ethservice := startEthService(t, genesis, blocks) + defer n.Close() + + parent := ethservice.BlockChain().CurrentBlock() + attrs := engine.PayloadAttributes{ + Timestamp: parent.Time + 1, + Random: crypto.Keccak256Hash([]byte("test")), + SuggestedFeeRecipient: parent.Coinbase, + Withdrawals: nil, + BeaconRoot: nil, + } + + currentNonce, _ := ethservice.APIBackend.GetPoolNonce(context.Background(), testAddr) + tx, _ := types.SignTx(types.NewTransaction(currentNonce, testAddr, big.NewInt(1), params.TxGas, big.NewInt(params.InitialBaseFee*2), nil), types.LatestSigner(ethservice.BlockChain().Config()), testKey) + + api := &testingAPI{eth: ethservice} + + t.Run("buildOnCurrentHead", func(t *testing.T) { + envelope, err := api.BuildBlockV1(parent.Hash(), attrs, nil, nil) + if err != nil { + t.Fatalf("BuildBlockV1 failed: %v", err) + } + if envelope == nil || envelope.ExecutionPayload == nil { + t.Fatal("expected non-nil envelope and payload") + } + payload := envelope.ExecutionPayload + if payload.ParentHash != parent.Hash() { + t.Errorf("parent hash mismatch: got %x want %x", payload.ParentHash, parent.Hash()) + } + if payload.Number != parent.Number.Uint64()+1 { + t.Errorf("block number mismatch: got %d want %d", payload.Number, parent.Number.Uint64()+1) + } + if payload.Timestamp != attrs.Timestamp { + t.Errorf("timestamp mismatch: got %d want %d", payload.Timestamp, attrs.Timestamp) + } + if payload.FeeRecipient != attrs.SuggestedFeeRecipient { + t.Errorf("fee recipient mismatch: got %x want %x", payload.FeeRecipient, attrs.SuggestedFeeRecipient) + } + }) + + t.Run("wrongParentHash", func(t *testing.T) { + wrongParent := common.Hash{0x01} + _, err := api.BuildBlockV1(wrongParent, attrs, nil, nil) + if err == nil { + t.Fatal("expected error when parentHash is not current head") + } + if err.Error() != "parentHash is not current head" { + t.Errorf("unexpected error: %v", err) + } + }) + + t.Run("buildEmptyBlock", func(t *testing.T) { + emptyTxs := []hexutil.Bytes{} + envelope, err := api.BuildBlockV1(parent.Hash(), attrs, &emptyTxs, nil) + if err != nil { + t.Fatalf("BuildBlockV1 with empty txs failed: %v", err) + } + if envelope == nil || envelope.ExecutionPayload == nil { + t.Fatal("expected non-nil envelope and payload") + } + if len(envelope.ExecutionPayload.Transactions) != 0 { + t.Errorf("expected empty block, got %d transactions", len(envelope.ExecutionPayload.Transactions)) + } + }) + + t.Run("buildBlockWithTransactions", func(t *testing.T) { + enc, _ := tx.MarshalBinary() + txs := []hexutil.Bytes{enc} + envelope, err := api.BuildBlockV1(parent.Hash(), attrs, &txs, nil) + if err != nil { + t.Fatalf("BuildBlockV1 with transaction failed: %v", err) + } + if len(envelope.ExecutionPayload.Transactions) != 1 { + t.Errorf("expected 1 transaction, got %d", len(envelope.ExecutionPayload.Transactions)) + } + }) + + t.Run("buildBlockWithTransactionsFromTxPool", func(t *testing.T) { + ethservice.TxPool().Add([]*types.Transaction{tx}, true) + envelope, err := api.BuildBlockV1(parent.Hash(), attrs, nil, nil) + if err != nil { + t.Fatalf("BuildBlockV1 with transaction failed: %v", err) + } + if len(envelope.ExecutionPayload.Transactions) != 1 { + t.Errorf("expected 1 transaction, got %d", len(envelope.ExecutionPayload.Transactions)) + } + }) +} diff --git a/eth/catalyst/simulated_beacon.go b/eth/catalyst/simulated_beacon.go index 25d8b7df78..ed3fa76a57 100644 --- a/eth/catalyst/simulated_beacon.go +++ b/eth/catalyst/simulated_beacon.go @@ -376,5 +376,6 @@ func RegisterSimulatedBeaconAPIs(stack *node.Node, sim *SimulatedBeacon) { Service: api, Version: "1.0", }, + newTestingAPI(sim.eth), }) } diff --git a/eth/tracers/logger/access_list_tracer.go b/eth/tracers/logger/access_list_tracer.go index 0d51f40522..2e51a9a907 100644 --- a/eth/tracers/logger/access_list_tracer.go +++ b/eth/tracers/logger/access_list_tracer.go @@ -18,6 +18,7 @@ package logger import ( "maps" + "slices" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/tracing" @@ -88,8 +89,10 @@ func (al accessList) accessList() types.AccessList { for slot := range slots { tuple.StorageKeys = append(tuple.StorageKeys, slot) } - acl = append(acl, tuple) + keys := slices.SortedFunc(maps.Keys(slots), common.Hash.Cmp) + acl = append(acl, types.AccessTuple{Address: addr, StorageKeys: keys}) } + slices.SortFunc(acl, func(a, b types.AccessTuple) int { return a.Address.Cmp(b.Address) }) return acl } diff --git a/internal/ethapi/override/override.go b/internal/ethapi/override/override.go index 9d57a78651..96ba77ab0a 100644 --- a/internal/ethapi/override/override.go +++ b/internal/ethapi/override/override.go @@ -19,7 +19,9 @@ package override import ( "errors" "fmt" + "maps" "math/big" + "slices" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" @@ -58,9 +60,13 @@ func (diff *StateOverride) Apply(statedb *state.StateDB, precompiles vm.Precompi if diff == nil { return nil } + // Iterate in deterministic order so error messages and behavior are stable (e.g. for tests). + addrs := slices.SortedFunc(maps.Keys(*diff), common.Address.Cmp) + // Tracks destinations of precompiles that were moved. dirtyAddrs := make(map[common.Address]struct{}) - for addr, account := range *diff { + for _, addr := range addrs { + account := (*diff)[addr] // If a precompile was moved to this address already, it can't be overridden. if _, ok := dirtyAddrs[addr]; ok { return fmt.Errorf("account %s has already been overridden by a precompile", addr.Hex()) diff --git a/miner/payload_building.go b/miner/payload_building.go index 6b010186bf..a049ce190a 100644 --- a/miner/payload_building.go +++ b/miner/payload_building.go @@ -273,3 +273,26 @@ func (miner *Miner) buildPayload(args *BuildPayloadArgs, witness bool) (*Payload }() return payload, nil } + +// BuildTestingPayload is for testing_buildBlockV*. It creates a block with the exact content given +// by the parameters instead of using the locally available transactions. +func (miner *Miner) BuildTestingPayload(args *BuildPayloadArgs, transactions []*types.Transaction, empty bool, extraData []byte) (*engine.ExecutionPayloadEnvelope, error) { + fullParams := &generateParams{ + timestamp: args.Timestamp, + forceTime: true, + parentHash: args.Parent, + coinbase: args.FeeRecipient, + random: args.Random, + withdrawals: args.Withdrawals, + beaconRoot: args.BeaconRoot, + noTxs: empty, + forceOverrides: true, + overrideExtraData: extraData, + overrideTxs: transactions, + } + res := miner.generateWork(fullParams, false) + if res.err != nil { + return nil, res.err + } + return engine.BlockToExecutableData(res.block, new(big.Int), res.sidecars, res.requests), nil +} diff --git a/miner/worker.go b/miner/worker.go index 45d7073ed7..9e2140bd04 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -112,6 +112,10 @@ type generateParams struct { withdrawals types.Withdrawals // List of withdrawals to include in block (shanghai field) beaconRoot *common.Hash // The beacon root (cancun field). noTxs bool // Flag whether an empty block without any transaction is expected + + forceOverrides bool // Flag whether we should overwrite extraData and transactions + overrideExtraData []byte + overrideTxs []*types.Transaction } // generateWork generates a sealing block based on the given parameters. @@ -132,15 +136,30 @@ func (miner *Miner) generateWork(genParam *generateParams, witness bool) *newPay work.size += uint64(genParam.withdrawals.Size()) if !genParam.noTxs { - interrupt := new(atomic.Int32) - timer := time.AfterFunc(miner.config.Recommit, func() { - interrupt.Store(commitInterruptTimeout) - }) - defer timer.Stop() + // If forceOverrides is true and overrideTxs is not empty, commit the override transactions + // otherwise, fill the block with the current transactions from the txpool + if genParam.forceOverrides && len(genParam.overrideTxs) > 0 { + if work.gasPool == nil { + work.gasPool = new(core.GasPool).AddGas(work.header.GasLimit) + } + for _, tx := range genParam.overrideTxs { + work.state.SetTxContext(tx.Hash(), work.tcount) + if err := miner.commitTransaction(work, tx); err != nil { + // all passed transactions HAVE to be valid at this point + return &newPayloadResult{err: err} + } + } + } else { + interrupt := new(atomic.Int32) + timer := time.AfterFunc(miner.config.Recommit, func() { + interrupt.Store(commitInterruptTimeout) + }) + defer timer.Stop() - err := miner.fillTransactions(interrupt, work) - if errors.Is(err, errBlockInterruptedByTimeout) { - log.Warn("Block building is interrupted", "allowance", common.PrettyDuration(miner.config.Recommit)) + err := miner.fillTransactions(interrupt, work) + if errors.Is(err, errBlockInterruptedByTimeout) { + log.Warn("Block building is interrupted", "allowance", common.PrettyDuration(miner.config.Recommit)) + } } } body := types.Body{Transactions: work.txs, Withdrawals: genParam.withdrawals} @@ -224,6 +243,9 @@ func (miner *Miner) prepareWork(genParams *generateParams, witness bool) (*envir if len(miner.config.ExtraData) != 0 { header.Extra = miner.config.ExtraData } + if genParams.forceOverrides { + header.Extra = genParams.overrideExtraData + } // Set the randomness field from the beacon chain if it's available. if genParams.random != (common.Hash{}) { header.MixDigest = genParams.random From 1d1a094d5181d1f991b0e35b52ef3cd2175f41ee Mon Sep 17 00:00:00 2001 From: Marius van der Wijden Date: Mon, 23 Feb 2026 16:02:23 +0100 Subject: [PATCH 053/161] beacon/blsync: ignore beacon syncer reorging errors (#33628) Downgrades beacon syncer reorging from Error to Debug closes https://github.com/ethereum/go-ethereum/issues/29916 --- beacon/blsync/engineclient.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/beacon/blsync/engineclient.go b/beacon/blsync/engineclient.go index 9fc6a18a57..6cac2bc5a8 100644 --- a/beacon/blsync/engineclient.go +++ b/beacon/blsync/engineclient.go @@ -87,6 +87,10 @@ func (ec *engineClient) updateLoop(headCh <-chan types.ChainHeadEvent) { if status, err := ec.callForkchoiceUpdated(forkName, event); err == nil { log.Info("Successful ForkchoiceUpdated", "head", event.Block.Hash(), "status", status) } else { + if err.Error() == "beacon syncer reorging" { + log.Debug("Failed ForkchoiceUpdated", "head", event.Block.Hash(), "error", err) + continue // ignore beacon syncer reorging errors, this error can occur if the blsync is skipping a block + } log.Error("Failed ForkchoiceUpdated", "head", event.Block.Hash(), "error", err) } } From 1625064c689ecb05f84a780d81b29e34c7b3fc7c Mon Sep 17 00:00:00 2001 From: vickkkkkyy Date: Tue, 24 Feb 2026 01:07:26 +0800 Subject: [PATCH 054/161] internal/ethapi: include AuthorizationList in gas estimation (#33849) Fixes an issue where AuthorizationList wasn't copied over when estimating gas for a user-provided transaction. --- internal/ethapi/transaction_args.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/ethapi/transaction_args.go b/internal/ethapi/transaction_args.go index 22d1adfa57..4fb30e6289 100644 --- a/internal/ethapi/transaction_args.go +++ b/internal/ethapi/transaction_args.go @@ -155,6 +155,7 @@ func (args *TransactionArgs) setDefaults(ctx context.Context, b Backend, config AccessList: args.AccessList, BlobFeeCap: args.BlobFeeCap, BlobHashes: args.BlobHashes, + AuthorizationList: args.AuthorizationList, } latestBlockNr := rpc.BlockNumberOrHashWithNumber(rpc.LatestBlockNumber) estimated, err := DoEstimateGas(ctx, b, callArgs, latestBlockNr, nil, nil, b.RPCGasCap()) From 82fad31540d10d97b69329732c2e33b0be5e8186 Mon Sep 17 00:00:00 2001 From: Nakanishi Hiro Date: Tue, 24 Feb 2026 04:47:30 +0900 Subject: [PATCH 055/161] internal/ethapi: add eth_getStorageValues method (#32591) Implements the new eth_getStorageValues method. It returns storage values for a list of contracts. Spec: https://github.com/ethereum/execution-apis/pull/756 --------- Co-authored-by: Sina Mahmoodi --- internal/ethapi/api.go | 39 ++++++++++++++++ internal/ethapi/api_test.go | 88 +++++++++++++++++++++++++++++++++++++ internal/web3ext/web3ext.go | 6 +++ 3 files changed, 133 insertions(+) diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go index 5fbe7db694..ebdbbee202 100644 --- a/internal/ethapi/api.go +++ b/internal/ethapi/api.go @@ -53,6 +53,10 @@ import ( // allowed to produce in order to speed up calculations. const estimateGasErrorRatio = 0.015 +// maxGetStorageSlots is the maximum total number of storage slots that can +// be requested in a single eth_getStorageValues call. +const maxGetStorageSlots = 1024 + var errBlobTxNotSupported = errors.New("signing blob transactions not supported") var errSubClosed = errors.New("chain subscription closed") @@ -589,6 +593,41 @@ func (api *BlockChainAPI) GetStorageAt(ctx context.Context, address common.Addre return res[:], state.Error() } +// GetStorageValues returns multiple storage slot values for multiple accounts +// at the given block. +func (api *BlockChainAPI) GetStorageValues(ctx context.Context, requests map[common.Address][]common.Hash, blockNrOrHash rpc.BlockNumberOrHash) (map[common.Address][]hexutil.Bytes, error) { + // Count total slots requested. + var totalSlots int + for _, keys := range requests { + totalSlots += len(keys) + if totalSlots > maxGetStorageSlots { + return nil, &clientLimitExceededError{message: fmt.Sprintf("too many slots (max %d)", maxGetStorageSlots)} + } + } + if totalSlots == 0 { + return nil, &invalidParamsError{message: "empty request"} + } + + state, _, err := api.b.StateAndHeaderByNumberOrHash(ctx, blockNrOrHash) + if state == nil || err != nil { + return nil, err + } + + result := make(map[common.Address][]hexutil.Bytes, len(requests)) + for addr, keys := range requests { + vals := make([]hexutil.Bytes, len(keys)) + for i, key := range keys { + v := state.GetState(addr, key) + vals[i] = v[:] + } + if err := state.Error(); err != nil { + return nil, err + } + result[addr] = vals + } + return result, nil +} + // GetBlockReceipts returns the block receipts for the given block hash or number or tag. func (api *BlockChainAPI) GetBlockReceipts(ctx context.Context, blockNrOrHash rpc.BlockNumberOrHash) ([]map[string]interface{}, error) { var ( diff --git a/internal/ethapi/api_test.go b/internal/ethapi/api_test.go index 837df8b662..2f0c07694d 100644 --- a/internal/ethapi/api_test.go +++ b/internal/ethapi/api_test.go @@ -4065,3 +4065,91 @@ func TestSendRawTransactionSync_Timeout(t *testing.T) { t.Fatalf("expected ErrorData=%s, got %v", want, got) } } + +func TestGetStorageValues(t *testing.T) { + t.Parallel() + + var ( + addr1 = common.HexToAddress("0x1111") + addr2 = common.HexToAddress("0x2222") + slot0 = common.Hash{} + slot1 = common.BigToHash(big.NewInt(1)) + slot2 = common.BigToHash(big.NewInt(2)) + val0 = common.BigToHash(big.NewInt(42)) + val1 = common.BigToHash(big.NewInt(100)) + val2 = common.BigToHash(big.NewInt(200)) + + genesis = &core.Genesis{ + Config: params.MergedTestChainConfig, + Alloc: types.GenesisAlloc{ + addr1: { + Balance: big.NewInt(params.Ether), + Storage: map[common.Hash]common.Hash{ + slot0: val0, + slot1: val1, + }, + }, + addr2: { + Balance: big.NewInt(params.Ether), + Storage: map[common.Hash]common.Hash{ + slot2: val2, + }, + }, + }, + } + ) + api := NewBlockChainAPI(newTestBackend(t, 1, genesis, beacon.New(ethash.NewFaker()), func(i int, b *core.BlockGen) { + b.SetPoS() + })) + latest := rpc.BlockNumberOrHashWithNumber(rpc.LatestBlockNumber) + + // Happy path: multiple addresses, multiple slots. + result, err := api.GetStorageValues(context.Background(), map[common.Address][]common.Hash{ + addr1: {slot0, slot1}, + addr2: {slot2}, + }, latest) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if len(result) != 2 { + t.Fatalf("expected 2 addresses in result, got %d", len(result)) + } + if got := common.BytesToHash(result[addr1][0]); got != val0 { + t.Errorf("addr1 slot0: want %x, got %x", val0, got) + } + if got := common.BytesToHash(result[addr1][1]); got != val1 { + t.Errorf("addr1 slot1: want %x, got %x", val1, got) + } + if got := common.BytesToHash(result[addr2][0]); got != val2 { + t.Errorf("addr2 slot2: want %x, got %x", val2, got) + } + + // Missing slot returns zero. + result, err = api.GetStorageValues(context.Background(), map[common.Address][]common.Hash{ + addr1: {common.HexToHash("0xff")}, + }, latest) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if got := common.BytesToHash(result[addr1][0]); got != (common.Hash{}) { + t.Errorf("missing slot: want zero, got %x", got) + } + + // Empty request returns error. + _, err = api.GetStorageValues(context.Background(), map[common.Address][]common.Hash{}, latest) + if err == nil { + t.Fatal("expected error for empty request") + } + + // Exceeding slot limit returns error. + tooMany := make([]common.Hash, maxGetStorageSlots+1) + for i := range tooMany { + tooMany[i] = common.BigToHash(big.NewInt(int64(i))) + } + _, err = api.GetStorageValues(context.Background(), map[common.Address][]common.Hash{ + addr1: tooMany, + }, latest) + if err == nil { + t.Fatal("expected error for exceeding slot limit") + } +} diff --git a/internal/web3ext/web3ext.go b/internal/web3ext/web3ext.go index 0aedffe230..9ba8776360 100644 --- a/internal/web3ext/web3ext.go +++ b/internal/web3ext/web3ext.go @@ -567,6 +567,12 @@ web3._extend({ params: 3, inputFormatter: [web3._extend.formatters.inputAddressFormatter, null, web3._extend.formatters.inputBlockNumberFormatter] }), + new web3._extend.Method({ + name: 'getStorageValues', + call: 'eth_getStorageValues', + params: 2, + inputFormatter: [null, web3._extend.formatters.inputBlockNumberFormatter] + }), new web3._extend.Method({ name: 'createAccessList', call: 'eth_createAccessList', From c2e1785a48f12f1a4f8d533fc2ed5468b6241e92 Mon Sep 17 00:00:00 2001 From: CPerezz <37264926+CPerezz@users.noreply.github.com> Date: Tue, 24 Feb 2026 02:14:11 +0100 Subject: [PATCH 056/161] eth/protocols/snap: restore peers to idle pool on request revert (#33790) All five `revert*Request` functions (account, bytecode, storage, trienode heal, bytecode heal) remove the request from the tracked set but never restore the peer to its corresponding idle pool. When a request times out and no response arrives, the peer is permanently lost from the idle pool, preventing new work from being assigned to it. In normal operation mode (snap-sync full state) this bug is masked by pivot movement (which resets idle pools via new Sync() cycles every ~15 minutes) and peer churn (reconnections re-add peers via Register()). However in scenarios like the one I have running my (partial-stateful node)[https://github.com/ethereum/go-ethereum/pull/33764] with long-running sync cycles and few peers, all peers can eventually leak out of the idle pools, stalling sync entirely. Fix: after deleting from the request map, restore the peer to its idle pool if it is still registered (guards against the peer-drop path where Unregister already removed the peer). This mirrors the pattern used in all five On* response handlers. This only seems to manifest in peer-thirstly scenarios as where I find myself when testing snapsync for the partial-statefull node). Still, thought was at least good to raise this point. Unsure if required to discuss or not --- eth/protocols/snap/sync.go | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/eth/protocols/snap/sync.go b/eth/protocols/snap/sync.go index 08e85c896a..841bfb446e 100644 --- a/eth/protocols/snap/sync.go +++ b/eth/protocols/snap/sync.go @@ -1699,9 +1699,13 @@ func (s *Syncer) revertAccountRequest(req *accountRequest) { } close(req.stale) - // Remove the request from the tracked set + // Remove the request from the tracked set and restore the peer to the + // idle pool so it can be reassigned work (skip if peer already left). s.lock.Lock() delete(s.accountReqs, req.id) + if _, ok := s.peers[req.peer]; ok { + s.accountIdlers[req.peer] = struct{}{} + } s.lock.Unlock() // If there's a timeout timer still running, abort it and mark the account @@ -1740,9 +1744,13 @@ func (s *Syncer) revertBytecodeRequest(req *bytecodeRequest) { } close(req.stale) - // Remove the request from the tracked set + // Remove the request from the tracked set and restore the peer to the + // idle pool so it can be reassigned work (skip if peer already left). s.lock.Lock() delete(s.bytecodeReqs, req.id) + if _, ok := s.peers[req.peer]; ok { + s.bytecodeIdlers[req.peer] = struct{}{} + } s.lock.Unlock() // If there's a timeout timer still running, abort it and mark the code @@ -1781,9 +1789,13 @@ func (s *Syncer) revertStorageRequest(req *storageRequest) { } close(req.stale) - // Remove the request from the tracked set + // Remove the request from the tracked set and restore the peer to the + // idle pool so it can be reassigned work (skip if peer already left). s.lock.Lock() delete(s.storageReqs, req.id) + if _, ok := s.peers[req.peer]; ok { + s.storageIdlers[req.peer] = struct{}{} + } s.lock.Unlock() // If there's a timeout timer still running, abort it and mark the storage @@ -1826,9 +1838,13 @@ func (s *Syncer) revertTrienodeHealRequest(req *trienodeHealRequest) { } close(req.stale) - // Remove the request from the tracked set + // Remove the request from the tracked set and restore the peer to the + // idle pool so it can be reassigned work (skip if peer already left). s.lock.Lock() delete(s.trienodeHealReqs, req.id) + if _, ok := s.peers[req.peer]; ok { + s.trienodeHealIdlers[req.peer] = struct{}{} + } s.lock.Unlock() // If there's a timeout timer still running, abort it and mark the trie node @@ -1867,9 +1883,13 @@ func (s *Syncer) revertBytecodeHealRequest(req *bytecodeHealRequest) { } close(req.stale) - // Remove the request from the tracked set + // Remove the request from the tracked set and restore the peer to the + // idle pool so it can be reassigned work (skip if peer already left). s.lock.Lock() delete(s.bytecodeHealReqs, req.id) + if _, ok := s.peers[req.peer]; ok { + s.bytecodeHealIdlers[req.peer] = struct{}{} + } s.lock.Unlock() // If there's a timeout timer still running, abort it and mark the code From 59ad40e562ffd235a735d447514da8ccfddebc84 Mon Sep 17 00:00:00 2001 From: Csaba Kiraly Date: Tue, 24 Feb 2026 04:21:03 -0600 Subject: [PATCH 057/161] eth: check for tx on chain as well (#33607) The fetcher should not fetch transactions that are already on chain. Until now we were only checking in the txpool, but that does not have the old transaction. This was leading to extra fetches of transactions that were announced by a peer but are already on chain. Here we extend the check to the chain as well. --- eth/fetcher/metrics.go | 1 + eth/fetcher/tx_fetcher.go | 93 ++++++++++++++++----- eth/fetcher/tx_fetcher_test.go | 2 + eth/handler.go | 4 +- tests/fuzzers/txfetcher/txfetcher_fuzzer.go | 1 + 5 files changed, 75 insertions(+), 26 deletions(-) diff --git a/eth/fetcher/metrics.go b/eth/fetcher/metrics.go index fd1678dd30..3c0d6a8fd8 100644 --- a/eth/fetcher/metrics.go +++ b/eth/fetcher/metrics.go @@ -24,6 +24,7 @@ var ( txAnnounceInMeter = metrics.NewRegisteredMeter("eth/fetcher/transaction/announces/in", nil) txAnnounceKnownMeter = metrics.NewRegisteredMeter("eth/fetcher/transaction/announces/known", nil) txAnnounceUnderpricedMeter = metrics.NewRegisteredMeter("eth/fetcher/transaction/announces/underpriced", nil) + txAnnounceOnchainMeter = metrics.NewRegisteredMeter("eth/fetcher/transaction/announces/onchain", nil) txAnnounceDOSMeter = metrics.NewRegisteredMeter("eth/fetcher/transaction/announces/dos", nil) txBroadcastInMeter = metrics.NewRegisteredMeter("eth/fetcher/transaction/broadcasts/in", nil) diff --git a/eth/fetcher/tx_fetcher.go b/eth/fetcher/tx_fetcher.go index 50d6f2f7ad..bc422e6abe 100644 --- a/eth/fetcher/tx_fetcher.go +++ b/eth/fetcher/tx_fetcher.go @@ -27,6 +27,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/lru" "github.com/ethereum/go-ethereum/common/mclock" + "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/txpool" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/log" @@ -71,6 +72,11 @@ const ( // addTxsBatchSize it the max number of transactions to add in a single batch from a peer. addTxsBatchSize = 128 + + // txOnChainCacheLimit is number of on-chain transactions to keep in a cache to avoid + // re-fetching them soon after they are mined. + // Approx 1MB for 30 minutes of transactions at 18 tps + txOnChainCacheLimit = 32768 ) var ( @@ -152,6 +158,9 @@ type TxFetcher struct { txSeq uint64 // Unique transaction sequence number underpriced *lru.Cache[common.Hash, time.Time] // Transactions discarded as too cheap (don't re-fetch) + chain *core.BlockChain // Blockchain interface for on-chain checks + txOnChainCache *lru.Cache[common.Hash, struct{}] // Cache to avoid fetching once the tx gets on chain + // Stage 1: Waiting lists for newly discovered transactions that might be // broadcast without needing explicit request/reply round trips. waitlist map[common.Hash]map[string]struct{} // Transactions waiting for an potential broadcast @@ -184,36 +193,40 @@ type TxFetcher struct { // NewTxFetcher creates a transaction fetcher to retrieve transaction // based on hash announcements. -func NewTxFetcher(validateMeta func(common.Hash, byte) error, addTxs func([]*types.Transaction) []error, fetchTxs func(string, []common.Hash) error, dropPeer func(string)) *TxFetcher { - return NewTxFetcherForTests(validateMeta, addTxs, fetchTxs, dropPeer, mclock.System{}, time.Now, nil) +// Chain can be nil to disable on-chain checks. +func NewTxFetcher(chain *core.BlockChain, validateMeta func(common.Hash, byte) error, addTxs func([]*types.Transaction) []error, fetchTxs func(string, []common.Hash) error, dropPeer func(string)) *TxFetcher { + return NewTxFetcherForTests(chain, validateMeta, addTxs, fetchTxs, dropPeer, mclock.System{}, time.Now, nil) } // NewTxFetcherForTests is a testing method to mock out the realtime clock with // a simulated version and the internal randomness with a deterministic one. +// Chain can be nil to disable on-chain checks. func NewTxFetcherForTests( - validateMeta func(common.Hash, byte) error, addTxs func([]*types.Transaction) []error, fetchTxs func(string, []common.Hash) error, dropPeer func(string), + chain *core.BlockChain, validateMeta func(common.Hash, byte) error, addTxs func([]*types.Transaction) []error, fetchTxs func(string, []common.Hash) error, dropPeer func(string), clock mclock.Clock, realTime func() time.Time, rand *mrand.Rand) *TxFetcher { return &TxFetcher{ - notify: make(chan *txAnnounce), - cleanup: make(chan *txDelivery), - drop: make(chan *txDrop), - quit: make(chan struct{}), - waitlist: make(map[common.Hash]map[string]struct{}), - waittime: make(map[common.Hash]mclock.AbsTime), - waitslots: make(map[string]map[common.Hash]*txMetadataWithSeq), - announces: make(map[string]map[common.Hash]*txMetadataWithSeq), - announced: make(map[common.Hash]map[string]struct{}), - fetching: make(map[common.Hash]string), - requests: make(map[string]*txRequest), - alternates: make(map[common.Hash]map[string]struct{}), - underpriced: lru.NewCache[common.Hash, time.Time](maxTxUnderpricedSetSize), - validateMeta: validateMeta, - addTxs: addTxs, - fetchTxs: fetchTxs, - dropPeer: dropPeer, - clock: clock, - realTime: realTime, - rand: rand, + notify: make(chan *txAnnounce), + cleanup: make(chan *txDelivery), + drop: make(chan *txDrop), + quit: make(chan struct{}), + waitlist: make(map[common.Hash]map[string]struct{}), + waittime: make(map[common.Hash]mclock.AbsTime), + waitslots: make(map[string]map[common.Hash]*txMetadataWithSeq), + announces: make(map[string]map[common.Hash]*txMetadataWithSeq), + announced: make(map[common.Hash]map[string]struct{}), + fetching: make(map[common.Hash]string), + requests: make(map[string]*txRequest), + alternates: make(map[common.Hash]map[string]struct{}), + underpriced: lru.NewCache[common.Hash, time.Time](maxTxUnderpricedSetSize), + txOnChainCache: lru.NewCache[common.Hash, struct{}](txOnChainCacheLimit), + chain: chain, + validateMeta: validateMeta, + addTxs: addTxs, + fetchTxs: fetchTxs, + dropPeer: dropPeer, + clock: clock, + realTime: realTime, + rand: rand, } } @@ -233,6 +246,7 @@ func (f *TxFetcher) Notify(peer string, types []byte, sizes []uint32, hashes []c unknownMetas = make([]txMetadata, 0, len(hashes)) duplicate int64 + onchain int64 underpriced int64 ) for i, hash := range hashes { @@ -245,6 +259,12 @@ func (f *TxFetcher) Notify(peer string, types []byte, sizes []uint32, hashes []c continue } + // check on chain as well (no need to check limbo separately, as chain checks limbo too) + if _, exist := f.txOnChainCache.Get(hash); exist { + onchain++ + continue + } + if f.isKnownUnderpriced(hash) { underpriced++ continue @@ -259,6 +279,7 @@ func (f *TxFetcher) Notify(peer string, types []byte, sizes []uint32, hashes []c } txAnnounceKnownMeter.Mark(duplicate) txAnnounceUnderpricedMeter.Mark(underpriced) + txAnnounceOnchainMeter.Mark(onchain) // If anything's left to announce, push it into the internal loop if len(unknownHashes) == 0 { @@ -412,7 +433,18 @@ func (f *TxFetcher) loop() { waitTrigger = make(chan struct{}, 1) timeoutTrigger = make(chan struct{}, 1) + + oldHead *types.Header ) + + // Subscribe to chain events to know when transactions are added to chain + var headEventCh chan core.ChainEvent + if f.chain != nil { + headEventCh = make(chan core.ChainEvent, 10) + sub := f.chain.SubscribeChainEvent(headEventCh) + defer sub.Unsubscribe() + } + for { select { case ann := <-f.notify: @@ -837,6 +869,21 @@ func (f *TxFetcher) loop() { f.rescheduleTimeout(timeoutTimer, timeoutTrigger) } + case ev := <-headEventCh: + // New head(s) added + newHead := ev.Header + if oldHead != nil && newHead.ParentHash != oldHead.Hash() { + // Reorg or setHead detected, clear the cache. We could be smarter here and + // only remove/add the diff, but this is simpler and not being exact here + // only results in a few more fetches. + f.txOnChainCache.Purge() + } + oldHead = newHead + // Add all transactions from the new block to the on-chain cache + for _, tx := range ev.Transactions { + f.txOnChainCache.Add(tx.Hash(), struct{}{}) + } + case <-f.quit: return } diff --git a/eth/fetcher/tx_fetcher_test.go b/eth/fetcher/tx_fetcher_test.go index 87fbe9f38c..6c2719631e 100644 --- a/eth/fetcher/tx_fetcher_test.go +++ b/eth/fetcher/tx_fetcher_test.go @@ -91,6 +91,7 @@ type txFetcherTest struct { // and deterministic randomness. func newTestTxFetcher() *TxFetcher { return NewTxFetcher( + nil, func(common.Hash, byte) error { return nil }, func(txs []*types.Transaction) []error { return make([]error, len(txs)) @@ -2191,6 +2192,7 @@ func TestTransactionForgotten(t *testing.T) { } fetcher := NewTxFetcherForTests( + nil, func(common.Hash, byte) error { return nil }, func(txs []*types.Transaction) []error { errs := make([]error, len(txs)) diff --git a/eth/handler.go b/eth/handler.go index 46634cae88..bb2cd5f88b 100644 --- a/eth/handler.go +++ b/eth/handler.go @@ -179,7 +179,6 @@ func newHandler(config *handlerConfig) (*handler, error) { addTxs := func(txs []*types.Transaction) []error { return h.txpool.Add(txs, false) } - validateMeta := func(tx common.Hash, kind byte) error { if h.txpool.Has(tx) { return txpool.ErrAlreadyKnown @@ -189,8 +188,7 @@ func newHandler(config *handlerConfig) (*handler, error) { } return nil } - - h.txFetcher = fetcher.NewTxFetcher(validateMeta, addTxs, fetchTx, h.removePeer) + h.txFetcher = fetcher.NewTxFetcher(h.chain, validateMeta, addTxs, fetchTx, h.removePeer) return h, nil } diff --git a/tests/fuzzers/txfetcher/txfetcher_fuzzer.go b/tests/fuzzers/txfetcher/txfetcher_fuzzer.go index 3baff33dcc..bcceaff383 100644 --- a/tests/fuzzers/txfetcher/txfetcher_fuzzer.go +++ b/tests/fuzzers/txfetcher/txfetcher_fuzzer.go @@ -78,6 +78,7 @@ func fuzz(input []byte) int { rand := rand.New(rand.NewSource(0x3a29)) // Same used in package tests!!! f := fetcher.NewTxFetcherForTests( + nil, func(common.Hash, byte) error { return nil }, func(txs []*types.Transaction) []error { return make([]error, len(txs)) From 01083736c8e590206ae39dcdd2601050dbdcbe74 Mon Sep 17 00:00:00 2001 From: IONode Online <144650818+ionodeionode@users.noreply.github.com> Date: Tue, 24 Feb 2026 19:24:16 +0700 Subject: [PATCH 058/161] core/txpool/blobpool: remove unused adds slice in Add() (#33887) --- core/txpool/blobpool/blobpool.go | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/core/txpool/blobpool/blobpool.go b/core/txpool/blobpool/blobpool.go index 3947ba50a1..6022514750 100644 --- a/core/txpool/blobpool/blobpool.go +++ b/core/txpool/blobpool/blobpool.go @@ -1476,17 +1476,12 @@ func (p *BlobPool) AvailableBlobs(vhashes []common.Hash) int { // Add inserts a set of blob transactions into the pool if they pass validation (both // consensus validity and pool restrictions). func (p *BlobPool) Add(txs []*types.Transaction, sync bool) []error { - var ( - errs = make([]error, len(txs)) - adds = make([]*types.Transaction, 0, len(txs)) - ) + errs := make([]error, len(txs)) for i, tx := range txs { if errs[i] = p.ValidateTxBasics(tx); errs[i] != nil { continue } - if errs[i] = p.add(tx); errs[i] == nil { - adds = append(adds, tx.WithoutBlobTxSidecar()) - } + errs[i] = p.add(tx) } return errs } From 199ac16e07f5ac7845a3d1cb44fa85821fd0921a Mon Sep 17 00:00:00 2001 From: rjl493456442 Date: Tue, 24 Feb 2026 21:53:20 +0800 Subject: [PATCH 059/161] core/types/bal: change code change type to list (#33774) To align with the latest spec of EIP-7928: ``` # CodeChange: [block_access_index, new_code] CodeChange = [BlockAccessIndex, Bytecode] ``` --- core/types/bal/bal.go | 29 +++------ core/types/bal/bal_encoding.go | 66 ++++++++++++-------- core/types/bal/bal_encoding_rlp_generated.go | 10 +-- core/types/bal/bal_test.go | 10 +-- 4 files changed, 61 insertions(+), 54 deletions(-) diff --git a/core/types/bal/bal.go b/core/types/bal/bal.go index fca54f7681..86dc8e5426 100644 --- a/core/types/bal/bal.go +++ b/core/types/bal/bal.go @@ -24,13 +24,6 @@ import ( "github.com/holiman/uint256" ) -// CodeChange contains the runtime bytecode deployed at an address and the -// transaction index where the deployment took place. -type CodeChange struct { - TxIndex uint16 - Code []byte `json:"code,omitempty"` -} - // ConstructionAccountAccess contains post-block account state for mutations as well as // all storage keys that were read during execution. It is used when building block // access list during execution. @@ -55,9 +48,9 @@ type ConstructionAccountAccess struct { // by tx index. NonceChanges map[uint16]uint64 `json:"nonceChanges,omitempty"` - // CodeChange is only set for contract accounts which were deployed in - // the block. - CodeChange *CodeChange `json:"codeChange,omitempty"` + // CodeChange contains the post-state contract code of an account keyed + // by tx index. + CodeChange map[uint16][]byte `json:"codeChange,omitempty"` } // NewConstructionAccountAccess initializes the account access object. @@ -67,6 +60,7 @@ func NewConstructionAccountAccess() *ConstructionAccountAccess { StorageReads: make(map[common.Hash]struct{}), BalanceChanges: make(map[uint16]*uint256.Int), NonceChanges: make(map[uint16]uint64), + CodeChange: make(map[uint16][]byte), } } @@ -120,10 +114,8 @@ func (b *ConstructionBlockAccessList) CodeChange(address common.Address, txIndex if _, ok := b.Accounts[address]; !ok { b.Accounts[address] = NewConstructionAccountAccess() } - b.Accounts[address].CodeChange = &CodeChange{ - TxIndex: txIndex, - Code: bytes.Clone(code), - } + // TODO(rjl493456442) is it essential to deep-copy the code? + b.Accounts[address].CodeChange[txIndex] = bytes.Clone(code) } // NonceChange records tx post-state nonce of any contract-like accounts whose @@ -170,12 +162,11 @@ func (b *ConstructionBlockAccessList) Copy() *ConstructionBlockAccessList { aaCopy.BalanceChanges = balances aaCopy.NonceChanges = maps.Clone(aa.NonceChanges) - if aa.CodeChange != nil { - aaCopy.CodeChange = &CodeChange{ - TxIndex: aa.CodeChange.TxIndex, - Code: bytes.Clone(aa.CodeChange.Code), - } + codes := make(map[uint16][]byte, len(aa.CodeChange)) + for index, code := range aa.CodeChange { + codes[index] = bytes.Clone(code) } + aaCopy.CodeChange = codes res.Accounts[addr] = &aaCopy } return &res diff --git a/core/types/bal/bal_encoding.go b/core/types/bal/bal_encoding.go index 24dfafa083..1b1406ea32 100644 --- a/core/types/bal/bal_encoding.go +++ b/core/types/bal/bal_encoding.go @@ -119,6 +119,13 @@ func (e *encodingSlotWrites) validate() error { return errors.New("storage write tx indices not in order") } +// encodingCodeChange contains the runtime bytecode deployed at an address +// and the transaction index where the deployment took place. +type encodingCodeChange struct { + TxIndex uint16 `ssz-size:"2"` + Code []byte `ssz-max:"300000"` // TODO(rjl493456442) shall we put the limit here? The limit will be increased gradually +} + // AccountAccess is the encoding format of ConstructionAccountAccess. type AccountAccess struct { Address [20]byte `ssz-size:"20"` // 20-byte Ethereum address @@ -126,7 +133,7 @@ type AccountAccess struct { StorageReads [][32]byte `ssz-max:"300000"` // Read-only storage keys BalanceChanges []encodingBalanceChange `ssz-max:"300000"` // Balance changes ([tx_index -> post_balance]) NonceChanges []encodingAccountNonce `ssz-max:"300000"` // Nonce changes ([tx_index -> new_nonce]) - Code []CodeChange `ssz-max:"1"` // Code changes ([tx_index -> new_code]) + CodeChanges []encodingCodeChange `ssz-max:"300000"` // Code changes ([tx_index -> new_code]) } // validate converts the account accesses out of encoding format. @@ -166,9 +173,16 @@ func (e *AccountAccess) validate() error { return errors.New("nonce changes not in ascending order by tx index") } - // Convert code change - if len(e.Code) == 1 { - if len(e.Code[0].Code) > params.MaxCodeSize { + // Check the code changes are sorted in order + if !slices.IsSortedFunc(e.CodeChanges, func(a, b encodingCodeChange) int { + return cmp.Compare[uint16](a.TxIndex, b.TxIndex) + }) { + return errors.New("code changes not in ascending order by tx index") + } + for _, change := range e.CodeChanges { + // TODO(rjl493456442): This check should be fork-aware, since the limit may + // differ across forks. + if len(change.Code) > params.MaxCodeSize { return errors.New("code change contained oversized code") } } @@ -182,6 +196,8 @@ func (e *AccountAccess) Copy() AccountAccess { StorageReads: slices.Clone(e.StorageReads), BalanceChanges: slices.Clone(e.BalanceChanges), NonceChanges: slices.Clone(e.NonceChanges), + StorageWrites: make([]encodingSlotWrites, 0, len(e.StorageWrites)), + CodeChanges: make([]encodingCodeChange, 0, len(e.CodeChanges)), } for _, storageWrite := range e.StorageWrites { res.StorageWrites = append(res.StorageWrites, encodingSlotWrites{ @@ -189,13 +205,11 @@ func (e *AccountAccess) Copy() AccountAccess { Accesses: slices.Clone(storageWrite.Accesses), }) } - if len(e.Code) == 1 { - res.Code = []CodeChange{ - { - e.Code[0].TxIndex, - bytes.Clone(e.Code[0].Code), - }, - } + for _, codeChange := range e.CodeChanges { + res.CodeChanges = append(res.CodeChanges, encodingCodeChange{ + TxIndex: codeChange.TxIndex, + Code: bytes.Clone(codeChange.Code), + }) } return res } @@ -212,11 +226,11 @@ var _ rlp.Encoder = &ConstructionBlockAccessList{} func (a *ConstructionAccountAccess) toEncodingObj(addr common.Address) AccountAccess { res := AccountAccess{ Address: addr, - StorageWrites: make([]encodingSlotWrites, 0), - StorageReads: make([][32]byte, 0), - BalanceChanges: make([]encodingBalanceChange, 0), - NonceChanges: make([]encodingAccountNonce, 0), - Code: nil, + StorageWrites: make([]encodingSlotWrites, 0, len(a.StorageWrites)), + StorageReads: make([][32]byte, 0, len(a.StorageReads)), + BalanceChanges: make([]encodingBalanceChange, 0, len(a.BalanceChanges)), + NonceChanges: make([]encodingAccountNonce, 0, len(a.NonceChanges)), + CodeChanges: make([]encodingCodeChange, 0, len(a.CodeChange)), } // Convert write slots @@ -268,13 +282,13 @@ func (a *ConstructionAccountAccess) toEncodingObj(addr common.Address) AccountAc } // Convert code change - if a.CodeChange != nil { - res.Code = []CodeChange{ - { - a.CodeChange.TxIndex, - bytes.Clone(a.CodeChange.Code), - }, - } + codeIndices := slices.Collect(maps.Keys(a.CodeChange)) + slices.SortFunc(codeIndices, cmp.Compare[uint16]) + for _, idx := range codeIndices { + res.CodeChanges = append(res.CodeChanges, encodingCodeChange{ + TxIndex: idx, + Code: a.CodeChange[idx], + }) } return res } @@ -327,9 +341,9 @@ func (e *BlockAccessList) PrettyPrint() string { printWithIndent(2, fmt.Sprintf("%d: %d", change.TxIdx, change.Nonce)) } - if len(accountDiff.Code) > 0 { - printWithIndent(1, "code:") - printWithIndent(2, fmt.Sprintf("%d: %x", accountDiff.Code[0].TxIndex, accountDiff.Code[0].Code)) + printWithIndent(1, "code changes:") + for _, change := range accountDiff.CodeChanges { + printWithIndent(2, fmt.Sprintf("%d: %x", change.TxIndex, change.Code)) } } return res.String() diff --git a/core/types/bal/bal_encoding_rlp_generated.go b/core/types/bal/bal_encoding_rlp_generated.go index 0d52395329..640035e30e 100644 --- a/core/types/bal/bal_encoding_rlp_generated.go +++ b/core/types/bal/bal_encoding_rlp_generated.go @@ -49,7 +49,7 @@ func (obj *BlockAccessList) EncodeRLP(_w io.Writer) error { } w.ListEnd(_tmp15) _tmp18 := w.List() - for _, _tmp19 := range _tmp2.Code { + for _, _tmp19 := range _tmp2.CodeChanges { _tmp20 := w.List() w.WriteUint64(uint64(_tmp19.TxIndex)) w.WriteBytes(_tmp19.Code) @@ -228,13 +228,13 @@ func (obj *BlockAccessList) DecodeRLP(dec *rlp.Stream) error { return err } _tmp2.NonceChanges = _tmp17 - // Code: - var _tmp21 []CodeChange + // CodeChanges: + var _tmp21 []encodingCodeChange if _, err := dec.List(); err != nil { return err } for dec.MoreDataInList() { - var _tmp22 CodeChange + var _tmp22 encodingCodeChange { if _, err := dec.List(); err != nil { return err @@ -260,7 +260,7 @@ func (obj *BlockAccessList) DecodeRLP(dec *rlp.Stream) error { if err := dec.ListEnd(); err != nil { return err } - _tmp2.Code = _tmp21 + _tmp2.CodeChanges = _tmp21 if err := dec.ListEnd(); err != nil { return err } diff --git a/core/types/bal/bal_test.go b/core/types/bal/bal_test.go index 29414e414e..52c0de825e 100644 --- a/core/types/bal/bal_test.go +++ b/core/types/bal/bal_test.go @@ -60,9 +60,8 @@ func makeTestConstructionBAL() *ConstructionBlockAccessList { 1: 2, 2: 6, }, - CodeChange: &CodeChange{ - TxIndex: 0, - Code: common.Hex2Bytes("deadbeef"), + CodeChange: map[uint16][]byte{ + 0: common.Hex2Bytes("deadbeef"), }, }, common.BytesToAddress([]byte{0xff, 0xff, 0xff}): { @@ -85,6 +84,9 @@ func makeTestConstructionBAL() *ConstructionBlockAccessList { NonceChanges: map[uint16]uint64{ 1: 2, }, + CodeChange: map[uint16][]byte{ + 0: common.Hex2Bytes("deadbeef"), + }, }, }, } @@ -179,7 +181,7 @@ func makeTestAccountAccess(sort bool) AccountAccess { StorageReads: storageReads, BalanceChanges: balances, NonceChanges: nonces, - Code: []CodeChange{ + CodeChanges: []encodingCodeChange{ { TxIndex: 100, Code: testrand.Bytes(256), From cbf3d8fed2fbe1fa07e9548a42a4883d5e276409 Mon Sep 17 00:00:00 2001 From: rjl493456442 Date: Tue, 24 Feb 2026 21:55:10 +0800 Subject: [PATCH 060/161] core/vm: touch precompile object with Amsterdam enabled (#33742) https://eips.ethereum.org/EIPS/eip-7928 spec: > Precompiled contracts: Precompiles MUST be included when accessed. If a precompile receives value, it is recorded with a balance change. Otherwise, it is included with empty change lists. The precompiled contracts are not explicitly touched when they are invoked since Amsterdam fork. --- core/vm/contracts.go | 8 +++++++- core/vm/contracts_fuzz_test.go | 2 +- core/vm/contracts_test.go | 8 ++++---- core/vm/evm.go | 24 ++++++++++++++++++++---- 4 files changed, 32 insertions(+), 10 deletions(-) diff --git a/core/vm/contracts.go b/core/vm/contracts.go index 867746acc8..010f477337 100644 --- a/core/vm/contracts.go +++ b/core/vm/contracts.go @@ -262,7 +262,7 @@ func ActivePrecompiles(rules params.Rules) []common.Address { // - the returned bytes, // - the _remaining_ gas, // - any error that occurred -func RunPrecompiledContract(p PrecompiledContract, input []byte, suppliedGas uint64, logger *tracing.Hooks) (ret []byte, remainingGas uint64, err error) { +func RunPrecompiledContract(stateDB StateDB, p PrecompiledContract, address common.Address, input []byte, suppliedGas uint64, logger *tracing.Hooks) (ret []byte, remainingGas uint64, err error) { gasCost := p.RequiredGas(input) if suppliedGas < gasCost { return nil, 0, ErrOutOfGas @@ -271,6 +271,12 @@ func RunPrecompiledContract(p PrecompiledContract, input []byte, suppliedGas uin logger.OnGasChange(suppliedGas, suppliedGas-gasCost, tracing.GasChangeCallPrecompiledContract) } suppliedGas -= gasCost + + // Touch the precompile for block-level accessList recording once Amsterdam + // fork is activated. + if stateDB != nil { + stateDB.Exist(address) + } output, err := p.Run(input) return output, suppliedGas, err } diff --git a/core/vm/contracts_fuzz_test.go b/core/vm/contracts_fuzz_test.go index 1e5cc80074..34ed1d87fe 100644 --- a/core/vm/contracts_fuzz_test.go +++ b/core/vm/contracts_fuzz_test.go @@ -36,7 +36,7 @@ func FuzzPrecompiledContracts(f *testing.F) { return } inWant := string(input) - RunPrecompiledContract(p, input, gas, nil) + RunPrecompiledContract(nil, p, a, input, gas, nil) if inHave := string(input); inWant != inHave { t.Errorf("Precompiled %v modified input data", a) } diff --git a/core/vm/contracts_test.go b/core/vm/contracts_test.go index 51bd7101ff..b647dcc62b 100644 --- a/core/vm/contracts_test.go +++ b/core/vm/contracts_test.go @@ -99,7 +99,7 @@ func testPrecompiled(addr string, test precompiledTest, t *testing.T) { in := common.Hex2Bytes(test.Input) gas := p.RequiredGas(in) t.Run(fmt.Sprintf("%s-Gas=%d", test.Name, gas), func(t *testing.T) { - if res, _, err := RunPrecompiledContract(p, in, gas, nil); err != nil { + if res, _, err := RunPrecompiledContract(nil, p, common.HexToAddress(addr), in, gas, nil); err != nil { t.Error(err) } else if common.Bytes2Hex(res) != test.Expected { t.Errorf("Expected %v, got %v", test.Expected, common.Bytes2Hex(res)) @@ -121,7 +121,7 @@ func testPrecompiledOOG(addr string, test precompiledTest, t *testing.T) { gas := test.Gas - 1 t.Run(fmt.Sprintf("%s-Gas=%d", test.Name, gas), func(t *testing.T) { - _, _, err := RunPrecompiledContract(p, in, gas, nil) + _, _, err := RunPrecompiledContract(nil, p, common.HexToAddress(addr), in, gas, nil) if err.Error() != "out of gas" { t.Errorf("Expected error [out of gas], got [%v]", err) } @@ -138,7 +138,7 @@ func testPrecompiledFailure(addr string, test precompiledFailureTest, t *testing in := common.Hex2Bytes(test.Input) gas := p.RequiredGas(in) t.Run(test.Name, func(t *testing.T) { - _, _, err := RunPrecompiledContract(p, in, gas, nil) + _, _, err := RunPrecompiledContract(nil, p, common.HexToAddress(addr), in, gas, nil) if err.Error() != test.ExpectedError { t.Errorf("Expected error [%v], got [%v]", test.ExpectedError, err) } @@ -169,7 +169,7 @@ func benchmarkPrecompiled(addr string, test precompiledTest, bench *testing.B) { start := time.Now() for bench.Loop() { copy(data, in) - res, _, err = RunPrecompiledContract(p, data, reqGas, nil) + res, _, err = RunPrecompiledContract(nil, p, common.HexToAddress(addr), data, reqGas, nil) } elapsed := uint64(time.Since(start)) if elapsed < 1 { diff --git a/core/vm/evm.go b/core/vm/evm.go index 503e25d427..7a31ab1126 100644 --- a/core/vm/evm.go +++ b/core/vm/evm.go @@ -283,7 +283,11 @@ func (evm *EVM) Call(caller common.Address, addr common.Address, input []byte, g evm.Context.Transfer(evm.StateDB, caller, addr, value) } if isPrecompile { - ret, gas, err = RunPrecompiledContract(p, input, gas, evm.Config.Tracer) + var stateDB StateDB + if evm.chainRules.IsAmsterdam { + stateDB = evm.StateDB + } + ret, gas, err = RunPrecompiledContract(stateDB, p, addr, input, gas, evm.Config.Tracer) } else { // Initialise a new contract and set the code that is to be used by the EVM. code := evm.resolveCode(addr) @@ -346,7 +350,11 @@ func (evm *EVM) CallCode(caller common.Address, addr common.Address, input []byt // It is allowed to call precompiles, even via delegatecall if p, isPrecompile := evm.precompile(addr); isPrecompile { - ret, gas, err = RunPrecompiledContract(p, input, gas, evm.Config.Tracer) + var stateDB StateDB + if evm.chainRules.IsAmsterdam { + stateDB = evm.StateDB + } + ret, gas, err = RunPrecompiledContract(stateDB, p, addr, input, gas, evm.Config.Tracer) } else { // Initialise a new contract and set the code that is to be used by the EVM. // The contract is a scoped environment for this execution context only. @@ -389,7 +397,11 @@ func (evm *EVM) DelegateCall(originCaller common.Address, caller common.Address, // It is allowed to call precompiles, even via delegatecall if p, isPrecompile := evm.precompile(addr); isPrecompile { - ret, gas, err = RunPrecompiledContract(p, input, gas, evm.Config.Tracer) + var stateDB StateDB + if evm.chainRules.IsAmsterdam { + stateDB = evm.StateDB + } + ret, gas, err = RunPrecompiledContract(stateDB, p, addr, input, gas, evm.Config.Tracer) } else { // Initialise a new contract and make initialise the delegate values // @@ -441,7 +453,11 @@ func (evm *EVM) StaticCall(caller common.Address, addr common.Address, input []b evm.StateDB.AddBalance(addr, new(uint256.Int), tracing.BalanceChangeTouchAccount) if p, isPrecompile := evm.precompile(addr); isPrecompile { - ret, gas, err = RunPrecompiledContract(p, input, gas, evm.Config.Tracer) + var stateDB StateDB + if evm.chainRules.IsAmsterdam { + stateDB = evm.StateDB + } + ret, gas, err = RunPrecompiledContract(stateDB, p, addr, input, gas, evm.Config.Tracer) } else { // Initialise a new contract and set the code that is to be used by the EVM. // The contract is a scoped environment for this execution context only. From e636e4e3c1b07b6afb3dee0c1fd2126873c9204c Mon Sep 17 00:00:00 2001 From: rjl493456442 Date: Tue, 24 Feb 2026 21:57:50 +0800 Subject: [PATCH 061/161] core/state: track slot reads for empty storage (#33743) From the https://eips.ethereum.org/EIPS/eip-7928 > SELFDESTRUCT (in-transaction): Accounts destroyed within a transaction MUST be included in AccountChanges without nonce or code changes. However, if the account had a positive balance pre-transaction, the balance change to zero MUST be recorded. Storage keys within the self-destructed contracts that were modified or read MUST be included as a storage_reads entry. The storage read against the empty contract (zero storage) should also be recorded in the BAL's readlist. --- core/state/state_object.go | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/core/state/state_object.go b/core/state/state_object.go index eecb72ce5d..f7109bddee 100644 --- a/core/state/state_object.go +++ b/core/state/state_object.go @@ -195,6 +195,19 @@ func (s *stateObject) GetCommittedState(key common.Hash) common.Hash { // have been handles via pendingStorage above. // 2) we don't have new values, and can deliver empty response back if _, destructed := s.db.stateObjectsDestruct[s.address]; destructed { + // Invoke the reader regardless and discard the returned value. + // The returned value may not be empty, as it could belong to a + // self-destructed contract. + // + // The read operation is still essential for correctly building + // the block-level access list. + // + // TODO(rjl493456442) the reader interface can be extended with + // Touch, recording the read access without the actual disk load. + _, err := s.db.reader.Storage(s.address, key) + if err != nil { + s.db.setError(err) + } s.originStorage[key] = common.Hash{} // track the empty slot as origin value return common.Hash{} } From 9ecb6c4ae644dfd07e55efdb2644a28125dd34dd Mon Sep 17 00:00:00 2001 From: cui Date: Tue, 24 Feb 2026 22:40:01 +0800 Subject: [PATCH 062/161] core: reduce alloc (#33576) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit inside tx.GasPrice()/GasFeeCap()/GasTipCap() already new a big.Int. bench result: ``` goos: darwin goarch: arm64 pkg: github.com/ethereum/go-ethereum/core cpu: Apple M4 │ old.txt │ new.txt │ │ sec/op │ sec/op vs base │ TransactionToMessage-10 240.1n ± 7% 175.1n ± 7% -27.09% (p=0.000 n=10) │ old.txt │ new.txt │ │ B/op │ B/op vs base │ TransactionToMessage-10 544.0 ± 0% 424.0 ± 0% -22.06% (p=0.000 n=10) │ old.txt │ new.txt │ │ allocs/op │ allocs/op vs base │ TransactionToMessage-10 17.00 ± 0% 11.00 ± 0% -35.29% (p=0.000 n=10) ``` benchmark code: ``` // Copyright 2025 The go-ethereum Authors // This file is part of the go-ethereum library. // // The go-ethereum library is free software: you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // The go-ethereum library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . package core import ( "math/big" "testing" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/params" ) // BenchmarkTransactionToMessage benchmarks the TransactionToMessage function. func BenchmarkTransactionToMessage(b *testing.B) { key, _ := crypto.GenerateKey() signer := types.LatestSigner(params.TestChainConfig) to := common.HexToAddress("0x000000000000000000000000000000000000dead") // Create a DynamicFeeTx transaction txdata := &types.DynamicFeeTx{ ChainID: big.NewInt(1), Nonce: 42, GasTipCap: big.NewInt(1000000000), // 1 gwei GasFeeCap: big.NewInt(2000000000), // 2 gwei Gas: 21000, To: &to, Value: big.NewInt(1000000000000000000), // 1 ether Data: []byte{0x12, 0x34, 0x56, 0x78}, AccessList: types.AccessList{ types.AccessTuple{ Address: common.HexToAddress("0x0000000000000000000000000000000000000001"), StorageKeys: []common.Hash{ common.HexToHash("0x0000000000000000000000000000000000000000000000000000000000000001"), }, }, }, } tx, _ := types.SignNewTx(key, signer, txdata) baseFee := big.NewInt(1500000000) // 1.5 gwei b.ResetTimer() b.ReportAllocs() for i := 0; i < b.N; i++ { _, err := TransactionToMessage(tx, signer, baseFee) if err != nil { b.Fatal(err) } } } l ``` --- core/state_transition.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/state_transition.go b/core/state_transition.go index bf5ac07636..62474b5f5b 100644 --- a/core/state_transition.go +++ b/core/state_transition.go @@ -177,9 +177,9 @@ func TransactionToMessage(tx *types.Transaction, s types.Signer, baseFee *big.In msg := &Message{ Nonce: tx.Nonce(), GasLimit: tx.Gas(), - GasPrice: new(big.Int).Set(tx.GasPrice()), - GasFeeCap: new(big.Int).Set(tx.GasFeeCap()), - GasTipCap: new(big.Int).Set(tx.GasTipCap()), + GasPrice: tx.GasPrice(), + GasFeeCap: tx.GasFeeCap(), + GasTipCap: tx.GasTipCap(), To: tx.To(), Value: tx.Value(), Data: tx.Data(), From 8450e40798bb1069c02e7db0926b46b211b0fbc9 Mon Sep 17 00:00:00 2001 From: Fynn Date: Wed, 25 Feb 2026 01:56:00 +0800 Subject: [PATCH 063/161] cmd/geth: add inspect trie tool to analysis trie storage (#28892) This pr adds a tool names `inpsect-trie`, aimed to analyze the mpt and its node storage more efficiently. ## Example ./geth db inspect-trie --datadir server/data-seed/ latest 4000 ## Result - MPT shape - Account Trie - Top N Storage Trie ``` +-------+-------+--------------+-------------+--------------+ | - | LEVEL | SHORTNODECNT | FULLNODECNT | VALUENODECNT | +-------+-------+--------------+-------------+--------------+ | - | 0 | 0 | 1 | 0 | | - | 1 | 0 | 16 | 0 | | - | 2 | 76 | 32 | 74 | | - | 3 | 66 | 1 | 66 | | - | 4 | 2 | 0 | 2 | | Total | 144 | 50 | 142 | +-------+-------+--------------+-------------+--------------+ AccountTrie +-------+-------+--------------+-------------+--------------+ | - | LEVEL | SHORTNODECNT | FULLNODECNT | VALUENODECNT | +-------+-------+--------------+-------------+--------------+ | - | 0 | 0 | 1 | 0 | | - | 1 | 0 | 16 | 0 | | - | 2 | 108 | 84 | 104 | | - | 3 | 195 | 5 | 195 | | - | 4 | 10 | 0 | 10 | | Total | 313 | 106 | 309 | +-------+-------+--------------+-------------+--------------+ ContractTrie-0xc874e65ccffb133d9db4ff637e62532ef6ecef3223845d02f522c55786782911 +-------+-------+--------------+-------------+--------------+ | - | LEVEL | SHORTNODECNT | FULLNODECNT | VALUENODECNT | +-------+-------+--------------+-------------+--------------+ | - | 0 | 0 | 1 | 0 | | - | 1 | 0 | 16 | 0 | | - | 2 | 57 | 14 | 56 | | - | 3 | 33 | 0 | 33 | | Total | 90 | 31 | 89 | +-------+-------+--------------+-------------+--------------+ ContractTrie-0x1d7dcb6a0ce5227c5379fc5b0e004561d7833b063355f69bfea3178f08fbaab4 +-------+-------+--------------+-------------+--------------+ | - | LEVEL | SHORTNODECNT | FULLNODECNT | VALUENODECNT | +-------+-------+--------------+-------------+--------------+ | - | 0 | 0 | 1 | 0 | | - | 1 | 5 | 8 | 5 | | - | 2 | 16 | 1 | 16 | | - | 3 | 2 | 0 | 2 | | Total | 23 | 10 | 23 | +-------+-------+--------------+-------------+--------------+ ContractTrie-0xaa8a4783ebbb3bec45d3e804b3c59bfd486edfa39cbeda1d42bf86c08a0ebc0f +-------+-------+--------------+-------------+--------------+ | - | LEVEL | SHORTNODECNT | FULLNODECNT | VALUENODECNT | +-------+-------+--------------+-------------+--------------+ | - | 0 | 0 | 1 | 0 | | - | 1 | 9 | 3 | 9 | | - | 2 | 7 | 1 | 7 | | - | 3 | 2 | 0 | 2 | | Total | 18 | 5 | 18 | +-------+-------+--------------+-------------+--------------+ ContractTrie-0x9d2804d0562391d7cfcfaf0013f0352e176a94403a58577ebf82168a21514441 +-------+-------+--------------+-------------+--------------+ | - | LEVEL | SHORTNODECNT | FULLNODECNT | VALUENODECNT | +-------+-------+--------------+-------------+--------------+ | - | 0 | 0 | 1 | 0 | | - | 1 | 6 | 4 | 6 | | - | 2 | 8 | 0 | 8 | | Total | 14 | 5 | 14 | +-------+-------+--------------+-------------+--------------+ ContractTrie-0x17e3eb95d0e6e92b42c0b3e95c6e75080c9fcd83e706344712e9587375de96e1 +-------+-------+--------------+-------------+--------------+ | - | LEVEL | SHORTNODECNT | FULLNODECNT | VALUENODECNT | +-------+-------+--------------+-------------+--------------+ | - | 0 | 0 | 1 | 0 | | - | 1 | 5 | 3 | 5 | | - | 2 | 7 | 0 | 7 | | Total | 12 | 4 | 12 | +-------+-------+--------------+-------------+--------------+ ContractTrie-0xc017ca90c8aa37693c38f80436bb15bde46d7b30a503aa808cb7814127468a44 Contract Trie, total trie num: 142, ShortNodeCnt: 620, FullNodeCnt: 204, ValueNodeCnt: 615 ``` --------- Co-authored-by: lightclient Co-authored-by: MariusVanDerWijden --- cmd/geth/dbcmd.go | 120 ++- cmd/utils/flags.go | 10 + core/rawdb/database.go | 3 +- core/stateless/stats.go | 68 +- core/stateless/stats_test.go | 108 +- .../tablewriter}/database_tablewriter.go | 8 +- .../tablewriter}/database_tablewriter_test.go | 12 +- trie/inspect.go | 930 ++++++++++++++++++ trie/inspect_test.go | 256 +++++ trie/levelstats.go | 123 +++ trie/levelstats_test.go | 37 + 11 files changed, 1598 insertions(+), 77 deletions(-) rename {core/rawdb => internal/tablewriter}/database_tablewriter.go (97%) rename {core/rawdb => internal/tablewriter}/database_tablewriter_test.go (94%) create mode 100644 trie/inspect.go create mode 100644 trie/inspect_test.go create mode 100644 trie/levelstats.go create mode 100644 trie/levelstats_test.go diff --git a/cmd/geth/dbcmd.go b/cmd/geth/dbcmd.go index fb688793e3..10b0c514ad 100644 --- a/cmd/geth/dbcmd.go +++ b/cmd/geth/dbcmd.go @@ -19,6 +19,7 @@ package main import ( "bytes" "fmt" + "math" "os" "os/signal" "path/filepath" @@ -37,6 +38,7 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/internal/tablewriter" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/trie" @@ -53,6 +55,23 @@ var ( Name: "remove.chain", Usage: "If set, selects the state data for removal", } + inspectTrieTopFlag = &cli.IntFlag{ + Name: "top", + Usage: "Print the top N results per ranking category", + Value: 10, + } + inspectTrieDumpPathFlag = &cli.StringFlag{ + Name: "dump-path", + Usage: "Path for the trie statistics dump file", + } + inspectTrieSummarizeFlag = &cli.StringFlag{ + Name: "summarize", + Usage: "Summarize an existing trie dump file (skip trie traversal)", + } + inspectTrieContractFlag = &cli.StringFlag{ + Name: "contract", + Usage: "Inspect only the storage of the given contract address (skips full account trie walk)", + } removedbCommand = &cli.Command{ Action: removeDB, @@ -74,6 +93,7 @@ Remove blockchain and state databases`, dbCompactCmd, dbGetCmd, dbDeleteCmd, + dbInspectTrieCmd, dbPutCmd, dbGetSlotsCmd, dbDumpFreezerIndex, @@ -92,6 +112,22 @@ Remove blockchain and state databases`, Usage: "Inspect the storage size for each type of data in the database", Description: `This commands iterates the entire database. If the optional 'prefix' and 'start' arguments are provided, then the iteration is limited to the given subset of data.`, } + dbInspectTrieCmd = &cli.Command{ + Action: inspectTrie, + Name: "inspect-trie", + ArgsUsage: "", + Flags: slices.Concat([]cli.Flag{ + utils.ExcludeStorageFlag, + inspectTrieTopFlag, + utils.OutputFileFlag, + inspectTrieDumpPathFlag, + inspectTrieSummarizeFlag, + inspectTrieContractFlag, + }, utils.NetworkFlags, utils.DatabaseFlags), + Usage: "Print detailed trie information about the structure of account trie and storage tries.", + Description: `This commands iterates the entrie trie-backed state. If the 'blocknum' is not specified, +the latest block number will be used by default.`, + } dbCheckStateContentCmd = &cli.Command{ Action: checkStateContent, Name: "check-state-content", @@ -385,6 +421,88 @@ func checkStateContent(ctx *cli.Context) error { return nil } +func inspectTrie(ctx *cli.Context) error { + topN := ctx.Int(inspectTrieTopFlag.Name) + if topN <= 0 { + return fmt.Errorf("invalid --%s value %d (must be > 0)", inspectTrieTopFlag.Name, topN) + } + config := &trie.InspectConfig{ + NoStorage: ctx.Bool(utils.ExcludeStorageFlag.Name), + TopN: topN, + Path: ctx.String(utils.OutputFileFlag.Name), + } + + if summarizePath := ctx.String(inspectTrieSummarizeFlag.Name); summarizePath != "" { + if ctx.NArg() > 0 { + return fmt.Errorf("block number argument is not supported with --%s", inspectTrieSummarizeFlag.Name) + } + config.DumpPath = summarizePath + log.Info("Summarizing trie dump", "path", summarizePath, "top", topN) + return trie.Summarize(summarizePath, config) + } + if ctx.NArg() > 1 { + return fmt.Errorf("excessive number of arguments: %v", ctx.Command.ArgsUsage) + } + + stack, _ := makeConfigNode(ctx) + db := utils.MakeChainDatabase(ctx, stack, false) + defer stack.Close() + defer db.Close() + + var ( + trieRoot common.Hash + hash common.Hash + number uint64 + ) + switch { + case ctx.NArg() == 0 || ctx.Args().Get(0) == "latest": + head := rawdb.ReadHeadHeaderHash(db) + n, ok := rawdb.ReadHeaderNumber(db, head) + if !ok { + return fmt.Errorf("could not load head block hash") + } + number = n + case ctx.Args().Get(0) == "snapshot": + trieRoot = rawdb.ReadSnapshotRoot(db) + number = math.MaxUint64 + default: + var err error + number, err = strconv.ParseUint(ctx.Args().Get(0), 10, 64) + if err != nil { + return fmt.Errorf("failed to parse blocknum, Args[0]: %v, err: %v", ctx.Args().Get(0), err) + } + } + + if number != math.MaxUint64 { + hash = rawdb.ReadCanonicalHash(db, number) + if hash == (common.Hash{}) { + return fmt.Errorf("canonical hash for block %d not found", number) + } + blockHeader := rawdb.ReadHeader(db, hash, number) + trieRoot = blockHeader.Root + } + if trieRoot == (common.Hash{}) { + log.Error("Empty root hash") + } + + config.DumpPath = ctx.String(inspectTrieDumpPathFlag.Name) + if config.DumpPath == "" { + config.DumpPath = stack.ResolvePath("trie-dump.bin") + } + + triedb := utils.MakeTrieDatabase(ctx, stack, db, false, true, false) + defer triedb.Close() + + if contractAddr := ctx.String(inspectTrieContractFlag.Name); contractAddr != "" { + address := common.HexToAddress(contractAddr) + log.Info("Inspecting contract", "address", address, "root", trieRoot, "block", number) + return trie.InspectContract(triedb, db, trieRoot, address) + } + + log.Info("Inspecting trie", "root", trieRoot, "block", number, "dump", config.DumpPath, "top", topN) + return trie.Inspect(triedb, trieRoot, config) +} + func showDBStats(db ethdb.KeyValueStater) { stats, err := db.Stat() if err != nil { @@ -759,7 +877,7 @@ func showMetaData(ctx *cli.Context) error { data = append(data, []string{"headHeader.Root", fmt.Sprintf("%v", h.Root)}) data = append(data, []string{"headHeader.Number", fmt.Sprintf("%d (%#x)", h.Number, h.Number)}) } - table := rawdb.NewTableWriter(os.Stdout) + table := tablewriter.NewWriter(os.Stdout) table.SetHeader([]string{"Field", "Value"}) table.AppendBulk(data) table.Render() diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index eee75d886a..e114eb2cd4 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -218,6 +218,16 @@ var ( Usage: "Max number of elements (0 = no limit)", Value: 0, } + TopFlag = &cli.IntFlag{ + Name: "top", + Usage: "Print the top N results", + Value: 5, + } + OutputFileFlag = &cli.StringFlag{ + Name: "output", + Usage: "Writes the result in json to the output", + Value: "", + } SnapshotFlag = &cli.BoolFlag{ Name: "snapshot", diff --git a/core/rawdb/database.go b/core/rawdb/database.go index a5335ea56b..576e32b961 100644 --- a/core/rawdb/database.go +++ b/core/rawdb/database.go @@ -35,6 +35,7 @@ import ( "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/ethdb/memorydb" + "github.com/ethereum/go-ethereum/internal/tablewriter" "github.com/ethereum/go-ethereum/log" "golang.org/x/sync/errgroup" ) @@ -663,7 +664,7 @@ func InspectDatabase(db ethdb.Database, keyPrefix, keyStart []byte) error { total.Add(uint64(ancient.size())) } - table := NewTableWriter(os.Stdout) + table := tablewriter.NewWriter(os.Stdout) table.SetHeader([]string{"Database", "Category", "Size", "Items"}) table.SetFooter([]string{"", "Total", common.StorageSize(total.Load()).String(), fmt.Sprintf("%d", count.Load())}) table.AppendBulk(stats) diff --git a/core/stateless/stats.go b/core/stateless/stats.go index 73ce031bff..7f4473a67c 100644 --- a/core/stateless/stats.go +++ b/core/stateless/stats.go @@ -27,6 +27,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/metrics" + "github.com/ethereum/go-ethereum/trie" ) var accountTrieLeavesAtDepth [16]*metrics.Counter @@ -41,59 +42,68 @@ func init() { // WitnessStats aggregates statistics for account and storage trie accesses. type WitnessStats struct { - accountTrieLeaves [16]int64 - storageTrieLeaves [16]int64 + accountTrie *trie.LevelStats + storageTrie *trie.LevelStats } // NewWitnessStats creates a new WitnessStats collector. func NewWitnessStats() *WitnessStats { - return &WitnessStats{} + return &WitnessStats{ + accountTrie: trie.NewLevelStats(), + storageTrie: trie.NewLevelStats(), + } +} + +func (s *WitnessStats) init() { + if s.accountTrie == nil { + s.accountTrie = trie.NewLevelStats() + } + if s.storageTrie == nil { + s.storageTrie = trie.NewLevelStats() + } } // Add records trie access depths from the given node paths. // If `owner` is the zero hash, accesses are attributed to the account trie; // otherwise, they are attributed to the storage trie of that account. func (s *WitnessStats) Add(nodes map[string][]byte, owner common.Hash) { - // Extract paths from the nodes map + s.init() + + // Extract paths from the nodes map. paths := slices.Collect(maps.Keys(nodes)) sort.Strings(paths) + ownerStat := s.accountTrie + if owner != (common.Hash{}) { + ownerStat = s.storageTrie + } + for i, path := range paths { // If current path is a prefix of the next path, it's not a leaf. // The last path is always a leaf. if i == len(paths)-1 || !strings.HasPrefix(paths[i+1], paths[i]) { - depth := len(path) - if owner == (common.Hash{}) { - if depth >= len(s.accountTrieLeaves) { - depth = len(s.accountTrieLeaves) - 1 - } - s.accountTrieLeaves[depth] += 1 - } else { - if depth >= len(s.storageTrieLeaves) { - depth = len(s.storageTrieLeaves) - 1 - } - s.storageTrieLeaves[depth] += 1 - } + ownerStat.AddLeaf(len(path)) } } } // ReportMetrics reports the collected statistics to the global metrics registry. func (s *WitnessStats) ReportMetrics(blockNumber uint64) { - // Encode the metrics as JSON for easier consumption - accountLeavesJson, _ := json.Marshal(s.accountTrieLeaves) - storageLeavesJson, _ := json.Marshal(s.storageTrieLeaves) + s.init() - // Log account trie depth statistics - log.Info("Account trie depth stats", - "block", blockNumber, - "leavesAtDepth", string(accountLeavesJson)) - log.Info("Storage trie depth stats", - "block", blockNumber, - "leavesAtDepth", string(storageLeavesJson)) + accountTrieLeaves := s.accountTrie.LeafDepths() + storageTrieLeaves := s.storageTrie.LeafDepths() - for i := 0; i < 16; i++ { - accountTrieLeavesAtDepth[i].Inc(s.accountTrieLeaves[i]) - storageTrieLeavesAtDepth[i].Inc(s.storageTrieLeaves[i]) + // Encode the metrics as JSON for easier consumption. + accountLeavesJSON, _ := json.Marshal(accountTrieLeaves) + storageLeavesJSON, _ := json.Marshal(storageTrieLeaves) + + // Log account trie depth statistics. + log.Info("Account trie depth stats", "block", blockNumber, "leavesAtDepth", string(accountLeavesJSON)) + log.Info("Storage trie depth stats", "block", blockNumber, "leavesAtDepth", string(storageLeavesJSON)) + + for i := 0; i < len(accountTrieLeavesAtDepth); i++ { + accountTrieLeavesAtDepth[i].Inc(accountTrieLeaves[i]) + storageTrieLeavesAtDepth[i].Inc(storageTrieLeaves[i]) } } diff --git a/core/stateless/stats_test.go b/core/stateless/stats_test.go index e77084df5d..6dc1fa0844 100644 --- a/core/stateless/stats_test.go +++ b/core/stateless/stats_test.go @@ -17,18 +17,27 @@ package stateless import ( + "strings" "testing" "github.com/ethereum/go-ethereum/common" ) +func expectedLeaves(counts map[int]int64) [16]int64 { + var leaves [16]int64 + for depth, count := range counts { + leaves[depth] = count + } + return leaves +} + func TestWitnessStatsAdd(t *testing.T) { tests := []struct { name string nodes map[string][]byte owner common.Hash - expectedAccountLeaves map[int64]int64 - expectedStorageLeaves map[int64]int64 + expectedAccountLeaves map[int]int64 + expectedStorageLeaves map[int]int64 }{ { name: "empty nodes", @@ -41,7 +50,7 @@ func TestWitnessStatsAdd(t *testing.T) { "": []byte("data"), }, owner: common.Hash{}, - expectedAccountLeaves: map[int64]int64{0: 1}, + expectedAccountLeaves: map[int]int64{0: 1}, }, { name: "single account trie leaf", @@ -49,7 +58,7 @@ func TestWitnessStatsAdd(t *testing.T) { "abc": []byte("data"), }, owner: common.Hash{}, - expectedAccountLeaves: map[int64]int64{3: 1}, + expectedAccountLeaves: map[int]int64{3: 1}, }, { name: "account trie with internal nodes", @@ -59,7 +68,7 @@ func TestWitnessStatsAdd(t *testing.T) { "abc": []byte("data3"), }, owner: common.Hash{}, - expectedAccountLeaves: map[int64]int64{3: 1}, // Only "abc" is a leaf + expectedAccountLeaves: map[int]int64{3: 1}, // Only "abc" is a leaf }, { name: "multiple account trie branches", @@ -72,7 +81,7 @@ func TestWitnessStatsAdd(t *testing.T) { "bcd": []byte("data6"), }, owner: common.Hash{}, - expectedAccountLeaves: map[int64]int64{3: 2}, // "abc" (3) + "bcd" (3) + expectedAccountLeaves: map[int]int64{3: 2}, // "abc" (3) + "bcd" (3) }, { name: "siblings are all leaves", @@ -82,7 +91,7 @@ func TestWitnessStatsAdd(t *testing.T) { "ac": []byte("data3"), }, owner: common.Hash{}, - expectedAccountLeaves: map[int64]int64{2: 3}, + expectedAccountLeaves: map[int]int64{2: 3}, }, { name: "storage trie leaves", @@ -93,7 +102,7 @@ func TestWitnessStatsAdd(t *testing.T) { "124": []byte("data4"), }, owner: common.HexToHash("0x1234"), - expectedStorageLeaves: map[int64]int64{3: 2}, // "123" (3) + "124" (3) + expectedStorageLeaves: map[int]int64{3: 2}, // "123" (3) + "124" (3) }, { name: "complex trie structure", @@ -109,7 +118,7 @@ func TestWitnessStatsAdd(t *testing.T) { "3": []byte("data9"), }, owner: common.Hash{}, - expectedAccountLeaves: map[int64]int64{1: 1, 3: 4}, // "123"(3) + "124"(3) + "234"(3) + "235"(3) + "3"(1) + expectedAccountLeaves: map[int]int64{1: 1, 3: 4}, // "123"(3) + "124"(3) + "234"(3) + "235"(3) + "3"(1) }, } @@ -118,32 +127,59 @@ func TestWitnessStatsAdd(t *testing.T) { stats := NewWitnessStats() stats.Add(tt.nodes, tt.owner) - var expectedAccountTrieLeaves [16]int64 - for depth, count := range tt.expectedAccountLeaves { - expectedAccountTrieLeaves[depth] = count + if got, want := stats.accountTrie.LeafDepths(), expectedLeaves(tt.expectedAccountLeaves); got != want { + t.Errorf("account trie leaves = %v, want %v", got, want) } - var expectedStorageTrieLeaves [16]int64 - for depth, count := range tt.expectedStorageLeaves { - expectedStorageTrieLeaves[depth] = count - } - - // Check account trie depth - if stats.accountTrieLeaves != expectedAccountTrieLeaves { - t.Errorf("Account trie total depth = %v, want %v", stats.accountTrieLeaves, expectedAccountTrieLeaves) - } - - // Check storage trie depth - if stats.storageTrieLeaves != expectedStorageTrieLeaves { - t.Errorf("Storage trie total depth = %v, want %v", stats.storageTrieLeaves, expectedStorageTrieLeaves) + if got, want := stats.storageTrie.LeafDepths(), expectedLeaves(tt.expectedStorageLeaves); got != want { + t.Errorf("storage trie leaves = %v, want %v", got, want) } }) } } +func TestWitnessStatsStorageTrieAggregation(t *testing.T) { + stats := NewWitnessStats() + ownerA := common.HexToHash("0xa") + ownerB := common.HexToHash("0xb") + + stats.Add(map[string][]byte{ + "a": []byte("data1"), + "ab": []byte("data2"), + "abc": []byte("data3"), + }, ownerA) + stats.Add(map[string][]byte{ + "xy": []byte("data4"), + }, ownerA) + stats.Add(map[string][]byte{ + "1": []byte("data5"), + "12": []byte("data6"), + "123": []byte("data7"), + "124": []byte("data8"), + }, ownerB) + + if got, want := stats.storageTrie.LeafDepths(), expectedLeaves(map[int]int64{2: 1, 3: 3}); got != want { + t.Errorf("storage leaves = %v, want %v", got, want) + } + if got, want := stats.accountTrie.LeafDepths(), expectedLeaves(nil); got != want { + t.Errorf("account leaves = %v, want %v", got, want) + } +} + +func TestWitnessStatsPanicsOnDeepLeaf(t *testing.T) { + stats := NewWitnessStats() + + defer func() { + if r := recover(); r == nil { + t.Fatal("expected panic for depth >= 16") + } + }() + stats.Add(map[string][]byte{strings.Repeat("a", 16): []byte("data")}, common.Hash{}) +} + func TestWitnessStatsMinMax(t *testing.T) { stats := NewWitnessStats() - // Add some account trie nodes with varying depths + // Add some account trie nodes with varying depths. stats.Add(map[string][]byte{ "a": []byte("data1"), "ab": []byte("data2"), @@ -152,21 +188,21 @@ func TestWitnessStatsMinMax(t *testing.T) { "abcde": []byte("data5"), }, common.Hash{}) - // Only "abcde" is a leaf (depth 5) - for i, v := range stats.accountTrieLeaves { + // Only "abcde" is a leaf (depth 5). + for i, v := range stats.accountTrie.LeafDepths() { if v != 0 && i != 5 { t.Errorf("leaf found at invalid depth %d", i) } } - // Add more leaves with different depths + // Add more leaves with different depths. stats.Add(map[string][]byte{ "x": []byte("data6"), "yz": []byte("data7"), }, common.Hash{}) - // Now we have leaves at depths 1, 2, and 5 - for i, v := range stats.accountTrieLeaves { + // Now we have leaves at depths 1, 2, and 5. + for i, v := range stats.accountTrie.LeafDepths() { if v != 0 && (i != 5 && i != 2 && i != 1) { t.Errorf("leaf found at invalid depth %d", i) } @@ -176,7 +212,7 @@ func TestWitnessStatsMinMax(t *testing.T) { func TestWitnessStatsAverage(t *testing.T) { stats := NewWitnessStats() - // Add nodes that will create leaves at depths 2, 3, and 4 + // Add nodes that will create leaves at depths 2, 3, and 4. stats.Add(map[string][]byte{ "aa": []byte("data1"), "bb": []byte("data2"), @@ -184,22 +220,22 @@ func TestWitnessStatsAverage(t *testing.T) { "dddd": []byte("data4"), }, common.Hash{}) - // All are leaves: 2 + 2 + 3 + 4 = 11 total, 4 samples + // All are leaves: 2 + 2 + 3 + 4 = 11 total, 4 samples. expectedAvg := int64(11) / int64(4) var actualAvg, totalSamples int64 - for i, c := range stats.accountTrieLeaves { + for i, c := range stats.accountTrie.LeafDepths() { actualAvg += c * int64(i) totalSamples += c } actualAvg = actualAvg / totalSamples if actualAvg != expectedAvg { - t.Errorf("Account trie average depth = %d, want %d", actualAvg, expectedAvg) + t.Errorf("account trie average depth = %d, want %d", actualAvg, expectedAvg) } } func BenchmarkWitnessStatsAdd(b *testing.B) { - // Create a realistic trie node structure + // Create a realistic trie node structure. nodes := make(map[string][]byte) for i := 0; i < 100; i++ { base := string(rune('a' + i%26)) diff --git a/core/rawdb/database_tablewriter.go b/internal/tablewriter/database_tablewriter.go similarity index 97% rename from core/rawdb/database_tablewriter.go rename to internal/tablewriter/database_tablewriter.go index e1cda5c93f..c080a69c15 100644 --- a/core/rawdb/database_tablewriter.go +++ b/internal/tablewriter/database_tablewriter.go @@ -16,7 +16,7 @@ // Naive stub implementation for tablewriter -package rawdb +package tablewriter import ( "errors" @@ -37,7 +37,7 @@ type Table struct { rows [][]string } -func NewTableWriter(w io.Writer) *Table { +func NewWriter(w io.Writer) *Table { return &Table{out: w} } @@ -58,12 +58,12 @@ func (t *Table) SetFooter(footer []string) { t.footer = footer } -// AppendBulk sets all data rows for the table at once, replacing any existing rows. +// AppendBulk appends one or more data rows to the table. // // Each row must have the same number of columns as the headers, or validation // will fail during Render(). func (t *Table) AppendBulk(rows [][]string) { - t.rows = rows + t.rows = append(t.rows, rows...) } // Render outputs the complete table to the configured writer. The table is rendered diff --git a/core/rawdb/database_tablewriter_test.go b/internal/tablewriter/database_tablewriter_test.go similarity index 94% rename from core/rawdb/database_tablewriter_test.go rename to internal/tablewriter/database_tablewriter_test.go index e9de5d8ce8..b915dcdda8 100644 --- a/core/rawdb/database_tablewriter_test.go +++ b/internal/tablewriter/database_tablewriter_test.go @@ -14,7 +14,7 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -package rawdb +package tablewriter import ( "bytes" @@ -24,7 +24,7 @@ import ( func TestTableWriterTinyGo(t *testing.T) { var buf bytes.Buffer - table := NewTableWriter(&buf) + table := NewWriter(&buf) headers := []string{"Database", "Size", "Items", "Status"} rows := [][]string{ @@ -48,7 +48,7 @@ func TestTableWriterValidationErrors(t *testing.T) { // Test missing headers t.Run("MissingHeaders", func(t *testing.T) { var buf bytes.Buffer - table := NewTableWriter(&buf) + table := NewWriter(&buf) rows := [][]string{{"x", "y", "z"}} @@ -63,7 +63,7 @@ func TestTableWriterValidationErrors(t *testing.T) { t.Run("NotEnoughRowColumns", func(t *testing.T) { var buf bytes.Buffer - table := NewTableWriter(&buf) + table := NewWriter(&buf) headers := []string{"A", "B", "C"} badRows := [][]string{ @@ -82,7 +82,7 @@ func TestTableWriterValidationErrors(t *testing.T) { t.Run("TooManyRowColumns", func(t *testing.T) { var buf bytes.Buffer - table := NewTableWriter(&buf) + table := NewWriter(&buf) headers := []string{"A", "B", "C"} badRows := [][]string{ @@ -102,7 +102,7 @@ func TestTableWriterValidationErrors(t *testing.T) { // Test mismatched footer columns t.Run("MismatchedFooterColumns", func(t *testing.T) { var buf bytes.Buffer - table := NewTableWriter(&buf) + table := NewWriter(&buf) headers := []string{"A", "B", "C"} rows := [][]string{{"x", "y", "z"}} diff --git a/trie/inspect.go b/trie/inspect.go new file mode 100644 index 0000000000..d7ca9ace63 --- /dev/null +++ b/trie/inspect.go @@ -0,0 +1,930 @@ +// Copyright 2025 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package trie + +import ( + "bufio" + "bytes" + "cmp" + "container/heap" + "encoding/binary" + "encoding/json" + "errors" + "fmt" + "io" + "os" + "slices" + "sort" + "strings" + "sync" + "sync/atomic" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/internal/tablewriter" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/triedb/database" + "golang.org/x/sync/errgroup" + "golang.org/x/sync/semaphore" +) + +const ( + inspectDumpRecordSize = 32 + trieStatLevels*(3*4+8) + inspectDefaultTopN = 10 + inspectParallelism = int64(16) +) + +// inspector is used by the inner inspect function to coordinate across threads. +type inspector struct { + triedb database.NodeDatabase + root common.Hash + + config *InspectConfig + accountStat *LevelStats + + sem *semaphore.Weighted + + // Pass 1: dump file writer. + dumpMu sync.Mutex + dumpBuf *bufio.Writer + dumpFile *os.File + storageRecordsWritten atomic.Uint64 + + errMu sync.Mutex + err error +} + +// InspectConfig is a set of options to control inspection and format the output. +// TopN determines the maximum number of entries retained for each top-list. +// Path controls optional JSON output. DumpPath controls the pass-1 dump location. +type InspectConfig struct { + NoStorage bool + TopN int + Path string + DumpPath string +} + +// Inspect walks the trie with the given root and records the number and type of +// nodes at each depth. Storage trie stats are streamed to disk in fixed-size +// records, then summarized in a second pass. +func Inspect(triedb database.NodeDatabase, root common.Hash, config *InspectConfig) error { + trie, err := New(TrieID(root), triedb) + if err != nil { + return fmt.Errorf("fail to open trie %s: %w", root, err) + } + config = normalizeInspectConfig(config) + + dumpFile, err := os.OpenFile(config.DumpPath, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0o644) + if err != nil { + return fmt.Errorf("failed to create trie dump %s: %w", config.DumpPath, err) + } + in := inspector{ + triedb: triedb, + root: root, + config: config, + accountStat: NewLevelStats(), + sem: semaphore.NewWeighted(inspectParallelism), + dumpBuf: bufio.NewWriterSize(dumpFile, 1<<20), + dumpFile: dumpFile, + } + + // Start progress reporter + start := time.Now() + done := make(chan struct{}) + go func() { + ticker := time.NewTicker(8 * time.Second) + defer ticker.Stop() + for { + select { + case <-ticker.C: + accountNodes := in.accountStat.TotalNodes() + storageRecords := in.storageRecordsWritten.Load() + log.Info("Inspecting trie", + "accountNodes", accountNodes, + "storageRecords", storageRecords, + "elapsed", common.PrettyDuration(time.Since(start))) + case <-done: + return + } + } + }() + + in.recordRootSize(trie, root, in.accountStat) + in.inspect(trie, trie.root, 0, []byte{}, in.accountStat) + + // inspect is synchronous: it waits for all spawned goroutines in its + // subtree before returning, so no additional wait is needed here. + + // Persist account trie stats as the sentinel record. + in.writeDumpRecord(common.Hash{}, in.accountStat) + if err := in.closeDump(); err != nil { + in.setError(err) + } + + // Stop progress reporter + close(done) + + if err := in.getError(); err != nil { + return err + } + return Summarize(config.DumpPath, config) +} + +// InspectContract inspects the on-disk footprint of a single contract. +// It reports snapshot storage (slot count + size) and storage trie node +// statistics (node type breakdown and per-depth distribution). +func InspectContract(triedb database.NodeDatabase, db ethdb.Database, stateRoot common.Hash, address common.Address) error { + // Resolve account from the state trie. + accountHash := crypto.Keccak256Hash(address.Bytes()) + accountTrie, err := New(TrieID(stateRoot), triedb) + if err != nil { + return fmt.Errorf("failed to open account trie: %w", err) + } + accountRLP, err := accountTrie.Get(crypto.Keccak256(address.Bytes())) + if err != nil { + return fmt.Errorf("failed to read account: %w", err) + } + if accountRLP == nil { + return fmt.Errorf("account not found: %s", address) + } + var account types.StateAccount + if err := rlp.DecodeBytes(accountRLP, &account); err != nil { + return fmt.Errorf("failed to decode account: %w", err) + } + if account.Root == (common.Hash{}) || account.Root == types.EmptyRootHash { + return fmt.Errorf("account %s has no storage", address) + } + + // Look up account snapshot. + accountData := rawdb.ReadAccountSnapshot(db, accountHash) + + // Run trie walk + snap iteration in parallel. + var ( + snapSlots atomic.Uint64 + snapSize atomic.Uint64 + g errgroup.Group + start = time.Now() + ) + + // Goroutine 1: Snapshot storage iteration. + g.Go(func() error { + prefix := append(rawdb.SnapshotStoragePrefix, accountHash.Bytes()...) + it := db.NewIterator(prefix, nil) + defer it.Release() + + for it.Next() { + if !bytes.HasPrefix(it.Key(), prefix) { + break + } + snapSlots.Add(1) + snapSize.Add(uint64(len(it.Key()) + len(it.Value()))) + } + return it.Error() + }) + + // Goroutine 2: Storage trie walk using the existing inspector. + storageStat := NewLevelStats() + g.Go(func() error { + owner := accountHash + storage, err := New(StorageTrieID(stateRoot, owner, account.Root), triedb) + if err != nil { + return fmt.Errorf("failed to open storage trie: %w", err) + } + in := &inspector{ + triedb: triedb, + root: stateRoot, + config: &InspectConfig{NoStorage: true}, + accountStat: NewLevelStats(), // unused, but needed by inspector + sem: semaphore.NewWeighted(inspectParallelism), + dumpBuf: bufio.NewWriter(io.Discard), + } + + in.recordRootSize(storage, account.Root, storageStat) + in.inspect(storage, storage.root, 0, []byte{}, storageStat) + + if err := in.getError(); err != nil { + return err + } + return nil + }) + + // Progress reporter. + done := make(chan struct{}) + go func() { + ticker := time.NewTicker(8 * time.Second) + defer ticker.Stop() + for { + select { + case <-ticker.C: + log.Info("Inspecting contract", + "snapSlots", snapSlots.Load(), + "trieNodes", storageStat.TotalNodes(), + "elapsed", common.PrettyDuration(time.Since(start))) + case <-done: + return + } + } + }() + + if err := g.Wait(); err != nil { + close(done) + return err + } + close(done) + + // Display results. + fmt.Printf("\n=== Contract Inspection: %s ===\n", address) + fmt.Printf("Account hash: %s\n\n", accountHash) + + if len(accountData) == 0 { + fmt.Println("Account snapshot: not found") + } else { + fmt.Printf("Account snapshot: %s\n", common.StorageSize(len(accountData))) + } + + fmt.Printf("Snapshot storage: %d slots (%s)\n", + snapSlots.Load(), common.StorageSize(snapSize.Load())) + + // Compute trie totals from LevelStats. + var trieTotal, trieSize uint64 + for i := 0; i < trieStatLevels; i++ { + short, full, value, size := storageStat.level[i].load() + trieTotal += short + full + value + trieSize += size + } + fmt.Printf("Storage trie: %d nodes (%s)\n", trieTotal, common.StorageSize(trieSize)) + + // Depth distribution table with node type columns. + fmt.Println("\nStorage Trie Depth Distribution:") + b := new(strings.Builder) + table := tablewriter.NewWriter(b) + table.SetHeader([]string{"Depth", "Short", "Full", "Value", "Nodes", "Size"}) + for i := 0; i < trieStatLevels; i++ { + short, full, value, size := storageStat.level[i].load() + total := short + full + value + if total == 0 && size == 0 { + continue + } + table.AppendBulk([][]string{{ + fmt.Sprint(i), + fmt.Sprint(short), + fmt.Sprint(full), + fmt.Sprint(value), + fmt.Sprint(total), + common.StorageSize(size).String(), + }}) + } + table.Render() + fmt.Print(b.String()) + + return nil +} + +func normalizeInspectConfig(config *InspectConfig) *InspectConfig { + if config == nil { + config = &InspectConfig{} + } + if config.TopN <= 0 { + config.TopN = inspectDefaultTopN + } + if config.DumpPath == "" { + config.DumpPath = "trie-dump.bin" + } + return config +} + +func (in *inspector) recordRootSize(trie *Trie, root common.Hash, stat *LevelStats) { + if root == (common.Hash{}) || root == types.EmptyRootHash { + return + } + blob := trie.prevalueTracer.Get(nil) + if len(blob) == 0 { + resolved, err := trie.reader.Node(nil, root) + if err != nil { + log.Error("Failed to read trie root for size accounting", "trie", trie.Hash(), "root", root, "err", err) + return + } + blob = resolved + } + stat.addSize(0, uint64(len(blob))) +} + +func (in *inspector) closeDump() error { + var ret error + if in.dumpBuf != nil { + if err := in.dumpBuf.Flush(); err != nil { + ret = errors.Join(ret, fmt.Errorf("failed to flush trie dump %s: %w", in.config.DumpPath, err)) + } + } + if in.dumpFile != nil { + if err := in.dumpFile.Close(); err != nil { + ret = errors.Join(ret, fmt.Errorf("failed to close trie dump %s: %w", in.config.DumpPath, err)) + } + } + return ret +} + +func (in *inspector) setError(err error) { + if err == nil { + return + } + in.errMu.Lock() + defer in.errMu.Unlock() + in.err = errors.Join(in.err, err) +} + +func (in *inspector) getError() error { + in.errMu.Lock() + defer in.errMu.Unlock() + return in.err +} + +func (in *inspector) hasError() bool { + return in.getError() != nil +} + +// trySpawn attempts to run fn in a new goroutine, bounded by the semaphore. +// If a slot is available the goroutine is started and tracked via wg; the +// caller must call wg.Wait() before reading any state written by fn. +// Returns false (and does not start a goroutine) when no slot is available. +func (in *inspector) trySpawn(wg *sync.WaitGroup, fn func()) bool { + if !in.sem.TryAcquire(1) { + return false + } + wg.Add(1) + go func() { + defer in.sem.Release(1) + defer wg.Done() + fn() + }() + return true +} + +func (in *inspector) writeDumpRecord(owner common.Hash, s *LevelStats) { + if in.hasError() { + return + } + var buf [inspectDumpRecordSize]byte + copy(buf[:32], owner[:]) + + off := 32 + for i := 0; i < trieStatLevels; i++ { + binary.LittleEndian.PutUint32(buf[off:], uint32(s.level[i].short.Load())) + off += 4 + binary.LittleEndian.PutUint32(buf[off:], uint32(s.level[i].full.Load())) + off += 4 + binary.LittleEndian.PutUint32(buf[off:], uint32(s.level[i].value.Load())) + off += 4 + binary.LittleEndian.PutUint64(buf[off:], s.level[i].size.Load()) + off += 8 + } + in.dumpMu.Lock() + _, err := in.dumpBuf.Write(buf[:]) + in.dumpMu.Unlock() + if err != nil { + in.setError(fmt.Errorf("failed writing trie dump record: %w", err)) + } + + // Increment counter for storage tries only (not for account trie) + if owner != (common.Hash{}) { + in.storageRecordsWritten.Add(1) + } +} + +// inspect walks the trie rooted at n and records node statistics into stat. +// It may spawn goroutines for subtrees, but always waits for them before +// returning — the caller sees a fully-populated stat when inspect returns. +func (in *inspector) inspect(trie *Trie, n node, height uint32, path []byte, stat *LevelStats) { + if n == nil { + return + } + + // wg tracks goroutines spawned by this call so we can wait for them + // before returning. This guarantees stat is complete when we return, + // which is critical for storage tries that write their dump record + // immediately after inspect returns. + var wg sync.WaitGroup + + // Four types of nodes can be encountered: + // - short: extend path with key, inspect single value. + // - full: inspect all 17 children, spin up new threads when possible. + // - hash: need to resolve node from disk, retry inspect on result. + // - value: if account, begin inspecting storage trie. + switch n := (n).(type) { + case *shortNode: + nextPath := slices.Concat(path, n.Key) + in.inspect(trie, n.Val, height+1, nextPath, stat) + case *fullNode: + for idx, child := range n.Children { + if child == nil { + continue + } + childPath := slices.Concat(path, []byte{byte(idx)}) + childNode := child + if in.trySpawn(&wg, func() { + in.inspect(trie, childNode, height+1, childPath, stat) + }) { + continue + } + in.inspect(trie, childNode, height+1, childPath, stat) + } + case hashNode: + blob, err := trie.reader.Node(path, common.BytesToHash(n)) + if err != nil { + log.Error("Failed to resolve HashNode", "err", err, "trie", trie.Hash(), "height", height+1, "path", path) + return + } + stat.addSize(height, uint64(len(blob))) + resolved := mustDecodeNode(n, blob) + in.inspect(trie, resolved, height, path, stat) + + // Return early here so this level isn't recorded twice. + return + case valueNode: + if !hasTerm(path) { + break + } + var account types.StateAccount + if err := rlp.Decode(bytes.NewReader(n), &account); err != nil { + // Not an account value. + break + } + if account.Root == (common.Hash{}) || account.Root == types.EmptyRootHash { + // Account is empty, nothing further to inspect. + break + } + + if !in.config.NoStorage { + owner := common.BytesToHash(hexToCompact(path)) + storage, err := New(StorageTrieID(in.root, owner, account.Root), in.triedb) + if err != nil { + log.Error("Failed to open account storage trie", "node", n, "error", err, "height", height, "path", common.Bytes2Hex(path)) + break + } + storageStat := NewLevelStats() + run := func() { + in.recordRootSize(storage, account.Root, storageStat) + in.inspect(storage, storage.root, 0, []byte{}, storageStat) + in.writeDumpRecord(owner, storageStat) + } + if in.trySpawn(&wg, run) { + break + } + run() + } + default: + panic(fmt.Sprintf("%T: invalid node: %v", n, n)) + } + + // Wait for all goroutines spawned at this level before recording + // the current node. This ensures the entire subtree is counted + // before this call returns. + wg.Wait() + + // Record stats for current height. + stat.add(n, height) +} + +// Summarize performs pass 2 over a trie dump and reports account stats, +// aggregate storage statistics, and top-N rankings. +func Summarize(dumpPath string, config *InspectConfig) error { + config = normalizeInspectConfig(config) + if dumpPath == "" { + dumpPath = config.DumpPath + } + if dumpPath == "" { + return errors.New("missing dump path") + } + file, err := os.Open(dumpPath) + if err != nil { + return fmt.Errorf("failed to open trie dump %s: %w", dumpPath, err) + } + defer file.Close() + + if info, err := file.Stat(); err == nil { + if info.Size()%inspectDumpRecordSize != 0 { + return fmt.Errorf("invalid trie dump size %d (not a multiple of %d)", info.Size(), inspectDumpRecordSize) + } + } + + depthTop := newStorageStatsTopN(config.TopN, compareStorageStatsByDepth) + totalTop := newStorageStatsTopN(config.TopN, compareStorageStatsByTotal) + valueTop := newStorageStatsTopN(config.TopN, compareStorageStatsByValue) + + summary := &inspectSummary{} + reader := bufio.NewReaderSize(file, 1<<20) + var buf [inspectDumpRecordSize]byte + + for { + _, err := io.ReadFull(reader, buf[:]) + if errors.Is(err, io.EOF) { + break + } + if errors.Is(err, io.ErrUnexpectedEOF) { + return fmt.Errorf("truncated trie dump %s", dumpPath) + } + if err != nil { + return fmt.Errorf("failed reading trie dump %s: %w", dumpPath, err) + } + + record := decodeDumpRecord(buf[:]) + snapshot := newStorageStats(record.Owner, record.Levels) + if record.Owner == (common.Hash{}) { + summary.Account = snapshot + continue + } + summary.StorageCount++ + summary.DepthHistogram[snapshot.MaxDepth]++ + for i := 0; i < trieStatLevels; i++ { + summary.StorageLevels[i].Short += record.Levels[i].Short + summary.StorageLevels[i].Full += record.Levels[i].Full + summary.StorageLevels[i].Value += record.Levels[i].Value + summary.StorageLevels[i].Size += record.Levels[i].Size + } + + depthTop.TryInsert(snapshot) + totalTop.TryInsert(snapshot) + valueTop.TryInsert(snapshot) + } + if summary.Account == nil { + return fmt.Errorf("dump file %s does not contain the account trie sentinel record", dumpPath) + } + for i := 0; i < trieStatLevels; i++ { + summary.StorageTotals.Short += summary.StorageLevels[i].Short + summary.StorageTotals.Full += summary.StorageLevels[i].Full + summary.StorageTotals.Value += summary.StorageLevels[i].Value + summary.StorageTotals.Size += summary.StorageLevels[i].Size + } + summary.TopByDepth = depthTop.Sorted() + summary.TopByTotalNodes = totalTop.Sorted() + summary.TopByValueNodes = valueTop.Sorted() + + if config.Path != "" { + return summary.writeJSON(config.Path) + } + summary.display() + return nil +} + +type dumpRecord struct { + Owner common.Hash + Levels [trieStatLevels]jsonLevel +} + +func decodeDumpRecord(raw []byte) dumpRecord { + var ( + record dumpRecord + off = 32 + ) + copy(record.Owner[:], raw[:32]) + for i := 0; i < trieStatLevels; i++ { + record.Levels[i] = jsonLevel{ + Short: uint64(binary.LittleEndian.Uint32(raw[off:])), + Full: uint64(binary.LittleEndian.Uint32(raw[off+4:])), + Value: uint64(binary.LittleEndian.Uint32(raw[off+8:])), + Size: binary.LittleEndian.Uint64(raw[off+12:]), + } + off += 20 + } + return record +} + +type storageStats struct { + Owner common.Hash + Levels [trieStatLevels]jsonLevel + Summary jsonLevel + MaxDepth int + TotalNodes uint64 + TotalSize uint64 +} + +func newStorageStats(owner common.Hash, levels [trieStatLevels]jsonLevel) *storageStats { + snapshot := &storageStats{Owner: owner, Levels: levels} + for i := 0; i < trieStatLevels; i++ { + level := levels[i] + if level.Short != 0 || level.Full != 0 || level.Value != 0 { + snapshot.MaxDepth = i + } + snapshot.Summary.Short += level.Short + snapshot.Summary.Full += level.Full + snapshot.Summary.Value += level.Value + snapshot.Summary.Size += level.Size + } + snapshot.TotalNodes = snapshot.Summary.Short + snapshot.Summary.Full + snapshot.Summary.Value + snapshot.TotalSize = snapshot.Summary.Size + return snapshot +} + +func trimLevels(levels [trieStatLevels]jsonLevel) []jsonLevel { + n := len(levels) + for n > 0 && levels[n-1] == (jsonLevel{}) { + n-- + } + return levels[:n] +} + +func (s *storageStats) MarshalJSON() ([]byte, error) { + type jsonStorageSnapshot struct { + Owner common.Hash `json:"Owner"` + MaxDepth int `json:"MaxDepth"` + TotalNodes uint64 `json:"TotalNodes"` + TotalSize uint64 `json:"TotalSize"` + ValueNodes uint64 `json:"ValueNodes"` + Levels []jsonLevel `json:"Levels"` + Summary jsonLevel `json:"Summary"` + } + return json.Marshal(jsonStorageSnapshot{ + Owner: s.Owner, + MaxDepth: s.MaxDepth, + TotalNodes: s.TotalNodes, + TotalSize: s.TotalSize, + ValueNodes: s.Summary.Value, + Levels: trimLevels(s.Levels), + Summary: s.Summary, + }) +} + +func (s *storageStats) toLevelStats() *LevelStats { + stats := NewLevelStats() + for i := 0; i < trieStatLevels; i++ { + stats.level[i].short.Store(s.Levels[i].Short) + stats.level[i].full.Store(s.Levels[i].Full) + stats.level[i].value.Store(s.Levels[i].Value) + stats.level[i].size.Store(s.Levels[i].Size) + } + return stats +} + +type storageStatsCompare func(a, b *storageStats) int + +type storageStatsTopN struct { + limit int + cmp storageStatsCompare + heap storageStatsHeap +} + +type storageStatsHeap struct { + items []*storageStats + cmp storageStatsCompare +} + +func (h storageStatsHeap) Len() int { return len(h.items) } + +func (h storageStatsHeap) Less(i, j int) bool { + // Keep the weakest entry at the root (min-heap semantics). + return h.cmp(h.items[i], h.items[j]) < 0 +} + +func (h storageStatsHeap) Swap(i, j int) { h.items[i], h.items[j] = h.items[j], h.items[i] } + +func (h *storageStatsHeap) Push(x any) { + h.items = append(h.items, x.(*storageStats)) +} + +func (h *storageStatsHeap) Pop() any { + item := h.items[len(h.items)-1] + h.items = h.items[:len(h.items)-1] + return item +} + +func newStorageStatsTopN(limit int, cmp storageStatsCompare) *storageStatsTopN { + h := storageStatsHeap{cmp: cmp} + heap.Init(&h) + return &storageStatsTopN{limit: limit, cmp: cmp, heap: h} +} + +func (t *storageStatsTopN) TryInsert(item *storageStats) { + if t.limit <= 0 { + return + } + if t.heap.Len() < t.limit { + heap.Push(&t.heap, item) + return + } + if t.cmp(item, t.heap.items[0]) <= 0 { + return + } + heap.Pop(&t.heap) + heap.Push(&t.heap, item) +} + +func (t *storageStatsTopN) Sorted() []*storageStats { + out := append([]*storageStats(nil), t.heap.items...) + sort.Slice(out, func(i, j int) bool { return t.cmp(out[i], out[j]) > 0 }) + return out +} + +func compareStorageStatsByDepth(a, b *storageStats) int { + return cmp.Or( + cmp.Compare(a.MaxDepth, b.MaxDepth), + cmp.Compare(a.TotalNodes, b.TotalNodes), + cmp.Compare(a.Summary.Value, b.Summary.Value), + bytes.Compare(a.Owner[:], b.Owner[:]), + ) +} + +func compareStorageStatsByTotal(a, b *storageStats) int { + return cmp.Or( + cmp.Compare(a.TotalNodes, b.TotalNodes), + cmp.Compare(a.MaxDepth, b.MaxDepth), + cmp.Compare(a.Summary.Value, b.Summary.Value), + bytes.Compare(a.Owner[:], b.Owner[:]), + ) +} + +func compareStorageStatsByValue(a, b *storageStats) int { + return cmp.Or( + cmp.Compare(a.Summary.Value, b.Summary.Value), + cmp.Compare(a.MaxDepth, b.MaxDepth), + cmp.Compare(a.TotalNodes, b.TotalNodes), + bytes.Compare(a.Owner[:], b.Owner[:]), + ) +} + +type inspectSummary struct { + Account *storageStats + StorageCount uint64 + StorageTotals jsonLevel + StorageLevels [trieStatLevels]jsonLevel + DepthHistogram [trieStatLevels]uint64 + TopByDepth []*storageStats + TopByTotalNodes []*storageStats + TopByValueNodes []*storageStats +} + +func (s *inspectSummary) display() { + s.displayCombinedDepthTable() + s.Account.toLevelStats().display("Accounts trie") + fmt.Println("Storage trie aggregate summary") + fmt.Printf("Total storage tries: %d\n", s.StorageCount) + totalNodes := s.StorageTotals.Short + s.StorageTotals.Full + s.StorageTotals.Value + fmt.Printf("Total nodes: %d\n", totalNodes) + fmt.Printf("Total size: %s\n", common.StorageSize(s.StorageTotals.Size)) + fmt.Printf(" Short nodes: %d\n", s.StorageTotals.Short) + fmt.Printf(" Full nodes: %d\n", s.StorageTotals.Full) + fmt.Printf(" Value nodes: %d\n", s.StorageTotals.Value) + + b := new(strings.Builder) + table := tablewriter.NewWriter(b) + table.SetHeader([]string{"Max Depth", "Storage Tries"}) + for i, count := range s.DepthHistogram { + table.AppendBulk([][]string{{fmt.Sprint(i), fmt.Sprint(count)}}) + } + table.Render() + fmt.Print(b.String()) + fmt.Println() + + s.displayTop("Top storage tries by max depth", s.TopByDepth) + s.displayTop("Top storage tries by total node count", s.TopByTotalNodes) + s.displayTop("Top storage tries by value (slot) count", s.TopByValueNodes) +} + +func (s *inspectSummary) displayCombinedDepthTable() { + accountTotal := s.Account.Summary.Short + s.Account.Summary.Full + s.Account.Summary.Value + storageTotal := s.StorageTotals.Short + s.StorageTotals.Full + s.StorageTotals.Value + accountTotalSize := s.Account.Summary.Size + storageTotalSize := s.StorageTotals.Size + + fmt.Println("Trie Depth Distribution") + fmt.Printf("Account Trie: %d nodes (%s)\n", accountTotal, common.StorageSize(accountTotalSize)) + fmt.Printf("Storage Tries: %d nodes (%s) across %d tries\n", storageTotal, common.StorageSize(storageTotalSize), s.StorageCount) + + b := new(strings.Builder) + table := tablewriter.NewWriter(b) + table.SetHeader([]string{"Depth", "Account Nodes", "Account Size", "Storage Nodes", "Storage Size"}) + for i := 0; i < trieStatLevels; i++ { + accountNodes := s.Account.Levels[i].Short + s.Account.Levels[i].Full + s.Account.Levels[i].Value + accountSize := s.Account.Levels[i].Size + storageNodes := s.StorageLevels[i].Short + s.StorageLevels[i].Full + s.StorageLevels[i].Value + storageSize := s.StorageLevels[i].Size + if accountNodes == 0 && storageNodes == 0 { + continue + } + table.AppendBulk([][]string{{ + fmt.Sprint(i), + fmt.Sprint(accountNodes), + common.StorageSize(accountSize).String(), + fmt.Sprint(storageNodes), + common.StorageSize(storageSize).String(), + }}) + } + table.Render() + fmt.Print(b.String()) + fmt.Println() +} + +func (s *inspectSummary) displayTop(title string, list []*storageStats) { + fmt.Println(title) + if len(list) == 0 { + fmt.Println("No storage tries found") + fmt.Println() + return + } + for i, item := range list { + fmt.Printf("%d: %s\n", i+1, item.Owner) + item.toLevelStats().display("storage trie") + } +} + +func (s *inspectSummary) MarshalJSON() ([]byte, error) { + type jsonAccountTrie struct { + Name string `json:"Name"` + Levels []jsonLevel `json:"Levels"` + Summary jsonLevel `json:"Summary"` + } + type jsonStorageSummary struct { + TotalStorageTries uint64 `json:"TotalStorageTries"` + Totals jsonLevel `json:"Totals"` + Levels []jsonLevel `json:"Levels"` + DepthHistogram [trieStatLevels]uint64 `json:"DepthHistogram"` + } + type jsonInspectSummary struct { + AccountTrie jsonAccountTrie `json:"AccountTrie"` + StorageSummary jsonStorageSummary `json:"StorageSummary"` + TopByDepth []*storageStats `json:"TopByDepth"` + TopByTotalNodes []*storageStats `json:"TopByTotalNodes"` + TopByValueNodes []*storageStats `json:"TopByValueNodes"` + } + return json.Marshal(jsonInspectSummary{ + AccountTrie: jsonAccountTrie{ + Name: "account trie", + Levels: trimLevels(s.Account.Levels), + Summary: s.Account.Summary, + }, + StorageSummary: jsonStorageSummary{ + TotalStorageTries: s.StorageCount, + Totals: s.StorageTotals, + Levels: trimLevels(s.StorageLevels), + DepthHistogram: s.DepthHistogram, + }, + TopByDepth: s.TopByDepth, + TopByTotalNodes: s.TopByTotalNodes, + TopByValueNodes: s.TopByValueNodes, + }) +} + +func (s *inspectSummary) writeJSON(path string) error { + file, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0o644) + if err != nil { + return err + } + defer file.Close() + + enc := json.NewEncoder(file) + enc.SetIndent("", " ") + return enc.Encode(s) +} + +// display will print a table displaying the trie's node statistics. +func (s *LevelStats) display(title string) { + // Shorten title if too long. + if len(title) > 32 { + title = title[0:8] + "..." + title[len(title)-8:] + } + + b := new(strings.Builder) + table := tablewriter.NewWriter(b) + table.SetHeader([]string{title, "Level", "Short Nodes", "Full Node", "Value Node"}) + + stat := &stat{} + for i := range s.level { + if s.level[i].empty() { + continue + } + short, full, value, _ := s.level[i].load() + table.AppendBulk([][]string{{"-", fmt.Sprint(i), fmt.Sprint(short), fmt.Sprint(full), fmt.Sprint(value)}}) + stat.add(&s.level[i]) + } + short, full, value, _ := stat.load() + table.SetFooter([]string{"Total", "", fmt.Sprint(short), fmt.Sprint(full), fmt.Sprint(value)}) + table.Render() + fmt.Print(b.String()) + fmt.Println("Max depth", s.MaxDepth()) + fmt.Println() +} + +type jsonLevel struct { + Short uint64 + Full uint64 + Value uint64 + Size uint64 +} diff --git a/trie/inspect_test.go b/trie/inspect_test.go new file mode 100644 index 0000000000..c07904c52d --- /dev/null +++ b/trie/inspect_test.go @@ -0,0 +1,256 @@ +// Copyright 2025 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package trie + +import ( + "encoding/json" + "math/rand" + "os" + "path/filepath" + "reflect" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/trie/trienode" + "github.com/holiman/uint256" +) + +// TestInspect inspects a randomly generated account trie. It's useful for +// quickly verifying changes to the results display. +func TestInspect(t *testing.T) { + db := newTestDatabase(rawdb.NewMemoryDatabase(), rawdb.HashScheme) + trie, err := NewStateTrie(TrieID(types.EmptyRootHash), db) + if err != nil { + t.Fatalf("failed to create state trie: %v", err) + } + // Create a realistic looking account trie with storage. + addresses, accounts := makeAccountsWithStorage(db, 11, true) + for i := 0; i < len(addresses); i++ { + trie.MustUpdate(crypto.Keccak256(addresses[i][:]), accounts[i]) + } + // Insert the accounts into the trie and hash it + root, nodes := trie.Commit(true) + db.Update(root, types.EmptyRootHash, trienode.NewWithNodeSet(nodes)) + db.Commit(root) + + tempDir := t.TempDir() + dumpPath := filepath.Join(tempDir, "trie-dump.bin") + if err := Inspect(db, root, &InspectConfig{ + TopN: 1, + DumpPath: dumpPath, + Path: filepath.Join(tempDir, "trie-summary.json"), + }); err != nil { + t.Fatalf("inspect failed: %v", err) + } + reanalysisPath := filepath.Join(tempDir, "trie-summary-reanalysis.json") + if err := Summarize(dumpPath, &InspectConfig{ + TopN: 1, + Path: reanalysisPath, + }); err != nil { + t.Fatalf("summarize failed: %v", err) + } + + inspectSummaryPath := filepath.Join(tempDir, "trie-summary.json") + inspectOut := loadInspectJSON(t, inspectSummaryPath) + reanalysisOut := loadInspectJSON(t, reanalysisPath) + + if len(inspectOut.StorageSummary.Levels) == 0 { + t.Fatal("expected StorageSummary.Levels to be populated") + } + if inspectOut.AccountTrie.Summary.Size == 0 { + t.Fatal("expected account trie size summary to be populated") + } + if inspectOut.StorageSummary.Totals.Size == 0 { + t.Fatal("expected storage trie size summary to be populated") + } + if !reflect.DeepEqual(inspectOut.AccountTrie, reanalysisOut.AccountTrie) { + t.Fatal("account trie summary mismatch between inspect and summarize") + } + if !reflect.DeepEqual(inspectOut.StorageSummary, reanalysisOut.StorageSummary) { + t.Fatal("storage summary mismatch between inspect and summarize") + } + + assertStorageTotalsMatchLevels(t, inspectOut) + assertStorageTotalsMatchLevels(t, reanalysisOut) + assertAccountTotalsMatchLevels(t, inspectOut.AccountTrie) + assertAccountTotalsMatchLevels(t, reanalysisOut.AccountTrie) + + var histogramTotal uint64 + for _, count := range inspectOut.StorageSummary.DepthHistogram { + histogramTotal += count + } + if histogramTotal != inspectOut.StorageSummary.TotalStorageTries { + t.Fatalf("depth histogram total %d does not match total storage tries %d", histogramTotal, inspectOut.StorageSummary.TotalStorageTries) + } +} + +type inspectJSONOutput struct { + // Reuse storageStats for AccountTrie JSON to avoid introducing a parallel + // account summary test type. AccountTrie JSON includes Levels+Summary, + // which map directly; other storageStats fields remain zero-values. + AccountTrie storageStats `json:"AccountTrie"` + + StorageSummary struct { + TotalStorageTries uint64 `json:"TotalStorageTries"` + Totals jsonLevel `json:"Totals"` + Levels []jsonLevel `json:"Levels"` + DepthHistogram [trieStatLevels]uint64 `json:"DepthHistogram"` + } `json:"StorageSummary"` +} + +func loadInspectJSON(t *testing.T, path string) inspectJSONOutput { + t.Helper() + raw, err := os.ReadFile(path) + if err != nil { + t.Fatalf("failed to read %s: %v", path, err) + } + var out inspectJSONOutput + if err := json.Unmarshal(raw, &out); err != nil { + t.Fatalf("failed to decode %s: %v", path, err) + } + return out +} + +func assertStorageTotalsMatchLevels(t *testing.T, out inspectJSONOutput) { + t.Helper() + var fromLevels jsonLevel + for _, level := range out.StorageSummary.Levels { + fromLevels.Short += level.Short + fromLevels.Full += level.Full + fromLevels.Value += level.Value + fromLevels.Size += level.Size + } + if fromLevels.Short != out.StorageSummary.Totals.Short || fromLevels.Full != out.StorageSummary.Totals.Full || fromLevels.Value != out.StorageSummary.Totals.Value || fromLevels.Size != out.StorageSummary.Totals.Size { + t.Fatalf("storage totals mismatch: levels=%+v totals=%+v", fromLevels, out.StorageSummary.Totals) + } +} + +func assertAccountTotalsMatchLevels(t *testing.T, account storageStats) { + t.Helper() + var fromLevels jsonLevel + for _, level := range account.Levels { + fromLevels.Short += level.Short + fromLevels.Full += level.Full + fromLevels.Value += level.Value + fromLevels.Size += level.Size + } + if fromLevels.Short != account.Summary.Short || fromLevels.Full != account.Summary.Full || fromLevels.Value != account.Summary.Value || fromLevels.Size != account.Summary.Size { + t.Fatalf("account totals mismatch: levels=%+v totals=%+v", fromLevels, account.Summary) + } +} + +// TestInspectContract tests the InspectContract function on a single account +// with storage and snapshot data. +func TestInspectContract(t *testing.T) { + diskdb := rawdb.NewMemoryDatabase() + db := newTestDatabase(diskdb, rawdb.HashScheme) + + // Create a contract address and its storage trie. + address := common.HexToAddress("0x1234567890abcdef1234567890abcdef12345678") + accountHash := crypto.Keccak256Hash(address.Bytes()) + + // Build a storage trie with some entries. + storageTrie := NewEmpty(db) + storageSlots := make(map[common.Hash][]byte) + for i := 0; i < 10; i++ { + k := crypto.Keccak256Hash([]byte{byte(i)}) + v := []byte{byte(i + 1)} + storageTrie.MustUpdate(k.Bytes(), v) + storageSlots[k] = v + } + storageRoot, storageNodes := storageTrie.Commit(true) + db.Update(storageRoot, types.EmptyRootHash, trienode.NewWithNodeSet(storageNodes)) + db.Commit(storageRoot) + + // Build the account trie with the contract account. + account := types.StateAccount{ + Nonce: 1, + Balance: uint256.NewInt(1000), + Root: storageRoot, + CodeHash: crypto.Keccak256(nil), + } + accountRLP, err := rlp.EncodeToBytes(&account) + if err != nil { + t.Fatalf("failed to encode account: %v", err) + } + + accountTrie := NewEmpty(db) + accountTrie.MustUpdate(crypto.Keccak256(address.Bytes()), accountRLP) + stateRoot, accountNodes := accountTrie.Commit(true) + db.Update(stateRoot, types.EmptyRootHash, trienode.NewWithNodeSet(accountNodes)) + db.Commit(stateRoot) + + // Write snapshot data for the account and its storage slots. + rawdb.WriteAccountSnapshot(diskdb, accountHash, accountRLP) + for k, v := range storageSlots { + rawdb.WriteStorageSnapshot(diskdb, accountHash, k, v) + } + + // InspectContract should succeed without error. + if err := InspectContract(db, diskdb, stateRoot, address); err != nil { + t.Fatalf("InspectContract failed: %v", err) + } +} + +func makeAccountsWithStorage(db *testDb, size int, storage bool) (addresses [][20]byte, accounts [][]byte) { + // Make the random benchmark deterministic + random := rand.New(rand.NewSource(0)) + + addresses = make([][20]byte, size) + for i := 0; i < len(addresses); i++ { + data := make([]byte, 20) + random.Read(data) + copy(addresses[i][:], data) + } + accounts = make([][]byte, len(addresses)) + for i := 0; i < len(accounts); i++ { + var ( + nonce = uint64(random.Int63()) + root = types.EmptyRootHash + code = crypto.Keccak256(nil) + ) + if storage { + trie := NewEmpty(db) + for range random.Uint32()%256 + 1 { // non-zero + k, v := make([]byte, 32), make([]byte, 32) + random.Read(k) + random.Read(v) + trie.MustUpdate(k, v) + } + var nodes *trienode.NodeSet + root, nodes = trie.Commit(true) + db.Update(root, types.EmptyRootHash, trienode.NewWithNodeSet(nodes)) + db.Commit(root) + } + numBytes := random.Uint32() % 33 // [0, 32] bytes + balanceBytes := make([]byte, numBytes) + random.Read(balanceBytes) + balance := new(uint256.Int).SetBytes(balanceBytes) + data, _ := rlp.EncodeToBytes(&types.StateAccount{ + Nonce: nonce, + Balance: balance, + Root: root, + CodeHash: code, + }) + accounts[i] = data + } + return addresses, accounts +} diff --git a/trie/levelstats.go b/trie/levelstats.go new file mode 100644 index 0000000000..9168e3fbaf --- /dev/null +++ b/trie/levelstats.go @@ -0,0 +1,123 @@ +// Copyright 2025 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package trie + +import ( + "fmt" + "sync/atomic" +) + +const trieStatLevels = 16 + +// LevelStats tracks the type and count of trie nodes at each level in a trie. +// +// Note: theoretically it is possible to have up to 64 trie levels, but +// LevelStats supports exactly 16 levels and panics on deeper paths. +type LevelStats struct { + level [trieStatLevels]stat +} + +// NewLevelStats creates an empty trie statistics collector. +func NewLevelStats() *LevelStats { + return &LevelStats{} +} + +// MaxDepth iterates each level and finds the deepest level with at least one +// trie node. +func (s *LevelStats) MaxDepth() int { + depth := 0 + for i := range s.level { + if s.level[i].short.Load() != 0 || s.level[i].full.Load() != 0 || s.level[i].value.Load() != 0 { + depth = i + } + } + return depth +} + +// TotalNodes returns the total number of nodes across all levels and types. +func (s *LevelStats) TotalNodes() uint64 { + var total uint64 + for i := range s.level { + total += s.level[i].short.Load() + s.level[i].full.Load() + s.level[i].value.Load() + } + return total +} + +// add increases the node count by one for the specified node type and depth. +func (s *LevelStats) add(n node, depth uint32) { + d := int(depth) + switch (n).(type) { + case *shortNode: + s.level[d].short.Add(1) + case *fullNode: + s.level[d].full.Add(1) + case valueNode: + s.level[d].value.Add(1) + default: + panic(fmt.Sprintf("%T: invalid node: %v", n, n)) + } +} + +// addSize increases the raw byte-size tally at the specified depth. +func (s *LevelStats) addSize(depth uint32, size uint64) { + s.level[depth].size.Add(size) +} + +// AddLeaf records a leaf depth. Witness collection reuses the value-node bucket +// for leaf accounting. It panics if the depth is outside [0, 15]. +func (s *LevelStats) AddLeaf(depth int) { + s.level[depth].value.Add(1) +} + +// LeafDepths returns leaf counts grouped by depth. +func (s *LevelStats) LeafDepths() [trieStatLevels]int64 { + var leaves [trieStatLevels]int64 + for i := range s.level { + leaves[i] = int64(s.level[i].value.Load()) + } + return leaves +} + +// stat is a specific level's count of each node type. +type stat struct { + short atomic.Uint64 + full atomic.Uint64 + value atomic.Uint64 + size atomic.Uint64 +} + +// empty is a helper that returns whether there are any trie nodes at the level. +func (s *stat) empty() bool { + if s.full.Load() == 0 && s.short.Load() == 0 && s.value.Load() == 0 && s.size.Load() == 0 { + return true + } + return false +} + +// load is a helper that loads each node type's value. +func (s *stat) load() (uint64, uint64, uint64, uint64) { + return s.short.Load(), s.full.Load(), s.value.Load(), s.size.Load() +} + +// add is a helper that adds two level's stats together. +func (s *stat) add(other *stat) *stat { + s.short.Add(other.short.Load()) + s.full.Add(other.full.Load()) + s.value.Add(other.value.Load()) + s.size.Add(other.size.Load()) + return s +} diff --git a/trie/levelstats_test.go b/trie/levelstats_test.go new file mode 100644 index 0000000000..90581eb1ab --- /dev/null +++ b/trie/levelstats_test.go @@ -0,0 +1,37 @@ +// Copyright 2025 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package trie + +import "testing" + +func TestLevelStatsAddLeafDepthBounds(t *testing.T) { + stats := NewLevelStats() + stats.AddLeaf(15) + + if got := stats.LeafDepths()[15]; got != 1 { + t.Fatalf("leaf count at depth 15 = %d, want 1", got) + } +} + +func TestLevelStatsAddLeafPanicsOnDepth16(t *testing.T) { + defer func() { + if r := recover(); r == nil { + t.Fatal("expected panic for depth >= 16") + } + }() + NewLevelStats().AddLeaf(16) +} From 2a452724080aaeaa2d497be1063c3b59b2e607e3 Mon Sep 17 00:00:00 2001 From: ANtutov Date: Wed, 25 Feb 2026 06:50:26 +0200 Subject: [PATCH 064/161] eth/protocols/eth: fix handshake timeout metrics classification (#33539) Previously, handshake timeouts were recorded as generic peer errors instead of timeout errors. waitForHandshake passed a raw p2p.DiscReadTimeout into markError, but markError classified errors only via errors.Unwrap(err), which returns nil for non-wrapped errors. As a result, the timeoutError meter was never incremented and all such failures fell into the peerError bucket. This change makes markError switch on the base error, using errors.Unwrap(err) when available and falling back to the original error otherwise. With this adjustment, p2p.DiscReadTimeout is correctly mapped to timeoutError, while existing behaviour for the other wrapped sentinel errors remains unchanged --------- Co-authored-by: lightclient --- eth/protocols/eth/handshake.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/eth/protocols/eth/handshake.go b/eth/protocols/eth/handshake.go index bb3d1b8eb4..4d1b6e9de7 100644 --- a/eth/protocols/eth/handshake.go +++ b/eth/protocols/eth/handshake.go @@ -191,16 +191,16 @@ func markError(p *Peer, err error) { return } m := meters.get(p.Inbound()) - switch errors.Unwrap(err) { - case errNetworkIDMismatch: + switch { + case errors.Is(err, errNetworkIDMismatch): m.networkIDMismatch.Mark(1) - case errProtocolVersionMismatch: + case errors.Is(err, errProtocolVersionMismatch): m.protocolVersionMismatch.Mark(1) - case errGenesisMismatch: + case errors.Is(err, errGenesisMismatch): m.genesisMismatch.Mark(1) - case errForkIDRejected: + case errors.Is(err, errForkIDRejected): m.forkidRejected.Mark(1) - case p2p.DiscReadTimeout: + case errors.Is(err, p2p.DiscReadTimeout): m.timeoutError.Mark(1) default: m.peerError.Mark(1) From 406a852ec8deab5519f45a2f7fb75114a5668ea6 Mon Sep 17 00:00:00 2001 From: Guillaume Ballet <3272758+gballet@users.noreply.github.com> Date: Wed, 25 Feb 2026 07:08:23 +0100 Subject: [PATCH 065/161] AGENTS.md: add AGENTS.md (#33890) Co-authored-by: tellabg <249254436+tellabg@users.noreply.github.com> Co-authored-by: lightclient --- AGENTS.md | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 AGENTS.md diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000000..33b31eb632 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,98 @@ +# AGENTS + +## Guidelines + +- **Keep changes minimal and focused.** Only modify code directly related to the task at hand. Do not refactor unrelated code, rename existing variables or functions for style, or bundle unrelated fixes into the same commit or PR. +- **Do not add, remove, or update dependencies** unless the task explicitly requires it. + +## Pre-Commit Checklist + +Before every commit, run **all** of the following checks and ensure they pass: + +### 1. Formatting + +Before committing, always run `gofmt` and `goimports` on all modified files: + +```sh +gofmt -w +goimports -w +``` + +### 2. Build All Commands + +Verify that all tools compile successfully: + +```sh +make all +``` + +This builds all executables under `cmd/`, including `keeper` which has special build requirements. + +### 3. Tests + +While iterating during development, use `-short` for faster feedback: + +```sh +go run ./build/ci.go test -short +``` + +Before committing, run the full test suite **without** `-short` to ensure all tests pass, including the Ethereum execution-spec tests and all state/block test permutations: + +```sh +go run ./build/ci.go test +``` + +### 4. Linting + +```sh +go run ./build/ci.go lint +``` + +This runs additional style checks. Fix any issues before committing. + +### 5. Generated Code + +```sh +go run ./build/ci.go check_generate +``` + +Ensures that all generated files (e.g., `gen_*.go`) are up to date. If this fails, first install the required code generators by running `make devtools`, then run the appropriate `go generate` commands and include the updated files in your commit. + +### 6. Dependency Hygiene + +```sh +go run ./build/ci.go check_baddeps +``` + +Verifies that no forbidden dependencies have been introduced. + +## Commit Message Format + +Commit messages must be prefixed with the package(s) they modify, followed by a short lowercase description: + +``` +: description +``` + +Examples: +- `core/vm: fix stack overflow in PUSH instruction` +- `eth, rpc: make trace configs optional` +- `cmd/geth: add new flag for sync mode` + +Use comma-separated package names when multiple areas are affected. Keep the description concise. + +## Pull Request Title Format + +PR titles follow the same convention as commit messages: + +``` +: description +``` + +Examples: +- `core/vm: fix stack overflow in PUSH instruction` +- `core, eth: add arena allocator support` +- `cmd/geth, internal/ethapi: refactor transaction args` +- `trie/archiver: streaming subtree archival to fix OOM` + +Use the top-level package paths, comma-separated if multiple areas are affected. Only mention the directories with functional changes, interface changes that trickle all over the codebase should not generate an exhaustive list. The description should be a short, lowercase summary of the change. From f811bfe4fdec2fe1dd384a65db415848787a9ab8 Mon Sep 17 00:00:00 2001 From: Marius van der Wijden Date: Thu, 26 Feb 2026 13:53:46 +0100 Subject: [PATCH 066/161] core/vm: implement eip-7843: SLOTNUM (#33589) Implements the slotnum opcode as specified here: https://eips.ethereum.org/EIPS/eip-7843 --- beacon/engine/gen_blockparams.go | 6 +++ beacon/engine/gen_ed.go | 6 +++ beacon/engine/types.go | 15 +++++- cmd/evm/internal/t8ntool/block.go | 3 ++ cmd/evm/internal/t8ntool/execution.go | 3 ++ cmd/evm/internal/t8ntool/gen_header.go | 6 +++ cmd/evm/internal/t8ntool/gen_stenv.go | 6 +++ consensus/beacon/consensus.go | 8 +++ consensus/clique/clique.go | 5 ++ consensus/ethash/consensus.go | 5 ++ core/evm.go | 6 +++ core/gen_genesis.go | 6 +++ core/genesis.go | 8 +++ core/state_processor_test.go | 3 ++ core/types/block.go | 17 +++++++ core/types/gen_header_json.go | 6 +++ core/types/gen_header_rlp.go | 20 +++++--- core/vm/eips.go | 17 +++++++ core/vm/evm.go | 3 ++ core/vm/jump_table.go | 7 +++ core/vm/opcodes.go | 3 ++ eth/catalyst/api.go | 67 ++++++++++++++++++++++++++ graphql/graphql.go | 12 +++++ internal/ethapi/api.go | 3 ++ miner/payload_building.go | 6 +++ miner/worker.go | 8 +++ tests/block_test_util.go | 5 ++ tests/gen_btheader.go | 6 +++ 28 files changed, 259 insertions(+), 7 deletions(-) diff --git a/beacon/engine/gen_blockparams.go b/beacon/engine/gen_blockparams.go index b1f01b50ff..3a5d7ae593 100644 --- a/beacon/engine/gen_blockparams.go +++ b/beacon/engine/gen_blockparams.go @@ -21,6 +21,7 @@ func (p PayloadAttributes) MarshalJSON() ([]byte, error) { SuggestedFeeRecipient common.Address `json:"suggestedFeeRecipient" gencodec:"required"` Withdrawals []*types.Withdrawal `json:"withdrawals"` BeaconRoot *common.Hash `json:"parentBeaconBlockRoot"` + SlotNumber *hexutil.Uint64 `json:"slotNumber"` } var enc PayloadAttributes enc.Timestamp = hexutil.Uint64(p.Timestamp) @@ -28,6 +29,7 @@ func (p PayloadAttributes) MarshalJSON() ([]byte, error) { enc.SuggestedFeeRecipient = p.SuggestedFeeRecipient enc.Withdrawals = p.Withdrawals enc.BeaconRoot = p.BeaconRoot + enc.SlotNumber = (*hexutil.Uint64)(p.SlotNumber) return json.Marshal(&enc) } @@ -39,6 +41,7 @@ func (p *PayloadAttributes) UnmarshalJSON(input []byte) error { SuggestedFeeRecipient *common.Address `json:"suggestedFeeRecipient" gencodec:"required"` Withdrawals []*types.Withdrawal `json:"withdrawals"` BeaconRoot *common.Hash `json:"parentBeaconBlockRoot"` + SlotNumber *hexutil.Uint64 `json:"slotNumber"` } var dec PayloadAttributes if err := json.Unmarshal(input, &dec); err != nil { @@ -62,5 +65,8 @@ func (p *PayloadAttributes) UnmarshalJSON(input []byte) error { if dec.BeaconRoot != nil { p.BeaconRoot = dec.BeaconRoot } + if dec.SlotNumber != nil { + p.SlotNumber = (*uint64)(dec.SlotNumber) + } return nil } diff --git a/beacon/engine/gen_ed.go b/beacon/engine/gen_ed.go index 6893d64a16..b460368b84 100644 --- a/beacon/engine/gen_ed.go +++ b/beacon/engine/gen_ed.go @@ -34,6 +34,7 @@ func (e ExecutableData) MarshalJSON() ([]byte, error) { Withdrawals []*types.Withdrawal `json:"withdrawals"` BlobGasUsed *hexutil.Uint64 `json:"blobGasUsed"` ExcessBlobGas *hexutil.Uint64 `json:"excessBlobGas"` + SlotNumber *hexutil.Uint64 `json:"slotNumber"` } var enc ExecutableData enc.ParentHash = e.ParentHash @@ -58,6 +59,7 @@ func (e ExecutableData) MarshalJSON() ([]byte, error) { enc.Withdrawals = e.Withdrawals enc.BlobGasUsed = (*hexutil.Uint64)(e.BlobGasUsed) enc.ExcessBlobGas = (*hexutil.Uint64)(e.ExcessBlobGas) + enc.SlotNumber = (*hexutil.Uint64)(e.SlotNumber) return json.Marshal(&enc) } @@ -81,6 +83,7 @@ func (e *ExecutableData) UnmarshalJSON(input []byte) error { Withdrawals []*types.Withdrawal `json:"withdrawals"` BlobGasUsed *hexutil.Uint64 `json:"blobGasUsed"` ExcessBlobGas *hexutil.Uint64 `json:"excessBlobGas"` + SlotNumber *hexutil.Uint64 `json:"slotNumber"` } var dec ExecutableData if err := json.Unmarshal(input, &dec); err != nil { @@ -154,5 +157,8 @@ func (e *ExecutableData) UnmarshalJSON(input []byte) error { if dec.ExcessBlobGas != nil { e.ExcessBlobGas = (*uint64)(dec.ExcessBlobGas) } + if dec.SlotNumber != nil { + e.SlotNumber = (*uint64)(dec.SlotNumber) + } return nil } diff --git a/beacon/engine/types.go b/beacon/engine/types.go index 206bc02b0c..5c94e67de1 100644 --- a/beacon/engine/types.go +++ b/beacon/engine/types.go @@ -50,6 +50,13 @@ var ( // ExecutionPayloadV3 has the syntax of ExecutionPayloadV2 and appends the new // fields: blobGasUsed and excessBlobGas. PayloadV3 PayloadVersion = 0x3 + + // PayloadV4 is the identifier of ExecutionPayloadV4 introduced in amsterdam fork. + // + // https://github.com/ethereum/execution-apis/blob/main/src/engine/amsterdam.md#executionpayloadv4 + // ExecutionPayloadV4 has the syntax of ExecutionPayloadV3 and appends the new + // field slotNumber. + PayloadV4 PayloadVersion = 0x4 ) //go:generate go run github.com/fjl/gencodec -type PayloadAttributes -field-override payloadAttributesMarshaling -out gen_blockparams.go @@ -62,11 +69,13 @@ type PayloadAttributes struct { SuggestedFeeRecipient common.Address `json:"suggestedFeeRecipient" gencodec:"required"` Withdrawals []*types.Withdrawal `json:"withdrawals"` BeaconRoot *common.Hash `json:"parentBeaconBlockRoot"` + SlotNumber *uint64 `json:"slotNumber"` } // JSON type overrides for PayloadAttributes. type payloadAttributesMarshaling struct { - Timestamp hexutil.Uint64 + Timestamp hexutil.Uint64 + SlotNumber *hexutil.Uint64 } //go:generate go run github.com/fjl/gencodec -type ExecutableData -field-override executableDataMarshaling -out gen_ed.go @@ -90,6 +99,7 @@ type ExecutableData struct { Withdrawals []*types.Withdrawal `json:"withdrawals"` BlobGasUsed *uint64 `json:"blobGasUsed"` ExcessBlobGas *uint64 `json:"excessBlobGas"` + SlotNumber *uint64 `json:"slotNumber"` } // JSON type overrides for executableData. @@ -104,6 +114,7 @@ type executableDataMarshaling struct { Transactions []hexutil.Bytes BlobGasUsed *hexutil.Uint64 ExcessBlobGas *hexutil.Uint64 + SlotNumber *hexutil.Uint64 } // StatelessPayloadStatusV1 is the result of a stateless payload execution. @@ -313,6 +324,7 @@ func ExecutableDataToBlockNoHash(data ExecutableData, versionedHashes []common.H BlobGasUsed: data.BlobGasUsed, ParentBeaconRoot: beaconRoot, RequestsHash: requestsHash, + SlotNumber: data.SlotNumber, } return types.NewBlockWithHeader(header). WithBody(types.Body{Transactions: txs, Uncles: nil, Withdrawals: data.Withdrawals}), @@ -340,6 +352,7 @@ func BlockToExecutableData(block *types.Block, fees *big.Int, sidecars []*types. Withdrawals: block.Withdrawals(), BlobGasUsed: block.BlobGasUsed(), ExcessBlobGas: block.ExcessBlobGas(), + SlotNumber: block.SlotNumber(), } // Add blobs. diff --git a/cmd/evm/internal/t8ntool/block.go b/cmd/evm/internal/t8ntool/block.go index 37a6db9ffc..6148e9e248 100644 --- a/cmd/evm/internal/t8ntool/block.go +++ b/cmd/evm/internal/t8ntool/block.go @@ -56,6 +56,7 @@ type header struct { BlobGasUsed *uint64 `json:"blobGasUsed" rlp:"optional"` ExcessBlobGas *uint64 `json:"excessBlobGas" rlp:"optional"` ParentBeaconBlockRoot *common.Hash `json:"parentBeaconBlockRoot" rlp:"optional"` + SlotNumber *uint64 `json:"slotNumber" rlp:"optional"` } type headerMarshaling struct { @@ -68,6 +69,7 @@ type headerMarshaling struct { BaseFee *math.HexOrDecimal256 BlobGasUsed *math.HexOrDecimal64 ExcessBlobGas *math.HexOrDecimal64 + SlotNumber *math.HexOrDecimal64 } type bbInput struct { @@ -136,6 +138,7 @@ func (i *bbInput) ToBlock() *types.Block { BlobGasUsed: i.Header.BlobGasUsed, ExcessBlobGas: i.Header.ExcessBlobGas, ParentBeaconRoot: i.Header.ParentBeaconBlockRoot, + SlotNumber: i.Header.SlotNumber, } // Fill optional values. diff --git a/cmd/evm/internal/t8ntool/execution.go b/cmd/evm/internal/t8ntool/execution.go index 532d6e6b94..1979a8226e 100644 --- a/cmd/evm/internal/t8ntool/execution.go +++ b/cmd/evm/internal/t8ntool/execution.go @@ -102,6 +102,7 @@ type stEnv struct { ParentExcessBlobGas *uint64 `json:"parentExcessBlobGas,omitempty"` ParentBlobGasUsed *uint64 `json:"parentBlobGasUsed,omitempty"` ParentBeaconBlockRoot *common.Hash `json:"parentBeaconBlockRoot"` + SlotNumber *uint64 `json:"slotNumber"` } type stEnvMarshaling struct { @@ -120,6 +121,7 @@ type stEnvMarshaling struct { ExcessBlobGas *math.HexOrDecimal64 ParentExcessBlobGas *math.HexOrDecimal64 ParentBlobGasUsed *math.HexOrDecimal64 + SlotNumber *math.HexOrDecimal64 } type rejectedTx struct { @@ -195,6 +197,7 @@ func (pre *Prestate) Apply(vmConfig vm.Config, chainConfig *params.ChainConfig, ExcessBlobGas: pre.Env.ParentExcessBlobGas, BlobGasUsed: pre.Env.ParentBlobGasUsed, BaseFee: pre.Env.ParentBaseFee, + SlotNumber: pre.Env.SlotNumber, } header := &types.Header{ Time: pre.Env.Timestamp, diff --git a/cmd/evm/internal/t8ntool/gen_header.go b/cmd/evm/internal/t8ntool/gen_header.go index a8c8668978..f430feb6d2 100644 --- a/cmd/evm/internal/t8ntool/gen_header.go +++ b/cmd/evm/internal/t8ntool/gen_header.go @@ -38,6 +38,7 @@ func (h header) MarshalJSON() ([]byte, error) { BlobGasUsed *math.HexOrDecimal64 `json:"blobGasUsed" rlp:"optional"` ExcessBlobGas *math.HexOrDecimal64 `json:"excessBlobGas" rlp:"optional"` ParentBeaconBlockRoot *common.Hash `json:"parentBeaconBlockRoot" rlp:"optional"` + SlotNumber *math.HexOrDecimal64 `json:"slotNumber" rlp:"optional"` } var enc header enc.ParentHash = h.ParentHash @@ -60,6 +61,7 @@ func (h header) MarshalJSON() ([]byte, error) { enc.BlobGasUsed = (*math.HexOrDecimal64)(h.BlobGasUsed) enc.ExcessBlobGas = (*math.HexOrDecimal64)(h.ExcessBlobGas) enc.ParentBeaconBlockRoot = h.ParentBeaconBlockRoot + enc.SlotNumber = (*math.HexOrDecimal64)(h.SlotNumber) return json.Marshal(&enc) } @@ -86,6 +88,7 @@ func (h *header) UnmarshalJSON(input []byte) error { BlobGasUsed *math.HexOrDecimal64 `json:"blobGasUsed" rlp:"optional"` ExcessBlobGas *math.HexOrDecimal64 `json:"excessBlobGas" rlp:"optional"` ParentBeaconBlockRoot *common.Hash `json:"parentBeaconBlockRoot" rlp:"optional"` + SlotNumber *math.HexOrDecimal64 `json:"slotNumber" rlp:"optional"` } var dec header if err := json.Unmarshal(input, &dec); err != nil { @@ -155,5 +158,8 @@ func (h *header) UnmarshalJSON(input []byte) error { if dec.ParentBeaconBlockRoot != nil { h.ParentBeaconBlockRoot = dec.ParentBeaconBlockRoot } + if dec.SlotNumber != nil { + h.SlotNumber = (*uint64)(dec.SlotNumber) + } return nil } diff --git a/cmd/evm/internal/t8ntool/gen_stenv.go b/cmd/evm/internal/t8ntool/gen_stenv.go index d47db4a876..1b8e14abc6 100644 --- a/cmd/evm/internal/t8ntool/gen_stenv.go +++ b/cmd/evm/internal/t8ntool/gen_stenv.go @@ -37,6 +37,7 @@ func (s stEnv) MarshalJSON() ([]byte, error) { ParentExcessBlobGas *math.HexOrDecimal64 `json:"parentExcessBlobGas,omitempty"` ParentBlobGasUsed *math.HexOrDecimal64 `json:"parentBlobGasUsed,omitempty"` ParentBeaconBlockRoot *common.Hash `json:"parentBeaconBlockRoot"` + SlotNumber *math.HexOrDecimal64 `json:"slotNumber"` } var enc stEnv enc.Coinbase = common.UnprefixedAddress(s.Coinbase) @@ -59,6 +60,7 @@ func (s stEnv) MarshalJSON() ([]byte, error) { enc.ParentExcessBlobGas = (*math.HexOrDecimal64)(s.ParentExcessBlobGas) enc.ParentBlobGasUsed = (*math.HexOrDecimal64)(s.ParentBlobGasUsed) enc.ParentBeaconBlockRoot = s.ParentBeaconBlockRoot + enc.SlotNumber = (*math.HexOrDecimal64)(s.SlotNumber) return json.Marshal(&enc) } @@ -85,6 +87,7 @@ func (s *stEnv) UnmarshalJSON(input []byte) error { ParentExcessBlobGas *math.HexOrDecimal64 `json:"parentExcessBlobGas,omitempty"` ParentBlobGasUsed *math.HexOrDecimal64 `json:"parentBlobGasUsed,omitempty"` ParentBeaconBlockRoot *common.Hash `json:"parentBeaconBlockRoot"` + SlotNumber *math.HexOrDecimal64 `json:"slotNumber"` } var dec stEnv if err := json.Unmarshal(input, &dec); err != nil { @@ -154,5 +157,8 @@ func (s *stEnv) UnmarshalJSON(input []byte) error { if dec.ParentBeaconBlockRoot != nil { s.ParentBeaconBlockRoot = dec.ParentBeaconBlockRoot } + if dec.SlotNumber != nil { + s.SlotNumber = (*uint64)(dec.SlotNumber) + } return nil } diff --git a/consensus/beacon/consensus.go b/consensus/beacon/consensus.go index eed27407a5..45a480c50e 100644 --- a/consensus/beacon/consensus.go +++ b/consensus/beacon/consensus.go @@ -272,6 +272,14 @@ func (beacon *Beacon) verifyHeader(chain consensus.ChainHeaderReader, header, pa return err } } + + amsterdam := chain.Config().IsAmsterdam(header.Number, header.Time) + if amsterdam && header.SlotNumber == nil { + return errors.New("header is missing slotNumber") + } + if !amsterdam && header.SlotNumber != nil { + return fmt.Errorf("invalid slotNumber: have %d, expected nil", *header.SlotNumber) + } return nil } diff --git a/consensus/clique/clique.go b/consensus/clique/clique.go index 87cd407a71..28095011c1 100644 --- a/consensus/clique/clique.go +++ b/consensus/clique/clique.go @@ -310,6 +310,8 @@ func (c *Clique) verifyHeader(chain consensus.ChainHeaderReader, header *types.H return fmt.Errorf("invalid blobGasUsed: have %d, expected nil", *header.BlobGasUsed) case header.ParentBeaconRoot != nil: return fmt.Errorf("invalid parentBeaconRoot, have %#x, expected nil", *header.ParentBeaconRoot) + case header.SlotNumber != nil: + return fmt.Errorf("invalid slotNumber, have %#x, expected nil", *header.SlotNumber) } // All basic checks passed, verify cascading fields return c.verifyCascadingFields(chain, header, parents) @@ -694,6 +696,9 @@ func encodeSigHeader(w io.Writer, header *types.Header) { if header.ParentBeaconRoot != nil { panic("unexpected parent beacon root value in clique") } + if header.SlotNumber != nil { + panic("unexpected slot number value in clique") + } if err := rlp.Encode(w, enc); err != nil { panic("can't encode: " + err.Error()) } diff --git a/consensus/ethash/consensus.go b/consensus/ethash/consensus.go index f90001fc1a..61371e0636 100644 --- a/consensus/ethash/consensus.go +++ b/consensus/ethash/consensus.go @@ -283,6 +283,8 @@ func (ethash *Ethash) verifyHeader(chain consensus.ChainHeaderReader, header, pa return fmt.Errorf("invalid blobGasUsed: have %d, expected nil", *header.BlobGasUsed) case header.ParentBeaconRoot != nil: return fmt.Errorf("invalid parentBeaconRoot, have %#x, expected nil", *header.ParentBeaconRoot) + case header.SlotNumber != nil: + return fmt.Errorf("invalid slotNumber, have %#x, expected nil", *header.SlotNumber) } // Add some fake checks for tests if ethash.fakeDelay != nil { @@ -559,6 +561,9 @@ func (ethash *Ethash) SealHash(header *types.Header) (hash common.Hash) { if header.ParentBeaconRoot != nil { panic("parent beacon root set on ethash") } + if header.SlotNumber != nil { + panic("slot number set on ethash") + } rlp.Encode(hasher, enc) hasher.Sum(hash[:0]) return hash diff --git a/core/evm.go b/core/evm.go index 2e7e138b59..7430c0e21f 100644 --- a/core/evm.go +++ b/core/evm.go @@ -44,6 +44,7 @@ func NewEVMBlockContext(header *types.Header, chain ChainContext, author *common baseFee *big.Int blobBaseFee *big.Int random *common.Hash + slotNum uint64 ) // If we don't have an explicit author (i.e. not mining), extract from the header @@ -61,6 +62,10 @@ func NewEVMBlockContext(header *types.Header, chain ChainContext, author *common if header.Difficulty.Sign() == 0 { random = &header.MixDigest } + if header.SlotNumber != nil { + slotNum = *header.SlotNumber + } + return vm.BlockContext{ CanTransfer: CanTransfer, Transfer: Transfer, @@ -73,6 +78,7 @@ func NewEVMBlockContext(header *types.Header, chain ChainContext, author *common BlobBaseFee: blobBaseFee, GasLimit: header.GasLimit, Random: random, + SlotNum: slotNum, } } diff --git a/core/gen_genesis.go b/core/gen_genesis.go index 2028f98edc..b94825b185 100644 --- a/core/gen_genesis.go +++ b/core/gen_genesis.go @@ -34,6 +34,7 @@ func (g Genesis) MarshalJSON() ([]byte, error) { BaseFee *math.HexOrDecimal256 `json:"baseFeePerGas"` ExcessBlobGas *math.HexOrDecimal64 `json:"excessBlobGas"` BlobGasUsed *math.HexOrDecimal64 `json:"blobGasUsed"` + SlotNumber *uint64 `json:"slotNumber"` } var enc Genesis enc.Config = g.Config @@ -56,6 +57,7 @@ func (g Genesis) MarshalJSON() ([]byte, error) { enc.BaseFee = (*math.HexOrDecimal256)(g.BaseFee) enc.ExcessBlobGas = (*math.HexOrDecimal64)(g.ExcessBlobGas) enc.BlobGasUsed = (*math.HexOrDecimal64)(g.BlobGasUsed) + enc.SlotNumber = g.SlotNumber return json.Marshal(&enc) } @@ -77,6 +79,7 @@ func (g *Genesis) UnmarshalJSON(input []byte) error { BaseFee *math.HexOrDecimal256 `json:"baseFeePerGas"` ExcessBlobGas *math.HexOrDecimal64 `json:"excessBlobGas"` BlobGasUsed *math.HexOrDecimal64 `json:"blobGasUsed"` + SlotNumber *uint64 `json:"slotNumber"` } var dec Genesis if err := json.Unmarshal(input, &dec); err != nil { @@ -133,5 +136,8 @@ func (g *Genesis) UnmarshalJSON(input []byte) error { if dec.BlobGasUsed != nil { g.BlobGasUsed = (*uint64)(dec.BlobGasUsed) } + if dec.SlotNumber != nil { + g.SlotNumber = dec.SlotNumber + } return nil } diff --git a/core/genesis.go b/core/genesis.go index 983ad4c3cb..6edc6e6779 100644 --- a/core/genesis.go +++ b/core/genesis.go @@ -73,6 +73,7 @@ type Genesis struct { BaseFee *big.Int `json:"baseFeePerGas"` // EIP-1559 ExcessBlobGas *uint64 `json:"excessBlobGas"` // EIP-4844 BlobGasUsed *uint64 `json:"blobGasUsed"` // EIP-4844 + SlotNumber *uint64 `json:"slotNumber"` // EIP-7843 } // copy copies the genesis. @@ -122,6 +123,7 @@ func ReadGenesis(db ethdb.Database) (*Genesis, error) { genesis.BaseFee = genesisHeader.BaseFee genesis.ExcessBlobGas = genesisHeader.ExcessBlobGas genesis.BlobGasUsed = genesisHeader.BlobGasUsed + genesis.SlotNumber = genesisHeader.SlotNumber return &genesis, nil } @@ -547,6 +549,12 @@ func (g *Genesis) toBlockWithRoot(root common.Hash) *types.Block { if conf.IsPrague(num, g.Timestamp) { head.RequestsHash = &types.EmptyRequestsHash } + if conf.IsAmsterdam(num, g.Timestamp) { + head.SlotNumber = g.SlotNumber + if head.SlotNumber == nil { + head.SlotNumber = new(uint64) + } + } } return types.NewBlock(head, &types.Body{Withdrawals: withdrawals}, nil, trie.NewStackTrie(nil)) } diff --git a/core/state_processor_test.go b/core/state_processor_test.go index 3bf372800b..2700aed505 100644 --- a/core/state_processor_test.go +++ b/core/state_processor_test.go @@ -422,6 +422,9 @@ func GenerateBadBlock(parent *types.Block, engine consensus.Engine, txs types.Tr beaconRoot := common.HexToHash("0xbeac00") header.ParentBeaconRoot = &beaconRoot } + if config.IsAmsterdam(header.Number, header.Time) { + header.SlotNumber = new(uint64) + } // Assemble and return the final block for sealing body := &types.Body{Transactions: txs} if config.IsShanghai(header.Number, header.Time) { diff --git a/core/types/block.go b/core/types/block.go index c52c05a4c7..d092351b58 100644 --- a/core/types/block.go +++ b/core/types/block.go @@ -98,6 +98,9 @@ type Header struct { // RequestsHash was added by EIP-7685 and is ignored in legacy headers. RequestsHash *common.Hash `json:"requestsHash" rlp:"optional"` + + // SlotNumber was added by EIP-7843 and is ignored in legacy headers. + SlotNumber *uint64 `json:"slotNumber" rlp:"optional"` } // field type overrides for gencodec @@ -112,6 +115,7 @@ type headerMarshaling struct { Hash common.Hash `json:"hash"` // adds call to Hash() in MarshalJSON BlobGasUsed *hexutil.Uint64 ExcessBlobGas *hexutil.Uint64 + SlotNumber *hexutil.Uint64 } // Hash returns the block hash of the header, which is simply the keccak256 hash of its @@ -316,6 +320,10 @@ func CopyHeader(h *Header) *Header { cpy.RequestsHash = new(common.Hash) *cpy.RequestsHash = *h.RequestsHash } + if h.SlotNumber != nil { + cpy.SlotNumber = new(uint64) + *cpy.SlotNumber = *h.SlotNumber + } return &cpy } @@ -416,6 +424,15 @@ func (b *Block) BlobGasUsed() *uint64 { return blobGasUsed } +func (b *Block) SlotNumber() *uint64 { + var slotNum *uint64 + if b.header.SlotNumber != nil { + slotNum = new(uint64) + *slotNum = *b.header.SlotNumber + } + return slotNum +} + // Size returns the true RLP encoded storage size of the block, either by encoding // and returning it, or returning a previously cached value. func (b *Block) Size() uint64 { diff --git a/core/types/gen_header_json.go b/core/types/gen_header_json.go index 0af12500bd..16fb03f612 100644 --- a/core/types/gen_header_json.go +++ b/core/types/gen_header_json.go @@ -37,6 +37,7 @@ func (h Header) MarshalJSON() ([]byte, error) { ExcessBlobGas *hexutil.Uint64 `json:"excessBlobGas" rlp:"optional"` ParentBeaconRoot *common.Hash `json:"parentBeaconBlockRoot" rlp:"optional"` RequestsHash *common.Hash `json:"requestsHash" rlp:"optional"` + SlotNumber *hexutil.Uint64 `json:"slotNumber" rlp:"optional"` Hash common.Hash `json:"hash"` } var enc Header @@ -61,6 +62,7 @@ func (h Header) MarshalJSON() ([]byte, error) { enc.ExcessBlobGas = (*hexutil.Uint64)(h.ExcessBlobGas) enc.ParentBeaconRoot = h.ParentBeaconRoot enc.RequestsHash = h.RequestsHash + enc.SlotNumber = (*hexutil.Uint64)(h.SlotNumber) enc.Hash = h.Hash() return json.Marshal(&enc) } @@ -89,6 +91,7 @@ func (h *Header) UnmarshalJSON(input []byte) error { ExcessBlobGas *hexutil.Uint64 `json:"excessBlobGas" rlp:"optional"` ParentBeaconRoot *common.Hash `json:"parentBeaconBlockRoot" rlp:"optional"` RequestsHash *common.Hash `json:"requestsHash" rlp:"optional"` + SlotNumber *hexutil.Uint64 `json:"slotNumber" rlp:"optional"` } var dec Header if err := json.Unmarshal(input, &dec); err != nil { @@ -169,5 +172,8 @@ func (h *Header) UnmarshalJSON(input []byte) error { if dec.RequestsHash != nil { h.RequestsHash = dec.RequestsHash } + if dec.SlotNumber != nil { + h.SlotNumber = (*uint64)(dec.SlotNumber) + } return nil } diff --git a/core/types/gen_header_rlp.go b/core/types/gen_header_rlp.go index c79aa8a250..cfbd57ab8a 100644 --- a/core/types/gen_header_rlp.go +++ b/core/types/gen_header_rlp.go @@ -43,7 +43,8 @@ func (obj *Header) EncodeRLP(_w io.Writer) error { _tmp4 := obj.ExcessBlobGas != nil _tmp5 := obj.ParentBeaconRoot != nil _tmp6 := obj.RequestsHash != nil - if _tmp1 || _tmp2 || _tmp3 || _tmp4 || _tmp5 || _tmp6 { + _tmp7 := obj.SlotNumber != nil + if _tmp1 || _tmp2 || _tmp3 || _tmp4 || _tmp5 || _tmp6 || _tmp7 { if obj.BaseFee == nil { w.Write(rlp.EmptyString) } else { @@ -53,41 +54,48 @@ func (obj *Header) EncodeRLP(_w io.Writer) error { w.WriteBigInt(obj.BaseFee) } } - if _tmp2 || _tmp3 || _tmp4 || _tmp5 || _tmp6 { + if _tmp2 || _tmp3 || _tmp4 || _tmp5 || _tmp6 || _tmp7 { if obj.WithdrawalsHash == nil { w.Write([]byte{0x80}) } else { w.WriteBytes(obj.WithdrawalsHash[:]) } } - if _tmp3 || _tmp4 || _tmp5 || _tmp6 { + if _tmp3 || _tmp4 || _tmp5 || _tmp6 || _tmp7 { if obj.BlobGasUsed == nil { w.Write([]byte{0x80}) } else { w.WriteUint64((*obj.BlobGasUsed)) } } - if _tmp4 || _tmp5 || _tmp6 { + if _tmp4 || _tmp5 || _tmp6 || _tmp7 { if obj.ExcessBlobGas == nil { w.Write([]byte{0x80}) } else { w.WriteUint64((*obj.ExcessBlobGas)) } } - if _tmp5 || _tmp6 { + if _tmp5 || _tmp6 || _tmp7 { if obj.ParentBeaconRoot == nil { w.Write([]byte{0x80}) } else { w.WriteBytes(obj.ParentBeaconRoot[:]) } } - if _tmp6 { + if _tmp6 || _tmp7 { if obj.RequestsHash == nil { w.Write([]byte{0x80}) } else { w.WriteBytes(obj.RequestsHash[:]) } } + if _tmp7 { + if obj.SlotNumber == nil { + w.Write([]byte{0x80}) + } else { + w.WriteUint64((*obj.SlotNumber)) + } + } w.ListEnd(_tmp0) return w.Flush() } diff --git a/core/vm/eips.go b/core/vm/eips.go index dfcac4b930..3ccd9aaaf0 100644 --- a/core/vm/eips.go +++ b/core/vm/eips.go @@ -43,6 +43,7 @@ var activators = map[int]func(*JumpTable){ 7702: enable7702, 7939: enable7939, 8024: enable8024, + 7843: enable7843, } // EnableEIP enables the given EIP on the config. @@ -579,3 +580,19 @@ func enable7702(jt *JumpTable) { jt[STATICCALL].dynamicGas = gasStaticCallEIP7702 jt[DELEGATECALL].dynamicGas = gasDelegateCallEIP7702 } + +// opSlotNum enables the SLOTNUM opcode +func opSlotNum(pc *uint64, evm *EVM, scope *ScopeContext) ([]byte, error) { + scope.Stack.push(uint256.NewInt(evm.Context.SlotNum)) + return nil, nil +} + +// enable7843 enables the SLOTNUM opcode as specified in EIP-7843. +func enable7843(jt *JumpTable) { + jt[SLOTNUM] = &operation{ + execute: opSlotNum, + constantGas: GasQuickStep, + minStack: minStack(0, 1), + maxStack: maxStack(0, 1), + } +} diff --git a/core/vm/evm.go b/core/vm/evm.go index 7a31ab1126..97ae9468bf 100644 --- a/core/vm/evm.go +++ b/core/vm/evm.go @@ -66,6 +66,7 @@ type BlockContext struct { BaseFee *big.Int // Provides information for BASEFEE (0 if vm runs with NoBaseFee flag and 0 gas price) BlobBaseFee *big.Int // Provides information for BLOBBASEFEE (0 if vm runs with NoBaseFee flag and 0 blob gas price) Random *common.Hash // Provides information for PREVRANDAO + SlotNum uint64 // Provides information for SLOTNUM } // TxContext provides the EVM with information about a transaction. @@ -144,6 +145,8 @@ func NewEVM(blockCtx BlockContext, statedb StateDB, chainConfig *params.ChainCon evm.precompiles = activePrecompiledContracts(evm.chainRules) switch { + case evm.chainRules.IsAmsterdam: + evm.table = &amsterdamInstructionSet case evm.chainRules.IsOsaka: evm.table = &osakaInstructionSet case evm.chainRules.IsVerkle: diff --git a/core/vm/jump_table.go b/core/vm/jump_table.go index d7a4d9da1d..d8ec2b75fe 100644 --- a/core/vm/jump_table.go +++ b/core/vm/jump_table.go @@ -63,6 +63,7 @@ var ( verkleInstructionSet = newVerkleInstructionSet() pragueInstructionSet = newPragueInstructionSet() osakaInstructionSet = newOsakaInstructionSet() + amsterdamInstructionSet = newAmsterdamInstructionSet() ) // JumpTable contains the EVM opcodes supported at a given fork. @@ -92,6 +93,12 @@ func newVerkleInstructionSet() JumpTable { return validate(instructionSet) } +func newAmsterdamInstructionSet() JumpTable { + instructionSet := newOsakaInstructionSet() + enable7843(&instructionSet) // EIP-7843 (SLOTNUM opcode) + return validate(instructionSet) +} + func newOsakaInstructionSet() JumpTable { instructionSet := newPragueInstructionSet() enable7939(&instructionSet) // EIP-7939 (CLZ opcode) diff --git a/core/vm/opcodes.go b/core/vm/opcodes.go index 9a32126a80..cb871dca6d 100644 --- a/core/vm/opcodes.go +++ b/core/vm/opcodes.go @@ -105,6 +105,7 @@ const ( BASEFEE OpCode = 0x48 BLOBHASH OpCode = 0x49 BLOBBASEFEE OpCode = 0x4a + SLOTNUM OpCode = 0x4b ) // 0x50 range - 'storage' and execution. @@ -320,6 +321,7 @@ var opCodeToString = [256]string{ BASEFEE: "BASEFEE", BLOBHASH: "BLOBHASH", BLOBBASEFEE: "BLOBBASEFEE", + SLOTNUM: "SLOTNUM", // 0x50 range - 'storage' and execution. POP: "POP", @@ -502,6 +504,7 @@ var stringToOp = map[string]OpCode{ "BASEFEE": BASEFEE, "BLOBHASH": BLOBHASH, "BLOBBASEFEE": BLOBBASEFEE, + "SLOTNUM": SLOTNUM, "DELEGATECALL": DELEGATECALL, "STATICCALL": STATICCALL, "CODESIZE": CODESIZE, diff --git a/eth/catalyst/api.go b/eth/catalyst/api.go index b38d8fd5bf..1e019ffb15 100644 --- a/eth/catalyst/api.go +++ b/eth/catalyst/api.go @@ -212,6 +212,28 @@ func (api *ConsensusAPI) ForkchoiceUpdatedV3(update engine.ForkchoiceStateV1, pa return api.forkchoiceUpdated(update, params, engine.PayloadV3, false) } +// ForkchoiceUpdatedV4 is equivalent to V3 with the addition of slot number +// in the payload attributes. It supports only PayloadAttributesV4. +func (api *ConsensusAPI) ForkchoiceUpdatedV4(update engine.ForkchoiceStateV1, params *engine.PayloadAttributes) (engine.ForkChoiceResponse, error) { + if params != nil { + switch { + case params.Withdrawals == nil: + return engine.STATUS_INVALID, attributesErr("missing withdrawals") + case params.BeaconRoot == nil: + return engine.STATUS_INVALID, attributesErr("missing beacon root") + case params.SlotNumber == nil: + return engine.STATUS_INVALID, attributesErr("missing slot number") + case !api.checkFork(params.Timestamp, forks.Amsterdam): + return engine.STATUS_INVALID, unsupportedForkErr("fcuV4 must only be called for amsterdam payloads") + } + } + // TODO(matt): the spec requires that fcu is applied when called on a valid + // hash, even if params are wrong. To do this we need to split up + // forkchoiceUpdate into a function that only updates the head and then a + // function that kicks off block construction. + return api.forkchoiceUpdated(update, params, engine.PayloadV4, false) +} + func (api *ConsensusAPI) forkchoiceUpdated(update engine.ForkchoiceStateV1, payloadAttributes *engine.PayloadAttributes, payloadVersion engine.PayloadVersion, payloadWitness bool) (engine.ForkChoiceResponse, error) { api.forkchoiceLock.Lock() defer api.forkchoiceLock.Unlock() @@ -345,6 +367,7 @@ func (api *ConsensusAPI) forkchoiceUpdated(update engine.ForkchoiceStateV1, payl Random: payloadAttributes.Random, Withdrawals: payloadAttributes.Withdrawals, BeaconRoot: payloadAttributes.BeaconRoot, + SlotNum: payloadAttributes.SlotNumber, Version: payloadVersion, } id := args.Id() @@ -458,6 +481,18 @@ func (api *ConsensusAPI) GetPayloadV5(payloadID engine.PayloadID) (*engine.Execu }) } +// GetPayloadV6 returns a cached payload by id. This endpoint should only +// be used after the Amsterdam fork. +func (api *ConsensusAPI) GetPayloadV6(payloadID engine.PayloadID) (*engine.ExecutionPayloadEnvelope, error) { + return api.getPayload( + payloadID, + false, + []engine.PayloadVersion{engine.PayloadV4}, + []forks.Fork{ + forks.Amsterdam, + }) +} + // getPayload will retrieve the specified payload and verify it conforms to the // endpoint's allowed payload versions and forks. // @@ -700,6 +735,33 @@ func (api *ConsensusAPI) NewPayloadV4(ctx context.Context, params engine.Executa return api.newPayload(ctx, params, versionedHashes, beaconRoot, requests, false) } +// NewPayloadV5 creates an Eth1 block, inserts it in the chain, and returns the status of the chain. +func (api *ConsensusAPI) NewPayloadV5(ctx context.Context, params engine.ExecutableData, versionedHashes []common.Hash, beaconRoot *common.Hash, executionRequests []hexutil.Bytes) (engine.PayloadStatusV1, error) { + switch { + case params.Withdrawals == nil: + return invalidStatus, paramsErr("nil withdrawals post-shanghai") + case params.ExcessBlobGas == nil: + return invalidStatus, paramsErr("nil excessBlobGas post-cancun") + case params.BlobGasUsed == nil: + return invalidStatus, paramsErr("nil blobGasUsed post-cancun") + case versionedHashes == nil: + return invalidStatus, paramsErr("nil versionedHashes post-cancun") + case beaconRoot == nil: + return invalidStatus, paramsErr("nil beaconRoot post-cancun") + case executionRequests == nil: + return invalidStatus, paramsErr("nil executionRequests post-prague") + case params.SlotNumber == nil: + return invalidStatus, paramsErr("nil slotnumber post-amsterdam") + case !api.checkFork(params.Timestamp, forks.Amsterdam): + return invalidStatus, unsupportedForkErr("newPayloadV5 must only be called for amsterdam payloads") + } + requests := convertRequests(executionRequests) + if err := validateRequests(requests); err != nil { + return engine.PayloadStatusV1{Status: engine.INVALID}, engine.InvalidParams.With(err) + } + return api.newPayload(ctx, params, versionedHashes, beaconRoot, requests, false) +} + func (api *ConsensusAPI) newPayload(ctx context.Context, params engine.ExecutableData, versionedHashes []common.Hash, beaconRoot *common.Hash, requests [][]byte, witness bool) (result engine.PayloadStatusV1, err error) { // The locking here is, strictly, not required. Without these locks, this can happen: // @@ -735,6 +797,10 @@ func (api *ConsensusAPI) newPayload(ctx context.Context, params engine.Executabl if params.ExcessBlobGas != nil { ebg = strconv.Itoa(int(*params.ExcessBlobGas)) } + slotNum := "nil" + if params.SlotNumber != nil { + slotNum = strconv.Itoa(int(*params.SlotNumber)) + } log.Warn("Invalid NewPayload params", "params.Number", params.Number, "params.ParentHash", params.ParentHash, @@ -750,6 +816,7 @@ func (api *ConsensusAPI) newPayload(ctx context.Context, params engine.Executabl "params.BaseFeePerGas", params.BaseFeePerGas, "params.BlobGasUsed", bgu, "params.ExcessBlobGas", ebg, + "params.SlotNumber", slotNum, "len(params.Transactions)", len(params.Transactions), "len(params.Withdrawals)", len(params.Withdrawals), "beaconRoot", beaconRoot, diff --git a/graphql/graphql.go b/graphql/graphql.go index f5eec210a5..f25bfd127a 100644 --- a/graphql/graphql.go +++ b/graphql/graphql.go @@ -1093,6 +1093,18 @@ func (b *Block) ExcessBlobGas(ctx context.Context) (*hexutil.Uint64, error) { return &ret, nil } +func (b *Block) SlotNumber(ctx context.Context) (*hexutil.Uint64, error) { + header, err := b.resolveHeader(ctx) + if err != nil { + return nil, err + } + if header.SlotNumber == nil { + return nil, nil + } + ret := hexutil.Uint64(*header.SlotNumber) + return &ret, nil +} + // BlockFilterCriteria encapsulates criteria passed to a `logs` accessor inside // a block. type BlockFilterCriteria struct { diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go index ebdbbee202..4f3071cb03 100644 --- a/internal/ethapi/api.go +++ b/internal/ethapi/api.go @@ -971,6 +971,9 @@ func RPCMarshalHeader(head *types.Header) map[string]interface{} { if head.RequestsHash != nil { result["requestsHash"] = head.RequestsHash } + if head.SlotNumber != nil { + result["slotNumber"] = head.SlotNumber + } return result } diff --git a/miner/payload_building.go b/miner/payload_building.go index a049ce190a..65869dc66b 100644 --- a/miner/payload_building.go +++ b/miner/payload_building.go @@ -43,6 +43,7 @@ type BuildPayloadArgs struct { Random common.Hash // The provided randomness value Withdrawals types.Withdrawals // The provided withdrawals BeaconRoot *common.Hash // The provided beaconRoot (Cancun) + SlotNum *uint64 // The provided slotNumber Version engine.PayloadVersion // Versioning byte for payload id calculation. } @@ -57,6 +58,9 @@ func (args *BuildPayloadArgs) Id() engine.PayloadID { if args.BeaconRoot != nil { hasher.Write(args.BeaconRoot[:]) } + if args.SlotNum != nil { + binary.Write(hasher, binary.BigEndian, args.SlotNum) + } var out engine.PayloadID copy(out[:], hasher.Sum(nil)[:8]) out[0] = byte(args.Version) @@ -218,6 +222,7 @@ func (miner *Miner) buildPayload(args *BuildPayloadArgs, witness bool) (*Payload random: args.Random, withdrawals: args.Withdrawals, beaconRoot: args.BeaconRoot, + slotNum: args.SlotNum, noTxs: true, } empty := miner.generateWork(emptyParams, witness) @@ -248,6 +253,7 @@ func (miner *Miner) buildPayload(args *BuildPayloadArgs, witness bool) (*Payload random: args.Random, withdrawals: args.Withdrawals, beaconRoot: args.BeaconRoot, + slotNum: args.SlotNum, noTxs: false, } diff --git a/miner/worker.go b/miner/worker.go index 9e2140bd04..b5fb7a344d 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -111,6 +111,7 @@ type generateParams struct { random common.Hash // The randomness generated by beacon chain, empty before the merge withdrawals types.Withdrawals // List of withdrawals to include in block (shanghai field) beaconRoot *common.Hash // The beacon root (cancun field). + slotNum *uint64 // The slot number (amsterdam field). noTxs bool // Flag whether an empty block without any transaction is expected forceOverrides bool // Flag whether we should overwrite extraData and transactions @@ -274,6 +275,13 @@ func (miner *Miner) prepareWork(genParams *generateParams, witness bool) (*envir header.ExcessBlobGas = &excessBlobGas header.ParentBeaconRoot = genParams.beaconRoot } + // Apply EIP-7843. + if miner.chainConfig.IsAmsterdam(header.Number, header.Time) { + if genParams.slotNum == nil { + return nil, errors.New("no slot number set post-amsterdam") + } + header.SlotNumber = genParams.slotNum + } // Could potentially happen if starting to mine in an odd state. // Note genParams.coinbase can be different with header.Coinbase // since clique algorithm can modify the coinbase field in header. diff --git a/tests/block_test_util.go b/tests/block_test_util.go index 4f6ab65c1a..dc680fea14 100644 --- a/tests/block_test_util.go +++ b/tests/block_test_util.go @@ -97,6 +97,7 @@ type btHeader struct { BlobGasUsed *uint64 ExcessBlobGas *uint64 ParentBeaconBlockRoot *common.Hash + SlotNumber *uint64 } type btHeaderMarshaling struct { @@ -109,6 +110,7 @@ type btHeaderMarshaling struct { BaseFeePerGas *math.HexOrDecimal256 BlobGasUsed *math.HexOrDecimal64 ExcessBlobGas *math.HexOrDecimal64 + SlotNumber *math.HexOrDecimal64 } func (t *BlockTest) Run(snapshotter bool, scheme string, witness bool, tracer *tracing.Hooks, postCheck func(error, *core.BlockChain)) (result error) { @@ -343,6 +345,9 @@ func validateHeader(h *btHeader, h2 *types.Header) error { if !reflect.DeepEqual(h.ParentBeaconBlockRoot, h2.ParentBeaconRoot) { return fmt.Errorf("parentBeaconBlockRoot: want: %v have: %v", h.ParentBeaconBlockRoot, h2.ParentBeaconRoot) } + if !reflect.DeepEqual(h.SlotNumber, h2.SlotNumber) { + return fmt.Errorf("slotNumber: want: %v have: %v", h.SlotNumber, h2.SlotNumber) + } return nil } diff --git a/tests/gen_btheader.go b/tests/gen_btheader.go index 80ad89e03b..eb6d9a8271 100644 --- a/tests/gen_btheader.go +++ b/tests/gen_btheader.go @@ -38,6 +38,7 @@ func (b btHeader) MarshalJSON() ([]byte, error) { BlobGasUsed *math.HexOrDecimal64 ExcessBlobGas *math.HexOrDecimal64 ParentBeaconBlockRoot *common.Hash + SlotNumber *math.HexOrDecimal64 } var enc btHeader enc.Bloom = b.Bloom @@ -61,6 +62,7 @@ func (b btHeader) MarshalJSON() ([]byte, error) { enc.BlobGasUsed = (*math.HexOrDecimal64)(b.BlobGasUsed) enc.ExcessBlobGas = (*math.HexOrDecimal64)(b.ExcessBlobGas) enc.ParentBeaconBlockRoot = b.ParentBeaconBlockRoot + enc.SlotNumber = (*math.HexOrDecimal64)(b.SlotNumber) return json.Marshal(&enc) } @@ -88,6 +90,7 @@ func (b *btHeader) UnmarshalJSON(input []byte) error { BlobGasUsed *math.HexOrDecimal64 ExcessBlobGas *math.HexOrDecimal64 ParentBeaconBlockRoot *common.Hash + SlotNumber *math.HexOrDecimal64 } var dec btHeader if err := json.Unmarshal(input, &dec); err != nil { @@ -156,5 +159,8 @@ func (b *btHeader) UnmarshalJSON(input []byte) error { if dec.ParentBeaconBlockRoot != nil { b.ParentBeaconBlockRoot = dec.ParentBeaconBlockRoot } + if dec.SlotNumber != nil { + b.SlotNumber = (*uint64)(dec.SlotNumber) + } return nil } From 8a4345611dc64e9c10414cb23dd0d5d38f8e532c Mon Sep 17 00:00:00 2001 From: Sina M <1591639+s1na@users.noreply.github.com> Date: Thu, 26 Feb 2026 13:55:53 +0100 Subject: [PATCH 067/161] build: update ubuntu distros list (#33864) The`plucky` and `oracular` have reached end of life. That's why launchpad isn't building them anymore: https://launchpad.net/~ethereum/+archive/ubuntu/ethereum/+packages. --- build/ci.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/build/ci.go b/build/ci.go index abb7c4997f..4d0a1d7e35 100644 --- a/build/ci.go +++ b/build/ci.go @@ -168,8 +168,6 @@ var ( "focal", // 20.04, EOL: 04/2030 "jammy", // 22.04, EOL: 04/2032 "noble", // 24.04, EOL: 04/2034 - "oracular", // 24.10, EOL: 07/2025 - "plucky", // 25.04, EOL: 01/2026 } // This is where the tests should be unpacked. From be92f5487e67939b8dbbc9675d6c15be76ffd18d Mon Sep 17 00:00:00 2001 From: rjl493456442 Date: Thu, 26 Feb 2026 23:00:02 +0800 Subject: [PATCH 068/161] trie: error out for unexpected key-value pairs preceding the range (#33898) --- trie/proof.go | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/trie/proof.go b/trie/proof.go index 1a06ed5d5e..58075daf9b 100644 --- a/trie/proof.go +++ b/trie/proof.go @@ -454,7 +454,7 @@ func hasRightElement(node node, key []byte) bool { // // The firstKey is paired with firstProof, not necessarily the same as keys[0] // (unless firstProof is an existent proof). Similarly, lastKey and lastProof -// are paired. +// are paired. The firstKey should be less than or equal to all keys in the list. // // Expect the normal case, this function can also be used to verify the following // range proofs: @@ -520,9 +520,14 @@ func VerifyRangeProof(rootHash common.Hash, firstKey []byte, keys [][]byte, valu } return false, nil } - var lastKey = keys[len(keys)-1] + // Short circuit if the key of first element is greater than firstKey. + // A nil firstKey slice is equivalent to an empty slice. + if bytes.Compare(firstKey, keys[0]) > 0 { + return false, errors.New("unexpected key-value pairs preceding the requested range") + } // Special case, there is only one element and two edge keys are same. // In this case, we can't construct two edge paths. So handle it here. + var lastKey = keys[len(keys)-1] if len(keys) == 1 && bytes.Equal(firstKey, lastKey) { root, val, err := proofToPath(rootHash, nil, firstKey, proof, false) if err != nil { @@ -577,7 +582,9 @@ func VerifyRangeProof(rootHash common.Hash, firstKey []byte, keys [][]byte, valu tr.root = nil } for index, key := range keys { - tr.Update(key, values[index]) + if err := tr.Update(key, values[index]); err != nil { + return false, err + } } if tr.Hash() != rootHash { return false, fmt.Errorf("invalid proof, want hash %x, got %x", rootHash, tr.Hash()) From 1b1133d669e198028eaf4b686428131e44c6f1f3 Mon Sep 17 00:00:00 2001 From: Marius van der Wijden Date: Thu, 26 Feb 2026 20:04:25 +0100 Subject: [PATCH 069/161] go.mod: update ckzg (#33901) --- cmd/keeper/go.mod | 4 ++-- cmd/keeper/go.sum | 8 ++++---- go.mod | 4 ++-- go.sum | 8 ++++---- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/cmd/keeper/go.mod b/cmd/keeper/go.mod index 388b2e0610..6df7372cbd 100644 --- a/cmd/keeper/go.mod +++ b/cmd/keeper/go.mod @@ -17,7 +17,7 @@ require ( github.com/deckarep/golang-set/v2 v2.6.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect github.com/emicklei/dot v1.6.2 // indirect - github.com/ethereum/c-kzg-4844/v2 v2.1.5 // indirect + github.com/ethereum/c-kzg-4844/v2 v2.1.6 // indirect github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab // indirect github.com/ferranbt/fastssz v0.1.4 // indirect github.com/go-logr/logr v1.4.3 // indirect @@ -31,7 +31,7 @@ require ( github.com/minio/sha256-simd v1.0.0 // indirect github.com/mitchellh/mapstructure v1.4.1 // indirect github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible // indirect - github.com/supranational/blst v0.3.16-0.20250831170142-f48500c1fdbe // indirect + github.com/supranational/blst v0.3.16 // indirect github.com/tklauser/go-sysconf v0.3.12 // indirect github.com/tklauser/numcpus v0.6.1 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect diff --git a/cmd/keeper/go.sum b/cmd/keeper/go.sum index 2c24542c3b..2be7fa5616 100644 --- a/cmd/keeper/go.sum +++ b/cmd/keeper/go.sum @@ -40,8 +40,8 @@ github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1 github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= github.com/emicklei/dot v1.6.2 h1:08GN+DD79cy/tzN6uLCT84+2Wk9u+wvqP+Hkx/dIR8A= github.com/emicklei/dot v1.6.2/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s= -github.com/ethereum/c-kzg-4844/v2 v2.1.5 h1:aVtoLK5xwJ6c5RiqO8g8ptJ5KU+2Hdquf6G3aXiHh5s= -github.com/ethereum/c-kzg-4844/v2 v2.1.5/go.mod h1:u59hRTTah4Co6i9fDWtiCjTrblJv0UwsqZKCc0GfgUs= +github.com/ethereum/c-kzg-4844/v2 v2.1.6 h1:xQymkKCT5E2Jiaoqf3v4wsNgjZLY0lRSkZn27fRjSls= +github.com/ethereum/c-kzg-4844/v2 v2.1.6/go.mod h1:8HMkUZ5JRv4hpw/XUrYWSQNAUzhHMg2UDb/U+5m+XNw= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab h1:rvv6MJhy07IMfEKuARQ9TKojGqLVNxQajaXEp/BoqSk= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab/go.mod h1:IuLm4IsPipXKF7CW5Lzf68PIbZ5yl7FFd74l/E0o9A8= github.com/ferranbt/fastssz v0.1.4 h1:OCDB+dYDEQDvAgtAGnTSidK1Pe2tW3nFV40XyMkTeDY= @@ -111,8 +111,8 @@ github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1 github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= -github.com/supranational/blst v0.3.16-0.20250831170142-f48500c1fdbe h1:nbdqkIGOGfUAD54q1s2YBcBz/WcsxCO9HUQ4aGV5hUw= -github.com/supranational/blst v0.3.16-0.20250831170142-f48500c1fdbe/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= +github.com/supranational/blst v0.3.16 h1:bTDadT+3fK497EvLdWRQEjiGnUtzJ7jjIUMF0jqwYhE= +github.com/supranational/blst v0.3.16/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= diff --git a/go.mod b/go.mod index e15d29a6c5..d96a221836 100644 --- a/go.mod +++ b/go.mod @@ -21,7 +21,7 @@ require ( github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 github.com/donovanhide/eventsource v0.0.0-20210830082556-c59027999da0 github.com/dop251/goja v0.0.0-20230605162241-28ee0ee714f3 - github.com/ethereum/c-kzg-4844/v2 v2.1.5 + github.com/ethereum/c-kzg-4844/v2 v2.1.6 github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab github.com/fatih/color v1.16.0 github.com/ferranbt/fastssz v0.1.4 @@ -58,7 +58,7 @@ require ( github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible github.com/status-im/keycard-go v0.2.0 github.com/stretchr/testify v1.11.1 - github.com/supranational/blst v0.3.16-0.20250831170142-f48500c1fdbe + github.com/supranational/blst v0.3.16 github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 github.com/urfave/cli/v2 v2.27.5 go.opentelemetry.io/otel v1.39.0 diff --git a/go.sum b/go.sum index fe2a64eaec..4f1bdd377c 100644 --- a/go.sum +++ b/go.sum @@ -113,8 +113,8 @@ github.com/dop251/goja_nodejs v0.0.0-20210225215109-d91c329300e7/go.mod h1:hn7BA github.com/dop251/goja_nodejs v0.0.0-20211022123610-8dd9abb0616d/go.mod h1:DngW8aVqWbuLRMHItjPUyqdj+HWPvnQe8V8y1nDpIbM= github.com/emicklei/dot v1.6.2 h1:08GN+DD79cy/tzN6uLCT84+2Wk9u+wvqP+Hkx/dIR8A= github.com/emicklei/dot v1.6.2/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s= -github.com/ethereum/c-kzg-4844/v2 v2.1.5 h1:aVtoLK5xwJ6c5RiqO8g8ptJ5KU+2Hdquf6G3aXiHh5s= -github.com/ethereum/c-kzg-4844/v2 v2.1.5/go.mod h1:u59hRTTah4Co6i9fDWtiCjTrblJv0UwsqZKCc0GfgUs= +github.com/ethereum/c-kzg-4844/v2 v2.1.6 h1:xQymkKCT5E2Jiaoqf3v4wsNgjZLY0lRSkZn27fRjSls= +github.com/ethereum/c-kzg-4844/v2 v2.1.6/go.mod h1:8HMkUZ5JRv4hpw/XUrYWSQNAUzhHMg2UDb/U+5m+XNw= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab h1:rvv6MJhy07IMfEKuARQ9TKojGqLVNxQajaXEp/BoqSk= github.com/ethereum/go-bigmodexpfix v0.0.0-20250911101455-f9e208c548ab/go.mod h1:IuLm4IsPipXKF7CW5Lzf68PIbZ5yl7FFd74l/E0o9A8= github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= @@ -360,8 +360,8 @@ github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXl github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= -github.com/supranational/blst v0.3.16-0.20250831170142-f48500c1fdbe h1:nbdqkIGOGfUAD54q1s2YBcBz/WcsxCO9HUQ4aGV5hUw= -github.com/supranational/blst v0.3.16-0.20250831170142-f48500c1fdbe/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= +github.com/supranational/blst v0.3.16 h1:bTDadT+3fK497EvLdWRQEjiGnUtzJ7jjIUMF0jqwYhE= +github.com/supranational/blst v0.3.16/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= From 7793e00f0dce5555e3e751c25189fedd4b329fbb Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Thu, 26 Feb 2026 21:18:00 +0100 Subject: [PATCH 070/161] Dockerfile: upgrade to Go 1.26 (#33899) We didn't upgrade to 1.25, so this jumps over one version. I want to upgrade all builds to Go 1.26 soon, but let's start with the Docker build to get a sense of any possible issues. --- Dockerfile | 2 +- Dockerfile.alltools | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 9b70e9e8a0..940e568cab 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,7 +4,7 @@ ARG VERSION="" ARG BUILDNUM="" # Build Geth in a stock Go builder container -FROM golang:1.24-alpine AS builder +FROM golang:1.26-alpine AS builder RUN apk add --no-cache gcc musl-dev linux-headers git diff --git a/Dockerfile.alltools b/Dockerfile.alltools index ac9303c678..ae2ca931ae 100644 --- a/Dockerfile.alltools +++ b/Dockerfile.alltools @@ -4,7 +4,7 @@ ARG VERSION="" ARG BUILDNUM="" # Build Geth in a stock Go builder container -FROM golang:1.24-alpine AS builder +FROM golang:1.26-alpine AS builder RUN apk add --no-cache gcc musl-dev linux-headers git From 95c6b05806c2ffa0e987f430c10899a6398fa587 Mon Sep 17 00:00:00 2001 From: Guillaume Ballet <3272758+gballet@users.noreply.github.com> Date: Fri, 27 Feb 2026 11:35:13 +0100 Subject: [PATCH 071/161] trie/bintrie: fix endianness in code chunk key computation (#33900) The endianness was wrong, which means that the code chunks were stored in the wrong location in the tree. --- trie/bintrie/trie.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/trie/bintrie/trie.go b/trie/bintrie/trie.go index ecdd002331..a509c471b8 100644 --- a/trie/bintrie/trie.go +++ b/trie/bintrie/trie.go @@ -384,7 +384,7 @@ func (t *BinaryTrie) UpdateContractCode(addr common.Address, codeHash common.Has if groupOffset == 0 /* start of new group */ || chunknr == 0 /* first chunk in header group */ { values = make([][]byte, StemNodeWidth) var offset [HashSize]byte - binary.LittleEndian.PutUint64(offset[24:], chunknr+128) + binary.BigEndian.PutUint64(offset[24:], chunknr+128) key = GetBinaryTreeKey(addr, offset[:]) } values[groupOffset] = chunks[i : i+HashSize] From cee751a1edc34a3f04be13e794e504f59ac11fc0 Mon Sep 17 00:00:00 2001 From: Delweng Date: Fri, 27 Feb 2026 19:51:01 +0800 Subject: [PATCH 072/161] eth: fix the flaky test of TestSnapSyncDisabling68 (#33896) fix the flaky test found in https://ci.appveyor.com/project/ethereum/go-ethereum/builds/53601688/job/af5ccvufpm9usq39 1. increase the timeout from 3+1s to 15s, and use timer instead of sleep(in the CI env, it may need more time to sync the 1024 blocks) 2. add `synced.Load()` to ensure the full async chain is finished Signed-off-by: Delweng --- eth/sync_test.go | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/eth/sync_test.go b/eth/sync_test.go index 509b836f82..dad816229a 100644 --- a/eth/sync_test.go +++ b/eth/sync_test.go @@ -82,15 +82,18 @@ func testSnapSyncDisabling(t *testing.T, ethVer uint, snapVer uint) { if err := empty.handler.downloader.BeaconSync(full.chain.CurrentBlock(), nil); err != nil { t.Fatal("sync failed:", err) } - // Downloader internally has to wait for a timer (3s) to be expired before - // exiting. Poll after to determine if sync is disabled. - time.Sleep(time.Second * 3) - for timeout := time.After(time.Second); ; { + // Snap sync and mode switching happen asynchronously, poll for completion. + timeout := time.NewTimer(15 * time.Second) + tick := time.NewTicker(100 * time.Millisecond) + defer timeout.Stop() + defer tick.Stop() + + for { select { - case <-timeout: + case <-timeout.C: t.Fatalf("snap sync not disabled after successful synchronisation") - case <-time.After(100 * time.Millisecond): - if empty.handler.downloader.ConfigSyncMode() == ethconfig.FullSync { + case <-tick.C: + if empty.handler.synced.Load() && empty.handler.downloader.ConfigSyncMode() == ethconfig.FullSync { return } } From 723aae2b4e77af7b2a1173280a05382c739ca4e1 Mon Sep 17 00:00:00 2001 From: Bosul Mun Date: Sun, 1 Mar 2026 05:43:40 +0900 Subject: [PATCH 073/161] eth/protocols/eth: drop protocol version eth/68 (#33511) With this, we are dropping support for protocol version eth/68. The only supported version is eth/69 now. The p2p receipt encoding logic can be simplified a lot, and processing of receipts during sync gets a little faster because we now transform the network encoding into the database encoding directly, without decoding the receipts first. --------- Co-authored-by: Felix Lange --- cmd/devp2p/internal/ethtest/conn.go | 16 +- cmd/devp2p/internal/ethtest/suite.go | 2 +- eth/downloader/downloader_test.go | 89 ++---- eth/downloader/skeleton_test.go | 4 +- eth/handler_eth_test.go | 45 ++- eth/protocols/eth/handler.go | 23 +- eth/protocols/eth/handler_test.go | 18 +- eth/protocols/eth/handlers.go | 86 +----- eth/protocols/eth/handshake.go | 64 +---- eth/protocols/eth/handshake_test.go | 15 +- eth/protocols/eth/peer.go | 8 +- eth/protocols/eth/protocol.go | 75 +---- eth/protocols/eth/protocol_test.go | 20 +- eth/protocols/eth/receipt.go | 393 +++++++-------------------- eth/protocols/eth/receipt_test.go | 52 +--- eth/sync_test.go | 2 +- 16 files changed, 206 insertions(+), 706 deletions(-) diff --git a/cmd/devp2p/internal/ethtest/conn.go b/cmd/devp2p/internal/ethtest/conn.go index 5182d71ce1..98baba81a4 100644 --- a/cmd/devp2p/internal/ethtest/conn.go +++ b/cmd/devp2p/internal/ethtest/conn.go @@ -155,7 +155,7 @@ func (c *Conn) ReadEth() (any, error) { var msg any switch int(code) { case eth.StatusMsg: - msg = new(eth.StatusPacket69) + msg = new(eth.StatusPacket) case eth.GetBlockHeadersMsg: msg = new(eth.GetBlockHeadersPacket) case eth.BlockHeadersMsg: @@ -164,10 +164,6 @@ func (c *Conn) ReadEth() (any, error) { msg = new(eth.GetBlockBodiesPacket) case eth.BlockBodiesMsg: msg = new(eth.BlockBodiesPacket) - case eth.NewBlockMsg: - msg = new(eth.NewBlockPacket) - case eth.NewBlockHashesMsg: - msg = new(eth.NewBlockHashesPacket) case eth.TransactionsMsg: msg = new(eth.TransactionsPacket) case eth.NewPooledTransactionHashesMsg: @@ -229,7 +225,7 @@ func (c *Conn) ReadSnap() (any, error) { } // dialAndPeer creates a peer connection and runs the handshake. -func (s *Suite) dialAndPeer(status *eth.StatusPacket69) (*Conn, error) { +func (s *Suite) dialAndPeer(status *eth.StatusPacket) (*Conn, error) { c, err := s.dial() if err != nil { return nil, err @@ -242,7 +238,7 @@ func (s *Suite) dialAndPeer(status *eth.StatusPacket69) (*Conn, error) { // peer performs both the protocol handshake and the status message // exchange with the node in order to peer with it. -func (c *Conn) peer(chain *Chain, status *eth.StatusPacket69) error { +func (c *Conn) peer(chain *Chain, status *eth.StatusPacket) error { if err := c.handshake(); err != nil { return fmt.Errorf("handshake failed: %v", err) } @@ -315,7 +311,7 @@ func (c *Conn) negotiateEthProtocol(caps []p2p.Cap) { } // statusExchange performs a `Status` message exchange with the given node. -func (c *Conn) statusExchange(chain *Chain, status *eth.StatusPacket69) error { +func (c *Conn) statusExchange(chain *Chain, status *eth.StatusPacket) error { loop: for { code, data, err := c.Read() @@ -324,7 +320,7 @@ loop: } switch code { case eth.StatusMsg + protoOffset(ethProto): - msg := new(eth.StatusPacket69) + msg := new(eth.StatusPacket) if err := rlp.DecodeBytes(data, &msg); err != nil { return fmt.Errorf("error decoding status packet: %w", err) } @@ -363,7 +359,7 @@ loop: } if status == nil { // default status message - status = ð.StatusPacket69{ + status = ð.StatusPacket{ ProtocolVersion: uint32(c.negotiatedProtoVersion), NetworkID: chain.config.ChainID.Uint64(), Genesis: chain.blocks[0].Hash(), diff --git a/cmd/devp2p/internal/ethtest/suite.go b/cmd/devp2p/internal/ethtest/suite.go index 8bb488e358..7560c13137 100644 --- a/cmd/devp2p/internal/ethtest/suite.go +++ b/cmd/devp2p/internal/ethtest/suite.go @@ -447,7 +447,7 @@ func (s *Suite) TestGetReceipts(t *utesting.T) { t.Fatalf("could not write to connection: %v", err) } // Wait for response. - resp := new(eth.ReceiptsPacket[*eth.ReceiptList69]) + resp := new(eth.ReceiptsPacket) if err := conn.ReadMsg(ethProto, eth.ReceiptsMsg, &resp); err != nil { t.Fatalf("error reading block bodies msg: %v", err) } diff --git a/eth/downloader/downloader_test.go b/eth/downloader/downloader_test.go index e5d4a7c59b..f113cf3e9f 100644 --- a/eth/downloader/downloader_test.go +++ b/eth/downloader/downloader_test.go @@ -17,7 +17,6 @@ package downloader import ( - "fmt" "math/big" "sync" "sync/atomic" @@ -261,23 +260,24 @@ func (dlp *downloadTesterPeer) RequestBodies(hashes []common.Hash, sink chan *et // peer in the download tester. The returned function can be used to retrieve // batches of block receipts from the particularly requested peer. func (dlp *downloadTesterPeer) RequestReceipts(hashes []common.Hash, sink chan *eth.Response) (*eth.Request, error) { - blobs := eth.ServiceGetReceiptsQuery68(dlp.chain, hashes) + blobs := eth.ServiceGetReceiptsQuery(dlp.chain, hashes) + receipts := make([]types.Receipts, blobs.Len()) - receipts := make([]types.Receipts, len(blobs)) - for i, blob := range blobs { - rlp.DecodeBytes(blob, &receipts[i]) - } + // compute hashes + hashes = make([]common.Hash, blobs.Len()) hasher := trie.NewStackTrie(nil) - hashes = make([]common.Hash, len(receipts)) - for i, receipt := range receipts { - hashes[i] = types.DeriveSha(receipt, hasher) + receiptLists, err := blobs.Items() + if err != nil { + panic(err) } - req := ð.Request{ - Peer: dlp.id, + for i, rl := range receiptLists { + hashes[i] = types.DeriveSha(rl.Derivable(), hasher) } + + // deliver the response right away resp := eth.ReceiptsRLPResponse(types.EncodeBlockReceiptLists(receipts)) res := ð.Response{ - Req: req, + Req: ð.Request{Peer: dlp.id}, Res: &resp, Meta: hashes, Time: 1, @@ -286,7 +286,7 @@ func (dlp *downloadTesterPeer) RequestReceipts(hashes []common.Hash, sink chan * go func() { sink <- res }() - return req, nil + return res.Req, nil } // ID retrieves the peer's unique identifier. @@ -398,8 +398,8 @@ func assertOwnChain(t *testing.T, tester *downloadTester, length int) { } } -func TestCanonicalSynchronisation68Full(t *testing.T) { testCanonSync(t, eth.ETH68, FullSync) } -func TestCanonicalSynchronisation68Snap(t *testing.T) { testCanonSync(t, eth.ETH68, SnapSync) } +func TestCanonicalSynchronisationFull(t *testing.T) { testCanonSync(t, eth.ETH69, FullSync) } +func TestCanonicalSynchronisationSnap(t *testing.T) { testCanonSync(t, eth.ETH69, SnapSync) } func testCanonSync(t *testing.T, protocol uint, mode SyncMode) { success := make(chan struct{}) @@ -426,8 +426,8 @@ func testCanonSync(t *testing.T, protocol uint, mode SyncMode) { // Tests that if a large batch of blocks are being downloaded, it is throttled // until the cached blocks are retrieved. -func TestThrottling68Full(t *testing.T) { testThrottling(t, eth.ETH68, FullSync) } -func TestThrottling68Snap(t *testing.T) { testThrottling(t, eth.ETH68, SnapSync) } +func TestThrottlingFull(t *testing.T) { testThrottling(t, eth.ETH69, FullSync) } +func TestThrottlingSnap(t *testing.T) { testThrottling(t, eth.ETH69, SnapSync) } func testThrottling(t *testing.T, protocol uint, mode SyncMode) { tester := newTester(t, mode) @@ -504,8 +504,8 @@ func testThrottling(t *testing.T, protocol uint, mode SyncMode) { } // Tests that a canceled download wipes all previously accumulated state. -func TestCancel68Full(t *testing.T) { testCancel(t, eth.ETH68, FullSync) } -func TestCancel68Snap(t *testing.T) { testCancel(t, eth.ETH68, SnapSync) } +func TestCancelFull(t *testing.T) { testCancel(t, eth.ETH69, FullSync) } +func TestCancelSnap(t *testing.T) { testCancel(t, eth.ETH69, SnapSync) } func testCancel(t *testing.T, protocol uint, mode SyncMode) { complete := make(chan struct{}) @@ -534,49 +534,10 @@ func testCancel(t *testing.T, protocol uint, mode SyncMode) { } } -// Tests that synchronisations behave well in multi-version protocol environments -// and not wreak havoc on other nodes in the network. -func TestMultiProtoSynchronisation68Full(t *testing.T) { testMultiProtoSync(t, eth.ETH68, FullSync) } -func TestMultiProtoSynchronisation68Snap(t *testing.T) { testMultiProtoSync(t, eth.ETH68, SnapSync) } - -func testMultiProtoSync(t *testing.T, protocol uint, mode SyncMode) { - complete := make(chan struct{}) - success := func() { - close(complete) - } - tester := newTesterWithNotification(t, mode, success) - defer tester.terminate() - - // Create a small enough block chain to download - chain := testChainBase.shorten(blockCacheMaxItems - 15) - - // Create peers of every type - tester.newPeer("peer 68", eth.ETH68, chain.blocks[1:]) - - if err := tester.downloader.BeaconSync(chain.blocks[len(chain.blocks)-1].Header(), nil); err != nil { - t.Fatalf("failed to start beacon sync: %v", err) - } - select { - case <-complete: - break - case <-time.NewTimer(time.Second * 3).C: - t.Fatalf("Failed to sync chain in three seconds") - } - assertOwnChain(t, tester, len(chain.blocks)) - - // Check that no peers have been dropped off - for _, version := range []int{68} { - peer := fmt.Sprintf("peer %d", version) - if _, ok := tester.peers[peer]; !ok { - t.Errorf("%s dropped", peer) - } - } -} - // Tests that if a block is empty (e.g. header only), no body request should be // made, and instead the header should be assembled into a whole block in itself. -func TestEmptyShortCircuit68Full(t *testing.T) { testEmptyShortCircuit(t, eth.ETH68, FullSync) } -func TestEmptyShortCircuit68Snap(t *testing.T) { testEmptyShortCircuit(t, eth.ETH68, SnapSync) } +func TestEmptyShortCircuitFull(t *testing.T) { testEmptyShortCircuit(t, eth.ETH69, FullSync) } +func TestEmptyShortCircuitSnap(t *testing.T) { testEmptyShortCircuit(t, eth.ETH69, SnapSync) } func testEmptyShortCircuit(t *testing.T, protocol uint, mode SyncMode) { success := make(chan struct{}) @@ -644,8 +605,8 @@ func checkProgress(t *testing.T, d *Downloader, stage string, want ethereum.Sync // Tests that peers below a pre-configured checkpoint block are prevented from // being fast-synced from, avoiding potential cheap eclipse attacks. -func TestBeaconSync68Full(t *testing.T) { testBeaconSync(t, eth.ETH68, FullSync) } -func TestBeaconSync68Snap(t *testing.T) { testBeaconSync(t, eth.ETH68, SnapSync) } +func TestBeaconSyncFull(t *testing.T) { testBeaconSync(t, eth.ETH69, FullSync) } +func TestBeaconSyncSnap(t *testing.T) { testBeaconSync(t, eth.ETH69, SnapSync) } func testBeaconSync(t *testing.T, protocol uint, mode SyncMode) { var cases = []struct { @@ -690,8 +651,8 @@ func testBeaconSync(t *testing.T, protocol uint, mode SyncMode) { // Tests that synchronisation progress (origin block number, current block number // and highest block number) is tracked and updated correctly. -func TestSyncProgress68Full(t *testing.T) { testSyncProgress(t, eth.ETH68, FullSync) } -func TestSyncProgress68Snap(t *testing.T) { testSyncProgress(t, eth.ETH68, SnapSync) } +func TestSyncProgressFull(t *testing.T) { testSyncProgress(t, eth.ETH69, FullSync) } +func TestSyncProgressSnap(t *testing.T) { testSyncProgress(t, eth.ETH69, SnapSync) } func testSyncProgress(t *testing.T, protocol uint, mode SyncMode) { success := make(chan struct{}) diff --git a/eth/downloader/skeleton_test.go b/eth/downloader/skeleton_test.go index 5c54b4b5c2..8c38e9d0c5 100644 --- a/eth/downloader/skeleton_test.go +++ b/eth/downloader/skeleton_test.go @@ -845,7 +845,7 @@ func TestSkeletonSyncRetrievals(t *testing.T) { // Create a peer set to feed headers through peerset := newPeerSet() for _, peer := range tt.peers { - peerset.Register(newPeerConnection(peer.id, eth.ETH68, peer, log.New("id", peer.id))) + peerset.Register(newPeerConnection(peer.id, eth.ETH69, peer, log.New("id", peer.id))) } // Create a peer dropper to track malicious peers dropped := make(map[string]int) @@ -912,7 +912,7 @@ func TestSkeletonSyncRetrievals(t *testing.T) { // Apply the post-init events if there's any endpeers := tt.peers if tt.newPeer != nil { - if err := peerset.Register(newPeerConnection(tt.newPeer.id, eth.ETH68, tt.newPeer, log.New("id", tt.newPeer.id))); err != nil { + if err := peerset.Register(newPeerConnection(tt.newPeer.id, eth.ETH69, tt.newPeer, log.New("id", tt.newPeer.id))); err != nil { t.Errorf("test %d: failed to register new peer: %v", i, err) } time.Sleep(time.Millisecond * 50) // given time for peer registration diff --git a/eth/handler_eth_test.go b/eth/handler_eth_test.go index 0330713071..68e91fa897 100644 --- a/eth/handler_eth_test.go +++ b/eth/handler_eth_test.go @@ -38,9 +38,8 @@ import ( // testEthHandler is a mock event handler to listen for inbound network requests // on the `eth` protocol and convert them into a more easily testable form. type testEthHandler struct { - blockBroadcasts event.Feed - txAnnounces event.Feed - txBroadcasts event.Feed + txAnnounces event.Feed + txBroadcasts event.Feed } func (h *testEthHandler) Chain() *core.BlockChain { panic("no backing chain") } @@ -51,10 +50,6 @@ func (h *testEthHandler) PeerInfo(enode.ID) interface{} { panic("not used func (h *testEthHandler) Handle(peer *eth.Peer, packet eth.Packet) error { switch packet := packet.(type) { - case *eth.NewBlockPacket: - h.blockBroadcasts.Send(packet.Block) - return nil - case *eth.NewPooledTransactionHashesPacket: h.txAnnounces.Send(packet.Hashes) return nil @@ -82,7 +77,7 @@ func (h *testEthHandler) Handle(peer *eth.Peer, packet eth.Packet) error { // Tests that peers are correctly accepted (or rejected) based on the advertised // fork IDs in the protocol handshake. -func TestForkIDSplit68(t *testing.T) { testForkIDSplit(t, eth.ETH68) } +func TestForkIDSplit69(t *testing.T) { testForkIDSplit(t, eth.ETH69) } func testForkIDSplit(t *testing.T, protocol uint) { t.Parallel() @@ -234,7 +229,7 @@ func testForkIDSplit(t *testing.T, protocol uint) { } // Tests that received transactions are added to the local pool. -func TestRecvTransactions68(t *testing.T) { testRecvTransactions(t, eth.ETH68) } +func TestRecvTransactions69(t *testing.T) { testRecvTransactions(t, eth.ETH69) } func testRecvTransactions(t *testing.T, protocol uint) { t.Parallel() @@ -263,7 +258,8 @@ func testRecvTransactions(t *testing.T, protocol uint) { return eth.Handle((*ethHandler)(handler.handler), peer) }) // Run the handshake locally to avoid spinning up a source handler - if err := src.Handshake(1, handler.chain, eth.BlockRangeUpdatePacket{}); err != nil { + head := handler.chain.CurrentBlock() + if err := src.Handshake(1, handler.chain, eth.BlockRangeUpdatePacket{EarliestBlock: 0, LatestBlock: head.Number.Uint64(), LatestBlockHash: head.Hash()}); err != nil { t.Fatalf("failed to run protocol handshake") } // Send the transaction to the sink and verify that it's added to the tx pool @@ -286,7 +282,7 @@ func testRecvTransactions(t *testing.T, protocol uint) { } // This test checks that pending transactions are sent. -func TestSendTransactions68(t *testing.T) { testSendTransactions(t, eth.ETH68) } +func TestSendTransactions69(t *testing.T) { testSendTransactions(t, eth.ETH69) } func testSendTransactions(t *testing.T, protocol uint) { t.Parallel() @@ -318,7 +314,8 @@ func testSendTransactions(t *testing.T, protocol uint) { return eth.Handle((*ethHandler)(handler.handler), peer) }) // Run the handshake locally to avoid spinning up a source handler - if err := sink.Handshake(1, handler.chain, eth.BlockRangeUpdatePacket{}); err != nil { + head := handler.chain.CurrentBlock() + if err := sink.Handshake(1, handler.chain, eth.BlockRangeUpdatePacket{EarliestBlock: 0, LatestBlock: head.Number.Uint64(), LatestBlockHash: head.Hash()}); err != nil { t.Fatalf("failed to run protocol handshake") } // After the handshake completes, the source handler should stream the sink @@ -338,22 +335,16 @@ func testSendTransactions(t *testing.T, protocol uint) { // Make sure we get all the transactions on the correct channels seen := make(map[common.Hash]struct{}) for len(seen) < len(insert) { - switch protocol { - case 68: - select { - case hashes := <-anns: - for _, hash := range hashes { - if _, ok := seen[hash]; ok { - t.Errorf("duplicate transaction announced: %x", hash) - } - seen[hash] = struct{}{} + select { + case hashes := <-anns: + for _, hash := range hashes { + if _, ok := seen[hash]; ok { + t.Errorf("duplicate transaction announced: %x", hash) } - case <-bcasts: - t.Errorf("initial tx broadcast received on post eth/66") + seen[hash] = struct{}{} } - - default: - panic("unsupported protocol, please extend test") + case <-bcasts: + t.Errorf("initial tx broadcast received on post eth/66") } } for _, tx := range insert { @@ -365,7 +356,7 @@ func testSendTransactions(t *testing.T, protocol uint) { // Tests that transactions get propagated to all attached peers, either via direct // broadcasts or via announcements/retrievals. -func TestTransactionPropagation68(t *testing.T) { testTransactionPropagation(t, eth.ETH68) } +func TestTransactionPropagation69(t *testing.T) { testTransactionPropagation(t, eth.ETH69) } func testTransactionPropagation(t *testing.T, protocol uint) { t.Parallel() diff --git a/eth/protocols/eth/handler.go b/eth/protocols/eth/handler.go index 2467e0c713..aa1c7d45bc 100644 --- a/eth/protocols/eth/handler.go +++ b/eth/protocols/eth/handler.go @@ -166,21 +166,6 @@ type Decoder interface { Time() time.Time } -var eth68 = map[uint64]msgHandler{ - NewBlockHashesMsg: handleNewBlockhashes, - NewBlockMsg: handleNewBlock, - TransactionsMsg: handleTransactions, - NewPooledTransactionHashesMsg: handleNewPooledTransactionHashes, - GetBlockHeadersMsg: handleGetBlockHeaders, - BlockHeadersMsg: handleBlockHeaders, - GetBlockBodiesMsg: handleGetBlockBodies, - BlockBodiesMsg: handleBlockBodies, - GetReceiptsMsg: handleGetReceipts68, - ReceiptsMsg: handleReceipts[*ReceiptList68], - GetPooledTransactionsMsg: handleGetPooledTransactions, - PooledTransactionsMsg: handlePooledTransactions, -} - var eth69 = map[uint64]msgHandler{ TransactionsMsg: handleTransactions, NewPooledTransactionHashesMsg: handleNewPooledTransactionHashes, @@ -188,8 +173,8 @@ var eth69 = map[uint64]msgHandler{ BlockHeadersMsg: handleBlockHeaders, GetBlockBodiesMsg: handleGetBlockBodies, BlockBodiesMsg: handleBlockBodies, - GetReceiptsMsg: handleGetReceipts69, - ReceiptsMsg: handleReceipts[*ReceiptList69], + GetReceiptsMsg: handleGetReceipts, + ReceiptsMsg: handleReceipts, GetPooledTransactionsMsg: handleGetPooledTransactions, PooledTransactionsMsg: handlePooledTransactions, BlockRangeUpdateMsg: handleBlockRangeUpdate, @@ -209,9 +194,7 @@ func handleMessage(backend Backend, peer *Peer) error { defer msg.Discard() var handlers map[uint64]msgHandler - if peer.version == ETH68 { - handlers = eth68 - } else if peer.version == ETH69 { + if peer.version == ETH69 { handlers = eth69 } else { return fmt.Errorf("unknown eth protocol version: %v", peer.version) diff --git a/eth/protocols/eth/handler_test.go b/eth/protocols/eth/handler_test.go index 8f7f82c3a1..2e0ce0408b 100644 --- a/eth/protocols/eth/handler_test.go +++ b/eth/protocols/eth/handler_test.go @@ -174,7 +174,7 @@ func (b *testBackend) Handle(*Peer, Packet) error { } // Tests that block headers can be retrieved from a remote chain based on user queries. -func TestGetBlockHeaders68(t *testing.T) { testGetBlockHeaders(t, ETH68) } +func TestGetBlockHeaders69(t *testing.T) { testGetBlockHeaders(t, ETH69) } func testGetBlockHeaders(t *testing.T, protocol uint) { t.Parallel() @@ -387,7 +387,7 @@ func testGetBlockHeaders(t *testing.T, protocol uint) { } // Tests that block contents can be retrieved from a remote chain based on their hashes. -func TestGetBlockBodies68(t *testing.T) { testGetBlockBodies(t, ETH68) } +func TestGetBlockBodies69(t *testing.T) { testGetBlockBodies(t, ETH69) } func testGetBlockBodies(t *testing.T, protocol uint) { t.Parallel() @@ -536,7 +536,7 @@ func TestHashBody(t *testing.T) { } // Tests that the transaction receipts can be retrieved based on hashes. -func TestGetBlockReceipts68(t *testing.T) { testGetBlockReceipts(t, ETH68) } +func TestGetBlockReceipts69(t *testing.T) { testGetBlockReceipts(t, ETH69) } func testGetBlockReceipts(t *testing.T, protocol uint) { t.Parallel() @@ -586,13 +586,13 @@ func testGetBlockReceipts(t *testing.T, protocol uint) { // Collect the hashes to request, and the response to expect var ( hashes []common.Hash - receipts rlp.RawList[*ReceiptList68] + receipts rlp.RawList[*ReceiptList] ) for i := uint64(0); i <= backend.chain.CurrentBlock().Number.Uint64(); i++ { block := backend.chain.GetBlockByNumber(i) hashes = append(hashes, block.Hash()) - trs := backend.chain.GetReceiptsByHash(block.Hash()) - receipts.Append(NewReceiptList68(trs)) + br := backend.chain.GetReceiptsByHash(block.Hash()) + receipts.Append(NewReceiptList(br)) } // Send the hash request and verify the response @@ -600,7 +600,7 @@ func testGetBlockReceipts(t *testing.T, protocol uint) { RequestId: 123, GetReceiptsRequest: hashes, }) - if err := p2p.ExpectMsg(peer.app, ReceiptsMsg, &ReceiptsPacket[*ReceiptList68]{ + if err := p2p.ExpectMsg(peer.app, ReceiptsMsg, &ReceiptsPacket{ RequestId: 123, List: receipts, }); err != nil { @@ -656,7 +656,7 @@ func setup() (*testBackend, *testPeer) { } } backend := newTestBackendWithGenerator(maxBodiesServe+15, true, false, gen) - peer, _ := newTestPeer("peer", ETH68, backend) + peer, _ := newTestPeer("peer", ETH69, backend) // Discard all messages go func() { for { @@ -701,7 +701,7 @@ func testGetPooledTransaction(t *testing.T, blobTx bool) { backend := newTestBackendWithGenerator(0, true, true, nil) defer backend.close() - peer, _ := newTestPeer("peer", ETH68, backend) + peer, _ := newTestPeer("peer", ETH69, backend) defer peer.close() var ( diff --git a/eth/protocols/eth/handlers.go b/eth/protocols/eth/handlers.go index 7f1ccc360d..90717472f9 100644 --- a/eth/protocols/eth/handlers.go +++ b/eth/protocols/eth/handlers.go @@ -19,7 +19,6 @@ package eth import ( "bytes" "encoding/json" - "errors" "fmt" "math" @@ -247,36 +246,27 @@ func ServiceGetBlockBodiesQuery(chain *core.BlockChain, query GetBlockBodiesRequ return bodies } -func handleGetReceipts68(backend Backend, msg Decoder, peer *Peer) error { +func handleGetReceipts(backend Backend, msg Decoder, peer *Peer) error { // Decode the block receipts retrieval message var query GetReceiptsPacket if err := msg.Decode(&query); err != nil { return err } - response := ServiceGetReceiptsQuery68(backend.Chain(), query.GetReceiptsRequest) + response := ServiceGetReceiptsQuery(backend.Chain(), query.GetReceiptsRequest) return peer.ReplyReceiptsRLP(query.RequestId, response) } -func handleGetReceipts69(backend Backend, msg Decoder, peer *Peer) error { - // Decode the block receipts retrieval message - var query GetReceiptsPacket - if err := msg.Decode(&query); err != nil { - return err - } - response := serviceGetReceiptsQuery69(backend.Chain(), query.GetReceiptsRequest) - return peer.ReplyReceiptsRLP(query.RequestId, response) -} - -// ServiceGetReceiptsQuery68 assembles the response to a receipt query. It is -// exposed to allow external packages to test protocol behavior. -func ServiceGetReceiptsQuery68(chain *core.BlockChain, query GetReceiptsRequest) []rlp.RawValue { +// ServiceGetReceiptsQuery assembles the response to a receipt query. +// It does not send the bloom filters for the receipts. It is exposed +// to allow external packages to test protocol behavior. +func ServiceGetReceiptsQuery(chain *core.BlockChain, query GetReceiptsRequest) rlp.RawList[*ReceiptList] { // Gather state data until the fetch or network limits is reached var ( bytes int - receipts []rlp.RawValue + receipts rlp.RawList[*ReceiptList] ) for lookups, hash := range query { - if bytes >= softResponseLimit || len(receipts) >= maxReceiptsServe || + if bytes >= softResponseLimit || receipts.Len() >= maxReceiptsServe || lookups >= 2*maxReceiptsServe { break } @@ -292,63 +282,18 @@ func ServiceGetReceiptsQuery68(chain *core.BlockChain, query GetReceiptsRequest) continue } var err error - results, err = blockReceiptsToNetwork68(results, body) + results, err = blockReceiptsToNetwork(results, body) if err != nil { log.Error("Error in block receipts conversion", "hash", hash, "err", err) continue } } - receipts = append(receipts, results) + receipts.AppendRaw(results) bytes += len(results) } return receipts } -// serviceGetReceiptsQuery69 assembles the response to a receipt query. -// It does not send the bloom filters for the receipts -func serviceGetReceiptsQuery69(chain *core.BlockChain, query GetReceiptsRequest) []rlp.RawValue { - // Gather state data until the fetch or network limits is reached - var ( - bytes int - receipts []rlp.RawValue - ) - for lookups, hash := range query { - if bytes >= softResponseLimit || len(receipts) >= maxReceiptsServe || - lookups >= 2*maxReceiptsServe { - break - } - // Retrieve the requested block's receipts - results := chain.GetReceiptsRLP(hash) - if results == nil { - if header := chain.GetHeaderByHash(hash); header == nil || header.ReceiptHash != types.EmptyRootHash { - continue - } - } else { - body := chain.GetBodyRLP(hash) - if body == nil { - continue - } - var err error - results, err = blockReceiptsToNetwork69(results, body) - if err != nil { - log.Error("Error in block receipts conversion", "hash", hash, "err", err) - continue - } - } - receipts = append(receipts, results) - bytes += len(results) - } - return receipts -} - -func handleNewBlockhashes(backend Backend, msg Decoder, peer *Peer) error { - return errors.New("block announcements disallowed") // We dropped support for non-merge networks -} - -func handleNewBlock(backend Backend, msg Decoder, peer *Peer) error { - return errors.New("block broadcasts disallowed") // We dropped support for non-merge networks -} - func handleBlockHeaders(backend Backend, msg Decoder, peer *Peer) error { // A batch of headers arrived to one of our previous requests res := new(BlockHeadersPacket) @@ -490,9 +435,9 @@ func writeTxForHash(tx []byte, buf *bytes.Buffer) { } } -func handleReceipts[L ReceiptsList](backend Backend, msg Decoder, peer *Peer) error { +func handleReceipts(backend Backend, msg Decoder, peer *Peer) error { // A batch of receipts arrived to one of our previous requests - res := new(ReceiptsPacket[L]) + res := new(ReceiptsPacket) if err := msg.Decode(res); err != nil { return err } @@ -502,16 +447,10 @@ func handleReceipts[L ReceiptsList](backend Backend, msg Decoder, peer *Peer) er return fmt.Errorf("Receipts: %w", err) } - // Assign temporary hashing buffer to each list item, the same buffer is shared - // between all receipt list instances. receiptLists, err := res.List.Items() if err != nil { return fmt.Errorf("Receipts: %w", err) } - buffers := new(receiptListBuffers) - for i := range receiptLists { - receiptLists[i].setBuffers(buffers) - } metadata := func() interface{} { hasher := trie.NewStackTrie(nil) @@ -521,6 +460,7 @@ func handleReceipts[L ReceiptsList](backend Backend, msg Decoder, peer *Peer) er } return hashes } + var enc ReceiptsRLPResponse for i := range receiptLists { encReceipts, err := receiptLists[i].EncodeForStorage() diff --git a/eth/protocols/eth/handshake.go b/eth/protocols/eth/handshake.go index 4d1b6e9de7..359e4e36bb 100644 --- a/eth/protocols/eth/handshake.go +++ b/eth/protocols/eth/handshake.go @@ -36,62 +36,6 @@ const ( // Handshake executes the eth protocol handshake, negotiating version number, // network IDs, difficulties, head and genesis blocks. func (p *Peer) Handshake(networkID uint64, chain forkid.Blockchain, rangeMsg BlockRangeUpdatePacket) error { - switch p.version { - case ETH69: - return p.handshake69(networkID, chain, rangeMsg) - case ETH68: - return p.handshake68(networkID, chain) - default: - return errors.New("unsupported protocol version") - } -} - -func (p *Peer) handshake68(networkID uint64, chain forkid.Blockchain) error { - var ( - genesis = chain.Genesis() - latest = chain.CurrentHeader() - forkID = forkid.NewID(chain.Config(), genesis, latest.Number.Uint64(), latest.Time) - forkFilter = forkid.NewFilter(chain) - ) - errc := make(chan error, 2) - go func() { - pkt := &StatusPacket68{ - ProtocolVersion: uint32(p.version), - NetworkID: networkID, - Head: latest.Hash(), - Genesis: genesis.Hash(), - ForkID: forkID, - } - errc <- p2p.Send(p.rw, StatusMsg, pkt) - }() - var status StatusPacket68 // safe to read after two values have been received from errc - go func() { - errc <- p.readStatus68(networkID, &status, genesis.Hash(), forkFilter) - }() - - return waitForHandshake(errc, p) -} - -func (p *Peer) readStatus68(networkID uint64, status *StatusPacket68, genesis common.Hash, forkFilter forkid.Filter) error { - if err := p.readStatusMsg(status); err != nil { - return err - } - if status.NetworkID != networkID { - return fmt.Errorf("%w: %d (!= %d)", errNetworkIDMismatch, status.NetworkID, networkID) - } - if uint(status.ProtocolVersion) != p.version { - return fmt.Errorf("%w: %d (!= %d)", errProtocolVersionMismatch, status.ProtocolVersion, p.version) - } - if status.Genesis != genesis { - return fmt.Errorf("%w: %x (!= %x)", errGenesisMismatch, status.Genesis, genesis) - } - if err := forkFilter(status.ForkID); err != nil { - return fmt.Errorf("%w: %v", errForkIDRejected, err) - } - return nil -} - -func (p *Peer) handshake69(networkID uint64, chain forkid.Blockchain, rangeMsg BlockRangeUpdatePacket) error { var ( genesis = chain.Genesis() latest = chain.CurrentHeader() @@ -101,7 +45,7 @@ func (p *Peer) handshake69(networkID uint64, chain forkid.Blockchain, rangeMsg B errc := make(chan error, 2) go func() { - pkt := &StatusPacket69{ + pkt := &StatusPacket{ ProtocolVersion: uint32(p.version), NetworkID: networkID, Genesis: genesis.Hash(), @@ -112,15 +56,15 @@ func (p *Peer) handshake69(networkID uint64, chain forkid.Blockchain, rangeMsg B } errc <- p2p.Send(p.rw, StatusMsg, pkt) }() - var status StatusPacket69 // safe to read after two values have been received from errc + var status StatusPacket // safe to read after two values have been received from errc go func() { - errc <- p.readStatus69(networkID, &status, genesis.Hash(), forkFilter) + errc <- p.readStatus(networkID, &status, genesis.Hash(), forkFilter) }() return waitForHandshake(errc, p) } -func (p *Peer) readStatus69(networkID uint64, status *StatusPacket69, genesis common.Hash, forkFilter forkid.Filter) error { +func (p *Peer) readStatus(networkID uint64, status *StatusPacket, genesis common.Hash, forkFilter forkid.Filter) error { if err := p.readStatusMsg(status); err != nil { return err } diff --git a/eth/protocols/eth/handshake_test.go b/eth/protocols/eth/handshake_test.go index 2fab3ea5a8..e2f1e7592a 100644 --- a/eth/protocols/eth/handshake_test.go +++ b/eth/protocols/eth/handshake_test.go @@ -18,7 +18,6 @@ package eth import ( "errors" - "math/big" "testing" "github.com/ethereum/go-ethereum/common" @@ -28,7 +27,7 @@ import ( ) // Tests that handshake failures are detected and reported correctly. -func TestHandshake68(t *testing.T) { testHandshake(t, ETH68) } +func TestHandshake69(t *testing.T) { testHandshake(t, ETH69) } func testHandshake(t *testing.T, protocol uint) { t.Parallel() @@ -52,21 +51,25 @@ func testHandshake(t *testing.T, protocol uint) { want: errNoStatusMsg, }, { - code: StatusMsg, data: StatusPacket68{10, 1, new(big.Int), head.Hash(), genesis.Hash(), forkID}, + code: StatusMsg, data: StatusPacket{10, 1, genesis.Hash(), forkID, 0, head.Number.Uint64(), head.Hash()}, want: errProtocolVersionMismatch, }, { - code: StatusMsg, data: StatusPacket68{uint32(protocol), 999, new(big.Int), head.Hash(), genesis.Hash(), forkID}, + code: StatusMsg, data: StatusPacket{uint32(protocol), 999, genesis.Hash(), forkID, 0, head.Number.Uint64(), head.Hash()}, want: errNetworkIDMismatch, }, { - code: StatusMsg, data: StatusPacket68{uint32(protocol), 1, new(big.Int), head.Hash(), common.Hash{3}, forkID}, + code: StatusMsg, data: StatusPacket{uint32(protocol), 1, common.Hash{3}, forkID, 0, head.Number.Uint64(), head.Hash()}, want: errGenesisMismatch, }, { - code: StatusMsg, data: StatusPacket68{uint32(protocol), 1, new(big.Int), head.Hash(), genesis.Hash(), forkid.ID{Hash: [4]byte{0x00, 0x01, 0x02, 0x03}}}, + code: StatusMsg, data: StatusPacket{uint32(protocol), 1, genesis.Hash(), forkid.ID{Hash: [4]byte{0x00, 0x01, 0x02, 0x03}}, 0, head.Number.Uint64(), head.Hash()}, want: errForkIDRejected, }, + { + code: StatusMsg, data: StatusPacket{uint32(protocol), 1, genesis.Hash(), forkID, head.Number.Uint64() + 1, head.Number.Uint64(), head.Hash()}, + want: errInvalidBlockRange, + }, } for i, test := range tests { // Create the two peers to shake with each other diff --git a/eth/protocols/eth/peer.go b/eth/protocols/eth/peer.go index 4ea2d7158c..3c6d58d670 100644 --- a/eth/protocols/eth/peer.go +++ b/eth/protocols/eth/peer.go @@ -215,10 +215,10 @@ func (p *Peer) ReplyBlockBodiesRLP(id uint64, bodies []rlp.RawValue) error { } // ReplyReceiptsRLP is the response to GetReceipts. -func (p *Peer) ReplyReceiptsRLP(id uint64, receipts []rlp.RawValue) error { - return p2p.Send(p.rw, ReceiptsMsg, &ReceiptsRLPPacket{ - RequestId: id, - ReceiptsRLPResponse: receipts, +func (p *Peer) ReplyReceiptsRLP(id uint64, receipts rlp.RawList[*ReceiptList]) error { + return p2p.Send(p.rw, ReceiptsMsg, &ReceiptsPacket{ + RequestId: id, + List: receipts, }) } diff --git a/eth/protocols/eth/protocol.go b/eth/protocols/eth/protocol.go index 6ab800f4f4..ef65a7d034 100644 --- a/eth/protocols/eth/protocol.go +++ b/eth/protocols/eth/protocol.go @@ -20,7 +20,6 @@ import ( "errors" "fmt" "io" - "math/big" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/core/forkid" @@ -30,7 +29,6 @@ import ( // Constants to match up protocol versions and messages const ( - ETH68 = 68 ETH69 = 69 ) @@ -40,11 +38,11 @@ const ProtocolName = "eth" // ProtocolVersions are the supported versions of the `eth` protocol (first // is primary). -var ProtocolVersions = []uint{ETH69, ETH68} +var ProtocolVersions = []uint{ETH69} // protocolLengths are the number of implemented message corresponding to // different protocol versions. -var protocolLengths = map[uint]uint64{ETH68: 17, ETH69: 18} +var protocolLengths = map[uint]uint64{ETH69: 18} // maxMessageSize is the maximum cap on the size of a protocol message. const maxMessageSize = 10 * 1024 * 1024 @@ -88,17 +86,7 @@ type Packet interface { } // StatusPacket is the network packet for the status message. -type StatusPacket68 struct { - ProtocolVersion uint32 - NetworkID uint64 - TD *big.Int - Head common.Hash - Genesis common.Hash - ForkID forkid.ID -} - -// StatusPacket69 is the network packet for the status message. -type StatusPacket69 struct { +type StatusPacket struct { ProtocolVersion uint32 NetworkID uint64 Genesis common.Hash @@ -109,26 +97,6 @@ type StatusPacket69 struct { LatestBlockHash common.Hash } -// NewBlockHashesPacket is the network packet for the block announcements. -type NewBlockHashesPacket []struct { - Hash common.Hash // Hash of one particular block being announced - Number uint64 // Number of one particular block being announced -} - -// Unpack retrieves the block hashes and numbers from the announcement packet -// and returns them in a split flat format that's more consistent with the -// internal data structures. -func (p *NewBlockHashesPacket) Unpack() ([]common.Hash, []uint64) { - var ( - hashes = make([]common.Hash, len(*p)) - numbers = make([]uint64, len(*p)) - ) - for i, body := range *p { - hashes[i], numbers[i] = body.Hash, body.Number - } - return hashes, numbers -} - // TransactionsPacket is the network packet for broadcasting new transactions. type TransactionsPacket struct { rlp.RawList[*types.Transaction] @@ -203,12 +171,6 @@ type BlockHeadersRLPPacket struct { BlockHeadersRLPResponse } -// NewBlockPacket is the network packet for the block propagation message. -type NewBlockPacket struct { - Block *types.Block - TD *big.Int -} - // GetBlockBodiesRequest represents a block body query. type GetBlockBodiesRequest []common.Hash @@ -258,30 +220,16 @@ type GetReceiptsPacket struct { // ReceiptsResponse is the network packet for block receipts distribution. type ReceiptsResponse []types.Receipts -// ReceiptsList is a type constraint for block receceipt list types. -type ReceiptsList interface { - *ReceiptList68 | *ReceiptList69 - setBuffers(*receiptListBuffers) - EncodeForStorage() (rlp.RawValue, error) - Derivable() types.DerivableList -} - // ReceiptsPacket is the network packet for block receipts distribution with // request ID wrapping. -type ReceiptsPacket[L ReceiptsList] struct { +type ReceiptsPacket struct { RequestId uint64 - List rlp.RawList[L] + List rlp.RawList[*ReceiptList] } // ReceiptsRLPResponse is used for receipts, when we already have it encoded type ReceiptsRLPResponse []rlp.RawValue -// ReceiptsRLPPacket is ReceiptsRLPResponse with request ID wrapping. -type ReceiptsRLPPacket struct { - RequestId uint64 - ReceiptsRLPResponse -} - // NewPooledTransactionHashesPacket represents a transaction announcement packet on eth/68 and newer. type NewPooledTransactionHashesPacket struct { Types []byte @@ -325,14 +273,8 @@ type BlockRangeUpdatePacket struct { LatestBlockHash common.Hash } -func (*StatusPacket68) Name() string { return "Status" } -func (*StatusPacket68) Kind() byte { return StatusMsg } - -func (*StatusPacket69) Name() string { return "Status" } -func (*StatusPacket69) Kind() byte { return StatusMsg } - -func (*NewBlockHashesPacket) Name() string { return "NewBlockHashes" } -func (*NewBlockHashesPacket) Kind() byte { return NewBlockHashesMsg } +func (*StatusPacket) Name() string { return "Status" } +func (*StatusPacket) Kind() byte { return StatusMsg } func (*TransactionsPacket) Name() string { return "Transactions" } func (*TransactionsPacket) Kind() byte { return TransactionsMsg } @@ -349,9 +291,6 @@ func (*GetBlockBodiesRequest) Kind() byte { return GetBlockBodiesMsg } func (*BlockBodiesResponse) Name() string { return "BlockBodies" } func (*BlockBodiesResponse) Kind() byte { return BlockBodiesMsg } -func (*NewBlockPacket) Name() string { return "NewBlock" } -func (*NewBlockPacket) Kind() byte { return NewBlockMsg } - func (*NewPooledTransactionHashesPacket) Name() string { return "NewPooledTransactionHashes" } func (*NewPooledTransactionHashesPacket) Kind() byte { return NewPooledTransactionHashesMsg } diff --git a/eth/protocols/eth/protocol_test.go b/eth/protocols/eth/protocol_test.go index e37d72dcd6..f93d01123b 100644 --- a/eth/protocols/eth/protocol_test.go +++ b/eth/protocols/eth/protocol_test.go @@ -95,8 +95,7 @@ func TestEmptyMessages(t *testing.T) { BlockBodiesRLPPacket{1111, BlockBodiesRLPResponse([]rlp.RawValue{})}, // Receipts GetReceiptsPacket{1111, GetReceiptsRequest([]common.Hash{})}, - ReceiptsPacket[*ReceiptList68]{1111, encodeRL([]*ReceiptList68{})}, - ReceiptsPacket[*ReceiptList69]{1111, encodeRL([]*ReceiptList69{})}, + ReceiptsPacket{1111, encodeRL([]*ReceiptList{})}, // Transactions GetPooledTransactionsPacket{1111, GetPooledTransactionsRequest([]common.Hash{})}, PooledTransactionsPacket{1111, encodeRL([]*types.Transaction{})}, @@ -122,7 +121,6 @@ func TestMessages(t *testing.T) { txRlps []rlp.RawValue hashes []common.Hash receipts []*types.Receipt - receiptsRlp rlp.RawValue err error ) @@ -191,11 +189,6 @@ func TestMessages(t *testing.T) { } miniDeriveFields(receipts[0], 0) miniDeriveFields(receipts[1], 1) - rlpData, err := rlp.EncodeToBytes(receipts) - if err != nil { - t.Fatal(err) - } - receiptsRlp = rlpData } for i, tc := range []struct { @@ -231,16 +224,7 @@ func TestMessages(t *testing.T) { common.FromHex("f847820457f842a000000000000000000000000000000000000000000000000000000000deadc0dea000000000000000000000000000000000000000000000000000000000feedbeef"), }, { - ReceiptsPacket[*ReceiptList68]{1111, encodeRL([]*ReceiptList68{NewReceiptList68(receipts)})}, - common.FromHex("f902e6820457f902e0f902ddf901688082014db9010000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000004000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000f85ff85d940000000000000000000000000000000000000011f842a0000000000000000000000000000000000000000000000000000000000000deada0000000000000000000000000000000000000000000000000000000000000beef830100ffb9016f01f9016b018201bcb9010000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000001000000000000000000000000000000000000000000000000040000000000000000000000000004000000000000000000000000000000000000000000000000000000008000400000000000000000000000000000000000000000000000000000000000000000000000000000040f862f860940000000000000000000000000000000000000022f842a00000000000000000000000000000000000000000000000000000000000005668a0000000000000000000000000000000000000000000000000000000000000977386020f0f0f0608"), - }, - { - // Identical to the eth/68 encoding above. - ReceiptsRLPPacket{1111, ReceiptsRLPResponse([]rlp.RawValue{receiptsRlp})}, - common.FromHex("f902e6820457f902e0f902ddf901688082014db9010000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000004000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000f85ff85d940000000000000000000000000000000000000011f842a0000000000000000000000000000000000000000000000000000000000000deada0000000000000000000000000000000000000000000000000000000000000beef830100ffb9016f01f9016b018201bcb9010000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000001000000000000000000000000000000000000000000000000040000000000000000000000000004000000000000000000000000000000000000000000000000000000008000400000000000000000000000000000000000000000000000000000000000000000000000000000040f862f860940000000000000000000000000000000000000022f842a00000000000000000000000000000000000000000000000000000000000005668a0000000000000000000000000000000000000000000000000000000000000977386020f0f0f0608"), - }, - { - ReceiptsPacket[*ReceiptList69]{1111, encodeRL([]*ReceiptList69{NewReceiptList69(receipts)})}, + ReceiptsPacket{1111, encodeRL([]*ReceiptList{NewReceiptList(receipts)})}, common.FromHex("f8da820457f8d5f8d3f866808082014df85ff85d940000000000000000000000000000000000000011f842a0000000000000000000000000000000000000000000000000000000000000deada0000000000000000000000000000000000000000000000000000000000000beef830100fff86901018201bcf862f860940000000000000000000000000000000000000022f842a00000000000000000000000000000000000000000000000000000000000005668a0000000000000000000000000000000000000000000000000000000000000977386020f0f0f0608"), }, { diff --git a/eth/protocols/eth/receipt.go b/eth/protocols/eth/receipt.go index 06956df9f2..96e8c4399b 100644 --- a/eth/protocols/eth/receipt.go +++ b/eth/protocols/eth/receipt.go @@ -27,9 +27,6 @@ import ( "github.com/ethereum/go-ethereum/rlp" ) -// This is just a sanity limit for the size of a single receipt. -const maxReceiptSize = 16 * 1024 * 1024 - // Receipt is the representation of receipts for networking purposes. type Receipt struct { TxType byte @@ -49,154 +46,18 @@ func newReceipt(tr *types.Receipt) Receipt { return r } -// decode68 parses a receipt in the eth/68 network encoding. -func (r *Receipt) decode68(b []byte) error { - k, content, _, err := rlp.Split(b) - if err != nil { - return err - } - - *r = Receipt{} - if k == rlp.List { - // Legacy receipt. - return r.decodeInnerList(b, false, true) - } - // Typed receipt. - if len(content) < 2 || len(content) > maxReceiptSize { - return fmt.Errorf("invalid receipt size %d", len(content)) - } - r.TxType = content[0] - return r.decodeInnerList(content[1:], false, true) -} - -// decode69 parses a receipt in the eth/69 network encoding. -func (r *Receipt) decode69(b []byte) error { - *r = Receipt{} - return r.decodeInnerList(b, true, false) -} - -// decodeDatabase parses a receipt in the basic database encoding. -func (r *Receipt) decodeDatabase(txType byte, b []byte) error { - *r = Receipt{TxType: txType} - return r.decodeInnerList(b, false, false) -} - -func (r *Receipt) decodeInnerList(input []byte, readTxType, readBloom bool) error { - input, _, err := rlp.SplitList(input) - if err != nil { - return fmt.Errorf("inner list: %v", err) - } - - // txType - if readTxType { - var txType uint64 - txType, input, err = rlp.SplitUint64(input) - if err != nil { - return fmt.Errorf("invalid txType: %w", err) - } - if txType > 0x7f { - return fmt.Errorf("invalid txType: too large") - } - r.TxType = byte(txType) - } - - // status - r.PostStateOrStatus, input, err = rlp.SplitString(input) - if err != nil { - return fmt.Errorf("invalid postStateOrStatus: %w", err) - } - if len(r.PostStateOrStatus) > 1 && len(r.PostStateOrStatus) != 32 { - return fmt.Errorf("invalid postStateOrStatus length %d", len(r.PostStateOrStatus)) - } - - // gas - r.GasUsed, input, err = rlp.SplitUint64(input) - if err != nil { - return fmt.Errorf("invalid gasUsed: %w", err) - } - - // bloom - if readBloom { - var bloomBytes []byte - bloomBytes, input, err = rlp.SplitString(input) - if err != nil { - return fmt.Errorf("invalid bloom: %v", err) - } - if len(bloomBytes) != types.BloomByteLength { - return fmt.Errorf("invalid bloom length %d", len(bloomBytes)) - } - } - - // logs - _, rest, err := rlp.SplitList(input) - if err != nil { - return fmt.Errorf("invalid logs: %w", err) - } - if len(rest) != 0 { - return fmt.Errorf("junk at end of receipt") - } - r.Logs = input - return nil -} - -// encodeForStorage produces the the storage encoding, i.e. the result matches -// the RLP encoding of types.ReceiptForStorage. -func (r *Receipt) encodeForStorage(w *rlp.EncoderBuffer) { - list := w.List() - w.WriteBytes(r.PostStateOrStatus) - w.WriteUint64(r.GasUsed) - w.Write(r.Logs) - w.ListEnd(list) -} - -// encodeForNetwork68 produces the eth/68 network protocol encoding of a receipt. -// Note this recomputes the bloom filter of the receipt. -func (r *Receipt) encodeForNetwork68(buf *receiptListBuffers, w *rlp.EncoderBuffer) { - writeInner := func(w *rlp.EncoderBuffer) { - list := w.List() - w.WriteBytes(r.PostStateOrStatus) - w.WriteUint64(r.GasUsed) - bloom := r.bloom(&buf.bloom) - w.WriteBytes(bloom[:]) - w.Write(r.Logs) - w.ListEnd(list) - } - - if r.TxType == 0 { - writeInner(w) - } else { - buf.tmp.Reset() - buf.tmp.WriteByte(r.TxType) - buf.enc.Reset(&buf.tmp) - writeInner(&buf.enc) - buf.enc.Flush() - w.WriteBytes(buf.tmp.Bytes()) - } -} - -// encodeForNetwork69 produces the eth/69 network protocol encoding of a receipt. -func (r *Receipt) encodeForNetwork69(w *rlp.EncoderBuffer) { - list := w.List() - w.WriteUint64(uint64(r.TxType)) - w.WriteBytes(r.PostStateOrStatus) - w.WriteUint64(r.GasUsed) - w.Write(r.Logs) - w.ListEnd(list) -} - // encodeForHash encodes a receipt for the block receiptsRoot derivation. -func (r *Receipt) encodeForHash(buf *receiptListBuffers, out *bytes.Buffer) { +func (r *Receipt) encodeForHash(bloomBuf *[6]byte, out *bytes.Buffer) { // For typed receipts, add the tx type. if r.TxType != 0 { out.WriteByte(r.TxType) } // Encode list = [postStateOrStatus, gasUsed, bloom, logs]. - w := &buf.enc - w.Reset(out) + w := rlp.NewEncoderBuffer(out) l := w.List() w.WriteBytes(r.PostStateOrStatus) w.WriteUint64(r.GasUsed) - bloom := r.bloom(&buf.bloom) + bloom := r.bloom(bloomBuf) w.WriteBytes(bloom[:]) w.Write(r.Logs) w.ListEnd(l) @@ -229,31 +90,98 @@ func (r *Receipt) bloom(buffer *[6]byte) types.Bloom { return b } -type receiptListBuffers struct { - enc rlp.EncoderBuffer - bloom [6]byte - tmp bytes.Buffer -} - -func initBuffers(buf **receiptListBuffers) { - if *buf == nil { - *buf = new(receiptListBuffers) +// decode assigns the fields of r by decoding the network format. +func (r *Receipt) decode(input []byte) error { + input, _, err := rlp.SplitList(input) + if err != nil { + return fmt.Errorf("inner list: %v", err) } + + // txType + var txType uint64 + txType, input, err = rlp.SplitUint64(input) + if err != nil { + return fmt.Errorf("invalid txType: %w", err) + } + if txType > 0x7f { + return fmt.Errorf("invalid txType: too large") + } + r.TxType = byte(txType) + + // status + r.PostStateOrStatus, input, err = rlp.SplitString(input) + if err != nil { + return fmt.Errorf("invalid postStateOrStatus: %w", err) + } + if len(r.PostStateOrStatus) > 1 && len(r.PostStateOrStatus) != 32 { + return fmt.Errorf("invalid postStateOrStatus length %d", len(r.PostStateOrStatus)) + } + + // gas + r.GasUsed, input, err = rlp.SplitUint64(input) + if err != nil { + return fmt.Errorf("invalid gasUsed: %w", err) + } + + // logs + _, rest, err := rlp.SplitList(input) + if err != nil { + return fmt.Errorf("invalid logs: %w", err) + } + if len(rest) != 0 { + return fmt.Errorf("junk at end of receipt") + } + r.Logs = input + return nil } -// encodeForStorage encodes a list of receipts for the database. -func (buf *receiptListBuffers) encodeForStorage(rs rlp.RawList[Receipt], decode func([]byte, *Receipt) error) (rlp.RawValue, error) { +// ReceiptList is the block receipt list as downloaded by eth/69. +type ReceiptList struct { + items rlp.RawList[Receipt] +} + +// NewReceiptList creates a receipt list. +// This is slow, and exists for testing purposes. +func NewReceiptList(trs []*types.Receipt) *ReceiptList { + rl := new(ReceiptList) + for _, tr := range trs { + r := newReceipt(tr) + encoded, _ := rlp.EncodeToBytes(&r) + rl.items.AppendRaw(encoded) + } + return rl +} + +// DecodeRLP decodes a list receipts from the network format. +func (rl *ReceiptList) DecodeRLP(s *rlp.Stream) error { + return rl.items.DecodeRLP(s) +} + +// EncodeRLP encodes the list into the network format of eth/69. +func (rl *ReceiptList) EncodeRLP(w io.Writer) error { + return rl.items.EncodeRLP(w) +} + +// EncodeForStorage encodes a list of receipts for the database. +// It only strips the first element (TxType) from each receipt's +// raw RLP without the actual decoding and re-encoding. +func (rl *ReceiptList) EncodeForStorage() (rlp.RawValue, error) { var out bytes.Buffer - w := &buf.enc - w.Reset(&out) + w := rlp.NewEncoderBuffer(&out) outer := w.List() - it := rs.ContentIterator() + it := rl.items.ContentIterator() for it.Next() { - var receipt Receipt - if err := decode(it.Value(), &receipt); err != nil { - return nil, err + content, _, err := rlp.SplitList(it.Value()) + if err != nil { + return nil, fmt.Errorf("bad receipt: %v", err) } - receipt.encodeForStorage(w) + _, _, rest, err := rlp.Split(content) + if err != nil { + return nil, fmt.Errorf("bad receipt: %v", err) + } + inner := w.List() + w.Write(rest) + w.ListEnd(inner) } if it.Err() != nil { return nil, fmt.Errorf("bad list: %v", it.Err()) @@ -263,149 +191,20 @@ func (buf *receiptListBuffers) encodeForStorage(rs rlp.RawList[Receipt], decode return out.Bytes(), nil } -// ReceiptList68 is a block receipt list as downloaded by eth/68. -// This also implements types.DerivableList for validation purposes. -type ReceiptList68 struct { - buf *receiptListBuffers - items rlp.RawList[Receipt] -} - -// NewReceiptList68 creates a receipt list. -// This is slow, and exists for testing purposes. -func NewReceiptList68(trs []*types.Receipt) *ReceiptList68 { - rl := new(ReceiptList68) - initBuffers(&rl.buf) - enc := rlp.NewEncoderBuffer(nil) - for _, tr := range trs { - r := newReceipt(tr) - r.encodeForNetwork68(rl.buf, &enc) - rl.items.AppendRaw(enc.ToBytes()) - enc.Reset(nil) - } - return rl -} - -func blockReceiptsToNetwork68(blockReceipts, blockBody rlp.RawValue) ([]byte, error) { - txTypesIter, err := txTypesInBody(blockBody) - if err != nil { - return nil, fmt.Errorf("invalid block body: %v", err) - } - nextTxType, stopTxTypes := iter.Pull(txTypesIter) - defer stopTxTypes() - - var ( - out bytes.Buffer - buf receiptListBuffers - ) - blockReceiptIter, _ := rlp.NewListIterator(blockReceipts) - w := rlp.NewEncoderBuffer(&out) - outer := w.List() - for i := 0; blockReceiptIter.Next(); i++ { - txType, _ := nextTxType() - var r Receipt - if err := r.decodeDatabase(txType, blockReceiptIter.Value()); err != nil { - return nil, fmt.Errorf("invalid database receipt %d: %v", i, err) - } - r.encodeForNetwork68(&buf, &w) - } - w.ListEnd(outer) - w.Flush() - return out.Bytes(), nil -} - -// setBuffers implements ReceiptsList. -func (rl *ReceiptList68) setBuffers(buf *receiptListBuffers) { - rl.buf = buf -} - -// EncodeForStorage encodes the receipts for storage into the database. -func (rl *ReceiptList68) EncodeForStorage() (rlp.RawValue, error) { - initBuffers(&rl.buf) - return rl.buf.encodeForStorage(rl.items, func(data []byte, r *Receipt) error { - return r.decode68(data) - }) -} - -// Derivable turns the receipts into a list that can derive the root hash. -func (rl *ReceiptList68) Derivable() types.DerivableList { - initBuffers(&rl.buf) +// Derivable returns a DerivableList, which can be used to decode +func (rl *ReceiptList) Derivable() types.DerivableList { + var bloomBuf [6]byte return newDerivableRawList(&rl.items, func(data []byte, outbuf *bytes.Buffer) { var r Receipt - if r.decode68(data) == nil { - r.encodeForHash(rl.buf, outbuf) + if r.decode(data) == nil { + r.encodeForHash(&bloomBuf, outbuf) } }) } -// DecodeRLP decodes a list of receipts from the network format. -func (rl *ReceiptList68) DecodeRLP(s *rlp.Stream) error { - return rl.items.DecodeRLP(s) -} - -// EncodeRLP encodes the list into the network format of eth/68. -func (rl *ReceiptList68) EncodeRLP(w io.Writer) error { - return rl.items.EncodeRLP(w) -} - -// ReceiptList69 is the block receipt list as downloaded by eth/69. -// This implements types.DerivableList for validation purposes. -type ReceiptList69 struct { - buf *receiptListBuffers - items rlp.RawList[Receipt] -} - -// NewReceiptList69 creates a receipt list. -// This is slow, and exists for testing purposes. -func NewReceiptList69(trs []*types.Receipt) *ReceiptList69 { - rl := new(ReceiptList69) - enc := rlp.NewEncoderBuffer(nil) - for _, tr := range trs { - r := newReceipt(tr) - r.encodeForNetwork69(&enc) - rl.items.AppendRaw(enc.ToBytes()) - enc.Reset(nil) - } - return rl -} - -// setBuffers implements ReceiptsList. -func (rl *ReceiptList69) setBuffers(buf *receiptListBuffers) { - rl.buf = buf -} - -// EncodeForStorage encodes the receipts for storage into the database. -func (rl *ReceiptList69) EncodeForStorage() (rlp.RawValue, error) { - initBuffers(&rl.buf) - return rl.buf.encodeForStorage(rl.items, func(data []byte, r *Receipt) error { - return r.decode69(data) - }) -} - -// Derivable turns the receipts into a list that can derive the root hash. -func (rl *ReceiptList69) Derivable() types.DerivableList { - initBuffers(&rl.buf) - return newDerivableRawList(&rl.items, func(data []byte, outbuf *bytes.Buffer) { - var r Receipt - if r.decode69(data) == nil { - r.encodeForHash(rl.buf, outbuf) - } - }) -} - -// DecodeRLP decodes a list receipts from the network format. -func (rl *ReceiptList69) DecodeRLP(s *rlp.Stream) error { - return rl.items.DecodeRLP(s) -} - -// EncodeRLP encodes the list into the network format of eth/69. -func (rl *ReceiptList69) EncodeRLP(w io.Writer) error { - return rl.items.EncodeRLP(w) -} - -// blockReceiptsToNetwork69 takes a slice of rlp-encoded receipts, and transactions, -// and applies the type-encoding on the receipts (for non-legacy receipts). -// e.g. for non-legacy receipts: receipt-data -> {tx-type || receipt-data} -func blockReceiptsToNetwork69(blockReceipts, blockBody rlp.RawValue) ([]byte, error) { +// blockReceiptsToNetwork takes a slice of rlp-encoded receipts, and transactions, +// and re-encodes them for the network protocol. +func blockReceiptsToNetwork(blockReceipts, blockBody rlp.RawValue) ([]byte, error) { txTypesIter, err := txTypesInBody(blockBody) if err != nil { return nil, fmt.Errorf("invalid block body: %v", err) diff --git a/eth/protocols/eth/receipt_test.go b/eth/protocols/eth/receipt_test.go index 39a2728f7f..693ccd6918 100644 --- a/eth/protocols/eth/receipt_test.go +++ b/eth/protocols/eth/receipt_test.go @@ -95,7 +95,7 @@ func init() { } } -func TestReceiptList69(t *testing.T) { +func TestReceiptList(t *testing.T) { for i, test := range receiptsTests { // encode receipts from types.ReceiptForStorage object. canonDB, _ := rlp.EncodeToBytes(test.input) @@ -105,13 +105,13 @@ func TestReceiptList69(t *testing.T) { canonBody, _ := rlp.EncodeToBytes(blockBody) // convert from storage encoding to network encoding - network, err := blockReceiptsToNetwork69(canonDB, canonBody) + network, err := blockReceiptsToNetwork(canonDB, canonBody) if err != nil { - t.Fatalf("test[%d]: blockReceiptsToNetwork69 error: %v", i, err) + t.Fatalf("test[%d]: blockReceiptsToNetwork error: %v", i, err) } // parse as Receipts response list from network encoding - var rl ReceiptList69 + var rl ReceiptList if err := rlp.DecodeBytes(network, &rl); err != nil { t.Fatalf("test[%d]: can't decode network receipts: %v", i, err) } @@ -127,50 +127,10 @@ func TestReceiptList69(t *testing.T) { t.Fatalf("test[%d]: re-encoded network receipt list not equal\nhave: %x\nwant: %x", i, rlNetworkEnc, network) } - // compute root hash from ReceiptList69 and compare. + // compute root hash from ReceiptList and compare. responseHash := types.DeriveSha(rl.Derivable(), trie.NewStackTrie(nil)) if responseHash != test.root { - t.Fatalf("test[%d]: wrong root hash from ReceiptList69\nhave: %v\nwant: %v", i, responseHash, test.root) - } - } -} - -func TestReceiptList68(t *testing.T) { - for i, test := range receiptsTests { - // encode receipts from types.ReceiptForStorage object. - canonDB, _ := rlp.EncodeToBytes(test.input) - - // encode block body from types object. - blockBody := types.Body{Transactions: test.txs} - canonBody, _ := rlp.EncodeToBytes(blockBody) - - // convert from storage encoding to network encoding - network, err := blockReceiptsToNetwork68(canonDB, canonBody) - if err != nil { - t.Fatalf("test[%d]: blockReceiptsToNetwork68 error: %v", i, err) - } - - // parse as Receipts response list from network encoding - var rl ReceiptList68 - if err := rlp.DecodeBytes(network, &rl); err != nil { - t.Fatalf("test[%d]: can't decode network receipts: %v", i, err) - } - rlStorageEnc, err := rl.EncodeForStorage() - if err != nil { - t.Fatalf("test[%d]: error from EncodeForStorage: %v", i, err) - } - if !bytes.Equal(rlStorageEnc, canonDB) { - t.Fatalf("test[%d]: re-encoded receipts not equal\nhave: %x\nwant: %x", i, rlStorageEnc, canonDB) - } - rlNetworkEnc, _ := rlp.EncodeToBytes(&rl) - if !bytes.Equal(rlNetworkEnc, network) { - t.Fatalf("test[%d]: re-encoded network receipt list not equal\nhave: %x\nwant: %x", i, rlNetworkEnc, network) - } - - // compute root hash from ReceiptList68 and compare. - responseHash := types.DeriveSha(rl.Derivable(), trie.NewStackTrie(nil)) - if responseHash != test.root { - t.Fatalf("test[%d]: wrong root hash from ReceiptList68\nhave: %v\nwant: %v", i, responseHash, test.root) + t.Fatalf("test[%d]: wrong root hash from ReceiptList\nhave: %v\nwant: %v", i, responseHash, test.root) } } } diff --git a/eth/sync_test.go b/eth/sync_test.go index dad816229a..77a50bf6d3 100644 --- a/eth/sync_test.go +++ b/eth/sync_test.go @@ -28,7 +28,7 @@ import ( ) // Tests that snap sync is disabled after a successful sync cycle. -func TestSnapSyncDisabling68(t *testing.T) { testSnapSyncDisabling(t, eth.ETH68, snap.SNAP1) } +func TestSnapSyncDisabling69(t *testing.T) { testSnapSyncDisabling(t, eth.ETH69, snap.SNAP1) } // Tests that snap sync gets disabled as soon as a real block is successfully // imported into the blockchain. From 825436f043912cd6f6206359cbe2d356ee991c17 Mon Sep 17 00:00:00 2001 From: Guillaume Ballet <3272758+gballet@users.noreply.github.com> Date: Mon, 2 Mar 2026 14:42:38 +0100 Subject: [PATCH 074/161] AGENTS.md: add instruction not to commit binaries (#33921) I noticed that some autonomous agents have a tendency to commit binaries if asked to create a PR. --- AGENTS.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index 33b31eb632..91032c8f17 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -66,6 +66,10 @@ go run ./build/ci.go check_baddeps Verifies that no forbidden dependencies have been introduced. +## What to include in commits + +Do not commit binaries, whether they are produced by the main build or byproducts of investigations. + ## Commit Message Format Commit messages must be prefixed with the package(s) they modify, followed by a short lowercase description: From 5695fbc1560e7b04c5c02dcbf28fdd59e0a12e4f Mon Sep 17 00:00:00 2001 From: Guillaume Ballet <3272758+gballet@users.noreply.github.com> Date: Mon, 2 Mar 2026 14:43:21 +0100 Subject: [PATCH 075/161] .github: set @gballet as codeowner for keeper (#33920) --- .github/CODEOWNERS | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 4bc13aff92..39554550c4 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -10,6 +10,7 @@ beacon/merkle/ @zsfelfoldi beacon/types/ @zsfelfoldi @fjl beacon/params/ @zsfelfoldi @fjl cmd/evm/ @MariusVanDerWijden @lightclient +cmd/keeper/ @gballet core/state/ @rjl493456442 crypto/ @gballet @jwasinger @fjl core/ @rjl493456442 From 2726c9ef9ef7b3749b96eaf035fc4a3c5b8c3877 Mon Sep 17 00:00:00 2001 From: jwasinger Date: Mon, 2 Mar 2026 17:01:06 -0500 Subject: [PATCH 076/161] core/vm: enable 8024 instructions in Amsterdam (#33928) --- core/vm/jump_table.go | 1 + 1 file changed, 1 insertion(+) diff --git a/core/vm/jump_table.go b/core/vm/jump_table.go index d8ec2b75fe..a2e2c91194 100644 --- a/core/vm/jump_table.go +++ b/core/vm/jump_table.go @@ -96,6 +96,7 @@ func newVerkleInstructionSet() JumpTable { func newAmsterdamInstructionSet() JumpTable { instructionSet := newOsakaInstructionSet() enable7843(&instructionSet) // EIP-7843 (SLOTNUM opcode) + enable8024(&instructionSet) // EIP-8024 (Backward compatible SWAPN, DUPN, EXCHANGE) return validate(instructionSet) } From 1eead2ec33aeb448fc19663245bdeebb1569906f Mon Sep 17 00:00:00 2001 From: Csaba Kiraly Date: Mon, 2 Mar 2026 16:42:39 -0600 Subject: [PATCH 077/161] core/types: fix transaction pool price-heap comparison (#33923) Fixes priceheap comparison in some edge cases. --------- Signed-off-by: Csaba Kiraly --- core/txpool/legacypool/list_test.go | 37 +++++++++++++++++++++++++++++ core/types/transaction.go | 27 +++++++++++++++++++-- 2 files changed, 62 insertions(+), 2 deletions(-) diff --git a/core/txpool/legacypool/list_test.go b/core/txpool/legacypool/list_test.go index 8587c66f7d..dc03def26c 100644 --- a/core/txpool/legacypool/list_test.go +++ b/core/txpool/legacypool/list_test.go @@ -68,6 +68,43 @@ func TestListAddVeryExpensive(t *testing.T) { } } +// TestPriceHeapCmp tests that the price heap comparison function works as intended. +// It also tests combinations where the basefee is higher than the gas fee cap, which +// are useful to sort in the mempool to support basefee changes. +func TestPriceHeapCmp(t *testing.T) { + key, _ := crypto.GenerateKey() + txs := []*types.Transaction{ + // nonce, gaslimit, gasfee, gastip + dynamicFeeTx(0, 1000, big.NewInt(2), big.NewInt(1), key), + dynamicFeeTx(0, 1000, big.NewInt(1), big.NewInt(2), key), + dynamicFeeTx(0, 1000, big.NewInt(1), big.NewInt(1), key), + dynamicFeeTx(0, 1000, big.NewInt(1), big.NewInt(0), key), + } + + // create priceHeap + ph := &priceHeap{} + + // now set the basefee on the heap + for _, basefee := range []uint64{0, 1, 2, 3} { + ph.baseFee = uint256.NewInt(basefee) + + for i := 0; i < len(txs); i++ { + for j := 0; j < len(txs); j++ { + switch { + case i == j: + if c := ph.cmp(txs[i], txs[j]); c != 0 { + t.Errorf("tx %d should be equal priority to tx %d with basefee %d (cmp=%d)", i, j, basefee, c) + } + case i < j: + if c := ph.cmp(txs[i], txs[j]); c != 1 { + t.Errorf("tx %d vs tx %d comparison inconsistent with basefee %d (cmp=%d)", i, j, basefee, c) + } + } + } + } + } +} + func BenchmarkListAdd(b *testing.B) { // Generate a list of transactions to insert key, _ := crypto.GenerateKey() diff --git a/core/types/transaction.go b/core/types/transaction.go index 6af960b8c3..21f858ecfa 100644 --- a/core/types/transaction.go +++ b/core/types/transaction.go @@ -396,14 +396,37 @@ func (tx *Transaction) calcEffectiveGasTip(dst *uint256.Int, baseFee *uint256.In return err } +// EffectiveGasTipValue returns the effective gasTip value for the given base fee, +// even if it would be negative. This can be used for sorting purposes. +func (tx *Transaction) EffectiveGasTipValue(baseFee *big.Int) *big.Int { + // min(gasTipCap, gasFeeCap - baseFee) + dst := new(big.Int) + if baseFee == nil { + dst.Set(tx.inner.gasTipCap()) + return dst + } + + dst.Sub(tx.inner.gasFeeCap(), baseFee) // gasFeeCap - baseFee + gasTipCap := tx.inner.gasTipCap() + if gasTipCap.Cmp(dst) < 0 { // gasTipCap < (gasFeeCap - baseFee) + dst.Set(gasTipCap) + } + return dst +} + func (tx *Transaction) EffectiveGasTipCmp(other *Transaction, baseFee *uint256.Int) int { if baseFee == nil { return tx.GasTipCapCmp(other) } // Use more efficient internal method. txTip, otherTip := new(uint256.Int), new(uint256.Int) - tx.calcEffectiveGasTip(txTip, baseFee) - other.calcEffectiveGasTip(otherTip, baseFee) + err1 := tx.calcEffectiveGasTip(txTip, baseFee) + err2 := other.calcEffectiveGasTip(otherTip, baseFee) + if err1 != nil || err2 != nil { + // fall back to big int comparison in case of error + base := baseFee.ToBig() + return tx.EffectiveGasTipValue(base).Cmp(other.EffectiveGasTipValue(base)) + } return txTip.Cmp(otherTip) } From 48cfc9777625adcc4fab019f162ef71e91591d1b Mon Sep 17 00:00:00 2001 From: Csaba Kiraly Date: Mon, 2 Mar 2026 16:59:33 -0600 Subject: [PATCH 078/161] core/txpool/blobpool: delay announcement of low fee txs (#33893) This PR introduces a threshold (relative to current market base fees), below which we suppress the diffusion of low fee transactions. Once base fees go down, and if the transactions were not evicted in the meantime, we release these transactions. The PR also updates the bucketing logic to be more sensitive, removing the extra logarithm. Blobpool description is also updated to reflect the new behavior. EIP-7918 changed the maximim blob fee decrease that can happen in a slot. The PR also updates fee jump calculation to reflect this. --------- Signed-off-by: Csaba Kiraly --- core/txpool/blobpool/blobpool.go | 137 ++++++++++++++++++++----- core/txpool/blobpool/blobpool_test.go | 8 +- core/txpool/blobpool/evictheap.go | 8 +- core/txpool/blobpool/evictheap_test.go | 24 ++--- core/txpool/blobpool/priority.go | 45 ++++---- core/txpool/blobpool/priority_test.go | 16 +-- 6 files changed, 154 insertions(+), 84 deletions(-) diff --git a/core/txpool/blobpool/blobpool.go b/core/txpool/blobpool/blobpool.go index 6022514750..27fdd00016 100644 --- a/core/txpool/blobpool/blobpool.go +++ b/core/txpool/blobpool/blobpool.go @@ -104,6 +104,16 @@ const ( // maxGappedTxs is the maximum number of gapped transactions kept overall. // This is a safety limit to avoid DoS vectors. maxGapped = 128 + + // notifyThreshold is the eviction priority threshold above which a transaction + // is considered close enough to being includable to be announced to peers. + // Setting this to zero will disable announcements for anyting not immediately + // includable. Setting it to -1 allows transactions that are close to being + // includable, maybe already in the next block if fees go down, to be announced. + + // Note, this threshold is in the abstract eviction priority space, so its + // meaning depends on the current basefee/blobfee and the transaction's fees. + announceThreshold = -1 ) // blobTxMeta is the minimal subset of types.BlobTx necessary to validate and @@ -115,6 +125,8 @@ type blobTxMeta struct { vhashes []common.Hash // Blob versioned hashes to maintain the lookup table version byte // Blob transaction version to determine proof type + announced bool // Whether the tx has been announced to listeners + id uint64 // Storage ID in the pool's persistent store storageSize uint32 // Byte size in the pool's persistent store size uint64 // RLP-encoded size of transaction including the attached blob @@ -159,7 +171,7 @@ func newBlobTxMeta(id uint64, size uint64, storageSize uint32, tx *types.Transac blobGas: tx.BlobGas(), } meta.basefeeJumps = dynamicFeeJumps(meta.execFeeCap) - meta.blobfeeJumps = dynamicFeeJumps(meta.blobFeeCap) + meta.blobfeeJumps = dynamicBlobFeeJumps(meta.blobFeeCap) return meta } @@ -210,6 +222,14 @@ func newBlobTxMeta(id uint64, size uint64, storageSize uint32, tx *types.Transac // via a normal transaction. It should nonetheless be high enough to support // resurrecting reorged transactions. Perhaps 4-16. // +// - It is not the role of the blobpool to serve as a storage for limit orders +// below market: blob transactions with fee caps way below base fee or blob fee. +// Therefore, the propagation of blob transactions that are far from being +// includable is suppressed. The pool will only announce blob transactions that +// are close to being includable (based on the current fees and the transaction's +// fee caps), and will delay the announcement of blob transactions that are far +// from being includable until base fee and/or blob fee is reduced. +// // - Local txs are meaningless. Mining pools historically used local transactions // for payouts or for backdoor deals. With 1559 in place, the basefee usually // dominates the final price, so 0 or non-0 tip doesn't change much. Blob txs @@ -281,47 +301,54 @@ func newBlobTxMeta(id uint64, size uint64, storageSize uint32, tx *types.Transac // solve after every block. // // - The first observation is that comparing 1559 base fees or 4844 blob fees -// needs to happen in the context of their dynamism. Since these fees jump -// up or down in ~1.125 multipliers (at max) across blocks, comparing fees -// in two transactions should be based on log1.125(fee) to eliminate noise. +// needs to happen in the context of their dynamism. Since base fees are +// adjusted continuously and fluctuate, and we want to optimize for effective +// miner fees, it is better to disregard small base fee cap differences. +// Instead of considering the exact fee cap values, we should group +// transactions into buckets based on fee cap values, allowing us to use +// the miner tip meaningfully as a splitter inside a bucket. // -// - The second observation is that the basefee and blobfee move independently, -// so there's no way to split mixed txs on their own (A has higher base fee, -// B has higher blob fee). Rather than look at the absolute fees, the useful -// metric is the max time it can take to exceed the transaction's fee caps. +// To create these buckets, rather than looking at the absolute fee +// differences, the useful metric is the max time it can take to exceed the +// transaction's fee caps. Base fee changes are multiplicative, so we use a +// logarithmic scale. Fees jumps up or down in ~1.125 multipliers at max +// across blocks, so we use log1.125(fee) and rounding to eliminate noise. // Specifically, we're interested in the number of jumps needed to go from // the current fee to the transaction's cap: // -// jumps = log1.125(txfee) - log1.125(basefee) +// jumps = floor(log1.125(txfee) - log1.125(basefee)) // -// - The third observation is that the base fee tends to hover around rather -// than swing wildly. The number of jumps needed from the current fee starts -// to get less relevant the higher it is. To remove the noise here too, the -// pool will use log(jumps) as the delta for comparing transactions. +// For blob fees, EIP-7892 changed the ratio of target to max blobs, and +// with that also the maximum blob fee decrease in a slot from 1.125 to +// approx 1.17. therefore, we use: // -// delta = sign(jumps) * log(abs(jumps)) +// blobfeeJumps = floor(log1.17(txBlobfee) - log1.17(blobfee)) // -// - To establish a total order, we need to reduce the dimensionality of the +// - The second observation is that when ranking executable blob txs, it +// does not make sense to grant a later eviction priority to txs with high +// fee caps since it could enable pool wars. As such, any positive priority +// will be grouped together. +// +// priority = min(jumps, 0) +// +// - The third observation is that the basefee and blobfee move independently, +// so there's no way to split mixed txs on their own (A has higher base fee, +// B has higher blob fee). +// +// To establish a total order, we need to reduce the dimensionality of the // two base fees (log jumps) to a single value. The interesting aspect from // the pool's perspective is how fast will a tx get executable (fees going // down, crossing the smaller negative jump counter) or non-executable (fees // going up, crossing the smaller positive jump counter). As such, the pool // cares only about the min of the two delta values for eviction priority. // -// priority = min(deltaBasefee, deltaBlobfee) +// priority = min(deltaBasefee, deltaBlobfee, 0) // // - The above very aggressive dimensionality and noise reduction should result // in transaction being grouped into a small number of buckets, the further // the fees the larger the buckets. This is good because it allows us to use // the miner tip meaningfully as a splitter. // -// - For the scenario where the pool does not contain non-executable blob txs -// anymore, it does not make sense to grant a later eviction priority to txs -// with high fee caps since it could enable pool wars. As such, any positive -// priority will be grouped together. -// -// priority = min(deltaBasefee, deltaBlobfee, 0) -// // Optimisation tradeoffs: // // - Eviction relies on 3 fee minimums per account (exec tip, exec cap and blob @@ -470,6 +497,20 @@ func (p *BlobPool) Init(gasTip uint64, head *types.Header, reserver txpool.Reser } p.evict = newPriceHeap(basefee, blobfee, p.index) + // Guess what was announced. This is needed because we don't want to + // participate in the diffusion of transactions where inclusion is blocked by + // a low base fee transaction. Since we don't persist that info, the best + // we can do is to assume that anything that could have been announced + // at current prices, actually was. + for addr := range p.index { + for _, tx := range p.index[addr] { + tx.announced = p.isAnnouncable(tx) + if !tx.announced { + break + } + } + } + // Pool initialized, attach the blob limbo to it to track blobs included // recently but not yet finalized p.limbo, err = newLimbo(p.chain.Config(), limbodir) @@ -517,6 +558,7 @@ func (p *BlobPool) Close() error { // parseTransaction is a callback method on pool creation that gets called for // each transaction on disk to create the in-memory metadata index. +// Announced state is not initialized here, it needs to be iniitalized seprately. func (p *BlobPool) parseTransaction(id uint64, size uint32, blob []byte) error { tx := new(types.Transaction) if err := rlp.DecodeBytes(blob, tx); err != nil { @@ -893,6 +935,37 @@ func (p *BlobPool) Reset(oldHead, newHead *types.Header) { } p.evict.reinit(basefee, blobfee, false) + // Announce transactions that became announcable due to fee changes + var announcable []*types.Transaction + for addr, txs := range p.index { + for i, meta := range txs { + if !meta.announced && (i == 0 || txs[i-1].announced) && p.isAnnouncable(meta) { + // Load the full transaction and strip the sidecar before announcing + // TODO: this is a bit ugly, as we have everything needed in meta already + data, err := p.store.Get(meta.id) + // Technically, we are supposed to set announced only if Get is successful. + // However, Get failing here indicates a more serious issue (data loss), + // so we set announced anyway to avoid repeated attempts. + meta.announced = true + if err != nil { + log.Error("Blobs missing for announcable transaction", "from", addr, "nonce", meta.nonce, "id", meta.id, "err", err) + continue + } + var tx types.Transaction + if err = rlp.DecodeBytes(data, &tx); err != nil { + log.Error("Blobs corrupted for announcable transaction", "from", addr, "nonce", meta.nonce, "id", meta.id, "err", err) + continue + } + announcable = append(announcable, tx.WithoutBlobTxSidecar()) + log.Trace("Blob transaction now announcable", "from", addr, "nonce", meta.nonce, "id", meta.id, "hash", tx.Hash()) + } + } + } + if len(announcable) > 0 { + p.discoverFeed.Send(core.NewTxsEvent{Txs: announcable}) + } + + // Update the basefee and blobfee metrics basefeeGauge.Update(int64(basefee.Uint64())) blobfeeGauge.Update(int64(blobfee.Uint64())) p.updateStorageMetrics() @@ -1673,9 +1746,15 @@ func (p *BlobPool) addLocked(tx *types.Transaction, checkGapped bool) (err error addValidMeter.Mark(1) - // Notify all listeners of the new arrival - p.discoverFeed.Send(core.NewTxsEvent{Txs: []*types.Transaction{tx.WithoutBlobTxSidecar()}}) - p.insertFeed.Send(core.NewTxsEvent{Txs: []*types.Transaction{tx.WithoutBlobTxSidecar()}}) + // Transaction was addded successfully, but we only announce if it is (close to being) + // includable and the previous one was already announced. + if p.isAnnouncable(meta) && (meta.nonce == next || (len(txs) > 1 && txs[offset-1].announced)) { + meta.announced = true + p.discoverFeed.Send(core.NewTxsEvent{Txs: []*types.Transaction{tx.WithoutBlobTxSidecar()}}) + p.insertFeed.Send(core.NewTxsEvent{Txs: []*types.Transaction{tx.WithoutBlobTxSidecar()}}) + } else { + log.Trace("Blob transaction not announcable yet", "hash", tx.Hash(), "nonce", tx.Nonce()) + } //check the gapped queue for this account and try to promote if gtxs, ok := p.gapped[from]; checkGapped && ok && len(gtxs) > 0 { @@ -1999,6 +2078,12 @@ func (p *BlobPool) evictGapped() { } } +// isAnnouncable checks whether a transaction is announcable based on its +// fee parameters and announceThreshold. +func (p *BlobPool) isAnnouncable(meta *blobTxMeta) bool { + return evictionPriority(p.evict.basefeeJumps, meta.basefeeJumps, p.evict.blobfeeJumps, meta.blobfeeJumps) >= announceThreshold +} + // Stats retrieves the current pool stats, namely the number of pending and the // number of queued (non-executable) transactions. func (p *BlobPool) Stats() (int, int) { diff --git a/core/txpool/blobpool/blobpool_test.go b/core/txpool/blobpool/blobpool_test.go index 4bb3567b69..6580a339e3 100644 --- a/core/txpool/blobpool/blobpool_test.go +++ b/core/txpool/blobpool/blobpool_test.go @@ -830,8 +830,8 @@ func TestOpenIndex(t *testing.T) { //blobfeeJumps = []float64{34.023, 35.570, 36.879, 29.686, 26.243, 20.358} // log 1.125 (blob fee cap) evictExecTipCaps = []uint64{10, 10, 5, 5, 1, 1} - evictExecFeeJumps = []float64{39.098, 38.204, 38.204, 19.549, 19.549, 19.549} // min(log 1.125 (exec fee cap)) - evictBlobFeeJumps = []float64{34.023, 34.023, 34.023, 29.686, 26.243, 20.358} // min(log 1.125 (blob fee cap)) + evictExecFeeJumps = []float64{39.098, 38.204, 38.204, 19.549, 19.549, 19.549} // min(log 1.125 (exec fee cap)) + evictBlobFeeJumps = []float64{25.517256, 25.517256, 25.517256, 22.264502, 19.682646, 15.268934} // min(log 1.17 (blob fee cap)) totalSpent = uint256.NewInt(21000*(100+90+200+10+80+300) + blobSize*(55+66+77+33+22+11) + 100*6) // 21000 gas x price + 128KB x blobprice + value ) @@ -1751,8 +1751,8 @@ func TestAdd(t *testing.T) { // Create a blob pool out of the pre-seeded dats chain := &testBlockChain{ config: params.MainnetChainConfig, - basefee: uint256.NewInt(1050), - blobfee: uint256.NewInt(105), + basefee: uint256.NewInt(1), + blobfee: uint256.NewInt(1), statedb: statedb, } pool := New(Config{Datadir: storage}, chain, nil) diff --git a/core/txpool/blobpool/evictheap.go b/core/txpool/blobpool/evictheap.go index 722a71bc9b..a46b8e9a6f 100644 --- a/core/txpool/blobpool/evictheap.go +++ b/core/txpool/blobpool/evictheap.go @@ -67,7 +67,7 @@ func newPriceHeap(basefee *uint256.Int, blobfee *uint256.Int, index map[common.A func (h *evictHeap) reinit(basefee *uint256.Int, blobfee *uint256.Int, force bool) { // If the update is mostly the same as the old, don't sort pointlessly basefeeJumps := dynamicFeeJumps(basefee) - blobfeeJumps := dynamicFeeJumps(blobfee) + blobfeeJumps := dynamicBlobFeeJumps(blobfee) if !force && math.Abs(h.basefeeJumps-basefeeJumps) < 0.01 && math.Abs(h.blobfeeJumps-blobfeeJumps) < 0.01 { // TODO(karalabe): 0.01 enough, maybe should be smaller? Maybe this optimization is moot? return @@ -95,13 +95,7 @@ func (h *evictHeap) Less(i, j int) bool { lastJ := txsJ[len(txsJ)-1] prioI := evictionPriority(h.basefeeJumps, lastI.evictionExecFeeJumps, h.blobfeeJumps, lastI.evictionBlobFeeJumps) - if prioI > 0 { - prioI = 0 - } prioJ := evictionPriority(h.basefeeJumps, lastJ.evictionExecFeeJumps, h.blobfeeJumps, lastJ.evictionBlobFeeJumps) - if prioJ > 0 { - prioJ = 0 - } if prioI == prioJ { return lastI.evictionExecTip.Lt(lastJ.evictionExecTip) } diff --git a/core/txpool/blobpool/evictheap_test.go b/core/txpool/blobpool/evictheap_test.go index de4076e298..112fa77a01 100644 --- a/core/txpool/blobpool/evictheap_test.go +++ b/core/txpool/blobpool/evictheap_test.go @@ -109,22 +109,22 @@ func TestPriceHeapSorting(t *testing.T) { order: []int{3, 2, 1, 0, 4, 5, 6}, }, // If both basefee and blobfee is specified, sort by the larger distance - // of the two from the current network conditions, splitting same (loglog) + // of the two from the current network conditions, splitting same // ones via the tip. // - // Basefee: 1000 - // Blobfee: 100 + // Basefee: 1000 , jumps: 888, 790, 702, 624 + // Blobfee: 100 , jumps: 85, 73, 62, 53 // - // Tx #0: (800, 80) - 2 jumps below both => priority -1 - // Tx #1: (630, 63) - 4 jumps below both => priority -2 - // Tx #2: (800, 63) - 2 jumps below basefee, 4 jumps below blobfee => priority -2 (blob penalty dominates) - // Tx #3: (630, 80) - 4 jumps below basefee, 2 jumps below blobfee => priority -2 (base penalty dominates) + // Tx #0: (800, 80) - 2 jumps below both => priority -2 + // Tx #1: (630, 55) - 4 jumps below both => priority -4 + // Tx #2: (800, 55) - 2 jumps below basefee, 4 jumps below blobfee => priority -4 (blob penalty dominates) + // Tx #3: (630, 80) - 4 jumps below basefee, 2 jumps below blobfee => priority -4 (base penalty dominates) // // Txs 1, 2, 3 share the same priority, split via tip, prefer 0 as the best { execTips: []uint64{1, 2, 3, 4}, execFees: []uint64{800, 630, 800, 630}, - blobFees: []uint64{80, 63, 63, 80}, + blobFees: []uint64{80, 55, 55, 80}, basefee: 1000, blobfee: 100, order: []int{1, 2, 3, 0}, @@ -142,7 +142,7 @@ func TestPriceHeapSorting(t *testing.T) { blobFee = uint256.NewInt(tt.blobFees[j]) basefeeJumps = dynamicFeeJumps(execFee) - blobfeeJumps = dynamicFeeJumps(blobFee) + blobfeeJumps = dynamicBlobFeeJumps(blobFee) ) index[addr] = []*blobTxMeta{{ id: uint64(j), @@ -201,7 +201,7 @@ func benchmarkPriceHeapReinit(b *testing.B, datacap uint64) { blobFee = uint256.NewInt(rnd.Uint64()) basefeeJumps = dynamicFeeJumps(execFee) - blobfeeJumps = dynamicFeeJumps(blobFee) + blobfeeJumps = dynamicBlobFeeJumps(blobFee) ) index[addr] = []*blobTxMeta{{ id: uint64(i), @@ -277,7 +277,7 @@ func benchmarkPriceHeapOverflow(b *testing.B, datacap uint64) { blobFee = uint256.NewInt(rnd.Uint64()) basefeeJumps = dynamicFeeJumps(execFee) - blobfeeJumps = dynamicFeeJumps(blobFee) + blobfeeJumps = dynamicBlobFeeJumps(blobFee) ) index[addr] = []*blobTxMeta{{ id: uint64(i), @@ -308,7 +308,7 @@ func benchmarkPriceHeapOverflow(b *testing.B, datacap uint64) { blobFee = uint256.NewInt(rnd.Uint64()) basefeeJumps = dynamicFeeJumps(execFee) - blobfeeJumps = dynamicFeeJumps(blobFee) + blobfeeJumps = dynamicBlobFeeJumps(blobFee) ) metas[i] = &blobTxMeta{ id: uint64(int(blobs) + i), diff --git a/core/txpool/blobpool/priority.go b/core/txpool/blobpool/priority.go index 7ae7f92def..d7e8789ce7 100644 --- a/core/txpool/blobpool/priority.go +++ b/core/txpool/blobpool/priority.go @@ -18,7 +18,6 @@ package blobpool import ( "math" - "math/bits" "github.com/holiman/uint256" ) @@ -26,6 +25,13 @@ import ( // log1_125 is used in the eviction priority calculation. var log1_125 = math.Log(1.125) +// log1_17 is used in the eviction priority calculation for blob fees. +// EIP-7892 (BPO) changed the ratio of target to max blobs, and with that +// also the maximum blob fee decrease in a slot from 1.125 to approx 1.17 . +// Since we want priorities to approximate time, we should change our log +// calculation for blob fees. +var log1_17 = log1_125 * 4 / 3 + // evictionPriority calculates the eviction priority based on the algorithm // described in the BlobPool docs for both fee components. // @@ -36,23 +42,20 @@ func evictionPriority(basefeeJumps float64, txBasefeeJumps, blobfeeJumps, txBlob basefeePriority = evictionPriority1D(basefeeJumps, txBasefeeJumps) blobfeePriority = evictionPriority1D(blobfeeJumps, txBlobfeeJumps) ) - if basefeePriority < blobfeePriority { - return basefeePriority - } - return blobfeePriority + return min(0, basefeePriority, blobfeePriority) } // evictionPriority1D calculates the eviction priority based on the algorithm // described in the BlobPool docs for a single fee component. func evictionPriority1D(basefeeJumps float64, txfeeJumps float64) int { jumps := txfeeJumps - basefeeJumps - if int(jumps) == 0 { - return 0 // can't log2 0 + if jumps <= 0 { + return int(math.Floor(jumps)) } - if jumps < 0 { - return -intLog2(uint(-math.Floor(jumps))) - } - return intLog2(uint(math.Ceil(jumps))) + // We only use the negative part for ordering. The positive part is only used + // for threshold comparison (with a negative threshold), so the value is almost + // irrelevant, as long as it's positive. + return int((math.Ceil(jumps))) } // dynamicFeeJumps calculates the log1.125(fee), namely the number of fee jumps @@ -70,21 +73,9 @@ func dynamicFeeJumps(fee *uint256.Int) float64 { return math.Log(fee.Float64()) / log1_125 } -// intLog2 is a helper to calculate the integral part of a log2 of an unsigned -// integer. It is a very specific calculation that's not particularly useful in -// general, but it's what we need here (it's fast). -func intLog2(n uint) int { - switch { - case n == 0: - panic("log2(0) is undefined") - - case n < 2048: - return bits.UintSize - bits.LeadingZeros(n) - 1 - - default: - // The input is log1.125(uint256) = log2(uint256) / log2(1.125). At the - // most extreme, log2(uint256) will be a bit below 257, and the constant - // log2(1.125) ~= 0.17. The larges input thus is ~257 / ~0.17 ~= ~1511. - panic("dynamic fee jump diffs cannot reach this") +func dynamicBlobFeeJumps(fee *uint256.Int) float64 { + if fee.IsZero() { + return 0 // can't log2 zero, should never happen outside tests, but don't choke } + return math.Log(fee.Float64()) / log1_17 } diff --git a/core/txpool/blobpool/priority_test.go b/core/txpool/blobpool/priority_test.go index 1eaee6d7df..47b3a5375f 100644 --- a/core/txpool/blobpool/priority_test.go +++ b/core/txpool/blobpool/priority_test.go @@ -30,12 +30,12 @@ func TestPriorityCalculation(t *testing.T) { txfee uint64 result int }{ - {basefee: 7, txfee: 10, result: 2}, // 3.02 jumps, 4 ceil, 2 log2 - {basefee: 17_200_000_000, txfee: 17_200_000_000, result: 0}, // 0 jumps, special case 0 log2 - {basefee: 9_853_941_692, txfee: 11_085_092_510, result: 0}, // 0.99 jumps, 1 ceil, 0 log2 - {basefee: 11_544_106_391, txfee: 10_356_781_100, result: 0}, // -0.92 jumps, -1 floor, 0 log2 - {basefee: 17_200_000_000, txfee: 7, result: -7}, // -183.57 jumps, -184 floor, -7 log2 - {basefee: 7, txfee: 17_200_000_000, result: 7}, // 183.57 jumps, 184 ceil, 7 log2 + {basefee: 7, txfee: 10, result: 4}, // 3.02 jumps, 4 ceil + {basefee: 17_200_000_000, txfee: 17_200_000_000, result: 0}, // 0 jumps, special case 0 + {basefee: 9_853_941_692, txfee: 11_085_092_510, result: 1}, // 0.99 jumps, 1 ceil + {basefee: 11_544_106_391, txfee: 10_356_781_100, result: -1}, // -0.92 jumps, -1 floor + {basefee: 17_200_000_000, txfee: 7, result: -184}, // -183.57 jumps, -184 floor + {basefee: 7, txfee: 17_200_000_000, result: 184}, // 183.57 jumps, 184 ceil } for i, tt := range tests { var ( @@ -69,7 +69,7 @@ func BenchmarkPriorityCalculation(b *testing.B) { blobfee := uint256.NewInt(123_456_789_000) // Completely random, no idea what this will be basefeeJumps := dynamicFeeJumps(basefee) - blobfeeJumps := dynamicFeeJumps(blobfee) + blobfeeJumps := dynamicBlobFeeJumps(blobfee) // The transaction's fee cap and blob fee cap are constant across the life // of the transaction, so we can pre-calculate and cache them. @@ -77,7 +77,7 @@ func BenchmarkPriorityCalculation(b *testing.B) { txBlobfeeJumps := make([]float64, b.N) for i := 0; i < b.N; i++ { txBasefeeJumps[i] = dynamicFeeJumps(uint256.NewInt(rnd.Uint64())) - txBlobfeeJumps[i] = dynamicFeeJumps(uint256.NewInt(rnd.Uint64())) + txBlobfeeJumps[i] = dynamicBlobFeeJumps(uint256.NewInt(rnd.Uint64())) } b.ResetTimer() b.ReportAllocs() From b25080cac0a66883dd1d5d3ce07406dc18b07569 Mon Sep 17 00:00:00 2001 From: vickkkkkyy Date: Tue, 3 Mar 2026 07:01:55 +0800 Subject: [PATCH 079/161] miner: account for generateWork elapsed time in payload rebuild timer (#33908) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The payload rebuild loop resets the timer with the full Recommit duration after generateWork returns, making the actual interval generateWork_elapsed + Recommit instead of Recommit alone. Since fillTransactions uses Recommit (2s) as its timeout ceiling, the effective rebuild interval can reach ~4s under heavy blob workloads — only 1–2 rebuilds in a 6s half-slot window instead of the intended 3. Fix by subtracting elapsed time from the timer reset. ### Before this fix ``` t=0s timer fires, generateWork starts t=2s fillTransactions times out, timer.Reset(2s) t=4s second rebuild starts t=6s CL calls getPayload — gets the t=2s result (1 effective rebuild) ``` ### After ``` t=0s timer fires, generateWork starts t=2s fillTransactions times out, timer.Reset(2s - 2s = 0) t=2s second rebuild starts immediately t=4s timer.Reset(0), third rebuild starts t=6s CL calls getPayload — gets the t=4s result (3 effective rebuilds) ``` --- miner/payload_building.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/miner/payload_building.go b/miner/payload_building.go index 65869dc66b..2398e675af 100644 --- a/miner/payload_building.go +++ b/miner/payload_building.go @@ -267,7 +267,7 @@ func (miner *Miner) buildPayload(args *BuildPayloadArgs, witness bool) (*Payload } else { log.Info("Error while generating work", "id", payload.id, "err", r.err) } - timer.Reset(miner.config.Recommit) + timer.Reset(max(0, miner.config.Recommit-time.Since(start))) case <-payload.stop: log.Info("Stopping work on payload", "id", payload.id, "reason", "delivery") return From d318e8eba97311f0f4ba8379a8f77e760f7cd445 Mon Sep 17 00:00:00 2001 From: Sina M <1591639+s1na@users.noreply.github.com> Date: Tue, 3 Mar 2026 00:02:44 +0100 Subject: [PATCH 080/161] node: disable http2 for auth API (#33922) We got a report that after v1.17.0 a geth-teku node starts to time out on engine_getBlobsV2 after around 3h of operation. The culprit seems to be our optional http2 service which Teku attempts first. The exact cause of the timeout is still unclear. This PR is more of a workaround than proper fix until we figure out the underlying issue. But I don't expect http2 to particularly benefit engine API throughput and latency. Hence it should be fine to disable it for now. --- node/node.go | 2 ++ node/rpcstack.go | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/node/node.go b/node/node.go index f9ebb243b0..01318881d4 100644 --- a/node/node.go +++ b/node/node.go @@ -152,8 +152,10 @@ func New(conf *Config) (*Node, error) { // Configure RPC servers. node.http = newHTTPServer(node.log, conf.HTTPTimeouts) node.httpAuth = newHTTPServer(node.log, conf.HTTPTimeouts) + node.httpAuth.disableHTTP2 = true // Engine API does not need HTTP/2 node.ws = newHTTPServer(node.log, rpc.DefaultHTTPTimeouts) node.wsAuth = newHTTPServer(node.log, rpc.DefaultHTTPTimeouts) + node.wsAuth.disableHTTP2 = true node.ipc = newIPCServer(node.log, conf.IPCEndpoint()) return node, nil diff --git a/node/rpcstack.go b/node/rpcstack.go index a9ac88e4de..20d488b734 100644 --- a/node/rpcstack.go +++ b/node/rpcstack.go @@ -90,6 +90,9 @@ type httpServer struct { port int handlerNames map[string]string + + // disableHTTP2 disables HTTP/2 support on this server when set to true. + disableHTTP2 bool } const ( @@ -140,7 +143,9 @@ func (h *httpServer) start() error { h.server = &http.Server{Handler: h} h.server.Protocols = new(http.Protocols) h.server.Protocols.SetHTTP1(true) - h.server.Protocols.SetUnencryptedHTTP2(true) + if !h.disableHTTP2 { + h.server.Protocols.SetUnencryptedHTTP2(true) + } if h.timeouts != (rpc.HTTPTimeouts{}) { CheckTimeouts(&h.timeouts) h.server.ReadTimeout = h.timeouts.ReadTimeout From 9962e2c9f33a666d634a0d3cb90478b608cf8b46 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Tue, 3 Mar 2026 12:54:24 +0100 Subject: [PATCH 081/161] p2p/tracker: fix crash in clean when tracker is stopped (#33940) --- p2p/tracker/tracker.go | 11 ++++++++--- p2p/tracker/tracker_test.go | 19 +++++++++++++++++++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/p2p/tracker/tracker.go b/p2p/tracker/tracker.go index 3a9135aa3b..a5c790d780 100644 --- a/p2p/tracker/tracker.go +++ b/p2p/tracker/tracker.go @@ -138,6 +138,10 @@ func (t *Tracker) clean() { t.lock.Lock() defer t.lock.Unlock() + if t.expire == nil { + return // Tracker was stopped. + } + // Expire anything within a certain threshold (might be no items at all if // we raced with the delivery) for t.expire.Len() > 0 { @@ -162,14 +166,15 @@ func (t *Tracker) clean() { t.schedule() } -// schedule starts a timer to trigger on the expiration of the first network -// packet. +// schedule starts a timer to trigger on the expiration of the first network packet. func (t *Tracker) schedule() { if t.expire.Len() == 0 { t.wake = nil return } - t.wake = time.AfterFunc(time.Until(t.pending[t.expire.Front().Value.(uint64)].time.Add(t.timeout)), t.clean) + nextID := t.expire.Front().Value.(uint64) + nextTime := t.pending[nextID].time + t.wake = time.AfterFunc(time.Until(nextTime.Add(t.timeout)), t.clean) } // Stop reclaims resources of the tracker. diff --git a/p2p/tracker/tracker_test.go b/p2p/tracker/tracker_test.go index a37a59f70f..95e9629641 100644 --- a/p2p/tracker/tracker_test.go +++ b/p2p/tracker/tracker_test.go @@ -24,6 +24,25 @@ import ( "github.com/ethereum/go-ethereum/p2p" ) +// TestCleanAfterStop verifies that the clean method does not crash when called +// after Stop. This can happen because clean is scheduled via time.AfterFunc and +// may fire after Stop sets t.expire to nil. +func TestCleanAfterStop(t *testing.T) { + cap := p2p.Cap{Name: "test", Version: 1} + timeout := 50 * time.Millisecond + tr := New(cap, "peer1", timeout) + + // Track a request to start the expiration timer. + tr.Track(Request{ID: 1, ReqCode: 0x01, RespCode: 0x02, Size: 1}) + + // Stop the tracker, then wait for the timer to fire. + tr.Stop() + time.Sleep(timeout + 50*time.Millisecond) + + // Also verify that calling clean directly after stop doesn't panic. + tr.clean() +} + // This checks that metrics gauges for pending requests are be decremented when a // Tracker is stopped. func TestMetricsOnStop(t *testing.T) { From 16783c167c4be5e6675fd8de0d1b762c88d6232f Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Tue, 3 Mar 2026 13:41:41 +0100 Subject: [PATCH 082/161] version: release go-ethereum v1.17.1 stable --- version/version.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/version/version.go b/version/version.go index 007906734d..4d39a07947 100644 --- a/version/version.go +++ b/version/version.go @@ -17,8 +17,8 @@ package version const ( - Major = 1 // Major version component of the current release - Minor = 17 // Minor version component of the current release - Patch = 1 // Patch version component of the current release - Meta = "unstable" // Version metadata to append to the version string + Major = 1 // Major version component of the current release + Minor = 17 // Minor version component of the current release + Patch = 1 // Patch version component of the current release + Meta = "stable" // Version metadata to append to the version string ) From db7d3a4e0e07a145c66396f7beced575d7480c51 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Tue, 3 Mar 2026 13:49:09 +0100 Subject: [PATCH 083/161] version: begin v1.17.2 release cycle --- version/version.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/version/version.go b/version/version.go index 4d39a07947..b9bc87c866 100644 --- a/version/version.go +++ b/version/version.go @@ -17,8 +17,8 @@ package version const ( - Major = 1 // Major version component of the current release - Minor = 17 // Minor version component of the current release - Patch = 1 // Patch version component of the current release - Meta = "stable" // Version metadata to append to the version string + Major = 1 // Major version component of the current release + Minor = 17 // Minor version component of the current release + Patch = 2 // Patch version component of the current release + Meta = "unstable" // Version metadata to append to the version string ) From 856e4d55d8e861f9c737ef8b9da436c505f6f867 Mon Sep 17 00:00:00 2001 From: Jonny Rhea <5555162+jrhea@users.noreply.github.com> Date: Tue, 3 Mar 2026 15:28:09 -0600 Subject: [PATCH 084/161] go.mod: bump go.opentelemetry.io/otel/sdk from 1.39.0 to 1.40.0 (#33946) https://github.com/ethereum/go-ethereum/pull/33916 + cmd/keeper go mod tidy --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- cmd/keeper/go.mod | 8 ++++---- cmd/keeper/go.sum | 20 ++++++++++---------- go.mod | 10 +++++----- go.sum | 24 ++++++++++++------------ 4 files changed, 31 insertions(+), 31 deletions(-) diff --git a/cmd/keeper/go.mod b/cmd/keeper/go.mod index 6df7372cbd..abf5d4c7a1 100644 --- a/cmd/keeper/go.mod +++ b/cmd/keeper/go.mod @@ -35,12 +35,12 @@ require ( github.com/tklauser/go-sysconf v0.3.12 // indirect github.com/tklauser/numcpus v0.6.1 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect - go.opentelemetry.io/otel v1.39.0 // indirect - go.opentelemetry.io/otel/metric v1.39.0 // indirect - go.opentelemetry.io/otel/trace v1.39.0 // indirect + go.opentelemetry.io/otel v1.40.0 // indirect + go.opentelemetry.io/otel/metric v1.40.0 // indirect + go.opentelemetry.io/otel/trace v1.40.0 // indirect golang.org/x/crypto v0.44.0 // indirect golang.org/x/sync v0.18.0 // indirect - golang.org/x/sys v0.39.0 // indirect + golang.org/x/sys v0.40.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect ) diff --git a/cmd/keeper/go.sum b/cmd/keeper/go.sum index 2be7fa5616..2c28c6a2ec 100644 --- a/cmd/keeper/go.sum +++ b/cmd/keeper/go.sum @@ -119,14 +119,14 @@ github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+F github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= -go.opentelemetry.io/otel v1.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48= -go.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8= -go.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0= -go.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs= -go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18= -go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE= -go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI= -go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA= +go.opentelemetry.io/otel v1.40.0 h1:oA5YeOcpRTXq6NN7frwmwFR0Cn3RhTVZvXsP4duvCms= +go.opentelemetry.io/otel v1.40.0/go.mod h1:IMb+uXZUKkMXdPddhwAHm6UfOwJyh4ct1ybIlV14J0g= +go.opentelemetry.io/otel/metric v1.40.0 h1:rcZe317KPftE2rstWIBitCdVp89A2HqjkxR3c11+p9g= +go.opentelemetry.io/otel/metric v1.40.0/go.mod h1:ib/crwQH7N3r5kfiBZQbwrTge743UDc7DTFVZrrXnqc= +go.opentelemetry.io/otel/sdk v1.40.0 h1:KHW/jUzgo6wsPh9At46+h4upjtccTmuZCFAc9OJ71f8= +go.opentelemetry.io/otel/sdk v1.40.0/go.mod h1:Ph7EFdYvxq72Y8Li9q8KebuYUr2KoeyHx0DRMKrYBUE= +go.opentelemetry.io/otel/trace v1.40.0 h1:WA4etStDttCSYuhwvEa8OP8I5EWu24lkOzp+ZYblVjw= +go.opentelemetry.io/otel/trace v1.40.0/go.mod h1:zeAhriXecNGP/s2SEG3+Y8X9ujcJOTqQ5RgdEJcawiA= golang.org/x/crypto v0.44.0 h1:A97SsFvM3AIwEEmTBiaxPPTYpDC47w720rdiiUvgoAU= golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc= golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df h1:UA2aFVmmsIlefxMk29Dp2juaUSth8Pyn3Tq5Y5mJGME= @@ -137,8 +137,8 @@ golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk= -golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= +golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= diff --git a/go.mod b/go.mod index d96a221836..81c00719bd 100644 --- a/go.mod +++ b/go.mod @@ -61,17 +61,17 @@ require ( github.com/supranational/blst v0.3.16 github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 github.com/urfave/cli/v2 v2.27.5 - go.opentelemetry.io/otel v1.39.0 + go.opentelemetry.io/otel v1.40.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.39.0 - go.opentelemetry.io/otel/sdk v1.39.0 - go.opentelemetry.io/otel/trace v1.39.0 + go.opentelemetry.io/otel/sdk v1.40.0 + go.opentelemetry.io/otel/trace v1.40.0 go.uber.org/automaxprocs v1.5.2 go.uber.org/goleak v1.3.0 golang.org/x/crypto v0.44.0 golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df golang.org/x/sync v0.18.0 - golang.org/x/sys v0.39.0 + golang.org/x/sys v0.40.0 golang.org/x/text v0.31.0 golang.org/x/time v0.9.0 golang.org/x/tools v0.38.0 @@ -86,7 +86,7 @@ require ( github.com/go-logr/stdr v1.2.2 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect - go.opentelemetry.io/otel/metric v1.39.0 // indirect + go.opentelemetry.io/otel/metric v1.40.0 // indirect go.opentelemetry.io/proto/otlp v1.9.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20251222181119-0a764e51fe1b // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20251222181119-0a764e51fe1b // indirect diff --git a/go.sum b/go.sum index 4f1bdd377c..72ae43c24f 100644 --- a/go.sum +++ b/go.sum @@ -380,20 +380,20 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= -go.opentelemetry.io/otel v1.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48= -go.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8= +go.opentelemetry.io/otel v1.40.0 h1:oA5YeOcpRTXq6NN7frwmwFR0Cn3RhTVZvXsP4duvCms= +go.opentelemetry.io/otel v1.40.0/go.mod h1:IMb+uXZUKkMXdPddhwAHm6UfOwJyh4ct1ybIlV14J0g= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0 h1:f0cb2XPmrqn4XMy9PNliTgRKJgS5WcL/u0/WRYGz4t0= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0/go.mod h1:vnakAaFckOMiMtOIhFI2MNH4FYrZzXCYxmb1LlhoGz8= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.39.0 h1:Ckwye2FpXkYgiHX7fyVrN1uA/UYd9ounqqTuSNAv0k4= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.39.0/go.mod h1:teIFJh5pW2y+AN7riv6IBPX2DuesS3HgP39mwOspKwU= -go.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0= -go.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs= -go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18= -go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE= -go.opentelemetry.io/otel/sdk/metric v1.39.0 h1:cXMVVFVgsIf2YL6QkRF4Urbr/aMInf+2WKg+sEJTtB8= -go.opentelemetry.io/otel/sdk/metric v1.39.0/go.mod h1:xq9HEVH7qeX69/JnwEfp6fVq5wosJsY1mt4lLfYdVew= -go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI= -go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA= +go.opentelemetry.io/otel/metric v1.40.0 h1:rcZe317KPftE2rstWIBitCdVp89A2HqjkxR3c11+p9g= +go.opentelemetry.io/otel/metric v1.40.0/go.mod h1:ib/crwQH7N3r5kfiBZQbwrTge743UDc7DTFVZrrXnqc= +go.opentelemetry.io/otel/sdk v1.40.0 h1:KHW/jUzgo6wsPh9At46+h4upjtccTmuZCFAc9OJ71f8= +go.opentelemetry.io/otel/sdk v1.40.0/go.mod h1:Ph7EFdYvxq72Y8Li9q8KebuYUr2KoeyHx0DRMKrYBUE= +go.opentelemetry.io/otel/sdk/metric v1.40.0 h1:mtmdVqgQkeRxHgRv4qhyJduP3fYJRMX4AtAlbuWdCYw= +go.opentelemetry.io/otel/sdk/metric v1.40.0/go.mod h1:4Z2bGMf0KSK3uRjlczMOeMhKU2rhUqdWNoKcYrtcBPg= +go.opentelemetry.io/otel/trace v1.40.0 h1:WA4etStDttCSYuhwvEa8OP8I5EWu24lkOzp+ZYblVjw= +go.opentelemetry.io/otel/trace v1.40.0/go.mod h1:zeAhriXecNGP/s2SEG3+Y8X9ujcJOTqQ5RgdEJcawiA= go.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A= go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4= go.uber.org/automaxprocs v1.5.2 h1:2LxUOGiR3O6tw8ui5sZa2LAaHnsviZdVOUZw4fvbnME= @@ -477,8 +477,8 @@ golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk= -golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= +golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= From 773f71bb9ead0d833d241e9dc7b561718145d497 Mon Sep 17 00:00:00 2001 From: Jonny Rhea <5555162+jrhea@users.noreply.github.com> Date: Tue, 3 Mar 2026 20:17:07 -0600 Subject: [PATCH 085/161] miner: enable trie prefetcher in block builder (#33945) --- miner/worker.go | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/miner/worker.go b/miner/worker.go index b5fb7a344d..e924ca9c86 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -78,6 +78,11 @@ func (env *environment) txFitsSize(tx *types.Transaction) bool { return env.size+tx.Size() < params.MaxBlockSize-maxBlockSizeBufferZone } +// discard terminates the background threads before discarding it. +func (env *environment) discard() { + env.state.StopPrefetcher() +} + const ( commitInterruptNone int32 = iota commitInterruptNewHead @@ -125,6 +130,7 @@ func (miner *Miner) generateWork(genParam *generateParams, witness bool) *newPay if err != nil { return &newPayloadResult{err: err} } + defer work.discard() // Check withdrawals fit max block size. // Due to the cap on withdrawal count, this can actually never happen, but we still need to @@ -306,13 +312,14 @@ func (miner *Miner) makeEnv(parent *types.Header, header *types.Header, coinbase if err != nil { return nil, err } + var bundle *stateless.Witness if witness { - bundle, err := stateless.NewWitness(header, miner.chain) + bundle, err = stateless.NewWitness(header, miner.chain) if err != nil { return nil, err } - state.StartPrefetcher("miner", bundle, nil) } + state.StartPrefetcher("miner", bundle, nil) // Note the passed coinbase may be different with header.Coinbase. return &environment{ signer: types.MakeSigner(miner.chainConfig, header.Number, header.Time), From 4f75049ea0f41fca52635df6b3594cb8b4f2e34e Mon Sep 17 00:00:00 2001 From: Jonny Rhea <5555162+jrhea@users.noreply.github.com> Date: Tue, 3 Mar 2026 21:58:51 -0600 Subject: [PATCH 086/161] miner: avoid unnecessary work after payload resolution (#33943) In `buildPayload()`, the background goroutine uses a `select` to wait on the recommit timer, the stop channel, and the end timer. When both `timer.C` and `payload.stop` are ready simultaneously, Go's `select` picks a case non-deterministically. This means the loop can enter the `timer.C` case and perform an unnecessary `generateWork` call even after the payload has been resolved. Add a non-blocking check of `payload.stop` at the top of the `timer.C` case to exit immediately when the payload has already been delivered. --- miner/payload_building.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/miner/payload_building.go b/miner/payload_building.go index 2398e675af..8bd9552338 100644 --- a/miner/payload_building.go +++ b/miner/payload_building.go @@ -260,6 +260,17 @@ func (miner *Miner) buildPayload(args *BuildPayloadArgs, witness bool) (*Payload for { select { case <-timer.C: + // When block building takes close to the full recommit interval, + // the timer fires near-instantly on the next iteration. If the + // payload was resolved during that build, both timer.C and + // payload.stop are ready and Go's select picks one at random. + // Check payload.stop first to avoid an unnecessary generateWork. + select { + case <-payload.stop: + log.Info("Stopping work on payload", "id", payload.id, "reason", "delivery") + return + default: + } start := time.Now() r := miner.generateWork(fullParams, witness) if r.err == nil { From fe3a74e61057459d4398ff03550eb65dd916bcb8 Mon Sep 17 00:00:00 2001 From: DeFi Junkie Date: Wed, 4 Mar 2026 08:42:25 +0300 Subject: [PATCH 087/161] core/vm: use amsterdam jump table in lookup (#33947) Return the Amsterdam instruction set from `LookupInstructionSet` when `IsAmsterdam` is true, so Amsterdam rules no longer fall through to the Osaka jump table. --------- Co-authored-by: rjl493456442 --- core/vm/jump_table_export.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/vm/jump_table_export.go b/core/vm/jump_table_export.go index 89a2ebf6f4..fdf814d64c 100644 --- a/core/vm/jump_table_export.go +++ b/core/vm/jump_table_export.go @@ -28,6 +28,8 @@ func LookupInstructionSet(rules params.Rules) (JumpTable, error) { switch { case rules.IsVerkle: return newCancunInstructionSet(), errors.New("verkle-fork not defined yet") + case rules.IsAmsterdam: + return newAmsterdamInstructionSet(), nil case rules.IsOsaka: return newOsakaInstructionSet(), nil case rules.IsPrague: From 6d99759f01dc1f8697f424a6baee93621f269069 Mon Sep 17 00:00:00 2001 From: rjl493456442 Date: Wed, 4 Mar 2026 14:40:45 +0800 Subject: [PATCH 088/161] cmd, core, eth, tests: prevent state flushing in RPC (#33931) Fixes https://github.com/ethereum/go-ethereum/issues/33572 --- cmd/utils/flags.go | 5 +- core/blockchain.go | 112 ++++++++++++++++++++++++------------ core/vm/interpreter.go | 6 +- eth/api_debug.go | 33 ++++------- eth/backend.go | 5 +- internal/web3ext/web3ext.go | 11 ++-- tests/block_test_util.go | 4 +- 7 files changed, 103 insertions(+), 73 deletions(-) diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index e114eb2cd4..75b5b4785a 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -2475,8 +2475,6 @@ func MakeChain(ctx *cli.Context, stack *node.Node, readonly bool) (*core.BlockCh } vmcfg := vm.Config{ EnablePreimageRecording: ctx.Bool(VMEnableDebugFlag.Name), - EnableWitnessStats: ctx.Bool(VMWitnessStatsFlag.Name), - StatelessSelfValidation: ctx.Bool(VMStatelessSelfValidationFlag.Name) || ctx.Bool(VMWitnessStatsFlag.Name), } if ctx.IsSet(VMTraceFlag.Name) { if name := ctx.String(VMTraceFlag.Name); name != "" { @@ -2490,6 +2488,9 @@ func MakeChain(ctx *cli.Context, stack *node.Node, readonly bool) (*core.BlockCh } options.VmConfig = vmcfg + options.StatelessSelfValidation = ctx.Bool(VMStatelessSelfValidationFlag.Name) || ctx.Bool(VMWitnessStatsFlag.Name) + options.EnableWitnessStats = ctx.Bool(VMWitnessStatsFlag.Name) + chain, err := core.NewBlockChain(chainDb, gspec, engine, options) if err != nil { Fatalf("Can't create BlockChain: %v", err) diff --git a/core/blockchain.go b/core/blockchain.go index d41f301243..ed186ccf5e 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -219,6 +219,10 @@ type BlockChainConfig struct { // detailed statistics will be logged. Negative value means disabled (default), // zero logs all blocks, positive value filters blocks by execution time. SlowBlockThreshold time.Duration + + // Execution configs + StatelessSelfValidation bool // Generate execution witnesses and self-check against them (testing purpose) + EnableWitnessStats bool // Whether trie access statistics collection is enabled } // DefaultConfig returns the default config. @@ -1990,7 +1994,15 @@ func (bc *BlockChain) insertChain(ctx context.Context, chain types.Blocks, setHe } // The traced section of block import. start := time.Now() - res, err := bc.ProcessBlock(ctx, parent.Root, block, setHead, makeWitness && len(chain) == 1) + config := ExecuteConfig{ + WriteState: true, + WriteHead: setHead, + EnableTracer: true, + MakeWitness: makeWitness && len(chain) == 1, + StatelessSelfValidation: bc.cfg.StatelessSelfValidation, + EnableWitnessStats: bc.cfg.EnableWitnessStats, + } + res, err := bc.ProcessBlock(ctx, parent.Root, block, config) if err != nil { return nil, it.index, err } @@ -2073,9 +2085,36 @@ func (bpr *blockProcessingResult) Stats() *ExecuteStats { return bpr.stats } +// ExecuteConfig defines optional behaviors during execution. +type ExecuteConfig struct { + // WriteState controls whether the computed state changes are persisted to + // the underlying storage. If false, execution is performed in-memory only. + WriteState bool + + // WriteHead indicates whether the execution result should update the canonical + // chain head. It's only relevant with WriteState == True. + WriteHead bool + + // EnableTracer enables execution tracing. This is typically used for debugging + // or analysis and may significantly impact performance. + EnableTracer bool + + // MakeWitness indicates whether to generate execution witness data during + // execution. Enabling this may introduce additional memory and CPU overhead. + MakeWitness bool + + // StatelessSelfValidation indicates whether the execution witnesses generation + // and self-validation (testing purpose) is enabled. + StatelessSelfValidation bool + + // EnableWitnessStats indicates whether to enable collection of witness trie + // access statistics + EnableWitnessStats bool +} + // ProcessBlock executes and validates the given block. If there was no error // it writes the block and associated state to database. -func (bc *BlockChain) ProcessBlock(ctx context.Context, parentRoot common.Hash, block *types.Block, setHead bool, makeWitness bool) (result *blockProcessingResult, blockEndErr error) { +func (bc *BlockChain) ProcessBlock(ctx context.Context, parentRoot common.Hash, block *types.Block, config ExecuteConfig) (result *blockProcessingResult, blockEndErr error) { var ( err error startTime = time.Now() @@ -2138,12 +2177,12 @@ func (bc *BlockChain) ProcessBlock(ctx context.Context, parentRoot common.Hash, // Generate witnesses either if we're self-testing, or if it's the // only block being inserted. A bit crude, but witnesses are huge, // so we refuse to make an entire chain of them. - if bc.cfg.VmConfig.StatelessSelfValidation || makeWitness { + if config.StatelessSelfValidation || config.MakeWitness { witness, err = stateless.NewWitness(block.Header(), bc) if err != nil { return nil, err } - if bc.cfg.VmConfig.EnableWitnessStats { + if config.EnableWitnessStats { witnessStats = stateless.NewWitnessStats() } } @@ -2151,17 +2190,20 @@ func (bc *BlockChain) ProcessBlock(ctx context.Context, parentRoot common.Hash, defer statedb.StopPrefetcher() } - if bc.logger != nil && bc.logger.OnBlockStart != nil { - bc.logger.OnBlockStart(tracing.BlockEvent{ - Block: block, - Finalized: bc.CurrentFinalBlock(), - Safe: bc.CurrentSafeBlock(), - }) - } - if bc.logger != nil && bc.logger.OnBlockEnd != nil { - defer func() { - bc.logger.OnBlockEnd(blockEndErr) - }() + // Instrument the blockchain tracing + if config.EnableTracer { + if bc.logger != nil && bc.logger.OnBlockStart != nil { + bc.logger.OnBlockStart(tracing.BlockEvent{ + Block: block, + Finalized: bc.CurrentFinalBlock(), + Safe: bc.CurrentSafeBlock(), + }) + } + if bc.logger != nil && bc.logger.OnBlockEnd != nil { + defer func() { + bc.logger.OnBlockEnd(blockEndErr) + }() + } } // Process block using the parent state as reference point @@ -2191,7 +2233,7 @@ func (bc *BlockChain) ProcessBlock(ctx context.Context, parentRoot common.Hash, // witness builder/runner, which would otherwise be impossible due to the // various invalid chain states/behaviors being contained in those tests. xvstart := time.Now() - if witness := statedb.Witness(); witness != nil && bc.cfg.VmConfig.StatelessSelfValidation { + if witness := statedb.Witness(); witness != nil && config.StatelessSelfValidation { log.Warn("Running stateless self-validation", "block", block.Number(), "hash", block.Hash()) // Remove critical computed fields from the block to force true recalculation @@ -2244,31 +2286,29 @@ func (bc *BlockChain) ProcessBlock(ctx context.Context, parentRoot common.Hash, stats.CrossValidation = xvtime // The time spent on stateless cross validation // Write the block to the chain and get the status. - var ( - wstart = time.Now() - status WriteStatus - ) - if !setHead { - // Don't set the head, only insert the block - err = bc.writeBlockWithState(block, res.Receipts, statedb) - } else { - status, err = bc.writeBlockAndSetHead(block, res.Receipts, res.Logs, statedb, false) - } - if err != nil { - return nil, err + var status WriteStatus + if config.WriteState { + wstart := time.Now() + if !config.WriteHead { + // Don't set the head, only insert the block + err = bc.writeBlockWithState(block, res.Receipts, statedb) + } else { + status, err = bc.writeBlockAndSetHead(block, res.Receipts, res.Logs, statedb, false) + } + if err != nil { + return nil, err + } + // Update the metrics touched during block commit + stats.AccountCommits = statedb.AccountCommits // Account commits are complete, we can mark them + stats.StorageCommits = statedb.StorageCommits // Storage commits are complete, we can mark them + stats.SnapshotCommit = statedb.SnapshotCommits // Snapshot commits are complete, we can mark them + stats.TrieDBCommit = statedb.TrieDBCommits // Trie database commits are complete, we can mark them + stats.BlockWrite = time.Since(wstart) - max(statedb.AccountCommits, statedb.StorageCommits) /* concurrent */ - statedb.SnapshotCommits - statedb.TrieDBCommits } // Report the collected witness statistics if witnessStats != nil { witnessStats.ReportMetrics(block.NumberU64()) } - - // Update the metrics touched during block commit - stats.AccountCommits = statedb.AccountCommits // Account commits are complete, we can mark them - stats.StorageCommits = statedb.StorageCommits // Storage commits are complete, we can mark them - stats.SnapshotCommit = statedb.SnapshotCommits // Snapshot commits are complete, we can mark them - stats.TrieDBCommit = statedb.TrieDBCommits // Trie database commits are complete, we can mark them - stats.BlockWrite = time.Since(wstart) - max(statedb.AccountCommits, statedb.StorageCommits) /* concurrent */ - statedb.SnapshotCommits - statedb.TrieDBCommits - elapsed := time.Since(startTime) + 1 // prevent zero division stats.TotalTime = elapsed stats.MgasPerSecond = float64(res.GasUsed) * 1000 / float64(elapsed) diff --git a/core/vm/interpreter.go b/core/vm/interpreter.go index 52dbe83d86..620c069fc8 100644 --- a/core/vm/interpreter.go +++ b/core/vm/interpreter.go @@ -27,13 +27,11 @@ import ( // Config are the configuration options for the Interpreter type Config struct { - Tracer *tracing.Hooks + Tracer *tracing.Hooks + NoBaseFee bool // Forces the EIP-1559 baseFee to 0 (needed for 0 price calls) EnablePreimageRecording bool // Enables recording of SHA3/keccak preimages ExtraEips []int // Additional EIPS that are to be enabled - - StatelessSelfValidation bool // Generate execution witnesses and self-check against them (testing purpose) - EnableWitnessStats bool // Whether trie access statistics collection is enabled } // ScopeContext contains the things that are per-call, such as stack and memory, diff --git a/eth/api_debug.go b/eth/api_debug.go index d4ef4cc87d..b8267902b2 100644 --- a/eth/api_debug.go +++ b/eth/api_debug.go @@ -24,6 +24,7 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/stateless" @@ -493,34 +494,22 @@ func (api *DebugAPI) StateSize(blockHashOrNumber *rpc.BlockNumberOrHash) (interf }, nil } -func (api *DebugAPI) ExecutionWitness(bn rpc.BlockNumber) (*stateless.ExtWitness, error) { +func (api *DebugAPI) ExecutionWitness(bn rpc.BlockNumberOrHash) (*stateless.ExtWitness, error) { bc := api.eth.blockchain - block, err := api.eth.APIBackend.BlockByNumber(context.Background(), bn) + block, err := api.eth.APIBackend.BlockByNumberOrHash(context.Background(), bn) if err != nil { - return &stateless.ExtWitness{}, fmt.Errorf("block number %v not found", bn) + return &stateless.ExtWitness{}, fmt.Errorf("block %v not found", bn) } parent := bc.GetHeader(block.ParentHash(), block.NumberU64()-1) if parent == nil { - return &stateless.ExtWitness{}, fmt.Errorf("block number %v found, but parent missing", bn) + return &stateless.ExtWitness{}, fmt.Errorf("block %v found, but parent missing", bn) } - result, err := bc.ProcessBlock(context.Background(), parent.Root, block, false, true) - if err != nil { - return nil, err - } - return result.Witness().ToExtWitness(), nil -} - -func (api *DebugAPI) ExecutionWitnessByHash(hash common.Hash) (*stateless.ExtWitness, error) { - bc := api.eth.blockchain - block := bc.GetBlockByHash(hash) - if block == nil { - return &stateless.ExtWitness{}, fmt.Errorf("block hash %x not found", hash) - } - parent := bc.GetHeader(block.ParentHash(), block.NumberU64()-1) - if parent == nil { - return &stateless.ExtWitness{}, fmt.Errorf("block number %x found, but parent missing", hash) - } - result, err := bc.ProcessBlock(context.Background(), parent.Root, block, false, true) + config := core.ExecuteConfig{ + WriteState: false, + EnableTracer: false, + MakeWitness: true, + } + result, err := bc.ProcessBlock(context.Background(), parent.Root, block, config) if err != nil { return nil, err } diff --git a/eth/backend.go b/eth/backend.go index eaa68b501c..72228614f0 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -237,8 +237,6 @@ func New(stack *node.Node, config *ethconfig.Config) (*Ethereum, error) { TxLookupLimit: int64(min(config.TransactionHistory, math.MaxInt64)), VmConfig: vm.Config{ EnablePreimageRecording: config.EnablePreimageRecording, - EnableWitnessStats: config.EnableWitnessStats, - StatelessSelfValidation: config.StatelessSelfValidation, }, // Enables file journaling for the trie database. The journal files will be stored // within the data directory. The corresponding paths will be either: @@ -247,6 +245,9 @@ func New(stack *node.Node, config *ethconfig.Config) (*Ethereum, error) { TrieJournalDirectory: stack.ResolvePath("triedb"), StateSizeTracking: config.EnableStateSizeTracking, SlowBlockThreshold: config.SlowBlockThreshold, + + StatelessSelfValidation: config.StatelessSelfValidation, + EnableWitnessStats: config.EnableWitnessStats, } ) if config.VMTrace != "" { diff --git a/internal/web3ext/web3ext.go b/internal/web3ext/web3ext.go index 9ba8776360..1d1b5fbcd1 100644 --- a/internal/web3ext/web3ext.go +++ b/internal/web3ext/web3ext.go @@ -427,11 +427,6 @@ web3._extend({ params: 2, inputFormatter:[null, null], }), - new web3._extend.Method({ - name: 'freezeClient', - call: 'debug_freezeClient', - params: 1, - }), new web3._extend.Method({ name: 'getAccessibleState', call: 'debug_getAccessibleState', @@ -474,6 +469,12 @@ web3._extend({ params: 1, inputFormatter: [null], }), + new web3._extend.Method({ + name: 'executionWitness', + call: 'debug_executionWitness', + params: 1, + inputFormatter: [null], + }), ], properties: [] }); diff --git a/tests/block_test_util.go b/tests/block_test_util.go index dc680fea14..00411073e2 100644 --- a/tests/block_test_util.go +++ b/tests/block_test_util.go @@ -161,9 +161,9 @@ func (t *BlockTest) Run(snapshotter bool, scheme string, witness bool, tracer *t Preimages: true, TxLookupLimit: -1, // disable tx indexing VmConfig: vm.Config{ - Tracer: tracer, - StatelessSelfValidation: witness, + Tracer: tracer, }, + StatelessSelfValidation: witness, } if snapshotter { options.SnapshotLimit = 1 From 814edc5308e08a0eee5c0b1c57c8bf57e008ab33 Mon Sep 17 00:00:00 2001 From: Jonny Rhea <5555162+jrhea@users.noreply.github.com> Date: Wed, 4 Mar 2026 03:34:27 -0600 Subject: [PATCH 089/161] core/vm: Switch to branchless normalization and extend EXCHANGE (#33869) For bal-devnet-3 we need to update the EIP-8024 implementation to the latest spec changes: https://github.com/ethereum/EIPs/pull/11306 > Note: I deleted tests not specified in the EIP bc maintaining them through EIP changes is too error prone. --- core/vm/instructions.go | 34 ++++++++----- core/vm/instructions_test.go | 97 ++++++++++-------------------------- 2 files changed, 48 insertions(+), 83 deletions(-) diff --git a/core/vm/instructions.go b/core/vm/instructions.go index a4c4b0703b..4e4a33acda 100644 --- a/core/vm/instructions.go +++ b/core/vm/instructions.go @@ -946,24 +946,34 @@ func opSelfdestruct6780(pc *uint64, evm *EVM, scope *ScopeContext) ([]byte, erro return nil, errStopToken } +// decodeSingle decodes the immediate operand of a backward-compatible DUPN or SWAPN instruction (EIP-8024) +// https://eips.ethereum.org/EIPS/eip-8024 func decodeSingle(x byte) int { - if x <= 90 { - return int(x) + 17 - } - return int(x) - 20 + // Depths 1-16 are already covered by the legacy opcodes. The forbidden byte range [91, 127] removes + // 37 values from the 256 possible immediates, leaving 219 usable values, so this encoding covers depths + // 17 through 235. The immediate is encoded as (x + 111) % 256, where 111 is chosen so that these values + // avoid the forbidden range. Decoding is simply the modular inverse (i.e. 111+145=256). + return (int(x) + 145) % 256 } +// decodePair decodes the immediate operand of a backward-compatible EXCHANGE +// instruction (EIP-8024) into stack indices (n, m) where 1 <= n < m +// and n + m <= 30. The forbidden byte range [82, 127] removes 46 values from +// the 256 possible immediates, leaving exactly 210 usable bytes. +// https://eips.ethereum.org/EIPS/eip-8024 func decodePair(x byte) (int, int) { - var k int - if x <= 79 { - k = int(x) - } else { - k = int(x) - 48 - } + // XOR with 143 remaps the forbidden bytes [82, 127] to an unused corner + // of the 16x16 grid below. + k := int(x ^ 143) + // Split into row q and column r of a 16x16 grid. The 210 valid pairs + // occupy two triangles within this grid. q, r := k/16, k%16 + // Upper triangle (q < r): pairs where m <= 16, encoded directly as + // (q+1, r+1). if q < r { return q + 1, r + 1 } + // Lower triangle: pairs where m > 16, recovered as (r+1, 29-q). return r + 1, 29 - q } @@ -1034,8 +1044,8 @@ func opExchange(pc *uint64, evm *EVM, scope *ScopeContext) ([]byte, error) { } // This range is excluded both to preserve compatibility with existing opcodes - // and to keep decode_pair’s 16-aligned arithmetic mapping valid (0–79, 128–255). - if x > 79 && x < 128 { + // and to keep decode_pair’s 16-aligned arithmetic mapping valid (0–81, 128–255). + if x > 81 && x < 128 { return nil, &ErrInvalidOpCode{opcode: OpCode(x)} } n, m := decodePair(x) diff --git a/core/vm/instructions_test.go b/core/vm/instructions_test.go index 3f776146f1..4c6d093d2e 100644 --- a/core/vm/instructions_test.go +++ b/core/vm/instructions_test.go @@ -1022,16 +1022,7 @@ func TestEIP8024_Execution(t *testing.T) { }{ { name: "DUPN", - codeHex: "60016000808080808080808080808080808080e600", - wantVals: []uint64{ - 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, - }, - }, - { - name: "DUPN_MISSING_IMMEDIATE", - codeHex: "60016000808080808080808080808080808080e6", + codeHex: "60016000808080808080808080808080808080e680", wantVals: []uint64{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1040,7 +1031,7 @@ func TestEIP8024_Execution(t *testing.T) { }, { name: "SWAPN", - codeHex: "600160008080808080808080808080808080806002e700", + codeHex: "600160008080808080808080808080808080806002e780", wantVals: []uint64{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1048,22 +1039,23 @@ func TestEIP8024_Execution(t *testing.T) { }, }, { - name: "SWAPN_MISSING_IMMEDIATE", - codeHex: "600160008080808080808080808080808080806002e7", + name: "EXCHANGE_MISSING_IMMEDIATE", + codeHex: "600260008080808080600160008080808080808080e8", wantVals: []uint64{ - 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, // 10th from top + 0, 0, 0, 0, 0, 0, + 1, // bottom }, }, { name: "EXCHANGE", - codeHex: "600060016002e801", + codeHex: "600060016002e88e", wantVals: []uint64{2, 0, 1}, }, { - name: "EXCHANGE_MISSING_IMMEDIATE", - codeHex: "600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060006000600060016002e8", + name: "EXCHANGE", + codeHex: "600080808080808080808080808080808080808080808080808080808060016002e88f", wantVals: []uint64{ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1077,68 +1069,31 @@ func TestEIP8024_Execution(t *testing.T) { wantOpcode: SWAPN, }, { - name: "JUMP over INVALID_DUPN", + name: "JUMP_OVER_INVALID_DUPN", codeHex: "600456e65b", wantErr: nil, }, { - name: "UNDERFLOW_DUPN_1", - codeHex: "6000808080808080808080808080808080e600", + name: "EXCHANGE", + codeHex: "60008080e88e15", + wantVals: []uint64{1, 0, 0}, + }, + { + name: "INVALID_EXCHANGE", + codeHex: "e852", + wantErr: &ErrInvalidOpCode{}, + wantOpcode: EXCHANGE, + }, + { + name: "UNDERFLOW_DUPN", + codeHex: "6000808080808080808080808080808080e680", wantErr: &ErrStackUnderflow{}, wantOpcode: DUPN, }, // Additional test cases - { - name: "INVALID_DUPN_LOW", - codeHex: "e65b", - wantErr: &ErrInvalidOpCode{}, - wantOpcode: DUPN, - }, - { - name: "INVALID_EXCHANGE_LOW", - codeHex: "e850", - wantErr: &ErrInvalidOpCode{}, - wantOpcode: EXCHANGE, - }, - { - name: "INVALID_DUPN_HIGH", - codeHex: "e67f", - wantErr: &ErrInvalidOpCode{}, - wantOpcode: DUPN, - }, - { - name: "INVALID_SWAPN_HIGH", - codeHex: "e77f", - wantErr: &ErrInvalidOpCode{}, - wantOpcode: SWAPN, - }, - { - name: "INVALID_EXCHANGE_HIGH", - codeHex: "e87f", - wantErr: &ErrInvalidOpCode{}, - wantOpcode: EXCHANGE, - }, - { - name: "UNDERFLOW_DUPN_2", - codeHex: "5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5fe600", // (n=17, need 17 items, have 16) - wantErr: &ErrStackUnderflow{}, - wantOpcode: DUPN, - }, - { - name: "UNDERFLOW_SWAPN", - codeHex: "5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5f5fe700", // (n=17, need 18 items, have 17) - wantErr: &ErrStackUnderflow{}, - wantOpcode: SWAPN, - }, - { - name: "UNDERFLOW_EXCHANGE", - codeHex: "60016002e801", // (n,m)=(1,2), need 3 items, have 2 - wantErr: &ErrStackUnderflow{}, - wantOpcode: EXCHANGE, - }, { name: "PC_INCREMENT", - codeHex: "600060006000e80115", + codeHex: "600060006000e88e15", wantVals: []uint64{1, 0, 0}, }, } From dd202d4283750d1672272aa3d55482e32f057289 Mon Sep 17 00:00:00 2001 From: rjl493456442 Date: Wed, 4 Mar 2026 18:17:47 +0800 Subject: [PATCH 090/161] core, ethdb, triedb: add batch close (#33708) Pebble maintains a batch pool to recycle the batch object. Unfortunately batch object must be explicitly returned via `batch.Close` function. This PR extends the batch interface by adding the close function and also invoke batch.Close in some critical code paths. Memory allocation must be measured before merging this change. What's more, it's an open question that whether we should apply batch.Close as much as possible in every invocation. --- core/blockchain.go | 6 ++++++ core/rawdb/table.go | 5 +++++ core/state/statedb.go | 1 + ethdb/batch.go | 3 +++ ethdb/leveldb/leveldb.go | 3 +++ ethdb/memorydb/memorydb.go | 3 +++ ethdb/pebble/pebble.go | 6 ++++++ trie/trie_test.go | 1 + triedb/pathdb/buffer.go | 2 ++ 9 files changed, 30 insertions(+) diff --git a/core/blockchain.go b/core/blockchain.go index ed186ccf5e..858d24bad7 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -1283,6 +1283,8 @@ func (bc *BlockChain) ExportN(w io.Writer, first uint64, last uint64) error { func (bc *BlockChain) writeHeadBlock(block *types.Block) { // Add the block to the canonical chain number scheme and mark as the head batch := bc.db.NewBatch() + defer batch.Close() + rawdb.WriteHeadHeaderHash(batch, block.Hash()) rawdb.WriteHeadFastBlockHash(batch, block.Hash()) rawdb.WriteCanonicalHash(batch, block.Hash(), block.NumberU64()) @@ -1657,6 +1659,8 @@ func (bc *BlockChain) writeBlockWithState(block *types.Block, receipts []*types. batch = bc.db.NewBatch() start = time.Now() ) + defer batch.Close() + rawdb.WriteBlock(batch, block) rawdb.WriteReceipts(batch, block.Hash(), block.NumberU64(), receipts) rawdb.WritePreimages(batch, statedb.Preimages()) @@ -2666,6 +2670,8 @@ func (bc *BlockChain) reorg(oldHead *types.Header, newHead *types.Header) error // Delete useless indexes right now which includes the non-canonical // transaction indexes, canonical chain indexes which above the head. batch := bc.db.NewBatch() + defer batch.Close() + for _, tx := range types.HashDifference(deletedTxs, rebirthTxs) { rawdb.DeleteTxLookupEntry(batch, tx) } diff --git a/core/rawdb/table.go b/core/rawdb/table.go index d38afdaa35..407a619c9f 100644 --- a/core/rawdb/table.go +++ b/core/rawdb/table.go @@ -253,6 +253,11 @@ func (b *tableBatch) Reset() { b.batch.Reset() } +// Close closes the batch and releases all associated resources. +func (b *tableBatch) Close() { + b.batch.Close() +} + // tableReplayer is a wrapper around a batch replayer which truncates // the added prefix. type tableReplayer struct { diff --git a/core/state/statedb.go b/core/state/statedb.go index 3a2d9c9ac2..bf38bdf09d 100644 --- a/core/state/statedb.go +++ b/core/state/statedb.go @@ -1342,6 +1342,7 @@ func (s *StateDB) commitAndFlush(block uint64, deleteEmptyObjects bool, noStorag if err := batch.Write(); err != nil { return nil, err } + batch.Close() } if !ret.empty() { // If snapshotting is enabled, update the snapshot tree with this new version diff --git a/ethdb/batch.go b/ethdb/batch.go index 45b3781cb0..b93636c865 100644 --- a/ethdb/batch.go +++ b/ethdb/batch.go @@ -37,6 +37,9 @@ type Batch interface { // Replay replays the batch contents. Replay(w KeyValueWriter) error + + // Close closes the batch and releases all associated resources. + Close() } // Batcher wraps the NewBatch method of a backing data store. diff --git a/ethdb/leveldb/leveldb.go b/ethdb/leveldb/leveldb.go index b6c93907b1..c235d5f445 100644 --- a/ethdb/leveldb/leveldb.go +++ b/ethdb/leveldb/leveldb.go @@ -518,6 +518,9 @@ func (b *batch) Replay(w ethdb.KeyValueWriter) error { return b.b.Replay(&replayer{writer: w}) } +// Close closes the batch and releases all associated resources. +func (b *batch) Close() {} + // replayer is a small wrapper to implement the correct replay methods. type replayer struct { writer ethdb.KeyValueWriter diff --git a/ethdb/memorydb/memorydb.go b/ethdb/memorydb/memorydb.go index 200ad60245..29ed0aaea1 100644 --- a/ethdb/memorydb/memorydb.go +++ b/ethdb/memorydb/memorydb.go @@ -338,6 +338,9 @@ func (b *batch) Replay(w ethdb.KeyValueWriter) error { return nil } +// Close closes the batch and releases all associated resources. +func (b *batch) Close() {} + // iterator can walk over the (potentially partial) keyspace of a memory key // value store. Internally it is a deep copy of the entire iterated state, // sorted by keys. diff --git a/ethdb/pebble/pebble.go b/ethdb/pebble/pebble.go index 6b549f40d9..7654d582c4 100644 --- a/ethdb/pebble/pebble.go +++ b/ethdb/pebble/pebble.go @@ -731,6 +731,12 @@ func (b *batch) Replay(w ethdb.KeyValueWriter) error { } } +// Close closes the batch and releases all associated resources. After it is +// closed, any subsequent operations on this batch are undefined. +func (b *batch) Close() { + b.b.Close() +} + // pebbleIterator is a wrapper of underlying iterator in storage engine. // The purpose of this structure is to implement the missing APIs. // diff --git a/trie/trie_test.go b/trie/trie_test.go index 3423cde59c..3661933e22 100644 --- a/trie/trie_test.go +++ b/trie/trie_test.go @@ -880,6 +880,7 @@ func (b *spongeBatch) ValueSize() int { return 100 } func (b *spongeBatch) Write() error { return nil } func (b *spongeBatch) Reset() {} func (b *spongeBatch) Replay(w ethdb.KeyValueWriter) error { return nil } +func (b *spongeBatch) Close() {} // TestCommitSequence tests that the trie.Commit operation writes the elements // of the trie in the expected order. diff --git a/triedb/pathdb/buffer.go b/triedb/pathdb/buffer.go index 853e1090b3..5d3099285f 100644 --- a/triedb/pathdb/buffer.go +++ b/triedb/pathdb/buffer.go @@ -180,6 +180,8 @@ func (b *buffer) flush(root common.Hash, db ethdb.KeyValueStore, freezers []ethd b.flushErr = err return } + batch.Close() + commitBytesMeter.Mark(int64(size)) commitNodesMeter.Mark(int64(nodes)) commitAccountsMeter.Mark(int64(accounts)) From 6d0dd0886000a2011bc79872b74ccfe9c672c40d Mon Sep 17 00:00:00 2001 From: Marius van der Wijden Date: Wed, 4 Mar 2026 11:18:18 +0100 Subject: [PATCH 091/161] core: implement eip-7778: block gas accounting without refunds (#33593) Implements https://eips.ethereum.org/EIPS/eip-7778 --------- Co-authored-by: Gary Rong --- cmd/evm/internal/t8ntool/execution.go | 12 +- core/chain_makers.go | 6 +- core/error.go | 4 + core/gaspool.go | 80 +++++-- core/state_prefetcher.go | 2 +- core/state_processor.go | 38 ++-- core/state_transition.go | 26 ++- core/tracing/hooks.go | 2 +- eth/catalyst/simulated_beacon.go | 12 +- eth/gasestimator/gasestimator.go | 3 +- eth/state_accessor.go | 2 +- eth/tracers/api.go | 12 +- eth/tracers/api_test.go | 2 +- .../internal/tracetest/calltrace_test.go | 6 +- .../internal/tracetest/erc7562_tracer_test.go | 2 +- .../internal/tracetest/flat_calltrace_test.go | 2 +- .../internal/tracetest/prestate_test.go | 2 +- .../tracetest/selfdestruct_state_test.go | 3 +- eth/tracers/tracers_test.go | 2 +- internal/ethapi/api.go | 20 +- internal/ethapi/api_test.go | 4 +- internal/ethapi/simulate.go | 76 +++++-- internal/ethapi/simulate_test.go | 6 +- miner/stress/main.go | 210 ++++++++++++++++++ miner/worker.go | 22 +- tests/state_test_util.go | 4 +- 26 files changed, 433 insertions(+), 127 deletions(-) create mode 100644 miner/stress/main.go diff --git a/cmd/evm/internal/t8ntool/execution.go b/cmd/evm/internal/t8ntool/execution.go index 1979a8226e..b3fb79bc4a 100644 --- a/cmd/evm/internal/t8ntool/execution.go +++ b/cmd/evm/internal/t8ntool/execution.go @@ -149,15 +149,13 @@ func (pre *Prestate) Apply(vmConfig vm.Config, chainConfig *params.ChainConfig, isEIP4762 = chainConfig.IsVerkle(big.NewInt(int64(pre.Env.Number)), pre.Env.Timestamp) statedb = MakePreState(rawdb.NewMemoryDatabase(), pre.Pre, isEIP4762) signer = types.MakeSigner(chainConfig, new(big.Int).SetUint64(pre.Env.Number), pre.Env.Timestamp) - gaspool = new(core.GasPool) + gaspool = core.NewGasPool(pre.Env.GasLimit) blockHash = common.Hash{0x13, 0x37} rejectedTxs []*rejectedTx includedTxs types.Transactions - gasUsed = uint64(0) blobGasUsed = uint64(0) receipts = make(types.Receipts, 0) ) - gaspool.AddGas(pre.Env.GasLimit) vmContext := vm.BlockContext{ CanTransfer: core.CanTransfer, Transfer: core.Transfer, @@ -258,14 +256,14 @@ func (pre *Prestate) Apply(vmConfig vm.Config, chainConfig *params.ChainConfig, statedb.SetTxContext(tx.Hash(), len(receipts)) var ( snapshot = statedb.Snapshot() - prevGas = gaspool.Gas() + gp = gaspool.Snapshot() ) - receipt, err := core.ApplyTransactionWithEVM(msg, gaspool, statedb, vmContext.BlockNumber, blockHash, pre.Env.Timestamp, tx, &gasUsed, evm) + receipt, err := core.ApplyTransactionWithEVM(msg, gaspool, statedb, vmContext.BlockNumber, blockHash, pre.Env.Timestamp, tx, evm) if err != nil { statedb.RevertToSnapshot(snapshot) log.Info("rejected tx", "index", i, "hash", tx.Hash(), "from", msg.From, "error", err) rejectedTxs = append(rejectedTxs, &rejectedTx{i, err.Error()}) - gaspool.SetGas(prevGas) + gaspool.Set(gp) continue } if receipt.Logs == nil { @@ -352,7 +350,7 @@ func (pre *Prestate) Apply(vmConfig vm.Config, chainConfig *params.ChainConfig, Receipts: receipts, Rejected: rejectedTxs, Difficulty: (*math.HexOrDecimal256)(vmContext.Difficulty), - GasUsed: (math.HexOrDecimal64)(gasUsed), + GasUsed: (math.HexOrDecimal64)(gaspool.Used()), BaseFee: (*math.HexOrDecimal256)(vmContext.BaseFee), } if pre.Env.Withdrawals != nil { diff --git a/core/chain_makers.go b/core/chain_makers.go index 7ce86b14e9..5264336aaa 100644 --- a/core/chain_makers.go +++ b/core/chain_makers.go @@ -63,7 +63,7 @@ func (b *BlockGen) SetCoinbase(addr common.Address) { panic("coinbase can only be set once") } b.header.Coinbase = addr - b.gasPool = new(GasPool).AddGas(b.header.GasLimit) + b.gasPool = NewGasPool(b.header.GasLimit) } // SetExtra sets the extra data field of the generated block. @@ -117,10 +117,12 @@ func (b *BlockGen) addTx(bc *BlockChain, vmConfig vm.Config, tx *types.Transacti evm = vm.NewEVM(blockContext, b.statedb, b.cm.config, vmConfig) ) b.statedb.SetTxContext(tx.Hash(), len(b.txs)) - receipt, err := ApplyTransaction(evm, b.gasPool, b.statedb, b.header, tx, &b.header.GasUsed) + receipt, err := ApplyTransaction(evm, b.gasPool, b.statedb, b.header, tx) if err != nil { panic(err) } + b.header.GasUsed = b.gasPool.Used() + // Merge the tx-local access event into the "block-local" one, in order to collect // all values, so that the witness can be built. if b.statedb.Database().TrieDB().IsVerkle() { diff --git a/core/error.go b/core/error.go index 635d802863..4610842cee 100644 --- a/core/error.go +++ b/core/error.go @@ -58,6 +58,10 @@ var ( // by a transaction is higher than what's left in the block. ErrGasLimitReached = errors.New("gas limit reached") + // ErrGasLimitOverflow is returned by the gas pool if the remaining gas + // exceeds the maximum value of uint64. + ErrGasLimitOverflow = errors.New("gas limit overflow") + // ErrInsufficientFundsForTransfer is returned if the transaction sender doesn't // have enough funds for transfer(topmost call only). ErrInsufficientFundsForTransfer = errors.New("insufficient funds for transfer") diff --git a/core/gaspool.go b/core/gaspool.go index 767222674f..14f5abd93c 100644 --- a/core/gaspool.go +++ b/core/gaspool.go @@ -21,39 +21,87 @@ import ( "math" ) -// GasPool tracks the amount of gas available during execution of the transactions -// in a block. The zero value is a pool with zero gas available. -type GasPool uint64 +// GasPool tracks the amount of gas available for transaction execution +// within a block, along with the cumulative gas consumed. +type GasPool struct { + remaining uint64 + initial uint64 + cumulativeUsed uint64 +} -// AddGas makes gas available for execution. -func (gp *GasPool) AddGas(amount uint64) *GasPool { - if uint64(*gp) > math.MaxUint64-amount { - panic("gas pool pushed above uint64") +// NewGasPool initializes the gasPool with the given amount. +func NewGasPool(amount uint64) *GasPool { + return &GasPool{ + remaining: amount, + initial: amount, } - *(*uint64)(gp) += amount - return gp } // SubGas deducts the given amount from the pool if enough gas is // available and returns an error otherwise. func (gp *GasPool) SubGas(amount uint64) error { - if uint64(*gp) < amount { + if gp.remaining < amount { return ErrGasLimitReached } - *(*uint64)(gp) -= amount + gp.remaining -= amount + return nil +} + +// ReturnGas adds the refunded gas back to the pool and updates +// the cumulative gas usage accordingly. +func (gp *GasPool) ReturnGas(returned uint64, gasUsed uint64) error { + if gp.remaining > math.MaxUint64-returned { + return fmt.Errorf("%w: remaining: %d, returned: %d", ErrGasLimitOverflow, gp.remaining, returned) + } + // The returned gas calculation differs across forks. + // + // - Pre-Amsterdam: + // returned = purchased - remaining (refund included) + // + // - Post-Amsterdam: + // returned = purchased - gasUsed (refund excluded) + gp.remaining += returned + + // gasUsed = max(txGasUsed - gasRefund, calldataFloorGasCost) + // regardless of Amsterdam is activated or not. + gp.cumulativeUsed += gasUsed return nil } // Gas returns the amount of gas remaining in the pool. func (gp *GasPool) Gas() uint64 { - return uint64(*gp) + return gp.remaining } -// SetGas sets the amount of gas with the provided number. -func (gp *GasPool) SetGas(gas uint64) { - *(*uint64)(gp) = gas +// CumulativeUsed returns the amount of cumulative consumed gas (refunded included). +func (gp *GasPool) CumulativeUsed() uint64 { + return gp.cumulativeUsed +} + +// Used returns the amount of consumed gas. +func (gp *GasPool) Used() uint64 { + if gp.initial < gp.remaining { + panic("gas used underflow") + } + return gp.initial - gp.remaining +} + +// Snapshot returns the deep-copied object as the snapshot. +func (gp *GasPool) Snapshot() *GasPool { + return &GasPool{ + initial: gp.initial, + remaining: gp.remaining, + cumulativeUsed: gp.cumulativeUsed, + } +} + +// Set sets the content of gasPool with the provided one. +func (gp *GasPool) Set(other *GasPool) { + gp.initial = other.initial + gp.remaining = other.remaining + gp.cumulativeUsed = other.cumulativeUsed } func (gp *GasPool) String() string { - return fmt.Sprintf("%d", *gp) + return fmt.Sprintf("initial: %d, remaining: %d, cumulative used: %d", gp.initial, gp.remaining, gp.cumulativeUsed) } diff --git a/core/state_prefetcher.go b/core/state_prefetcher.go index 1c738c1e38..c91d40d94f 100644 --- a/core/state_prefetcher.go +++ b/core/state_prefetcher.go @@ -107,7 +107,7 @@ func (p *statePrefetcher) Prefetch(block *types.Block, statedb *state.StateDB, c // We attempt to apply a transaction. The goal is not to execute // the transaction successfully, rather to warm up touched data slots. - if _, err := ApplyMessage(evm, msg, new(GasPool).AddGas(block.GasLimit())); err != nil { + if _, err := ApplyMessage(evm, msg, nil); err != nil { fails.Add(1) return nil // Ugh, something went horribly wrong, bail out } diff --git a/core/state_processor.go b/core/state_processor.go index 6eea74bdd8..998f180571 100644 --- a/core/state_processor.go +++ b/core/state_processor.go @@ -63,14 +63,12 @@ func (p *StateProcessor) Process(ctx context.Context, block *types.Block, stated var ( config = p.chainConfig() receipts types.Receipts - usedGas = new(uint64) header = block.Header() blockHash = block.Hash() blockNumber = block.Number() allLogs []*types.Log - gp = new(GasPool).AddGas(block.GasLimit()) + gp = NewGasPool(block.GasLimit()) ) - var tracingStateDB = vm.StateDB(statedb) if hooks := cfg.Tracer; hooks != nil { tracingStateDB = state.NewHookedState(statedb, hooks) @@ -107,13 +105,15 @@ func (p *StateProcessor) Process(ctx context.Context, block *types.Block, stated telemetry.StringAttribute("tx.hash", tx.Hash().Hex()), telemetry.Int64Attribute("tx.index", int64(i)), ) - receipt, err := ApplyTransactionWithEVM(msg, gp, statedb, blockNumber, blockHash, context.Time, tx, usedGas, evm) - spanEnd(&err) + + receipt, err := ApplyTransactionWithEVM(msg, gp, statedb, blockNumber, blockHash, context.Time, tx, evm) if err != nil { return nil, fmt.Errorf("could not apply tx %d [%v]: %w", i, tx.Hash().Hex(), err) } receipts = append(receipts, receipt) allLogs = append(allLogs, receipt.Logs...) + + spanEnd(&err) } requests, err := postExecution(ctx, config, block, allLogs, evm) if err != nil { @@ -127,7 +127,7 @@ func (p *StateProcessor) Process(ctx context.Context, block *types.Block, stated Receipts: receipts, Requests: requests, Logs: allLogs, - GasUsed: *usedGas, + GasUsed: gp.Used(), }, nil } @@ -159,7 +159,7 @@ func postExecution(ctx context.Context, config *params.ChainConfig, block *types // ApplyTransactionWithEVM attempts to apply a transaction to the given state database // and uses the input parameters for its environment similar to ApplyTransaction. However, // this method takes an already created EVM instance as input. -func ApplyTransactionWithEVM(msg *Message, gp *GasPool, statedb *state.StateDB, blockNumber *big.Int, blockHash common.Hash, blockTime uint64, tx *types.Transaction, usedGas *uint64, evm *vm.EVM) (receipt *types.Receipt, err error) { +func ApplyTransactionWithEVM(msg *Message, gp *GasPool, statedb *state.StateDB, blockNumber *big.Int, blockHash common.Hash, blockTime uint64, tx *types.Transaction, evm *vm.EVM) (receipt *types.Receipt, err error) { if hooks := evm.Config.Tracer; hooks != nil { if hooks.OnTxStart != nil { hooks.OnTxStart(evm.GetVMContext(), tx, msg.From) @@ -180,27 +180,31 @@ func ApplyTransactionWithEVM(msg *Message, gp *GasPool, statedb *state.StateDB, } else { root = statedb.IntermediateRoot(evm.ChainConfig().IsEIP158(blockNumber)).Bytes() } - *usedGas += result.UsedGas - // Merge the tx-local access event into the "block-local" one, in order to collect // all values, so that the witness can be built. if statedb.Database().TrieDB().IsVerkle() { statedb.AccessEvents().Merge(evm.AccessEvents) } - return MakeReceipt(evm, result, statedb, blockNumber, blockHash, blockTime, tx, *usedGas, root), nil + return MakeReceipt(evm, result, statedb, blockNumber, blockHash, blockTime, tx, gp.CumulativeUsed(), root), nil } // MakeReceipt generates the receipt object for a transaction given its execution result. -func MakeReceipt(evm *vm.EVM, result *ExecutionResult, statedb *state.StateDB, blockNumber *big.Int, blockHash common.Hash, blockTime uint64, tx *types.Transaction, usedGas uint64, root []byte) *types.Receipt { - // Create a new receipt for the transaction, storing the intermediate root and gas used - // by the tx. - receipt := &types.Receipt{Type: tx.Type(), PostState: root, CumulativeGasUsed: usedGas} +func MakeReceipt(evm *vm.EVM, result *ExecutionResult, statedb *state.StateDB, blockNumber *big.Int, blockHash common.Hash, blockTime uint64, tx *types.Transaction, cumulativeGas uint64, root []byte) *types.Receipt { + // Create a new receipt for the transaction, storing the intermediate root + // and gas used by the tx. + // + // The cumulative gas used equals the sum of gasUsed across all preceding + // txs with refunded gas deducted. + receipt := &types.Receipt{Type: tx.Type(), PostState: root, CumulativeGasUsed: cumulativeGas} if result.Failed() { receipt.Status = types.ReceiptStatusFailed } else { receipt.Status = types.ReceiptStatusSuccessful } receipt.TxHash = tx.Hash() + + // GasUsed = max(tx_gas_used - gas_refund, calldata_floor_gas_cost), unchanged + // in the Amsterdam fork. receipt.GasUsed = result.UsedGas if tx.Type() == types.BlobTxType { @@ -224,15 +228,15 @@ func MakeReceipt(evm *vm.EVM, result *ExecutionResult, statedb *state.StateDB, b // ApplyTransaction attempts to apply a transaction to the given state database // and uses the input parameters for its environment. It returns the receipt -// for the transaction, gas used and an error if the transaction failed, +// for the transaction and an error if the transaction failed, // indicating the block was invalid. -func ApplyTransaction(evm *vm.EVM, gp *GasPool, statedb *state.StateDB, header *types.Header, tx *types.Transaction, usedGas *uint64) (*types.Receipt, error) { +func ApplyTransaction(evm *vm.EVM, gp *GasPool, statedb *state.StateDB, header *types.Header, tx *types.Transaction) (*types.Receipt, error) { msg, err := TransactionToMessage(tx, types.MakeSigner(evm.ChainConfig(), header.Number, header.Time), header.BaseFee) if err != nil { return nil, err } // Create a new context to be used in the EVM environment - return ApplyTransactionWithEVM(msg, gp, statedb, header.Number, header.Hash(), header.Time, tx, usedGas, evm) + return ApplyTransactionWithEVM(msg, gp, statedb, header.Number, header.Hash(), header.Time, tx, evm) } // ProcessBeaconBlockRoot applies the EIP-4788 system call to the beacon block root diff --git a/core/state_transition.go b/core/state_transition.go index 62474b5f5b..76a5147363 100644 --- a/core/state_transition.go +++ b/core/state_transition.go @@ -34,7 +34,7 @@ import ( // ExecutionResult includes all output after executing given evm // message no matter the execution itself is successful or not. type ExecutionResult struct { - UsedGas uint64 // Total used gas, not including the refunded gas + UsedGas uint64 // Total used gas, refunded gas is deducted MaxUsedGas uint64 // Maximum gas consumed during execution, excluding gas refunds. Err error // Any error encountered during the execution(listed in core/vm/errors.go) ReturnData []byte // Returned data from evm(function result or data supplied with revert opcode) @@ -210,6 +210,11 @@ func TransactionToMessage(tx *types.Transaction, s types.Signer, baseFee *big.In // indicates a core error meaning that the message would always fail for that particular // state and would never be accepted within a block. func ApplyMessage(evm *vm.EVM, msg *Message, gp *GasPool) (*ExecutionResult, error) { + // Do not panic if the gas pool is nil. This is allowed when executing + // a single message via RPC invocation. + if gp == nil { + gp = NewGasPool(msg.GasLimit) + } evm.SetTxContext(NewEVMTxContext(msg)) return newStateTransition(evm, msg, gp).execute() } @@ -300,8 +305,8 @@ func (st *stateTransition) buyGas() error { st.evm.Config.Tracer.OnGasChange(0, st.msg.GasLimit, tracing.GasChangeTxInitialBalance) } st.gasRemaining = st.msg.GasLimit - st.initialGas = st.msg.GasLimit + mgvalU256, _ := uint256.FromBig(mgval) st.state.SubBalance(st.msg.From, mgvalU256, tracing.BalanceDecreaseGasBuy) return nil @@ -542,8 +547,20 @@ func (st *stateTransition) execute() (*ExecutionResult, error) { peakGasUsed = floorDataGas } } + // Return gas to the user st.returnGas() + // Return gas to the gas pool + if rules.IsAmsterdam { + // Refund is excluded for returning + err = st.gp.ReturnGas(st.initialGas-peakGasUsed, st.gasUsed()) + } else { + // Refund is included for returning + err = st.gp.ReturnGas(st.gasRemaining, st.gasUsed()) + } + if err != nil { + return nil, err + } effectiveTip := msg.GasPrice if rules.IsLondon { effectiveTip = new(big.Int).Sub(msg.GasPrice, st.evm.Context.BaseFee) @@ -564,7 +581,6 @@ func (st *stateTransition) execute() (*ExecutionResult, error) { st.evm.AccessEvents.AddAccount(st.evm.Context.Coinbase, true, math.MaxUint64) } } - return &ExecutionResult{ UsedGas: st.gasUsed(), MaxUsedGas: peakGasUsed, @@ -660,10 +676,6 @@ func (st *stateTransition) returnGas() { if st.evm.Config.Tracer != nil && st.evm.Config.Tracer.OnGasChange != nil && st.gasRemaining > 0 { st.evm.Config.Tracer.OnGasChange(st.gasRemaining, 0, tracing.GasChangeTxLeftOverReturned) } - - // Also return remaining gas to the block gas counter so it is - // available for the next transaction. - st.gp.AddGas(st.gasRemaining) } // gasUsed returns the amount of gas used up by the state transition. diff --git a/core/tracing/hooks.go b/core/tracing/hooks.go index c85abe6482..6d0131ce70 100644 --- a/core/tracing/hooks.go +++ b/core/tracing/hooks.go @@ -358,7 +358,7 @@ const ( // this generates an increase in gas. There is at most one of such gas change per transaction. GasChangeTxRefunds GasChangeReason = 3 // GasChangeTxLeftOverReturned is the amount of gas left over at the end of transaction's execution that will be returned - // to the chain. This change will always be a negative change as we "drain" left over gas towards 0. If there was no gas + // to the account. This change will always be a negative change as we "drain" left over gas towards 0. If there was no gas // left at the end of execution, no such even will be emitted. The returned gas's value in Wei is returned to caller. // There is at most one of such gas change per transaction. GasChangeTxLeftOverReturned GasChangeReason = 4 diff --git a/eth/catalyst/simulated_beacon.go b/eth/catalyst/simulated_beacon.go index ed3fa76a57..452902c78c 100644 --- a/eth/catalyst/simulated_beacon.go +++ b/eth/catalyst/simulated_beacon.go @@ -103,6 +103,8 @@ type SimulatedBeacon struct { func payloadVersion(config *params.ChainConfig, time uint64) engine.PayloadVersion { switch config.LatestFork(time) { + case forks.Amsterdam: + return engine.PayloadV4 case forks.BPO5, forks.BPO4, forks.BPO3, forks.BPO2, forks.BPO1, forks.Osaka, forks.Prague, forks.Cancun: return engine.PayloadV3 case forks.Paris, forks.Shanghai: @@ -198,13 +200,19 @@ func (c *SimulatedBeacon) sealBlock(withdrawals []*types.Withdrawal, timestamp u var random [32]byte rand.Read(random[:]) - fcResponse, err := c.engineAPI.forkchoiceUpdated(c.curForkchoiceState, &engine.PayloadAttributes{ + + attribute := &engine.PayloadAttributes{ Timestamp: timestamp, SuggestedFeeRecipient: feeRecipient, Withdrawals: withdrawals, Random: random, BeaconRoot: &common.Hash{}, - }, version, false) + } + if c.eth.BlockChain().Config().LatestFork(timestamp) == forks.Amsterdam { + slotNumber := uint64(0) + attribute.SlotNumber = &slotNumber + } + fcResponse, err := c.engineAPI.forkchoiceUpdated(c.curForkchoiceState, attribute, version, false) if err != nil { return err } diff --git a/eth/gasestimator/gasestimator.go b/eth/gasestimator/gasestimator.go index 6e79fbd62b..80aeb3d3b2 100644 --- a/eth/gasestimator/gasestimator.go +++ b/eth/gasestimator/gasestimator.go @@ -20,7 +20,6 @@ import ( "context" "errors" "fmt" - "math" "math/big" "github.com/ethereum/go-ethereum/common" @@ -268,7 +267,7 @@ func run(ctx context.Context, call *core.Message, opts *Options) (*core.Executio evm.Cancel() }() // Execute the call, returning a wrapped error or the result - result, err := core.ApplyMessage(evm, call, new(core.GasPool).AddGas(math.MaxUint64)) + result, err := core.ApplyMessage(evm, call, nil) if vmerr := dirtyState.Error(); vmerr != nil { return nil, vmerr } diff --git a/eth/state_accessor.go b/eth/state_accessor.go index 1261320b58..871f2c9269 100644 --- a/eth/state_accessor.go +++ b/eth/state_accessor.go @@ -265,7 +265,7 @@ func (eth *Ethereum) stateAtTransaction(ctx context.Context, block *types.Block, // Not yet the searched for transaction, execute on top of the current state statedb.SetTxContext(tx.Hash(), idx) - if _, err := core.ApplyMessage(evm, msg, new(core.GasPool).AddGas(tx.Gas())); err != nil { + if _, err := core.ApplyMessage(evm, msg, nil); err != nil { return nil, vm.BlockContext{}, nil, nil, fmt.Errorf("transaction %#x failed: %v", tx.Hash(), err) } // Ensure any modifications are committed to the state diff --git a/eth/tracers/api.go b/eth/tracers/api.go index 5f2f16627a..eed404622e 100644 --- a/eth/tracers/api.go +++ b/eth/tracers/api.go @@ -551,7 +551,7 @@ func (api *API) IntermediateRoots(ctx context.Context, hash common.Hash, config } msg, _ := core.TransactionToMessage(tx, signer, block.BaseFee()) statedb.SetTxContext(tx.Hash(), i) - if _, err := core.ApplyMessage(evm, msg, new(core.GasPool).AddGas(msg.GasLimit)); err != nil { + if _, err := core.ApplyMessage(evm, msg, nil); err != nil { log.Warn("Tracing intermediate roots did not complete", "txindex", i, "txhash", tx.Hash(), "err", err) // We intentionally don't return the error here: if we do, then the RPC server will not // return the roots. Most likely, the caller already knows that a certain transaction fails to @@ -707,7 +707,7 @@ txloop: // Generate the next state snapshot fast without tracing msg, _ := core.TransactionToMessage(tx, signer, block.BaseFee()) statedb.SetTxContext(tx.Hash(), i) - if _, err := core.ApplyMessage(evm, msg, new(core.GasPool).AddGas(msg.GasLimit)); err != nil { + if _, err := core.ApplyMessage(evm, msg, nil); err != nil { failed = err break txloop } @@ -792,7 +792,7 @@ func (api *API) standardTraceBlockToFile(ctx context.Context, block *types.Block msg, _ := core.TransactionToMessage(tx, signer, block.BaseFee()) if txHash != (common.Hash{}) && tx.Hash() != txHash { // Process the tx to update state, but don't trace it. - _, err := core.ApplyMessage(evm, msg, new(core.GasPool).AddGas(msg.GasLimit)) + _, err := core.ApplyMessage(evm, msg, nil) if err != nil { return dumps, err } @@ -827,7 +827,7 @@ func (api *API) standardTraceBlockToFile(ctx context.Context, block *types.Block if tracer.OnTxStart != nil { tracer.OnTxStart(evm.GetVMContext(), tx, msg.From) } - _, err = core.ApplyMessage(evm, msg, new(core.GasPool).AddGas(msg.GasLimit)) + _, err = core.ApplyMessage(evm, msg, nil) if writer != nil { writer.Flush() } @@ -1011,7 +1011,6 @@ func (api *API) traceTx(ctx context.Context, tx *types.Transaction, message *cor tracer *Tracer err error timeout = defaultTraceTimeout - usedGas uint64 ) if config == nil { config = &TraceConfig{} @@ -1055,7 +1054,8 @@ func (api *API) traceTx(ctx context.Context, tx *types.Transaction, message *cor // Call Prepare to clear out the statedb access list statedb.SetTxContext(txctx.TxHash, txctx.TxIndex) - _, err = core.ApplyTransactionWithEVM(message, new(core.GasPool).AddGas(message.GasLimit), statedb, vmctx.BlockNumber, txctx.BlockHash, vmctx.Time, tx, &usedGas, evm) + + _, err = core.ApplyTransactionWithEVM(message, core.NewGasPool(message.GasLimit), statedb, vmctx.BlockNumber, txctx.BlockHash, vmctx.Time, tx, evm) if err != nil { return nil, fmt.Errorf("tracing failed: %w", err) } diff --git a/eth/tracers/api_test.go b/eth/tracers/api_test.go index f76c35a1d5..1d5024ad08 100644 --- a/eth/tracers/api_test.go +++ b/eth/tracers/api_test.go @@ -188,7 +188,7 @@ func (b *testBackend) StateAtTransaction(ctx context.Context, block *types.Block return tx, context, statedb, release, nil } msg, _ := core.TransactionToMessage(tx, signer, block.BaseFee()) - if _, err := core.ApplyMessage(evm, msg, new(core.GasPool).AddGas(tx.Gas())); err != nil { + if _, err := core.ApplyMessage(evm, msg, nil); err != nil { return nil, vm.BlockContext{}, nil, nil, fmt.Errorf("transaction %#x failed: %v", tx.Hash(), err) } statedb.Finalise(evm.ChainConfig().IsEIP158(block.Number())) diff --git a/eth/tracers/internal/tracetest/calltrace_test.go b/eth/tracers/internal/tracetest/calltrace_test.go index 08bdafd91f..85eaef32ce 100644 --- a/eth/tracers/internal/tracetest/calltrace_test.go +++ b/eth/tracers/internal/tracetest/calltrace_test.go @@ -132,7 +132,7 @@ func testCallTracer(tracerName string, dirPath string, t *testing.T) { } evm := vm.NewEVM(context, logState, test.Genesis.Config, vm.Config{Tracer: tracer.Hooks}) tracer.OnTxStart(evm.GetVMContext(), tx, msg.From) - vmRet, err := core.ApplyMessage(evm, msg, new(core.GasPool).AddGas(tx.Gas())) + vmRet, err := core.ApplyMessage(evm, msg, nil) if err != nil { t.Fatalf("failed to execute transaction: %v", err) } @@ -224,7 +224,7 @@ func benchTracer(tracerName string, test *callTracerTest, b *testing.B) { if tracer.OnTxStart != nil { tracer.OnTxStart(evm.GetVMContext(), tx, msg.From) } - _, err = core.ApplyMessage(evm, msg, new(core.GasPool).AddGas(tx.Gas())) + _, err = core.ApplyMessage(evm, msg, nil) if err != nil { b.Fatalf("failed to execute transaction: %v", err) } @@ -374,7 +374,7 @@ func TestInternals(t *testing.T) { t.Fatalf("test %v: failed to create message: %v", tc.name, err) } tc.tracer.OnTxStart(evm.GetVMContext(), tx, msg.From) - vmRet, err := core.ApplyMessage(evm, msg, new(core.GasPool).AddGas(tx.Gas())) + vmRet, err := core.ApplyMessage(evm, msg, nil) if err != nil { t.Fatalf("test %v: failed to execute transaction: %v", tc.name, err) } diff --git a/eth/tracers/internal/tracetest/erc7562_tracer_test.go b/eth/tracers/internal/tracetest/erc7562_tracer_test.go index f6e81f5886..02377b8dcb 100644 --- a/eth/tracers/internal/tracetest/erc7562_tracer_test.go +++ b/eth/tracers/internal/tracetest/erc7562_tracer_test.go @@ -124,7 +124,7 @@ func TestErc7562Tracer(t *testing.T) { } evm := vm.NewEVM(context, logState, test.Genesis.Config, vm.Config{Tracer: tracer.Hooks}) tracer.OnTxStart(evm.GetVMContext(), tx, msg.From) - vmRet, err := core.ApplyMessage(evm, msg, new(core.GasPool).AddGas(tx.Gas())) + vmRet, err := core.ApplyMessage(evm, msg, nil) if err != nil { t.Fatalf("failed to execute transaction: %v", err) } diff --git a/eth/tracers/internal/tracetest/flat_calltrace_test.go b/eth/tracers/internal/tracetest/flat_calltrace_test.go index 1882ef315e..37a05966ee 100644 --- a/eth/tracers/internal/tracetest/flat_calltrace_test.go +++ b/eth/tracers/internal/tracetest/flat_calltrace_test.go @@ -113,7 +113,7 @@ func flatCallTracerTestRunner(tracerName string, filename string, dirPath string } evm := vm.NewEVM(context, state.StateDB, test.Genesis.Config, vm.Config{Tracer: tracer.Hooks}) tracer.OnTxStart(evm.GetVMContext(), tx, msg.From) - vmRet, err := core.ApplyMessage(evm, msg, new(core.GasPool).AddGas(tx.Gas())) + vmRet, err := core.ApplyMessage(evm, msg, nil) if err != nil { return fmt.Errorf("failed to execute transaction: %v", err) } diff --git a/eth/tracers/internal/tracetest/prestate_test.go b/eth/tracers/internal/tracetest/prestate_test.go index 456d962c69..23216fa78c 100644 --- a/eth/tracers/internal/tracetest/prestate_test.go +++ b/eth/tracers/internal/tracetest/prestate_test.go @@ -105,7 +105,7 @@ func testPrestateTracer(tracerName string, dirPath string, t *testing.T) { } evm := vm.NewEVM(context, state.StateDB, test.Genesis.Config, vm.Config{Tracer: tracer.Hooks}) tracer.OnTxStart(evm.GetVMContext(), tx, msg.From) - vmRet, err := core.ApplyMessage(evm, msg, new(core.GasPool).AddGas(tx.Gas())) + vmRet, err := core.ApplyMessage(evm, msg, nil) if err != nil { t.Fatalf("failed to execute transaction: %v", err) } diff --git a/eth/tracers/internal/tracetest/selfdestruct_state_test.go b/eth/tracers/internal/tracetest/selfdestruct_state_test.go index 2c714b6dce..bb1a3d9f18 100644 --- a/eth/tracers/internal/tracetest/selfdestruct_state_test.go +++ b/eth/tracers/internal/tracetest/selfdestruct_state_test.go @@ -620,8 +620,7 @@ func TestSelfdestructStateTracer(t *testing.T) { } context := core.NewEVMBlockContext(block.Header(), blockchain, nil) evm := vm.NewEVM(context, hookedState, tt.genesis.Config, vm.Config{Tracer: tracer.Hooks()}) - usedGas := uint64(0) - _, err = core.ApplyTransactionWithEVM(msg, new(core.GasPool).AddGas(tx.Gas()), statedb, block.Number(), block.Hash(), block.Time(), tx, &usedGas, evm) + _, err = core.ApplyTransactionWithEVM(msg, core.NewGasPool(msg.GasLimit), statedb, block.Number(), block.Hash(), block.Time(), tx, evm) if err != nil { t.Fatalf("failed to execute transaction: %v", err) } diff --git a/eth/tracers/tracers_test.go b/eth/tracers/tracers_test.go index 06edeaf698..24f9b3701e 100644 --- a/eth/tracers/tracers_test.go +++ b/eth/tracers/tracers_test.go @@ -91,7 +91,7 @@ func BenchmarkTransactionTraceV2(b *testing.B) { evm.Config.Tracer = tracer snap := state.StateDB.Snapshot() - _, err := core.ApplyMessage(evm, msg, new(core.GasPool).AddGas(tx.Gas())) + _, err := core.ApplyMessage(evm, msg, nil) if err != nil { b.Fatal(err) } diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go index 4f3071cb03..ff6797f67b 100644 --- a/internal/ethapi/api.go +++ b/internal/ethapi/api.go @@ -741,11 +741,10 @@ func doCall(ctx context.Context, b Backend, args TransactionArgs, state *state.S // Make sure the context is cancelled when the call has completed // this makes sure resources are cleaned up. defer cancel() - gp := new(core.GasPool) + + gp := core.NewGasPool(globalGasCap) if globalGasCap == 0 { - gp.AddGas(gomath.MaxUint64) - } else { - gp.AddGas(globalGasCap) + gp = core.NewGasPool(gomath.MaxUint64) } return applyMessage(ctx, b, args, state, header, timeout, gp, &blockCtx, &vm.Config{NoBaseFee: true}, precompiles) } @@ -855,12 +854,11 @@ func (api *BlockChainAPI) SimulateV1(ctx context.Context, opts simOpts, blockNrO gasCap = gomath.MaxUint64 } sim := &simulator{ - b: api.b, - state: state, - base: base, - chainConfig: api.b.ChainConfig(), - // Each tx and all the series of txes shouldn't consume more gas than cap - gp: new(core.GasPool).AddGas(gasCap), + b: api.b, + state: state, + base: base, + chainConfig: api.b.ChainConfig(), + gasRemaining: gasCap, traceTransfers: opts.TraceTransfers, validate: opts.Validation, fullTx: opts.ReturnFullTransactions, @@ -1369,7 +1367,7 @@ func AccessList(ctx context.Context, b Backend, blockNrOrHash rpc.BlockNumberOrH if msg.BlobGasFeeCap != nil && msg.BlobGasFeeCap.BitLen() == 0 { evm.Context.BlobBaseFee = new(big.Int) } - res, err := core.ApplyMessage(evm, msg, new(core.GasPool).AddGas(msg.GasLimit)) + res, err := core.ApplyMessage(evm, msg, nil) if err != nil { return nil, 0, nil, fmt.Errorf("failed to apply transaction: %v err: %v", args.ToTransaction(types.LegacyTxType).Hash(), err) } diff --git a/internal/ethapi/api_test.go b/internal/ethapi/api_test.go index 2f0c07694d..a82df440e6 100644 --- a/internal/ethapi/api_test.go +++ b/internal/ethapi/api_test.go @@ -2507,7 +2507,7 @@ func TestSimulateV1ChainLinkage(t *testing.T) { state: stateDB, base: baseHeader, chainConfig: backend.ChainConfig(), - gp: new(core.GasPool).AddGas(math.MaxUint64), + gasRemaining: math.MaxUint64, traceTransfers: false, validate: false, fullTx: false, @@ -2592,7 +2592,7 @@ func TestSimulateV1TxSender(t *testing.T) { state: stateDB, base: baseHeader, chainConfig: backend.ChainConfig(), - gp: new(core.GasPool).AddGas(math.MaxUint64), + gasRemaining: math.MaxUint64, traceTransfers: false, validate: false, fullTx: true, diff --git a/internal/ethapi/simulate.go b/internal/ethapi/simulate.go index c9396cd327..325ee6d5bb 100644 --- a/internal/ethapi/simulate.go +++ b/internal/ethapi/simulate.go @@ -156,7 +156,7 @@ type simulator struct { state *state.StateDB base *types.Header chainConfig *params.ChainConfig - gp *core.GasPool + gasRemaining uint64 traceTransfers bool validate bool fullTx bool @@ -200,7 +200,13 @@ func (sim *simulator) execute(ctx context.Context, blocks []simBlock) ([]*simBlo return nil, err } headers[bi] = result.Header() - results[bi] = &simBlockResult{fullTx: sim.fullTx, chainConfig: sim.chainConfig, Block: result, Calls: callResults, senders: senders} + results[bi] = &simBlockResult{ + fullTx: sim.fullTx, + chainConfig: sim.chainConfig, + Block: result, + Calls: callResults, + senders: senders, + } parent = result.Header() } return results, nil @@ -234,15 +240,19 @@ func (sim *simulator) processBlock(ctx context.Context, block *simBlock, header, blockContext.BlobBaseFee = block.BlockOverrides.BlobBaseFee.ToInt() } precompiles := sim.activePrecompiles(header) + // State overrides are applied prior to execution of a block if err := block.StateOverrides.Apply(sim.state, precompiles); err != nil { return nil, nil, nil, err } var ( - gasUsed, blobGasUsed uint64 - txes = make([]*types.Transaction, len(block.Calls)) - callResults = make([]simCallResult, len(block.Calls)) - receipts = make([]*types.Receipt, len(block.Calls)) + gp = core.NewGasPool(blockContext.GasLimit) + blobGasUsed uint64 + + txes = make([]*types.Transaction, len(block.Calls)) + callResults = make([]simCallResult, len(block.Calls)) + receipts = make([]*types.Receipt, len(block.Calls)) + // Block hash will be repaired after execution. tracer = newTracer(sim.traceTransfers, blockContext.BlockNumber.Uint64(), blockContext.Time, common.Hash{}, common.Hash{}, 0) vmConfig = &vm.Config{ @@ -272,10 +282,11 @@ func (sim *simulator) processBlock(ctx context.Context, block *simBlock, header, } var allLogs []*types.Log for i, call := range block.Calls { + // Terminate if the context is cancelled if err := ctx.Err(); err != nil { return nil, nil, nil, err } - if err := sim.sanitizeCall(&call, sim.state, header, blockContext, &gasUsed); err != nil { + if err := sim.sanitizeCall(&call, sim.state, header, gp); err != nil { return nil, nil, nil, err } var ( @@ -285,10 +296,11 @@ func (sim *simulator) processBlock(ctx context.Context, block *simBlock, header, txes[i] = tx senders[txHash] = call.from() tracer.reset(txHash, uint(i)) - sim.state.SetTxContext(txHash, i) + // EoA check is always skipped, even in validation mode. + sim.state.SetTxContext(txHash, i) msg := call.ToMessage(header.BaseFee, !sim.validate) - result, err := applyMessageWithEVM(ctx, evm, msg, timeout, sim.gp) + result, err := applyMessageWithEVM(ctx, evm, msg, timeout, gp) if err != nil { txErr := txValidationError(err) return nil, nil, nil, txErr @@ -300,9 +312,16 @@ func (sim *simulator) processBlock(ctx context.Context, block *simBlock, header, } else { root = sim.state.IntermediateRoot(sim.chainConfig.IsEIP158(blockContext.BlockNumber)).Bytes() } - gasUsed += result.UsedGas - receipts[i] = core.MakeReceipt(evm, result, sim.state, blockContext.BlockNumber, common.Hash{}, blockContext.Time, tx, gasUsed, root) + receipts[i] = core.MakeReceipt(evm, result, sim.state, blockContext.BlockNumber, common.Hash{}, blockContext.Time, tx, gp.CumulativeUsed(), root) blobGasUsed += receipts[i].BlobGasUsed + + // Make sure the gas cap is still enforced. It's only for + // internally protection. + if sim.gasRemaining < result.UsedGas { + return nil, nil, nil, fmt.Errorf("gas cap reached, required: %d, remaining: %d", result.UsedGas, sim.gasRemaining) + } + sim.gasRemaining -= result.UsedGas + logs := tracer.Logs() callRes := simCallResult{ReturnValue: result.Return(), Logs: logs, GasUsed: hexutil.Uint64(result.UsedGas)} if result.Failed() { @@ -320,12 +339,14 @@ func (sim *simulator) processBlock(ctx context.Context, block *simBlock, header, } callResults[i] = callRes } - header.GasUsed = gasUsed + // Assign total consumed gas to the header + header.GasUsed = gp.Used() if sim.chainConfig.IsCancun(header.Number, header.Time) { header.BlobGasUsed = &blobGasUsed } - var requests [][]byte + // Process EIP-7685 requests + var requests [][]byte if sim.chainConfig.IsPrague(header.Number, header.Time) { requests = [][]byte{} // EIP-6110 @@ -345,7 +366,11 @@ func (sim *simulator) processBlock(ctx context.Context, block *simBlock, header, reqHash := types.CalcRequestsHash(requests) header.RequestsHash = &reqHash } - blockBody := &types.Body{Transactions: txes, Withdrawals: *block.BlockOverrides.Withdrawals} + + blockBody := &types.Body{ + Transactions: txes, + Withdrawals: *block.BlockOverrides.Withdrawals, + } chainHeadReader := &simChainHeadReader{ctx, sim.b} b, err := sim.b.Engine().FinalizeAndAssemble(chainHeadReader, header, sim.state, blockBody, receipts) if err != nil { @@ -366,23 +391,20 @@ func repairLogs(calls []simCallResult, hash common.Hash) { } } -func (sim *simulator) sanitizeCall(call *TransactionArgs, state vm.StateDB, header *types.Header, blockContext vm.BlockContext, gasUsed *uint64) error { +func (sim *simulator) sanitizeCall(call *TransactionArgs, state vm.StateDB, header *types.Header, gp *core.GasPool) error { if call.Nonce == nil { nonce := state.GetNonce(call.from()) call.Nonce = (*hexutil.Uint64)(&nonce) } // Let the call run wild unless explicitly specified. + remaining := gp.Gas() if call.Gas == nil { - remaining := blockContext.GasLimit - *gasUsed call.Gas = (*hexutil.Uint64)(&remaining) } - if *gasUsed+uint64(*call.Gas) > blockContext.GasLimit { - return &blockGasLimitReachedError{fmt.Sprintf("block gas limit reached: %d >= %d", *gasUsed, blockContext.GasLimit)} + if remaining < uint64(*call.Gas) { + return &blockGasLimitReachedError{fmt.Sprintf("block gas limit reached: remaining: %d, required: %d", remaining, *call.Gas)} } - if err := call.CallDefaults(sim.gp.Gas(), header.BaseFee, sim.chainConfig.ChainID); err != nil { - return err - } - return nil + return call.CallDefaults(0, header.BaseFee, sim.chainConfig.ChainID) } func (sim *simulator) activePrecompiles(base *types.Header) vm.PrecompiledContracts { @@ -473,12 +495,14 @@ func (sim *simulator) makeHeaders(blocks []simBlock) ([]*types.Header, error) { } overrides := block.BlockOverrides - var withdrawalsHash *common.Hash number := overrides.Number.ToInt() timestamp := (uint64)(*overrides.Time) + + var withdrawalsHash *common.Hash if sim.chainConfig.IsShanghai(number, timestamp) { withdrawalsHash = &types.EmptyWithdrawalsHash } + var parentBeaconRoot *common.Hash if sim.chainConfig.IsCancun(number, timestamp) { parentBeaconRoot = &common.Hash{} @@ -508,7 +532,11 @@ func (sim *simulator) makeHeaders(blocks []simBlock) ([]*types.Header, error) { } func (sim *simulator) newSimulatedChainContext(ctx context.Context, headers []*types.Header) *ChainContext { - return NewChainContext(ctx, &simBackend{base: sim.base, b: sim.b, headers: headers}) + return NewChainContext(ctx, &simBackend{ + base: sim.base, + b: sim.b, + headers: headers, + }) } type simBackend struct { diff --git a/internal/ethapi/simulate_test.go b/internal/ethapi/simulate_test.go index c747b76477..b6037a8f35 100644 --- a/internal/ethapi/simulate_test.go +++ b/internal/ethapi/simulate_test.go @@ -17,6 +17,7 @@ package ethapi import ( + "math" "math/big" "testing" @@ -80,7 +81,10 @@ func TestSimulateSanitizeBlockOrder(t *testing.T) { err: "block timestamps must be in order: 72 <= 72", }, } { - sim := &simulator{base: &types.Header{Number: big.NewInt(int64(tc.baseNumber)), Time: tc.baseTimestamp}} + sim := &simulator{ + base: &types.Header{Number: big.NewInt(int64(tc.baseNumber)), Time: tc.baseTimestamp}, + gasRemaining: math.MaxUint64, + } res, err := sim.sanitizeChain(tc.blocks) if err != nil { if err.Error() == tc.err { diff --git a/miner/stress/main.go b/miner/stress/main.go new file mode 100644 index 0000000000..aaf0993c37 --- /dev/null +++ b/miner/stress/main.go @@ -0,0 +1,210 @@ +// Copyright 2018 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +// This file contains a miner stress test based on the Engine API flow. +package main + +import ( + "crypto/ecdsa" + "math/big" + "math/rand" + "os" + "os/signal" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/fdlimit" + "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/txpool/legacypool" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/eth" + "github.com/ethereum/go-ethereum/eth/catalyst" + "github.com/ethereum/go-ethereum/eth/downloader" + "github.com/ethereum/go-ethereum/eth/ethconfig" + "github.com/ethereum/go-ethereum/log" + "github.com/ethereum/go-ethereum/node" + "github.com/ethereum/go-ethereum/params" +) + +var refundContract = common.HexToAddress("0x1000000000000000000000000000000000000001") + +func main() { + log.SetDefault(log.NewLogger(log.NewTerminalHandlerWithLevel(os.Stderr, log.LevelInfo, true))) + fdlimit.Raise(2048) + + // Generate a batch of accounts to seal and fund with + faucets := make([]*ecdsa.PrivateKey, 128) + for i := 0; i < len(faucets); i++ { + faucets[i], _ = crypto.GenerateKey() + } + // Create a post-merge network where blocks are built/inserted through + // engine API calls driven by a simulated beacon client. + genesis := makeGenesis(faucets) + + // Handle interrupts. + interruptCh := make(chan os.Signal, 5) + signal.Notify(interruptCh, os.Interrupt) + + // Start one node that accepts transactions and builds/inserts blocks via + // Engine API (through the simulated beacon driver). + stack, backend, beacon, err := makeNode(genesis) + if err != nil { + panic(err) + } + defer stack.Close() + defer beacon.Stop() + + // Start injecting transactions from the faucet like crazy + var ( + sent uint64 + nonces = make([]uint64, len(faucets)) + signer = types.LatestSigner(genesis.Config) + refundSet = true // slot 0 starts as non-zero in genesis + ) + for { + // Stop when interrupted. + select { + case <-interruptCh: + return + default: + } + + var ( + tx *types.Transaction + err error + ) + // Every third tx targets a contract path that alternates set/clear. + // Clearing a previously non-zero slot triggers gas refund. + if sent%3 == 0 { + var data []byte + if refundSet { + data = nil // empty calldata => clear slot to zero (refund path) + } else { + data = []byte{0x01} // non-empty calldata => set slot to one + } + tx, err = types.SignTx(types.NewTransaction(nonces[0], refundContract, new(big.Int), 50000, big.NewInt(100000000000), data), signer, faucets[0]) + if err != nil { + panic(err) + } + nonces[0]++ + refundSet = !refundSet + } else { + index := 1 + rand.Intn(len(faucets)-1) + tx, err = types.SignTx(types.NewTransaction(nonces[index], crypto.PubkeyToAddress(faucets[index].PublicKey), new(big.Int), 21000, big.NewInt(100000000000), nil), signer, faucets[index]) + if err != nil { + panic(err) + } + nonces[index]++ + } + errs := backend.TxPool().Add([]*types.Transaction{tx}, true) + for _, err := range errs { + if err != nil { + panic(err) + } + } + sent++ + + // Create and import blocks through the engine API path. + if sent%256 == 0 { + beacon.Commit() + } + + // Wait if we're too saturated + if pend, _ := backend.TxPool().Stats(); pend > 4096 { + beacon.Commit() + time.Sleep(50 * time.Millisecond) + } + } +} + +// makeGenesis creates a post-merge genesis block. +func makeGenesis(faucets []*ecdsa.PrivateKey) *core.Genesis { + config := *params.AllDevChainProtocolChanges + config.ChainID = big.NewInt(18) + + blockZero := uint64(0) + config.AmsterdamTime = &blockZero + config.BlobScheduleConfig.Amsterdam = ¶ms.BlobConfig{ + Target: 14, + Max: 21, + UpdateFraction: 13739630, + } + + genesis := &core.Genesis{ + Config: &config, + GasLimit: 25000000, + Alloc: types.GenesisAlloc{}, + } + for _, faucet := range faucets { + genesis.Alloc[crypto.PubkeyToAddress(faucet.PublicKey)] = types.Account{ + Balance: new(big.Int).Exp(big.NewInt(2), big.NewInt(128), nil), + } + } + // Runtime code: + // - empty calldata: SSTORE(0,0) + // - non-empty calldata: SSTORE(0,1) + // Slot 0 is initialized to 1 so the first clear includes gas refund. + genesis.Alloc[refundContract] = types.Account{ + Code: common.FromHex("0x3615600b576001600055005b600060005500"), + Storage: map[common.Hash]common.Hash{ + common.Hash{}: common.BigToHash(big.NewInt(1)), + }, + } + return genesis +} + +func makeNode(genesis *core.Genesis) (*node.Node, *eth.Ethereum, *catalyst.SimulatedBeacon, error) { + // Define the basic configurations for the Ethereum node + datadir, _ := os.MkdirTemp("", "") + + config := &node.Config{ + Name: "geth", + DataDir: datadir, + } + // Start the node and configure a full Ethereum node on it + stack, err := node.New(config) + if err != nil { + return nil, nil, nil, err + } + // Create and register the backend + ethBackend, err := eth.New(stack, ðconfig.Config{ + Genesis: genesis, + NetworkId: genesis.Config.ChainID.Uint64(), + SyncMode: downloader.FullSync, + DatabaseCache: 256, + DatabaseHandles: 256, + TxPool: legacypool.DefaultConfig, + GPO: ethconfig.Defaults.GPO, + Miner: ethconfig.Defaults.Miner, + SlowBlockThreshold: time.Second, + }) + if err != nil { + return nil, nil, nil, err + } + + if err := stack.Start(); err != nil { + return nil, nil, nil, err + } + driver, err := catalyst.NewSimulatedBeacon(0, common.Address{}, ethBackend) + if err != nil { + return nil, nil, nil, err + } + if err := driver.Start(); err != nil { + return nil, nil, nil, err + } + return stack, ethBackend, driver, nil +} diff --git a/miner/worker.go b/miner/worker.go index e924ca9c86..bfeeaa248b 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -146,9 +146,6 @@ func (miner *Miner) generateWork(genParam *generateParams, witness bool) *newPay // If forceOverrides is true and overrideTxs is not empty, commit the override transactions // otherwise, fill the block with the current transactions from the txpool if genParam.forceOverrides && len(genParam.overrideTxs) > 0 { - if work.gasPool == nil { - work.gasPool = new(core.GasPool).AddGas(work.header.GasLimit) - } for _, tx := range genParam.overrideTxs { work.state.SetTxContext(tx.Hash(), work.tcount) if err := miner.commitTransaction(work, tx); err != nil { @@ -326,6 +323,7 @@ func (miner *Miner) makeEnv(parent *types.Header, header *types.Header, coinbase state: state, size: uint64(header.Size()), coinbase: coinbase, + gasPool: core.NewGasPool(header.GasLimit), header: header, witness: state.Witness(), evm: vm.NewEVM(core.NewEVMBlockContext(header, miner.chain, &coinbase), state, miner.chainConfig, vm.Config{}), @@ -379,24 +377,20 @@ func (miner *Miner) commitBlobTransaction(env *environment, tx *types.Transactio func (miner *Miner) applyTransaction(env *environment, tx *types.Transaction) (*types.Receipt, error) { var ( snap = env.state.Snapshot() - gp = env.gasPool.Gas() + gp = env.gasPool.Snapshot() ) - receipt, err := core.ApplyTransaction(env.evm, env.gasPool, env.state, env.header, tx, &env.header.GasUsed) + receipt, err := core.ApplyTransaction(env.evm, env.gasPool, env.state, env.header, tx) if err != nil { env.state.RevertToSnapshot(snap) - env.gasPool.SetGas(gp) + env.gasPool.Set(gp) + return nil, err } - return receipt, err + env.header.GasUsed = env.gasPool.Used() + return receipt, nil } func (miner *Miner) commitTransactions(env *environment, plainTxs, blobTxs *transactionsByPriceAndNonce, interrupt *atomic.Int32) error { - var ( - isCancun = miner.chainConfig.IsCancun(env.header.Number, env.header.Time) - gasLimit = env.header.GasLimit - ) - if env.gasPool == nil { - env.gasPool = new(core.GasPool).AddGas(gasLimit) - } + isCancun := miner.chainConfig.IsCancun(env.header.Number, env.header.Time) for { // Check interruption signal and abort building if it's fired. if interrupt != nil { diff --git a/tests/state_test_util.go b/tests/state_test_util.go index 7525081f84..3c7ee1c31d 100644 --- a/tests/state_test_util.go +++ b/tests/state_test_util.go @@ -342,9 +342,7 @@ func (t *StateTest) RunNoVerify(subtest StateSubtest, vmconfig vm.Config, snapsh } // Execute the message. snapshot := st.StateDB.Snapshot() - gaspool := new(core.GasPool) - gaspool.AddGas(block.GasLimit()) - vmRet, err := core.ApplyMessage(evm, msg, gaspool) + vmRet, err := core.ApplyMessage(evm, msg, core.NewGasPool(block.GasLimit())) if err != nil { st.StateDB.RevertToSnapshot(snapshot) if tracer := evm.Config.Tracer; tracer != nil && tracer.OnTxEnd != nil { From 28dad943f62d5182edcf40b6249f3161ca9281b5 Mon Sep 17 00:00:00 2001 From: Jonny Rhea <5555162+jrhea@users.noreply.github.com> Date: Wed, 4 Mar 2026 04:21:11 -0600 Subject: [PATCH 092/161] cmd/geth: set default cache to 4096 (#33836) Mainnet was already overriding --cache to 4096. This PR just makes this the default. --- cmd/geth/main.go | 13 ------------- cmd/utils/flags.go | 2 +- 2 files changed, 1 insertion(+), 14 deletions(-) diff --git a/cmd/geth/main.go b/cmd/geth/main.go index ca75775be2..b72cbb9885 100644 --- a/cmd/geth/main.go +++ b/cmd/geth/main.go @@ -22,7 +22,6 @@ import ( "os" "slices" "sort" - "strconv" "time" "github.com/ethereum/go-ethereum/accounts" @@ -316,18 +315,6 @@ func prepare(ctx *cli.Context) { case !ctx.IsSet(utils.NetworkIdFlag.Name): log.Info("Starting Geth on Ethereum mainnet...") } - // If we're a full node on mainnet without --cache specified, bump default cache allowance - if !ctx.IsSet(utils.CacheFlag.Name) && !ctx.IsSet(utils.NetworkIdFlag.Name) { - // Make sure we're not on any supported preconfigured testnet either - if !ctx.IsSet(utils.HoleskyFlag.Name) && - !ctx.IsSet(utils.SepoliaFlag.Name) && - !ctx.IsSet(utils.HoodiFlag.Name) && - !ctx.IsSet(utils.DeveloperFlag.Name) { - // Nope, we're really on mainnet. Bump that cache up! - log.Info("Bumping default cache on mainnet", "provided", ctx.Int(utils.CacheFlag.Name), "updated", 4096) - ctx.Set(utils.CacheFlag.Name, strconv.Itoa(4096)) - } - } } // geth is the main entry point into the system if no special subcommand is run. diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 75b5b4785a..b0d6ee5203 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -491,7 +491,7 @@ var ( CacheFlag = &cli.IntFlag{ Name: "cache", Usage: "Megabytes of memory allocated to internal caching (default = 4096 mainnet full node, 128 light mode)", - Value: 1024, + Value: 4096, Category: flags.PerfCategory, } CacheDatabaseFlag = &cli.IntFlag{ From 402c71f2e2e6a26cea7920e70a660d9027d44b82 Mon Sep 17 00:00:00 2001 From: Jonny Rhea <5555162+jrhea@users.noreply.github.com> Date: Wed, 4 Mar 2026 04:47:10 -0600 Subject: [PATCH 093/161] internal/telemetry: fix undersized span queue causing dropped spans (#33927) The BatchSpanProcessor queue size was incorrectly set to DefaultMaxExportBatchSize (512) instead of DefaultMaxQueueSize (2048). I noticed the issue on bloatnet when analyzing the block building traces. During a particular run, the miner was including 1000 transactions in a single block. When telemetry is enabled, the miner creates a span for each transaction added to the block. With the queue capped at 512, spans were silently dropped when production outpaced the span export, resulting in incomplete traces with orphaned spans. While this doesn't eliminate the possibility of drops under extreme load, using the correct default restores the 4x buffer between queue capacity and export batch size that the SDK was designed around. --- internal/telemetry/tracesetup/setup.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/telemetry/tracesetup/setup.go b/internal/telemetry/tracesetup/setup.go index 9637ca1a9b..444416dd26 100644 --- a/internal/telemetry/tracesetup/setup.go +++ b/internal/telemetry/tracesetup/setup.go @@ -113,7 +113,7 @@ func SetupTelemetry(cfg node.OpenTelemetryConfig, stack *node.Node) error { // Define batch span processor options batchOpts := []sdktrace.BatchSpanProcessorOption{ // The maximum number of spans that can be queued before dropping - sdktrace.WithMaxQueueSize(sdktrace.DefaultMaxExportBatchSize), + sdktrace.WithMaxQueueSize(sdktrace.DefaultMaxQueueSize), // The maximum number of spans to export in a single batch sdktrace.WithMaxExportBatchSize(sdktrace.DefaultMaxExportBatchSize), // How long an export operation can take before timing out From fc8c10476d5a43bd892cafb19b86d20642384c6c Mon Sep 17 00:00:00 2001 From: J Date: Wed, 4 Mar 2026 04:37:47 -0700 Subject: [PATCH 094/161] internal/ethapi: add MaxUsedGas field to eth_simulateV1 response (#32789) closes #32741 --- internal/ethapi/simulate.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/internal/ethapi/simulate.go b/internal/ethapi/simulate.go index 325ee6d5bb..63513f8d66 100644 --- a/internal/ethapi/simulate.go +++ b/internal/ethapi/simulate.go @@ -59,6 +59,7 @@ type simCallResult struct { ReturnValue hexutil.Bytes `json:"returnData"` Logs []*types.Log `json:"logs"` GasUsed hexutil.Uint64 `json:"gasUsed"` + MaxUsedGas hexutil.Uint64 `json:"maxUsedGas"` Status hexutil.Uint64 `json:"status"` Error *callError `json:"error,omitempty"` } @@ -323,7 +324,7 @@ func (sim *simulator) processBlock(ctx context.Context, block *simBlock, header, sim.gasRemaining -= result.UsedGas logs := tracer.Logs() - callRes := simCallResult{ReturnValue: result.Return(), Logs: logs, GasUsed: hexutil.Uint64(result.UsedGas)} + callRes := simCallResult{ReturnValue: result.Return(), Logs: logs, GasUsed: hexutil.Uint64(result.UsedGas), MaxUsedGas: hexutil.Uint64(result.MaxUsedGas)} if result.Failed() { callRes.Status = hexutil.Uint64(types.ReceiptStatusFailed) if errors.Is(result.Err, vm.ErrExecutionReverted) { From ce64ab44ed5209e7ac9c9ac5af383309483d155b Mon Sep 17 00:00:00 2001 From: Sina M <1591639+s1na@users.noreply.github.com> Date: Thu, 5 Mar 2026 02:09:07 +0100 Subject: [PATCH 095/161] internal/ethapi: fix gas cap for eth_simulateV1 (#33952) Fixes a regression in #33593 where a block gas limit > gasCap resulted in more execution than the gas cap. --- internal/ethapi/api.go | 6 +---- internal/ethapi/api_test.go | 5 ++-- internal/ethapi/simulate.go | 45 +++++++++++++++++++++++++++++--- internal/ethapi/simulate_test.go | 5 ++-- 4 files changed, 46 insertions(+), 15 deletions(-) diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go index ff6797f67b..41d165a423 100644 --- a/internal/ethapi/api.go +++ b/internal/ethapi/api.go @@ -849,16 +849,12 @@ func (api *BlockChainAPI) SimulateV1(ctx context.Context, opts simOpts, blockNrO if state == nil || err != nil { return nil, err } - gasCap := api.b.RPCGasCap() - if gasCap == 0 { - gasCap = gomath.MaxUint64 - } sim := &simulator{ b: api.b, state: state, base: base, chainConfig: api.b.ChainConfig(), - gasRemaining: gasCap, + budget: newGasBudget(api.b.RPCGasCap()), traceTransfers: opts.TraceTransfers, validate: opts.Validation, fullTx: opts.ReturnFullTransactions, diff --git a/internal/ethapi/api_test.go b/internal/ethapi/api_test.go index a82df440e6..62e9979d3d 100644 --- a/internal/ethapi/api_test.go +++ b/internal/ethapi/api_test.go @@ -24,7 +24,6 @@ import ( "encoding/json" "errors" "fmt" - "math" "math/big" "os" "path/filepath" @@ -2507,7 +2506,7 @@ func TestSimulateV1ChainLinkage(t *testing.T) { state: stateDB, base: baseHeader, chainConfig: backend.ChainConfig(), - gasRemaining: math.MaxUint64, + budget: newGasBudget(0), traceTransfers: false, validate: false, fullTx: false, @@ -2592,7 +2591,7 @@ func TestSimulateV1TxSender(t *testing.T) { state: stateDB, base: baseHeader, chainConfig: backend.ChainConfig(), - gasRemaining: math.MaxUint64, + budget: newGasBudget(0), traceTransfers: false, validate: false, fullTx: true, diff --git a/internal/ethapi/simulate.go b/internal/ethapi/simulate.go index 63513f8d66..f0c69e39a4 100644 --- a/internal/ethapi/simulate.go +++ b/internal/ethapi/simulate.go @@ -21,6 +21,7 @@ import ( "encoding/json" "errors" "fmt" + "math" "math/big" "time" @@ -150,6 +151,39 @@ func (m *simChainHeadReader) GetHeaderByHash(hash common.Hash) *types.Header { return header } +// gasBudget tracks the remaining gas allowed across all simulated blocks. +// It enforces the RPC-level gas cap to prevent DoS. +type gasBudget struct { + remaining uint64 +} + +// newGasBudget creates a gas budget with the given cap. +// A cap of 0 is treated as unlimited. +func newGasBudget(cap uint64) *gasBudget { + if cap == 0 { + cap = math.MaxUint64 + } + return &gasBudget{remaining: cap} +} + +// cap returns the given gas value clamped to the remaining budget. +func (b *gasBudget) cap(gas uint64) uint64 { + if gas > b.remaining { + return b.remaining + } + return gas +} + +// consume deducts the given amount from the budget. +// Returns an error if the amount exceeds the remaining budget. +func (b *gasBudget) consume(amount uint64) error { + if amount > b.remaining { + return fmt.Errorf("RPC gas cap exhausted: need %d, remaining %d", amount, b.remaining) + } + b.remaining -= amount + return nil +} + // simulator is a stateful object that simulates a series of blocks. // it is not safe for concurrent use. type simulator struct { @@ -157,7 +191,7 @@ type simulator struct { state *state.StateDB base *types.Header chainConfig *params.ChainConfig - gasRemaining uint64 + budget *gasBudget traceTransfers bool validate bool fullTx bool @@ -318,10 +352,9 @@ func (sim *simulator) processBlock(ctx context.Context, block *simBlock, header, // Make sure the gas cap is still enforced. It's only for // internally protection. - if sim.gasRemaining < result.UsedGas { - return nil, nil, nil, fmt.Errorf("gas cap reached, required: %d, remaining: %d", result.UsedGas, sim.gasRemaining) + if err := sim.budget.consume(result.UsedGas); err != nil { + return nil, nil, nil, err } - sim.gasRemaining -= result.UsedGas logs := tracer.Logs() callRes := simCallResult{ReturnValue: result.Return(), Logs: logs, GasUsed: hexutil.Uint64(result.UsedGas), MaxUsedGas: hexutil.Uint64(result.MaxUsedGas)} @@ -405,6 +438,10 @@ func (sim *simulator) sanitizeCall(call *TransactionArgs, state vm.StateDB, head if remaining < uint64(*call.Gas) { return &blockGasLimitReachedError{fmt.Sprintf("block gas limit reached: remaining: %d, required: %d", remaining, *call.Gas)} } + // Clamp to the cross-block gas budget. + gas := sim.budget.cap(uint64(*call.Gas)) + call.Gas = (*hexutil.Uint64)(&gas) + return call.CallDefaults(0, header.BaseFee, sim.chainConfig.ChainID) } diff --git a/internal/ethapi/simulate_test.go b/internal/ethapi/simulate_test.go index b6037a8f35..6a83e744de 100644 --- a/internal/ethapi/simulate_test.go +++ b/internal/ethapi/simulate_test.go @@ -17,7 +17,6 @@ package ethapi import ( - "math" "math/big" "testing" @@ -82,8 +81,8 @@ func TestSimulateSanitizeBlockOrder(t *testing.T) { }, } { sim := &simulator{ - base: &types.Header{Number: big.NewInt(int64(tc.baseNumber)), Time: tc.baseTimestamp}, - gasRemaining: math.MaxUint64, + base: &types.Header{Number: big.NewInt(int64(tc.baseNumber)), Time: tc.baseTimestamp}, + budget: newGasBudget(0), } res, err := sim.sanitizeChain(tc.blocks) if err != nil { From 344ce84a431613014c09cb88cdb14514a5a778cf Mon Sep 17 00:00:00 2001 From: Bosul Mun Date: Thu, 5 Mar 2026 12:48:44 +0900 Subject: [PATCH 096/161] eth/fetcher: fix flaky test by improving event unsubscription (#33950) Eth currently has a flaky test, related to the tx fetcher. The issue seems to happen when Unsubscribe is called while sub is nil. It seems that chain.Stop() may be invoked before the loop starts in some tests, but the exact cause is still under investigation through repeated runs. I think this change will at least prevent the error. --- eth/fetcher/tx_fetcher.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/eth/fetcher/tx_fetcher.go b/eth/fetcher/tx_fetcher.go index bc422e6abe..5817dfbcf5 100644 --- a/eth/fetcher/tx_fetcher.go +++ b/eth/fetcher/tx_fetcher.go @@ -442,7 +442,9 @@ func (f *TxFetcher) loop() { if f.chain != nil { headEventCh = make(chan core.ChainEvent, 10) sub := f.chain.SubscribeChainEvent(headEventCh) - defer sub.Unsubscribe() + if sub != nil { + defer sub.Unsubscribe() + } } for { From a0fb8102fefd524dcb1ad884f99ad310f7fe4fe2 Mon Sep 17 00:00:00 2001 From: Guillaume Ballet <3272758+gballet@users.noreply.github.com> Date: Thu, 5 Mar 2026 14:43:31 +0100 Subject: [PATCH 097/161] trie/bintrie: fix overflow management in slot key computation (#33951) The computation of `MAIN_STORAGE_OFFSET` was incorrect, causing the last byte of the stem to be dropped. This means that there would be a collision in the hash computation (at the preimage level, not a hash collision of course) if two keys were only differing at byte 31. --- core/genesis_test.go | 2 +- trie/bintrie/key_encoding.go | 50 ++++++++++++++++++++++++------------ 2 files changed, 35 insertions(+), 17 deletions(-) diff --git a/core/genesis_test.go b/core/genesis_test.go index ba00581b06..2b08b36690 100644 --- a/core/genesis_test.go +++ b/core/genesis_test.go @@ -308,7 +308,7 @@ func TestVerkleGenesisCommit(t *testing.T) { }, } - expected := common.FromHex("b94812c1674dcf4f2bc98f4503d15f4cc674265135bcf3be6e4417b60881042a") + expected := common.FromHex("1fd154971d9a386c4ec75fe7138c17efb569bfc2962e46e94a376ba997e3fadc") got := genesis.ToBlock().Root().Bytes() if !bytes.Equal(got, expected) { t.Fatalf("invalid genesis state root, expected %x, got %x", expected, got) diff --git a/trie/bintrie/key_encoding.go b/trie/bintrie/key_encoding.go index 94a22d52d0..9b98bee491 100644 --- a/trie/bintrie/key_encoding.go +++ b/trie/bintrie/key_encoding.go @@ -47,13 +47,26 @@ var ( ) func GetBinaryTreeKey(addr common.Address, key []byte) []byte { + return getBinaryTreeKey(addr, key, false) +} + +func getBinaryTreeKey(addr common.Address, offset []byte, overflow bool) []byte { hasher := sha256.New() hasher.Write(zeroHash[:12]) hasher.Write(addr[:]) - hasher.Write(key[:31]) - hasher.Write([]byte{0}) + var buf [32]byte + // key is big endian, hashed value is little endian + for i := range offset[:31] { + buf[i] = offset[30-i] + } + if overflow { + // Overflow detected when adding MAIN_STORAGE_OFFSET, + // reporting it in the shifter 32 byte value. + buf[31] = 1 + } + hasher.Write(buf[:]) k := hasher.Sum(nil) - k[31] = key[31] + k[31] = offset[31] return k } @@ -69,24 +82,29 @@ func GetBinaryTreeKeyCodeHash(addr common.Address) []byte { return GetBinaryTreeKey(addr, k[:]) } -func GetBinaryTreeKeyStorageSlot(address common.Address, key []byte) []byte { - var k [32]byte +func GetBinaryTreeKeyStorageSlot(address common.Address, slotnum []byte) []byte { + var offset [32]byte // Case when the key belongs to the account header - if bytes.Equal(key[:31], zeroHash[:31]) && key[31] < 64 { - k[31] = 64 + key[31] - return GetBinaryTreeKey(address, k[:]) + if bytes.Equal(slotnum[:31], zeroHash[:31]) && slotnum[31] < 64 { + offset[31] = 64 + slotnum[31] + return GetBinaryTreeKey(address, offset[:]) } - // Set the main storage offset - // note that the first 64 bytes of the main offset storage - // are unreachable, which is consistent with the spec and - // what verkle does. - k[0] = 1 // 1 << 248 - copy(k[1:], key[:31]) - k[31] = key[31] + // Set the main storage offset offset = MAIN_STORAGE_OFFSET + slotnum + // * Note that MAIN_STORAGE_OFFSET is 1 << 248, so the number + // can overflow into a 33rd byte, but since the value is + // shifted by one byte in getBinaryTreeKey, this only takes + // note of the overflow, and the value will be added after + // the shift, in order to avoid allocating an extra byte. + // * Note that the first 64 bytes of the main offset storage + // are unreachable, which is consistent with the spec. + // * Note that `slotnum` is big-endian + overflow := slotnum[0] == 255 + copy(offset[:], slotnum) + offset[0] += 1 // 1 << 248, handle overflow out of band - return GetBinaryTreeKey(address, k[:]) + return getBinaryTreeKey(address, offset[:], overflow) } func GetBinaryTreeKeyCodeChunk(address common.Address, chunknr *uint256.Int) []byte { From 3f1871524fda4e8da31fbbad927e554993228575 Mon Sep 17 00:00:00 2001 From: Guillaume Ballet <3272758+gballet@users.noreply.github.com> Date: Fri, 6 Mar 2026 18:06:24 +0100 Subject: [PATCH 098/161] trie/bintrie: cache hashes of clean nodes so as not to rehash the whole tree (#33961) This is an optimization that existed for verkle and the MPT, but that got dropped during the rebase. Mark the nodes that were modified as needing recomputation, and skip the hash computation if this is not needed. Otherwise, the whole tree is hashed, which kills performance. --- trie/bintrie/binary_node.go | 28 +++++++++++++++------ trie/bintrie/empty.go | 14 ++++++----- trie/bintrie/hashed_node.go | 2 +- trie/bintrie/internal_node.go | 29 ++++++++++++++++------ trie/bintrie/internal_node_test.go | 8 +++--- trie/bintrie/iterator.go | 2 +- trie/bintrie/stem_node.go | 39 +++++++++++++++++++++--------- trie/bintrie/stem_node_test.go | 1 + trie/bintrie/trie.go | 2 +- 9 files changed, 86 insertions(+), 39 deletions(-) diff --git a/trie/bintrie/binary_node.go b/trie/bintrie/binary_node.go index 690489b2aa..a7392ec958 100644 --- a/trie/bintrie/binary_node.go +++ b/trie/bintrie/binary_node.go @@ -90,8 +90,18 @@ func SerializeNode(node BinaryNode) []byte { var invalidSerializedLength = errors.New("invalid serialized node length") -// DeserializeNode deserializes a binary trie node from a byte slice. +// DeserializeNode deserializes a binary trie node from a byte slice. The +// hash will be recomputed from the deserialized data. func DeserializeNode(serialized []byte, depth int) (BinaryNode, error) { + return deserializeNode(serialized, depth, common.Hash{}, true) +} + +// DeserializeNodeWithHash deserializes a binary trie node from a byte slice, using the provided hash. +func DeserializeNodeWithHash(serialized []byte, depth int, hn common.Hash) (BinaryNode, error) { + return deserializeNode(serialized, depth, hn, false) +} + +func deserializeNode(serialized []byte, depth int, hn common.Hash, mustRecompute bool) (BinaryNode, error) { if len(serialized) == 0 { return Empty{}, nil } @@ -102,9 +112,11 @@ func DeserializeNode(serialized []byte, depth int) (BinaryNode, error) { return nil, invalidSerializedLength } return &InternalNode{ - depth: depth, - left: HashedNode(common.BytesToHash(serialized[1:33])), - right: HashedNode(common.BytesToHash(serialized[33:65])), + depth: depth, + left: HashedNode(common.BytesToHash(serialized[1:33])), + right: HashedNode(common.BytesToHash(serialized[33:65])), + hash: hn, + mustRecompute: mustRecompute, }, nil case nodeTypeStem: if len(serialized) < 64 { @@ -124,9 +136,11 @@ func DeserializeNode(serialized []byte, depth int) (BinaryNode, error) { } } return &StemNode{ - Stem: serialized[NodeTypeBytes : NodeTypeBytes+StemSize], - Values: values[:], - depth: depth, + Stem: serialized[NodeTypeBytes : NodeTypeBytes+StemSize], + Values: values[:], + depth: depth, + hash: hn, + mustRecompute: mustRecompute, }, nil default: return nil, errors.New("invalid node type") diff --git a/trie/bintrie/empty.go b/trie/bintrie/empty.go index 7cfe373b35..252146a4a7 100644 --- a/trie/bintrie/empty.go +++ b/trie/bintrie/empty.go @@ -32,9 +32,10 @@ func (e Empty) Insert(key []byte, value []byte, _ NodeResolverFn, depth int) (Bi var values [256][]byte values[key[31]] = value return &StemNode{ - Stem: slices.Clone(key[:31]), - Values: values[:], - depth: depth, + Stem: slices.Clone(key[:31]), + Values: values[:], + depth: depth, + mustRecompute: true, }, nil } @@ -53,9 +54,10 @@ func (e Empty) GetValuesAtStem(_ []byte, _ NodeResolverFn) ([][]byte, error) { func (e Empty) InsertValuesAtStem(key []byte, values [][]byte, _ NodeResolverFn, depth int) (BinaryNode, error) { return &StemNode{ - Stem: slices.Clone(key[:31]), - Values: values, - depth: depth, + Stem: slices.Clone(key[:31]), + Values: values, + depth: depth, + mustRecompute: true, }, nil } diff --git a/trie/bintrie/hashed_node.go b/trie/bintrie/hashed_node.go index e4d8c2e7ac..e44c6d1e8a 100644 --- a/trie/bintrie/hashed_node.go +++ b/trie/bintrie/hashed_node.go @@ -64,7 +64,7 @@ func (h HashedNode) InsertValuesAtStem(stem []byte, values [][]byte, resolver No } // Step 3: Deserialize the resolved data into a concrete node - node, err := DeserializeNode(data, depth) + node, err := DeserializeNodeWithHash(data, depth, common.Hash(h)) if err != nil { return nil, fmt.Errorf("InsertValuesAtStem node deserialization error: %w", err) } diff --git a/trie/bintrie/internal_node.go b/trie/bintrie/internal_node.go index 0a7bece521..2d02e240be 100644 --- a/trie/bintrie/internal_node.go +++ b/trie/bintrie/internal_node.go @@ -40,6 +40,9 @@ func keyToPath(depth int, key []byte) ([]byte, error) { type InternalNode struct { left, right BinaryNode depth int + + mustRecompute bool // true if the hash needs to be recomputed + hash common.Hash // cached hash when mustRecompute == false } // GetValuesAtStem retrieves the group of values located at the given stem key. @@ -59,7 +62,7 @@ func (bt *InternalNode) GetValuesAtStem(stem []byte, resolver NodeResolverFn) ([ if err != nil { return nil, fmt.Errorf("GetValuesAtStem resolve error: %w", err) } - node, err := DeserializeNode(data, bt.depth+1) + node, err := DeserializeNodeWithHash(data, bt.depth+1, common.Hash(hn)) if err != nil { return nil, fmt.Errorf("GetValuesAtStem node deserialization error: %w", err) } @@ -77,7 +80,7 @@ func (bt *InternalNode) GetValuesAtStem(stem []byte, resolver NodeResolverFn) ([ if err != nil { return nil, fmt.Errorf("GetValuesAtStem resolve error: %w", err) } - node, err := DeserializeNode(data, bt.depth+1) + node, err := DeserializeNodeWithHash(data, bt.depth+1, common.Hash(hn)) if err != nil { return nil, fmt.Errorf("GetValuesAtStem node deserialization error: %w", err) } @@ -108,14 +111,20 @@ func (bt *InternalNode) Insert(key []byte, value []byte, resolver NodeResolverFn // Copy creates a deep copy of the node. func (bt *InternalNode) Copy() BinaryNode { return &InternalNode{ - left: bt.left.Copy(), - right: bt.right.Copy(), - depth: bt.depth, + left: bt.left.Copy(), + right: bt.right.Copy(), + depth: bt.depth, + mustRecompute: bt.mustRecompute, + hash: bt.hash, } } // Hash returns the hash of the node. func (bt *InternalNode) Hash() common.Hash { + if !bt.mustRecompute { + return bt.hash + } + h := sha256.New() if bt.left != nil { h.Write(bt.left.Hash().Bytes()) @@ -127,7 +136,9 @@ func (bt *InternalNode) Hash() common.Hash { } else { h.Write(zero[:]) } - return common.BytesToHash(h.Sum(nil)) + bt.hash = common.BytesToHash(h.Sum(nil)) + bt.mustRecompute = false + return bt.hash } // InsertValuesAtStem inserts a full value group at the given stem in the internal node. @@ -149,7 +160,7 @@ func (bt *InternalNode) InsertValuesAtStem(stem []byte, values [][]byte, resolve if err != nil { return nil, fmt.Errorf("InsertValuesAtStem resolve error: %w", err) } - node, err := DeserializeNode(data, bt.depth+1) + node, err := DeserializeNodeWithHash(data, bt.depth+1, common.Hash(hn)) if err != nil { return nil, fmt.Errorf("InsertValuesAtStem node deserialization error: %w", err) } @@ -157,6 +168,7 @@ func (bt *InternalNode) InsertValuesAtStem(stem []byte, values [][]byte, resolve } bt.left, err = bt.left.InsertValuesAtStem(stem, values, resolver, depth+1) + bt.mustRecompute = true return bt, err } @@ -173,7 +185,7 @@ func (bt *InternalNode) InsertValuesAtStem(stem []byte, values [][]byte, resolve if err != nil { return nil, fmt.Errorf("InsertValuesAtStem resolve error: %w", err) } - node, err := DeserializeNode(data, bt.depth+1) + node, err := DeserializeNodeWithHash(data, bt.depth+1, common.Hash(hn)) if err != nil { return nil, fmt.Errorf("InsertValuesAtStem node deserialization error: %w", err) } @@ -181,6 +193,7 @@ func (bt *InternalNode) InsertValuesAtStem(stem []byte, values [][]byte, resolve } bt.right, err = bt.right.InsertValuesAtStem(stem, values, resolver, depth+1) + bt.mustRecompute = true return bt, err } diff --git a/trie/bintrie/internal_node_test.go b/trie/bintrie/internal_node_test.go index 158d8b7147..69097483fd 100644 --- a/trie/bintrie/internal_node_test.go +++ b/trie/bintrie/internal_node_test.go @@ -239,6 +239,7 @@ func TestInternalNodeHash(t *testing.T) { // Changing a child should change the hash node.left = HashedNode(common.HexToHash("0x3333")) + node.mustRecompute = true hash3 := node.Hash() if hash1 == hash3 { t.Error("Hash didn't change after modifying left child") @@ -246,9 +247,10 @@ func TestInternalNodeHash(t *testing.T) { // Test with nil children (should use zero hash) nodeWithNil := &InternalNode{ - depth: 0, - left: nil, - right: HashedNode(common.HexToHash("0x4444")), + depth: 0, + left: nil, + right: HashedNode(common.HexToHash("0x4444")), + mustRecompute: true, } hashWithNil := nodeWithNil.Hash() if hashWithNil == (common.Hash{}) { diff --git a/trie/bintrie/iterator.go b/trie/bintrie/iterator.go index 9b863ed1e3..917f82efc9 100644 --- a/trie/bintrie/iterator.go +++ b/trie/bintrie/iterator.go @@ -123,7 +123,7 @@ func (it *binaryNodeIterator) Next(descend bool) bool { if err != nil { panic(err) } - it.current, err = DeserializeNode(data, len(it.stack)-1) + it.current, err = DeserializeNodeWithHash(data, len(it.stack)-1, common.Hash(node)) if err != nil { panic(err) } diff --git a/trie/bintrie/stem_node.go b/trie/bintrie/stem_node.go index 60856b42ce..f1ae2361ff 100644 --- a/trie/bintrie/stem_node.go +++ b/trie/bintrie/stem_node.go @@ -31,6 +31,9 @@ type StemNode struct { Stem []byte // Stem path to get to StemNodeWidth values Values [][]byte // All values, indexed by the last byte of the key. depth int // Depth of the node + + mustRecompute bool // true if the hash needs to be recomputed + hash common.Hash // cached hash when mustRecompute == false } // Get retrieves the value for the given key. @@ -43,7 +46,7 @@ func (bt *StemNode) Insert(key []byte, value []byte, _ NodeResolverFn, depth int if !bytes.Equal(bt.Stem, key[:StemSize]) { bitStem := bt.Stem[bt.depth/8] >> (7 - (bt.depth % 8)) & 1 - n := &InternalNode{depth: bt.depth} + n := &InternalNode{depth: bt.depth, mustRecompute: true} bt.depth++ var child, other *BinaryNode if bitStem == 0 { @@ -68,9 +71,10 @@ func (bt *StemNode) Insert(key []byte, value []byte, _ NodeResolverFn, depth int var values [StemNodeWidth][]byte values[key[StemSize]] = value *other = &StemNode{ - Stem: slices.Clone(key[:StemSize]), - Values: values[:], - depth: depth + 1, + Stem: slices.Clone(key[:StemSize]), + Values: values[:], + depth: depth + 1, + mustRecompute: true, } } return n, nil @@ -79,6 +83,7 @@ func (bt *StemNode) Insert(key []byte, value []byte, _ NodeResolverFn, depth int return bt, errors.New("invalid insertion: value length") } bt.Values[key[StemSize]] = value + bt.mustRecompute = true return bt, nil } @@ -89,9 +94,11 @@ func (bt *StemNode) Copy() BinaryNode { values[i] = slices.Clone(v) } return &StemNode{ - Stem: slices.Clone(bt.Stem), - Values: values[:], - depth: bt.depth, + Stem: slices.Clone(bt.Stem), + Values: values[:], + depth: bt.depth, + hash: bt.hash, + mustRecompute: bt.mustRecompute, } } @@ -102,6 +109,10 @@ func (bt *StemNode) GetHeight() int { // Hash returns the hash of the node. func (bt *StemNode) Hash() common.Hash { + if !bt.mustRecompute { + return bt.hash + } + var data [StemNodeWidth]common.Hash for i, v := range bt.Values { if v != nil { @@ -130,7 +141,9 @@ func (bt *StemNode) Hash() common.Hash { h.Write(bt.Stem) h.Write([]byte{0}) h.Write(data[0][:]) - return common.BytesToHash(h.Sum(nil)) + bt.hash = common.BytesToHash(h.Sum(nil)) + bt.mustRecompute = false + return bt.hash } // CollectNodes collects all child nodes at a given path, and flushes it @@ -154,7 +167,7 @@ func (bt *StemNode) InsertValuesAtStem(key []byte, values [][]byte, _ NodeResolv if !bytes.Equal(bt.Stem, key[:StemSize]) { bitStem := bt.Stem[bt.depth/8] >> (7 - (bt.depth % 8)) & 1 - n := &InternalNode{depth: bt.depth} + n := &InternalNode{depth: bt.depth, mustRecompute: true} bt.depth++ var child, other *BinaryNode if bitStem == 0 { @@ -177,9 +190,10 @@ func (bt *StemNode) InsertValuesAtStem(key []byte, values [][]byte, _ NodeResolv *other = Empty{} } else { *other = &StemNode{ - Stem: slices.Clone(key[:StemSize]), - Values: values, - depth: n.depth + 1, + Stem: slices.Clone(key[:StemSize]), + Values: values, + depth: n.depth + 1, + mustRecompute: true, } } return n, nil @@ -189,6 +203,7 @@ func (bt *StemNode) InsertValuesAtStem(key []byte, values [][]byte, _ NodeResolv for i, v := range values { if v != nil { bt.Values[i] = v + bt.mustRecompute = true } } return bt, nil diff --git a/trie/bintrie/stem_node_test.go b/trie/bintrie/stem_node_test.go index d8d6844427..92c1b49e02 100644 --- a/trie/bintrie/stem_node_test.go +++ b/trie/bintrie/stem_node_test.go @@ -220,6 +220,7 @@ func TestStemNodeHash(t *testing.T) { // Changing a value should change the hash node.Values[1] = common.HexToHash("0x0202").Bytes() + node.mustRecompute = true hash3 := node.Hash() if hash1 == hash3 { t.Error("Hash didn't change after modifying values") diff --git a/trie/bintrie/trie.go b/trie/bintrie/trie.go index a509c471b8..6c29239a87 100644 --- a/trie/bintrie/trie.go +++ b/trie/bintrie/trie.go @@ -143,7 +143,7 @@ func NewBinaryTrie(root common.Hash, db database.NodeDatabase) (*BinaryTrie, err if err != nil { return nil, err } - node, err := DeserializeNode(blob, 0) + node, err := DeserializeNodeWithHash(blob, 0, root) if err != nil { return nil, err } From ecee64ecdc798ee1ec7edb3346373e5ce705f41b Mon Sep 17 00:00:00 2001 From: Guillaume Ballet <3272758+gballet@users.noreply.github.com> Date: Fri, 6 Mar 2026 19:03:05 +0100 Subject: [PATCH 099/161] core: fix TestProcessVerkle flaky test (#33971) `GenerateChain` commits trie nodes asynchronously, and it can happen that some nodes aren't making it to the db in time for `GenerateChain` to open it and find the data it is looking for. --- core/chain_makers.go | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/core/chain_makers.go b/core/chain_makers.go index 5264336aaa..e4b5cf964f 100644 --- a/core/chain_makers.go +++ b/core/chain_makers.go @@ -481,13 +481,14 @@ func GenerateChainWithGenesis(genesis *Genesis, engine consensus.Engine, n int, if genesis.Config != nil && genesis.Config.IsVerkle(genesis.Config.ChainID, 0) { triedbConfig = triedb.VerkleDefaults } - triedb := triedb.NewDatabase(db, triedbConfig) - defer triedb.Close() - _, err := genesis.Commit(db, triedb, nil) + genesisTriedb := triedb.NewDatabase(db, triedbConfig) + block, err := genesis.Commit(db, genesisTriedb, nil) if err != nil { + genesisTriedb.Close() panic(err) } - blocks, receipts := GenerateChain(genesis.Config, genesis.ToBlock(), engine, db, n, gen) + genesisTriedb.Close() + blocks, receipts := GenerateChain(genesis.Config, block, engine, db, n, gen) return db, blocks, receipts } From 0d043d071e7a6bb63a49c7d8499c339f531c83ad Mon Sep 17 00:00:00 2001 From: marukai67 Date: Fri, 6 Mar 2026 21:50:30 +0100 Subject: [PATCH 100/161] signer/core: prevent nil pointer panics in keystore operations (#33829) Add nil checks to prevent potential panics when keystore backend is unavailable in the Clef signer API. --- signer/core/uiapi.go | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/signer/core/uiapi.go b/signer/core/uiapi.go index 2f511c7e19..09ee4b492f 100644 --- a/signer/core/uiapi.go +++ b/signer/core/uiapi.go @@ -73,8 +73,9 @@ type rawWallet struct { // Example call // {"jsonrpc":"2.0","method":"clef_listWallets","params":[], "id":5} func (api *UIServerAPI) ListWallets() []rawWallet { - wallets := make([]rawWallet, 0) // return [] instead of nil if empty - for _, wallet := range api.am.Wallets() { + allWallets := api.am.Wallets() + wallets := make([]rawWallet, 0, len(allWallets)) // return [] instead of nil if empty + for _, wallet := range allWallets { status, failure := wallet.Status() raw := rawWallet{ @@ -130,8 +131,12 @@ func (api *UIServerAPI) ImportRawKey(privkey string, password string) (accounts. if err := ValidatePasswordFormat(password); err != nil { return accounts.Account{}, fmt.Errorf("password requirements not met: %v", err) } + ks := fetchKeystore(api.am) + if ks == nil { + return accounts.Account{}, errors.New("password based accounts not supported") + } // No error - return fetchKeystore(api.am).ImportECDSA(key, password) + return ks.ImportECDSA(key, password) } // OpenWallet initiates a hardware wallet opening procedure, establishing a USB From e15d4ccc0195d0725926614c2fec4396976f259e Mon Sep 17 00:00:00 2001 From: cui Date: Sat, 7 Mar 2026 21:31:36 +0800 Subject: [PATCH 101/161] core/types: reduce alloc in hot code path (#33523) Reduce allocations in calculation of tx cost. --------- Co-authored-by: weixie.cui Co-authored-by: Sina M <1591639+s1na@users.noreply.github.com> --- core/types/transaction.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/core/types/transaction.go b/core/types/transaction.go index 21f858ecfa..e9bf08daef 100644 --- a/core/types/transaction.go +++ b/core/types/transaction.go @@ -317,11 +317,15 @@ func (tx *Transaction) To() *common.Address { // Cost returns (gas * gasPrice) + (blobGas * blobGasPrice) + value. func (tx *Transaction) Cost() *big.Int { - total := new(big.Int).Mul(tx.GasPrice(), new(big.Int).SetUint64(tx.Gas())) - if tx.Type() == BlobTxType { - total.Add(total, new(big.Int).Mul(tx.BlobGasFeeCap(), new(big.Int).SetUint64(tx.BlobGas()))) + // Avoid allocating copies via tx.GasPrice()/tx.Value(); use inner values directly. + total := new(big.Int).SetUint64(tx.inner.gas()) + total.Mul(total, tx.inner.gasPrice()) + if blobtx, ok := tx.inner.(*BlobTx); ok { + tmp := new(big.Int).SetUint64(blobtx.blobGas()) + tmp.Mul(tmp, blobtx.BlobFeeCap.ToBig()) + total.Add(total, tmp) } - total.Add(total, tx.Value()) + total.Add(total, tx.inner.value()) return total } From 00540f94699c099f3e4aee823fc9a19888d7a4a7 Mon Sep 17 00:00:00 2001 From: Marius van der Wijden Date: Sun, 8 Mar 2026 11:44:29 +0100 Subject: [PATCH 102/161] go.mod: update go-eth-kzg (#33963) Updates go-eth-kzg to https://github.com/crate-crypto/go-eth-kzg/releases/tag/v1.5.0 Significantly reduces the allocations in VerifyCellProofBatch which is around ~5% of all allocations on my node --------- Co-authored-by: Guillaume Ballet <3272758+gballet@users.noreply.github.com> --- cmd/keeper/go.mod | 2 +- cmd/keeper/go.sum | 4 ++-- go.mod | 2 +- go.sum | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cmd/keeper/go.mod b/cmd/keeper/go.mod index abf5d4c7a1..8303b4ab2e 100644 --- a/cmd/keeper/go.mod +++ b/cmd/keeper/go.mod @@ -13,7 +13,7 @@ require ( github.com/bits-and-blooms/bitset v1.20.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/consensys/gnark-crypto v0.18.1 // indirect - github.com/crate-crypto/go-eth-kzg v1.4.0 // indirect + github.com/crate-crypto/go-eth-kzg v1.5.0 // indirect github.com/deckarep/golang-set/v2 v2.6.0 // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect github.com/emicklei/dot v1.6.2 // indirect diff --git a/cmd/keeper/go.sum b/cmd/keeper/go.sum index 2c28c6a2ec..a162537c88 100644 --- a/cmd/keeper/go.sum +++ b/cmd/keeper/go.sum @@ -28,8 +28,8 @@ github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAK github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= github.com/consensys/gnark-crypto v0.18.1 h1:RyLV6UhPRoYYzaFnPQA4qK3DyuDgkTgskDdoGqFt3fI= github.com/consensys/gnark-crypto v0.18.1/go.mod h1:L3mXGFTe1ZN+RSJ+CLjUt9x7PNdx8ubaYfDROyp2Z8c= -github.com/crate-crypto/go-eth-kzg v1.4.0 h1:WzDGjHk4gFg6YzV0rJOAsTK4z3Qkz5jd4RE3DAvPFkg= -github.com/crate-crypto/go-eth-kzg v1.4.0/go.mod h1:J9/u5sWfznSObptgfa92Jq8rTswn6ahQWEuiLHOjCUI= +github.com/crate-crypto/go-eth-kzg v1.5.0 h1:FYRiJMJG2iv+2Dy3fi14SVGjcPteZ5HAAUe4YWlJygc= +github.com/crate-crypto/go-eth-kzg v1.5.0/go.mod h1:J9/u5sWfznSObptgfa92Jq8rTswn6ahQWEuiLHOjCUI= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/deckarep/golang-set/v2 v2.6.0 h1:XfcQbWM1LlMB8BsJ8N9vW5ehnnPVIw0je80NsVHagjM= diff --git a/go.mod b/go.mod index 81c00719bd..bfe2df8c0c 100644 --- a/go.mod +++ b/go.mod @@ -14,7 +14,7 @@ require ( github.com/cloudflare/cloudflare-go v0.114.0 github.com/cockroachdb/pebble v1.1.5 github.com/consensys/gnark-crypto v0.18.1 - github.com/crate-crypto/go-eth-kzg v1.4.0 + github.com/crate-crypto/go-eth-kzg v1.5.0 github.com/davecgh/go-spew v1.1.1 github.com/dchest/siphash v1.2.3 github.com/deckarep/golang-set/v2 v2.6.0 diff --git a/go.sum b/go.sum index 72ae43c24f..b8c0558c8c 100644 --- a/go.sum +++ b/go.sum @@ -81,8 +81,8 @@ github.com/consensys/gnark-crypto v0.18.1 h1:RyLV6UhPRoYYzaFnPQA4qK3DyuDgkTgskDd github.com/consensys/gnark-crypto v0.18.1/go.mod h1:L3mXGFTe1ZN+RSJ+CLjUt9x7PNdx8ubaYfDROyp2Z8c= github.com/cpuguy83/go-md2man/v2 v2.0.5 h1:ZtcqGrnekaHpVLArFSe4HK5DoKx1T0rq2DwVB0alcyc= github.com/cpuguy83/go-md2man/v2 v2.0.5/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/crate-crypto/go-eth-kzg v1.4.0 h1:WzDGjHk4gFg6YzV0rJOAsTK4z3Qkz5jd4RE3DAvPFkg= -github.com/crate-crypto/go-eth-kzg v1.4.0/go.mod h1:J9/u5sWfznSObptgfa92Jq8rTswn6ahQWEuiLHOjCUI= +github.com/crate-crypto/go-eth-kzg v1.5.0 h1:FYRiJMJG2iv+2Dy3fi14SVGjcPteZ5HAAUe4YWlJygc= +github.com/crate-crypto/go-eth-kzg v1.5.0/go.mod h1:J9/u5sWfznSObptgfa92Jq8rTswn6ahQWEuiLHOjCUI= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= From b08aac1dbce8138980ff3a4ca60d97f4e7aa734a Mon Sep 17 00:00:00 2001 From: Muzry Date: Mon, 9 Mar 2026 18:22:58 +0800 Subject: [PATCH 103/161] eth/catalyst: allow getPayloadV2 for pre-shanghai payloads (#33932) I observed failing tests in Hive `engine-withdrawals`: - https://hive.ethpandaops.io/#/test/generic/1772351960-ad3e3e460605c670efe1b4f4178eb422?testnumber=146 - https://hive.ethpandaops.io/#/test/generic/1772351960-ad3e3e460605c670efe1b4f4178eb422?testnumber=147 ```shell DEBUG (Withdrawals Fork on Block 2): NextPayloadID before getPayloadV2: id=0x01487547e54e8abe version=1 >> engine_getPayloadV2("0x01487547e54e8abe") << error: {"code":-38005,"message":"Unsupported fork"} FAIL: Expected no error on EngineGetPayloadV2: error=Unsupported fork ``` The same failure pattern occurred for Block 3. Per Shanghai engine_getPayloadV2 spec, pre-Shanghai payloads should be accepted via V2 and returned as ExecutionPayloadV1: - executionPayload: ExecutionPayloadV1 | ExecutionPayloadV2 - ExecutionPayloadV1 MUST be returned if payload timestamp < Shanghai timestamp - ExecutionPayloadV2 MUST be returned if payload timestamp >= Shanghai timestamp Reference: - https://github.com/ethereum/execution-apis/blob/main/src/engine/shanghai.md#engine_getpayloadv2 Current implementation only allows GetPayloadV2 on the Shanghai fork window (`[]forks.Fork{forks.Shanghai}`), so pre-Shanghai payloads are rejected with Unsupported fork. If my interpretation of the spec is incorrect, please let me know and I can adjust accordingly. --------- Co-authored-by: muzry.li --- eth/catalyst/api.go | 2 +- eth/catalyst/api_test.go | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/eth/catalyst/api.go b/eth/catalyst/api.go index 1e019ffb15..c64039b690 100644 --- a/eth/catalyst/api.go +++ b/eth/catalyst/api.go @@ -435,7 +435,7 @@ func (api *ConsensusAPI) GetPayloadV2(payloadID engine.PayloadID) (*engine.Execu payloadID, false, []engine.PayloadVersion{engine.PayloadV1, engine.PayloadV2}, - []forks.Fork{forks.Shanghai}, + []forks.Fork{forks.Paris, forks.Shanghai}, ) } diff --git a/eth/catalyst/api_test.go b/eth/catalyst/api_test.go index 7eb26065dc..db0505101f 100644 --- a/eth/catalyst/api_test.go +++ b/eth/catalyst/api_test.go @@ -1219,6 +1219,11 @@ func TestNilWithdrawals(t *testing.T) { Random: test.blockParams.Random, Version: payloadVersion, }).Id() + if !shanghai { + if _, err := api.GetPayloadV2(payloadID); err != nil { + t.Fatalf("GetPayloadV2 rejected pre-shanghai payload: %v", err) + } + } execData, err := api.getPayload(payloadID, false, nil, nil) if err != nil { t.Fatalf("error getting payload, err=%v", err) From b8a3fa7d063de6b37b0242121e4185a7b17353a6 Mon Sep 17 00:00:00 2001 From: rjl493456442 Date: Mon, 9 Mar 2026 23:18:18 +0800 Subject: [PATCH 104/161] cmd/utils, eth/ethconfig: change default cache settings (#33975) This PR fixes a regression introduced in https://github.com/ethereum/go-ethereum/pull/33836/changes Before PR 33836, running mainnet would automatically bump the cache size to 4GB and trigger a cache re-calculation, specifically setting the key-value database cache to 2GB. After PR 33836, this logic was removed, and the cache value is no longer recomputed if no command line flags are specified. The default key-value database cache is 512MB. This PR bumps the default key-value database cache size alongside the default cache size for other components (such as snapshot) accordingly. --- cmd/utils/flags.go | 8 +------- eth/ethconfig/config.go | 8 ++++---- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index b0d6ee5203..d5d2bfbf1c 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -218,17 +218,11 @@ var ( Usage: "Max number of elements (0 = no limit)", Value: 0, } - TopFlag = &cli.IntFlag{ - Name: "top", - Usage: "Print the top N results", - Value: 5, - } OutputFileFlag = &cli.StringFlag{ Name: "output", Usage: "Writes the result in json to the output", Value: "", } - SnapshotFlag = &cli.BoolFlag{ Name: "snapshot", Usage: `Enables snapshot-database mode (default = enable)`, @@ -490,7 +484,7 @@ var ( // Performance tuning settings CacheFlag = &cli.IntFlag{ Name: "cache", - Usage: "Megabytes of memory allocated to internal caching (default = 4096 mainnet full node, 128 light mode)", + Usage: "Megabytes of memory allocated to internal caching", Value: 4096, Category: flags.PerfCategory, } diff --git a/eth/ethconfig/config.go b/eth/ethconfig/config.go index 8aa6e4ef09..01aaaa751b 100644 --- a/eth/ethconfig/config.go +++ b/eth/ethconfig/config.go @@ -59,11 +59,11 @@ var Defaults = Config{ StateHistory: pathdb.Defaults.StateHistory, TrienodeHistory: pathdb.Defaults.TrienodeHistory, NodeFullValueCheckpoint: pathdb.Defaults.FullValueCheckpoint, - DatabaseCache: 512, - TrieCleanCache: 154, - TrieDirtyCache: 256, + DatabaseCache: 2048, + TrieCleanCache: 614, + TrieDirtyCache: 1024, + SnapshotCache: 409, TrieTimeout: 60 * time.Minute, - SnapshotCache: 102, FilterLogCacheSize: 32, LogQueryLimit: 1000, Miner: miner.DefaultConfig, From 91cec92bf364525e03b9c449de26ab0b15cfe9b1 Mon Sep 17 00:00:00 2001 From: rjl493456442 Date: Tue, 10 Mar 2026 15:29:21 +0800 Subject: [PATCH 105/161] core, miner, tests: introduce codedb and simplify cachingDB (#33816) --- core/blockchain.go | 33 +++-- core/blockchain_reader.go | 18 +-- core/blockchain_sethead_test.go | 2 - core/blockchain_stats.go | 46 +++--- core/blockchain_test.go | 2 +- core/state/database.go | 108 ++++++++------ core/state/database_code.go | 231 ++++++++++++++++++++++++++++++ core/state/database_history.go | 26 ++-- core/state/iterator.go | 5 +- core/state/reader.go | 242 ++++++++------------------------ core/state/reader_stater.go | 82 +++++++++++ core/state/state_object.go | 10 +- core/state/statedb.go | 46 ++---- core/state/statedb_fuzz_test.go | 2 +- core/state/statedb_test.go | 4 +- core/state/stateupdate.go | 6 +- core/state/sync_test.go | 20 +-- miner/miner_test.go | 2 +- tests/state_test_util.go | 2 +- triedb/hashdb/database.go | 3 + 20 files changed, 525 insertions(+), 365 deletions(-) create mode 100644 core/state/database_code.go create mode 100644 core/state/reader_stater.go diff --git a/core/blockchain.go b/core/blockchain.go index 858d24bad7..126ff1f666 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -93,9 +93,7 @@ var ( accountReadSingleTimer = metrics.NewRegisteredResettingTimer("chain/account/single/reads", nil) storageReadSingleTimer = metrics.NewRegisteredResettingTimer("chain/storage/single/reads", nil) codeReadSingleTimer = metrics.NewRegisteredResettingTimer("chain/code/single/reads", nil) - - snapshotCommitTimer = metrics.NewRegisteredResettingTimer("chain/snapshot/commits", nil) - triedbCommitTimer = metrics.NewRegisteredResettingTimer("chain/triedb/commits", nil) + triedbCommitTimer = metrics.NewRegisteredResettingTimer("chain/triedb/commits", nil) blockInsertTimer = metrics.NewRegisteredResettingTimer("chain/inserts", nil) blockValidationTimer = metrics.NewRegisteredResettingTimer("chain/validation", nil) @@ -326,7 +324,7 @@ type BlockChain struct { lastWrite uint64 // Last block when the state was flushed flushInterval atomic.Int64 // Time interval (processing time) after which to flush a state triedb *triedb.Database // The database handler for maintaining trie nodes. - statedb *state.CachingDB // State database to reuse between imports (contains state cache) + codedb *state.CodeDB // The database handler for maintaining contract codes. txIndexer *txIndexer // Transaction indexer, might be nil if not enabled hc *HeaderChain @@ -408,6 +406,7 @@ func NewBlockChain(db ethdb.Database, genesis *Genesis, engine consensus.Engine, cfg: cfg, db: db, triedb: triedb, + codedb: state.NewCodeDB(db), triegc: prque.New[int64, common.Hash](nil), chainmu: syncx.NewClosableMutex(), bodyCache: lru.NewCache[common.Hash, *types.Body](bodyCacheLimit), @@ -424,7 +423,6 @@ func NewBlockChain(db ethdb.Database, genesis *Genesis, engine consensus.Engine, return nil, err } bc.flushInterval.Store(int64(cfg.TrieTimeLimit)) - bc.statedb = state.NewDatabase(bc.triedb, nil) bc.validator = NewBlockValidator(chainConfig, bc) bc.prefetcher = newStatePrefetcher(chainConfig, bc.hc) bc.processor = NewStateProcessor(bc.hc) @@ -601,9 +599,6 @@ func (bc *BlockChain) setupSnapshot() { AsyncBuild: !bc.cfg.SnapshotWait, } bc.snaps, _ = snapshot.New(snapconfig, bc.db, bc.triedb, head.Root) - - // Re-initialize the state database with snapshot - bc.statedb = state.NewDatabase(bc.triedb, bc.snaps) } } @@ -2124,11 +2119,12 @@ func (bc *BlockChain) ProcessBlock(ctx context.Context, parentRoot common.Hash, startTime = time.Now() statedb *state.StateDB interrupt atomic.Bool + sdb = state.NewDatabase(bc.triedb, bc.codedb).WithSnapshot(bc.snaps) ) defer interrupt.Store(true) // terminate the prefetch at the end if bc.cfg.NoPrefetch { - statedb, err = state.New(parentRoot, bc.statedb) + statedb, err = state.New(parentRoot, sdb) if err != nil { return nil, err } @@ -2138,23 +2134,27 @@ func (bc *BlockChain) ProcessBlock(ctx context.Context, parentRoot common.Hash, // // Note: the main processor and prefetcher share the same reader with a local // cache for mitigating the overhead of state access. - prefetch, process, err := bc.statedb.ReadersWithCacheStats(parentRoot) + prefetch, process, err := sdb.ReadersWithCacheStats(parentRoot) if err != nil { return nil, err } - throwaway, err := state.NewWithReader(parentRoot, bc.statedb, prefetch) + throwaway, err := state.NewWithReader(parentRoot, sdb, prefetch) if err != nil { return nil, err } - statedb, err = state.NewWithReader(parentRoot, bc.statedb, process) + statedb, err = state.NewWithReader(parentRoot, sdb, process) if err != nil { return nil, err } // Upload the statistics of reader at the end defer func() { if result != nil { - result.stats.StatePrefetchCacheStats = prefetch.GetStats() - result.stats.StateReadCacheStats = process.GetStats() + if stater, ok := prefetch.(state.ReaderStater); ok { + result.stats.StatePrefetchCacheStats = stater.GetStats() + } + if stater, ok := process.(state.ReaderStater); ok { + result.stats.StateReadCacheStats = stater.GetStats() + } } }() go func(start time.Time, throwaway *state.StateDB, block *types.Block) { @@ -2305,9 +2305,8 @@ func (bc *BlockChain) ProcessBlock(ctx context.Context, parentRoot common.Hash, // Update the metrics touched during block commit stats.AccountCommits = statedb.AccountCommits // Account commits are complete, we can mark them stats.StorageCommits = statedb.StorageCommits // Storage commits are complete, we can mark them - stats.SnapshotCommit = statedb.SnapshotCommits // Snapshot commits are complete, we can mark them - stats.TrieDBCommit = statedb.TrieDBCommits // Trie database commits are complete, we can mark them - stats.BlockWrite = time.Since(wstart) - max(statedb.AccountCommits, statedb.StorageCommits) /* concurrent */ - statedb.SnapshotCommits - statedb.TrieDBCommits + stats.DatabaseCommit = statedb.DatabaseCommits // Database commits are complete, we can mark them + stats.BlockWrite = time.Since(wstart) - max(statedb.AccountCommits, statedb.StorageCommits) /* concurrent */ - statedb.DatabaseCommits } // Report the collected witness statistics if witnessStats != nil { diff --git a/core/blockchain_reader.go b/core/blockchain_reader.go index ee15c152c4..f1b40d0d0c 100644 --- a/core/blockchain_reader.go +++ b/core/blockchain_reader.go @@ -371,7 +371,7 @@ func (bc *BlockChain) TxIndexDone() bool { // HasState checks if state trie is fully present in the database or not. func (bc *BlockChain) HasState(hash common.Hash) bool { - _, err := bc.statedb.OpenTrie(hash) + _, err := bc.triedb.NodeReader(hash) return err == nil } @@ -403,7 +403,7 @@ func (bc *BlockChain) stateRecoverable(root common.Hash) bool { func (bc *BlockChain) ContractCodeWithPrefix(hash common.Hash) []byte { // TODO(rjl493456442) The associated account address is also required // in Verkle scheme. Fix it once snap-sync is supported for Verkle. - return bc.statedb.ContractCodeWithPrefix(common.Address{}, hash) + return bc.codedb.Reader().CodeWithPrefix(common.Address{}, hash) } // State returns a new mutable state based on the current HEAD block. @@ -413,14 +413,14 @@ func (bc *BlockChain) State() (*state.StateDB, error) { // StateAt returns a new mutable state based on a particular point in time. func (bc *BlockChain) StateAt(root common.Hash) (*state.StateDB, error) { - return state.New(root, bc.statedb) + return state.New(root, state.NewDatabase(bc.triedb, bc.codedb).WithSnapshot(bc.snaps)) } // HistoricState returns a historic state specified by the given root. // Live states are not available and won't be served, please use `State` // or `StateAt` instead. func (bc *BlockChain) HistoricState(root common.Hash) (*state.StateDB, error) { - return state.New(root, state.NewHistoricDatabase(bc.db, bc.triedb)) + return state.New(root, state.NewHistoricDatabase(bc.triedb, bc.codedb)) } // Config retrieves the chain's fork configuration. @@ -444,11 +444,6 @@ func (bc *BlockChain) Processor() Processor { return bc.processor } -// StateCache returns the caching database underpinning the blockchain instance. -func (bc *BlockChain) StateCache() state.Database { - return bc.statedb -} - // GasLimit returns the gas limit of the current HEAD block. func (bc *BlockChain) GasLimit() uint64 { return bc.CurrentBlock().GasLimit @@ -492,6 +487,11 @@ func (bc *BlockChain) TrieDB() *triedb.Database { return bc.triedb } +// CodeDB retrieves the low level contract code database used for data storage. +func (bc *BlockChain) CodeDB() *state.CodeDB { + return bc.codedb +} + // HeaderChain returns the underlying header chain. func (bc *BlockChain) HeaderChain() *HeaderChain { return bc.hc diff --git a/core/blockchain_sethead_test.go b/core/blockchain_sethead_test.go index 72ca15d7f6..f2fbc003f1 100644 --- a/core/blockchain_sethead_test.go +++ b/core/blockchain_sethead_test.go @@ -30,7 +30,6 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/consensus/ethash" "github.com/ethereum/go-ethereum/core/rawdb" - "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethdb/pebble" "github.com/ethereum/go-ethereum/params" @@ -2041,7 +2040,6 @@ func testSetHeadWithScheme(t *testing.T, tt *rewindTest, snapshots bool, scheme dbconfig.HashDB = hashdb.Defaults } chain.triedb = triedb.NewDatabase(chain.db, dbconfig) - chain.statedb = state.NewDatabase(chain.triedb, chain.snaps) // Force run a freeze cycle type freezer interface { diff --git a/core/blockchain_stats.go b/core/blockchain_stats.go index adc66266c4..d753b0b700 100644 --- a/core/blockchain_stats.go +++ b/core/blockchain_stats.go @@ -52,8 +52,7 @@ type ExecuteStats struct { Execution time.Duration // Time spent on the EVM execution Validation time.Duration // Time spent on the block validation CrossValidation time.Duration // Optional, time spent on the block cross validation - SnapshotCommit time.Duration // Time spent on snapshot commit - TrieDBCommit time.Duration // Time spent on database commit + DatabaseCommit time.Duration // Time spent on database commit BlockWrite time.Duration // Time spent on block write TotalTime time.Duration // The total time spent on block execution MgasPerSecond float64 // The million gas processed per second @@ -87,22 +86,21 @@ func (s *ExecuteStats) reportMetrics() { blockExecutionTimer.Update(s.Execution) // The time spent on EVM processing blockValidationTimer.Update(s.Validation) // The time spent on block validation blockCrossValidationTimer.Update(s.CrossValidation) // The time spent on stateless cross validation - snapshotCommitTimer.Update(s.SnapshotCommit) // Snapshot commits are complete, we can mark them - triedbCommitTimer.Update(s.TrieDBCommit) // Trie database commits are complete, we can mark them + triedbCommitTimer.Update(s.DatabaseCommit) // Trie database commits are complete, we can mark them blockWriteTimer.Update(s.BlockWrite) // The time spent on block write blockInsertTimer.Update(s.TotalTime) // The total time spent on block execution chainMgaspsMeter.Update(time.Duration(s.MgasPerSecond)) // TODO(rjl493456442) generalize the ResettingTimer // Cache hit rates - accountCacheHitPrefetchMeter.Mark(s.StatePrefetchCacheStats.AccountCacheHit) - accountCacheMissPrefetchMeter.Mark(s.StatePrefetchCacheStats.AccountCacheMiss) - storageCacheHitPrefetchMeter.Mark(s.StatePrefetchCacheStats.StorageCacheHit) - storageCacheMissPrefetchMeter.Mark(s.StatePrefetchCacheStats.StorageCacheMiss) + accountCacheHitPrefetchMeter.Mark(s.StatePrefetchCacheStats.StateStats.AccountCacheHit) + accountCacheMissPrefetchMeter.Mark(s.StatePrefetchCacheStats.StateStats.AccountCacheMiss) + storageCacheHitPrefetchMeter.Mark(s.StatePrefetchCacheStats.StateStats.StorageCacheHit) + storageCacheMissPrefetchMeter.Mark(s.StatePrefetchCacheStats.StateStats.StorageCacheMiss) - accountCacheHitMeter.Mark(s.StateReadCacheStats.AccountCacheHit) - accountCacheMissMeter.Mark(s.StateReadCacheStats.AccountCacheMiss) - storageCacheHitMeter.Mark(s.StateReadCacheStats.StorageCacheHit) - storageCacheMissMeter.Mark(s.StateReadCacheStats.StorageCacheMiss) + accountCacheHitMeter.Mark(s.StateReadCacheStats.StateStats.AccountCacheHit) + accountCacheMissMeter.Mark(s.StateReadCacheStats.StateStats.AccountCacheMiss) + storageCacheHitMeter.Mark(s.StateReadCacheStats.StateStats.StorageCacheHit) + storageCacheMissMeter.Mark(s.StateReadCacheStats.StateStats.StorageCacheMiss) } // slowBlockLog represents the JSON structure for slow block logging. @@ -177,14 +175,6 @@ type slowBlockCodeCacheEntry struct { MissBytes int64 `json:"miss_bytes"` } -// calculateHitRate computes the cache hit rate as a percentage (0-100). -func calculateHitRate(hits, misses int64) float64 { - if total := hits + misses; total > 0 { - return float64(hits) / float64(total) * 100.0 - } - return 0.0 -} - // durationToMs converts a time.Duration to milliseconds as a float64 // with sub-millisecond precision for accurate cross-client metrics. func durationToMs(d time.Duration) float64 { @@ -216,7 +206,7 @@ func (s *ExecuteStats) logSlow(block *types.Block, slowBlockThreshold time.Durat ExecutionMs: durationToMs(s.Execution), StateReadMs: durationToMs(s.AccountReads + s.StorageReads + s.CodeReads), StateHashMs: durationToMs(s.AccountHashes + s.AccountUpdates + s.StorageUpdates), - CommitMs: durationToMs(max(s.AccountCommits, s.StorageCommits) + s.TrieDBCommit + s.SnapshotCommit + s.BlockWrite), + CommitMs: durationToMs(max(s.AccountCommits, s.StorageCommits) + s.DatabaseCommit + s.BlockWrite), TotalMs: durationToMs(s.TotalTime), }, Throughput: slowBlockThru{ @@ -238,19 +228,19 @@ func (s *ExecuteStats) logSlow(block *types.Block, slowBlockThreshold time.Durat }, Cache: slowBlockCache{ Account: slowBlockCacheEntry{ - Hits: s.StateReadCacheStats.AccountCacheHit, - Misses: s.StateReadCacheStats.AccountCacheMiss, - HitRate: calculateHitRate(s.StateReadCacheStats.AccountCacheHit, s.StateReadCacheStats.AccountCacheMiss), + Hits: s.StateReadCacheStats.StateStats.AccountCacheHit, + Misses: s.StateReadCacheStats.StateStats.AccountCacheMiss, + HitRate: s.StateReadCacheStats.StateStats.AccountCacheHitRate(), }, Storage: slowBlockCacheEntry{ - Hits: s.StateReadCacheStats.StorageCacheHit, - Misses: s.StateReadCacheStats.StorageCacheMiss, - HitRate: calculateHitRate(s.StateReadCacheStats.StorageCacheHit, s.StateReadCacheStats.StorageCacheMiss), + Hits: s.StateReadCacheStats.StateStats.StorageCacheHit, + Misses: s.StateReadCacheStats.StateStats.StorageCacheMiss, + HitRate: s.StateReadCacheStats.StateStats.StorageCacheHitRate(), }, Code: slowBlockCodeCacheEntry{ Hits: s.StateReadCacheStats.CodeStats.CacheHit, Misses: s.StateReadCacheStats.CodeStats.CacheMiss, - HitRate: calculateHitRate(s.StateReadCacheStats.CodeStats.CacheHit, s.StateReadCacheStats.CodeStats.CacheMiss), + HitRate: s.StateReadCacheStats.CodeStats.HitRate(), HitBytes: s.StateReadCacheStats.CodeStats.CacheHitBytes, MissBytes: s.StateReadCacheStats.CodeStats.CacheMissBytes, }, diff --git a/core/blockchain_test.go b/core/blockchain_test.go index 13ce690518..ce592f0267 100644 --- a/core/blockchain_test.go +++ b/core/blockchain_test.go @@ -157,7 +157,7 @@ func testBlockChainImport(chain types.Blocks, blockchain *BlockChain) error { } return err } - statedb, err := state.New(blockchain.GetBlockByHash(block.ParentHash()).Root(), blockchain.statedb) + statedb, err := state.New(blockchain.GetBlockByHash(block.ParentHash()).Root(), state.NewDatabase(blockchain.triedb, blockchain.codedb)) if err != nil { return err } diff --git a/core/state/database.go b/core/state/database.go index 4a5547d075..002ce57fbc 100644 --- a/core/state/database.go +++ b/core/state/database.go @@ -20,13 +20,13 @@ import ( "fmt" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/lru" "github.com/ethereum/go-ethereum/core/overlay" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state/snapshot" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/trie" "github.com/ethereum/go-ethereum/trie/bintrie" "github.com/ethereum/go-ethereum/trie/transitiontrie" @@ -34,14 +34,6 @@ import ( "github.com/ethereum/go-ethereum/triedb" ) -const ( - // Number of codehash->size associations to keep. - codeSizeCacheSize = 1_000_000 // 4 megabytes in total - - // Cache size granted for caching clean code. - codeCacheSize = 256 * 1024 * 1024 -) - // Database wraps access to tries and contract code. type Database interface { // Reader returns a state reader associated with the specified state root. @@ -58,6 +50,11 @@ type Database interface { // Snapshot returns the underlying state snapshot. Snapshot() *snapshot.Tree + + // Commit flushes all pending writes and finalizes the state transition, + // committing the changes to the underlying storage. It returns an error + // if the commit fails. + Commit(update *stateUpdate) error } // Trie is a Ethereum Merkle Patricia trie. @@ -149,32 +146,34 @@ type Trie interface { // state snapshot to provide functionalities for state access. It's meant to be a // long-live object and has a few caches inside for sharing between blocks. type CachingDB struct { - disk ethdb.KeyValueStore - triedb *triedb.Database - snap *snapshot.Tree - codeCache *lru.SizeConstrainedCache[common.Hash, []byte] - codeSizeCache *lru.Cache[common.Hash, int] - - // Transition-specific fields - TransitionStatePerRoot *lru.Cache[common.Hash, *overlay.TransitionState] + triedb *triedb.Database + codedb *CodeDB + snap *snapshot.Tree } // NewDatabase creates a state database with the provided data sources. -func NewDatabase(triedb *triedb.Database, snap *snapshot.Tree) *CachingDB { +func NewDatabase(triedb *triedb.Database, codedb *CodeDB) *CachingDB { + if codedb == nil { + codedb = NewCodeDB(triedb.Disk()) + } return &CachingDB{ - disk: triedb.Disk(), - triedb: triedb, - snap: snap, - codeCache: lru.NewSizeConstrainedCache[common.Hash, []byte](codeCacheSize), - codeSizeCache: lru.NewCache[common.Hash, int](codeSizeCacheSize), - TransitionStatePerRoot: lru.NewCache[common.Hash, *overlay.TransitionState](1000), + triedb: triedb, + codedb: codedb, } } // NewDatabaseForTesting is similar to NewDatabase, but it initializes the caching // db by using an ephemeral memory db with default config for testing. func NewDatabaseForTesting() *CachingDB { - return NewDatabase(triedb.NewDatabase(rawdb.NewMemoryDatabase(), nil), nil) + db := rawdb.NewMemoryDatabase() + return NewDatabase(triedb.NewDatabase(db, nil), NewCodeDB(db)) +} + +// WithSnapshot configures the provided contract code cache. Note that this +// registration must be performed before the cachingDB is used. +func (db *CachingDB) WithSnapshot(snapshot *snapshot.Tree) *CachingDB { + db.snap = snapshot + return db } // StateReader returns a state reader associated with the specified state root. @@ -218,21 +217,20 @@ func (db *CachingDB) Reader(stateRoot common.Hash) (Reader, error) { if err != nil { return nil, err } - return newReader(newCachingCodeReader(db.disk, db.codeCache, db.codeSizeCache), sr), nil + return newReader(db.codedb.Reader(), sr), nil } // ReadersWithCacheStats creates a pair of state readers that share the same // underlying state reader and internal state cache, while maintaining separate // statistics respectively. -func (db *CachingDB) ReadersWithCacheStats(stateRoot common.Hash) (ReaderWithStats, ReaderWithStats, error) { +func (db *CachingDB) ReadersWithCacheStats(stateRoot common.Hash) (Reader, Reader, error) { r, err := db.StateReader(stateRoot) if err != nil { return nil, nil, err } sr := newStateReaderWithCache(r) - - ra := newReaderWithStats(sr, newCachingCodeReader(db.disk, db.codeCache, db.codeSizeCache)) - rb := newReaderWithStats(sr, newCachingCodeReader(db.disk, db.codeCache, db.codeSizeCache)) + ra := newReader(db.codedb.Reader(), newStateReaderWithStats(sr)) + rb := newReader(db.codedb.Reader(), newStateReaderWithStats(sr)) return ra, rb, nil } @@ -268,22 +266,6 @@ func (db *CachingDB) OpenStorageTrie(stateRoot common.Hash, address common.Addre return tr, nil } -// ContractCodeWithPrefix retrieves a particular contract's code. If the -// code can't be found in the cache, then check the existence with **new** -// db scheme. -func (db *CachingDB) ContractCodeWithPrefix(address common.Address, codeHash common.Hash) []byte { - code, _ := db.codeCache.Get(codeHash) - if len(code) > 0 { - return code - } - code = rawdb.ReadCodeWithPrefix(db.disk, codeHash) - if len(code) > 0 { - db.codeCache.Add(codeHash, code) - db.codeSizeCache.Add(codeHash, len(code)) - } - return code -} - // TrieDB retrieves any intermediate trie-node caching layer. func (db *CachingDB) TrieDB() *triedb.Database { return db.triedb @@ -294,6 +276,40 @@ func (db *CachingDB) Snapshot() *snapshot.Tree { return db.snap } +// Commit flushes all pending writes and finalizes the state transition, +// committing the changes to the underlying storage. It returns an error +// if the commit fails. +func (db *CachingDB) Commit(update *stateUpdate) error { + // Short circuit if nothing to commit + if update.empty() { + return nil + } + // Commit dirty contract code if any exists + if len(update.codes) > 0 { + batch := db.codedb.NewBatchWithSize(len(update.codes)) + for _, code := range update.codes { + batch.Put(code.hash, code.blob) + } + if err := batch.Commit(); err != nil { + return err + } + } + // If snapshotting is enabled, update the snapshot tree with this new version + if db.snap != nil && db.snap.Snapshot(update.originRoot) != nil { + if err := db.snap.Update(update.root, update.originRoot, update.accounts, update.storages); err != nil { + log.Warn("Failed to update snapshot tree", "from", update.originRoot, "to", update.root, "err", err) + } + // Keep 128 diff layers in the memory, persistent layer is 129th. + // - head layer is paired with HEAD state + // - head-1 layer is paired with HEAD-1 state + // - head-127 layer(bottom-most diff layer) is paired with HEAD-127 state + if err := db.snap.Cap(update.root, TriesInMemory); err != nil { + log.Warn("Failed to cap snapshot tree", "root", update.root, "layers", TriesInMemory, "err", err) + } + } + return db.triedb.Update(update.root, update.originRoot, update.blockNumber, update.nodes, update.stateSet()) +} + // mustCopyTrie returns a deep-copied trie. func mustCopyTrie(t Trie) Trie { switch t := t.(type) { diff --git a/core/state/database_code.go b/core/state/database_code.go new file mode 100644 index 0000000000..820c9c1168 --- /dev/null +++ b/core/state/database_code.go @@ -0,0 +1,231 @@ +// Copyright 2026 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package state + +import ( + "sync/atomic" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/lru" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/ethdb" +) + +const ( + // Number of codeHash->size associations to keep. + codeSizeCacheSize = 1_000_000 + + // Cache size granted for caching clean code. + codeCacheSize = 256 * 1024 * 1024 +) + +// CodeCache maintains cached contract code that is shared across blocks, enabling +// fast access for external calls such as RPCs and state transitions. +// +// It is thread-safe and has a bounded size. +type codeCache struct { + codeCache *lru.SizeConstrainedCache[common.Hash, []byte] + codeSizeCache *lru.Cache[common.Hash, int] +} + +// newCodeCache initializes the contract code cache with the predefined capacity. +func newCodeCache() *codeCache { + return &codeCache{ + codeCache: lru.NewSizeConstrainedCache[common.Hash, []byte](codeCacheSize), + codeSizeCache: lru.NewCache[common.Hash, int](codeSizeCacheSize), + } +} + +// Get returns the contract code associated with the provided code hash. +func (c *codeCache) Get(hash common.Hash) ([]byte, bool) { + return c.codeCache.Get(hash) +} + +// GetSize returns the contract code size associated with the provided code hash. +func (c *codeCache) GetSize(hash common.Hash) (int, bool) { + return c.codeSizeCache.Get(hash) +} + +// Put adds the provided contract code along with its size information into the cache. +func (c *codeCache) Put(hash common.Hash, code []byte) { + c.codeCache.Add(hash, code) + c.codeSizeCache.Add(hash, len(code)) +} + +// CodeReader implements state.ContractCodeReader, accessing contract code either in +// local key-value store or the shared code cache. +// +// Reader is safe for concurrent access. +type CodeReader struct { + db ethdb.KeyValueReader + cache *codeCache + + // Cache statistics + hit atomic.Int64 // Number of code lookups found in the cache + miss atomic.Int64 // Number of code lookups not found in the cache + hitBytes atomic.Int64 // Total number of bytes read from cache + missBytes atomic.Int64 // Total number of bytes read from database +} + +// newCodeReader constructs the code reader with provided key value store and the cache. +func newCodeReader(db ethdb.KeyValueReader, cache *codeCache) *CodeReader { + return &CodeReader{ + db: db, + cache: cache, + } +} + +// Has returns the flag indicating whether the contract code with +// specified address and hash exists or not. +func (r *CodeReader) Has(addr common.Address, codeHash common.Hash) bool { + return len(r.Code(addr, codeHash)) > 0 +} + +// Code implements state.ContractCodeReader, retrieving a particular contract's code. +// Null is returned if the contract code is not present. +func (r *CodeReader) Code(addr common.Address, codeHash common.Hash) []byte { + code, _ := r.cache.Get(codeHash) + if len(code) > 0 { + r.hit.Add(1) + r.hitBytes.Add(int64(len(code))) + return code + } + r.miss.Add(1) + + code = rawdb.ReadCode(r.db, codeHash) + if len(code) > 0 { + r.cache.Put(codeHash, code) + r.missBytes.Add(int64(len(code))) + } + return code +} + +// CodeSize implements state.ContractCodeReader, retrieving a particular contract +// code's size. Zero is returned if the contract code is not present. +func (r *CodeReader) CodeSize(addr common.Address, codeHash common.Hash) int { + if cached, ok := r.cache.GetSize(codeHash); ok { + r.hit.Add(1) + return cached + } + return len(r.Code(addr, codeHash)) +} + +// CodeWithPrefix retrieves the contract code for the specified account address +// and code hash. It is almost identical to Code, but uses rawdb.ReadCodeWithPrefix +// for database lookups. The intention is to gradually deprecate the old +// contract code scheme. +func (r *CodeReader) CodeWithPrefix(addr common.Address, codeHash common.Hash) []byte { + code, _ := r.cache.Get(codeHash) + if len(code) > 0 { + r.hit.Add(1) + r.hitBytes.Add(int64(len(code))) + return code + } + r.miss.Add(1) + + code = rawdb.ReadCodeWithPrefix(r.db, codeHash) + if len(code) > 0 { + r.cache.Put(codeHash, code) + r.missBytes.Add(int64(len(code))) + } + return code +} + +// GetCodeStats implements ContractCodeReaderStater, returning the statistics +// of the code reader. +func (r *CodeReader) GetCodeStats() ContractCodeReaderStats { + return ContractCodeReaderStats{ + CacheHit: r.hit.Load(), + CacheMiss: r.miss.Load(), + CacheHitBytes: r.hitBytes.Load(), + CacheMissBytes: r.missBytes.Load(), + } +} + +type CodeBatch struct { + db *CodeDB + codes [][]byte + codeHashes []common.Hash +} + +// newCodeBatch constructs the batch for writing contract code. +func newCodeBatch(db *CodeDB) *CodeBatch { + return &CodeBatch{ + db: db, + } +} + +// newCodeBatchWithSize constructs the batch with a pre-allocated capacity. +func newCodeBatchWithSize(db *CodeDB, size int) *CodeBatch { + return &CodeBatch{ + db: db, + codes: make([][]byte, 0, size), + codeHashes: make([]common.Hash, 0, size), + } +} + +// Put inserts the given contract code into the writer, waiting for commit. +func (b *CodeBatch) Put(codeHash common.Hash, code []byte) { + b.codes = append(b.codes, code) + b.codeHashes = append(b.codeHashes, codeHash) +} + +// Commit flushes the accumulated dirty contract code into the database and +// also place them in the cache. +func (b *CodeBatch) Commit() error { + batch := b.db.db.NewBatch() + for i, code := range b.codes { + rawdb.WriteCode(batch, b.codeHashes[i], code) + b.db.cache.Put(b.codeHashes[i], code) + } + if err := batch.Write(); err != nil { + return err + } + b.codes = b.codes[:0] + b.codeHashes = b.codeHashes[:0] + return nil +} + +// CodeDB is responsible for managing the contract code and provides the access +// to it. It can be used as a global object, sharing it between multiple entities. +type CodeDB struct { + db ethdb.KeyValueStore + cache *codeCache +} + +// NewCodeDB constructs the contract code database with the provided key value store. +func NewCodeDB(db ethdb.KeyValueStore) *CodeDB { + return &CodeDB{ + db: db, + cache: newCodeCache(), + } +} + +// Reader returns the contract code reader. +func (d *CodeDB) Reader() *CodeReader { + return newCodeReader(d.db, d.cache) +} + +// NewBatch returns the batch for flushing contract codes. +func (d *CodeDB) NewBatch() *CodeBatch { + return newCodeBatch(d) +} + +// NewBatchWithSize returns the batch with pre-allocated capacity. +func (d *CodeDB) NewBatchWithSize(size int) *CodeBatch { + return newCodeBatchWithSize(d, size) +} diff --git a/core/state/database_history.go b/core/state/database_history.go index 7a2be8fe4f..c25c4eae4b 100644 --- a/core/state/database_history.go +++ b/core/state/database_history.go @@ -17,15 +17,14 @@ package state import ( + "errors" "fmt" "sync" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/lru" "github.com/ethereum/go-ethereum/core/state/snapshot" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/trie" "github.com/ethereum/go-ethereum/triedb" @@ -221,19 +220,15 @@ func (r *historicalTrieReader) Storage(addr common.Address, key common.Hash) (co // HistoricDB is the implementation of Database interface, with the ability to // access historical state. type HistoricDB struct { - disk ethdb.KeyValueStore - triedb *triedb.Database - codeCache *lru.SizeConstrainedCache[common.Hash, []byte] - codeSizeCache *lru.Cache[common.Hash, int] + triedb *triedb.Database + codedb *CodeDB } // NewHistoricDatabase creates a historic state database. -func NewHistoricDatabase(disk ethdb.KeyValueStore, triedb *triedb.Database) *HistoricDB { +func NewHistoricDatabase(triedb *triedb.Database, codedb *CodeDB) *HistoricDB { return &HistoricDB{ - disk: disk, - triedb: triedb, - codeCache: lru.NewSizeConstrainedCache[common.Hash, []byte](codeCacheSize), - codeSizeCache: lru.NewCache[common.Hash, int](codeSizeCacheSize), + triedb: triedb, + codedb: codedb, } } @@ -258,7 +253,7 @@ func (db *HistoricDB) Reader(stateRoot common.Hash) (Reader, error) { if err != nil { return nil, err } - return newReader(newCachingCodeReader(db.disk, db.codeCache, db.codeSizeCache), combined), nil + return newReader(db.codedb.Reader(), combined), nil } // OpenTrie opens the main account trie. It's not supported by historic database. @@ -298,3 +293,10 @@ func (db *HistoricDB) TrieDB() *triedb.Database { func (db *HistoricDB) Snapshot() *snapshot.Tree { return nil } + +// Commit flushes all pending writes and finalizes the state transition, +// committing the changes to the underlying storage. It returns an error +// if the commit fails. +func (db *HistoricDB) Commit(update *stateUpdate) error { + return errors.New("not implemented") +} diff --git a/core/state/iterator.go b/core/state/iterator.go index 0abae091d9..0050a840d8 100644 --- a/core/state/iterator.go +++ b/core/state/iterator.go @@ -144,10 +144,7 @@ func (it *nodeIterator) step() error { } if !bytes.Equal(account.CodeHash, types.EmptyCodeHash.Bytes()) { it.codeHash = common.BytesToHash(account.CodeHash) - it.code, err = it.state.reader.Code(address, common.BytesToHash(account.CodeHash)) - if err != nil { - return fmt.Errorf("code %x: %v", account.CodeHash, err) - } + it.code = it.state.reader.Code(address, common.BytesToHash(account.CodeHash)) if len(it.code) == 0 { return fmt.Errorf("code is not found: %x", account.CodeHash) } diff --git a/core/state/reader.go b/core/state/reader.go index 35b732173b..49375c467c 100644 --- a/core/state/reader.go +++ b/core/state/reader.go @@ -18,17 +18,13 @@ package state import ( "errors" - "fmt" "sync" "sync/atomic" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/common/lru" "github.com/ethereum/go-ethereum/core/overlay" - "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/ethdb" "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/trie" "github.com/ethereum/go-ethereum/trie/bintrie" @@ -38,55 +34,26 @@ import ( ) // ContractCodeReader defines the interface for accessing contract code. +// +// ContractCodeReader is supposed to be thread-safe. type ContractCodeReader interface { // Has returns the flag indicating whether the contract code with // specified address and hash exists or not. Has(addr common.Address, codeHash common.Hash) bool - // Code retrieves a particular contract's code. - // - // - Returns nil code along with nil error if the requested contract code - // doesn't exist - // - Returns an error only if an unexpected issue occurs - Code(addr common.Address, codeHash common.Hash) ([]byte, error) + // Code retrieves a particular contract's code. Returns nil code if the + // requested contract code doesn't exist. + Code(addr common.Address, codeHash common.Hash) []byte - // CodeSize retrieves a particular contracts code's size. - // - // - Returns zero code size along with nil error if the requested contract code - // doesn't exist - // - Returns an error only if an unexpected issue occurs - CodeSize(addr common.Address, codeHash common.Hash) (int, error) -} - -// ContractCodeReaderStats aggregates statistics for the contract code reader. -type ContractCodeReaderStats struct { - CacheHit int64 // Number of cache hits - CacheMiss int64 // Number of cache misses - CacheHitBytes int64 // Total bytes served from cache - CacheMissBytes int64 // Total bytes read on cache misses -} - -// HitRate returns the cache hit rate. -func (s ContractCodeReaderStats) HitRate() float64 { - if s.CacheHit == 0 { - return 0 - } - return float64(s.CacheHit) / float64(s.CacheHit+s.CacheMiss) -} - -// ContractCodeReaderWithStats extends ContractCodeReader by adding GetStats to -// expose statistics of code reader. -type ContractCodeReaderWithStats interface { - ContractCodeReader - - GetStats() ContractCodeReaderStats + // CodeSize retrieves a particular contracts code's size. Returns zero code + // size if the requested contract code doesn't exist. + CodeSize(addr common.Address, codeHash common.Hash) int } // StateReader defines the interface for accessing accounts and storage slots // associated with a specific state. // -// StateReader is assumed to be thread-safe and implementation must take care -// of the concurrency issue by themselves. +// StateReader is supposed to be thread-safe. type StateReader interface { // Account retrieves the account associated with a particular address. // @@ -114,119 +81,6 @@ type Reader interface { StateReader } -// ReaderStats wraps the statistics of reader. -type ReaderStats struct { - AccountCacheHit int64 - AccountCacheMiss int64 - StorageCacheHit int64 - StorageCacheMiss int64 - CodeStats ContractCodeReaderStats -} - -// String implements fmt.Stringer, returning string format statistics. -func (s ReaderStats) String() string { - var ( - accountCacheHitRate float64 - storageCacheHitRate float64 - ) - if s.AccountCacheHit > 0 { - accountCacheHitRate = float64(s.AccountCacheHit) / float64(s.AccountCacheHit+s.AccountCacheMiss) * 100 - } - if s.StorageCacheHit > 0 { - storageCacheHitRate = float64(s.StorageCacheHit) / float64(s.StorageCacheHit+s.StorageCacheMiss) * 100 - } - msg := fmt.Sprintf("Reader statistics\n") - msg += fmt.Sprintf("account: hit: %d, miss: %d, rate: %.2f\n", s.AccountCacheHit, s.AccountCacheMiss, accountCacheHitRate) - msg += fmt.Sprintf("storage: hit: %d, miss: %d, rate: %.2f\n", s.StorageCacheHit, s.StorageCacheMiss, storageCacheHitRate) - msg += fmt.Sprintf("code: hit: %d(%v), miss: %d(%v), rate: %.2f\n", s.CodeStats.CacheHit, common.StorageSize(s.CodeStats.CacheHitBytes), s.CodeStats.CacheMiss, common.StorageSize(s.CodeStats.CacheMissBytes), s.CodeStats.HitRate()) - return msg -} - -// ReaderWithStats wraps the additional method to retrieve the reader statistics from. -type ReaderWithStats interface { - Reader - GetStats() ReaderStats -} - -// cachingCodeReader implements ContractCodeReader, accessing contract code either in -// local key-value store or the shared code cache. -// -// cachingCodeReader is safe for concurrent access. -type cachingCodeReader struct { - db ethdb.KeyValueReader - - // These caches could be shared by multiple code reader instances, - // they are natively thread-safe. - codeCache *lru.SizeConstrainedCache[common.Hash, []byte] - codeSizeCache *lru.Cache[common.Hash, int] - - // Cache statistics - hit atomic.Int64 // Number of code lookups found in the cache - miss atomic.Int64 // Number of code lookups not found in the cache - hitBytes atomic.Int64 // Total number of bytes read from cache - missBytes atomic.Int64 // Total number of bytes read from database -} - -// newCachingCodeReader constructs the code reader. -func newCachingCodeReader(db ethdb.KeyValueReader, codeCache *lru.SizeConstrainedCache[common.Hash, []byte], codeSizeCache *lru.Cache[common.Hash, int]) *cachingCodeReader { - return &cachingCodeReader{ - db: db, - codeCache: codeCache, - codeSizeCache: codeSizeCache, - } -} - -// Code implements ContractCodeReader, retrieving a particular contract's code. -// If the contract code doesn't exist, no error will be returned. -func (r *cachingCodeReader) Code(addr common.Address, codeHash common.Hash) ([]byte, error) { - code, _ := r.codeCache.Get(codeHash) - if len(code) > 0 { - r.hit.Add(1) - r.hitBytes.Add(int64(len(code))) - return code, nil - } - r.miss.Add(1) - - code = rawdb.ReadCode(r.db, codeHash) - if len(code) > 0 { - r.codeCache.Add(codeHash, code) - r.codeSizeCache.Add(codeHash, len(code)) - r.missBytes.Add(int64(len(code))) - } - return code, nil -} - -// CodeSize implements ContractCodeReader, retrieving a particular contracts code's size. -// If the contract code doesn't exist, no error will be returned. -func (r *cachingCodeReader) CodeSize(addr common.Address, codeHash common.Hash) (int, error) { - if cached, ok := r.codeSizeCache.Get(codeHash); ok { - r.hit.Add(1) - return cached, nil - } - code, err := r.Code(addr, codeHash) - if err != nil { - return 0, err - } - return len(code), nil -} - -// Has returns the flag indicating whether the contract code with -// specified address and hash exists or not. -func (r *cachingCodeReader) Has(addr common.Address, codeHash common.Hash) bool { - code, _ := r.Code(addr, codeHash) - return len(code) > 0 -} - -// GetStats returns the statistics of the code reader. -func (r *cachingCodeReader) GetStats() ContractCodeReaderStats { - return ContractCodeReaderStats{ - CacheHit: r.hit.Load(), - CacheMiss: r.miss.Load(), - CacheHitBytes: r.hitBytes.Load(), - CacheMissBytes: r.missBytes.Load(), - } -} - // flatReader wraps a database state reader and is safe for concurrent access. type flatReader struct { reader database.StateReader @@ -495,20 +349,6 @@ func (r *multiStateReader) Storage(addr common.Address, slot common.Hash) (commo return common.Hash{}, errors.Join(errs...) } -// reader is the wrapper of ContractCodeReader and StateReader interface. -type reader struct { - ContractCodeReader - StateReader -} - -// newReader constructs a reader with the supplied code reader and state reader. -func newReader(codeReader ContractCodeReader, stateReader StateReader) *reader { - return &reader{ - ContractCodeReader: codeReader, - StateReader: stateReader, - } -} - // stateReaderWithCache is a wrapper around StateReader that maintains additional // state caches to support concurrent state access. type stateReaderWithCache struct { @@ -619,9 +459,10 @@ func (r *stateReaderWithCache) Storage(addr common.Address, slot common.Hash) (c return value, err } -type readerWithStats struct { +// stateReaderWithStats is a wrapper over the stateReaderWithCache, tracking +// the cache hit statistics of the reader. +type stateReaderWithStats struct { *stateReaderWithCache - ContractCodeReaderWithStats accountCacheHit atomic.Int64 accountCacheMiss atomic.Int64 @@ -629,11 +470,10 @@ type readerWithStats struct { storageCacheMiss atomic.Int64 } -// newReaderWithStats constructs the reader with additional statistics tracked. -func newReaderWithStats(sr *stateReaderWithCache, cr ContractCodeReaderWithStats) *readerWithStats { - return &readerWithStats{ - stateReaderWithCache: sr, - ContractCodeReaderWithStats: cr, +// newReaderWithStats constructs the state reader with additional statistics tracked. +func newStateReaderWithStats(sr *stateReaderWithCache) *stateReaderWithStats { + return &stateReaderWithStats{ + stateReaderWithCache: sr, } } @@ -641,7 +481,7 @@ func newReaderWithStats(sr *stateReaderWithCache, cr ContractCodeReaderWithStats // The returned account might be nil if it's not existent. // // An error will be returned if the state is corrupted in the underlying reader. -func (r *readerWithStats) Account(addr common.Address) (*types.StateAccount, error) { +func (r *stateReaderWithStats) Account(addr common.Address) (*types.StateAccount, error) { account, incache, err := r.stateReaderWithCache.account(addr) if err != nil { return nil, err @@ -659,7 +499,7 @@ func (r *readerWithStats) Account(addr common.Address) (*types.StateAccount, err // existent. // // An error will be returned if the state is corrupted in the underlying reader. -func (r *readerWithStats) Storage(addr common.Address, slot common.Hash) (common.Hash, error) { +func (r *stateReaderWithStats) Storage(addr common.Address, slot common.Hash) (common.Hash, error) { value, incache, err := r.stateReaderWithCache.storage(addr, slot) if err != nil { return common.Hash{}, err @@ -672,13 +512,51 @@ func (r *readerWithStats) Storage(addr common.Address, slot common.Hash) (common return value, nil } -// GetStats implements ReaderWithStats, returning the statistics of state reader. -func (r *readerWithStats) GetStats() ReaderStats { - return ReaderStats{ +// GetStateStats implements StateReaderStater, returning the statistics of the +// state reader. +func (r *stateReaderWithStats) GetStateStats() StateReaderStats { + return StateReaderStats{ AccountCacheHit: r.accountCacheHit.Load(), AccountCacheMiss: r.accountCacheMiss.Load(), StorageCacheHit: r.storageCacheHit.Load(), StorageCacheMiss: r.storageCacheMiss.Load(), - CodeStats: r.ContractCodeReaderWithStats.GetStats(), + } +} + +// reader aggregates a code reader and a state reader into a single object. +type reader struct { + ContractCodeReader + StateReader +} + +// newReader constructs a reader with the supplied code reader and state reader. +func newReader(codeReader ContractCodeReader, stateReader StateReader) *reader { + return &reader{ + ContractCodeReader: codeReader, + StateReader: stateReader, + } +} + +// GetCodeStats returns the statistics of code access. +func (r *reader) GetCodeStats() ContractCodeReaderStats { + if stater, ok := r.ContractCodeReader.(ContractCodeReaderStater); ok { + return stater.GetCodeStats() + } + return ContractCodeReaderStats{} +} + +// GetStateStats returns the statistics of state access. +func (r *reader) GetStateStats() StateReaderStats { + if stater, ok := r.StateReader.(StateReaderStater); ok { + return stater.GetStateStats() + } + return StateReaderStats{} +} + +// GetStats returns the aggregated statistics for both state and code access. +func (r *reader) GetStats() ReaderStats { + return ReaderStats{ + CodeStats: r.GetCodeStats(), + StateStats: r.GetStateStats(), } } diff --git a/core/state/reader_stater.go b/core/state/reader_stater.go new file mode 100644 index 0000000000..5294275953 --- /dev/null +++ b/core/state/reader_stater.go @@ -0,0 +1,82 @@ +// Copyright 2026 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package state + +// ContractCodeReaderStats aggregates statistics for the contract code reader. +type ContractCodeReaderStats struct { + CacheHit int64 // Number of cache hits + CacheMiss int64 // Number of cache misses + CacheHitBytes int64 // Total bytes served from cache + CacheMissBytes int64 // Total bytes read on cache misses +} + +// HitRate returns the cache hit rate in percentage. +func (s ContractCodeReaderStats) HitRate() float64 { + total := s.CacheHit + s.CacheMiss + if total == 0 { + return 0 + } + return float64(s.CacheHit) / float64(total) * 100 +} + +// ContractCodeReaderStater wraps the method to retrieve the statistics of +// contract code reader. +type ContractCodeReaderStater interface { + GetCodeStats() ContractCodeReaderStats +} + +// StateReaderStats aggregates statistics for the state reader. +type StateReaderStats struct { + AccountCacheHit int64 // Number of account cache hits + AccountCacheMiss int64 // Number of account cache misses + StorageCacheHit int64 // Number of storage cache hits + StorageCacheMiss int64 // Number of storage cache misses +} + +// AccountCacheHitRate returns the cache hit rate of account requests in percentage. +func (s StateReaderStats) AccountCacheHitRate() float64 { + total := s.AccountCacheHit + s.AccountCacheMiss + if total == 0 { + return 0 + } + return float64(s.AccountCacheHit) / float64(total) * 100 +} + +// StorageCacheHitRate returns the cache hit rate of storage requests in percentage. +func (s StateReaderStats) StorageCacheHitRate() float64 { + total := s.StorageCacheHit + s.StorageCacheMiss + if total == 0 { + return 0 + } + return float64(s.StorageCacheHit) / float64(total) * 100 +} + +// StateReaderStater wraps the method to retrieve the statistics of state reader. +type StateReaderStater interface { + GetStateStats() StateReaderStats +} + +// ReaderStats wraps the statistics of reader. +type ReaderStats struct { + CodeStats ContractCodeReaderStats + StateStats StateReaderStats +} + +// ReaderStater defines the capability to retrieve aggregated statistics. +type ReaderStater interface { + GetStats() ReaderStats +} diff --git a/core/state/state_object.go b/core/state/state_object.go index f7109bddee..dd30bb64a5 100644 --- a/core/state/state_object.go +++ b/core/state/state_object.go @@ -564,10 +564,7 @@ func (s *stateObject) Code() []byte { s.db.CodeLoadBytes += len(s.code) }(time.Now()) - code, err := s.db.reader.Code(s.address, common.BytesToHash(s.CodeHash())) - if err != nil { - s.db.setError(fmt.Errorf("can't load code hash %x: %v", s.CodeHash(), err)) - } + code := s.db.reader.Code(s.address, common.BytesToHash(s.CodeHash())) if len(code) == 0 { s.db.setError(fmt.Errorf("code is not found %x", s.CodeHash())) } @@ -590,10 +587,7 @@ func (s *stateObject) CodeSize() int { s.db.CodeReads += time.Since(start) }(time.Now()) - size, err := s.db.reader.CodeSize(s.address, common.BytesToHash(s.CodeHash())) - if err != nil { - s.db.setError(fmt.Errorf("can't load code size %x: %v", s.CodeHash(), err)) - } + size := s.db.reader.CodeSize(s.address, common.BytesToHash(s.CodeHash())) if size == 0 { s.db.setError(fmt.Errorf("code is not found %x", s.CodeHash())) } diff --git a/core/state/statedb.go b/core/state/statedb.go index bf38bdf09d..2477242eb5 100644 --- a/core/state/statedb.go +++ b/core/state/statedb.go @@ -28,7 +28,6 @@ import ( "time" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state/snapshot" "github.com/ethereum/go-ethereum/core/stateless" "github.com/ethereum/go-ethereum/core/tracing" @@ -148,8 +147,7 @@ type StateDB struct { StorageReads time.Duration StorageUpdates time.Duration StorageCommits time.Duration - SnapshotCommits time.Duration - TrieDBCommits time.Duration + DatabaseCommits time.Duration CodeReads time.Duration AccountLoaded int // Number of accounts retrieved from the database during the state transition @@ -1333,42 +1331,14 @@ func (s *StateDB) commitAndFlush(block uint64, deleteEmptyObjects bool, noStorag return nil, err } } - // Commit dirty contract code if any exists - if db := s.db.TrieDB().Disk(); db != nil && len(ret.codes) > 0 { - batch := db.NewBatch() - for _, code := range ret.codes { - rawdb.WriteCode(batch, code.hash, code.blob) - } - if err := batch.Write(); err != nil { - return nil, err - } - batch.Close() - } - if !ret.empty() { - // If snapshotting is enabled, update the snapshot tree with this new version - if snap := s.db.Snapshot(); snap != nil && snap.Snapshot(ret.originRoot) != nil { - start := time.Now() - if err := snap.Update(ret.root, ret.originRoot, ret.accounts, ret.storages); err != nil { - log.Warn("Failed to update snapshot tree", "from", ret.originRoot, "to", ret.root, "err", err) - } - // Keep 128 diff layers in the memory, persistent layer is 129th. - // - head layer is paired with HEAD state - // - head-1 layer is paired with HEAD-1 state - // - head-127 layer(bottom-most diff layer) is paired with HEAD-127 state - if err := snap.Cap(ret.root, TriesInMemory); err != nil { - log.Warn("Failed to cap snapshot tree", "root", ret.root, "layers", TriesInMemory, "err", err) - } - s.SnapshotCommits += time.Since(start) - } - // If trie database is enabled, commit the state update as a new layer - if db := s.db.TrieDB(); db != nil { - start := time.Now() - if err := db.Update(ret.root, ret.originRoot, block, ret.nodes, ret.stateSet()); err != nil { - return nil, err - } - s.TrieDBCommits += time.Since(start) - } + start := time.Now() + if err := s.db.Commit(ret); err != nil { + return nil, err } + s.DatabaseCommits = time.Since(start) + + // The reader update must be performed as the final step, otherwise, + // the new state would not be visible before db.commit. s.reader, _ = s.db.Reader(s.originalRoot) return ret, err } diff --git a/core/state/statedb_fuzz_test.go b/core/state/statedb_fuzz_test.go index 8b6ac0ba64..3582185344 100644 --- a/core/state/statedb_fuzz_test.go +++ b/core/state/statedb_fuzz_test.go @@ -209,7 +209,7 @@ func (test *stateTest) run() bool { if i != 0 { root = roots[len(roots)-1] } - state, err := New(root, NewDatabase(tdb, snaps)) + state, err := New(root, NewDatabase(tdb, nil).WithSnapshot(snaps)) if err != nil { panic(err) } diff --git a/core/state/statedb_test.go b/core/state/statedb_test.go index 661d17bb7b..8d1f93ca1b 100644 --- a/core/state/statedb_test.go +++ b/core/state/statedb_test.go @@ -1276,7 +1276,7 @@ func TestDeleteStorage(t *testing.T) { disk = rawdb.NewMemoryDatabase() tdb = triedb.NewDatabase(disk, nil) snaps, _ = snapshot.New(snapshot.Config{CacheSize: 10}, disk, tdb, types.EmptyRootHash) - db = NewDatabase(tdb, snaps) + db = NewDatabase(tdb, nil).WithSnapshot(snaps) state, _ = New(types.EmptyRootHash, db) addr = common.HexToAddress("0x1") ) @@ -1290,7 +1290,7 @@ func TestDeleteStorage(t *testing.T) { } root, _ := state.Commit(0, true, false) // Init phase done, create two states, one with snap and one without - fastState, _ := New(root, NewDatabase(tdb, snaps)) + fastState, _ := New(root, NewDatabase(tdb, nil).WithSnapshot(snaps)) slowState, _ := New(root, NewDatabase(tdb, nil)) obj := fastState.getOrNewStateObject(addr) diff --git a/core/state/stateupdate.go b/core/state/stateupdate.go index 0c1b76b4f8..1c171cbd5e 100644 --- a/core/state/stateupdate.go +++ b/core/state/stateupdate.go @@ -211,9 +211,9 @@ func (sc *stateUpdate) deriveCodeFields(reader ContractCodeReader) error { cache := make(map[common.Hash]bool) for addr, code := range sc.codes { if code.originHash != types.EmptyCodeHash { - blob, err := reader.Code(addr, code.originHash) - if err != nil { - return err + blob := reader.Code(addr, code.originHash) + if len(blob) == 0 { + return fmt.Errorf("original code of %x is empty", addr) } code.originBlob = blob } diff --git a/core/state/sync_test.go b/core/state/sync_test.go index cae0e0a936..e5e22deae5 100644 --- a/core/state/sync_test.go +++ b/core/state/sync_test.go @@ -222,8 +222,8 @@ func testIterativeStateSync(t *testing.T, count int, commit bool, bypath bool, s codeResults = make([]trie.CodeSyncResult, len(codeElements)) ) for i, element := range codeElements { - data, err := cReader.Code(common.Address{}, element.code) - if err != nil || len(data) == 0 { + data := cReader.Code(common.Address{}, element.code) + if len(data) == 0 { t.Fatalf("failed to retrieve contract bytecode for hash %x", element.code) } codeResults[i] = trie.CodeSyncResult{Hash: element.code, Data: data} @@ -346,8 +346,8 @@ func testIterativeDelayedStateSync(t *testing.T, scheme string) { if len(codeElements) > 0 { codeResults := make([]trie.CodeSyncResult, len(codeElements)/2+1) for i, element := range codeElements[:len(codeResults)] { - data, err := cReader.Code(common.Address{}, element.code) - if err != nil || len(data) == 0 { + data := cReader.Code(common.Address{}, element.code) + if len(data) == 0 { t.Fatalf("failed to retrieve contract bytecode for %x", element.code) } codeResults[i] = trie.CodeSyncResult{Hash: element.code, Data: data} @@ -452,8 +452,8 @@ func testIterativeRandomStateSync(t *testing.T, count int, scheme string) { if len(codeQueue) > 0 { results := make([]trie.CodeSyncResult, 0, len(codeQueue)) for hash := range codeQueue { - data, err := cReader.Code(common.Address{}, hash) - if err != nil || len(data) == 0 { + data := cReader.Code(common.Address{}, hash) + if len(data) == 0 { t.Fatalf("failed to retrieve node data for %x", hash) } results = append(results, trie.CodeSyncResult{Hash: hash, Data: data}) @@ -551,8 +551,8 @@ func testIterativeRandomDelayedStateSync(t *testing.T, scheme string) { for hash := range codeQueue { delete(codeQueue, hash) - data, err := cReader.Code(common.Address{}, hash) - if err != nil || len(data) == 0 { + data := cReader.Code(common.Address{}, hash) + if len(data) == 0 { t.Fatalf("failed to retrieve node data for %x", hash) } results = append(results, trie.CodeSyncResult{Hash: hash, Data: data}) @@ -671,8 +671,8 @@ func testIncompleteStateSync(t *testing.T, scheme string) { if len(codeQueue) > 0 { results := make([]trie.CodeSyncResult, 0, len(codeQueue)) for hash := range codeQueue { - data, err := cReader.Code(common.Address{}, hash) - if err != nil || len(data) == 0 { + data := cReader.Code(common.Address{}, hash) + if len(data) == 0 { t.Fatalf("failed to retrieve node data for %x", hash) } results = append(results, trie.CodeSyncResult{Hash: hash, Data: data}) diff --git a/miner/miner_test.go b/miner/miner_test.go index 575ee4d0fd..13475a19b6 100644 --- a/miner/miner_test.go +++ b/miner/miner_test.go @@ -155,7 +155,7 @@ func createMiner(t *testing.T) *Miner { if err != nil { t.Fatalf("can't create new chain %v", err) } - statedb, _ := state.New(bc.Genesis().Root(), bc.StateCache()) + statedb, _ := state.New(bc.Genesis().Root(), state.NewDatabase(bc.TrieDB(), bc.CodeDB())) blockchain := &testBlockChain{bc.Genesis().Root(), chainConfig, statedb, 10000000, new(event.Feed)} pool := legacypool.New(testTxPoolConfig, blockchain) diff --git a/tests/state_test_util.go b/tests/state_test_util.go index 3c7ee1c31d..1dd1bf6a04 100644 --- a/tests/state_test_util.go +++ b/tests/state_test_util.go @@ -544,7 +544,7 @@ func MakePreState(db ethdb.Database, accounts types.GenesisAlloc, snapshotter bo } snaps, _ = snapshot.New(snapconfig, db, triedb, root) } - sdb = state.NewDatabase(triedb, snaps) + sdb = state.NewDatabase(triedb, nil).WithSnapshot(snaps) statedb, _ = state.New(root, sdb) return StateTestState{statedb, triedb, snaps} } diff --git a/triedb/hashdb/database.go b/triedb/hashdb/database.go index 38392aa519..90d0514290 100644 --- a/triedb/hashdb/database.go +++ b/triedb/hashdb/database.go @@ -612,6 +612,9 @@ func (db *Database) Close() error { // NodeReader returns a reader for accessing trie nodes within the specified state. // An error will be returned if the specified state is not available. func (db *Database) NodeReader(root common.Hash) (database.NodeReader, error) { + if root == types.EmptyRootHash { + return &reader{db: db}, nil + } if _, err := db.node(root); err != nil { return nil, fmt.Errorf("state %#x is not available, %v", root, err) } From aa417b03a6f9ef4f58c0e05c7eb1fde6a8db4894 Mon Sep 17 00:00:00 2001 From: Sina M <1591639+s1na@users.noreply.github.com> Date: Tue, 10 Mar 2026 16:53:21 +0100 Subject: [PATCH 106/161] core/tracing: fix nonce revert edge case (#33978) We got a report for a bug in the tracing journal which has the responsibility to emit events for all state that must be reverted. The edge case is as follows: on CREATE operations the nonce is incremented. When a create frame reverts, the nonce increment associated with it does **not** revert. This works fine on master. Now one step further: if the parent frame reverts tho, the nonce **should** revert and there is the bug. --- core/tracing/journal.go | 16 ++++++++++++---- core/tracing/journal_test.go | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 4 deletions(-) diff --git a/core/tracing/journal.go b/core/tracing/journal.go index 62a70d6c27..560c937115 100644 --- a/core/tracing/journal.go +++ b/core/tracing/journal.go @@ -155,10 +155,18 @@ func (j *journal) OnBalanceChange(addr common.Address, prev, new *big.Int, reaso } func (j *journal) OnNonceChangeV2(addr common.Address, prev, new uint64, reason NonceChangeReason) { - // When a contract is created, the nonce of the creator is incremented. - // This change is not reverted when the creation fails. - if reason != NonceChangeContractCreator { - j.entries = append(j.entries, nonceChange{addr: addr, prev: prev, new: new}) + j.entries = append(j.entries, nonceChange{addr: addr, prev: prev, new: new}) + if reason == NonceChangeContractCreator { + // When a contract is created via CREATE/CREATE2, the creator's nonce is + // incremented. The EVM does not revert this when the CREATE frame itself + // fails (the nonce change happens before the EVM snapshot). However, if + // a parent frame reverts, the nonce must be reverted along with everything + // else. + // + // To achieve this, advance the current frame's revision point past this + // entry. The CREATE frame's revert won't touch it (it's below the revision), + // but a parent frame's revert will (it's above the parent's revision). + j.revisions[len(j.revisions)-1] = len(j.entries) } if j.hooks.OnNonceChangeV2 != nil { j.hooks.OnNonceChangeV2(addr, prev, new, reason) diff --git a/core/tracing/journal_test.go b/core/tracing/journal_test.go index e00447f5f3..488d192502 100644 --- a/core/tracing/journal_test.go +++ b/core/tracing/journal_test.go @@ -219,6 +219,42 @@ func TestNonceIncOnCreate(t *testing.T) { } } +// TestNonceIncOnCreateParentReverts checks that the creator's nonce increment +// from CREATE survives the CREATE frame's own revert but is properly reverted +// when the parent call frame reverts. +func TestNonceIncOnCreateParentReverts(t *testing.T) { + const opCREATE = 0xf0 + + tr := &testTracer{t: t} + wr, err := WrapWithJournal(&Hooks{OnNonceChange: tr.OnNonceChange}) + if err != nil { + t.Fatalf("failed to wrap test tracer: %v", err) + } + + addr := common.HexToAddress("0x1234") + { + // Parent call frame + wr.OnEnter(0, 0, addr, addr, nil, 1000, big.NewInt(0)) + { + // CREATE frame — creator nonce incremented, then CREATE reverts + wr.OnEnter(1, opCREATE, addr, addr, nil, 1000, big.NewInt(0)) + wr.OnNonceChangeV2(addr, 0, 1, NonceChangeContractCreator) + wr.OnExit(1, nil, 100, errors.New("revert"), true) + } + // After CREATE reverts, nonce should still be 1 + if tr.nonce != 1 { + t.Fatalf("nonce after CREATE revert: got %v, want 1", tr.nonce) + } + // Parent frame also reverts + wr.OnExit(0, nil, 150, errors.New("revert"), true) + } + + // After parent reverts, nonce should be back to 0 + if tr.nonce != 0 { + t.Fatalf("nonce after parent revert: got %v, want 0", tr.nonce) + } +} + func TestOnNonceChangeV2(t *testing.T) { tr := &testTracer{t: t} wr, err := WrapWithJournal(&Hooks{OnNonceChangeV2: tr.OnNonceChangeV2}) From 27c4ca9df0caf0a235585ea791850df40b0d3fa4 Mon Sep 17 00:00:00 2001 From: rjl493456442 Date: Wed, 11 Mar 2026 11:23:00 +0800 Subject: [PATCH 107/161] eth: resolve finalized from disk if it's not recently announced (#33150) This PR contains two changes: Firstly, the finalized header will be resolved from local chain if it's not recently announced via the `engine_newPayload`. What's more importantly is, in the downloader, originally there are two code paths to push forward the pivot point block, one in the beacon header fetcher (`fetchHeaders`), and another one is in the snap content processer (`processSnapSyncContent`). Usually if there are new blocks and local pivot block becomes stale, it will firstly be detected by the `fetchHeaders`. `processSnapSyncContent` is fully driven by the beacon headers and will only detect the stale pivot block after synchronizing the corresponding chain segment. I think the detection here is redundant and useless. --- eth/catalyst/api.go | 9 ++++----- eth/downloader/downloader.go | 23 ----------------------- 2 files changed, 4 insertions(+), 28 deletions(-) diff --git a/eth/catalyst/api.go b/eth/catalyst/api.go index c64039b690..96d4570561 100644 --- a/eth/catalyst/api.go +++ b/eth/catalyst/api.go @@ -255,12 +255,9 @@ func (api *ConsensusAPI) forkchoiceUpdated(update engine.ForkchoiceStateV1, payl if res := api.checkInvalidAncestor(update.HeadBlockHash, update.HeadBlockHash); res != nil { return engine.ForkChoiceResponse{PayloadStatus: *res, PayloadID: nil}, nil } - // If the head hash is unknown (was not given to us in a newPayload request), - // we cannot resolve the header, so not much to do. This could be extended in - // the future to resolve from the `eth` network, but it's an unexpected case - // that should be fixed, not papered over. header := api.remoteBlocks.get(update.HeadBlockHash) if header == nil { + // The head hash is unknown locally, try to resolve it from the `eth` network log.Warn("Fetching the unknown forkchoice head from network", "hash", update.HeadBlockHash) retrievedHead, err := api.eth.Downloader().GetHeader(update.HeadBlockHash) if err != nil { @@ -273,7 +270,9 @@ func (api *ConsensusAPI) forkchoiceUpdated(update engine.ForkchoiceStateV1, payl // If the finalized hash is known, we can direct the downloader to move // potentially more data to the freezer from the get go. finalized := api.remoteBlocks.get(update.FinalizedBlockHash) - + if finalized == nil { + finalized = api.eth.BlockChain().GetHeaderByHash(update.FinalizedBlockHash) + } // Header advertised via a past newPayload request. Start syncing to it. context := []interface{}{"number", header.Number, "hash", header.Hash()} if update.FinalizedBlockHash != (common.Hash{}) { diff --git a/eth/downloader/downloader.go b/eth/downloader/downloader.go index caeb3d64dd..1de0933842 100644 --- a/eth/downloader/downloader.go +++ b/eth/downloader/downloader.go @@ -959,29 +959,6 @@ func (d *Downloader) processSnapSyncContent() error { } else { // results already piled up, consume before handling pivot move results = append(append([]*fetchResult{oldPivot}, oldTail...), results...) } - // Split around the pivot block and process the two sides via snap/full sync - if !d.committed.Load() { - latest := results[len(results)-1].Header - // If the height is above the pivot block by 2 sets, it means the pivot - // became stale in the network, and it was garbage collected, move to a - // new pivot. - // - // Note, we have `reorgProtHeaderDelay` number of blocks withheld, Those - // need to be taken into account, otherwise we're detecting the pivot move - // late and will drop peers due to unavailable state!!! - if height := latest.Number.Uint64(); height >= pivot.Number.Uint64()+2*uint64(fsMinFullBlocks)-uint64(reorgProtHeaderDelay) { - log.Warn("Pivot became stale, moving", "old", pivot.Number.Uint64(), "new", height-uint64(fsMinFullBlocks)+uint64(reorgProtHeaderDelay)) - pivot = results[len(results)-1-fsMinFullBlocks+reorgProtHeaderDelay].Header // must exist as lower old pivot is uncommitted - - d.pivotLock.Lock() - d.pivotHeader = pivot - d.pivotLock.Unlock() - - // Write out the pivot into the database so a rollback beyond it will - // reenable snap sync - rawdb.WriteLastPivotNumber(d.stateDB, pivot.Number.Uint64()) - } - } P, beforeP, afterP := splitAroundPivot(pivot.Number.Uint64(), results) if err := d.commitSnapSyncData(beforeP, sync); err != nil { return err From f6068e3fb28d0dd90013131bf2ad39390bf807bb Mon Sep 17 00:00:00 2001 From: georgehao Date: Wed, 11 Mar 2026 11:46:49 +0800 Subject: [PATCH 108/161] eth/tracers: fix accessList StorageKeys return null (#33976) --- eth/tracers/logger/access_list_tracer.go | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/eth/tracers/logger/access_list_tracer.go b/eth/tracers/logger/access_list_tracer.go index 2e51a9a907..749aade61b 100644 --- a/eth/tracers/logger/access_list_tracer.go +++ b/eth/tracers/logger/access_list_tracer.go @@ -85,11 +85,14 @@ func (al accessList) equal(other accessList) bool { func (al accessList) accessList() types.AccessList { acl := make(types.AccessList, 0, len(al)) for addr, slots := range al { - tuple := types.AccessTuple{Address: addr, StorageKeys: []common.Hash{}} - for slot := range slots { - tuple.StorageKeys = append(tuple.StorageKeys, slot) - } keys := slices.SortedFunc(maps.Keys(slots), common.Hash.Cmp) + // Ensure keys is never nil to avoid JSON serialization issues. + // When slots is empty, slices.SortedFunc returns nil, but JSON marshaling + // will serialize nil slice as null instead of [], which breaks clients + // that expect storageKeys to always be an array. + if keys == nil { + keys = []common.Hash{} + } acl = append(acl, types.AccessTuple{Address: addr, StorageKeys: keys}) } slices.SortFunc(acl, func(a, b types.AccessTuple) int { return a.Address.Cmp(b.Address) }) From 32f05d68a2ae09cf1ba023654a728a5cb73b8218 Mon Sep 17 00:00:00 2001 From: jwasinger Date: Wed, 11 Mar 2026 02:41:43 -0400 Subject: [PATCH 109/161] core: end telemetry span for ApplyTransactionWithEVM if error is returned (#33955) --- core/state_processor.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/state_processor.go b/core/state_processor.go index 998f180571..85f106d58c 100644 --- a/core/state_processor.go +++ b/core/state_processor.go @@ -108,12 +108,12 @@ func (p *StateProcessor) Process(ctx context.Context, block *types.Block, stated receipt, err := ApplyTransactionWithEVM(msg, gp, statedb, blockNumber, blockHash, context.Time, tx, evm) if err != nil { + spanEnd(&err) return nil, fmt.Errorf("could not apply tx %d [%v]: %w", i, tx.Hash().Hex(), err) } receipts = append(receipts, receipt) allLogs = append(allLogs, receipt.Logs...) - - spanEnd(&err) + spanEnd(nil) } requests, err := postExecution(ctx, config, block, allLogs, evm) if err != nil { From 88f8549d37353fa9659134f7d9fe555395be7b87 Mon Sep 17 00:00:00 2001 From: bigbear <155267841+aso20455@users.noreply.github.com> Date: Wed, 11 Mar 2026 09:33:10 +0100 Subject: [PATCH 110/161] cmd/geth: correct misleading flag description in removedb command (#33984) The `--remove.chain` flag incorrectly described itself as selecting "state data" for removal, which could mislead operators into removing the wrong data category. This corrects the description to accurately reflect that the flag targets chain data (block bodies and receipts). --- cmd/geth/dbcmd.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/geth/dbcmd.go b/cmd/geth/dbcmd.go index 10b0c514ad..455dd05aca 100644 --- a/cmd/geth/dbcmd.go +++ b/cmd/geth/dbcmd.go @@ -53,7 +53,7 @@ var ( } removeChainDataFlag = &cli.BoolFlag{ Name: "remove.chain", - Usage: "If set, selects the state data for removal", + Usage: "If set, selects the chain data for removal", } inspectTrieTopFlag = &cli.IntFlag{ Name: "top", From 3c20e08cbae9bf370816d253c07831da534fb594 Mon Sep 17 00:00:00 2001 From: Sina M <1591639+s1na@users.noreply.github.com> Date: Wed, 11 Mar 2026 12:47:42 +0100 Subject: [PATCH 111/161] cmd/geth: add Prague pruning points (#33657) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR allows users to prune their nodes up to the Prague fork. It indirectly depends on #32157 and can't really be merged before eraE files are widely available for download. The `--history.chain` flag becomes mandatory for `prune-history` command. Here I've listed all the edge cases that can happen and how we behave: ## prune-history Behavior | From | To | Result | |-------------|--------------|--------------------------| | full | postmerge | ✅ prunes | | full | postprague | ✅ prunes | | postmerge | postprague | ✅ prunes further | | postprague | postmerge | ❌ can't unprune | | any | all | ❌ use import-history | ## Node Startup Behavior | DB State | Flag | Result | |-------------|--------------|----------------------------------------------------------------| | fresh | postprague | ✅ syncs from Prague | | full | postprague | ❌ "run prune-history first" | | postmerge | postprague | ❌ "run prune-history first" | | postprague | postmerge | ❌ "can't unprune, use import-history or fix flag" | | pruned | all | ✅ accepts known prune points | --- cmd/geth/chaincmd.go | 79 ++++++++++++++++++++++++++----------- cmd/utils/flags.go | 2 +- core/blockchain.go | 72 ++++++++++++++++++++++++--------- core/history/historymode.go | 50 ++++++++++++++++++++--- 4 files changed, 156 insertions(+), 47 deletions(-) diff --git a/cmd/geth/chaincmd.go b/cmd/geth/chaincmd.go index f4e15afebe..7e14ec1c60 100644 --- a/cmd/geth/chaincmd.go +++ b/cmd/geth/chaincmd.go @@ -208,13 +208,19 @@ This command dumps out the state for a given block (or latest, if none provided) pruneHistoryCommand = &cli.Command{ Action: pruneHistory, Name: "prune-history", - Usage: "Prune blockchain history (block bodies and receipts) up to the merge block", + Usage: "Prune blockchain history (block bodies and receipts) up to a specified point", ArgsUsage: "", - Flags: utils.DatabaseFlags, + Flags: slices.Concat(utils.DatabaseFlags, []cli.Flag{ + utils.ChainHistoryFlag, + }), Description: ` The prune-history command removes historical block bodies and receipts from the -blockchain database up to the merge block, while preserving block headers. This -helps reduce storage requirements for nodes that don't need full historical data.`, +blockchain database up to a specified point, while preserving block headers. This +helps reduce storage requirements for nodes that don't need full historical data. + +The --history.chain flag is required to specify the pruning target: + - postmerge: Prune up to the merge block. The node will keep the merge block and everything thereafter. + - postprague: Prune up to the Prague (Pectra) upgrade block. The node will keep the prague block and everything thereafter.`, } downloadEraCommand = &cli.Command{ @@ -703,47 +709,74 @@ func hashish(x string) bool { } func pruneHistory(ctx *cli.Context) error { + // Parse and validate the history mode flag. + if !ctx.IsSet(utils.ChainHistoryFlag.Name) { + return errors.New("--history.chain flag is required") + } + var mode history.HistoryMode + if err := mode.UnmarshalText([]byte(ctx.String(utils.ChainHistoryFlag.Name))); err != nil { + return err + } + if mode == history.KeepAll { + return errors.New("--history.chain=all is not valid for pruning. To restore history, use 'geth import-history'") + } + stack, _ := makeConfigNode(ctx) defer stack.Close() - // Open the chain database + // Open the chain database. chain, chaindb := utils.MakeChain(ctx, stack, false) defer chaindb.Close() defer chain.Stop() - // Determine the prune point. This will be the first PoS block. - prunePoint, ok := history.PrunePoints[chain.Genesis().Hash()] - if !ok || prunePoint == nil { - return errors.New("prune point not found") + // Determine the prune point based on the history mode. + genesisHash := chain.Genesis().Hash() + prunePoint := history.GetPrunePoint(genesisHash, mode) + if prunePoint == nil { + return fmt.Errorf("prune point for %q not found for this network", mode.String()) } var ( - mergeBlock = prunePoint.BlockNumber - mergeBlockHash = prunePoint.BlockHash.Hex() + targetBlock = prunePoint.BlockNumber + targetBlockHash = prunePoint.BlockHash ) - // Check we're far enough past merge to ensure all data is in freezer + // Check the current freezer tail to see if pruning is needed/possible. + freezerTail, _ := chaindb.Tail() + if freezerTail > 0 { + if freezerTail == targetBlock { + log.Info("Database already pruned to target block", "tail", freezerTail) + return nil + } + if freezerTail > targetBlock { + // Database is pruned beyond the target - can't unprune. + return fmt.Errorf("database is already pruned to block %d, which is beyond target %d. Cannot unprune. To restore history, use 'geth import-history'", freezerTail, targetBlock) + } + // freezerTail < targetBlock: we can prune further, continue below. + } + + // Check we're far enough past the target to ensure all data is in freezer. currentHeader := chain.CurrentHeader() if currentHeader == nil { return errors.New("current header not found") } - if currentHeader.Number.Uint64() < mergeBlock+params.FullImmutabilityThreshold { - return fmt.Errorf("chain not far enough past merge block, need %d more blocks", - mergeBlock+params.FullImmutabilityThreshold-currentHeader.Number.Uint64()) + if currentHeader.Number.Uint64() < targetBlock+params.FullImmutabilityThreshold { + return fmt.Errorf("chain not far enough past target block %d, need %d more blocks", + targetBlock, targetBlock+params.FullImmutabilityThreshold-currentHeader.Number.Uint64()) } - // Double-check the prune block in db has the expected hash. - hash := rawdb.ReadCanonicalHash(chaindb, mergeBlock) - if hash != common.HexToHash(mergeBlockHash) { - return fmt.Errorf("merge block hash mismatch: got %s, want %s", hash.Hex(), mergeBlockHash) + // Double-check the target block in db has the expected hash. + hash := rawdb.ReadCanonicalHash(chaindb, targetBlock) + if hash != targetBlockHash { + return fmt.Errorf("target block hash mismatch: got %s, want %s", hash.Hex(), targetBlockHash.Hex()) } - log.Info("Starting history pruning", "head", currentHeader.Number, "tail", mergeBlock, "tailHash", mergeBlockHash) + log.Info("Starting history pruning", "head", currentHeader.Number, "target", targetBlock, "targetHash", targetBlockHash.Hex()) start := time.Now() - rawdb.PruneTransactionIndex(chaindb, mergeBlock) - if _, err := chaindb.TruncateTail(mergeBlock); err != nil { + rawdb.PruneTransactionIndex(chaindb, targetBlock) + if _, err := chaindb.TruncateTail(targetBlock); err != nil { return fmt.Errorf("failed to truncate ancient data: %v", err) } - log.Info("History pruning completed", "tail", mergeBlock, "elapsed", common.PrettyDuration(time.Since(start))) + log.Info("History pruning completed", "tail", targetBlock, "elapsed", common.PrettyDuration(time.Since(start))) // TODO(s1na): what if there is a crash between the two prune operations? diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index d5d2bfbf1c..792e0e55ab 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -319,7 +319,7 @@ var ( } ChainHistoryFlag = &cli.StringFlag{ Name: "history.chain", - Usage: `Blockchain history retention ("all" or "postmerge")`, + Usage: `Blockchain history retention ("all", "postmerge", or "postprague")`, Value: ethconfig.Defaults.HistoryMode.String(), Category: flags.StateCategory, } diff --git a/core/blockchain.go b/core/blockchain.go index 126ff1f666..8df2365072 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -715,8 +715,12 @@ func (bc *BlockChain) loadLastState() error { // initializeHistoryPruning sets bc.historyPrunePoint. func (bc *BlockChain) initializeHistoryPruning(latest uint64) error { - freezerTail, _ := bc.db.Tail() - + var ( + freezerTail, _ = bc.db.Tail() + genesisHash = bc.genesisBlock.Hash() + mergePoint = history.MergePrunePoints[genesisHash] + praguePoint = history.PraguePrunePoints[genesisHash] + ) switch bc.cfg.ChainHistoryMode { case history.KeepAll: if freezerTail == 0 { @@ -724,33 +728,65 @@ func (bc *BlockChain) initializeHistoryPruning(latest uint64) error { } // The database was pruned somehow, so we need to figure out if it's a known // configuration or an error. - predefinedPoint := history.PrunePoints[bc.genesisBlock.Hash()] - if predefinedPoint == nil || freezerTail != predefinedPoint.BlockNumber { - log.Error("Chain history database is pruned with unknown configuration", "tail", freezerTail) - return errors.New("unexpected database tail") + if mergePoint != nil && freezerTail == mergePoint.BlockNumber { + bc.historyPrunePoint.Store(mergePoint) + return nil } - bc.historyPrunePoint.Store(predefinedPoint) - return nil + if praguePoint != nil && freezerTail == praguePoint.BlockNumber { + bc.historyPrunePoint.Store(praguePoint) + return nil + } + log.Error("Chain history database is pruned with unknown configuration", "tail", freezerTail) + return errors.New("unexpected database tail") case history.KeepPostMerge: + if mergePoint == nil { + return errors.New("history pruning requested for unknown network") + } if freezerTail == 0 && latest != 0 { - // This is the case where a user is trying to run with --history.chain - // postmerge directly on an existing DB. We could just trigger the pruning - // here, but it'd be a bit dangerous since they may not have intended this - // action to happen. So just tell them how to do it. log.Error(fmt.Sprintf("Chain history mode is configured as %q, but database is not pruned.", bc.cfg.ChainHistoryMode.String())) - log.Error(fmt.Sprintf("Run 'geth prune-history' to prune pre-merge history.")) + log.Error("Run 'geth prune-history --history.chain postmerge' to prune pre-merge history.") return errors.New("history pruning requested via configuration") } - predefinedPoint := history.PrunePoints[bc.genesisBlock.Hash()] - if predefinedPoint == nil { - log.Error("Chain history pruning is not supported for this network", "genesis", bc.genesisBlock.Hash()) + // Check if DB is pruned further than requested (to Prague). + if praguePoint != nil && freezerTail == praguePoint.BlockNumber { + log.Error("Chain history database is pruned to Prague block, but postmerge mode was requested.") + log.Error("History cannot be unpruned. To restore history, use 'geth import-history'.") + log.Error("If you intended to keep post-Prague history, use '--history.chain postprague' instead.") + return errors.New("database pruned beyond requested history mode") + } + if freezerTail > 0 && freezerTail != mergePoint.BlockNumber { + return errors.New("chain history database pruned to unknown block") + } + bc.historyPrunePoint.Store(mergePoint) + return nil + + case history.KeepPostPrague: + if praguePoint == nil { return errors.New("history pruning requested for unknown network") - } else if freezerTail > 0 && freezerTail != predefinedPoint.BlockNumber { + } + // Check if already at the prague prune point. + if freezerTail == praguePoint.BlockNumber { + bc.historyPrunePoint.Store(praguePoint) + return nil + } + // Check if database needs pruning. + if latest != 0 { + if freezerTail == 0 { + log.Error(fmt.Sprintf("Chain history mode is configured as %q, but database is not pruned.", bc.cfg.ChainHistoryMode.String())) + log.Error("Run 'geth prune-history --history.chain postprague' to prune pre-Prague history.") + return errors.New("history pruning requested via configuration") + } + if mergePoint != nil && freezerTail == mergePoint.BlockNumber { + log.Error(fmt.Sprintf("Chain history mode is configured as %q, but database is only pruned to merge block.", bc.cfg.ChainHistoryMode.String())) + log.Error("Run 'geth prune-history --history.chain postprague' to prune pre-Prague history.") + return errors.New("history pruning requested via configuration") + } log.Error("Chain history database is pruned to unknown block", "tail", freezerTail) return errors.New("unexpected database tail") } - bc.historyPrunePoint.Store(predefinedPoint) + // Fresh database (latest == 0), will sync from prague point. + bc.historyPrunePoint.Store(praguePoint) return nil default: diff --git a/core/history/historymode.go b/core/history/historymode.go index e735222d37..bdaf07826d 100644 --- a/core/history/historymode.go +++ b/core/history/historymode.go @@ -32,10 +32,13 @@ const ( // KeepPostMerge sets the history pruning point to the merge activation block. KeepPostMerge + + // KeepPostPrague sets the history pruning point to the Prague (Pectra) activation block. + KeepPostPrague ) func (m HistoryMode) IsValid() bool { - return m <= KeepPostMerge + return m <= KeepPostPrague } func (m HistoryMode) String() string { @@ -44,6 +47,8 @@ func (m HistoryMode) String() string { return "all" case KeepPostMerge: return "postmerge" + case KeepPostPrague: + return "postprague" default: return fmt.Sprintf("invalid HistoryMode(%d)", m) } @@ -64,8 +69,10 @@ func (m *HistoryMode) UnmarshalText(text []byte) error { *m = KeepAll case "postmerge": *m = KeepPostMerge + case "postprague": + *m = KeepPostPrague default: - return fmt.Errorf(`unknown sync mode %q, want "all" or "postmerge"`, text) + return fmt.Errorf(`unknown history mode %q, want "all", "postmerge", or "postprague"`, text) } return nil } @@ -75,10 +82,10 @@ type PrunePoint struct { BlockHash common.Hash } -// PrunePoints the pre-defined history pruning cutoff blocks for known networks. +// MergePrunePoints contains the pre-defined history pruning cutoff blocks for known networks. // They point to the first post-merge block. Any pruning should truncate *up to* but excluding -// given block. -var PrunePoints = map[common.Hash]*PrunePoint{ +// the given block. +var MergePrunePoints = map[common.Hash]*PrunePoint{ // mainnet params.MainnetGenesisHash: { BlockNumber: 15537393, @@ -91,6 +98,39 @@ var PrunePoints = map[common.Hash]*PrunePoint{ }, } +// PraguePrunePoints contains the pre-defined history pruning cutoff blocks for the Prague +// (Pectra) upgrade. They point to the first post-Prague block. Any pruning should truncate +// *up to* but excluding the given block. +var PraguePrunePoints = map[common.Hash]*PrunePoint{ + // mainnet - first Prague block (May 7, 2025) + params.MainnetGenesisHash: { + BlockNumber: 22431084, + BlockHash: common.HexToHash("0x50c8cab760b2948349c590461b166773c45d8f4858cccf5a43025ab2960152e8"), + }, + // sepolia - first Prague block (March 5, 2025) + params.SepoliaGenesisHash: { + BlockNumber: 7836331, + BlockHash: common.HexToHash("0xe6571beb68bf24dbd8a6ba354518996920c55a3f8d8fdca423e391b8ad071f22"), + }, +} + +// PrunePoints is an alias for MergePrunePoints for backward compatibility. +// Deprecated: Use GetPrunePoint or MergePrunePoints directly. +var PrunePoints = MergePrunePoints + +// GetPrunePoint returns the prune point for the given genesis hash and history mode. +// Returns nil if no prune point is defined for the given combination. +func GetPrunePoint(genesisHash common.Hash, mode HistoryMode) *PrunePoint { + switch mode { + case KeepPostMerge: + return MergePrunePoints[genesisHash] + case KeepPostPrague: + return PraguePrunePoints[genesisHash] + default: + return nil + } +} + // PrunedHistoryError is returned by APIs when the requested history is pruned. type PrunedHistoryError struct{} From 59512b1849f700cc48e2fdaa264b247b07ca9300 Mon Sep 17 00:00:00 2001 From: Guillaume Ballet <3272758+gballet@users.noreply.github.com> Date: Wed, 11 Mar 2026 16:18:42 +0100 Subject: [PATCH 112/161] cmd/fetchpayload: add payload-building utility (#33919) This PR adds a cmd tool fetchpayload which connects to a node and gets all the information in order to create a serialized payload that can then be passed to the zkvm. --- cmd/fetchpayload/main.go | 177 +++++++++++++++++++++++++++++++++++++ core/stateless/encoding.go | 6 +- 2 files changed, 180 insertions(+), 3 deletions(-) create mode 100644 cmd/fetchpayload/main.go diff --git a/cmd/fetchpayload/main.go b/cmd/fetchpayload/main.go new file mode 100644 index 0000000000..eafc05fbe8 --- /dev/null +++ b/cmd/fetchpayload/main.go @@ -0,0 +1,177 @@ +// Copyright 2026 The go-ethereum Authors +// This file is part of go-ethereum. +// +// go-ethereum is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// go-ethereum is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with go-ethereum. If not, see . + +// fetchpayload queries an Ethereum node over RPC, fetches a block and its +// execution witness, and writes the combined Payload (ChainID + Block + +// Witness) to disk in the format consumed by cmd/keeper. +package main + +import ( + "context" + "encoding/json" + "flag" + "fmt" + "math/big" + "os" + "path/filepath" + "strings" + "time" + + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/core/stateless" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/ethclient" + "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/rpc" +) + +// Payload is duplicated from cmd/keeper/main.go (package main, not importable). +type Payload struct { + ChainID uint64 + Block *types.Block + Witness *stateless.Witness +} + +func main() { + var ( + rpcURL = flag.String("rpc", "http://localhost:8545", "RPC endpoint URL") + blockArg = flag.String("block", "latest", `Block number: decimal, 0x-hex, or "latest"`) + format = flag.String("format", "rlp", "Comma-separated output formats: rlp, hex, json") + outDir = flag.String("out", "", "Output directory (default: current directory)") + ) + flag.Parse() + + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) + defer cancel() + + // Parse block number (nil means "latest" in ethclient). + blockNum, err := parseBlockNumber(*blockArg) + if err != nil { + fatal("invalid block number %q: %v", *blockArg, err) + } + + // Connect to the node. + client, err := ethclient.DialContext(ctx, *rpcURL) + if err != nil { + fatal("failed to connect to %s: %v", *rpcURL, err) + } + defer client.Close() + + chainID, err := client.ChainID(ctx) + if err != nil { + fatal("failed to get chain ID: %v", err) + } + + // Fetch the block first so we have a concrete number for the witness call, + // avoiding a race where "latest" advances between the two RPCs. + block, err := client.BlockByNumber(ctx, blockNum) + if err != nil { + fatal("failed to fetch block: %v", err) + } + fmt.Printf("Fetched block %d (%#x)\n", block.NumberU64(), block.Hash()) + + // Fetch the execution witness via the debug namespace. + var extWitness stateless.ExtWitness + err = client.Client().CallContext(ctx, &extWitness, "debug_executionWitness", rpc.BlockNumber(block.NumberU64())) + if err != nil { + fatal("failed to fetch execution witness: %v", err) + } + + witness := new(stateless.Witness) + err = witness.FromExtWitness(&extWitness) + if err != nil { + fatal("failed to convert witness: %v", err) + } + + payload := Payload{ + ChainID: chainID.Uint64(), + Block: block, + Witness: witness, + } + + // Encode payload as RLP (shared by "rlp" and "hex" formats). + rlpBytes, err := rlp.EncodeToBytes(payload) + if err != nil { + fatal("failed to RLP-encode payload: %v", err) + } + + // Write one output file per requested format. + blockHex := fmt.Sprintf("%x", block.NumberU64()) + for f := range strings.SplitSeq(*format, ",") { + f = strings.TrimSpace(f) + outPath := filepath.Join(*outDir, fmt.Sprintf("%s_payload.%s", blockHex, f)) + + var data []byte + switch f { + case "rlp": + data = rlpBytes + case "hex": + data = []byte(hexutil.Encode(rlpBytes)) + case "json": + data, err = marshalJSONPayload(chainID, block, &extWitness) + if err != nil { + fatal("failed to JSON-encode payload: %v", err) + } + default: + fatal("unknown format %q (valid: rlp, hex, json)", f) + } + + if err := os.WriteFile(outPath, data, 0644); err != nil { + fatal("failed to write %s: %v", outPath, err) + } + fmt.Printf("Wrote %s (%d bytes)\n", outPath, len(data)) + } +} + +// parseBlockNumber converts a CLI string to *big.Int. +// Returns nil for "latest" (ethclient convention for the head block). +func parseBlockNumber(s string) (*big.Int, error) { + if strings.EqualFold(s, "latest") { + return nil, nil + } + n := new(big.Int) + if strings.HasPrefix(s, "0x") || strings.HasPrefix(s, "0X") { + if _, ok := n.SetString(s[2:], 16); !ok { + return nil, fmt.Errorf("invalid hex number") + } + return n, nil + } + if _, ok := n.SetString(s, 10); !ok { + return nil, fmt.Errorf("invalid decimal number") + } + return n, nil +} + +// jsonPayload is a JSON-friendly representation of Payload. It uses ExtWitness +// instead of the internal Witness (which has no JSON marshaling). +type jsonPayload struct { + ChainID uint64 `json:"chainId"` + Block *types.Block `json:"block"` + Witness *stateless.ExtWitness `json:"witness"` +} + +func marshalJSONPayload(chainID *big.Int, block *types.Block, ext *stateless.ExtWitness) ([]byte, error) { + return json.MarshalIndent(jsonPayload{ + ChainID: chainID.Uint64(), + Block: block, + Witness: ext, + }, "", " ") +} + +func fatal(format string, args ...any) { + fmt.Fprintf(os.Stderr, format+"\n", args...) + os.Exit(1) +} diff --git a/core/stateless/encoding.go b/core/stateless/encoding.go index 5c43159e66..d559178892 100644 --- a/core/stateless/encoding.go +++ b/core/stateless/encoding.go @@ -40,8 +40,8 @@ func (w *Witness) ToExtWitness() *ExtWitness { return ext } -// fromExtWitness converts the consensus witness format into our internal one. -func (w *Witness) fromExtWitness(ext *ExtWitness) error { +// FromExtWitness converts the consensus witness format into our internal one. +func (w *Witness) FromExtWitness(ext *ExtWitness) error { w.Headers = ext.Headers w.Codes = make(map[string]struct{}, len(ext.Codes)) @@ -66,7 +66,7 @@ func (w *Witness) DecodeRLP(s *rlp.Stream) error { if err := s.Decode(&ext); err != nil { return err } - return w.fromExtWitness(&ext) + return w.FromExtWitness(&ext) } // ExtWitness is a witness RLP encoding for transferring across clients. From 7d13acd030e27b504db5ca549580bf24f8256ca4 Mon Sep 17 00:00:00 2001 From: rjl493456442 Date: Thu, 12 Mar 2026 09:21:54 +0800 Subject: [PATCH 113/161] core/rawdb, triedb/pathdb: enable trienode history alongside existing data (#33934) Fixes https://github.com/ethereum/go-ethereum/issues/33907 Notably there is a behavioral change: - Previously Geth will refuse to restart if the existing trienode history is gapped with the state data - With this PR, the gapped trienode history will be entirely reset and being constructed from scratch --- core/rawdb/ancienttest/testsuite.go | 40 ++++++++++++++ core/rawdb/freezer.go | 25 +++++---- core/rawdb/freezer_memory.go | 15 +++++- core/rawdb/freezer_table.go | 84 ++++++++++++++++++++++------- core/rawdb/freezer_table_test.go | 60 +++++++++++++++++++-- core/rawdb/freezer_utils.go | 52 +++++++++++++++++- triedb/pathdb/history.go | 34 +++++++----- triedb/pathdb/reader.go | 2 +- 8 files changed, 261 insertions(+), 51 deletions(-) diff --git a/core/rawdb/ancienttest/testsuite.go b/core/rawdb/ancienttest/testsuite.go index 7512c1f44b..eb66645a3a 100644 --- a/core/rawdb/ancienttest/testsuite.go +++ b/core/rawdb/ancienttest/testsuite.go @@ -260,6 +260,46 @@ func basicWrite(t *testing.T, newFn func(kinds []string) ethdb.AncientStore) { if err != nil { t.Fatalf("Failed to write ancient data %v", err) } + + // Write should work after truncating from tail but over the head + db.TruncateTail(200) + head, err := db.Ancients() + if err != nil { + t.Fatalf("Failed to retrieve head ancients %v", err) + } + tail, err := db.Tail() + if err != nil { + t.Fatalf("Failed to retrieve tail ancients %v", err) + } + if head != 200 || tail != 200 { + t.Fatalf("Ancient head and tail are not expected") + } + _, err = db.ModifyAncients(func(op ethdb.AncientWriteOp) error { + offset := uint64(200) + for i := 0; i < 100; i++ { + if err := op.AppendRaw("a", offset+uint64(i), dataA[i]); err != nil { + return err + } + if err := op.AppendRaw("b", offset+uint64(i), dataB[i]); err != nil { + return err + } + } + return nil + }) + if err != nil { + t.Fatalf("Failed to write ancient data %v", err) + } + head, err = db.Ancients() + if err != nil { + t.Fatalf("Failed to retrieve head ancients %v", err) + } + tail, err = db.Tail() + if err != nil { + t.Fatalf("Failed to retrieve tail ancients %v", err) + } + if head != 300 || tail != 200 { + t.Fatalf("Ancient head and tail are not expected") + } } func nonMutable(t *testing.T, newFn func(kinds []string) ethdb.AncientStore) { diff --git a/core/rawdb/freezer.go b/core/rawdb/freezer.go index 42cd2a7999..0e2f86d6ed 100644 --- a/core/rawdb/freezer.go +++ b/core/rawdb/freezer.go @@ -59,7 +59,7 @@ const freezerTableSize = 2 * 1000 * 1000 * 1000 // - The in-order data ensures that disk reads are always optimized. type Freezer struct { datadir string - frozen atomic.Uint64 // Number of items already frozen + head atomic.Uint64 // Number of items stored (including items removed from tail) tail atomic.Uint64 // Number of the first stored item in the freezer // This lock synchronizes writers and the truncate operation, as well as @@ -97,12 +97,12 @@ func NewFreezer(datadir string, namespace string, readonly bool, maxTableSize ui return nil, errSymlinkDatadir } } + // Leveldb/Pebble uses LOCK as the filelock filename. To prevent the + // name collision, we use FLOCK as the lock name. flockFile := filepath.Join(datadir, "FLOCK") if err := os.MkdirAll(filepath.Dir(flockFile), 0755); err != nil { return nil, err } - // Leveldb uses LOCK as the filelock filename. To prevent the - // name collision, we use FLOCK as the lock name. lock := flock.New(flockFile) tryLock := lock.TryLock if readonly { @@ -213,7 +213,7 @@ func (f *Freezer) AncientBytes(kind string, id, offset, length uint64) ([]byte, // Ancients returns the length of the frozen items. func (f *Freezer) Ancients() (uint64, error) { - return f.frozen.Load(), nil + return f.head.Load(), nil } // Tail returns the number of first stored item in the freezer. @@ -252,7 +252,7 @@ func (f *Freezer) ModifyAncients(fn func(ethdb.AncientWriteOp) error) (writeSize defer f.writeLock.Unlock() // Roll back all tables to the starting position in case of error. - prevItem := f.frozen.Load() + prevItem := f.head.Load() defer func() { if err != nil { // The write operation has failed. Go back to the previous item position. @@ -273,7 +273,7 @@ func (f *Freezer) ModifyAncients(fn func(ethdb.AncientWriteOp) error) (writeSize if err != nil { return 0, err } - f.frozen.Store(item) + f.head.Store(item) return writeSize, nil } @@ -286,7 +286,7 @@ func (f *Freezer) TruncateHead(items uint64) (uint64, error) { f.writeLock.Lock() defer f.writeLock.Unlock() - oitems := f.frozen.Load() + oitems := f.head.Load() if oitems <= items { return oitems, nil } @@ -295,7 +295,7 @@ func (f *Freezer) TruncateHead(items uint64) (uint64, error) { return 0, err } } - f.frozen.Store(items) + f.head.Store(items) return oitems, nil } @@ -320,6 +320,11 @@ func (f *Freezer) TruncateTail(tail uint64) (uint64, error) { } } f.tail.Store(tail) + + // Update the head if the requested tail exceeds the current head + if f.head.Load() < tail { + f.head.Store(tail) + } return old, nil } @@ -379,7 +384,7 @@ func (f *Freezer) validate() error { prunedTail = &tmp } - f.frozen.Store(head) + f.head.Store(head) f.tail.Store(*prunedTail) return nil } @@ -414,7 +419,7 @@ func (f *Freezer) repair() error { } } - f.frozen.Store(head) + f.head.Store(head) f.tail.Store(prunedTail) return nil } diff --git a/core/rawdb/freezer_memory.go b/core/rawdb/freezer_memory.go index a0d308f896..ec6d4b22e2 100644 --- a/core/rawdb/freezer_memory.go +++ b/core/rawdb/freezer_memory.go @@ -113,7 +113,7 @@ func (t *memoryTable) truncateTail(items uint64) error { return nil } if t.items < items { - return errors.New("truncation above head") + return t.reset(items) } for i := uint64(0); i < items-t.offset; i++ { if t.size > uint64(len(t.data[i])) { @@ -127,6 +127,16 @@ func (t *memoryTable) truncateTail(items uint64) error { return nil } +// reset clears the entire table and sets both the head and tail to the given +// value. It assumes the caller holds the lock and that tail > t.items. +func (t *memoryTable) reset(offset uint64) error { + t.size = 0 + t.data = nil + t.items = offset + t.offset = offset + return nil +} + // commit merges the given item batch into table. It's presumed that the // batch is ordered and continuous with table. func (t *memoryTable) commit(batch [][]byte) error { @@ -387,6 +397,9 @@ func (f *MemoryFreezer) TruncateTail(tail uint64) (uint64, error) { } } f.tail = tail + if f.items < tail { + f.items = tail + } return old, nil } diff --git a/core/rawdb/freezer_table.go b/core/rawdb/freezer_table.go index aedb2d8eed..280f6e1aaa 100644 --- a/core/rawdb/freezer_table.go +++ b/core/rawdb/freezer_table.go @@ -707,12 +707,13 @@ func (t *freezerTable) truncateTail(items uint64) error { t.lock.Lock() defer t.lock.Unlock() - // Ensure the given truncate target falls in the correct range + // Short-circuit if the requested tail deletion points to a stale position if t.itemHidden.Load() >= items { return nil } + // If the requested tail exceeds the current head, reset the entire table if t.items.Load() < items { - return errors.New("truncation above head") + return t.resetTo(items) } // Load the new tail index by the given new tail position var ( @@ -822,10 +823,9 @@ func (t *freezerTable) truncateTail(items uint64) error { shorten := indexEntrySize * int64(newDeleted-deleted) if t.metadata.flushOffset <= shorten { return fmt.Errorf("invalid index flush offset: %d, shorten: %d", t.metadata.flushOffset, shorten) - } else { - if err := t.metadata.setFlushOffset(t.metadata.flushOffset-shorten, true); err != nil { - return err - } + } + if err := t.metadata.setFlushOffset(t.metadata.flushOffset-shorten, true); err != nil { + return err } // Retrieve the new size and update the total size counter newSize, err := t.sizeNolock() @@ -836,6 +836,59 @@ func (t *freezerTable) truncateTail(items uint64) error { return nil } +// resetTo clears the entire table and sets both the head and tail to the given +// value. It assumes the caller holds the lock and that tail > t.items. +func (t *freezerTable) resetTo(tail uint64) error { + // Sync the entire table before resetting, eliminating the potential + // data corruption. + err := t.doSync() + if err != nil { + return err + } + // Update the index file to reflect the new offset + if err := t.index.Close(); err != nil { + return err + } + entry := &indexEntry{ + filenum: t.headId + 1, + offset: uint32(tail), + } + if err := reset(t.index.Name(), entry.append(nil)); err != nil { + return err + } + if err := t.metadata.setVirtualTail(tail, true); err != nil { + return err + } + if err := t.metadata.setFlushOffset(indexEntrySize, true); err != nil { + return err + } + t.index, err = openFreezerFileForAppend(t.index.Name()) + if err != nil { + return err + } + + // Purge all the existing data file + if err := t.head.Close(); err != nil { + return err + } + t.headId = t.headId + 1 + t.tailId = t.headId + t.headBytes = 0 + + t.head, err = t.openFile(t.headId, openFreezerFileTruncated) + if err != nil { + return err + } + t.releaseFilesBefore(t.headId, true) + + t.items.Store(tail) + t.itemOffset.Store(tail) + t.itemHidden.Store(tail) + t.sizeGauge.Update(0) + + return nil +} + // Close closes all opened files and finalizes the freezer table for use. // This operation must be completed before shutdown to prevent the loss of // recent writes. @@ -1247,25 +1300,20 @@ func (t *freezerTable) doSync() error { if t.index == nil || t.head == nil || t.metadata.file == nil { return errClosed } - var err error - trackError := func(e error) { - if e != nil && err == nil { - err = e - } + if err := t.index.Sync(); err != nil { + return err + } + if err := t.head.Sync(); err != nil { + return err } - trackError(t.index.Sync()) - trackError(t.head.Sync()) - // A crash may occur before the offset is updated, leaving the offset - // points to a old position. If so, the extra items above the offset + // points to an old position. If so, the extra items above the offset // will be truncated during the next run. stat, err := t.index.Stat() if err != nil { return err } - offset := stat.Size() - trackError(t.metadata.setFlushOffset(offset, true)) - return err + return t.metadata.setFlushOffset(stat.Size(), true) } func (t *freezerTable) dumpIndexStdout(start, stop int64) { diff --git a/core/rawdb/freezer_table_test.go b/core/rawdb/freezer_table_test.go index fc21ea6c63..3393f88e1a 100644 --- a/core/rawdb/freezer_table_test.go +++ b/core/rawdb/freezer_table_test.go @@ -1139,6 +1139,7 @@ const ( opTruncateHeadAll opTruncateTail opTruncateTailAll + opTruncateTailOverHead opCheckAll opMax // boundary value, not an actual op ) @@ -1226,6 +1227,11 @@ func (randTest) Generate(r *rand.Rand, size int) reflect.Value { step.target = deleted + uint64(len(items)) items = items[:0] deleted = step.target + case opTruncateTailOverHead: + newDeleted := deleted + uint64(len(items)) + 10 + step.target = newDeleted + deleted = newDeleted + items = items[:0] } steps = append(steps, step) } @@ -1268,7 +1274,7 @@ func runRandTest(rt randTest) bool { for i := 0; i < len(step.items); i++ { batch.AppendRaw(step.items[i], step.blobs[i]) } - batch.commit() + rt[i].err = batch.commit() values = append(values, step.blobs...) case opRetrieve: @@ -1290,24 +1296,28 @@ func runRandTest(rt randTest) bool { } case opTruncateHead: - f.truncateHead(step.target) + rt[i].err = f.truncateHead(step.target) length := f.items.Load() - f.itemHidden.Load() values = values[:length] case opTruncateHeadAll: - f.truncateHead(step.target) + rt[i].err = f.truncateHead(step.target) values = nil case opTruncateTail: prev := f.itemHidden.Load() - f.truncateTail(step.target) + rt[i].err = f.truncateTail(step.target) truncated := f.itemHidden.Load() - prev values = values[truncated:] case opTruncateTailAll: - f.truncateTail(step.target) + rt[i].err = f.truncateTail(step.target) + values = nil + + case opTruncateTailOverHead: + rt[i].err = f.truncateTail(step.target) values = nil } // Abort the test on error. @@ -1633,3 +1643,43 @@ func TestFreezerAncientBytes(t *testing.T) { }) } } + +func TestTruncateOverHead(t *testing.T) { + t.Parallel() + + fn := fmt.Sprintf("t-%d", rand.Uint64()) + f, err := newTable(os.TempDir(), fn, metrics.NewMeter(), metrics.NewMeter(), metrics.NewGauge(), 100, freezerTableConfig{noSnappy: true}, false) + if err != nil { + t.Fatal(err) + } + + // Tail truncation on an empty table + if err := f.truncateTail(10); err != nil { + t.Fatal(err) + } + batch := f.newBatch() + data := getChunk(10, 1) + require.NoError(t, batch.AppendRaw(uint64(10), data)) + require.NoError(t, batch.commit()) + + got, err := f.RetrieveItems(uint64(10), 1, 0) + require.NoError(t, err) + if !bytes.Equal(got[0], data) { + t.Fatalf("Unexpected bytes, want: %v, got: %v", data, got[0]) + } + + // Tail truncation on the non-empty table + if err := f.truncateTail(20); err != nil { + t.Fatal(err) + } + batch = f.newBatch() + data = getChunk(10, 1) + require.NoError(t, batch.AppendRaw(uint64(20), data)) + require.NoError(t, batch.commit()) + + got, err = f.RetrieveItems(uint64(20), 1, 0) + require.NoError(t, err) + if !bytes.Equal(got[0], data) { + t.Fatalf("Unexpected bytes, want: %v, got: %v", data, got[0]) + } +} diff --git a/core/rawdb/freezer_utils.go b/core/rawdb/freezer_utils.go index 752e95ba6a..7786b7a990 100644 --- a/core/rawdb/freezer_utils.go +++ b/core/rawdb/freezer_utils.go @@ -22,6 +22,19 @@ import ( "path/filepath" ) +func atomicRename(src, dest string) error { + if err := os.Rename(src, dest); err != nil { + return err + } + dir, err := os.Open(filepath.Dir(src)) + if err != nil { + return err + } + defer dir.Close() + + return dir.Sync() +} + // copyFrom copies data from 'srcPath' at offset 'offset' into 'destPath'. // The 'destPath' is created if it doesn't exist, otherwise it is overwritten. // Before the copy is executed, there is a callback can be registered to @@ -73,13 +86,48 @@ func copyFrom(srcPath, destPath string, offset uint64, before func(f *os.File) e return err } f = nil - return os.Rename(fname, destPath) + + return atomicRename(fname, destPath) +} + +// reset atomically replaces the file at the given path with the provided content. +func reset(path string, content []byte) error { + // Create a temp file in the same dir where we want it to wind up + f, err := os.CreateTemp(filepath.Dir(path), "*") + if err != nil { + return err + } + fname := f.Name() + + // Clean up the leftover file + defer func() { + if f != nil { + f.Close() + } + os.Remove(fname) + }() + + // Write the content into the temp file + _, err = f.Write(content) + if err != nil { + return err + } + // Permanently persist the content into disk + if err := f.Sync(); err != nil { + return err + } + if err := f.Close(); err != nil { + return err + } + f = nil + + return atomicRename(fname, path) } // openFreezerFileForAppend opens a freezer table file and seeks to the end func openFreezerFileForAppend(filename string) (*os.File, error) { // Open the file without the O_APPEND flag - // because it has differing behaviour during Truncate operations + // because it has differing behavior during Truncate operations // on different OS's file, err := os.OpenFile(filename, os.O_RDWR|os.O_CREATE, 0644) if err != nil { diff --git a/triedb/pathdb/history.go b/triedb/pathdb/history.go index 820c3c03bf..0a9f7091fa 100644 --- a/triedb/pathdb/history.go +++ b/triedb/pathdb/history.go @@ -412,28 +412,34 @@ func repairHistory(db ethdb.Database, isVerkle bool, readOnly bool, stateID uint // Truncate excessive history entries in either the state history or // the trienode history, ensuring both histories remain aligned with // the state. - head, err := states.Ancients() + shead, err := states.Ancients() if err != nil { return nil, nil, err } - if stateID > head { - return nil, nil, fmt.Errorf("gap between state [#%d] and state history [#%d]", stateID, head) + if stateID > shead { // Gap is not permitted in the state history + return nil, nil, fmt.Errorf("gap between state [#%d] and state history [#%d]", stateID, shead) } + truncTo := min(shead, stateID) + if trienodes != nil { - th, err := trienodes.Ancients() + thead, err := trienodes.Ancients() if err != nil { return nil, nil, err } - if stateID > th { - return nil, nil, fmt.Errorf("gap between state [#%d] and trienode history [#%d]", stateID, th) - } - if th != head { - log.Info("Histories are not aligned with each other", "state", head, "trienode", th) - head = min(head, th) + if stateID <= thead { + truncTo = min(truncTo, thead) + } else { + if thead == 0 { + _, err = trienodes.TruncateTail(stateID) + if err != nil { + return nil, nil, err + } + log.Warn("Initialized trienode history") + } else { + return nil, nil, fmt.Errorf("gap between state [#%d] and trienode history [#%d]", stateID, thead) + } } } - head = min(head, stateID) - // Truncate the extra history elements above in freezer in case it's not // aligned with the state. It might happen after an unclean shutdown. truncate := func(store ethdb.AncientStore, typ historyType, nhead uint64) { @@ -448,7 +454,7 @@ func repairHistory(db ethdb.Database, isVerkle bool, readOnly bool, stateID uint log.Warn("Truncated extra histories", "typ", typ, "number", pruned) } } - truncate(states, typeStateHistory, head) - truncate(trienodes, typeTrienodeHistory, head) + truncate(states, typeStateHistory, truncTo) + truncate(trienodes, typeTrienodeHistory, truncTo) return states, trienodes, nil } diff --git a/triedb/pathdb/reader.go b/triedb/pathdb/reader.go index aaa64e902c..e3cfbcba8a 100644 --- a/triedb/pathdb/reader.go +++ b/triedb/pathdb/reader.go @@ -349,7 +349,7 @@ func (db *Database) HistoricNodeReader(root common.Hash) (*HistoricalNodeReader, // are not accessible. meta, err := readTrienodeMetadata(db.trienodeFreezer, *id+1) if err != nil { - return nil, err // e.g., the referred trienode history has been pruned + return nil, fmt.Errorf("state %#x is not available", root) // e.g., the referred trienode history has been pruned } if meta.parent != root { return nil, fmt.Errorf("state %#x is not canonincal", root) From de0a452f7d2b3259ef7bb5eaf68fc5daf761df91 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Thu, 12 Mar 2026 10:21:45 +0800 Subject: [PATCH 114/161] eth/filters: fix race in pending tx and new heads subscriptions (#33990) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `TestSubscribePendingTxHashes` hangs indefinitely because pending tx events are permanently missed due to a race condition in `NewPendingTransactions` (and `NewHeads`). Both handlers called their event subscription functions (`SubscribePendingTxs`, `SubscribeNewHeads`) inside goroutines, so the RPC handler returned the subscription ID to the client before the filter was installed in the event loop. When the client then sent a transaction, the event fired but no filter existed to catch it — the event was silently lost. - Move `SubscribePendingTxs` and `SubscribeNewHeads` calls out of goroutines so filters are installed synchronously before the RPC response is sent, matching the pattern already used by `Logs` and `TransactionReceipts` --- 💬 We'd love your input! Share your thoughts on Copilot coding agent in our [2 minute survey](https://gh.io/copilot-coding-agent-survey). --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: s1na <1591639+s1na@users.noreply.github.com> --- eth/filters/api.go | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/eth/filters/api.go b/eth/filters/api.go index f4bed35b26..2cb72dc114 100644 --- a/eth/filters/api.go +++ b/eth/filters/api.go @@ -187,11 +187,13 @@ func (api *FilterAPI) NewPendingTransactions(ctx context.Context, fullTx *bool) return &rpc.Subscription{}, rpc.ErrNotificationsUnsupported } - rpcSub := notifier.CreateSubscription() + var ( + rpcSub = notifier.CreateSubscription() + txs = make(chan []*types.Transaction, 128) + pendingTxSub = api.events.SubscribePendingTxs(txs) + ) go func() { - txs := make(chan []*types.Transaction, 128) - pendingTxSub := api.events.SubscribePendingTxs(txs) defer pendingTxSub.Unsubscribe() chainConfig := api.sys.backend.ChainConfig() @@ -260,11 +262,13 @@ func (api *FilterAPI) NewHeads(ctx context.Context) (*rpc.Subscription, error) { return &rpc.Subscription{}, rpc.ErrNotificationsUnsupported } - rpcSub := notifier.CreateSubscription() + var ( + rpcSub = notifier.CreateSubscription() + headers = make(chan *types.Header) + headersSub = api.events.SubscribeNewHeads(headers) + ) go func() { - headers := make(chan *types.Header) - headersSub := api.events.SubscribeNewHeads(headers) defer headersSub.Unsubscribe() for { From 95b9a2ed77e8b7330206373358fda3a3d3426bbd Mon Sep 17 00:00:00 2001 From: jvn Date: Thu, 12 Mar 2026 07:53:49 +0530 Subject: [PATCH 115/161] core: Implement eip-7954 increase Maximum Contract Size (#33832) Implement EIP7954, This PR raises the maximum contract code size to 32KiB and initcode size to 64KiB , following https://eips.ethereum.org/EIPS/eip-7954 --------- Co-authored-by: Marius van der Wijden --- cmd/evm/internal/t8ntool/transaction.go | 9 +++++-- core/state_transition.go | 6 +++-- core/txpool/validation.go | 7 ++++-- core/vm/common.go | 31 +++++++++++++++++++++++++ core/vm/evm.go | 4 ++-- core/vm/gas_table.go | 13 +++++------ core/vm/gas_table_test.go | 6 ++++- params/protocol_params.go | 6 +++-- 8 files changed, 64 insertions(+), 18 deletions(-) diff --git a/cmd/evm/internal/t8ntool/transaction.go b/cmd/evm/internal/t8ntool/transaction.go index 4ba7b5f130..3a457eeaec 100644 --- a/cmd/evm/internal/t8ntool/transaction.go +++ b/cmd/evm/internal/t8ntool/transaction.go @@ -27,7 +27,9 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/core" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/tests" @@ -177,9 +179,12 @@ func Transaction(ctx *cli.Context) error { r.Error = errors.New("gas * maxFeePerGas exceeds 256 bits") } // Check whether the init code size has been exceeded. - if chainConfig.IsShanghai(new(big.Int), 0) && tx.To() == nil && len(tx.Data()) > params.MaxInitCodeSize { - r.Error = errors.New("max initcode size exceeded") + if tx.To() == nil { + if err := vm.CheckMaxInitCodeSize(&rules, uint64(len(tx.Data()))); err != nil { + r.Error = err + } } + if chainConfig.IsOsaka(new(big.Int), 0) && tx.Gas() > params.MaxTxGas { r.Error = errors.New("gas limit exceeds maximum") } diff --git a/core/state_transition.go b/core/state_transition.go index 76a5147363..6a40b4f7ab 100644 --- a/core/state_transition.go +++ b/core/state_transition.go @@ -488,8 +488,10 @@ func (st *stateTransition) execute() (*ExecutionResult, error) { } // Check whether the init code size has been exceeded. - if rules.IsShanghai && contractCreation && len(msg.Data) > params.MaxInitCodeSize { - return nil, fmt.Errorf("%w: code size %v limit %v", ErrMaxInitCodeSizeExceeded, len(msg.Data), params.MaxInitCodeSize) + if contractCreation { + if err := vm.CheckMaxInitCodeSize(&rules, uint64(len(msg.Data))); err != nil { + return nil, err + } } // Execute the preparatory steps for state transition which includes: diff --git a/core/txpool/validation.go b/core/txpool/validation.go index e0a333dfa5..13b1bfa312 100644 --- a/core/txpool/validation.go +++ b/core/txpool/validation.go @@ -25,6 +25,7 @@ import ( "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/core/vm" "github.com/ethereum/go-ethereum/crypto/kzg4844" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" @@ -86,8 +87,10 @@ func ValidateTransaction(tx *types.Transaction, head *types.Header, signer types return fmt.Errorf("%w: type %d rejected, pool not yet in Prague", core.ErrTxTypeNotSupported, tx.Type()) } // Check whether the init code size has been exceeded - if rules.IsShanghai && tx.To() == nil && len(tx.Data()) > params.MaxInitCodeSize { - return fmt.Errorf("%w: code size %v, limit %v", core.ErrMaxInitCodeSizeExceeded, len(tx.Data()), params.MaxInitCodeSize) + if tx.To() == nil { + if err := vm.CheckMaxInitCodeSize(&rules, uint64(len(tx.Data()))); err != nil { + return err + } } if rules.IsOsaka && tx.Gas() > params.MaxTxGas { return fmt.Errorf("%w (cap: %d, tx: %d)", core.ErrGasLimitTooHigh, params.MaxTxGas, tx.Gas()) diff --git a/core/vm/common.go b/core/vm/common.go index 2990f58972..2d631f8a55 100644 --- a/core/vm/common.go +++ b/core/vm/common.go @@ -17,12 +17,43 @@ package vm import ( + "fmt" "math" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/params" "github.com/holiman/uint256" ) +// CheckMaxInitCodeSize checks the size of contract initcode against the protocol-defined limit. +func CheckMaxInitCodeSize(rules *params.Rules, size uint64) error { + if rules.IsAmsterdam { + if size > params.MaxInitCodeSizeAmsterdam { + return fmt.Errorf("%w: code size %v limit %v", ErrMaxInitCodeSizeExceeded, size, params.MaxInitCodeSizeAmsterdam) + } + } else if rules.IsShanghai { + if size > params.MaxInitCodeSize { + return fmt.Errorf("%w: code size %v limit %v", ErrMaxInitCodeSizeExceeded, size, params.MaxInitCodeSize) + } + } + + return nil +} + +// CheckMaxCodeSize checks the size of contract code against the protocol-defined limit. +func CheckMaxCodeSize(rules *params.Rules, size uint64) error { + if rules.IsAmsterdam { + if size > params.MaxCodeSizeAmsterdam { + return fmt.Errorf("%w: code size %v limit %v", ErrMaxCodeSizeExceeded, size, params.MaxCodeSizeAmsterdam) + } + } else if rules.IsEIP158 { + if size > params.MaxCodeSize { + return fmt.Errorf("%w: code size %v limit %v", ErrMaxCodeSizeExceeded, size, params.MaxCodeSize) + } + } + return nil +} + // calcMemSize64 calculates the required memory size, and returns // the size and whether the result overflowed uint64 func calcMemSize64(off, l *uint256.Int) (uint64, bool) { diff --git a/core/vm/evm.go b/core/vm/evm.go index 97ae9468bf..5897dbd265 100644 --- a/core/vm/evm.go +++ b/core/vm/evm.go @@ -597,8 +597,8 @@ func (evm *EVM) initNewContract(contract *Contract, address common.Address) ([]b } // Check whether the max code size has been exceeded, assign err if the case. - if evm.chainRules.IsEIP158 && len(ret) > params.MaxCodeSize { - return ret, ErrMaxCodeSizeExceeded + if err := CheckMaxCodeSize(&evm.chainRules, uint64(len(ret))); err != nil { + return ret, err } // Reject code starting with 0xEF if EIP-3541 is enabled. diff --git a/core/vm/gas_table.go b/core/vm/gas_table.go index 23a2cbbf4d..aa1ad918bb 100644 --- a/core/vm/gas_table.go +++ b/core/vm/gas_table.go @@ -18,7 +18,6 @@ package vm import ( "errors" - "fmt" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/math" @@ -318,10 +317,10 @@ func gasCreateEip3860(evm *EVM, contract *Contract, stack *Stack, mem *Memory, m if overflow { return 0, ErrGasUintOverflow } - if size > params.MaxInitCodeSize { - return 0, fmt.Errorf("%w: size %d", ErrMaxInitCodeSizeExceeded, size) + if err := CheckMaxInitCodeSize(&evm.chainRules, size); err != nil { + return 0, err } - // Since size <= params.MaxInitCodeSize, these multiplication cannot overflow + // Since size <= the protocol-defined maximum initcode size limit, these multiplication cannot overflow moreGas := params.InitCodeWordGas * ((size + 31) / 32) if gas, overflow = math.SafeAdd(gas, moreGas); overflow { return 0, ErrGasUintOverflow @@ -337,10 +336,10 @@ func gasCreate2Eip3860(evm *EVM, contract *Contract, stack *Stack, mem *Memory, if overflow { return 0, ErrGasUintOverflow } - if size > params.MaxInitCodeSize { - return 0, fmt.Errorf("%w: size %d", ErrMaxInitCodeSizeExceeded, size) + if err := CheckMaxInitCodeSize(&evm.chainRules, size); err != nil { + return 0, err } - // Since size <= params.MaxInitCodeSize, these multiplication cannot overflow + // Since size <= the protocol-defined maximum initcode size limit, these multiplication cannot overflow moreGas := (params.InitCodeWordGas + params.Keccak256WordGas) * ((size + 31) / 32) if gas, overflow = math.SafeAdd(gas, moreGas); overflow { return 0, ErrGasUintOverflow diff --git a/core/vm/gas_table_test.go b/core/vm/gas_table_test.go index 7fe76b0a63..436cc47f2e 100644 --- a/core/vm/gas_table_test.go +++ b/core/vm/gas_table_test.go @@ -148,11 +148,15 @@ func TestCreateGas(t *testing.T) { BlockNumber: big.NewInt(0), } config := Config{} + chainConfig := params.AllEthashProtocolChanges if tt.eip3860 { config.ExtraEips = []int{3860} + vmctx.Random = new(common.Hash) + + chainConfig = params.MergedTestChainConfig } - evm := NewEVM(vmctx, statedb, params.AllEthashProtocolChanges, config) + evm := NewEVM(vmctx, statedb, chainConfig, config) var startGas = uint64(testGas) ret, gas, err := evm.Call(common.Address{}, address, nil, startGas, new(uint256.Int)) if err != nil { diff --git a/params/protocol_params.go b/params/protocol_params.go index bb506af015..cebf5008c8 100644 --- a/params/protocol_params.go +++ b/params/protocol_params.go @@ -134,8 +134,10 @@ const ( DefaultElasticityMultiplier = 2 // Bounds the maximum gas limit an EIP-1559 block may have. InitialBaseFee = 1000000000 // Initial base fee for EIP-1559 blocks. - MaxCodeSize = 24576 // Maximum bytecode to permit for a contract - MaxInitCodeSize = 2 * MaxCodeSize // Maximum initcode to permit in a creation transaction and create instructions + MaxCodeSize = 24576 // Maximum bytecode to permit for a contract + MaxInitCodeSize = 2 * MaxCodeSize // Maximum initcode to permit in a creation transaction and create instructions + MaxCodeSizeAmsterdam = 32768 // Maximum bytecode to permit for a contract post Amsterdam + MaxInitCodeSizeAmsterdam = 2 * MaxCodeSizeAmsterdam // Maximum initcode to permit in a creation transaction and create instructions post Amsterdam // Precompiled contract gas prices From 1c9ddee16f925989cc6bda3df39a98cd46c8b1f1 Mon Sep 17 00:00:00 2001 From: Guillaume Ballet <3272758+gballet@users.noreply.github.com> Date: Thu, 12 Mar 2026 10:20:12 +0100 Subject: [PATCH 116/161] trie/bintrie: use a sync.Pool when hashing binary tree nodes (#33989) Binary tree hashing is quite slow, owing to many factors. One of them is the GC pressure that is the consequence of allocating many hashers, as a binary tree has 4x the size of an MPT. This PR introduces an optimization that already exists for the MPT: keep a pool of hashers, in order to reduce the amount of allocations. --- trie/bintrie/hasher.go | 39 +++++++++++++++++++++++++++++++++++ trie/bintrie/internal_node.go | 4 ++-- trie/bintrie/key_encoding.go | 4 ++-- trie/bintrie/stem_node.go | 10 +++++---- 4 files changed, 49 insertions(+), 8 deletions(-) create mode 100644 trie/bintrie/hasher.go diff --git a/trie/bintrie/hasher.go b/trie/bintrie/hasher.go new file mode 100644 index 0000000000..b81c145723 --- /dev/null +++ b/trie/bintrie/hasher.go @@ -0,0 +1,39 @@ +// Copyright 2026 go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package bintrie + +import ( + "crypto/sha256" + "hash" + "sync" +) + +var sha256Pool = sync.Pool{ + New: func() any { + return sha256.New() + }, +} + +func newSha256() hash.Hash { + h := sha256Pool.Get().(hash.Hash) + h.Reset() + return h +} + +func returnSha256(h hash.Hash) { + sha256Pool.Put(h) +} diff --git a/trie/bintrie/internal_node.go b/trie/bintrie/internal_node.go index 2d02e240be..7ad76aa9db 100644 --- a/trie/bintrie/internal_node.go +++ b/trie/bintrie/internal_node.go @@ -17,7 +17,6 @@ package bintrie import ( - "crypto/sha256" "errors" "fmt" @@ -125,7 +124,8 @@ func (bt *InternalNode) Hash() common.Hash { return bt.hash } - h := sha256.New() + h := newSha256() + defer returnSha256(h) if bt.left != nil { h.Write(bt.left.Hash().Bytes()) } else { diff --git a/trie/bintrie/key_encoding.go b/trie/bintrie/key_encoding.go index 9b98bee491..c009f1529f 100644 --- a/trie/bintrie/key_encoding.go +++ b/trie/bintrie/key_encoding.go @@ -18,7 +18,6 @@ package bintrie import ( "bytes" - "crypto/sha256" "github.com/ethereum/go-ethereum/common" "github.com/holiman/uint256" @@ -51,7 +50,8 @@ func GetBinaryTreeKey(addr common.Address, key []byte) []byte { } func getBinaryTreeKey(addr common.Address, offset []byte, overflow bool) []byte { - hasher := sha256.New() + hasher := newSha256() + defer returnSha256(hasher) hasher.Write(zeroHash[:12]) hasher.Write(addr[:]) var buf [32]byte diff --git a/trie/bintrie/stem_node.go b/trie/bintrie/stem_node.go index f1ae2361ff..3f69261d62 100644 --- a/trie/bintrie/stem_node.go +++ b/trie/bintrie/stem_node.go @@ -18,7 +18,6 @@ package bintrie import ( "bytes" - "crypto/sha256" "errors" "fmt" "slices" @@ -114,14 +113,17 @@ func (bt *StemNode) Hash() common.Hash { } var data [StemNodeWidth]common.Hash + h := newSha256() + defer returnSha256(h) for i, v := range bt.Values { if v != nil { - h := sha256.Sum256(v) - data[i] = common.BytesToHash(h[:]) + h.Reset() + h.Write(v) + h.Sum(data[i][:0]) } } + h.Reset() - h := sha256.New() for level := 1; level <= 8; level++ { for i := range StemNodeWidth / (1 << level) { h.Reset() From eaa9418ac184fba1be81e1473ba42db1668714f0 Mon Sep 17 00:00:00 2001 From: Lee Gyumin <82251551+legm0310@users.noreply.github.com> Date: Fri, 13 Mar 2026 17:45:14 +0900 Subject: [PATCH 117/161] core/rawdb: enforce exact key length for num->hash and td in db inspect (#34000) This PR improves `db inspect` classification accuracy in `core/rawdb/database.go` by tightening key-shape checks for: - `Block number->hash` - `Difficulties (deprecated)` Previously, both categories used prefix/suffix heuristics and could mis-bucket unrelated entries. --- core/rawdb/database.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/rawdb/database.go b/core/rawdb/database.go index 576e32b961..a13afb9c0e 100644 --- a/core/rawdb/database.go +++ b/core/rawdb/database.go @@ -478,9 +478,9 @@ func InspectDatabase(db ethdb.Database, keyPrefix, keyStart []byte) error { bodies.add(size) case bytes.HasPrefix(key, blockReceiptsPrefix) && len(key) == (len(blockReceiptsPrefix)+8+common.HashLength): receipts.add(size) - case bytes.HasPrefix(key, headerPrefix) && bytes.HasSuffix(key, headerTDSuffix): + case bytes.HasPrefix(key, headerPrefix) && bytes.HasSuffix(key, headerTDSuffix) && len(key) == (len(headerPrefix)+8+common.HashLength+len(headerTDSuffix)): tds.add(size) - case bytes.HasPrefix(key, headerPrefix) && bytes.HasSuffix(key, headerHashSuffix): + case bytes.HasPrefix(key, headerPrefix) && bytes.HasSuffix(key, headerHashSuffix) && len(key) == (len(headerPrefix)+8+common.HashLength+len(headerHashSuffix)): numHashPairings.add(size) case bytes.HasPrefix(key, headerNumberPrefix) && len(key) == (len(headerNumberPrefix)+common.HashLength): hashNumPairings.add(size) From dba741fd3156a16bf26feb469f5e7e2de2207e5f Mon Sep 17 00:00:00 2001 From: Lessa <230214854+adblesss@users.noreply.github.com> Date: Fri, 13 Mar 2026 07:39:45 -0400 Subject: [PATCH 118/161] console: fix autocomplete digit range to include 0 (#34003) PR #26518 added digit support but used '1'-'9' instead of '0'-'9'. This breaks autocomplete for identifiers containing 0 like account0. --- console/console.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/console/console.go b/console/console.go index b5c77bd78f..573d1da570 100644 --- a/console/console.go +++ b/console/console.go @@ -282,7 +282,7 @@ func (c *Console) AutoCompleteInput(line string, pos int) (string, []string, str for ; start > 0; start-- { // Skip all methods and namespaces (i.e. including the dot) c := line[start] - if c == '.' || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '1' && c <= '9') { + if c == '.' || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') { continue } // We've hit an unexpected character, autocomplete form here From 189f9d0b17ca493ecc985a7896a0cc30dd157ca2 Mon Sep 17 00:00:00 2001 From: vickkkkkyy Date: Fri, 13 Mar 2026 20:26:20 +0800 Subject: [PATCH 119/161] eth/filters: check history pruning cutoff in GetFilterLogs (#33823) Return proper error for the log filters going beyond pruning point on a node with expired history. --- eth/filters/api.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/eth/filters/api.go b/eth/filters/api.go index 2cb72dc114..e4ade96598 100644 --- a/eth/filters/api.go +++ b/eth/filters/api.go @@ -536,6 +536,9 @@ func (api *FilterAPI) GetFilterLogs(ctx context.Context, id rpc.ID) ([]*types.Lo if f.crit.ToBlock != nil { end = f.crit.ToBlock.Int64() } + if begin >= 0 && begin < int64(api.events.backend.HistoryPruningCutoff()) { + return nil, &history.PrunedHistoryError{} + } // Construct the range filter filter = api.sys.NewRangeFilter(begin, end, f.crit.Addresses, f.crit.Topics, api.rangeLimit) } From ede376af8ea3b8f02c2649f8deab4e0764befbd2 Mon Sep 17 00:00:00 2001 From: jwasinger Date: Fri, 13 Mar 2026 12:09:32 -0400 Subject: [PATCH 120/161] internal/ethapi: encode slotNumber as hex in RPCMarshalHeader (#34005) The slotNumber field was being passed as a raw *uint64 to the JSON marshaler, which serializes it as a plain decimal integer (e.g. 159). All Ethereum JSON-RPC quantity fields must be hex-encoded per spec. Wrap with hexutil.Uint64 to match the encoding of other numeric header fields like blobGasUsed and excessBlobGas. Co-authored-by: qu0b --- internal/ethapi/api.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go index 41d165a423..bb0dd042ab 100644 --- a/internal/ethapi/api.go +++ b/internal/ethapi/api.go @@ -966,7 +966,7 @@ func RPCMarshalHeader(head *types.Header) map[string]interface{} { result["requestsHash"] = head.RequestsHash } if head.SlotNumber != nil { - result["slotNumber"] = head.SlotNumber + result["slotNumber"] = hexutil.Uint64(*head.SlotNumber) } return result } From 24025c2bd0a0e2b01435fe29c2f18a3f9ec764c0 Mon Sep 17 00:00:00 2001 From: vickkkkkyy Date: Sat, 14 Mar 2026 17:22:50 +0800 Subject: [PATCH 121/161] build: fix signify flag name in doWindowsInstaller (#34006) The signify flag in `doWindowsInstaller` was defined as "signify key" (with a space), making it impossible to pass via CLI (`-signify `). This meant the Windows installer signify signing was silently never executed. Fix by renaming the flag to "signify", consistent with `doArchive` and `doKeeperArchive`. --- build/ci.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/ci.go b/build/ci.go index 4d0a1d7e35..dce01f01a8 100644 --- a/build/ci.go +++ b/build/ci.go @@ -1196,7 +1196,7 @@ func doWindowsInstaller(cmdline []string) { var ( arch = flag.String("arch", runtime.GOARCH, "Architecture for cross build packaging") signer = flag.String("signer", "", `Environment variable holding the signing key (e.g. WINDOWS_SIGNING_KEY)`) - signify = flag.String("signify key", "", `Environment variable holding the signify signing key (e.g. WINDOWS_SIGNIFY_KEY)`) + signify = flag.String("signify", "", `Environment variable holding the signify signing key (e.g. WINDOWS_SIGNIFY_KEY)`) upload = flag.String("upload", "", `Destination to upload the archives (usually "gethstore/builds")`) workdir = flag.String("workdir", "", `Output directory for packages (uses temp dir if unset)`) ) From 77e7e5ad1a0c6e758312820af75e94293f025168 Mon Sep 17 00:00:00 2001 From: Guillaume Ballet <3272758+gballet@users.noreply.github.com> Date: Mon, 16 Mar 2026 07:35:07 +0100 Subject: [PATCH 122/161] go.mod, go.sum: update karalabe/hid to fix broken FreeBSD ports build (#34008) cgo builds have been broken in FreeBSD ports because of the hid lib. @enriquefynn has made a temporary patch, but the fix has been merged in the master branch, so let's reflect that here. --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index bfe2df8c0c..37a2537dd0 100644 --- a/go.mod +++ b/go.mod @@ -43,7 +43,7 @@ require ( github.com/influxdata/influxdb1-client v0.0.0-20220302092344-a9ab5670611c github.com/jackpal/go-nat-pmp v1.0.2 github.com/jedisct1/go-minisign v0.0.0-20230811132847-661be99b8267 - github.com/karalabe/hid v1.0.1-0.20240306101548-573246063e52 + github.com/karalabe/hid v1.0.1-0.20260315100226-f5d04adeffeb github.com/klauspost/compress v1.17.8 github.com/kylelemons/godebug v1.1.0 github.com/mattn/go-colorable v0.1.13 diff --git a/go.sum b/go.sum index b8c0558c8c..c465603242 100644 --- a/go.sum +++ b/go.sum @@ -225,8 +225,8 @@ github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9Y github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/karalabe/hid v1.0.1-0.20240306101548-573246063e52 h1:msKODTL1m0wigztaqILOtla9HeW1ciscYG4xjLtvk5I= -github.com/karalabe/hid v1.0.1-0.20240306101548-573246063e52/go.mod h1:qk1sX/IBgppQNcGCRoj90u6EGC056EBoIc1oEjCWla8= +github.com/karalabe/hid v1.0.1-0.20260315100226-f5d04adeffeb h1:Ag83At00qa4FLkcdMgrwHVSakqky/eZczOlxd4q336E= +github.com/karalabe/hid v1.0.1-0.20260315100226-f5d04adeffeb/go.mod h1:qk1sX/IBgppQNcGCRoj90u6EGC056EBoIc1oEjCWla8= github.com/kilic/bls12-381 v0.1.0 h1:encrdjqKMEvabVQ7qYOKu1OvhqpK4s47wDYtNiPtlp4= github.com/kilic/bls12-381 v0.1.0/go.mod h1:vDTTHJONJ6G+P2R74EhnyotQDTliQDnFEwhdmfzw1ig= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= From a7d09cc14ff5a3e88a4ed328354f918cc2ca0b69 Mon Sep 17 00:00:00 2001 From: rjl493456442 Date: Mon, 16 Mar 2026 16:45:26 +0800 Subject: [PATCH 123/161] core: fix code database initialization in stateless mode (#34011) This PR fixes the statedb initialization, ensuring the data source is bound with the stateless input. --- core/stateless.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/stateless.go b/core/stateless.go index 88d8ed8138..86d4dc304b 100644 --- a/core/stateless.go +++ b/core/stateless.go @@ -53,7 +53,7 @@ func ExecuteStateless(ctx context.Context, config *params.ChainConfig, vmconfig } // Create and populate the state database to serve as the stateless backend memdb := witness.MakeHashDB() - db, err := state.New(witness.Root(), state.NewDatabase(triedb.NewDatabase(memdb, triedb.HashDefaults), nil)) + db, err := state.New(witness.Root(), state.NewDatabase(triedb.NewDatabase(memdb, triedb.HashDefaults), state.NewCodeDB(memdb))) if err != nil { return common.Hash{}, common.Hash{}, err } From 98b13f342f046f72d0f5eca1bd4ca5b6951a8d79 Mon Sep 17 00:00:00 2001 From: Jonny Rhea <5555162+jrhea@users.noreply.github.com> Date: Mon, 16 Mar 2026 13:24:41 -0500 Subject: [PATCH 124/161] miner: add OpenTelemetry spans for block building path (#33773) Instruments the block building path with OpenTelemetry tracing spans. - added spans in forkchoiceUpdated -> buildPayload -> background payload loop -> generateWork iterations. Spans should look something like this: ``` jsonrpc.engine/forkchoiceUpdatedV3 |- rpc.runMethod | |- engine.forkchoiceUpdated | |- miner.buildPayload [payload.id, parent.hash, timestamp] | |- miner.generateWork [txs.count, gas.used, fees] (empty block) | | |- miner.prepareWork | | |- miner.FinalizeAndAssemble | | |- consensus.beacon.FinalizeAndAssemble [block.number, txs.count, withdrawals.count] | | |- consensus.beacon.Finalize | | |- consensus.beacon.IntermediateRoot | | |- consensus.beacon.NewBlock | |- miner.background [block.number, iterations.total, exit.reason, empty.delivered] | |- miner.buildIteration [iteration, update.accepted] | | |- miner.generateWork [txs.count, gas.used, fees] | | |- miner.prepareWork | | |- miner.fillTransactions [pending.plain.count, pending.blob.count] | | | |- miner.commitTransactions.priority (if prio txs exist) | | | | |- miner.commitTransactions | | | | |- miner.commitTransaction (per tx) | | | |- miner.commitTransactions.normal (if normal txs exist) | | | |- miner.commitTransactions | | | |- miner.commitTransaction (per tx) | | |- miner.FinalizeAndAssemble | | |- consensus.beacon.FinalizeAndAssemble [block.number, txs.count, withdrawals.count] | | |- consensus.beacon.Finalize | | |- consensus.beacon.IntermediateRoot | | |- consensus.beacon.NewBlock | |- miner.buildIteration [iteration, update.accepted] | | |- ... | |- ... ``` - added simulated server spans in SimulatedBeacon.sealBlock so dev mode (geth --dev) produces traces that mirror production Engine API calls from a real consensus client. --------- Co-authored-by: Felix Lange --- consensus/beacon/consensus.go | 23 ++++++-- consensus/clique/clique.go | 3 +- consensus/consensus.go | 3 +- consensus/ethash/consensus.go | 3 +- core/chain_makers.go | 3 +- core/txpool/blobpool/blobpool.go | 8 +-- core/txpool/blobpool/blobpool_test.go | 2 +- core/txpool/legacypool/legacypool.go | 8 +-- core/txpool/subpool.go | 2 +- core/txpool/txpool.go | 11 ++-- eth/api_backend.go | 2 +- eth/catalyst/api.go | 22 ++++---- eth/catalyst/api_test.go | 36 ++++++------- eth/catalyst/simulated_beacon.go | 38 +++++++++++--- eth/catalyst/witness.go | 12 ++--- eth/handler.go | 2 +- eth/handler_test.go | 6 ++- eth/sync.go | 3 +- internal/ethapi/simulate.go | 2 +- miner/miner.go | 26 ++++----- miner/payload_building.go | 76 ++++++++++++++++++++++----- miner/payload_building_test.go | 3 +- miner/worker.go | 57 +++++++++++++++----- 23 files changed, 245 insertions(+), 106 deletions(-) diff --git a/consensus/beacon/consensus.go b/consensus/beacon/consensus.go index 45a480c50e..25f4f9d2b2 100644 --- a/consensus/beacon/consensus.go +++ b/consensus/beacon/consensus.go @@ -17,6 +17,7 @@ package beacon import ( + "context" "errors" "fmt" "math/big" @@ -29,6 +30,7 @@ import ( "github.com/ethereum/go-ethereum/core/tracing" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/internal/telemetry" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/trie" "github.com/holiman/uint256" @@ -351,9 +353,17 @@ func (beacon *Beacon) Finalize(chain consensus.ChainHeaderReader, header *types. // FinalizeAndAssemble implements consensus.Engine, setting the final state and // assembling the block. -func (beacon *Beacon) FinalizeAndAssemble(chain consensus.ChainHeaderReader, header *types.Header, state *state.StateDB, body *types.Body, receipts []*types.Receipt) (*types.Block, error) { +func (beacon *Beacon) FinalizeAndAssemble(ctx context.Context, chain consensus.ChainHeaderReader, header *types.Header, state *state.StateDB, body *types.Body, receipts []*types.Receipt) (result *types.Block, err error) { + ctx, _, spanEnd := telemetry.StartSpan(ctx, "consensus.beacon.FinalizeAndAssemble", + telemetry.Int64Attribute("block.number", int64(header.Number.Uint64())), + telemetry.Int64Attribute("txs.count", int64(len(body.Transactions))), + telemetry.Int64Attribute("withdrawals.count", int64(len(body.Withdrawals))), + ) + defer spanEnd(&err) + if !beacon.IsPoSHeader(header) { - return beacon.ethone.FinalizeAndAssemble(chain, header, state, body, receipts) + block, delegateErr := beacon.ethone.FinalizeAndAssemble(ctx, chain, header, state, body, receipts) + return block, delegateErr } shanghai := chain.Config().IsShanghai(header.Number, header.Time) if shanghai { @@ -367,13 +377,20 @@ func (beacon *Beacon) FinalizeAndAssemble(chain consensus.ChainHeaderReader, hea } } // Finalize and assemble the block. + _, _, finalizeSpanEnd := telemetry.StartSpan(ctx, "consensus.beacon.Finalize") beacon.Finalize(chain, header, state, body) + finalizeSpanEnd(nil) // Assign the final state root to header. + _, _, rootSpanEnd := telemetry.StartSpan(ctx, "consensus.beacon.IntermediateRoot") header.Root = state.IntermediateRoot(true) + rootSpanEnd(nil) // Assemble the final block. - return types.NewBlock(header, body, receipts, trie.NewStackTrie(nil)), nil + _, _, blockSpanEnd := telemetry.StartSpan(ctx, "consensus.beacon.NewBlock") + block := types.NewBlock(header, body, receipts, trie.NewStackTrie(nil)) + blockSpanEnd(nil) + return block, nil } // Seal generates a new sealing request for the given input block and pushes diff --git a/consensus/clique/clique.go b/consensus/clique/clique.go index 28095011c1..3bf79d5a62 100644 --- a/consensus/clique/clique.go +++ b/consensus/clique/clique.go @@ -19,6 +19,7 @@ package clique import ( "bytes" + "context" "errors" "fmt" "io" @@ -581,7 +582,7 @@ func (c *Clique) Finalize(chain consensus.ChainHeaderReader, header *types.Heade // FinalizeAndAssemble implements consensus.Engine, ensuring no uncles are set, // nor block rewards given, and returns the final block. -func (c *Clique) FinalizeAndAssemble(chain consensus.ChainHeaderReader, header *types.Header, state *state.StateDB, body *types.Body, receipts []*types.Receipt) (*types.Block, error) { +func (c *Clique) FinalizeAndAssemble(ctx context.Context, chain consensus.ChainHeaderReader, header *types.Header, state *state.StateDB, body *types.Body, receipts []*types.Receipt) (*types.Block, error) { if len(body.Withdrawals) > 0 { return nil, errors.New("clique does not support withdrawals") } diff --git a/consensus/consensus.go b/consensus/consensus.go index a68351f7ff..094026b614 100644 --- a/consensus/consensus.go +++ b/consensus/consensus.go @@ -18,6 +18,7 @@ package consensus import ( + "context" "math/big" "github.com/ethereum/go-ethereum/common" @@ -92,7 +93,7 @@ type Engine interface { // // Note: The block header and state database might be updated to reflect any // consensus rules that happen at finalization (e.g. block rewards). - FinalizeAndAssemble(chain ChainHeaderReader, header *types.Header, state *state.StateDB, body *types.Body, receipts []*types.Receipt) (*types.Block, error) + FinalizeAndAssemble(ctx context.Context, chain ChainHeaderReader, header *types.Header, state *state.StateDB, body *types.Body, receipts []*types.Receipt) (*types.Block, error) // Seal generates a new sealing request for the given input block and pushes // the result into the given channel. diff --git a/consensus/ethash/consensus.go b/consensus/ethash/consensus.go index 61371e0636..56256d1215 100644 --- a/consensus/ethash/consensus.go +++ b/consensus/ethash/consensus.go @@ -17,6 +17,7 @@ package ethash import ( + "context" "errors" "fmt" "math/big" @@ -513,7 +514,7 @@ func (ethash *Ethash) Finalize(chain consensus.ChainHeaderReader, header *types. // FinalizeAndAssemble implements consensus.Engine, accumulating the block and // uncle rewards, setting the final state and assembling the block. -func (ethash *Ethash) FinalizeAndAssemble(chain consensus.ChainHeaderReader, header *types.Header, state *state.StateDB, body *types.Body, receipts []*types.Receipt) (*types.Block, error) { +func (ethash *Ethash) FinalizeAndAssemble(ctx context.Context, chain consensus.ChainHeaderReader, header *types.Header, state *state.StateDB, body *types.Body, receipts []*types.Receipt) (*types.Block, error) { if len(body.Withdrawals) > 0 { return nil, errors.New("ethash does not support withdrawals") } diff --git a/core/chain_makers.go b/core/chain_makers.go index e4b5cf964f..8f6eed1697 100644 --- a/core/chain_makers.go +++ b/core/chain_makers.go @@ -17,6 +17,7 @@ package core import ( + "context" "fmt" "math/big" @@ -411,7 +412,7 @@ func GenerateChain(config *params.ChainConfig, parent *types.Block, engine conse } body := types.Body{Transactions: b.txs, Uncles: b.uncles, Withdrawals: b.withdrawals} - block, err := b.engine.FinalizeAndAssemble(cm, b.header, statedb, &body, b.receipts) + block, err := b.engine.FinalizeAndAssemble(context.Background(), cm, b.header, statedb, &body, b.receipts) if err != nil { panic(err) } diff --git a/core/txpool/blobpool/blobpool.go b/core/txpool/blobpool/blobpool.go index 27fdd00016..7155a67a9b 100644 --- a/core/txpool/blobpool/blobpool.go +++ b/core/txpool/blobpool/blobpool.go @@ -1865,11 +1865,11 @@ func (p *BlobPool) drop() { // // The transactions can also be pre-filtered by the dynamic fee components to // reduce allocations and load on downstream subsystems. -func (p *BlobPool) Pending(filter txpool.PendingFilter) map[common.Address][]*txpool.LazyTransaction { +func (p *BlobPool) Pending(filter txpool.PendingFilter) (map[common.Address][]*txpool.LazyTransaction, int) { // If only plain transactions are requested, this pool is unsuitable as it // contains none, don't even bother. if !filter.BlobTxs { - return nil + return nil, 0 } // Track the amount of time waiting to retrieve the list of pending blob txs // from the pool and the amount of time actually spent on assembling the data. @@ -1885,6 +1885,7 @@ func (p *BlobPool) Pending(filter txpool.PendingFilter) map[common.Address][]*tx pendtimeHist.Update(time.Since(execStart).Nanoseconds()) }() + var count int pending := make(map[common.Address][]*txpool.LazyTransaction, len(p.index)) for addr, txs := range p.index { lazies := make([]*txpool.LazyTransaction, 0, len(txs)) @@ -1930,9 +1931,10 @@ func (p *BlobPool) Pending(filter txpool.PendingFilter) map[common.Address][]*tx } if len(lazies) > 0 { pending[addr] = lazies + count += len(lazies) } } - return pending + return pending, count } // updateStorageMetrics retrieves a bunch of stats from the data store and pushes diff --git a/core/txpool/blobpool/blobpool_test.go b/core/txpool/blobpool/blobpool_test.go index 6580a339e3..ba96bea8ed 100644 --- a/core/txpool/blobpool/blobpool_test.go +++ b/core/txpool/blobpool/blobpool_test.go @@ -2122,7 +2122,7 @@ func benchmarkPoolPending(b *testing.B, datacap uint64) { b.ReportAllocs() for i := 0; i < b.N; i++ { - p := pool.Pending(txpool.PendingFilter{ + p, _ := pool.Pending(txpool.PendingFilter{ MinTip: uint256.NewInt(1), BaseFee: chain.basefee, BlobFee: chain.blobfee, diff --git a/core/txpool/legacypool/legacypool.go b/core/txpool/legacypool/legacypool.go index 36970c820e..25c4b13166 100644 --- a/core/txpool/legacypool/legacypool.go +++ b/core/txpool/legacypool/legacypool.go @@ -494,15 +494,16 @@ func (pool *LegacyPool) ContentFrom(addr common.Address) ([]*types.Transaction, // // The transactions can also be pre-filtered by the dynamic fee components to // reduce allocations and load on downstream subsystems. -func (pool *LegacyPool) Pending(filter txpool.PendingFilter) map[common.Address][]*txpool.LazyTransaction { +func (pool *LegacyPool) Pending(filter txpool.PendingFilter) (map[common.Address][]*txpool.LazyTransaction, int) { // If only blob transactions are requested, this pool is unsuitable as it // contains none, don't even bother. if filter.BlobTxs { - return nil + return nil, 0 } pool.mu.Lock() defer pool.mu.Unlock() + var count int pending := make(map[common.Address][]*txpool.LazyTransaction, len(pool.pending)) for addr, list := range pool.pending { txs := list.Flatten() @@ -539,9 +540,10 @@ func (pool *LegacyPool) Pending(filter txpool.PendingFilter) map[common.Address] } } pending[addr] = lazies + count += len(lazies) } } - return pending + return pending, count } // ValidateTxBasics checks whether a transaction is valid according to the consensus diff --git a/core/txpool/subpool.go b/core/txpool/subpool.go index db099ddf98..4cc1b193d6 100644 --- a/core/txpool/subpool.go +++ b/core/txpool/subpool.go @@ -154,7 +154,7 @@ type SubPool interface { // // The transactions can also be pre-filtered by the dynamic fee components to // reduce allocations and load on downstream subsystems. - Pending(filter PendingFilter) map[common.Address][]*LazyTransaction + Pending(filter PendingFilter) (map[common.Address][]*LazyTransaction, int) // SubscribeTransactions subscribes to new transaction events. The subscriber // can decide whether to receive notifications only for newly seen transactions diff --git a/core/txpool/txpool.go b/core/txpool/txpool.go index a314a83f1b..25647e0cce 100644 --- a/core/txpool/txpool.go +++ b/core/txpool/txpool.go @@ -359,14 +359,17 @@ func (p *TxPool) Add(txs []*types.Transaction, sync bool) []error { // // The transactions can also be pre-filtered by the dynamic fee components to // reduce allocations and load on downstream subsystems. -func (p *TxPool) Pending(filter PendingFilter) map[common.Address][]*LazyTransaction { +func (p *TxPool) Pending(filter PendingFilter) (map[common.Address][]*LazyTransaction, int) { + var count int txs := make(map[common.Address][]*LazyTransaction) for _, subpool := range p.subpools { - for addr, set := range subpool.Pending(filter) { - txs[addr] = set + set, n := subpool.Pending(filter) + for addr, list := range set { + txs[addr] = list } + count += n } - return txs + return txs, count } // SubscribeTransactions registers a subscription for new transaction events, diff --git a/eth/api_backend.go b/eth/api_backend.go index 3f826b7861..726d8316a0 100644 --- a/eth/api_backend.go +++ b/eth/api_backend.go @@ -347,7 +347,7 @@ func (b *EthAPIBackend) SendTx(ctx context.Context, signedTx *types.Transaction) } func (b *EthAPIBackend) GetPoolTransactions() (types.Transactions, error) { - pending := b.eth.txPool.Pending(txpool.PendingFilter{}) + pending, _ := b.eth.txPool.Pending(txpool.PendingFilter{}) var txs types.Transactions for _, batch := range pending { for _, lazy := range batch { diff --git a/eth/catalyst/api.go b/eth/catalyst/api.go index 96d4570561..8a4aced04b 100644 --- a/eth/catalyst/api.go +++ b/eth/catalyst/api.go @@ -162,7 +162,7 @@ func newConsensusAPIWithoutHeartbeat(eth *eth.Ethereum) *ConsensusAPI { // // If there are payloadAttributes: we try to assemble a block with the payloadAttributes // and return its payloadID. -func (api *ConsensusAPI) ForkchoiceUpdatedV1(update engine.ForkchoiceStateV1, payloadAttributes *engine.PayloadAttributes) (engine.ForkChoiceResponse, error) { +func (api *ConsensusAPI) ForkchoiceUpdatedV1(ctx context.Context, update engine.ForkchoiceStateV1, payloadAttributes *engine.PayloadAttributes) (engine.ForkChoiceResponse, error) { if payloadAttributes != nil { switch { case payloadAttributes.Withdrawals != nil || payloadAttributes.BeaconRoot != nil: @@ -171,12 +171,12 @@ func (api *ConsensusAPI) ForkchoiceUpdatedV1(update engine.ForkchoiceStateV1, pa return engine.STATUS_INVALID, paramsErr("fcuV1 called post-shanghai") } } - return api.forkchoiceUpdated(update, payloadAttributes, engine.PayloadV1, false) + return api.forkchoiceUpdated(ctx, update, payloadAttributes, engine.PayloadV1, false) } // ForkchoiceUpdatedV2 is equivalent to V1 with the addition of withdrawals in the payload // attributes. It supports both PayloadAttributesV1 and PayloadAttributesV2. -func (api *ConsensusAPI) ForkchoiceUpdatedV2(update engine.ForkchoiceStateV1, params *engine.PayloadAttributes) (engine.ForkChoiceResponse, error) { +func (api *ConsensusAPI) ForkchoiceUpdatedV2(ctx context.Context, update engine.ForkchoiceStateV1, params *engine.PayloadAttributes) (engine.ForkChoiceResponse, error) { if params != nil { switch { case params.BeaconRoot != nil: @@ -189,12 +189,12 @@ func (api *ConsensusAPI) ForkchoiceUpdatedV2(update engine.ForkchoiceStateV1, pa return engine.STATUS_INVALID, unsupportedForkErr("fcuV2 must only be called with paris or shanghai payloads") } } - return api.forkchoiceUpdated(update, params, engine.PayloadV2, false) + return api.forkchoiceUpdated(ctx, update, params, engine.PayloadV2, false) } // ForkchoiceUpdatedV3 is equivalent to V2 with the addition of parent beacon block root // in the payload attributes. It supports only PayloadAttributesV3. -func (api *ConsensusAPI) ForkchoiceUpdatedV3(update engine.ForkchoiceStateV1, params *engine.PayloadAttributes) (engine.ForkChoiceResponse, error) { +func (api *ConsensusAPI) ForkchoiceUpdatedV3(ctx context.Context, update engine.ForkchoiceStateV1, params *engine.PayloadAttributes) (engine.ForkChoiceResponse, error) { if params != nil { switch { case params.Withdrawals == nil: @@ -209,12 +209,12 @@ func (api *ConsensusAPI) ForkchoiceUpdatedV3(update engine.ForkchoiceStateV1, pa // hash, even if params are wrong. To do this we need to split up // forkchoiceUpdate into a function that only updates the head and then a // function that kicks off block construction. - return api.forkchoiceUpdated(update, params, engine.PayloadV3, false) + return api.forkchoiceUpdated(ctx, update, params, engine.PayloadV3, false) } // ForkchoiceUpdatedV4 is equivalent to V3 with the addition of slot number // in the payload attributes. It supports only PayloadAttributesV4. -func (api *ConsensusAPI) ForkchoiceUpdatedV4(update engine.ForkchoiceStateV1, params *engine.PayloadAttributes) (engine.ForkChoiceResponse, error) { +func (api *ConsensusAPI) ForkchoiceUpdatedV4(ctx context.Context, update engine.ForkchoiceStateV1, params *engine.PayloadAttributes) (engine.ForkChoiceResponse, error) { if params != nil { switch { case params.Withdrawals == nil: @@ -231,10 +231,12 @@ func (api *ConsensusAPI) ForkchoiceUpdatedV4(update engine.ForkchoiceStateV1, pa // hash, even if params are wrong. To do this we need to split up // forkchoiceUpdate into a function that only updates the head and then a // function that kicks off block construction. - return api.forkchoiceUpdated(update, params, engine.PayloadV4, false) + return api.forkchoiceUpdated(ctx, update, params, engine.PayloadV4, false) } -func (api *ConsensusAPI) forkchoiceUpdated(update engine.ForkchoiceStateV1, payloadAttributes *engine.PayloadAttributes, payloadVersion engine.PayloadVersion, payloadWitness bool) (engine.ForkChoiceResponse, error) { +func (api *ConsensusAPI) forkchoiceUpdated(ctx context.Context, update engine.ForkchoiceStateV1, payloadAttributes *engine.PayloadAttributes, payloadVersion engine.PayloadVersion, payloadWitness bool) (result engine.ForkChoiceResponse, err error) { + ctx, _, spanEnd := telemetry.StartSpan(ctx, "engine.forkchoiceUpdated") + defer spanEnd(&err) api.forkchoiceLock.Lock() defer api.forkchoiceLock.Unlock() @@ -375,7 +377,7 @@ func (api *ConsensusAPI) forkchoiceUpdated(update engine.ForkchoiceStateV1, payl if api.localBlocks.has(id) { return valid(&id), nil } - payload, err := api.eth.Miner().BuildPayload(args, payloadWitness) + payload, err := api.eth.Miner().BuildPayload(ctx, args, payloadWitness) if err != nil { log.Error("Failed to build payload", "err", err) return valid(nil), engine.InvalidPayloadAttributes.With(err) diff --git a/eth/catalyst/api_test.go b/eth/catalyst/api_test.go index db0505101f..d126c362fe 100644 --- a/eth/catalyst/api_test.go +++ b/eth/catalyst/api_test.go @@ -190,7 +190,7 @@ func TestEth2PrepareAndGetPayload(t *testing.T) { SafeBlockHash: common.Hash{}, FinalizedBlockHash: common.Hash{}, } - _, err := api.ForkchoiceUpdatedV1(fcState, &blockParams) + _, err := api.ForkchoiceUpdatedV1(context.Background(), fcState, &blockParams) if err != nil { t.Fatalf("error preparing payload, err=%v", err) } @@ -270,7 +270,7 @@ func TestInvalidPayloadTimestamp(t *testing.T) { SafeBlockHash: common.Hash{}, FinalizedBlockHash: common.Hash{}, } - _, err := api.ForkchoiceUpdatedV1(fcState, ¶ms) + _, err := api.ForkchoiceUpdatedV1(context.Background(), fcState, ¶ms) if test.shouldErr && err == nil { t.Fatalf("expected error preparing payload with invalid timestamp, err=%v", err) } else if !test.shouldErr && err != nil { @@ -329,7 +329,7 @@ func TestEth2NewBlock(t *testing.T) { SafeBlockHash: block.Hash(), FinalizedBlockHash: block.Hash(), } - if _, err := api.ForkchoiceUpdatedV1(fcState, nil); err != nil { + if _, err := api.ForkchoiceUpdatedV1(context.Background(), fcState, nil); err != nil { t.Fatalf("Failed to insert block: %v", err) } if have, want := ethservice.BlockChain().CurrentBlock().Number.Uint64(), block.NumberU64(); have != want { @@ -369,7 +369,7 @@ func TestEth2NewBlock(t *testing.T) { SafeBlockHash: block.Hash(), FinalizedBlockHash: block.Hash(), } - if _, err := api.ForkchoiceUpdatedV1(fcState, nil); err != nil { + if _, err := api.ForkchoiceUpdatedV1(context.Background(), fcState, nil); err != nil { t.Fatalf("Failed to insert block: %v", err) } if ethservice.BlockChain().CurrentBlock().Number.Uint64() != block.NumberU64() { @@ -515,7 +515,7 @@ func setupBlocks(t *testing.T, ethservice *eth.Ethereum, n int, parent *types.He SafeBlockHash: payload.ParentHash, FinalizedBlockHash: payload.ParentHash, } - if _, err := api.ForkchoiceUpdatedV1(fcState, nil); err != nil { + if _, err := api.ForkchoiceUpdatedV1(context.Background(), fcState, nil); err != nil { t.Fatalf("Failed to insert block: %v", err) } if ethservice.BlockChain().CurrentBlock().Number.Uint64() != payload.Number { @@ -629,7 +629,7 @@ func TestNewPayloadOnInvalidChain(t *testing.T) { err error ) for i := 0; ; i++ { - if resp, err = api.ForkchoiceUpdatedV1(fcState, ¶ms); err != nil { + if resp, err = api.ForkchoiceUpdatedV1(context.Background(), fcState, ¶ms); err != nil { t.Fatalf("error preparing payload, err=%v", err) } if resp.PayloadStatus.Status != engine.VALID { @@ -660,7 +660,7 @@ func TestNewPayloadOnInvalidChain(t *testing.T) { SafeBlockHash: payload.ExecutionPayload.ParentHash, FinalizedBlockHash: payload.ExecutionPayload.ParentHash, } - if _, err := api.ForkchoiceUpdatedV1(fcState, nil); err != nil { + if _, err := api.ForkchoiceUpdatedV1(context.Background(), fcState, nil); err != nil { t.Fatalf("Failed to insert block: %v", err) } if ethservice.BlockChain().CurrentBlock().Number.Uint64() != payload.ExecutionPayload.Number { @@ -679,7 +679,7 @@ func assembleEnvelope(api *ConsensusAPI, parentHash common.Hash, params *engine. Withdrawals: params.Withdrawals, BeaconRoot: params.BeaconRoot, } - payload, err := api.eth.Miner().BuildPayload(args, false) + payload, err := api.eth.Miner().BuildPayload(context.Background(), args, false) if err != nil { return nil, err } @@ -867,7 +867,7 @@ func TestTrickRemoteBlockCache(t *testing.T) { t.Error("invalid status: VALID on an invalid chain") } // Now reorg to the head of the invalid chain - resp, err := apiB.ForkchoiceUpdatedV1(engine.ForkchoiceStateV1{HeadBlockHash: payload.BlockHash, SafeBlockHash: payload.BlockHash, FinalizedBlockHash: payload.ParentHash}, nil) + resp, err := apiB.ForkchoiceUpdatedV1(context.Background(), engine.ForkchoiceStateV1{HeadBlockHash: payload.BlockHash, SafeBlockHash: payload.BlockHash, FinalizedBlockHash: payload.ParentHash}, nil) if err != nil { t.Fatal(err) } @@ -970,7 +970,7 @@ func TestSimultaneousNewBlock(t *testing.T) { for ii := 0; ii < 10; ii++ { go func() { defer wg.Done() - if _, err := api.ForkchoiceUpdatedV1(fcState, nil); err != nil { + if _, err := api.ForkchoiceUpdatedV1(context.Background(), fcState, nil); err != nil { errMu.Lock() testErr = fmt.Errorf("failed to insert block: %w", err) errMu.Unlock() @@ -1011,7 +1011,7 @@ func TestWithdrawals(t *testing.T) { fcState := engine.ForkchoiceStateV1{ HeadBlockHash: parent.Hash(), } - resp, err := api.ForkchoiceUpdatedV2(fcState, &blockParams) + resp, err := api.ForkchoiceUpdatedV2(context.Background(), fcState, &blockParams) if err != nil { t.Fatalf("error preparing payload, err=%v", err) } @@ -1063,7 +1063,7 @@ func TestWithdrawals(t *testing.T) { }, } fcState.HeadBlockHash = execData.ExecutionPayload.BlockHash - _, err = api.ForkchoiceUpdatedV2(fcState, &blockParams) + _, err = api.ForkchoiceUpdatedV2(context.Background(), fcState, &blockParams) if err != nil { t.Fatalf("error preparing payload, err=%v", err) } @@ -1090,7 +1090,7 @@ func TestWithdrawals(t *testing.T) { // 11: set block as head. fcState.HeadBlockHash = execData.ExecutionPayload.BlockHash - _, err = api.ForkchoiceUpdatedV2(fcState, nil) + _, err = api.ForkchoiceUpdatedV2(context.Background(), fcState, nil) if err != nil { t.Fatalf("error preparing payload, err=%v", err) } @@ -1196,10 +1196,10 @@ func TestNilWithdrawals(t *testing.T) { ) if !shanghai { payloadVersion = engine.PayloadV1 - _, err = api.ForkchoiceUpdatedV1(fcState, &test.blockParams) + _, err = api.ForkchoiceUpdatedV1(context.Background(), fcState, &test.blockParams) } else { payloadVersion = engine.PayloadV2 - _, err = api.ForkchoiceUpdatedV2(fcState, &test.blockParams) + _, err = api.ForkchoiceUpdatedV2(context.Background(), fcState, &test.blockParams) } if test.wantErr { if err == nil { @@ -1579,7 +1579,7 @@ func TestParentBeaconBlockRoot(t *testing.T) { fcState := engine.ForkchoiceStateV1{ HeadBlockHash: parent.Hash(), } - resp, err := api.ForkchoiceUpdatedV3(fcState, &blockParams) + resp, err := api.ForkchoiceUpdatedV3(context.Background(), fcState, &blockParams) if err != nil { t.Fatalf("error preparing payload, err=%v", err.(*engine.EngineAPIError).ErrorData()) } @@ -1610,7 +1610,7 @@ func TestParentBeaconBlockRoot(t *testing.T) { } fcState.HeadBlockHash = execData.ExecutionPayload.BlockHash - resp, err = api.ForkchoiceUpdatedV3(fcState, nil) + resp, err = api.ForkchoiceUpdatedV3(context.Background(), fcState, nil) if err != nil { t.Fatalf("error preparing payload, err=%v", err.(*engine.EngineAPIError).ErrorData()) } @@ -1666,7 +1666,7 @@ func TestWitnessCreationAndConsumption(t *testing.T) { SafeBlockHash: common.Hash{}, FinalizedBlockHash: common.Hash{}, } - _, err := api.ForkchoiceUpdatedWithWitnessV3(fcState, &blockParams) + _, err := api.ForkchoiceUpdatedWithWitnessV3(context.Background(), fcState, &blockParams) if err != nil { t.Fatalf("error preparing payload, err=%v", err) } diff --git a/eth/catalyst/simulated_beacon.go b/eth/catalyst/simulated_beacon.go index 452902c78c..8a77cd8abe 100644 --- a/eth/catalyst/simulated_beacon.go +++ b/eth/catalyst/simulated_beacon.go @@ -126,7 +126,7 @@ func NewSimulatedBeacon(period uint64, feeRecipient common.Address, eth *eth.Eth // if genesis block, send forkchoiceUpdated to trigger transition to PoS if block.Number.Sign() == 0 { version := payloadVersion(eth.BlockChain().Config(), block.Time) - if _, err := engineAPI.forkchoiceUpdated(current, nil, version, false); err != nil { + if _, err := engineAPI.forkchoiceUpdated(context.Background(), current, nil, version, false); err != nil { return nil, err } } @@ -212,7 +212,16 @@ func (c *SimulatedBeacon) sealBlock(withdrawals []*types.Withdrawal, timestamp u slotNumber := uint64(0) attribute.SlotNumber = &slotNumber } - fcResponse, err := c.engineAPI.forkchoiceUpdated(c.curForkchoiceState, attribute, version, false) + + // Create a server span for forkchoiceUpdated with payload attributes, + // simulating an incoming engine API request from a real consensus client. + fcCtx, fcSpanEnd := telemetry.StartServerSpan(context.Background(), tracer, telemetry.RPCInfo{ + System: "jsonrpc", + Service: "engine", + Method: "forkchoiceUpdatedV" + fmt.Sprintf("%d", version), + }) + fcResponse, err := c.engineAPI.forkchoiceUpdated(fcCtx, c.curForkchoiceState, attribute, version, false) + fcSpanEnd(&err) if err != nil { return err } @@ -226,7 +235,15 @@ func (c *SimulatedBeacon) sealBlock(withdrawals []*types.Withdrawal, timestamp u return nil } + // Create a server span for getPayload, simulating the consensus client + // coming back to retrieve the built payload. + _, gpSpanEnd := telemetry.StartServerSpan(context.Background(), tracer, telemetry.RPCInfo{ + System: "jsonrpc", + Service: "engine", + Method: "getPayloadV" + fmt.Sprintf("%d", version), + }) envelope, err := c.engineAPI.getPayload(*fcResponse.PayloadID, true, nil, nil) + gpSpanEnd(&err) if err != nil { return err } @@ -274,6 +291,7 @@ func (c *SimulatedBeacon) sealBlock(withdrawals []*types.Withdrawal, timestamp u Service: "engine", Method: "newPayloadV" + fmt.Sprintf("%d", version), }) + // Mark the payload as canon _, err = c.engineAPI.newPayload(npCtx, *payload, blobHashes, beaconRoot, requests, false) npSpanEnd(&err) @@ -282,8 +300,16 @@ func (c *SimulatedBeacon) sealBlock(withdrawals []*types.Withdrawal, timestamp u } c.setCurrentState(payload.BlockHash, finalizedHash) - // Mark the block containing the payload as canonical - if _, err = c.engineAPI.forkchoiceUpdated(c.curForkchoiceState, nil, version, false); err != nil { + // Create a server span for the final forkchoiceUpdated (no payload attributes), + // which sets the new block as the canonical chain head. + fcuCtx, fcuSpanEnd := telemetry.StartServerSpan(context.Background(), tracer, telemetry.RPCInfo{ + System: "jsonrpc", + Service: "engine", + Method: "forkchoiceUpdatedV" + fmt.Sprintf("%d", version), + }) + _, err = c.engineAPI.forkchoiceUpdated(fcuCtx, c.curForkchoiceState, nil, version, false) + fcuSpanEnd(&err) + if err != nil { return err } c.lastBlockTime = payload.Timestamp @@ -349,7 +375,7 @@ func (c *SimulatedBeacon) Rollback() { func (c *SimulatedBeacon) Fork(parentHash common.Hash) error { // Ensure no pending transactions. c.eth.TxPool().Sync() - if len(c.eth.TxPool().Pending(txpool.PendingFilter{})) != 0 { + if pending, _ := c.eth.TxPool().Pending(txpool.PendingFilter{}); len(pending) != 0 { return errors.New("pending block dirty") } @@ -363,7 +389,7 @@ func (c *SimulatedBeacon) Fork(parentHash common.Hash) error { // AdjustTime creates a new block with an adjusted timestamp. func (c *SimulatedBeacon) AdjustTime(adjustment time.Duration) error { - if len(c.eth.TxPool().Pending(txpool.PendingFilter{})) != 0 { + if pending, _ := c.eth.TxPool().Pending(txpool.PendingFilter{}); len(pending) != 0 { return errors.New("could not adjust time on non-empty block") } parent := c.eth.BlockChain().CurrentBlock() diff --git a/eth/catalyst/witness.go b/eth/catalyst/witness.go index 14ca29e079..fe75c66908 100644 --- a/eth/catalyst/witness.go +++ b/eth/catalyst/witness.go @@ -35,7 +35,7 @@ import ( // ForkchoiceUpdatedWithWitnessV1 is analogous to ForkchoiceUpdatedV1, only it // generates an execution witness too if block building was requested. -func (api *ConsensusAPI) ForkchoiceUpdatedWithWitnessV1(update engine.ForkchoiceStateV1, payloadAttributes *engine.PayloadAttributes) (engine.ForkChoiceResponse, error) { +func (api *ConsensusAPI) ForkchoiceUpdatedWithWitnessV1(ctx context.Context, update engine.ForkchoiceStateV1, payloadAttributes *engine.PayloadAttributes) (engine.ForkChoiceResponse, error) { if payloadAttributes != nil { switch { case payloadAttributes.Withdrawals != nil || payloadAttributes.BeaconRoot != nil: @@ -44,12 +44,12 @@ func (api *ConsensusAPI) ForkchoiceUpdatedWithWitnessV1(update engine.Forkchoice return engine.STATUS_INVALID, paramsErr("fcuV1 called post-shanghai") } } - return api.forkchoiceUpdated(update, payloadAttributes, engine.PayloadV1, true) + return api.forkchoiceUpdated(ctx, update, payloadAttributes, engine.PayloadV1, true) } // ForkchoiceUpdatedWithWitnessV2 is analogous to ForkchoiceUpdatedV2, only it // generates an execution witness too if block building was requested. -func (api *ConsensusAPI) ForkchoiceUpdatedWithWitnessV2(update engine.ForkchoiceStateV1, params *engine.PayloadAttributes) (engine.ForkChoiceResponse, error) { +func (api *ConsensusAPI) ForkchoiceUpdatedWithWitnessV2(ctx context.Context, update engine.ForkchoiceStateV1, params *engine.PayloadAttributes) (engine.ForkChoiceResponse, error) { if params != nil { switch { case params.BeaconRoot != nil: @@ -62,12 +62,12 @@ func (api *ConsensusAPI) ForkchoiceUpdatedWithWitnessV2(update engine.Forkchoice return engine.STATUS_INVALID, unsupportedForkErr("fcuV2 must only be called with paris or shanghai payloads") } } - return api.forkchoiceUpdated(update, params, engine.PayloadV2, true) + return api.forkchoiceUpdated(ctx, update, params, engine.PayloadV2, true) } // ForkchoiceUpdatedWithWitnessV3 is analogous to ForkchoiceUpdatedV3, only it // generates an execution witness too if block building was requested. -func (api *ConsensusAPI) ForkchoiceUpdatedWithWitnessV3(update engine.ForkchoiceStateV1, params *engine.PayloadAttributes) (engine.ForkChoiceResponse, error) { +func (api *ConsensusAPI) ForkchoiceUpdatedWithWitnessV3(ctx context.Context, update engine.ForkchoiceStateV1, params *engine.PayloadAttributes) (engine.ForkChoiceResponse, error) { if params != nil { switch { case params.Withdrawals == nil: @@ -82,7 +82,7 @@ func (api *ConsensusAPI) ForkchoiceUpdatedWithWitnessV3(update engine.Forkchoice // hash, even if params are wrong. To do this we need to split up // forkchoiceUpdate into a function that only updates the head and then a // function that kicks off block construction. - return api.forkchoiceUpdated(update, params, engine.PayloadV3, true) + return api.forkchoiceUpdated(ctx, update, params, engine.PayloadV3, true) } // NewPayloadWithWitnessV1 is analogous to NewPayloadV1, only it also generates diff --git a/eth/handler.go b/eth/handler.go index bb2cd5f88b..27b5e60697 100644 --- a/eth/handler.go +++ b/eth/handler.go @@ -86,7 +86,7 @@ type txPool interface { // Pending should return pending transactions. // The slice should be modifiable by the caller. - Pending(filter txpool.PendingFilter) map[common.Address][]*txpool.LazyTransaction + Pending(filter txpool.PendingFilter) (map[common.Address][]*txpool.LazyTransaction, int) // SubscribeTransactions subscribes to new transaction events. The subscriber // can decide whether to receive notifications only for newly seen transactions diff --git a/eth/handler_test.go b/eth/handler_test.go index 3470452980..fee6bae138 100644 --- a/eth/handler_test.go +++ b/eth/handler_test.go @@ -128,10 +128,11 @@ func (p *testTxPool) Add(txs []*types.Transaction, sync bool) []error { } // Pending returns all the transactions known to the pool -func (p *testTxPool) Pending(filter txpool.PendingFilter) map[common.Address][]*txpool.LazyTransaction { +func (p *testTxPool) Pending(filter txpool.PendingFilter) (map[common.Address][]*txpool.LazyTransaction, int) { p.lock.RLock() defer p.lock.RUnlock() + var count int batches := make(map[common.Address][]*types.Transaction) for _, tx := range p.pool { from, _ := types.Sender(types.HomesteadSigner{}, tx) @@ -152,9 +153,10 @@ func (p *testTxPool) Pending(filter txpool.PendingFilter) map[common.Address][]* Gas: tx.Gas(), BlobGas: tx.BlobGas(), }) + count++ } } - return pending + return pending, count } // SubscribeTransactions should return an event subscription of NewTxsEvent and diff --git a/eth/sync.go b/eth/sync.go index ddae8443a3..8b4bd90abf 100644 --- a/eth/sync.go +++ b/eth/sync.go @@ -25,7 +25,8 @@ import ( // syncTransactions starts sending all currently pending transactions to the given peer. func (h *handler) syncTransactions(p *eth.Peer) { var hashes []common.Hash - for _, batch := range h.txpool.Pending(txpool.PendingFilter{BlobTxs: false}) { + pending, _ := h.txpool.Pending(txpool.PendingFilter{BlobTxs: false}) + for _, batch := range pending { for _, tx := range batch { hashes = append(hashes, tx.Hash) } diff --git a/internal/ethapi/simulate.go b/internal/ethapi/simulate.go index f0c69e39a4..ebe221114f 100644 --- a/internal/ethapi/simulate.go +++ b/internal/ethapi/simulate.go @@ -406,7 +406,7 @@ func (sim *simulator) processBlock(ctx context.Context, block *simBlock, header, Withdrawals: *block.BlockOverrides.Withdrawals, } chainHeadReader := &simChainHeadReader{ctx, sim.b} - b, err := sim.b.Engine().FinalizeAndAssemble(chainHeadReader, header, sim.state, blockBody, receipts) + b, err := sim.b.Engine().FinalizeAndAssemble(ctx, chainHeadReader, header, sim.state, blockBody, receipts) if err != nil { return nil, nil, nil, err } diff --git a/miner/miner.go b/miner/miner.go index ee890b5e54..0ff0237a08 100644 --- a/miner/miner.go +++ b/miner/miner.go @@ -18,6 +18,7 @@ package miner import ( + "context" "fmt" "math/big" "sync" @@ -135,8 +136,8 @@ func (miner *Miner) SetGasTip(tip *big.Int) error { } // BuildPayload builds the payload according to the provided parameters. -func (miner *Miner) BuildPayload(args *BuildPayloadArgs, witness bool) (*Payload, error) { - return miner.buildPayload(args, witness) +func (miner *Miner) BuildPayload(ctx context.Context, args *BuildPayloadArgs, witness bool) (*Payload, error) { + return miner.buildPayload(ctx, args, witness) } // getPending retrieves the pending block based on the current head block. @@ -156,16 +157,17 @@ func (miner *Miner) getPending() *newPayloadResult { if miner.chainConfig.IsShanghai(new(big.Int).Add(header.Number, big.NewInt(1)), timestamp) { withdrawal = []*types.Withdrawal{} } - ret := miner.generateWork(&generateParams{ - timestamp: timestamp, - forceTime: false, - parentHash: header.Hash(), - coinbase: miner.config.PendingFeeRecipient, - random: common.Hash{}, - withdrawals: withdrawal, - beaconRoot: nil, - noTxs: false, - }, false) // we will never make a witness for a pending block + ret := miner.generateWork(context.Background(), + &generateParams{ + timestamp: timestamp, + forceTime: false, + parentHash: header.Hash(), + coinbase: miner.config.PendingFeeRecipient, + random: common.Hash{}, + withdrawals: withdrawal, + beaconRoot: nil, + noTxs: false, + }, false) // we will never make a witness for a pending block if ret.err != nil { return nil } diff --git a/miner/payload_building.go b/miner/payload_building.go index 8bd9552338..97b4d0c509 100644 --- a/miner/payload_building.go +++ b/miner/payload_building.go @@ -17,6 +17,7 @@ package miner import ( + "context" "crypto/sha256" "encoding/binary" "math/big" @@ -28,9 +29,11 @@ import ( "github.com/ethereum/go-ethereum/common/hexutil" "github.com/ethereum/go-ethereum/core/stateless" "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/internal/telemetry" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" + "go.opentelemetry.io/otel/trace" ) // BuildPayloadArgs contains the provided parameters for building payload. @@ -101,14 +104,15 @@ func newPayload(empty *types.Block, emptyRequests [][]byte, witness *stateless.W return payload } -// update updates the full-block with latest built version. -func (payload *Payload) update(r *newPayloadResult, elapsed time.Duration) { +// update updates the full-block with latest built version. It returns true if +// the update was accepted (i.e. the new block has higher fees than the previous). +func (payload *Payload) update(r *newPayloadResult, elapsed time.Duration) (result bool) { payload.lock.Lock() defer payload.lock.Unlock() select { case <-payload.stop: - return // reject stale update + return false // reject stale update default: } // Ensure the newly provided full block has a higher transaction fee. @@ -133,8 +137,10 @@ func (payload *Payload) update(r *newPayloadResult, elapsed time.Duration) { "root", r.block.Root(), "elapsed", common.PrettyDuration(elapsed), ) + result = true } payload.cond.Broadcast() // fire signal for notifying full block + return } // Resolve returns the latest built payload and also terminates the background @@ -209,8 +215,33 @@ func (payload *Payload) ResolveFull() *engine.ExecutionPayloadEnvelope { return envelope } +func (miner *Miner) runBuildIteration(ctx context.Context, start time.Time, iteration int, payload *Payload, params *generateParams, witness bool) { + ctx, span, spanEnd := telemetry.StartSpan(ctx, "miner.buildIteration", + telemetry.Int64Attribute("iteration", int64(iteration)), + ) + var err error + defer spanEnd(&err) + + r := miner.generateWork(ctx, params, witness) + err = r.err + if err == nil { + accepted := payload.update(r, time.Since(start)) + span.SetAttributes(telemetry.BoolAttribute("update.accepted", accepted)) + } else { + log.Info("Error while generating work", "id", payload.id, "err", err) + } +} + // buildPayload builds the payload according to the provided parameters. -func (miner *Miner) buildPayload(args *BuildPayloadArgs, witness bool) (*Payload, error) { +func (miner *Miner) buildPayload(ctx context.Context, args *BuildPayloadArgs, witness bool) (result *Payload, err error) { + payloadID := args.Id() + ctx, _, spanEnd := telemetry.StartSpan(ctx, "miner.buildPayload", + telemetry.StringAttribute("payload.id", payloadID.String()), + telemetry.StringAttribute("parent.hash", args.Parent.String()), + telemetry.Int64Attribute("timestamp", int64(args.Timestamp)), + ) + defer spanEnd(&err) + // Build the initial version with no transaction included. It should be fast // enough to run. The empty payload can at least make sure there is something // to deliver for not missing slot. @@ -225,16 +256,25 @@ func (miner *Miner) buildPayload(args *BuildPayloadArgs, witness bool) (*Payload slotNum: args.SlotNum, noTxs: true, } - empty := miner.generateWork(emptyParams, witness) + empty := miner.generateWork(ctx, emptyParams, witness) if empty.err != nil { return nil, empty.err } // Construct a payload object for return. - payload := newPayload(empty.block, empty.requests, empty.witness, args.Id()) + payload := newPayload(empty.block, empty.requests, empty.witness, payloadID) // Spin up a routine for updating the payload in background. This strategy // can maximum the revenue for including transactions with highest fee. go func() { + var iteration int + bCtx, bSpan, bSpanEnd := telemetry.StartSpan(ctx, "miner.background", + telemetry.Int64Attribute("block.number", int64(empty.block.NumberU64())), + ) + defer func() { + bSpan.SetAttributes(telemetry.Int64Attribute("iterations.total", int64(iteration))) + bSpanEnd(nil) + }() + // Setup the timer for re-building the payload. The initial clock is kept // for triggering process immediately. timer := time.NewTimer(0) @@ -256,7 +296,6 @@ func (miner *Miner) buildPayload(args *BuildPayloadArgs, witness bool) (*Payload slotNum: args.SlotNum, noTxs: false, } - for { select { case <-timer.C: @@ -267,22 +306,21 @@ func (miner *Miner) buildPayload(args *BuildPayloadArgs, witness bool) (*Payload // Check payload.stop first to avoid an unnecessary generateWork. select { case <-payload.stop: + payload.updateSpanForDelivery(bSpan) log.Info("Stopping work on payload", "id", payload.id, "reason", "delivery") return default: } start := time.Now() - r := miner.generateWork(fullParams, witness) - if r.err == nil { - payload.update(r, time.Since(start)) - } else { - log.Info("Error while generating work", "id", payload.id, "err", r.err) - } + iteration++ + miner.runBuildIteration(bCtx, start, iteration, payload, fullParams, witness) timer.Reset(max(0, miner.config.Recommit-time.Since(start))) case <-payload.stop: + payload.updateSpanForDelivery(bSpan) log.Info("Stopping work on payload", "id", payload.id, "reason", "delivery") return case <-endTimer.C: + bSpan.SetAttributes(telemetry.StringAttribute("exit.reason", "timeout")) log.Info("Stopping work on payload", "id", payload.id, "reason", "timeout") return } @@ -291,6 +329,16 @@ func (miner *Miner) buildPayload(args *BuildPayloadArgs, witness bool) (*Payload return payload, nil } +func (payload *Payload) updateSpanForDelivery(bSpan trace.Span) { + payload.lock.Lock() + emptyDelivered := payload.full == nil + payload.lock.Unlock() + bSpan.SetAttributes( + telemetry.StringAttribute("exit.reason", "delivery"), + telemetry.BoolAttribute("empty.delivered", emptyDelivered), + ) +} + // BuildTestingPayload is for testing_buildBlockV*. It creates a block with the exact content given // by the parameters instead of using the locally available transactions. func (miner *Miner) BuildTestingPayload(args *BuildPayloadArgs, transactions []*types.Transaction, empty bool, extraData []byte) (*engine.ExecutionPayloadEnvelope, error) { @@ -307,7 +355,7 @@ func (miner *Miner) BuildTestingPayload(args *BuildPayloadArgs, transactions []* overrideExtraData: extraData, overrideTxs: transactions, } - res := miner.generateWork(fullParams, false) + res := miner.generateWork(context.Background(), fullParams, false) if res.err != nil { return nil, res.err } diff --git a/miner/payload_building_test.go b/miner/payload_building_test.go index 295962d7ef..f8e495cc99 100644 --- a/miner/payload_building_test.go +++ b/miner/payload_building_test.go @@ -17,6 +17,7 @@ package miner import ( + "context" "math/big" "reflect" "testing" @@ -156,7 +157,7 @@ func TestBuildPayload(t *testing.T) { Random: common.Hash{}, FeeRecipient: recipient, } - payload, err := w.buildPayload(args, false) + payload, err := w.buildPayload(context.Background(), args, false) if err != nil { t.Fatalf("Failed to build payload %v", err) } diff --git a/miner/worker.go b/miner/worker.go index bfeeaa248b..e82f5f6e55 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -17,6 +17,7 @@ package miner import ( + "context" "errors" "fmt" "math/big" @@ -32,6 +33,7 @@ import ( "github.com/ethereum/go-ethereum/core/txpool" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/internal/telemetry" "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/params" "github.com/holiman/uint256" @@ -125,8 +127,23 @@ type generateParams struct { } // generateWork generates a sealing block based on the given parameters. -func (miner *Miner) generateWork(genParam *generateParams, witness bool) *newPayloadResult { - work, err := miner.prepareWork(genParam, witness) +func (miner *Miner) generateWork(ctx context.Context, genParam *generateParams, witness bool) (result *newPayloadResult) { + ctx, span, spanEnd := telemetry.StartSpan(ctx, "miner.generateWork") + defer func() { + if result != nil && result.err == nil { + span.SetAttributes( + telemetry.Int64Attribute("txs.count", int64(len(result.block.Transactions()))), + telemetry.Int64Attribute("gas.used", int64(result.block.GasUsed())), + telemetry.StringAttribute("fees", result.fees.String()), + ) + } + if result != nil { + spanEnd(&result.err) + } else { + spanEnd(nil) + } + }() + work, err := miner.prepareWork(ctx, genParam, witness) if err != nil { return &newPayloadResult{err: err} } @@ -148,7 +165,7 @@ func (miner *Miner) generateWork(genParam *generateParams, witness bool) *newPay if genParam.forceOverrides && len(genParam.overrideTxs) > 0 { for _, tx := range genParam.overrideTxs { work.state.SetTxContext(tx.Hash(), work.tcount) - if err := miner.commitTransaction(work, tx); err != nil { + if err := miner.commitTransaction(ctx, work, tx); err != nil { // all passed transactions HAVE to be valid at this point return &newPayloadResult{err: err} } @@ -160,7 +177,7 @@ func (miner *Miner) generateWork(genParam *generateParams, witness bool) *newPay }) defer timer.Stop() - err := miner.fillTransactions(interrupt, work) + err := miner.fillTransactions(ctx, interrupt, work) if errors.Is(err, errBlockInterruptedByTimeout) { log.Warn("Block building is interrupted", "allowance", common.PrettyDuration(miner.config.Recommit)) } @@ -195,7 +212,7 @@ func (miner *Miner) generateWork(genParam *generateParams, witness bool) *newPay work.header.RequestsHash = &reqHash } - block, err := miner.engine.FinalizeAndAssemble(miner.chain, work.header, work.state, &body, work.receipts) + block, err := miner.engine.FinalizeAndAssemble(ctx, miner.chain, work.header, work.state, &body, work.receipts) if err != nil { return &newPayloadResult{err: err} } @@ -213,7 +230,9 @@ func (miner *Miner) generateWork(genParam *generateParams, witness bool) *newPay // prepareWork constructs the sealing task according to the given parameters, // either based on the last chain head or specified parent. In this function // the pending transactions are not filled yet, only the empty task returned. -func (miner *Miner) prepareWork(genParams *generateParams, witness bool) (*environment, error) { +func (miner *Miner) prepareWork(ctx context.Context, genParams *generateParams, witness bool) (result *environment, err error) { + _, _, spanEnd := telemetry.StartSpan(ctx, "miner.prepareWork") + defer spanEnd(&err) miner.confMu.RLock() defer miner.confMu.RUnlock() @@ -330,7 +349,9 @@ func (miner *Miner) makeEnv(parent *types.Header, header *types.Header, coinbase }, nil } -func (miner *Miner) commitTransaction(env *environment, tx *types.Transaction) error { +func (miner *Miner) commitTransaction(ctx context.Context, env *environment, tx *types.Transaction) (err error) { + _, _, spanEnd := telemetry.StartSpan(ctx, "miner.commitTransaction") + defer spanEnd(&err) if tx.Type() == types.BlobTxType { return miner.commitBlobTransaction(env, tx) } @@ -389,7 +410,9 @@ func (miner *Miner) applyTransaction(env *environment, tx *types.Transaction) (* return receipt, nil } -func (miner *Miner) commitTransactions(env *environment, plainTxs, blobTxs *transactionsByPriceAndNonce, interrupt *atomic.Int32) error { +func (miner *Miner) commitTransactions(ctx context.Context, env *environment, plainTxs, blobTxs *transactionsByPriceAndNonce, interrupt *atomic.Int32) error { + ctx, _, spanEnd := telemetry.StartSpan(ctx, "miner.commitTransactions") + defer spanEnd(nil) isCancun := miner.chainConfig.IsCancun(env.header.Number, env.header.Time) for { // Check interruption signal and abort building if it's fired. @@ -479,7 +502,7 @@ func (miner *Miner) commitTransactions(env *environment, plainTxs, blobTxs *tran // Start executing the transaction env.state.SetTxContext(tx.Hash(), env.tcount) - err := miner.commitTransaction(env, tx) + err := miner.commitTransaction(ctx, env, tx) switch { case errors.Is(err, core.ErrNonceTooLow): // New head notification data race between the transaction pool and miner, shift @@ -503,7 +526,9 @@ func (miner *Miner) commitTransactions(env *environment, plainTxs, blobTxs *tran // fillTransactions retrieves the pending transactions from the txpool and fills them // into the given sealing block. The transaction selection and ordering strategy can // be customized with the plugin in the future. -func (miner *Miner) fillTransactions(interrupt *atomic.Int32, env *environment) error { +func (miner *Miner) fillTransactions(ctx context.Context, interrupt *atomic.Int32, env *environment) (err error) { + ctx, span, spanEnd := telemetry.StartSpan(ctx, "miner.fillTransactions") + defer spanEnd(&err) miner.confMu.RLock() tip := miner.config.GasPrice prio := miner.prio @@ -523,7 +548,7 @@ func (miner *Miner) fillTransactions(interrupt *atomic.Int32, env *environment) filter.GasLimitCap = params.MaxTxGas } filter.BlobTxs = false - pendingPlainTxs := miner.txpool.Pending(filter) + pendingPlainTxs, plainTxCount := miner.txpool.Pending(filter) filter.BlobTxs = true if miner.chainConfig.IsOsaka(env.header.Number, env.header.Time) { @@ -531,7 +556,11 @@ func (miner *Miner) fillTransactions(interrupt *atomic.Int32, env *environment) } else { filter.BlobVersion = types.BlobSidecarVersion0 } - pendingBlobTxs := miner.txpool.Pending(filter) + pendingBlobTxs, blobTxCount := miner.txpool.Pending(filter) + span.SetAttributes( + telemetry.Int64Attribute("pending.plain.count", int64(plainTxCount)), + telemetry.Int64Attribute("pending.blob.count", int64(blobTxCount)), + ) // Split the pending transactions into locals and remotes. prioPlainTxs, normalPlainTxs := make(map[common.Address][]*txpool.LazyTransaction), pendingPlainTxs @@ -552,7 +581,7 @@ func (miner *Miner) fillTransactions(interrupt *atomic.Int32, env *environment) plainTxs := newTransactionsByPriceAndNonce(env.signer, prioPlainTxs, env.header.BaseFee) blobTxs := newTransactionsByPriceAndNonce(env.signer, prioBlobTxs, env.header.BaseFee) - if err := miner.commitTransactions(env, plainTxs, blobTxs, interrupt); err != nil { + if err := miner.commitTransactions(ctx, env, plainTxs, blobTxs, interrupt); err != nil { return err } } @@ -560,7 +589,7 @@ func (miner *Miner) fillTransactions(interrupt *atomic.Int32, env *environment) plainTxs := newTransactionsByPriceAndNonce(env.signer, normalPlainTxs, env.header.BaseFee) blobTxs := newTransactionsByPriceAndNonce(env.signer, normalBlobTxs, env.header.BaseFee) - if err := miner.commitTransactions(env, plainTxs, blobTxs, interrupt); err != nil { + if err := miner.commitTransactions(ctx, env, plainTxs, blobTxs, interrupt); err != nil { return err } } From 4b915af2c3a0097eac87b06915605f90cc8d14c6 Mon Sep 17 00:00:00 2001 From: CPerezz <37264926+CPerezz@users.noreply.github.com> Date: Tue, 17 Mar 2026 11:42:42 +0100 Subject: [PATCH 125/161] core/state: avoid Bytes() allocation in flatReader hash computations (#34025) ## Summary Replace `addr.Bytes()` and `key.Bytes()` with `addr[:]` and `key[:]` in `flatReader`'s `Account` and `Storage` methods. The former allocates a copy while the latter creates a zero-allocation slice header over the existing backing array. ## Benchmark (AMD EPYC 48-core, 500K entries, screening `--benchtime=1x`) | Metric | Baseline | Slice syntax | Delta | |--------|----------|--------------|-------| | Approve (Mgas/s) | 4.13 | 4.22 | +2.2% | | BalanceOf (Mgas/s) | 168.3 | 190.0 | **+12.9%** | --- core/state/reader.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/state/reader.go b/core/state/reader.go index 49375c467c..fe0ec71f2d 100644 --- a/core/state/reader.go +++ b/core/state/reader.go @@ -98,7 +98,7 @@ func newFlatReader(reader database.StateReader) *flatReader { // // The returned account might be nil if it's not existent. func (r *flatReader) Account(addr common.Address) (*types.StateAccount, error) { - account, err := r.reader.Account(crypto.Keccak256Hash(addr.Bytes())) + account, err := r.reader.Account(crypto.Keccak256Hash(addr[:])) if err != nil { return nil, err } @@ -128,8 +128,8 @@ func (r *flatReader) Account(addr common.Address) (*types.StateAccount, error) { // // The returned storage slot might be empty if it's not existent. func (r *flatReader) Storage(addr common.Address, key common.Hash) (common.Hash, error) { - addrHash := crypto.Keccak256Hash(addr.Bytes()) - slotHash := crypto.Keccak256Hash(key.Bytes()) + addrHash := crypto.Keccak256Hash(addr[:]) + slotHash := crypto.Keccak256Hash(key[:]) ret, err := r.reader.Storage(addrHash, slotHash) if err != nil { return common.Hash{}, err From 519a450c436970a8319f6c7cf383bf99cbc2c55d Mon Sep 17 00:00:00 2001 From: CPerezz <37264926+CPerezz@users.noreply.github.com> Date: Tue, 17 Mar 2026 12:27:29 +0100 Subject: [PATCH 126/161] core/state: skip redundant trie Commit for Verkle in stateObject.commit (#34021) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary **Bug fix.** In Verkle mode, all state objects share a single unified trie (`OpenStorageTrie` returns `self`). During `stateDB.commit()`, the main account trie is committed via `s.trie.Commit(true)`, which calls `CollectNodes` to traverse and serialize the entire tree. However, each dirty account's `obj.commit()` also calls `s.trie.Commit(false)` on the **same trie object**, redundantly traversing and serializing the full tree once per dirty account. With N dirty accounts per block, this causes **N+1 full-tree traversals** instead of 1. On a write-heavy workload (2250 SSTOREs), this produces ~131 GB of allocations per block from duplicate NodeSet creation and serialization. It also causes a latent data race from N+1 goroutines concurrently calling `CollectNodes` on shared `InternalNode` objects. This commit adds an `IsVerkle()` early return in `stateObject.commit()` to skip the redundant `trie.Commit()` call. ## Benchmark (AMD EPYC 48-core, 500K entries, `--benchtime=10s --count=3`) | Metric | Baseline | Fixed | Delta | |--------|----------|-------|-------| | Approve (Mgas/s) | 4.16 ± 0.37 | **220.2 ± 10.1** | **+5190%** | | BalanceOf (Mgas/s) | 966.2 ± 8.1 | 971.0 ± 3.0 | +0.5% | | Allocs/op (approve) | 136.4M | 792K | **-99.4%** | Resolves the TODO in statedb.go about the account trie commit being "very heavy" and "something's wonky". --------- Co-authored-by: Guillaume Ballet <3272758+gballet@users.noreply.github.com> --- core/state/state_object.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/core/state/state_object.go b/core/state/state_object.go index dd30bb64a5..ec0c511737 100644 --- a/core/state/state_object.go +++ b/core/state/state_object.go @@ -474,6 +474,14 @@ func (s *stateObject) commit() (*accountUpdate, *trienode.NodeSet, error) { s.origin = s.data.Copy() return op, nil, nil } + // In Verkle/binary trie mode, all state objects share one unified trie. + // The main account trie commit in stateDB.commit() already calls + // CollectNodes on this trie, so calling Commit here again would + // redundantly traverse and serialize the entire tree per dirty account. + if s.db.GetTrie().IsVerkle() { + s.origin = s.data.Copy() + return op, nil, nil + } root, nodes := s.trie.Commit(false) s.data.Root = root s.origin = s.data.Copy() From fc1b0c0b83027b9e2ee44af6801728ac1e339f05 Mon Sep 17 00:00:00 2001 From: Sina M <1591639+s1na@users.noreply.github.com> Date: Tue, 17 Mar 2026 13:52:04 +0100 Subject: [PATCH 127/161] internal/ethapi: warn on reaching global gas cap for eth_simulateV1 (#34016) Warn user when gas limit of a tx is capped due to rpc server's gas cap being reached. --- internal/ethapi/simulate.go | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/internal/ethapi/simulate.go b/internal/ethapi/simulate.go index ebe221114f..aa7609ff93 100644 --- a/internal/ethapi/simulate.go +++ b/internal/ethapi/simulate.go @@ -321,7 +321,8 @@ func (sim *simulator) processBlock(ctx context.Context, block *simBlock, header, if err := ctx.Err(); err != nil { return nil, nil, nil, err } - if err := sim.sanitizeCall(&call, sim.state, header, gp); err != nil { + gasCapped, err := sim.sanitizeCall(&call, sim.state, header, gp) + if err != nil { return nil, nil, nil, err } var ( @@ -365,7 +366,11 @@ func (sim *simulator) processBlock(ctx context.Context, block *simBlock, header, revertErr := newRevertError(result.Revert()) callRes.Error = &callError{Message: revertErr.Error(), Code: revertErr.ErrorCode(), Data: revertErr.ErrorData().(string)} } else { - callRes.Error = &callError{Message: result.Err.Error(), Code: errCodeVMError} + msg := result.Err.Error() + if gasCapped { + msg += " (gas limit was capped by the RPC server's global gas cap)" + } + callRes.Error = &callError{Message: msg, Code: errCodeVMError} } } else { callRes.Status = hexutil.Uint64(types.ReceiptStatusSuccessful) @@ -425,7 +430,7 @@ func repairLogs(calls []simCallResult, hash common.Hash) { } } -func (sim *simulator) sanitizeCall(call *TransactionArgs, state vm.StateDB, header *types.Header, gp *core.GasPool) error { +func (sim *simulator) sanitizeCall(call *TransactionArgs, state vm.StateDB, header *types.Header, gp *core.GasPool) (bool, error) { if call.Nonce == nil { nonce := state.GetNonce(call.from()) call.Nonce = (*hexutil.Uint64)(&nonce) @@ -436,13 +441,14 @@ func (sim *simulator) sanitizeCall(call *TransactionArgs, state vm.StateDB, head call.Gas = (*hexutil.Uint64)(&remaining) } if remaining < uint64(*call.Gas) { - return &blockGasLimitReachedError{fmt.Sprintf("block gas limit reached: remaining: %d, required: %d", remaining, *call.Gas)} + return false, &blockGasLimitReachedError{fmt.Sprintf("block gas limit reached: remaining: %d, required: %d", remaining, *call.Gas)} } // Clamp to the cross-block gas budget. gas := sim.budget.cap(uint64(*call.Gas)) + gasCapped := gas < uint64(*call.Gas) call.Gas = (*hexutil.Uint64)(&gas) - return call.CallDefaults(0, header.BaseFee, sim.chainConfig.ChainID) + return gasCapped, call.CallDefaults(0, header.BaseFee, sim.chainConfig.ChainID) } func (sim *simulator) activePrecompiles(base *types.Header) vm.PrecompiledContracts { From 9b2ce121dc94fc964f9c8ba6cd6e70af5f11e5d2 Mon Sep 17 00:00:00 2001 From: rjl493456442 Date: Tue, 17 Mar 2026 22:29:30 +0800 Subject: [PATCH 128/161] triedb/pathdb: enhance history index initer (#33640) This PR improves the pbss archive mode. Initial sync of an archive mode which has the --gcmode archive flag enabled will be significantly sped up. It achieves that with the following changes: The indexer now attempts to process histories in batch whenever possible. Batch indexing is enforced when the node is still syncing and the local chain head is behind the network chain head. In this scenario, instead of scheduling indexing frequently alongside block insertion, the indexer waits until a sufficient amount of history has accumulated and then processes it in a batch, which is significantly more efficient. --------- Co-authored-by: Sina M <1591639+s1na@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- triedb/pathdb/config.go | 7 +- triedb/pathdb/database.go | 4 +- triedb/pathdb/database_test.go | 1 + triedb/pathdb/history_indexer.go | 150 +++++++++++--------- triedb/pathdb/history_indexer_state.go | 183 +++++++++++++++++++++++++ triedb/pathdb/history_indexer_test.go | 4 +- 6 files changed, 279 insertions(+), 70 deletions(-) create mode 100644 triedb/pathdb/history_indexer_state.go diff --git a/triedb/pathdb/config.go b/triedb/pathdb/config.go index c236b34333..97ee1c2315 100644 --- a/triedb/pathdb/config.go +++ b/triedb/pathdb/config.go @@ -105,9 +105,10 @@ type Config struct { FullValueCheckpoint uint32 // The rate at which trie nodes are encoded in full-value format // Testing configurations - SnapshotNoBuild bool // Flag Whether the state generation is disabled - NoAsyncFlush bool // Flag whether the background buffer flushing is disabled - NoAsyncGeneration bool // Flag whether the background generation is disabled + SnapshotNoBuild bool // Flag Whether the state generation is disabled + NoAsyncFlush bool // Flag whether the background buffer flushing is disabled + NoAsyncGeneration bool // Flag whether the background generation is disabled + NoHistoryIndexDelay bool // Flag whether the history index delay is disabled } // sanitize checks the provided user configurations and changes anything that's diff --git a/triedb/pathdb/database.go b/triedb/pathdb/database.go index 5255602a4e..86a42c69f4 100644 --- a/triedb/pathdb/database.go +++ b/triedb/pathdb/database.go @@ -215,14 +215,14 @@ func (db *Database) setHistoryIndexer() { if db.stateIndexer != nil { db.stateIndexer.close() } - db.stateIndexer = newHistoryIndexer(db.diskdb, db.stateFreezer, db.tree.bottom().stateID(), typeStateHistory) + db.stateIndexer = newHistoryIndexer(db.diskdb, db.stateFreezer, db.tree.bottom().stateID(), typeStateHistory, db.config.NoHistoryIndexDelay) log.Info("Enabled state history indexing") } if db.trienodeFreezer != nil { if db.trienodeIndexer != nil { db.trienodeIndexer.close() } - db.trienodeIndexer = newHistoryIndexer(db.diskdb, db.trienodeFreezer, db.tree.bottom().stateID(), typeTrienodeHistory) + db.trienodeIndexer = newHistoryIndexer(db.diskdb, db.trienodeFreezer, db.tree.bottom().stateID(), typeTrienodeHistory, db.config.NoHistoryIndexDelay) log.Info("Enabled trienode history indexing") } } diff --git a/triedb/pathdb/database_test.go b/triedb/pathdb/database_test.go index 2d1819d08f..8ece83cad7 100644 --- a/triedb/pathdb/database_test.go +++ b/triedb/pathdb/database_test.go @@ -182,6 +182,7 @@ func newTester(t *testing.T, config *testerConfig) *tester { WriteBufferSize: config.writeBufferSize(), NoAsyncFlush: true, JournalDirectory: config.journalDir, + NoHistoryIndexDelay: true, }, config.isVerkle) obj = &tester{ diff --git a/triedb/pathdb/history_indexer.go b/triedb/pathdb/history_indexer.go index c987b380ed..c9bf3e87f1 100644 --- a/triedb/pathdb/history_indexer.go +++ b/triedb/pathdb/history_indexer.go @@ -41,6 +41,8 @@ const ( stateHistoryIndexVersion = stateHistoryIndexV0 // the current state index version trienodeHistoryIndexV0 = uint8(0) // initial version of trienode index structure trienodeHistoryIndexVersion = trienodeHistoryIndexV0 // the current trienode index version + + indexerProcessBatchInSync = 100000 // threshold for history batch indexing when node is in sync stage. ) // indexVersion returns the latest index version for the given history type. @@ -349,7 +351,8 @@ type interruptSignal struct { // If a state history is removed due to a rollback, the associated indexes should // be unmarked accordingly. type indexIniter struct { - disk ethdb.KeyValueStore + state *initerState + disk ethdb.Database freezer ethdb.AncientStore interrupt chan *interruptSignal done chan struct{} @@ -364,8 +367,9 @@ type indexIniter struct { wg sync.WaitGroup } -func newIndexIniter(disk ethdb.KeyValueStore, freezer ethdb.AncientStore, typ historyType, lastID uint64) *indexIniter { +func newIndexIniter(disk ethdb.Database, freezer ethdb.AncientStore, typ historyType, lastID uint64, noWait bool) *indexIniter { initer := &indexIniter{ + state: newIniterState(disk, noWait), disk: disk, freezer: freezer, interrupt: make(chan *interruptSignal), @@ -385,12 +389,7 @@ func newIndexIniter(disk ethdb.KeyValueStore, freezer ethdb.AncientStore, typ hi // Launch background indexer initer.wg.Add(1) - if recover { - log.Info("History indexer is recovering", "history", lastID, "indexed", metadata.Last) - go initer.recover(lastID) - } else { - go initer.run(lastID) - } + go initer.run(recover) return initer } @@ -400,6 +399,7 @@ func (i *indexIniter) close() { return default: close(i.closed) + i.state.close() i.wg.Wait() } } @@ -431,85 +431,109 @@ func (i *indexIniter) remain() uint64 { } } -func (i *indexIniter) run(lastID uint64) { +func (i *indexIniter) run(recover bool) { defer i.wg.Done() // Launch background indexing thread var ( - done = make(chan struct{}) - interrupt = new(atomic.Int32) + done chan struct{} + interrupt *atomic.Int32 - // checkDone indicates whether all requested state histories - // have been fully indexed. + // checkDone reports whether indexing has completed for all histories. checkDone = func() bool { metadata := loadIndexMetadata(i.disk, i.typ) - return metadata != nil && metadata.Last == lastID + return metadata != nil && metadata.Last == i.last.Load() } + // canExit reports whether the initial indexing phase has completed. + canExit = func() bool { + return !i.state.is(stateSyncing) && checkDone() + } + heartBeat = time.NewTimer(0) ) - go i.index(done, interrupt, lastID) + defer heartBeat.Stop() + if recover { + if aborted := i.recover(); aborted { + return + } + } for { select { case signal := <-i.interrupt: - // The indexing limit can only be extended or shortened continuously. newLastID := signal.newLastID - if newLastID != lastID+1 && newLastID != lastID-1 { - signal.result <- fmt.Errorf("invalid history id, last: %d, got: %d", lastID, newLastID) + oldLastID := i.last.Load() + + // The indexing limit can only be extended or shortened continuously. + if newLastID != oldLastID+1 && newLastID != oldLastID-1 { + signal.result <- fmt.Errorf("invalid history id, last: %d, got: %d", oldLastID, newLastID) continue } i.last.Store(newLastID) // update indexing range // The index limit is extended by one, update the limit without // interrupting the current background process. - if newLastID == lastID+1 { - lastID = newLastID + if newLastID == oldLastID+1 { signal.result <- nil - i.log.Debug("Extended history range", "last", lastID) + i.log.Debug("Extended history range", "last", newLastID) continue } - // The index limit is shortened by one, interrupt the current background - // process and relaunch with new target. - interrupt.Store(1) - <-done - + // The index limit is shortened, interrupt the current background + // process if it's active and update the target. + if done != nil { + interrupt.Store(1) + <-done + done, interrupt = nil, nil + } // If all state histories, including the one to be reverted, have // been fully indexed, unindex it here and shut down the initializer. if checkDone() { - i.log.Info("Truncate the extra history", "id", lastID) - if err := unindexSingle(lastID, i.disk, i.freezer, i.typ); err != nil { + i.log.Info("Truncate the extra history", "id", oldLastID) + if err := unindexSingle(oldLastID, i.disk, i.freezer, i.typ); err != nil { signal.result <- err return } close(i.done) signal.result <- nil - i.log.Info("Histories have been fully indexed", "last", lastID-1) + i.log.Info("Histories have been fully indexed", "last", i.last.Load()) return } - // Adjust the indexing target and relaunch the process - lastID = newLastID + // Adjust the indexing target signal.result <- nil - - done, interrupt = make(chan struct{}), new(atomic.Int32) - go i.index(done, interrupt, lastID) - i.log.Debug("Shortened history range", "last", lastID) + i.log.Debug("Shortened history range", "last", newLastID) case <-done: - if checkDone() { + done, interrupt = nil, nil + + if canExit() { close(i.done) - i.log.Info("Histories have been fully indexed", "last", lastID) return } - // Relaunch the background runner if some tasks are left + + case <-heartBeat.C: + heartBeat.Reset(time.Second * 15) + + // Short circuit if the indexer is still busy + if done != nil { + continue + } + if canExit() { + close(i.done) + return + } + // The local chain is still in the syncing phase. Only start the indexing + // when a sufficient amount of histories has accumulated. Batch indexing + // is more efficient than processing items individually. + if i.state.is(stateSyncing) && i.last.Load()-i.indexed.Load() < indexerProcessBatchInSync { + continue + } done, interrupt = make(chan struct{}), new(atomic.Int32) - go i.index(done, interrupt, lastID) + go i.index(done, interrupt, i.last.Load()) case <-i.closed: - interrupt.Store(1) - i.log.Info("Waiting background history index initer to exit") - <-done - - if checkDone() { - close(i.done) + if done != nil { + interrupt.Store(1) + i.log.Info("Waiting background history index initer to exit") + <-done } return } @@ -571,7 +595,7 @@ func (i *indexIniter) index(done chan struct{}, interrupt *atomic.Int32, lastID } return } - i.log.Info("Start history indexing", "beginID", beginID, "lastID", lastID) + i.log.Debug("Start history indexing", "beginID", beginID, "lastID", lastID) var ( current = beginID @@ -618,7 +642,7 @@ func (i *indexIniter) index(done chan struct{}, interrupt *atomic.Int32, lastID done = current - beginID ) eta := common.CalculateETA(done, left, time.Since(start)) - i.log.Info("Indexing history", "processed", done, "left", left, "elapsed", common.PrettyDuration(time.Since(start)), "eta", common.PrettyDuration(eta)) + i.log.Debug("Indexing history", "processed", done, "left", left, "elapsed", common.PrettyDuration(time.Since(start)), "eta", common.PrettyDuration(eta)) } } i.indexed.Store(current - 1) // update indexing progress @@ -629,7 +653,7 @@ func (i *indexIniter) index(done chan struct{}, interrupt *atomic.Int32, lastID if err := batch.finish(true); err != nil { i.log.Error("Failed to flush index", "err", err) } - log.Info("State indexing interrupted") + log.Debug("State indexing interrupted") return } } @@ -637,7 +661,7 @@ func (i *indexIniter) index(done chan struct{}, interrupt *atomic.Int32, lastID if err := batch.finish(true); err != nil { i.log.Error("Failed to flush index", "err", err) } - i.log.Info("Indexed history", "from", beginID, "to", lastID, "elapsed", common.PrettyDuration(time.Since(start))) + i.log.Debug("Indexed history", "from", beginID, "to", lastID, "elapsed", common.PrettyDuration(time.Since(start))) } // recover handles unclean shutdown recovery. After an unclean shutdown, any @@ -650,35 +674,35 @@ func (i *indexIniter) index(done chan struct{}, interrupt *atomic.Int32, lastID // by chain recovery, under the assumption that the recovered histories will be // identical to the lost ones. Fork-awareness should be added in the future to // correctly handle histories affected by reorgs. -func (i *indexIniter) recover(lastID uint64) { - defer i.wg.Done() +func (i *indexIniter) recover() bool { + log.Info("History indexer is recovering", "last", i.last.Load(), "indexed", i.indexed.Load()) for { select { case signal := <-i.interrupt: newLastID := signal.newLastID - if newLastID != lastID+1 && newLastID != lastID-1 { - signal.result <- fmt.Errorf("invalid history id, last: %d, got: %d", lastID, newLastID) + oldLastID := i.last.Load() + + // The indexing limit can only be extended or shortened continuously. + if newLastID != oldLastID+1 && newLastID != oldLastID-1 { + signal.result <- fmt.Errorf("invalid history id, last: %d, got: %d", oldLastID, newLastID) continue } - // Update the last indexed flag - lastID = newLastID signal.result <- nil i.last.Store(newLastID) - i.log.Debug("Updated history index flag", "last", lastID) + i.log.Debug("Updated history index flag", "last", newLastID) // Terminate the recovery routine once the histories are fully aligned // with the index data, indicating that index initialization is complete. metadata := loadIndexMetadata(i.disk, i.typ) - if metadata != nil && metadata.Last == lastID { - close(i.done) - i.log.Info("History indexer is recovered", "last", lastID) - return + if metadata != nil && metadata.Last == newLastID { + i.log.Info("History indexer is recovered", "last", newLastID) + return false } case <-i.closed: - return + return true } } } @@ -746,10 +770,10 @@ func checkVersion(disk ethdb.KeyValueStore, typ historyType) { // newHistoryIndexer constructs the history indexer and launches the background // initer to complete the indexing of any remaining state histories. -func newHistoryIndexer(disk ethdb.KeyValueStore, freezer ethdb.AncientStore, lastHistoryID uint64, typ historyType) *historyIndexer { +func newHistoryIndexer(disk ethdb.Database, freezer ethdb.AncientStore, lastHistoryID uint64, typ historyType, noWait bool) *historyIndexer { checkVersion(disk, typ) return &historyIndexer{ - initer: newIndexIniter(disk, freezer, typ, lastHistoryID), + initer: newIndexIniter(disk, freezer, typ, lastHistoryID, noWait), typ: typ, disk: disk, freezer: freezer, diff --git a/triedb/pathdb/history_indexer_state.go b/triedb/pathdb/history_indexer_state.go new file mode 100644 index 0000000000..2746083297 --- /dev/null +++ b/triedb/pathdb/history_indexer_state.go @@ -0,0 +1,183 @@ +// Copyright 2026 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package pathdb + +import ( + "bytes" + "sync" + "time" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/rawdb" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/ethdb" + "github.com/ethereum/go-ethereum/log" +) + +// state represents the syncing status of the node. +type state int + +const ( + // stateSynced indicates that the local chain head is sufficiently close to the + // network chain head, and the majority of the data has been fully synchronized. + stateSynced state = iota + + // stateSyncing indicates that the sync process is still in progress. Local node + // is actively catching up with the network chain head. + stateSyncing + + // stateStalled indicates that sync progress has stopped for a while + // with no progress. This may be caused by network instability (e.g., no peers), + // manual operation such as syncing the local chain to a specific block. + stateStalled +) + +const ( + // syncStateTimeWindow defines the maximum allowed lag behind the network + // chain head. + // + // If the local chain head falls within this threshold, the node is considered + // close to the tip and will be marked as stateSynced. + syncStateTimeWindow = 6 * time.Hour + + // syncStalledTimeout defines the maximum duration during which no sync + // progress is observed. If this timeout is exceeded, the node's status + // will be considered stalled. + syncStalledTimeout = 5 * time.Minute +) + +type initerState struct { + state state + stateLock sync.Mutex + disk ethdb.Database + term chan struct{} +} + +func newIniterState(disk ethdb.Database, noWait bool) *initerState { + s := &initerState{ + state: stateSyncing, + disk: disk, + term: make(chan struct{}), + } + go s.update(noWait) + return s +} + +func (s *initerState) get() state { + s.stateLock.Lock() + defer s.stateLock.Unlock() + + return s.state +} + +func (s *initerState) is(state state) bool { + return s.get() == state +} + +func (s *initerState) set(state state) { + s.stateLock.Lock() + defer s.stateLock.Unlock() + + s.state = state +} + +func (s *initerState) update(noWait bool) { + ticker := time.NewTicker(time.Minute) + defer ticker.Stop() + + headBlock := s.readLastBlock() + if headBlock != nil && time.Since(time.Unix(int64(headBlock.Time), 0)) < syncStateTimeWindow { + s.set(stateSynced) + log.Info("Marked indexing initer as synced") + } else if noWait { + s.set(stateSynced) + log.Info("Marked indexing initer as synced forcibly") + } else { + s.set(stateSyncing) + } + + var ( + hhash = rawdb.ReadHeadHeaderHash(s.disk) + fhash = rawdb.ReadHeadFastBlockHash(s.disk) + bhash = rawdb.ReadHeadBlockHash(s.disk) + skeleton = rawdb.ReadSkeletonSyncStatus(s.disk) + lastProgress = time.Now() + ) + for { + select { + case <-ticker.C: + state := s.get() + if state == stateSynced || state == stateStalled { + continue + } + headBlock := s.readLastBlock() + if headBlock == nil { + continue + } + // State machine: stateSyncing => stateSynced + if time.Since(time.Unix(int64(headBlock.Time), 0)) < syncStateTimeWindow { + s.set(stateSynced) + log.Info("Marked indexing initer as synced") + continue + } + // State machine: stateSyncing => stateStalled + newhhash := rawdb.ReadHeadHeaderHash(s.disk) + newfhash := rawdb.ReadHeadFastBlockHash(s.disk) + newbhash := rawdb.ReadHeadBlockHash(s.disk) + newskeleton := rawdb.ReadSkeletonSyncStatus(s.disk) + hasProgress := newhhash.Cmp(hhash) != 0 || newfhash.Cmp(fhash) != 0 || newbhash.Cmp(bhash) != 0 || !bytes.Equal(newskeleton, skeleton) + + if !hasProgress && time.Since(lastProgress) > syncStalledTimeout { + s.set(stateStalled) + log.Info("Marked indexing initer as stalled") + continue + } + if hasProgress { + hhash = newhhash + fhash = newfhash + bhash = newbhash + skeleton = newskeleton + lastProgress = time.Now() + } + + case <-s.term: + return + } + } +} + +func (s *initerState) close() { + select { + case <-s.term: + default: + close(s.term) + } + return +} + +// readLastBlock returns the local chain head. +func (s *initerState) readLastBlock() *types.Header { + hash := rawdb.ReadHeadBlockHash(s.disk) + if hash == (common.Hash{}) { + return nil + } + number, exists := rawdb.ReadHeaderNumber(s.disk, hash) + if !exists { + return nil + } + return rawdb.ReadHeader(s.disk, hash, number) +} diff --git a/triedb/pathdb/history_indexer_test.go b/triedb/pathdb/history_indexer_test.go index f333d18d8b..8bb1db42da 100644 --- a/triedb/pathdb/history_indexer_test.go +++ b/triedb/pathdb/history_indexer_test.go @@ -27,7 +27,7 @@ import ( // deadlock when the indexer is active. This specifically targets the case where // signal.result must be sent to unblock the caller. func TestHistoryIndexerShortenDeadlock(t *testing.T) { - //log.SetDefault(log.NewLogger(log.NewTerminalHandlerWithLevel(os.Stderr, log.LevelInfo, true))) + // log.SetDefault(log.NewLogger(log.NewTerminalHandlerWithLevel(os.Stderr, log.LevelDebug, true))) db := rawdb.NewMemoryDatabase() freezer, _ := rawdb.NewStateFreezer(t.TempDir(), false, false) defer freezer.Close() @@ -38,7 +38,7 @@ func TestHistoryIndexerShortenDeadlock(t *testing.T) { rawdb.WriteStateHistory(freezer, uint64(i+1), h.meta.encode(), accountIndex, storageIndex, accountData, storageData) } // As a workaround, assign a future block to keep the initer running indefinitely - indexer := newHistoryIndexer(db, freezer, 200, typeStateHistory) + indexer := newHistoryIndexer(db, freezer, 200, typeStateHistory, true) defer indexer.close() done := make(chan error, 1) From ab357151da881f0e7dffd30b639c9dcdcdd4cc10 Mon Sep 17 00:00:00 2001 From: felipe Date: Tue, 17 Mar 2026 09:07:28 -0600 Subject: [PATCH 129/161] cmd/evm: don't strip prefixes on requests over t8n (#33997) Found this bug while implementing the Amsterdam changes t8n changes for benchmark test filling in EELS. Prefixes were incorrectly being stripped on requests over t8n and this was leading to `fill` correctly catching hash mismatches on the EELS side for some BAL tests. Though this was caught there, I think this change might as well be cherry-picked there instead and merged to `master`. This PR brings this behavior to parity with EELS for Osaka filling. There are still some quirks with regards to invalid block tests but I did not investigate this further. --- cmd/evm/internal/t8ntool/execution.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/cmd/evm/internal/t8ntool/execution.go b/cmd/evm/internal/t8ntool/execution.go index b3fb79bc4a..efe22d36f5 100644 --- a/cmd/evm/internal/t8ntool/execution.go +++ b/cmd/evm/internal/t8ntool/execution.go @@ -365,10 +365,6 @@ func (pre *Prestate) Apply(vmConfig vm.Config, chainConfig *params.ChainConfig, // Set requestsHash on block. h := types.CalcRequestsHash(requests) execRs.RequestsHash = &h - for i := range requests { - // remove prefix - requests[i] = requests[i][1:] - } execRs.Requests = requests } From b6115e9a304cb771a3ad8383da3c61a61c6ce6cf Mon Sep 17 00:00:00 2001 From: Mayveskii Date: Wed, 18 Mar 2026 10:43:24 +0300 Subject: [PATCH 130/161] core: fix txLookupLock mutex leak on error returns in reorg() (#34039) --- core/blockchain.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/core/blockchain.go b/core/blockchain.go index 8df2365072..42a8405ec9 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -2628,6 +2628,7 @@ func (bc *BlockChain) reorg(oldHead *types.Header, newHead *types.Header) error // as the txlookups should be changed atomically, and all subsequent // reads should be blocked until the mutation is complete. bc.txLookupLock.Lock() + defer bc.txLookupLock.Unlock() // Reorg can be executed, start reducing the chain's old blocks and appending // the new blocks @@ -2730,9 +2731,6 @@ func (bc *BlockChain) reorg(oldHead *types.Header, newHead *types.Header) error // Reset the tx lookup cache to clear stale txlookup cache. bc.txLookupCache.Purge() - // Release the tx-lookup lock after mutation. - bc.txLookupLock.Unlock() - return nil } From 6138a11c39aa162dd723518d6edba57cd538a867 Mon Sep 17 00:00:00 2001 From: CPerezz <37264926+CPerezz@users.noreply.github.com> Date: Wed, 18 Mar 2026 13:54:23 +0100 Subject: [PATCH 131/161] trie/bintrie: parallelize InternalNode.Hash at shallow tree depths (#34032) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary At tree depths below `log2(NumCPU)` (clamped to [2, 8]), hash the left subtree in a goroutine while hashing the right subtree inline. This exploits available CPU cores for the top levels of the tree where subtree hashing is most expensive. On single-core machines, the parallel path is disabled entirely. Deeper nodes use sequential hashing with the existing `sync.Pool` hasher where goroutine overhead would exceed the hash computation cost. The parallel path uses `sha256.Sum256` with a stack-allocated buffer to avoid pool contention across goroutines. **Safety:** - Left/right subtrees are disjoint — no shared mutable state - `sync.WaitGroup` provides happens-before guarantee for the result - `defer wg.Done()` + `recover()` prevents goroutine panics from crashing the process - `!bt.mustRecompute` early return means clean nodes never enter the parallel path - Hash results are deterministic regardless of computation order — no consensus risk ## Benchmark (AMD EPYC 48-core, 500K entries, `--benchtime=10s --count=3`, post-H01 baseline) | Metric | Baseline | Parallel | Delta | |--------|----------|----------|-------| | Approve (Mgas/s) | 224.5 ± 7.1 | **259.6 ± 2.4** | **+15.6%** | | BalanceOf (Mgas/s) | 982.9 ± 5.1 | 954.3 ± 10.8 | -2.9% (noise, clean nodes skip parallel path) | | Allocs/op (approve) | ~810K | ~700K | -13.6% | --- trie/bintrie/internal_node.go | 44 +++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/trie/bintrie/internal_node.go b/trie/bintrie/internal_node.go index 7ad76aa9db..946203bcfb 100644 --- a/trie/bintrie/internal_node.go +++ b/trie/bintrie/internal_node.go @@ -17,12 +17,33 @@ package bintrie import ( + "crypto/sha256" "errors" "fmt" + "math/bits" + "runtime" + "sync" "github.com/ethereum/go-ethereum/common" ) +// parallelDepth returns the tree depth below which Hash() spawns goroutines. +func parallelDepth() int { + return min(bits.Len(uint(runtime.NumCPU())), 8) +} + +// isDirty reports whether a BinaryNode child needs rehashing. +func isDirty(n BinaryNode) bool { + switch v := n.(type) { + case *InternalNode: + return v.mustRecompute + case *StemNode: + return v.mustRecompute + default: + return false + } +} + func keyToPath(depth int, key []byte) ([]byte, error) { if depth > 31*8 { return nil, errors.New("node too deep") @@ -124,6 +145,29 @@ func (bt *InternalNode) Hash() common.Hash { return bt.hash } + // At shallow depths, parallelize when both children need rehashing: + // hash left subtree in a goroutine, right subtree inline, then combine. + // Skip goroutine overhead when only one child is dirty (common case + // for narrow state updates that touch a single path through the trie). + if bt.depth < parallelDepth() && isDirty(bt.left) && isDirty(bt.right) { + var input [64]byte + var lh common.Hash + var wg sync.WaitGroup + wg.Add(1) + go func() { + defer wg.Done() + lh = bt.left.Hash() + }() + rh := bt.right.Hash() + copy(input[32:], rh[:]) + wg.Wait() + copy(input[:32], lh[:]) + bt.hash = sha256.Sum256(input[:]) + bt.mustRecompute = false + return bt.hash + } + + // Deeper nodes: sequential using pooled hasher (goroutine overhead > hash cost) h := newSha256() defer returnSha256(h) if bt.left != nil { From 6ae3f9fa562f28e805e6a5c20f0e42c1efc7d729 Mon Sep 17 00:00:00 2001 From: Sina M <1591639+s1na@users.noreply.github.com> Date: Wed, 18 Mar 2026 13:54:29 +0100 Subject: [PATCH 132/161] core/history: refactor pruning configuration (#34036) This PR introduces a new type HistoryPolicy which captures user intent as opposed to pruning point stored in the blockchain which persists the actual tail of data in the database. It is in preparation for the rolling history expiry feature. It comes with a semantic change: if database was pruned and geth is running without a history mode flag (or explicit keep all flag) geth will emit a warning but continue running as opposed to stopping the world. --- cmd/geth/chaincmd.go | 11 +-- cmd/workload/testsuite.go | 8 ++- core/blockchain.go | 113 ++++++++++--------------------- core/blockchain_test.go | 16 +---- core/history/historymode.go | 81 +++++++++++----------- core/history/historymode_test.go | 58 ++++++++++++++++ eth/backend.go | 9 ++- 7 files changed, 159 insertions(+), 137 deletions(-) create mode 100644 core/history/historymode_test.go diff --git a/cmd/geth/chaincmd.go b/cmd/geth/chaincmd.go index 7e14ec1c60..1084100f39 100644 --- a/cmd/geth/chaincmd.go +++ b/cmd/geth/chaincmd.go @@ -731,13 +731,16 @@ func pruneHistory(ctx *cli.Context) error { // Determine the prune point based on the history mode. genesisHash := chain.Genesis().Hash() - prunePoint := history.GetPrunePoint(genesisHash, mode) - if prunePoint == nil { + policy, err := history.NewPolicy(mode, genesisHash) + if err != nil { + return err + } + if policy.Target == nil { return fmt.Errorf("prune point for %q not found for this network", mode.String()) } var ( - targetBlock = prunePoint.BlockNumber - targetBlockHash = prunePoint.BlockHash + targetBlock = policy.Target.BlockNumber + targetBlockHash = policy.Target.BlockHash ) // Check the current freezer tail to see if pruning is needed/possible. diff --git a/cmd/workload/testsuite.go b/cmd/workload/testsuite.go index 80cbd15352..4e33522f1b 100644 --- a/cmd/workload/testsuite.go +++ b/cmd/workload/testsuite.go @@ -155,7 +155,9 @@ func testConfigFromCLI(ctx *cli.Context) (cfg testConfig) { } cfg.historyPruneBlock = new(uint64) - *cfg.historyPruneBlock = history.PrunePoints[params.MainnetGenesisHash].BlockNumber + if p, err := history.NewPolicy(history.KeepPostMerge, params.MainnetGenesisHash); err == nil { + *cfg.historyPruneBlock = p.Target.BlockNumber + } case ctx.Bool(testSepoliaFlag.Name): cfg.fsys = builtinTestFiles if ctx.IsSet(filterQueryFileFlag.Name) { @@ -180,7 +182,9 @@ func testConfigFromCLI(ctx *cli.Context) (cfg testConfig) { } cfg.historyPruneBlock = new(uint64) - *cfg.historyPruneBlock = history.PrunePoints[params.SepoliaGenesisHash].BlockNumber + if p, err := history.NewPolicy(history.KeepPostMerge, params.SepoliaGenesisHash); err == nil { + *cfg.historyPruneBlock = p.Target.BlockNumber + } default: cfg.fsys = os.DirFS(".") cfg.filterQueryFile = ctx.String(filterQueryFileFlag.Name) diff --git a/core/blockchain.go b/core/blockchain.go index 42a8405ec9..1b45a5ac39 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -194,9 +194,8 @@ type BlockChainConfig struct { SnapshotNoBuild bool // Whether the background generation is allowed SnapshotWait bool // Wait for snapshot construction on startup. TODO(karalabe): This is a dirty hack for testing, nuke it - // This defines the cutoff block for history expiry. - // Blocks before this number may be unavailable in the chain database. - ChainHistoryMode history.HistoryMode + // HistoryPolicy defines the chain history pruning intent. + HistoryPolicy history.HistoryPolicy // Misc options NoPrefetch bool // Whether to disable heuristic state prefetching when processing blocks @@ -227,13 +226,13 @@ type BlockChainConfig struct { // Note the returned object is safe to modify! func DefaultConfig() *BlockChainConfig { return &BlockChainConfig{ - TrieCleanLimit: 256, - TrieDirtyLimit: 256, - TrieTimeLimit: 5 * time.Minute, - StateScheme: rawdb.HashScheme, - SnapshotLimit: 256, - SnapshotWait: true, - ChainHistoryMode: history.KeepAll, + TrieCleanLimit: 256, + TrieDirtyLimit: 256, + TrieTimeLimit: 5 * time.Minute, + StateScheme: rawdb.HashScheme, + SnapshotLimit: 256, + SnapshotWait: true, + HistoryPolicy: history.HistoryPolicy{Mode: history.KeepAll}, // Transaction indexing is disabled by default. // This is appropriate for most unit tests. TxLookupLimit: -1, @@ -715,82 +714,44 @@ func (bc *BlockChain) loadLastState() error { // initializeHistoryPruning sets bc.historyPrunePoint. func (bc *BlockChain) initializeHistoryPruning(latest uint64) error { - var ( - freezerTail, _ = bc.db.Tail() - genesisHash = bc.genesisBlock.Hash() - mergePoint = history.MergePrunePoints[genesisHash] - praguePoint = history.PraguePrunePoints[genesisHash] - ) - switch bc.cfg.ChainHistoryMode { - case history.KeepAll: - if freezerTail == 0 { - return nil - } - // The database was pruned somehow, so we need to figure out if it's a known - // configuration or an error. - if mergePoint != nil && freezerTail == mergePoint.BlockNumber { - bc.historyPrunePoint.Store(mergePoint) - return nil - } - if praguePoint != nil && freezerTail == praguePoint.BlockNumber { - bc.historyPrunePoint.Store(praguePoint) - return nil - } - log.Error("Chain history database is pruned with unknown configuration", "tail", freezerTail) - return errors.New("unexpected database tail") + freezerTail, _ := bc.db.Tail() + policy := bc.cfg.HistoryPolicy - case history.KeepPostMerge: - if mergePoint == nil { - return errors.New("history pruning requested for unknown network") + switch policy.Mode { + case history.KeepAll: + if freezerTail > 0 { + // Database was pruned externally. Record the actual state. + log.Warn("Chain history database is pruned", "tail", freezerTail, "mode", policy.Mode) + bc.historyPrunePoint.Store(&history.PrunePoint{ + BlockNumber: freezerTail, + BlockHash: bc.GetCanonicalHash(freezerTail), + }) } - if freezerTail == 0 && latest != 0 { - log.Error(fmt.Sprintf("Chain history mode is configured as %q, but database is not pruned.", bc.cfg.ChainHistoryMode.String())) - log.Error("Run 'geth prune-history --history.chain postmerge' to prune pre-merge history.") - return errors.New("history pruning requested via configuration") - } - // Check if DB is pruned further than requested (to Prague). - if praguePoint != nil && freezerTail == praguePoint.BlockNumber { - log.Error("Chain history database is pruned to Prague block, but postmerge mode was requested.") - log.Error("History cannot be unpruned. To restore history, use 'geth import-history'.") - log.Error("If you intended to keep post-Prague history, use '--history.chain postprague' instead.") - return errors.New("database pruned beyond requested history mode") - } - if freezerTail > 0 && freezerTail != mergePoint.BlockNumber { - return errors.New("chain history database pruned to unknown block") - } - bc.historyPrunePoint.Store(mergePoint) return nil - case history.KeepPostPrague: - if praguePoint == nil { - return errors.New("history pruning requested for unknown network") - } - // Check if already at the prague prune point. - if freezerTail == praguePoint.BlockNumber { - bc.historyPrunePoint.Store(praguePoint) + case history.KeepPostMerge, history.KeepPostPrague: + target := policy.Target + // Already at the target. + if freezerTail == target.BlockNumber { + bc.historyPrunePoint.Store(target) return nil } - // Check if database needs pruning. - if latest != 0 { - if freezerTail == 0 { - log.Error(fmt.Sprintf("Chain history mode is configured as %q, but database is not pruned.", bc.cfg.ChainHistoryMode.String())) - log.Error("Run 'geth prune-history --history.chain postprague' to prune pre-Prague history.") - return errors.New("history pruning requested via configuration") - } - if mergePoint != nil && freezerTail == mergePoint.BlockNumber { - log.Error(fmt.Sprintf("Chain history mode is configured as %q, but database is only pruned to merge block.", bc.cfg.ChainHistoryMode.String())) - log.Error("Run 'geth prune-history --history.chain postprague' to prune pre-Prague history.") - return errors.New("history pruning requested via configuration") - } - log.Error("Chain history database is pruned to unknown block", "tail", freezerTail) - return errors.New("unexpected database tail") + // Database is pruned beyond the target. + if freezerTail > target.BlockNumber { + return fmt.Errorf("database pruned beyond requested history (tail=%d, target=%d)", freezerTail, target.BlockNumber) } - // Fresh database (latest == 0), will sync from prague point. - bc.historyPrunePoint.Store(praguePoint) + // Database needs pruning (freezerTail < target). + if latest != 0 { + log.Error(fmt.Sprintf("Chain history mode is configured as %q, but database is not pruned to the target block.", policy.Mode.String())) + log.Error(fmt.Sprintf("Run 'geth prune-history --history.chain %s' to prune history.", policy.Mode.String())) + return errors.New("history pruning required") + } + // Fresh database (latest == 0), will sync from target point. + bc.historyPrunePoint.Store(target) return nil default: - return fmt.Errorf("invalid history mode: %d", bc.cfg.ChainHistoryMode) + return fmt.Errorf("invalid history mode: %d", policy.Mode) } } diff --git a/core/blockchain_test.go b/core/blockchain_test.go index ce592f0267..d3ca21b2b3 100644 --- a/core/blockchain_test.go +++ b/core/blockchain_test.go @@ -36,7 +36,6 @@ import ( "github.com/ethereum/go-ethereum/consensus" "github.com/ethereum/go-ethereum/consensus/beacon" "github.com/ethereum/go-ethereum/consensus/ethash" - "github.com/ethereum/go-ethereum/core/history" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state" "github.com/ethereum/go-ethereum/core/types" @@ -4337,26 +4336,13 @@ func TestInsertChainWithCutoff(t *testing.T) { func testInsertChainWithCutoff(t *testing.T, cutoff uint64, ancientLimit uint64, genesis *Genesis, blocks []*types.Block, receipts []types.Receipts) { // log.SetDefault(log.NewLogger(log.NewTerminalHandlerWithLevel(os.Stderr, log.LevelDebug, true))) - // Add a known pruning point for the duration of the test. ghash := genesis.ToBlock().Hash() cutoffBlock := blocks[cutoff-1] - history.PrunePoints[ghash] = &history.PrunePoint{ - BlockNumber: cutoffBlock.NumberU64(), - BlockHash: cutoffBlock.Hash(), - } - defer func() { - delete(history.PrunePoints, ghash) - }() - - // Enable pruning in cache config. - config := DefaultConfig().WithStateScheme(rawdb.PathScheme) - config.ChainHistoryMode = history.KeepPostMerge db, _ := rawdb.Open(rawdb.NewMemoryDatabase(), rawdb.OpenOptions{}) defer db.Close() - options := DefaultConfig().WithStateScheme(rawdb.PathScheme) - chain, _ := NewBlockChain(db, genesis, beacon.New(ethash.NewFaker()), options) + chain, _ := NewBlockChain(db, genesis, beacon.New(ethash.NewFaker()), DefaultConfig().WithStateScheme(rawdb.PathScheme)) defer chain.Stop() var ( diff --git a/core/history/historymode.go b/core/history/historymode.go index bdaf07826d..1adfe014b2 100644 --- a/core/history/historymode.go +++ b/core/history/historymode.go @@ -77,57 +77,62 @@ func (m *HistoryMode) UnmarshalText(text []byte) error { return nil } +// PrunePoint identifies a specific block for history pruning. type PrunePoint struct { BlockNumber uint64 BlockHash common.Hash } -// MergePrunePoints contains the pre-defined history pruning cutoff blocks for known networks. -// They point to the first post-merge block. Any pruning should truncate *up to* but excluding -// the given block. -var MergePrunePoints = map[common.Hash]*PrunePoint{ - // mainnet - params.MainnetGenesisHash: { - BlockNumber: 15537393, - BlockHash: common.HexToHash("0x55b11b918355b1ef9c5db810302ebad0bf2544255b530cdce90674d5887bb286"), +// staticPrunePoints contains the pre-defined history pruning cutoff blocks for +// known networks, keyed by history mode and genesis hash. They point to the first +// block after the respective fork. Any pruning should truncate *up to* but +// excluding the given block. +var staticPrunePoints = map[HistoryMode]map[common.Hash]*PrunePoint{ + KeepPostMerge: { + params.MainnetGenesisHash: { + BlockNumber: 15537393, + BlockHash: common.HexToHash("0x55b11b918355b1ef9c5db810302ebad0bf2544255b530cdce90674d5887bb286"), + }, + params.SepoliaGenesisHash: { + BlockNumber: 1450409, + BlockHash: common.HexToHash("0x229f6b18ca1552f1d5146deceb5387333f40dc6275aebee3f2c5c4ece07d02db"), + }, }, - // sepolia - params.SepoliaGenesisHash: { - BlockNumber: 1450409, - BlockHash: common.HexToHash("0x229f6b18ca1552f1d5146deceb5387333f40dc6275aebee3f2c5c4ece07d02db"), + KeepPostPrague: { + params.MainnetGenesisHash: { + BlockNumber: 22431084, + BlockHash: common.HexToHash("0x50c8cab760b2948349c590461b166773c45d8f4858cccf5a43025ab2960152e8"), + }, + params.SepoliaGenesisHash: { + BlockNumber: 7836331, + BlockHash: common.HexToHash("0xe6571beb68bf24dbd8a6ba354518996920c55a3f8d8fdca423e391b8ad071f22"), + }, }, } -// PraguePrunePoints contains the pre-defined history pruning cutoff blocks for the Prague -// (Pectra) upgrade. They point to the first post-Prague block. Any pruning should truncate -// *up to* but excluding the given block. -var PraguePrunePoints = map[common.Hash]*PrunePoint{ - // mainnet - first Prague block (May 7, 2025) - params.MainnetGenesisHash: { - BlockNumber: 22431084, - BlockHash: common.HexToHash("0x50c8cab760b2948349c590461b166773c45d8f4858cccf5a43025ab2960152e8"), - }, - // sepolia - first Prague block (March 5, 2025) - params.SepoliaGenesisHash: { - BlockNumber: 7836331, - BlockHash: common.HexToHash("0xe6571beb68bf24dbd8a6ba354518996920c55a3f8d8fdca423e391b8ad071f22"), - }, +// HistoryPolicy describes the configured history pruning strategy. It captures +// user intent as opposed to the actual DB state. +type HistoryPolicy struct { + Mode HistoryMode + // Static prune point for PostMerge/PostPrague, nil otherwise. + Target *PrunePoint } -// PrunePoints is an alias for MergePrunePoints for backward compatibility. -// Deprecated: Use GetPrunePoint or MergePrunePoints directly. -var PrunePoints = MergePrunePoints - -// GetPrunePoint returns the prune point for the given genesis hash and history mode. -// Returns nil if no prune point is defined for the given combination. -func GetPrunePoint(genesisHash common.Hash, mode HistoryMode) *PrunePoint { +// NewPolicy constructs a HistoryPolicy from the given mode and genesis hash. +func NewPolicy(mode HistoryMode, genesisHash common.Hash) (HistoryPolicy, error) { switch mode { - case KeepPostMerge: - return MergePrunePoints[genesisHash] - case KeepPostPrague: - return PraguePrunePoints[genesisHash] + case KeepAll: + return HistoryPolicy{Mode: KeepAll}, nil + + case KeepPostMerge, KeepPostPrague: + point := staticPrunePoints[mode][genesisHash] + if point == nil { + return HistoryPolicy{}, fmt.Errorf("%s history pruning not available for network %s", mode, genesisHash.Hex()) + } + return HistoryPolicy{Mode: mode, Target: point}, nil + default: - return nil + return HistoryPolicy{}, fmt.Errorf("invalid history mode: %d", mode) } } diff --git a/core/history/historymode_test.go b/core/history/historymode_test.go new file mode 100644 index 0000000000..87eae188dd --- /dev/null +++ b/core/history/historymode_test.go @@ -0,0 +1,58 @@ +// Copyright 2026 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package history + +import ( + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/params" +) + +func TestNewPolicy(t *testing.T) { + // KeepAll: no target. + p, err := NewPolicy(KeepAll, params.MainnetGenesisHash) + if err != nil { + t.Fatalf("KeepAll: %v", err) + } + if p.Mode != KeepAll || p.Target != nil { + t.Errorf("KeepAll: unexpected policy %+v", p) + } + + // PostMerge: resolves known mainnet prune point. + p, err = NewPolicy(KeepPostMerge, params.MainnetGenesisHash) + if err != nil { + t.Fatalf("PostMerge: %v", err) + } + if p.Target == nil || p.Target.BlockNumber != 15537393 { + t.Errorf("PostMerge: unexpected target %+v", p.Target) + } + + // PostPrague: resolves known mainnet prune point. + p, err = NewPolicy(KeepPostPrague, params.MainnetGenesisHash) + if err != nil { + t.Fatalf("PostPrague: %v", err) + } + if p.Target == nil || p.Target.BlockNumber != 22431084 { + t.Errorf("PostPrague: unexpected target %+v", p.Target) + } + + // PostMerge on unknown network: error. + if _, err = NewPolicy(KeepPostMerge, common.HexToHash("0xdeadbeef")); err == nil { + t.Fatal("PostMerge unknown network: expected error") + } +} diff --git a/eth/backend.go b/eth/backend.go index 72228614f0..e9bea59734 100644 --- a/eth/backend.go +++ b/eth/backend.go @@ -33,6 +33,7 @@ import ( "github.com/ethereum/go-ethereum/consensus" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/filtermaps" + "github.com/ethereum/go-ethereum/core/history" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/state/pruner" "github.com/ethereum/go-ethereum/core/txpool" @@ -175,7 +176,7 @@ func New(stack *node.Node, config *ethconfig.Config) (*Ethereum, error) { // Here we determine genesis hash and active ChainConfig. // We need these to figure out the consensus parameters and to set up history pruning. - chainConfig, _, err := core.LoadChainConfig(chainDb, config.Genesis) + chainConfig, genesisHash, err := core.LoadChainConfig(chainDb, config.Genesis) if err != nil { return nil, err } @@ -220,6 +221,10 @@ func New(stack *node.Node, config *ethconfig.Config) (*Ethereum, error) { rawdb.WriteDatabaseVersion(chainDb, core.BlockChainVersion) } } + histPolicy, err := history.NewPolicy(config.HistoryMode, genesisHash) + if err != nil { + return nil, err + } var ( options = &core.BlockChainConfig{ TrieCleanLimit: config.TrieCleanCache, @@ -233,7 +238,7 @@ func New(stack *node.Node, config *ethconfig.Config) (*Ethereum, error) { TrienodeHistory: config.TrienodeHistory, NodeFullValueCheckpoint: config.NodeFullValueCheckpoint, StateScheme: scheme, - ChainHistoryMode: config.HistoryMode, + HistoryPolicy: histPolicy, TxLookupLimit: int64(min(config.TransactionHistory, math.MaxInt64)), VmConfig: vm.Config{ EnablePreimageRecording: config.EnablePreimageRecording, From b35645bdf7dfb2f0a22f14e8d278b9ec3cb1d48b Mon Sep 17 00:00:00 2001 From: haoyu-haoyu <85037553+haoyu-haoyu@users.noreply.github.com> Date: Wed, 18 Mar 2026 12:56:26 +0000 Subject: [PATCH 133/161] build: fix missing '!' in shebang of generated oss-fuzz scripts (#34044) \`oss-fuzz.sh\` line 38 writes \`#/bin/sh\` instead of \`#!/bin/sh\` as the shebang of generated fuzz test runner scripts. \`\`\`diff -#/bin/sh +#!/bin/sh \`\`\` Without the \`!\`, the kernel does not recognize the interpreter directive. Co-authored-by: Claude Opus 4.6 --- oss-fuzz.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/oss-fuzz.sh b/oss-fuzz.sh index bd87665125..73209fd8c8 100644 --- a/oss-fuzz.sh +++ b/oss-fuzz.sh @@ -35,7 +35,7 @@ function coverbuild { sed -i -e 's/TestFuzzCorpus/Test'$function'Corpus/' ./"${function,,}"_test.go cat << DOG > $OUT/$fuzzer -#/bin/sh +#!/bin/sh cd $OUT/$path go test -run Test${function}Corpus -v $tags -coverprofile \$1 -coverpkg $coverpkg From 3341d8ace0dd85cb5aa90548269e307439ef8b35 Mon Sep 17 00:00:00 2001 From: vickkkkkyy Date: Thu, 19 Mar 2026 06:31:40 +0800 Subject: [PATCH 134/161] eth/filters: rangeLogs should error on invalid block range (#33763) Fixes log filter to reject out of order block ranges. --- eth/filters/filter.go | 2 +- eth/filters/filter_test.go | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/eth/filters/filter.go b/eth/filters/filter.go index 9915f28128..04e11f0475 100644 --- a/eth/filters/filter.go +++ b/eth/filters/filter.go @@ -390,7 +390,7 @@ func (f *Filter) rangeLogs(ctx context.Context, firstBlock, lastBlock uint64) ([ } if firstBlock > lastBlock { - return nil, nil + return nil, errInvalidBlockRange } mb := f.sys.backend.NewMatcherBackend() defer mb.Close() diff --git a/eth/filters/filter_test.go b/eth/filters/filter_test.go index 63727200f7..e7b1b08046 100644 --- a/eth/filters/filter_test.go +++ b/eth/filters/filter_test.go @@ -357,7 +357,8 @@ func testFilters(t *testing.T, history uint64, noHistory bool) { want: `[{"address":"0xff00000000000000000000000000000000000000","topics":["0x0000000000000000000000000000000000000000000000000000746f70696333"],"data":"0x","blockNumber":"0x3e7","transactionHash":"0x53e3675800c6908424b61b35a44e51ca4c73ca603e58a65b32c67968b4f42200","transactionIndex":"0x0","blockHash":"0x2e4620a2b426b0612ec6cad9603f466723edaed87f98c9137405dd4f7a2409ff","blockTimestamp":"0x2706","logIndex":"0x0","removed":false}]`, }, { - f: sys.NewRangeFilter(int64(rpc.LatestBlockNumber), int64(rpc.FinalizedBlockNumber), nil, nil, 0), + f: sys.NewRangeFilter(int64(rpc.LatestBlockNumber), int64(rpc.FinalizedBlockNumber), nil, nil, 0), + err: errInvalidBlockRange.Error(), }, { f: sys.NewRangeFilter(int64(rpc.SafeBlockNumber), int64(rpc.LatestBlockNumber), nil, nil, 0), From 4faadf17fbc29d7890089acc660d553be454067a Mon Sep 17 00:00:00 2001 From: Bosul Mun Date: Thu, 19 Mar 2026 17:51:03 +0900 Subject: [PATCH 135/161] rlp: add AppendList method to RawList (#34048) This the AppendList method to merge two RawList instances by appending the raw content. --- rlp/raw.go | 12 ++++++++++++ rlp/raw_test.go | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/rlp/raw.go b/rlp/raw.go index 08ec667158..5f41cad5c4 100644 --- a/rlp/raw.go +++ b/rlp/raw.go @@ -168,6 +168,18 @@ func (r *RawList[T]) AppendRaw(b []byte) error { return nil } +// AppendList appends all items from another RawList to this list. +func (r *RawList[T]) AppendList(other *RawList[T]) { + if other.enc == nil || other.length == 0 { + return + } + if r.enc == nil { + r.enc = make([]byte, 9) + } + r.enc = append(r.enc, other.Content()...) + r.length += other.length +} + // StringSize returns the encoded size of a string. func StringSize(s string) uint64 { switch n := len(s); n { diff --git a/rlp/raw_test.go b/rlp/raw_test.go index 112c5d7897..ed7d3524c2 100644 --- a/rlp/raw_test.go +++ b/rlp/raw_test.go @@ -246,6 +246,54 @@ func TestRawListAppendRaw(t *testing.T) { t.Fatalf("wrong Len %d after invalid appends, want 2", rl.Len()) } } +func TestRawListAppendList(t *testing.T) { + var rl1 RawList[uint64] + if err := rl1.Append(uint64(1)); err != nil { + t.Fatal("append 1 failed:", err) + } + if err := rl1.Append(uint64(2)); err != nil { + t.Fatal("append 2 failed:", err) + } + + var rl2 RawList[uint64] + if err := rl2.Append(uint64(3)); err != nil { + t.Fatal("append 3 failed:", err) + } + if err := rl2.Append(uint64(4)); err != nil { + t.Fatal("append 4 failed:", err) + } + + rl1.AppendList(&rl2) + + if rl1.Len() != 4 { + t.Fatalf("wrong Len %d, want 4", rl1.Len()) + } + if rl1.Size() != 5 { + t.Fatalf("wrong Size %d, want 5", rl1.Size()) + } + + items, err := rl1.Items() + if err != nil { + t.Fatal("Items failed:", err) + } + if !reflect.DeepEqual(items, []uint64{1, 2, 3, 4}) { + t.Fatalf("wrong items: %v", items) + } + + var empty RawList[uint64] + prevLen := rl1.Len() + rl1.AppendList(&empty) + + if rl1.Len() != prevLen { + t.Fatalf("appending empty list changed Len: got %d, want %d", rl1.Len(), prevLen) + } + + empty.AppendList(&rl1) + + if empty.Len() != 4 { + t.Fatalf("wrong Len %d, want 4", empty.Len()) + } +} func TestRawListDecodeInvalid(t *testing.T) { tests := []struct { From a3083ff5d0fdc8dec370a421ca4a7ad876e4fe08 Mon Sep 17 00:00:00 2001 From: rjl493456442 Date: Thu, 19 Mar 2026 16:52:10 +0800 Subject: [PATCH 136/161] cmd: add support for enumerating a single storage trie (#34051) --- cmd/geth/snapshot.go | 239 +++++++++++++++++++++++++++++++------------ cmd/utils/flags.go | 4 + 2 files changed, 179 insertions(+), 64 deletions(-) diff --git a/cmd/geth/snapshot.go b/cmd/geth/snapshot.go index fc0658a59c..c177fb5ea2 100644 --- a/cmd/geth/snapshot.go +++ b/cmd/geth/snapshot.go @@ -36,6 +36,7 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/trie" + "github.com/ethereum/go-ethereum/triedb" "github.com/urfave/cli/v2" ) @@ -105,7 +106,9 @@ information about the specified address. Usage: "Traverse the state with given root hash and perform quick verification", ArgsUsage: "", Action: traverseState, - Flags: slices.Concat(utils.NetworkFlags, utils.DatabaseFlags), + Flags: slices.Concat([]cli.Flag{ + utils.AccountFlag, + }, utils.NetworkFlags, utils.DatabaseFlags), Description: ` geth snapshot traverse-state will traverse the whole state from the given state root and will abort if any @@ -113,6 +116,8 @@ referenced trie node or contract code is missing. This command can be used for state integrity verification. The default checking target is the HEAD state. It's also usable without snapshot enabled. + +If --account is specified, only the storage trie of that account is traversed. `, }, { @@ -120,7 +125,9 @@ It's also usable without snapshot enabled. Usage: "Traverse the state with given root hash and perform detailed verification", ArgsUsage: "", Action: traverseRawState, - Flags: slices.Concat(utils.NetworkFlags, utils.DatabaseFlags), + Flags: slices.Concat([]cli.Flag{ + utils.AccountFlag, + }, utils.NetworkFlags, utils.DatabaseFlags), Description: ` geth snapshot traverse-rawstate will traverse the whole state from the given root and will abort if any referenced @@ -129,6 +136,8 @@ verification. The default checking target is the HEAD state. It's basically iden to traverse-state, but the check granularity is smaller. It's also usable without snapshot enabled. + +If --account is specified, only the storage trie of that account is traversed. `, }, { @@ -272,6 +281,120 @@ func checkDanglingStorage(ctx *cli.Context) error { return snapshot.CheckDanglingStorage(db) } +// parseAccount parses the account flag value as either an address (20 bytes) +// or an account hash (32 bytes) and returns the hashed account key. +func parseAccount(input string) (common.Hash, error) { + switch len(input) { + case 40, 42: // address + return crypto.Keccak256Hash(common.HexToAddress(input).Bytes()), nil + case 64, 66: // hash + return common.HexToHash(input), nil + default: + return common.Hash{}, errors.New("malformed account address or hash") + } +} + +// lookupAccount resolves the account from the state trie using the given +// account hash. +func lookupAccount(accountHash common.Hash, tr *trie.Trie) (*types.StateAccount, error) { + accData, err := tr.Get(accountHash.Bytes()) + if err != nil { + return nil, fmt.Errorf("failed to get account %s: %w", accountHash, err) + } + if accData == nil { + return nil, fmt.Errorf("account not found: %s", accountHash) + } + var acc types.StateAccount + if err := rlp.DecodeBytes(accData, &acc); err != nil { + return nil, fmt.Errorf("invalid account data %s: %w", accountHash, err) + } + return &acc, nil +} + +func traverseStorage(id *trie.ID, db *triedb.Database, report bool, detail bool) error { + tr, err := trie.NewStateTrie(id, db) + if err != nil { + log.Error("Failed to open storage trie", "account", id.Owner, "root", id.Root, "err", err) + return err + } + var ( + slots int + nodes int + lastReport time.Time + start = time.Now() + ) + it, err := tr.NodeIterator(nil) + if err != nil { + log.Error("Failed to open storage iterator", "account", id.Owner, "root", id.Root, "err", err) + return err + } + logger := log.Debug + if report { + logger = log.Info + } + logger("Start traversing storage trie", "account", id.Owner, "storageRoot", id.Root) + + if !detail { + iter := trie.NewIterator(it) + for iter.Next() { + slots += 1 + if time.Since(lastReport) > time.Second*8 { + logger("Traversing storage", "account", id.Owner, "slots", slots, "elapsed", common.PrettyDuration(time.Since(start))) + lastReport = time.Now() + } + } + if iter.Err != nil { + log.Error("Failed to traverse storage trie", "root", id.Root, "err", iter.Err) + return iter.Err + } + logger("Storage is complete", "account", id.Owner, "slots", slots, "elapsed", common.PrettyDuration(time.Since(start))) + } else { + reader, err := db.NodeReader(id.StateRoot) + if err != nil { + log.Error("Failed to open state reader", "err", err) + return err + } + var ( + buffer = make([]byte, 32) + hasher = crypto.NewKeccakState() + ) + for it.Next(true) { + nodes += 1 + node := it.Hash() + + // Check the presence for non-empty hash node(embedded node doesn't + // have their own hash). + if node != (common.Hash{}) { + blob, _ := reader.Node(id.Owner, it.Path(), node) + if len(blob) == 0 { + log.Error("Missing trie node(storage)", "hash", node) + return errors.New("missing storage") + } + hasher.Reset() + hasher.Write(blob) + hasher.Read(buffer) + if !bytes.Equal(buffer, node.Bytes()) { + log.Error("Invalid trie node(storage)", "hash", node.Hex(), "value", blob) + return errors.New("invalid storage node") + } + } + if it.Leaf() { + slots += 1 + } + if time.Since(lastReport) > time.Second*8 { + logger("Traversing storage", "account", id.Owner, "nodes", nodes, "slots", slots, "elapsed", common.PrettyDuration(time.Since(start))) + lastReport = time.Now() + } + } + if err := it.Error(); err != nil { + log.Error("Failed to traverse storage trie", "root", id.Root, "err", err) + return err + } + logger("Storage is complete", "account", id.Owner, "nodes", nodes, "slots", slots, "elapsed", common.PrettyDuration(time.Since(start))) + } + return nil +} + // traverseState is a helper function used for pruning verification. // Basically it just iterates the trie, ensure all nodes and associated // contract codes are present. @@ -309,6 +432,30 @@ func traverseState(ctx *cli.Context) error { root = headBlock.Root() log.Info("Start traversing the state", "root", root, "number", headBlock.NumberU64()) } + // If --account is specified, only traverse the storage trie of that account. + if accountStr := ctx.String(utils.AccountFlag.Name); accountStr != "" { + accountHash, err := parseAccount(accountStr) + if err != nil { + log.Error("Failed to parse account", "err", err) + return err + } + // Use raw trie since the account key is already hashed. + t, err := trie.New(trie.StateTrieID(root), triedb) + if err != nil { + log.Error("Failed to open state trie", "root", root, "err", err) + return err + } + acc, err := lookupAccount(accountHash, t) + if err != nil { + log.Error("Failed to look up account", "hash", accountHash, "err", err) + return err + } + if acc.Root == types.EmptyRootHash { + log.Info("Account has no storage", "hash", accountHash) + return nil + } + return traverseStorage(trie.StorageTrieID(root, accountHash, acc.Root), triedb, true, false) + } t, err := trie.NewStateTrie(trie.StateTrieID(root), triedb) if err != nil { log.Error("Failed to open trie", "root", root, "err", err) @@ -335,30 +482,10 @@ func traverseState(ctx *cli.Context) error { return err } if acc.Root != types.EmptyRootHash { - id := trie.StorageTrieID(root, common.BytesToHash(accIter.Key), acc.Root) - storageTrie, err := trie.NewStateTrie(id, triedb) + err := traverseStorage(trie.StorageTrieID(root, common.BytesToHash(accIter.Key), acc.Root), triedb, false, false) if err != nil { - log.Error("Failed to open storage trie", "root", acc.Root, "err", err) return err } - storageIt, err := storageTrie.NodeIterator(nil) - if err != nil { - log.Error("Failed to open storage iterator", "root", acc.Root, "err", err) - return err - } - storageIter := trie.NewIterator(storageIt) - for storageIter.Next() { - slots += 1 - - if time.Since(lastReport) > time.Second*8 { - log.Info("Traversing state", "accounts", accounts, "slots", slots, "codes", codes, "elapsed", common.PrettyDuration(time.Since(start))) - lastReport = time.Now() - } - } - if storageIter.Err != nil { - log.Error("Failed to traverse storage trie", "root", acc.Root, "err", storageIter.Err) - return storageIter.Err - } } if !bytes.Equal(acc.CodeHash, types.EmptyCodeHash.Bytes()) { if !rawdb.HasCode(chaindb, common.BytesToHash(acc.CodeHash)) { @@ -418,6 +545,30 @@ func traverseRawState(ctx *cli.Context) error { root = headBlock.Root() log.Info("Start traversing the state", "root", root, "number", headBlock.NumberU64()) } + // If --account is specified, only traverse the storage trie of that account. + if accountStr := ctx.String(utils.AccountFlag.Name); accountStr != "" { + accountHash, err := parseAccount(accountStr) + if err != nil { + log.Error("Failed to parse account", "err", err) + return err + } + // Use raw trie since the account key is already hashed. + t, err := trie.New(trie.StateTrieID(root), triedb) + if err != nil { + log.Error("Failed to open state trie", "root", root, "err", err) + return err + } + acc, err := lookupAccount(accountHash, t) + if err != nil { + log.Error("Failed to look up account", "hash", accountHash, "err", err) + return err + } + if acc.Root == types.EmptyRootHash { + log.Info("Account has no storage", "hash", accountHash) + return nil + } + return traverseStorage(trie.StorageTrieID(root, accountHash, acc.Root), triedb, true, true) + } t, err := trie.NewStateTrie(trie.StateTrieID(root), triedb) if err != nil { log.Error("Failed to open trie", "root", root, "err", err) @@ -473,50 +624,10 @@ func traverseRawState(ctx *cli.Context) error { return errors.New("invalid account") } if acc.Root != types.EmptyRootHash { - id := trie.StorageTrieID(root, common.BytesToHash(accIter.LeafKey()), acc.Root) - storageTrie, err := trie.NewStateTrie(id, triedb) + err := traverseStorage(trie.StorageTrieID(root, common.BytesToHash(accIter.LeafKey()), acc.Root), triedb, false, true) if err != nil { - log.Error("Failed to open storage trie", "root", acc.Root, "err", err) - return errors.New("missing storage trie") - } - storageIter, err := storageTrie.NodeIterator(nil) - if err != nil { - log.Error("Failed to open storage iterator", "root", acc.Root, "err", err) return err } - for storageIter.Next(true) { - nodes += 1 - node := storageIter.Hash() - - // Check the presence for non-empty hash node(embedded node doesn't - // have their own hash). - if node != (common.Hash{}) { - blob, _ := reader.Node(common.BytesToHash(accIter.LeafKey()), storageIter.Path(), node) - if len(blob) == 0 { - log.Error("Missing trie node(storage)", "hash", node) - return errors.New("missing storage") - } - hasher.Reset() - hasher.Write(blob) - hasher.Read(got) - if !bytes.Equal(got, node.Bytes()) { - log.Error("Invalid trie node(storage)", "hash", node.Hex(), "value", blob) - return errors.New("invalid storage node") - } - } - // Bump the counter if it's leaf node. - if storageIter.Leaf() { - slots += 1 - } - if time.Since(lastReport) > time.Second*8 { - log.Info("Traversing state", "nodes", nodes, "accounts", accounts, "slots", slots, "codes", codes, "elapsed", common.PrettyDuration(time.Since(start))) - lastReport = time.Now() - } - } - if storageIter.Error() != nil { - log.Error("Failed to traverse storage trie", "root", acc.Root, "err", storageIter.Error()) - return storageIter.Error() - } } if !bytes.Equal(acc.CodeHash, types.EmptyCodeHash.Bytes()) { if !rawdb.HasCode(chaindb, common.BytesToHash(acc.CodeHash)) { diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 792e0e55ab..3a0bcc6b05 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -218,6 +218,10 @@ var ( Usage: "Max number of elements (0 = no limit)", Value: 0, } + AccountFlag = &cli.StringFlag{ + Name: "account", + Usage: "Specifies the account address or hash to traverse a single storage trie", + } OutputFileFlag = &cli.StringFlag{ Name: "output", Usage: "Writes the result in json to the output", From fd859638bd76d15b15468c9b2dea601035779769 Mon Sep 17 00:00:00 2001 From: jwasinger Date: Thu, 19 Mar 2026 12:02:49 -0400 Subject: [PATCH 137/161] core/vm: rework gas measurement for call variants (#33648) EIP-7928 brings state reads into consensus by recording accounts and storage accessed during execution in the block access list. As part of the spec, we need to check that there is enough gas available to cover the cost component which doesn't depend on looking up state. If this component can't be covered by the available gas, we exit immediately. The portion of the call dynamic cost which doesn't depend on state look ups: - EIP2929 call costs - value transfer cost - memory expansion cost This PR: - breaks up the "inner" gas calculation for each call variant into a pair of stateless/stateful cost methods - modifies the gas calculation logic of calls to check stateless cost component first, and go out of gas immediately if it is not covered. --------- Co-authored-by: Gary Rong --- core/vm/gas.go | 1 - core/vm/gas_table.go | 106 ++++++++++++++++++-------------------- core/vm/operations_acl.go | 91 ++++++++++++++++++++------------ 3 files changed, 108 insertions(+), 90 deletions(-) diff --git a/core/vm/gas.go b/core/vm/gas.go index 5fe589bce6..dcb20893c5 100644 --- a/core/vm/gas.go +++ b/core/vm/gas.go @@ -49,6 +49,5 @@ func callGas(isEip150 bool, availableGas, base uint64, callCost *uint256.Int) (u if !callCost.IsUint64() { return 0, ErrGasUintOverflow } - return callCost.Uint64(), nil } diff --git a/core/vm/gas_table.go b/core/vm/gas_table.go index aa1ad918bb..f075a99468 100644 --- a/core/vm/gas_table.go +++ b/core/vm/gas_table.go @@ -373,7 +373,32 @@ func gasExpEIP158(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memor return gas, nil } -func gasCall(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { +var ( + gasCall = makeCallVariantGasCost(gasCallIntrinsic) + gasCallCode = makeCallVariantGasCost(gasCallCodeIntrinsic) + gasDelegateCall = makeCallVariantGasCost(gasDelegateCallIntrinsic) + gasStaticCall = makeCallVariantGasCost(gasStaticCallIntrinsic) +) + +func makeCallVariantGasCost(intrinsicFunc gasFunc) gasFunc { + return func(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { + intrinsic, err := intrinsicFunc(evm, contract, stack, mem, memorySize) + if err != nil { + return 0, err + } + evm.callGasTemp, err = callGas(evm.chainRules.IsEIP150, contract.Gas, intrinsic, stack.Back(0)) + if err != nil { + return 0, err + } + gas, overflow := math.SafeAdd(intrinsic, evm.callGasTemp) + if overflow { + return 0, ErrGasUintOverflow + } + return gas, nil + } +} + +func gasCallIntrinsic(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { var ( gas uint64 transfersValue = !stack.Back(2).IsZero() @@ -382,38 +407,40 @@ func gasCall(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize if evm.readOnly && transfersValue { return 0, ErrWriteProtection } - - if evm.chainRules.IsEIP158 { - if transfersValue && evm.StateDB.Empty(address) { - gas += params.CallNewAccountGas - } - } else if !evm.StateDB.Exist(address) { - gas += params.CallNewAccountGas - } - if transfersValue && !evm.chainRules.IsEIP4762 { - gas += params.CallValueTransferGas - } + // Stateless check memoryGas, err := memoryGasCost(mem, memorySize) if err != nil { return 0, err } + var transferGas uint64 + if transfersValue && !evm.chainRules.IsEIP4762 { + transferGas = params.CallValueTransferGas + } var overflow bool - if gas, overflow = math.SafeAdd(gas, memoryGas); overflow { + if gas, overflow = math.SafeAdd(memoryGas, transferGas); overflow { return 0, ErrGasUintOverflow } - - evm.callGasTemp, err = callGas(evm.chainRules.IsEIP150, contract.Gas, gas, stack.Back(0)) - if err != nil { - return 0, err + // Terminate the gas measurement if the leftover gas is not sufficient, + // it can effectively prevent accessing the states in the following steps. + if contract.Gas < gas { + return 0, ErrOutOfGas } - if gas, overflow = math.SafeAdd(gas, evm.callGasTemp); overflow { + // Stateful check + var stateGas uint64 + if evm.chainRules.IsEIP158 { + if transfersValue && evm.StateDB.Empty(address) { + stateGas += params.CallNewAccountGas + } + } else if !evm.StateDB.Exist(address) { + stateGas += params.CallNewAccountGas + } + if gas, overflow = math.SafeAdd(gas, stateGas); overflow { return 0, ErrGasUintOverflow } - return gas, nil } -func gasCallCode(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { +func gasCallCodeIntrinsic(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { memoryGas, err := memoryGasCost(mem, memorySize) if err != nil { return 0, err @@ -428,46 +455,15 @@ func gasCallCode(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memory if gas, overflow = math.SafeAdd(gas, memoryGas); overflow { return 0, ErrGasUintOverflow } - evm.callGasTemp, err = callGas(evm.chainRules.IsEIP150, contract.Gas, gas, stack.Back(0)) - if err != nil { - return 0, err - } - if gas, overflow = math.SafeAdd(gas, evm.callGasTemp); overflow { - return 0, ErrGasUintOverflow - } return gas, nil } -func gasDelegateCall(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { - gas, err := memoryGasCost(mem, memorySize) - if err != nil { - return 0, err - } - evm.callGasTemp, err = callGas(evm.chainRules.IsEIP150, contract.Gas, gas, stack.Back(0)) - if err != nil { - return 0, err - } - var overflow bool - if gas, overflow = math.SafeAdd(gas, evm.callGasTemp); overflow { - return 0, ErrGasUintOverflow - } - return gas, nil +func gasDelegateCallIntrinsic(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { + return memoryGasCost(mem, memorySize) } -func gasStaticCall(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { - gas, err := memoryGasCost(mem, memorySize) - if err != nil { - return 0, err - } - evm.callGasTemp, err = callGas(evm.chainRules.IsEIP150, contract.Gas, gas, stack.Back(0)) - if err != nil { - return 0, err - } - var overflow bool - if gas, overflow = math.SafeAdd(gas, evm.callGasTemp); overflow { - return 0, ErrGasUintOverflow - } - return gas, nil +func gasStaticCallIntrinsic(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { + return memoryGasCost(mem, memorySize) } func gasSelfdestruct(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { diff --git a/core/vm/operations_acl.go b/core/vm/operations_acl.go index ce394d9384..addd2b162f 100644 --- a/core/vm/operations_acl.go +++ b/core/vm/operations_acl.go @@ -256,10 +256,10 @@ func makeSelfdestructGasFn(refundsEnabled bool) gasFunc { } var ( - innerGasCallEIP7702 = makeCallVariantGasCallEIP7702(gasCall) - gasDelegateCallEIP7702 = makeCallVariantGasCallEIP7702(gasDelegateCall) - gasStaticCallEIP7702 = makeCallVariantGasCallEIP7702(gasStaticCall) - gasCallCodeEIP7702 = makeCallVariantGasCallEIP7702(gasCallCode) + innerGasCallEIP7702 = makeCallVariantGasCallEIP7702(gasCallIntrinsic) + gasDelegateCallEIP7702 = makeCallVariantGasCallEIP7702(gasDelegateCallIntrinsic) + gasStaticCallEIP7702 = makeCallVariantGasCallEIP7702(gasStaticCallIntrinsic) + gasCallCodeEIP7702 = makeCallVariantGasCallEIP7702(gasCallCodeIntrinsic) ) func gasCallEIP7702(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { @@ -274,62 +274,85 @@ func gasCallEIP7702(evm *EVM, contract *Contract, stack *Stack, mem *Memory, mem return innerGasCallEIP7702(evm, contract, stack, mem, memorySize) } -func makeCallVariantGasCallEIP7702(oldCalculator gasFunc) gasFunc { +func makeCallVariantGasCallEIP7702(intrinsicFunc gasFunc) gasFunc { return func(evm *EVM, contract *Contract, stack *Stack, mem *Memory, memorySize uint64) (uint64, error) { var ( - total uint64 // total dynamic gas used - addr = common.Address(stack.Back(1).Bytes20()) + eip2929Cost uint64 + eip7702Cost uint64 + addr = common.Address(stack.Back(1).Bytes20()) ) - - // Check slot presence in the access list + // Perform EIP-2929 checks (stateless), checking address presence + // in the accessList and charge the cold access accordingly. if !evm.StateDB.AddressInAccessList(addr) { evm.StateDB.AddAddressToAccessList(addr) - // The WarmStorageReadCostEIP2929 (100) is already deducted in the form of a constant cost, so - // the cost to charge for cold access, if any, is Cold - Warm - coldCost := params.ColdAccountAccessCostEIP2929 - params.WarmStorageReadCostEIP2929 - // Charge the remaining difference here already, to correctly calculate available - // gas for call - if !contract.UseGas(coldCost, evm.Config.Tracer, tracing.GasChangeCallStorageColdAccess) { + + // The WarmStorageReadCostEIP2929 (100) is already deducted in the form + // of a constant cost, so the cost to charge for cold access, if any, + // is Cold - Warm + eip2929Cost = params.ColdAccountAccessCostEIP2929 - params.WarmStorageReadCostEIP2929 + + // Charge the remaining difference here already, to correctly calculate + // available gas for call + if !contract.UseGas(eip2929Cost, evm.Config.Tracer, tracing.GasChangeCallStorageColdAccess) { return 0, ErrOutOfGas } - total += coldCost + } + + // Perform the intrinsic cost calculation including: + // + // - transfer value + // - memory expansion + // - create new account + intrinsicCost, err := intrinsicFunc(evm, contract, stack, mem, memorySize) + if err != nil { + return 0, err + } + // Terminate the gas measurement if the leftover gas is not sufficient, + // it can effectively prevent accessing the states in the following steps. + // It's an essential safeguard before any stateful check. + if contract.Gas < intrinsicCost { + return 0, ErrOutOfGas } // Check if code is a delegation and if so, charge for resolution. if target, ok := types.ParseDelegation(evm.StateDB.GetCode(addr)); ok { - var cost uint64 if evm.StateDB.AddressInAccessList(target) { - cost = params.WarmStorageReadCostEIP2929 + eip7702Cost = params.WarmStorageReadCostEIP2929 } else { evm.StateDB.AddAddressToAccessList(target) - cost = params.ColdAccountAccessCostEIP2929 + eip7702Cost = params.ColdAccountAccessCostEIP2929 } - if !contract.UseGas(cost, evm.Config.Tracer, tracing.GasChangeCallStorageColdAccess) { + if !contract.UseGas(eip7702Cost, evm.Config.Tracer, tracing.GasChangeCallStorageColdAccess) { return 0, ErrOutOfGas } - total += cost } - - // Now call the old calculator, which takes into account - // - create new account - // - transfer value - // - memory expansion - // - 63/64ths rule - old, err := oldCalculator(evm, contract, stack, mem, memorySize) + // Calculate the gas budget for the nested call. The costs defined by + // EIP-2929 and EIP-7702 have already been applied. + evm.callGasTemp, err = callGas(evm.chainRules.IsEIP150, contract.Gas, intrinsicCost, stack.Back(0)) if err != nil { - return old, err + return 0, err } - // Temporarily add the gas charge back to the contract and return value. By // adding it to the return, it will be charged outside of this function, as // part of the dynamic gas. This will ensure it is correctly reported to // tracers. - contract.Gas += total + contract.Gas += eip2929Cost + eip7702Cost - var overflow bool - if total, overflow = math.SafeAdd(old, total); overflow { + // Aggregate the gas costs from all components, including EIP-2929, EIP-7702, + // the CALL opcode itself, and the cost incurred by nested calls. + var ( + overflow bool + totalCost uint64 + ) + if totalCost, overflow = math.SafeAdd(eip2929Cost, eip7702Cost); overflow { return 0, ErrGasUintOverflow } - return total, nil + if totalCost, overflow = math.SafeAdd(totalCost, intrinsicCost); overflow { + return 0, ErrGasUintOverflow + } + if totalCost, overflow = math.SafeAdd(totalCost, evm.callGasTemp); overflow { + return 0, ErrGasUintOverflow + } + return totalCost, nil } } From 35b91092c5b75399b15354da23f9433c574ce3bc Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Thu, 19 Mar 2026 18:26:00 +0100 Subject: [PATCH 138/161] rlp: add Size method to EncoderBuffer (#34052) The new method returns the size of the written data, excluding any unfinished list structure. --- rlp/encbuffer.go | 10 ++++++++++ rlp/encode_test.go | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/rlp/encbuffer.go b/rlp/encbuffer.go index 61d8bd059c..ca0aa290fe 100644 --- a/rlp/encbuffer.go +++ b/rlp/encbuffer.go @@ -366,6 +366,16 @@ func (w *EncoderBuffer) AppendToBytes(dst []byte) []byte { return out } +// Size returns the total size of the content that was encoded up to this point. +// Note this does not count the size of any lists which are still 'open' (i.e. for +// which ListEnd has not been called yet). +func (w EncoderBuffer) Size() int { + if w.buf == nil { + return 0 + } + return w.buf.size() +} + // Write appends b directly to the encoder output. func (w EncoderBuffer) Write(b []byte) (int, error) { return w.buf.Write(b) diff --git a/rlp/encode_test.go b/rlp/encode_test.go index e63ea319b4..8dc9fdaf1f 100644 --- a/rlp/encode_test.go +++ b/rlp/encode_test.go @@ -507,6 +507,39 @@ func TestEncodeToReaderReturnToPool(t *testing.T) { wg.Wait() } +func TestEncoderBufferSize(t *testing.T) { + var output bytes.Buffer + eb := NewEncoderBuffer(&output) + + assertSize := func(state string, expectedSize int) { + t.Helper() + if s := eb.Size(); s != expectedSize { + t.Fatalf("wrong size %s: %d", state, s) + } + } + + assertSize("empty buffer", 0) + outerList := eb.List() + assertSize("after outer List()", 0) + eb.WriteString("abc") + assertSize("after string write", 4) + innerList := eb.List() + assertSize("after inner List()", 4) + eb.WriteUint64(1) + eb.WriteUint64(2) + assertSize("after inner list writes", 6) + eb.ListEnd(innerList) + assertSize("after end of inner list", 7) + eb.ListEnd(outerList) + assertSize("after end of outer list", 8) + eb.Flush() + assertSize("after Flush()", 0) + + if output.Len() != 8 { + t.Fatalf("wrong final output size %d", output.Len()) + } +} + var sink interface{} func BenchmarkIntsize(b *testing.B) { From 59ce2cb6a14db04432857b2ae76b1889841bc4e6 Mon Sep 17 00:00:00 2001 From: jvn Date: Fri, 20 Mar 2026 10:22:15 +0530 Subject: [PATCH 139/161] p2p: track in-progress inbound node IDs (#33198) Avoid dialing a node while we have an inbound connection request from them in progress. Closes #33197 --- p2p/dial.go | 67 ++++++++++++++++++++++++++++++++---------- p2p/dial_test.go | 76 ++++++++++++++++++++++++++++++++++++++++++++++++ p2p/server.go | 12 ++++++-- 3 files changed, 137 insertions(+), 18 deletions(-) diff --git a/p2p/dial.go b/p2p/dial.go index 225709427c..f9463d6d89 100644 --- a/p2p/dial.go +++ b/p2p/dial.go @@ -76,6 +76,7 @@ var ( errSelf = errors.New("is self") errAlreadyDialing = errors.New("already dialing") errAlreadyConnected = errors.New("already connected") + errPendingInbound = errors.New("peer has pending inbound connection") errRecentlyDialed = errors.New("recently dialed") errNetRestrict = errors.New("not contained in netrestrict list") errNoPort = errors.New("node does not provide TCP port") @@ -104,12 +105,15 @@ type dialScheduler struct { remStaticCh chan *enode.Node addPeerCh chan *conn remPeerCh chan *conn + addPendingCh chan enode.ID + remPendingCh chan enode.ID // Everything below here belongs to loop and // should only be accessed by code on the loop goroutine. - dialing map[enode.ID]*dialTask // active tasks - peers map[enode.ID]struct{} // all connected peers - dialPeers int // current number of dialed peers + dialing map[enode.ID]*dialTask // active tasks + peers map[enode.ID]struct{} // all connected peers + pendingInbound map[enode.ID]struct{} // in-progress inbound connections + dialPeers int // current number of dialed peers // The static map tracks all static dial tasks. The subset of usable static dial tasks // (i.e. those passing checkDial) is kept in staticPool. The scheduler prefers @@ -163,19 +167,22 @@ func (cfg dialConfig) withDefaults() dialConfig { func newDialScheduler(config dialConfig, it enode.Iterator, setupFunc dialSetupFunc) *dialScheduler { cfg := config.withDefaults() d := &dialScheduler{ - dialConfig: cfg, - historyTimer: mclock.NewAlarm(cfg.clock), - setupFunc: setupFunc, - dnsLookupFunc: net.DefaultResolver.LookupNetIP, - dialing: make(map[enode.ID]*dialTask), - static: make(map[enode.ID]*dialTask), - peers: make(map[enode.ID]struct{}), - doneCh: make(chan *dialTask), - nodesIn: make(chan *enode.Node), - addStaticCh: make(chan *enode.Node), - remStaticCh: make(chan *enode.Node), - addPeerCh: make(chan *conn), - remPeerCh: make(chan *conn), + dialConfig: cfg, + historyTimer: mclock.NewAlarm(cfg.clock), + setupFunc: setupFunc, + dnsLookupFunc: net.DefaultResolver.LookupNetIP, + dialing: make(map[enode.ID]*dialTask), + static: make(map[enode.ID]*dialTask), + peers: make(map[enode.ID]struct{}), + pendingInbound: make(map[enode.ID]struct{}), + doneCh: make(chan *dialTask), + nodesIn: make(chan *enode.Node), + addStaticCh: make(chan *enode.Node), + remStaticCh: make(chan *enode.Node), + addPeerCh: make(chan *conn), + remPeerCh: make(chan *conn), + addPendingCh: make(chan enode.ID), + remPendingCh: make(chan enode.ID), } d.lastStatsLog = d.clock.Now() d.ctx, d.cancel = context.WithCancel(context.Background()) @@ -223,6 +230,22 @@ func (d *dialScheduler) peerRemoved(c *conn) { } } +// inboundPending notifies the scheduler about a pending inbound connection. +func (d *dialScheduler) inboundPending(id enode.ID) { + select { + case d.addPendingCh <- id: + case <-d.ctx.Done(): + } +} + +// inboundCompleted notifies the scheduler that an inbound connection completed or failed. +func (d *dialScheduler) inboundCompleted(id enode.ID) { + select { + case d.remPendingCh <- id: + case <-d.ctx.Done(): + } +} + // loop is the main loop of the dialer. func (d *dialScheduler) loop(it enode.Iterator) { var ( @@ -276,6 +299,15 @@ loop: delete(d.peers, c.node.ID()) d.updateStaticPool(c.node.ID()) + case id := <-d.addPendingCh: + d.pendingInbound[id] = struct{}{} + d.log.Trace("Marked node as pending inbound", "id", id) + + case id := <-d.remPendingCh: + delete(d.pendingInbound, id) + d.updateStaticPool(id) + d.log.Trace("Unmarked node as pending inbound", "id", id) + case node := <-d.addStaticCh: id := node.ID() _, exists := d.static[id] @@ -390,6 +422,9 @@ func (d *dialScheduler) checkDial(n *enode.Node) error { if _, ok := d.peers[n.ID()]; ok { return errAlreadyConnected } + if _, ok := d.pendingInbound[n.ID()]; ok { + return errPendingInbound + } if d.netRestrict != nil && !d.netRestrict.ContainsAddr(n.IPAddr()) { return errNetRestrict } diff --git a/p2p/dial_test.go b/p2p/dial_test.go index f18dacce2a..9684aa6e91 100644 --- a/p2p/dial_test.go +++ b/p2p/dial_test.go @@ -423,6 +423,82 @@ func TestDialSchedDNSHostname(t *testing.T) { }) } +// This test checks that nodes with pending inbound connections are not dialed. +func TestDialSchedPendingInbound(t *testing.T) { + t.Parallel() + + config := dialConfig{ + maxActiveDials: 5, + maxDialPeers: 4, + } + runDialTest(t, config, []dialTestRound{ + // 2 peers are connected, leaving 2 dial slots. + // Node 0x03 has a pending inbound connection. + // Discovered nodes 0x03, 0x04, 0x05 but only 0x04 and 0x05 should be dialed. + { + peersAdded: []*conn{ + {flags: dynDialedConn, node: newNode(uintID(0x01), "127.0.0.1:30303")}, + {flags: dynDialedConn, node: newNode(uintID(0x02), "127.0.0.2:30303")}, + }, + update: func(d *dialScheduler) { + d.inboundPending(uintID(0x03)) + }, + discovered: []*enode.Node{ + newNode(uintID(0x03), "127.0.0.3:30303"), // not dialed because pending inbound + newNode(uintID(0x04), "127.0.0.4:30303"), + newNode(uintID(0x05), "127.0.0.5:30303"), + }, + wantNewDials: []*enode.Node{ + newNode(uintID(0x04), "127.0.0.4:30303"), + newNode(uintID(0x05), "127.0.0.5:30303"), + }, + }, + // Pending inbound connection for 0x03 completes successfully. + // Node 0x03 becomes a connected peer. + // One dial slot remains, node 0x06 is dialed. + { + update: func(d *dialScheduler) { + // Pending inbound completes + d.inboundCompleted(uintID(0x03)) + }, + peersAdded: []*conn{ + {flags: inboundConn, node: newNode(uintID(0x03), "127.0.0.3:30303")}, + }, + succeeded: []enode.ID{ + uintID(0x04), + }, + failed: []enode.ID{ + uintID(0x05), + }, + discovered: []*enode.Node{ + newNode(uintID(0x03), "127.0.0.3:30303"), // not dialed, now connected + newNode(uintID(0x06), "127.0.0.6:30303"), + }, + wantNewDials: []*enode.Node{ + newNode(uintID(0x06), "127.0.0.6:30303"), + }, + }, + // Inbound peer 0x03 disconnects. + // Another pending inbound starts for 0x07. + // Only 0x03 should be dialed, not 0x07. + { + peersRemoved: []enode.ID{ + uintID(0x03), + }, + update: func(d *dialScheduler) { + d.inboundPending(uintID(0x07)) + }, + discovered: []*enode.Node{ + newNode(uintID(0x03), "127.0.0.3:30303"), + newNode(uintID(0x07), "127.0.0.7:30303"), // not dialed because pending inbound + }, + wantNewDials: []*enode.Node{ + newNode(uintID(0x03), "127.0.0.3:30303"), + }, + }, + }) +} + // ------- // Code below here is the framework for the tests above. diff --git a/p2p/server.go b/p2p/server.go index 10c855f1c4..6d2323f9ce 100644 --- a/p2p/server.go +++ b/p2p/server.go @@ -686,8 +686,11 @@ running: // Ensure that the trusted flag is set before checking against MaxPeers. c.flags |= trustedConn } - // TODO: track in-progress inbound node IDs (pre-Peer) to avoid dialing them. - c.cont <- srv.postHandshakeChecks(peers, inboundCount, c) + err := srv.postHandshakeChecks(peers, inboundCount, c) + if err == nil && c.flags&inboundConn != 0 { + srv.dialsched.inboundPending(c.node.ID()) + } + c.cont <- err case c := <-srv.checkpointAddPeer: // At this point the connection is past the protocol handshake. @@ -870,6 +873,11 @@ func (srv *Server) checkInboundConn(remoteIP netip.Addr) error { // or the handshakes have failed. func (srv *Server) SetupConn(fd net.Conn, flags connFlag, dialDest *enode.Node) error { c := &conn{fd: fd, flags: flags, cont: make(chan error)} + defer func() { + if c.is(inboundConn) && c.node != nil { + srv.dialsched.inboundCompleted(c.node.ID()) + } + }() if dialDest == nil { c.transport = srv.newTransport(fd, nil) } else { From 77779d1098c86d478768d8f2d0b6982ff2364d44 Mon Sep 17 00:00:00 2001 From: CPerezz <37264926+CPerezz@users.noreply.github.com> Date: Fri, 20 Mar 2026 15:40:04 +0100 Subject: [PATCH 140/161] core/state: bypass per-account updateTrie in IntermediateRoot for binary trie (#34022) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary In binary trie mode, `IntermediateRoot` calls `updateTrie()` once per dirty account. But with the binary trie there is only one unified trie (`OpenStorageTrie` returns `self`), so each call redundantly does per-account trie setup: `getPrefetchedTrie`, `getTrie`, slice allocations for deletions/used, and `prefetcher.used` — all for the same trie pointer. This PR replaces the per-account `updateTrie()` calls with a single flat loop that applies all storage updates directly to `s.trie`. The MPT path is unchanged. The prefetcher trie replacement is guarded to avoid overwriting the binary trie that received updates. This is the phase-1 counterpart to #34021 (H01). H01 fixes the commit phase (`trie.Commit()` called N+1 times). This PR fixes the update phase (`updateTrie()` called N times with redundant setup). Same root cause — unified binary trie operated on per-account — different phases. ## Benchmark (Apple M4 Pro, 500K entries, `--benchtime=10s --count=3`, on top of #34021) | Metric | H01 baseline | H01 + this PR | Delta | |--------|:------------:|:-------------:|:-----:| | Approve (Mgas/s) | 368 | **414** | **+12.5%** | | BalanceOf (Mgas/s) | 870 | 875 | +0.6% | Should be rebased after #34021 is merged. --- core/state/statedb.go | 71 +++++++++++++++++++++++++++++++------------ 1 file changed, 52 insertions(+), 19 deletions(-) diff --git a/core/state/statedb.go b/core/state/statedb.go index 2477242eb5..02622f0bd6 100644 --- a/core/state/statedb.go +++ b/core/state/statedb.go @@ -824,22 +824,55 @@ func (s *StateDB) IntermediateRoot(deleteEmptyObjects bool) common.Hash { workers errgroup.Group ) if s.db.TrieDB().IsVerkle() { - // Whilst MPT storage tries are independent, Verkle has one single trie - // for all the accounts and all the storage slots merged together. The - // former can thus be simply parallelized, but updating the latter will - // need concurrency support within the trie itself. That's a TODO for a - // later time. - workers.SetLimit(1) - } - for addr, op := range s.mutations { - if op.applied || op.isDelete() { - continue + // Bypass per-account updateTrie() for binary trie. In binary trie mode + // there is only one unified trie (OpenStorageTrie returns self), so the + // per-account trie setup in updateTrie() (getPrefetchedTrie, getTrie, + // prefetcher.used) is redundant overhead. Apply all storage updates + // directly in a single pass. + for addr, op := range s.mutations { + if op.applied || op.isDelete() { + continue + } + obj := s.stateObjects[addr] + if len(obj.uncommittedStorage) == 0 { + continue + } + for key, origin := range obj.uncommittedStorage { + value, exist := obj.pendingStorage[key] + if value == origin || !exist { + continue + } + if (value != common.Hash{}) { + if err := s.trie.UpdateStorage(addr, key[:], common.TrimLeftZeroes(value[:])); err != nil { + s.setError(err) + } + } else { + if err := s.trie.DeleteStorage(addr, key[:]); err != nil { + s.setError(err) + } + } + } } - obj := s.stateObjects[addr] // closure for the task runner below - workers.Go(func() error { - if s.db.TrieDB().IsVerkle() { - obj.updateTrie() - } else { + // Clear uncommittedStorage and assign trie on each touched object. + // obj.trie must be set because this path bypasses updateTrie(), which + // is where obj.trie normally gets lazily loaded via getTrie(). + for addr, op := range s.mutations { + if op.applied || op.isDelete() { + continue + } + obj := s.stateObjects[addr] + if len(obj.uncommittedStorage) > 0 { + obj.uncommittedStorage = make(Storage) + } + obj.trie = s.trie + } + } else { + for addr, op := range s.mutations { + if op.applied || op.isDelete() { + continue + } + obj := s.stateObjects[addr] // closure for the task runner below + workers.Go(func() error { obj.updateRoot() // If witness building is enabled and the state object has a trie, @@ -847,9 +880,9 @@ func (s *StateDB) IntermediateRoot(deleteEmptyObjects bool) common.Hash { if s.witness != nil && obj.trie != nil { s.witness.AddState(obj.trie.Witness()) } - } - return nil - }) + return nil + }) + } } // If witness building is enabled, gather all the read-only accesses. // Skip witness collection in Verkle mode, they will be gathered @@ -911,7 +944,7 @@ func (s *StateDB) IntermediateRoot(deleteEmptyObjects bool) common.Hash { // only a single trie is used for state hashing. Replacing a non-nil verkle tree // here could result in losing uncommitted changes from storage. start = time.Now() - if s.prefetcher != nil { + if s.prefetcher != nil && !s.db.TrieDB().IsVerkle() { if trie := s.prefetcher.trie(common.Hash{}, s.originalRoot); trie == nil { log.Error("Failed to retrieve account pre-fetcher trie") } else { From 305cd7b9eb1c2b2f9e555309bce8a389633ca923 Mon Sep 17 00:00:00 2001 From: Guillaume Ballet <3272758+gballet@users.noreply.github.com> Date: Fri, 20 Mar 2026 18:53:14 +0100 Subject: [PATCH 141/161] trie/bintrie: fix NodeIterator Empty node handling and expose tree accessors (#34056) Fix three issues in the binary trie NodeIterator: 1. Empty nodes now properly backtrack to parent and continue iteration instead of terminating the entire walk early. 2. `HashedNode` resolver handles `nil` data (all-zeros hash) gracefully by treating it as Empty rather than panicking. 3. Parent update after node resolution guards against stack underflow when resolving the root node itself. --------- Co-authored-by: tellabg <249254436+tellabg@users.noreply.github.com> --- trie/bintrie/iterator.go | 32 +++-- trie/bintrie/iterator_test.go | 239 ++++++++++++++++++++++++++++++++++ 2 files changed, 263 insertions(+), 8 deletions(-) create mode 100644 trie/bintrie/iterator_test.go diff --git a/trie/bintrie/iterator.go b/trie/bintrie/iterator.go index 917f82efc9..048d37f766 100644 --- a/trie/bintrie/iterator.go +++ b/trie/bintrie/iterator.go @@ -119,10 +119,17 @@ func (it *binaryNodeIterator) Next(descend bool) bool { return it.Next(descend) case HashedNode: // resolve the node - data, err := it.trie.nodeResolver(it.Path(), common.Hash(node)) + resolverPath := it.Path() + data, err := it.trie.nodeResolver(resolverPath, common.Hash(node)) if err != nil { panic(err) } + if data == nil { + // Empty/nil node — treat as Empty, backtrack + it.current = Empty{} + it.stack[len(it.stack)-1].Node = it.current + return it.Next(descend) + } it.current, err = DeserializeNodeWithHash(data, len(it.stack)-1, common.Hash(node)) if err != nil { panic(err) @@ -130,16 +137,25 @@ func (it *binaryNodeIterator) Next(descend bool) bool { // update the stack and parent with the resolved node it.stack[len(it.stack)-1].Node = it.current - parent := &it.stack[len(it.stack)-2] - if parent.Index == 0 { - parent.Node.(*InternalNode).left = it.current - } else { - parent.Node.(*InternalNode).right = it.current + if len(it.stack) >= 2 { + parent := &it.stack[len(it.stack)-2] + if parent.Index == 0 { + parent.Node.(*InternalNode).left = it.current + } else { + parent.Node.(*InternalNode).right = it.current + } } return it.Next(descend) case Empty: - // do nothing - return false + // Empty node - go back to parent and continue + if len(it.stack) <= 1 { + it.lastErr = errIteratorEnd + return false + } + it.stack = it.stack[:len(it.stack)-1] + it.current = it.stack[len(it.stack)-1].Node + it.stack[len(it.stack)-1].Index++ + return it.Next(descend) default: panic("invalid node type") } diff --git a/trie/bintrie/iterator_test.go b/trie/bintrie/iterator_test.go new file mode 100644 index 0000000000..3e717c07ba --- /dev/null +++ b/trie/bintrie/iterator_test.go @@ -0,0 +1,239 @@ +// Copyright 2026 go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package bintrie + +import ( + "bytes" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/trie" +) + +// makeTrie creates a BinaryTrie populated with the given key-value pairs. +func makeTrie(t *testing.T, entries [][2]common.Hash) *BinaryTrie { + t.Helper() + tr := &BinaryTrie{ + root: NewBinaryNode(), + tracer: trie.NewPrevalueTracer(), + } + for _, kv := range entries { + var err error + tr.root, err = tr.root.Insert(kv[0][:], kv[1][:], nil, 0) + if err != nil { + t.Fatal(err) + } + } + return tr +} + +// countLeaves iterates the trie and returns the number of leaves visited. +func countLeaves(t *testing.T, tr *BinaryTrie) int { + t.Helper() + it, err := newBinaryNodeIterator(tr, nil) + if err != nil { + t.Fatal(err) + } + leaves := 0 + for it.Next(true) { + if it.Leaf() { + leaves++ + } + } + if it.Error() != nil { + t.Fatalf("iterator error: %v", it.Error()) + } + return leaves +} + +// TestIteratorEmptyTrie verifies that iterating over an empty trie returns +// no nodes and reports no error. +func TestIteratorEmptyTrie(t *testing.T) { + tr := &BinaryTrie{ + root: Empty{}, + tracer: trie.NewPrevalueTracer(), + } + it, err := newBinaryNodeIterator(tr, nil) + if err != nil { + t.Fatal(err) + } + if it.Next(true) { + t.Fatal("expected no iteration over empty trie") + } + if it.Error() != nil { + t.Fatalf("unexpected error: %v", it.Error()) + } +} + +// TestIteratorSingleStem verifies iteration over a trie with a single stem +// node containing multiple values. +func TestIteratorSingleStem(t *testing.T) { + tr := makeTrie(t, [][2]common.Hash{ + {common.HexToHash("0000000000000000000000000000000000000000000000000000000000000003"), oneKey}, + {common.HexToHash("0000000000000000000000000000000000000000000000000000000000000007"), oneKey}, + {common.HexToHash("00000000000000000000000000000000000000000000000000000000000000FF"), oneKey}, + }) + if leaves := countLeaves(t, tr); leaves != 3 { + t.Fatalf("expected 3 leaves, got %d", leaves) + } +} + +// TestIteratorTwoStems verifies iteration over a trie with two stems +// separated by internal nodes, ensuring all leaves from both stems are visited. +func TestIteratorTwoStems(t *testing.T) { + tr := makeTrie(t, [][2]common.Hash{ + {common.HexToHash("0000000000000000000000000000000000000000000000000000000000000001"), oneKey}, + {common.HexToHash("0000000000000000000000000000000000000000000000000000000000000002"), oneKey}, + {common.HexToHash("8000000000000000000000000000000000000000000000000000000000000001"), oneKey}, + {common.HexToHash("8000000000000000000000000000000000000000000000000000000000000002"), oneKey}, + }) + if leaves := countLeaves(t, tr); leaves != 4 { + t.Fatalf("expected 4 leaves, got %d", leaves) + } +} + +// TestIteratorLeafKeyAndBlob verifies that the iterator returns correct +// leaf keys and values. +func TestIteratorLeafKeyAndBlob(t *testing.T) { + key := common.HexToHash("0000000000000000000000000000000000000000000000000000000000000005") + val := common.HexToHash("00000000000000000000000000000000000000000000000000000000deadbeef") + tr := makeTrie(t, [][2]common.Hash{{key, val}}) + + it, err := newBinaryNodeIterator(tr, nil) + if err != nil { + t.Fatal(err) + } + + found := false + for it.Next(true) { + if it.Leaf() { + found = true + if !bytes.Equal(it.LeafKey(), key[:]) { + t.Fatalf("leaf key mismatch: got %x, want %x", it.LeafKey(), key) + } + if !bytes.Equal(it.LeafBlob(), val[:]) { + t.Fatalf("leaf blob mismatch: got %x, want %x", it.LeafBlob(), val) + } + } + } + if !found { + t.Fatal("expected to find a leaf") + } +} + +// TestIteratorEmptyNodeBacktrack is a regression test for the Empty node +// backtracking bug. Before the fix, encountering an Empty child during +// iteration would terminate the walk prematurely instead of backtracking +// to the parent and continuing with the next sibling. +func TestIteratorEmptyNodeBacktrack(t *testing.T) { + tr := makeTrie(t, [][2]common.Hash{ + {common.HexToHash("0000000000000000000000000000000000000000000000000000000000000001"), oneKey}, + {common.HexToHash("8000000000000000000000000000000000000000000000000000000000000001"), oneKey}, + }) + + if _, ok := tr.root.(*InternalNode); !ok { + t.Fatalf("expected InternalNode root, got %T", tr.root) + } + if leaves := countLeaves(t, tr); leaves != 2 { + t.Fatalf("expected 2 leaves, got %d (Empty backtrack bug?)", leaves) + } +} + +// TestIteratorHashedNodeNilData is a regression test for the nil-data guard. +// When nodeResolver encounters a zero-hash HashedNode, it returns (nil, nil). +// The iterator should treat this as Empty and continue rather than panicking. +func TestIteratorHashedNodeNilData(t *testing.T) { + tr := makeTrie(t, [][2]common.Hash{ + {common.HexToHash("0000000000000000000000000000000000000000000000000000000000000001"), oneKey}, + {common.HexToHash("8000000000000000000000000000000000000000000000000000000000000001"), oneKey}, + }) + + root, ok := tr.root.(*InternalNode) + if !ok { + t.Fatalf("expected InternalNode root, got %T", tr.root) + } + + // Replace right child with a zero-hash HashedNode. nodeResolver + // short-circuits on common.Hash{} and returns (nil, nil), which + // triggers the nil-data guard in the iterator. + root.right = HashedNode(common.Hash{}) + + // Should not panic; the zero-hash right child should be treated as Empty. + if leaves := countLeaves(t, tr); leaves != 1 { + t.Fatalf("expected 1 leaf (zero-hash right node skipped), got %d", leaves) + } +} + +// TestIteratorManyStems verifies iteration correctness with many stems, +// producing a deep tree structure. +func TestIteratorManyStems(t *testing.T) { + entries := make([][2]common.Hash, 16) + for i := range entries { + var key common.Hash + key[0] = byte(i << 4) + key[31] = 1 + entries[i] = [2]common.Hash{key, oneKey} + } + tr := makeTrie(t, entries) + if leaves := countLeaves(t, tr); leaves != 16 { + t.Fatalf("expected 16 leaves, got %d", leaves) + } +} + +// TestIteratorDeepTree verifies iteration over a trie with stems that share +// a long common prefix, producing many intermediate InternalNodes. +func TestIteratorDeepTree(t *testing.T) { + tr := makeTrie(t, [][2]common.Hash{ + {common.HexToHash("0000000000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0"), oneKey}, + {common.HexToHash("0000000000E00000000000000000000000000000000000000000000000000000"), twoKey}, + }) + if leaves := countLeaves(t, tr); leaves != 2 { + t.Fatalf("expected 2 leaves in deep tree, got %d", leaves) + } +} + +// TestIteratorNodeCount verifies the total number of Next(true) calls +// for a known tree structure. +func TestIteratorNodeCount(t *testing.T) { + tr := makeTrie(t, [][2]common.Hash{ + {common.HexToHash("0000000000000000000000000000000000000000000000000000000000000001"), oneKey}, + {common.HexToHash("8000000000000000000000000000000000000000000000000000000000000001"), oneKey}, + }) + + it, err := newBinaryNodeIterator(tr, nil) + if err != nil { + t.Fatal(err) + } + + total := 0 + leaves := 0 + for it.Next(true) { + total++ + if it.Leaf() { + leaves++ + } + } + if leaves != 2 { + t.Fatalf("expected 2 leaves, got %d", leaves) + } + // Root(InternalNode) + leaf1 (from left StemNode) + leaf2 (from right StemNode) = 3 + // StemNodes are not returned as separate steps; the iterator advances + // directly to the first non-nil value within the stem. + if total != 3 { + t.Fatalf("expected 3 total nodes, got %d", total) + } +} From e23b0cbc2254b0af4a5d38e6295621de52689bc0 Mon Sep 17 00:00:00 2001 From: Lessa <230214854+adblesss@users.noreply.github.com> Date: Mon, 23 Mar 2026 09:54:30 -0400 Subject: [PATCH 142/161] core/rawdb: fix key length check for num -- hash in db inspect (#34074) Fix incorrect key length calculation for `numHashPairings` in `InspectDatabase`, introduced in #34000. The `headerHashKey` format is `headerPrefix + num + headerHashSuffix` (10 bytes), but the check incorrectly included `common.HashLength`, expecting 42 bytes. This caused all number -- hash entries to be misclassified as unaccounted data. --- core/rawdb/database.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/rawdb/database.go b/core/rawdb/database.go index a13afb9c0e..945fd9097d 100644 --- a/core/rawdb/database.go +++ b/core/rawdb/database.go @@ -480,7 +480,7 @@ func InspectDatabase(db ethdb.Database, keyPrefix, keyStart []byte) error { receipts.add(size) case bytes.HasPrefix(key, headerPrefix) && bytes.HasSuffix(key, headerTDSuffix) && len(key) == (len(headerPrefix)+8+common.HashLength+len(headerTDSuffix)): tds.add(size) - case bytes.HasPrefix(key, headerPrefix) && bytes.HasSuffix(key, headerHashSuffix) && len(key) == (len(headerPrefix)+8+common.HashLength+len(headerHashSuffix)): + case bytes.HasPrefix(key, headerPrefix) && bytes.HasSuffix(key, headerHashSuffix) && len(key) == (len(headerPrefix)+8+len(headerHashSuffix)): numHashPairings.add(size) case bytes.HasPrefix(key, headerNumberPrefix) && len(key) == (len(headerNumberPrefix)+common.HashLength): hashNumPairings.add(size) From a61e5ccb1e343d9c28b85ba6851e7829517b98b1 Mon Sep 17 00:00:00 2001 From: Daniel Liu <139250065@qq.com> Date: Mon, 23 Mar 2026 22:10:32 +0800 Subject: [PATCH 143/161] core, internal/ethapi: fix incorrect max-initcode RPC error mapping (#34067) Problem: The max-initcode sentinel moved from core to vm, but RPC pre-check mapping still depended on core.ErrMaxInitCodeSizeExceeded. This mismatch could surface inconsistent error mapping when oversized initcode is submitted through JSON-RPC. Solution: - Remove core.ErrMaxInitCodeSizeExceeded from the core pre-check error set. - Map max-initcode validation errors in RPC from vm.ErrMaxInitCodeSizeExceeded. - Keep the RPC error code mapping unchanged (-38025). Impact: - Restores consistent max-initcode error mapping after the sentinel move. - Preserves existing JSON-RPC client expectations for error code -38025. - No consensus, state, or protocol behavior changes. --- core/error.go | 4 ---- internal/ethapi/errors.go | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/core/error.go b/core/error.go index 4610842cee..7dd5b8a432 100644 --- a/core/error.go +++ b/core/error.go @@ -66,10 +66,6 @@ var ( // have enough funds for transfer(topmost call only). ErrInsufficientFundsForTransfer = errors.New("insufficient funds for transfer") - // ErrMaxInitCodeSizeExceeded is returned if creation transaction provides the init code bigger - // than init code size limit. - ErrMaxInitCodeSizeExceeded = errors.New("max initcode size exceeded") - // ErrInsufficientBalanceWitness is returned if the transaction sender has enough // funds to cover the transfer, but not enough to pay for witness access/modification // costs for the transaction diff --git a/internal/ethapi/errors.go b/internal/ethapi/errors.go index e406c36d6c..cc79af6f3c 100644 --- a/internal/ethapi/errors.go +++ b/internal/ethapi/errors.go @@ -141,7 +141,7 @@ func txValidationError(err error) *invalidTxError { return &invalidTxError{Message: err.Error(), Code: errCodeIntrinsicGas} case errors.Is(err, core.ErrInsufficientFundsForTransfer): return &invalidTxError{Message: err.Error(), Code: errCodeInsufficientFunds} - case errors.Is(err, core.ErrMaxInitCodeSizeExceeded): + case errors.Is(err, vm.ErrMaxInitCodeSizeExceeded): return &invalidTxError{Message: err.Error(), Code: errCodeMaxInitCodeSizeExceeded} } return &invalidTxError{ From b87340a856573ab5f15577acc1dc563702e4fe14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felf=C3=B6ldi=20Zsolt?= Date: Mon, 23 Mar 2026 15:29:53 +0100 Subject: [PATCH 144/161] core, core/vm: implement EIP-7708 (#33645) This PR implements EIP-7708 according to the latest "rough consensus": https://github.com/ethereum/EIPs/pull/9003 https://github.com/etan-status/EIPs/blob/fl-ethlogs/EIPS/eip-7708.md --------- Co-authored-by: Jared Wasinger Co-authored-by: raxhvl Co-authored-by: Gary Rong --- core/eth_transfer_logs_test.go | 169 +++++++++++++++++++++++++++++++++ core/evm.go | 6 +- core/state/statedb.go | 35 +++++++ core/state/statedb_hooked.go | 4 + core/state_transition.go | 3 + core/types/log.go | 31 ++++++ core/vm/evm.go | 7 +- core/vm/gas_table_test.go | 4 +- core/vm/instructions.go | 10 +- core/vm/interface.go | 1 + core/vm/interpreter_test.go | 2 +- params/protocol_params.go | 8 ++ 12 files changed, 270 insertions(+), 10 deletions(-) create mode 100644 core/eth_transfer_logs_test.go diff --git a/core/eth_transfer_logs_test.go b/core/eth_transfer_logs_test.go new file mode 100644 index 0000000000..815b56b588 --- /dev/null +++ b/core/eth_transfer_logs_test.go @@ -0,0 +1,169 @@ +// Copyright 2026 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +package core + +import ( + "encoding/binary" + "math/big" + "reflect" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/consensus/beacon" + "github.com/ethereum/go-ethereum/consensus/ethash" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/params" +) + +var ethTransferTestCode = common.FromHex("6080604052600436106100345760003560e01c8063574ffc311461003957806366e41cb714610090578063f8a8fd6d1461009a575b600080fd5b34801561004557600080fd5b5061004e6100a4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100986100ac565b005b6100a26100f5565b005b63deadbeef81565b7f38e80b5c85ba49b7280ccc8f22548faa62ae30d5a008a1b168fba5f47f5d1ee560405160405180910390a1631234567873ffffffffffffffffffffffffffffffffffffffff16ff5b7f24ec1d3ff24c2f6ff210738839dbc339cd45a5294d85c79361016243157aae7b60405160405180910390a163deadbeef73ffffffffffffffffffffffffffffffffffffffff166002348161014657fe5b046040516024016040516020818303038152906040527f66e41cb7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106101fd57805182526020820191506020810190506020830392506101da565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461025f576040519150601f19603f3d011682016040523d82523d6000602084013e610264565b606091505b50505056fea265627a7a723158202cce817a434785d8560c200762f972d453ccd30694481be7545f9035a512826364736f6c63430005100032") + +/* +pragma solidity >=0.4.22 <0.6.0; + +contract TestLogs { + + address public constant target_contract = 0x00000000000000000000000000000000DeaDBeef; + address payable constant selfdestruct_addr = 0x0000000000000000000000000000000012345678; + + event Response(bool success, bytes data); + event TestEvent(); + event TestEvent2(); + + function test() public payable { + emit TestEvent(); + target_contract.call.value(msg.value/2)(abi.encodeWithSignature("test2()")); + } + function test2() public payable { + emit TestEvent2(); + selfdestruct(selfdestruct_addr); + } +} +*/ + +// TestEthTransferLogs tests EIP-7708 ETH transfer log output by simulating a +// scenario including transaction, CALL and SELFDESTRUCT value transfers, and +// also "ordinary" logs emitted. The same scenario is also tested with no value +// transferred. +func TestEthTransferLogs(t *testing.T) { + testEthTransferLogs(t, 1_000_000_000) + testEthTransferLogs(t, 0) +} + +func testEthTransferLogs(t *testing.T, value uint64) { + var ( + key1, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + addr1 = crypto.PubkeyToAddress(key1.PublicKey) + addr2 = common.HexToAddress("cafebabe") // caller + addr3 = common.HexToAddress("deadbeef") // callee + addr4 = common.HexToAddress("12345678") // selfdestruct target + testEvent = crypto.Keccak256Hash([]byte("TestEvent()")) + testEvent2 = crypto.Keccak256Hash([]byte("TestEvent2()")) + config = *params.MergedTestChainConfig + signer = types.LatestSigner(&config) + engine = beacon.New(ethash.NewFaker()) + ) + + //TODO remove this hacky config initialization when final Amsterdam config is available + config.AmsterdamTime = new(uint64) + blobConfig := *config.BlobScheduleConfig + blobConfig.Amsterdam = blobConfig.Osaka + config.BlobScheduleConfig = &blobConfig + + gspec := &Genesis{ + Config: &config, + Alloc: types.GenesisAlloc{ + addr1: {Balance: newGwei(1000000000)}, + addr2: {Code: ethTransferTestCode}, + addr3: {Code: ethTransferTestCode}, + }, + } + _, blocks, receipts := GenerateChainWithGenesis(gspec, engine, 1, func(i int, b *BlockGen) { + tx := types.MustSignNewTx(key1, signer, &types.DynamicFeeTx{ + ChainID: gspec.Config.ChainID, + Nonce: 0, + To: &addr2, + Gas: 500_000, + GasFeeCap: newGwei(5), + GasTipCap: newGwei(5), + Value: big.NewInt(int64(value)), + Data: common.FromHex("f8a8fd6d"), + }) + b.AddTx(tx) + }) + + blockHash := blocks[0].Hash() + txHash := blocks[0].Transactions()[0].Hash() + addr2hash := func(addr common.Address) (hash common.Hash) { + copy(hash[12:], addr[:]) + return + } + u256 := func(amount uint64) []byte { + data := make([]byte, 32) + binary.BigEndian.PutUint64(data[24:], amount) + return data + } + + var expLogs = []*types.Log{ + { + Address: params.SystemAddress, + Topics: []common.Hash{params.EthTransferLogEvent, addr2hash(addr1), addr2hash(addr2)}, + Data: u256(value), + }, + { + Address: addr2, + Topics: []common.Hash{testEvent}, + Data: nil, + }, + { + Address: params.SystemAddress, + Topics: []common.Hash{params.EthTransferLogEvent, addr2hash(addr2), addr2hash(addr3)}, + Data: u256(value / 2), + }, + { + Address: addr3, + Topics: []common.Hash{testEvent2}, + Data: nil, + }, + { + Address: params.SystemAddress, + Topics: []common.Hash{params.EthTransferLogEvent, addr2hash(addr3), addr2hash(addr4)}, + Data: u256(value / 2), + }, + } + if value == 0 { + // no ETH transfer logs expected with zero value + expLogs = []*types.Log{expLogs[1], expLogs[3]} + } + for i, log := range expLogs { + log.BlockNumber = 1 + log.BlockHash = blockHash + log.BlockTimestamp = 10 + log.TxIndex = 0 + log.TxHash = txHash + log.Index = uint(i) + } + + if len(expLogs) != len(receipts[0][0].Logs) { + t.Fatalf("Incorrect number of logs (expected: %d, got: %d)", len(expLogs), len(receipts[0][0].Logs)) + } + for i, log := range receipts[0][0].Logs { + if !reflect.DeepEqual(expLogs[i], log) { + t.Fatalf("Incorrect log at index %d (expected: %v, got: %v)", i, expLogs[i], log) + } + } +} diff --git a/core/evm.go b/core/evm.go index 7430c0e21f..818b23bee5 100644 --- a/core/evm.go +++ b/core/evm.go @@ -25,6 +25,7 @@ import ( "github.com/ethereum/go-ethereum/core/tracing" "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/core/vm" + "github.com/ethereum/go-ethereum/params" "github.com/holiman/uint256" ) @@ -138,7 +139,10 @@ func CanTransfer(db vm.StateDB, addr common.Address, amount *uint256.Int) bool { } // Transfer subtracts amount from sender and adds amount to recipient using the given Db -func Transfer(db vm.StateDB, sender, recipient common.Address, amount *uint256.Int) { +func Transfer(db vm.StateDB, sender, recipient common.Address, amount *uint256.Int, rules *params.Rules) { db.SubBalance(sender, amount, tracing.BalanceChangeTransfer) db.AddBalance(recipient, amount, tracing.BalanceChangeTransfer) + if rules.IsAmsterdam && !amount.IsZero() && sender != recipient { + db.AddLog(types.EthTransferLog(sender, recipient, amount)) + } } diff --git a/core/state/statedb.go b/core/state/statedb.go index 02622f0bd6..59ad3cdfef 100644 --- a/core/state/statedb.go +++ b/core/state/statedb.go @@ -743,6 +743,41 @@ func (s *StateDB) GetRefund() uint64 { return s.refund } +type removedAccountWithBalance struct { + address common.Address + balance *uint256.Int +} + +// EmitLogsForBurnAccounts emits the eth burn logs for accounts scheduled for +// removal which still have positive balance. The purpose of this function is +// to handle a corner case of EIP-7708 where a self-destructed account might +// still receive funds between sending/burning its previous balance and actual +// removal. In this case the burning of these remaining balances still need to +// be logged. +// Specification EIP-7708: https://eips.ethereum.org/EIPS/eip-7708 +// +// This function should only be invoked at the transaction boundary, specifically +// before the Finalise. +func (s *StateDB) EmitLogsForBurnAccounts() { + var list []removedAccountWithBalance + for addr := range s.journal.dirties { + if obj, exist := s.stateObjects[addr]; exist && obj.selfDestructed && !obj.Balance().IsZero() { + list = append(list, removedAccountWithBalance{ + address: obj.address, + balance: obj.Balance(), + }) + } + } + if list != nil { + sort.Slice(list, func(i, j int) bool { + return list[i].address.Cmp(list[j].address) < 0 + }) + } + for _, acct := range list { + s.AddLog(types.EthBurnLog(acct.address, acct.balance)) + } +} + // Finalise finalises the state by removing the destructed objects and clears // the journal as well as the refunds. Finalise, however, will not push any updates // into the tries just yet. Only IntermediateRoot or Commit will do that. diff --git a/core/state/statedb_hooked.go b/core/state/statedb_hooked.go index 48794a3f41..8c217fba48 100644 --- a/core/state/statedb_hooked.go +++ b/core/state/statedb_hooked.go @@ -229,6 +229,10 @@ func (s *hookedStateDB) AddLog(log *types.Log) { } } +func (s *hookedStateDB) EmitLogsForBurnAccounts() { + s.inner.EmitLogsForBurnAccounts() +} + func (s *hookedStateDB) Finalise(deleteEmptyObjects bool) { if s.hooks.OnBalanceChange == nil && s.hooks.OnNonceChangeV2 == nil && s.hooks.OnNonceChange == nil && s.hooks.OnCodeChangeV2 == nil && s.hooks.OnCodeChange == nil { // Short circuit if no relevant hooks are set. diff --git a/core/state_transition.go b/core/state_transition.go index 6a40b4f7ab..52375bedaa 100644 --- a/core/state_transition.go +++ b/core/state_transition.go @@ -583,6 +583,9 @@ func (st *stateTransition) execute() (*ExecutionResult, error) { st.evm.AccessEvents.AddAccount(st.evm.Context.Coinbase, true, math.MaxUint64) } } + if rules.IsAmsterdam { + st.evm.StateDB.EmitLogsForBurnAccounts() + } return &ExecutionResult{ UsedGas: st.gasUsed(), MaxUsedGas: peakGasUsed, diff --git a/core/types/log.go b/core/types/log.go index f0e6a3a745..487ca57b5a 100644 --- a/core/types/log.go +++ b/core/types/log.go @@ -19,6 +19,8 @@ package types import ( "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/params" + "github.com/holiman/uint256" ) //go:generate go run ../../rlp/rlpgen -type Log -out gen_log_rlp.go @@ -62,3 +64,32 @@ type logMarshaling struct { BlockTimestamp hexutil.Uint64 Index hexutil.Uint } + +// EthTransferLog creates and ETH transfer log according to EIP-7708. +// Specification: https://eips.ethereum.org/EIPS/eip-7708 +func EthTransferLog(from, to common.Address, amount *uint256.Int) *Log { + amount32 := amount.Bytes32() + return &Log{ + Address: params.SystemAddress, + Topics: []common.Hash{ + params.EthTransferLogEvent, + common.BytesToHash(from.Bytes()), + common.BytesToHash(to.Bytes()), + }, + Data: amount32[:], + } +} + +// EthBurnLog creates an ETH burn log according to EIP-7708. +// Specification: https://eips.ethereum.org/EIPS/eip-7708 +func EthBurnLog(from common.Address, amount *uint256.Int) *Log { + amount32 := amount.Bytes32() + return &Log{ + Address: params.SystemAddress, + Topics: []common.Hash{ + params.EthBurnLogEvent, + common.BytesToHash(from.Bytes()), + }, + Data: amount32[:], + } +} diff --git a/core/vm/evm.go b/core/vm/evm.go index 5897dbd265..36494de2a8 100644 --- a/core/vm/evm.go +++ b/core/vm/evm.go @@ -35,7 +35,7 @@ type ( // CanTransferFunc is the signature of a transfer guard function CanTransferFunc func(StateDB, common.Address, *uint256.Int) bool // TransferFunc is the signature of a transfer function - TransferFunc func(StateDB, common.Address, common.Address, *uint256.Int) + TransferFunc func(StateDB, common.Address, common.Address, *uint256.Int, *params.Rules) // GetHashFunc returns the n'th block hash in the blockchain // and is used by the BLOCKHASH EVM op code. GetHashFunc func(uint64) common.Hash @@ -283,8 +283,9 @@ func (evm *EVM) Call(caller common.Address, addr common.Address, input []byte, g // Calling this is required even for zero-value transfers, // to ensure the state clearing mechanism is applied. if !syscall { - evm.Context.Transfer(evm.StateDB, caller, addr, value) + evm.Context.Transfer(evm.StateDB, caller, addr, value, &evm.chainRules) } + if isPrecompile { var stateDB StateDB if evm.chainRules.IsAmsterdam { @@ -567,7 +568,7 @@ func (evm *EVM) create(caller common.Address, code []byte, gas uint64, value *ui } gas = gas - consumed } - evm.Context.Transfer(evm.StateDB, caller, address, value) + evm.Context.Transfer(evm.StateDB, caller, address, value, &evm.chainRules) // Initialise a new contract and set the code that is to be used by the EVM. // The contract is a scoped environment for this execution context only. diff --git a/core/vm/gas_table_test.go b/core/vm/gas_table_test.go index 436cc47f2e..e9e56038dd 100644 --- a/core/vm/gas_table_test.go +++ b/core/vm/gas_table_test.go @@ -94,7 +94,7 @@ func TestEIP2200(t *testing.T) { vmctx := BlockContext{ CanTransfer: func(StateDB, common.Address, *uint256.Int) bool { return true }, - Transfer: func(StateDB, common.Address, common.Address, *uint256.Int) {}, + Transfer: func(StateDB, common.Address, common.Address, *uint256.Int, *params.Rules) {}, } evm := NewEVM(vmctx, statedb, params.AllEthashProtocolChanges, Config{ExtraEips: []int{2200}}) @@ -144,7 +144,7 @@ func TestCreateGas(t *testing.T) { statedb.Finalise(true) vmctx := BlockContext{ CanTransfer: func(StateDB, common.Address, *uint256.Int) bool { return true }, - Transfer: func(StateDB, common.Address, common.Address, *uint256.Int) {}, + Transfer: func(StateDB, common.Address, common.Address, *uint256.Int, *params.Rules) {}, BlockNumber: big.NewInt(0), } config := Config{} diff --git a/core/vm/instructions.go b/core/vm/instructions.go index 4e4a33acda..a5fa11e307 100644 --- a/core/vm/instructions.go +++ b/core/vm/instructions.go @@ -934,6 +934,13 @@ func opSelfdestruct6780(pc *uint64, evm *EVM, scope *ScopeContext) ([]byte, erro evm.StateDB.SubBalance(this, balance, tracing.BalanceDecreaseSelfdestruct) evm.StateDB.AddBalance(beneficiary, balance, tracing.BalanceIncreaseSelfdestruct) } + if evm.chainRules.IsAmsterdam && !balance.IsZero() { + if this != beneficiary { + evm.StateDB.AddLog(types.EthTransferLog(this, beneficiary, balance)) + } else if newContract { + evm.StateDB.AddLog(types.EthBurnLog(this, balance)) + } + } if tracer := evm.Config.Tracer; tracer != nil { if tracer.OnEnter != nil { @@ -1086,9 +1093,6 @@ func makeLog(size int) executionFunc { Address: scope.Contract.Address(), Topics: topics, Data: d, - // This is a non-consensus field, but assigned here because - // core/state doesn't know the current block number. - BlockNumber: evm.Context.BlockNumber.Uint64(), }) return nil, nil diff --git a/core/vm/interface.go b/core/vm/interface.go index e285b18b0f..6a93846ac5 100644 --- a/core/vm/interface.go +++ b/core/vm/interface.go @@ -87,6 +87,7 @@ type StateDB interface { Snapshot() int AddLog(*types.Log) + EmitLogsForBurnAccounts() AddPreimage(common.Hash, []byte) Witness() *stateless.Witness diff --git a/core/vm/interpreter_test.go b/core/vm/interpreter_test.go index 79531f78d2..28df8546b5 100644 --- a/core/vm/interpreter_test.go +++ b/core/vm/interpreter_test.go @@ -40,7 +40,7 @@ var loopInterruptTests = []string{ func TestLoopInterrupt(t *testing.T) { address := common.BytesToAddress([]byte("contract")) vmctx := BlockContext{ - Transfer: func(StateDB, common.Address, common.Address, *uint256.Int) {}, + Transfer: func(StateDB, common.Address, common.Address, *uint256.Int, *params.Rules) {}, } for i, tt := range loopInterruptTests { diff --git a/params/protocol_params.go b/params/protocol_params.go index cebf5008c8..652574287c 100644 --- a/params/protocol_params.go +++ b/params/protocol_params.go @@ -222,3 +222,11 @@ var ( ConsolidationQueueAddress = common.HexToAddress("0x0000BBdDc7CE488642fb579F8B00f3a590007251") ConsolidationQueueCode = common.FromHex("3373fffffffffffffffffffffffffffffffffffffffe1460d35760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1461019a57600182026001905f5b5f82111560685781019083028483029004916001019190604d565b9093900492505050366060146088573661019a573461019a575f5260205ff35b341061019a57600154600101600155600354806004026004013381556001015f358155600101602035815560010160403590553360601b5f5260605f60143760745fa0600101600355005b6003546002548082038060021160e7575060025b5f5b8181146101295782810160040260040181607402815460601b815260140181600101548152602001816002015481526020019060030154905260010160e9565b910180921461013b5790600255610146565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff141561017357505f5b6001546001828201116101885750505f61018e565b01600190035b5f555f6001556074025ff35b5f5ffd") ) + +// System log events. +var ( + // EIP-7708 - System logs emitted for ETH transfer and burn + EthTransferLogEvent = common.HexToHash("0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef") // keccak256('Transfer(address,address,uint256)') + EthBurnLogEvent = common.HexToHash("0xcc16f5dbb4873280815c1ee09dbd06736cffcc184412cf7a71a0fdb75d397ca5") // keccak256('Burn(address,uint256)') + +) From 745b0a8c09ad9d0866da67403ffa99d11ba70ec3 Mon Sep 17 00:00:00 2001 From: vickkkkkyy Date: Tue, 24 Mar 2026 01:14:28 +0800 Subject: [PATCH 145/161] cmd/utils: guard SampleRatio flag with IsSet check (#34062) In `setOpenTelemetry`, all other fields (Enabled, Endpoint, AuthUser, AuthPassword, InstanceID, Tags) are guarded by `ctx.IsSet()` checks, so they only override the config file when explicitly set via CLI flags. `SampleRatio` was the only field missing this guard, causing the flag default (`1.0`) to always overwrite whatever was loaded from the config file. - Fix OpenTelemetry `SampleRatio` being unconditionally overwritten by the CLI flag default value (`1.0`), even when the user did not pass `--rpc.telemetry.sample-ratio` - This caused config file values for `SampleRatio` to be silently ignored --- cmd/utils/flags.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index 3a0bcc6b05..c1284044eb 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -1584,7 +1584,9 @@ func setOpenTelemetry(ctx *cli.Context, cfg *node.Config) { if ctx.IsSet(RPCTelemetryTagsFlag.Name) { tcfg.Tags = ctx.String(RPCTelemetryTagsFlag.Name) } - tcfg.SampleRatio = ctx.Float64(RPCTelemetrySampleRatioFlag.Name) + if ctx.IsSet(RPCTelemetrySampleRatioFlag.Name) { + tcfg.SampleRatio = ctx.Float64(RPCTelemetrySampleRatioFlag.Name) + } if tcfg.Endpoint != "" && !tcfg.Enabled { log.Warn(fmt.Sprintf("OpenTelemetry endpoint configured but telemetry is not enabled, use --%s to enable.", RPCTelemetryFlag.Name)) From e951bcbff729b0eae1e1743c2bbb27064bbaf165 Mon Sep 17 00:00:00 2001 From: Csaba Kiraly Date: Tue, 24 Mar 2026 14:57:11 +0100 Subject: [PATCH 146/161] cmd/devp2p: fix discv5 PingMultiIP test session key mismatch (#34031) conn.read() used the actual UDP packet source address for codec.Decode(), but conn.write() always used tc.remoteAddr. When the remote node is reachable via multiple Docker networks, the packet source IP differs from tc.remoteAddr, causing a session key lookup failure in the codec. Use tc.remoteAddr.String() consistently in conn.read() so the session cache key matches what was used during Encode. --- cmd/devp2p/internal/v5test/framework.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/cmd/devp2p/internal/v5test/framework.go b/cmd/devp2p/internal/v5test/framework.go index 92a5048150..acab1eef79 100644 --- a/cmd/devp2p/internal/v5test/framework.go +++ b/cmd/devp2p/internal/v5test/framework.go @@ -218,11 +218,15 @@ func (tc *conn) read(c net.PacketConn) v5wire.Packet { if err := c.SetReadDeadline(time.Now().Add(waitTime)); err != nil { return &readError{err} } - n, fromAddr, err := c.ReadFrom(buf) + n, _, err := c.ReadFrom(buf) if err != nil { return &readError{err} } - _, _, p, err := tc.codec.Decode(buf[:n], fromAddr.String()) + // Always use tc.remoteAddr for session lookup. The actual source address of + // the packet may differ from tc.remoteAddr when the remote node is reachable + // via multiple networks (e.g. Docker bridge vs. overlay), but the codec's + // session cache is keyed by the address used during Encode. + _, _, p, err := tc.codec.Decode(buf[:n], tc.remoteAddr.String()) if err != nil { return &readError{err} } From 8f9061f937e8fe0cbd45f7416073fb03bd321667 Mon Sep 17 00:00:00 2001 From: Andrew Davis <1709934+Savid@users.noreply.github.com> Date: Wed, 25 Mar 2026 06:47:18 +1000 Subject: [PATCH 147/161] cmd/utils: optimize history import with batched insertion (#33894) Improve speed of import-history command by two orders of magnitude. Rework ImportHistory to collect up to 2500 blocks per flush instead of flushing after each block, reducing database commit overhead. --------- Co-authored-by: Sina Mahmoodi --- cmd/utils/cmd.go | 61 ++++++++++++++++++++++++++++++++---------------- 1 file changed, 41 insertions(+), 20 deletions(-) diff --git a/cmd/utils/cmd.go b/cmd/utils/cmd.go index 995724e6fc..e490f613b3 100644 --- a/cmd/utils/cmd.go +++ b/cmd/utils/cmd.go @@ -274,40 +274,66 @@ func ImportHistory(chain *core.BlockChain, dir string, network string, from func reported = time.Now() imported = 0 h = sha256.New() - scratch = bytes.NewBuffer(nil) + buf = bytes.NewBuffer(nil) ) for i, file := range entries { err := func() error { path := filepath.Join(dir, file) - // validate against checksum file in directory + // Validate against checksum file in directory. f, err := os.Open(path) if err != nil { return fmt.Errorf("open %s: %w", path, err) } defer f.Close() + if _, err := io.Copy(h, f); err != nil { return fmt.Errorf("checksum %s: %w", path, err) } - got := common.BytesToHash(h.Sum(scratch.Bytes()[:])).Hex() - want := checksums[i] + got := common.BytesToHash(h.Sum(buf.Bytes()[:])).Hex() h.Reset() - scratch.Reset() - - if got != want { - return fmt.Errorf("%s checksum mismatch: have %s want %s", file, got, want) + buf.Reset() + if got != checksums[i] { + return fmt.Errorf("%s checksum mismatch: have %s want %s", file, got, checksums[i]) } // Import all block data from Era1. e, err := from(f) if err != nil { return fmt.Errorf("error opening era: %w", err) } + defer e.Close() + it, err := e.Iterator() if err != nil { return fmt.Errorf("error creating iterator: %w", err) } + var ( + blocks = make([]*types.Block, 0, importBatchSize) + receiptsList = make([]types.Receipts, 0, importBatchSize) + flush = func() error { + if len(blocks) == 0 { + return nil + } + enc := types.EncodeBlockReceiptLists(receiptsList) + if _, err := chain.InsertReceiptChain(blocks, enc, math.MaxUint64); err != nil { + return fmt.Errorf("error inserting blocks %d-%d: %w", + blocks[0].NumberU64(), blocks[len(blocks)-1].NumberU64(), err) + } + imported += len(blocks) + if time.Since(reported) >= 8*time.Second { + head := blocks[len(blocks)-1].NumberU64() + log.Info("Importing Era files", "head", head, "imported", imported, + "elapsed", common.PrettyDuration(time.Since(start))) + imported = 0 + reported = time.Now() + } + blocks = blocks[:0] + receiptsList = receiptsList[:0] + return nil + } + ) for it.Next() { block, err := it.Block() if err != nil { @@ -320,23 +346,18 @@ func ImportHistory(chain *core.BlockChain, dir string, network string, from func if err != nil { return fmt.Errorf("error reading receipts %d: %w", it.Number(), err) } - enc := types.EncodeBlockReceiptLists([]types.Receipts{receipts}) - if _, err := chain.InsertReceiptChain([]*types.Block{block}, enc, math.MaxUint64); err != nil { - return fmt.Errorf("error inserting body %d: %w", it.Number(), err) - } - imported++ - - if time.Since(reported) >= 8*time.Second { - log.Info("Importing Era files", "head", it.Number(), "imported", imported, - "elapsed", common.PrettyDuration(time.Since(start))) - imported = 0 - reported = time.Now() + blocks = append(blocks, block) + receiptsList = append(receiptsList, receipts) + if len(blocks) == importBatchSize { + if err := flush(); err != nil { + return err + } } } if err := it.Error(); err != nil { return err } - return nil + return flush() }() if err != nil { return err From 5d0e18f7757d811db2cae9dac7ac41d02bc59ef8 Mon Sep 17 00:00:00 2001 From: bigbear <155267841+aso20455@users.noreply.github.com> Date: Wed, 25 Mar 2026 09:16:09 +0100 Subject: [PATCH 148/161] core/tracing: fix NonceChangeAuthorization comment (#34085) Comment referenced NonceChangeTransaction which doesn't exist, should be NonceChangeAuthorization. --- core/tracing/hooks.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/tracing/hooks.go b/core/tracing/hooks.go index 6d0131ce70..de63689bc5 100644 --- a/core/tracing/hooks.go +++ b/core/tracing/hooks.go @@ -426,7 +426,7 @@ const ( // NonceChangeNewContract is the nonce change of a newly created contract. NonceChangeNewContract NonceChangeReason = 4 - // NonceChangeTransaction is the nonce change due to a EIP-7702 authorization. + // NonceChangeAuthorization is the nonce change due to a EIP-7702 authorization. NonceChangeAuthorization NonceChangeReason = 5 // NonceChangeRevert is emitted when the nonce is reverted back to a previous value due to call failure. From 8a3a309fa97bff7252da3e7e8cac47d024d2e281 Mon Sep 17 00:00:00 2001 From: Lessa <230214854+adblesss@users.noreply.github.com> Date: Thu, 26 Mar 2026 09:02:31 -0400 Subject: [PATCH 149/161] core/txpool/legacypool: remove redundant nil check in Get (#34092) Leftover from d40a255 when return type changed from *txpool.Transaction to *types.Transaction. --- core/txpool/legacypool/legacypool.go | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/core/txpool/legacypool/legacypool.go b/core/txpool/legacypool/legacypool.go index 25c4b13166..d29b71ebc2 100644 --- a/core/txpool/legacypool/legacypool.go +++ b/core/txpool/legacypool/legacypool.go @@ -998,11 +998,7 @@ func (pool *LegacyPool) Status(hash common.Hash) txpool.TxStatus { // Get returns a transaction if it is contained in the pool and nil otherwise. func (pool *LegacyPool) Get(hash common.Hash) *types.Transaction { - tx := pool.get(hash) - if tx == nil { - return nil - } - return tx + return pool.get(hash) } // get returns a transaction if it is contained in the pool and nil otherwise. From 1b3b028d1da4aedcb480693e58910712abe20009 Mon Sep 17 00:00:00 2001 From: Daniel Liu <139250065@qq.com> Date: Fri, 27 Mar 2026 09:41:56 +0800 Subject: [PATCH 150/161] miner: fix txFitsSize comment (#34100) Rename the comment so it matches the helper name. --- miner/worker.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/miner/worker.go b/miner/worker.go index e82f5f6e55..1260662fe7 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -75,7 +75,7 @@ type environment struct { witness *stateless.Witness } -// txFits reports whether the transaction fits into the block size limit. +// txFitsSize reports whether the transaction fits into the block size limit. func (env *environment) txFitsSize(tx *types.Transaction) bool { return env.size+tx.Size() < params.MaxBlockSize-maxBlockSizeBufferZone } From acdd13971705c767330bdfbd4511b4d1e53580fd Mon Sep 17 00:00:00 2001 From: jwasinger Date: Thu, 26 Mar 2026 21:45:49 -0400 Subject: [PATCH 151/161] miner: set slot number when building test payload (#34094) --- miner/payload_building.go | 1 + 1 file changed, 1 insertion(+) diff --git a/miner/payload_building.go b/miner/payload_building.go index 97b4d0c509..ccaabec373 100644 --- a/miner/payload_building.go +++ b/miner/payload_building.go @@ -350,6 +350,7 @@ func (miner *Miner) BuildTestingPayload(args *BuildPayloadArgs, transactions []* random: args.Random, withdrawals: args.Withdrawals, beaconRoot: args.BeaconRoot, + slotNum: args.SlotNum, noTxs: empty, forceOverrides: true, overrideExtraData: extraData, From c3467dd8b5e2cf151744b04b62888649ee21f52d Mon Sep 17 00:00:00 2001 From: rjl493456442 Date: Sat, 28 Mar 2026 00:06:46 +0800 Subject: [PATCH 152/161] core, miner, trie: relocate witness stats (#34106) This PR relocates the witness statistics into the witness itself, making it more self-contained. --- core/blockchain.go | 16 +++++----------- core/state/statedb.go | 38 ++++++++------------------------------ core/stateless/stats.go | 7 +++++++ core/stateless/witness.go | 36 +++++++++++++++++++++++++++++------- miner/worker.go | 4 ++-- trie/levelstats.go | 12 ++++++++++++ 6 files changed, 63 insertions(+), 50 deletions(-) diff --git a/core/blockchain.go b/core/blockchain.go index 1b45a5ac39..35b2d35dc7 100644 --- a/core/blockchain.go +++ b/core/blockchain.go @@ -2170,24 +2170,18 @@ func (bc *BlockChain) ProcessBlock(ctx context.Context, parentRoot common.Hash, // If we are past Byzantium, enable prefetching to pull in trie node paths // while processing transactions. Before Byzantium the prefetcher is mostly // useless due to the intermediate root hashing after each transaction. - var ( - witness *stateless.Witness - witnessStats *stateless.WitnessStats - ) + var witness *stateless.Witness if bc.chainConfig.IsByzantium(block.Number()) { // Generate witnesses either if we're self-testing, or if it's the // only block being inserted. A bit crude, but witnesses are huge, // so we refuse to make an entire chain of them. if config.StatelessSelfValidation || config.MakeWitness { - witness, err = stateless.NewWitness(block.Header(), bc) + witness, err = stateless.NewWitness(block.Header(), bc, config.EnableWitnessStats) if err != nil { return nil, err } - if config.EnableWitnessStats { - witnessStats = stateless.NewWitnessStats() - } } - statedb.StartPrefetcher("chain", witness, witnessStats) + statedb.StartPrefetcher("chain", witness) defer statedb.StopPrefetcher() } @@ -2306,8 +2300,8 @@ func (bc *BlockChain) ProcessBlock(ctx context.Context, parentRoot common.Hash, stats.BlockWrite = time.Since(wstart) - max(statedb.AccountCommits, statedb.StorageCommits) /* concurrent */ - statedb.DatabaseCommits } // Report the collected witness statistics - if witnessStats != nil { - witnessStats.ReportMetrics(block.NumberU64()) + if witness != nil { + witness.ReportMetrics(block.NumberU64()) } elapsed := time.Since(startTime) + 1 // prevent zero division stats.TotalTime = elapsed diff --git a/core/state/statedb.go b/core/state/statedb.go index 59ad3cdfef..93dd7d6488 100644 --- a/core/state/statedb.go +++ b/core/state/statedb.go @@ -135,8 +135,7 @@ type StateDB struct { journal *journal // State witness if cross validation is needed - witness *stateless.Witness - witnessStats *stateless.WitnessStats + witness *stateless.Witness // Measurements gathered during execution for debugging purposes AccountReads time.Duration @@ -201,13 +200,12 @@ func NewWithReader(root common.Hash, db Database, reader Reader) (*StateDB, erro // StartPrefetcher initializes a new trie prefetcher to pull in nodes from the // state trie concurrently while the state is mutated so that when we reach the // commit phase, most of the needed data is already hot. -func (s *StateDB) StartPrefetcher(namespace string, witness *stateless.Witness, witnessStats *stateless.WitnessStats) { +func (s *StateDB) StartPrefetcher(namespace string, witness *stateless.Witness) { // Terminate any previously running prefetcher s.StopPrefetcher() // Enable witness collection if requested s.witness = witness - s.witnessStats = witnessStats // With the switch to the Proof-of-Stake consensus algorithm, block production // rewards are now handled at the consensus layer. Consequently, a block may @@ -913,7 +911,7 @@ func (s *StateDB) IntermediateRoot(deleteEmptyObjects bool) common.Hash { // If witness building is enabled and the state object has a trie, // gather the witnesses for its specific storage trie if s.witness != nil && obj.trie != nil { - s.witness.AddState(obj.trie.Witness()) + s.witness.AddState(obj.trie.Witness(), obj.addrHash()) } return nil }) @@ -930,17 +928,9 @@ func (s *StateDB) IntermediateRoot(deleteEmptyObjects bool) common.Hash { continue } if trie := obj.getPrefetchedTrie(); trie != nil { - witness := trie.Witness() - s.witness.AddState(witness) - if s.witnessStats != nil { - s.witnessStats.Add(witness, obj.addrHash()) - } + s.witness.AddState(trie.Witness(), obj.addrHash()) } else if obj.trie != nil { - witness := obj.trie.Witness() - s.witness.AddState(witness) - if s.witnessStats != nil { - s.witnessStats.Add(witness, obj.addrHash()) - } + s.witness.AddState(obj.trie.Witness(), obj.addrHash()) } } // Pull in only-read and non-destructed trie witnesses @@ -954,17 +944,9 @@ func (s *StateDB) IntermediateRoot(deleteEmptyObjects bool) common.Hash { continue } if trie := obj.getPrefetchedTrie(); trie != nil { - witness := trie.Witness() - s.witness.AddState(witness) - if s.witnessStats != nil { - s.witnessStats.Add(witness, obj.addrHash()) - } + s.witness.AddState(trie.Witness(), obj.addrHash()) } else if obj.trie != nil { - witness := obj.trie.Witness() - s.witness.AddState(witness) - if s.witnessStats != nil { - s.witnessStats.Add(witness, obj.addrHash()) - } + s.witness.AddState(obj.trie.Witness(), obj.addrHash()) } } } @@ -1037,11 +1019,7 @@ func (s *StateDB) IntermediateRoot(deleteEmptyObjects bool) common.Hash { // If witness building is enabled, gather the account trie witness if s.witness != nil { - witness := s.trie.Witness() - s.witness.AddState(witness) - if s.witnessStats != nil { - s.witnessStats.Add(witness, common.Hash{}) - } + s.witness.AddState(s.trie.Witness(), common.Hash{}) } return hash } diff --git a/core/stateless/stats.go b/core/stateless/stats.go index 7f4473a67c..8c05b23d37 100644 --- a/core/stateless/stats.go +++ b/core/stateless/stats.go @@ -54,6 +54,13 @@ func NewWitnessStats() *WitnessStats { } } +func (s *WitnessStats) copy() *WitnessStats { + return &WitnessStats{ + accountTrie: s.accountTrie.Copy(), + storageTrie: s.storageTrie.Copy(), + } +} + func (s *WitnessStats) init() { if s.accountTrie == nil { s.accountTrie = trie.NewLevelStats() diff --git a/core/stateless/witness.go b/core/stateless/witness.go index 588c895a2f..f1321699c1 100644 --- a/core/stateless/witness.go +++ b/core/stateless/witness.go @@ -42,12 +42,13 @@ type Witness struct { Codes map[string]struct{} // Set of bytecodes ran or accessed State map[string]struct{} // Set of MPT state trie nodes (account and storage together) - chain HeaderReader // Chain reader to convert block hash ops to header proofs - lock sync.Mutex // Lock to allow concurrent state insertions + chain HeaderReader // Chain reader to convert block hash ops to header proofs + stats *WitnessStats // Optional statistics collector + lock sync.Mutex // Lock to allow concurrent state insertions } // NewWitness creates an empty witness ready for population. -func NewWitness(context *types.Header, chain HeaderReader) (*Witness, error) { +func NewWitness(context *types.Header, chain HeaderReader, enableStats bool) (*Witness, error) { // When building witnesses, retrieve the parent header, which will *always* // be included to act as a trustless pre-root hash container var headers []*types.Header @@ -59,13 +60,17 @@ func NewWitness(context *types.Header, chain HeaderReader) (*Witness, error) { headers = append(headers, parent) } // Create the witness with a reconstructed gutted out block - return &Witness{ + w := &Witness{ context: context, Headers: headers, Codes: make(map[string]struct{}), State: make(map[string]struct{}), chain: chain, - }, nil + } + if enableStats { + w.stats = NewWitnessStats() + } + return w, nil } // AddBlockHash adds a "blockhash" to the witness with the designated offset from @@ -87,8 +92,11 @@ func (w *Witness) AddCode(code []byte) { w.Codes[string(code)] = struct{}{} } -// AddState inserts a batch of MPT trie nodes into the witness. -func (w *Witness) AddState(nodes map[string][]byte) { +// AddState inserts a batch of MPT trie nodes into the witness. The owner +// identifies which trie the nodes belong to: the zero hash for the account +// trie, or the hashed address for a storage trie. This is used for optional +// statistics collection. +func (w *Witness) AddState(nodes map[string][]byte, owner common.Hash) { if len(nodes) == 0 { return } @@ -98,6 +106,17 @@ func (w *Witness) AddState(nodes map[string][]byte) { for _, value := range nodes { w.State[string(value)] = struct{}{} } + if w.stats != nil { + w.stats.Add(nodes, owner) + } +} + +// ReportMetrics reports the collected statistics to the global metrics registry. +func (w *Witness) ReportMetrics(blockNumber uint64) { + if w.stats == nil { + return + } + w.stats.ReportMetrics(blockNumber) } func (w *Witness) AddKey() { @@ -113,6 +132,9 @@ func (w *Witness) Copy() *Witness { State: maps.Clone(w.State), chain: w.chain, } + if w.stats != nil { + cpy.stats = w.stats.copy() + } if w.context != nil { cpy.context = types.CopyHeader(w.context) } diff --git a/miner/worker.go b/miner/worker.go index 1260662fe7..39a61de318 100644 --- a/miner/worker.go +++ b/miner/worker.go @@ -330,12 +330,12 @@ func (miner *Miner) makeEnv(parent *types.Header, header *types.Header, coinbase } var bundle *stateless.Witness if witness { - bundle, err = stateless.NewWitness(header, miner.chain) + bundle, err = stateless.NewWitness(header, miner.chain, false) if err != nil { return nil, err } } - state.StartPrefetcher("miner", bundle, nil) + state.StartPrefetcher("miner", bundle) // Note the passed coinbase may be different with header.Coinbase. return &environment{ signer: types.MakeSigner(miner.chainConfig, header.Number, header.Time), diff --git a/trie/levelstats.go b/trie/levelstats.go index 9168e3fbaf..c73d652146 100644 --- a/trie/levelstats.go +++ b/trie/levelstats.go @@ -36,6 +36,18 @@ func NewLevelStats() *LevelStats { return &LevelStats{} } +// Copy returns a deep copy of the statistics. +func (s *LevelStats) Copy() *LevelStats { + cpy := NewLevelStats() + for i := range s.level { + cpy.level[i].short.Store(s.level[i].short.Load()) + cpy.level[i].full.Store(s.level[i].full.Load()) + cpy.level[i].value.Store(s.level[i].value.Load()) + cpy.level[i].size.Store(s.level[i].size.Load()) + } + return cpy +} + // MaxDepth iterates each level and finds the deepest level with at least one // trie node. func (s *LevelStats) MaxDepth() int { From a2496852e98876530130c93ca540860a31a0d18a Mon Sep 17 00:00:00 2001 From: Charles Dusek <38732970+cgdusek@users.noreply.github.com> Date: Sat, 28 Mar 2026 05:37:39 -0500 Subject: [PATCH 153/161] p2p/discover: resolve DNS hostnames for bootstrap nodes (#34101) Fixes #31208 --- p2p/discover/table.go | 45 ++++++++++++++++++++++++++++ p2p/discover/table_test.go | 60 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+) diff --git a/p2p/discover/table.go b/p2p/discover/table.go index e5b2c7c8c5..721cd7b589 100644 --- a/p2p/discover/table.go +++ b/p2p/discover/table.go @@ -25,6 +25,7 @@ package discover import ( "context" "fmt" + "net" "net/netip" "slices" "sync" @@ -36,6 +37,7 @@ import ( "github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/metrics" "github.com/ethereum/go-ethereum/p2p/enode" + "github.com/ethereum/go-ethereum/p2p/enr" "github.com/ethereum/go-ethereum/p2p/netutil" ) @@ -205,6 +207,13 @@ func (tab *Table) close() { func (tab *Table) setFallbackNodes(nodes []*enode.Node) error { nursery := make([]*enode.Node, 0, len(nodes)) for _, n := range nodes { + if n.Hostname() != "" && !n.IPAddr().IsValid() { + resolved, err := resolveBootnodeHostname(n, tab.log) + if err != nil { + return fmt.Errorf("bad bootstrap node %q: %v", n, err) + } + n = resolved + } if err := n.ValidateComplete(); err != nil { return fmt.Errorf("bad bootstrap node %q: %v", n, err) } @@ -218,6 +227,42 @@ func (tab *Table) setFallbackNodes(nodes []*enode.Node) error { return nil } +// resolveBootnodeHostname resolves the DNS hostname of a bootstrap node to an IP address. +func resolveBootnodeHostname(n *enode.Node, logger log.Logger) (*enode.Node, error) { + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() + + ips, err := net.DefaultResolver.LookupNetIP(ctx, "ip", n.Hostname()) + if err != nil { + return nil, fmt.Errorf("DNS lookup failed for %q: %v", n.Hostname(), err) + } + + var ip4, ip6 netip.Addr + for _, ip := range ips { + if ip.Is4() && !ip4.IsValid() { + ip4 = ip + } + if ip.Is6() && !ip6.IsValid() { + ip6 = ip + } + } + if !ip4.IsValid() && !ip6.IsValid() { + return nil, fmt.Errorf("no IP addresses found for hostname %q", n.Hostname()) + } + + rec := n.Record() + if ip4.IsValid() { + rec.Set(enr.IPv4Addr(ip4)) + } + if ip6.IsValid() { + rec.Set(enr.IPv6Addr(ip6)) + } + rec.SetSeq(n.Seq()) + resolved := enode.SignNull(rec, n.ID()).WithHostname(n.Hostname()) + logger.Debug("Resolved bootstrap node hostname", "name", n.Hostname(), "ip", resolved.IP()) + return resolved, nil +} + // isInitDone returns whether the table's initial seeding procedure has completed. func (tab *Table) isInitDone() bool { select { diff --git a/p2p/discover/table_test.go b/p2p/discover/table_test.go index 8cc4ae33b2..c3b71ea5a6 100644 --- a/p2p/discover/table_test.go +++ b/p2p/discover/table_test.go @@ -490,6 +490,66 @@ func quickcfg() *quick.Config { } } +func TestSetFallbackNodes_DNSHostname(t *testing.T) { + // Create a node with a DNS hostname but no IP, simulating an enode URL + // like enode://@localhost:30303. + key := newkey() + node := enode.NewV4(&key.PublicKey, nil, 30303, 30303).WithHostname("localhost") + + // Verify the node has a hostname but no valid IP. + if node.Hostname() != "localhost" { + t.Fatal("expected hostname to be set") + } + if node.IPAddr().IsValid() { + t.Fatal("expected no IP address") + } + + // Create a table and set the hostname node as a bootnode. + // This should resolve the hostname to an IP address. + db, _ := enode.OpenDB(t.TempDir() + "/node.db") + defer db.Close() + + cfg := Config{Log: testlog.Logger(t, log.LvlTrace)} + cfg = cfg.withDefaults() + tab := &Table{ + cfg: cfg, + log: cfg.Log, + refreshReq: make(chan chan struct{}), + revalResponseCh: make(chan revalidationResponse), + addNodeCh: make(chan addNodeOp), + addNodeHandled: make(chan bool), + trackRequestCh: make(chan trackRequestOp), + initDone: make(chan struct{}), + closeReq: make(chan struct{}), + closed: make(chan struct{}), + ips: netutil.DistinctNetSet{Subnet: tableSubnet, Limit: tableIPLimit}, + } + for i := range tab.buckets { + tab.buckets[i] = &bucket{ + index: i, + ips: netutil.DistinctNetSet{Subnet: bucketSubnet, Limit: bucketIPLimit}, + } + } + + err := tab.setFallbackNodes([]*enode.Node{node}) + if err != nil { + t.Fatalf("setFallbackNodes failed: %v", err) + } + if len(tab.nursery) != 1 { + t.Fatalf("expected 1 nursery node, got %d", len(tab.nursery)) + } + + // The resolved node should have a valid IP and retain the hostname. + resolved := tab.nursery[0] + if !resolved.IPAddr().IsValid() { + t.Fatal("expected resolved node to have a valid IP") + } + if resolved.Hostname() != "localhost" { + t.Errorf("expected hostname to be preserved, got %q", resolved.Hostname()) + } + t.Logf("resolved localhost to %v", resolved.IPAddr()) +} + func newkey() *ecdsa.PrivateKey { key, err := crypto.GenerateKey() if err != nil { From bd3c8431d9f7282e840670ef72c9a7c8f67e3271 Mon Sep 17 00:00:00 2001 From: Guillaume Ballet <3272758+gballet@users.noreply.github.com> Date: Sat, 28 Mar 2026 11:39:44 +0100 Subject: [PATCH 154/161] build, cmd/keeper: add "womir" target (#34079) This PR enables the block validation of keeper in the womir/openvm zkvm. It also fixes some issues related to building the executables in CI. Namely, it activates the build which was actually disabled, and also resolves some resulting build conflicts by fixing the tags. Co-authored-by: Leo --- build/ci.go | 20 +++++++------ cmd/keeper/getpayload_example.go | 1 + cmd/keeper/getpayload_wasm.go | 4 +-- cmd/keeper/getpayload_womir.go | 49 ++++++++++++++++++++++++++++++++ cmd/keeper/stubs.go | 4 +-- 5 files changed, 66 insertions(+), 12 deletions(-) create mode 100644 cmd/keeper/getpayload_womir.go diff --git a/build/ci.go b/build/ci.go index dce01f01a8..173288bcdc 100644 --- a/build/ci.go +++ b/build/ci.go @@ -107,17 +107,21 @@ var ( Tags: "ziren", Env: map[string]string{"GOMIPS": "softfloat", "CGO_ENABLED": "0"}, }, + { + Name: "womir", + GOOS: "wasip1", + GOARCH: "wasm", + Tags: "womir", + }, { Name: "wasm-js", GOOS: "js", GOARCH: "wasm", - Tags: "example", }, { Name: "wasm-wasi", GOOS: "wasip1", GOARCH: "wasm", - Tags: "example", }, { Name: "example", @@ -163,11 +167,11 @@ var ( // Distros for which packages are created debDistros = []string{ - "xenial", // 16.04, EOL: 04/2026 - "bionic", // 18.04, EOL: 04/2028 - "focal", // 20.04, EOL: 04/2030 - "jammy", // 22.04, EOL: 04/2032 - "noble", // 24.04, EOL: 04/2034 + "xenial", // 16.04, EOL: 04/2026 + "bionic", // 18.04, EOL: 04/2028 + "focal", // 20.04, EOL: 04/2030 + "jammy", // 22.04, EOL: 04/2032 + "noble", // 24.04, EOL: 04/2034 } // This is where the tests should be unpacked. @@ -305,7 +309,7 @@ func doInstallKeeper(cmdline []string) { args := slices.Clone(gobuild.Args) args = append(args, "-o", executablePath(outputName)) args = append(args, ".") - build.MustRun(&exec.Cmd{Path: gobuild.Path, Args: args, Env: gobuild.Env}) + build.MustRun(&exec.Cmd{Path: gobuild.Path, Args: args, Env: gobuild.Env, Dir: gobuild.Dir}) } } diff --git a/cmd/keeper/getpayload_example.go b/cmd/keeper/getpayload_example.go index 683cc79248..8f40a7bd11 100644 --- a/cmd/keeper/getpayload_example.go +++ b/cmd/keeper/getpayload_example.go @@ -15,6 +15,7 @@ // along with the go-ethereum library. If not, see . //go:build example +// +build example package main diff --git a/cmd/keeper/getpayload_wasm.go b/cmd/keeper/getpayload_wasm.go index b912678825..5024ac7d49 100644 --- a/cmd/keeper/getpayload_wasm.go +++ b/cmd/keeper/getpayload_wasm.go @@ -14,8 +14,8 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -//go:build wasm -// +build wasm +//go:build wasm && !womir +// +build wasm,!womir package main diff --git a/cmd/keeper/getpayload_womir.go b/cmd/keeper/getpayload_womir.go new file mode 100644 index 0000000000..8645dc7c26 --- /dev/null +++ b/cmd/keeper/getpayload_womir.go @@ -0,0 +1,49 @@ +// Copyright 2026 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +//go:build womir + +package main + +import "unsafe" + +// These match the WOMIR guest-io imports (env module). +// Protocol: __hint_input prepares next item, __hint_buffer reads words. +// Each item has format: [byte_len_u32_le, ...data_words_padded_to_4bytes] +// +//go:wasmimport env __hint_input +func hintInput() + +//go:wasmimport env __hint_buffer +func hintBuffer(ptr unsafe.Pointer, numWords uint32) +func readWord() uint32 { + var buf [4]byte + hintBuffer(unsafe.Pointer(&buf[0]), 1) + return uint32(buf[0]) | uint32(buf[1])<<8 | uint32(buf[2])<<16 | uint32(buf[3])<<24 +} +func readBytes() []byte { + hintInput() + byteLen := readWord() + numWords := (byteLen + 3) / 4 + data := make([]byte, numWords*4) + hintBuffer(unsafe.Pointer(&data[0]), numWords) + return data[:byteLen] +} + +// getInput reads the RLP-encoded Payload from the WOMIR hint stream. +func getInput() []byte { + return readBytes() +} diff --git a/cmd/keeper/stubs.go b/cmd/keeper/stubs.go index 407a21a145..de7ee64353 100644 --- a/cmd/keeper/stubs.go +++ b/cmd/keeper/stubs.go @@ -14,8 +14,8 @@ // You should have received a copy of the GNU Lesser General Public License // along with the go-ethereum library. If not, see . -//go:build !example && !ziren && !wasm -// +build !example,!ziren,!wasm +//go:build !example && !ziren && !wasm && !womir +// +build !example,!ziren,!wasm,!womir package main From d1369b69f5d8b86741299a6b3c171ac58ed296bf Mon Sep 17 00:00:00 2001 From: Daniel Liu <139250065@qq.com> Date: Sat, 28 Mar 2026 18:46:09 +0800 Subject: [PATCH 155/161] core/txpool/legacypool: use types.Sender instead of signer.Sender (#34059) `pool.signer.Sender(tx)` bypasses the sender cache used by types.Sender, which can force an extra signature recovery for every promotable tx (promotion runs frequently). Use `types.Sender(pool.signer, tx)` here to keep sender derivation cached and consistent. --- core/txpool/legacypool/legacypool.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/txpool/legacypool/legacypool.go b/core/txpool/legacypool/legacypool.go index d29b71ebc2..93b3cb5be2 100644 --- a/core/txpool/legacypool/legacypool.go +++ b/core/txpool/legacypool/legacypool.go @@ -1404,7 +1404,7 @@ func (pool *LegacyPool) promoteExecutables(accounts []common.Address) []*types.T // promote all promotable transactions promoted := make([]*types.Transaction, 0, len(promotable)) for _, tx := range promotable { - from, _ := pool.signer.Sender(tx) + from, _ := types.Sender(pool.signer, tx) // already validated if pool.promoteTx(from, tx.Hash(), tx) { promoted = append(promoted, tx) } From e585ad3b42994ca7e77a34c0f5bcf808d9987e48 Mon Sep 17 00:00:00 2001 From: Charles Dusek <38732970+cgdusek@users.noreply.github.com> Date: Mon, 30 Mar 2026 02:34:23 -0500 Subject: [PATCH 156/161] core/rawdb: fix freezer dir.Sync() failure on Windows (#34115) --- core/rawdb/freezer_utils.go | 8 +---- core/rawdb/freezer_utils_unix.go | 49 +++++++++++++++++++++++++++++ core/rawdb/freezer_utils_windows.go | 26 +++++++++++++++ 3 files changed, 76 insertions(+), 7 deletions(-) create mode 100644 core/rawdb/freezer_utils_unix.go create mode 100644 core/rawdb/freezer_utils_windows.go diff --git a/core/rawdb/freezer_utils.go b/core/rawdb/freezer_utils.go index 7786b7a990..7f1a978b63 100644 --- a/core/rawdb/freezer_utils.go +++ b/core/rawdb/freezer_utils.go @@ -26,13 +26,7 @@ func atomicRename(src, dest string) error { if err := os.Rename(src, dest); err != nil { return err } - dir, err := os.Open(filepath.Dir(src)) - if err != nil { - return err - } - defer dir.Close() - - return dir.Sync() + return syncDir(filepath.Dir(src)) } // copyFrom copies data from 'srcPath' at offset 'offset' into 'destPath'. diff --git a/core/rawdb/freezer_utils_unix.go b/core/rawdb/freezer_utils_unix.go new file mode 100644 index 0000000000..1d26490cab --- /dev/null +++ b/core/rawdb/freezer_utils_unix.go @@ -0,0 +1,49 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +//go:build !windows +// +build !windows + +package rawdb + +import ( + "errors" + "os" + "syscall" +) + +// syncDir ensures that the directory metadata (e.g. newly renamed files) +// is flushed to durable storage. +func syncDir(name string) error { + f, err := os.Open(name) + if err != nil { + return err + } + defer f.Close() + + // Some file systems do not support fsyncing directories (e.g. some FUSE + // mounts). Ignore EINVAL in those cases. + if err := f.Sync(); err != nil { + if errors.Is(err, os.ErrInvalid) { + return nil + } + if patherr, ok := err.(*os.PathError); ok && patherr.Err == syscall.EINVAL { + return nil + } + return err + } + return nil +} diff --git a/core/rawdb/freezer_utils_windows.go b/core/rawdb/freezer_utils_windows.go new file mode 100644 index 0000000000..7b652f7ab5 --- /dev/null +++ b/core/rawdb/freezer_utils_windows.go @@ -0,0 +1,26 @@ +// Copyright 2022 The go-ethereum Authors +// This file is part of the go-ethereum library. +// +// The go-ethereum library is free software: you can redistribute it and/or modify +// it under the terms of the GNU Lesser General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// The go-ethereum library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public License +// along with the go-ethereum library. If not, see . + +//go:build windows +// +build windows + +package rawdb + +// syncDir is a no-op on Windows. Fsyncing a directory handle is not +// supported and returns "Access is denied". +func syncDir(name string) error { + return nil +} From ceabc39304ec298d891d3cde51b8cfddc6842197 Mon Sep 17 00:00:00 2001 From: Sina M <1591639+s1na@users.noreply.github.com> Date: Mon, 30 Mar 2026 10:01:12 +0200 Subject: [PATCH 157/161] internal/ethapi: limit number of calls to eth_simulateV1 (#34616) Later on we can consider making these limits configurable if the use-case arose. --- internal/ethapi/api.go | 10 ++++++++++ internal/ethapi/simulate.go | 8 ++++++++ 2 files changed, 18 insertions(+) diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go index bb0dd042ab..a62328e201 100644 --- a/internal/ethapi/api.go +++ b/internal/ethapi/api.go @@ -841,6 +841,16 @@ func (api *BlockChainAPI) SimulateV1(ctx context.Context, opts simOpts, blockNrO } else if len(opts.BlockStateCalls) > maxSimulateBlocks { return nil, &clientLimitExceededError{message: "too many blocks"} } + var totalCalls int + for _, block := range opts.BlockStateCalls { + if len(block.Calls) > maxSimulateCallsPerBlock { + return nil, &clientLimitExceededError{message: fmt.Sprintf("too many calls in block: %d > %d", len(block.Calls), maxSimulateCallsPerBlock)} + } + totalCalls += len(block.Calls) + if totalCalls > maxSimulateTotalCalls { + return nil, &clientLimitExceededError{message: fmt.Sprintf("too many calls: %d > %d", totalCalls, maxSimulateTotalCalls)} + } + } if blockNrOrHash == nil { n := rpc.BlockNumberOrHashWithNumber(rpc.LatestBlockNumber) blockNrOrHash = &n diff --git a/internal/ethapi/simulate.go b/internal/ethapi/simulate.go index aa7609ff93..eacb296132 100644 --- a/internal/ethapi/simulate.go +++ b/internal/ethapi/simulate.go @@ -44,6 +44,14 @@ const ( // in a single request. maxSimulateBlocks = 256 + // maxSimulateCallsPerBlock is the maximum number of calls allowed in a + // single simulated block. + maxSimulateCallsPerBlock = 5000 + + // maxSimulateTotalCalls is the maximum total number of calls allowed + // across all simulated blocks in a single request. + maxSimulateTotalCalls = 10000 + // timestampIncrement is the default increment between block timestamps. timestampIncrement = 12 ) From 95705e8b7b6e021b3312c4dc9c817b7646bf67af Mon Sep 17 00:00:00 2001 From: Sina M <1591639+s1na@users.noreply.github.com> Date: Mon, 30 Mar 2026 10:01:30 +0200 Subject: [PATCH 158/161] internal/ethapi: limit number of getProofs keys (#34617) We can consider making this limit configurable if ever the need arose. --- internal/ethapi/api.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go index a62328e201..4f217d0578 100644 --- a/internal/ethapi/api.go +++ b/internal/ethapi/api.go @@ -57,6 +57,10 @@ const estimateGasErrorRatio = 0.015 // be requested in a single eth_getStorageValues call. const maxGetStorageSlots = 1024 +// maxGetProofKeys is the maximum number of storage keys that can be +// requested in a single eth_getProof call. +const maxGetProofKeys = 1024 + var errBlobTxNotSupported = errors.New("signing blob transactions not supported") var errSubClosed = errors.New("chain subscription closed") @@ -362,6 +366,9 @@ func (n *proofList) Delete(key []byte) error { // GetProof returns the Merkle-proof for a given account and optionally some storage keys. func (api *BlockChainAPI) GetProof(ctx context.Context, address common.Address, storageKeys []string, blockNrOrHash rpc.BlockNumberOrHash) (*AccountResult, error) { + if len(storageKeys) > maxGetProofKeys { + return nil, &invalidParamsError{fmt.Sprintf("too many storage keys requested (max %d, got %d)", maxGetProofKeys, len(storageKeys))} + } var ( keys = make([]common.Hash, len(storageKeys)) keyLengths = make([]int, len(storageKeys)) @@ -393,6 +400,9 @@ func (api *BlockChainAPI) GetProof(ctx context.Context, address common.Address, } // Create the proofs for the storageKeys. for i, key := range keys { + if err := ctx.Err(); err != nil { + return nil, err + } // Output key encoding is a bit special: if the input was a 32-byte hash, it is // returned as such. Otherwise, we apply the QUANTITY encoding mandated by the // JSON-RPC spec for getProof. This behavior exists to preserve backwards From be4dc0c4be2fe316dbdd0a73e48421f64978232f Mon Sep 17 00:00:00 2001 From: rjl493456442 Date: Mon, 30 Mar 2026 18:42:40 +0800 Subject: [PATCH 159/161] version: release go-ethereum v1.17.2 stable (#34618) --- version/version.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/version/version.go b/version/version.go index b9bc87c866..a0e2fe3065 100644 --- a/version/version.go +++ b/version/version.go @@ -17,8 +17,8 @@ package version const ( - Major = 1 // Major version component of the current release - Minor = 17 // Minor version component of the current release - Patch = 2 // Patch version component of the current release - Meta = "unstable" // Version metadata to append to the version string + Major = 1 // Major version component of the current release + Minor = 17 // Minor version component of the current release + Patch = 2 // Patch version component of the current release + Meta = "stable" // Version metadata to append to the version string ) From fe47c399039e513d7b9bae35a66ad153b060842c Mon Sep 17 00:00:00 2001 From: rjl493456442 Date: Mon, 30 Mar 2026 21:01:29 +0800 Subject: [PATCH 160/161] version: start v1.17.3 release cycle (#34619) --- version/version.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/version/version.go b/version/version.go index a0e2fe3065..ea1f5fc632 100644 --- a/version/version.go +++ b/version/version.go @@ -17,8 +17,8 @@ package version const ( - Major = 1 // Major version component of the current release - Minor = 17 // Minor version component of the current release - Patch = 2 // Patch version component of the current release - Meta = "stable" // Version metadata to append to the version string + Major = 1 // Major version component of the current release + Minor = 17 // Minor version component of the current release + Patch = 3 // Patch version component of the current release + Meta = "unstable" // Version metadata to append to the version string ) From 965bd6b6a0a8a7956c341b2f9adf823afc916b32 Mon Sep 17 00:00:00 2001 From: Bosul Mun Date: Mon, 30 Mar 2026 22:17:37 +0900 Subject: [PATCH 161/161] eth: implement EIP-7975 (eth/70 - partial block receipt lists) (#33153) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In this PR, we add support for protocol version eth/70, defined by EIP-7975. Overall changes: - Each response is buffered in the peer’s receipt buffer when the `lastBlockIncomplete` field is true. - Continued request uses the same request id of its original request(`RequestPartialReceipts`). - Partial responses are verified in `validateLastBlockReceipt`. - Even if all receipts for partial blocks of the request are collected, those partial results are not sinked to the downloader, to avoid complexity. This assumes that partial response and buffering occur only in exceptional cases. --------- Co-authored-by: Gary Rong Co-authored-by: Felix Lange --- cmd/devp2p/internal/ethtest/chain.go | 14 + cmd/devp2p/internal/ethtest/conn.go | 11 +- cmd/devp2p/internal/ethtest/snap.go | 32 +- cmd/devp2p/internal/ethtest/suite.go | 129 +- .../internal/ethtest/testdata/chain.rlp | Bin 451888 -> 457980 bytes .../internal/ethtest/testdata/genesis.json | 6 +- .../internal/ethtest/testdata/headblock.json | 16 +- .../internal/ethtest/testdata/headfcu.json | 6 +- .../internal/ethtest/testdata/headstate.json | 4210 +++---- .../internal/ethtest/testdata/newpayload.json | 10313 ++++++++-------- .../internal/ethtest/testdata/txinfo.json | 2943 ++--- eth/downloader/downloader_test.go | 4 +- .../fetchers_concurrent_receipts.go | 10 +- eth/downloader/peer.go | 2 +- eth/downloader/skeleton_test.go | 2 +- eth/handler_eth_test.go | 24 +- eth/handler_test.go | 2 +- eth/protocols/eth/dispatcher.go | 12 +- eth/protocols/eth/handler.go | 31 +- eth/protocols/eth/handler_test.go | 105 +- eth/protocols/eth/handlers.go | 135 +- eth/protocols/eth/handshake_test.go | 2 +- eth/protocols/eth/peer.go | 257 +- eth/protocols/eth/peer_test.go | 2 +- eth/protocols/eth/protocol.go | 27 +- eth/protocols/eth/protocol_test.go | 11 +- eth/protocols/eth/receipt.go | 75 +- eth/protocols/eth/receipt_test.go | 5 +- eth/sync_test.go | 4 +- rlp/rlpgen/testdata/pkgclash.in.txt | 2 +- rlp/rlpgen/testdata/pkgclash.out.txt | 2 +- 31 files changed, 9535 insertions(+), 8859 deletions(-) diff --git a/cmd/devp2p/internal/ethtest/chain.go b/cmd/devp2p/internal/ethtest/chain.go index 689667a56b..b44e6aa36a 100644 --- a/cmd/devp2p/internal/ethtest/chain.go +++ b/cmd/devp2p/internal/ethtest/chain.go @@ -51,6 +51,12 @@ type Chain struct { state map[common.Address]state.DumpAccount // state of head block senders map[common.Address]*senderInfo config *params.ChainConfig + + txInfo txInfo +} + +type txInfo struct { + LargeReceiptBlock *uint64 `json:"tx-largereceipt"` } // NewChain takes the given chain.rlp file, and decodes and returns @@ -74,12 +80,20 @@ func NewChain(dir string) (*Chain, error) { if err != nil { return nil, err } + + var txInfo txInfo + err = common.LoadJSON(filepath.Join(dir, "txinfo.json"), &txInfo) + if err != nil { + return nil, err + } + return &Chain{ genesis: gen, blocks: blocks, state: state, senders: accounts, config: gen.Config, + txInfo: txInfo, }, nil } diff --git a/cmd/devp2p/internal/ethtest/conn.go b/cmd/devp2p/internal/ethtest/conn.go index 98baba81a4..02579f8b55 100644 --- a/cmd/devp2p/internal/ethtest/conn.go +++ b/cmd/devp2p/internal/ethtest/conn.go @@ -66,9 +66,10 @@ func (s *Suite) dialAs(key *ecdsa.PrivateKey) (*Conn, error) { return nil, err } conn.caps = []p2p.Cap{ + {Name: "eth", Version: 70}, {Name: "eth", Version: 69}, } - conn.ourHighestProtoVersion = 69 + conn.ourHighestProtoVersion = 70 return &conn, nil } @@ -335,10 +336,12 @@ loop: if have, want := msg.ForkID, chain.ForkID(); !reflect.DeepEqual(have, want) { return fmt.Errorf("wrong fork ID in status: have %v, want %v", have, want) } - if have, want := msg.ProtocolVersion, c.ourHighestProtoVersion; have != uint32(want) { - return fmt.Errorf("wrong protocol version: have %v, want %v", have, want) + for _, cap := range c.caps { + if cap.Name == "eth" && cap.Version == uint(msg.ProtocolVersion) { + break loop + } } - break loop + return fmt.Errorf("wrong protocol version: have %v, want %v", msg.ProtocolVersion, c.caps) case discMsg: var msg []p2p.DiscReason if rlp.DecodeBytes(data, &msg); len(msg) == 0 { diff --git a/cmd/devp2p/internal/ethtest/snap.go b/cmd/devp2p/internal/ethtest/snap.go index 7c1ca70cc0..07c75f6ced 100644 --- a/cmd/devp2p/internal/ethtest/snap.go +++ b/cmd/devp2p/internal/ethtest/snap.go @@ -87,9 +87,9 @@ func (s *Suite) TestSnapGetAccountRange(t *utesting.T) { root: root, startingHash: zero, limitHash: ffHash, - expAccounts: 67, + expAccounts: 68, expFirst: firstKey, - expLast: common.HexToHash("0x622e662246601dd04f996289ce8b85e86db7bb15bb17f86487ec9d543ddb6f9a"), + expLast: common.HexToHash("0x59312f89c13e9e24c1cb8b103aa39a9b2800348d97a92c2c9e2a78fa02b70025"), desc: "In this test, we request the entire state range, but limit the response to 4000 bytes.", }, { @@ -97,9 +97,9 @@ func (s *Suite) TestSnapGetAccountRange(t *utesting.T) { root: root, startingHash: zero, limitHash: ffHash, - expAccounts: 49, + expAccounts: 50, expFirst: firstKey, - expLast: common.HexToHash("0x445cb5c1278fdce2f9cbdb681bdd76c52f8e50e41dbd9e220242a69ba99ac099"), + expLast: common.HexToHash("0x4615e5f5df5b25349a00ad313c6cd0436b6c08ee5826e33a018661997f85ebaa"), desc: "In this test, we request the entire state range, but limit the response to 3000 bytes.", }, { @@ -107,9 +107,9 @@ func (s *Suite) TestSnapGetAccountRange(t *utesting.T) { root: root, startingHash: zero, limitHash: ffHash, - expAccounts: 34, + expAccounts: 35, expFirst: firstKey, - expLast: common.HexToHash("0x2ef46ebd2073cecde499c2e8df028ad79a26d57bfaa812c4c6f7eb4c9617b913"), + expLast: common.HexToHash("0x2de4bdbddcfbb9c3e195dae6b45f9c38daff897e926764bf34887fb0db5c3284"), desc: "In this test, we request the entire state range, but limit the response to 2000 bytes.", }, { @@ -178,9 +178,9 @@ The server should return the first available account.`, root: root, startingHash: firstKey, limitHash: ffHash, - expAccounts: 67, + expAccounts: 68, expFirst: firstKey, - expLast: common.HexToHash("0x622e662246601dd04f996289ce8b85e86db7bb15bb17f86487ec9d543ddb6f9a"), + expLast: common.HexToHash("0x59312f89c13e9e24c1cb8b103aa39a9b2800348d97a92c2c9e2a78fa02b70025"), desc: `In this test, startingHash is exactly the first available account key. The server should return the first available account of the state as the first item.`, }, @@ -189,9 +189,9 @@ The server should return the first available account of the state as the first i root: root, startingHash: hashAdd(firstKey, 1), limitHash: ffHash, - expAccounts: 67, + expAccounts: 68, expFirst: secondKey, - expLast: common.HexToHash("0x66192e4c757fba1cdc776e6737008f42d50370d3cd801db3624274283bf7cd63"), + expLast: common.HexToHash("0x59a7c8818f1c16b298a054020dc7c3f403a970d1d1db33f9478b1c36e3a2e509"), desc: `In this test, startingHash is after the first available key. The server should return the second account of the state as the first item.`, }, @@ -227,9 +227,9 @@ server to return no data because genesis is older than 127 blocks.`, root: s.chain.RootAt(int(s.chain.Head().Number().Uint64()) - 127), startingHash: zero, limitHash: ffHash, - expAccounts: 66, + expAccounts: 68, expFirst: firstKey, - expLast: common.HexToHash("0x729953a43ed6c913df957172680a17e5735143ad767bda8f58ac84ec62fbec5e"), + expLast: common.HexToHash("0x683b6c03cc32afe5db8cb96050f711fdaff8f8ff44c7587a9a848f921d02815e"), desc: `This test requests data at a state root that is 127 blocks old. We expect the server to have this state available.`, }, @@ -658,8 +658,8 @@ The server should reject the request.`, // It's a bit unfortunate these are hard-coded, but the result depends on // a lot of aspects of the state trie and can't be guessed in a simple // way. So you'll have to update this when the test chain is changed. - common.HexToHash("0x5bdc0d6057b35642a16d27223ea5454e5a17a400e28f7328971a5f2a87773b76"), - common.HexToHash("0x0a76c9812ca90ffed8ee4d191e683f93386b6e50cfe3679c0760d27510aa7fc5"), + common.HexToHash("0x4bdecec09691ad38113eebee2df94fadefdff5841c0f182bae1be3c8a6d60bf3"), + common.HexToHash("0x4178696465d4514ff5924ef8c28ce64d41a669634b63184c2c093e252d6b4bc4"), empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, empty, @@ -679,8 +679,8 @@ The server should reject the request.`, // be updated when the test chain is changed. expHashes: []common.Hash{ empty, - common.HexToHash("0x0a76c9812ca90ffed8ee4d191e683f93386b6e50cfe3679c0760d27510aa7fc5"), - common.HexToHash("0x5bdc0d6057b35642a16d27223ea5454e5a17a400e28f7328971a5f2a87773b76"), + common.HexToHash("0x4178696465d4514ff5924ef8c28ce64d41a669634b63184c2c093e252d6b4bc4"), + common.HexToHash("0x4bdecec09691ad38113eebee2df94fadefdff5841c0f182bae1be3c8a6d60bf3"), }, }, diff --git a/cmd/devp2p/internal/ethtest/suite.go b/cmd/devp2p/internal/ethtest/suite.go index 7560c13137..d710f98428 100644 --- a/cmd/devp2p/internal/ethtest/suite.go +++ b/cmd/devp2p/internal/ethtest/suite.go @@ -35,6 +35,7 @@ import ( "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/rlp" + "github.com/ethereum/go-ethereum/trie" "github.com/holiman/uint256" ) @@ -83,6 +84,7 @@ func (s *Suite) EthTests() []utesting.Test { // get history {Name: "GetBlockBodies", Fn: s.TestGetBlockBodies}, {Name: "GetReceipts", Fn: s.TestGetReceipts}, + {Name: "GetLargeReceipts", Fn: s.TestGetLargeReceipts}, // test transactions {Name: "LargeTxRequest", Fn: s.TestLargeTxRequest, Slow: true}, {Name: "Transaction", Fn: s.TestTransaction}, @@ -429,6 +431,9 @@ func (s *Suite) TestGetReceipts(t *utesting.T) { // Find some blocks containing receipts. var hashes = make([]common.Hash, 0, 3) for i := range s.chain.Len() { + if s.chain.txInfo.LargeReceiptBlock != nil && uint64(i) == *s.chain.txInfo.LargeReceiptBlock { + continue + } block := s.chain.GetBlock(i) if len(block.Transactions()) > 0 { hashes = append(hashes, block.Hash()) @@ -437,25 +442,121 @@ func (s *Suite) TestGetReceipts(t *utesting.T) { break } } + if conn.negotiatedProtoVersion < eth.ETH70 { + // Create block bodies request. + req := ð.GetReceiptsPacket69{ + RequestId: 66, + GetReceiptsRequest: (eth.GetReceiptsRequest)(hashes), + } + if err := conn.Write(ethProto, eth.GetReceiptsMsg, req); err != nil { + t.Fatalf("could not write to connection: %v", err) + } + // Wait for response. + resp := new(eth.ReceiptsPacket69) + if err := conn.ReadMsg(ethProto, eth.ReceiptsMsg, &resp); err != nil { + t.Fatalf("error reading block receipts msg: %v", err) + } + if got, want := resp.RequestId, req.RequestId; got != want { + t.Fatalf("unexpected request id in respond", got, want) + } + if resp.List.Len() != len(req.GetReceiptsRequest) { + t.Fatalf("wrong receipts in response: expected %d receipts, got %d", len(req.GetReceiptsRequest), resp.List.Len()) + } + } else { + // Create block bodies request. + req := ð.GetReceiptsPacket70{ + RequestId: 66, + FirstBlockReceiptIndex: 0, + GetReceiptsRequest: (eth.GetReceiptsRequest)(hashes), + } + if err := conn.Write(ethProto, eth.GetReceiptsMsg, req); err != nil { + t.Fatalf("could not write to connection: %v", err) + } + // Wait for response. + resp := new(eth.ReceiptsPacket70) + if err := conn.ReadMsg(ethProto, eth.ReceiptsMsg, &resp); err != nil { + t.Fatalf("error reading block receipts msg: %v", err) + } + if got, want := resp.RequestId, req.RequestId; got != want { + t.Fatalf("unexpected request id in respond", got, want) + } + if resp.List.Len() != len(req.GetReceiptsRequest) { + t.Fatalf("wrong receipts in response: expected %d receipts, got %d", len(req.GetReceiptsRequest), resp.List.Len()) + } + } +} - // Create receipts request. - req := ð.GetReceiptsPacket{ - RequestId: 66, - GetReceiptsRequest: (eth.GetReceiptsRequest)(hashes), +func (s *Suite) TestGetLargeReceipts(t *utesting.T) { + t.Log(`This test sends GetReceipts requests to the node for large receipt (>10MiB) in the test chain. + This test is meaningful only if the client supports protocol version ETH70 or higher + and LargeReceiptBlock is configured in txInfo.json.`) + conn, err := s.dialAndPeer(nil) + if err != nil { + t.Fatalf("peering failed: %v", err) } - if err := conn.Write(ethProto, eth.GetReceiptsMsg, req); err != nil { - t.Fatalf("could not write to connection: %v", err) + defer conn.Close() + + if conn.negotiatedProtoVersion < eth.ETH70 || s.chain.txInfo.LargeReceiptBlock == nil { + return } - // Wait for response. - resp := new(eth.ReceiptsPacket) - if err := conn.ReadMsg(ethProto, eth.ReceiptsMsg, &resp); err != nil { - t.Fatalf("error reading block bodies msg: %v", err) + + // Find block with large receipt. + // Place the large receipt block hash in the middle of the query + start := max(int(*s.chain.txInfo.LargeReceiptBlock)-2, 0) + end := min(*s.chain.txInfo.LargeReceiptBlock+2, uint64(len(s.chain.blocks))) + + var blocks []common.Hash + var receiptHashes []common.Hash + var receipts []*eth.ReceiptList + + for i := uint64(start); i < end; i++ { + block := s.chain.GetBlock(int(i)) + blocks = append(blocks, block.Hash()) + receiptHashes = append(receiptHashes, block.Header().ReceiptHash) + receipts = append(receipts, ð.ReceiptList{}) } - if got, want := resp.RequestId, req.RequestId; got != want { - t.Fatalf("unexpected request id in respond", got, want) + + incomplete := false + lastBlock := 0 + + for incomplete || lastBlock != len(blocks)-1 { + // Create get receipt request. + req := ð.GetReceiptsPacket70{ + RequestId: 66, + FirstBlockReceiptIndex: uint64(receipts[lastBlock].Derivable().Len()), + GetReceiptsRequest: blocks[lastBlock:], + } + if err := conn.Write(ethProto, eth.GetReceiptsMsg, req); err != nil { + t.Fatalf("could not write to connection: %v", err) + } + // Wait for response. + resp := new(eth.ReceiptsPacket70) + if err := conn.ReadMsg(ethProto, eth.ReceiptsMsg, &resp); err != nil { + t.Fatalf("error reading block receipts msg: %v", err) + } + if got, want := resp.RequestId, req.RequestId; got != want { + t.Fatalf("unexpected request id in respond, want: %d, got: %d", got, want) + } + + receiptLists, _ := resp.List.Items() + for i, rc := range receiptLists { + receipts[lastBlock+i].Append(rc) + } + lastBlock += len(receiptLists) - 1 + + incomplete = resp.LastBlockIncomplete } - if resp.List.Len() != len(req.GetReceiptsRequest) { - t.Fatalf("wrong receipts in response: expected %d receipts, got %d", len(req.GetReceiptsRequest), resp.List.Len()) + + hasher := trie.NewStackTrie(nil) + hashes := make([]common.Hash, len(receipts)) + for i := range receipts { + hashes[i] = types.DeriveSha(receipts[i].Derivable(), hasher) + } + + for i, hash := range hashes { + if receiptHashes[i] != hash { + t.Fatalf("wrong receipt root: want %x, got %x", receiptHashes[i], hash) + } } } diff --git a/cmd/devp2p/internal/ethtest/testdata/chain.rlp b/cmd/devp2p/internal/ethtest/testdata/chain.rlp index 7d4f4b3efe5d204312966e56040e759ce53b6600..d5209ab0413ab9977afa596152879ae8d95ae556 100644 GIT binary patch delta 157748 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 IJ&sKIe{Ps05dZ)H delta 152997 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ⅅ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 diff --git a/cmd/devp2p/internal/ethtest/testdata/genesis.json b/cmd/devp2p/internal/ethtest/testdata/genesis.json index c8ed44b885..a8963b30ea 100644 --- a/cmd/devp2p/internal/ethtest/testdata/genesis.json +++ b/cmd/devp2p/internal/ethtest/testdata/genesis.json @@ -37,7 +37,7 @@ "nonce": "0x0", "timestamp": "0x0", "extraData": "0x68697665636861696e", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "difficulty": "0x20000", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "coinbase": "0x0000000000000000000000000000000000000000", @@ -119,6 +119,10 @@ "balance": "0x1", "nonce": "0x1" }, + "8dcd17433742f4c0ca53122ab541d0ba67fc27ff": { + "code": "0x6202e6306000a0", + "balance": "0x0" + }, "c7b99a164efd027a93f147376cc7da7c67c6bbe0": { "balance": "0xc097ce7bc90715b34b9f1000000000" }, diff --git a/cmd/devp2p/internal/ethtest/testdata/headblock.json b/cmd/devp2p/internal/ethtest/testdata/headblock.json index bb5244be18..da18081d34 100644 --- a/cmd/devp2p/internal/ethtest/testdata/headblock.json +++ b/cmd/devp2p/internal/ethtest/testdata/headblock.json @@ -1,24 +1,24 @@ { - "parentHash": "0x65151b101682b54cd08ba226f640c14c86176865ff9bfc57e0147dadaeac34bb", + "parentHash": "0x7e80093a491eba0e5b2c1895837902f64f514100221801318fe391e1e09c96a6", "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", "miner": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xce423ebc60fc7764a43f09f1fe3ae61eef25e3eb8d09b1108f7e7eb77dfff5e6", - "transactionsRoot": "0x7ec1ae3989efa75d7bcc766e5e2443afa8a89a5fda42ebba90050e7e702980f7", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x8fcfb02cfca007773bd55bc1c3e50a3c8612a59c87ce057e5957e8bf17c1728b", + "transactionsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "difficulty": "0x0", "number": "0x258", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x1770", "extraData": "0x", "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "nonce": "0x0000000000000000", "baseFeePerGas": "0x7", - "withdrawalsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "withdrawalsRoot": "0x92abfda39de7df7d705c5a8f30386802ad59d31e782a06d5c5b0f9a260056cf0", "blobGasUsed": "0x0", "excessBlobGas": "0x0", "parentBeaconBlockRoot": "0xf5003fc8f92358e790a114bce93ce1d9c283c85e1787f8d7d56714d3489b49e6", "requestsHash": "0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "hash": "0xce8d86ba17a2ec303155f0e264c58a4b8f94ce3436274cf1924f91acdb7502d0" + "hash": "0x44e3809c9a3cda717f00aea3a9da336d149612c8d5657fbc0028176ef8d94d2a" } \ No newline at end of file diff --git a/cmd/devp2p/internal/ethtest/testdata/headfcu.json b/cmd/devp2p/internal/ethtest/testdata/headfcu.json index 9ab3a4de1a..eeb2ea5829 100644 --- a/cmd/devp2p/internal/ethtest/testdata/headfcu.json +++ b/cmd/devp2p/internal/ethtest/testdata/headfcu.json @@ -4,9 +4,9 @@ "method": "engine_forkchoiceUpdatedV3", "params": [ { - "headBlockHash": "0xce8d86ba17a2ec303155f0e264c58a4b8f94ce3436274cf1924f91acdb7502d0", - "safeBlockHash": "0xce8d86ba17a2ec303155f0e264c58a4b8f94ce3436274cf1924f91acdb7502d0", - "finalizedBlockHash": "0xce8d86ba17a2ec303155f0e264c58a4b8f94ce3436274cf1924f91acdb7502d0" + "headBlockHash": "0x44e3809c9a3cda717f00aea3a9da336d149612c8d5657fbc0028176ef8d94d2a", + "safeBlockHash": "0x44e3809c9a3cda717f00aea3a9da336d149612c8d5657fbc0028176ef8d94d2a", + "finalizedBlockHash": "0x44e3809c9a3cda717f00aea3a9da336d149612c8d5657fbc0028176ef8d94d2a" }, null ] diff --git a/cmd/devp2p/internal/ethtest/testdata/headstate.json b/cmd/devp2p/internal/ethtest/testdata/headstate.json index 72c7ebd509..982015d0a5 100644 --- a/cmd/devp2p/internal/ethtest/testdata/headstate.json +++ b/cmd/devp2p/internal/ethtest/testdata/headstate.json @@ -1,8 +1,8 @@ { - "root": "ce423ebc60fc7764a43f09f1fe3ae61eef25e3eb8d09b1108f7e7eb77dfff5e6", + "root": "8fcfb02cfca007773bd55bc1c3e50a3c8612a59c87ce057e5957e8bf17c1728b", "accounts": { "0x0000000000000000000000000000000000000000": { - "balance": "30749363", + "balance": "121816101", "nonce": 0, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", @@ -35,599 +35,599 @@ "0x0000F90827F1C53a10cb7A02335B175320002935": { "balance": "1", "nonce": 0, - "root": "0xf6332d2b55fdf1c60c6e6a4f9605a08bc6ea545dd2753ba789d76c2669e3376d", + "root": "0x7634a52f9af21ce71ccbc57320cd906c09caca9db12fcfb8636cac62a928ca0c", "codeHash": "0x6e49e66782037c0555897870e29fa5e552daf4719552131a0abce779daec0a5d", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604657602036036042575f35600143038111604257611fff81430311604257611fff9006545f5260205ff35b5f5ffd5b5f35611fff60014303065500", "storage": { - "0x000000000000000000000000000000000000000000000000000000000000000b": "7167b82e4207928eb75fbe741b29d18fb5d469fa56c93941223667a07d183c44", - "0x000000000000000000000000000000000000000000000000000000000000000c": "23d7c4e274d71eee019119e9403d83ae181d9555d30a81aa0660c2103360f126", - "0x000000000000000000000000000000000000000000000000000000000000000d": "cbe5c6da730320128cc63a3c2454ede30738fa0d59a9e9de2e90f58b1938333a", - "0x000000000000000000000000000000000000000000000000000000000000000e": "ec7e5f7aada029114c5b556586e0e3c3ef3a39dde955f379ccea43ef93acabbc", - "0x000000000000000000000000000000000000000000000000000000000000000f": "7599aa2261eece5d6075f09401692a0ee37815ad63946cc80ab3ba29838c00f8", - "0x0000000000000000000000000000000000000000000000000000000000000010": "60576c148e7ac42f9d36ee36a7df5a89241609f624502b248b5cf710ed269a4c", - "0x0000000000000000000000000000000000000000000000000000000000000011": "8cd31f14889acd865b0ad0b2fd746586f29e87941166bf7087dc8bb429f01554", - "0x0000000000000000000000000000000000000000000000000000000000000012": "3e48b276f3b3209dda302780f9c8e4459d2c9378f4508c0fc4f9d26e6a5d173f", - "0x0000000000000000000000000000000000000000000000000000000000000013": "905f74a6377ead9037c78e9008bbb788c74c1fdb7f993b4820e24be5dde9c9af", - "0x0000000000000000000000000000000000000000000000000000000000000014": "35398f9b164bfdf8f4b4cde5181a9d96bb37947181332dc7977dc2360bee6300", - "0x0000000000000000000000000000000000000000000000000000000000000015": "4a4aef4730ba6155773a9e5c7e0c5f25a552d187687d59ad81b4a86c9f15a9fb", - "0x0000000000000000000000000000000000000000000000000000000000000016": "b3c7f4d24254129c2621485e664106ca2c2d08337672a2c8e484524b6e0dd0fb", - "0x0000000000000000000000000000000000000000000000000000000000000017": "25e8e33978b09de34a49b2595fd3dfe13d0f8c9a8939ca6c88376292459ec533", - "0x0000000000000000000000000000000000000000000000000000000000000018": "4f350577873216755df98391d69caf01ba646006d88459326e2f2bc2acbbf0e0", - "0x0000000000000000000000000000000000000000000000000000000000000019": "ec6593f4d6535e923dce8d47de08d98f8d751ea078f186072fe46b3b745d5274", - "0x000000000000000000000000000000000000000000000000000000000000001a": "c342e54f189bd6e3099871e6ecdb5f5b85a409299decd86a08e5564e42d22aa7", - "0x000000000000000000000000000000000000000000000000000000000000001b": "750dd92f162fd79de0f147a4a5a6928ea06463f04ce9ccd6f85d128f726d75c4", - "0x000000000000000000000000000000000000000000000000000000000000001c": "851dbf7f27a98cf2fc320a858b96e89bfe8af9551e4aa966cd6ed4d4b5d9dac8", - "0x000000000000000000000000000000000000000000000000000000000000001d": "95d530f6e64e5b60726d6f40f995fbcb099957cfaaf2765dc78684d4fccacb59", - "0x000000000000000000000000000000000000000000000000000000000000001e": "1da94a9b2bc22478c3c9e45591d3254ed48b2f15a68dcd86d272273bd362e1db", - "0x000000000000000000000000000000000000000000000000000000000000001f": "0776e32e33ee61a75147584501827f9a7cef40e1198d62791acf4d7f5c50a55a", - "0x0000000000000000000000000000000000000000000000000000000000000020": "39032e04806c95bf605cab0f493454b349e86b17808b4b019a6fc264c58e570b", - "0x0000000000000000000000000000000000000000000000000000000000000021": "7bfd33d91f0f065c4c0963ef3975dfacb13ebcd3b1d9433eeba5f26320bb453b", - "0x0000000000000000000000000000000000000000000000000000000000000022": "cbeea1d0322b931091bee7d7fd49ed48d09f35324c7837f3b51c1f9e017cdcc8", - "0x0000000000000000000000000000000000000000000000000000000000000023": "daecb35565efc8fe915c286637a2f664473681e90f9ab6e05d0aa02ecdcdc654", - "0x0000000000000000000000000000000000000000000000000000000000000024": "4accb52ae0491cfaed5866f5296d8d15233a16ffd73c91735040c58cebaf7ff9", - "0x0000000000000000000000000000000000000000000000000000000000000025": "a22225105655427813fb4e29887ef8ec1a18877bb441913fadce200903ba0f0f", - "0x0000000000000000000000000000000000000000000000000000000000000026": "6ad17c25de20d9f09aaff897681a87788d216791d9e33d2d4543b162f3c47423", - "0x0000000000000000000000000000000000000000000000000000000000000027": "5b65d43473b3132497d0fc75a2808f73a2808560785c6e7f55d2ac722047d291", - "0x0000000000000000000000000000000000000000000000000000000000000028": "ebf3316f9944a4d7686ca037353ab00ba9aba83839dbf6b81a1f17127bc97131", - "0x0000000000000000000000000000000000000000000000000000000000000029": "9a93da70b45233339e8a591567fec5e1fab43884f5b56bece2e795fb964942c3", - "0x000000000000000000000000000000000000000000000000000000000000002a": "4087ae9e71cbdae794c137d61684e08835fa8a6c13e9e5a001163eaccf6b842f", - "0x000000000000000000000000000000000000000000000000000000000000002b": "9eb1dcefdae7fc61fdacb218921236acad55350bda6c209931d89b65dcfd0eeb", - "0x000000000000000000000000000000000000000000000000000000000000002c": "c0fd1e13ad5b4c7102e278a96573f8cf66809bd6c3445f5c3650189596c0d680", - "0x000000000000000000000000000000000000000000000000000000000000002d": "84af2f9798e57abc0431d1f0156b45f6521c7720ff0215459af9fa0553eb47e5", - "0x000000000000000000000000000000000000000000000000000000000000002e": "cb33361cca9889678cb7c5fe9a4fe345d929cc71e8f6e53e5cd310820e01dff3", - "0x000000000000000000000000000000000000000000000000000000000000002f": "ef24d6293c96bd11abe059e96317856581f1736cf94786dbc0fc0d366df430af", - "0x0000000000000000000000000000000000000000000000000000000000000030": "95d87d14848a52aae340beecba232b70e909de98a3e2648fd44b66b73f7e12f8", - "0x0000000000000000000000000000000000000000000000000000000000000031": "b5e2e62689ca47b11879ba997cd532c410ab09f03719817fd33dc6923d990a03", - "0x0000000000000000000000000000000000000000000000000000000000000032": "56110ba58fe532a71688f5cb3ff7129f7e9636d4aaf69a4347f70299b6f21a22", - "0x0000000000000000000000000000000000000000000000000000000000000033": "2e693ca7593217b296154d482519dd780931e96b006b2deb05490fc2375c8c92", - "0x0000000000000000000000000000000000000000000000000000000000000034": "919d586bdedaf4fb38996e5a32eaa14f753a1babb1da62c6d0aa2035005b5d86", - "0x0000000000000000000000000000000000000000000000000000000000000035": "978425ebd54536bfd17945cf57726cd02fc25b083bc9332b7b4c8a94c37762bb", - "0x0000000000000000000000000000000000000000000000000000000000000036": "808ecd5038418740fc4b27954cdd2e4952569e8062b846b5cdd234b1eaaf7795", - "0x0000000000000000000000000000000000000000000000000000000000000037": "4313be4af809c236c319dbd5dad18e0d030f610e7e4cacef0ff8b26af563b046", - "0x0000000000000000000000000000000000000000000000000000000000000038": "cad24a57225330d06226b15cd3b5be7b0f2a42fef155e489994f7026f79924f4", - "0x0000000000000000000000000000000000000000000000000000000000000039": "16e634e48fc62762ce8fc1762c6bfd34e94b3533b98a5fb1bbd504b131a64a65", - "0x000000000000000000000000000000000000000000000000000000000000003a": "39f1c7f651e1970418fd8a5e0786c83e813744d55ea965e7902112bc02f190ec", - "0x000000000000000000000000000000000000000000000000000000000000003b": "ceccf9166834bac24869c590390335f72c85c59a1553be2d99db38b039bb4c99", - "0x000000000000000000000000000000000000000000000000000000000000003c": "b8c495461332ae67504ee899542ccf73e859f73c6682fad15415743f15b7f5e6", - "0x000000000000000000000000000000000000000000000000000000000000003d": "fe4445a66aeaa138c2045c340fffae7db7f7a49b7a31df8b8b5f5aa431c58546", - "0x000000000000000000000000000000000000000000000000000000000000003e": "0f13f717c99151d8b5b509af5cacb5313f1ebf813d7a6b37764cbe1ec0459beb", - "0x000000000000000000000000000000000000000000000000000000000000003f": "2e33aeb9f45e7cb955774b6b43df2c3a438c5aa03a69f90793f137ff5d2eb49e", - "0x0000000000000000000000000000000000000000000000000000000000000040": "f496b8d4d19037d646dcbc3796d2a28bf176488e2e238107feaa0b4b7f5ae6a5", - "0x0000000000000000000000000000000000000000000000000000000000000041": "49005c56e2c43c7d5d10026c97dce5b3b2e4a38eda72b6db3e544d2e92c12047", - "0x0000000000000000000000000000000000000000000000000000000000000042": "ae199d9dff48f9bc1202bd414078c175b977869bce215c79259cbed32e490b16", - "0x0000000000000000000000000000000000000000000000000000000000000043": "65ca2f730c7ef4ae37e81f916bfe2a89b86ee315d17796e0b8b5bb76c4127e", - "0x0000000000000000000000000000000000000000000000000000000000000044": "c091a79738ea695804fd7a370a3d24728d5d4523a047835b28fbe5790c914af0", - "0x0000000000000000000000000000000000000000000000000000000000000045": "c0dec6888ce6c75c575ce5ada6f3425cf1511b4d31b4f7ffeb63e93bf00ff243", - "0x0000000000000000000000000000000000000000000000000000000000000046": "fd1c5aae32a2ab886fbc6b5229bd30528f904fa67063d334e6428dfc94a9909b", - "0x0000000000000000000000000000000000000000000000000000000000000047": "537b75471b40aaa24670d4ed625d075165b59e4ab455236c14dedd7e99e65d34", - "0x0000000000000000000000000000000000000000000000000000000000000048": "509c406dedf930913cc53d51de88a6b34b0edf15d45c88deee154cdea0b35415", - "0x0000000000000000000000000000000000000000000000000000000000000049": "cd249ec42453922de5255c9b47ac76191e3cb60144ad0c4bd1b5e02d672c08a0", - "0x000000000000000000000000000000000000000000000000000000000000004a": "4b17336fdc9eccebc8c836ffcf41d077a956e9cf786521e9eb4d01db5de5a935", - "0x000000000000000000000000000000000000000000000000000000000000004b": "85784669b5e3b7ce03064984463c5c167f4c90bbc7731862bd5d6cdcbbe7dfaf", - "0x000000000000000000000000000000000000000000000000000000000000004c": "6d3b7ae474719d6929a8374bac361084a530941d9e9c8754bc8765a818704dc4", - "0x000000000000000000000000000000000000000000000000000000000000004d": "60ab9fa061b4a52ae93aac61a70a7049d5ace2d85ad81cd3ba18e5b6f9df5a90", - "0x000000000000000000000000000000000000000000000000000000000000004e": "8d76a11f766a753283cdebf3c0a4ada62f0a85333eadf13f5c94b5528b9a0bb8", - "0x000000000000000000000000000000000000000000000000000000000000004f": "70ed6c8dfbfd1a79453b1360fe0c9024d1c9a51b7e9ae491dc9f672c1495ee52", - "0x0000000000000000000000000000000000000000000000000000000000000050": "829bf1d587f5294d8ee978c07aa33af6df08dc44876e81c4f2d1d9403e6c0478", - "0x0000000000000000000000000000000000000000000000000000000000000051": "b57dc2887b5798442036ac860b372cb07b5858c460977c426b53bf780aee15ba", - "0x0000000000000000000000000000000000000000000000000000000000000052": "6793c6d579b24b7bfac5cfd619b7335aace2365f75cf5b0d1e1b5c367288b74b", - "0x0000000000000000000000000000000000000000000000000000000000000053": "ab38058baae4ce65fe734310ef852d1adb2eb0e5bce297e2dfb1f2aabb8155fe", - "0x0000000000000000000000000000000000000000000000000000000000000054": "c129c2d37fdd0defa0d0cdd7b27a95e5f17eb1beb11a8713bc4b398dff6f69a2", - "0x0000000000000000000000000000000000000000000000000000000000000055": "5e61412b6b77af36026fc83378b2aff64e52121621912d35061bf7db4e315657", - "0x0000000000000000000000000000000000000000000000000000000000000056": "06a3b3e77a4ecfa284cd0cbc5f563dafcebefcaa7e4610b0433f1da2353d65a5", - "0x0000000000000000000000000000000000000000000000000000000000000057": "096a5b9ce9899b40e70d721ead24b8da99a16bd9d115412a1e5d4ba2478ba276", - "0x0000000000000000000000000000000000000000000000000000000000000058": "a6b1b6fbde7fcc8c1c4b6b035835d839914b9d3ad21dedf946f5d91754d9a6c4", - "0x0000000000000000000000000000000000000000000000000000000000000059": "96d9997e171f41cd83e6829c097bd37f9c352553c0a1fb5a739d2766cd7b0772", - "0x000000000000000000000000000000000000000000000000000000000000005a": "70db0ab4ec61502d2a53b8faa0ffe5a45d7db6f562af25e6564d8d2669989d0a", - "0x000000000000000000000000000000000000000000000000000000000000005b": "a6aa03ee648578c9413c668ab9f6d2dc480a48bcf7b126dec17b85be35b28604", - "0x000000000000000000000000000000000000000000000000000000000000005c": "bec4f585aade8992655a98ecf32e5ad71245f864bb2c3987b0216bfcf2acb0c0", - "0x000000000000000000000000000000000000000000000000000000000000005d": "a75924e8dc804bc7d9588a41ae6545effa02c568f519abb7f109d76ae17442c0", - "0x000000000000000000000000000000000000000000000000000000000000005e": "c80ae577ac0e00ce2a417f069f0db47ca32ba3576ea6092273c623a035980fba", - "0x000000000000000000000000000000000000000000000000000000000000005f": "3e10fa0f7879c62f9eb6373a80bf6a0a2d4c16fee5ba96566d62488db5477e92", - "0x0000000000000000000000000000000000000000000000000000000000000060": "9ae8e852cab82414dd0762c67565523f30c9049a061c7c3b4a310cfcd4df9d2a", - "0x0000000000000000000000000000000000000000000000000000000000000061": "6c4fe4ae5fb8b2a347e58868bc6a741a6df75a83593b062869cacb7ce3a715af", - "0x0000000000000000000000000000000000000000000000000000000000000062": "6722daf402b94682af585921807783bb92e1957789399ed0e0be0e0faa5a8c87", - "0x0000000000000000000000000000000000000000000000000000000000000063": "651c869c9f62a753fa0c545a984f596d2068aa542234b109032b93a583442ffe", - "0x0000000000000000000000000000000000000000000000000000000000000064": "e93d89f5d6ab364e7c6597d99b6041f6c1d503a639f1265e8ffb1261f87fa2f3", - "0x0000000000000000000000000000000000000000000000000000000000000065": "0507a6937203ad4297bca7595e8e0d7715d59bb7296968aebd84c135b707c638", - "0x0000000000000000000000000000000000000000000000000000000000000066": "f08662ab38a7f4db3179eb425b28a2dd5d918c80b87740d1b88699ebe905a11b", - "0x0000000000000000000000000000000000000000000000000000000000000067": "122f9c89a20f0af63d4d5af9ac5e5ca3907ae256efa3d561f22b9288ad122f17", - "0x0000000000000000000000000000000000000000000000000000000000000068": "8cd5f4a012d4f51460556c04b7fc6f4a4d94d1203cb092d0297372a43fdf283d", - "0x0000000000000000000000000000000000000000000000000000000000000069": "eba87b6b36d970ede1071402e363515bfc524572febb086525b84c792093175f", - "0x000000000000000000000000000000000000000000000000000000000000006a": "1db257ebc3fdfbb6fe6fa8234fbc771becfee96128648eac4164773196acea99", - "0x000000000000000000000000000000000000000000000000000000000000006b": "2a5fd10344d681d2e72384382583b1a9fd82fd0125a1fc24b4296bf3e37cf096", - "0x000000000000000000000000000000000000000000000000000000000000006c": "647266d2cef5a6b13af790b1b0af42fae3962e80f0724115407e6ecf0b2a6556", - "0x000000000000000000000000000000000000000000000000000000000000006d": "52979d072bdf7bfb3fd707c0f83a4a3de1d1c8fb5380c240f858ed964aaa8106", - "0x000000000000000000000000000000000000000000000000000000000000006e": "7a86b91b59bbb2f833af91649b2cd1ba2b4e5f78e5775d78c03ab8b71045b3e3", - "0x000000000000000000000000000000000000000000000000000000000000006f": "4643bd6c3e1a9ac7a7ad650d12048b9e733e219b843f2b3d830f5da795852454", - "0x0000000000000000000000000000000000000000000000000000000000000070": "7c1fb25dc97d20bb97dce8d8343149b20a96180f46f4b771285546da9d3ef7d3", - "0x0000000000000000000000000000000000000000000000000000000000000071": "adf0cc4f267c585703d9e7403b046ab5ba320204592557eef982e4c409e3d2ea", - "0x0000000000000000000000000000000000000000000000000000000000000072": "2ee413006dcb6448fb5c37443102aae3575781369fa9cd34175c0f03e3ddb693", - "0x0000000000000000000000000000000000000000000000000000000000000073": "55487f68bbd481313212ae5cca520be32f0a54c44e77705e13518a9c8b1a54bf", - "0x0000000000000000000000000000000000000000000000000000000000000074": "d9fa2ad334f336af1b5f9fdb858c0ed6c956b7e0f9454c5e7ee8b64462725ec8", - "0x0000000000000000000000000000000000000000000000000000000000000075": "b7f7753236089ad38a8f5fc7d31811b521331e866eece20f7de934579ab95d1e", - "0x0000000000000000000000000000000000000000000000000000000000000076": "ed36126582b6287363b3cbc31b9c39d7afd4d97ee5e83c00b2cd5449c1d6848a", - "0x0000000000000000000000000000000000000000000000000000000000000077": "836c48482765990a0b394761a91ee93850aff87b82fac9b1def52375ed7535b3", - "0x0000000000000000000000000000000000000000000000000000000000000078": "f01e70ef5e688634e591415823fc7c898679659802e4db0de9ec3c3af735f664", - "0x0000000000000000000000000000000000000000000000000000000000000079": "c04cb16eda5544fcfa77e18ed2092981e834e71cabc2b61bd25153c830b660ff", - "0x000000000000000000000000000000000000000000000000000000000000007a": "41d260ba8d4501bbc92352b34daaaec17e3f3fc3652c9b92d87a587beaed96", - "0x000000000000000000000000000000000000000000000000000000000000007b": "d2331ab665bad7fa9a43bc09da232bb06c72bc79d817a9f1c5bb05f96b9646e6", - "0x000000000000000000000000000000000000000000000000000000000000007c": "43e6a0ed19de50761c59208a225a7f9bac091c3eb7dad46807998cf6ee69c7", - "0x000000000000000000000000000000000000000000000000000000000000007d": "f64f01561392db4d006de40b0c35b3b8b56204cbd89b734608d148d2ae629228", - "0x000000000000000000000000000000000000000000000000000000000000007e": "49e6318f4587a021ad50e32ccad223164e0cc1ba28e1be6ee01060d331ecebbf", - "0x000000000000000000000000000000000000000000000000000000000000007f": "51af93a015c8a1395fdf3030bfa74b3f7104037671ab930defa6eb75e222e1eb", - "0x0000000000000000000000000000000000000000000000000000000000000080": "7ca2f8c5a75e26ee5575e7d68fb5035c6a3ad57fb35b1308c19cf0c563e86b55", - "0x0000000000000000000000000000000000000000000000000000000000000081": "7614b81f123a279df0a712b8e9f0a9999add17fa9020ed9fabd1fd89315362cc", - "0x0000000000000000000000000000000000000000000000000000000000000082": "218dd8608e6cdb93545a3e1203979ab4ca55f0f5bccf76a533fdd191d19f708a", - "0x0000000000000000000000000000000000000000000000000000000000000083": "a5e002a44d498e7a40b8a36eeb8ce8101353c3d379a5955d5809fcaf559a2bfb", - "0x0000000000000000000000000000000000000000000000000000000000000084": "1f7613cc089d031344e77e764174fee74d4eb6f501f467664b12220179d10fac", - "0x0000000000000000000000000000000000000000000000000000000000000085": "ab82fa0386891a0f6590a93f3b0c6852f582a38757c1a32d1d37a8195830c9ef", - "0x0000000000000000000000000000000000000000000000000000000000000086": "b0d4b43954c092e02e74342616a87ee25e15dabb9ba4d94c0bd474a907dff210", - "0x0000000000000000000000000000000000000000000000000000000000000087": "f14886af3d36d40608acfeebf709b67d679146b86594eb7f3d717ec214cb423c", - "0x0000000000000000000000000000000000000000000000000000000000000088": "c310edfd4b8d1456b9d2f25ad392a0f409356115a0b6baa06c5055355e690380", - "0x0000000000000000000000000000000000000000000000000000000000000089": "eb26879fc8d9023ee720917ace6b9bfebe36c4b18c476581524c26ff6b1b1770", - "0x000000000000000000000000000000000000000000000000000000000000008a": "bc885f1dd76d6044edf950a00f65f8b7e09037b64694a8a5bf040a8f875df73d", - "0x000000000000000000000000000000000000000000000000000000000000008b": "3f8e6751bb589f71b4529f33b341be4bcbb64cc89a86ac00ba2ecd28b96843f4", - "0x000000000000000000000000000000000000000000000000000000000000008c": "53c40989ba0f74285db823aeb706fbdd2f34e53b65edf8edda6054f6fe0154f0", - "0x000000000000000000000000000000000000000000000000000000000000008d": "56aac6e61bbe149532c6f833c15bea8fd7739b35b114c63d0c81d1b6803a9324", - "0x000000000000000000000000000000000000000000000000000000000000008e": "20a194b00f602fcb1db01bb84014dda4654f7bbf59de521992100e4c90d95eae", - "0x000000000000000000000000000000000000000000000000000000000000008f": "6a7e2a65b2c12ddb337eef91aa0772eae0064f24028cbb5f8d4d7c0c8f1437f9", - "0x0000000000000000000000000000000000000000000000000000000000000090": "2f3f1707049c34f0ce4b2222d6cbe9f149d79a0e2c1ea6101058cefe33e9b3f6", - "0x0000000000000000000000000000000000000000000000000000000000000091": "b7332dcef7339e1aaf6fe2b41257738e00b916fbb030c919dafa065f36889886", - "0x0000000000000000000000000000000000000000000000000000000000000092": "03c384271631c83751232b695f032adf6fb4244c81cbebf3e6fdd030b61e384b", - "0x0000000000000000000000000000000000000000000000000000000000000093": "5d72bae0b85bb59e94d55b7f439c6c0a9a1a8a47fa242f5dc64a82b880260cfe", - "0x0000000000000000000000000000000000000000000000000000000000000094": "b3a80dd6748adaba8d2598da58441cc645b165d96de91b605122e82caff076d8", - "0x0000000000000000000000000000000000000000000000000000000000000095": "32305ca5493b007b7c591c7ea565ad705010ad747126202b191c78ffb49ea51e", - "0x0000000000000000000000000000000000000000000000000000000000000096": "11b82f7fbb7a781b00b4eb695a56aacd1a5477a2bc4e8167d4c08b95c4186e4c", - "0x0000000000000000000000000000000000000000000000000000000000000097": "7ad16d4c674b10a59ca3364904af33fa3713db2e963cf7c36da3f3172a917aaa", - "0x0000000000000000000000000000000000000000000000000000000000000098": "e756ee647aad508c521e5463abc774c9ad8d3ac6f25a52c4b6970a04f716331d", - "0x0000000000000000000000000000000000000000000000000000000000000099": "1a924af515c53c392afb3be5839f952f6495116f677ba7cc630c76d08fa12e24", - "0x000000000000000000000000000000000000000000000000000000000000009a": "0de1dee56d87848e4730dd05feae6c512a356a38bd52304e1e399e8d48be718b", - "0x000000000000000000000000000000000000000000000000000000000000009b": "de590f5a6aa2882e34cb6894bf54e16296d5abeb244c7df2c0b12ec627c41432", - "0x000000000000000000000000000000000000000000000000000000000000009c": "cf5949ad3562b8f632d82c9af77116a0b83b9b9806e86d0c2bce517c7be2e842", - "0x000000000000000000000000000000000000000000000000000000000000009d": "b158abf8e49c9fa6cf8103699f81039a82d085721e5cff677edec8c43bee073d", - "0x000000000000000000000000000000000000000000000000000000000000009e": "4c5f50016d24ab6a9b40d925d7b4be07d51679d2f5b12565958dfa80229031fa", - "0x000000000000000000000000000000000000000000000000000000000000009f": "dbbf71ab7420933453fd51ae3e6cdb95f05e1c25016e979fbe33deb794ea9ae2", - "0x00000000000000000000000000000000000000000000000000000000000000a0": "e2e850cb3176df3accc03247b8e9cdb15261ac3021c4911839aad275fe2a42ef", - "0x00000000000000000000000000000000000000000000000000000000000000a1": "5fd45fdf3f74bde3842258b46aec022feec7f5148302447a63b6e480d4444330", - "0x00000000000000000000000000000000000000000000000000000000000000a2": "639a8f45c9f9219f27cf4db4c33de2d346df8a09dcc770ac6044f60184330864", - "0x00000000000000000000000000000000000000000000000000000000000000a3": "45941317b4ff496cb5e8832d48f69c5f1d611cf609bf3d2933dba68dae211c49", - "0x00000000000000000000000000000000000000000000000000000000000000a4": "471066471af127a34b62c9f34c3fbfb26ba29d233f81d568f4d120d35d50ceaa", - "0x00000000000000000000000000000000000000000000000000000000000000a5": "e89e5d3756805d8458b5057f19b7d97faa7fa2351b2a08ddd75405c00af3a8c6", - "0x00000000000000000000000000000000000000000000000000000000000000a6": "8052bf3205c8803a64bb4cc52c4e86516db9734d9bf0ff47349a337e9bbe10e0", - "0x00000000000000000000000000000000000000000000000000000000000000a7": "dcf632311be8dfd6de736c05b4ae66e2aea72f7825fb23294bb8ccfeb218f486", - "0x00000000000000000000000000000000000000000000000000000000000000a8": "f4d88732713252e8ab1932ca55135b3819ef47a73a05002a338e5aa5617e7d9d", - "0x00000000000000000000000000000000000000000000000000000000000000a9": "5f5f3976768eaf850e525d41f05497af4731aa637d2b323dbc69154553943c50", - "0x00000000000000000000000000000000000000000000000000000000000000aa": "c1a9ccd5f651aa46a26433e521d6e7c4fcc6714f8fb9068ee4f1e0a8d043da0d", - "0x00000000000000000000000000000000000000000000000000000000000000ab": "9fb16206a35f8b4b9d8c30570c7010b5bc6a4149b5aa2ce42da9d60c92b5ea1d", - "0x00000000000000000000000000000000000000000000000000000000000000ac": "4d980e42bd8ab35744bf9b5aa58fbc8b71efd85b839b90e2e50584246a3831f8", - "0x00000000000000000000000000000000000000000000000000000000000000ad": "c9f402d074ac593ae2f09a8bb846b9e46963c305a8c33690c08ca0c8e0ac719f", - "0x00000000000000000000000000000000000000000000000000000000000000ae": "7c6e0e3b4dfc0728d41f7d5729a60d53758cafbab878bca3beed01bdc5ae9c56", - "0x00000000000000000000000000000000000000000000000000000000000000af": "36daac85c3d71809d96b04586cf5c50594ae2cafa74b9734491f6fb31b85142c", - "0x00000000000000000000000000000000000000000000000000000000000000b0": "edd306e502f0e098d70102017c0f33272d5934bbf766ef1c5ece71713d4f59c2", - "0x00000000000000000000000000000000000000000000000000000000000000b1": "1fdd1686c4e06bf2baf2287347ed95a45855aa4b546244e83e7aea4c6dd56a72", - "0x00000000000000000000000000000000000000000000000000000000000000b2": "a69441f08a1bef357d6f34fb74e4eeeaff0feb787f61e10879faf72609aeae24", - "0x00000000000000000000000000000000000000000000000000000000000000b3": "c37e2ca4253945c00e611fd26819875ef83d98dc20bb326a8e4ebbd804613214", - "0x00000000000000000000000000000000000000000000000000000000000000b4": "8564835e8d24f3fd01643847625fac3fa7bb13ba829c1a5ad7efd6ceda4f5bed", - "0x00000000000000000000000000000000000000000000000000000000000000b5": "c64398436144bb3196587e5ee9267e878400c5616f97cf97fd0921bae181bad4", - "0x00000000000000000000000000000000000000000000000000000000000000b6": "12d4a656b5b4d8d9c55515a7698a254fa74a397390a57167f785a2d3602539a6", - "0x00000000000000000000000000000000000000000000000000000000000000b7": "c858dea4bf702c29161d33ba7c02bfb4977169668843521b0df693d5eebcf5a3", - "0x00000000000000000000000000000000000000000000000000000000000000b8": "347ad864a477308c79cb4f766e8a6b62f4ece0a981cdfe49987e542acd89b5ac", - "0x00000000000000000000000000000000000000000000000000000000000000b9": "ac0c873a3d9942f92427ae37009ee280b326788fa803baba4dbbcc31736ff2ff", - "0x00000000000000000000000000000000000000000000000000000000000000ba": "5f67af973e604193cdcd68a80dea8ff0622ee1341330c1b8601502020617c2cd", - "0x00000000000000000000000000000000000000000000000000000000000000bb": "493bf6336f7b638f36a29952c86afbb58526152b62be20eb6433bee0474d62a8", - "0x00000000000000000000000000000000000000000000000000000000000000bc": "2febc2674bc628df6cde532fe9c598bfca92240c5f240d189aa372425c24487a", - "0x00000000000000000000000000000000000000000000000000000000000000bd": "341223f936840f7f6a33fd74e14e5ebe4300b215cfadf77a8f6e88bfed017dad", - "0x00000000000000000000000000000000000000000000000000000000000000be": "fcacae1b8715635bf3bbb10a375c44c799c2a882cab116306400381ff62e71f2", - "0x00000000000000000000000000000000000000000000000000000000000000bf": "ddb665db1612487f7e1e333fbb5f607b93bcfc618983de7dd61d76dac6f3d948", - "0x00000000000000000000000000000000000000000000000000000000000000c0": "cdeb0c3a06240f7f742c497bb142ac2477df943a878f8296b911b9f1169c1e46", - "0x00000000000000000000000000000000000000000000000000000000000000c1": "24b14515d27271ed944fd78cdea5855bbedf6cd84d65f925f8f06a426f7b1e4b", - "0x00000000000000000000000000000000000000000000000000000000000000c2": "d5f960e48e2767108920eba4e8e326c9fc3233c3a2fa349770f04debccc14826", - "0x00000000000000000000000000000000000000000000000000000000000000c3": "cbfad2a8bdfe5205c485383414e29d8e0a9c8b10812151d25bb51a74c95549a2", - "0x00000000000000000000000000000000000000000000000000000000000000c4": "078aa96db2936406a8d1d69a59f72bd60a908cbde5d2abb12166b41ff714977b", - "0x00000000000000000000000000000000000000000000000000000000000000c5": "c03fc9d4b6d49d1599717fbf75a9ad47496efb1ec6fafaa5b4bee2afae9bee30", - "0x00000000000000000000000000000000000000000000000000000000000000c6": "0fa887a20612f7ab9a00abfeb074c01ae4b509b4859c48c2e24abf27b7d7fed3", - "0x00000000000000000000000000000000000000000000000000000000000000c7": "bdc33ca00ea1641cf1ca2816913824999b73d47a92e7d5303c4104035ae78725", - "0x00000000000000000000000000000000000000000000000000000000000000c8": "44aa9401e0d5848c03c53c87cb883698f3a346340416803b666fce0eb7912595", - "0x00000000000000000000000000000000000000000000000000000000000000c9": "abf8b8c18e738be05befb8682083d8212b57c009c599b65535c4a7f47930bfa8", - "0x00000000000000000000000000000000000000000000000000000000000000ca": "c61c8872972b975d28191544f7200c3f3684a9e152c87f626b6c85aa56af4a22", - "0x00000000000000000000000000000000000000000000000000000000000000cb": "1e7e2004a340707d31625b7ac9ea03d7add6dddfa7c32922e6222147b86aa4b6", - "0x00000000000000000000000000000000000000000000000000000000000000cc": "13676db30bae04c5f3b7f190e44e72d1c1b1299567e9e3757603554f30ff45f5", - "0x00000000000000000000000000000000000000000000000000000000000000cd": "20836fb907f186aefcdcb5764e3d7c48fcd1b16bc98b967edd65b354e68a3e79", - "0x00000000000000000000000000000000000000000000000000000000000000ce": "5936f662e12c0f1b392611803d3cddbe33bb2d7605769956e334c560b372537a", - "0x00000000000000000000000000000000000000000000000000000000000000cf": "fa49b5f47466644348d75c491db8ff92813c96fb5b3f4a4deaa02bc92e3e134d", - "0x00000000000000000000000000000000000000000000000000000000000000d0": "6cedc591e85ed32d70655274734b636e3482105a5e9d416e62ef1dda2ddd4a9d", - "0x00000000000000000000000000000000000000000000000000000000000000d1": "53bfe21b477b2780bf2e1aa15b19710aa9bb5100cd7bb69c8cc3a881ae50ab54", - "0x00000000000000000000000000000000000000000000000000000000000000d2": "4c30c648a319319788200f7273f6de74e321f1796b01a2988f98840a11e307f1", - "0x00000000000000000000000000000000000000000000000000000000000000d3": "f490758a0266199a571a859efe170beefeb78de97d3a20328ac3d4bf07240fdb", - "0x00000000000000000000000000000000000000000000000000000000000000d4": "0a1e9c1d1ad91f4d574599fe8247974beb2ab68c78b43cdda303870ede057f49", - "0x00000000000000000000000000000000000000000000000000000000000000d5": "d89a67d59bfca6ef7942ef28cb121005dfd9c18b404a8dfb95e7c4d1b405a87e", - "0x00000000000000000000000000000000000000000000000000000000000000d6": "44e4a64750e4c9f6511df524c16e9cb23554a89325cf503b74f8f25f16253cec", - "0x00000000000000000000000000000000000000000000000000000000000000d7": "9a379148fa0512b767d90e2a9a20248c6c19441d7f9284b00f802de8d40c5404", - "0x00000000000000000000000000000000000000000000000000000000000000d8": "96ce02bc5a0630bbf7d4c1340ff68ba3cbc53a401d8ced01339937d2d764980e", - "0x00000000000000000000000000000000000000000000000000000000000000d9": "41eea349b7529f1465e872f4eeb3958da339bd18193b9055d1f77649b5b5a8b1", - "0x00000000000000000000000000000000000000000000000000000000000000da": "ecdbfed50e09e8bea9b23b0c056b9ef72bd724fd104590fdccfed99e26401a78", - "0x00000000000000000000000000000000000000000000000000000000000000db": "fa439516704748050ea45b059aad351048e40ae85f495fd0ec4e77c34a02325f", - "0x00000000000000000000000000000000000000000000000000000000000000dc": "8967b48c91a9a3ac039752dc1b0b5c091e38b28635f934949604b9ad0e2017e9", - "0x00000000000000000000000000000000000000000000000000000000000000dd": "4a6fe8bfb3d8209f060b20fd83362433e87e45b6059450ecd92207e5bb4bbdad", - "0x00000000000000000000000000000000000000000000000000000000000000de": "58f4f818948eb949af6ebbe9c9922a6742c45eb6c60cc272027488d0d0fb8207", - "0x00000000000000000000000000000000000000000000000000000000000000df": "75150cd02c717d33df03986668fca9287fa715ae9b3dc786e9a012689cbb4f2b", - "0x00000000000000000000000000000000000000000000000000000000000000e0": "4b087119094ef790b1981596fe9adfed930802ffbf33a9b5f91cf06b36aac5cf", - "0x00000000000000000000000000000000000000000000000000000000000000e1": "f7c7c5456af3ba05c94cd1d23c70ac90ea4b79b78e561045c649b08bfdaae321", - "0x00000000000000000000000000000000000000000000000000000000000000e2": "918ae7ac657fc84fc8cb10dcb3794f22ee74635bc3c48a09447f82525c8b4cff", - "0x00000000000000000000000000000000000000000000000000000000000000e3": "b77cf24f0c1fb354f7bf7c80e1804fdc2328774a1af50eb7959a46a8fe51a590", - "0x00000000000000000000000000000000000000000000000000000000000000e4": "b3317abdbcc0bdc256a422a5c333572f99ff8651f095922cdd5b995b44185a49", - "0x00000000000000000000000000000000000000000000000000000000000000e5": "3958180bd85edf4b17cf80881d40b68216a23a2dbadb92fff52757661070ec35", - "0x00000000000000000000000000000000000000000000000000000000000000e6": "b1503e5b89008f2ec7cf91492da840a6786f020d11cd33a8ebfd68ee824313ea", - "0x00000000000000000000000000000000000000000000000000000000000000e7": "74b7c334b7e246ba4cbdb9a91cf69bf72a3491ca4e39c2cda81e39c080bbe720", - "0x00000000000000000000000000000000000000000000000000000000000000e8": "5e06576f385d64e5475da19a55db8a1b49a905e54cdd00bc833f9a6e0d1821de", - "0x00000000000000000000000000000000000000000000000000000000000000e9": "cdf017d14aa10cc174c1f3f7d597eb085f52da7793e92fd8f84f0032009962df", - "0x00000000000000000000000000000000000000000000000000000000000000ea": "d85b3616680a40d04d64e6ee0d1b0dfbf1967634ca82b0a38be88513a556fce6", - "0x00000000000000000000000000000000000000000000000000000000000000eb": "aeb7dd5da8baa32aeb4a33f9d87914815fa0c941f5bc08e595d4e37bfdae7025", - "0x00000000000000000000000000000000000000000000000000000000000000ec": "d522a23cf0118178de9b0c94528f7161fa5f0e0c954ff141d86f7335fbed4276", - "0x00000000000000000000000000000000000000000000000000000000000000ed": "c24d834bba0307acaf2621819d979f535f972358a557d008cdd4374d6d7279e4", - "0x00000000000000000000000000000000000000000000000000000000000000ee": "bc7ccdf6cbccc29bfcb63055c8f06b26648f3b719434b29a74a477466fefaa5e", - "0x00000000000000000000000000000000000000000000000000000000000000ef": "84f81fe1c154c744c26786ae33b6ace4bc6e4e9318fd57b03a61e9d18ca64711", - "0x00000000000000000000000000000000000000000000000000000000000000f0": "ca2b42e197de583b704164d6db489ec43fe7394d38dd8a5752be70f52854ca58", - "0x00000000000000000000000000000000000000000000000000000000000000f1": "a09abb195168c21894826ccd65fa0c8549eb923a5b399c62cf9fd1011c465b69", - "0x00000000000000000000000000000000000000000000000000000000000000f2": "b4020e4b07dcf86bae80b8743a2ea666f6f3d45a5df2284109c25d7f51609ec5", - "0x00000000000000000000000000000000000000000000000000000000000000f3": "787fcaaf148ba19e63da9cd7d513303b2e8565baf64c4c28680996276e57c93c", - "0x00000000000000000000000000000000000000000000000000000000000000f4": "9d81061f02d7bf9a3a57e1b2b291bbe6100fdd34168fcc324a3e4c360168a058", - "0x00000000000000000000000000000000000000000000000000000000000000f5": "111ebb07018c6d7bf8df23b0454405dd991d7f8407d7c14f8bb86a0bd78032ac", - "0x00000000000000000000000000000000000000000000000000000000000000f6": "f0fff4c5758d8f5bc9e659c933b0267500c3dcd25916df0c0cd11f51a80057e4", - "0x00000000000000000000000000000000000000000000000000000000000000f7": "4063e7bd93501354cbef2184f7139559650a22eeca85d60bd62f4a468f2bd22c", - "0x00000000000000000000000000000000000000000000000000000000000000f8": "161049c951eaacfafd5b046be03ee813c9a9a6d3167fe4591f75673f0ff5097a", - "0x00000000000000000000000000000000000000000000000000000000000000f9": "f10eb78649d3c7dccd8a00576e460bed3eedf5e1e9b94e96cd2cdcf11c4171e7", - "0x00000000000000000000000000000000000000000000000000000000000000fa": "9d9c2b94a73067a8ba8736b77b159187bad6ce53b4372d3d0d0aa534aae1d7bd", - "0x00000000000000000000000000000000000000000000000000000000000000fb": "a4b169ebb5479f117266df73694d46f704685c3d756d411dcb5fc0b15f500f47", - "0x00000000000000000000000000000000000000000000000000000000000000fc": "205a14b20d2c13f174859295063f88da3779c22b3cd8cf8d3718cf014f8c0af9", - "0x00000000000000000000000000000000000000000000000000000000000000fd": "68ee7090901b0083e417d17e1e9eb637b50146077b32d5f3b63568a738220c98", - "0x00000000000000000000000000000000000000000000000000000000000000fe": "1d4e0daba7e6bdc87c5ecff530bca645bbe36a6a538e27b956c9c106607d982e", - "0x00000000000000000000000000000000000000000000000000000000000000ff": "adf3ad66db1c5384657a2b75a1753887c646c629bd10a8a50d15097b79c14cbc", - "0x0000000000000000000000000000000000000000000000000000000000000100": "9ae54ebf672230a7e3ae4ef423aacf24189f52e240c1356817cb32d767618063", - "0x0000000000000000000000000000000000000000000000000000000000000101": "ed093194e152b98e10d55a8db6403780d17346e9eff9c511712725e08c422381", - "0x0000000000000000000000000000000000000000000000000000000000000102": "cd35112597db3095f6c10b644aee930651c44a03d8c168581d8aff8d26050491", - "0x0000000000000000000000000000000000000000000000000000000000000103": "46728f520936c769482557b2d4d05386f030a3d9c03cca9d123940d3d3fc97be", - "0x0000000000000000000000000000000000000000000000000000000000000104": "65989a6ce9bd74150837c8f8feea080d86236e1706b2b1d9bb42ae329a212110", - "0x0000000000000000000000000000000000000000000000000000000000000105": "1244e39eddc59b8d38c3c9e609867b149bb1222e3087fcde4e60d1785f9ca6fb", - "0x0000000000000000000000000000000000000000000000000000000000000106": "9b11fa343fc18df51ad37fa94c9d6c17916786bbbab8bc10e3a3d1c0580e0b2f", - "0x0000000000000000000000000000000000000000000000000000000000000107": "6bd2bb001303e7dfb428c75ea4bd6dd7115d6ff61add2924cb23a0115c920884", - "0x0000000000000000000000000000000000000000000000000000000000000108": "db94bbffb05461e4f8a83c827cb5b0cc8e54ce71af9f4b57fd712c7bf245a67e", - "0x0000000000000000000000000000000000000000000000000000000000000109": "669d2fdcd20848e3f746c76753dac2763d798d43492e58e75eec82ef4fb156b3", - "0x000000000000000000000000000000000000000000000000000000000000010a": "8bc68b8a166d2b68a73be23ea20193dccd82a3bfedac661f969bdc32fcd454a4", - "0x000000000000000000000000000000000000000000000000000000000000010b": "f8160bbab91163c4b7120ab3c60606cc47ba1ec0e765daf1d68ca0dcf52d2787", - "0x000000000000000000000000000000000000000000000000000000000000010c": "3f4cebd4ebd414ba3710ad5eabfefa06fc5f007c62ef0900e07c263e1923889f", - "0x000000000000000000000000000000000000000000000000000000000000010d": "51a4821b633b80775e02a85aafd3a58ed2796e158c03aea46004e25ca138eaa1", - "0x000000000000000000000000000000000000000000000000000000000000010e": "6904e188fffed4cc41632df32452ec9bd4cafdee6f5d76c36e1b2efd33ad9079", - "0x000000000000000000000000000000000000000000000000000000000000010f": "f6354df3badf86b25e2f88f4630610c9c756a76eab5489bf84dc4b5faa5dfcad", - "0x0000000000000000000000000000000000000000000000000000000000000110": "a3f857458c4f8e850d17825dd663d51219737a227a157cb9f3eb21a7dabf3c12", - "0x0000000000000000000000000000000000000000000000000000000000000111": "a9e96ee23c11f8d5762340e128d2280d87ee788885951468baa9a384665b95f7", - "0x0000000000000000000000000000000000000000000000000000000000000112": "443c32584ab5e94cf1393eba7de764dcbf40a903572c0b1737a2198537886269", - "0x0000000000000000000000000000000000000000000000000000000000000113": "1910146905689fbbc61f374a7bde5325be084f307a5617b7bdb319691d7cbe7e", - "0x0000000000000000000000000000000000000000000000000000000000000114": "5d602bc5189b5a955faeb7842825c53c4cd335c0cac7756599e3a7d7a9b1e604", - "0x0000000000000000000000000000000000000000000000000000000000000115": "7cdd5d09a0af5e26bad74166fd6a4324185ee337b005e5df5f4f67f00155cce9", - "0x0000000000000000000000000000000000000000000000000000000000000116": "da06797d4ea9e2d242a7f1d77163e4cd0d18aa7e9ae04a2357c7a359c3a7897b", - "0x0000000000000000000000000000000000000000000000000000000000000117": "69c23b6cef19f994ec1120ebe41647daae8fc602ceeccb500bef3599ea8dc4d6", - "0x0000000000000000000000000000000000000000000000000000000000000118": "1be678ea3efa6308b7fb5b3102651a8493462715c6b09f6cd9697efd05fc7d0e", - "0x0000000000000000000000000000000000000000000000000000000000000119": "f776a4d1d5c352151872b684cb240fb3b7d163b655fd5939337a070a7c896d7a", - "0x000000000000000000000000000000000000000000000000000000000000011a": "9dc4808f611d1b29c89fe57085c64ec7815675f779d602734d45848babdaa5ce", - "0x000000000000000000000000000000000000000000000000000000000000011b": "e015df4bb2e84589a3bf64fa91b73091581910b42e0ee91f1d6cf25912d60027", - "0x000000000000000000000000000000000000000000000000000000000000011c": "9f3faf24dbf97542f5dcac91d35da491af51e24504e58f42c328ba2758b0b268", - "0x000000000000000000000000000000000000000000000000000000000000011d": "594c9091455bd0cd08631909cab257feeae3a05401a43544e423c759be125f77", - "0x000000000000000000000000000000000000000000000000000000000000011e": "1f1d279ca073fab2be1f425ff8c09696653b77632516524baee6171427d75532", - "0x000000000000000000000000000000000000000000000000000000000000011f": "c48ec13e43df85d25ae98c82d9ef4c2d1d09195aec3de87dd7b36f9cb530e234", - "0x0000000000000000000000000000000000000000000000000000000000000120": "082ba48558d19f6911b12db3e969c8f770871c5836cbd2a02d6686624c744c88", - "0x0000000000000000000000000000000000000000000000000000000000000121": "1e9ef85d67a81bd278cb21a68a068060358717f518aa9a31059b0ea52e9470f5", - "0x0000000000000000000000000000000000000000000000000000000000000122": "92ccd6105a6a3d6636516fc3de3d1d5b83476e27c6c15f0d1f0a4ac3cdb77f96", - "0x0000000000000000000000000000000000000000000000000000000000000123": "59eb05ad455dd8785b7a82a8ec0b14908b49b9b99b89438e48a64f2c35dbec5f", - "0x0000000000000000000000000000000000000000000000000000000000000124": "8aff95cd5730ce6970eca865968ba524b1e66c7688319793c6edaa11791b0a33", - "0x0000000000000000000000000000000000000000000000000000000000000125": "e9652de769d861b7ae1ff71d6086d0049ff01ee57126e7b37f8acb1009efdcb7", - "0x0000000000000000000000000000000000000000000000000000000000000126": "62defc14b1b4b19b963574f0ddbe0b887a8017d28661a9d889c55729a388a40b", - "0x0000000000000000000000000000000000000000000000000000000000000127": "98539ac0cea39c8cc5774cb783fa5993c03ab9e2dcc9e2e24ac18d9af67dacb6", - "0x0000000000000000000000000000000000000000000000000000000000000128": "84018a2df44823700329319d9aff27b73093f4284a45402e4a40958dde3ef298", - "0x0000000000000000000000000000000000000000000000000000000000000129": "e2c8b858ba858e6c7b73dbc23702f10a9a75117fbeaa447084be91921cfbe7f5", - "0x000000000000000000000000000000000000000000000000000000000000012a": "0a1092b8900b3db78271854ecef3b6b400f1fec980047d9ff07a130255a910f2", - "0x000000000000000000000000000000000000000000000000000000000000012b": "a1e26afee8565c8352f0dcc623e984f72d24e09e005aba99f916fdb7c3807ab7", - "0x000000000000000000000000000000000000000000000000000000000000012c": "dba21acb5043d419d3e972fad568d8e6179cffb0654e73c7f093a48877f38e9c", - "0x000000000000000000000000000000000000000000000000000000000000012d": "4d7b2d7c56da60a9b57c4210cdedba40311978ea1aebf519aac65867e16f6a3e", - "0x000000000000000000000000000000000000000000000000000000000000012e": "5ee998d96985103ae9e6f31a41ee0d44a4da62003a63b5ff4f29570aa42ddee4", - "0x000000000000000000000000000000000000000000000000000000000000012f": "81db24e85960807d0f347bacc0364a9327e64955fecca02ab5fcc55efdc4a37f", - "0x0000000000000000000000000000000000000000000000000000000000000130": "9cbca6aa8b06935a740ab85580674c5cd4b2a840d078c92e005294241a7eac81", - "0x0000000000000000000000000000000000000000000000000000000000000131": "5121438babb00581bb8862b84bfedfa4d586d59b08f7de67cad8988693061458", - "0x0000000000000000000000000000000000000000000000000000000000000132": "2c00478ccf60b7813adf88eae40d7f36cb2bb19d7d3a5e41904411d59f85b85a", - "0x0000000000000000000000000000000000000000000000000000000000000133": "bd2d25d7773172160974f1a8b6b790c629e44a011321c53a0cb08888b9cac459", - "0x0000000000000000000000000000000000000000000000000000000000000134": "a8a4ee8234dac48e460f619c77d02008ff818db6cf1a0a80de6a81af3e0d7e91", - "0x0000000000000000000000000000000000000000000000000000000000000135": "11ddcb0efb438a2965ba558170ed3ccb27ac43bc3f7028628edcb3406a1d4623", - "0x0000000000000000000000000000000000000000000000000000000000000136": "ccff97103894795edef27f3a29b05a2109a4f024d3c935233faff6be394b92f7", - "0x0000000000000000000000000000000000000000000000000000000000000137": "aac581c002035b4c80879f87a1418a3129921f493472482a52b09d0fb6233f04", - "0x0000000000000000000000000000000000000000000000000000000000000138": "7e3909c2f8ede6f928c0820363dbd9abb712eec9f7be844bfcf8d3d04a538bfe", - "0x0000000000000000000000000000000000000000000000000000000000000139": "bd1f3e51c77a927fc30973f8452ada7e030b8452273afd75dff18884af8a204c", - "0x000000000000000000000000000000000000000000000000000000000000013a": "f976366428e1f9e79b69a03a333c3ea2d57804cafad16ea0301def95480afa16", - "0x000000000000000000000000000000000000000000000000000000000000013b": "3752f226d6f4f227e0d59f153fcdefff90cc3aa9566c14b02bf86a5ba7e5f740", - "0x000000000000000000000000000000000000000000000000000000000000013c": "bd34ef105826797a46b3ccc8b4a82c61897bce87047aa90ca88d590887dcef52", - "0x000000000000000000000000000000000000000000000000000000000000013d": "a2689bec112dc66781dfbbfe0877f3b56c055872e331b6d45acd6e8d97e046e6", - "0x000000000000000000000000000000000000000000000000000000000000013e": "3f028560d99874cc15a76dd76b7da32cdb9548a9e262b5c986bc62ae920e643a", - "0x000000000000000000000000000000000000000000000000000000000000013f": "a0755b0908be2efd8534b105a279c0045087852b3c412f2d3a888988e4fa475c", - "0x0000000000000000000000000000000000000000000000000000000000000140": "dc88273a8339355e4c23b544329f1564ff0f17cda095b1ec2dff43d3dd0e39ed", - "0x0000000000000000000000000000000000000000000000000000000000000141": "ea4108c88374dcffd042b2fd53de46cc82aa3a0c1573c6228198529dd90ad350", - "0x0000000000000000000000000000000000000000000000000000000000000142": "89aa4d141def4c923b06aed9552126683bfb54e96f310d8fbc98bdef21e3b319", - "0x0000000000000000000000000000000000000000000000000000000000000143": "5e09d28a6f9e43be4a5f908f764b9c25db1fcb323d9af4d54a9a486721b6b766", - "0x0000000000000000000000000000000000000000000000000000000000000144": "a8e614e1553ea89015d1c2d2d90ef31794bacd4f661a9b8ca0e8f57cb8358a99", - "0x0000000000000000000000000000000000000000000000000000000000000145": "772516ae20b52f5521b3a703dd4fcecd98f348fa2f0523f85aa4b801d46b8a2d", - "0x0000000000000000000000000000000000000000000000000000000000000146": "40137062068c2bef8766bb8df571f0e0c341f3877dc1d7311c84177331165a5a", - "0x0000000000000000000000000000000000000000000000000000000000000147": "c10d42ae21c805f56d5f486087ab29e6c5f16d2743dceea53e68b4c4ec8c41de", - "0x0000000000000000000000000000000000000000000000000000000000000148": "f37ed9b3c15bebe2c65743e7013c97fa8b75f97e8791a353c033c16171a82fe8", - "0x0000000000000000000000000000000000000000000000000000000000000149": "8271d4efd4a54b038c0cc02e2a437d7cc3d96aed9148763fb2825fcc1ca58a1c", - "0x000000000000000000000000000000000000000000000000000000000000014a": "a9505142d5e8f2f3585f3d753c6cc615395b9694739c2aaebfdfbd52ea22d378", - "0x000000000000000000000000000000000000000000000000000000000000014b": "4d6b8d46d03208985e99ee7ca9d38e3ff54871672663c6a1cb4d8a558fe8b5fc", - "0x000000000000000000000000000000000000000000000000000000000000014c": "317d6cd8a8783099c05585ff4132c92fa56746ac04dc89d01f90a6087d95e3fa", - "0x000000000000000000000000000000000000000000000000000000000000014d": "1aa7fbd954a82016be127f3624a93bda8d45351191031f3671060abf2fbc7140", - "0x000000000000000000000000000000000000000000000000000000000000014e": "f0a0f1e9079642d9be82b1a2c786bf1c89f4e0bec03cbd6c1be96b92c47cbeeb", - "0x000000000000000000000000000000000000000000000000000000000000014f": "286ee500a7ccd24305014fc9ed773b472aa0e9de2005f98b0136bbba193e89f9", - "0x0000000000000000000000000000000000000000000000000000000000000150": "2f60754b89d3acfa2cd8e479e2b94e90c07bc5ca92f5e49b3d0280a30775893c", - "0x0000000000000000000000000000000000000000000000000000000000000151": "1d2172c03aa39bcb2ff80dc3a80b157ee311f01f1972c3ae61df2fbc08581df1", - "0x0000000000000000000000000000000000000000000000000000000000000152": "b5038ea078e022c5f7c97429a3f36c5b15ef525012266a78784315d5f5f8f742", - "0x0000000000000000000000000000000000000000000000000000000000000153": "b63287f903b3d2cd28cec281f1de235c85ed05ba3857e28cc86f9c29f39d57da", - "0x0000000000000000000000000000000000000000000000000000000000000154": "9c476efe697f7d3482e8a3a620811c6dc88ed3b98cdc752a53bb756d13a6dcb5", - "0x0000000000000000000000000000000000000000000000000000000000000155": "de9ba0e426dbd981f0ea6eb968d6f3a725b664f175d245e6e9e2478ff44afb72", - "0x0000000000000000000000000000000000000000000000000000000000000156": "36e28ee4cdd767038d87e898e8b59f777b31454f9960e87ab3fc258223c5b212", - "0x0000000000000000000000000000000000000000000000000000000000000157": "2955e6adbcf58ce3f34fc93da829c9c44a6641382ff92336f8cdedd1734669bd", - "0x0000000000000000000000000000000000000000000000000000000000000158": "4ef098ab7baa897a6c538545fe29382fbc85c59ac78a01b5428a0db58bb5bfca", - "0x0000000000000000000000000000000000000000000000000000000000000159": "ee27e318aea1e83eb7b252d701fc255f8a295bc048819b674977db2140507eaf", - "0x000000000000000000000000000000000000000000000000000000000000015a": "99c16f02cab4384eae354d510b84f49fb3cc77ac1a2deeaa87c7342894ce256b", - "0x000000000000000000000000000000000000000000000000000000000000015b": "38c75f8d455709c7dbb8ac586e04a2579d9e7d28a4d33a460588b70612a882e8", - "0x000000000000000000000000000000000000000000000000000000000000015c": "346083b60f44fd307e10d7e0f67b5da3d1230332adf26749cb5c80d00003300b", - "0x000000000000000000000000000000000000000000000000000000000000015d": "def08200cf595f64a706819f16a1c39b7409cbbc14fc29a87b50c95a3f9e0464", - "0x000000000000000000000000000000000000000000000000000000000000015e": "701b50b242d6e6062020d66c4134f678c49fc7887ba1f962f97863b7648626f2", - "0x000000000000000000000000000000000000000000000000000000000000015f": "3265fc38a6c5684461c72e9c03fe1ddd99a53cddb2d371d0fc1188a130d76e79", - "0x0000000000000000000000000000000000000000000000000000000000000160": "84bf2031465aeaaa042fc5f12c7cf61ce1cdb3225525bf961b115bffb477ba2d", - "0x0000000000000000000000000000000000000000000000000000000000000161": "95d03fc9c7ab7b1f91a38325076295ba7251541246ff6929d4c3b4d7af875705", - "0x0000000000000000000000000000000000000000000000000000000000000162": "d7e39656fea33b079d0fffa85665bda655e35ac8cd609b24db52fc10dd22030b", - "0x0000000000000000000000000000000000000000000000000000000000000163": "56f28aefa9c8a192e22bfd3ba9946ca3b8d1e96897d3599f8f7ce0af473662b6", - "0x0000000000000000000000000000000000000000000000000000000000000164": "a256e8a74e0d5f0db511d6df3d329492b15504f515278ff998d108a49902a8d6", - "0x0000000000000000000000000000000000000000000000000000000000000165": "fda145c2f89e067fcb82e98c5a201fb8f9949d578a1b87241e6f7c103fbda5d4", - "0x0000000000000000000000000000000000000000000000000000000000000166": "c60a413c6267e5f34ee8e27efcb89e2bbcdd4b839cb0c961f7dd37805181626f", - "0x0000000000000000000000000000000000000000000000000000000000000167": "9267c3d2e49d9a2fbb84a69db614d9fb33bae938ee4bd0fadcf5cc033562bd8c", - "0x0000000000000000000000000000000000000000000000000000000000000168": "f66d68a2b0dd9fbc45a5646cebcb99e8af641c8a372724264058493e141eaa46", - "0x0000000000000000000000000000000000000000000000000000000000000169": "cafa23b21dd847e0a6863e2d6a9e81749d2ae6174e340bf3ed6c27e030ed38fe", - "0x000000000000000000000000000000000000000000000000000000000000016a": "d6aca4fd2acf5ca563efa815897afcfaa175b8955931f699ae4018ac86eeea91", - "0x000000000000000000000000000000000000000000000000000000000000016b": "16b4cebad9f39a7db380791451d3a9dd9c35dbadc751254c41f94cae8280358e", - "0x000000000000000000000000000000000000000000000000000000000000016c": "505a6bf5ab0f40712af88078826c83c152e5ec99fd74ae718e47c0f1b6c7c0fb", - "0x000000000000000000000000000000000000000000000000000000000000016d": "0f15f04e28de513a6e468d22860d94e5389a07b5b630f8a8e7b84ed7bc0b8558", - "0x000000000000000000000000000000000000000000000000000000000000016e": "7371118bf9383f5e8b92bbb6cc9aaff94c06477228cde2abfffc48cabafc1bec", - "0x000000000000000000000000000000000000000000000000000000000000016f": "77d7c2eb0af7749896c1be40161508d650c019a8fdfdabab4b34b47f0caa5a80", - "0x0000000000000000000000000000000000000000000000000000000000000170": "c3c6a43b0a9fec6d3e9c232cd9048eb4b655f8c779ff7c510195e75d4c3cb3dc", - "0x0000000000000000000000000000000000000000000000000000000000000171": "024a6e084b404338002e6dd8b70331a3ad6d896cdedecd23db0c7db0cca13ea7", - "0x0000000000000000000000000000000000000000000000000000000000000172": "4ac493337944aac392f8ec72d0187775a98712347f2d3a8ce5e6dfade5fc88e1", - "0x0000000000000000000000000000000000000000000000000000000000000173": "53f13c2ada283dad19b4c6e1f5d01844ecdfce9b5e5cc064e025aafaa95c97fc", - "0x0000000000000000000000000000000000000000000000000000000000000174": "5aebb1a84a124ace93a6955bad2c1d3e26769ad5c4c8f7952bca62ffa6ecbb72", - "0x0000000000000000000000000000000000000000000000000000000000000175": "722cb497906813e0dac64a5e558aebc697f65a0929bdc4c9b763507b37d17442", - "0x0000000000000000000000000000000000000000000000000000000000000176": "86eef2cdfc7f44f813f99a5699adb200ac3e48a490a1e01656f2991f1655f387", - "0x0000000000000000000000000000000000000000000000000000000000000177": "f80b907a5268d198f59415e895a2dbd2d2f0ee499394f873bcaad64be35ba295", - "0x0000000000000000000000000000000000000000000000000000000000000178": "c4db6912f2653a9382b68bac827e5dd2eb40e3231f203a2f1f8eef0f72e6f02b", - "0x0000000000000000000000000000000000000000000000000000000000000179": "499ed1595f081f971a86fa5d465264ec4ebcf362ca75b566c64ed9e143779b92", - "0x000000000000000000000000000000000000000000000000000000000000017a": "b079707f805c9e021d3e353694af2c1295ff098e90f96b7e597f604df32d4f7d", - "0x000000000000000000000000000000000000000000000000000000000000017b": "07a887698ad470a92e0ea4b515f4e0c1eef4d02e005090f039ccad1f98dfa78e", - "0x000000000000000000000000000000000000000000000000000000000000017c": "37c51aeb36996d1204e1cc23f24fc8ce6a531230eac5fd95a0157afbae993408", - "0x000000000000000000000000000000000000000000000000000000000000017d": "fb7823c99d6a8cecf4576cccad394131869c27c19903241a4bac149e8a9df5cb", - "0x000000000000000000000000000000000000000000000000000000000000017e": "b43189b040f33d48780cb23517066fa7ef9be143f72926c776dd2a0deb74cdd8", - "0x000000000000000000000000000000000000000000000000000000000000017f": "36d98a00fa9cb5f2d23adaac16766bf86c534154016d362227b77a09e466ed03", - "0x0000000000000000000000000000000000000000000000000000000000000180": "864f50b8a89fc8049af6830206eeacfa26205d9ac2f1e9ef297c024532a57be4", - "0x0000000000000000000000000000000000000000000000000000000000000181": "a68dad1f5a2ca3fec7174293fb1eafeed1b3e1209dfc74ba1d4f67272530d1b9", - "0x0000000000000000000000000000000000000000000000000000000000000182": "b5d6be7351994263965ff5d6bec155497dfae4101d9fa6f7474f4346432cc94f", - "0x0000000000000000000000000000000000000000000000000000000000000183": "435041bdf7d03562f6cc28be67dd48e2a55cb6c36a8bde74217c78962fe35c04", - "0x0000000000000000000000000000000000000000000000000000000000000184": "74659e9bea0d8d39ee2966f14026731c00cfeac2addae8ab7440f3897752035a", - "0x0000000000000000000000000000000000000000000000000000000000000185": "8166e02057fbd66e2bdfdeb5e1b7348030fb8dcdf336c608186ecdf95a878d73", - "0x0000000000000000000000000000000000000000000000000000000000000186": "686342d6e14add1de361c209a4f097174472120c2649d4b1e3c0d69478c573a5", - "0x0000000000000000000000000000000000000000000000000000000000000187": "69ee2c164e201f10e82103b762fa299a98efcd3efb531d7f684cc93fe20877bc", - "0x0000000000000000000000000000000000000000000000000000000000000188": "977c2a14bc576911c691938eb8badf6a77843c4214b0613133fa356a23aa7f92", - "0x0000000000000000000000000000000000000000000000000000000000000189": "d9a295a0e39c94e3e9c9305b2e410aa89ee5380a8c343b901fc2ce60a19a431c", - "0x000000000000000000000000000000000000000000000000000000000000018a": "f2d8812d4f28578755d4229aef19bd2162c69cd9dbc684dd6a0b0b64c979bd73", - "0x000000000000000000000000000000000000000000000000000000000000018b": "c64105453f3f4a50ea7452760ca6066140fc6f2115e16065c397778756460d79", - "0x000000000000000000000000000000000000000000000000000000000000018c": "ff05bd7ed3a3f4e5abc2e5232c98d4343072bfd25121b241932703d33f875c0f", - "0x000000000000000000000000000000000000000000000000000000000000018d": "2fa9e1447264c03da65b930986c6c67078d887aa0b6252b49026c3bbc522ca59", - "0x000000000000000000000000000000000000000000000000000000000000018e": "10c9eb1115f231e7a50650aa52acc568532a80c7c1e0d695517fe4da1d493a8e", - "0x000000000000000000000000000000000000000000000000000000000000018f": "5abe00a7721db9dc1fbf458d49714c666ca2424e476099adfb77fd8dd54a0eab", - "0x0000000000000000000000000000000000000000000000000000000000000190": "ade4149b0375ad07777a88bf87a50426806e7e69c98719e63763ebf8585d39be", - "0x0000000000000000000000000000000000000000000000000000000000000191": "90544280b5a1c89044d0a9acf28015355e9f87f99cebb6e423a2429593805c3b", - "0x0000000000000000000000000000000000000000000000000000000000000192": "cbaec457a9bb83f627a46b321256873866c0a5c079315e1294328fc71b7d8529", - "0x0000000000000000000000000000000000000000000000000000000000000193": "888127ccf7a04b3ab6dc54a687036e7464c30e3fd813a0f4ddc69094cf250b90", - "0x0000000000000000000000000000000000000000000000000000000000000194": "08d7f2f015c06dee88d707cbc050021fd38afd6a253d3382a783e92ab30f22c8", - "0x0000000000000000000000000000000000000000000000000000000000000195": "729c0e22346bb677499d2b9af1da34dfaf7653ace58567673fc6894cf8d56289", - "0x0000000000000000000000000000000000000000000000000000000000000196": "d60f9025487642346d1ff6fcb21558a0b719524dda4fb773e50254be6ea5cb70", - "0x0000000000000000000000000000000000000000000000000000000000000197": "c2f378a6349f5ff2413494603a2bf9bf387182e0d7b2e042e0aa9bdde16b44e6", - "0x0000000000000000000000000000000000000000000000000000000000000198": "2332603e1b89c41adb97428017bd2297310b5deeca32af3d79c88a23090d5aaf", - "0x0000000000000000000000000000000000000000000000000000000000000199": "0b88f4a3ea4fe334e0f85983fc3ed8f0e5031f76642df83e9ffddff65637cf43", - "0x000000000000000000000000000000000000000000000000000000000000019a": "d5359ec7c8dbda34bbb1391a68ee130ee2fd94cdd86f2e6683e4ca680ef2ee43", - "0x000000000000000000000000000000000000000000000000000000000000019b": "e068d60356aae28f3154fa8f886f0f0067a7b74b524601c2f623610d258cbebb", - "0x000000000000000000000000000000000000000000000000000000000000019c": "650b963d47bb9f9b86c29b9d9e52c219bb70525460c04812bd6da741c0e4f90e", - "0x000000000000000000000000000000000000000000000000000000000000019d": "a36c2bf72d713f99a25528fb03aa69429831432f179f6c7c406918b542f76ea5", - "0x000000000000000000000000000000000000000000000000000000000000019e": "3987af76d0a00951e4513199ee41aec1071161b52151ce66934cda577c4336c6", - "0x000000000000000000000000000000000000000000000000000000000000019f": "7158030722716ed4b3153861925682677908d60a72f68d54c31732380dda9939", - "0x00000000000000000000000000000000000000000000000000000000000001a0": "fe58c2367f07005a8773b7faee91e02dbafcb140bc800a5145ee2e31dcca251e", - "0x00000000000000000000000000000000000000000000000000000000000001a1": "e75e1fff4381bbf11eaa336b11a4a79a82f0a39a8afeda3673bc6b98bf091f92", - "0x00000000000000000000000000000000000000000000000000000000000001a2": "7de3c0bd5e846119edcd858e4d51f0c0153974ea077bce8048eb3e7d191c3c65", - "0x00000000000000000000000000000000000000000000000000000000000001a3": "c6053e841c2e4bc75e4e959e1b74a9387b351bb4919ae295314e834c5d94e6ed", - "0x00000000000000000000000000000000000000000000000000000000000001a4": "404b549fee0787cefdf4065cb76e3a0e66aab2ad8c6a318e9adfe0bc4a73b85d", - "0x00000000000000000000000000000000000000000000000000000000000001a5": "1ef7fa7c852474808b71df44ef25db220e3dbbb3fd5e18cbb7445b0546b2dbb7", - "0x00000000000000000000000000000000000000000000000000000000000001a6": "c5e3d5218b2e1a652c2f2d9613df0b5e389b8695c73562332f4c3381d59faddc", - "0x00000000000000000000000000000000000000000000000000000000000001a7": "3bddbb879a8d46f692289da30f77e1ba669940bd42a1279d275b94c24dcaf9e0", - "0x00000000000000000000000000000000000000000000000000000000000001a8": "5ddb9e58b0ef297a051097bc988e136b1749d9f3445561b6b14a692fad23b8da", - "0x00000000000000000000000000000000000000000000000000000000000001a9": "36be5e83ae2b1baebbb956bc7c44f540745e5a78a59f3ca2aa088fb994fc62c8", - "0x00000000000000000000000000000000000000000000000000000000000001aa": "cd0da9da1e9b992dbbc4e98d488adea3b884852750ac79bde2b2ea2265a65d9f", - "0x00000000000000000000000000000000000000000000000000000000000001ab": "a5a646fb42670f9bb6782713ff7b2cdb24cd4bb3323b0586c5e2c03d03221d30", - "0x00000000000000000000000000000000000000000000000000000000000001ac": "ec2df5da5678a7b5ea6e5606f84879096c1b455ff0c9fe35679c9436c77953fd", - "0x00000000000000000000000000000000000000000000000000000000000001ad": "3b1fcf135ef30081e41bfa1d41b0fff91843274d326b76a81723c7cbcf81c7a5", - "0x00000000000000000000000000000000000000000000000000000000000001ae": "76c48fbe8881579636df3e68fe55621e99026e7d9810b74ff9cdb7557873d056", - "0x00000000000000000000000000000000000000000000000000000000000001af": "b0915a68a1ecb0bcafe6d483d3fddd6a93249d963db6e9650695570b2d494448", - "0x00000000000000000000000000000000000000000000000000000000000001b0": "fdda715666ca9712626e528f4570ffb24d48cdcc62e14571241d1a2f61576c46", - "0x00000000000000000000000000000000000000000000000000000000000001b1": "91bab78100c2b6909b533e246d772659957330f8ddfcf194087a8fb67bdfb6f7", - "0x00000000000000000000000000000000000000000000000000000000000001b2": "ad585c5a49c5db92630ed7c7b67fc367f3405060a0bff9de9dd64b996505a66d", - "0x00000000000000000000000000000000000000000000000000000000000001b3": "b8b4a3064cf8c569375764e5323ef7a03667dab6ea562bedcf67aeca7ad55e44", - "0x00000000000000000000000000000000000000000000000000000000000001b4": "53611bef1500f1568f35390b80eb6baf31ffaf9d8a4d34aab3932e5adffcecb5", - "0x00000000000000000000000000000000000000000000000000000000000001b5": "dd0f743e193c79a4a3ac080b01ed2ed15d9321300c002d70d74fb4c9b44564fb", - "0x00000000000000000000000000000000000000000000000000000000000001b6": "cfffe2d9251de471b21928c131be8ecb1b332ec4a9ffc226e64f041820caec47", - "0x00000000000000000000000000000000000000000000000000000000000001b7": "758647ab7f0d8935064c2c38ef6a2a34457df9c78297c2d42376ce18051a4a56", - "0x00000000000000000000000000000000000000000000000000000000000001b8": "1431bfb93a91538f50aebe4b46add424df29fddb8a479eb51c44539f7425d9c2", - "0x00000000000000000000000000000000000000000000000000000000000001b9": "f2d3d4be2e09a5499d838936b169c6ccf83a1dc510305e54e1e181243480bdcc", - "0x00000000000000000000000000000000000000000000000000000000000001ba": "9b8c6ecde0c9f7d3096db113472984400265c16b8f423527046f7c9cacec1c0d", - "0x00000000000000000000000000000000000000000000000000000000000001bb": "045aa374dc38d101b3846713180df1f69828e97bd630e2264149777bb19ece35", - "0x00000000000000000000000000000000000000000000000000000000000001bc": "e316b409f1472bfb043c4be4e9654a37e2a898850d9bdc815cb9ca1a44b29118", - "0x00000000000000000000000000000000000000000000000000000000000001bd": "5cf2998fd231bdc16bd2c20b02d58af1f81d846a058464ac2e74f75a0485a33b", - "0x00000000000000000000000000000000000000000000000000000000000001be": "576518015f61ddc9e28fcf964fa2a13490057c8f8ab669ad82dd2e6bfa19879b", - "0x00000000000000000000000000000000000000000000000000000000000001bf": "21d1d59bcf21cac072a2803938f6fd69d922d1e47a8b7049d8818266bfc27951", - "0x00000000000000000000000000000000000000000000000000000000000001c0": "e4e0607f25a8dcac8a8f7758373f3bbc1bc35176e239966d35a57925684b82fe", - "0x00000000000000000000000000000000000000000000000000000000000001c1": "8b744a371a22b4986eeceb8ee0f512ca44affb56ecd495cea9e6c66a490e1f9b", - "0x00000000000000000000000000000000000000000000000000000000000001c2": "ca1d7f951d628dd35b23cac8c21070a5740d64bba614089170c895a0ec8f57ef", - "0x00000000000000000000000000000000000000000000000000000000000001c3": "410876f7d8880a998a060adf663027422ab139d54e12e973c1bb8342844cb351", - "0x00000000000000000000000000000000000000000000000000000000000001c4": "b30c453a9fb88e026819b182903ff90738d44f4237cf66139fe010a93c83ffb4", - "0x00000000000000000000000000000000000000000000000000000000000001c5": "5588cd9a04aa1c7e5590c15bf201aa722f59c4aa952bedd1e0de2cd2026c016b", - "0x00000000000000000000000000000000000000000000000000000000000001c6": "ac273cc7933a2407ec16281e6c7e43bb9b24efd517f53122d265c0fd8e400e6b", - "0x00000000000000000000000000000000000000000000000000000000000001c7": "de0c3b47b2a8550abaebd952555b5a604916b2aa0c3516ac07f7cf9bf6d289b6", - "0x00000000000000000000000000000000000000000000000000000000000001c8": "305bd96c60a6435f5371739f23364940ac2ee253e9a6f8d3bd89a623112533e8", - "0x00000000000000000000000000000000000000000000000000000000000001c9": "322c4d0e57f585f032d5cbfff69c3adb7ac8084c95761a9bbad98b97f101327f", - "0x00000000000000000000000000000000000000000000000000000000000001ca": "721f94cdb4c6e847bfbc88d65c74a8eb476178d1fa868af25151fd17256aa5cb", - "0x00000000000000000000000000000000000000000000000000000000000001cb": "e98015589d78db8a32de341208e325d7613c6db8683c7d1376113589e15acf0f", - "0x00000000000000000000000000000000000000000000000000000000000001cc": "ca13a2bf7d0eb0db6335849b7706678ec18caf013540bf57873532d5bc5cced4", - "0x00000000000000000000000000000000000000000000000000000000000001cd": "4d93ae5d91ac6a55b6fe9e452210d4e60472cb09900262104063f91e1c4475fb", - "0x00000000000000000000000000000000000000000000000000000000000001ce": "4557b30a7674af7cbacde7748dff90a2d7b4b2a86f9d79d791e89d39f818a4b2", - "0x00000000000000000000000000000000000000000000000000000000000001cf": "07a8c620ead87a45afb4e0e815a54ca217e4054077635d1524710f1ce5ecea24", - "0x00000000000000000000000000000000000000000000000000000000000001d0": "87bca64e4e6c1a83cf43da1257fa59a376009b2c9f2f37487f85eb8013fb2f0f", - "0x00000000000000000000000000000000000000000000000000000000000001d1": "5984be6ef98b1e35c943bed4caf24066c34bea65dd09cf99762e7e3b6e41ae03", - "0x00000000000000000000000000000000000000000000000000000000000001d2": "223fd06ad6b3a95d0ca0b0fac2819ca9cc7abbcf53686cd3cc9ea9a7099aed2a", - "0x00000000000000000000000000000000000000000000000000000000000001d3": "bf9df0134a7722c090ee27e9061af8e32ba1f36de3561cf540aa19c1e0301694", - "0x00000000000000000000000000000000000000000000000000000000000001d4": "3426b1051fd2963cf74c091c9281236fec075e3b1a6207e0ea8bd590d234231f", - "0x00000000000000000000000000000000000000000000000000000000000001d5": "108535b032c23c831ea3f0e5e60b628b1653a8d4ff2a04f84ea0c28a5f7a334c", - "0x00000000000000000000000000000000000000000000000000000000000001d6": "c57d09bf4689a42694a8b98bb6ef2cb60c0af0446b6dbd1f55fb9d19743d0b6f", - "0x00000000000000000000000000000000000000000000000000000000000001d7": "62ec7b9a65be76bed69c2d1b89c7338fd99f11c52ce57d223d0978ad2623b666", - "0x00000000000000000000000000000000000000000000000000000000000001d8": "88fc2bd51129c6a76a5fc4d74e5bca399695ea9b272f65febb655c211ffecccf", - "0x00000000000000000000000000000000000000000000000000000000000001d9": "4a6fe7d7a0b3433c8c0017a34efcd408751e24ee224d865746e43ee5dbc6b72f", - "0x00000000000000000000000000000000000000000000000000000000000001da": "b4d421616ea7a4adc51abdc1eb68ae4517c83a7e65545ad5bd8570fea865bbe4", - "0x00000000000000000000000000000000000000000000000000000000000001db": "35ca0c82bbc6c2a282e04efd935ad91744a76f738b1a05f543f362089b077549", - "0x00000000000000000000000000000000000000000000000000000000000001dc": "a2e71dde107bc1f02f8f2303e84580a4061adb821347fd065dea806464488543", - "0x00000000000000000000000000000000000000000000000000000000000001dd": "8c2efd84e25c29636ce86228e1fa39045936581562d1d80d1273951d3a7e5b5b", - "0x00000000000000000000000000000000000000000000000000000000000001de": "ae195bb8f9a28f440a0a10bbf872db2c50aae4f08d49089e3b8783187b8b2d5b", - "0x00000000000000000000000000000000000000000000000000000000000001df": "d74fba51d365cdfe355295a9a9cb7470ab1ddb53070cc23dc84706d30a1c9d65", - "0x00000000000000000000000000000000000000000000000000000000000001e0": "586bfb94de868a094829593278f0059423d4b3a4fa381118368e866ac9ad174d", - "0x00000000000000000000000000000000000000000000000000000000000001e1": "ed9fa0da61fcefb49df7807a0e827069520dd2e1b7823c23b6c8316f261a1526", - "0x00000000000000000000000000000000000000000000000000000000000001e2": "2d4f68ab5cb1b7d5942ed325911da4de560c281bc4165f12e79b40896faf9240", - "0x00000000000000000000000000000000000000000000000000000000000001e3": "173ba1064b822d7fd886f79df09291855941c7e187348cb1be74b4f3853ac46a", - "0x00000000000000000000000000000000000000000000000000000000000001e4": "5fe23349b74796ea88667c124d31b7f83d1ea6c55888612d0546fcd8781469f0", - "0x00000000000000000000000000000000000000000000000000000000000001e5": "44b4ee4af4ea93cdc1f6d6a7600b78b1f18918e5adb36a95773fb69f0c95960b", - "0x00000000000000000000000000000000000000000000000000000000000001e6": "6e1a5f320d6c603aebe7b47c6f98bab7e6ca3f63648853117f90681ef82be343", - "0x00000000000000000000000000000000000000000000000000000000000001e7": "0e0736ecbc21d8283a34e648718dfde99dcf213778a19cbb385a528281994d02", - "0x00000000000000000000000000000000000000000000000000000000000001e8": "8d71815cf7e21c74cf91c9f2ff59fd941cbcf127084f929254498163c494f183", - "0x00000000000000000000000000000000000000000000000000000000000001e9": "bff2f568d9a26daaaedd8e26e46d3eecb122cfb8c091bc194d6326c88d058f1d", - "0x00000000000000000000000000000000000000000000000000000000000001ea": "509d2a2521abc4c30ba8b397d9e86976e6134a844bea08ebeac4a4b009bfdd32", - "0x00000000000000000000000000000000000000000000000000000000000001eb": "c73fe82ce95274c1aca827b1e2bcbdc56663f172a9a808e02fb03b594afd5494", - "0x00000000000000000000000000000000000000000000000000000000000001ec": "8e940db2d4e9688d0eac137008f26832b205e32c67877475cc0348c38be128ab", - "0x00000000000000000000000000000000000000000000000000000000000001ed": "c4686ab32da32550e9cc95adc86e731d96b3498f28c3454972b8647922a8c775", - "0x00000000000000000000000000000000000000000000000000000000000001ee": "2acc9875f08bf7c9185aea7dcce6c1163b303e620de25993fb494a866f831b9a", - "0x00000000000000000000000000000000000000000000000000000000000001ef": "e5e2de3cd1a2a8f6551e93be0ab3644c84c9653cae77d63caa4a10f5b805ffd4", - "0x00000000000000000000000000000000000000000000000000000000000001f0": "6413cdb135c067bf7c9894bc05cbef70350d5d2bcd089f661257b80a28d71a26", - "0x00000000000000000000000000000000000000000000000000000000000001f1": "e800f779e224dcc43b5c7bb57da2d643e20dbdb53e1cd60e41207b620a040b5c", - "0x00000000000000000000000000000000000000000000000000000000000001f2": "e3bd2dc0e6af6253299c175f22a860b34d75ee109faa0c7dc437c94c8e35643f", - "0x00000000000000000000000000000000000000000000000000000000000001f3": "44924c88d1ebadca339c20badf7e5e22ce7ec673cfcb7305d46487417a852cde", - "0x00000000000000000000000000000000000000000000000000000000000001f4": "7151d7993c13af657fb9afbcad9340ddb46fac82b873b64baf85f8f5780151df", - "0x00000000000000000000000000000000000000000000000000000000000001f5": "eb6625cb0981451d810c0172e25819ca3b6fc2035ea04542f3dee1dce7c516df", - "0x00000000000000000000000000000000000000000000000000000000000001f6": "efab54ac6e96aa6fc5d3270f7a928f03ab557ce9b7d2ed68f08825ca50c6307f", - "0x00000000000000000000000000000000000000000000000000000000000001f7": "f0591fc75f0711d3d9234011205cb9bd2c40a3477994d943e6d7a12c72e8d613", - "0x00000000000000000000000000000000000000000000000000000000000001f8": "df54b762c56706ef7861a0725b7fd4f01aaadcac614d3d3f39569cb8e621fd1a", - "0x00000000000000000000000000000000000000000000000000000000000001f9": "4effa3cb8383f0ece82c3391e95ce6a88be26f87bddcc62dfd99cd7a5a11dbfe", - "0x00000000000000000000000000000000000000000000000000000000000001fa": "2d903ece7c308b988d585304235cb0f3bacbafb64ec0b62da27c1f77aeb18d76", - "0x00000000000000000000000000000000000000000000000000000000000001fb": "5a1cd86c8a2bb05874d5fd341035e7228067175a1c757b91f442dc34922a1b", - "0x00000000000000000000000000000000000000000000000000000000000001fc": "9e7ffa6ebba334b9810de0937096a05f054a43eb03621ca8874411e5ddaf7543", - "0x00000000000000000000000000000000000000000000000000000000000001fd": "68b50078b3394b06d6ee3a3b12462a38eb85286023c07d90e290ba808b5da702", - "0x00000000000000000000000000000000000000000000000000000000000001fe": "bae08b3b1ac544135b3a06fbaafb931229a99d0e47434318580146086ce0dab3", - "0x00000000000000000000000000000000000000000000000000000000000001ff": "91711182ab4cdd63dfaac9e02b07f4d49016fe1ac744ff90843bd1f52f893761", - "0x0000000000000000000000000000000000000000000000000000000000000200": "fc6438ea7c3138aca8cf840a05aa7e627ecea40cec8d6166406f98449ba6182f", - "0x0000000000000000000000000000000000000000000000000000000000000201": "d7d6cfbe9f350fc0643592dbd7a2a98639f92b0183cee49ef6f5d99aba72b47a", - "0x0000000000000000000000000000000000000000000000000000000000000202": "e42d2c63e650101bc54d149c19d67b78ec05431cfc15134146790f1da71548b2", - "0x0000000000000000000000000000000000000000000000000000000000000203": "718c2451b8df916754650ca5d9a3fca98e0f9209d41cdafd30d3ee9343b12216", - "0x0000000000000000000000000000000000000000000000000000000000000204": "64f5dc426951c8d5c389bed1af605f9101235dbfaa4822f2ba83bbe9973be25b", - "0x0000000000000000000000000000000000000000000000000000000000000205": "1841a4c413f59d37b93421bc6d165288e0546f1261e25357feae9c96a66402e3", - "0x0000000000000000000000000000000000000000000000000000000000000206": "289f40c44da44e6d545900ecfab81d0d86b9756e74d6bfa2fb0095cf28a93cdd", - "0x0000000000000000000000000000000000000000000000000000000000000207": "b80db8759f920638458bd60e8f97e9a0773970c30941cf2744f4db475b5c53a8", - "0x0000000000000000000000000000000000000000000000000000000000000208": "4280ca715e955153245aa296395bd7f179a13606f4e909119b1d58b7b0457e34", - "0x0000000000000000000000000000000000000000000000000000000000000209": "56c95098c7c859b8b786bc2f776f739ba109a1d662beb8545294938b9ce5ef4f", - "0x000000000000000000000000000000000000000000000000000000000000020a": "ed614b855d979afefa3c40027ca4b6fff89a1467173e85302b48a478bfa7abad", - "0x000000000000000000000000000000000000000000000000000000000000020b": "f379747713313c3ef604ea0d5446066edf0b695213acfb86388ba46e6c926bae", - "0x000000000000000000000000000000000000000000000000000000000000020c": "71345ffec2ba388522c6703f19f24c5af1eb742a44d2ae6749276739d138912e", - "0x000000000000000000000000000000000000000000000000000000000000020d": "c73d56854a544ce56956bab6d4ffab7beca0ec861ff5cf5906aa2aec20682c75", - "0x000000000000000000000000000000000000000000000000000000000000020e": "d543d5b576ae572d9996cd3d05295368b201e3c618ae5da30fbec43cf24b52a3", - "0x000000000000000000000000000000000000000000000000000000000000020f": "dba4322406050555a1a8cfbae1c6fd627bee7757384059a41bfd5b6147543f53", - "0x0000000000000000000000000000000000000000000000000000000000000210": "9eadaf49e03a16c9c7cb8d2ea59c3285d7530750a462d6a9338e9a9e730b1055", - "0x0000000000000000000000000000000000000000000000000000000000000211": "eefa15b3aa7fbee117a78b61a365f6e38b6d8ae21482bc2eda241e637d43af8a", - "0x0000000000000000000000000000000000000000000000000000000000000212": "3c7d782eb5bbcdd254bbdb120e432c90d9b0510a3c7e64507ed2c82fc01a2a7a", - "0x0000000000000000000000000000000000000000000000000000000000000213": "56d781324e6bdab32f417adff9cc2b4c645f819184b323f47ec974574121b309", - "0x0000000000000000000000000000000000000000000000000000000000000214": "997c22b77767599b4d1f9f7d21ad9b34b1e13e5ba18986d4dee06d282e89e453", - "0x0000000000000000000000000000000000000000000000000000000000000215": "49223c27247cbb012c480dd78497ea761f0de37eab920e169067d710a6c697a6", - "0x0000000000000000000000000000000000000000000000000000000000000216": "09f9f3b73c653b5d3440ff550da397d5d6b4dd3e3297a2f2d3c5e67bb128afc9", - "0x0000000000000000000000000000000000000000000000000000000000000217": "6e277d1000baa83809de9f5f90fc8a3387d1ff660f9a7d7857ec4c3e66f70d57", - "0x0000000000000000000000000000000000000000000000000000000000000218": "eacee55ad16ffef8f34262dd2351947882b5c327565581fdaece63fe35c8044c", - "0x0000000000000000000000000000000000000000000000000000000000000219": "d13cb1082077f93cf162c8868d1e2ddfa3987c12f0b4d17de8f4e456ba9f646b", - "0x000000000000000000000000000000000000000000000000000000000000021a": "323fc2bb76f6f190369ed67f4eed60233e9ace45b6b77a8a545147f6e2a12826", - "0x000000000000000000000000000000000000000000000000000000000000021b": "1a26d12a9846cfa2af53cc33f21eadb49c2f39560b460bbb1d7c253025da7917", - "0x000000000000000000000000000000000000000000000000000000000000021c": "a68b828d73467b4edbb8f3a188d1d23b8de8113e1157ebe14ec188e8f266637e", - "0x000000000000000000000000000000000000000000000000000000000000021d": "46d5ce094294750e8d8c4508cea607a110ac887c6876460834bb7f944fb3cba0", - "0x000000000000000000000000000000000000000000000000000000000000021e": "8d3698f018ddc839a43997a360b3715b80f6f8fbf70836166601ecc42439b1df", - "0x000000000000000000000000000000000000000000000000000000000000021f": "bdaeadf6d9045a0a986c15262d81d49e1f12a3301035d7d7d03855f315498397", - "0x0000000000000000000000000000000000000000000000000000000000000220": "4466a1b8ce15a2b972b93d345e42e24d6c55e49e6e6b390daa111115737c8893", - "0x0000000000000000000000000000000000000000000000000000000000000221": "aac5449b0cee4d0ff7e6dc495061712400e5f908b5f5699bd489f8433c7f3ce6", - "0x0000000000000000000000000000000000000000000000000000000000000222": "bfc6905b39a1fd70f2d85dbd0ec084fc9bba34dd6bb89e4feae605de3472a46a", - "0x0000000000000000000000000000000000000000000000000000000000000223": "1320207357e4a928664d17895ca63c2e929115bf3078b13a0623a42b1361a27e", - "0x0000000000000000000000000000000000000000000000000000000000000224": "6988fc4983a5d91cb76203880fcb0be8d513013f9eda28c6db7c27d0e457f417", - "0x0000000000000000000000000000000000000000000000000000000000000225": "293913aa6fd6784e2dabfa7bdbf08dbcceac77ec746f2beaffe37f5c82ebd6e7", - "0x0000000000000000000000000000000000000000000000000000000000000226": "3c64be9f5fc05b3a06c21263201805872058b6dd89f5871f56126074937d7d69", - "0x0000000000000000000000000000000000000000000000000000000000000227": "9c0e5ad32b88aabd00d4e08f111128f36d2b3b9d00ec205b4deea450d7e20f52", - "0x0000000000000000000000000000000000000000000000000000000000000228": "ee8f988f3c18a72c2abea54699c856a15afdbaeae545924997985cb47210c6d7", - "0x0000000000000000000000000000000000000000000000000000000000000229": "90036a13de8b68ad7fa9658cb90a841951763c528de8a3891db006570d06760b", - "0x000000000000000000000000000000000000000000000000000000000000022a": "641e4d31a221b340b02dfbe9aa430eab15367721b41a224ad5aaf44d60bfb649", - "0x000000000000000000000000000000000000000000000000000000000000022b": "dfa68efde1f8c73371b729e119655153388ca5404df5f27cb8aef2d5dc49d472", - "0x000000000000000000000000000000000000000000000000000000000000022c": "e069e5bf125ec3bd85fc691a6e299363e03130bbbdcbb1d4c0e7ed74c44d19ae", - "0x000000000000000000000000000000000000000000000000000000000000022d": "7d4c7faff291a34dab9ad08cc22b38e3e0623fbd96e53041f1936aefea2d3d01", - "0x000000000000000000000000000000000000000000000000000000000000022e": "35fcbe1e362b97d634c17b08b78c253df56c0f4a52fdcc1da23c4c56871485aa", - "0x000000000000000000000000000000000000000000000000000000000000022f": "944867748f6677c888eeffa2f0ab037f72791f19d4957c1b015300f87e8f6946", - "0x0000000000000000000000000000000000000000000000000000000000000230": "e2a46fb9f878a562bb0392bec6634965964c742d80102bed78abf111455c1530", - "0x0000000000000000000000000000000000000000000000000000000000000231": "b229d60b67c1708d3994b81cb282f73ef6d2ae75438e401f4c8025562e2340fa", - "0x0000000000000000000000000000000000000000000000000000000000000232": "b3b6afe52f6d14dd44a71f1ff185ed96179409250f324659fa1d1abd1b232739", - "0x0000000000000000000000000000000000000000000000000000000000000233": "adafa5a8ecaf727c48b659ef4ab3204554e7cf7b27e69207926a5a62c24fcab6", - "0x0000000000000000000000000000000000000000000000000000000000000234": "dabd6ae95f5c2d68740f3001b8321ff60efcbd343b4c1d27e425b6e1d6dcbbef", - "0x0000000000000000000000000000000000000000000000000000000000000235": "bc4039fe1b1fe6767d379b48649f0208eedd6211fd09012c410e96231a70bd32", - "0x0000000000000000000000000000000000000000000000000000000000000236": "83db531e70791b6207c14af0b6321145a00614c977b70fd0668270988de4d5b6", - "0x0000000000000000000000000000000000000000000000000000000000000237": "d790766e32a204eba62eb8748875d63e58f290375cb77e1a8e06cee26be50aa0", - "0x0000000000000000000000000000000000000000000000000000000000000238": "5f7355f8b08daee6ee6be9e9522ecedee0db5282463952021b5eef1bf8fc6c7e", - "0x0000000000000000000000000000000000000000000000000000000000000239": "cd23cbad2ba375c546161adcaee6c4c81319c164b1ad8466811b7490b95e286b", - "0x000000000000000000000000000000000000000000000000000000000000023a": "f1357f71ed1cdbcf8c1a31552f1223403b9d85b44dd4ff2c9a3683ee440c95c8", - "0x000000000000000000000000000000000000000000000000000000000000023b": "b69086a5e21ff6ac0b0177b825eb4ac57307f19211d34d5d27f270d74ca07a17", - "0x000000000000000000000000000000000000000000000000000000000000023c": "d5c1878d16190ffce6abc0972a9250ab129a383fecf447dd5e1e5fe9c560e2b7", - "0x000000000000000000000000000000000000000000000000000000000000023d": "7adf3774b7bd3f89b0948e1ddbbf300835f06dcee2f437e09ee4473df6c8a07c", - "0x000000000000000000000000000000000000000000000000000000000000023e": "2dfc4f087156df89e8f26744590b923f3a81642defd298dd1a1db5bbce0b3d89", - "0x000000000000000000000000000000000000000000000000000000000000023f": "e58a461ab85b4e2208262ab6de81621a9fe3c96e4eadb9253e7baecdec571434", - "0x0000000000000000000000000000000000000000000000000000000000000240": "0bdeb401cf2ad8a1f33f3e6a71602b0720182bc5a290cbf92a20ad5a47b421df", - "0x0000000000000000000000000000000000000000000000000000000000000241": "29456e95da920f3dbc36b3dc0a926f2dec210b800550386ca672ed6110b169c6", - "0x0000000000000000000000000000000000000000000000000000000000000242": "ae6208b2d4c5f776a63eb1e4dc138b366387fe7ddecf72fd98130637bf65dfeb", - "0x0000000000000000000000000000000000000000000000000000000000000243": "bba5107c05a512e72c49b459b20a6ecdc1cfec225f866ef045c9a3693df05905", - "0x0000000000000000000000000000000000000000000000000000000000000244": "626d2bcb3645a3cab73403328051faad33be5e5f5f75ff38e195b77dfb0fba01", - "0x0000000000000000000000000000000000000000000000000000000000000245": "af6d014836a41c11af83a95a92d5324c0dd0e063a6feda19a05966c97cbeadf0", - "0x0000000000000000000000000000000000000000000000000000000000000246": "6268abdce6bb3bee101c9e848666f3522cf429cab4725f23a27a5eb9575ed2fe", - "0x0000000000000000000000000000000000000000000000000000000000000247": "5f5a1ffa3df60840b186c814fe10bee8d745a195f68174d5097067663eb692c8", - "0x0000000000000000000000000000000000000000000000000000000000000248": "b43bd5c412948cb43408ac47c85d080b9bcdcecc982ec14aa3a09dd531edbda6", - "0x0000000000000000000000000000000000000000000000000000000000000249": "fea440ef23de659e22508daedb4d4dd91a5bb39df9d3f039a24cde8ffa6527e4", - "0x000000000000000000000000000000000000000000000000000000000000024a": "5bda26af5e60d0a9bdccc94a59421b97f0d82cc828a117643b021ca4dbaa4372", - "0x000000000000000000000000000000000000000000000000000000000000024b": "bd1d9841873dd0a26419f9a183a78370dedd826f922adeff78afef05811f8f71", - "0x000000000000000000000000000000000000000000000000000000000000024c": "5f40f6bc01be52c0a6f0f800c4120e73ae430d2a0e2cc6cfd6958ef33aad54e6", - "0x000000000000000000000000000000000000000000000000000000000000024d": "5528f6ef151d9a9f71dae57e39b1cd2c5c6e5c7e0cd3a419afbee06e313d9f47", - "0x000000000000000000000000000000000000000000000000000000000000024e": "dff8f0703a0840e4d227f77f46348869d6c8b8c30b872137b26a9e2842914410", - "0x000000000000000000000000000000000000000000000000000000000000024f": "4ce9196d2fbc4bda9fcb9ab61e86167c9e1b547e873a7e5226f922b18db59953", - "0x0000000000000000000000000000000000000000000000000000000000000250": "5ba98af8b68bbf0d86879ec911858300293e7bbe347abc02548c5084ab5a0d3e", - "0x0000000000000000000000000000000000000000000000000000000000000251": "3d33f3036b1399cf00cc8966e85b8553b5d7d4127ad121f382df765661a6627a", - "0x0000000000000000000000000000000000000000000000000000000000000252": "3ed14e1e4d79669a7104b244f12d0dbbda1873230eddacca3ddf00d5e278be9b", - "0x0000000000000000000000000000000000000000000000000000000000000253": "93a7231507f57e163e3b2e48a47132fc1eff83375b041b46a35e61a090ded25e", - "0x0000000000000000000000000000000000000000000000000000000000000254": "42f57c5994becd0c778c625c4564b288f2ddd5523bf3505dcba11d4f31e317ea", - "0x0000000000000000000000000000000000000000000000000000000000000255": "05b8baa80ba3a0782ff6cade5129fb4e3cc8733de5d8da918d2338245ab76b6c", - "0x0000000000000000000000000000000000000000000000000000000000000256": "7d4219f429001b5f014e933f9a36aa865d09955de79a8292aac8a00e75ba0f03", - "0x0000000000000000000000000000000000000000000000000000000000000257": "65151b101682b54cd08ba226f640c14c86176865ff9bfc57e0147dadaeac34bb" + "0x000000000000000000000000000000000000000000000000000000000000000b": "c2edbf6987d529aeb53f0446650f0c76fd4aac53d87319bd3906700461531e28", + "0x000000000000000000000000000000000000000000000000000000000000000c": "0263c20a17979b8bab4b53b9a8b028faee4ae62a22fd604e17c72a1c5113c5ab", + "0x000000000000000000000000000000000000000000000000000000000000000d": "96767c27f1be95f86f185bdc4f2ad2b9d0cf8fe0179912270b9f09a56dd885db", + "0x000000000000000000000000000000000000000000000000000000000000000e": "998edaa40eab431c0cb0907adfbbc45bd0559758eda2cc11ac1d0142783db4f7", + "0x000000000000000000000000000000000000000000000000000000000000000f": "32c4b00fa9800092d28ee17d5a2941a100ed6ac3ec1514b774890b9b226ffd43", + "0x0000000000000000000000000000000000000000000000000000000000000010": "827cbc8dc6bd4a545993d61ce2833f7baa3ffafccf0c43da845780b2c60c4f0a", + "0x0000000000000000000000000000000000000000000000000000000000000011": "8be0f38f24af217357167bb37fa76e4bb07257cbdebbd7060c012dee3685a2b7", + "0x0000000000000000000000000000000000000000000000000000000000000012": "33cd3f00a5d4b4786f1028871a2431b2a5cc06abcc1f06d56f520c05c8d709aa", + "0x0000000000000000000000000000000000000000000000000000000000000013": "6d69508bcfee6a79ab1f9b2654eaa9767beabc4aabd0777b4d16a1c7fe2308d8", + "0x0000000000000000000000000000000000000000000000000000000000000014": "dccd539eebea31af7d83c77ba7b57529a1111630bf3eff5da9eaaf3bdb06cdc7", + "0x0000000000000000000000000000000000000000000000000000000000000015": "b4125effbc4875925712ea7af12b9b8efd356f9daf371e37982d9d80986500dc", + "0x0000000000000000000000000000000000000000000000000000000000000016": "153171ce62d3a05bfc910c2dc9dbfe08d0b674de9053c4ba50989d55ba75545c", + "0x0000000000000000000000000000000000000000000000000000000000000017": "631eb6b3e5d105379784bae7414c1a87100222dfaa82de3cbbd449cdbdddfda0", + "0x0000000000000000000000000000000000000000000000000000000000000018": "db9610ac987150d64e0c47bf2bf4b4b6c225f7c869a8a3c21a8b4ed42a779da7", + "0x0000000000000000000000000000000000000000000000000000000000000019": "484dfda7c0064b4361c5bb164ab29ab46b2f6e4ad1e4d08e054cf87092c301cc", + "0x000000000000000000000000000000000000000000000000000000000000001a": "b83ddbaec179e4a8ca479524a47d3ae87cf9d0d9cbf10f36e4cd27b095f03487", + "0x000000000000000000000000000000000000000000000000000000000000001b": "d17fa84bf309999af41acc3a1e006f5f9bc96a7c6bd8343f8dcd851171f89bbd", + "0x000000000000000000000000000000000000000000000000000000000000001c": "f95e9ebf1649ad621dce264eb56c4695b2c12bcfdff445f4081d42a1bf35cb93", + "0x000000000000000000000000000000000000000000000000000000000000001d": "ecb61d653cb6ebe9236bb36c31afd4637f6ebfaf9a84b53c8ab8d5557a177e57", + "0x000000000000000000000000000000000000000000000000000000000000001e": "d454d2e47ddd6508e26a8e6f5f7739c4816e682f72940004b983798e9874db24", + "0x000000000000000000000000000000000000000000000000000000000000001f": "cb4c113282733de5e500f67e1e2d34dcb1f5ba78d50fd1ee64f589985cbc2e79", + "0x0000000000000000000000000000000000000000000000000000000000000020": "279a30e5b6459ce8cbb11314c86ce121cd09ccfa94e8431da318c389ced90f1d", + "0x0000000000000000000000000000000000000000000000000000000000000021": "bfa427b49c4b9c8ac6629f2a2d1b62c0e2d3d4e793e603af64d9eb7438b694a1", + "0x0000000000000000000000000000000000000000000000000000000000000022": "8595bd36d4362be24f82626e410c5240689ad948822510812add6669c17e60bf", + "0x0000000000000000000000000000000000000000000000000000000000000023": "abaae2a5e966b2e2b1de55c4cd3ae9d8eed5a7a96994eb8627465ed0d9d15fa6", + "0x0000000000000000000000000000000000000000000000000000000000000024": "ebaf8a77d6fe68c176d3074a8f4b9c702c4b5e96b801a1410291fbe2cc6421e2", + "0x0000000000000000000000000000000000000000000000000000000000000025": "8a76724de35afb575efb81ef8ab58346825486d654168ef5aeb2f80912e61a78", + "0x0000000000000000000000000000000000000000000000000000000000000026": "9463185605c120f1bbec5549f567ffb50e0a4dd1bb5d202a312640cb3faf5e72", + "0x0000000000000000000000000000000000000000000000000000000000000027": "817c992ddaad0c33d972ff29048a8ec435e562707950ec4c0d9fb77dbdd84ae1", + "0x0000000000000000000000000000000000000000000000000000000000000028": "8d61211d9778e2315598b11c7b715f8a96a3e7b3f7242a280a590aa728a2c2cc", + "0x0000000000000000000000000000000000000000000000000000000000000029": "cb0a318ccf7de5604a9beb6772ba12ddde924fbf0e1074246c5a6864c203c020", + "0x000000000000000000000000000000000000000000000000000000000000002a": "9634b9df44977f0b85afbb35da1ffd571858e7ab44f2ab3e440f920031e57fe4", + "0x000000000000000000000000000000000000000000000000000000000000002b": "9f769468769e89b9dc650168649eb0c666f70c82600be471f072caefe08c9d55", + "0x000000000000000000000000000000000000000000000000000000000000002c": "4cb55e0dfa4d8e35270542ce0d83991a2b2fddd789475d675f8af1c7c9715594", + "0x000000000000000000000000000000000000000000000000000000000000002d": "5cda29c5e65864ba897efa8e61cbefabb0653e2c90aa6317cc66f8b7ea849855", + "0x000000000000000000000000000000000000000000000000000000000000002e": "4fab41210b0a89ad65ef56cccce7146b0c7792e631cb57f9d45f2c390c0930e8", + "0x000000000000000000000000000000000000000000000000000000000000002f": "7bab3d8b7342961697225b52e7d8bb83b46cc34903907b0e4661947eb109afdc", + "0x0000000000000000000000000000000000000000000000000000000000000030": "bfeba0d543fa88ab54802a9d5206fd41b5718136dfd21a9c821efb609698750b", + "0x0000000000000000000000000000000000000000000000000000000000000031": "50e8364ebc7a92e7caf312e0b10aa59f685d32073de47561185a14dfb3fce1", + "0x0000000000000000000000000000000000000000000000000000000000000032": "cf0550d9f0e956ea4aea8fd5d4412812acb72922b3c6bd47c8a0086bd0c4abf5", + "0x0000000000000000000000000000000000000000000000000000000000000033": "80994d3ef7108fd26e8124978fbad74e9223d3205785161c272f91311e7481b9", + "0x0000000000000000000000000000000000000000000000000000000000000034": "164df48af3dddb7478b82f0c716a3e991ce37c2c13a60959409e4e1ffd139f49", + "0x0000000000000000000000000000000000000000000000000000000000000035": "2c22e6b47f0dc7b95265f02e285984be0c2d2462a9646c69b0c7369b93ab859b", + "0x0000000000000000000000000000000000000000000000000000000000000036": "c11fc865b8f4414834cdc0b3d92d5ff380c8078f3b61eca63c3f05a33d0ed9b7", + "0x0000000000000000000000000000000000000000000000000000000000000037": "7f47b785f867aacca1b27d55186dbb6a7a9a6b83754e6d2d0d2b9f1698f32f27", + "0x0000000000000000000000000000000000000000000000000000000000000038": "c0df0d295b403cc825a0825f741923f806f603ff53aafcc04f6b91f39dd35198", + "0x0000000000000000000000000000000000000000000000000000000000000039": "9f7f274336bcfaf82e4f7696590eb831dee46dbe71821c14a197810edcb2834a", + "0x000000000000000000000000000000000000000000000000000000000000003a": "abc3fbe0c41b79c30f91b2834dfa28a2a3ca23aff7505b53ef5383f3fef45987", + "0x000000000000000000000000000000000000000000000000000000000000003b": "761bd27a0e51092eee4eaa4a545708b2df734d240ec2e5909e784e478752626f", + "0x000000000000000000000000000000000000000000000000000000000000003c": "fee26a4ca9c8d56be94795b13f522d026f47a749fb3969c5f5ffa7465acefd36", + "0x000000000000000000000000000000000000000000000000000000000000003d": "d99ba2e7fce99a98dec8caee0bf6422887042e79facfcb081e4c5d04a3f8fdb6", + "0x000000000000000000000000000000000000000000000000000000000000003e": "1ac60d9a0fbdd7d5779432344ddb1cc080b7d70d8049631e9a5767f94dfc0fb0", + "0x000000000000000000000000000000000000000000000000000000000000003f": "0592a18e16fdecf8028cfd0172fbd99a44287f9fa77970a947623c4305aff927", + "0x0000000000000000000000000000000000000000000000000000000000000040": "e276709cf0da03abbe0672cd6542c8823ba1a79ced1d077331d26a4bfbe4664b", + "0x0000000000000000000000000000000000000000000000000000000000000041": "dc32af56e34daa6037e96a2990d6485815b9dbb16ed0fd48e19e794b16d78d52", + "0x0000000000000000000000000000000000000000000000000000000000000042": "2256ff7bd7ede2f79b3392f7898790b3bfcc1dc7bb0143c654a33f2e2f5888ae", + "0x0000000000000000000000000000000000000000000000000000000000000043": "6163d0b7f02b214352ded0703f0e17a07ffd6b732cf37498e0ea7326863972eb", + "0x0000000000000000000000000000000000000000000000000000000000000044": "a5662af7bb63607ebbc0c5ba713be53a59b376199c9f702b141d4b2cf75571b8", + "0x0000000000000000000000000000000000000000000000000000000000000045": "c2f77b16764d5704a9c3fc3ccdc291c2301b512341ed07de3420e05814f38f44", + "0x0000000000000000000000000000000000000000000000000000000000000046": "0f684901e87fafdad7d7ffe9f324a534b06cfc52bb98cfd6937ad3373edbe050", + "0x0000000000000000000000000000000000000000000000000000000000000047": "7ac52282fa3642fe038111e06c27e42bb80e6687faff3a80802b98c0046cff14", + "0x0000000000000000000000000000000000000000000000000000000000000048": "6ac35d9c3afb594c2625d6aa43c248e7f1ebca6cbb3ab4381e8532390005e4d4", + "0x0000000000000000000000000000000000000000000000000000000000000049": "1e3f81c1be76102b47f9d823bb475a6061f72286e53a8d72abc2d363567498ba", + "0x000000000000000000000000000000000000000000000000000000000000004a": "b3633d86d73d0b3c8ee7b906a5a0d4bc5ea1bed0490eb0211164833cf5a4b3f4", + "0x000000000000000000000000000000000000000000000000000000000000004b": "502288a02dc23356064d1f98cd38f8e346943b6f6837f0bf98f63534c2027ca9", + "0x000000000000000000000000000000000000000000000000000000000000004c": "b2145a089c38b7db50fc671aa89fca64e00fa383f540f3c704ed51e7f2179f3a", + "0x000000000000000000000000000000000000000000000000000000000000004d": "f0c902bd6d37bdecc5d0b17b012dbabf6856efe771bc52c790be6127b8b8a9ed", + "0x000000000000000000000000000000000000000000000000000000000000004e": "0e065a7c1d66be9a7505eaa9846edba1efbc5a2643b0cde0dc11ab9b0e82d2fb", + "0x000000000000000000000000000000000000000000000000000000000000004f": "7a5a9823699ec0f335d977fc08ca50d0786b044c177fadab0f36957d5ee8a6ef", + "0x0000000000000000000000000000000000000000000000000000000000000050": "0c2f74470c7439c7e783de2e128f65e66d794d01c2bbabe225599eb81927f680", + "0x0000000000000000000000000000000000000000000000000000000000000051": "7489436084d1c2fbd1ef76bd84ee9ff43e054e6ca744fb1ad299f8fb6a5171c6", + "0x0000000000000000000000000000000000000000000000000000000000000052": "b535bb07496aa8764a751097afb4fda7881b9de41e6f3c4c329360a808caff31", + "0x0000000000000000000000000000000000000000000000000000000000000053": "1237af5eec8dabdae0efd403a87ef5588b2dbd724946f41c7e161df50328e468", + "0x0000000000000000000000000000000000000000000000000000000000000054": "7bb88dc7b037cc2aa86a83318f9e2db824f840e0c04526f61fd2921f327eab14", + "0x0000000000000000000000000000000000000000000000000000000000000055": "e8235717342e9768bf65d0600947b88bebc1d922822b1cc577075dd7ef002462", + "0x0000000000000000000000000000000000000000000000000000000000000056": "f321197dfc592eb856c14ffe0ed175cbb25105b435473559447d58154769bcc0", + "0x0000000000000000000000000000000000000000000000000000000000000057": "2b09c7fb6f54983fcee6cbcd8eef58ac886978c5ccf72edd52795a95ce956c1f", + "0x0000000000000000000000000000000000000000000000000000000000000058": "c39e1323f7b6949a21a1bb6f98d9ebd22d3e776e07676c4cce9fc4174deda0dd", + "0x0000000000000000000000000000000000000000000000000000000000000059": "8b79d25d91549e398a5fa94bf6f56b1837b11d042b65811411fe53100ee18c2e", + "0x000000000000000000000000000000000000000000000000000000000000005a": "5d33f0b59d254d470019eac98e38a2a90468e5873067bb5e3cf8e0ccb84ad048", + "0x000000000000000000000000000000000000000000000000000000000000005b": "ae8ff3f7d1bde73dbd36f2293e845fa059a425576be62bffdc4ba6a2e1be5afa", + "0x000000000000000000000000000000000000000000000000000000000000005c": "8d1fd7f00d80dd8d4c799dd381b71eb349e695d4190f97e206550ddde559adf4", + "0x000000000000000000000000000000000000000000000000000000000000005d": "16b224e441aa3817c03949a4e7930d87e0ff9240d0f2955fdebf23a7f410148a", + "0x000000000000000000000000000000000000000000000000000000000000005e": "cf191216637f378d2ee7f2dd47d9a330b3cdd0e20d7a27f8c8bbfb1df421a9eb", + "0x000000000000000000000000000000000000000000000000000000000000005f": "962e7b0b218852cf9c41bbb7fd8908baceece8e7e4c8b2b5d2ab5390f0561b02", + "0x0000000000000000000000000000000000000000000000000000000000000060": "13dc0c8daad8b71fc3f0e62a209b9710cc78934504a6c2e990549a2e473152ed", + "0x0000000000000000000000000000000000000000000000000000000000000061": "333cea669c831ec4b078f39fb05de11664b438741df8d8cd37ea771049dc1f30", + "0x0000000000000000000000000000000000000000000000000000000000000062": "e377c7a76084c79781cecc442ff79d5a76ab95710878ef19fbaa2ae3b3806d2e", + "0x0000000000000000000000000000000000000000000000000000000000000063": "583000818d360ecba85c0924bee169e64dc799c21d5e468711324c423ae1246c", + "0x0000000000000000000000000000000000000000000000000000000000000064": "89628d10b5c915f51b8def1dd2ea8a9b2e89b30da4435cbe0f5003651bb05e8a", + "0x0000000000000000000000000000000000000000000000000000000000000065": "0de163e9e16a0d88854f6e66f30e50d44d2e569f9f581e9a368adaf1f4a5ca6a", + "0x0000000000000000000000000000000000000000000000000000000000000066": "0220ce36b8436b0b234a97413f91bd64f6d41cf4b10fd0bd10e53d8b8f7d79ea", + "0x0000000000000000000000000000000000000000000000000000000000000067": "73d6ae295486e56af688dc96243f9841a3a40c4100ea132f2c0d3c7a92d7a724", + "0x0000000000000000000000000000000000000000000000000000000000000068": "c57eea72ca6da6fa23e48e0a02d56ccaa84b59f4f663d04d492ba107f6989475", + "0x0000000000000000000000000000000000000000000000000000000000000069": "38aa8a3150af9b19993b8d4cb3e670bb365853c341f1a24d57ba8e1328afb1ad", + "0x000000000000000000000000000000000000000000000000000000000000006a": "853b45ca33c271b321625535fbd242f5edd582be0056641890b66a2b1fbe0677", + "0x000000000000000000000000000000000000000000000000000000000000006b": "7bd34591adec12322873c046b6d45fc55defd4891f58e6f26970c14e964bce5e", + "0x000000000000000000000000000000000000000000000000000000000000006c": "8f288d915f33362322143bec0749279cdfb9f0b72e7a6c379af08c7b4f88b24c", + "0x000000000000000000000000000000000000000000000000000000000000006d": "6886974a4794aa2d984957964c2480cce1346776b180888a3777857b4405e26c", + "0x000000000000000000000000000000000000000000000000000000000000006e": "20e5954a1da37baa1f7446598fd7d4311241c09d4283fdec67782114693bdf99", + "0x000000000000000000000000000000000000000000000000000000000000006f": "48ccbd91a8643d6e270829515db0595bc97d123453e4a0bc7a1baea82ca1e736", + "0x0000000000000000000000000000000000000000000000000000000000000070": "ef397b238df4b06cf009bacffc969cdeb71e9d300c860286ca42ac367a950d15", + "0x0000000000000000000000000000000000000000000000000000000000000071": "9a191d0332521ea449a502780c73defd9d7726f61e22c2f527a03184a51364db", + "0x0000000000000000000000000000000000000000000000000000000000000072": "340fdec47cff7b492def7053fb1e31b0b185e4dbe7cd0f4b0d382a8dafed7ddd", + "0x0000000000000000000000000000000000000000000000000000000000000073": "821c99ea8afea16f7a10bfadfedd23466f35e9bbde9ec413c2c84b7c7dcc3856", + "0x0000000000000000000000000000000000000000000000000000000000000074": "5f07aa290e33f4c5f100362b8dfa284c93b910b9895f066fc2a6242698b6ed52", + "0x0000000000000000000000000000000000000000000000000000000000000075": "bbb17f7c60251f96dc948ee25b7afc5ee511eac82fe10ca186cb860349dacde2", + "0x0000000000000000000000000000000000000000000000000000000000000076": "29e7fcb64ad5f6c93603b4ce8d738253b71bc820c4d0ad9d5438ab5eacdd88c9", + "0x0000000000000000000000000000000000000000000000000000000000000077": "2021bdc5b47d00e0f11ec24e61aa59485311e5d98f657841de44e0d1750e0f2f", + "0x0000000000000000000000000000000000000000000000000000000000000078": "d169f3abbf7dd41949f941333a4920bc5246531e22d02fdbe8ed03361303bf13", + "0x0000000000000000000000000000000000000000000000000000000000000079": "9d39f6431f7fe252031d29d7ff4f65e9948d5fdc872709df7eee4e856c0a1a66", + "0x000000000000000000000000000000000000000000000000000000000000007a": "289c7906360262eebacaf52eae6931669dfb87141c14408ee41ccddb738dd7c7", + "0x000000000000000000000000000000000000000000000000000000000000007b": "8d2db945bede6e953aaaa66c1b859b0853a8a12cab8f9f88dc1439e1ff3ea600", + "0x000000000000000000000000000000000000000000000000000000000000007c": "66457f34ca4352d6bd07e3db8cfb4f37433c0f9e9d926d5fdbd1535974a28ee5", + "0x000000000000000000000000000000000000000000000000000000000000007d": "6afdc529eb5072bef6f94d783505d24465dbb564d90cd22e668c549929d19615", + "0x000000000000000000000000000000000000000000000000000000000000007e": "6d83bef72d2b5bae5824e9489cd9f98336df2e38500e48a8ef3664bcf9358374", + "0x000000000000000000000000000000000000000000000000000000000000007f": "16712d8be0e3f51b960bc8d1a39d96d79eb37a4c4ef736357367ea38a9287711", + "0x0000000000000000000000000000000000000000000000000000000000000080": "b97b02fd00e46ec8d5b47eac30dff86679166d19e3485e4b7f979bec91fa7e0f", + "0x0000000000000000000000000000000000000000000000000000000000000081": "c407ae41449bc17863646ffe04e7a8107b4a2145152c875a5f910fdb54cc2701", + "0x0000000000000000000000000000000000000000000000000000000000000082": "f2253cd37aa85a5a3332dd6d777d209db9644eb59806646a39dd5869cdc496cc", + "0x0000000000000000000000000000000000000000000000000000000000000083": "4185ee3fea8a5aef0c504563c6c4e08f4ebacc343720d6c179ab5cc24c15e1dc", + "0x0000000000000000000000000000000000000000000000000000000000000084": "a8c286786d85b5134461a58e930e24544971798fdb65aa5daf662cb224a9fe40", + "0x0000000000000000000000000000000000000000000000000000000000000085": "8ca47a4e017b39fcff33d45a2d8be59d4a66b73516c322c950a5d8ed77d29fc8", + "0x0000000000000000000000000000000000000000000000000000000000000086": "c4974092ba20d3c24becf83c675956c9f6602d500d594df532c50a50eb5b2191", + "0x0000000000000000000000000000000000000000000000000000000000000087": "d84d3edc5cce7692db143df3abed01f05fb1aa8a6e7b468cc55e46db10c821bd", + "0x0000000000000000000000000000000000000000000000000000000000000088": "dccdc1d4567294a4ad0281a7386e643435a612358a8687b79707541a0e572e58", + "0x0000000000000000000000000000000000000000000000000000000000000089": "9c338a73883a108eb3ac237422cc78ba03e073881d79758dccd91587b69164fb", + "0x000000000000000000000000000000000000000000000000000000000000008a": "cdd79ad9085d20d3fd31b042a53227c3760792c62e42f29a10400382b2d8dcc4", + "0x000000000000000000000000000000000000000000000000000000000000008b": "344657a467d897d67b16bf7bb922de11197ff1b4c1ea2749a82749b854f53e94", + "0x000000000000000000000000000000000000000000000000000000000000008c": "c34874c1c02df9d9f0f62ff0c9451be8623e01125af8abcdfb0a3e5fd39753b0", + "0x000000000000000000000000000000000000000000000000000000000000008d": "f26963dd24f2fddb0fcb041ffd520a4a8571622f70168563809051d1f78f5952", + "0x000000000000000000000000000000000000000000000000000000000000008e": "5b33c4a77a663f8420d206e8c8c677b306dd9dda3c549b73978c22385e064edb", + "0x000000000000000000000000000000000000000000000000000000000000008f": "c6e8d87cdf8be0370ba65cf1df31014d0ff6d70d4c63dec3968fd63c7fbaa74a", + "0x0000000000000000000000000000000000000000000000000000000000000090": "94fd8a5a17afb5aa4438bd72dddf23c73c0ed5059227e6d84a327e217593cb65", + "0x0000000000000000000000000000000000000000000000000000000000000091": "dbdf9af38beb3fa29d94941294bca3788732dcd92eb6b4bf2dbb822000cbc0b2", + "0x0000000000000000000000000000000000000000000000000000000000000092": "61355293082e8a9f906e7b52d9d7770877083021e6486ae90f63b2e4bccff11a", + "0x0000000000000000000000000000000000000000000000000000000000000093": "0e1c46da0dfdbdd801d7b76c10462b10a1ff579e5f26535bcd3ab1c482043abc", + "0x0000000000000000000000000000000000000000000000000000000000000094": "049cc427707b87414178123334cd9ccc891c192faddb16129b8d87dc945d4710", + "0x0000000000000000000000000000000000000000000000000000000000000095": "24e92a19adbe76129e31fa0e7968f3f65f230ea20152fa92bd8553a90040f415", + "0x0000000000000000000000000000000000000000000000000000000000000096": "34e0ff9f154ad49785b9a2220d5dcdb476e3cae2c513209d0dc88bc65a3a327b", + "0x0000000000000000000000000000000000000000000000000000000000000097": "a038ce1b4343a5466e32f10fc868b23f7ced36538dd115cdfe0deac9f6f21402", + "0x0000000000000000000000000000000000000000000000000000000000000098": "4f6d29ecc1150caa2e43a7837fc7fc577bcda7cceb9de4da0c2e9da8baf8733f", + "0x0000000000000000000000000000000000000000000000000000000000000099": "d34e3051d7184c6c18e3d51f0a693baf889da9ae98d6a5e777a22d2cb96697dd", + "0x000000000000000000000000000000000000000000000000000000000000009a": "eb5370ab05f5d8f13e2cc9a45d11eccc1ee7537478e749105b03631c2504d6cf", + "0x000000000000000000000000000000000000000000000000000000000000009b": "e9419065bedd423519028a6f39e599358596a72614880942181ef4d3fbff8807", + "0x000000000000000000000000000000000000000000000000000000000000009c": "076da0f0e01bfd4890f2134fd5df4b54a113439e488680ec9983b81de6178a43", + "0x000000000000000000000000000000000000000000000000000000000000009d": "1b765e0e7ef21700d430daf30c1fb898805cf27237768ae58dd82f68cd1cc26e", + "0x000000000000000000000000000000000000000000000000000000000000009e": "6dcc010b937b7e48545d5476b017e93f0baa2308ef3be862c1c6286911eb63c1", + "0x000000000000000000000000000000000000000000000000000000000000009f": "616a767f1417bf61770bdd4b9947a864fadcbda76a60ac901115b74f55948b81", + "0x00000000000000000000000000000000000000000000000000000000000000a0": "90f962233f21820cbfb476d1e7b58191e31a745b143fe000a7fdbfb636295ff5", + "0x00000000000000000000000000000000000000000000000000000000000000a1": "9c02e583208597dda2607d80ca5dced296b7245635677699871833053f4561b4", + "0x00000000000000000000000000000000000000000000000000000000000000a2": "b298175a8ca6852255acb5a528906d85a5d33fbf66c70cb786877f4ca844a7b6", + "0x00000000000000000000000000000000000000000000000000000000000000a3": "cdb49313f08242666708fd58106cd77d39cac694d5109d6292d5205f0eab8cad", + "0x00000000000000000000000000000000000000000000000000000000000000a4": "141eb84f21835812981ca866915b141c199b2a6e574624de1a35b28784d70e31", + "0x00000000000000000000000000000000000000000000000000000000000000a5": "ee6b0ee8c674e6c358ad14a9dc39c9ade98b944a4c3c97992bb882f536e976d5", + "0x00000000000000000000000000000000000000000000000000000000000000a6": "56a342018c122b38dda95d4590e3be13521d9b293a469b089eec358c040cca09", + "0x00000000000000000000000000000000000000000000000000000000000000a7": "e08d69283e46660cc7d2ec2297498bea4fc2d9e6be5a966fc62d8cc0bf79eb8c", + "0x00000000000000000000000000000000000000000000000000000000000000a8": "06cfd65e4ad3f00b853db8c0218f003e65ecdfa83b2cf36be05da03c9abd2b8d", + "0x00000000000000000000000000000000000000000000000000000000000000a9": "1eaa31322ebe3166d05d4aaecc37da61443ec14bb10abea11a0de6271ceaac31", + "0x00000000000000000000000000000000000000000000000000000000000000aa": "861e741db3d23647d8a9fc61ee8361b044ab5f6472a15e33e1347d26802ae652", + "0x00000000000000000000000000000000000000000000000000000000000000ab": "2cf03f61b899f9e1da26b010eec455dd52486700e03c7ac6dd5aef77e1d0ce4a", + "0x00000000000000000000000000000000000000000000000000000000000000ac": "63c823f9caa95abdf5aaeaea7d33753359ccd4b76e64155a760bf3355edcc73c", + "0x00000000000000000000000000000000000000000000000000000000000000ad": "8db5431f9466088e255da8a3ba2c8687e71836d5d1945b13c7f3d9ac7c89632b", + "0x00000000000000000000000000000000000000000000000000000000000000ae": "0233de4a61a9a43ed4501eedc83ae61cc6b2f31f7681bb1de10650f724635917", + "0x00000000000000000000000000000000000000000000000000000000000000af": "899b58ec03cb142e0b55e1fe0ef6c351291a27b9074344bc7e2cafa96373aef6", + "0x00000000000000000000000000000000000000000000000000000000000000b0": "13f99454d41f5ac10fd52abd046cde67bb8c0bf7d6010c6b17c465ecbb3ed540", + "0x00000000000000000000000000000000000000000000000000000000000000b1": "9a2024c4823f8c503a053ffba21d3d5b8aa44bd69e0e326a3dd861d5ebacbbc5", + "0x00000000000000000000000000000000000000000000000000000000000000b2": "97fc752f97b39827ba60179602671d30c1f05bf991650cac51f0346ee24d733d", + "0x00000000000000000000000000000000000000000000000000000000000000b3": "30a494978e0eac0abda5140961431834ace71b6251f4c533c823913efd652aff", + "0x00000000000000000000000000000000000000000000000000000000000000b4": "6b5d54fd2861b26dd7f2851d7e5370a10006dda6c3030e6d3ec4165516e939a9", + "0x00000000000000000000000000000000000000000000000000000000000000b5": "4b463a47e277fe903ef73f2504075e63194e03017c299bb340ca82383bc93110", + "0x00000000000000000000000000000000000000000000000000000000000000b6": "26fb93f17f20d3912165be93e6c74e30ce01bbd23b1050dc2b0e990810ad8ebe", + "0x00000000000000000000000000000000000000000000000000000000000000b7": "e08e97c0e494b917d5103858981ef94e7c83ae607274785cfa6e1d58fbeb5ac7", + "0x00000000000000000000000000000000000000000000000000000000000000b8": "de6bf1db842cb83446e36edc46014d23163fd84aebd1c03939eb0bd290767afd", + "0x00000000000000000000000000000000000000000000000000000000000000b9": "6bde1987ef5b8bb5fde73ccb7b722f060ce2d5f1f3cf0744498e2eded6ad2fbd", + "0x00000000000000000000000000000000000000000000000000000000000000ba": "02795b8afbf3b9cd3539cf5e1c373c07ef6e1be6f4deb1fdbbd6cbe365387dc5", + "0x00000000000000000000000000000000000000000000000000000000000000bb": "8e4c83e5e358f39de84987818cbd14c1a963ed5c8de83717bb6f89d11ed0ed65", + "0x00000000000000000000000000000000000000000000000000000000000000bc": "2f741c1a54dfde09c36f6f171be91f7cc50a184e29c875af602ef52ed58e6e89", + "0x00000000000000000000000000000000000000000000000000000000000000bd": "7d60f33d7e776182fce5bd0572f488cd429e742705eb78603179446152aaec20", + "0x00000000000000000000000000000000000000000000000000000000000000be": "822c072433cf13fa896fb579c98e53f0ff3d231f10168b07647d214b5e2a0c24", + "0x00000000000000000000000000000000000000000000000000000000000000bf": "c763e36a2d4a71b815dd3cf970327db148b6f24eb23522a4cd962848679f683a", + "0x00000000000000000000000000000000000000000000000000000000000000c0": "2ed48a4ebdefc743bcdbec0ecadc64fa641776a8ad70df8e58c6b29bf6c1a23a", + "0x00000000000000000000000000000000000000000000000000000000000000c1": "1e23bc483f7c371d9ebf493ba84b563479656771fe17f2846fd9c863fc9cfafe", + "0x00000000000000000000000000000000000000000000000000000000000000c2": "e61411b998dcbec97ad2ce9bca20014fa673980d1e884325c1075abef61f152d", + "0x00000000000000000000000000000000000000000000000000000000000000c3": "f24e0907bc9948667699c8f9094931f930f8617e5eafff2271656cfbde5c2956", + "0x00000000000000000000000000000000000000000000000000000000000000c4": "9587ef58a068fcb27daff28ee3da231caed47c7efa9371fb42b14fc9908767b5", + "0x00000000000000000000000000000000000000000000000000000000000000c5": "035aad19a0a2ed13bbbd78630f35c556bfe04d7a89bb2fdbe485ad344e6e81b3", + "0x00000000000000000000000000000000000000000000000000000000000000c6": "5124774422b19463745f7a5aa4c1399d3e8c13abdf68cd0eb70477ba79b3bfd4", + "0x00000000000000000000000000000000000000000000000000000000000000c7": "a467cc633a88b190c7c454be97d066a22527ccfa3784a6d0eaebb099363da22a", + "0x00000000000000000000000000000000000000000000000000000000000000c8": "4b395a1569a2995fc5ad6e079e367cd135ae61be2315a57336faec96ff6be4f2", + "0x00000000000000000000000000000000000000000000000000000000000000c9": "f3574c46ee7be2f327b4c968186b9cba6ce8bc43cac0917119e3226630ac2e40", + "0x00000000000000000000000000000000000000000000000000000000000000ca": "4b92c1e975dfdc44423fea09f15c0b0f6cd94b52f75eadaf500817dadfedc05e", + "0x00000000000000000000000000000000000000000000000000000000000000cb": "5f7c14e45a99709c6dd5b99043f115777e3fa2aff9baea04e819c8ea1d49ff4b", + "0x00000000000000000000000000000000000000000000000000000000000000cc": "a6a548359521b4b239f05fd8001e74c3cdec873dccbc6e9d558942720219436c", + "0x00000000000000000000000000000000000000000000000000000000000000cd": "2fda609eaf660679f823fb4376c4bd0cadade83e2fe577f82d1ab3d9f0f42699", + "0x00000000000000000000000000000000000000000000000000000000000000ce": "a8551de9ee0942059b85b3390a4a8e2b4717e843f5338062877d9a125e1c5d62", + "0x00000000000000000000000000000000000000000000000000000000000000cf": "1cd2293c5df7c51a36bc8527308cfde43dde547b42129799d3f9f94f4b2a5d8a", + "0x00000000000000000000000000000000000000000000000000000000000000d0": "bc42869ab3a2245d1c7a2d33a982c8696aab3d3c0f9dfa69d8be2d2cc9cf1d31", + "0x00000000000000000000000000000000000000000000000000000000000000d1": "8e8b607660e0016ba139872bc35730d2efe0426136dc7e32ef6091f2c72acf50", + "0x00000000000000000000000000000000000000000000000000000000000000d2": "85ad1ea8a6413676241be28adc37e9e9eafc7d7d92838f662f89e954b1946243", + "0x00000000000000000000000000000000000000000000000000000000000000d3": "43cc37e72c9060cd84480dc2b3ad47b73ae9d3153ef17aaee77426eaea98c979", + "0x00000000000000000000000000000000000000000000000000000000000000d4": "52cb7c3d0a4baf4b97c814f69a29ce7efd02b30063caeb4dd25182e4945f9443", + "0x00000000000000000000000000000000000000000000000000000000000000d5": "414140870ecffda2fd30789856025aeeeee6ed2d339c89b09142a80b5d02b2fc", + "0x00000000000000000000000000000000000000000000000000000000000000d6": "6d091cc14eb2771eda246d6c98884ca88b3e9c1193f9b1094786e7ac38615d0f", + "0x00000000000000000000000000000000000000000000000000000000000000d7": "c2c1970e54d67656e78c75f59b990d4a682800dac92f32e35bbf5c9f4123080e", + "0x00000000000000000000000000000000000000000000000000000000000000d8": "9869f9d317befc2be06e35c4bb421b2f70ee3a551da726ac450fbe5683e175e9", + "0x00000000000000000000000000000000000000000000000000000000000000d9": "6cd3151a665feb73ef2fd1c09b2ba1dd622e424cf8d437491f67d7acea386a25", + "0x00000000000000000000000000000000000000000000000000000000000000da": "f12671c7915ba944f549618aa1a618c58890d1bb1374ba0d5bfe9a1d219d4e10", + "0x00000000000000000000000000000000000000000000000000000000000000db": "2cc973d866118aeeb5d5a45bbda5f59f56d1824d01605eff38bde4ba082a2953", + "0x00000000000000000000000000000000000000000000000000000000000000dc": "633313f0428dac31c59a736f610f5da75f22d0c2ea8d112987c918c7405c0440", + "0x00000000000000000000000000000000000000000000000000000000000000dd": "ab9619afd1e6619dbab5761d6fc5da9a0fbf8b6489fb96eb864e687bbce7952a", + "0x00000000000000000000000000000000000000000000000000000000000000de": "827cf63f6f1bfebc2c18dc37c641eb9038174492ce580fc881027cbd447dde09", + "0x00000000000000000000000000000000000000000000000000000000000000df": "17c4a736b0ea52a0a4f64166d211b654d10c8a6b316b7a3d151c84f1afbe2cfc", + "0x00000000000000000000000000000000000000000000000000000000000000e0": "c7d92e27e6635446bbbf148991143322dfee51d0c6923abdfe69a9661aa51f3f", + "0x00000000000000000000000000000000000000000000000000000000000000e1": "7fd92767aad5a519ab7a1ee8f06e62a0869042dfaf4aba3b9e47037667137147", + "0x00000000000000000000000000000000000000000000000000000000000000e2": "508e549615fc6041f7c0737e69a19b2a78954a3b2e401c1e6cdfcd065f591170", + "0x00000000000000000000000000000000000000000000000000000000000000e3": "380fa604fda76b136b8d0cd29fdd1d4d947c90d328e70679c89d25fd46e30e20", + "0x00000000000000000000000000000000000000000000000000000000000000e4": "a3e71744d3faa5f9827963a5f0d659487a2d102a538122e75395ec771100c68c", + "0x00000000000000000000000000000000000000000000000000000000000000e5": "cf2f9ba00e585e8346fe60f6bd23d83f81f57b272f3d7ee803aec61e3b66973e", + "0x00000000000000000000000000000000000000000000000000000000000000e6": "66730b682308530fd5172418ae2100a58c0c78d8e2a4cf3962f74bb5d08a2ad1", + "0x00000000000000000000000000000000000000000000000000000000000000e7": "4138427f2aaf856de7604cae4193f96636c73e0a8984e967f88eeb9cb9868235", + "0x00000000000000000000000000000000000000000000000000000000000000e8": "ff6c572142173aee3cce05872637e9fa20576e126122f8f096b26c2d7ab562ca", + "0x00000000000000000000000000000000000000000000000000000000000000e9": "fc3daf2feab4448c624c2b6de75cee4ba8555bfedb236a6dabd08625ee75fb8a", + "0x00000000000000000000000000000000000000000000000000000000000000ea": "56a716225b0c189b6dfe04eb8dd9012e50bab4fde5c850b3ac032b0bb74c5916", + "0x00000000000000000000000000000000000000000000000000000000000000eb": "5fb1bbafb479d9b6bb8f0d6a832717b2d585af05d70edc9938597e9c349ccb1e", + "0x00000000000000000000000000000000000000000000000000000000000000ec": "520f6482328ec8e1a2d2f759d3718f9527046b4eec351d127b4d10920ae7c02c", + "0x00000000000000000000000000000000000000000000000000000000000000ed": "89d7de3b3cc3f788c75f502ad3c5194de01d53e6d01675bb8e7319084bb044e8", + "0x00000000000000000000000000000000000000000000000000000000000000ee": "ea6c0f8842754decf0722e63340f9ce8fbe8d0ad696225c4942eeff7c815cfe3", + "0x00000000000000000000000000000000000000000000000000000000000000ef": "ff641c571c4ee7c6ad4776d9e6a619e15a9e9c68173a576adeb39a4d6b7cbcf4", + "0x00000000000000000000000000000000000000000000000000000000000000f0": "c0c2d5bded8a29c205781c8126d07498355257ffe0b0a9c63513891158703356", + "0x00000000000000000000000000000000000000000000000000000000000000f1": "aee5da2562edc43aae63fdbfcc1ed4a3b9584d31b515a14b6c9e974cbdb8dd29", + "0x00000000000000000000000000000000000000000000000000000000000000f2": "6d56c50e850214cd81f339f0febfcb4874950f0a6e6c541f448c0dd83bbdec6a", + "0x00000000000000000000000000000000000000000000000000000000000000f3": "a0e695a82a49373c16acf2ecbd742c53ea37cadecc6dfd681e6b393bdca6c445", + "0x00000000000000000000000000000000000000000000000000000000000000f4": "ee14abc18ab909a3c3ff3afbccd5f0b3844727f10754428c44a7c8898f8343ad", + "0x00000000000000000000000000000000000000000000000000000000000000f5": "5964eed483298c980e3372a7adab0e90ac671c5bb0fcb80e481a6fd533851ed6", + "0x00000000000000000000000000000000000000000000000000000000000000f6": "9093cd0fdc936c5e1a1cde72e4327a8b042d0153d3b268b5441631496ab5b897", + "0x00000000000000000000000000000000000000000000000000000000000000f7": "123f2c0202f5d919d2376513b9d5c5c9dceda4b91e6fd70f386d0d88ec067885", + "0x00000000000000000000000000000000000000000000000000000000000000f8": "03599481645edb627d61df608525160e3ea5fc6081aa353bdd9828b21f314c63", + "0x00000000000000000000000000000000000000000000000000000000000000f9": "b70f87f8243cc700afc179251e201ce53395e86cb99d8f2de002488a632f765b", + "0x00000000000000000000000000000000000000000000000000000000000000fa": "c4bf5494f56bc45ce01dad37aee3ce9ffc45d83fdc000e12181f5f8acb8019cd", + "0x00000000000000000000000000000000000000000000000000000000000000fb": "4a451e3d5c50c59b8f500744456ddbc1305fd7d30a3088e18b63ab514e146a5a", + "0x00000000000000000000000000000000000000000000000000000000000000fc": "7e09bd28fdc45aa33de70b9cc577566820bcc691bb602bb4ea34c060240a3a34", + "0x00000000000000000000000000000000000000000000000000000000000000fd": "6b8f79e73655d6e6bf62130982a8130929598f06e537104557fafb585ef859aa", + "0x00000000000000000000000000000000000000000000000000000000000000fe": "2f59eb73c385708d16bfbdabd173a892b1aedb35aef605b39bf4ecb37e5f4d81", + "0x00000000000000000000000000000000000000000000000000000000000000ff": "dc795b259c72a03503f2caa5002867f7321785d36a0fc325f23c6a7f0b5bc910", + "0x0000000000000000000000000000000000000000000000000000000000000100": "271a4760953153009f96bed8d964dfa87d6893d05200beca8c28b05661a749a0", + "0x0000000000000000000000000000000000000000000000000000000000000101": "a01a3f6a72dc1967245123b06ac7eae459690d7ef3a4d07700c0e3745a74db71", + "0x0000000000000000000000000000000000000000000000000000000000000102": "e098e6bdfcbf458b4139ee1ebb140d43f6d606f540d989eba5b8b97435bff5ae", + "0x0000000000000000000000000000000000000000000000000000000000000103": "8820f152b3cff23de1f3b9447dd120cdc4db4b52be2289b8addfd158c2ad60b2", + "0x0000000000000000000000000000000000000000000000000000000000000104": "9055974f536a57910076dff54ffff9856ac72456315542541730ccbd2f24ea9e", + "0x0000000000000000000000000000000000000000000000000000000000000105": "7102af3da7876aa9cff2e92b872cae97f9eaca3f19c6b184a9000d27dbca4e74", + "0x0000000000000000000000000000000000000000000000000000000000000106": "d50ce3a9f526cc3f15e8938ea731693ca87130f6ea684d06e3df024c0c2d298b", + "0x0000000000000000000000000000000000000000000000000000000000000107": "e87cffe7581ce382f9231fd3e5f6c6dd15670fac36f758bcaf841c44459f882f", + "0x0000000000000000000000000000000000000000000000000000000000000108": "4b2ca2c24eb4cfff7f4ea2a8657efae77d1f12850557b1b3cedaf5326498a476", + "0x0000000000000000000000000000000000000000000000000000000000000109": "6442f9445011c3fabe60fa667b6d3312a035f8b31ba11d66784657a7b1610e67", + "0x000000000000000000000000000000000000000000000000000000000000010a": "957a973ad8b0b3e200ae375441704b26ce89fa5056a66550359b34ee91a2a0d4", + "0x000000000000000000000000000000000000000000000000000000000000010b": "714651f961e055fb12c089df6e5c83f279400bba685d20810303f77984712cd0", + "0x000000000000000000000000000000000000000000000000000000000000010c": "0b3f682d9d441ee52d4a38112d385f970973958bc4586ed97a2ef47a202aa38f", + "0x000000000000000000000000000000000000000000000000000000000000010d": "d6a33b58b1e38fe4ac1c3386de7de4d1db23f14871f1b0a6163750738a6844b4", + "0x000000000000000000000000000000000000000000000000000000000000010e": "7fc400f7b6c69771e1a1dd0fef6a7fcb25f9d4a2160f28c2c20ff5c8c5557396", + "0x000000000000000000000000000000000000000000000000000000000000010f": "d40c0450e901d3193859726272a91036198d0bb55438bb30e7e2ee747bf90d07", + "0x0000000000000000000000000000000000000000000000000000000000000110": "b56358c5f0686a2af5b2569179542237964b481269f589871f1d0a8494b22716", + "0x0000000000000000000000000000000000000000000000000000000000000111": "6db49261c82dcd68dbd907e9ae99e60e8b60a144e20fa40bc9760e6af5ae95ab", + "0x0000000000000000000000000000000000000000000000000000000000000112": "295a8e852bcd10264566f53a7c2b7010d082476d400aeee5d1067c6237964b33", + "0x0000000000000000000000000000000000000000000000000000000000000113": "59c54b1678dca13353be6cbe9090244300dafeeaf924758a74eccaf5d8e83cbe", + "0x0000000000000000000000000000000000000000000000000000000000000114": "62434faab09991ba4832b647e7260e305c48a47556068e84a5a0f8d1cd23ca0d", + "0x0000000000000000000000000000000000000000000000000000000000000115": "9852b90c33582df6fce102fb4e211a0e0b391b486dd80752560076c200aedf9a", + "0x0000000000000000000000000000000000000000000000000000000000000116": "65240654f94bde1e2d244ef74fc438f08b54b1e9faecc7ec1ca49a7ba83ce5ce", + "0x0000000000000000000000000000000000000000000000000000000000000117": "9f54ff65564ec9e51c194c32c07d73fa64f558ae0df769401105131d1f438d44", + "0x0000000000000000000000000000000000000000000000000000000000000118": "1e86080bc89bddf96fd5508dc58502c9062a2d3e496aa859dd0b10ed033ff085", + "0x0000000000000000000000000000000000000000000000000000000000000119": "5cb14068ec9e99fcb6e8e78e64cd2aea94f667888a9aa540844dfe0bc8a375dd", + "0x000000000000000000000000000000000000000000000000000000000000011a": "44aeef6943cd37a6ffff1de2e0904beb164a461631b591993ab85ccb86abf4f9", + "0x000000000000000000000000000000000000000000000000000000000000011b": "61e5376ab0b484c9dca320837e8bc9dada91f2d60b550767d26adf500f5df996", + "0x000000000000000000000000000000000000000000000000000000000000011c": "eb675d937511476e7fcc82eec7615c2910d74026ae57a3fd9e144ec4afc45a00", + "0x000000000000000000000000000000000000000000000000000000000000011d": "1cafd78ec641f4af5d4f70f2a69c94688dab74feb7d64115401f7cafec61c7e2", + "0x000000000000000000000000000000000000000000000000000000000000011e": "437f7e43e11d7d3c69a7449e6cf3bb70f85495c6f84326ec4300833a445c7d8e", + "0x000000000000000000000000000000000000000000000000000000000000011f": "28c467c36d5a76c1f47784655e0360553564b11d092613b84636d27c005a64d9", + "0x0000000000000000000000000000000000000000000000000000000000000120": "dcfb02fb51c962c7da9968cb094da0deead9be715cd80fe4edb15316afe5abd3", + "0x0000000000000000000000000000000000000000000000000000000000000121": "54e726c63980affe15f4fcbf0649b8839b2cec81fb03ff9d4885c49c0c13e49b", + "0x0000000000000000000000000000000000000000000000000000000000000122": "0d07c9bc86d9d0dd335a1d0b4af655218071687d5aa6a1bee5c9dcf69479624b", + "0x0000000000000000000000000000000000000000000000000000000000000123": "ee4bde5bb8d77b4d171c88650704849bc8308792022a9e0df731a264b6d986a7", + "0x0000000000000000000000000000000000000000000000000000000000000124": "ed908adb5661b69ea32366f362a10182a478af8b7ae01a870be3ae36c0a4138e", + "0x0000000000000000000000000000000000000000000000000000000000000125": "2aaf777b8b9baa765e6c315b77d2ed0bf12654e466a9f5d9a4b3892c34d346ef", + "0x0000000000000000000000000000000000000000000000000000000000000126": "833f91460ba1a4d3754963b49508167d180860494029996788dfe0a4b7c1898f", + "0x0000000000000000000000000000000000000000000000000000000000000127": "55415e30e330b78eea4143896ca20531aa466962f9e7c270892c0c82b9dc52e8", + "0x0000000000000000000000000000000000000000000000000000000000000128": "3fbfd523742f263285774e53c795a95cd422dfcab3af25a98440ef2d9eaded1b", + "0x0000000000000000000000000000000000000000000000000000000000000129": "360482b09341ef1eb6bd12fbc2290c17fbcc72f8f1128a1f0eaedd6da6350c60", + "0x000000000000000000000000000000000000000000000000000000000000012a": "e1a596d7fe5e0df44bd95f04d6e52f6942a3ca81f2c339e69436a1ab39b6cb96", + "0x000000000000000000000000000000000000000000000000000000000000012b": "ab15736f5f9a88b9ee82577680039c70f6ee7a1a45bcef23aa00ad68f2c4c3c1", + "0x000000000000000000000000000000000000000000000000000000000000012c": "b09555539b48721618134671e9f09ca11c3473b6c972eefc61f7bf6e59901843", + "0x000000000000000000000000000000000000000000000000000000000000012d": "fd0af364faeb502cd7a06b059c730040c89c4bb60af5f9e432062745c47a1c76", + "0x000000000000000000000000000000000000000000000000000000000000012e": "ccc479403433e4222f2c1886e3707712822a3ac130f37263b277d7f42fedf93c", + "0x000000000000000000000000000000000000000000000000000000000000012f": "cac6455fec57cb7705d097952412eaa1e3984c8a50f703d4dc84d990e099ce9e", + "0x0000000000000000000000000000000000000000000000000000000000000130": "c2497bf1f6196ab87d85a9b1ea008b60687721f7bc75ab3fbf8de50d455baf03", + "0x0000000000000000000000000000000000000000000000000000000000000131": "42690f0496662b95458544ff5fa9db8e9839a90c142ba6e211b2ad2fd19a8bfa", + "0x0000000000000000000000000000000000000000000000000000000000000132": "5dc6a2e4dea9a9151cfb8dc58b8ad3e2e2c590f73ef3659f24bbd1484f5f51ca", + "0x0000000000000000000000000000000000000000000000000000000000000133": "170d3dd10df213b71da46b8d94023a22e58c3366eac78c70b095fbceee126712", + "0x0000000000000000000000000000000000000000000000000000000000000134": "42e46e023d7d24d978c93644717729a7fdcb0e07c67e390a2c6699c4cb7fc7cd", + "0x0000000000000000000000000000000000000000000000000000000000000135": "a7c1b6d6c5d4fc516c4b7a9e6917a1929957edf45107e164fc0768578e4e555f", + "0x0000000000000000000000000000000000000000000000000000000000000136": "0762831f8a197faace5f89136d4e8fd2bdbcd634050bb8c28593c6f62769c2f6", + "0x0000000000000000000000000000000000000000000000000000000000000137": "b534a77d9471e828befa7adf86678b4a7a928e2a2db3e9ccb919eb0d2e2d7131", + "0x0000000000000000000000000000000000000000000000000000000000000138": "797081f69a1e07e62ab7d70958e3840489579027770db2acd79ab7da50c5684e", + "0x0000000000000000000000000000000000000000000000000000000000000139": "0ad3abab22df80481936bb2a0d8b50a807633495c41ede9d1570c25b59fdeaa8", + "0x000000000000000000000000000000000000000000000000000000000000013a": "5d7d1a0c180dbae5272ccc6e6c01b45960408a2205e36e897320813cc1627af5", + "0x000000000000000000000000000000000000000000000000000000000000013b": "457cf3e561354b6040afd9e0d386b3fea81719cc40b3fca29fc4d4f99be875f9", + "0x000000000000000000000000000000000000000000000000000000000000013c": "4e8f0489aada99804a9c89679ee1fd98cf0197713766bbb480c77970a95f3f5b", + "0x000000000000000000000000000000000000000000000000000000000000013d": "8df9fb79d5b59f66814970a325d025e1e059f33616840d45bc73ee25a40f10ee", + "0x000000000000000000000000000000000000000000000000000000000000013e": "1da2f81639c8614abf6f4720da2ffca4a5557ae2c62f68948a325f08dce60a71", + "0x000000000000000000000000000000000000000000000000000000000000013f": "378d38c1343aa2703f647894a5fb7330de9fc0e363c86f55beee5d8d66e1d714", + "0x0000000000000000000000000000000000000000000000000000000000000140": "a2f88ca8a8ab5ef26e33eb38b5f28edf9349afb29e5f1a8435c070fbc8df25ea", + "0x0000000000000000000000000000000000000000000000000000000000000141": "54dc888fd505259107b6574dd8a20a802deb1d07bb9728a54d74795789454270", + "0x0000000000000000000000000000000000000000000000000000000000000142": "e9b56ec487c3b9eda677017acd8c89f1a995b8edca20949d5492bd47f1278705", + "0x0000000000000000000000000000000000000000000000000000000000000143": "411ec72e0e4ba3c70825d4d76357e30b010815babbbc1837e2c70006d33e809b", + "0x0000000000000000000000000000000000000000000000000000000000000144": "f92cd7abdc875dece612e2568996c3d03cef02faaf7b0924665b97123207f9a6", + "0x0000000000000000000000000000000000000000000000000000000000000145": "445c164c66dbe2d97e415132e6519d7765d441454461655d1bc2fef9a5233720", + "0x0000000000000000000000000000000000000000000000000000000000000146": "fff2ffe2e7354436e669edcbb6301ebde9eb5d415e4dc27166e7a301463ead0a", + "0x0000000000000000000000000000000000000000000000000000000000000147": "3783621d2f500f95d6dd1f072a06f3cf7776c9b364a4d986b644f9084dc27e5d", + "0x0000000000000000000000000000000000000000000000000000000000000148": "c292d2df68caf410c52129638905a541d121618c637b4b6e401ae5783369b805", + "0x0000000000000000000000000000000000000000000000000000000000000149": "18c79f9a20b1eb4d040190838ad1ecb9401a4d7c6aafdff548163fa0e81a2312", + "0x000000000000000000000000000000000000000000000000000000000000014a": "079a82efae89bae7dc9f51d23fe219551e0e8dc8d8a1783163ce664741d77c9a", + "0x000000000000000000000000000000000000000000000000000000000000014b": "bf3d02ee23b46b03fe7a0cf3e5ab2709608d2d6c237357932b73caf7bd0e5962", + "0x000000000000000000000000000000000000000000000000000000000000014c": "8f34050bd77c450b1684065a6d47f74e03a13366670639e0ffc82ce56190e7ad", + "0x000000000000000000000000000000000000000000000000000000000000014d": "1dc2e1bdcaf6cbc04adf6f2a0bec9df3fb5148469ff491701db0d36a3ccb5561", + "0x000000000000000000000000000000000000000000000000000000000000014e": "03399daa6b9a5022b6c6ef393204ddd994dda29cc67998c0dbc1df5f2c7df9bd", + "0x000000000000000000000000000000000000000000000000000000000000014f": "ccc15fd8ddf55d7c8eb75b38f01938eab69a8286a525182fa302c34738c401a8", + "0x0000000000000000000000000000000000000000000000000000000000000150": "5f1a9c738684387b66a96f080ed4606ca3b54cc6ef8fbeac69197d9d0ebc18d4", + "0x0000000000000000000000000000000000000000000000000000000000000151": "fdee8c650dfb4cf5fce50480224694b856fde37082e78eb3c82971a2a010f62d", + "0x0000000000000000000000000000000000000000000000000000000000000152": "8b6e1a97ed0b60399797bc48fdc165d7bda6b855f94691276d2e5068d44e0aec", + "0x0000000000000000000000000000000000000000000000000000000000000153": "3f9354b48f2c7bcf684bcb6ed3a7635eaca6ba81654a3fc3e4c7273c61b28583", + "0x0000000000000000000000000000000000000000000000000000000000000154": "54553da46a588f6dc14580c6ccb5f2ca5c6f6a189dc465c0d4d84ad2c9749a4d", + "0x0000000000000000000000000000000000000000000000000000000000000155": "565a7651bb85599dd4e8bb9deea8c1068fc0525ef77a602875c0ee4c27ecdc3b", + "0x0000000000000000000000000000000000000000000000000000000000000156": "5a060514a5987fb5defacc69d60df530d84825bb7102f52665c197a5b7cf0d3d", + "0x0000000000000000000000000000000000000000000000000000000000000157": "37a95c1c4d8ae9548f7abf278b6d3c8fd6abce3ad831527a483b585ae5574496", + "0x0000000000000000000000000000000000000000000000000000000000000158": "02bf4c87617d99c78ee4061fcad0436ec41d1feb5768436917aad995dc1a5c46", + "0x0000000000000000000000000000000000000000000000000000000000000159": "1c88871de6d44ab71e79a3fdbe2e43604daf0194b3a02e1a90337e837201b57c", + "0x000000000000000000000000000000000000000000000000000000000000015a": "e65b0ebcbf8e53e362f198d5286b3be688e04b74109af7e41ba28fc4d7cb5df7", + "0x000000000000000000000000000000000000000000000000000000000000015b": "675cb4223640eb85c8810a74a6fb0820d86a138a1eef666f1a22d27ba1ce730c", + "0x000000000000000000000000000000000000000000000000000000000000015c": "05276dd8169c6699371aea9e2758f23c15c2739166b91fd5f8556101b4bb3f21", + "0x000000000000000000000000000000000000000000000000000000000000015d": "2bb6a28a333d633baef19929640188c26f70dfd798c0948bcb81f7b48b7e6f83", + "0x000000000000000000000000000000000000000000000000000000000000015e": "418ac48b8467db2e040a7b57b9f81e3f5295077d62988735ef5db301e4312d85", + "0x000000000000000000000000000000000000000000000000000000000000015f": "d97364746b3c009e86e4601ea8a4ec3eed223a070b3b343b33ad8a121708aad7", + "0x0000000000000000000000000000000000000000000000000000000000000160": "915b1161ecce056ce9b09ad20e535ee47578a868802d36a1bfa38ee437beca07", + "0x0000000000000000000000000000000000000000000000000000000000000161": "4f58b596ab05605431d3a936043301eeda09adbfa46a3c02e452abcd988f4b34", + "0x0000000000000000000000000000000000000000000000000000000000000162": "318aec788d4efe4aba9138446d6aa0e292c18554eb34a15b827c22188fbebb46", + "0x0000000000000000000000000000000000000000000000000000000000000163": "4401d3aa9f1ff873ad2aab1d705c874c41cb5bf206ee59eed2e5daee6c6410e0", + "0x0000000000000000000000000000000000000000000000000000000000000164": "ea7938e34260a926ccd50ce03f9d1f387948af9b961c6f48ceb76ebbecaa2658", + "0x0000000000000000000000000000000000000000000000000000000000000165": "08f4cc7edd04bd308dc6e7bf4cb07b806e7e2de61545abd1f51f9ad1d59cf75a", + "0x0000000000000000000000000000000000000000000000000000000000000166": "a00622d4741d5328d26df1a386bc743d636523cbfb4ae132ef9973770be54646", + "0x0000000000000000000000000000000000000000000000000000000000000167": "9f5cf2010cc5b11d8e26387a3dc7871353fc465161e0179d7a022e7fc216d894", + "0x0000000000000000000000000000000000000000000000000000000000000168": "7bae673e78c9468adcbc5af662fa1a64303269928a74faf206c36e8e90d39e9f", + "0x0000000000000000000000000000000000000000000000000000000000000169": "f5c8e55d5ccac994718819a5e84706912e3a13ed1138af213068a1dfee7333fc", + "0x000000000000000000000000000000000000000000000000000000000000016a": "5ce347e7492dc1fae5a790ee38bbae921fa4c33c12d9728102107ff2242037df", + "0x000000000000000000000000000000000000000000000000000000000000016b": "704f8986273e3ddd2829747071efe079b0ad626aa5ce53ab8b881fe2dae20407", + "0x000000000000000000000000000000000000000000000000000000000000016c": "8b372f1d731e91f9e3e65d489488e2f5256c2db193d27c80adfd7500930bfed8", + "0x000000000000000000000000000000000000000000000000000000000000016d": "8037a2e6778f5a2f86243f0f68e1dc27711a83e23f17dffeadba79650efdc061", + "0x000000000000000000000000000000000000000000000000000000000000016e": "83b55c0c81d1b9e925dd8ded23f5d620d5c90ff0669978808bafe0f9cf4fba4f", + "0x000000000000000000000000000000000000000000000000000000000000016f": "47d1a1fd87ce37b222c945a0926df5db04b51f7cb7bbab3b5038aa755aecd57d", + "0x0000000000000000000000000000000000000000000000000000000000000170": "05a64565e90b2488725a1682f087cb8eda679593d4163e606df37d717fa885f3", + "0x0000000000000000000000000000000000000000000000000000000000000171": "3340b09045d81928d5feb249588b82048aac136feda454dc13bfa778ddaa1405", + "0x0000000000000000000000000000000000000000000000000000000000000172": "327de227ff353f33e394e8d4000f33513c924ea807b747f3cc63bfb40d9c950c", + "0x0000000000000000000000000000000000000000000000000000000000000173": "fd5902869946c283cf714ba1369a87a419d2efaf809ffee5828138db3998941e", + "0x0000000000000000000000000000000000000000000000000000000000000174": "c2ef323c573205f1f1ba96da000d08c88d09b24c95389963a37a5b5f466b8ce8", + "0x0000000000000000000000000000000000000000000000000000000000000175": "29f8ae9fa882fecb82cac317d253adfc23ac083ac8a57f07aa14f450e6cc3a70", + "0x0000000000000000000000000000000000000000000000000000000000000176": "bc73c987e59da4fa66253e4e382bbc25daa551bcebaa40766218c84c249e2022", + "0x0000000000000000000000000000000000000000000000000000000000000177": "8f9e9db44c2a14d5e6f4c109568e1ed5220cbc09face49934d24593d20779eed", + "0x0000000000000000000000000000000000000000000000000000000000000178": "4cbf14ace7c97bbe835d0811871f9eef77d6fe81ece5eaa55e741a4dc1fdd3d0", + "0x0000000000000000000000000000000000000000000000000000000000000179": "6958b982b14e1cffdfc4bd059530efa2eafa98b8b7f5e4d52ea1bae428329660", + "0x000000000000000000000000000000000000000000000000000000000000017a": "ec74048a1581a2c5f60b21cd9e25bf9c356d64346df78fdd4d5ab6da471c09fd", + "0x000000000000000000000000000000000000000000000000000000000000017b": "96f61cc569a5cc077dab9be9396177a63a089524e4afbbf0ebeb09e357665e83", + "0x000000000000000000000000000000000000000000000000000000000000017c": "0ca41041aeed31cf7dbf302aad1a13f021cff17dc3b30ab3ab8fb5c109bf9965", + "0x000000000000000000000000000000000000000000000000000000000000017d": "f2198f4eac45134910f2f5c2f4f4bba2ee608c19e01728288f8f5c583df9b618", + "0x000000000000000000000000000000000000000000000000000000000000017e": "9ed60ccc2815f143b3776e728718019b7820044b0e8f1048fada365fefb130d4", + "0x000000000000000000000000000000000000000000000000000000000000017f": "9062dff550aa9077f3623061b2bfd2bd8d2c86e29909967d614bd4944d9775b4", + "0x0000000000000000000000000000000000000000000000000000000000000180": "d157f96d8cff964d61e492c245aa25b09c561e5c6336ed5452387454dd2936a1", + "0x0000000000000000000000000000000000000000000000000000000000000181": "b8edb732bc8eebb71c6b57b77061ba1acf052b420d919e5da1720abb3c7edb21", + "0x0000000000000000000000000000000000000000000000000000000000000182": "15266d7b9ec958793882168c6ecb5b92093f733c0e47fa9f9885dec39977e5e0", + "0x0000000000000000000000000000000000000000000000000000000000000183": "96ad738816a0c5035be9c01fbbed53998bc70a21a08bd0fa2427288c9d4b4cfa", + "0x0000000000000000000000000000000000000000000000000000000000000184": "d78dcce2b8cf4bd8d77c2e3212a31f5e1eb0c62184d07d2c0bd0dcfaf9258e67", + "0x0000000000000000000000000000000000000000000000000000000000000185": "53b455b1a2321612d4750d1cb5f2154662340f0596d839583ad50db5d90c42f9", + "0x0000000000000000000000000000000000000000000000000000000000000186": "e665360c7c8888bfa138a986f8ff7f890a44b9e8f80b7e736f5f43a7c8bc5349", + "0x0000000000000000000000000000000000000000000000000000000000000187": "e5efcbb043c2a94c768287dceb47dd6b9cb7a7cfa2d9af29222678ed900368c8", + "0x0000000000000000000000000000000000000000000000000000000000000188": "21f6741c735a5806078a1f39d17733b135210be8033a80be4fefc59d42c45bc7", + "0x0000000000000000000000000000000000000000000000000000000000000189": "d158907e25d23731ef6dce6a9d1614ba8b69f1080f78acecf9c403a853b3e7e1", + "0x000000000000000000000000000000000000000000000000000000000000018a": "6fab05257a0a012b2d7ae03c844ddece0883c3c319ac1396c86f6f0e136d034b", + "0x000000000000000000000000000000000000000000000000000000000000018b": "7c1553d1737048182d4b9d286bce8cfebcf1db592863dcdb04597d033557214e", + "0x000000000000000000000000000000000000000000000000000000000000018c": "b9a2df3ba23cf8289d6075dcaecd47b52b9fb750dee39aa9a93b6477e99b348c", + "0x000000000000000000000000000000000000000000000000000000000000018d": "8db428484b88609d95276b97bfc852bbad22b06dd7f40ac765e4e3333720ea83", + "0x000000000000000000000000000000000000000000000000000000000000018e": "d52069ed6df2e1d2f640f30f418cfdf95501b1c6085ac06093c891607b0032c3", + "0x000000000000000000000000000000000000000000000000000000000000018f": "7a253f0e42ca478ad6c4ae1e4892cbddb34294950e425582a85ae2da34f8a8c2", + "0x0000000000000000000000000000000000000000000000000000000000000190": "4e526a541914f396684974eafbce8e6b898a3330278c3e7626816d435a2ef4d0", + "0x0000000000000000000000000000000000000000000000000000000000000191": "03dc453bfc92a17cf81454eafdde515558d116047e9d2deb26e4d653df5960cb", + "0x0000000000000000000000000000000000000000000000000000000000000192": "7c28f6c5bd3f408616c4374f509a34b30c118bf5d1573a2093630f20e43f2117", + "0x0000000000000000000000000000000000000000000000000000000000000193": "930fac8adfdbe31343d02ff687fcb52da1c6e61bca71f0f4a0dac8bbdbe9f243", + "0x0000000000000000000000000000000000000000000000000000000000000194": "899574f6e851f799bb169b1b2ff31f51b11d500716847b660fbb717340b90f14", + "0x0000000000000000000000000000000000000000000000000000000000000195": "7310d47dc31a6bc3bcb6dbf90735258a092efc6fc83100937e73835ee2d70531", + "0x0000000000000000000000000000000000000000000000000000000000000196": "9096409d42e5525d369ed6637798f87763c39cded3d9b86b9428c86c93b61b86", + "0x0000000000000000000000000000000000000000000000000000000000000197": "12d88d0223ca1c9cf55b618b3c4874591d2ab50eedc5b7acb833cec3efc2c2c2", + "0x0000000000000000000000000000000000000000000000000000000000000198": "0f52fa7983ab74a3b8f29492272435381ef85bc78db04283ef614c1fed3aa454", + "0x0000000000000000000000000000000000000000000000000000000000000199": "84d0bb93eddee81c91f12a28c949b30782bd4e0edba3512ec7ece7930c060823", + "0x000000000000000000000000000000000000000000000000000000000000019a": "033fd8cb5296f3226b34e1dc1084b6a25480fa39cec6e680902d838135aa1fb9", + "0x000000000000000000000000000000000000000000000000000000000000019b": "737d7e54435171f7d4f1a31907fd2e6c53cce00b323b09de43222b5c27b78de2", + "0x000000000000000000000000000000000000000000000000000000000000019c": "a18e5315c6a7fc757c84bdcc6b663d717c0549aa53f913f05e2cffaf6d9f2227", + "0x000000000000000000000000000000000000000000000000000000000000019d": "b29d54443444ecf45ee00696aecb54c788d5bf75b57f20e5130c8a9233ca4c96", + "0x000000000000000000000000000000000000000000000000000000000000019e": "7c3805da218aa7f4e84fd775e7020c28243f7be58b18e624e447ac2905f40b08", + "0x000000000000000000000000000000000000000000000000000000000000019f": "fd605ccf0552f8e7b221992726e492451007e6c6fb9d16e9c9a34200886a04d1", + "0x00000000000000000000000000000000000000000000000000000000000001a0": "105a3b333d909958236b0da2089e6ab33cfd18fdcb2b7778c0c9d71db4298d8b", + "0x00000000000000000000000000000000000000000000000000000000000001a1": "a67f1ef534a72c18b935ecdd616dfc74353d87c9a17f605056f99194ca51affa", + "0x00000000000000000000000000000000000000000000000000000000000001a2": "9227d788b19ed84597de40bf0d549437fac98898f323c856512eb3e4ece9dded", + "0x00000000000000000000000000000000000000000000000000000000000001a3": "9ac08c74df2efa845713d7c48cb120f3974a7d70270d7e43f2e30651695453a0", + "0x00000000000000000000000000000000000000000000000000000000000001a4": "9c60b65b9e76366621f1355ea1e2e292c0f2f2be7bc0f402ad0095cf9b024598", + "0x00000000000000000000000000000000000000000000000000000000000001a5": "2198fa802b4c34aa089ce7b6ce1d7eeb5fc3c2dcc6f6db71ca3d15f8c586a230", + "0x00000000000000000000000000000000000000000000000000000000000001a6": "4df5952c9c5555bae758de89b1a4bef3107e63fe722a5e95161e02f4132faa78", + "0x00000000000000000000000000000000000000000000000000000000000001a7": "bf89f44ab29227a246931d0d96a52e7b788dcb2411625bca2d50be6a3797d8aa", + "0x00000000000000000000000000000000000000000000000000000000000001a8": "9d798f5f1806b22c73320500e5b0ecad6ce1e56f0bebd96df975eabd7e9307fc", + "0x00000000000000000000000000000000000000000000000000000000000001a9": "f0688b0ce2364b1c0e3d43325d3d3c8ccd63e530630a920664d49547169d0601", + "0x00000000000000000000000000000000000000000000000000000000000001aa": "08d303e510e1cc58b695d015fc2c2210daa94f0f3ff193d83ea43135bbb590b5", + "0x00000000000000000000000000000000000000000000000000000000000001ab": "b266835618e75e3292af2395d56e02a6e3e35264a596cb44f38148b1499ea0d6", + "0x00000000000000000000000000000000000000000000000000000000000001ac": "301512acf2893751ec72f15dce9fdfb887dccfa96c80d6580a3487dd7857087a", + "0x00000000000000000000000000000000000000000000000000000000000001ad": "22c0f9622864f960991a2027fa3b70d9941bdb21189e7aa09f68660e27be1dcd", + "0x00000000000000000000000000000000000000000000000000000000000001ae": "f6131b88cdb92ad5d8d74aa040be0cef999f2adfc6adc0b8c0f2748ea1aa2e22", + "0x00000000000000000000000000000000000000000000000000000000000001af": "558e886b4bbd77f53aa9a1a056e8e08481da9dc38b7a3859e498e410dcd973af", + "0x00000000000000000000000000000000000000000000000000000000000001b0": "2588de766ecc1af72b5f7b2a729453d703d85d9bfc027898833f2771039877e7", + "0x00000000000000000000000000000000000000000000000000000000000001b1": "dade7fc48d32dc68d41020ac79b868485abb3558e53bb63a2e8aa47932e39476", + "0x00000000000000000000000000000000000000000000000000000000000001b2": "8ceeb2afd3646d249dccab24330b4251a5ce2d7ad671541d746f5daef884bd41", + "0x00000000000000000000000000000000000000000000000000000000000001b3": "24c5b68530cc49171a66f1dc312ea1a15c3b234db8561a1fb08bf8c3adb972d4", + "0x00000000000000000000000000000000000000000000000000000000000001b4": "82f242525cebab571fe6e5fe6fcd838c55ca48eea1eb255ef7bba0fb43dea956", + "0x00000000000000000000000000000000000000000000000000000000000001b5": "413f11217c8822a00b8b8b614c7e438db97162345ea9d01d1b46bd859f589395", + "0x00000000000000000000000000000000000000000000000000000000000001b6": "37a642a12a17850ffc84a65efd942917d6c413e0623d9ed0dfd583f4a6dd280e", + "0x00000000000000000000000000000000000000000000000000000000000001b7": "2319866ae408c2c16def479454f550894284b65217d988c0f0346c8b788e6f50", + "0x00000000000000000000000000000000000000000000000000000000000001b8": "21cd372ca079c9c9a302ce46dd6604fe0dab8d1c4963735f200fa7aecf68723e", + "0x00000000000000000000000000000000000000000000000000000000000001b9": "95a47db05dc3a6043cd4a648e1838876d7814cdfc2acc03b6bfd228751a193a9", + "0x00000000000000000000000000000000000000000000000000000000000001ba": "e3b09d5570d946f2ab70308a08f0275c443d7ec9d9ef3c32df7c2320f790b4ec", + "0x00000000000000000000000000000000000000000000000000000000000001bb": "590060fc82b55361ca5d13db77f55b5a5cfef362ddb300440f0a48984c9a2e28", + "0x00000000000000000000000000000000000000000000000000000000000001bc": "a9b21f63b40981e09ca454b2739149666dc23a4d33f5a0014463766354cc19f6", + "0x00000000000000000000000000000000000000000000000000000000000001bd": "331d419065a5d0ffa904c435e9022d1e621315eff68f2201ec63a690fec3003e", + "0x00000000000000000000000000000000000000000000000000000000000001be": "44b075e106306c1ca24ca9dc1c5a27e68dbe86367904581bb3981acba06ce979", + "0x00000000000000000000000000000000000000000000000000000000000001bf": "6faa7c1f263480410463c1eaa2ff9a4471dee90cd7b440f9a7fffc7c49c1ab57", + "0x00000000000000000000000000000000000000000000000000000000000001c0": "027b707ded941bf200797c580cf2a73d3dba48794d0b2b198965ff9d0aa4b46b", + "0x00000000000000000000000000000000000000000000000000000000000001c1": "35c25ba5f49d95a411ef32426c443c91e887ca1dedf2a6356969292822c0d91e", + "0x00000000000000000000000000000000000000000000000000000000000001c2": "83e0cab914be2a9ba1c2be60f0ecdff76ee5c946daeef001af4b6a6aa47873dc", + "0x00000000000000000000000000000000000000000000000000000000000001c3": "c735802bd46c31c8a7e3e83c2605a218c92e66f7507e88f4cb1c0f351c0a71a3", + "0x00000000000000000000000000000000000000000000000000000000000001c4": "781d1e3fdabfafcea2fa6d4486634b6af94498fa3562407f4caa4c4294575417", + "0x00000000000000000000000000000000000000000000000000000000000001c5": "e516c9e13a00da98680afc3265f13e142ebdd467d12da151e6e5a9677a228c6e", + "0x00000000000000000000000000000000000000000000000000000000000001c6": "666ac8fcb85fe5025a7b996eb4f4d6411019124c819a009b7e0c7f0e0c4c4c3f", + "0x00000000000000000000000000000000000000000000000000000000000001c7": "3c141c08a245a3db335db0f6bb0cff5848f6425057c9961cb3bef827aa0ff53d", + "0x00000000000000000000000000000000000000000000000000000000000001c8": "63dcab73a746ec6c5ac8f1ff8ddbce7cd483c26548f86554fcc40c2ccc041262", + "0x00000000000000000000000000000000000000000000000000000000000001c9": "3aaec8ddc0224f4b084a8ccc04efefac99cbef0e503b8a7bebc3c7aa4fe46521", + "0x00000000000000000000000000000000000000000000000000000000000001ca": "4dbe3b6b04f679aa9677b3a64d1dcfabc5906a12c178e5ff54b7efbfc2c79b50", + "0x00000000000000000000000000000000000000000000000000000000000001cb": "457c3a83d0815833923bd48642d056782f5fd188041e8cd92f260e2383e0361b", + "0x00000000000000000000000000000000000000000000000000000000000001cc": "02522280a85179021caaa61d6482df93c045087417ba2191809b602832aa710c", + "0x00000000000000000000000000000000000000000000000000000000000001cd": "4d587bd01bcfa40e1795ad3ea5f77b546910c6870bc7e6657d40a1f2d8feede3", + "0x00000000000000000000000000000000000000000000000000000000000001ce": "961d29a7fc57915697ba5b2fae8d3771d8bd91576c32c05afee041ac17d848b0", + "0x00000000000000000000000000000000000000000000000000000000000001cf": "5c3884749debf301065e34263780232f327a57a85b4fe19376e62de3723aa5e6", + "0x00000000000000000000000000000000000000000000000000000000000001d0": "713463804bd20977b4cd34532f3d1168f0a49501d5408fb2877478a477a1f971", + "0x00000000000000000000000000000000000000000000000000000000000001d1": "461c8fd694ea0c1af8793266c605b6ceeaf7245cec97495903ea2a14ecac4380", + "0x00000000000000000000000000000000000000000000000000000000000001d2": "35e31088a1515e1ba6609d0950a16e8f35cde03fa07f46e18e4b86e2cca4edc2", + "0x00000000000000000000000000000000000000000000000000000000000001d3": "61ba03ccc0e0cf9cd98cdcba500e40e8129eb3eb85920d1fef44a05588d49c3c", + "0x00000000000000000000000000000000000000000000000000000000000001d4": "851f39c5ce5f4801b082523faa0cc03f2ff3568a0c243f620e5c339ea39da2b2", + "0x00000000000000000000000000000000000000000000000000000000000001d5": "448656736cc3a9a8e8ab0c5e548319b14a51b40e45f5de7eddaf25ca390c3530", + "0x00000000000000000000000000000000000000000000000000000000000001d6": "525d5448d96a5a36b6bd87c4599662f32304d64eeea5f5c07897724a91a4d8a9", + "0x00000000000000000000000000000000000000000000000000000000000001d7": "3e17e4473b4356e9cf755ce3275618fd3e3d4b82d193bdf6a57a2ecc4ddef386", + "0x00000000000000000000000000000000000000000000000000000000000001d8": "7e688056a77a5d6803174648e4a6d2e982a0e02677ae38261c21c6390e90a659", + "0x00000000000000000000000000000000000000000000000000000000000001d9": "e2f9a4e56ef10377498499f58bc152015a2db11f8b485232541dfde10f04591f", + "0x00000000000000000000000000000000000000000000000000000000000001da": "33287f7e4ff32b8a0e6c65d03e04ea27978409381ab031fb8b26d5fe4e14fb3c", + "0x00000000000000000000000000000000000000000000000000000000000001db": "f6073bc7c2255ed4e3365fe8668f9529aa2327e566eea8485e105fe80d0afa5b", + "0x00000000000000000000000000000000000000000000000000000000000001dc": "f8819d443db1143c7f37606b9cd6003db500b36f8059e0a1b42587b4b7f532fa", + "0x00000000000000000000000000000000000000000000000000000000000001dd": "e1dbbc3e7db42e01ee269badbb49ab349b05938d0fe3840f97a9cd6c51384a26", + "0x00000000000000000000000000000000000000000000000000000000000001de": "92e9256953269935a75a21cb3a31b1797564c37a20a104d622c188d6bbbdcf89", + "0x00000000000000000000000000000000000000000000000000000000000001df": "0d4b4ba377d471804631f61c131ff1829b09242afb36c667f66eb3a70677bec2", + "0x00000000000000000000000000000000000000000000000000000000000001e0": "a02fc5e98bc45d4a34dc34d16d71c95e6cdcac504157769ba0e41582d1c7c28e", + "0x00000000000000000000000000000000000000000000000000000000000001e1": "313563af27e7adf66fd7f2842209e0e0c325506fcac7f6dd3abc361d9e03d498", + "0x00000000000000000000000000000000000000000000000000000000000001e2": "337fb18e572e14e967fa54af1ce06a81e52ac2a3baf227d55bcd08499dd4117c", + "0x00000000000000000000000000000000000000000000000000000000000001e3": "497a904516fc0847ae8cadbe627a4c5999451d9c6fb9c407a20478c7f90c3820", + "0x00000000000000000000000000000000000000000000000000000000000001e4": "1683f93d623b43c0071b287a4f3bba01765e6a5fa591d80e140d2f709960d5a3", + "0x00000000000000000000000000000000000000000000000000000000000001e5": "47bb80c5043a6c8898d1006da95899d8814b8bdc8bc7f5df945418bc33d14616", + "0x00000000000000000000000000000000000000000000000000000000000001e6": "2365c3df9f22079331e7519296bf2f4115bee3a8fa70a357a4fbd4e21476581e", + "0x00000000000000000000000000000000000000000000000000000000000001e7": "5d5980aceee17c98188ebf3255e3b3e26b8a5d38f9a4ed95a36cdc818661b619", + "0x00000000000000000000000000000000000000000000000000000000000001e8": "a848e5ed65c70444a6d1fe529127abea702ad12603be4c42be221994762e0c08", + "0x00000000000000000000000000000000000000000000000000000000000001e9": "e98fe8994405578378ed95c1d4b9a45d743c652214e50ac48bc8b36a42d2a4d0", + "0x00000000000000000000000000000000000000000000000000000000000001ea": "2a67633e64cfd77fe6ce3386742cde79338e1a34f5c7c904ea3eb8f64696d35f", + "0x00000000000000000000000000000000000000000000000000000000000001eb": "5d1662243b6c9f6dbf53fe2b79a220453b883e9c80bb06e31f2295e68918aecd", + "0x00000000000000000000000000000000000000000000000000000000000001ec": "eafb3303dba8dc7f4b41bb7b37f3c93e95c8eabd33c392d88dfd0582aa88dc05", + "0x00000000000000000000000000000000000000000000000000000000000001ed": "8658952c14dcc2b8f15ed4f1f4e861e033bcdbe4b0b17671dd7984b29d1a8ba3", + "0x00000000000000000000000000000000000000000000000000000000000001ee": "9a4b8616c2ab2fd6d1d94a86a6e4a5ebe988708def10c935772e47bdaefe5b0c", + "0x00000000000000000000000000000000000000000000000000000000000001ef": "1987f5210117e3866820238e7be09c5b972ff01bc9d3062259ac73abc9fb5d1b", + "0x00000000000000000000000000000000000000000000000000000000000001f0": "ded42d295832ce8251701cc7582d068b37adcf17bf96e9728f49c7ee7dd93c7a", + "0x00000000000000000000000000000000000000000000000000000000000001f1": "b9244e48395116c8a53aabace93900c569c53b973a9e3687002cd218d807f608", + "0x00000000000000000000000000000000000000000000000000000000000001f2": "ca9205d2f444fffd9a22b3f45c1ae061924fe6b5d885079b4f215fd6da081c89", + "0x00000000000000000000000000000000000000000000000000000000000001f3": "d6d29225f2af2f42a875f8e69837b6abac59f79c06b12476351cf46b1f721268", + "0x00000000000000000000000000000000000000000000000000000000000001f4": "a006e393879b70cf602f0122a886d8167c8708f8e7feef6de52675f650f07b2e", + "0x00000000000000000000000000000000000000000000000000000000000001f5": "8698a5e929f6712d07c38692354fc0cd108829576fcf507d8249375bb4d34e60", + "0x00000000000000000000000000000000000000000000000000000000000001f6": "1e95d4fa85ff39313eed8480ff6f794da6cbdf6c865c33aa2c514fb097c6817d", + "0x00000000000000000000000000000000000000000000000000000000000001f7": "52eb082eb7be273f4d5280bbef49733796215c09a7c71ca1b20fcf9ec180affe", + "0x00000000000000000000000000000000000000000000000000000000000001f8": "d671e7ebad6a5828dbcc7932d67618bba676951ddc013cd528bf9b41a99f50b7", + "0x00000000000000000000000000000000000000000000000000000000000001f9": "1c10e60513c164ab7482d2c33062cbc0f8191dc03f48a211fb9ba5cc9687646e", + "0x00000000000000000000000000000000000000000000000000000000000001fa": "3a66ebe86f285009227283701e0bd5d1ef913636a7a1331799de1c1faa5e4c29", + "0x00000000000000000000000000000000000000000000000000000000000001fb": "062f4d4d65aba3e78d382b9f46e4d5542195003f96b51b865458dcc1f826bef4", + "0x00000000000000000000000000000000000000000000000000000000000001fc": "41870d7fcfb0ba5dd5425e3a3302b3e93025132d1a2776a249a88c572fb6be05", + "0x00000000000000000000000000000000000000000000000000000000000001fd": "7c13316eda73749098cf4575409649054e1835f58d626491b4a4b95f2a8a0564", + "0x00000000000000000000000000000000000000000000000000000000000001fe": "5fe375eb49f8ae346cfc274905e352f9d90b8e27a9557c111a4da925da1ec952", + "0x00000000000000000000000000000000000000000000000000000000000001ff": "b2e74edc8a1efbf6260ee1bab5e093a479e2f7e5cd4b857567c0f375363e9620", + "0x0000000000000000000000000000000000000000000000000000000000000200": "66e753584038f784cd85643a76dbb590005f0704537ac697c648abe7cff660cb", + "0x0000000000000000000000000000000000000000000000000000000000000201": "f4d20bce9d8457ff1dd755e1dfbbb89c7bd0ad0a4cbbd507a20a66a75ad9223a", + "0x0000000000000000000000000000000000000000000000000000000000000202": "8ccbef8f2661bcf3123cd1d94c22200a4ae5f196f22cc0a75a24a2eb88b18acd", + "0x0000000000000000000000000000000000000000000000000000000000000203": "bf528a0231aa3fc212ff82fbc410ffd8e8e2191e9af0a3fbc6b5c246cb7ac8aa", + "0x0000000000000000000000000000000000000000000000000000000000000204": "03938f3ef2d6d88872a92445d63c6617c2ad1c6729900a8263f19ec9d03d5106", + "0x0000000000000000000000000000000000000000000000000000000000000205": "76b268f5c2c12013dabdac36f0d7a87aeabf6d0b9c66afe989de308e9d8cb0ea", + "0x0000000000000000000000000000000000000000000000000000000000000206": "9025f8fd00f67b94a9b19712e0ff275ddddf0638f35bcd818639f440daf3d392", + "0x0000000000000000000000000000000000000000000000000000000000000207": "6d6253031c30b55f6529d6543f837195d883ed16bd214ae6b065668651295a7a", + "0x0000000000000000000000000000000000000000000000000000000000000208": "3d381099b916c9111f0a6ef929f91814a584f390a9032879d7e41c6eed3f4870", + "0x0000000000000000000000000000000000000000000000000000000000000209": "915d521f633b9e30bbb9abc8024728d9f1c69a3f06fe8f490c82143ea04d2e52", + "0x000000000000000000000000000000000000000000000000000000000000020a": "863e79fd3c6376662be319b3ef0eb05283fc9f713417b7856a7c8615f977d8c9", + "0x000000000000000000000000000000000000000000000000000000000000020b": "92017f3c5f46fc656d0b2279ed722c9ee2fefd6aaeef49a9b72a7f3988fda54b", + "0x000000000000000000000000000000000000000000000000000000000000020c": "5b54670c143ac7faa7dd65ddb7e3b7c85d6932c049e071be3a0f9f51ee3b889d", + "0x000000000000000000000000000000000000000000000000000000000000020d": "dcc13010415b57cb7729b370840b98797aff553ee150d53acc57944d6880476e", + "0x000000000000000000000000000000000000000000000000000000000000020e": "2d3c7ce06501bbf1916b0a41b645130ba77f69e25b150354934ea8ea0cb3b012", + "0x000000000000000000000000000000000000000000000000000000000000020f": "b8489443b8bb965ee7e0cc42e8ff8c2467d199cd09434fb394df3f34a2a985b7", + "0x0000000000000000000000000000000000000000000000000000000000000210": "c4194a2d7270901ff947af6ebd80fa701243344f704f832880455f4041285986", + "0x0000000000000000000000000000000000000000000000000000000000000211": "1d01c2348f9ac6b46cb793467df238a9f23c29c1d3de9e454bc61644705db054", + "0x0000000000000000000000000000000000000000000000000000000000000212": "7cdb5360f32a30019bf96d2ea2034810820d065f655f99482aa59696b371afa4", + "0x0000000000000000000000000000000000000000000000000000000000000213": "d17bc796f0ad66329bca1ca889a6c67406db80c0f43200fb0926495f409432b1", + "0x0000000000000000000000000000000000000000000000000000000000000214": "d8472a9633cefd2b65c8d169fdcc6737e60390ee74069eea5c6209c6e2ad1634", + "0x0000000000000000000000000000000000000000000000000000000000000215": "619efa7e75625a7ebedc7f3f9399965b08abf5834485d1db46a18e52f18c31ee", + "0x0000000000000000000000000000000000000000000000000000000000000216": "c2b62f015db1c1d98d0614179d0ce92635a62ab4922a2faa0139119d3d63e071", + "0x0000000000000000000000000000000000000000000000000000000000000217": "58bb373fbaddaa37a1fd35bfbaedfca10e720b9517932daa0041139db7285ac0", + "0x0000000000000000000000000000000000000000000000000000000000000218": "c9e6ff8c4334da9106046cf0aa6ada5653c1c7e4e04e2625132bdf77159440d7", + "0x0000000000000000000000000000000000000000000000000000000000000219": "d8c58761e29f93f85ed6cba366a7bf37793501e56beb1505083593cef82267c5", + "0x000000000000000000000000000000000000000000000000000000000000021a": "1d090490f42aa267658565f6ca68e0d230f7d6e2c2c850276c5428f2e6feac7e", + "0x000000000000000000000000000000000000000000000000000000000000021b": "f0867530c5e2d8e1e6f5e8fce7da42ed7d2b62d8f996ad93efabfdb12bd3cfba", + "0x000000000000000000000000000000000000000000000000000000000000021c": "b2db3d26bc5c38616a7acbaba0e72cbc0d27ddb96f8fe1f4f1437d6ea7c058f9", + "0x000000000000000000000000000000000000000000000000000000000000021d": "0dbddf3e586a2f5369ac360a4fee1273047238f16f2f4e8b6e16471b2455701a", + "0x000000000000000000000000000000000000000000000000000000000000021e": "a82749ce59055410613ad90d73c4fdfe715f9b60c665689c4c377125b1dadaef", + "0x000000000000000000000000000000000000000000000000000000000000021f": "5be3c764fef371841fdaca04c885c757d884f9ff8971250ae39d77c76e573636", + "0x0000000000000000000000000000000000000000000000000000000000000220": "b710b8559fdeaf52af97d3fcf0879011c37044dedb8f94dbbc338a85bfd7c61a", + "0x0000000000000000000000000000000000000000000000000000000000000221": "6eb711b67df8460994ec6d375c26a4209acae1a918f7a62392f2a562500980c5", + "0x0000000000000000000000000000000000000000000000000000000000000222": "1da9f51a070e2bf7a49e7631ac54fb0e79bf4034dd2b982f8929cf12c469a593", + "0x0000000000000000000000000000000000000000000000000000000000000223": "9d719d04326acbac551edf543d8f760e26c65609601f950dc8d7271cbf40a006", + "0x0000000000000000000000000000000000000000000000000000000000000224": "488537d78be3c43ce3232056b5e0b1ce2ca9a88d4d7d768f654e0698928743e0", + "0x0000000000000000000000000000000000000000000000000000000000000225": "04b7bb9acaf695da6f2e725c22098a6a6d2216ab3478a9e053526bb50e276afe", + "0x0000000000000000000000000000000000000000000000000000000000000226": "7181f0084b63db7479c003d7dd4291ca02dae8d4283f82becb53681d47398afb", + "0x0000000000000000000000000000000000000000000000000000000000000227": "026fb7db67bd230b10afa06b1c7b20edc1219887a13c0accd594f54aba577ca2", + "0x0000000000000000000000000000000000000000000000000000000000000228": "60596113f907eadfb5229325292e44044821a9e22f7e575b24cab3ea58fb5190", + "0x0000000000000000000000000000000000000000000000000000000000000229": "d168573695101511d7504d9d987c5a0fa7e64b52dbba520aece42e39e9b889b7", + "0x000000000000000000000000000000000000000000000000000000000000022a": "cde6e6e9437d8d53d9d119f59621d8af4aab0d36357ae361fc39100037289949", + "0x000000000000000000000000000000000000000000000000000000000000022b": "af7988749b7c275b2319bbe47c81260f8c3084d77e284db0b00237173851550f", + "0x000000000000000000000000000000000000000000000000000000000000022c": "e80952fe3298776700d0d5527b12772000caeafe16823a1d07d023c092aced4f", + "0x000000000000000000000000000000000000000000000000000000000000022d": "0462b045d5e548d1267a9124eede57927ff6653ee26e515e79484a37fa332fec", + "0x000000000000000000000000000000000000000000000000000000000000022e": "c2379dccca93cb7af1b9495cb45ff56200395f2d0f799afda2cf7d1a8dc2207c", + "0x000000000000000000000000000000000000000000000000000000000000022f": "a7614022dce29db83d3fdfda49d693584249cd3719f6981766ee013a59c53df5", + "0x0000000000000000000000000000000000000000000000000000000000000230": "a9a699c07f4409eab9ca244799436f35249c79448cfb16f1daac3ea84453ab62", + "0x0000000000000000000000000000000000000000000000000000000000000231": "25b92c413d927baecbcc7836cd6464336f0a89e2d65a9fa0cfbe8729fb3b2eb6", + "0x0000000000000000000000000000000000000000000000000000000000000232": "a57990630fd6f670bb7e9f46d7c3e913b5392a7b13a83e9e040118b5edce4bf1", + "0x0000000000000000000000000000000000000000000000000000000000000233": "1d6f6c4bfa2d734a2b4869d97a28ed74e5ac40595899853e85e98349788a9d58", + "0x0000000000000000000000000000000000000000000000000000000000000234": "e8c2b0ff9fe420948d5a90471748469f7cd018d8b62b156404626ee33a4f4edf", + "0x0000000000000000000000000000000000000000000000000000000000000235": "96419b60000d8e4e9815500d8e3d69eef3c19d36997bdaedd42cfabf174ae505", + "0x0000000000000000000000000000000000000000000000000000000000000236": "ffafac142daa1e5dfaa588553a29883ef5d6b9a56408401cc20dd60121467861", + "0x0000000000000000000000000000000000000000000000000000000000000237": "eb9bc3c34aeff870450eef73debeab5d6a4e853fd5e94794de8de70f3328400b", + "0x0000000000000000000000000000000000000000000000000000000000000238": "168cb5014662382595da9de5a5d07020a00f6871e24ec2f12e4d2c01200a1021", + "0x0000000000000000000000000000000000000000000000000000000000000239": "12d8f16244cd8fd6024d151e6a2070009c315dffa38ee8c5330e1bd3d4c3e550", + "0x000000000000000000000000000000000000000000000000000000000000023a": "ae534ee68fddcbb56a54e1389963b1b91f2bd81903668bc912fb38e8222616ee", + "0x000000000000000000000000000000000000000000000000000000000000023b": "d17d8c2fc653829318949d721e152c1578ac66a99c02fea2ed7e9902345888ca", + "0x000000000000000000000000000000000000000000000000000000000000023c": "8d7e0a0e7b3ae1c2af06dbe35c75cb89f39ee82eabdcc3dee776c4528e5f44ae", + "0x000000000000000000000000000000000000000000000000000000000000023d": "1d2cf4804fe3b07289794f1cb5227e51d697cad91934eb7c4705834e36100bb6", + "0x000000000000000000000000000000000000000000000000000000000000023e": "f90b5cc6dac74d3bc26ea436c5009c72a78b680483bba81d842d5500cf2cadcb", + "0x000000000000000000000000000000000000000000000000000000000000023f": "da50bf0b60a87259fb867f9ed72c9b70defa034f7579ef5d8b3b1fdc0dcef8fe", + "0x0000000000000000000000000000000000000000000000000000000000000240": "0ed725064a1263c0361d176ecc01bd8f3282fbf917f16c7acc8d74da1a076d5d", + "0x0000000000000000000000000000000000000000000000000000000000000241": "6c84eb9a9f855cc6e5d2e3a2e3745e58a19f3dc35dc4d4b87e03fd8be4541313", + "0x0000000000000000000000000000000000000000000000000000000000000242": "dfe776d8d16b551a7020bdb98ccfbed0c74ce701b7da68a2124088f2661a3592", + "0x0000000000000000000000000000000000000000000000000000000000000243": "ff3de971bda54ed67b27bd4b95e38b9045f21d23c4b3b1613def488d9826e293", + "0x0000000000000000000000000000000000000000000000000000000000000244": "689a76ccb80461e78e22e1997c949bb143882516f7db6ec6aeb1062342881540", + "0x0000000000000000000000000000000000000000000000000000000000000245": "179654e16a3900b68bb66927ab2e714430ee0eadadf1930eb6073454bfe66d72", + "0x0000000000000000000000000000000000000000000000000000000000000246": "7a4bcc5016b6d39420221e1206b50128e0efe3fee6a1c5eb573e6bedaab5f215", + "0x0000000000000000000000000000000000000000000000000000000000000247": "54d398355fd128ea6d1db1e790364b184845a3687dfa213ac446f7d298755717", + "0x0000000000000000000000000000000000000000000000000000000000000248": "c52e636696619f0055d30d50b17d0f5a62537fa775dcd349d3948956c57a578d", + "0x0000000000000000000000000000000000000000000000000000000000000249": "6c72dd1012068c32cf36641b1564e48296fb121ab7a9a9baefd5c28416d8d054", + "0x000000000000000000000000000000000000000000000000000000000000024a": "a9697418504b9f328eb3b4bb3c4a82ccdad93df60ba4f9666a9ed9d4b61215af", + "0x000000000000000000000000000000000000000000000000000000000000024b": "eccc52333b224ed9aa4a274c7c2e6ad7043da8fec8cbd1841c4df037d272a070", + "0x000000000000000000000000000000000000000000000000000000000000024c": "0e033ec5d1b65a42204e9caf992cf062bf74c8a309c9b2e769b858e366650d94", + "0x000000000000000000000000000000000000000000000000000000000000024d": "787a2bb58c6e1d4ac5d91e6fb7bbf1713c1e902ca3b86d920504167e9704e574", + "0x000000000000000000000000000000000000000000000000000000000000024e": "aa4611fb72fb0a85c2d1bc1083c160f1f316538c7f58ef556f4340ea20068ce1", + "0x000000000000000000000000000000000000000000000000000000000000024f": "5e35d6b8ace034f15f9ea52f7f1a6a1ec774e7a4234137c6c5bb913dfd733971", + "0x0000000000000000000000000000000000000000000000000000000000000250": "0a0ed30330099aaed4d9fc919882376e3624d21bc3b39691003081f575f6b27f", + "0x0000000000000000000000000000000000000000000000000000000000000251": "3f445c59eb76afc237ab0aff24e4afece553617597903e7c54e2e52535f5f69a", + "0x0000000000000000000000000000000000000000000000000000000000000252": "5b913043ae15b19475bdf3bce3000c885837ce744816ee34aa4c4fa13c29e273", + "0x0000000000000000000000000000000000000000000000000000000000000253": "cd4351d6d5b3636ccb5424b17c5a8b33e881f83ac158694c1f198b70290d93", + "0x0000000000000000000000000000000000000000000000000000000000000254": "84dfa1c19923082db1a37ae307ef33a005c1ae987763f3537078e44a91f72cef", + "0x0000000000000000000000000000000000000000000000000000000000000255": "4f62f1eb606efbd760b849b83f48b5080b0045364da18111e5f81faa74bdf648", + "0x0000000000000000000000000000000000000000000000000000000000000256": "6845189fc5fffc30575935e9f8db4c343bcf5001360241b5af6a10c91f5b1003", + "0x0000000000000000000000000000000000000000000000000000000000000257": "7e80093a491eba0e5b2c1895837902f64f514100221801318fe391e1e09c96a6" }, "address": "0x0000f90827f1c53a10cb7a02335b175320002935", "key": "0x6c9d57be05dd69371c4dd2e871bce6e9f4124236825bb612ee18a45e5675be51" @@ -1833,190 +1833,187 @@ "address": "0x000f3df6d732807ef1319fb7b8bb8522d0beac02", "key": "0x37d65eaa92c6bc4c13a5ec45527f0c18ea8932588728769ec7aecfe6d9f32e42" }, - "0x00F691CA9E1403D01344eBbaCa0201380caCC99C": { + "0x0042A98aB090F46F6F8d5d068580BAb43dF2fe00": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x414f775e04d169c219a5acda8227220896061f1edcf83d93e9ef0e036e6b07eb", - "code": "0xb8e894a6dd5121be9d2a29c2e1cf16ab2c760e3243306ce88e771a7860df9e85b1e225b71c59213e32f4bb29d456e874b9c97a51f77a8f958e9e475745869be7bb253242668f210ab37ea93841fe0d17a46e78879caed1b4f17f085c8a9963a6830bab64ca008c825ce6fee9d16d63427d5148d6bfa8237fc8acd3ea124b12c65cada8413107c6f4009d62c1355b55832bd0688b7023e5888115d596c1cc5e94da5898a2ce83fbb79921776bda0d9000fbb2244c87f580711e4e2863ca14b405b8c1b99a0a643c89a0443cb185772b972869cfa5fa581f8dc3f977b3df54a682e345b295cb7c8e9f4fa00470e4a0eeeb15892acde8fee168a1403d820087e73d", - "address": "0x00f691ca9e1403d01344ebbaca0201380cacc99c", - "key": "0x7c48e400de1f24b4de94c59068fcd91a028576d13a22f900a7fcbd8f4845bcf4" + "codeHash": "0xc1ae0ad6542a5c7dd593e75e1fcfeb2f5f6f275a4e9733206e8cea0f902b18c5", + "code": "0x580e8642a5018110af46b2595b11c6b7020b184eed4ca1923f4b7560c005d79721b4070496384c066e3afae3a2dc2688ae89d053eedf7f55f96f83c53f8b4b70f8bceeb37b98a3040a0d9f17323f96d8b10dbff6292e76e0bd6821526c2b6695f29a47cc56db769417bfe11e85c712aa9920cdd341de96305d778b58202ad75439ce2098b9fe07cab2942112323839e66c47b416dc15802a90e3a31ffdd0317df92d08284561ef9761634b888f908f45aa5356ab73a972474a956790b74a59c148b495e015ecace61929bf62c764f6ec24d5fbe97351dc5e7e813829bc54315fa0f6f0dbb29f6599bffa43edb3f2ce5e01769244b9cfc33f4ba781e3ae639ef7", + "address": "0x0042a98ab090f46f6f8d5d068580bab43df2fe00", + "key": "0x104b943e78540e4b0bf81e7ccada3f831857a325a06947412c1287ffaa284119" }, - "0x0175C17De53473bbf136e6aF7086B8700B43CF38": { + "0x017AAe1940B253E7afad292098eb59e6c64e9beE": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x2bf43f06b9f27c71498ec5b782da1259b2a6eb02fe7f9136c3d0b2858c0f6e09", + "code": "0x20d186469448ced763a24def3f3468c9b40577d59eac422c275a9576c439d86547d8af78512b204f644d8f13cc57c25ffeeb27f5044fd719cb9725d000fe6aac4851de8a4df83c855557329789c7e5ef967a3a084e4ae3784f2778aeb8b86084e46a11c5890976e15441eaf10504a1b4f452c682aba2316cc50045a1455c86e09a2621996aa68bc125b1cf3679db117591d94cbb32bed7853d075ac666de26906f4dd0040cdabb3e17c91cda6a1798a305913c9e276fa80b450a4dac0e46d04e056520d4601757791117f936edc6e5228e597c55498227034e003251987fdb0f6a7e37735eea420ba517b5284cd84328feb0209a3069f0ddbf84e94193c44f37", + "address": "0x017aae1940b253e7afad292098eb59e6c64e9bee", + "key": "0x08440b5468b3c640fa97a13fdaabbe5bf5fa0d0035a457b43aeba20442a9335d" + }, + "0x03B745d7f28eCfd7903f746B9d3d36f56E004C73": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0x0175c17de53473bbf136e6af7086b8700b43cf38", - "key": "0xf045ac5237b17e93661fe75054f95cc76df4c3b668f0e4a1d8f5daebc12a85c5" + "address": "0x03b745d7f28ecfd7903f746b9d3d36f56e004c73", + "key": "0x0af10a79f7cad0388da160fbb23ba70ad0093166ea4b5cfb620dd59bc84357f7" }, - "0x022916D4E98bF4d48884Ad1cB9c4aA58CbfDc970": { + "0x04361123c6CBFc38F6Ee7B0202ecEFdaE36efEB4": { "balance": "0", "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0x022916d4e98bf4d48884ad1cb9c4aa58cbfdc970", - "key": "0xf80cab3980ad7df8c2fc9d0f457c7fa62e4a5a2e0e0057ad96302ecc3d1e6cd3" - }, - "0x0242186831F57A6FC1177d96F18B31E8bF67E7AE": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0x0242186831f57a6fc1177d96f18b31e8bf67e7ae", - "key": "0x022c043e6e7e719985ea4071080e6532d25dc102f3fffa2d96db43eeae4e8dc6" - }, - "0x0300100F529a704d19736A8714837adbc934db7F": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x730f4b9a001161056466356bac602cec9aea791a93eee35887c5b445c1ba84d2", - "code": "0xa3460b9064575a01ae448ac16880d3d6297c3b1b3ed6401e5e55576437da869cb8268a6811e35185c888408dbd03c24dd26f48c3ed147cffb085165a9b915e99d9c7c9af5ae3bd9d3c51ae123d91d0a46beaa95906b5f109f17d5f466c68dbf5e7484af6bbc8157ed372968cb5ffae804c38bcbc5773bb07433d44bbcc6ebbf0599ef2d67d4a71e24d4f29210ed925ef54d64da410ce44512c56a7a472cfb0df80db63b10209d83bee8914a5717573d21b5817ca696e60bfa859102ac5a737f7e23d3626096a70b8a02737a3c2f960e5732ebae39d6a014de867a32a96f9bd4df5d6daae740c69c53563f540b21d345f00222698cc33e6e7a4196bed610744c1", - "address": "0x0300100f529a704d19736a8714837adbc934db7f", - "key": "0x97b25febb46f44607c87a3498088c605086df207c7ddcd8ee718836a516a9153" - }, - "0x075dB7AB5778cd5491d3ED7Ab64c1Ec0818148F3": { - "balance": "0", - "nonce": 1, - "root": "0xd3f27d2eba503b1af71052fe41fe4073a680ebe483f428d3caf50e94dfff12ab", + "root": "0x34af31de538687879648eb811e76794299920242a507de08c946638fe1def18d", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "storage": { - "0x000000000000000000000000000000000000000000000000000000000000019f": "019f", - "0x00000000000000000000000000000000000000000000000000000000000001a0": "01a0", - "0x00000000000000000000000000000000000000000000000000000000000001a1": "01a1" + "0x0000000000000000000000000000000000000000000000000000000000000035": "35", + "0x0000000000000000000000000000000000000000000000000000000000000036": "36", + "0x0000000000000000000000000000000000000000000000000000000000000037": "37" }, - "address": "0x075db7ab5778cd5491d3ed7ab64c1ec0818148f3", - "key": "0xf84223f460140ad56af9836cfa6c1c58c1397abf599c214689bc881066020ff7" + "address": "0x04361123c6cbfc38f6ee7b0202ecefdae36efeb4", + "key": "0x3960cb77ee8ce76e0a84773c1d222795fba838aa28edcca2045779467ef3fa27" }, - "0x0767637af7aeA66d876BAC94769Da962Bb4D93F6": { + "0x08D3B23DbFE8EF7965A8b5e4d9c21feDdBc11491": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0x0767637af7aea66d876bac94769da962bb4d93f6", - "key": "0x500b6c47c37153a6d5f95cb6503d4d6677f1b875ab80b7d12a3e15db75573930" + "address": "0x08d3b23dbfe8ef7965a8b5e4d9c21feddbc11491", + "key": "0x792cc9f20a61c16646d5b6136693e7789549adb7d8e35503d0004130ea6528b0" }, - "0x08B229256Ba635C4500B5bCd23C8df2E06FD2666": { + "0x0Aa79FD7C1C0e7E00c4ba9feE89F49D7daa0B61B": { "balance": "0", "nonce": 1, - "root": "0x533722a718cdf4f4cd17633807044d1e14f967b005430f7aee50ae9a4844c16d", + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0x0aa79fd7c1c0e7e00c4ba9fee89f49d7daa0b61b", + "key": "0x5d09cbe91ea3932998d10a7c8106f1f4fca78689ff14cc078317a695f449ce14" + }, + "0x0EF32DeC5f88A96C2EB042126e8AB982406e0267": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x5fbc8fe8138fab7ad184ea266f527d1893aab90dda28f7d24be94b959c96ebdc", + "code": "0x8a1b5c8cd5b7bd4a981a9c76dd66b7aa945dc8c3e0d495c4302436789fc22deb28c3ddba77ef852302eb67f6ce73e9c25e4571d861f77ad858cbfc3a8b54fb6f354d8a99986db445a0165d66c40c5165c1279120b31bd4c3c2f2481f7db470b9b2da59e7d1f8c6f5b402f26d36ed8613aa166b0402cb67bf66827eb445a0425c4b1129d94a51518e06a7990c71f442b0b66889854dcec1ddafaf1a71b43c7d0d973d75199dd705c0c68e8de5860d9d79de36c934e6e853a20e564b4cb3df71d70f7c04ea896bef7c7bf375a13ee362225e123d9012b8c6b13304e824fcd38751e836b707360d6a982410a47a44158b01d3eed14352c6353955a96cff8a983bb2", + "address": "0x0ef32dec5f88a96c2eb042126e8ab982406e0267", + "key": "0x181abdd5e212171007e085fdc284a84d42d5bfc160960d881ccb6a10005ff089" + }, + "0x0F228c3Ba41142e702Ee7306859026C99d3D2df5": { + "balance": "0", + "nonce": 1, + "root": "0xd5b34d0d68ba3ef51e4b583574eb13c9d8736538df206a042faea02c65359fb7", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "storage": { - "0x000000000000000000000000000000000000000000000000000000000000020d": "020d", - "0x000000000000000000000000000000000000000000000000000000000000020e": "020e", - "0x000000000000000000000000000000000000000000000000000000000000020f": "020f" + "0x0000000000000000000000000000000000000000000000000000000000000056": "56", + "0x0000000000000000000000000000000000000000000000000000000000000057": "57", + "0x0000000000000000000000000000000000000000000000000000000000000058": "58" }, - "address": "0x08b229256ba635c4500b5bcd23c8df2e06fd2666", - "key": "0x2aae99477bd369e3478c1f1df2c669e8960d4583ded8d183f9578e36b301544e" - }, - "0x0E4aea2BBB2Ae557728f2661Ee3639360f1d787A": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0x0e4aea2bbb2ae557728f2661ee3639360f1d787a", - "key": "0x517bd5fbe28e4368b0b9fcba13d5e81fb51babdf4ed63bd83885235ee67a8fa0" + "address": "0x0f228c3ba41142e702ee7306859026c99d3d2df5", + "key": "0xedd9b1f966f1dfe50234523b479a45e95a1a8ec4a057ba5bfa7b69a13768197c" }, "0x0c2c51a0990AeE1d73C1228de158688341557508": { - "balance": "1000000000000000000000000400000000012", + "balance": "1000000000000000000000000300000000013", "nonce": 0, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "address": "0x0c2c51a0990aee1d73c1228de158688341557508", "key": "0x28f25652ec67d8df6a2e33730e5d0983443e3f759792a0128c06756e8eb6c37f" }, - "0x0eD465f2D38113203793802EaFcFe2a302F5141F": { + "0x0cbCC08EEaAc7Eb46d905d8b8512baf9EcEFc06A": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0x0ed465f2d38113203793802eafcfe2a302f5141f", - "key": "0xcae77150ac0c4c8a134fd8b7c02b6e053e99a44f91db924f3033dff62033de25" + "address": "0x0cbcc08eeaac7eb46d905d8b8512baf9ecefc06a", + "key": "0x1789b3c99cc4ae75e9081577bb1487920f8f5356e7b6b8d367a98f4236f15e11" }, "0x0eE3aB1371c93E7c0c281cC0c2107cDebc8B1930": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x247cc3b27208cdf8036ec9c5aa16ae2aa005255b13aaf0e79824fc6d69e2df61", - "code": "0x60003515156036577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b7f08c379a0000000000000000000000000000000000000000000000000000000006000526020600452600a6024527f75736572206572726f7200000000000000000000000000000000000000000000604452604e6000fd", + "codeHash": "0x7ee785a86efed9c83a8caeb5665b7a1fc4ec3fb9204fef8bd60152994e522e84", + "code": "0x6000356142ff54501515603b577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b7f08c379a0000000000000000000000000000000000000000000000000000000006000526020600452600a6024527f75736572206572726f7200000000000000000000000000000000000000000000604452604e6000fd", "address": "0x0ee3ab1371c93e7c0c281cc0c2107cdebc8b1930", "key": "0x9afc282e9868fb95921af24218a3612a16ad8e7329530b5be184a6507bbddecc" }, - "0x112e887C13720ea0Ea8Ab3c2eE9639155Ff06e50": { + "0x0eF96A52f4510f82B049bA991c401a8F5eB823E5": { "balance": "0", "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0x112e887c13720ea0ea8ab3c2ee9639155ff06e50", - "key": "0x171124648329d6a061328d1189b14f64e3da43648255489dbc67168331936bc6" - }, - "0x1218Cf397301c287Cfd4a2Bdbd922A3432457388": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x097d31b10fc018fa01b350d82033872d007057b464560cdc1afd34fcddb14501", - "code": "0x3568ac4853d98daec689c5f2aa7d3141dd0256607e02057f4de3da3f333907ff9b41fe675cf46e85813b95622c1329ddda8c317b528ee44b3cbf5c27b8b8f7e5759c070bd3698aa0ecb5628e2a94ee9c0fc87c120f625d01a781262556e517bada8419d7f831676b15592f36811aed673124b0b8123e5c73e1ea68245a6ccf6457969cb441519f4b2cd9b0a57d7e95a7eb2c5e3f719cad38e8c60697bef8a3c2e153613a7c973b978a2b720f5225dbf4b83bda7128b3fd13e56307208ddfe0c77c2ebe6bc91f70109fbacaade46e1cb5258e806c9970c9d5085c13d5e23751de34ee70246abe44a6ef3f9dc451e68ce7669b7393fc4538f9fc58aec8dbf5b825", - "address": "0x1218cf397301c287cfd4a2bdbd922a3432457388", - "key": "0x887e6e4c23e7a93a0c66f56b8ac9b5399d205063604ff2f093c5b2d30af481e3" - }, - "0x132432ce1CE64304f1D145eBa1772F6edd6Cdd17": { - "balance": "0", - "nonce": 1, - "root": "0xa8cbc3846808271a2bf0580ee9da43b36853292ce79dbe0bc785c62337eaec86", + "root": "0x02c382fe4494fbb1df7e05021bd783c68ee4d3d0c82baad3d7a91cd910f3dac2", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "storage": { - "0x000000000000000000000000000000000000000000000000000000000000006b": "6b", - "0x000000000000000000000000000000000000000000000000000000000000006c": "6c", - "0x000000000000000000000000000000000000000000000000000000000000006d": "6d" + "0x0000000000000000000000000000000000000000000000000000000000000148": "0148", + "0x0000000000000000000000000000000000000000000000000000000000000149": "0149", + "0x000000000000000000000000000000000000000000000000000000000000014a": "014a" }, - "address": "0x132432ce1ce64304f1d145eba1772f6edd6cdd17", - "key": "0x729953a43ed6c913df957172680a17e5735143ad767bda8f58ac84ec62fbec5e" + "address": "0x0ef96a52f4510f82b049ba991c401a8f5eb823e5", + "key": "0x59312f89c13e9e24c1cb8b103aa39a9b2800348d97a92c2c9e2a78fa02b70025" }, - "0x13f3F31335881a7402955Dc3Bf0b4A62936b44aa": { + "0x10FA59f55E0876fd0742a892CdC28522a44d0Ac4": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0x13f3f31335881a7402955dc3bf0b4a62936b44aa", - "key": "0x6742b9f65e686fd1b9da73a3a29541cbb07afaaf51b5b5be682b462131709388" + "address": "0x10fa59f55e0876fd0742a892cdc28522a44d0ac4", + "key": "0xf1030dcbd8e148d0bb4baa102b98525fdff7fb308c789a245aa66a8402d2344e" + }, + "0x123B4998651f811E46D2441aeFECfd2FacD29b36": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0x123b4998651f811e46d2441aefecfd2facd29b36", + "key": "0x9024e9b7859e438367088a1d007cfd7ede3ee942414862a496b8f63601d6e615" + }, + "0x12a0aB4dF31cfDf42713Dc3cEebFc710FE675b3d": { + "balance": "0", + "nonce": 1, + "root": "0xe2a164e2c30cf30391c88ff32a0e202194b08f2a61a9cd2927ea5ed6dfbf1056", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "storage": { + "0x00000000000000000000000000000000000000000000000000000000000000e5": "e5", + "0x00000000000000000000000000000000000000000000000000000000000000e6": "e6", + "0x00000000000000000000000000000000000000000000000000000000000000e7": "e7" + }, + "address": "0x12a0ab4df31cfdf42713dc3ceebfc710fe675b3d", + "key": "0x59a7c8818f1c16b298a054020dc7c3f403a970d1d1db33f9478b1c36e3a2e509" }, "0x14e46043e63D0E3cdcf2530519f4cFAf35058Cb2": { - "balance": "1000000000000000000000000100000000009", + "balance": "1000000000000000000000000200000000008", "nonce": 0, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "address": "0x14e46043e63d0e3cdcf2530519f4cfaf35058cb2", "key": "0x9feaf0bd45df0fbf327c964c243b2fbc2f0a3cb48fedfeea1ae87ac1e66bc02f" }, - "0x1534b43C6Dfa3695446AaF2aa07d123132Cceceb": { + "0x16032a66FC011DAB75416d2449Fe1a3D5F4319D8": { "balance": "0", "nonce": 1, - "root": "0x2eadda3a2ead59e184a6b073cdd8fbe4538eac19175e79833c3efb263ff9d09b", + "root": "0xca971614d31dd563a9aa6117aed4e85ee0e8a87276baa442e937cae4b9996949", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "storage": { - "0x00000000000000000000000000000000000000000000000000000000000000d9": "d9", - "0x00000000000000000000000000000000000000000000000000000000000000da": "da", - "0x00000000000000000000000000000000000000000000000000000000000000db": "db" + "0x0000000000000000000000000000000000000000000000000000000000000098": "98", + "0x0000000000000000000000000000000000000000000000000000000000000099": "99", + "0x000000000000000000000000000000000000000000000000000000000000009a": "9a" }, - "address": "0x1534b43c6dfa3695446aaf2aa07d123132cceceb", - "key": "0x2a248c1755e977920284c8054fceeb20530dc07cd8bbe876f3ce02000818cc3a" - }, - "0x15B9118f5f6a91cC127c4AbcDDDa1FA08D6d41C2": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0x15b9118f5f6a91cc127c4abcddda1fa08d6d41c2", - "key": "0xcb10ab6f495ae291b320182d2316da52c2b5a4bdfe13d7071d1c948461abbe49" + "address": "0x16032a66fc011dab75416d2449fe1a3d5f4319d8", + "key": "0xe3c79e424fd3a7e5bf8e0426383abd518604272fda87ecd94e1633d36f55bbb6" }, "0x16c57eDF7Fa9D9525378B0b81Bf8A3cEd0620C1c": { - "balance": "1000000000000000000000000000000000011", + "balance": "1000000000000000000000000300000000005", "nonce": 0, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "address": "0x16c57edf7fa9d9525378b0b81bf8a3ced0620c1c", "key": "0xda81833ff053aff243d305449775c3fb1bd7f62c4a3c95dc9fb91b85e032faee" }, + "0x17b917F9D79d922b33E41582984712e32b3AD366": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0x17b917f9d79d922b33e41582984712e32b3ad366", + "key": "0x13cfc46f6bdb7a1c30448d41880d061c3b8d36c55a29f1c0c8d95a8e882b8c25" + }, "0x17e7EedCe4Ac02ef114a7eD9fE6E2F33Feba1667": { "balance": "0", "nonce": 1, @@ -2026,82 +2023,17 @@ "address": "0x17e7eedce4ac02ef114a7ed9fe6e2f33feba1667", "key": "0x69bf6d72df9e6b88306eb4e4624996e919f0433ba63520aa9a1d3f9888e09b1f" }, - "0x18291b5F568E45eF0f16709B20c810E08750791f": { + "0x19Ee2Fd8a16B0d5348CC43634E3015f5c4eC281d": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x94d95e732733c801cf6c47d1092559b355b731663edf264cd56f1f8bf9643dde", - "code": "0x53e446b02877d67323538930ac023539909d7ae9c37d47c9041a36b516d7a895b9082031afe800ff4145d688a9aceb89c2035073c366644d7c1fa9b891d3a351f13c26c3380332c756c2535bb8be8673c2d150e01b15e31f73fa100e1f4968f5f1b5f43cfd58433d8089d74d4b0d048639a18b3e74e203da03a300c559157a05ac7a8c487ac9ae6a81f1a5f24686cb5abcc471ed89182a27eb411609d783592905ad14573d4f19affa497b220c03fe2d7d204eecd50d03e42c775d0bdb013b9951aa4fa60f2ae98ad35a8d9cb8bb757547523cdbf7ebaea966a3a6a229e3bbecb59ab80f5598cb65e185f83739c5b8a9f7ed18c2d44c1cfa8eb3fe5e47e30e9e", - "address": "0x18291b5f568e45ef0f16709b20c810e08750791f", - "key": "0x315ccc15883d06b4e743f8252c999bf1ee994583ff6114d89c0f3ddee828302b" - }, - "0x19129f84D987b13468846f822882DBa0C50cA07D": { - "balance": "0", - "nonce": 1, - "root": "0x5804411a83500245d7b0f6826a301fe8e9314c1a4407b78022cd212295dc60c0", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000105": "0105", - "0x0000000000000000000000000000000000000000000000000000000000000106": "0106", - "0x0000000000000000000000000000000000000000000000000000000000000107": "0107" - }, - "address": "0x19129f84d987b13468846f822882dba0c50ca07d", - "key": "0x2b8d12301a8af18405b3c826b6edcc60e8e034810f00716ca48bebb84c4ce7ab" - }, - "0x194E49Be24C1a94159F127aA9257DeD12A0027db": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0x194e49be24c1a94159f127aa9257ded12a0027db", - "key": "0xd57eafe6d4c5b91fe7114e199318ab640e55d67a1e9e3c7833253808b7dca75f" - }, - "0x196d4a4c50EB47562596429fDeCB4e3ac6b2a5fD": { - "balance": "0", - "nonce": 1, - "root": "0x5a25afca240ed3f1756a12b178c2875f75a1ebd4e7942a550856d04b61d424b1", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000013": "13", - "0x0000000000000000000000000000000000000000000000000000000000000014": "14", - "0x0000000000000000000000000000000000000000000000000000000000000015": "15" - }, - "address": "0x196d4a4c50eb47562596429fdecb4e3ac6b2a5fd", - "key": "0x4e258aa445a0e2a8704cbc57bbe32b859a502cd6f99190162236300fabd86c4a" - }, - "0x1B6eC89d00555BeBF7DEBE884b5A1b1FB5ef79B1": { - "balance": "0", - "nonce": 1, - "root": "0x29a3676b5776327effe8a01b0b824a04133fb3944d215d371d27817c7c7d0050", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "storage": { - "0x00000000000000000000000000000000000000000000000000000000000000ce": "ce", - "0x00000000000000000000000000000000000000000000000000000000000000cf": "cf", - "0x00000000000000000000000000000000000000000000000000000000000000d0": "d0" - }, - "address": "0x1b6ec89d00555bebf7debe884b5a1b1fb5ef79b1", - "key": "0x622e662246601dd04f996289ce8b85e86db7bb15bb17f86487ec9d543ddb6f9a" - }, - "0x1E8CE8258Fb47F55Bf2C1473aCb89a10074B9D0E": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xd5daa3aec1f142e2b2059b675d676ccb42129d27d96f8e901df2dac6104b38e2", - "code": "0xf548adfdedfd2f8b2416994318306c690dadb026395430e32e9a141187933c8602d9f8353bca53bc9b195aa186ab6d98b49a9120c00257ee2c7d860c26f864ea7352bc45c8aa6995480780fe15a07c4daa795263b5e7a9d04d9ed979c93ca85e57023ef7fe58b878582140ea36f22723905ad724896eaf74090fba76c229bd2269bc8c08a6b955aec2072ca430bac7123bc3539264a736d1a23621b0f0c62f3166eeecffab615cf4c69d47d3aa51576e95b697767264fa754ea36f4e363ea19359149054a4189e9e52234a041160d0a984f6bcb43e7a9da69cfb168d147633650425d4cac564eade3739b18cff91bb2bc855f9c26bed98f6e089d895e00c3d5f", - "address": "0x1e8ce8258fb47f55bf2c1473acb89a10074b9d0e", - "key": "0xfb2ab315988de92dcf6ba848e756676265b56e4b84778a2c955fb2b3c848c51c" - }, - "0x1F12d422bFb4444EdA416C805B0eBC9C9C5219b9": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x2163e5f7425a961dedf4ab14d04cb5da552f71e6753f2ee5d0f757fa80557a72", - "code": "0x6d51b3e2fee37bb096ac27bcd2f51406f41ca898c8655c777eb566221b5c30ef0caf086fb5eddf1b4d11c4f0b807d5031fcc6c85a4bde491a90c50edc223e345203d2d2bdae77b6c59cc38f69817e60d54c7ca8eeca5cbd2727e9f9fb7a596a5ef8f912c2063a9c1079545513398425889f237200dbe31f704b550eedddec1553cb8dbdb71abce785b0d3ada500497411f9a35029bc9f0128fe99dbe40b831ed7092736705691e7fcb646542760fd0f452b1b0698662a4e52aa598cf52e0872bb29f850db3636ac0c738910696357ccf04bdcf9eecb591427ec2a19c4d0307382a9415d08c0c16e17c81d1ddd07c87b75cf5938c1315af07b6f3e822070a8512", - "address": "0x1f12d422bfb4444eda416c805b0ebc9c9c5219b9", - "key": "0x5e30d12ba0a17b9e1add523ccad77978516b91d2637cfa79061c848fd42dc002" + "codeHash": "0xb5b2354eb364d49102d246eb58335edc8ac8d96a3278e5ed4664bfcc652cd821", + "code": "0xd5794d64d075a72356722c9b36b106be1e75a5b1a18d43aeecf4b200527ff024182b14c38a1b998fe046c9dc6250ffd54c2a94a0889e1b069cd376c59eeafef21cc42237b0fb8f0a02adc3d03ce8e36f1c04cdd89283fe1c1b0481c9c7b7687facadc60d47b3ff7acda1f55244f2dd77100bd73c50fc73c02f9b2be85f5465f80c67a9b017d662d1bc9ac34b32ea15054da3fbc1fc745732ce7b22f51147ab60f564f8ac71e4f1e429c2f327374b1ff53ce2c4b40ba626852f969a70fa403fba5fa1b75531f2dde3e17219f3978fb05f66e88c2f47dbbac04ba5c54eb78a15b812265b62305fc5fb7e9c9b4551ac42738a1f9f04801ddc76097f8d952b6ae20c", + "address": "0x19ee2fd8a16b0d5348cc43634e3015f5c4ec281d", + "key": "0xf88f8f5e97f8c05caae26c7a8367f5e07f92daee1fb16cdff40ba1a250d6c521" }, "0x1F4924B14F34e24159387C0A4CdBaa32f3DDb0cF": { - "balance": "1000000000000000000000000200000000003", + "balance": "1000000000000000000000000300000000004", "nonce": 0, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", @@ -2109,116 +2041,68 @@ "key": "0x7963685967117ffb6fd019663dc9e782ebb1234a38501bffc2eb5380f8dc303b" }, "0x1F5BDe34B4afC686f136c7a3CB6EC376F7357759": { - "balance": "1000000000000000000000000100000000010", + "balance": "1000000000000000000000000200000000010", "nonce": 0, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "address": "0x1f5bde34b4afc686f136c7a3cb6ec376f7357759", "key": "0xc3791fc487a84f3731eb5a8129a7e26f357089971657813b48a821f5582514b3" }, - "0x1F94C5D92A7cDA91E46258db39cd2080934cf401": { + "0x1bE75a06c0277c0ad20d2a7B537A4E3262ae544A": { "balance": "0", "nonce": 1, - "root": "0x2ac8ab8e205b5f066caaf29772e71b8acc033fb2dd00aef81d58d5c6cf41393f", + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x721a89c9ec88bf5d831f58a8fc24ee302af110b17d80413835d06f29e56c24cb", + "code": "0x977b44b92ba69610c99ea306058ffef6449dfef2a9111a242e2487f3b67bd884e1c7dc25d93c8ca94ab03df899ffd8369f903d70f89208ea0f9216c56c311f65a7ab9585d176f7553243ab24f6ba2b1d026cba57011704693e8f7e688fc6c10272f499da03a12e0d69bedeb8af54720422e6a93707efd07a19d40b1693edd7746269a42f8721783686df7e2d53dfc3e449c24381e01837fc0db59bddaf4da17fe35f100537fc5a81611a171b65ec62698d902d6c24f0dca36213fbd791d816cad51254392213b26261c76c6dc24d6f095073d42a479d10d1abaf6cbc5679bb519651205dc817afac4f6b337402a37ee248db015896cb81056928573c24869cff", + "address": "0x1be75a06c0277c0ad20d2a7b537a4e3262ae544a", + "key": "0xc02a1a280bf5e9f8aee1a855dad87a7d58ba42d4d58909c683dd62e220cb917f" + }, + "0x20bcaA573F9D21A04b8434F31f23b146F3178cf7": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x3a53ca9ebc623f96f3c01edfc2cfea906df6afcdb46fd4cd0c5ef231dcb247b3", + "code": "0xa0154eb5d4f58d1845cc59d98da9dc0526a385100cab80e881cf68c5ddd774d6c83df05b39f04b0e32a580fb2457e5a805b04291544a17fa7d0673ae46aa593e16cf53eb5237943918e4520255055c6e4c38e4c0d88373b478ac80453df3aab44a5bde82e5995b6780e708038ec38d21cac5aa8ea437e42bbb7a345c96e77afef5e826823d1b521a059a638208df20ec7a83c69ba78f1fe2089269842362b6d9f6a2fe1e948cbfc587c2c82d46a9aef3b8bf6d2ef795f19d1a32a7aa457123ebb5875b78058b3879b3385f1925ff16e04250b3cad255a1746f02b5fd66a379ca2c0fb383035f53c87dbc233aba2b5c9852b97d153d9a9e79119bdea4a5918250", + "address": "0x20bcaa573f9d21a04b8434f31f23b146f3178cf7", + "key": "0xefe19584458047edddb6b4c43bb36ef63fb1d5b8d3c630c09a27580302790e80" + }, + "0x21171D0AfFf7169E5692bf7bd5ADb43AF0f5F59E": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0x21171d0afff7169e5692bf7bd5adb43af0f5f59e", + "key": "0x2d425481284fbb1874a2c55d81564f371543b3b8f7450e860bc5381ba47b465f" + }, + "0x2AEB07Bf550A17EB782474376C0c1b6d1164d623": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x59ea8e8394dd6ada740962707b3d7323a33209aa01c521f7633914c990dc4e72", + "code": "0x5d4702183e4406aa0103cf4e1193f621dd93a4fef034dfbf6d5fe2604aabfac75a13f6356acb2f32ad5f7b35e3b5cce60828c11d4777e62d521196ece8fb340983e3008e3af31fcc69e293b6825b3fef522aa83473e56e69122349586a735e2046df1ba032f7273adfb50869ef5a17a8fffe76f90e9f8294290a3c9b9484add5b21769473a98c1ba3e6d2bc72b8bbb799cd2c30a9cff3f1428f7037f772e03eda237ad7935dea2dae206a9f954a0b3f021aba3d29281f5d8e9d20fec92bc90bdf9909f4b035d96087c3a4a8df382d8d87641eb9e01c03c2f87643b292928b907b62e1dce1317f4e156490b590e91d0e333ceb760dac2ddef3bd251cf89fa8776", + "address": "0x2aeb07bf550a17eb782474376c0c1b6d1164d623", + "key": "0x81eb53bd3cdb01b239029a40c5362aa81a9017921981d1f188c2b7df594203c2" + }, + "0x2B0c6fDcbEc5dc0e3a89e2Dc1f4f3E8e381E200f": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0x2b0c6fdcbec5dc0e3a89e2dc1f4f3e8e381e200f", + "key": "0x92e7a2e08d0b020127e08b5d531e73506805651f6cab173d836f43566dfffe0c" + }, + "0x2BD85770Ed2Cc8d09f91a3C1b0F7197dfd8A8850": { + "balance": "0", + "nonce": 1, + "root": "0xcbf1eba0bbd55dc6bf80b04aee815e20cb66ffea5a015c3fbd8ba5df2ccae82b", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "storage": { - "0x00000000000000000000000000000000000000000000000000000000000000a2": "a2", - "0x00000000000000000000000000000000000000000000000000000000000000a3": "a3", - "0x00000000000000000000000000000000000000000000000000000000000000a4": "a4" + "0x00000000000000000000000000000000000000000000000000000000000001b6": "01b6", + "0x00000000000000000000000000000000000000000000000000000000000001b7": "01b7", + "0x00000000000000000000000000000000000000000000000000000000000001b8": "01b8" }, - "address": "0x1f94c5d92a7cda91e46258db39cd2080934cf401", - "key": "0xade3931ebf0e80c7ff1ef57f79e1a3bee133066fbc2f65c98bde9b9751c59fd5" - }, - "0x1aE59138Ad95812304b117eE7B0d502bCB885af5": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x91229856266a08d68e2ba7fbe841ea0367eee39a9abbdf7fffa2e1fca5bf530a", - "code": "0x1a3539311f056efda55cfb638b48ceb0b16c46de7fdcfeece7c16dd10edb530a980802d84c4907cfb351be0c47b17b29e497879c00ff4207f841b525e59a4adb4dfcef122f40141197bd2add22dde2be0b18caf178af0e36baf2dbaca781064eb0aef7f62d67906ac495f365239649f69c785963deec1dc59e987ee4ff2c0aac26dc59d1574bbfa08847573f46e3a6a81f6dd471c94e177fd7e9d751b032632fafdc38a2d8170640ae476d556f5391a670c7dcea12fef53e3782b397413b8073ab5c193bc1e7e460f2a67a20e95e8eb487cb5c6e73e0a81f056b2ad06bca644804c56e6a6ea052548b58611dab35b25575fbe01e39f14d213e55204b97fe495f", - "address": "0x1ae59138ad95812304b117ee7b0d502bcb885af5", - "key": "0xf164775805f47d8970d3282188009d4d7a2da1574fe97e5d7bc9836a2eed1d5b" - }, - "0x1c991868B648141eFE0a1797d2E684f0E9D85f5D": { - "balance": "0", - "nonce": 1, - "root": "0xd5b837548792630f18e5e5860cb7c2e09d50f3e0bf633031a5266dc813e51722", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "storage": { - "0x00000000000000000000000000000000000000000000000000000000000000fa": "fa", - "0x00000000000000000000000000000000000000000000000000000000000000fb": "fb", - "0x00000000000000000000000000000000000000000000000000000000000000fc": "fc" - }, - "address": "0x1c991868b648141efe0a1797d2e684f0e9d85f5d", - "key": "0xdaa5ac389919fe4309e82b1ec0173c579a91909e43606c075fffcd175d449bb1" - }, - "0x23946FCc6A6FC157F5fA71766920C05B3ca332A9": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x9b8e6ae27d3f687d8da6c6cd00910988ee2f132e69a9039495349f53e5d420d4", - "code": "0x2200b384d5b1adb897ca35499aac189a6bc95554ae7cd569cff630ab95ab2408ec2ece864d596b2df3fda60d8ff3647904c8787bbcdca061ac2c3ced7ec882414e891f8214eefddacb67949285b4d8381359bda85deba8c8d1cd531fac277446250aa56d419d6944c75ef323c37456f10c8deae91a088f5266af04395bfb6f9f1d83040a41828888b050efc081f5d66c96d76f2436e80f14429fe3ba7679228b5d30ee1cebf81682922812857932b35925ce3b0005995d8dcc5cdc3ade024209b45d823cb873a82c40322caac58ec73ecb33fe985c8d73b5edc8c5bd10a32dacbd709dd7349a1e346060645a803266120e2ad65cd1489f355739a06ccb96006a", - "address": "0x23946fcc6a6fc157f5fa71766920c05b3ca332a9", - "key": "0xfb1f3c0b3adbfacce7162c4512f5e01da2e45f783d1d098d59478ba98579a943" - }, - "0x23E7eCFEbfe3a69F17F90fE6AFF700c395C502A4": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0x23e7ecfebfe3a69f17f90fe6aff700c395c502a4", - "key": "0xed63eed77538b7d6aec65f20d6538407bb521bcc2049f5227f0ba7125f7e5246" - }, - "0x23b17315554BD2928C1f86dD526F7ee065a9607d": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x9a29a4ee31aaa09c1644e1fbb4f6daf087496185098474a6caf2128201e2ef26", - "code": "0x9e91c95f108ead30341468db9696e39ed81de6a68bc8c6702bcb66393fce6e75f7459e621ec1fc60fd62c436d4281de72cb9f48787dc9c8288a3050292b090046d00efa09a7071d855bc5fb7d93921fbf02f2c4e3992802f2a9b08050cf48ea83ba015d6b845e102ce2f76836007be82508e3543856f2a3c2ff4b56eb46d920eeaa72e3626d79eea854e214b64a34b95d0c9348f5b8df0b074d774f7dba83c65641a7e47c832ef1f4ef72e654761ca2c0b592dc5a9de41ec09261efc0afea2bed4c27e5d2ce7b7345f78d7f5ddc8b90697d63512e00b9f949b158a467d0bfffc759e22076818c4256545c2158d054d4904983321e7c2bbb6fe78c5cb62872764", - "address": "0x23b17315554bd2928c1f86dd526f7ee065a9607d", - "key": "0x12e394ad62e51261b4b95c431496e46a39055d7ada7dbf243f938b6d79054630" - }, - "0x25261A7e8395b6e798e9B411C962fcCc0Fb31E38": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xda6d4548d8504c1c6b93b3f8afa6a43ec3f393b4538817077e5c0d8a16ba37ae", - "code": "0x7789c5fe6d71025d8baaa82349a48bdecdf7d33796c5b62fb2e2709eecea43508c8f1d83c32f3a2c534b56bae7b22603ef0e0c3b7e11b1eef2bafb0da977e3dc1ced5e204c93c1fdad1d04ee5664dbf790f8db86241883cdde350ce907ad86ca1f61127137b2b334cc768fbb1f2c09bd3ffa8b4efe78fbac6f501d1ec08449daef188faeece6fe5db45dc7f5d168733c0c348bd006890ac720106e2aa22f60bc305ece2ab3243c04f78c036bbbc0c561f9d54db01bbb3dc7946b4979b6a40dbd68404147fdbb906e3359f7733cbd4345edc2b456718e75029e6a1f6ba819c54467dd4e7709cbc529012d23fcd661c8cc3327ec3cefbc12e02677a50c121eecc2", - "address": "0x25261a7e8395b6e798e9b411c962fccc0fb31e38", - "key": "0x1017b10a7cc3732d729fe1f71ced25e5b7bc73dc62ca61309a8c7e5ac0af2f72" - }, - "0x255F219878846c5893F664CFb2A35a381ec8C149": { - "balance": "0", - "nonce": 1, - "root": "0x5bec588324e6249140515272adc6b1f5b34ae0a4782db0a55a7481bbce20b6e8", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000244": "0244", - "0x0000000000000000000000000000000000000000000000000000000000000245": "0245", - "0x0000000000000000000000000000000000000000000000000000000000000246": "0246" - }, - "address": "0x255f219878846c5893f664cfb2a35a381ec8c149", - "key": "0x8adecfc09eaee180c4a23258a373d4f4c472a03eed1be91814ca315fdba5902b" - }, - "0x26e92A8D6eDBD0b9cED1dd80a920Ad0b796fCf93": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0x26e92a8d6edbd0b9ced1dd80a920ad0b796fcf93", - "key": "0xa28e6adde4090652685168a269cb1141e28b0849487175237b9b32064788c2f9" - }, - "0x2C0cd3C60f41d56ED7664dbce39630395614Bf4b": { - "balance": "0", - "nonce": 1, - "root": "0xa3e3987c498c56b398b12cf368a76f2d184dd1d77b4896f4626909e35a7536d2", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "storage": { - "0x00000000000000000000000000000000000000000000000000000000000000c3": "c3", - "0x00000000000000000000000000000000000000000000000000000000000000c4": "c4", - "0x00000000000000000000000000000000000000000000000000000000000000c5": "c5" - }, - "address": "0x2c0cd3c60f41d56ed7664dbce39630395614bf4b", - "key": "0x92d0f0954f4ec68bd32163a2bd7bc69f933c7cdbfc6f3d2457e065f841666b1c" + "address": "0x2bd85770ed2cc8d09f91a3c1b0f7197dfd8a8850", + "key": "0xabbe9e53a2f086a9c45b8e901f6e5bac26ce118257e4f60e34c74983f7aa0bbb" }, "0x2D389075BE5be9F2246Ad654cE152cF05990b209": { "balance": "1000000000000000000000000300000000006", @@ -2228,36 +2112,35 @@ "address": "0x2d389075be5be9f2246ad654ce152cf05990b209", "key": "0xa9233a729f0468c9c309c48b82934c99ba1fd18447947b3bc0621adb7a5fc643" }, - "0x2b6D216387cc86BF46FA7202C36C4f40BF1d7A22": { + "0x2E5F413Fd8d378Ed081a76e1468DAD8cbf6e9eD5": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xd0db10813ed93d8d4216b55bb44f28dbd8979334d17f96e96230067c22aa3d7d", - "code": "0x366a7b92acda364086cc991f618bf9f10b629ec0f7ae94543f96b691b69ec9922cc30221e0553428287371236269b4e2f6f11f95f33fb976fdb79b586bb6c342c0c96d13f150a4b457c3bd96e92c2a5ab695d3246c81b0c07a0503c31ecba4728bd72d705e704e96ab1fa5baf1ac8053f4ec008dca8cf0376ca60a5648fa9532aaef4f4d920c99352d192889a8613287b33396c3d6a14178bd3f0455af509e256c40122c67bd2f0cbd1c3fa8ee6656e600ea58ee13b4077687b98c5c145bddbefd91b674668e771a29edc7bd49406822c49336f642d316b2b9ba0c0ff145fb18c23152f459c8033d1c6b84df917f2b2519e4be6bb34595e1cf96f7c07f456725", - "address": "0x2b6d216387cc86bf46fa7202c36c4f40bf1d7a22", - "key": "0x3e442de3aafac6a255389001775f311d0fead71621ec597e7ea7f91bcba73e49" + "codeHash": "0x6cab722372e634ef5dca9b4dc1454cfeb4e9eb9269eb03d6824b7c997129776b", + "code": "0x7786f24ec8e68c1f537753be90a834aeb9797aa2ade11dc9f54973d24a879c0e2e000f2864695c298e3b798ebf646f507bc67e534235217f247e8aedeb44a286903029b2ccf2817560769df843ccef3b958197f563f97bbded0c9d6af426a1238a6b747e4193754f5887d456542feeee62a909f5cc32e46553fc5e84632ffaaf995dd2136839e505810de8baef08564621a4fa31c642ea16714d8c051234d3b1bb72a1128595dbb042fb7a341fba8d1012e8d5a83228532d7db5275249ae2c733e2405bc8eddcc2dec697d454ddca37a2f157a1cf34a6377970583fce6b49b6a1c03e9112a7ce53c99cca1e170b854d8dc90099ea369962ab98f8cde6c92fb57", + "address": "0x2e5f413fd8d378ed081a76e1468dad8cbf6e9ed5", + "key": "0xe69f40f00148bf0d4dfa28b3f3f5a0297790555eca01a00e49517c6645096a6c" }, - "0x2b8E14ACde4DC8f4dd1A6FC249a48323431c69DF": { + "0x2EB6dB4E06119Ab31A3aCf4F406CCBaA85E39C66": { "balance": "0", "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x9f9a33401f113dceb7f8594ad6699ba7ef06665b11fe19c87f37e1c58d2eccc6", - "code": "0x66f4851715b29678b0cca267bfde816a0838d4b72ddc17590aadfd30fc1f1d13a6d5a907f2fd275a22b20a64111d18d562bc2b61aa65b44f5c83c1d6aac7d2e45db2aa293c68d8b2d991211b8aae5b6920d37ca709b36adc4d30eab3b5df163fef8374c201f52e9cadf0358fa9fe81d3b5dc6cfd55611ff392a0f6af5d359a1bff5cc1e3a6fb7e9faa08d225cdd564eed6d3c066f453d24f62b227f5b7a98674b0e5ed5015336e10965b0014527cad85307e5d111ca7afc3b5a60ce0021cc0a88dc3ccc90a5a484fa2a729ed5b473614aaeab270aa88d72534a542e99667eddc42fb786c069f6c2379a23a093b7909d15b477e8db52dacfeaae781f4c468708a", - "address": "0x2b8e14acde4dc8f4dd1a6fc249a48323431c69df", - "key": "0x448717f258267a130bd10b361c293b918047608106b21f4bdaff520b90586d4e" - }, - "0x2be6F9Ec5d4a0E79953570f06554FbFf9473B11E": { - "balance": "0", - "nonce": 1, - "root": "0x9e2e9c13c28b856f12884ebd17a330603ac2294d472aa7b0caab80761af0ae9d", + "root": "0x1d5b0045e4bbf5ac05684b7f97ad373b57bfa9fc07e8c214c28624f7ce9a47a5", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000076": "76", - "0x0000000000000000000000000000000000000000000000000000000000000077": "77", - "0x0000000000000000000000000000000000000000000000000000000000000078": "78" + "0x000000000000000000000000000000000000000000000000000000000000002a": "2a", + "0x000000000000000000000000000000000000000000000000000000000000002b": "2b", + "0x000000000000000000000000000000000000000000000000000000000000002c": "2c" }, - "address": "0x2be6f9ec5d4a0e79953570f06554fbff9473b11e", - "key": "0xc5a247c452045b83598d9bdb0bfc185eadffbc577e2f8bbafaa5339d2adac545" + "address": "0x2eb6db4e06119ab31a3acf4f406ccbaa85e39c66", + "key": "0xaeaf19d38b69be4fb41cc89e4888708daa6b9b1c3f519fa28fe9a0da70cd8697" + }, + "0x2Eba46D62F0C7DFCdc435769A2d5Bc73FC311ee9": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0x2eba46d62f0c7dfcdc435769a2d5bc73fc311ee9", + "key": "0xf132caa2fde1cb1d7854da7631c474d928ae153b5ebedf16d262d5bd28a4ab48" }, "0x2c1287779024c3a2F0924b54816D79b7e378907d": { "balance": "0", @@ -2268,98 +2151,91 @@ "address": "0x2c1287779024c3a2f0924b54816d79b7e378907d", "key": "0x09d6e6745d272389182a510994e2b54d14b731fac96b9c9ef434bc1924315371" }, - "0x2fc7B26C1FD501C57E57dB3E876Dc6Ae7AF6979B": { + "0x2f30E977B0A8A60747789ee0F6B3cdC9C041FDEf": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0x2fc7b26c1fd501c57e57db3e876dc6ae7af6979b", - "key": "0xb9cddc73dfdacd009e55f27bdfd1cd37eef022ded5ce686ab0ffe890e6bf311e" + "address": "0x2f30e977b0a8a60747789ee0f6b3cdc9c041fdef", + "key": "0x420a83d9891f19593cdda9b31bb3b450e960fa87042dd428a7fa5ee69db02c75" }, - "0x33aFD8244c9C1a37F5bDDb3254Cd08779a196458": { + "0x32F1C89Cc046227EcD93C2FCe5d3eC91db833c68": { "balance": "0", "nonce": 1, - "root": "0x18bb17163a640c960d76901ccac104f3b60f46c150c29584868b14229b97966f", + "root": "0xd8d478365c2dd43220eab798a1fdf01a2e41ed0c4b7ce1a6a649dc4b12f97259", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "storage": { - "0x00000000000000000000000000000000000000000000000000000000000001b5": "01b5", - "0x00000000000000000000000000000000000000000000000000000000000001b6": "01b6", - "0x00000000000000000000000000000000000000000000000000000000000001b7": "01b7" + "0x000000000000000000000000000000000000000000000000000000000000001f": "1f", + "0x0000000000000000000000000000000000000000000000000000000000000020": "20", + "0x0000000000000000000000000000000000000000000000000000000000000021": "21" }, - "address": "0x33afd8244c9c1a37f5bddb3254cd08779a196458", - "key": "0x210ce6d692a21d75de3764b6c0356c63a51550ebec2c01f56c154c24b1cf8888" + "address": "0x32f1c89cc046227ecd93c2fce5d3ec91db833c68", + "key": "0x97d6688cffcba05e22d6940fd07a8b4e93670e2d8e0f8680b9a97865474e803f" }, - "0x36fedBB5CdA6a9924e5da9Ce388b3418E0cFae06": { + "0x32c417B98C3d9Bdd37550c0070310526347B4648": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0x36fedbb5cda6a9924e5da9ce388b3418e0cfae06", - "key": "0xd9cf358f42d8836e892ab02529c9659d6fae5ea088bd936be43e28d85af28fbe" + "codeHash": "0xad3bcddc933488cbc5a30cf7295a338d57ecdbce88acef961e28fc0267fafee4", + "code": "0xb84e4298f3a6292774b798b43a202ce92291460f19fe80ed2d2d7e8e4674dcba31ff9da46623ded696608610c3749320b1cb2c2dfd644b1139da5367a8e616cf82fb8bdd0a53542a1f59046c16f7a1350c43d22db36425bb53f551e7c6a091814ba0d371c59a4c8176901cb7799ecdd8b41b974be3a1349b5d0a9ff9aaa230d9547911337f50119fe7598b1be3fa84d3d0506ffe5c730db17c43bc74040bbfce348e8fe0716b12afdd2e814ae0b8b1bb9b5c7a197ef418c73b8bdd93bee14de5c695a062ea1c0f75fd266ccc34c407f7d5229534fc96b1932c122008903fa35369a4526ee6c6fed706e20afa2cce030b28dbcbab5e4e2d1918c6e71839728400", + "address": "0x32c417b98c3d9bdd37550c0070310526347b4648", + "key": "0x80cd4a7b601d4ba0cb09e527a246c2b5dd25b6dbf862ac4e87c6b189bfce82d7" }, - "0x38D0Bd409aBe8d78F9F0E0a03671e44e81c41C27": { + "0x3632D1763078069cA77B90E27061147a3b17Ddc3": { "balance": "0", "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0x38d0bd409abe8d78f9f0e0a03671e44e81c41c27", - "key": "0xb58e67c536550fdf7140c8333ca62128df469a7270b16d528bc778909e0ac9a5" - }, - "0x3A2C11526F95C05A5de3614E9c40666798C5F9b9": { - "balance": "0", - "nonce": 1, - "root": "0x838d9383f5c87eea967abf79c12ce654a2472b04b35c0dacda9d7d4c992e3993", + "root": "0x34da204f60f9a40f3829dd9821b33acae3c08e6d627791dcaa05d10a60a34180", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000168": "0168", - "0x0000000000000000000000000000000000000000000000000000000000000169": "0169", - "0x000000000000000000000000000000000000000000000000000000000000016a": "016a" + "0x000000000000000000000000000000000000000000000000000000000000006c": "6c", + "0x000000000000000000000000000000000000000000000000000000000000006d": "6d", + "0x000000000000000000000000000000000000000000000000000000000000006e": "6e" }, - "address": "0x3a2c11526f95c05a5de3614e9c40666798c5f9b9", - "key": "0xec873ed51fb0822893b43c0fd08bd25d1c226a97f7ba073cd03b8fdbe380ed19" - }, - "0x3C48a562A0361236F28a17AAC65B9130a0316B71": { - "balance": "0", - "nonce": 1, - "root": "0xd8419536b78c13ef996838648ee38f89388fe1ffdca0b92bbbd78187a54c3f49", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000034": "34", - "0x0000000000000000000000000000000000000000000000000000000000000035": "35", - "0x0000000000000000000000000000000000000000000000000000000000000036": "36" - }, - "address": "0x3c48a562a0361236f28a17aac65b9130a0316b71", - "key": "0x8ff8a4884137e983c0298ad24228193292b5f523869dc16eeb916cae8b09239c" - }, - "0x3Ee253436Fc50e5a136eE01489a318afe2bbD572": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0x3ee253436fc50e5a136ee01489a318afe2bbd572", - "key": "0xaf7c37d08a73483eff9ef5054477fb5d836a184aa07c3edb4409b9eb22dd56ca" - }, - "0x3aDfbF5A4B4493AB10b6d695E5a6f7f91F768098": { - "balance": "0", - "nonce": 1, - "root": "0x98d78678d41a3fbfda98fdf2709727e38bb15bf11287e7204299ef5a125acf8f", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "storage": { - "0x000000000000000000000000000000000000000000000000000000000000022e": "022e", - "0x000000000000000000000000000000000000000000000000000000000000022f": "022f", - "0x0000000000000000000000000000000000000000000000000000000000000230": "0230" - }, - "address": "0x3adfbf5a4b4493ab10b6d695e5a6f7f91f768098", - "key": "0x83d7634225a59c664f323c88bcfaff1cf73421ed036ccd2dbe44571312128db7" + "address": "0x3632d1763078069ca77b90e27061147a3b17ddc3", + "key": "0x0463e52cda557221b0b66bd7285b043071df4c2ab146260f4e010970f3a0cccf" }, "0x3aE75c08b4c907EB63a8960c45B86E1e9ab6123c": { - "balance": "1000000000000000000000000100000000012", + "balance": "1000000000000000000000000400000000011", "nonce": 0, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "address": "0x3ae75c08b4c907eb63a8960c45b86e1e9ab6123c", "key": "0x878040f46b1b4a065e6b82abd35421eb69eededc0c9598b82e3587ae47c8a651" }, + "0x3c204CcddfEBaE334988367B5cf372387dC49EBd": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0x3c204ccddfebae334988367b5cf372387dc49ebd", + "key": "0x5ec55391e89ac4c3cf9e61801cd13609e8757ab6ed08687237b789f666ea781b" + }, + "0x3fBa9AE304c21d19f50c23dB133073f4f9665FC1": { + "balance": "0", + "nonce": 1, + "root": "0xecba188c60d6fd06bba6dfad2fc6162c590d588ec0db0953b033ece234571816", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000040": "40", + "0x0000000000000000000000000000000000000000000000000000000000000041": "41", + "0x0000000000000000000000000000000000000000000000000000000000000042": "42" + }, + "address": "0x3fba9ae304c21d19f50c23db133073f4f9665fc1", + "key": "0x0b564e4a0203cbcec8301709a7449e2e7371910778df64c89f48507390f2d129" + }, + "0x402F57de890877dEf439A753FCc0c37ac7808eF5": { + "balance": "0", + "nonce": 1, + "root": "0x1255f3a2840f807a7966373c9961a98cb3257bcd1b5932ed04b5708ddb80f81a", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000106": "0106", + "0x0000000000000000000000000000000000000000000000000000000000000107": "0107", + "0x0000000000000000000000000000000000000000000000000000000000000108": "0108" + }, + "address": "0x402f57de890877def439a753fcc0c37ac7808ef5", + "key": "0x5c20f6ee05edbb60beeab752d87412b2f6e12c8feefa2079e6bd989f814ed4da" + }, "0x4055CAe5c7d838cda10D40f9d07106C7f5f3be1c": { "balance": "0", "nonce": 1, @@ -2373,731 +2249,809 @@ "address": "0x4055cae5c7d838cda10d40f9d07106c7f5f3be1c", "key": "0x6b9ff41fb13fc66c4e1c4f85d59c52608698715472b7cce609bdbf75976a438b" }, - "0x417fE11f58B6A2d089826B60722fBeD1D2Db96dD": { + "0x410EaCE40803A705AdF026fE52367EAfb8845639": { "balance": "0", "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x35e6505af3b8e9a18eefffd4dafa37f401469b1932fa2011ce72a78ea72721ab", - "code": "0x36156009575f355f555b305f525f5460205260405ff3", - "address": "0x417fe11f58b6a2d089826b60722fbed1d2db96dd", - "key": "0xd5e252ab2fba10107258010f154445cf7dffc42b7d8c5476de9a7adb533d73f1" - }, - "0x426Fcdc383c8bEcb38926EC0569Ec4a810105faB": { - "balance": "0", - "nonce": 1, - "root": "0x42e40009dbade0eeca64fbd7faef8c68145ca05516d238892f9caa271801f955", + "root": "0x2bfb9362eb6de5d4265fd2d19fcc52c7c8355e3fa62f22281261019a7d2afe43", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000173": "0173", - "0x0000000000000000000000000000000000000000000000000000000000000174": "0174", - "0x0000000000000000000000000000000000000000000000000000000000000175": "0175" + "0x00000000000000000000000000000000000000000000000000000000000000b9": "b9", + "0x00000000000000000000000000000000000000000000000000000000000000ba": "ba", + "0x00000000000000000000000000000000000000000000000000000000000000bb": "bb" }, - "address": "0x426fcdc383c8becb38926ec0569ec4a810105fab", - "key": "0x6bd9fb206b22c76b4f9630248940855b842c684db89adff0eb9371846ea625a9" + "address": "0x410eace40803a705adf026fe52367eafb8845639", + "key": "0xa54c01fadcbd4480f0ed0306c41dd4a1b517d5ba114bf95d6ee8ceb24ccfa65e" }, "0x4340Ee1b812ACB40a1eb561C019c327b243b92Df": { - "balance": "1000000000000000000000000300000000003", + "balance": "1000000000000000000000000400000000005", "nonce": 0, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "address": "0x4340ee1b812acb40a1eb561c019c327b243b92df", "key": "0xa13bfef92e05edee891599aa5e447ff2baa1708d9a6473a04ef66ab94f2a11e4" }, - "0x4392115B81B6B7CbFf42Cd14752B9e565f316A17": { + "0x44268f2fE37A01cbA6aC0FAff6c0D63a3c0FC006": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x9682130add2b4c6483edd1e2b4d49edd6fff4a990ccc237ff9f7edd0e7596926", + "code": "0x2c0b24745969ac267788bc13fed108253ed7710a84a4b5e0cb2637381569244de7a6c0da92676f1784fd425fc094854738fb34a8458fd48f427687acdcc14921b7251051db230d60ead6c5551fc23295d0b9f4a9b6b9d4516bb5a773a0aad102a3960dd7c34552418c18a3cd494f26fc721dc4f6372c2549ebddad6ee6c5cc040678b87d94b1149e8ff69033e23a03ed66c531ebd797403d371190f2009c619a96856d25f403bd90d02b952bf07bdb551710d34ec8a0d5c1314444b005b31208a99fd01747d314b3be7b8df9ff0d2939e002725deb6fb2b0f931ca7381b439ce45ca0c9c6221a50250c9b83bee6fb70454afe9efbc647a846f4fc1ee08f144ab", + "address": "0x44268f2fe37a01cba6ac0faff6c0d63a3c0fc006", + "key": "0x0b0fccd4d9dac0411a14b4150944c6d57b07590776e430592fa3d1800d7abb3b" + }, + "0x44c8303F391415Ea821c507eC89e054EcDe2eA64": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0x4392115b81b6b7cbff42cd14752b9e565f316a17", - "key": "0x22a1c10e01e8ea21a3cb7e91945d881902b50c6adf4c0ea05d84031843e2926d" + "address": "0x44c8303f391415ea821c507ec89e054ecde2ea64", + "key": "0x02e6b8771694fc881303b1a0ecbd426c4a12c0467d95b739e5eaee0fbdbd25ac" }, - "0x452b949F5F7A7D6AC67548ec72e0094da846ea4b": { + "0x452705f08c621987B14D5F729cA81829041f6373": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x59e905c6f4910756e1c3d7a42a7f0112d5bbfbffc659d314844a4acc0887b80b", - "code": "0xd999b6a905cb253021254361eb51ac2428d229184f9dd8342bc05b348b9500fb36ade7bb9eee45f234519bd60a6fcadd441f23ab0372b0e186bc601b6ef1620fb65a1d54c4d5bc403446d3ef51b4c9b82eef10b13a26d6879a440e0632bbcc7cbb77812a8fa7fa6a572953fea9126358f3aec9cde938b0c1788d783c38ffd2cb5223396cf9abeb9b7dc4cfbacea4c512b02b65d83cdfbd6fd2dce335ed44bc52e9273958f1f266f4f9bc99c85e71ee2d69a5da24fcfd4d7f1afcc533bd57dec460ac682b9a49392840ac8f0ca7e6ca743398112599febf8b36c5b1bc3b8722e72fd80a925745c8e06fa027189d551200638c1edbf79c0b3fef833bbdd2036cad", - "address": "0x452b949f5f7a7d6ac67548ec72e0094da846ea4b", - "key": "0x2ef46ebd2073cecde499c2e8df028ad79a26d57bfaa812c4c6f7eb4c9617b913" + "codeHash": "0x8ca1f6492dfb54978c17e03bef3e8fdfd09d56eee360359d5a9e8ba640632761", + "code": "0xd97cbaa9a69d46aa3f57910da3a2981ddacb51cc9a918902a0ba29b879ca9213c0ae62c552dde5f7aa5d21eeff0a2cd0cc43221752feb6b89d384bbedef2ac5d752e6936a8cd4ef88d669a3b2f3f24ded135add737a4aaf9f0848bb5983792aab9c7405fdb60827a063770d15a9163cf3257eafb54d63ebc3245e8170763b9ae5de16b835935eb4be6c6f0702e7e3a97e730aa0eb58f22fdb243237a2a9cb7895b5a621cd8595b64a4441e50a02e05b3a232b6f460cb54ec7584348d3464c2f212b3fb03d27bd105ac57c8dbf000d94f61d3ffe73ff0c0035c97df04ce6bddce938d10d27e2ae4041659af0f20bfeb8ac07249c34c399e34ee50cc2270df04bf", + "address": "0x452705f08c621987b14d5f729ca81829041f6373", + "key": "0xac7183ebb421005a660509b070d3d47fc4e134cb7379c31dc35dc03ebd02e1cf" }, - "0x46BEEa1D87bA969470C758f1540e78e8C2A15C89": { + "0x476c7A42dB76a2fc8e0E45a50030a91842177118": { "balance": "0", "nonce": 1, - "root": "0x42839850cb45ac89303f87b0f4163a6f349a021dfce0397819b4008210e70556", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "storage": { - "0x00000000000000000000000000000000000000000000000000000000000000e4": "e4", - "0x00000000000000000000000000000000000000000000000000000000000000e5": "e5", - "0x00000000000000000000000000000000000000000000000000000000000000e6": "e6" - }, - "address": "0x46beea1d87ba969470c758f1540e78e8c2a15c89", - "key": "0xae3a22c9b1610c3a9f8e0f71e2f5daa824be2a1e2de6b40da984e4e8bdb2df8d" + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x18cbd4dc359ae718dbdfdf40c3f64c3463893c62fe40b6e89648ab72ef3f4ce9", + "code": "0x5329d05362821f10195d873870ba7cafb9f4abd3c4b5cf094b6c3d0a9ce4181f75acecabf7c35075c5576ba3235a46de11915fec0a9fa650e2db767d1a7ec8136eb24d64209da9c47c52c495c2b18588f6910a4ce87f04f0f63a6a14d47b188257c0d0964870c24387de1cb96a1c0d1e031544394130654a48994b8a35b62a814716bacb694fc6525934a5003bf6962d21f5aa4897c0bb8c43e69a8e553c203d4a973a93a267550d9956907453eabea7e7e17cfe62c882db8772cb269a2cafeaabf21e34114eecce47a9ab5253b604ce8186e8c7410684d5f619466fa0d4051b81d59e8f63389d4228fc097230044c4967bce9312cf2786a42f1c1fceb6693bc", + "address": "0x476c7a42db76a2fc8e0e45a50030a91842177118", + "key": "0x1fb5af58bde5a42ef7dac764d42d1bff81c30fee0b280ab7e8c28368d311eb4d" }, - "0x46bFe8155134dcD7bB9baDEf1B2EF25AE86435C8": { + "0x4956238b9fb9C655c12478E219B3c1413fb2252A": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0x46bfe8155134dcd7bb9badef1b2ef25ae86435c8", - "key": "0x59f49281260efa7511a50c95aebc610a48a19aeaa54f041e1373b81b698989d3" + "address": "0x4956238b9fb9c655c12478e219b3c1413fb2252a", + "key": "0x1f62f5e3469ffc96ded1141a64cda17ece2a9730c458417d4b6a6d84784ffdbf" }, - "0x47e37FB6Ade990175D502C02DA3Dc3607b9D0080": { + "0x4DC5e971f8B11aCe4F21D40B0EdE74a07940F356": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x30cddb925e3f4db7ec9bb0259a1726f79627a71b97dfdbf8827cce2ff258fc64", - "code": "0xd6866844f1a8c30f9968e80fa46697288da4b41c675b67a51469639e5afc24352ad561dc52a39ba65c35d8ffc50780b2be420e6593582aa43068d94afe08aa0ba82effcee24f9d07d1b8ac005bd5c8627d3d8c14e389a86d3b62ee3d5f63ab8910f3a17841c6d818ccbb16e4596978865bb77ba586b583c9de26b166e55de864aaded8c7cb956d25d285cba29213c176ec5fc32f3996cb04804f6c9dc496ea728ec4d803bc2cd2bec8ceaf2e5a0dec14ca32ca78fa74656eb25549e85d5772b1a241f58d1f790a3686289a7a511e6884e534f73cfe21a83706dadf334c70edd8a42755a2e6766ad8a3c8e0dc6925c5b384a166afae805bfb4a3c3233012e5345", - "address": "0x47e37fb6ade990175d502c02da3dc3607b9d0080", - "key": "0x7842c57cd7a74b4a6b925c5db7c5953f7c65969fedc3f81c087d6ddf9322e6de" + "codeHash": "0x35e6505af3b8e9a18eefffd4dafa37f401469b1932fa2011ce72a78ea72721ab", + "code": "0x36156009575f355f555b305f525f5460205260405ff3", + "address": "0x4dc5e971f8b11ace4f21d40b0ede74a07940f356", + "key": "0x010c21d7a511db44071d870baf13ba54cbfc4937cae61371a71bcd5767e92822" }, - "0x4816Ce9Dd68c07aB1e12b5dDC4dBEF38792751C5": { + "0x4FFFb6FbD0372228CB5E4D1f033a29f30CB668C8": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x68fe999031d902f2cc91d087a2598dbc4461ac613484a5e190363612bbb7b26a", - "code": "0xfcb16150feea765524e9631cb7d1c8fad9ef75bffc2b9555ecc778186e5f140839772aaac033ecb199d13e70c3b4f8460b29cb5c3706d73d2ca45ca99b4ca34eff4638b33a6cbf8dc1ce4956e292e68da624d971bbf286cb7b35f308cea1c92b25449fa2e7137906e514f13986232d0f39f369be718e81f160ca187154669ae03a9dbf973d57393fa007fb8bd8b707e68131e5350075a7173b126035e7d5ef0800865105d845ec42a1bb319d16dde04301a355a4a41c6bd516f7937fbef9e4a44afe6e90eec383b191ec32dadb5b4f777a12a1e05ead60984ca62aa5eb8c24a5cf02837130190a95dcc836111e3f8751322ffcf187e84483660b9878a189eb2f", - "address": "0x4816ce9dd68c07ab1e12b5ddc4dbef38792751c5", - "key": "0x93843d6fa1fe5709a3035573f61cc06832f0377544d16d3a0725e78a0fa0267c" - }, - "0x49790702079905E7fF97976DB38b586cbC8d8f8F": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x9231a45606b88ef38e96170f698ef8b8598e49b17187c2e70bc225e6a310cc36", - "code": "0xe5f0063c1029cda3916753b401644c6cf5a2638073f3d047231d47d090ece5034da2fdba370917407bf27824b5e855154d59c9cf9fb85539d72027a97766a6847cddfe6ee35b633c2515d8bb92b0535385c25ce39e902fe4b910ed87a58a3b60cd3081b24d2bafaebfca188b94ec88c4e89cff1900493426655481a8976b4844bcc8f9a3b8acb6eaeffd4381f3d6cf8b3246ec37986171ade75dabece51a6f930482edbcb3ac47f314e74e8a59cbb23c7d36fd54f30d440cd1e2368bac348c0234d70136299f76a744ea8afda8ebddfe1632bb03a70f19f9a17b6d3d3ba5575326dae0c1fa21b43457f9f70b55c25fa5dbad768871d3a55b8d7fdbbe10bdd96f", - "address": "0x49790702079905e7ff97976db38b586cbc8d8f8f", - "key": "0x13fb7f6b6fcbfc3892b99fb37dfd04ecf3c8d56f2d14add9517b76ea9555c1a3" - }, - "0x4A5F072863f868E00D0039807EE1d00F783335A0": { - "balance": "0", - "nonce": 1, - "root": "0x4ba055b3d6ea2c0c46b8cb5ee08f6999487ff7d49e3e4fe566ae049608f647aa", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "storage": { - "0x00000000000000000000000000000000000000000000000000000000000001aa": "01aa", - "0x00000000000000000000000000000000000000000000000000000000000001ab": "01ab", - "0x00000000000000000000000000000000000000000000000000000000000001ac": "01ac" - }, - "address": "0x4a5f072863f868e00d0039807ee1d00f783335a0", - "key": "0x8fa1ad571a8b9c6e679630b6e0d38d678311338dc0362f9303d10585aaf26d88" - }, - "0x4BE1C90eB0389A67A16a0d3027AFbE68eB26Fa40": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x1cb937eefd555a5cd91fcc756cc135b04866df6c4e79b7fadf8ee10c0e8c45a3", - "code": "0x6bf91e8d24ef545af6a807b0be29a4dd23c0aa47cf86b2cc206ca5ea23e055b2508079f55449251bb3bbdddb22a48768402fe704ba650632035ff2d1f076fe8ed4dd338702652a43f9ac2b2bb0a6113f819db6a79f2161642d6d00325b6004b409c221adb84d5771ff4acef6600bf4bcaae01c6e3b391a7a61d09dd98b033b4d5a720867e9fea2afb6fbd35e6fcef36c6937fcecdcc9d43dcf109be0eaf9b0f76f25c0a5b9213781766d43fd87d9b3c49063e227d41ca646f0041bc234e3f0b821cc2999d14cb884f78fd8d378149fefb96229f402ad786759cb00743d06a86d4128452ee0fadc2e40ee2c2df6066f44872006f24784df32eee9df0d59afcb65", - "address": "0x4be1c90eb0389a67a16a0d3027afbe68eb26fa40", - "key": "0xccf7b06a67d8943c3e6f1af42977144fdcd4e35c5935804dccfab975d22fafbb" - }, - "0x4Ba8273797F206A13B4d13239A9C7692951Ba5Dd": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x6bd773abf6bc040838521c9de345cfedbce33617c4c7dc7e28ff79ee67576911", - "code": "0x7c263fa0a5ccb147804e1651fd02a4a91952936ded9df2b9563f58d3237deb6a2d4d9a6ec39bf84ae0d7d0d9e45117cf3fa3d0fbb6e82c52a370dde3249feff83cde3efd24a4795570409a9e1b6dbf5422dfd717e5210b527266f77c827cdf45d903a9ee0bc20272238d57d8e5255e7e6042b6f02f15379507de7f4fd2d73e2efb5e2c639adf6f19556e762eea9953bf8c1f92c6a39651186429f581ab8068491845cf6ae7e4ea2bf7813e2b8bc2c114d32bd93817b2f113543c4e0ebc1f38d29c098d85f6b83561069bae1c5511a0bbd59215ff2718b423e828420534b07ce255f7fb2960e0b7d7b8eaaaeb07b847a0fcd209d4e050e30df0ea578f57d3dabd", - "address": "0x4ba8273797f206a13b4d13239a9c7692951ba5dd", - "key": "0x48c2282032e9f2a065de95c075888d04a8dede9499b3c4837179b81d6992c572" - }, - "0x4FdE47c424dddFb38606FEdaE5b6522D8aC6C3e3": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x314204915e2b98401a3ade8178f328eb28e28be295588c447b09b5ac4a782140", - "code": "0x825cb36b0f2510a04cf6a63d38fd27bab6d05658e3c7b75a8e0bc0433c0ad1d83254a08c6b1f2452e29dd01c1d0c85218d57ed34adaa4d9e3b5080f944b9bd85a0b82392ca930f909da3e8f1e1b75001281d70a8e3841b3b4dbad931d5554bd4fbca97ca5841cc7bc1e64c05a3e88ed0241af42ee1c0e65d806d2bfb6bb7fcde939a97a2cdf42f5b2accc7a97b393a7e41066fe584741a52b411280ec3e57603acafcf2c60bf92bccb8c65f5ccffb377b9ab5ab1e8283e2807c12a0c2ffc1ebeb63423a192f69a0ae0d422d5ecafd6a0773a3869d94cfcc860a907e75f293a84a569f999e0f44f33e77ec9059a51b9940e65c0f955f48a7dfe61f7c752a08a8e", - "address": "0x4fde47c424dddfb38606fedae5b6522d8ac6c3e3", - "key": "0xfb620e9421928a795a331d223b11ab476c45372f2c7c3dffc9b13f0e1812b05c" + "address": "0x4fffb6fbd0372228cb5e4d1f033a29f30cb668c8", + "key": "0xf19ee923ed66b7b9264c2644aa20e5268a251b4914ca81b1dffee96ecb074cb1" }, "0x4a0f1452281bCec5bd90c3dce6162a5995bfe9df": { - "balance": "1000000000000000000000000200000000010", + "balance": "1000000000000000000000000100000000008", "nonce": 0, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "address": "0x4a0f1452281bcec5bd90c3dce6162a5995bfe9df", "key": "0x5c1d92594d6377fe6423257781b382f94dffcde4fadbf571aa328f6eb18f8fcd" }, - "0x4bA91E785d2361ddB198Bcd71D6038305021A9b8": { + "0x4ad186EC10047a207268c921FE2dD72A47747A73": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xd65f73004752376a8f043ec68c2c964e98926865f14775678b2aa84947a74e7b", - "code": "0x84420f67222b5641972786145b747b9f6b269166fdbd701129dc55eaa77148fe96259bc7ece823714bb3a8cdbaf7f384e05c267f2e16021d51fba05ac06151898b94fcf86dae9dd6026b2b824fa932e75c4b81a1e20209dc376bd215d0be1a551346e0df37ec385cdcfef5b73b13f4fa1b55be0c86f81fb5b3701ef64fc4df00f5349d815f3ca9782afe723f3eacee30c3464fc05e12638977843bb2183a16ade78ea91a221fb67f10aba14ba22dc39f780130b5cf7d2295f57a7414e295968ba005de1f4b235134f6a66019013c8498d7fe5d9c4a258bb57fe1485c0d4f3e3abd13a6863b607a386edab49cda39c0a4d9199a0f276cecc8aaa8f8c5a83f8170", - "address": "0x4ba91e785d2361ddb198bcd71d6038305021a9b8", - "key": "0x99ce1680f73f2adfa8e6bed135baa3360e3d17f185521918f9341fc236526321" + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0x4ad186ec10047a207268c921fe2dd72a47747a73", + "key": "0xa4f5c77c9bb083c10bb92b2824a1bee39bba3df29e8923cdec19e7c4804768c2" }, "0x4ddE844b71bcdf95512Fb4Dc94e84FB67b512eD8": { - "balance": "1000000000000000000000000000000000011", + "balance": "1000000000000000000000000300000000005", "nonce": 0, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "address": "0x4dde844b71bcdf95512fb4dc94e84fb67b512ed8", "key": "0x5602444769b5fd1ddfca48e3c38f2ecad326fe2433f22b90f6566a38496bd426" }, - "0x514772fb7F9ED5E54Ea9fdC34aA4dfC7bE594494": { + "0x4f04694790aFe884d18dD822B979EC2C4aF9b3BB": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x899281cb5d4cbae8408193bbbaa6701ab3d6dc4c07df2c4212f3f64b31f00416", - "code": "0x6654c25418c9c9cdb53e9c7e15d751e46e03faf5fe299ca4ef6817467fb3bbbb02f99646d718504e95233737033d5f11cacb283e1a9b2d1ad1d2dcef08c6a40afbe158bb61721b4374c6cbf06c87d78138667de83e1f69f30893bb437dff0373ddcda9846e422308a606a70526455845f80d0b22327f98d8eaafcc7c9b60f26b3d112fe2cfc19c13b28ff9f53ecf385f288fca3c9a800e2826903f86442b3c692e2d51fab4d9c1610962d39452e3dbc097fb8114b50951fac0449fa7df26914402f56c3256756e82795f0244ca0a1b4c6ee21854c0a86342ad6bb8f8a2eb8a4067bc00cb24423cdb75e37549e0e845bf4e9d27038e3fbbeb29e8e99a1aa5c461", - "address": "0x514772fb7f9ed5e54ea9fdc34aa4dfc7be594494", - "key": "0xf02f9c16ca8e4ca4daf37afe833d6f9b50b934fcb50954792900ce943d6b5fc8" + "codeHash": "0x27222c12233093361570e05aefa71218f7dbc80fed9fcd3e5e354c03ca17de57", + "code": "0xd976efa78ad29ed9a36b7b646a8316d94e2c0992fc889454e231f704190e7a66ba83dad61dd09c4add2a92c161b549d6c2b3eb3bec381c11b2bb2115ce510dc42429aa244130f07134860db48fc78040f9f98eede7613d21acc0b07977d62e0b559614b4d580ed63d8a55cd6b8faddba8339f014c3d1f205f17c8d91908d9837bcd24d8c047e5063867d3e8b2ed6abca2a71b23ce541fb0a23b900d8552c1f0f363d3eca645461a89868e2d177d079dfa222f93ac92576c6a53e4dda614a7188c0220d7114abf7ccce953eee6e1de8cad09c9ecf565e0deb6789b009431ce7760cb142a4b2e6afdc2587853f87ce63d7e7240df143c620b87bc6ee166d70c5b8", + "address": "0x4f04694790afe884d18dd822b979ec2c4af9b3bb", + "key": "0x886873063fad8b6ba257121f5b9972a94b3edda692659880083b9bc85c75a929" }, - "0x5259FD366E381590eD3d01cF2181726498eFdaA2": { + "0x4f85d16FF1523308530cDB76384f9eD09a143470": { "balance": "0", "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0x5259fd366e381590ed3d01cf2181726498efdaa2", - "key": "0xb4ac940399ad74961d86385549af09654ff2fd37b19860ac2197cf0ede38fcbc" - }, - "0x52859c77dc11a2983F1eD3F9284f215c94FF354C": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x38ec67839d530b6a89731615d891c92067632d4439c68e5ac4a823d0a6e4f567", - "code": "0x117de450db9ef19cde82383de3b55cb0a7965580517c7121000ae2f172c97cbc9e45afa898d1218177bd2c70d157dabd7c7e29f662fd9efaedfcbb325862d874ac7511a01df823fb51359303411b7e2f723cd4e10f128e3084b8ebbea214c26304bb3b4207ce82295d38e8bff9678c7ffab2d11ac7c8ae0afa11bb2d6b2ff7fc6a4cd983fbfa662ee9a9fcdd19aa030fb27b315fada4a7adf24555d0223dc4871c8533394fc1a3f2824e39d8ef04b7ac42ed1afab3eb82c41e5654726710177000cc4898feff114e317ec8cc5776eedd027135f826cc0a15a25d1f713a60e56f0d1052827618a31385863032e24ca36ed2081d363c7d531b6429ccd7f7fafb7b", - "address": "0x52859c77dc11a2983f1ed3f9284f215c94ff354c", - "key": "0xb8da07edfd4449f2c95df40fc5095b3e75a702fcbaac7b5f9dce232800cfac3e" - }, - "0x549ABF1AE8db6dE0D131A7B2b094C813EC1c6731": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0x549abf1ae8db6de0d131a7b2b094c813ec1c6731", - "key": "0x910fb8b22867289cb57531ad39070ef8dbdbbe7aee941886a0e9f572b63ae9ee" - }, - "0x591317752B32E45c9d44D925a4bCb4898f6b51Fb": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0x591317752b32e45c9d44d925a4bcb4898f6b51fb", - "key": "0x88a5635dabc83e4e021167be484b62cbed0ecdaa9ac282dab2cd9405e97ed602" - }, - "0x5C04401B6F6a5e318c7B6f3106A6217d20008427": { - "balance": "0", - "nonce": 1, - "root": "0xfa8419ae99f4a7adefcfee0f90051b152ab94b0f2c5e8f40afa685eaedd48d0e", + "root": "0xf4ddbfed83012b2b1bdfc64f088f12d9b9cd9b6b31e018c96afb602d15bf2794", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "storage": { + "0x000000000000000000000000000000000000000000000000000000000000017f": "017f", + "0x0000000000000000000000000000000000000000000000000000000000000180": "0180", + "0x0000000000000000000000000000000000000000000000000000000000000181": "0181" + }, + "address": "0x4f85d16ff1523308530cdb76384f9ed09a143470", + "key": "0xe88893cfac9ee1250741f923dc7a2b2471fdca54afdf6272b3424a67b126b1d8" + }, + "0x534Df862ed8fD56F9e9F7A50451B81Ac308Fba3a": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0x534df862ed8fd56f9e9f7a50451b81ac308fba3a", + "key": "0x2cff8455579bc93ffe8b215568080eb6b15a62dc94b6465ed6eeda919eb9ec75" + }, + "0x565f012918C969574b4DD7aB1438078360FEDbAc": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x65c9fd8e4f80c595224432b2e8c5c5daa9938c20f3303d0b0b576f930c6e400c", + "code": "0x036d965cb9d0e83de4c353f95caf4ecf8ee07c3b7815487583c2320e4410a14a974020aad38fd296c46604163b1d9ac2824887d4512f177363b73ec3c7aa5acec108ef12f26b4ade44fe5ed2f32b5ef7630c67d90a9897364bf8e724599e3cc46826f3b2dc85a23ac29ae589df3f1bd4b838fb58b1fba29fe7bbe6ff9d23dac1785099b1161b577a98586b6a1e4f4377ee16e922ae82fe8e16636298a173aea19a5bffddecd82ad75cb64b02d7705d37a866810905387dcfac43b76b6b52dbf188f578fea244f4e9da815349e19db14e2fab4bbc9bb5a29958ac2714022c21ab0f3692613da04ee297f5ae7520d29a65c5bb0c654c692374a729420b0423c80f", + "address": "0x565f012918c969574b4dd7ab1438078360fedbac", + "key": "0xb890172948a324f9b9a7b7733028129f7303744d7abad5f78719f3e474c3d91b" + }, + "0x56abfD748156bc91D9A8E14F4AF42dbe3968F22a": { + "balance": "0", + "nonce": 1, + "root": "0xb153956e166789ae49df7e053c4453e66ffa032f0ceb753fff0b86796f250913", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000195": "0195", + "0x0000000000000000000000000000000000000000000000000000000000000196": "0196", + "0x0000000000000000000000000000000000000000000000000000000000000197": "0197" + }, + "address": "0x56abfd748156bc91d9a8e14f4af42dbe3968f22a", + "key": "0x9961ac161049db66cea081d22a1b4aa9ce2c2cc8cc45f29f2d912d917ac6bb9a" + }, + "0x5820871100e656b0D84b950F0A557e37419bF17D": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xbfd53712aaf28ce81b4ca4ab65774f50a244cab646979adb59df00e1943deb55", + "code": "0x6cec44c34efdba490f3ab1336603140e8c0c28cdc34b65964a9ac1f0bfec07dd6d7892ce866bb2c3e65cb18b34b9a11788bcb55274efbc45622aad07c7f85a36f4d6b0967b42b86b19b12197339035f1db3d03253fe3615cd3e99d15d3921db0fa137d319445e5cab57eeed640ea68859c23a54e370f0c92b86e7378db9f6717f7b22d72bb41f50e7619fe6009e692899723f40bdbefb4ae417e7031ff0bccd5446b3a55c06c80b51690681e337aa42dc6d1eaa19031355aa6f894fc549746131c96c8fe65efc95b3b88cf5d783a40ba92aaab0d52edbfcf0abf2b8c2c9cfb8068b17a0ae68dfa3f84a81023be55645133434b92210d7c095b98954ca0e3e37f", + "address": "0x5820871100e656b0d84b950f0a557e37419bf17d", + "key": "0x4615e5f5df5b25349a00ad313c6cd0436b6c08ee5826e33a018661997f85ebaa" + }, + "0x58d77a134C11f45f9573D5c105FA6c8AE9b4237a": { + "balance": "0", + "nonce": 1, + "root": "0xa1b975fea88bcc79f5f339e687406fb39306b49b2efd0728846bbd04058ab607", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000082": "82", + "0x0000000000000000000000000000000000000000000000000000000000000083": "83", + "0x0000000000000000000000000000000000000000000000000000000000000084": "84" + }, + "address": "0x58d77a134c11f45f9573d5c105fa6c8ae9b4237a", + "key": "0xd9f987fec216556304eba05bcdae47bb736eea5a4183eb3e2c3a5045734ae8c7" + }, + "0x58f8fe237b593C19546e1e758a2544561d04bfe0": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0x58f8fe237b593c19546e1e758a2544561d04bfe0", + "key": "0xedabf9f506b5170888ca458df9dab111fa2c708b88cc706659db520718be9d60" + }, + "0x59Af84F3e7C82fce2814D0d6a548A6511b78d2E5": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc158240d4f9b25991d0863ec1afcfff897c6aa11de437ff428198163f7ed1544", + "code": "0xf9cab2ea5fc2898ca670240c87501f552f715e74f50142c35920c55eb3c0ea1ace08be9c0c4b619a77d9aae0c356635893985acdb56f3ab9f0887a6e839e7b153e04681523725281e5522c3930409045daace340ba5584d6ce46fad8ff0ee17c3429d6fa9db26e5631128d8185584d24f10323af033be7ff252ec8822b07bae1d21de5f10f7da2cc11d7285aa1870cc63fc64f1607ff0e823e4786ac9df506e1df77777c28427b65a9d9118284c3b1167eb43cc55aaa62b9f7d4ced77b911b0fe88c6d20e10af62aabb42c56ecad3aa0e9a8ce42bb84e4e634e80a0ca98bd48c5d7fa289fe0cce3684f388c19bfa7a0aaa2c98a5c74839d3148ac362bccbc70b", + "address": "0x59af84f3e7c82fce2814d0d6a548a6511b78d2e5", + "key": "0xd0873c9513c278a9dcb764072f7e2477235e814ca74f2ee4ab76c246f5ad239f" + }, + "0x59Fad703B903b1EC41FC5AbD42D277d69edd066f": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x72921c8e5b6ae768ecfcac7b214adcb6d129b1a27f01e3e53d5983b7172e3d99", + "code": "0xb0dd6ab64c91b13c13faf41aed0cf4d2ab8c259821710faa2ebcf849f80109e200f505a85dbdbde1426fd0a2214b8259b1ae4fcb9e18d53f06ec1b77e152797df7876b98fed9c448027081aa9a3e3a7d7052d18b7eea057b4def36c2fa47a12b0c5c7680cb1c40d05734a81289808b02f7180a420c18852dda2d5494a7f1afad66a8b3e51c9ef3016ee1d800e0aeb1de0aabe53158ecbd316dff51dbffe933a22944b9af8d962e2b5d171cd2b530c03b245945580d9e2a1c9efc472e2e5ec88bb5bc34a01e38ddc423f2e350462018e1f467d9168b2bb3690f0907c153557fceddf531d3aca5e6896fb90b841c9479873f9c1669c2ca84e3acb343f9c4daec0c", + "address": "0x59fad703b903b1ec41fc5abd42d277d69edd066f", + "key": "0x7c1d28615d0c377de4275a33b4f0ab75cbd2c397da5620caf1509a63564a806f" + }, + "0x5Cb874efC014fA0F7FB7331F29cc0b59973C6595": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x7864bc18a660d9d01fbc0e4c106e46acb7845d67a68538a1169a2255af2498df", + "code": "0x6d8e62e97e5129d5cef2e9dc5714a6fa7cfd8bb0b2a30fbcd3bc76f51251d708c9c9d362b631fd1cf2a811476392bf4340a481940250c78d4e1a8ba601af1c0ca42a541cdcfe5eae324446eb151010137f37bbef104de95f2a946c2404849477f4a235ccdb54c513989f886387aec23f9bf80ade6bf8f128a86992a7069f7985be89b2b9c21da99020673067731702f61a06f1657a7bc439452ab88ee45c8f3d12375e8dbec105fbd47c977d99a60ca0d2bf8a8ad37fe84ac7d8350cdcc77770b140c83f89450527e0d9bfdbe42b2fde284574f0f05c92031f07f3f4d420a7925a41508a056f33ebc54916028c311d205604728c0f8fe1666ec11122b917bee3", + "address": "0x5cb874efc014fa0f7fb7331f29cc0b59973c6595", + "key": "0x4402ea95dba35ab4b25f25e5dd1da45f79ebd51cdbdcbcd437fd8b204afa0e15" + }, + "0x5E5F35d83E5485AA1006F6Ca478eC7507d0efad4": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0x5e5f35d83e5485aa1006f6ca478ec7507d0efad4", + "key": "0x53ed76a58ca2fe13ebac69b866c007878047e8c418866ece50f947ddafc36321" + }, + "0x5b35D3e1Ac7A2C61d247046D38773DeCF4f2839a": { + "balance": "0", + "nonce": 1, + "root": "0xcc48f8d1c0dd6ec8ab7bbd792d94f6a74c8876b41bc859cee2228e8dad8207a4", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "storage": { - "0x00000000000000000000000000000000000000000000000000000000000000ad": "ad", "0x00000000000000000000000000000000000000000000000000000000000000ae": "ae", - "0x00000000000000000000000000000000000000000000000000000000000000af": "af" + "0x00000000000000000000000000000000000000000000000000000000000000af": "af", + "0x00000000000000000000000000000000000000000000000000000000000000b0": "b0" }, - "address": "0x5c04401b6f6a5e318c7b6f3106a6217d20008427", - "key": "0x6c37093a34016ae687da7aabb18e42009b71edff70a94733c904aea51a4853c1" + "address": "0x5b35d3e1ac7a2c61d247046d38773decf4f2839a", + "key": "0x55cab9586acb40e66f66147ff3a059cfcbbad785dddd5c0cc31cb43edf98a5d5" }, - "0x5c019738b38feAE2a8944BD644f7AcD5E6f40e5c": { + "0x5c272D741b74a8FEF2749FaE559C3900052ABBac": { "balance": "0", "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0x5c019738b38feae2a8944bd644f7acd5e6f40e5c", - "key": "0xbccd85b63dba6300f84c561c5f52ce08a240564421e382e6f550ce0c12f2f632" - }, - "0x5ddf897368f755b65a47c325558C5D1B6101D6AE": { - "balance": "0", - "nonce": 1, - "root": "0x8289b558865f2ca1f54c98b5ff5df95f07c24ec605e247b58c7798605dcd794f", + "root": "0xc1a33c69d45ec0d448590031a0f9322932282f502559174fda86c43fa3be61a3", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "storage": { - "0x00000000000000000000000000000000000000000000000000000000000001cb": "01cb", - "0x00000000000000000000000000000000000000000000000000000000000001cc": "01cc", - "0x00000000000000000000000000000000000000000000000000000000000001cd": "01cd" + "0x0000000000000000000000000000000000000000000000000000000000000219": "0219", + "0x000000000000000000000000000000000000000000000000000000000000021a": "021a", + "0x000000000000000000000000000000000000000000000000000000000000021b": "021b" }, - "address": "0x5ddf897368f755b65a47c325558c5d1b6101d6ae", - "key": "0x411fbb986eebf586de3c9c5e658d280361302fb01b9c78a4ad377a1d22f48c30" + "address": "0x5c272d741b74a8fef2749fae559c3900052abbac", + "key": "0x806056ca2acf8c351ae196bbd3c8c0bf28d0a6acc5f15363316d9783530da9ac" }, - "0x5e028FC1Db7DEA67e88450a41E8a8C171a2D98af": { + "0x5e14eB6950734cB6D9D2235CB66ff1d7e58591b8": { "balance": "0", "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "root": "0x5dc1af1f023992aa3ade2c0acf296be3e1a81518a97051eb5f01441194d8933c", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0x5e028fc1db7dea67e88450a41e8a8c171a2d98af", - "key": "0x093469a66063567a18434eb090355fdf9a1cda7b36496375c8ad5352490f37db" + "storage": { + "0x00000000000000000000000000000000000000000000000000000000000001f8": "01f8", + "0x00000000000000000000000000000000000000000000000000000000000001f9": "01f9", + "0x00000000000000000000000000000000000000000000000000000000000001fa": "01fa" + }, + "address": "0x5e14eb6950734cb6d9d2235cb66ff1d7e58591b8", + "key": "0x1039f5e5139335b89c26b535b353123c3fd4e0542fb64d85cbd001e344f7edba" }, "0x5f552da00dFB4d3749D9e62dCeE3c918855A86A0": { - "balance": "1000000000000000000000000200000000009", + "balance": "1000000000000000000000000300000000009", "nonce": 0, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "address": "0x5f552da00dfb4d3749d9e62dcee3c918855a86a0", "key": "0xd52564daf6d32a6ae29470732726859261f5a7409b4858101bd233ed5cc2f662" }, - "0x6122a0F0099Cf6829a1A798C7d8194F3F1c767C6": { + "0x6057FE92F331FDb8f9728160E857B920d7824ff6": { + "balance": "0", + "nonce": 1, + "root": "0x0dd7fa1a6c3ee15039f57211a40021e727617dcf3396ad739b3a6bc0547039b8", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "storage": { + "0x00000000000000000000000000000000000000000000000000000000000001d7": "01d7", + "0x00000000000000000000000000000000000000000000000000000000000001d8": "01d8", + "0x00000000000000000000000000000000000000000000000000000000000001d9": "01d9" + }, + "address": "0x6057fe92f331fdb8f9728160e857b920d7824ff6", + "key": "0x6aa85d4b187111f2c5ecf219bd89f549601ff55f5d81290f81a564ade80db911" + }, + "0x6269E930EEe66e89863DB1FF8e4744d65E1Fb6bf": { + "balance": "0", + "nonce": 1, + "root": "0x75a2a5a81b84c4f6290edf5328f743c609fec3724db2187fa84fe11999b936c1", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "storage": { + "0x00000000000000000000000000000000000000000000000000000000000000c4": "c4", + "0x00000000000000000000000000000000000000000000000000000000000000c5": "c5", + "0x00000000000000000000000000000000000000000000000000000000000000c6": "c6" + }, + "address": "0x6269e930eee66e89863db1ff8e4744d65e1fb6bf", + "key": "0x419809ad1512ed1ab3fb570f98ceb2f1d1b5dea39578583cd2b03e9378bbe418" + }, + "0x64259510073C9E180Db9a7D4A6e6752a52fEcFAD": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x1cdd99d5886db6ad2fa95eae0e3dbbe46bfd4d76dd9fc071924bfbdfb5092df1", - "code": "0x5ebf747c75d0738c34413ae2d381abbe56223451ec9a8182acbb3c1b4cd303c36b426b81e25bfdca83dacfd6d1498cc9b779efa0e16c484b0a45c63e2a8ac0eb41338e7384edaf5f4b58e81789655568fca10ff473e1ae582e94707ba3b4af90ef1ae8d7b697e2fe5c14ab2301c3ae5fc2eb455e13fec873d608e25c13013abe76d086a43441006cc18880195fbac37baa9f0b926a479db4db18e84f5b93b3bdc27bef70534a73a3458fa13111419bdb863ccef9e14b21600ede3c5d6199ba547b426c558c84faa8521ed0fec4740eb270d0d68f28ebd25a3f457810c19e5e1d6c8fbe6ccd59976251666e62bf63684699437b1318f66f299d463a2a35e6cafc", - "address": "0x6122a0f0099cf6829a1a798c7d8194f3f1c767c6", - "key": "0x0e733ffe8353481b1a9ff5640302b8aea65c7d1863b432df95ccb2be96afa76b" + "codeHash": "0xae2556f6467404d4960c0e82cb0549aa24b1b86d63e8916f4991b4aad90797c2", + "code": "0x7308fca2a3bc677778472f81a566eb92fd5c90e7fecfd7cfaccab39916d3dcf0f531e5b3d77d17a0ec1ff2986b8bc33d0c3e72c0453b9046ab0041949852d1fe279a12b9e4525aa676a2558adc8dde630f6552ec594fcfc6faed4dc25a43b154874e0e82c737fcd276046addf49cabb96bdde8128c11ad519f9fe60006c3a47a9febe27a7cca7c12f1344dd0fe9b564e4efcfd2da37f2bb9004affb93ba10be62403cb0c79227a6b79d68d83cc4f30f951ae106ed6e674d9b7492bcf06603be70464f185bbc7db7df2ca680828dc05691ca64c1fdd3c16ed64141e4ee71f7991f1719981d146cbcc1630a3b12228b0581a3cc54c736724b85bd467e0a7082217", + "address": "0x64259510073c9e180db9a7d4a6e6752a52fecfad", + "key": "0x68ccf188baffd6aea3b31029f80ea18836c629ac53500a7137268ce1512529bf" }, - "0x61774970e93c00A3E206a26c64707D3E33F89972": { + "0x64c725A9fC63B8e7C45985387094C9C7c6bca3dA": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0x61774970e93c00a3e206a26c64707d3e33f89972", - "key": "0x07b49045c401bcc408f983d91a199c908cdf0d646049b5b83629a70b0117e295" - }, - "0x62b519210D1152d05522eCD2786a0894Ef96711a": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x53e60f54205478067bd7871cc267787db82640762b903ae292cc4f7b1e034b2f", - "code": "0xd9dfa62431de8be2dbd2a3e48181600f1d9a369e648c27560dba1fbb3ad2b73f114d5534ea633c2a4fc65ce2157734e1ac5b006861db9b2fb713da83945f9b1644e6cc9ec0025107fead21d06dc3a721589436afc2b981a277584ae87017150697b8d5f3ffb17ab53746c00a9a5934cdc979817ec37b75a47e7116ebc0dc98bb39e54ab7b21fcfb47de39aee65760cb929603027794f0bcd7af8e3aad7c10b9511a5f8a2a2bf42740ed0a334377de2c3084e93c4f4d0a6c75576781b77d09917724e042275b7684cb97d5450ac014448187dcc8ad8eca739641820e932cead43c37c803fa400daf840edddd3bfd7134b4feb4e68c807934df6e79be380372de7", - "address": "0x62b519210d1152d05522ecd2786a0894ef96711a", - "key": "0x2439cfa77d7473700a4a2e1f646172781c057ed8562f05dd5d4262b33fd7861a" - }, - "0x6325c46e45d96F775754B39A17D733C4920d0038": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x005277275713c3dca04ab6c7e47c80280f192d40dbc42d4798ae13efafb012aa", - "code": "0x66ce4e8e12a5403828e3fb3176b429cb926ef9dc29fd04c1b3c13ed2787d98d63eae4e449535fef8fff684d6f73d890e306ee348ada8a418981c28d496bb7be350dfc491ab5c757ee78cfa27228f3a47882447741e862da671b4cb5afd51d95370d52b43b3e1f9a31ab6163a901e55133bd37da50c470c7ad07e6be9a4e139f4309f8175bdcf9b0c39a91eee31067537b925ed2b384eabdf80116866cc3ab80ddb57df9c1c4f68e2fa98244b87e0d27e04c99093c63e7983b367307c46863d3f3fc3eafd6666b4115f284754aee9ae5ecd0e309cfccdd979fc5507fff0213446ac2be92b45f4e420d0da2f410ca74328fa136fa304300cb98f3bfe380f244449", - "address": "0x6325c46e45d96f775754b39a17d733c4920d0038", - "key": "0x7c463797c90e9ba42b45ae061ffaa6bbd0dad48bb4998f761e81859f2a904a49" - }, - "0x63EB2d6EC7c526Fd386631f71824baD098f39813": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x1168db50d8c2d04754fa4490bbedbb9da7d8abaee13dbb166226184e43a2c230", - "code": "0x50f395cf935269ec6c0da54860a5c40e4a834461db1470816d90e1e42a72199933adcd84fdc27d3e867d7b3e99f37edf5e90974dafbd1ff1ab87448df87b1e8832c9847d10682bcdcec3f220294c4be920f5b07e4c9bd319b015ed2172b56db476f70a4b50e1ae7567d0cc5ac047a75e39b034ce3beb11fbcef92f4b009d5ac5d98acec5291ba9332e4780f7cbe1ffb2dd12ac35ed0a419e68c5bb25a3f36736406423470b595ffad93ccf38676da45f48a17fcf63343e5bfb15c88f71795d1135c961d63bca6edaaef30eb43d3e98ae2b23003091278d643f0b7d548887f0c1bbb0e6314a05b0c3773a37fe72e4dab42b2fabbc8cab6968d2bbb4760eccbeb9", - "address": "0x63eb2d6ec7c526fd386631f71824bad098f39813", - "key": "0xfdaf2549ea901a469b3e91cd1c4290fab376ef687547046751e10b7b461ff297" + "address": "0x64c725a9fc63b8e7c45985387094c9c7c6bca3da", + "key": "0x23097429b7a1d1795cc8c2aff3fe23be242d1af03f234797d8fb4d7c443bbeb5" }, "0x654aa64f5FbEFb84c270eC74211B81cA8C44A72e": { - "balance": "1000000000000000000000000400000000008", + "balance": "1000000000000000000000000200000000010", "nonce": 0, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "address": "0x654aa64f5fbefb84c270ec74211b81ca8c44a72e", "key": "0x00aa781aff39a8284ef43790e3a511b2caa50803613c5096bc782e8de08fa4c5" }, - "0x667Bb3a03733d43Ec28d2178c39DC8d8D62e48C2": { + "0x67A61A385416d9c31e4FaA3119a425d9cf1616A5": { "balance": "0", "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xb7c056307dcfe4d5bf2de7d5ad1bde4bfcd7aaa0b8f809a5f281bf5c0ffc5ef3", - "code": "0x8287407dd86f9cd15823a62f56cae15d1cdb1d9dd2cfac15669fd1037cbd633fba04c9fd01e5135b6259852aa7338be61049b7b5f6b9bf8cbd858ccf50532c262f2120a9890bd4e58b07c28e03ff53234c375f6e9b60ef12bd3dd7fb6234e9bc2b664fbfedceaa9e368d36426d56ced624f761197dd7b96937cddcd7d4a8ca8d775b7a133f8641b4824710333c2c435f2413ef48954449113b6ed0576502adb9825fb6258ed58db931ef4a50b617f3b78cc886f5d1e09c7deb5b845bffeed38bb03cda5378747d2b3f6b4d23edbf03f046cbf5e0ec8cf1df19f2b28601c8cd810b1b62f1989f657b839db886f8749798d4c830427984730946a0d3525032d7c6", - "address": "0x667bb3a03733d43ec28d2178c39dc8d8d62e48c2", - "key": "0x184b9df2b6cae0dae7687488d9f738d1038720fb1c84aa74b880cea89d89ccdf" - }, - "0x670DC376eCcA46823e13bAb90acAB2004fB1706C": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0x670dc376ecca46823e13bab90acab2004fb1706c", - "key": "0xdcda5b5203c2257997a574bdf85b2bea6d04829e8d7e048a709badc0fb99288c" - }, - "0x6741149452787eB4384ebbD8456643F246217034": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xa0750f0af31158ef75bf1585ac49a9f036c3d1c824bc9cf85348eea1cd44c4e7", - "code": "0x2bdf3b387a25238ca107528ef613f0cda5e5fdc55d2a862a6772bc33c52e9bfa806416b7717fcc15b81108defcfbf29e72f55b2197fecde6e539ebee057989a401c50f6fac5dab042d56d6672b634cb37b505c5aae3d7ba4611136701b0571deb7b30a37f76c4fb5cd36b8aa4d39c72a853a8d4c2fa5b557a49cb235c2e1dafff37f59c4a66e94d1fca74ea62b6b8408510c029e65fdcd1df49d986c1b36dc7926564a9842445dc74d9f07ed82bf6b114b8b1d9caab12e4ffe452622666b49365b356955612a215e910dad02f366f8b9b52d08b78752c97e0f89f9efd40bcbdd49d68b6163ca37cddbba727f9683532a5f96ca0a6046c4d911e9c07656aba166", - "address": "0x6741149452787eb4384ebbd8456643f246217034", - "key": "0x37e51740ad994839549a56ef8606d71ace79adc5f55c988958d1c450eea5ac2d" - }, - "0x67b7C7F0A33D823099897812498d27F02641211C": { - "balance": "0", - "nonce": 1, - "root": "0xa76e1579c7dc21902a22df113429d0ce1741c95e74724cb3380542329025d9f5", + "root": "0x2931f633d50c1479ed6fc7e6694773cc891359a82498d36c3a1ff6183e393f96", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000152": "0152", - "0x0000000000000000000000000000000000000000000000000000000000000153": "0153", - "0x0000000000000000000000000000000000000000000000000000000000000154": "0154" + "0x00000000000000000000000000000000000000000000000000000000000001ab": "01ab", + "0x00000000000000000000000000000000000000000000000000000000000001ac": "01ac", + "0x00000000000000000000000000000000000000000000000000000000000001ad": "01ad" }, - "address": "0x67b7c7f0a33d823099897812498d27f02641211c", - "key": "0x32e29e5de456ade7b4d54018ccdb635ed75ef0f69d5012a5bc7940db8ad41c5a" + "address": "0x67a61a385416d9c31e4faa3119a425d9cf1616a5", + "key": "0x5a3e8a1207bb1a9c2d1265bed157f2af2b6a72714c6fbd2d88e54ac286edd612" }, - "0x6e538D4e5B09ef72527C5f360A9eed7BdC78c013": { + "0x684bC6825e462FDB916de100633e6B6E7F24889E": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0x6e538d4e5b09ef72527c5f360a9eed7bdc78c013", - "key": "0x8a9059b202d794382c3d775abd293c1e8a931a9e452cd405bce318655011be46" + "address": "0x684bc6825e462fdb916de100633e6b6e7f24889e", + "key": "0x4d21debd0e9f83b4968ba732fc45af8c777c93e880de876458fecec6ad7a1785" + }, + "0x6D8B8F27857e10B21C0FF227110d7533CEA03d0E": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0x6d8b8f27857e10b21c0ff227110d7533cea03d0e", + "key": "0xfdbb8ddca8cecfe275da1ea1c36e494536f581d64ddf0c4f2e6dae9c7d891427" + }, + "0x6E61C1930047f977205cc445234d627eaA0b6CEa": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0x6e61c1930047f977205cc445234d627eaa0b6cea", + "key": "0xfc648c6bfa55dfd6dd1b2322a6c768637f88704e48325686ef2589f8e3b06a73" + }, + "0x6F372e56E94825B6542Df4459Df1dA3aA52cf093": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0x6f372e56e94825b6542df4459df1da3aa52cf093", + "key": "0xb898e426a8614ef715b2e6ae0d473ccb71e1b40053fc0637134ebecc90c089a0" + }, + "0x6F80f6A318Ea88BF0115D693F564139a5fb488f6": { + "balance": "0", + "nonce": 1, + "root": "0xbbb0506aae3a78c8ba163d88e1c7424c7af27bea7b2678235dadb60746261d37", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000132": "0132", + "0x0000000000000000000000000000000000000000000000000000000000000133": "0133", + "0x0000000000000000000000000000000000000000000000000000000000000134": "0134" + }, + "address": "0x6f80f6a318ea88bf0115d693f564139a5fb488f6", + "key": "0xe73b3367629c8cb991f244ac073c0863ad1d8d88c2e180dd582cefda2de4415e" + }, + "0x6c49C19c40A44Bbf1Cf9d2d8741ec1126e815FC6": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0x6c49c19c40a44bbf1cf9d2d8741ec1126e815fc6", + "key": "0x0304d8eaccf0b942c468074250cbcb625ec5c4688b6b5d17d2a9bdd8dd565d5a" + }, + "0x6eE3EC43e74798692dC62C162901f3a6cd9EEbC5": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xe1a25651a3d8a189057a6a9a63a50852944980a11345ac5be266f2183e4b55aa", + "code": "0x20a00a56ff464cf183cd5b79ce2126e3fa8017282b0399b1ebb45b8e0bd1068c20a5091f1b76bff1edd590d3f51c5c6379fc3d087cabc34446be903ecf6b06d97eceea9b3887b9baaf4c61a3e9ad95297e1afb387d0e34c121261d9b5eddad34b5bd17e250aec4f1e352b02f19b359d072378fcc0c4054789dd519e60e58f0dbe6c63e9737af59d8812856fef9882c5ee7d1bab39b82436e99dcdcb300d6afdabfc43fe3f72bd28010cc6d9b33b12358fe30fb86ec68b752edb7fd8a61da4e7ecd424289c3cf8fdc5c0af8700350c5e354154cce6a2807831fcef26e8175822872bc40aafb8d24fa3448adc4428b158f737f7177cf0a73e5e537b5ab72d04c4a", + "address": "0x6ee3ec43e74798692dc62c162901f3a6cd9eebc5", + "key": "0x2de4bdbddcfbb9c3e195dae6b45f9c38daff897e926764bf34887fb0db5c3284" + }, + "0x701975703F1660f083Cd05BFD8bDc14B76228408": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0x701975703f1660f083cd05bfd8bdc14b76228408", + "key": "0x81cb192ca1717f4abca4377bdc7284b0d038a9e34b5a98db36b1359e641a83b9" + }, + "0x7021Bf21ecDBefcb33d09E4b812A47b273Aa1D5C": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xcbf4f7ede299ffc1080e11d0deef032fcfad102db354abfc55b40dec408de17c", + "code": "0x6b02e248a9e436441474617807e267a743af2dc77080985794afbc3a33c25d4befbce2a8ff2d467e309d9248a4b22cbaa3390df6f9ad4715abf30f5eeae1d193edaa9ac5d4440c772c7764df206a5b40169a23892684458a3f8b4bcc77ed9a9dd46460e0ec4be8776950adcf76016e20c1ae55682b188e96bab57b3cdf10a2236db827bf88420a37fa5ee8fb2a58106c670aa51c48673dd02dec0a24cb121905f2cf4f001b7751b7906e2fa0ceafcd025a53d63797880ae8c58702c57f3300404b5debc8ce0705e5e2d352225d31508d545c4d87f073b5ea5ff853237d333fe375a43ba0fdc2854916b0573b104f8f3b27e441d0274a726d97f7bafe2270ecde", + "address": "0x7021bf21ecdbefcb33d09e4b812a47b273aa1d5c", + "key": "0xb9400acf38453fd206bc18f67ba04f55b807b20e4efc2157909d91d3a9f7bed2" + }, + "0x7029b7A1e1a0e17a08Ae0F5f58d06620fC0e22f7": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0x7029b7a1e1a0e17a08ae0f5f58d06620fc0e22f7", + "key": "0x9bce292bc3ce4d49668cd47b99660bc8945283d39f7a7e6a621ce7367ddb9c3a" }, "0x717f8AA2b982BeE0e29f573D31Df288663e1Ce16": { - "balance": "1000000000000000000000000400000000004", + "balance": "1000000000000000000000000100000000007", "nonce": 0, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "address": "0x717f8aa2b982bee0e29f573d31df288663e1ce16", "key": "0xc3c8e2dc64e67baa83b844263fe31bfe24de17bb72bfed790ab345b97b007816" }, - "0x71e7DffB120141296fC9cD4B605D2C3e91532320": { + "0x71a914D83ce265bcee9361574Fdee0DD14FCcaF4": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0x71e7dffb120141296fc9cd4b605d2c3e91532320", - "key": "0x9c30e371e95f1eee489bdfa184e03da347fc67634e0563059d2ff4deb72ecfcd" + "address": "0x71a914d83ce265bcee9361574fdee0dd14fccaf4", + "key": "0xd202c35c34daca7a424f0e9ecf84e82223c90771a4e35af8521edf6cf31cf918" }, - "0x72488f954A3eB61484471640cBAEaF78CE76d3C0": { + "0x7212449475DCC75d408aD62a9acc121d94288f6d": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x29d4a41b515bc92289080c82736daf9be34e98756523c594c9fcbca9cb623601", - "code": "0x0d62091370673e8ccd6112f88e6cf83a7e262bdd01fbb39f2ad26dc1950ace20478420247b5400ed2ef8c9e82b364bd8588bb9b0f3d359f4eb07c15c2f2ace704689d4ccce42c0f0a53795099e826dae48c5e1990d368d17ddbf2a2a73c395a4d771cacdd43debfb6108ecc2af178721126880a13fe3c1a3eb78b982ac4bb9062ab704a4764a354b72c71784596f1ee2535c2159415177c6759c4aac4c0d6a35c035b7fd4ca3fb9e95fbb0270d7dcc45400ea942e0f1f7c81eab928d513d29259a4083a76373c129b3fc4a15974f8c405a4ae2d36a6502465cdefa34133101b918895f212d9030d8444c7d68dbfba2c3cbe3d4e7953a2b544ff4d6facabbee32", - "address": "0x72488f954a3eb61484471640cbaeaf78ce76d3c0", - "key": "0xacb2843c9c612c1164efb43e55701927b28291c14b6a950c9f658d687cf238f6" - }, - "0x73AACD67E1d72534a3D83D38b88026bE46ff2928": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x1e68027de7f5bb2a9c63f83cc6107bfe71694dc9d086d845e1e3b1e97dacf2c5", - "code": "0xa81c3a5a553fab8c561679d85bb19e6a7eb0218b4839501a326c84cd4158b2d51161d849492e842dca32edceeb2630bc6d621f9dea3fdc78ca65f82bb844f4b139366d2e14b42d797be5fb2272e93ead41cec826548512dfa09eaadf5ba4c2a4a171e6dff2e291b2403638b36fa1900bfb6d28056b9cc28339adf04ff3e24b88f13a4de10a82cea8926787ad7534bdd0eeb85aaf1d4813cb0c9cf7e399b7ef0bc1e4ab78a93992ee6fa5897690163464c8f8afa9af264f2d83bf6e5bb209a73a84ff3eb04bac0a2190b4fb9ac6d0dbbdf1bb431847b8b7ccd4a0ae0968e179db7130ab3fdec6ebe33fbecf2e3fe7b06f5b02e4c74c7e44e42655d673012f1254", - "address": "0x73aacd67e1d72534a3d83d38b88026be46ff2928", - "key": "0x9dcac55a8e43a847f19e26fedaddad4c4b70f05633da984b95bc232a1289470b" - }, - "0x7419f9024b102E628c6d8Ae2178fc11edA4091cA": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0x7419f9024b102e628c6d8ae2178fc11eda4091ca", - "key": "0xedad8de5342a46c07726160a648709be199da56fdbc92ea23f5bc51a32abd680" + "codeHash": "0x017dac995561f4ad38ea01f7cd0d0a599ad4fd54610ec4bbb0a022c6c25b0102", + "code": "0x3884095ca26754c19839d1d65ed3564b4558896672ae6763c55fd1245d56ef7b51c44284d952b00f7c584661b05f3b5ef462e7e5fa5fd8ff860e55075b3c69e100b80c4ff21059bea8fc1d75692dc11a282117d4df95e89684ca76663735d95b308b08755ec965f49e4d58d22ebbf80dc425791b553f8567a173e85e1abb76c3d59d36d9a2de213c9d9eb0f9211f3a0af11fcfbb0f65cfc9f3c7b45309667e2e354f9940ed6a1b290b3c1c5b50e9b42ff556724d10fadf83a38bec6611feca7d587d806a8d61a216518ddc9bce228cccdd621174b77f4d8d747c1064e65d14c8dd19496508bc227dc9b9d757c38132fb6956c14e9e9fa87b6fa13663f26722cf", + "address": "0x7212449475dcc75d408ad62a9acc121d94288f6d", + "key": "0xe333845edc60ed469a894c43ed8c06ec807dafd079b3c948077da56e18436290" }, "0x7435ed30A8b4AEb0877CEf0c6E8cFFe834eb865f": { - "balance": "999999999999999999999504116057851184", - "nonce": 548, + "balance": "999999999999999999978502856567391250", + "nonce": 603, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "address": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "key": "0x4363d332a0d4df8582a84932729892387c623fe1ec42e2cfcbe85c183ed98e0e" }, - "0x75F2A26625f08390f5b66C5238571de790b4D7cD": { - "balance": "0", - "nonce": 1, - "root": "0xe0a82b671528878859d9895420b108b58cd0a4b529f64b68aba04b144fd8391c", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000223": "0223", - "0x0000000000000000000000000000000000000000000000000000000000000224": "0224", - "0x0000000000000000000000000000000000000000000000000000000000000225": "0225" - }, - "address": "0x75f2a26625f08390f5b66c5238571de790b4d7cd", - "key": "0x0530f0a872be8e03883d9dcdf34c6243c8b077f5e1454dcba0b00ac41b1c4007" - }, - "0x75b9236DFE7D0E12Eb21B6d175276A7c5D4e851D": { - "balance": "0", - "nonce": 1, - "root": "0xb3f69d1bc520e1e6cb0c45736136f623265d1c97a183709d9171fb81e888d0b2", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000055": "55", - "0x0000000000000000000000000000000000000000000000000000000000000056": "56", - "0x0000000000000000000000000000000000000000000000000000000000000057": "57" - }, - "address": "0x75b9236dfe7d0e12eb21b6d175276a7c5d4e851d", - "key": "0xc54ffffcbaa5b566a7cf37386c4ce5a338d558612343caaa99788343d516aa5f" - }, - "0x77EA772798792AE8A7A5Db1444c5a08422E61D70": { + "0x746a4A19f37986b4bDF4Aa856C13876Ba5d00885": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x1d0c729cea26d0141bd5dbd789a82c2bf58858a1b7dd4afc84996e5664a9a4d6", - "code": "0xa29f2962b8badecbf4d3036e28fcd7dcf22db126f130193790f7698ee4d3dd84c8d233a0ebef7c9a17d2b0b17eea62cca39002a128ccf419119b4a1a1f1e7428a4e0f4432e44d027a7b3f953940f096bca7a9bd910297cad2ba7c703c2b799d3fc111d09a6e2f0958402cbe16a5aef32c9d8ddb9a4df7271140de57bfed6525aac375bcb880242328180c23d4a918023a12a7caf7cf12b8c4074e4a3f39900a0b4e18992ad424cdedc46668609f2bafcf665a8d99577618d5923c69264d9cf5f84a4048ee77615560f9afb39551a46e123dd0dd6c928af241dc565271d0325697fecc9f0b925868a8c62ee842da0498074146a036d84a1041d9b5286786bbbf3", - "address": "0x77ea772798792ae8a7a5db1444c5a08422e61d70", - "key": "0xea65665779db5aff91565df8d1183c21fef505ef0568218063195936d02da2dd" + "codeHash": "0xc6f019710802c277f20eebef107a03c7716f7cceb4e71e88a6362ea01d91b71e", + "code": "0xe6cf798baf210a542efc04b9a1d35b51bbf5e410ca16e05b2438d8aa878eb4cbfe979cac28aae02591b1e9a75c257b8ef0ce5a9b169c4326754f1a4cb4d5218def8ddbc0ff0e6cbcbe485109d3c044e9d7ecef5b93900570208a0441ce95e47f957c7b755145fcfcc61091a48f9327db65a575704887cd0deb33ea7d7c39a27ee818def27d07091d58213bf54017c19392db186502c3606e7f6f2cb35e780e920072714fb5796f380bf3a3e1f2a0bef653a1c86c2fdc99fb3e1ba6475976d081a30c04976f511ea0ed4105f3959ef4bfbac33edc0897e2ca235ed8ed37aaea85c6ea3000385ba405ac4a152ff53937c2fdc832eefb152314b376e57ba9bff1e7", + "address": "0x746a4a19f37986b4bdf4aa856c13876ba5d00885", + "key": "0xdf769ae3989fee7f1bf6e8ac9dd3569178d4099af14dad7fdf015ee0e4730f9a" }, - "0x789f8Bd19f7Dd88DE4C94662B7680AB685553728": { + "0x75BE2E16aB7d49356F016A57f5a389B18e361FdC": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x306dded1de1f616ce99dc5c63dc6ff249af675ecd11cfa7704e3a1b1a20f0be4", + "code": "0xd66e2ad9c622d8fba62695dddfb1dae629a4779e0b6cb52d0a48eef9e5021d6f391130299419caa48b4a7a49a2cba7c0a42b146ec50747d93cfc4f54371597af93e1a7869b67d2b4edac36ff5bc7eeba517ff228f0aa77f525822d8334b69637a23430173c031a9aa170221f1b31469dc7fa6938a8b13413c9b8fd8421cf5e2c6eac71626d09a1fa3110436e2c6ede46c11ad87705148403bfee1ba7383277ff545737c28018ecb87363e183c16876d68b107616b0e56037a60eef9a6d6ae89dd77d6d8eeae66a03ce8ecdba82c6a0ce9cff76f7a4a6bc2bdc670680d37142738417624c20328f41fe28003645cb6736b72c1c0f9d860d2b376428c0d43492a0", + "address": "0x75be2e16ab7d49356f016a57f5a389b18e361fdc", + "key": "0x4527ec446456c7a0bb1da8a13c16defca121665a737b6158c7bfc933e95a1e3e" + }, + "0x788AdF954fc28A524008ea1f2d0E87aE8893AFdC": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x09fbbcbc642fb5612f9ac9f09d0d161b72b0bf49b75e1ce64b1faaf0c4acfd31", + "code": "0x901ca3aca1b292c5c6a1550922e912fc3d21ed9dbcca3b2c46ab298fe770ee3b13e5a15874e9a3e7dd9f127fc1fb68274ffc67bfb8815c72347bf40700a43bbe9aee76b26d20908f7067784d7f2849ef01392ed0c8c73614f0d0abc57c616d99ea1c8d9962659d05b79d2a74379c386e592caf47911721f070f5587a9f030ffa80a7350c7d2df5004042312cc8b0f6c346a2cd21b8d9f9e294d7aae0920bbe7e5f14e0ea4eb83b384b305c1689b771279ab2a8c55fa6b7e6e7ee2c6319a7a3490f56919ffb77bd5a8f0fcb974ff3cc1c168679ead71f5d3eb9998e03259f5840bd182d795b729397ae9083e3151cadb9d76b978ffb5289a94b2035691c01b655", + "address": "0x788adf954fc28a524008ea1f2d0e87ae8893afdc", + "key": "0x903f24b3d3d45bc50c082b2e71c7339c7060f633f868db2065ef611885abe37e" + }, + "0x7A9FE86BeAf9C94121dfa31144CA12CA061709f8": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0x789f8bd19f7dd88de4c94662b7680ab685553728", - "key": "0xeb4aae143f2a12481bedc1d5283378b5cdb0d04e0726fdb5735008d766a0a726" + "address": "0x7a9fe86beaf9c94121dfa31144ca12ca061709f8", + "key": "0xebdbbe3cfd9cc04fae47b7655833c19f42ada5e8ed76371e9ebe43cad66684c4" }, - "0x7A19252e8C9b457Eb07f52D0dDBe16820B5b7830": { + "0x7C28716a0503bC00725b3aef3D4eD4741555fB95": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xd9733b05a801246c9a6b8f04fb365284d2e15776e63ec367591211b31bac3d12", - "code": "0xff91e8593b941cc006a9af6dd29cf00c1d93d745cd30e13d28db6ad34229c727c0f9ae4ecbfaa81a3f2a4c9bb264c28cac2ae8853111c19109e83d6c1292e7a5db185bc3aea90f5e30861a799d320e0bb6de11723a5674bbbfb6409c8f47b8822023c3bd05b942cf6cbd5cd645de4d3fea19926fd4838b16303d2ed62750847284ea7badd9e8d390707dc2872182ac68c8c7a984bb7d1aac16736628a499083edb0e2bdd19b7b49c93d2d0d8a27fc83f2071eeb7608d02782d79ee059eccc097f09b457c15826396efb730bf67656e5debac76c904fafa6861ed5765cea4df444069a8200c657d770aa801936fc60d04a47893a564a93a09e064b483165beec1", - "address": "0x7a19252e8c9b457eb07f52d0ddbe16820b5b7830", - "key": "0xab7bdc41a80ae9c8fcb9426ba716d8d47e523f94ffb4b9823512d259c9eca8cd" - }, - "0x7BBcF9B49875acdBaa5857fD596CAF6dF405939c": { - "balance": "0", - "nonce": 1, - "root": "0x8dd6737b0207a31db75fbbc29063d72290aafa75f4164d85f3f4b6fbbba2fc74", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "storage": { - "0x000000000000000000000000000000000000000000000000000000000000024f": "024f", - "0x0000000000000000000000000000000000000000000000000000000000000250": "0250", - "0x0000000000000000000000000000000000000000000000000000000000000251": "0251" - }, - "address": "0x7bbcf9b49875acdbaa5857fd596caf6df405939c", - "key": "0xd82835359d9c4b09cad79be31a60ead5e421589b8cb2bfdd6e173d680176bf7e" - }, - "0x7DB168B2537EcaAc90f67C14401fa36fD8980252": { - "balance": "0", - "nonce": 1, - "root": "0xc5913c221e08d61a0acf3d91886ae1dd3d00f640857b9abba5bb23639b95c015", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000218": "0218", - "0x0000000000000000000000000000000000000000000000000000000000000219": "0219", - "0x000000000000000000000000000000000000000000000000000000000000021a": "021a" - }, - "address": "0x7db168b2537ecaac90f67c14401fa36fd8980252", - "key": "0x33f31989117f50a30bbd8bde69d2efcc6ea606102f7b3841a65a69fdb909f041" + "codeHash": "0xeffe888f927bccce1cf9281bd54ff035d06523b2f8519818e29f6d05f4851d98", + "code": "0x7e5820c0761b14115fe6ea18abae67e05d6099871305166211e1f3758c4ff0a7655e312cedbc024eac269caedb1f8f41f06c7f8f0177eb4f3554a658d1589a9d4826094ebf8431e0f0afae13d5b994ffdf50eb0cc63e327bf379974c92f50c6df5647cf2573625ccbe9a0b30aa78a110d0e7ac736f8a0e5ccc4022496f1a33b36b6941afb4be291eddac0e5c0dbb129591aa625d268e37dd1c2f9e5df9c0ecb65f503c75b1697635d4fc43250a4d9729a209a9ef27041f1535e5fb1d180ab5bda1ac5b3292d22071387cd970203935d354b23b6bc6a826028cfb02fb0167851e847e2cd21f9334520ad3e61ef154438d3083f3cd0fbfe02ee2ecc3dba7f46ef4", + "address": "0x7c28716a0503bc00725b3aef3d4ed4741555fb95", + "key": "0x549db5d8918de0246040398fa51124081d010de247f37f06ed212bddc1b9984f" }, "0x7Dcd17433742F4c0Ca53122aB541D0Ba67fC27Df": { "balance": "486", "nonce": 0, - "root": "0x735b3acfeefa3610e61d87c6927b5d712cedaa9fd722002c537b13d8619fe39c", + "root": "0x825a39b4466a4068d4dc731403a7a9631f29b4dd1b3bd1c609faf64305e0d55f", "codeHash": "0xa3216dd3ef46a63d518ef54e482cecac68a077f70fca0e5fb900be63f41d54a2", "code": "0x3680600080376000206000548082558060010160005560005263656d697460206000a2", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "d8", - "0x00f7ca033c24d91f8fc39cbf0edc8a43192507f93d7316f311b05eeb85921eed": "1d", - "0x02bd9d62880450596e11c3417f2644a81f7cc233a05394bbbfb58428ed53f413": "22", - "0x039a54e14fa9769f840074356dec3dbd47c3588fe71fe942fb7aec5edfd0a096": "82", - "0x0678ff21f84e5213aa8d1d173b3517f8e6c3d1523959c101c75a31daa70ab942": "65", - "0x075a739ccce514f063220aa4bb66f08a7966189b0f24a2c5ad4692133d7aa6cb": "bc", - "0x09b79212fdf6dfcd322d6aabd5ba752b962d7e575cf299112bead28ab955f4c8": "bf", - "0x0a2bc3fd72bd3f8bb7f1de9a7dc9e928a7c6a831237124e65c60c25f8348af19": "47", - "0x0a5a37a1db2e0068ee9791dbe377a74c4f7bc36bc27af57ca7e49059127e8eb0": "b5", - "0x0c8e91bcf03d65aedba99f4f76d3ff8cd007668948ce12daf4dded4761c7b19d": "8f", - "0x0d968817f6ab6815faa1501ac1eafc810f4bc9b7423abc4f1bd5e65e791b4e0b": "18", - "0x0dcf6219856f226889a2440b388d8e15f5df0eb64a7b443f3a7a5dca7b87b0f2": "26", - "0x0f624930606bfcd2386d583abca6ab10227d71fc1633fea53f94bd146c152b8f": "2a", - "0x11f0a8ac2adda075c95bbf6be534e3254dafa759f62cbcf0e91bc6f0335e70aa": "0e", - "0x142951613bf93db71eba96bb48c57a42168fcfded6491e1229ea2b8570f77e7f": "c5", - "0x14ec3dfb63100132cf23ef71b80689146033fc6ceb9f8c0f0a65ef93cd18c2c7": "d0", - "0x165e0e0cc13ca53c5af4860637550364c5c90a512906490ace14efb534873741": "27", - "0x16bee816935475cd45501fc5fd01bf913f8ef54330a43d80ef73101a4c728b34": "2b", - "0x17f29f600f5128013ce183ac10efc609231aff556df37c8f5d6802c1240c22f4": "af", - "0x187c8bbc8cd3f478b5688bc03cf5eda82ee75aa605e946b39ed1898f0cc0e00f": "88", - "0x18fbf0ae0e2133584c461cbd43169854c7c7e818e8b5779892da244f24d27b56": "52", - "0x19fbac480a243f8c051e10225cec11bcb7fb274fac8792ca7e36bab8e39d312c": "91", - "0x1bf804b21bbd284f3f59e4862747fabb1d91cd202d99df811fbcd650c8916ef1": "58", - "0x1bf8eef1506aea16c94dd534ab271dfdae26648de569b3bf6fc8bf4c76bd1a99": "8c", - "0x1f1860251182573015d583a718463a52050e45d795ec0f94d112206c3fd62e45": "8d", - "0x1f6ebf3e4d9c96ec86b866137bbec9bbb56d188e7126babfccc6394fdcc6a3d4": "63", - "0x1fac03facd67f44699ff86330a7f959ed3745add76d323f4832bc17c35be45c9": "9f", - "0x205bcc2489f954a3af7a16da4d6042a75fcd6eb69b848c52b3448acb24b23580": "43", - "0x231eb803c34ec183e74b466c105b5518b554ce215bbc31bfa52c384138b8479a": "ab", - "0x23c2e06f633f91e89e0d95cf87dce47fe1cb2b95434ff45773f1fd560ad2dcf6": "42", - "0x24a4daf5b3cac3bf3066902cda09da0fc862e0a6723c47981ed601782ad69079": "1a", - "0x250ca62bfd18dde43e70bab089d01d591ce6ab28978434258ae1017c72f12b0a": "96", - "0x27edda711baed4a613c44d8ac8678531c9938eea106e7c5649e438f3d24b8fe3": "ae", - "0x2aee290f6f3f6c60a6985d0150eab487f9de1c47962a779be7343cc0cff270f9": "a1", - "0x2daaea9286d7edb7568e0803a61bfdb1e1506156d27e93bdf1942564850646c6": "2e", - "0x2dd51e8325001014c6845bc5ad51b134ab237f95ab18da55cabc4275b029bf3f": "5b", - "0x2df4cc92987ab73b08a3474750456382a0add51fa25f928480762f3d993f2984": "31", - "0x2ecc9be98f9a8adac6e6acc5f160b0d15439b3856f0dee2a3005db79076252a1": "98", - "0x30335bc132be5a5f3bf464e0eed03a3c74f180cb9906552e187e4c04f024b804": "c4", - "0x321c62425869f150c2cb7f489691c3e5cd49f7cd62d07ecbb7477c4148aaaa0b": "5f", - "0x32984cfbb954e0815427570f4ceaef21a3691026950e5ad80401232f687620e7": "44", - "0x35f96bc70aa62a539fa99d9153b0f8aaa4594abf70cc8a8d9018e04e39a17982": "0c", - "0x38570ba11cfca6a25bea615c7ec09ae671516245a92a5f8fc61d2e82529454e8": "6d", - "0x39410f5a8f450e0b7fe63aa93e214a7c5cbe78786c815ebc926f1e8a2a14f4bb": "b8", - "0x3982f6a73961b17f67a84959ebc42a5a3ebdd1faa925399f3f276cc2de65f2fb": "4c", - "0x3a970a6d07c991261dcb566f26d21a76c578d05d1565c47dbc1fc071934c8c43": "ac", - "0x3c8110e03f1b54de6085ff899d0dccd87806b788d1ef3fddbca1de4c356266e7": "46", - "0x3eb32abcff52bfdf0887e9aebaeeaee4a61b76f2fbc9a183c2afc8552d46c3f6": "6f", - "0x3f410a22d042d915c50f9269337a2bc7155f86d79bbff1721d83f44153635ac2": "87", - "0x40325cfcd159fa7bf89d8c252b6ff47cbc17aafff5e7feb92014d00285484cfd": "7e", - "0x40c619388e6393f420e805451bd48b10c670de7d51e916a3ffe5ac3c96b81938": "55", - "0x412379b7f583981ea6e84408cba75ced69039e07ce9cdaa32a8a9dac997aaafb": "17", - "0x41565ae6f06f2555139f444c467d6b709b45180aa0c6b15bb5b1388d55ef952c": "19", - "0x415feb809041baabc4d9246223e40f1083963cbe1ef6dedb8b153e49d02ee7ce": "09", - "0x41b546f355dc0dd009ac5da8bfd17c8e197595c1c1f21aabbb1f3b18343a0718": "a5", - "0x427b8ffdff6454ea85c8251407144400ed4e693ffb6a74f319e0238c0e72afad": "57", - "0x4323bceecd4ef7216d5b57b9dd12ecf03842ed56d87fe43d0959436f408f44c4": "49", - "0x4348597bdcdee80c8e110d94f771eb7edce9c8691b2f90b71c0d11f729f086c9": "5e", - "0x434e2bcc5f4148668dd618144aac33ef5d463b292b3baad302a60aeb6be03b86": "90", - "0x44dc9099d91b074b843002013672df4de9f691cf60546fa74eccafa9044a75a2": "54", - "0x4632fe8e9579f33e2e42e68811d49a09ad1af1f01a68e7ae742f765e8e797ff8": "3f", - "0x46765aab85a7ee88496ecde24f93cd5ce361b5a9fb43a2641d77bfbc97928010": "41", - "0x468eae0ffdb87a4dc081a86c494969801637f690e1e1da15fb4a9d2c78272da8": "25", - "0x47cd31a1b89686fa610642222d2da6119e54ee8ca761bd01a649e3759e47746c": "28", - "0x48ca1081e747a7f831228b894dd5fc401d64c6496a2b9e578dd3c59b8f0df2cc": "d6", - "0x490b9d550a200295b38f2456a42525d3a43c345d2fa1431e770fea9656b26723": "81", - "0x492ae6c575840126917090c30d003aec0892cd6250f877b99f33b72133b94f23": "a4", - "0x4b3120af8064823e074758c51cd6cd0954587c0d94b5b37b336261fc7aa2ddb3": "15", - "0x4b85d3d5e4e06787a4e7e6d00f4e2f6d7e0358d9e511177ab584553d4ca06038": "8b", - "0x4b916e15bdb0f5b4bccaa3447694db53cc34095b5bc26299c14a9f573bd6c758": "7c", - "0x4c3dffb6198347c61671fa1fafd5d80f384ab67a494f5c7bc7428bcb6ca5a445": "4b", - "0x4d4855c520c09f3435e2cb46ceb4d2a12df59c127a1f2e871e7e9e8203fd6ce1": "6c", - "0x4edb05f465bc71ee02c59ac9b5b50ddd974960ea2bd7e8cf7ae91c38c0b5789c": "61", - "0x50495437ee69f7b12c5d6eb55cdcd8f5ce12a2eac21a2a42a7549e9f5289b1fb": "20", - "0x506c0723b5e537632209d4a824a6073d5eccadb36b9b8717b2ecc9e2d5cacda2": "aa", - "0x51524a498a88953303410a83d67c2b8c69ddafeb99b570accaaed774fbc8583e": "b0", - "0x5423899586eb1d932cb9da03e478e1dd5d4cbbcb66d24262c7d67e543185c2ef": "84", - "0x5571137d48f7d081e62051a6bbca9d1e25c93ac6f84b7a3bc146f126ac80928d": "d4", - "0x562f817652b4478bc1e434240cd21e00774a5a1210833cbf0225273e2b98bae2": "2c", - "0x59b1019e8b01471b1dd478e65c30667d2d1780ed0c8bf5fc784b1413789b2f82": "24", - "0x5b300d53be5798f53b472dadb8966674169ff3e8d08eccb3f065bd827abd7b77": "33", - "0x5d7c0426d6595c1819b962730e5d2a44644703ebd960ec3ac51297ad937692f4": "4a", - "0x611f5b5e5ee263412fed40f169d0727f4e6e1a2bc94caf668d2bcf22cddca8c1": "3b", - "0x628887ea9304aeb7f3934543b9d14ab4e7e5cd422ba572d39d6ee10c33045345": "5c", + "0x005c4510db462e3bc91da9b8d22c23873a9f44acfaa4c50c91af1d92652e2e34": "bf", + "0x00f7ca033c24d91f8fc39cbf0edc8a43192507f93d7316f311b05eeb85921eed": "1c", + "0x02bd9d62880450596e11c3417f2644a81f7cc233a05394bbbfb58428ed53f413": "21", + "0x039a54e14fa9769f840074356dec3dbd47c3588fe71fe942fb7aec5edfd0a096": "81", + "0x04050d53dc4e38076a46f473ca2ccad11c6f0357bccc0d1fc7a16e0523892956": "a7", + "0x0678ff21f84e5213aa8d1d173b3517f8e6c3d1523959c101c75a31daa70ab942": "64", + "0x09b79212fdf6dfcd322d6aabd5ba752b962d7e575cf299112bead28ab955f4c8": "be", + "0x0a2bc3fd72bd3f8bb7f1de9a7dc9e928a7c6a831237124e65c60c25f8348af19": "46", + "0x0a5a37a1db2e0068ee9791dbe377a74c4f7bc36bc27af57ca7e49059127e8eb0": "b4", + "0x0c8e91bcf03d65aedba99f4f76d3ff8cd007668948ce12daf4dded4761c7b19d": "8e", + "0x0dcf6219856f226889a2440b388d8e15f5df0eb64a7b443f3a7a5dca7b87b0f2": "25", + "0x0e207a83fb16f4e1d86cdb18c78df10f272b8c9dfc773d8c636bf763e5d86ede": "67", + "0x0f624930606bfcd2386d583abca6ab10227d71fc1633fea53f94bd146c152b8f": "29", + "0x1098fa447b36d691c6d8801147ed65b27ab8c9667e089b59f1a1cdbe54cddecb": "6b", + "0x10ed5dd66ac107d9c27405dd97b947d333696bb8749b7a6b0890b449d3bf2238": "3f", + "0x11f0a8ac2adda075c95bbf6be534e3254dafa759f62cbcf0e91bc6f0335e70aa": "0d", + "0x142951613bf93db71eba96bb48c57a42168fcfded6491e1229ea2b8570f77e7f": "c4", + "0x165e0e0cc13ca53c5af4860637550364c5c90a512906490ace14efb534873741": "26", + "0x16bee816935475cd45501fc5fd01bf913f8ef54330a43d80ef73101a4c728b34": "2a", + "0x17f29f600f5128013ce183ac10efc609231aff556df37c8f5d6802c1240c22f4": "ae", + "0x18c688de10e38d70bcc478405df715df76bef7c2783e310b391dc958ab5b0901": "4f", + "0x18fbf0ae0e2133584c461cbd43169854c7c7e818e8b5779892da244f24d27b56": "51", + "0x19fbac480a243f8c051e10225cec11bcb7fb274fac8792ca7e36bab8e39d312c": "90", + "0x1f1860251182573015d583a718463a52050e45d795ec0f94d112206c3fd62e45": "8c", + "0x1f6ebf3e4d9c96ec86b866137bbec9bbb56d188e7126babfccc6394fdcc6a3d4": "62", + "0x1fac03facd67f44699ff86330a7f959ed3745add76d323f4832bc17c35be45c9": "9e", + "0x205bcc2489f954a3af7a16da4d6042a75fcd6eb69b848c52b3448acb24b23580": "42", + "0x228c9eabdaf185c57233f73fb31db8870dd1d46eef92c3d4c5a5eba1b8f73f00": "47", + "0x22bc306256606a63c7e6adbfdb53ac8a2579216b16bcdc452de151e042d02124": "8f", + "0x231eb803c34ec183e74b466c105b5518b554ce215bbc31bfa52c384138b8479a": "aa", + "0x23c2e06f633f91e89e0d95cf87dce47fe1cb2b95434ff45773f1fd560ad2dcf6": "41", + "0x24562ede5125f88e7d44659502457e8632f0cd29dd768d7ce337e567830c6b90": "5f", + "0x24a4daf5b3cac3bf3066902cda09da0fc862e0a6723c47981ed601782ad69079": "19", + "0x250ca62bfd18dde43e70bab089d01d591ce6ab28978434258ae1017c72f12b0a": "95", + "0x2724a489616bca201e7565382948f9832cbb927d030b1d2439c28ba1910c9bc6": "c3", + "0x27edda711baed4a613c44d8ac8678531c9938eea106e7c5649e438f3d24b8fe3": "ad", + "0x2acfc92a1cc51397c95e434631e449d83a81de91964ed735a8c8b71b35e1a626": "0b", + "0x2aee290f6f3f6c60a6985d0150eab487f9de1c47962a779be7343cc0cff270f9": "a0", + "0x2daaea9286d7edb7568e0803a61bfdb1e1506156d27e93bdf1942564850646c6": "2d", + "0x2dd51e8325001014c6845bc5ad51b134ab237f95ab18da55cabc4275b029bf3f": "5a", + "0x2df4cc92987ab73b08a3474750456382a0add51fa25f928480762f3d993f2984": "30", + "0x304daa529f8e4e88c6c20e572fd04f196d6a32a5a47361118b7f42b4602c44d0": "af", + "0x304f1607803b1445143f85e860e6837543043e4a7ce83fb6c4b98a2b57a5be44": "73", + "0x321c62425869f150c2cb7f489691c3e5cd49f7cd62d07ecbb7477c4148aaaa0b": "5e", + "0x32eac35ea119adcf265e25a03e27234688fd743982f4ea87940a85b601b4243f": "37", + "0x349c26db328204bd2527eb45003b0039d5a636f76c8849bca0b34e8fb134f505": "13", + "0x38570ba11cfca6a25bea615c7ec09ae671516245a92a5f8fc61d2e82529454e8": "6c", + "0x3c8110e03f1b54de6085ff899d0dccd87806b788d1ef3fddbca1de4c356266e7": "45", + "0x3eb32abcff52bfdf0887e9aebaeeaee4a61b76f2fbc9a183c2afc8552d46c3f6": "6e", + "0x3f410a22d042d915c50f9269337a2bc7155f86d79bbff1721d83f44153635ac2": "86", + "0x40325cfcd159fa7bf89d8c252b6ff47cbc17aafff5e7feb92014d00285484cfd": "7d", + "0x40c619388e6393f420e805451bd48b10c670de7d51e916a3ffe5ac3c96b81938": "54", + "0x412379b7f583981ea6e84408cba75ced69039e07ce9cdaa32a8a9dac997aaafb": "16", + "0x41565ae6f06f2555139f444c467d6b709b45180aa0c6b15bb5b1388d55ef952c": "18", + "0x415feb809041baabc4d9246223e40f1083963cbe1ef6dedb8b153e49d02ee7ce": "08", + "0x41b546f355dc0dd009ac5da8bfd17c8e197595c1c1f21aabbb1f3b18343a0718": "a4", + "0x427b8ffdff6454ea85c8251407144400ed4e693ffb6a74f319e0238c0e72afad": "56", + "0x4323bceecd4ef7216d5b57b9dd12ecf03842ed56d87fe43d0959436f408f44c4": "48", + "0x4348597bdcdee80c8e110d94f771eb7edce9c8691b2f90b71c0d11f729f086c9": "5d", + "0x4632fe8e9579f33e2e42e68811d49a09ad1af1f01a68e7ae742f765e8e797ff8": "3e", + "0x46765aab85a7ee88496ecde24f93cd5ce361b5a9fb43a2641d77bfbc97928010": "40", + "0x468eae0ffdb87a4dc081a86c494969801637f690e1e1da15fb4a9d2c78272da8": "24", + "0x474ee39f920d2819e9ccf6080e9b95c49fc2dfc9841cb795583b81b7497c0425": "c7", + "0x48ca1081e747a7f831228b894dd5fc401d64c6496a2b9e578dd3c59b8f0df2cc": "d5", + "0x490b9d550a200295b38f2456a42525d3a43c345d2fa1431e770fea9656b26723": "80", + "0x4b3120af8064823e074758c51cd6cd0954587c0d94b5b37b336261fc7aa2ddb3": "14", + "0x4b85d3d5e4e06787a4e7e6d00f4e2f6d7e0358d9e511177ab584553d4ca06038": "8a", + "0x4c3dffb6198347c61671fa1fafd5d80f384ab67a494f5c7bc7428bcb6ca5a445": "4a", + "0x4edb05f465bc71ee02c59ac9b5b50ddd974960ea2bd7e8cf7ae91c38c0b5789c": "60", + "0x506c0723b5e537632209d4a824a6073d5eccadb36b9b8717b2ecc9e2d5cacda2": "a9", + "0x5b300d53be5798f53b472dadb8966674169ff3e8d08eccb3f065bd827abd7b77": "32", + "0x5b6618f0def0d634d51118d232eadc26ecbc8d54a7efaa225afc472f0a611c69": "0f", + "0x5cd04d660080fb51a0cc8df0d716e1bff4eff98c887cf3274aabe7ec53dc3615": "27", + "0x5d7c0426d6595c1819b962730e5d2a44644703ebd960ec3ac51297ad937692f4": "49", + "0x611f5b5e5ee263412fed40f169d0727f4e6e1a2bc94caf668d2bcf22cddca8c1": "3a", "0x63cde520fb894276a981d2c9099bef9beb949121c1be98f3abe1b721d880899f": "02", - "0x6551251b96ca27f3af8a2c500d6dd1ea5b9ab7002b3d923b66db0493f4a7123e": "0f", - "0x677a6b432bd3361f469c2e051c8e09ea92ed0d049eb563118ff8c680fc93a2a7": "92", - "0x69626497767f58c222726a6a3c65050bcfdbb9346f9e5d146ef02bf59275b3d2": "d3", - "0x6a99e5276c6ea0c0894cfaf376fbbfdc736b359e1560a77365c14fcdf6cbbf53": "3a", - "0x6c172610999b0729fbb6bb1ba27e7a0009f1b584ad6f8307d3dcc7d24a180874": "c2", - "0x6df5983ddc40ef2c7ffa2c79bf9402568f2ee0ec7b675ca15aaa20b536d2a5f2": "7a", - "0x6e2466f20ef20cb42d216dbf4a0d934199213e9b8d75bedc9c2d3e038a587474": "1f", - "0x6f9ff000b2dc3a554bbbb882ebc7726b700eb7afea141ab16e00a057f314d0db": "a2", - "0x701960547b78067b00883157f5e9fca3bbea742385129f0db7e1e69ce445dfef": "d5", - "0x72be914df22404e1ed45a8224b52201a77605d52065746a00af5f60980fa4c99": "34", - "0x73286395f2a86bb5537d9b45ca7c681044645f31475a11d49285d6a0f028b8f0": "08", - "0x73b2b230124967b31546c7e2fedbc5ab108a537ef6d645621fe74fcdc0644b28": "3d", - "0x75eb384e56c3a3a30a408622e6f0595d30705efaff129c133effc43c3b946de0": "9d", - "0x761bf5fb1730fee0e499bb1806b9ae14394e673ab9c1dc12e95b9d3f1647cecd": "21", - "0x782a285a3a645a32202a71e713e4a813bbaef9f50ce10e4caa0122c110d86bf6": "50", - "0x7975cc1088361453b019ff19e2177b264cfea56f4c09b1a8a086f6c405dd516c": "80", - "0x7a536b71187079aaf5462b7d483063e3d25cea8e3a6790ebdbb284666fe81068": "ce", - "0x7a63090121e41c76eee07564883abe3bd839fb20a0d2513bc9bc524f6c16f88a": "74", - "0x7a9cae3647128ba14914f547c5f27444cd7325bbc37e5038abc31eea45003034": "2d", - "0x7b95105ef96b105a85277c69993f6f56602d912fe712ddf6156cdfcd8c490607": "94", - "0x7c24a68c92e3b68daa153ae82eff9be1ebbab973384e0f4b256f158f93c5d525": "1e", - "0x7eae9da1da48fe866f64de7ac5c70c8e43644867b917aa8461f84915396d3598": "a0", - "0x81260b78e72018d5773b6ba1df006b09a387fd733e59ad152c119d9848ecf1f9": "66", - "0x81607ef8d6fd479d2d0f55ec50762ee5fc35883ee5600525ce1e9ef3398d5aa5": "4d", - "0x82a4bb68f7522b711c9f22b00f9c5e050f52cb2bc5f0f50eadcb12a5f1c30839": "93", - "0x8405cb4703a08e5160e343c37d42df5f045091f6b22664b0ec3f587df18d2d82": "b3", - "0x8460e232c64e6cd9f816c02d855c892755984ebbb91592e683cda80aaba4ba22": "12", - "0x85c0042b81b23b846d1e4881b0131b4bbff774dd9bdece2e74fa92ebdb053c34": "40", - "0x85ca3ddf1ae9fb0aeadecd8109961dc5d5eaff16ef7adc672149a7826c69da97": "39", - "0x87dfa85154edde1626e3a09196eab4b60f71887ec7b50ccbbe7ec76c0be6bdff": "1b", - "0x87fc0239418406958902bcd8e059f9ddc08fb2683a4be0cfd47b1eb97418be1e": "3c", + "0x6542b8fc06728a624d10d21d45cb3fc58b811a380547cab3d5bf9e8af0de6951": "97", + "0x6551251b96ca27f3af8a2c500d6dd1ea5b9ab7002b3d923b66db0493f4a7123e": "0e", + "0x656fd2851f3badaee7500720d14437294b0fcb76990f68895b487132860e635a": "53", + "0x6760889404c1143da18e9f066f1d68de75c9a16a9d10a280d41864fd7580456f": "9b", + "0x677a6b432bd3361f469c2e051c8e09ea92ed0d049eb563118ff8c680fc93a2a7": "91", + "0x67f77810c4968b55b6ae34b927b213ced7c266fba0cf752957a861450bb43a7a": "cb", + "0x69626497767f58c222726a6a3c65050bcfdbb9346f9e5d146ef02bf59275b3d2": "d2", + "0x6a99e5276c6ea0c0894cfaf376fbbfdc736b359e1560a77365c14fcdf6cbbf53": "39", + "0x6b5eaf5499e02713812d712b5b5d3ee95e185212f6a71cc9a583a971cd861a4f": "77", + "0x6c172610999b0729fbb6bb1ba27e7a0009f1b584ad6f8307d3dcc7d24a180874": "c1", + "0x6d8f3f1992b15fdc2a757b2b99a8a3721589fc2e31188ab7620ca2884102ece5": "3b", + "0x6df5983ddc40ef2c7ffa2c79bf9402568f2ee0ec7b675ca15aaa20b536d2a5f2": "79", + "0x6e2466f20ef20cb42d216dbf4a0d934199213e9b8d75bedc9c2d3e038a587474": "1e", + "0x6f9ff000b2dc3a554bbbb882ebc7726b700eb7afea141ab16e00a057f314d0db": "a1", + "0x701960547b78067b00883157f5e9fca3bbea742385129f0db7e1e69ce445dfef": "d4", + "0x70fe2e29e879b5adeef12bf7a782c3fd7815b6fcd3defad6eea94b8fac090e8d": "57", + "0x73b2b230124967b31546c7e2fedbc5ab108a537ef6d645621fe74fcdc0644b28": "3c", + "0x74871a06c400033dfb8aee09db8282719447dc850ca097c5e240f67a2fd7fec2": "33", + "0x75eb384e56c3a3a30a408622e6f0595d30705efaff129c133effc43c3b946de0": "9c", + "0x761bf5fb1730fee0e499bb1806b9ae14394e673ab9c1dc12e95b9d3f1647cecd": "20", + "0x780fa5a814a83baf682b2f170be956308be6ce1bf84ce68ca5f3c59cc41c7c28": "1b", + "0x7a536b71187079aaf5462b7d483063e3d25cea8e3a6790ebdbb284666fe81068": "cd", + "0x7a9cae3647128ba14914f547c5f27444cd7325bbc37e5038abc31eea45003034": "2c", + "0x7c24a68c92e3b68daa153ae82eff9be1ebbab973384e0f4b256f158f93c5d525": "1d", + "0x7e93ec1b055e40d91bd222d7a3d4b0e85d09dfd561b0cd47d09a25fe183a06da": "b3", + "0x7fffa2c61f6cad00c700b65e33937fcbab57dff84b2e792d81126626970905f1": "87", + "0x81260b78e72018d5773b6ba1df006b09a387fd733e59ad152c119d9848ecf1f9": "65", + "0x81607ef8d6fd479d2d0f55ec50762ee5fc35883ee5600525ce1e9ef3398d5aa5": "4c", + "0x82a4bb68f7522b711c9f22b00f9c5e050f52cb2bc5f0f50eadcb12a5f1c30839": "92", + "0x8348faa37f759999e3e7d161ca60aeee74b5c55075e626534a26da3aa8962a71": "43", + "0x8405cb4703a08e5160e343c37d42df5f045091f6b22664b0ec3f587df18d2d82": "b2", + "0x8460e232c64e6cd9f816c02d855c892755984ebbb91592e683cda80aaba4ba22": "11", + "0x85ca3ddf1ae9fb0aeadecd8109961dc5d5eaff16ef7adc672149a7826c69da97": "38", + "0x87dfa85154edde1626e3a09196eab4b60f71887ec7b50ccbbe7ec76c0be6bdff": "1a", "0x881a8434f98b103a2ee48727304618ca54234f1474c44bef70c21accc4dbc0a7": "01", - "0x88edc52ba848622b1d92e73d2c311c1c83420986c621546fbadac23c3428c570": "ca", - "0x89c17d9392b73a55738ba19aae192f2f9c5612dc8bd803ca23b9c2fb9c309e56": "0d", - "0x8a38792846734575025e5114061b62006064b0636caf6733294eb26895bda2ac": "4f", - "0x8a76d1e2fd58cc0018aa306e83990d74d16ba9aeab4794595fc72551f0465476": "70", - "0x9038344c39b01167bfa8e99a6425d34bca24c27ceb191e8eba70ab5a8f719ce5": "11", - "0x905cfe802dc4c667312ea08fdbe97798b88cfb11049ade2b18ad9001e8b6dd7c": "14", - "0x9138868b39f601dde19efa6e9a154230a51805e9a6cabaf28fed5163aea58328": "5a", - "0x9225354562a563158ba2ce0e86cfeed7fde0ed27c77342aaea09551b9c00ea19": "a7", - "0x927e4ce70caf344a9e108ea8803cd49216852109c3e4922dfed2680e9f24361d": "86", - "0x92da59b68bfd8a9c1cb1ca6a302ee966f829f2727a36823b0dc7fddf7790a108": "8e", - "0x945c01f307d13fcdab0a2a3a4c4bd5ebb69a00c3dd59896a959664e01ce10695": "83", - "0x94605c950838b2b0b1ce76f58acfb91a94c2aba787d02add7187360989745a4e": "6b", - "0x951b3b37c2a87b5a67918e750832a50c5565298a35390bad3ffffadb2f7b4afe": "77", - "0x9575996f3ad6e9709d7122224335451a59395327d297fd7967004e8dc1391308": "72", - "0x96c0d209b0a5b8b06947cc4c7ca723df55c5b972711b6c08ec7b9c393fa6e8ea": "b4", - "0x970a64830f255bfc38886621b37a7f1a7284bad6c4a04b6a2442ad212e19a6a2": "37", - "0x989e02934facff928d8e788f174ab7d48838c62b07d420a8527cb7eaabdbe91b": "b6", - "0x9ebbf91a66183d0d37b03faf46daf8fe238c1aa2b24e6663dc14e50557d432c7": "67", - "0x9f5941a130f6c2ff98ec21bb2517998dc5c8512230dcb37ede3cb8a4694175ab": "c0", - "0xa0634d80c0a702c2b06dfe60ace0d8f788b99406f1d2ac44ad3a26faa3fc1464": "1c", - "0xa0c2e429d47e77e9b7c98c1aa4aefb731206f41b64a6587678905a86d14a7d75": "d2", - "0xa22721490cd06a0e77bc2b085bb4d57e7e5e0b459a2afc65ec4697d51926e1b8": "59", - "0xa344ff63ecb6c6cbbd711b06a84844147910ef79a57679958664abf4af9938d3": "c6", - "0xa3e65c2aeaf352e79173be13e572f691d8d75ea1064610b8418246d95bcc421c": "79", - "0xa41cb4f2ab2731a8889754ae1a340c666cb8107b497b922073df80a9b255e31b": "06", - "0xa6602e59691514abf1ee46e71c1f4c7411eddb76e687f8f4aaa1ebf305b97f6c": "b1", - "0xa6d01173df2aa437fb0118d181e64a8f8e05713fc01c42fbfd2250516639ae95": "07", - "0xa791ce367786fdc4c5216c8b94dfe1076746e058166dabda25b5e6a3266ce857": "76", - "0xa90642da2f095eb8128f01811cb553162395cfcecbe5b077f12c62a1effa7c82": "99", - "0xa99b8fb9a23a3a24ef3330a371d081c4158ea1b75c9af3c2bda5440857bc8237": "c9", - "0xab15322a52f3de5dda0553d7abbf171524cabb9c97dacea8806c750361d472df": "be", - "0xab5140d25dce39c42d511dba633cde87b45465d48aa4ec211b27de998abbadfc": "cb", - "0xac748acc1af284e25d06434a8c1bbbf75bb8154a06f53f75d4f36edb656a49ba": "5d", - "0xaf1c2654b2e98e9ffbb02f14d88617a245a9a1679162be29776a4836185dc2fa": "62", - "0xaf1f0d50933e49dd24b61a24c670809a5b875e3b746862636288dead8579dc4e": "2f", - "0xafc44d58dec637206e79248a528189c68365e20afc23410475deb5e5dc69c82a": "89", - "0xb2416e7ca12669406e6cd5154ad5177841b7d0cddeb2760249c28e1aa151f970": "0a", - "0xb296a1364260e1c8d47bcf2239f26b6b909a0a7687250af4af545eff0ea95ed7": "c1", - "0xb36949b816cb2ec4ab90f345d0bed84f55b8fcbeffd22198724c45d8a30b20a6": "51", - "0xb3750ecb88b6e11e5f686cbacb3d24e61396cef4a1525b30d5a30edc4b3fdec0": "69", - "0xb50dcc47e811f76cc69369cb397936a5c70520a51f33b84f1b54591da145e823": "b9", - "0xb5e95d5da3e73f937bfbc9b4990bfdbd865c6d3a3b50478657e20b507fac7541": "75", + "0x88edc52ba848622b1d92e73d2c311c1c83420986c621546fbadac23c3428c570": "c9", + "0x89c17d9392b73a55738ba19aae192f2f9c5612dc8bd803ca23b9c2fb9c309e56": "0c", + "0x8a38792846734575025e5114061b62006064b0636caf6733294eb26895bda2ac": "4e", + "0x8d866e9225b61c55bb3e8d27f9eed41faec221f3eb1ea322661ce1956885d021": "83", + "0x9038344c39b01167bfa8e99a6425d34bca24c27ceb191e8eba70ab5a8f719ce5": "10", + "0x9138868b39f601dde19efa6e9a154230a51805e9a6cabaf28fed5163aea58328": "59", + "0x9225354562a563158ba2ce0e86cfeed7fde0ed27c77342aaea09551b9c00ea19": "a6", + "0x927e4ce70caf344a9e108ea8803cd49216852109c3e4922dfed2680e9f24361d": "85", + "0x92da59b68bfd8a9c1cb1ca6a302ee966f829f2727a36823b0dc7fddf7790a108": "8d", + "0x945c01f307d13fcdab0a2a3a4c4bd5ebb69a00c3dd59896a959664e01ce10695": "82", + "0x94605c950838b2b0b1ce76f58acfb91a94c2aba787d02add7187360989745a4e": "6a", + "0x95104e47e1982aba633477f377b1511396c3fe83600224bcb0c78949be705b33": "07", + "0x951b3b37c2a87b5a67918e750832a50c5565298a35390bad3ffffadb2f7b4afe": "76", + "0x9575996f3ad6e9709d7122224335451a59395327d297fd7967004e8dc1391308": "71", + "0x95eac6698d094a89aa0fbdbe4dfa56a92b928657bfd2a6374fdd5ffadfd8ebe5": "5b", + "0x970a64830f255bfc38886621b37a7f1a7284bad6c4a04b6a2442ad212e19a6a2": "36", + "0x9739ae7192ad23a41778719941582886701a0830589c7ebfc5db094037635d82": "1f", + "0x989e02934facff928d8e788f174ab7d48838c62b07d420a8527cb7eaabdbe91b": "b5", + "0x9a9b2b0f17eb8c44f3d00dc6cd8475e9783cc715b3779af9170ddeed0221bcf2": "a3", + "0x9ebbf91a66183d0d37b03faf46daf8fe238c1aa2b24e6663dc14e50557d432c7": "66", + "0x9f569f15edd7832cd57a6cff95e09ab162c23f3dda7e729a74b2f41624294998": "8b", + "0xa0c2e429d47e77e9b7c98c1aa4aefb731206f41b64a6587678905a86d14a7d75": "d1", + "0xa22721490cd06a0e77bc2b085bb4d57e7e5e0b459a2afc65ec4697d51926e1b8": "58", + "0xa344ff63ecb6c6cbbd711b06a84844147910ef79a57679958664abf4af9938d3": "c5", + "0xa3e65c2aeaf352e79173be13e572f691d8d75ea1064610b8418246d95bcc421c": "78", + "0xa41cb4f2ab2731a8889754ae1a340c666cb8107b497b922073df80a9b255e31b": "05", + "0xa6602e59691514abf1ee46e71c1f4c7411eddb76e687f8f4aaa1ebf305b97f6c": "b0", + "0xa6d01173df2aa437fb0118d181e64a8f8e05713fc01c42fbfd2250516639ae95": "06", + "0xa791ce367786fdc4c5216c8b94dfe1076746e058166dabda25b5e6a3266ce857": "75", + "0xa90642da2f095eb8128f01811cb553162395cfcecbe5b077f12c62a1effa7c82": "98", + "0xa99b8fb9a23a3a24ef3330a371d081c4158ea1b75c9af3c2bda5440857bc8237": "c8", + "0xab15322a52f3de5dda0553d7abbf171524cabb9c97dacea8806c750361d472df": "bd", + "0xab5140d25dce39c42d511dba633cde87b45465d48aa4ec211b27de998abbadfc": "ca", + "0xac748acc1af284e25d06434a8c1bbbf75bb8154a06f53f75d4f36edb656a49ba": "5c", + "0xaf1c2654b2e98e9ffbb02f14d88617a245a9a1679162be29776a4836185dc2fa": "61", + "0xaf1f0d50933e49dd24b61a24c670809a5b875e3b746862636288dead8579dc4e": "2e", + "0xafc44d58dec637206e79248a528189c68365e20afc23410475deb5e5dc69c82a": "88", + "0xb2416e7ca12669406e6cd5154ad5177841b7d0cddeb2760249c28e1aa151f970": "09", + "0xb296a1364260e1c8d47bcf2239f26b6b909a0a7687250af4af545eff0ea95ed7": "c0", + "0xb36949b816cb2ec4ab90f345d0bed84f55b8fcbeffd22198724c45d8a30b20a6": "50", + "0xb3750ecb88b6e11e5f686cbacb3d24e61396cef4a1525b30d5a30edc4b3fdec0": "68", + "0xb50dcc47e811f76cc69369cb397936a5c70520a51f33b84f1b54591da145e823": "b8", + "0xb5e95d5da3e73f937bfbc9b4990bfdbd865c6d3a3b50478657e20b507fac7541": "74", + "0xb66fab7dddd4d16174b227a6f958d7ba2ae8ebc52d763b02c1ff944362755e6e": "17", "0xb8d28e7b703baf999848ecbba44026cb6479b3f0466037bcf2221ffc3f8549f9": "03", - "0xb9a419e057752857f289694284890ff1fcbfbe5d736b5e52bb8568e077f49883": "cd", - "0xb9f03edd278ccfc90e45785c1fea3f972618a32899f836dd4fe0e63eaf8c7c40": "30", - "0xbae4f13d358194452066fc1305964decaafbc9c56a2fd16936d25d9521a57a19": "b2", - "0xbdfd2b337ff30e9e15c09313bf796d3c75177943e0aa0445f479fbd2dd5c1d6e": "3e", - "0xbefb4ff6aefe6c4d85158d11057517eb9cb1e1cae3e9d2d9c90ff40b2cceb546": "6e", - "0xc452b6d808f45af81c3310dcf94a1704359eafc34709c45b0c7b95adf4cd02af": "9c", - "0xc4f8d20ccba0b50d46d9c87f28cebf8c165fced694a2b34412a4b6153b987a17": "78", - "0xc558392238c2d11cdd04a6ae37065f3541a22140500f92c0d8006ff95e8df595": "cf", - "0xc668aa05d66c2f88a95db12354386f3b6a1722a98aade506e117201f2fd0511f": "c8", - "0xc6bea923a54f8cf570edfddbda896a2ebf7b53d33b1dac8914ed024ff0621f18": "bd", - "0xc8bbb420578d2d80897ca392a55fce5e4834f1d641472c0fd6a9698b7a8e7866": "a8", - "0xca27d6fc8e6016df20a295f26b57b2f6ac7a8cec98224571f416ea88c0ee7b97": "a9", - "0xcb35fbd0ebf79655e6882326c19855ff90befcd2e589418566ec2e3a1efd65d8": "85", - "0xcb55d89f2ee070d017b426876d6072d91c2a7311ade9a1bed2f8200127ec380e": "04", - "0xcd78e90ed1705eeff092f3df07b16a382082e9c388030ec3188daefa57a731dd": "7d", - "0xce285eb20810f2d026bc0b62faf3735df2193835ffd85df244ecc2df24f43b00": "c3", - "0xce87527a0ad3ddb4d0d57d8077e84d48a6f3810f2a5672143d3b6969b0f86d6e": "97", - "0xcea8a961664f986542ebbc496878d052736682831cd7847bc769ae16e9eefb65": "9a", - "0xd0e6005ee39e02d654cc2db358df9659d8265e24d7362df88a7df9200438f6ba": "45", - "0xd1a0570d06c0cc4198b4475cb892ec41ca3239ff670666bcd97faeb62c1db6bb": "ad", - "0xd2dcfcdea157f70f8422558eb02bdc6a503cf24126f8f2dc2b52a644f5f02271": "68", - "0xd314fafd686fcd729a24ff511ae5e19248bd6ac6de8c28c79918df72de20e63e": "73", - "0xd34d30c2584168001b907965762f784cb4337381aa8090ae36bc66bd515849b5": "48", - "0xd5eb8e9a486b23e10cf0092ca8690e7bd6d6c90932960cdfa5da36d1e1f20423": "71", - "0xd73688caabee79f6ecf3a0b092d26e639b7e486e45c00031db80d3d7abe8c683": "7f", - "0xd75c9abb1414054ca164bba2f8c09917fb90c24789feaa311ee34a0b3f4a82f0": "23", - "0xdbc7a073eb54d33d8e6dec5b0b635a874204bda1c23234ff0cca057ff8ed77f5": "29", - "0xe067f85eba81feba79bf640415c11ab4448d5cc4a41652fc0a200be4d2661786": "7b", - "0xe0fa1a4e967a01f4a84aa6715b0977cc111d3cc0834c5d04f0f1d87e0d561a71": "d1", - "0xe207f028cce1624a1fc76c56f1794c2704a692c1f214685291d618e40733ff1b": "4e", - "0xe2a0b166c03b200234eacf5eaf9ea11746c9bfd00e72f55d8cab76e0eca7195a": "8a", - "0xe3cb3b98042d005e52e8bbbf49b25e11be63ec7c63ae5a5043e44c545fce633e": "9b", - "0xe4c7ff156c2f31d046217715d0f193c8a6b3a7af6341d6abe0e28c49d1210638": "a3", - "0xe5f4774cc356a99594f072de9e8113739c65fb51b5d0fef3f40627cac02dd963": "9e", - "0xe6a5227fabefc934ddc0a3142a50747ad1157ad0829ec0bbc389d5e22e3282c2": "36", - "0xe70ed54757ba10a0b95454f6483d3d2e11613828f13d57d50b8a3a98e2c8df1c": "53", - "0xe7d55978188f31ab090b1f10d8d401a66356b11ca8c296384a0a51e36e6ec11f": "16", - "0xe865c3418b47b88e94c28956b326a799298fb44c62a7a6bb55fd991f7c0442ca": "b7", - "0xe891146f52235abb9f53919fc0e41a678d5a8a807a2247177d67539a2bcc3d1a": "ba", - "0xe8a78860d5ffde377f4eb0849fe59ed491d4a12fd51edebc2bceab3549d83463": "56", - "0xe94d0b2545ec05c3ce3431c4d45c3b62fcab156563e8308fae1ebd27a2810c1a": "0b", - "0xec200bf1cc6a2c5d58960dc3476cc4794ba1a9fca2ac3d09b63e7811b7299c3d": "bb", - "0xee0b894f33a9643c94e4e2237077260f4191c5bf6bb3c17a2212b86af6f67df4": "d7", - "0xee181b97fd68754f6245c655a0a0686e8d12aa4eac5f1d059e7e3b8d6a924073": "60", - "0xefcb86facadbec33b8779888975eacca8f44a9073a845521617f1fb30e1ac818": "10", - "0xf0ca8a88096a033508993a424f4e40ee1d800f62390dfe4ed5dd74a0f6785e25": "64", - "0xf26b2f780c4b92b3f15f1d6e90f7d5a176b58eefea6f0d9cf2f8a0d1f86a139f": "c7", - "0xf77c749ecb156f605e2334b14caea388100bed09b4c16579c952a96e90355629": "05", - "0xf8b0a158a81e46d2f46d268e7726acaf7c33fc321c36f6157f07abbf7fa49e5b": "35", - "0xf9b648439e7b876f9aa1b178fc6381f44bcaee23754d8da33b2d44e78cf47bb1": "6a", - "0xfa29cff134420b6526f434ab690a9c3a140aa27b8479ae3d8d83b6c799acbc23": "13", - "0xfaca663a6ed04f52c0e7a8981cb438545f614a2cf84f9077659d0fce0045cda7": "32", - "0xfb2772a3127ac292efa3da20fad64d950bf973fb209892fdf834766aa8cdc3ba": "95", - "0xfc6dfdea8f35e8af49faf38c0164a3deacd65c3927eeece6023868f32fd382a7": "cc", - "0xfd6fc192aa03eedb6505372aa1dcda93dd186fb3eded0bcafdaa4f2829fe43b5": "a6", - "0xff5c526fc525d03cecce39f4ec167af09f80525e2d44e60ee4df33a357b24ed2": "38" + "0xb9a419e057752857f289694284890ff1fcbfbe5d736b5e52bb8568e077f49883": "cc", + "0xbae4f13d358194452066fc1305964decaafbc9c56a2fd16936d25d9521a57a19": "b1", + "0xbb8f646a16b72f34169bcd82f0c023b582d2ae9f395fb59f9e022e6caacd83a0": "ab", + "0xbdfccf10ce95236042860c90f84756794940d0d15da20833f8bdc1b921be3efa": "b7", + "0xbdfd2b337ff30e9e15c09313bf796d3c75177943e0aa0445f479fbd2dd5c1d6e": "3d", + "0xbefb4ff6aefe6c4d85158d11057517eb9cb1e1cae3e9d2d9c90ff40b2cceb546": "6d", + "0xc558392238c2d11cdd04a6ae37065f3541a22140500f92c0d8006ff95e8df595": "ce", + "0xc6bea923a54f8cf570edfddbda896a2ebf7b53d33b1dac8914ed024ff0621f18": "bc", + "0xca27d6fc8e6016df20a295f26b57b2f6ac7a8cec98224571f416ea88c0ee7b97": "a8", + "0xcb35fbd0ebf79655e6882326c19855ff90befcd2e589418566ec2e3a1efd65d8": "84", + "0xcd78e90ed1705eeff092f3df07b16a382082e9c388030ec3188daefa57a731dd": "7c", + "0xce285eb20810f2d026bc0b62faf3735df2193835ffd85df244ecc2df24f43b00": "c2", + "0xce87527a0ad3ddb4d0d57d8077e84d48a6f3810f2a5672143d3b6969b0f86d6e": "96", + "0xcea8a961664f986542ebbc496878d052736682831cd7847bc769ae16e9eefb65": "99", + "0xd0e6005ee39e02d654cc2db358df9659d8265e24d7362df88a7df9200438f6ba": "44", + "0xd1a0570d06c0cc4198b4475cb892ec41ca3239ff670666bcd97faeb62c1db6bb": "ac", + "0xd314fafd686fcd729a24ff511ae5e19248bd6ac6de8c28c79918df72de20e63e": "72", + "0xd407a81a8c9c2573926ab54ecd5ee3eb6f1853de6b11142313df08897b6842e2": "bb", + "0xd5eb8e9a486b23e10cf0092ca8690e7bd6d6c90932960cdfa5da36d1e1f20423": "70", + "0xd73688caabee79f6ecf3a0b092d26e639b7e486e45c00031db80d3d7abe8c683": "7e", + "0xd75c9abb1414054ca164bba2f8c09917fb90c24789feaa311ee34a0b3f4a82f0": "22", + "0xdbc7a073eb54d33d8e6dec5b0b635a874204bda1c23234ff0cca057ff8ed77f5": "28", + "0xe067f85eba81feba79bf640415c11ab4448d5cc4a41652fc0a200be4d2661786": "7a", + "0xe0fa1a4e967a01f4a84aa6715b0977cc111d3cc0834c5d04f0f1d87e0d561a71": "d0", + "0xe207f028cce1624a1fc76c56f1794c2704a692c1f214685291d618e40733ff1b": "4d", + "0xe2a0b166c03b200234eacf5eaf9ea11746c9bfd00e72f55d8cab76e0eca7195a": "89", + "0xe3cb3b98042d005e52e8bbbf49b25e11be63ec7c63ae5a5043e44c545fce633e": "9a", + "0xe4c7ff156c2f31d046217715d0f193c8a6b3a7af6341d6abe0e28c49d1210638": "a2", + "0xe5f4774cc356a99594f072de9e8113739c65fb51b5d0fef3f40627cac02dd963": "9d", + "0xe6a5227fabefc934ddc0a3142a50747ad1157ad0829ec0bbc389d5e22e3282c2": "35", + "0xe70ed54757ba10a0b95454f6483d3d2e11613828f13d57d50b8a3a98e2c8df1c": "52", + "0xe7d55978188f31ab090b1f10d8d401a66356b11ca8c296384a0a51e36e6ec11f": "15", + "0xe865c3418b47b88e94c28956b326a799298fb44c62a7a6bb55fd991f7c0442ca": "b6", + "0xe891146f52235abb9f53919fc0e41a678d5a8a807a2247177d67539a2bcc3d1a": "b9", + "0xe8a78860d5ffde377f4eb0849fe59ed491d4a12fd51edebc2bceab3549d83463": "55", + "0xe94d0b2545ec05c3ce3431c4d45c3b62fcab156563e8308fae1ebd27a2810c1a": "0a", + "0xe9bc0af4e1917255f83262d4d61622be8b86fcb24a5810c7b592dd6da6861d56": "2f", + "0xec200bf1cc6a2c5d58960dc3476cc4794ba1a9fca2ac3d09b63e7811b7299c3d": "ba", + "0xecb9f805cd314a9aef8cf2c51ccee54704c5cdcb0cf745bd3411c0cfd1bb2381": "63", + "0xee0b894f33a9643c94e4e2237077260f4191c5bf6bb3c17a2212b86af6f67df4": "d6", + "0xee9be26249f0e23118ea14c2c58ab3fc7e42e888edb4b1de6de4a03e0b793b00": "4b", + "0xef03c0a4bb7099df0152e975b6c3172e7f47225648d2754efc7e81f2d1ed71c4": "93", + "0xef429d45b992d9e888f08c3038963cbf4aa2b1e5b209fff23a8299c595430277": "9f", + "0xf199b2d65bb711d578312320d210574bcc79d63c841d7dcf96ee3604140a7353": "2b", + "0xf26b2f780c4b92b3f15f1d6e90f7d5a176b58eefea6f0d9cf2f8a0d1f86a139f": "c6", + "0xf4770d7a56ee02b105688173dbb647939e9168262a4d14b9f6a6efe19b647388": "7b", + "0xf4c5c0fe94f1f62a752dc2b883078110c5753ac15ab5fe6f425821fb61963118": "7f", + "0xf5acd98a17a3425f113b869e0dd03f82ee696401d2e7f59e8902610150a95a20": "23", + "0xf77c749ecb156f605e2334b14caea388100bed09b4c16579c952a96e90355629": "04", + "0xf8b0a158a81e46d2f46d268e7726acaf7c33fc321c36f6157f07abbf7fa49e5b": "34", + "0xf9b648439e7b876f9aa1b178fc6381f44bcaee23754d8da33b2d44e78cf47bb1": "69", + "0xfa29cff134420b6526f434ab690a9c3a140aa27b8479ae3d8d83b6c799acbc23": "12", + "0xfaca663a6ed04f52c0e7a8981cb438545f614a2cf84f9077659d0fce0045cda7": "31", + "0xfb0e917bcfc6a3ba3c079d0f19d7f2ede25ac596e725d016e0c31dbc8b390508": "d7", + "0xfb2772a3127ac292efa3da20fad64d950bf973fb209892fdf834766aa8cdc3ba": "94", + "0xfc4b6ee72c1b0e13d4d0c218aa48c6233d313507fb55d142e7a2951f0b7c07d5": "cf", + "0xfd6fc192aa03eedb6505372aa1dcda93dd186fb3eded0bcafdaa4f2829fe43b5": "a5", + "0xfef2849e52369d74814504a0592be1651fc3581e54b57283fd34053344624f83": "6f", + "0xff442992eff2fa28cd13c50239c9e15f907488f574ade0e75cdba2cfdb26c480": "d3" }, "address": "0x7dcd17433742f4c0ca53122ab541d0ba67fc27df", "key": "0xbf1f52c702c40589735c4b038bd94e04268a58c35afad63bb16c071d62d2e23d" }, - "0x830544a6A94aa496947fB7e0182d64FC90192AFc": { + "0x7FA65F7792d36FD0282DFd7398347317045DaD39": { + "balance": "0", + "nonce": 1, + "root": "0x2084e24f0110a0fd1c5b1283ba04925cf5bbfcba34c26c8f2ed36d80649fa105", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "storage": { + "0x00000000000000000000000000000000000000000000000000000000000000a3": "a3", + "0x00000000000000000000000000000000000000000000000000000000000000a4": "a4", + "0x00000000000000000000000000000000000000000000000000000000000000a5": "a5" + }, + "address": "0x7fa65f7792d36fd0282dfd7398347317045dad39", + "key": "0xf7c5aded54c81097690f975dcb3cbfb114a997c0f5ce75d2e6acda54986b88b7" + }, + "0x7d53f4E89992aBf93C95467Cb2e0E1Be141eF844": { + "balance": "0", + "nonce": 1, + "root": "0x22330f48a508599789a782a57c07ba7f7fc9b9ca9ce9e3331ea36127d1a283cd", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000169": "0169", + "0x000000000000000000000000000000000000000000000000000000000000016a": "016a", + "0x000000000000000000000000000000000000000000000000000000000000016b": "016b" + }, + "address": "0x7d53f4e89992abf93c95467cb2e0e1be141ef844", + "key": "0xc57a0482220d36c87a41479e62e55decd08ec51a10116b3284b90bbf5b2bcc2a" + }, + "0x7e42Fed5f877BF877BfF6A6a5aa02f1dFf69a9d0": { + "balance": "0", + "nonce": 1, + "root": "0xbaebe83bb6a87dca34a07a0ee1da5c038e50ea59754f4c3027cda3ef209dc9fb", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "storage": { + "0x00000000000000000000000000000000000000000000000000000000000001cc": "01cc", + "0x00000000000000000000000000000000000000000000000000000000000001cd": "01cd", + "0x00000000000000000000000000000000000000000000000000000000000001ce": "01ce" + }, + "address": "0x7e42fed5f877bf877bff6a6a5aa02f1dff69a9d0", + "key": "0xbec5e51999dfacb259afcce7ae4a1d085bb27277793cda96a079bda642d15441" + }, + "0x81bda6e29Da8c3e4806B64Dfa1cd32cd9C8Fa70e": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xfcc60211b6d08e046c0587a81331df89a1fbab58efa0b6acf075c2ded4ea62d9", + "code": "0xf5f4f145f249ec8fd417deb07ebba6ad75c6c8d3b9078a26ec16edbc5b4cb13241a2d376d1cc7cfee6058e74f6bf0c848c6567d84037dbd084e5b28dcf7825c22f13198cc353a2bcdeea8950fb4fa16e1bfa845cff6c4dacc918c492308fe106404cbace760d55701d2fa2fc1576ec2fb0de43f2334f9dcaf513296946815da2bc7fc19ff06ab7008e625df9a00cd9ca64bd66c2f214458996515c1bec5bd2dfbfda5199faa78deb0e4a0aea26d0cd85d6b8a20455bdf7dcc586341fa10c60391c2768f4ba3e934fd0e312a0beedb01d78534b2c4064bfbf23f299e3773d9eee9b46cd7f09bcd8d210c8707cabc088fc81dbe986970bb1ba06a73ce0520c5465", + "address": "0x81bda6e29da8c3e4806b64dfa1cd32cd9c8fa70e", + "key": "0xd5e5e7be8a61bb5bfa271dfc265aa9744dea85de957b6cffff0ecb403f9697db" + }, + "0x828a91Cb304a669DeFF703BB8506a19EbA28e250": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0x830544a6a94aa496947fb7e0182d64fc90192afc", - "key": "0xf1b58012b0f270cdd9c1add82f593179cef3f8360950aa5d1fe5de28677e73a2" + "address": "0x828a91cb304a669deff703bb8506a19eba28e250", + "key": "0xea810ea64a420acfa917346a4a02580a50483890cba1d8d1d158d11f1c59ed02" }, - "0x838CD8572D61ec23308cfb4f1f243B796a7f310B": { + "0x82C291Ed50c5F02D7E15E655C6353C9278E1bbec": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x30bfd822c5b2b88f07fc3988e7e78f96e22799091c6d1ba6e7cd6664669dddbd", - "code": "0xdbacf0626d1d814fd5d504189e5d5800cfd88bcf349ba6ba602b922e791aad56ccfe5d2425df2e3cbe8d7f0532b0a6b9f9be4a330be5d04c4d5f0c47290ef43ed67c34e8612c0557ad77818f63b0e965e2a918f477c43c5c407335625c16a68dfc647ae7caefab63c0c1f704d0ea4ba636fcfdf39fd0af454789b76cbc52f42e66b0a0b12995e6441f9cb2914565120c2e684eba0fba8b96acd03665e0cd074866e8088a238d9e0c32ad5efd7ee9df89e732a9c593a90146e4811d165f76da25de0705a5a4491cc4250dfb52b96473113e661025e4c03285e60a4cabadf93d8d256808232eb07d2271c0909d50bea3c5ea7ccbf9eef8f2443bdaee0dcef83c94", - "address": "0x838cd8572d61ec23308cfb4f1f243b796a7f310b", - "key": "0xd6167bc4042666c07f4e56f51aabd2c4362fa4f6c83ca79a912bdf0a8e779475" + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0x82c291ed50c5f02d7e15e655c6353c9278e1bbec", + "key": "0xa9970b3744a0e46b248aaf080a001441d24175b5534ad80755661d271b976d67" + }, + "0x82EF715853ef1959f9e4628C253F5582d5e8CbE6": { + "balance": "0", + "nonce": 1, + "root": "0x8291966c55b7b20309783e4ee760f8ec2e4082e14fb79435a395c4601f16cd6c", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "storage": { + "0x00000000000000000000000000000000000000000000000000000000000000fb": "fb", + "0x00000000000000000000000000000000000000000000000000000000000000fc": "fc", + "0x00000000000000000000000000000000000000000000000000000000000000fd": "fd" + }, + "address": "0x82ef715853ef1959f9e4628c253f5582d5e8cbe6", + "key": "0xcee41784a4f2beac87ec4f132d240d8147ab4f075e723ca30b11c150bec2b94b" }, "0x83C7e323d189f18725ac510004fdC2941F8C4A78": { - "balance": "1000000000000000000000000100000000008", + "balance": "1000000000000000000000000100000000006", "nonce": 0, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", @@ -3105,13 +3059,47 @@ "key": "0xb17ea61d092bd5d77edd9d5214e9483607689cdcc35a30f7ea49071b3be88c64" }, "0x84E75c28348fB86AceA1A93a39426d7D60f4CC46": { - "balance": "1000000000000000000000000300000000009", + "balance": "1000000000000000000000000400000000009", "nonce": 0, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "address": "0x84e75c28348fb86acea1a93a39426d7d60f4cc46", "key": "0x5162f18d40405c59ef279ad71d87fbec2bbfedc57139d56986fbf47daf8bcbf2" }, + "0x863AcCE24e84A75b149e91470591225488Aa202B": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x5fc20dd0c1702289c1ebac32a00d38d5f3ab099aa4a62f756fc6740009dee488", + "code": "0xa00efdb534f3a036f288f1ed093d8ee3c505b1830f5e7bdcfba3bc6cef961d6725c7e231d8fa316d46e8b9b45ae34c96362447a0121688b5fc8977a621c28ef207353636cb00f21a886a8dbc179f462dc0eba7e397de30c4590b03532e23d3afc7e9ee3fcc756aafa61501a80648b24edd970a6d68f0424eebc857c57773f53e69a50b34f46ecf75aea648265eec0fff27688b0100a4a90d38989180db6ad3816b588810da3f66df779850de767250d6b354379a4ea55b612520748b864937ea6a37856c397693f1de1578faa1274997837d54cde3a4c322a3787c67642a2544338702c004713ec1a08e6b92548f894b51c234cd2945f4ef5e08199c618d1034", + "address": "0x863acce24e84a75b149e91470591225488aa202b", + "key": "0x5788e3a5115bdb419afcc4cc415404c53d8e15aa647bb459e6f01bbcbe80ee3e" + }, + "0x8642821710100A9a3Ab10cd4223278A713318096": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xb05730ba4681896d76c307f28a0744f22990f47580134eb2175db1f80bbabfa9", + "code": "0x5a13bb8468ff08ea1be5434a63d147aa9a75598c1472c6c3689ce0cc412fb137e2497937f87a756db742358161519471672c61e08459ad8650f94ad10a7dd95e33404a00df2797ca129732dcec6569f4fb1a987d4ec0b4118a6130ffa089264f2365e0ce0defc8344c79251e10c13bda9f60f98c7b76a120b28b1a0e8fcfc3610b452314837379af560040da1e59ab48282b9d8f6b5a9755a333ca81fef097517409e4ab0136215a31862fc94b13e16094495561fa1aa10a04fdf23371b35b72bf66e9c8a6f2fac97b772c6cb459729a5fda5bde7ee9c2761261bd7c12b4bf4018560b1f83759e5d4d88e0ae0bb6a6669899a83188652f373acd98f90e0e46a8", + "address": "0x8642821710100a9a3ab10cd4223278a713318096", + "key": "0x4fbc5fc8df4f0a578c3be3549f1cb3ef135cbcdf75f620c7a1d412462e9b3b94" + }, + "0x86b59E8a12C2BB58142FE270c534eA0AB3aFEe2d": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0x86b59e8a12c2bb58142fe270c534ea0ab3afee2d", + "key": "0x76f24004f2230993f7843ed74840da1c520917d1f6a2e19d74ba58e52bd60a26" + }, + "0x87610688d55c08238eAcF52864B5a5920a00B764": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0x87610688d55c08238eacf52864b5a5920a00b764", + "key": "0x80a2c1f38f8e2721079a0de39f187adedcb81b2ab5ae718ec1b8d64e4aa6930e" + }, "0x882e7e5d12617C267a72948e716f231Fa79e6d51": { "balance": "0", "nonce": 1, @@ -3120,49 +3108,31 @@ "address": "0x882e7e5d12617c267a72948e716f231fa79e6d51", "key": "0xd2501ae11a14bf0c2283a24b7e77c846c00a63e71908c6a5e1caff201bad0762" }, - "0x894a5b01c2d125723dC24027397b84fc2C12f98e": { + "0x891baAf101B07222bbCF62e7DC519199d09255b0": { "balance": "0", "nonce": 1, - "root": "0x74e31aae08ca993c66e057308da6ff98cfa7397ef38e32b8c80bc3d0b2feed44", + "root": "0xda6d6392c07f4f8ea202d6b89fa3df0438cbcec6ae5a3b4a1a46e961b50024a3", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000239": "0239", - "0x000000000000000000000000000000000000000000000000000000000000023a": "023a", - "0x000000000000000000000000000000000000000000000000000000000000023b": "023b" + "0x00000000000000000000000000000000000000000000000000000000000000cf": "cf", + "0x00000000000000000000000000000000000000000000000000000000000000d0": "d0", + "0x00000000000000000000000000000000000000000000000000000000000000d1": "d1" }, - "address": "0x894a5b01c2d125723dc24027397b84fc2c12f98e", - "key": "0xa0e89baa990383f786b92798b476b4168593965a50467398bc287826e453357f" + "address": "0x891baaf101b07222bbcf62e7dc519199d09255b0", + "key": "0x1f45298df4f084a080ff705ba3b4b42ed8583bc310131bb496b4d2150c732e1e" }, - "0x89755Db2D43ED07322030C44268CFa774A05213F": { + "0x8A7EA0e207F38aFCE6C3b2A1D42AA55af13edFE1": { "balance": "0", "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x8bea63d78653a516d0f413b043e750eeb449d8f5945d8b4c99a31a180ebdbd92", - "code": "0x3cf37595cd499be52965dd5cca4dc7fd8080976ba95b4d20907743b4d3ecf9ffd77d0f489ce296cd5f8054a5bea29f38d5248debcffc93c173d3e97af0f5880eb9106f1081d00798476dd8912565c23630e501584be091d1b1a61107e4b43f0c7f6764beb2e7bda5d37196dccaaf19eedcfd75069c8ae61ff739b58f0245c006f6e0480bfd242c1f13584a18b56f00f714e95b7578def5b6fe8aa6fe2c7565cb880cf1e5ea91773c5662a51b8b5d0bcb364561c2a7d5f3dd16bb1e539e17a963c6bed01c788e26af9ba38008dbb606bf52075609b11bbf1ff2f92d9630a74dad5f42225f39926a4b2bfb3ebbfb8ad78d7118cb50f042eeb7c25d212650a9a4af", - "address": "0x89755db2d43ed07322030c44268cfa774a05213f", - "key": "0xaa0ee8e4dced0932f418b0f072a87b286e6fbff9a0fa8b8914bb99c64cf7f019" - }, - "0x89b589f62abaEEC1C5BeBB68E788Dfae838470A2": { - "balance": "0", - "nonce": 1, - "root": "0xc7bf2b34294065afb9a2c15f906cba1f7a1a9f0da34ea9c46603b52cae9028ec", + "root": "0x9c32ffd5059115bba9aed9174f5ab8b4352e3f51a85dde33000f703c9b9fe7c2", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000194": "0194", - "0x0000000000000000000000000000000000000000000000000000000000000195": "0195", - "0x0000000000000000000000000000000000000000000000000000000000000196": "0196" + "0x000000000000000000000000000000000000000000000000000000000000018a": "018a", + "0x000000000000000000000000000000000000000000000000000000000000018b": "018b", + "0x000000000000000000000000000000000000000000000000000000000000018c": "018c" }, - "address": "0x89b589f62abaeec1c5bebb68e788dfae838470a2", - "key": "0x2befff860dbde3744ff8ebca534b22fa4b34a87bf632b578ff4eb0685a0ab872" - }, - "0x8A2DC10DdfaE949F0810dc849F6195a74b290501": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x481f79f5082e69b26df9c2cd4e19599929555456c22e17e22f049e28eefb707b", - "code": "0xc2ced89aea6870645fec84643e7d808703ca38865c8c677d069f1a9aa44744d5d4ce3a3d4d5bbdf364c0d3c4eb9dfd5cd27b08e454db6df196e94ce85c8c64c6e513bcea0dcfdc2f60988fa782e2f91b05213e66c317b74d8828ed1b7b2d6f8140dd0cfefe152c0a4af45294b873b56135d6096f0d51077644850563ebdd18d5c5f542e7eba9a41bae99afbaf85429bd619c0a3f8e6a3abf870af45cfcb8fc3f9aac8525636c18ba20aa23afd65d3d23be8a3f9d95e71cd44833411e5e7afcb8ef888a6857569f16b358b116a33788c292ca4551ca7517600ee16822e6277fdd92676c0b232be4b423ebe93ca4f745d6c40b234da106081418f7687d28b0a21b", - "address": "0x8a2dc10ddfae949f0810dc849f6195a74b290501", - "key": "0xd66cce0c10db7db9dd3380c4eb64b6e3e150b592552454222c6fda7e17ae4610" + "address": "0x8a7ea0e207f38afce6c3b2a1d42aa55af13edfe1", + "key": "0xd6890c290f55a8677b4928e89c7b599f24b7e21751260276c3b659a993a20245" }, "0x8BEbc8Ba651AEE624937E7d897853AC30C95a067": { "balance": "1", @@ -3177,49 +3147,82 @@ "address": "0x8bebc8ba651aee624937e7d897853ac30c95a067", "key": "0x445cb5c1278fdce2f9cbdb681bdd76c52f8e50e41dbd9e220242a69ba99ac099" }, - "0x8Cb56A21fa72164941Cb0dbf29aeB768717854D6": { + "0x8E313AB0dCA2cedba8F0e00837576dC7089f8528": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x0c8bff548799dd135f3cb3e056bf566181e9108be2994a07f4d4794cedb7e552", - "code": "0x5bba6c3fee0b8124daca6363e92ecaf12fc7e679b7fa7011ec71097aa99d7c72ac4a0eaf77f84b961843673f6a295658373799f9f55eb8ad7739eeb7e7bb806b582a010d0a424aedb0a6e3b9b8c4d8ab900ba6a6eaaaee7fe1ca909c2a57c9362474d855c356a0fe098517bf1b7facee1d1f874bc27250eccd0f1415584ff2746ff3aaf1ca46bc5ca71f78d7eb78c5a5a10473d97581fc61b8f8d9e4738631cc2b47fd924568f9fb3e1cb8fb8c820469b32885a74104faa8542215bc59fe949d2fb0756fccf098e4766a8684e0acf250cbde9ac42fd27538d731ee65f3e37c574579d5daf3f336107fec35c60afae2c2eaaac8e901664ce44148f4fa015b29be", - "address": "0x8cb56a21fa72164941cb0dbf29aeb768717854d6", - "key": "0xa883489fab16a412983ab7d7bbaacb91c62548282def2f7b64ce8c475d619dfa" + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0x8e313ab0dca2cedba8f0e00837576dc7089f8528", + "key": "0xb2918453a8af8fcc00819e734545cf1364369a224cb90ce7e85fac5787ecbcef" }, - "0x8b1B7E36D89a957b4f8935113702804cfc65cFC4": { + "0x8ba7e4A56d8d4A4A2FD7D0c8B9E6f032dC76ceFb": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x89094b9a1487e37689f7f10ab8ff11eaeffc224fe768c9959e37559da47ad5fd", - "code": "0xba70091b59edd96ce7f20e2d9e4d1a8ff78ed58cf842ef9d3c4945ad51bac5a84463531b582656b98d060e631b75e28c2993b7cc42d2faedbefd233392cd85febfcfc796f25e532dc8d3e923c03fc20e0aee82035abb3854bdecaf0c14f777f5fdbe17e4b45e906c090608f319c93802261400cfc4bccf7a0240a7a87faf0787bfd682e324f5d3e09c19c4aca68dd3ebef5b70719e211c0cab7f523b82e023a5f8fc1612348518ed777bc0250e14254f3b6b88ed58bcd55709a312a4d201e704d7bace496d479a6b3b5ac73c7fb8b832ab5cd6dc13d81d0ff67a6e79f594c43313913426d545a8000c0ac5d0c18679db9c0933e838942bfeadc26a52312d2b5c", - "address": "0x8b1b7e36d89a957b4f8935113702804cfc65cfc4", - "key": "0x1a2fc8f747f8fd4e384ec9dc259383cd532f5c476383c3dd176a436b93b37299" + "codeHash": "0x39eec94f30ed1832e93fbb50cc013d15c6bbbb705e5c80fa0be78873b766111a", + "code": "0x363806242423d19f6cb56e019805eacfbc87c7b959d1032a5958652d03be30dec52ed38a2de7539d7e071eec93cfea8675a40357e03c2a5e4b8c2f49c5736f8d69ca8bb179a934da675e9d10bdb2224803424c4be75d77a8f6d887db9b1ebc91ef5e0849f239dbb5067e216b8ecbe8b6e9b8d5d1d458195d30e849b313afe11fb22954498c32d029ce6ccd8dfbde50e756509aff48ac6c695047056f577bb970fa7128b2801f6e9e54ed32971b77be04c6631b437384f3f5aedc042356efffc34a3bbc70edd2b1649cffaf81175391ad854d34dc59b54eb586c48f2c1793b995b30498b5a6f750a34a52ba949f9390f9f5850be279a9954bed79442679bd5974", + "address": "0x8ba7e4a56d8d4a4a2fd7d0c8b9e6f032dc76cefb", + "key": "0x72e962dfe7e2828809f5906996dedeba50950140555b193fceb94f12fd6f0a22" }, - "0x8cea358A7a343ac1142AAab4690DEE0572d28bc1": { + "0x8dcd17433742f4c0cA53122AB541d0BA67FC27ff": { + "balance": "0", + "nonce": 0, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x8ce72a0ce7ef4a4ae413b96a758180236e818fbd3e65950a11efa82cdede9074", + "code": "0x6202e6306000a0", + "address": "0x8dcd17433742f4c0ca53122ab541d0ba67fc27ff", + "key": "0x5014f5ee2c5966afd3f28ea3e96073eb0f4213dedf42d4214aebdf1f179fb9bd" + }, + "0x8e2Ce0273730EFd640C818Aa3B834a5F1b7335fD": { "balance": "0", "nonce": 1, - "root": "0xd40c66b99a645b9b203a05d314f80d49242d015fc1dc68bba7a83fa42822987d", + "root": "0xa5fbcc798206950f7583914b883e0120c1cc698708a062b29580564401ec0030", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "storage": { - "0x000000000000000000000000000000000000000000000000000000000000017e": "017e", - "0x000000000000000000000000000000000000000000000000000000000000017f": "017f", - "0x0000000000000000000000000000000000000000000000000000000000000180": "0180" + "0x0000000000000000000000000000000000000000000000000000000000000250": "0250", + "0x0000000000000000000000000000000000000000000000000000000000000251": "0251", + "0x0000000000000000000000000000000000000000000000000000000000000252": "0252" }, - "address": "0x8cea358a7a343ac1142aaab4690dee0572d28bc1", - "key": "0x4e92c4f7b78ccc124d89bec7c7571034a98595ab1cb7a80092c2545d22cc694e" + "address": "0x8e2ce0273730efd640c818aa3b834a5f1b7335fd", + "key": "0x8187452b81bb48d9631d0e75c485e054d87fe04b8e649d298a26aa9e481e9357" }, - "0x9025d2F24A1a23CB2B093823e52e1f90DAC60a95": { + "0x9103C21ffb25BB86EA67E2A55a82a3cee45F5882": { "balance": "0", "nonce": 1, - "root": "0x5a937f34e712fd3198d9708e641383e8e45367b8fd1732b5d8a9f88835045af2", + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x5f648f090749c4f185cdfd503f551f6a139518ef3b43034af7a2b6ea5151e0d4", + "code": "0xfa180208e416b80964438d3c35d1cc392fa2306729e8d162378339e15452ec247ea39c3a1b472adb1a46b82f40de40bb7a9fa5ad3dbeac7da36175e48293187d80ab0009a43379585ef3a79a25eb8b1572a96a1872c34834f703ae9e75aa75615b8b05a5871be0d722857bea97754d7edb37140ff7f5ffaf755616aae77f9ee7ff5af8c6d0a01a7e08a3fc6755b1e203b13b017a37f29ba48e9d20c987ab01a447c79cba3f4a4cb401a74b9326948647c38eaca90838d64c42fe591a3970e60281cd6fd31e0e2075b20489038375b1268e8cc49cebd55fbf190199521e0b9268af8c5873f91d3f43478f15fdd9584a5f9afdb530ee1cc5e23e8ed7c5c37842b5", + "address": "0x9103c21ffb25bb86ea67e2a55a82a3cee45f5882", + "key": "0x0ddecb41d3585905401dec1427b10fddf452737202507201d54b12b41e58e1cf" + }, + "0x9167Bee148a782A1Ff58D1e87E2ba20F5171580B": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0x9167bee148a782a1ff58d1e87e2ba20f5171580b", + "key": "0xb19edf94146a2973ecb69c4fcbec11b328d0827e2492aca625601728aec20a76" + }, + "0x923F800Cf288500F8E53f04e4698c9B885DcF030": { + "balance": "0", + "nonce": 1, + "root": "0xcff2e33abcf2bbe2e2b7cd934bdaa5b278b3c560ea5447127c1f2d8c21d865e4", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "storage": { - "0x000000000000000000000000000000000000000000000000000000000000004a": "4a", - "0x000000000000000000000000000000000000000000000000000000000000004b": "4b", - "0x000000000000000000000000000000000000000000000000000000000000004c": "4c" + "0x000000000000000000000000000000000000000000000000000000000000015e": "015e", + "0x000000000000000000000000000000000000000000000000000000000000015f": "015f", + "0x0000000000000000000000000000000000000000000000000000000000000160": "0160" }, - "address": "0x9025d2f24a1a23cb2b093823e52e1f90dac60a95", - "key": "0x6e9e5296c3f88a6ee0f51246dc1237dec2b78db9938cd04f404f44bc0b70a479" + "address": "0x923f800cf288500f8e53f04e4698c9b885dcf030", + "key": "0xb91824b28183c95881ada12404d5ee8af8123689a98054d41aaf4dd5bec50e90" + }, + "0x93216E4a663E3A680A0FE006285935F47caa5738": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0x93216e4a663e3a680a0fe006285935f47caa5738", + "key": "0x4c5038feb95f6ec5d7f882308ee48d7f51cd0f31fde9cfabc5f8a781ac6671df" }, "0x9344b07175800259691961298cA11c824e65032d": { "balance": "0", @@ -3230,677 +3233,674 @@ "address": "0x9344b07175800259691961298ca11c824e65032d", "key": "0x2e6fe1362b3e388184fd7bf08e99e74170b26361624ffd1c5f646da7067b58b6" }, - "0x9379ed0f7e4f0da2814dc50bbf895F239Be0e367": { + "0x93747F73C18356C6b202F527f552436A0e06116A": { "balance": "0", "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0x9379ed0f7e4f0da2814dc50bbf895f239be0e367", - "key": "0x89cbf9be493866f796305912943ca6b0991e8ad18a2f5b4a2847c72aaa021fff" - }, - "0x9380b994c5738F68312f0E517902da81f63cDCfa": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0x9380b994c5738f68312f0e517902da81f63cdcfa", - "key": "0x50d83ef5194d06752cd5594b57e809b135f24eedd124a51137feaaf049bc2efd" - }, - "0x9539d142fbbdEa1A80522fEdfA5A8619b4fa1861": { - "balance": "0", - "nonce": 1, - "root": "0x9eda8eb6ca03d7c4afe47279acc90a45d1b2ca6a11afd95206f8868d20520d06", + "root": "0xb9e281bd4eeb831410eb18e4fd03a36f0e5977e0c76074b27d202f879f924c87", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "storage": { - "0x000000000000000000000000000000000000000000000000000000000000001e": "1e", - "0x000000000000000000000000000000000000000000000000000000000000001f": "1f", - "0x0000000000000000000000000000000000000000000000000000000000000020": "20" - }, - "address": "0x9539d142fbbdea1a80522fedfa5a8619b4fa1861", - "key": "0x9a57b0a587fc060d23e9d43445f3f75c10c91121e850e44ef1fd11e47afd5ba7" - }, - "0x98618Af6804CBB0B95A2625850bdC390f3Df5792": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x1a78f610af853b8d5ead50bd031651dd1270a5b813d8b8bbe12be891d693bf48", - "code": "0xb2b734aa38ff5be8e3809aef093ad60f972a796d6f60e255580de9e9a1a5fb18bef76e95677125529feb51c7954bfde7834b036aab1e14449b02160892e908d960d9a2c4081113d70e03e5593f31ca97a5eb6efbf19cffdc881e02b429b9e44484284a16ccabc0709ac21718bc53daf6afa43ecd0fd1b02c884ad060803854db405765d7ae389012e16cc1e5275b26952f443a9ee40870dbc2cae0484b4929c8e1c54a86e002b6bdd7a5b8085479a79193c73096027f68ab35c38dc9cfed12090e9838fe1d2e639a62395f7e52a2d745fd5b0f7011b24ef0e937458897583a0c22872262be58395faccd44f164ce49ff825546056a0badb18b18b061da4f1238", - "address": "0x98618af6804cbb0b95a2625850bdc390f3df5792", - "key": "0x8e1a4d37ee935603b4bef1a0603bffd5f07b0c6a9b18ea4bb831d4fa6bc4e80d" - }, - "0x98f1772522fB7635C01709D834Df35F151Fd08eF": { - "balance": "0", - "nonce": 1, - "root": "0x2434bfc643ec364116cd71519a397662b20c52d1adcff0b830e80a738e19f30e", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "storage": { - "0x00000000000000000000000000000000000000000000000000000000000000b8": "b8", - "0x00000000000000000000000000000000000000000000000000000000000000b9": "b9", - "0x00000000000000000000000000000000000000000000000000000000000000ba": "ba" - }, - "address": "0x98f1772522fb7635c01709d834df35f151fd08ef", - "key": "0x1b6dc4d3b5ec40115001f1d0225ddacec642f618d497090db5f88565b8be234c" - }, - "0x99D40A710cb552EAaee1599d4040055859b1610d": { - "balance": "0", - "nonce": 1, - "root": "0x9b3243375d54294b7f3e11b027fdfb57c63136fe58b679c0a227e2f55ad7c072", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000147": "0147", - "0x0000000000000000000000000000000000000000000000000000000000000148": "0148", - "0x0000000000000000000000000000000000000000000000000000000000000149": "0149" - }, - "address": "0x99d40a710cb552eaaee1599d4040055859b1610d", - "key": "0x946bfb429d90f1b39bb47ada75376a8d90a5778068027d4b8b8514ac13f53eca" - }, - "0x9DDDb8668AF4D3DC4746b64973d7961Cb7Ca83Fd": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0x9dddb8668af4d3dc4746b64973d7961cb7ca83fd", - "key": "0xf251e6fdb71031f2b1cfc0e2189460c6b88783c30f5d8e84aa0bf5262b7064a5" - }, - "0x9Ef0201350e14E23DEFbace3Df6C0582F1B7eAA0": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0x9ef0201350e14e23defbace3df6c0582f1b7eaa0", - "key": "0x136a96313f35a3d9f3439a676c0780ca086c2638a6b92272afcc6e296b89935e" - }, - "0x9b3cf956056937Dfb6F9E3dc02e3979A4E421c0A": { - "balance": "0", - "nonce": 1, - "root": "0xce2f545355cdd2106ac32f9929d2a421f2b50fa224d450fdbd6ce592eeec1222", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "storage": { - "0x000000000000000000000000000000000000000000000000000000000000003f": "3f", - "0x0000000000000000000000000000000000000000000000000000000000000040": "40", - "0x0000000000000000000000000000000000000000000000000000000000000041": "41" - }, - "address": "0x9b3cf956056937dfb6f9e3dc02e3979a4e421c0a", - "key": "0xb1b2c1c59637202bb0e0d21255e44e0df719fe990be05f213b1b813e3d8179d7" - }, - "0x9bB981F592bC1f9c31dB67F30Bbf1FF44b649886": { - "balance": "0", - "nonce": 1, - "root": "0xd60ee4ad5abbe759622fca5c536109b11e85aa2b48c0be2aebf01df597e74dba", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "storage": { - "0x000000000000000000000000000000000000000000000000000000000000015d": "015d", - "0x000000000000000000000000000000000000000000000000000000000000015e": "015e", - "0x000000000000000000000000000000000000000000000000000000000000015f": "015f" - }, - "address": "0x9bb981f592bc1f9c31db67f30bbf1ff44b649886", - "key": "0x1ee7e0292fba90d9733f619f976a2655c484adb30135ef0c5153b5a2f32169df" - }, - "0x9c06979A58c4E331F355883d1e893D13e3b7F341": { - "balance": "0", - "nonce": 1, - "root": "0x209641d47d9d587d8c732197fc36a51c1d24948f632742d213d0cb8763c7edf7", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "storage": { - "0x00000000000000000000000000000000000000000000000000000000000001ec": "01ec", - "0x00000000000000000000000000000000000000000000000000000000000001ed": "01ed", - "0x00000000000000000000000000000000000000000000000000000000000001ee": "01ee" - }, - "address": "0x9c06979a58c4e331f355883d1e893d13e3b7f341", - "key": "0xa619a597342a62e6b3fbe3ab3d7933a82020342dd0f1520abfa4623d9bbbbb90" - }, - "0x9e59004e909fF011E5882332E421b6772E68ED10": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x2f69e37f59a31ef79d90459fccee2d365e354ad304c05e646cbf6b4a9f085eab", - "code": "0xb4c4e2b6245313ebc2e84fd30cd4004aef84bd2a40151a93462f49c26e7506fb2d24f5b2a624144cca8966ee8ebaaedd1ac3debcaece0f685b099077dfb2d70a0e75755c41adbb4f27053405d1410dcc6f39998c05961a8623aa6cb33b0be66f8195e934be8e1e1e67e36670679242f3eb3fe013d19203686902c1dc42dff3e49866e7eef0c92f888b29f2bed58ab872a91939249d76586c0b7412b6b577479e1d87c3377c62b76e969d2b0db015e24647df9fee4d414b11c6817618df8537f3098e5c8946c3f55aae04af8fe9c4589802eae2b11667f4dfa6883e23815c01edd65ecf137cd4f3b2d832c2d1201b08f864662ac72ecf52eb255eb7d0df1a1db6", - "address": "0x9e59004e909ff011e5882332e421b6772e68ed10", - "key": "0x3897cb9b6f68765022f3c74f84a9f2833132858f661f4bc91ccd7a98f4e5b1ee" - }, - "0xA355a21C36De6b7218d21e119b60676b176704fc": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x733cb31bbb18e7b961481250f0ba1360594dc64d3e718fe7de2ec90d34c6098e", - "code": "0x1e294673971cfca694eb2b530effc46ed1a0e6951dc278025e8cc33a1b7920173741728d05b0ba6fc6794269449728dd17f14bc1b31e69610ecc42912ff0f4d20e2fb4e3c2ec2260f93ea3216765fbac4298665bf7377032a021f529b2e2d5222a16a5eea9d64b50e6e0c5b94e99bd7223c40366b3c0a4ea4fe6ffa3e3a0e6e1ed85464681cf13f1b75d78e7f27dcf6f81bcb07a6f89e5530327fe310424559eaa4c866d26f9e82356895b445c2e5df46dc3b43ac6c8b2c240632dc8221f3a766c72695df125cf92f136bb13fddea02c359a434c7ac841202aefd428779c63f889b65a10a48c13fa4f1a7fd615279159853638195bb5622212415f85f7b734e0", - "address": "0xa355a21c36de6b7218d21e119b60676b176704fc", - "key": "0x958facc25352ac71b19beae99e016548fa24d959f5e766b4f9348cd15b65d565" - }, - "0xA6a54695341F038ad15e9e32f1096f5201236512": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0xa6a54695341f038ad15e9e32f1096f5201236512", - "key": "0xa87387b50b481431c6ccdb9ae99a54d4dcdd4a3eff75d7b17b4818f7bbfc21e9" - }, - "0xAE6883d7bEE5Ac3a2B1B2687C64309d3a168fBE9": { - "balance": "0", - "nonce": 1, - "root": "0xaff437d2f3b4a919f175d26053aae80fd53ae4901a9007925d621faa5d3024e8", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000202": "0202", - "0x0000000000000000000000000000000000000000000000000000000000000203": "0203", - "0x0000000000000000000000000000000000000000000000000000000000000204": "0204" - }, - "address": "0xae6883d7bee5ac3a2b1b2687c64309d3a168fbe9", - "key": "0x0e85ef0d4474e7938384fefcd97e2f3603fb0fa1d3efb98eddfa5ffff6679cc4" - }, - "0xB565fF21AF37E44a5E8BC217D6B43C86419CF0F9": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0xb565ff21af37e44a5e8bc217d6b43c86419cf0f9", - "key": "0x66192e4c757fba1cdc776e6737008f42d50370d3cd801db3624274283bf7cd63" - }, - "0xBAC9D93678C9B032c393a23e4c013E37641AD850": { - "balance": "0", - "nonce": 1, - "root": "0xfb79021e7fa54b9bd2df64f6db57897d52ae85f7c195af518de48200a1325e2c", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "storage": { - "0x00000000000000000000000000000000000000000000000000000000000000ef": "ef", "0x00000000000000000000000000000000000000000000000000000000000000f0": "f0", - "0x00000000000000000000000000000000000000000000000000000000000000f1": "f1" + "0x00000000000000000000000000000000000000000000000000000000000000f1": "f1", + "0x00000000000000000000000000000000000000000000000000000000000000f2": "f2" }, - "address": "0xbac9d93678c9b032c393a23e4c013e37641ad850", - "key": "0x8a8266874b43f78d4097f27b2842132faed7e7e430469eec7354541eb97c3ea0" + "address": "0x93747f73c18356c6b202f527f552436a0e06116a", + "key": "0x73cd1b7cd355f3f77c570a01100a616757408bb7abb78fe9ee1262b99688fcc4" }, - "0xBd079b0337A29cCCD2EC95b395Ef5c01E992b6a5": { + "0x96D9eB44cA2670Feee25Ddb1359B6d36e6fFBaf5": { "balance": "0", "nonce": 1, - "root": "0xe478b9c7df7d530ab039ef863b6ee52df4c726c17ac895122343b51c45d5f18e", + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0x96d9eb44ca2670feee25ddb1359b6d36e6ffbaf5", + "key": "0x54f5ae26f0a76f1cb1f3f6d1677c1483d53e13f47e520a1583b31a61422c02c2" + }, + "0x98689EC73E856AA045d939b320765303666Df0B4": { + "balance": "0", + "nonce": 1, + "root": "0x52d6d2913ae44bca11b5a116021db97c91a13e385ed48ba06628e74201231dba", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000029": "29", - "0x000000000000000000000000000000000000000000000000000000000000002a": "2a", - "0x000000000000000000000000000000000000000000000000000000000000002b": "2b" + "0x00000000000000000000000000000000000000000000000000000000000001c1": "01c1", + "0x00000000000000000000000000000000000000000000000000000000000001c2": "01c2", + "0x00000000000000000000000000000000000000000000000000000000000001c3": "01c3" }, - "address": "0xbd079b0337a29cccd2ec95b395ef5c01e992b6a5", - "key": "0xf0877d51b7712e08f2a3c96cddf50ff61b8b90f80b8b9817ea613a8a157b0c45" + "address": "0x98689ec73e856aa045d939b320765303666df0b4", + "key": "0xd5c9aa063e60e4cb577a1d645d09643c9074af8fa8677c78bd1240cac7b6749e" + }, + "0x9BA269ed634782aE1fd4508A841B697DEAd12744": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x5b8c99577256a15d06a28136692317076372b213abc4dff772cc8036c96d1084", + "code": "0x00caca6c725b2071171ea44f3346bf78f8d0b5597a2a408f011fa08aeebfdf2ab4b879bb3f11edf50695b610ae1ee979639a7ba524b1c699e0f89b9b31353fec6fb82ae3a889cf4e8d2c22a8349342b87eb518f9f05e15ad60fe6991d6c420cffd78ff3ecb67ba1b488f00413974097aa64512e6c708a2a6b96680df32343bb8cc5c8c706f8389f8e638c815d14b44781c79c9bd4b5aed387262c62c4249401d53be41676d5cc1f0a9d657b80dda9f476346bae3ba32459c3c42ff07ead14c2951409a2286f645e1dcaad586703c168893dccc02a1a9aad36a0076045dccedfc994a8886cc0e1ee9de6e5b5661a7c83f7243c5f0ad8c0d5c6016c5fbb8882983", + "address": "0x9ba269ed634782ae1fd4508a841b697dead12744", + "key": "0x3a8a079f2f9b3eb93f242e2d3e7158f0f6850302944c8752ac210c93463ff6ef" + }, + "0x9F50EC6C8a595869d71cE8C3B1C17C02599A5CC3": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x67d7afc302b0d54eb18853411f46998d05c8eaf4da3f2b77af1fb618626f2bdc", + "code": "0x3f1579c5434b902977fc1e0703af241fe080512fbb19dc21b0d08faa73050669a4eaa4181d8aa57552f668c2ff97a093341c3d011221f34a7505ed786b4bf2a7d6f9868dfb52c402e1d59c73c3f2f623c40a3db8774902d63940b3f50d6ef3848335fd41503dd7bc5aa80d8d618041fa501eb79009bbbf336978ac474a44ddf02e4f5055f95dbb749a90019f6e44beb69dd0487d79367dae3c2cb00571405a3eedf063063c2432b0daf4344815598e8dac7a678a6019d0efceef7dc21aa986ed588f4bad177fcafeb86bed8dfc1d9acf702e643163d5b6736d7bf35d937d255f86ceeafcdeafbc5fee426ab68fb25b6d7278bea8cc7dc7c6d8b22351c2a13639", + "address": "0x9f50ec6c8a595869d71ce8c3b1c17c02599a5cc3", + "key": "0x2705244734f69af78e16c74784e1dc921cb8b6a98fe76f577cc441c831e973bf" + }, + "0x9c6e13AE62C45c5af66061ae7d5bd7777bd73Fb3": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x920edc96a12889225908eaac095bcde16b6e5c8c252b15db65db90e1974251b6", + "code": "0xd6d11e3863c3c5c135c900a7a1f2145ef8955827c13fba8bb96e8ba136267217fa958e1be2d3d8d37da34f1c291dcec750fb1828e4bcff2846e36aa189960a9f00bc01de787f9aae8d65e5871bde106f5c7828b32fd415624a3d18da543a148d9c68d7404ea71965a39260214a95ed0602bd38a9bb003aaff75f9fef6859368a7a994dc0d23dbd6a674e00a2fecd717ed14fc668e1d60c12dd72df674ba0055d8dd1cc0c68bc6b297f58d399ad869ae785ae1f5878bb7c943cd5d51ef157568375a356d8f1fe1b56859f3da848bc73e306897a977d2988371232bbf4bf1e3f5ae5fc80b2bb06155477ca775440f681635a2010925a774478b3685b59b1c5d864", + "address": "0x9c6e13ae62c45c5af66061ae7d5bd7777bd73fb3", + "key": "0x255d91ddd310cc85afd19e6dae09c70558cca5fb7f1bb7a8ff074fc7e99cba61" + }, + "0x9f5CC913d1bB637b0cA3510A49BFAA0051deCC75": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x851cb461ed63af978778812e29b8438ce3f16aa94563d2da59fa0be03ac953e6", + "code": "0x42e4f963a3fa39ab69d625e264d630b7b8d02724b6965c3e5947a27d0128f6464e121f71c7387e782159a5ba74f560edf5f0a75236c9955a45a634893ccae10d5a6abfa0b523f1fbb68d45b199c8a459119750121cfa7e46c7afd4a8f9bb9b99ee067c1090ecd738876f3df0e706ba52760fc8dff34c0a82ab024434431f51deafdf7aaebcce7888b84b30340b3fd0b42f1628596c1a7bdf530b00a0e826bd8a0c8c25983c5dec62ddcff7ef6a7b6a0125a8e67abeacf43feb9033b61ef373d797d00f5e9af51f367376d3b4e378fe4451a9a7f795a2a7bab9aaea91f6031d6c83754adcbc6e45a35e984f70507c095d41bbef00afae3cb78028e9ccf3b0736b", + "address": "0x9f5cc913d1bb637b0ca3510a49bfaa0051decc75", + "key": "0xeceecfebcecb0c7cc1178556acca97a647ac263a51908fa44bfd209d82387baa" + }, + "0x9ffACcB3fF3D37762a5a37C4255e47f524E2C975": { + "balance": "0", + "nonce": 1, + "root": "0xb856a374cf6edfda9a89ee543cc835161764cf5dba40a87c2748d5bd14a5dbe4", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000245": "0245", + "0x0000000000000000000000000000000000000000000000000000000000000246": "0246", + "0x0000000000000000000000000000000000000000000000000000000000000247": "0247" + }, + "address": "0x9ffaccb3ff3d37762a5a37c4255e47f524e2c975", + "key": "0x93dd6c4b1d18f757fc687bfe44d81ee7eb4fb269120f91e7bc6fe3f596be47f5" + }, + "0xA1164E71D16e9eEec97392A83B253438FB36C108": { + "balance": "0", + "nonce": 1, + "root": "0xda3f636d9768b5cc17d188469438245b9115ab2c12280c4185c3aa039792b3be", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "storage": { + "0x000000000000000000000000000000000000000000000000000000000000013d": "013d", + "0x000000000000000000000000000000000000000000000000000000000000013e": "013e", + "0x000000000000000000000000000000000000000000000000000000000000013f": "013f" + }, + "address": "0xa1164e71d16e9eeec97392a83b253438fb36c108", + "key": "0x3c14ed4cc1c3cdeeb405fa351cfd8e2cabbbee07b9fe38828a2abd2eb9842cfa" + }, + "0xA90169ae859913CC39E0c24ADdAD3E74788276a3": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0xa90169ae859913cc39e0c24addad3e74788276a3", + "key": "0x8c1e1a5ebeff0db0b6358fae0f6947ca7e092a3c6675d35381f2358a170eb0b3" + }, + "0xA961fF20323997A869Eb4D18E8a7Fb921690E793": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x672ac0692d0cc664ef0f82004a74014b2304cd08526c32826d91d6ca2e895070", + "code": "0xb2e2b84e9c287c35516c8c03da30b8438afb348d4d79934a428878aa29874ca0ad6f0c78bdaf95ef24d97b54420f40d55858cdd1fb13209f0d32e335a0c9e2bd7ec3c2f200843fc90126ba954586fc6de68c1a3d419d6f0667702fd695602f052f84c972fe68fabc45c457b4ff540e42699a4370cab6e165c8aa3ee904308975acaad697e97d6029fe86d542dad1d34ad3d6952dc1e276bca67b4305f914f2e385f617656293cf345cffb629940096100b80c9fbd7417ab664df65fbc8ab4ae3c3a4f9c0cd86a77a5f703bc4c9de9055aca230e85714684c3c974483c02b2238015395b57ebda58dc99e6864a8c8ae71ba95fcfb915d35ab1c5375564a181e19", + "address": "0xa961ff20323997a869eb4d18e8a7fb921690e793", + "key": "0x45a2591a446e24dacceeaa3302901481268f67a0c7a3f5e282dc54132ef54fee" + }, + "0xAB557835aB3e5c43bF34Ac9b2ab730c5E0Bc9967": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x9716c463c09b065800e539fb1d0cec27d8237686c32b94b7c0da4e49e41c02a4", + "code": "0x30cd5015e58b9c24eb2595e46f57007c5ed8a4ec876a16d456573afa20d3e9f577ebf6665d47f78de8fd49ef0f2b9e56505597ecaabf21c3af83dd603fdf48673b77fbda46b9ec81be06aaa750123ed7df8486d593acd5a63efe1ee068667c8d95bece5f6b20131d5e81b5b1776a1207bfb0e442012d2877df319d49ae267d7d37cbb42e77be277901f199d496ec2cbd5a4a969935694ab27df77ec42914a258f282e2888c324df7cb75156822c2e77eb209598344e61a2f9e26eac48e8a1c0deaa54584ad2f8e3adb41715141f532d0309f2407f7fec73992b958422fb316a3fcc52bc06864b9e3d1f7f3445c632ab994c7b676fff2b07ce1895e6627a5e6bc", + "address": "0xab557835ab3e5c43bf34ac9b2ab730c5e0bc9967", + "key": "0xc9ea69dc9e84712b1349c9b271956cc0cb9473106be92d7a937b29e78e7e970e" + }, + "0xAB9025D4a9F93c65cD4Fe978D38526860aF0aa62": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0xab9025d4a9f93c65cd4fe978d38526860af0aa62", + "key": "0x17350c7adae7f08d7bbb8befcc97234462831638443cd6dfea186cbf5a08b7c7" + }, + "0xABe2b033C497E091c1E494C98c178E8aA06Bcb00": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x95e57877cb77e5808a2bcdbd9a45d097c0b3dc68abb1f465ea48b008a3148556", + "code": "0x1120594d593e46ec980fa0e64ae4f1623f0418421709dc7d6fad68015af55d1d620578150f00fe0405f3d5666527df1cd988c5f1cb8f0c21d438b7905f0afa7e378a1747347d49ceae36de53193d9d8491e80e3a2fb11519a36bfcfac52a0538f66305a61ddb824256acb564f9115b8a40970c3a191cb25bf2239e3351c867ad7689a99680307812a025bfe2515f32064fcc60dd1f88561facecb27800c6e7d8d06a3dc40d36e90357739e5267c8f470c6aa505d386b9fbc86dd03bb7df3aac74e667e8bad4edde6f56bcaa3e55b50d51f169d5647b8943e923ba4e5d9251b30c0a91aeab3466ec13dc835dabc920debb7b08929ed570a9253107510cdb18f73", + "address": "0xabe2b033c497e091c1e494c98c178e8aa06bcb00", + "key": "0x2374954008440ca3d17b1472d34cc52a6493a94fb490d5fb427184d7d5fd1cbf" + }, + "0xAC4D51af4Cb7BAb4743Fa57Bc80B144d7a091268": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0xac4d51af4cb7bab4743fa57bc80b144d7a091268", + "key": "0xe42a85d04a1d0d9fe0703020ef98fa89ecdeb241a48de2db73f2feeaa2e49b0f" + }, + "0xB0eE91BA61E8a3914A7eAB120786e9E61bFe4fAF": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0xb0ee91ba61e8a3914a7eab120786e9e61bfe4faf", + "key": "0x4bd8ef9873a5e85d4805dbcb0dbf6810e558ea175167549ef80545a9cafbb0e1" + }, + "0xB39590ED5AFc0053c8546F42aDCA5103127101d0": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0xb39590ed5afc0053c8546f42adca5103127101d0", + "key": "0xbd016cd87ac43eda3340965f21b4c4468864a7f5bd4924913e1f872c3043752b" + }, + "0xBDda53a9729794D60e7555A0A9066b3aBCFc15a1": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0xbdda53a9729794d60e7555a0a9066b3abcfc15a1", + "key": "0x8b016cf0507d02b670f348014bfbbac4ddc6c327f162ad478a4d4658a11ed051" + }, + "0xC019b892751D14Fdaa6cF0435E7f52C957E9F11A": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x1d6fd9c82f1c83e2e756f73641224957124560dcc9047ba881d7c4f08bcd3866", + "code": "0x5bbfe49fc46bd3c0efd63509af9eb2a12636d52d97f4d1cf52bf53227ef389c271b77ca6c28942a6a5831a75c27e59515f05848f3eb905d816d90fe6792b6da75759ed2ce2b5d312af3edff82a4df858741988b1bddfcca1f32b72a28d1d70f0f787d5ff306ee7ea1d7b35b5cacd5a837646921c113945dbc3a3b6329ce400332b634da6ab875d88498f503820d9b51f6eb10d3d2f378c32aef2289b509f3def68ec43d1fa25ecab18a22465ce1f8255926468a3d494eb646e020d9745efacba95205ee1597333a2b36cc31b0a8c074c0c1fa2918672c4e3dde98e6eb3460fe407979f83feb91e6e71e734e272c56671bf06f2c8bf8067684cbe31f663fccc52", + "address": "0xc019b892751d14fdaa6cf0435e7f52c957e9f11a", + "key": "0xae30ad28b2c8aab0d3c983610429e60fc0073255d1c69e538d6ae7b5d9562b4f" + }, + "0xC798205CF296141b777279868c635Cf7bb515510": { + "balance": "0", + "nonce": 1, + "root": "0x1bdb6449de127c6efa6829eef0c6b2188a66f104b5d1091f7dd3f419db0a8da6", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000224": "0224", + "0x0000000000000000000000000000000000000000000000000000000000000225": "0225", + "0x0000000000000000000000000000000000000000000000000000000000000226": "0226" + }, + "address": "0xc798205cf296141b777279868c635cf7bb515510", + "key": "0xdf474a26cbbb578c227ea61f57b81c27ce1e9d917d32a818f4e13a84591d8af2" }, "0xC7B99a164Efd027a93f147376Cc7DA7C67c6bbE0": { - "balance": "1000000000000000000000000500000000007", + "balance": "1000000000000000000000000200000000009", "nonce": 0, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "address": "0xc7b99a164efd027a93f147376cc7da7c67c6bbe0", "key": "0x8e11480987056c309d7064ebbd887f086d815353cdbaadb796891ed25f8dcf61" }, - "0xD089C853b406be547d8e331D31CbD5C4D472A349": { + "0xCaE62C8E777eA0541A55B5Af15D59eECc71cE2ac": { "balance": "0", "nonce": 1, - "root": "0xa33259a022cf713371b64cf9305a032e8bf31d4245fe00f5dca4aaa19967abb4", + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xb18b045e361de70704dd8b0b76210e158bcf3cb17d01d32af071fdcc6f599b95", + "code": "0xf3261457f4fd0b7c00a1511877ab27b74183ac470be8db3a7ecdc64335f6f979dd2cb9885bc4a6b7d63bce617b9a4981fb4dfc6d1957489e794070560e4e930da145dac0d5853e9e18103395cfe86de32038064edbc272862280672e49bb93357b2f1db823434eb2c3257b921622f3b73c33ed78ab6344072b7d0d89829cce01e9e3d0af61c0577149d8fdf930c9e5cbb4ff7a5481b41229c7576f61f8f2ec08c6d78b22ca7ce0ed62fd1a46e03059e749d11a0ae0882853a9c6848594bb8508c612924e9d43860c38e1b79881d3d6b2fbf66e000a9d5170db882dc3f048dd6fbb59cc25b8b8d576949767a0b63e0aa0df84d25f2821a2ea8cbdfce970777b41", + "address": "0xcae62c8e777ea0541a55b5af15d59eecc71ce2ac", + "key": "0x3f6c9bea2a94e47b2694dda7576291a475e5e70977c0a71fedf363ea2cb652e9" + }, + "0xD1FFA9fF507492844818d0d91Bf35B93a7c95E4a": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xde7b1b0e50a7d7bfc2941895dea4aa00ef5020617339bf6862b65a44fb9e3e7d", + "code": "0x5ee7521a899a1bbd499ad817e1d673d594eb84ef5130440e43abd9ab1110486735b47ec3f55b71d6589203440915d2ef7280ff31d26085f81a04730b0655d961b2c0f7f2035a27e69c9e7dbc21354039da07b465d84ab3b1eba23eace489d13e7bfa808024a5334b0a1e191d8e95f6724ea40d1a03d1286b6934e670f8c6924b6a1b1ef94f6deb640ab38caedbf44252d256d60e00dbeb774c18a4a570e050fc0e4439da0f5e13593fa65268ba122e984104c23e93195f67ae3ccd394337e11d8725003c645a213b2583d67f9bdc3f05a16873ac6edf6234e388904a6f2b0dde4a6beb59a7cd08dcb4592438190f4a5c641daeac5ab9b96006d018a6e01e04ee", + "address": "0xd1ffa9ff507492844818d0d91bf35b93a7c95e4a", + "key": "0x4885a02db06138818497f56f6ef6f9611b1fe93d81f6d4a03dd83ee80a119ed6" + }, + "0xD592d2BCa2E78Bf7f3Ef341A2f6B8F0BF96343c9": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0xd592d2bca2e78bf7f3ef341a2f6b8f0bf96343c9", + "key": "0x07891c3045a0c538a419a3c93f75a612f61a0d8be29aa478f990555ede27620d" + }, + "0xD7678E32ceAc078dc261D151aeC9b898159E913b": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xb4930a125627ac818615f09e52738e8bd19f268bdfddc69da23bd7b4fb356d06", + "code": "0xf078381c098d7f56dca8447e60d28e39dabf16c4904f8d5980026cc19a6afa0bc7c87573e3262dc947d048fbb918b7a15536786731da04effd045b5a3482a16f9440d37190611706c0e4201f46f8693282307e769f69845197a9beef60e5f566af4553fd35816720fe0f3fda7c1e71383dbf00831aabef83faf4be5b7112ed159eae233279988a43ad0a99b0d0230f245ba8453a0accc9af91185b1ecd1a7116f29da813564266cccd5dc5a3c1b701abfaf5ac71f45fde4e18fcf60d7c41d5846ad5557a6f35d40337b6890f3b6f15a1e64adcfbc425b4bcb28ee67b2b920da212520cb5bf4d324fac63d20e3230854765e952834555d0e102dd85ff0e57cade", + "address": "0xd7678e32ceac078dc261d151aec9b898159e913b", + "key": "0x9fb96451e98ab7803d6bff5c91f131133a99711978a9a2b3bd5af43252869882" + }, + "0xD9c364A44CEF789017B5bAD4F17e197D079c76aE": { + "balance": "0", + "nonce": 1, + "root": "0xd91acf305934a60c960a93fb00f927ec79308b8a919d2449faede722c2324cb3", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000097": "97", - "0x0000000000000000000000000000000000000000000000000000000000000098": "98", - "0x0000000000000000000000000000000000000000000000000000000000000099": "99" + "0x0000000000000000000000000000000000000000000000000000000000000153": "0153", + "0x0000000000000000000000000000000000000000000000000000000000000154": "0154", + "0x0000000000000000000000000000000000000000000000000000000000000155": "0155" }, - "address": "0xd089c853b406be547d8e331d31cbd5c4d472a349", - "key": "0x389093badcaa24c3a8cbb4461f262fba44c4f178a162664087924e85f3d55710" + "address": "0xd9c364a44cef789017b5bad4f17e197d079c76ae", + "key": "0x51c07e7aa8b36d37d8094e2bb6a81f3f8f275acdf7620f893f933a9ffb7d6377" }, - "0xD68D1A62f58c6B8cceF66B50228Bb9163784F355": { + "0xE3A8b633a20D3Bc82CFD6d6cB315dD9784b3EA41": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0xd68d1a62f58c6b8ccef66b50228bb9163784f355", - "key": "0xf7eaa0ae3d9e339e65e019d913513f53f3175e0b35c21f171cc04e6bb06e8c13" + "codeHash": "0x6a95d1532ea10e01c45c3852bd1dc75cde391adb68e4c49179dcf4594b7750bc", + "code": "0x252b89bf90b319923f6559e774e32f611a27a81d0f532f5b807532a98a9da5dff6346df2f890680af66f02884a3534996812dc8641475d151d43319ca32915acdfb3923e257006c00eb45b8fd73a3468e2d76d01d6f08434ec78404b1eb39275fd55fc2e9ef63e16e696580fa41a16b1359de042d9d894f9176ffec1c194a98623daade2992486e297dc206712cf2981a43df9a70de4d5f3b59dea984dc1135be8aa0c96d7827d7f81d506691cca1eef157279cd2b906ec7a6ae523f2e4aacf9fd0f0a9f6943052f202072825110d2e71fe4569f7a80872d4befddcab68faab64571c490b675f7c0c08a6af51968eed01a2a796f37061d16506458d1631c4af8", + "address": "0xe3a8b633a20d3bc82cfd6d6cb315dd9784b3ea41", + "key": "0xa3f8196fd37c836d7a5bfcdd9807147e8d74957f5125bed4c6fe6da4e348dcad" }, - "0xD917458e88a37B9aE35F72d4CC315ef2020b2418": { + "0xE4f62e66DfCeD3f18080ed3080b276edaEF0E1C6": { "balance": "0", "nonce": 1, - "root": "0x1b9e47810d5392418d38571a39fa5984e48e0f03b932d8b98f6aa771ccad65f2", + "root": "0xfe629ea231aa00b09ac842cd51a4c63ced36a60cbbc2fd49c2891b67b38cfe9f", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000131": "0131", - "0x0000000000000000000000000000000000000000000000000000000000000132": "0132", - "0x0000000000000000000000000000000000000000000000000000000000000133": "0133" + "0x0000000000000000000000000000000000000000000000000000000000000061": "61", + "0x0000000000000000000000000000000000000000000000000000000000000062": "62", + "0x0000000000000000000000000000000000000000000000000000000000000063": "63" }, - "address": "0xd917458e88a37b9ae35f72d4cc315ef2020b2418", - "key": "0x4c2765139cace1d217e238cc7ccfbb751ef200e0eae7ec244e77f37e92dfaee5" - }, - "0xD9D4095509b1ea9aDde0E42D4eed8A4bC01ce4F9": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xbbcdc1260a8c1207ed4df8f6aa53d86b13407470023e3d529bb2d34ee71739ef", - "code": "0x505a94e92091157a2b6c32cdb529e4e0fff70a56f15fdc98e76e3995f7d83843d5db31e9e7c32143fe3af51e3315d4786b187de82f0dfa39162c39200bde0914635ba9e622461ba1e5f620ca05d0e3903d2be7dd66af8da9796c6b26acd3b499fe480de640588828f4a109d5f0bce8c49ea257ed6d39a78cefb2cb82699ced8d0b68115d5c2b6ccaf79db212002dcc3d52944fdf04f672a09f6629e434f2646687ab7a5a3e42e9ce80c9bfd4beffdff114c758e71396b4ddbbdcc38c72c3a00cbf662de3bbc8b6d7b5786261d3e6f5e282baa7fdbd39fa16fa0c27c43972cc6e10e1d521b80b6a244f273da5d76441c35c86907c122c4d9bb88ab0ae851ea3f4", - "address": "0xd9d4095509b1ea9adde0e42d4eed8a4bc01ce4f9", - "key": "0x38978834c603c45c873fa267fe1b541694e9e55e9c59abd0c22489cd9eaef823" - }, - "0xDB25388D92FA7D824178bc472C0a5FD84A69d18D": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0xdb25388d92fa7d824178bc472c0a5fd84a69d18d", - "key": "0x9a36e49d6fa789abc112272965ccb529476471bc9584caf51bbf38cf818ecf57" - }, - "0xDD9ee108e8d5D2E8937E9FD029eC3A6640708af0": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0xdd9ee108e8d5d2e8937e9fd029ec3a6640708af0", - "key": "0x2a39afbe88f572c23c90da2d059af3de125f1da5c3753c530dc5619a4857119f" - }, - "0xDE1c2fC2e4Ee50F61a0Ee3758Bb67Bc468467F03": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x6ce8bcf63e7a26264045680ee93464c00c1029a197aacc749391b7a840cc8697", - "code": "0x24259e866b89e445290f514548cfa7341e867e1c75b75575d8008246d6bf88796e0cbff4014bd643fbb0707f5e2c1ad686153dae9f96a33de90a5cb2c73f01934107dbec03e25a3a7041ae16c199ebe0c15cdfc958612c5bc8a87d743449bee7e7b26963c6a46bc669ee69f5ec3ddaa2b4dba8fb6c66bbf247f3096d559f5641849d57e96537ad7e37a5709b12dd8ea54383e2864ba1d0d83e2ffbde7f8a5fb5f6ddcb15ef525982aac03ef65faf2cb3fcdd8eb6b2a2b58c6bc2acd57989ebb44362cdde8131eaf20d98617619b09146ce4f5f53fe563db99ef97b050183da81c5072f4eee335da8bb992dd71959a7534cd43bcc582c57ed9631abb2f4d7bcc4", - "address": "0xde1c2fc2e4ee50f61a0ee3758bb67bc468467f03", - "key": "0x0243011ec33679195dffcf94a02eed0e26b589f14af470e55e798647b537c46f" - }, - "0xDeF9100B4510C563B2532EDDfC5dCDc82bb541f2": { - "balance": "0", - "nonce": 1, - "root": "0xd45ccd3dd6bb0efbcc59566edbba5873ffadaa694d76582ad5b876b88f39b461", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "storage": { - "0x000000000000000000000000000000000000000000000000000000000000008c": "8c", - "0x000000000000000000000000000000000000000000000000000000000000008d": "8d", - "0x000000000000000000000000000000000000000000000000000000000000008e": "8e" - }, - "address": "0xdef9100b4510c563b2532eddfc5dcdc82bb541f2", - "key": "0x9b6e7bfcd9347b45c94947acb6ddd3df4d228807ea09100b7a60b8c1b2aede5a" - }, - "0xE06751015cf69396708198F9Fd3fAC98367847ae": { - "balance": "0", - "nonce": 1, - "root": "0xd39ad83d4fc3df3ce208b6c0779e4d1c0138867bdd0a6ba4e49ccb45419e540d", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "storage": { - "0x000000000000000000000000000000000000000000000000000000000000013c": "013c", - "0x000000000000000000000000000000000000000000000000000000000000013d": "013d", - "0x000000000000000000000000000000000000000000000000000000000000013e": "013e" - }, - "address": "0xe06751015cf69396708198f9fd3fac98367847ae", - "key": "0x0610ba7a05912ec56deae88974bcc177dbce70b079adc9db6212f83a093a91c2" - }, - "0xE153E75b139632f5d13F19d5C66579D5d6813259": { - "balance": "0", - "nonce": 1, - "root": "0xff687feaf8718db6ab0fc7f8d1e2cfd9ef45928488fc3d578477cdfdcc51dd09", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "storage": { - "0x00000000000000000000000000000000000000000000000000000000000001f7": "01f7", - "0x00000000000000000000000000000000000000000000000000000000000001f8": "01f8", - "0x00000000000000000000000000000000000000000000000000000000000001f9": "01f9" - }, - "address": "0xe153e75b139632f5d13f19d5c66579d5d6813259", - "key": "0x59aef4df4fe449a1f7048fe2bcb680f4591eae75f45efe3dfca5febfe54d38d8" - }, - "0xE3A71B4CAf54dF7d2480743C5A6770A1a5a9BcDa": { - "balance": "0", - "nonce": 1, - "root": "0xd9302d64a423861c7b3ffa4e25dd32c407f472bda0e75c4da719b77a4c9d7424", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "storage": { - "0x000000000000000000000000000000000000000000000000000000000000011b": "011b", - "0x000000000000000000000000000000000000000000000000000000000000011c": "011c", - "0x000000000000000000000000000000000000000000000000000000000000011d": "011d" - }, - "address": "0xe3a71b4caf54df7d2480743c5a6770a1a5a9bcda", - "key": "0xe4d9c31cc9b4a9050bbbf77cc08ac26d134253dcb6fd994275c5c3468f5b7810" - }, - "0xE43cE33cdB88A2EFE8A3d652bfB252fd91A950a7": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x037e70d89f4b730aac959986dbbfe0af1a286ddb31e1de05bcee64135e5c17cb", - "code": "0xeef53c6ca945792f947138460881b8ce441c90705cebd2ac63082b1a9dbb6d1ef15659e3492137bbe7b2a548a5ff636574ffc69b4cd7e9919fa8f0121846b7587f8a4e01196c8d8e8d7fab5763f17afdd953e7fd375125594fe15f4147baa966b31f12b3ea8a692474f7a878f34a0093e7342405a33cd6974e35402ae55fdcccdf0fed250aa631da36a99e614c87fd768ef2946f5a4a62890303785aab8ccc70c9aadf72d8055a8681a6e3890308b25746e822fb40031daa81d0d225a722d0fbb0a0135deb29f445269723c8cde0b5434bcd83acff45693494d6a48dfe22d505d01e0763a645edda4d609886f87b822dc86d428442ef174eb0085b4a201be63d", - "address": "0xe43ce33cdb88a2efe8a3d652bfb252fd91a950a7", - "key": "0xc157e0d637d64b90e2c59bc8bed2acd75696ea1ac6b633661c12ce8f2bce0d62" - }, - "0xE52C0F008957444c48Eba77467eaf2b7C127e3C5": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x1973f7c92cddb2e8e1b1a679e0ccc4228c832fa0881e126e99d8c153768fe417", - "code": "0x23aec33011cec136936404546e8d71610b1ea813717b1b6bf3b77b689326a34bff8631e720139e221f6f7436289600a293ec800074eefb6074c9c4d3d71451d44f3b95b4e5f87ebaefd8697e1beeac39c49315154dac40afc4471c173e106006158cf96e390593ec3d9db70f55562909ef65f4603e50b9bf4a3df75ee2795f3069934b3c578097dd99f0cb0d2c04136fd8095c48557144cc40a978589e45b612072a01774dff6b43d7101e6ad7d329fe9af3407ec1356a898458310d3114a95c20874b0c906c478f1952ec7ffbf9ccb55019a08fb7b7fe98adcb0bbcfe4c582b3173396d1c155446a89455c4997640738bf81f11b8e7aa00d59a627e170c021f", - "address": "0xe52c0f008957444c48eba77467eaf2b7c127e3c5", - "key": "0xb888c9946a84be90a9e77539b5ac68a3c459761950a460f3e671b708bb39c41f" + "address": "0xe4f62e66dfced3f18080ed3080b276edaef0e1c6", + "key": "0x4dee48db6b3b08cbac1e06a9a3ad1d0100541ec9eafa2a1fc82e5d47ab763aa4" }, "0xE7d13f7Aa2A838D24c59b40186a0aCa1e21CffCC": { - "balance": "1000000000000000000000000300000000004", + "balance": "1000000000000000000000000300000000005", "nonce": 0, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "address": "0xe7d13f7aa2a838d24c59b40186a0aca1e21cffcc", "key": "0xec3e92967d10ac66eff64a5697258b8acf87e661962b2938a0edcd78788f360d" }, - "0xED61c537F1B4f454c46B2352069Fa6b42623C110": { + "0xE8ab29bE268a4a4447e4f7bF0B5DA4AA4734AC1A": { "balance": "0", "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0xed61c537f1b4f454c46b2352069fa6b42623c110", - "key": "0xfbf3a1231e6625c304d124d07affe93eb8815d22b5fd75d546c09dc1cfda9e67" - }, - "0xF9062429a0c38F2886bbc72EC59Eb41041caE478": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0xf9062429a0c38f2886bbc72ec59eb41041cae478", - "key": "0x3de2ace05e9ea0f0318554327d9809e6706eadd51f104b1235f40712070503e5" - }, - "0xFb7b49bc3178263F3a205349c0E8060F44584500": { - "balance": "0", - "nonce": 1, - "root": "0x5b8cce34b1c8ca497abd9d4baa011f924fabb467a2d6617c9cfd83a2c32a1aee", + "root": "0x9a976e308ba6adecbca552a318a503b3ad99fbe0ba03c079bfb6244d3cd0e86e", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000189": "0189", - "0x000000000000000000000000000000000000000000000000000000000000018a": "018a", - "0x000000000000000000000000000000000000000000000000000000000000018b": "018b" + "0x000000000000000000000000000000000000000000000000000000000000022f": "022f", + "0x0000000000000000000000000000000000000000000000000000000000000230": "0230", + "0x0000000000000000000000000000000000000000000000000000000000000231": "0231" }, - "address": "0xfb7b49bc3178263f3a205349c0e8060f44584500", - "key": "0xa03fe040e4264070290e95ffe06bf9da0006556091f17c5df5abaa041de0c2f7" + "address": "0xe8ab29be268a4a4447e4f7bf0b5da4aa4734ac1a", + "key": "0x2f3f84580f03d8a347fdaafc9b6f755f314030839efe0886fc804c610cb37933" }, - "0xa6515a495Ec7723416665EBb54fC002BF1e9A873": { + "0xE98D9997c3d04ed1538a05615C00A93cdbBD3b53": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x4a027c1ef8411fa885c9fe4e5a504ec57076b475c72c4b0d150b8d97906de706", - "code": "0x91d04e206f89145185d7c0a82618aa78fe710bc8a1b4b414b377926cf5e3a66be28502ad67d33d7274b03e765dd18f1a1ab4ba1c827c6d3e7a0d3ca492e6b46315531e88bae16d971c335931052549d408d7d05a38b4dacc091f6db9dbbb6ddc38d21990164d4d7df1f1c3adadd435da81121ed3ccf04d07098021ef81b4663045d505cb6581b7f15e33d93b5bbad62cb60fb8a720b633d8cb1906954b0943f218fe2baba04b04b843cd138489dc125d2854aec75ebb8a449c914ba035cd57fe923334cd90d34656991c6938c9e0b8aa7a8fca68f889521f05af1a847e16ec0dd52427a773bf62425ab36cd77fb888038dcf97aeef30aa680c9fcd289221ae32", - "address": "0xa6515a495ec7723416665ebb54fc002bf1e9a873", - "key": "0xbbdc59572cc62c338fb6e027ab00c57cdeed233c8732680a56a5747141d20c7c" + "codeHash": "0x2d5da89dbc1dd4a72b762b0f02be2b019621e4eff4ae05cde7765f59fa027625", + "code": "0x59177b3ac362dfed2f5f2a6bdf40ad57c106ed436858a6006d6ca83c5f346676a29a965f7460be4b61c6850bfc18ee18bf45c79a5c6dbb1c0c895fc557ef5cb4cb1732e48e4275b8843ef6d2c0a17588ad394b156ef59f4f2f771abe2307b3f752b9e2a36c35aa2b44ce6c4b89f2a7aaf2f3fa2a112b48803d5b977a94749881440ceb88230bf2fc4edf65d2bb9a74d227c8a62abedec268e550d793dd5334e8ccd6890ea7087c2546c4c3d5264f04f94346973886db02cfa8794a31b759885d34861d98f8dcef653538193bb0f515950c5a7c054bd7a960894da70594bb33c5e71ff1efb43d93f85854e953bee84c0621efb6a50c7756c8f9231166a4df67f7", + "address": "0xe98d9997c3d04ed1538a05615c00a93cdbbd3b53", + "key": "0xd806336c4f3fbb4aac21b0058a7a4fbe4470832dd35ea3d5ee8a52a3fa870fe0" }, - "0xa956ca63bf28E7dA621475D6b077dA1AB9812b3A": { + "0xE9B17e54DBa3344a23160Cb2b64F88024648c53E": { "balance": "0", "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0xa956ca63bf28e7da621475d6b077da1ab9812b3a", - "key": "0xaad7b91d085a94c11a2f7e77dc95cfcfc5daf4f509ca4e0c0e493b86c6cbff78" - }, - "0xaD9Dad8a45e691B45a09e2CE5a88594A08f4744A": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0xad9dad8a45e691b45a09e2ce5a88594a08f4744a", - "key": "0x90c9be68ba7502086f74ff43be0a2f2dff9baa9073fbccf73690addc0d93ee20" - }, - "0xaF17b30f5Ab8e6a4D7A563bDB0194F3E0bD50209": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0xaf17b30f5ab8e6a4d7a563bdb0194f3e0bd50209", - "key": "0x26ce7d83dfb0ab0e7f15c42aeb9e8c0c5dba538b07c8e64b35fb64a37267dd96" - }, - "0xaa53Ff4bb2334Faf9f4447197ef69c39c0BB1379": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0xaa53ff4bb2334faf9f4447197ef69c39c0bb1379", - "key": "0xed263a22f0e8be37bcc1873e589c54fe37fdde92902dc75d656997a7158a9d8c" - }, - "0xaaAF6A159065e1df8848bAD2123ce201f914651f": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0xaaaf6a159065e1df8848bad2123ce201f914651f", - "key": "0x77f9408520acfbb12b62b72ca755db32798673aa3f13a27d4d72b5e5d9dc394d" - }, - "0xb42f46FA28a45E5d7ED2C6FBcf264be09A84b35d": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xf4015a92c21a43971b9daccd6b117d4bda8d0352cb2dffa3d2c0efa501043c1a", - "code": "0xa64ecc77bab92b6155b22af00b12afb654597705e4fcedbdecf5dc7272cb0f1f27a10e596b57a3dae1dab1396485571e7fc51fd56683e8c6f8517abac4c25fbeff399588cfa8d511a211e40c93169611693b7927d66122c83d455700805304135dd20ad87799fcce6db776139c19c898b9fa778865daa59dbe0bcba6f687140a6f8d38651f1dcccb2ffd8cee889c99e454fc3ecb2116512ff23076dc2d265910b2ab2ee89b347143724a865a498c0e338ae104e581dbd5f935efa1f13c842808eed4ee5aa0ba661a4be59fe47e33a2878d27cbc9c92c7053456f79d7567252f05d4e160575fee9c3345b17a5540abdd97c833048d80099370b0a86e8fdb4ca4b", - "address": "0xb42f46fa28a45e5d7ed2c6fbcf264be09a84b35d", - "key": "0x8eaa3c641bf0bced203401b48cad74dc2e5b5eadab6b21a275a0c90a226ced77" - }, - "0xb5435eFdaf27d2d95A4074d8a202Fe8605e93bc6": { - "balance": "0", - "nonce": 1, - "root": "0x50c6f81d76e16573b6164ad984d3383e480986fb380b3b49aeb5ded831297fe2", + "root": "0xb1d2896c079496c392d81871dc5e4a7e8a1c80c3e19d90b9ce2a74982e45ee5c", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000060": "60", - "0x0000000000000000000000000000000000000000000000000000000000000061": "61", - "0x0000000000000000000000000000000000000000000000000000000000000062": "62" + "0x0000000000000000000000000000000000000000000000000000000000000174": "0174", + "0x0000000000000000000000000000000000000000000000000000000000000175": "0175", + "0x0000000000000000000000000000000000000000000000000000000000000176": "0176" }, - "address": "0xb5435efdaf27d2d95a4074d8a202fe8605e93bc6", - "key": "0x7d3eeccfd59fb913b7c1da576a38811506589cb0c082898306ac97727104a41d" + "address": "0xe9b17e54dba3344a23160cb2b64f88024648c53e", + "key": "0xb4f179efc346197df9c3a1cb3e95ea743ddde97c27b31ad472d352dba09ee1f5" }, - "0xb609BC528052Bd9669595a35f6eB6A4d7A30AC3D": { + "0xF0A279D2276DE583Ebcd7F69a6532f13349Ad656": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x1df52e345118c81b3e417faae2407169b7143b97665088704492ebe68918af5b", - "code": "0xb6c77d91e1853c9460797543e6950962a973fa1ff748bd1983124d001970f0fe86752f6f10cf905e418968184a6649df48e5bb4b03fe0c6c30d4a92846800ae5120d6850bf2577eddbd2ee4d37824e28eb8583bd541f524a671400c5a7a4d0d343101321f77bc643f5acb4f9e125b12553e936073cee8dc5591c518fbdd9b31bfd12ab6661c66aa507572bb762941842d549de49dae1e273c6eff4353793382663751fa9514f6f7fc44151fc96fb391df328691d6b6a3752c0e99a8013ceca8537ce7393bde93f10df15acd9635be2b3c297dc27a2b26e7c8a093e1e7b56ff6c46d267957117ed5d4464f4be9f8d0298d446fb30aa03ae79a281755983f162ef", - "address": "0xb609bc528052bd9669595a35f6eb6a4d7a30ac3d", - "key": "0xe6388bfcbbd6000e90a10633c72c43b0b0fed7cf38eab785a71e6f0c5b80a26a" + "codeHash": "0xfc7ac100da7ec6df53d378321dc20b34177cca47f5ce7d6f640a7d377dba751b", + "code": "0xbed52935ceac91f9e56488c9c56a4ef4668325f0a4b3c9d4f59d0ca1f55873d4bbe9cd6f2ec3bfaf65e3dedea335e6580be1b90f02a28ba4334c14331d83537d461fa69d479e93c39ece03263cf3188143876d720ddc370708f917dd5a84899be033ac067c55ffa15276c1e7e852433fbe5b06aff21c9e12052d01007cfb4f63bbdfb9fbd5a250e303de7582d54b86c5073c3b3f8b2a52103e1be92f6afa665fda42636e2a248443cf028fedd444727b22ed1346bb793d0c53ce70ab162113cab28fc5200528140e039cbf5bb18ca2a92163357f6f90819a1a81c4fb0b7930fdda11920abf8ace283badaa3b53848cae08e30f173a07c3429625c5529361fb05", + "address": "0xf0a279d2276de583ebcd7f69a6532f13349ad656", + "key": "0x11eb0304c1baa92e67239f6947cb93e485a7db05e2b477e1167a8960458fa8cc" }, - "0xb911ABEEaD298d03C21c6C5fF397Cd80EB375D73": { + "0xF2C93BECbB050bA17dc9a2811A4d0DB97d0B1295": { "balance": "0", "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0xb911abeead298d03c21c6c5ff397cd80eb375d73", - "key": "0x873429def7829ff8227e4ef554591291907892fc8f3a1a0667dada3dc2a3eb84" - }, - "0xbA015A43CbAD870109287840657E509A8341430a": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x1d14dc1aad6545eccef12200b1d83eeccb7348e9efd37e3746547dc73319afcf", - "code": "0x6e114c97b74d78d3fc0453a7d40bb97c3b4da8bb89f0980f5e4234e1f334ec84d4fbf7701c97d78140335cb7a734885ddc620514a15e05dbfac5539c2e57005b4b399fdd2bd107baa82b219995c39b6fc0ea647f084bf576820030b40ec5eb1cc5a384a96c46160234a4c0a6841ffd094db428a8c4daf7fd60b8b3a2ec664beb2e4a5db9f6476a273a6466f6797062bb465d865a212e1a73b871f554b9505f849b837c8b3dd4ff54aa4bc7a8e72175cdf3090b5f77b8bbf2a981c389876ba34efc97c68684fd6376bbc41389aefdca942921a4974c57e664af0fefd08944deed5a7db4128d556fcc54111e0c2d693821e2cc01fc3dcce8e3a8e72c6393e2e68c", - "address": "0xba015a43cbad870109287840657e509a8341430a", - "key": "0xe49c3e4a107c2ab2bb5eb9f7830765501c0d2ba62d3bbdd3893ad2c6c7988e1a" - }, - "0xbA28562EAec75C2a24AddcdcB48b652a1D3d796a": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0xba28562eaec75c2a24addcdcb48b652a1d3d796a", - "key": "0xf4f027863d66e0e04cac2d1b0bab3ce723d96b75cba02adfd94ec1aaac5f2e4f" - }, - "0xbE2b071590A1AEdbAe740BdA19589961eA8b90cb": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0xbe2b071590a1aedbae740bda19589961ea8b90cb", - "key": "0x913a945d006f413415a63ff0e57fd2fad9ffbfe8857259722a0151b119f95e8e" - }, - "0xc672A4A5736BF99939A58C779E8574426ec2cb51": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x75de76446047b5ca099fe7a60a63ca86f78a280755e4b047d9e0f6ab5a3c8768", - "code": "0x03a2399dbeda27cb7b00f2bfdc46f625dc0d6ae1d1ae296eec64981420d7379f0f3712e63236af36733b72c796625945c9773de445465c4fc67079d0b2e58274ef975306a7f41285be2b1dbd58511cc28e1ba38da8aa9340702e3ef450eb792d74a58ce557b85901a0b85724f38fce3ea8b9f9a3989c57d19c477401a276956ceab7b9199383d8854ef3a3f8fee3f1e19d8bfc85e865c3273d04fc662b1ce3bdc3aa7b16422e3d10217b011900f49bacef88cb7c2a404a290e330e33c4bcfaeea29fc3afaacd35a28d15a491bc01bca5199d6323fa7cbb82b966837ee0fcb0c3a879e17a65faef645fad8f5e188dd2ff408303922ad6e8d1183345917dabbe25", - "address": "0xc672a4a5736bf99939a58c779e8574426ec2cb51", - "key": "0xb7ff380fe56a4b74a8253a904b912204c0421a68d57b0c2251eac54ee7d1edf3" - }, - "0xcCF0b963A645abe7b67Aa6E95AEA73FF9E0576CC": { - "balance": "0", - "nonce": 1, - "root": "0x54d96c4ece0ea7b8fb4020944003566809100c43a61883d7edaf155e10e9c7cc", + "root": "0x2fd7b839f5613c91ae241ba33e03e781c11b821250bae1aa3017b2fe75bac3fa", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000203": "0203", + "0x0000000000000000000000000000000000000000000000000000000000000204": "0204", + "0x0000000000000000000000000000000000000000000000000000000000000205": "0205" + }, + "address": "0xf2c93becbb050ba17dc9a2811a4d0db97d0b1295", + "key": "0xe3c90ccc988cd8abee77974903c16cf47988812f0f862dac3a11f06ae963d388" + }, + "0xF687d9CA2aCAA4DEe5f4BA6C1eF0c0B89205B92E": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xe5e61fa1465f3b1eb6e74632116b3766e24c61087fef3dc7af43dbe4fb3189b0", + "code": "0x4115ab6dee63da78950ac0a3ed6bebb017d9a5fc2e00608c82a3571125cfc38f12ee62be373328a28b316ed050591a9eac96ceb924246f86a1c0bc4f37d75b72a6bae38b5fd06c5ea81391e321be657722acd828b3352148b27a1ee3ea751aff6afc6c4beef433610998248245abb3600b2c2559a49a1cc2f3bf575b0d7b342613010f2857e6ee9389ef1e3b0d0d0b88a9cfb6ae9c58a9247e15c7e9334961e1888ab0db3616b32b3d0f09c88e675f52fafb0e7bbc38c0163460269ae83e6703d5e2e4e2abf6a871a9749909d2e6d5bb201405296004cedafbe5629981c69e1bfdc92b9060d7f6c40c01ce432c46d932dfb344659169a47bb9778e9ac38134ea", + "address": "0xf687d9ca2acaa4dee5f4ba6c1ef0c0b89205b92e", + "key": "0xddfb897c68a043e82b8d4d7751e6dd639066efea80cd177409faa10ae576676e" + }, + "0xF75b18c1a92C6C6659b3211D45Ee8E1BEFBD3a6C": { + "balance": "0", + "nonce": 1, + "root": "0x818eaf5adb56c6728889ba66b6980cd66b41199f0007cdd905ae739405e3c630", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000077": "77", + "0x0000000000000000000000000000000000000000000000000000000000000078": "78", + "0x0000000000000000000000000000000000000000000000000000000000000079": "79" + }, + "address": "0xf75b18c1a92c6c6659b3211d45ee8e1befbd3a6c", + "key": "0x6da4870a3dd2d5ee0dd0f235e6c07caaeea1e6fecf182b68a908462d1dae3edf" + }, + "0xF89374e8646084BE4525B8Da2E64aF316b570458": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xdc443b3e953eaa80fc5b5ae5ed28a3771bb30b13eed51dcc72ca2b3ee6f12441", + "code": "0x1cb7ce0668e72b96f704af9e1445a9dc6f6ac599eec355bfcfe4d3befbb001be40165e7164257b249280bf839a50283d248062ed7b0e6d8820cb6c506bfcf7d3c0c7c7c9a2a6655862feea3cc7ff13629582293fcfe0e1094efb20897bb02a656a2b6bffaca788160f671fa62d34758b717f75a90ad5a468757c50d61f33c4437f6fa3f34639ea1891363ca773619dbd5f652d7ab50411111dde2f57e3ae13add1ccbf1f9f869f51cd81e6f099f905636b057f682c706fe990614b1120516928ee4750d043edce57577a49a1f0c4b389e3b8c38c27dc693bc6b7154c07280771f2e2385bc2a5be32198cd1e425186910eb1a233b2b2a22be149cee4dc72d0162", + "address": "0xf89374e8646084be4525b8da2e64af316b570458", + "key": "0x8a501498b71c00ef30dfb420ca71d286546a057bb13d56eb0e175c0e42c2f3a6" + }, + "0xa12B147dD542518f44f821a4d436066C64932b0d": { + "balance": "0", + "nonce": 1, + "root": "0x0fd8e99b1b4ab4eb8c6c2218221ae6978cc67433341ed8a1ad6185d34fa82c61", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000014": "14", + "0x0000000000000000000000000000000000000000000000000000000000000015": "15", + "0x0000000000000000000000000000000000000000000000000000000000000016": "16" + }, + "address": "0xa12b147dd542518f44f821a4d436066c64932b0d", + "key": "0xae88076d02b19c4d09cb13fca14303687417b632444f3e30fc4880c225867be3" + }, + "0xa474Ce23d592a232C3869513A64834b2e723Ccf9": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xf0477d2d7456a060329028971c32a1049d112839ad6b9a8e0d41444144926912", + "code": "0x994debe1129ece54bc3e58d0080c657e4b57b49bd13c22d7c016ed5f3a59f29b4a8f2534811696fb7ed42c0b67bc755be8c4b58555c78db94a4c7b3764768107e7be31a9c65c0ddf13f554a0804c3b81ee1c5361cd94c5b1b0d3d4b42f09361c9a5f52b0aa8b858876d6b4ca6afd4df27bc0b2c0203007b759c631d3cfff3fc13fd38f8530aa5fa5e7a7e3bbcbf778be060fcd7938f51ba61c29cfa2d7317a0ae7931a793ebad246669683fe0c2c3600ca9cee55528b0b323e7c261585a013906a6a5810011038c63a76db6bb2409835d8bbd31c9732bb760cbdfa75d621b09a5534f9be7d15052a6dc35949bed0cb4fd90ba01e43563e9b5123d82176259e2d", + "address": "0xa474ce23d592a232c3869513a64834b2e723ccf9", + "key": "0x83bdc30d3ea7e078f2d487a9110f41e0f3fe3a9f7eaf48b9b2284b23993b0d70" + }, + "0xae3b97067d3F027E8011DfCF496dcD1079dd12d5": { + "balance": "0", + "nonce": 1, + "root": "0x9ed156eb2e3d2c3ecdc5fc9e4f54a5ba305d7d1e475ebd55d1f0bf64cffe5c15", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "storage": { + "0x000000000000000000000000000000000000000000000000000000000000023a": "023a", + "0x000000000000000000000000000000000000000000000000000000000000023b": "023b", + "0x000000000000000000000000000000000000000000000000000000000000023c": "023c" + }, + "address": "0xae3b97067d3f027e8011dfcf496dcd1079dd12d5", + "key": "0xa5bc78ba16936293e296c3d3e919d76eb953b28dc00c9852ca4987ba0c82c761" + }, + "0xb787c848479278cfdB56950Cda545Cd45881722D": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x58571002dc11e8a8698ab7f378670c332e6832b49dd44a7de317c87969aaca99", + "code": "0xa46c9a5e42ee711d67cec634bfb278f07133f8b3c236b826c53d763ec9766625f1c66cd5ac352bee1084e866f7ef3ef0a14c943b098d4776ee3af92a090e1db21f3740a279cf2d77f66bcbcd8ca9363a902fba240cc78bdb7fdc53f368015d5a533822937425fd8b485f29fe6819cabe96466337e03c8bcb1508e67c7a9c0675040df0cfdbe2439420993d589140042c9218e6e20c99578d1a137f827725261d5e9d47962747e01107e18234d09097958f3f7626c12966c952111c0776febce91bc34baf0bdc39cb35028662cf837c92de8adfcc490dc213b82c0a99a2de03013191183bb78cf07513f1832ebb64acd65d49101ab3bce7606c66025fac20ea90", + "address": "0xb787c848479278cfdb56950cda545cd45881722d", + "key": "0x1098f06082dc467088ecedb143f9464ebb02f19dc10bd7491b03ba68d751ce45" + }, + "0xb917B7f3D49770D3d2F0aD2F497E5bfe0f25Dc5F": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0xb917b7f3d49770d3d2f0ad2f497e5bfe0f25dc5f", + "key": "0x65e6b6521e4f1f97e80710581f42063392c9b33e0aeea4081a102a32238992ea" + }, + "0xb9B85616Fc8ED95979a5e31b8968847e7518B165": { + "balance": "0", + "nonce": 1, + "root": "0x89bde89df7f2d83344a503944bb347b847f208df837228bb2cdfd6c3228ca3df", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "storage": { + "0x000000000000000000000000000000000000000000000000000000000000011c": "011c", + "0x000000000000000000000000000000000000000000000000000000000000011d": "011d", + "0x000000000000000000000000000000000000000000000000000000000000011e": "011e" + }, + "address": "0xb9b85616fc8ed95979a5e31b8968847e7518b165", + "key": "0x6a5e43139d88da6cfba857e458ae0b5359c3fde36e362b6e5f782a90ce351f14" + }, + "0xbce2408DA01DC215E427B012d1a68546F5ffcDFB": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0xbce2408da01dc215e427b012d1a68546f5ffcdfb", + "key": "0x4db0b9725504eefe9b12857cf35dca9d90d6d07bb09bdc03b7ec1974de752403" + }, + "0xc147eCDF75298b9970440371EC57161bc3B8309E": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x882d5843dd5d7da734663209498b3277b9f3847fc5cae00f2f18f8265805c347", + "code": "0xae64a54e96e21d5e6e871f7870e8711620e9d630d04b7524844b2de5b466d08aa739a51387ece9d9b8e11b8bf7e5909dc8f9657225a2c6da44cad2fed408c2dd2b68a083e1b3a60cb87c92e2ce191ad4d75579ade9934fe0d4304f1604243b84b01818f3e9f0631d183410281d3672cfa0e4d82ad4d20b2f4def7db9466081919cbbcd6da79a96e2c00832bdfed8cb53fa1ef801d1db5928e9d3c2c3cbd15933362c6fb4abf103d18f0c520f9fe75352cd942e2ab332d796e53c82787d53ca68a701929b14ac2d3f52993bf388c7bd2787e5382631ced5ceb068ae34d2902a7cee0b9e9b585169fdbe97147eee724f92c9ea9274b51e7026b85feb6d32aa4a96", + "address": "0xc147ecdf75298b9970440371ec57161bc3b8309e", + "key": "0x5bf8b42134cc2ee0654bfb8cd3f7fb4c1bf368ca51f2cd923af8eb1d7c41598e" + }, + "0xc36e899Bc3c312869B146c3B2B28a0814FfAbad8": { + "balance": "0", + "nonce": 1, + "root": "0xc784c4978b7142c2f59d78be0ea1f14a39ffec9c512f9bbe75703ef7590970cc", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "storage": { - "0x00000000000000000000000000000000000000000000000000000000000001e1": "01e1", "0x00000000000000000000000000000000000000000000000000000000000001e2": "01e2", - "0x00000000000000000000000000000000000000000000000000000000000001e3": "01e3" + "0x00000000000000000000000000000000000000000000000000000000000001e3": "01e3", + "0x00000000000000000000000000000000000000000000000000000000000001e4": "01e4" }, - "address": "0xccf0b963a645abe7b67aa6e95aea73ff9e0576cc", - "key": "0x2c5f586f46056bc6b891f7ed71cbe787e6f4839646e44d67e5c0bd737ff7154b" + "address": "0xc36e899bc3c312869b146c3b2b28a0814ffabad8", + "key": "0x01e4f3a112f7034fdcb78c6ab534de5391d2c0c3772d641f69d1465e7a0bfa1f" }, - "0xd48171b7166F5E467AbCbA12698dF579328e637D": { + "0xc48c3d6FA1afa2c203EBCe7d58f46CEE0c74AE2A": { "balance": "0", "nonce": 1, - "root": "0x944f095afbd1383e5d0f91ef02895d398f4f76fdb6d86adf4765f25bdc304f5f", + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000081": "81", - "0x0000000000000000000000000000000000000000000000000000000000000082": "82", - "0x0000000000000000000000000000000000000000000000000000000000000083": "83" - }, - "address": "0xd48171b7166f5e467abcba12698df579328e637d", - "key": "0x188111c233bf6516bb9da8b5c4c31809a42e8604cd0158d933435cfd8e06e413" + "address": "0xc48c3d6fa1afa2c203ebce7d58f46cee0c74ae2a", + "key": "0xadc8fbbe07e1a1609c3b54342d036f018af4d93ae59dd4425f6244f5949cedc2" }, - "0xd778467Da3D250d74009a0b24A77ec73fE459164": { + "0xc7a0a19EA8Fc63cC6021Af2E11AC0584D75C97B7": { "balance": "0", "nonce": 1, - "root": "0xf120c3cc3618eef211a028a99d9f010cc498a79097042dff780391ec3563ad51", + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0xc7a0a19ea8fc63cc6021af2e11ac0584d75c97b7", + "key": "0x86d03d0f6bed220d046a4712ec4f451583b276df1aed33f96495d22569dc3485" + }, + "0xc9823569b2E62F92B406e70522aDEEe24E23a827": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x84605622999eb7f957084085b52f1c7b7409059ca2e8b3560e3d02be973114d3", + "code": "0x538474d0f64483776ed44915f71ae7f0bb8a622d35cec6d7f58631c690c1e43e334c7786e3bf81676e3a0d3736526c15df34c509bc9c3d422872d2fcec03bb4c0ee5eb80d8d139aa8aaeff0e93c5d082f8a95ab74e45ba383f83aa303ed7b715851c0a6dcea6d9c0b20e1d693e72bc7e402b6eed6a9bc52d715e1495b07edd2e4ecaefe56730f3d4c9899e811fe6b6866094124a9e94dd77caa81d8bd4d8c1ad53e6bfe60438140020269ed9fe5e9e4479f1629f851a14a4608433a904faf5c8171873f192ebc553c77ac3d91f610d9b3b5d968c33b2894a4af1d74d93346ae36c531230b5ec6213920791b4b9121f927f751c23cec4b3ac966fd3d1d6d970fb", + "address": "0xc9823569b2e62f92b406e70522adeee24e23a827", + "key": "0x683b6c03cc32afe5db8cb96050f711fdaff8f8ff44c7587a9a848f921d02815e" + }, + "0xcC29d71a7dE378E9Cc11541B48a5F4E79157673A": { + "balance": "0", + "nonce": 1, + "root": "0xf82bf2c4bf4eabb1dc579d5ba1f80bceb690e6d41bec710f78acffe87543f186", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "storage": { - "0x00000000000000000000000000000000000000000000000000000000000001d6": "01d6", - "0x00000000000000000000000000000000000000000000000000000000000001d7": "01d7", - "0x00000000000000000000000000000000000000000000000000000000000001d8": "01d8" + "0x00000000000000000000000000000000000000000000000000000000000001a0": "01a0", + "0x00000000000000000000000000000000000000000000000000000000000001a1": "01a1", + "0x00000000000000000000000000000000000000000000000000000000000001a2": "01a2" }, - "address": "0xd778467da3d250d74009a0b24a77ec73fe459164", - "key": "0x6862961bf74f98147405d296a8f9d9147a02013a4bebb049a171715de1a58963" + "address": "0xcc29d71a7de378e9cc11541b48a5f4e79157673a", + "key": "0xb545359603802ec567ddb83b02a16e420860ab3daea52f2530a94b02d9129bba" + }, + "0xcF26B3672851128B3d41e65C7c8563CA54837Ae1": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0x8d694036b187e12b604aeaafd52aa967e7f7d184df20fcb1c8c234eea6631a69", + "code": "0xa3782a2fe6ea312a811ac4c42fe7783faf92d4cb89cfcb3782e3fa260888489023903e96f7ccc3c321ee90eaffc37f489d842d55a6c8ffa1ddb161af2d3fb72fda50f95f737dd96a2ff448425767f58b49e6bc691060be2dd7aee3b8374d3aa362d3caefc27072d8a29831635245f4b528ba9b3356b77b4a38e93725f0197aa02fb2ea1f5bff21afae24d3f3e60076cb2c3b5b5ab20a71202cf9d49fa1606d4a701b5d687eb62af0eb18eb02d71426f2205884f5e7acc1bcd7b47c1b498ea8c95ec353220bc9ea0f081d44c7fbe1f97d75f2b74a0c416d06ce7cc6ebc553754a26382593f450ee34359d1d633b07dd27a5a9c2d9d495db1f1762692243a2641d", + "address": "0xcf26b3672851128b3d41e65c7c8563ca54837ae1", + "key": "0xdaceea0041b683170f8d205a0ccd2c5e01ebe604b5731f89bb6c8b8a0f9ea776" + }, + "0xd15ec528baFC44EbbA397415Ca5340a5C2B4f417": { + "balance": "0", + "nonce": 1, + "root": "0xef3164f6238d01061c0559193be70618658b742eec056b27996308eef51b95a6", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "storage": { + "0x00000000000000000000000000000000000000000000000000000000000001ed": "01ed", + "0x00000000000000000000000000000000000000000000000000000000000001ee": "01ee", + "0x00000000000000000000000000000000000000000000000000000000000001ef": "01ef" + }, + "address": "0xd15ec528bafc44ebba397415ca5340a5c2b4f417", + "key": "0xcde608490277d1ddfe34418396fab0c8a7bd0bf5a1bbe962ae0f5f13453c6213" + }, + "0xd24EF00a6c137ecA8067377de36F76836B8c7EeE": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0xd24ef00a6c137eca8067377de36f76836b8c7eee", + "key": "0xa3b7b9153d8f3262ef97bbfceab8bf6e2ee4e2a8d35a6042f6a5cee83415c53a" }, "0xd803681E487E6AC18053aFc5a6cD813c86Ec3E4D": { - "balance": "1000000000000000000000000500000000007", + "balance": "1000000000000000000000000200000000009", "nonce": 0, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "address": "0xd803681e487e6ac18053afc5a6cd813c86ec3e4d", "key": "0xe5302e42ca6111d3515cbbb2225265077da41d997f069a6c492fa3fcb0fdf284" }, - "0xd9c035E32F69DaB32F382F4ECA08ac316CB4fa4d": { + "0xdA3802907F850f9b6672fc38512ae47A5778d8F9": { "balance": "0", "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x91490c55fe9d257ab92ee7c14d7614e4ce7bac6f9bb136427a3c67df010b8761", - "code": "0x941a419570a1ac7361c777110e70919980aa20af68c061451b272502d1c7bf877d3fa8f5cca21f050296be6b1a18825e0663c16cf7abb5263fd97a7042f1a7019aead984481533ddc3e1804cd415af4859e5a9209b3e78027e9504b13edc4bf9726c0239d8143fcc34d30ac6ef3f6e3a51e31b0bb7a03ff559c40434071fd48d080207eb7481f12bdcb87a64d5eef86a69742a6e85ca5bc6cbd6493c6f955c00563116b304f60034ae594a61486cd49541585ff56c84c5873e3fccb3f79c188f93526f8eb108615ff025803e1a91a242013880017345c667ca5624ba4a4111579881b6eeebb8651e1bf8e3463186d9b28eb3683206809622f3c6655c5386ebe1", - "address": "0xd9c035e32f69dab32f382f4eca08ac316cb4fa4d", - "key": "0x52ee830cbf07cbdfef612efc7475e16c6988d86442e32f31308d7c52d509a394" - }, - "0xdeD53dD3E21f2A1F750807aFeF8c31053485bb28": { - "balance": "0", - "nonce": 1, - "root": "0x86d6eca3c02c7902d9cb8308a979bb0328be4246d716a06a40304ae5fc4e8e74", + "root": "0x08495c2510c9eb2578041ec50625989b745ca0b18742fb33e6d5ee5f08e4c6f4", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000110": "0110", - "0x0000000000000000000000000000000000000000000000000000000000000111": "0111", - "0x0000000000000000000000000000000000000000000000000000000000000112": "0112" + "0x000000000000000000000000000000000000000000000000000000000000008d": "8d", + "0x000000000000000000000000000000000000000000000000000000000000008e": "8e", + "0x000000000000000000000000000000000000000000000000000000000000008f": "8f" }, - "address": "0xded53dd3e21f2a1f750807afef8c31053485bb28", - "key": "0x323982bb110cddfe49cc86eea33d47fa410394e47cd185814cf8e3d7573b216a" + "address": "0xda3802907f850f9b6672fc38512ae47a5778d8f9", + "key": "0x1d136ad5e4cbb5095ef8259a310816109b06612ac83926e67e27142ce2bc76de" }, - "0xe2FF4E7E4A28D327B030800BB65149d843D82d2D": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xd4b553aed9df4bb81dfec99c249dbb99fb7beaef39f870cded5fe5719a809f7a", - "code": "0x0dda8da39b09c5d12be3408433542bcb85e79c16e9fa698274be0a5f5c0de0fb9155f2118833bf042b9dc03ff0b395208526fb6aae0ce96bd5b48743c48f179e14f494c65b48b2269e6f5785daed2174329ff45233af29f1ab57a83ec298b66135158e6a4d60ba7fad6584323785917414cc012686456fc0f2439c277bd05cfc9c989adbdafe30987e6fdc03d7338cb0c4591d695fc239ac5a81ff2f8e808e27ae2e9d1466e10fd686cfb1a2f8b60d75f9fd753466b824829dac49112d9496996c44c6278aa5f1fb3b169e5ac7fc49bdcfc3e1806375d1855254212e157be3bf1325408048277dccf4ad3c883277c32a60bc62de3dc708503358ea4b20f98206", - "address": "0xe2ff4e7e4a28d327b030800bb65149d843d82d2d", - "key": "0x911077c76a4a16f33df9c81d27b2ca80256a7141e83339fc2f18948313012e2f" - }, - "0xe7B2CEB8674516c4aEb43979808b237656aB3B6B": { + "0xdC60D4434411B2608150f68c4c1b818B6208AcC2": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0xe7b2ceb8674516c4aeb43979808b237656ab3b6b", - "key": "0x75d231f57a1a9751f58769d5691f4807ab31ac0e802b1a1f6bfc77f5dff0adbf" + "address": "0xdc60d4434411b2608150f68c4c1b818b6208acc2", + "key": "0x8510660ad5e3d35a30d4fb7c2615c040f9f698faae2ac48022e366deaeecbe77" }, - "0xe920AB4e34595482e98B2C0d16Be164c49190546": { + "0xdd579A11208B91980dD1cAAeD24bF04C432Cc863": { + "balance": "0", + "nonce": 1, + "root": "0xa203e4c08093be9ee80f3b95c741037314e0e38cb8fa234683fa40d39ad23e3f", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "storage": { + "0x000000000000000000000000000000000000000000000000000000000000020e": "020e", + "0x000000000000000000000000000000000000000000000000000000000000020f": "020f", + "0x0000000000000000000000000000000000000000000000000000000000000210": "0210" + }, + "address": "0xdd579a11208b91980dd1caaed24bf04c432cc863", + "key": "0xe34709ccbef05a4a6e01c3e0201fd1f14abe53c2eeae29cd185c78a25936d805" + }, + "0xe57ef4A8da86f1ccd38ce12e3FAbe819fAa0a95B": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xf91b587fa3d345550ae9b246a788e2f668bf8df9071d8b4e3f07594a52791925", - "code": "0xddf72b2f62b0846ca7da60f0df0f94cdb28e603ef5291f65615841a7468c44c0710244b60ba7c1bd35ceda568c1c62624e99f11696da5612c84c7901031a9ece682e02e2fdab880917c319130d538d88dd4ea8d4b55431d219c9fc1fda9de93cc441712b999ae1b5f312a9513edfd8374c171ed2e13f457312b48a6118e30c586c90643f346afd56f022a6ddf0199dca4d55558c4e0c6b438b89dc77236b62238e8fc62d2064391f7b9dfc498260918dda58b2fadba062c23c105952e10f766b5a9adcc69eddff3413d21062a8f00e1b55efcbb4b88e08038f348ea9bf741c6d8060c339d013a28259483a9bbf8245b3f2c21722b238902c8756e3fa46291ecb", - "address": "0xe920ab4e34595482e98b2c0d16be164c49190546", - "key": "0xd623b1845175b206c127c08046281c013e4a3316402a771f1b3b77a9831143f5" + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0xe57ef4a8da86f1ccd38ce12e3fabe819faa0a95b", + "key": "0xe69a86b4c8c8a9836fdd2617fbce1d746e4bd63be4f1a1d5cc5ba1f0f409e780" + }, + "0xe6dDdBFFDE545e58030d4B8ca9e00cFb68975B5D": { + "balance": "0", + "nonce": 1, + "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "address": "0xe6dddbffde545e58030d4b8ca9e00cfb68975b5d", + "key": "0xa0f5dc2d18608f8e522ffffd86828e3d792b36d924d5505c614383ddff9be2eb" }, "0xedA8645bA6948855E3B3cD596bbB07596d59c603": { - "balance": "1000000000000000000000000200000000000", + "balance": "1000000000000000000000000600000000000", "nonce": 1, "root": "0xdd43fc82ac338ab2ee3c6203da0c8f16e893e6c37720b37ce8676f0e7c68bb05", - "codeHash": "0x3eea9094c21233d71a12df13d1f911a5f47d133c4c828a74089984eaeecf2640", - "code": "0xef0100417fe11f58b6a2d089826b60722fbed1d2db96dd", + "codeHash": "0xa5bafe820ca694bfc931cc4609c353b2311ac0709de1742204fbe051bfe9388a", + "code": "0xef01004dc5e971f8b11ace4f21d40b0ede74a07940f356", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "696e766f6b656400000000000000000000000000000000000000000000000000" }, "address": "0xeda8645ba6948855e3b3cd596bbb07596d59c603", "key": "0xabd8afe9fbf5eaa36c506d7c8a2d48a35d013472f8182816be9c833be35e50da" }, - "0xf068AE4089A66C79Afe47D6E513F718838D8f73F": { + "0xf34dA0E707b69512ca5e87e29021E6E6dC81C5Dc": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0xf068ae4089a66c79afe47d6e513f718838d8f73f", - "key": "0x37310559ceaade42e45b3e3f05925aadca9e60aeeb9dd60d824875d9e9e71e26" + "address": "0xf34da0e707b69512ca5e87e29021e6e6dc81c5dc", + "key": "0x6030160e6fde23dc02e472d8865d4601485d1a935bf320bda5f7587d194c6be3" }, - "0xf11Da605c7cE2BB45FDD1117c7A7744F505eFEa4": { + "0xf41f36C9D43AD24Ee6De564215C047b66db1d391": { "balance": "0", "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0xf11da605c7ce2bb45fdd1117c7a7744f505efea4", - "key": "0x4490d5539df3636dbe295411ff92b662bb12ea3656f46fedbf5625af73882277" - }, - "0xf820E25fAA00515571CFFa390f2fa3E96B0b5c6a": { - "balance": "0", - "nonce": 1, - "root": "0xc7839c3366ccfac78f919d8471358021b5b7d493e6532c52efe048ff2da0af0c", + "root": "0x5a82aff126ffebff76002b1e4de03c40ba494b81cb3fbc528f23e4be35a9afe6", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "storage": { - "0x00000000000000000000000000000000000000000000000000000000000001c0": "01c0", - "0x00000000000000000000000000000000000000000000000000000000000001c1": "01c1", - "0x00000000000000000000000000000000000000000000000000000000000001c2": "01c2" + "0x000000000000000000000000000000000000000000000000000000000000004b": "4b", + "0x000000000000000000000000000000000000000000000000000000000000004c": "4c", + "0x000000000000000000000000000000000000000000000000000000000000004d": "4d" }, - "address": "0xf820e25faa00515571cffa390f2fa3e96b0b5c6a", - "key": "0x7e1eec4a63dcc09bf241883e29bb53e7c377c1c0891a1b0189bcd411b20c0738" + "address": "0xf41f36c9d43ad24ee6de564215c047b66db1d391", + "key": "0xfffae3923d4ffa22ca4150e83647a3f7a442233f4f4f6d742028c3f62016da7d" }, - "0xfAbE26BC448a25eC56FF9360b19B66d56BaDFf51": { + "0xf60c9dEeF62A32528b0b4652093b8B260a208827": { + "balance": "0", + "nonce": 1, + "root": "0xb7ba1d0a5343f51a519e9545efa1a5368a6d3c59a7e4463e3744c30ff35bea20", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000111": "0111", + "0x0000000000000000000000000000000000000000000000000000000000000112": "0112", + "0x0000000000000000000000000000000000000000000000000000000000000113": "0113" + }, + "address": "0xf60c9deef62a32528b0b4652093b8b260a208827", + "key": "0xd0fb2f31b364fd56c16154fe421ea6f768a5fb87c7f0e20b4d689b6816c4d8d7" + }, + "0xf61ac2A10B7981a12822e3E48671EbD969bCe9C2": { + "balance": "0", + "nonce": 1, + "root": "0x15590989a348b65eb16aa3f8d2584fb877e412a1385225f36c247b6399764c90", + "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", + "storage": { + "0x00000000000000000000000000000000000000000000000000000000000000da": "da", + "0x00000000000000000000000000000000000000000000000000000000000000db": "db", + "0x00000000000000000000000000000000000000000000000000000000000000dc": "dc" + }, + "address": "0xf61ac2a10b7981a12822e3e48671ebd969bce9c2", + "key": "0xbfe5dee42bddd2860a8ebbcdd09f9c52a588ba38659cf5e74b07d20f396e04d4" + }, + "0xf8C11c750ab2B0276A272F875857cf535aBa2Fd7": { "balance": "0", "nonce": 1, "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x605a56872757b687e70b0a8c3c3bab8566722172023e2c89b8be7ca0601ddf87", - "code": "0xc189f84ce68d330a8fdf55d40ed2705c7b14e02dd92ac2ee8966971c2fb56ec7ead8f6c0653ac108e89227cbe7425f3b89d61d55b92d8aa75cefaf308a8fbf7e8622f55c65610f385e1d95c8f07ca152f97aa824081a0afcd103f33f6b8ca72a33871796b7313fc5499b1f5322d50f5058acefe7776b255179bf9ae1e55602027173dcd6a2b7fe9242f4c2bd4b2c88cf749fb25984608228bc83697bfa7eb5b471185a1ea5a896559cd0665d0979f85c835265f180e74502f783bd7a192bf63fece6665d217127474d08619b555ba7cf850c9566e44f26045fd57ee3fafe0590e674d6359c3bd263fc88d21d87228700bd819a703993ffdb575906e5517cd01d", - "address": "0xfabe26bc448a25ec56ff9360b19b66d56badff51", - "key": "0x7b5d2a2cc2dee3a5ba257d9324d8772b209ed8ebc559c73dadd32af002df621e" + "codeHash": "0x909e99eac3d2f939aa3734152690a23ff48fe70e0bed64695466cd46b583c4e2", + "code": "0x5a2ec50db2ca06446b795168e7be7507522174c31903d424779360a3b6f0ff978162d6cc32dc75b44adf81a1e9dc0ac7f7be79fef38219137739c8af5157a313b64fbcd928f024c431e809fae07258ca41432c098236d3d43c3c8e52253217b6eca4505ea32ae1a4ee824c5255e38a00422c023b789b59b6ce92c6731bc698919de437229a9a5b71b813b2ca574feb648a19bad8f1978fc540dba421c3042f6c68eb1985abb1bca8cc77a9e3c4ceb1ed4b4c857374b7d6d3773b5c340a823c929ed76419063e05b6bd3c4b2b3da7ac5fb72330fe54743c0f00a9c1ac8afb46aed84e31a70eda71f01446d3305fdb4ca4341833b4481c4ad865d2e6179edbb744", + "address": "0xf8c11c750ab2b0276a272f875857cf535aba2fd7", + "key": "0x603aef023d668fbda50a2b26e37969e2ee93b68d0e6f8abbdf7b6f6183a9c09d" }, - "0xfCE0CADC18035c4a6FE8279165277788826591fB": { + "0xf935652dc257EF89c33B2488BB18E2d068Bd35f6": { "balance": "0", "nonce": 1, - "root": "0x14f9f4b9445c7547d5a4671a38b0b12bbc0e7198c3b2934b82b695c8630d4972", + "root": "0x6d9d3f86b1f8f8e94248f307137ef85b10a1d57a5ac60aaf227e8cbfa2224db0", "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000126": "0126", "0x0000000000000000000000000000000000000000000000000000000000000127": "0127", - "0x0000000000000000000000000000000000000000000000000000000000000128": "0128" + "0x0000000000000000000000000000000000000000000000000000000000000128": "0128", + "0x0000000000000000000000000000000000000000000000000000000000000129": "0129" }, - "address": "0xfce0cadc18035c4a6fe8279165277788826591fb", - "key": "0x68bda3bd48de9803b2a21ffd518bc8aa99a56d7eb40cc8db1a6bf803b8693be5" - }, - "0xfcb2A3a61D3De12F554db60494f13e9477F31a2f": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0x302c2cdce1f556b5053afca77878c358d2492d7745f5cbbf9db5761df20db001", - "code": "0x50ba73278bbf571a271f39357d381d2f5f97b7d5b6a23b684b7751eddba38718b712f55a8405e8766b7610a3b707f0ea903b826c8623fa2624da135a56a422ebb8b9c4837d54a5d26c8f7e03d3b9cd37367cb9ba2a74a2e4e571a0b453433473fcbc0922eb3255790a824facc22abbf7bf018597c0700c13a6df4a019b75b3ae9ffad69f84083f437fc88821853a0555fc46dd72c6c7dcb209f949f252909fdcefff4d220e7779831f23f8b0cb0449a9525f4c42705a5e35acfb5cc1016cf81b8e7bd63088de20dd86bdf2b9ba56bd140f59161a5d05abb70bf55a82cda068e494152e7cadd4eba05f59e9c2118d2ed4e1d9e020bb8d2b37c15f90576f810742", - "address": "0xfcb2a3a61d3de12f554db60494f13e9477f31a2f", - "key": "0x678bb0d1fd0696bae4b7e06994861242bfbfe332bc030c15ab9d33c26eeab13c" - }, - "0xfdB19A177ED1B386d141e392B7A27467469fAbB2": { - "balance": "0", - "nonce": 1, - "root": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", - "codeHash": "0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470", - "address": "0xfdb19a177ed1b386d141e392b7a27467469fabb2", - "key": "0x7cf2a82cb777b7aa435dcddab99299165f8e46c83c1f9bd50206e428074143be" + "address": "0xf935652dc257ef89c33b2488bb18e2d068bd35f6", + "key": "0x20c6bc4ddb42f343ae3b98e9efeb1dbb7290009b8975fbeb29125e771aad2414" } } } \ No newline at end of file diff --git a/cmd/devp2p/internal/ethtest/testdata/newpayload.json b/cmd/devp2p/internal/ethtest/testdata/newpayload.json index 0e18cd8525..b5327ae816 100644 --- a/cmd/devp2p/internal/ethtest/testdata/newpayload.json +++ b/cmd/devp2p/internal/ethtest/testdata/newpayload.json @@ -7,17 +7,17 @@ { "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xe5d8b049a78427be8c23ebd6811ed436b3a36cc117954b496848b90f0c654844", + "stateRoot": "0xdc43f460541a253c0f64b6943ef83fa3bd601699a255622f088d46f7fde359fc", "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x0", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x0", "timestamp": "0x0", "extraData": "0x68697665636861696e", "baseFeePerGas": "0x3b9aca00", - "blockHash": "0xe5850a454eb99a0b5a4393fc9b4b3e02f8daf8079f828f76c307936006d70b1e", + "blockHash": "0xbd6a252af394d80904c5993b859574bd4669642cea00a116970ec7887db67533", "transactions": [], "withdrawals": [], "blobGasUsed": null, @@ -31,19 +31,19 @@ "method": "engine_newPayloadV2", "params": [ { - "parentHash": "0xe5850a454eb99a0b5a4393fc9b4b3e02f8daf8079f828f76c307936006d70b1e", + "parentHash": "0xbd6a252af394d80904c5993b859574bd4669642cea00a116970ec7887db67533", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x950aea7b35a0d9e8f81dfdc3387fa12aa4d4f8a043f3341de7e9002933ca280f", + "stateRoot": "0xf23e00fd68672e8e166a481663b147dad44c25bd30f8605d2f3c7a070881fddd", "receiptsRoot": "0x97a526b2e32116d208b71a92e95e23a6734f413a15a057d122b5983acf25f8bc", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xf777", "timestamp": "0xa", "extraData": "0x", "baseFeePerGas": "0x342770c0", - "blockHash": "0xbdd7b3e2623f0903d9b0f4c50c161837fc61ee01feac041001f5c5dc75337423", + "blockHash": "0x728bf4239628d65246678bb48fbf2548facfdbe47486e28e87ca1b77a86574e8", "transactions": [ "0xf8938084342770c1830131348080b83c600d380380600d6000396000f360004381526020014681526020014181526020014881526020014481526020013281526020013481526020016000f38718e5bb3abd109fa04bbfb315c19415b5e39df54c30c5a0c8d5e8100fc5e245e67623ff20dd8390279f0a29f1401eec72972b601f590b17c904db69e9ccf3e10384e4da572788269b" ], @@ -59,21 +59,21 @@ "method": "engine_newPayloadV2", "params": [ { - "parentHash": "0xbdd7b3e2623f0903d9b0f4c50c161837fc61ee01feac041001f5c5dc75337423", + "parentHash": "0x728bf4239628d65246678bb48fbf2548facfdbe47486e28e87ca1b77a86574e8", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xe155278d003025157bb43b08603da00313c14aa9f10710e72b72d69284382afb", + "stateRoot": "0x824f43a809d85b58ea76a4b1e0b378ac704e341024a50281deefee50c7ba6bff", "receiptsRoot": "0xe078709b25bc275a65cecf4c9c5e192aa3c2cbd051b6a35279c391a3ee4d597c", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x2", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x115c7", "timestamp": "0x14", "extraData": "0x", - "baseFeePerGas": "0x2da81e94", - "blockHash": "0xfacb55d35b1efa3f38d8c066ad6684b329755ad2d34f7029ae5c7c6bbc8a6ae8", + "baseFeePerGas": "0x2da3371a", + "blockHash": "0xd75c28fbfeb77a45bdc1ed85b91cf830153e50fbb1036825f2ab229f28f3ebc3", "transactions": [ - "0xf8b801842da81e9583014f7e8080b860600d380380600d6000396000f3366002146022577177726f6e672d63616c6c6461746173697a656000526012600efd5b60003560f01c61ff01146047576d77726f6e672d63616c6c64617461600052600e6012fd5b61ffee6000526002601ef38718e5bb3abd10a0a045dc6b6d59b0f906744f1d09ea500ceae82dad075a9b0868b7760966ff604870a0464b4a826cb475452d2587b8a67f0e48c98b55adef2558cd5eaf60c181a32afb" + "0xf8b801842da3371b83014f7e8080b860600d380380600d6000396000f3366002146022577177726f6e672d63616c6c6461746173697a656000526012600efd5b60003560f01c61ff01146047576d77726f6e672d63616c6c64617461600052600e6012fd5b61ffee6000526002601ef38718e5bb3abd10a0a0f4897823b552e75cd776e2271125e4b41ede67fac987809d31ed26e67204f7b6a01266df0c10c05ebae5cdc9868300926a503086397ac76a214c2843f63bb08730" ], "withdrawals": [], "blobGasUsed": null, @@ -87,21 +87,21 @@ "method": "engine_newPayloadV2", "params": [ { - "parentHash": "0xfacb55d35b1efa3f38d8c066ad6684b329755ad2d34f7029ae5c7c6bbc8a6ae8", + "parentHash": "0xd75c28fbfeb77a45bdc1ed85b91cf830153e50fbb1036825f2ab229f28f3ebc3", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x59e18bf6f9ab05be8ef42c5b91d750b0eda247201beeaa583004724130cba9ac", - "receiptsRoot": "0x75908b9afeb91eecae34b9a2cfbeda7fd4c66398fea481c89a7564e41d5da0cd", + "stateRoot": "0x6081c4f8052b95cb18ad02ea085a642125f9d5a9221cd75eb6056771cf008620", + "receiptsRoot": "0x6b31afc4d4cc15d8a534d4ffd4b09d1833513affcf76811fdfa76719b2a468e5", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x3", - "gasLimit": "0x23f3e20", - "gasUsed": "0x143eb", + "gasLimit": "0x11e1a300", + "gasUsed": "0x14823", "timestamp": "0x1e", "extraData": "0x", - "baseFeePerGas": "0x27f89dc5", - "blockHash": "0x30c554999f56478175c7d58b6911819608ec37e738e3b1de824e55094462ceb4", + "baseFeePerGas": "0x27ef8174", + "blockHash": "0x0f51f7687109662f4fc576d9db5e25cec453d9c7e34b766301028adc6d3ddc45", "transactions": [ - "0xf8f3028427f89dc683017d968080b89b600d380380600d6000396000f360003515156036577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b7f08c379a0000000000000000000000000000000000000000000000000000000006000526020600452600a6024527f75736572206572726f7200000000000000000000000000000000000000000000604452604e6000fd8718e5bb3abd109fa03c13b52b90355f3392f8134624087ca1d80e35900c8f3515e662869feaacea04a05f800daf0a81d4993f977e2b5bb3db8f30888d28ac7e4b3077c79c9028d1ae0e" + "0xf8f8028427ef8175830181ce8080b8a0600d380380600d6000396000f36000356142ff54501515603b577f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b7f08c379a0000000000000000000000000000000000000000000000000000000006000526020600452600a6024527f75736572206572726f7200000000000000000000000000000000000000000000604452604e6000fd8718e5bb3abd10a0a0c5cbfef60cb4e80e7c1e67d3a7efce942c2c9ab8ef4b45d684725b7f6cb06192a01387d0e3b29b6c7eefc31dc3b07ca2ccb27bcbd1e4eb6c8c660573c1fcf9cb4e" ], "withdrawals": [], "blobGasUsed": null, @@ -115,21 +115,21 @@ "method": "engine_newPayloadV2", "params": [ { - "parentHash": "0x30c554999f56478175c7d58b6911819608ec37e738e3b1de824e55094462ceb4", + "parentHash": "0x0f51f7687109662f4fc576d9db5e25cec453d9c7e34b766301028adc6d3ddc45", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x524c3a9d48961688fd669794a18e3dd8c62b75fab78b9c56f008fac18d8b8d7c", + "stateRoot": "0x142ebbf7309e33533bb3fb5e2294f37c78469eb08a1488bb9de24ce5d914db6f", "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x4", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x19d36", "timestamp": "0x28", "extraData": "0x", - "baseFeePerGas": "0x22ff2a8b", - "blockHash": "0xd31109a0dbafd1f1cc8c766e26e0d2c604624ff2b66bcc95baf784d3d7e21aef", + "baseFeePerGas": "0x22f2487c", + "blockHash": "0x36f99b2e62608f2ea5567d69ded0f20f485e46a4fee846d8aaf1b5c4f0cdc2f6", "transactions": [ - "0xf885038422ff2a8c8301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa0bdd3c5894ecd41fe69173487fc04062b827ef70887a998a96854288770eca1f0a03777f418485bf99684eea6842c59e2eeaf6db201f1fcc6d9886cb18fb802c6df" + "0xf885038422f2487d8301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a0c3620843ed1efb2564e9752094ba5d1e11801e881d4548cee10a44a7b2db7dcfa068bab5711937b0b6cf883318d78729a993c5cf1cba522778c9f45ef00697e1dc" ], "withdrawals": [], "blobGasUsed": null, @@ -143,21 +143,21 @@ "method": "engine_newPayloadV2", "params": [ { - "parentHash": "0xd31109a0dbafd1f1cc8c766e26e0d2c604624ff2b66bcc95baf784d3d7e21aef", + "parentHash": "0x36f99b2e62608f2ea5567d69ded0f20f485e46a4fee846d8aaf1b5c4f0cdc2f6", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x3616ac845c5539addfdc3c8495c3e5cf92ca55638127a25107dde16fef02139a", + "stateRoot": "0x59e2de990d89e2f2b3eba24141b807554f7dbef4cf0fc1e8bd98072d6d7d235c", "receiptsRoot": "0x399a62e49d637d071f11c70ab4fd9aca6de920b3fddb2b1c9739e107d60d683f", "logsBloom": "0x00000000000000000000000000000000000000000008000000000000040420000000008000000000000000000000000000000000000000000000008200000000000000000000000000000000000000000000080000010000000000000000800000002000000000000000000000000000000000000000000000000004000080000000000000400000000000000000000000000000000000000000000000040000000004020000000800000000000000000000000000010000000000000010000000042000000080000006000000000000000000000000000000000000000000000200000200000000100200000000000000200000020000100000000000000080", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x5", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xfc65", "timestamp": "0x32", "extraData": "0x", - "baseFeePerGas": "0x1ea58e20", - "blockHash": "0xfe55c597a9aa81a0233ae2e1aab26b32a2cd890978bbef31b3a3517217d587de", + "baseFeePerGas": "0x1e94c951", + "blockHash": "0x082b9e67d24da6ba292e97c571714a810c6fa187fc70171b761b47c450f14229", "transactions": [ - "0xf87c04841ea58e2183011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa060f7133945281b66a86cbcfe120e0801afbfc9abfdec1597397233c44a758b77a0592c06634ac4f7e82d40f52c2dd92686f47b45382d0256f87f386ae5f3b09d20" + "0xf87c04841e94c95283011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a088cb362c8a80ddfd6e0492ea884a21d1af16ba5ed270c20690f564324586ff68a0706ab5efcd4295bf32eeaca07aeac18b3df84225967ea65e40007837e53cdb0b" ], "withdrawals": [], "blobGasUsed": null, @@ -171,21 +171,21 @@ "method": "engine_newPayloadV3", "params": [ { - "parentHash": "0xfe55c597a9aa81a0233ae2e1aab26b32a2cd890978bbef31b3a3517217d587de", + "parentHash": "0x082b9e67d24da6ba292e97c571714a810c6fa187fc70171b761b47c450f14229", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x89a905393431866fe45f07895e3045eee539820dbdcd9bad7e9a75afa410de6e", + "stateRoot": "0xd1a3e48fd8aeed880df1bc87896b1a7c182e882b54579810e549443c6df2ca89", "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x6", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x1d36e", "timestamp": "0x3c", "extraData": "0x", - "baseFeePerGas": "0x1ad438f2", - "blockHash": "0x55e4cf7027d011ce8517b43ce6dbacad82fe7b48b89f1b1053a1d02013be10fd", + "baseFeePerGas": "0x1ac29c11", + "blockHash": "0xf23d9c0afa4431611e843a618a98181b4c5a6dba2a448c43b3e5eb057128d126", "transactions": [ - "0xf86705841ad438f38302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa04618d35cd148b289eba951b1b67fba60ed0c71ec6aa072f01843f0cbb0a6f8e7a01d7d73fba778e165db04d8502f224ea7a2bcb7482c506a036c831cebed70f2ed" + "0xf86705841ac29c128302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0a4f2fec763d302705e1addb2d70408e971d740c06a9ebbd2d448db9cf916fb70a02d1c26bd68d9238dc291250d4544e7b603659bf9c587bf54b9977956df7e1bac" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -201,21 +201,21 @@ "method": "engine_newPayloadV3", "params": [ { - "parentHash": "0x55e4cf7027d011ce8517b43ce6dbacad82fe7b48b89f1b1053a1d02013be10fd", + "parentHash": "0xf23d9c0afa4431611e843a618a98181b4c5a6dba2a448c43b3e5eb057128d126", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x0d0e92ffa93004447ae8c651e98a8370ea156e4fffeef500a1be099fa982fad1", + "stateRoot": "0x19b3325ebeb449a0d98d17512c9cb8821ae076bfaa6c678721e98de125b907e6", "receiptsRoot": "0xab3d679c59ae2bd60b09801e3dcaa843b6231d88f744e2d4fb89607f4232b7ab", "logsBloom": "0x00000100000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x7", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xbfac", "timestamp": "0x46", "extraData": "0x", - "baseFeePerGas": "0x177f2512", - "blockHash": "0x1b9b663eca7124419b9131f1045a0edbc4154e026f4fc7de8311d459246f2eff", + "baseFeePerGas": "0x176af771", + "blockHash": "0x473e30aad90c807a9b4d16ec01b7f03296b16bbbc62824a9e7034db8d623afda", "transactions": [ - "0x02f8d6870c72dd9d5e883e060184177f2513830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c7e2e8b49f93a4f1f656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a03569f740e521d8bb11c5b72660dc96272ad66bfd811ed918c3a9e02acd4ade8f01a09946d8fc8ffcee7840c0fe223ea25f630d1e734432787ecd0b5107f773253849a03ee58d6d70214319409499d220ec1555ad458e9c312b660c79afe19cb68a89e5" + "0x02f8d6870c72dd9d5e883e060184176af772830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c7e2e8b49f93a4f1f656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a03569f740e521d8bb11c5b72660dc96272ad66bfd811ed918c3a9e02acd4ade8f01a094465f8e0098f0ff2023b5a401f6c83f951866ce96c0f496198dc8562cc5c2f1a0595084d2e72d16377a3200e2b602143939b17d80e637534ec01fba789311ba91" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -231,21 +231,21 @@ "method": "engine_newPayloadV3", "params": [ { - "parentHash": "0x1b9b663eca7124419b9131f1045a0edbc4154e026f4fc7de8311d459246f2eff", + "parentHash": "0x473e30aad90c807a9b4d16ec01b7f03296b16bbbc62824a9e7034db8d623afda", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xd47e264283e68d12bba8070826a2f72b06e3bd92527a56d74214a406fa4624b3", + "stateRoot": "0x8b926982786c38e5d363b6c0b8bcd5f190ba4309b447724334e365418e9ac423", "receiptsRoot": "0x59df46f0e6bac1dc285d10ccd74b357af596460248be25ef75fc47c7fac1a39c", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000001000000000000000000000000000000000000004000000000000200000000000000000000000200002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x8", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x50", "extraData": "0x", - "baseFeePerGas": "0x14913581", - "blockHash": "0x61322084e9721face5911ca9988aa668185e1e2786057fcb069cb29c8190bf61", + "baseFeePerGas": "0x147dd744", + "blockHash": "0xe7925f8091671141f5d8dc167b12d37a1f64242c996f6889babde63839e6963a", "transactions": [ - "0x01f8d5870c72dd9d5e883e078414913582830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c92c0a3cd8b571ac5656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0881a8434f98b103a2ee48727304618ca54234f1474c44bef70c21accc4dbc0a780a0a6d4adfb0a6bbc11fffb1025bdc8e0216316178f3b9bb7275f0d71a6df68067da0454a6e70c9e349890bdd5c9bf42ad3d4809d8bd246fda129dcacabad1d43c228" + "0x01f8d5870c72dd9d5e883e0784147dd745830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c92c0a3cd8b571ac5656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0881a8434f98b103a2ee48727304618ca54234f1474c44bef70c21accc4dbc0a780a0e2d1ea38dc487de618477d0e38d189765addf5fedf5190cf606fa35b0c12033ea05d26448c5b071496b2f991133b9f65928a4b2a685395b5648580a36b9a3a1688" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -261,21 +261,21 @@ "method": "engine_newPayloadV3", "params": [ { - "parentHash": "0x61322084e9721face5911ca9988aa668185e1e2786057fcb069cb29c8190bf61", + "parentHash": "0xe7925f8091671141f5d8dc167b12d37a1f64242c996f6889babde63839e6963a", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x498a464dec3c6e5290fa555c92cb8a865b30cdce6682e1ab1871c6a36e0b3e2b", + "stateRoot": "0x654f55922865e39ca98c5998bc2a02d0de19a8facefbb9fa34c4fac2a36e5bd8", "receiptsRoot": "0x7427faac1fbc3e399bb731da9429aa768a3c2c054e1ec11c64625942bb2ba0c3", "logsBloom": "0x00000000000000004000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x9", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x5a", "extraData": "0x", - "baseFeePerGas": "0x1200de71", - "blockHash": "0x3af964bbb4a63a63e6110faa9b27c25ae5c1e22d9273a2b60f43c71b6b4bf31d", + "baseFeePerGas": "0x11ee5668", + "blockHash": "0xc849ee85e61206d41e4a84b6f96eccddad3181a8f4d3fcb9c250dfc27f7247d3", "transactions": [ - "0x03f8fc870c72dd9d5e883e0801841200de72830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038ca66c701845710c6c656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a063cde520fb894276a981d2c9099bef9beb949121c1be98f3abe1b721d880899f83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a00fb516e328b806289d882c3ea936d603a2231af896649eb0e49d805152f5f2d4a043e7d256698deeceedcaa310c055ff85b3d7805e7fad3b540ab7de9463011738" + "0x03f8fc870c72dd9d5e883e08018411ee5669830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038ca66c701845710c6c656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a063cde520fb894276a981d2c9099bef9beb949121c1be98f3abe1b721d880899f83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a0b42b328c611e0fd94d62f85deb12d2d9a504bd2760581b3cca3ba07e56403c09a05021570d8585e98b5bf49004db7d90ec09595ff87e72fd013d2af5a5b578196e" ], "withdrawals": [], "blobGasUsed": "0x20000", @@ -293,21 +293,21 @@ "method": "engine_newPayloadV3", "params": [ { - "parentHash": "0x3af964bbb4a63a63e6110faa9b27c25ae5c1e22d9273a2b60f43c71b6b4bf31d", + "parentHash": "0xc849ee85e61206d41e4a84b6f96eccddad3181a8f4d3fcb9c250dfc27f7247d3", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x5561c28bf67d2f12f3b0df3d4865cc661247a904e0f64fa82cd8e8ef80610691", + "stateRoot": "0x8237acbbfa9bd4194321f36611240dd5966509ae0a76e63b66da49385f775e90", "receiptsRoot": "0x4478e3b373311a23ee4d53203c0bd7e990e5e81cd616e690fdc8eb2a784e5020", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000100000000001000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xa", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xc268", "timestamp": "0x64", "extraData": "0x", - "baseFeePerGas": "0xfc25878", - "blockHash": "0x7530fb1515a8ec5b024a700bf0220783269b1e2edc3d215207c96bf5c5539632", + "baseFeePerGas": "0xfb0be66", + "blockHash": "0x29219089f7ea2e7ee590b815240304490baf2a2562eb8c71f71dbd2dfecb74e3", "transactions": [ - "0xf87709840fc25879830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c06072144caa6635a656d69748718e5bb3abd10a0a05f933238929883d03102abfa12902de040aa3990210570fedfc48c6820fb9a8aa04edb8bdf127341d132c798f7203e62b37bd27dcf361732fe918792e21066b3aa" + "0xf87709840fb0be67830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c06072144caa6635a656d69748718e5bb3abd109fa07e5a5e5799539e1bdc54fe8322878120970f40ddec8ef4ae11398925a56644e6a02761c08cf79048f11752b09381e24ace2613c771eace32a2e36e75b346c94cd4" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -323,21 +323,76 @@ "method": "engine_newPayloadV3", "params": [ { - "parentHash": "0x7530fb1515a8ec5b024a700bf0220783269b1e2edc3d215207c96bf5c5539632", + "parentHash": "0x29219089f7ea2e7ee590b815240304490baf2a2562eb8c71f71dbd2dfecb74e3", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x5b2457ac13c8edf5deedd62c51bfca391a8a4b99d7901ff251c56658f74bbae9", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xd14b9628bb9f5857619fc3f4728d5cc49e9dcc35336a702c45c13bd033e8af62", + "receiptsRoot": "0xf3a28a355739a86089c6d4787342faa0715befb3233623f4174ccdb0db5218e5", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xb", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0x56f2a58", "timestamp": "0x6e", "extraData": "0x", - "baseFeePerGas": "0xdcb6245", - "blockHash": "0x7167b82e4207928eb75fbe741b29d18fb5d469fa56c93941223667a07d183c44", + "baseFeePerGas": "0xdbad13f", + "blockHash": "0xc2edbf6987d529aeb53f0446650f0c76fd4aac53d87319bd3906700461531e28", "transactions": [ - "0x02f86d870c72dd9d5e883e0a01840dcb6246825208943ae75c08b4c907eb63a8960c45b86e1e9ab6123c0180c080a084acd22563552cb084358e49c7d881c7fd44d2bb47becbf7d45db91a89d256a0a0693e415095b70f8b616169aba614e663b0dcbad5b55b427407c8e11a70b4dc85" + "0xf86b0a840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd109fa0060a6a836a44684639ef8ed0f7204f457fd973b55da0b4d3b66c8f6ccff16707a0480a1af9cecbf3d37245c19a47397b2036f9a2524c5e2e64cd0afc971c2e9fc8", + "0xf86b0b840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd10a0a0638bfda948e5c187854a8add419315a42b1df21c15987f04772953465e801375a03e928122969c694cfddeee640b1fa0e790046666b23d5146390bbeb1c009a5af", + "0xf86b0c840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd10a0a09a2edad519690563258759508a898df82bdb9f408191aa0079ae5e9756e74c40a03f563b9d9e602dd0bb668c56943bffbca60506d44438b888fcc9d5a335e8ceea", + "0xf86b0d840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd10a0a06ac6618b278b0e1318863a91fe203261f8ee5df34b195b6d91a27adc63e41409a064b5ae48ca2b67407a7aabf8931b5f921a758cfb3f6f07436bb3153b9fc28d0e", + "0xf86b0e840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd10a0a02f40a5218eda11e6f1fad4842b53456a6c278f8c718995281a81d32e8551c264a04dc53af93a9b4bd86741abe1ab17453b2a9f5767d4511722626128b58250a76f", + "0xf86b0f840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd109fa0a2e2ba0f486fc14e6d58303362a72b51806098ce9887f6b490670710858b3e9da02d9adcaff934e2b20977de9a179531502bf848c047ea37145f51fcaf7eb9c151", + "0xf86b10840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd109fa0cfc44bbbab9da16643ccecd90577f1d21743c424d62858772e342e21529fde34a02647b1fdf866593847ca3951ea05b9c44c243d14d3429ee6b508eb831ab72b19", + "0xf86b11840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd10a0a022fc38175f83ac06447f422aed377cefca994fdbddb2f6aa75166f0f6095cc50a0595171bb2aac874629a81374705277b3c250921d3346a5c0fd0b5ee47291c5e8", + "0xf86b12840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd10a0a0b7a5ca9171575d69f7b1091f9730cf783f13112f8af53897a55bdc226a8a12e9a02170fcff5cac92eac7c2565ba096f9e6893f90a1ac0d89ddcc9c1ec0882a5f76", + "0xf86b13840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd109fa0f01f5c7654f62e2eefc87845eeb9e0845cc2b90823257cca63520d15bd33d95fa039ec90117e19629be1fb59a411a20ee67c28aa09ab95a86e021baa2e20b33591", + "0xf86b14840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd109fa0420cc50892e5c7eedefe4435da5699d33948fce6b9b9ca2b63c87ab629c540faa0500bc84d8acd87ecef0a195a57ad94b9eddf80aa67829e88f5ad9fbae4708a20", + "0xf86b15840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd109fa0495da220099c70ec6b9e83300eb8b3377007849a8272a160b57cbbbef2a2ab63a06ef72c9b22dc5180ffe2f6dea4cdb4afb04c02a2cd0bbd93334dc7c14c0e9b80", + "0xf86b16840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd10a0a02397f7b681c73a677f8f2585cf53a90f5e42d0f86610892ff4c93925e5db8e38a02cc58fd6423aebfc544a386e03d04c2e31609e3b820b089b950374fe9095284f", + "0xf86b17840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd109fa06e92957c7d28f52e286210f8435fcaf911fd4acadfc57d3c965bd629b141a748a024e393928a755068e71a4b9b5e2168d1a8e084a3fb0adcdd327bb118cc57689b", + "0xf86b18840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd10a0a0cfbd36c74d424cda119a40a62d08db755860b7d0eb5ba2658bcd25c005917707a02370319d26b9830067dccc6c105266b753a43a83c72986fe19333b2565b60778", + "0xf86b19840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd109fa074ecc8edea50cafb80ba9c60935f4a666188c6be49575edeb5f3d70dd5671112a077f9fb4f34119f4d7ebd16e7755db476285c9e09c72fcfa714fb04d39eab4358", + "0xf86b1a840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd109fa0ea7684569fe50be776abe088bf8543f87d97a6dd1944ce5d717a472f198e1850a058e193c82c62c3d73337ef43805b1937ff9bb0870fd710e957b8c7a8b3f76943", + "0xf86b1b840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd109fa0b2a332d784def48e24ba963f6e702636f39cbbbb56b7882eb900296f6615cfe9a00b210739e9cbb2dcc733ddb3ca4e4558fcdfb6c32057e4a6da58edb8b1661886", + "0xf86b1c840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd10a0a03624214091f93d21521544b8cb7e93faf8737051202ff9f2800088cf127bacc4a07577042e20768cf2cd929b1de9ff069f660d65aa52178ea641aa97ca87cd5ba2", + "0xf86b1d840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd10a0a060f12ef39523644f134b4480ebbc1a7e1123535ccfdbeaf9a7f897708ca32f75a01708d66ab7ba596de1c1c3a5386d47d1cea995326e24478474c427a250d83d92", + "0xf86b1e840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd109fa0548594d45851cb1ea7ad4c5171465c938d8eed84de515aeb08744ac93ef7b808a00dd5d2dd5a4505a801a29072791e8386494963ee17010f0b2110615744e2b95f", + "0xf86b1f840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd109fa08db61cf15a694bae68c3329019b07cd2fb8301c9ad954dd000023349d2e14b9ca06b7fc40eccc565de423d69dd3c340b502e7465d8e8bdd7163076a33ea5fe9b9b", + "0xf86b20840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd109fa04dc70ede29948a29fcf42e50f2804cb2445395fd268506e17f0d3e6147689b8aa0750f560de32d82e6ae5ed45ede053a49285b87e6533b499daf24f86874f76a0f", + "0xf86b21840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd10a0a0c0c55f52a0cbbd8b22b112c9972291b453c7bc434747f07c8dcc4b2b6f63ebb7a001867890b6e29ff99f8f2068cc6ff8bbf45f32072140310390600646b230d6c3", + "0xf86b22840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd109fa0f46f282c689c811e33116625fe6119527ca380ed9b931ee8f445b05839798c8fa0631721fe60529ba2da01a5c70313a4bd381be5c16029cac70f92b4ed61e121ff", + "0xf86b23840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd10a0a0bb19159d6a7c7b5024e4f1fffe57749eafee9635ec546d41a2fccf8caf97dd6aa0215308ae67f9ab88c7280d075194c8153118358bacd62ccf40b09b1bf6497538", + "0xf86b24840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd109fa01225dadac9cf8e2ba0bec73ef248cd363334c0d78b1f8b5e0d98a4feda6620d8a039fa9e778a792853965c54b8add7f3fe9dc8a5a634cab43adb88ca252b132e2e", + "0xf86b25840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd10a0a01b9a4ea9a82cdd0f91f76f444f3f3dc42bea7bf1d04771afbffd9b392990416ba06c8bd75045c15c291e2f7ee1e477358d173c7cc0571ba7fc1edbb54ba8f32cad", + "0xf86b26840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd10a0a0767e765c1ac0bb5a344b4af14486775c2c2d1757f8ed2c686878d4eaca0afde5a00c3daafd17d6f6e4e1ad7e1755a8a9043787195177dbef7629554414c55b5fc2", + "0xf86b27840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd10a0a0e1aac35219301b58a49eb944553e103497c4ede0be1a9ce4ad84b2cc94497ec6a072ca5fb40f7a9b6a8558c3e4dce03bb5e2f4cd27faad293d410634851601dfed", + "0xf86b28840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd10a0a09c452ac6ec4d2e35cc24e0839137d47be044f00d848796fc65557f56d4f67038a060fcc91de163c162afc0fa80efd6a8b63fd1a02b43c00e8394821848e2549426", + "0xf86b29840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd109fa00f3c92f8679ac5f1801714ffa74ef211c9eedf6e14742cd00aaf98d227f85420a062195bb65c91f17f92121640326ab9091b4c434283cd24d1a8daf15c46f3725f", + "0xf86b2a840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd109fa0c641996cf5b8015c3981535bd892f14355b4f7277d3ec96e95f5b2e668be2f81a0349f1f66f2ffb544be70cb53447b6b64884b16c28b04bc961fe730516c9a7bc9", + "0xf86b2b840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd109fa0da0ce619a88bd01a7f2c6227950446be3e19c58d8b410cf8d625a6f879bf659ba04ea3a11a64f65a80a8d653375acdb6561a07e22641079c570864d48c2c8b4194", + "0xf86b2c840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd10a0a0a84627a1e6d0f0ac36b6b0b13bb94e4fa5cc9747942e7b9118274af6fcfe8de6a07cb0e5b3338d042671bb55b95a381a9fc73db0cf8bdddb3935e0a17deea5614c", + "0xf86b2d840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd109fa06639660bb59ef8cccad4033082b47af20ed3e099ffcfd8b5c27e169bebb35155a01355e2193aea0d9d861529a6b48f9e526a3a167101e6acb6d2608ab7253c9398", + "0xf86b2e840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd109fa03b452b7cc5bc8ee1395ca8b20fe9abbd7975eda3bd68d3ae983fb2dd16d5f9bca04c27b31e1cc4a91b332f5cbeda438228ddefa0515955f1d7fe5280206b5ab437", + "0xf86b2f840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd10a0a0829bcb7861ff510c72f125e85f2a84fab10d67334da46a7162fcedb2200c6d91a01f6467f80652001981294388f2c7085896a0e5e706319639df6761c790f50cb5", + "0xf86b30840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd10a0a07e6d86cb2511e2b430de99b1f693fd355f5f49a628136c4ca6ed1f013be94983a06d13d6a4a03139fa79bb928cf1d1d0ff24a94895aecd679b367e913afbe69bc2", + "0xf86b31840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd10a0a0bdd7ef416f1bba4f95e3b0e8589ab843fe13f2dc17b114e0fc7052242fac7423a00f3fc584e0c614a0f9d0324ed8f50a07c4d5c605aa630fab8e3164fe7e57521d", + "0xf86b32840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd109fa01fac2355edf58cca0b855cbb0b22020e091e6cc005cb157d59c88c48796fd41ba048175c688d69cf760cffe51a9f10af6710026ee409fa8fcac1305fdcf16740b9", + "0xf86b33840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd109fa0e612287ad2d26780c62b08c05e50b52c99175b4bb82b844c3fb4e53e59043b6fa076c380af8a1d56a436d29ec15c7a56a38ccb6780a82ad434de2926c3f4c450ae", + "0xf86b34840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd10a0a084c6a71cb2dc8ec1c043077e9d8a286206fdd7d5208d050184ede16787339e72a0086545d7e5cfefb9b80c70407e6e9cba45d42764196f885c6acc244585d9f7cb", + "0xf86b35840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd10a0a01f598656efade45f7162d391407a113f5bf3d37000a932a13c9843aad0555a8fa03500d192cd8eca8ea3d817308ddb6a06cda7656ae2b581d05f4f5682b6811719", + "0xf86b36840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd109fa0dcd026db847233875ce87cb3a76cb0642d309d7f0064dd1f9a25110c7e396b56a00a8e0c7d3b8940263eb311432402f76dc64b1a59e5fcb7259013fa8bc114833e", + "0xf86b37840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd109fa0be2242fdfe22f5a8d954c9a6f6121d1802def0ce28c0b26f802dd75190c5a209a05159d049dba56843d954cd30c01e22b92c4d5719053cf8a1b20a013295d937c5", + "0xf86b38840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd10a0a0f6ac311df226aa9c056a50d52ac5a9a7eff0fd5f9e769eb4246a85e7dba851e9a07b3018eafe83b112ae5cab6613c0e232a23be802ba9a794ed5c829218179dc32", + "0xf86b39840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd10a0a06b3934dbfa85b7c568d9bd27f6fa0d5ae3706d4d398f7f9d4019d6b44a5878fca04300596f37fe39fdf6bfd46466b2eac00c563aae354842f9fc1d071c593e45a8", + "0xf86b3a840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd109fa08f38036099c59808c4d0d119d1762b368c85263020cba34a7957ab670bdf1d57a055d5bdc38deedc0a5c2c4b1165f040120d5402043d2af2cda1fe1f5ce10fc688", + "0xf86b3b840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd109fa0a7f52c6681b6e2187f5977bb350eaa5155d4939453c28ba747fd8da231ebc316a043098bbc0372a4d377942c07f5034f655ad00f98844c03773536282bc0e872a8", + "0xf86b3c840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd10a0a02ca79809610eca633936917b5533c33e6794798a6f7db48a97749afb7953facfa026778202f95bb963c18ab61af0f1f098131fa1df41c48ffe1f12b2470a7d9795", + "0xf86b3d840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd109fa07292476592838b3633834075318fa1f0cf49ff6436170f8faf35e3ff75a38492a0107c7eb72a64156b369d3af33aa5ebe02da8bf6fd6584932626126100ec04b08", + "0xf86b3e840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd109fa08810c5b2fc1e46ce53d9b01576060fc0a2f58ed939b306c7a1a5709eac11ae4da051df54b5ef5bbc8eae34558f5080518beee54ddaf3770078404d619bfa2dd986", + "0xf86b3f840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd10a0a0b116d34b2e6d2d4a73d4ded705cca85dcac9e1c3a7e4ee918fe5f7edf0794b37a05ab18a2bc09fde1e6c7e39cad506861e2ea9bad2153d39b7adc2a13840b6abec", + "0xf86b40840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd109fa0ce5601db035883ea12ea00c38e1da64adc35eedc039bdc730fffe6210962ed1fa0629ce0178fc3ce483baf32ccbc709c69eff28ad5d73a827a6b1f68c556953c0c", + "0xf86b41840dbad1408318d7a1948dcd17433742f4c0ca53122ab541d0ba67fc27ff80808718e5bb3abd109fa08d0611d940b6ffe8a94be47e1b38db5a0499175ac14ce4f5e384762de57764aba0157b81dc3d4f2f653869b2e98352e5f6247560d887805ca4cf662c5902ee0b04" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -353,23 +408,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x7167b82e4207928eb75fbe741b29d18fb5d469fa56c93941223667a07d183c44", + "parentHash": "0xc2edbf6987d529aeb53f0446650f0c76fd4aac53d87319bd3906700461531e28", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xd3dd7c33bb46023c18a65ed23544cd1fa6cb94f44ed609ef6c2f7a8d66ed4f54", + "stateRoot": "0x66fdc6cf3203f8b3e6ae74fda946e0af609adb8054fcb57bcd84a1e2e65aec91", "receiptsRoot": "0xa073f3de39b2256f0a223d83925e01b3ba1924797d00c334d406fa19adc17631", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xc", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x21b95", "timestamp": "0x78", "extraData": "0x", - "baseFeePerGas": "0xc1273e2", - "blockHash": "0x23d7c4e274d71eee019119e9403d83ae181d9555d30a81aa0660c2103360f126", + "baseFeePerGas": "0xd0e81f2", + "blockHash": "0x0263c20a17979b8bab4b53b9a8b028faee4ae62a22fd604e17c72a1c5113c5ab", "transactions": [ - "0xf87a0b840c1273e383011c328080a3600d380380600d6000396000f336156009575f355f555b305f525f5460205260405ff38718e5bb3abd109fa0d5560e311f2a2d1711dac8694b2a896df37d88199089c31f35080e3386eccbeaa0731d81520db66c0bd7fe2bb6f5afdf77615352197b3d909147d4fc390d87ef62", - "0x04f8d2870c72dd9d5e883e0c01840c1273e382b3b09400000000000000000000000000000000000000008080c0f863f861870c72dd9d5e883e94417fe11f58b6a2d089826b60722fbed1d2db96dd8080a039590402b13d3414ae54091a9923801c47a76664357c75650a8b84a185a1ba9aa012a807778ca1bc0a9132371ebd97e4b90b58842e8ca19c88ec19dec719b08c7601a042ed44bc123804a06c01dc4363881012c1d6fbf3ab10930af1ff17e7ea05e4c8a01aba6b1d0e03da9aa244f7f5148c7795db17a3864db721bbba1816f28c4accf3", - "0xf8720d840c1273e38301117094eda8645ba6948855e3b3cd596bbb07596d59c6038087696e766f6b65648718e5bb3abd109fa02ee2b3da4dcd45d653a95a338bc9e574509c9d2c5b9367faa2e6bc8c9a8553c4a0191fa50fa1a1b10764d71be4f17bc39286bba27c79ed50eda88a5f197e281886" + "0xf87a42840d0e81f383011c328080a3600d380380600d6000396000f336156009575f355f555b305f525f5460205260405ff38718e5bb3abd10a0a0b45c37f931427032a0c03102b40207dc61a86ffe4b441817b93de10cbe878805a06d80157ebcdd81ed19c7cbf0ab4867b9454c55acbeb73fc274ea03b028f35031", + "0x04f8d2870c72dd9d5e883e4301840d0e81f382b3b09400000000000000000000000000000000000000008080c0f863f861870c72dd9d5e883e944dc5e971f8b11ace4f21d40b0ede74a07940f3568080a0b1374c6ae2e6a067776f1cf11b547c3f0d6658b92e131c31d50d19b0468506fea078843e0f436d58049f084c8057701c490bd8b3e6cd7dc018c5d5ef26c4f8fed380a00781a3a7695968cd136e3c91bd6c368021855323fd121a565d394b3e6b5c6522a04421609cf1f129c97c305cdf6395064d9bece86d609e5fce621e4b69c1f58d88", + "0xf87244840d0e81f38301117094eda8645ba6948855e3b3cd596bbb07596d59c6038087696e766f6b65648718e5bb3abd109fa0eed30d4827a6094bfbd36d418b62422ced674f50d9e6d53c27499ef79af232d6a044c03f449fda39275856086d2fdc5d577f4d3d28ed6a44b864dd0daae42e57f7" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -386,21 +441,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x23d7c4e274d71eee019119e9403d83ae181d9555d30a81aa0660c2103360f126", + "parentHash": "0x0263c20a17979b8bab4b53b9a8b028faee4ae62a22fd604e17c72a1c5113c5ab", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x886aac3e90114014faccd1d17dc60c5693a41594a48a31dc2c5049c9790ae96d", + "stateRoot": "0x8899c6e3a9ed9597ff128c704dd93e40c42d1d6c22cc13b8c306576979996064", "receiptsRoot": "0xe4c268cbbfa69cbaf9df3ba67fbc172a06bcbc45b5328a21232249c3fa7cd65d", "logsBloom": "0x00000000008000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xd", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x21259", "timestamp": "0x82", "extraData": "0x", - "baseFeePerGas": "0xa92fa1e", - "blockHash": "0xcbe5c6da730320128cc63a3c2454ede30738fa0d59a9e9de2e90f58b1938333a", + "baseFeePerGas": "0xb6d1434", + "blockHash": "0x96767c27f1be95f86f185bdc4f2ad2b9d0cf8fe0179912270b9f09a56dd885db", "transactions": [ - "0x02f8ab870c72dd9d5e883e0e02840a92fa1f830249f09400000961ef480eb55e80d19ad83579a64c007002843b9aca00b838b917cfdc0d25b72d55cf94db328e1629b7f4fde2c30cdacf873b664416f76a0c7f7cc50c9f72a3cb84be88144cde91250000000000000d80c080a0cb1c18b2bec62be2b64921b9d3ba10e7803970317a6b472986f52e5b6b5e6e08a043a8be395aef9cb8873067302ca16e2009f572c46a3594e253107e18dc26f892" + "0x02f8ab870c72dd9d5e883e4502840b6d1435830249f09400000961ef480eb55e80d19ad83579a64c007002843b9aca00b838b917cfdc0d25b72d55cf94db328e1629b7f4fde2c30cdacf873b664416f76a0c7f7cc50c9f72a3cb84be88144cde91250000000000000d80c080a064c7e81464d6887c191d7fb7a79085ecc793aaa58b0412c3e14955e58ddf34d6a01a785503cd7104aae3e8c6a71c5bb38c99a9f6b1098a0a95ff2cb9a60f7d5793" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -419,21 +474,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xcbe5c6da730320128cc63a3c2454ede30738fa0d59a9e9de2e90f58b1938333a", + "parentHash": "0x96767c27f1be95f86f185bdc4f2ad2b9d0cf8fe0179912270b9f09a56dd885db", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x273a92dcd7e5b69db9a05c78121c8a932bb3bfd03e53b49fc7cb0bc8133bd63d", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0x96887a3713f1535d1e6177897815a84ef67458961637bc5765d4da7c2fdfa7dd", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xe", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x8c", "extraData": "0x", - "baseFeePerGas": "0x9430ac8", - "blockHash": "0xec7e5f7aada029114c5b556586e0e3c3ef3a39dde955f379ccea43ef93acabbc", + "baseFeePerGas": "0x9ffc667", + "blockHash": "0x998edaa40eab431c0cb0907adfbbc45bd0559758eda2cc11ac1d0142783db4f7", "transactions": [ - "0x01f86c870c72dd9d5e883e0f8409430ac98252089484e75c28348fb86acea1a93a39426d7d60f4cc460180c080a01861188078feab73f7703fe6588d303f43c3439f1f9b99e71fd094140e486cafa05eeb3113857b44050ab6cabcb24b8ee60528806a15592a7a97479c380a12d8c0" + "0x02f86d870c72dd9d5e883e46018409ffc6688252089484e75c28348fb86acea1a93a39426d7d60f4cc460180c080a06c83d9175fbe6a4b8efdcf0d342435b8c47bb34c317cd6ec57ced5c02defdcc6a054ad6cd4d8d639ee951ea7395355c67c9cec481ac9f2b7d1120dc426cd8dc2e4" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -450,21 +505,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xec7e5f7aada029114c5b556586e0e3c3ef3a39dde955f379ccea43ef93acabbc", + "parentHash": "0x998edaa40eab431c0cb0907adfbbc45bd0559758eda2cc11ac1d0142783db4f7", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x7e6fd4b6f397fe383c121c08a5b9b6d3ea854313afcbeec3060ee88b5b2f782d", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x9639d7f2d0b564d1153f42ef9b400f12647c1374af7ecc694f1c0ac8ba6b92a7", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xf", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x96", "extraData": "0x", - "baseFeePerGas": "0x81afdf7", - "blockHash": "0x7599aa2261eece5d6075f09401692a0ee37815ad63946cc80ab3ba29838c00f8", + "baseFeePerGas": "0x8bfd912", + "blockHash": "0x32c4b00fa9800092d28ee17d5a2941a100ed6ac3ec1514b774890b9b226ffd43", "transactions": [ - "0xf86a1084081afdf8825208940c2c51a0990aee1d73c1228de15868834155750801808718e5bb3abd10a0a057f5046223be25b7a2749c5f8b63468d67191af95b146876ed91d962e1323a97a04041fb4e18f34572224c21f024e7f744d1fc259c3e6335016f484af0231b9fae" + "0x01f86c870c72dd9d5e883e478408bfd913825208940c2c51a0990aee1d73c1228de1586883415575080180c001a07f16edf66b60ecf1cefead739d8a2f6ece3e8dd063c392257221e3105d3733bda01503e22a37408297f890193f4600eb6f3b2dfc77aea493a25791bdbab5cae817" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -481,28 +536,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x7599aa2261eece5d6075f09401692a0ee37815ad63946cc80ab3ba29838c00f8", + "parentHash": "0x32c4b00fa9800092d28ee17d5a2941a100ed6ac3ec1514b774890b9b226ffd43", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xfc9e1c12454ca1c0629272b15771d8fd75dc9c071784eb7674454da05238fc92", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xc9528c5d71c325b0172dcffdbf9d3f8047967ce3f159447b613584e7fef0736f", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x10", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0xa0", "extraData": "0x", - "baseFeePerGas": "0x717e832", - "blockHash": "0x60576c148e7ac42f9d36ee36a7df5a89241609f624502b248b5cf710ed269a4c", - "transactions": [], - "withdrawals": [ - { - "index": "0x0", - "validatorIndex": "0x5", - "address": "0x5f552da00dfb4d3749d9e62dcee3c918855a86a0", - "amount": "0x64" - } + "baseFeePerGas": "0x7a7e7f9", + "blockHash": "0x827cbc8dc6bd4a545993d61ce2833f7baa3ffafccf0c43da845780b2c60c4f0a", + "transactions": [ + "0xf86a488407a7e7fa825208945f552da00dfb4d3749d9e62dcee3c918855a86a001808718e5bb3abd109fa0bddd0dad61ac2ebf00459eb8ab9b1d2e1a0f0a11cb97e579709fdc60f63279d8a03c7bc06147ac3a2e11f37394ee5203c236a8388db7fb76c92f99f2722af9b558" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -517,23 +567,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x60576c148e7ac42f9d36ee36a7df5a89241609f624502b248b5cf710ed269a4c", + "parentHash": "0x827cbc8dc6bd4a545993d61ce2833f7baa3ffafccf0c43da845780b2c60c4f0a", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x9d25087eccbadc71b6dcb4f1b429c3e1e1bd74e1adaadc358dbe96706df3dce9", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x8b88e66f13eb3b1b3af037cbaf9200b8a44163830c2e16a921a5864dfaea8c65", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x11", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0xaa", "extraData": "0x", - "baseFeePerGas": "0x634eb2c", - "blockHash": "0x8cd31f14889acd865b0ad0b2fd746586f29e87941166bf7087dc8bb429f01554", - "transactions": [ - "0xf88511840634eb2d8301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a06eec2c18bcf77ec57bab296d887982308ce7ee01c04883b1c667d2b3f99844e0a07f927348927013d0def756a6aaeb1626cbbb82978b0238c1bede7cca96c16f8d" + "baseFeePerGas": "0x6b2f3c2", + "blockHash": "0x8be0f38f24af217357167bb37fa76e4bb07257cbdebbd7060c012dee3685a2b7", + "transactions": [], + "withdrawals": [ + { + "index": "0x0", + "validatorIndex": "0x5", + "address": "0x3ae75c08b4c907eb63a8960c45b86e1e9ab6123c", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -548,21 +603,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x8cd31f14889acd865b0ad0b2fd746586f29e87941166bf7087dc8bb429f01554", + "parentHash": "0x8be0f38f24af217357167bb37fa76e4bb07257cbdebbd7060c012dee3685a2b7", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x2830ff653bec149b7a571e05ee9416397aeb6f859701a4aff1e6ae20c63e3386", - "receiptsRoot": "0x271e2e5c8c30a31dfe415c355346b4698b7b3ab4fc4ecbf5602fbc12e20eae8a", - "logsBloom": "0x00000000000000000000000000000000008000800400000000000082000000200000000000000000000000000000000000000100000000400000100040000000000000000000000000000004000002000000010000000000000000000200000000000000000000000100000100000000000000000000000000000000000000040004000000000000000400000000000000000000001000000008000000000000000000000000000004000000000000000020000000000040000000000000000000000000000020040000000000000000000000000100000000000000000000000000000084000200000800000000000000000000000000004000000000200000", + "stateRoot": "0xffa52234e07c007038859c6ae172dd87b5fd80ac02c3fc9adacbf9c47f7a4028", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x12", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0xb4", "extraData": "0x", - "baseFeePerGas": "0x56f6b1e", - "blockHash": "0x3e48b276f3b3209dda302780f9c8e4459d2c9378f4508c0fc4f9d26e6a5d173f", + "baseFeePerGas": "0x5dc954a", + "blockHash": "0x33cd3f00a5d4b4786f1028871a2431b2a5cc06abcc1f06d56f520c05c8d709aa", "transactions": [ - "0xf87c1284056f6b1f83011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0f902fd4698ffef3b8ddc1c375497f85fe2b56388afcb636bc563116f9e87b16ea07c32cfaac5a1ca683d7f0904ad62b5ebee224cc953d113856124601436367415" + "0xf885498405dc954b8301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a0c3d40969eb851a36dc39dd77d4c187ba169591eb600ce686f073f53968e9bd40a077c7ccce3b8a8b1326378a2e2e303f04c25da916556897375537a8446fbd6df9" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -579,21 +634,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x3e48b276f3b3209dda302780f9c8e4459d2c9378f4508c0fc4f9d26e6a5d173f", + "parentHash": "0x33cd3f00a5d4b4786f1028871a2431b2a5cc06abcc1f06d56f520c05c8d709aa", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x5e0abc8d3e6a776260485305d8dd0c8ef63d7b25394d96c104b5c9ff579bf51e", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x6136aa26f9580a8ecacc573d7362769f2a78f6acb779f9b2c84a5970378e2490", + "receiptsRoot": "0xe1449c6203504ff907027c42359f8ddd569284262e60f37920af530362fd4e37", + "logsBloom": "0x00200000000200000000000000200002000000000082000000202000000000800000000000000000000000000000000000000400000008000000000000000000000000000000000000000000000000800000000008000004000000000000000000010000000000000000000000000100008000000000000000000000000000000000000000800000000000000000400000000000000000000000000000100002002000400000000000000002000000080000000000000000080000000000000000000000000000000400400000000000000000000000000001020000000000000000000000000000000000000000000020000000000000000400000010000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x13", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0xbe", "extraData": "0x", - "baseFeePerGas": "0x4c2165b", - "blockHash": "0x905f74a6377ead9037c78e9008bbb788c74c1fdb7f993b4820e24be5dde9c9af", + "baseFeePerGas": "0x521247e", + "blockHash": "0x6d69508bcfee6a79ab1f9b2654eaa9767beabc4aabd0777b4d16a1c7fe2308d8", "transactions": [ - "0xf867138404c2165c8302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa032f1d63abf50a1b102ee291e13581a0d6ce2eddf511d01a3ebeec5ce97cd839ca02dfb6796f006554686a474dee866c9ddade4b3ee3398f1d5fed3a865c098fa9a" + "0xf87c4a840521247f83011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a065b92c9da324aafbf8ee7597b18a6c053420a67e5e01d4c2562a9f6532473939a07f80878b7bc0e69700b617f7b71a365cd22ee8083684c452b4948ea93eae6fa7" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -610,21 +665,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x905f74a6377ead9037c78e9008bbb788c74c1fdb7f993b4820e24be5dde9c9af", + "parentHash": "0x6d69508bcfee6a79ab1f9b2654eaa9767beabc4aabd0777b4d16a1c7fe2308d8", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xc97170cf07d54c88244ab7495de7b219a0c5e53de8a00fedb6a1698d05c072e4", - "receiptsRoot": "0x3e5b0c08f66fb3479a54ec93bdafda95f7988f6c27dc427c3a8c0ef1e491e9f2", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000", + "stateRoot": "0x6cf73a178c89645e1ba6560e820ac1f8ec2e48c5098a56aec817886392e5f701", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x14", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0xc8", "extraData": "0x", - "baseFeePerGas": "0x42acb03", - "blockHash": "0x35398f9b164bfdf8f4b4cde5181a9d96bb37947181332dc7977dc2360bee6300", + "baseFeePerGas": "0x47d1208", + "blockHash": "0xdccd539eebea31af7d83c77ba7b57529a1111630bf3eff5da9eaaf3bdb06cdc7", "transactions": [ - "0x02f8d6870c72dd9d5e883e140184042acb04830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c7346f7df2f4852bf656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0cb55d89f2ee070d017b426876d6072d91c2a7311ade9a1bed2f8200127ec380e80a08897d5c6dc27a43adfcf912ec9c7ec1bc94763ecf00a0e0f7bb5d48a81c6de74a05708b993e4e74cbfdb940a5bf5a2a09d5a9840e94bfe40662a097bd324614372" + "0xf8674b84047d12098302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa018aaef4670194514f969dbc57def43702154924c076d18bf7ac86627a6511d83a0745918e2423a243a37ca9271170dd1b2781d3ebb10d9c6914a39bee31e2a58f8" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -641,21 +696,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x35398f9b164bfdf8f4b4cde5181a9d96bb37947181332dc7977dc2360bee6300", + "parentHash": "0xdccd539eebea31af7d83c77ba7b57529a1111630bf3eff5da9eaaf3bdb06cdc7", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x5552828e6c3bbf0c5a79f916e732ef9b622a20bd65a36765220a2ef3eace5ee1", - "receiptsRoot": "0x9e8e0dcc70def6a3ae4631d1a635ce268a142352191bd2736faa4ea3e1ddb5b1", + "stateRoot": "0x078874dfd661d73b906ad5e4548d3927246130bb95e8a117c0d3fe9ce36265ec", + "receiptsRoot": "0xd43ad2c6a6199c3bf72c8d94db3521e4ec54a2306e4169e32b25fb1658733a52", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000800000000000000000000000000000000000000000000000004000000000000200000008000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x15", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0xd2", "extraData": "0x", - "baseFeePerGas": "0x3a5cf93", - "blockHash": "0x4a4aef4730ba6155773a9e5c7e0c5f25a552d187687d59ad81b4a86c9f15a9fb", + "baseFeePerGas": "0x3ed8d1d", + "blockHash": "0xb4125effbc4875925712ea7af12b9b8efd356f9daf371e37982d9d80986500dc", "transactions": [ - "0x01f8d5870c72dd9d5e883e158403a5cf94830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c470b103921f87d93656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0f77c749ecb156f605e2334b14caea388100bed09b4c16579c952a96e9035562901a04025efe7ff5d26258dc328878721531502592da19dfa528c3fe3e4af4ae32648a02425bd922df542ec69f5e1175f7dd0193e9610d715978a5e8ba70ec06cdd6e28" + "0x02f8d6870c72dd9d5e883e4c018403ed8d1e830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c470b103921f87d93656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0f77c749ecb156f605e2334b14caea388100bed09b4c16579c952a96e9035562980a061df014fe4d23be90180a1d75fa180aa296f3823dd0dba66af2fbdbb542ddbfba01dcb0288830bc474904670db31bb73ea8e48421f8f8ce650c33ff00da97f8edb" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -672,29 +727,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x4a4aef4730ba6155773a9e5c7e0c5f25a552d187687d59ad81b4a86c9f15a9fb", + "parentHash": "0xb4125effbc4875925712ea7af12b9b8efd356f9daf371e37982d9d80986500dc", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xfc375dd0b2d82dba534d316a0ddc2fd9cce0f131e0cb2520059a96ebd4110f57", - "receiptsRoot": "0xa6d78192909ccc0689aa6ab6ad1383a53f32ab9f1941734dd79ec970c9bb581f", + "stateRoot": "0x0e0d167eecdeb9f13a37a28d9a90447fc9f903ce7ac9780a33e4ed1a37ce4742", + "receiptsRoot": "0xbe9ef7c757d2a2b1aaa03c629ce078d0e7901c24d43642a14578828946a4c3a8", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000008000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x16", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0xdc", "extraData": "0x", - "baseFeePerGas": "0x33167db", - "blockHash": "0xb3c7f4d24254129c2621485e664106ca2c2d08337672a2c8e484524b6e0dd0fb", + "baseFeePerGas": "0x36fe69a", + "blockHash": "0x153171ce62d3a05bfc910c2dc9dbfe08d0b674de9053c4ba50989d55ba75545c", "transactions": [ - "0x03f8fc870c72dd9d5e883e160184033167dc830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c3e08783bf128a680656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0a41cb4f2ab2731a8889754ae1a340c666cb8107b497b922073df80a9b255e31b83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a0a585e353498ce5174d60739a0b63435439e46487cdbb28b9735d3f2f75ce517da059f052093e5d64f3343fb0b5100e76c3a990fa831d8002117638b02f4072f942" + "0x01f8d5870c72dd9d5e883e4d84036fe69b830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c3e08783bf128a680656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0a41cb4f2ab2731a8889754ae1a340c666cb8107b497b922073df80a9b255e31b01a031155cd409042d494806233f781edad3fd63af1e0e26441da60518bdbba8515aa04ef6d5eac346649880a8be9e5475b1eed4d9fe25225a10159bd63e0cc9340af7" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0x47c896f5986ec29f58ec60eec56ed176910779e9fc9cf45c3c090126aeb21acd", [] ] @@ -705,27 +758,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xb3c7f4d24254129c2621485e664106ca2c2d08337672a2c8e484524b6e0dd0fb", + "parentHash": "0x153171ce62d3a05bfc910c2dc9dbfe08d0b674de9053c4ba50989d55ba75545c", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xea3988f3c858eef128aa58daea75b61e4bf315f4dcca44bd49b3f7038efe7c9c", - "receiptsRoot": "0x489544b1af9649410f1f0b2edd686f702467f24446ecc3926b905d196f153cff", + "stateRoot": "0x875e51bd6ee9967c39df029032246575c4620111db4fb9997386398c3d193951", + "receiptsRoot": "0x2b9c45f5edbc0a1a16575d9f6914226fb1959bf5300be90abf5994350f6a8510", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x17", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0xe6", "extraData": "0x", - "baseFeePerGas": "0x2cb82da", - "blockHash": "0x25e8e33978b09de34a49b2595fd3dfe13d0f8c9a8939ca6c88376292459ec533", + "baseFeePerGas": "0x301f384", + "blockHash": "0x631eb6b3e5d105379784bae7414c1a87100222dfaa82de3cbbd449cdbdddfda0", "transactions": [ - "0xf877178402cb82db830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028caaccee2fba6608ff656d69748718e5bb3abd10a0a02f5170b3be2a8b1ea396ce6d7e8328e9fc89e1feeedff915163a421f253066eba04ea5e11797ab87ab71e2affaad4f4d53addaf82345c93a050892af864870dd6f" + "0x03f8fc870c72dd9d5e883e4e01840301f385830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038caaccee2fba6608ff656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0a6d01173df2aa437fb0118d181e64a8f8e05713fc01c42fbfd2250516639ae9583020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a05ea87f1fc01a228fbf6854e8a91bf346502fd8fe0a0c865914cce118f8acf677a0333dc42ba62418aafcc729befb496de989106e8700d46ca92bf7ae9f17f95535" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0x6d19894928a3ab44077bb85dcb47e0865ce1c4c187bba26bad059aa774c03cfe", [] ] @@ -736,21 +791,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x25e8e33978b09de34a49b2595fd3dfe13d0f8c9a8939ca6c88376292459ec533", + "parentHash": "0x631eb6b3e5d105379784bae7414c1a87100222dfaa82de3cbbd449cdbdddfda0", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x94a104a2cc89c456366487a7ff541dd38b14800da5d7e74652cab2b633402a0a", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x98f98d5860f1175754c43063cf0aca259fb8a4a5a6b9d8ee4131c2d24bafdcdc", + "receiptsRoot": "0x0c0a430537eaa59021451b67574cba560be2ce825b3d200d5aa616f6030c8f8b", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x18", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0xf0", "extraData": "0x", - "baseFeePerGas": "0x2724ef3", - "blockHash": "0x4f350577873216755df98391d69caf01ba646006d88459326e2f2bc2acbbf0e0", + "baseFeePerGas": "0x2a1bd99", + "blockHash": "0xdb9610ac987150d64e0c47bf2bf4b4b6c225f7c869a8a3c21a8b4ed42a779da7", "transactions": [ - "0x02f86d870c72dd9d5e883e18018402724ef48252089414e46043e63d0e3cdcf2530519f4cfaf35058cb20180c001a08abdb3bb1c920c0a75c8e979079e8bfbd407843ba5aefa8ef97a88bd27329e84a006a953cb7369e2810022fd66d14fdeb5ddedf70d062975d966aa0e28bf690ad0" + "0xf8774f8402a1bd9a830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c0e394e7c8a2b32c9656d69748718e5bb3abd10a0a03ac30f903afc19ddcdfde20f7c30ea3652e1fffd337a4f90a29df20ce3193298a0663531b7fc7c3d4bbb382109f64ebcb76e400c7d2c20ba8ff4bb1dce1bd8cc61" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -767,21 +822,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x4f350577873216755df98391d69caf01ba646006d88459326e2f2bc2acbbf0e0", + "parentHash": "0xdb9610ac987150d64e0c47bf2bf4b4b6c225f7c869a8a3c21a8b4ed42a779da7", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xe6b25116fe80c641f9ae002e38ee0885699983cff8f25515795c4d7187af561a", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0xc71e0f04e779cbf8a9423909f9063cc7b1b4611b121724c1d03b7810b50df2cf", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x19", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0xfa", "extraData": "0x", - "baseFeePerGas": "0x2241b69", - "blockHash": "0xec6593f4d6535e923dce8d47de08d98f8d751ea078f186072fe46b3b745d5274", + "baseFeePerGas": "0x24d8d0e", + "blockHash": "0x484dfda7c0064b4361c5bb164ab29ab46b2f6e4ad1e4d08e054cf87092c301cc", "transactions": [ - "0x01f86c870c72dd9d5e883e198402241b6a825208944a0f1452281bcec5bd90c3dce6162a5995bfe9df0180c080a0aa91f4ab09c290fb090ca2638cc97bc7af972b422ffa74f075e04865199b1456a06d7240f6be85ef4696869d78189e1d2b5d2441c4caf770b203f2ed4abf7da308" + "0x02f86d870c72dd9d5e883e500184024d8d0f825208944a0f1452281bcec5bd90c3dce6162a5995bfe9df0180c080a063abd293402ee36462779cb52b1abb2fd46339431db2f1014b32c7f82bdf635ba0314e4f4aa5069de4e5fed2e0dbc5c5e0ad4b6d6b6c19e09c6684002ead3ba833" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -798,21 +853,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xec6593f4d6535e923dce8d47de08d98f8d751ea078f186072fe46b3b745d5274", + "parentHash": "0x484dfda7c0064b4361c5bb164ab29ab46b2f6e4ad1e4d08e054cf87092c301cc", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x2169a20d6e248e2c5322a5b01f73acd038baf8efc185daba156bb17af84cd8b8", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0xa5d4cda71b3c18323bd8e5d87601ae2b3271bde24bf03f44181538deea797097", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1a", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x104", "extraData": "0x", - "baseFeePerGas": "0x1dfab87", - "blockHash": "0xc342e54f189bd6e3099871e6ecdb5f5b85a409299decd86a08e5564e42d22aa7", + "baseFeePerGas": "0x203de11", + "blockHash": "0xb83ddbaec179e4a8ca479524a47d3ae87cf9d0d9cbf10f36e4cd27b095f03487", "transactions": [ - "0xf86a1a8401dfab88825208941f5bde34b4afc686f136c7a3cb6ec376f735775901808718e5bb3abd10a0a0bf906d9eaec05fd44a6c7c2d0b7f30d6de811ddef24d96db9e48497ff60a1484a074f6f7bf0aff7038f7769b4e1a5d35b76f72dac84e043b87ca0d90e2271b0783" + "0x01f86c870c72dd9d5e883e51840203de12825208941f5bde34b4afc686f136c7a3cb6ec376f73577590180c001a001d2a0dadb06d7004b8eed1d40effaab9349184c371d9dd071f6c835b14977b4a03012553df7d85cc5b48d8abc14375bd89f8b6bc4177fd9508c02ee498a992e16" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -829,28 +884,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xc342e54f189bd6e3099871e6ecdb5f5b85a409299decd86a08e5564e42d22aa7", + "parentHash": "0xb83ddbaec179e4a8ca479524a47d3ae87cf9d0d9cbf10f36e4cd27b095f03487", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xf764dd8c400bd0cf0de446a478e786a16d8b6b6c772ec44f55aa63335254ef26", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x29857c3c62622338c183d17a92937e96428f392d79b3f58f5139d34ebad83c54", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1b", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x10e", "extraData": "0x", - "baseFeePerGas": "0x1a3c730", - "blockHash": "0x750dd92f162fd79de0f147a4a5a6928ea06463f04ce9ccd6f85d128f726d75c4", - "transactions": [], - "withdrawals": [ - { - "index": "0x1", - "validatorIndex": "0x5", - "address": "0xd803681e487e6ac18053afc5a6cd813c86ec3e4d", - "amount": "0x64" - } + "baseFeePerGas": "0x1c3649f", + "blockHash": "0xd17fa84bf309999af41acc3a1e006f5f9bc96a7c6bd8343f8dcd851171f89bbd", + "transactions": [ + "0xf86a528401c364a082520894d803681e487e6ac18053afc5a6cd813c86ec3e4d01808718e5bb3abd109fa03aaab096853b8b89c362af7701b60c747ce1dbda9b0d6adea14922c1fa9d83caa07677f467155ee7733eb77d144e1d282a4fab20609b9dd6bb18fbfcdc32adbac8" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -865,23 +915,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x750dd92f162fd79de0f147a4a5a6928ea06463f04ce9ccd6f85d128f726d75c4", + "parentHash": "0xd17fa84bf309999af41acc3a1e006f5f9bc96a7c6bd8343f8dcd851171f89bbd", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xd3cc1a6a6b477ad90f576880cd467fa97802149e48ba2976e6be835d077a8e6a", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0xfabfe1983020fe6ec0e808ffe1ea76625ab329c87f7fda62c8c5815bc5279346", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1c", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x118", "extraData": "0x", - "baseFeePerGas": "0x16f4e4a", - "blockHash": "0x851dbf7f27a98cf2fc320a858b96e89bfe8af9551e4aa966cd6ed4d4b5d9dac8", - "transactions": [ - "0xf8851b84016f4e4b8301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa01e147627a8b655495ffe95ecc114eeaf910bc89166f4ad45f626774a79c7b195a04c7dac20ac839c4dcaae197402b54589cff504b8dd6e8d084f90651d45193227" + "baseFeePerGas": "0x18afa11", + "blockHash": "0xf95e9ebf1649ad621dce264eb56c4695b2c12bcfdff445f4081d42a1bf35cb93", + "transactions": [], + "withdrawals": [ + { + "index": "0x1", + "validatorIndex": "0x5", + "address": "0x16c57edf7fa9d9525378b0b81bf8a3ced0620c1c", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -896,21 +951,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x851dbf7f27a98cf2fc320a858b96e89bfe8af9551e4aa966cd6ed4d4b5d9dac8", + "parentHash": "0xf95e9ebf1649ad621dce264eb56c4695b2c12bcfdff445f4081d42a1bf35cb93", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xd2c58f66ca2ceae3eac008458fb5396d2e3c8e80e416d66037472875a4e07997", - "receiptsRoot": "0xd072fe68030b122d6d943712a735f4d9b12048b038b38ce8ca90d3da4f3d4f71", - "logsBloom": "0x00000009000000000020000000000000000000000000000000000000000000000000000000000000000008000000000000100000000000000000000800000200000010000000600000000000000800000000000020000000000002000000000400000000000010000000000000000000000000000000000000000000000200020000000000000000000004000000000000000020000001000000000000000000000000000000008000400080000000000600000100000000000000000000000000000000000000001000000000000000000001000000000000000000000000000000000000008000000020000008000000080000000000000000000040000000", + "stateRoot": "0xb161ffc85f1cbcaf74e168a1473080af3d4ad7dd23d415558189987992e6b34c", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1d", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x122", "extraData": "0x", - "baseFeePerGas": "0x141a677", - "blockHash": "0x95d530f6e64e5b60726d6f40f995fbcb099957cfaaf2765dc78684d4fccacb59", + "baseFeePerGas": "0x1599acf", + "blockHash": "0xecb61d653cb6ebe9236bb36c31afd4637f6ebfaf9a84b53c8ab8d5557a177e57", "transactions": [ - "0xf87c1c840141a67883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a09d0cb094f38fc156df1e73cb965c52438c56eb5b3ff00a3128990667b4f8f77aa02a614f5723d63cb69b28b7faa6ab8c55807c9a3a9239d81599e48ce025f6c344" + "0xf885538401599ad08301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a09f1b35dda68089f7818f7d2bb921c4237ebfec4c808906374a28bb7d2112c3e1a01c4235777f7011088a60497dbcfee1cab58bd04119115d37748adb3bcee25427" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -927,21 +982,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x95d530f6e64e5b60726d6f40f995fbcb099957cfaaf2765dc78684d4fccacb59", + "parentHash": "0xecb61d653cb6ebe9236bb36c31afd4637f6ebfaf9a84b53c8ab8d5557a177e57", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x69347f83eaca294d85b8085c403c1e6552b39f9074d8b0907ee4ca2f1052c46b", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x06be7e1abb9f72accc6b70db7f9a573eab98ab7e2f8dff05a6d9c5fb3d196284", + "receiptsRoot": "0x94c061dc8cf44763063b10b8f8bc801f41da75cfdc7f4a26e00c609a3562689e", + "logsBloom": "0x00000000000000000000000001000000000000000000000000000800000000000000000000040000000000000600400100000000000000000010000200000000000010000000100000000004000000000000000004000080000000000000000000000000000000000000000000000000000000000000000000000000000010000000200101000000000001200000400000000000000000000000200000400000000000000000000000000000000000000000000000200000000000000000000000000000000020000000000000080000020000000000000800000000000000000000000000000000000008100800000000000000010020000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1e", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x12c", "extraData": "0x", - "baseFeePerGas": "0x11994f1", - "blockHash": "0x1da94a9b2bc22478c3c9e45591d3254ed48b2f15a68dcd86d272273bd362e1db", + "baseFeePerGas": "0x12e6f42", + "blockHash": "0xd454d2e47ddd6508e26a8e6f5f7739c4816e682f72940004b983798e9874db24", "transactions": [ - "0xf8671d84011994f28302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0ea4b870e45a695e7e157f7af87905291f11956ae897a1806c4a3f7b4a3d06c37a0468b5ac7b003d53b820006ee1c1219d7c451aa2780c04d21f7566abb1fc54479" + "0xf87c5484012e6f4383011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0f11fc2cc9d668bc2f1ce8adf2dff1ca7818b5d9e8a0e3eadabdefd42fb7e86a8a07b510479619b99b260a6d295cc0a50ea5ff303e8e350a3c3349726043092022f" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -958,21 +1013,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x1da94a9b2bc22478c3c9e45591d3254ed48b2f15a68dcd86d272273bd362e1db", + "parentHash": "0xd454d2e47ddd6508e26a8e6f5f7739c4816e682f72940004b983798e9874db24", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x04bfc46ce455b63d4618f74e4d8ecd958040f43843e6ad303245ade19058a95c", - "receiptsRoot": "0xfd4c826f3e7c6c8ac7c8e9205e3b6dbf4c97cf66bd1585ee4db643939a15a009", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000", + "stateRoot": "0x10dfe0fd982218a67c090422ed47c79f949401cedce7e80a8b9b41db0e7a70b0", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1f", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x136", "extraData": "0x", - "baseFeePerGas": "0xf69b87", - "blockHash": "0x0776e32e33ee61a75147584501827f9a7cef40e1198d62791acf4d7f5c50a55a", + "baseFeePerGas": "0x108a585", + "blockHash": "0xcb4c113282733de5e500f67e1e2d34dcb1f5ba78d50fd1ee64f589985cbc2e79", "transactions": [ - "0x02f8d5870c72dd9d5e883e1e0183f69b88830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cfc9e175c02d62655656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a073286395f2a86bb5537d9b45ca7c681044645f31475a11d49285d6a0f028b8f001a0348a5f9cc0dfd726dc9c9720e8e8b111b768604032a87de10a6ea140b1abd3dfa04ae302c53544f8f00dda9b71b791c5d6450e26ea5baf697afbcd46eff9355334" + "0xf86755840108a5868302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0bf0586ff59796b985d3268c815acb05e6ddaf36566f259e489a27e036cf440d8a023c7b9cdde40c3b93b2a4711ad2f09ce06afd5817a6ae347a8f93c1fb059239b" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -989,21 +1044,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x0776e32e33ee61a75147584501827f9a7cef40e1198d62791acf4d7f5c50a55a", + "parentHash": "0xcb4c113282733de5e500f67e1e2d34dcb1f5ba78d50fd1ee64f589985cbc2e79", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xbf2c2c34b76a1bc162355b87de7cb815153c0a91a56f92d842c512a5fa61bdb2", - "receiptsRoot": "0x11a9a367c2a5ce735e23968b85f4f00c7f50f20f0b2901cc9c5b4b33b4959682", + "stateRoot": "0x2e378cbae568de2e8ec7902c5673180bac5fef3a48b50936bef95cddd8374c24", + "receiptsRoot": "0x0df732142d4ea95fe58044d306b7759fd0fbb757b3ad00be44e5c6dfb27ab8e3", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000040000000000000000000000000000000000000000000000000000002004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x20", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x140", "extraData": "0x", - "baseFeePerGas": "0xd7ddce", - "blockHash": "0x39032e04806c95bf605cab0f493454b349e86b17808b4b019a6fc264c58e570b", + "baseFeePerGas": "0xe79796", + "blockHash": "0x279a30e5b6459ce8cbb11314c86ce121cd09ccfa94e8431da318c389ced90f1d", "transactions": [ - "0x01f8d4870c72dd9d5e883e1f83d7ddcf830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cb524830fb1b95fef656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0415feb809041baabc4d9246223e40f1083963cbe1ef6dedb8b153e49d02ee7ce01a03a3dcce3ef39b2151f4c787cf3ad601d1b71e4659213f948f1661d8f0525c92ea055a309950e20ba06ac5d3e0e89805c14816e63153a7d3ef677407ecdd00e3c5b" + "0x02f8d5870c72dd9d5e883e560183e79797830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cb524830fb1b95fef656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0415feb809041baabc4d9246223e40f1083963cbe1ef6dedb8b153e49d02ee7ce80a02a6350c90c33b23b64b38353c26a0b33b4f030c0cf2246f241d9c77db486391ca040fcf9e872242a744c1daa7361c69eb0919cbc4d20a28e95d42edfb678abb05f" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -1020,29 +1075,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x39032e04806c95bf605cab0f493454b349e86b17808b4b019a6fc264c58e570b", + "parentHash": "0x279a30e5b6459ce8cbb11314c86ce121cd09ccfa94e8431da318c389ced90f1d", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x052055733a53c0f7febb45a9d8a41a2a3dd29ca97278c35849050cf6e4fad0f1", - "receiptsRoot": "0xaba497cc3d5037548e60d91b85c707f2444349ae159036631f95fdd7869f1f8c", + "stateRoot": "0x3ed25f92d59f556698b7bb57cabe553090feb66893446b3aa7f9b319cfa5c058", + "receiptsRoot": "0x1a38ee5591dc15bbeec2de9b55d200df038a259385745527052cc81337289c86", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000800000000000000000008000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x21", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x14a", "extraData": "0x", - "baseFeePerGas": "0xbcf517", - "blockHash": "0x7bfd33d91f0f065c4c0963ef3975dfacb13ebcd3b1d9433eeba5f26320bb453b", + "baseFeePerGas": "0xcaa734", + "blockHash": "0xbfa427b49c4b9c8ac6629f2a2d1b62c0e2d3d4e793e603af64d9eb7438b694a1", "transactions": [ - "0x03f8fb870c72dd9d5e883e200183bcf518830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038cbf21e84fccd0c2c0656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0b2416e7ca12669406e6cd5154ad5177841b7d0cddeb2760249c28e1aa151f97083020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a0dbce1c078f5374f0da355497abc98d8233dd702e63355fc66d4b77f8aa645c0da02535209ac89839a34994622ac2b9f2fc0b1f45fb08f43a5579093585c9c62caa" + "0x01f8d4870c72dd9d5e883e5783caa735830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cbf21e84fccd0c2c0656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0b2416e7ca12669406e6cd5154ad5177841b7d0cddeb2760249c28e1aa151f97080a0891a7f5d5aaf642d425bcb20d715704a021979d36cb724eb88d87b815a28059aa002df2e16a34ee0c18dbb1ca557831ca519dce2746e8760c2b5568e1eaf868051" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0xe9dcf640383969359c944cff24b75f71740627f596110ee8568fa09f9a06db1c", [] ] @@ -1053,27 +1106,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x7bfd33d91f0f065c4c0963ef3975dfacb13ebcd3b1d9433eeba5f26320bb453b", + "parentHash": "0xbfa427b49c4b9c8ac6629f2a2d1b62c0e2d3d4e793e603af64d9eb7438b694a1", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x56312b12ec96358f46f673850692a02c7769fcc0af7e86e2cc6a31db672bfd34", - "receiptsRoot": "0x13bd42f63e98963d548495d33334a05c830e7aeb166aa5f1116b6601446a4685", + "stateRoot": "0x6662a1b6375759074ea267245e8fa293b084dc885a31e81435da3df797575560", + "receiptsRoot": "0x7947328dc40a62c0cb58142e2b83fd7b60da8388084cf2a6a3010d086de333aa", "logsBloom": "0x00000000000000000000000000000000000000000200000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x22", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x154", "extraData": "0x", - "baseFeePerGas": "0xa56718", - "blockHash": "0xcbeea1d0322b931091bee7d7fd49ed48d09f35324c7837f3b51c1f9e017cdcc8", + "baseFeePerGas": "0xb1548c", + "blockHash": "0x8595bd36d4362be24f82626e410c5240689ad948822510812add6669c17e60bf", "transactions": [ - "0xf8762183a56719830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cfd7bf8757ddb24d9656d69748718e5bb3abd10a0a06c07e8d0a7d3ba1f3a8dcb209e990148ed6a7f44e8263d932e6ee30b2ab5310ca05a5eca8431b6406a0910fd5dbfbce72e4b3cc8514cdfbe3b46b10efc533eba64" + "0x03f8fb870c72dd9d5e883e580183b1548d830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038cfd7bf8757ddb24d9656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0e94d0b2545ec05c3ce3431c4d45c3b62fcab156563e8308fae1ebd27a2810c1a83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a0e8addc83080c5d2bf2f7da936f4b683a6fa31da3e7399af871bfe8e34dcb27aba032921280f671f62041ed7e56b37344143cef82036baa6b17b47a0b04b85c723e" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0x430ef678bb92f1af44dcd77af9c5b59fb87d0fc4a09901a54398ad5b7e19a8f4", [] ] @@ -1084,21 +1139,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xcbeea1d0322b931091bee7d7fd49ed48d09f35324c7837f3b51c1f9e017cdcc8", + "parentHash": "0x8595bd36d4362be24f82626e410c5240689ad948822510812add6669c17e60bf", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x2ca02337777db57a1ab0266b72eeeb951770529e1e9cdc2e150b2b9f0a1a8365", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x48c5107855960c19360eede30647cb174c36e5026c37bb2fb613d198349de0dc", + "receiptsRoot": "0x6981ee91b3f58a0d3682d3425aac8c6da5488cf1f8e5390716d80bef02faa6e2", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000020000000000000000000000000000000000000000000000000000001000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x23", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x15e", "extraData": "0x", - "baseFeePerGas": "0x90c82f", - "blockHash": "0xdaecb35565efc8fe915c286637a2f664473681e90f9ab6e05d0aa02ecdcdc654", + "baseFeePerGas": "0x9b2bf1", + "blockHash": "0xabaae2a5e966b2e2b1de55c4cd3ae9d8eed5a7a96994eb8627465ed0d9d15fa6", "transactions": [ - "0x02f86c870c72dd9d5e883e22018390c8308252089416c57edf7fa9d9525378b0b81bf8a3ced0620c1c0180c080a03c1d323db1f685c6ffd338c17c010fd81c6fd4e142a985fbe8ddabc7f4cb8737a02d8d268af499407f139c60e3ef6e5c2b465ef86bd9912313529427ecd20cff02" + "0xf87659839b2bf2830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c95297b6a5c01e24f656d69748718e5bb3abd109fa0324005dca5a2e0d753c04b9ba3b36fc8f09dabf63a4f22f9c1ccb22c48f4fe9fa0733c734fc9a6e1d9f16602abc97ead797bbd1da81092277069ab9791626dd355" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -1115,21 +1170,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xdaecb35565efc8fe915c286637a2f664473681e90f9ab6e05d0aa02ecdcdc654", + "parentHash": "0xabaae2a5e966b2e2b1de55c4cd3ae9d8eed5a7a96994eb8627465ed0d9d15fa6", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xed1385e367caa8d8f469626720d381eeb15cf18bb5b2d28a9fc1fb01d2a2521f", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0x175e804afca7dbe19134805ce3ec22251edd4feaa8eed1e95114884d73496791", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x24", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x168", "extraData": "0x", - "baseFeePerGas": "0x7eb453", - "blockHash": "0x4accb52ae0491cfaed5866f5296d8d15233a16ffd73c91735040c58cebaf7ff9", + "baseFeePerGas": "0x87c819", + "blockHash": "0xebaf8a77d6fe68c176d3074a8f4b9c702c4b5e96b801a1410291fbe2cc6421e2", "transactions": [ - "0x01f86b870c72dd9d5e883e23837eb454825208943ae75c08b4c907eb63a8960c45b86e1e9ab6123c0180c001a04f07315aebd92596d180363d42cb97af8cf0aa76441216f3548929b70dabeca4a03023bffff6c77cf2bebcd9139c9a938504c68bd739bd046002281a4331f1fc90" + "0x02f86c870c72dd9d5e883e5a018387c81a825208943ae75c08b4c907eb63a8960c45b86e1e9ab6123c0180c080a0124496e8b49822c38a85f4aa83983d04eea11983e9d12020a1a30a564bf0bd15a038da406edaaf30fc3ed0e8a9c638e84dbe04e35d0f5233a1740bb3c3c3ef50df" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -1146,21 +1201,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x4accb52ae0491cfaed5866f5296d8d15233a16ffd73c91735040c58cebaf7ff9", + "parentHash": "0xebaf8a77d6fe68c176d3074a8f4b9c702c4b5e96b801a1410291fbe2cc6421e2", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x1d19c3aacd2f657d1835d032863abbcfda8db6bba9368c64e3def4e716a05599", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0xf142e4351d4387ecf5f6a92aa5b26e5c192e0478bea50e4861c158e89e090827", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x25", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x172", "extraData": "0x", - "baseFeePerGas": "0x6ee24e", - "blockHash": "0xa22225105655427813fb4e29887ef8ec1a18877bb441913fadce200903ba0f0f", + "baseFeePerGas": "0x76cfb2", + "blockHash": "0x8a76724de35afb575efb81ef8ab58346825486d654168ef5aeb2f80912e61a78", "transactions": [ - "0xf86924836ee24f82520894c7b99a164efd027a93f147376cc7da7c67c6bbe001808718e5bb3abd10a0a0ad08245b8162c9482e8c5a0dc7a50bbd4fbcf27bcf60eb2af5f73dc82db728eda048a4a5bbaedea5004b9be5f15e7babac229a7af181cc7146d3a998a7e8e0e481" + "0x01f86b870c72dd9d5e883e5b8376cfb382520894c7b99a164efd027a93f147376cc7da7c67c6bbe00180c001a05c5ab0a8c8d2f0517b2afc28a6e1efb3747161f98622edbf553fc50f37713087a0518ace41f0e0f9e26de1bfd4bf464a701bbdb0164943acce193756ab5824f609" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -1177,28 +1232,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xa22225105655427813fb4e29887ef8ec1a18877bb441913fadce200903ba0f0f", + "parentHash": "0x8a76724de35afb575efb81ef8ab58346825486d654168ef5aeb2f80912e61a78", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xaf9f3d14eb60e28d448c5c1177b6d23047481feae580fc5396e5165bfd370d45", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x052e4e1dfa221ec796dff3e3cc3d43f1742b7338dfacbb618b7ff36e26536a58", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x26", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x17c", "extraData": "0x", - "baseFeePerGas": "0x6109f9", - "blockHash": "0x6ad17c25de20d9f09aaff897681a87788d216791d9e33d2d4543b162f3c47423", - "transactions": [], - "withdrawals": [ - { - "index": "0x2", - "validatorIndex": "0x5", - "address": "0xe7d13f7aa2a838d24c59b40186a0aca1e21cffcc", - "amount": "0x64" - } + "baseFeePerGas": "0x67f645", + "blockHash": "0x9463185605c120f1bbec5549f567ffb50e0a4dd1bb5d202a312640cb3faf5e72", + "transactions": [ + "0xf8695c8367f64682520894e7d13f7aa2a838d24c59b40186a0aca1e21cffcc01808718e5bb3abd10a0a0b4d96228bdd1ae700c02bab06e72db922af3b8559da9fb106aba7b35a69be5c9a03008207c3d5df936f349306843588c448eb7fe21c6fc4bf0a9305ed7bef08d2f" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -1213,23 +1263,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x6ad17c25de20d9f09aaff897681a87788d216791d9e33d2d4543b162f3c47423", + "parentHash": "0x9463185605c120f1bbec5549f567ffb50e0a4dd1bb5d202a312640cb3faf5e72", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x69e1439c4d3d65155cc6997a6a8d9d64e23af139997f29f366c9fcbb4c94740d", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x009886205d2a87aa86f8dc4aa96bea797885b03905ac63134e283d483699d5f4", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x27", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x186", "extraData": "0x", - "baseFeePerGas": "0x54e8ba", - "blockHash": "0x5b65d43473b3132497d0fc75a2808f73a2808560785c6e7f55d2ac722047d291", - "transactions": [ - "0xf884258354e8bb8301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa02a4cf21d43634cc09828755f9c853bd5019954d8139024fdb4edea7a37de03c1a01c6e3fe600e47ecd9c019960d38fc878cdce4937f178cac03d95fb0b257cac7e" + "baseFeePerGas": "0x5af7f4", + "blockHash": "0x817c992ddaad0c33d972ff29048a8ec435e562707950ec4c0d9fb77dbdd84ae1", + "transactions": [], + "withdrawals": [ + { + "index": "0x2", + "validatorIndex": "0x5", + "address": "0x3ae75c08b4c907eb63a8960c45b86e1e9ab6123c", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -1244,21 +1299,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x5b65d43473b3132497d0fc75a2808f73a2808560785c6e7f55d2ac722047d291", + "parentHash": "0x817c992ddaad0c33d972ff29048a8ec435e562707950ec4c0d9fb77dbdd84ae1", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x9ec651a3159991b6da7dfe19c6636291d50bafd2eff0a1673ad0235689da7367", - "receiptsRoot": "0x7e2b4724f582d1d4cb18b0c68b1651b6a1114918e60a553ace9bebd0b0778b72", - "logsBloom": "0x00000000000000000000000000000000000000000000000400000000004000000000000000000000800000000000020000000000021000000000000000000000000080000000010000000000000000002000000000000000000020000000000000000000000000200004000000000000400000000000000000000000000014000000000000000000000000000000000000000000000000000000000000200200000000800400000000000000000000020000000000000000000000000000000000800000000000000000080000000000040000400001080000000040002000000000000000000000000200010000000008000000000000000000000000100080", + "stateRoot": "0xfa2ab79f3edf55b5380b99be5336e14ad787788d54dcaa05c2e0745d1472468d", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x28", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x190", "extraData": "0x", - "baseFeePerGas": "0x4a5ae3", - "blockHash": "0xebf3316f9944a4d7686ca037353ab00ba9aba83839dbf6b81a1f17127bc97131", + "baseFeePerGas": "0x4f98f6", + "blockHash": "0x8d61211d9778e2315598b11c7b715f8a96a3e7b3f7242a280a590aa728a2c2cc", "transactions": [ - "0xf87b26834a5ae483011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0c5d1f9d80dc521f85c9024ee685ec13c3a8cfa793d6bfcbcd47fd4244a0b4d7aa06995f77a29ec57b0005cd8044a79b8060fa046e6264f89617f4e3bdd57ae8f7f" + "0xf8845d834f98f78301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa08dbf399f45ff95b249fcd46c8d53d5c017ce5bcc7d02e79baa2bdc679bad2f99a00ed9eb5d88e831995889ea38ae8acbaddcabac5e4c283ea003bfa1c0ac0f0863" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -1275,21 +1330,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xebf3316f9944a4d7686ca037353ab00ba9aba83839dbf6b81a1f17127bc97131", + "parentHash": "0x8d61211d9778e2315598b11c7b715f8a96a3e7b3f7242a280a590aa728a2c2cc", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x6674d2364f011c039d71388ad814a8cc5b67b9373f0b04ea381257c780084826", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xd5a77b5730c4b55882b1964206b1d8113821dbe1ab7aa4e774e8286e68e6b6d6", + "receiptsRoot": "0xf0e4228053d0e4a98c002b31036028bdc76c8866da8ad254ccc4983196cf9ffc", + "logsBloom": "0x00000000000800000000000004400000000000000000000000000002012000000000000000200000000000000000000000002040000000000000000000000000000000028000400000400000000000000000000040000000000040000000000000000000004010000000000001000000000000000000000001000000000000000000000000000000004000000000000000001000000000002000008000001000400000000000000000000004000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000048000000000400000004000000000000000100000000000000000000200000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x29", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x19a", "extraData": "0x", - "baseFeePerGas": "0x4117af", - "blockHash": "0x9a93da70b45233339e8a591567fec5e1fab43884f5b56bece2e795fb964942c3", + "baseFeePerGas": "0x45a7a4", + "blockHash": "0xcb0a318ccf7de5604a9beb6772ba12ddde924fbf0e1074246c5a6864c203c020", "transactions": [ - "0xf86627834117b08302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a05c7eb02efd38c05171b4af43db20a721c7f54087fbadabf662f1be055813d644a075cf5658966cc283f17b61be68dafe570cd75814c67977c33389d645fc37dbe4" + "0xf87b5e8345a7a583011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0ea419b94c0d56d5028977a327e643518b01c91591aeed770a425cccb247cb849a01e24556467589fea695f87fe3a49d860e6c9b6949d1dbb350c5c6f564b968ea9" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -1306,21 +1361,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x9a93da70b45233339e8a591567fec5e1fab43884f5b56bece2e795fb964942c3", + "parentHash": "0xcb0a318ccf7de5604a9beb6772ba12ddde924fbf0e1074246c5a6864c203c020", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x35ab337c3fe3a3d6a7e5253bc5c51f9e6c257f8251fd43344e1a48d58f525a9d", - "receiptsRoot": "0x722bce83ca7ab873dd94d9f22d3df08cca281d5eec34fba8690b529983de0c5c", - "logsBloom": "0x00000000000000000000000000000000000000000000000100000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000", + "stateRoot": "0x794a080cd09e161af78f49b6aaed7a1a5a8d2f98bf3ee5c81729df3fc6517a40", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x2a", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x1a4", "extraData": "0x", - "baseFeePerGas": "0x3901f3", - "blockHash": "0x4087ae9e71cbdae794c137d61684e08835fa8a6c13e9e5a001163eaccf6b842f", + "baseFeePerGas": "0x3cf3a6", + "blockHash": "0x9634b9df44977f0b85afbb35da1ffd571858e7ab44f2ab3e440f920031e57fe4", "transactions": [ - "0x02f8d5870c72dd9d5e883e2801833901f4830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c29db68258899c2fe656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a035f96bc70aa62a539fa99d9153b0f8aaa4594abf70cc8a8d9018e04e39a1798201a016ee4f37bff1c0a3c97047b92910aaaee0e6b82ec659d142ff905846a2c71e93a071ec71aa535ac3a0bb492e70cb4394ad0212af2b7c3000a45e29bd59a281097e" + "0xf8665f833cf3a78302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a00261d826899befcde2c186617fd45a56062345f4a73aa8b33d3c5119986f7c56a031b2eee3d8c2cc7c2eea79968ad847553a8cb036d8069caf70364d8ec17b3490" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -1337,21 +1392,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x4087ae9e71cbdae794c137d61684e08835fa8a6c13e9e5a001163eaccf6b842f", + "parentHash": "0x9634b9df44977f0b85afbb35da1ffd571858e7ab44f2ab3e440f920031e57fe4", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x1e43cd66bda4a9c2aa6935b12ecf1051525c9f072c175f247c8d5d94b02cf2c9", - "receiptsRoot": "0x28e6deb0dbc0cb34fb9f35a37cac83443c3a4ff2c1b3266bd55c0a9ebeeff704", + "stateRoot": "0x2f2c9f6e1e8304b2ee9412dabe36312f99007622057f5900e9986d935ccbe93f", + "receiptsRoot": "0x84d61de81263a9ae82c0332b91fec6b9aece65a3b475508f0bafac05b73f0c43", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000008000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x2b", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x1ae", "extraData": "0x", - "baseFeePerGas": "0x31e6ba", - "blockHash": "0x9eb1dcefdae7fc61fdacb218921236acad55350bda6c209931d89b65dcfd0eeb", + "baseFeePerGas": "0x3556c0", + "blockHash": "0x9f769468769e89b9dc650168649eb0c666f70c82600be471f072caefe08c9d55", "transactions": [ - "0x01f8d4870c72dd9d5e883e298331e6bb830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028ceec855297bb026a7656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a089c17d9392b73a55738ba19aae192f2f9c5612dc8bd803ca23b9c2fb9c309e5680a07de4f993b57649b9621caacf9230b83e142e5f8dcc05fe53f31d7535a99bc4b8a04db26984ed0c47d7b7077db4468503112cd850621902f1321db6de4951171933" + "0x02f8d5870c72dd9d5e883e6001833556c1830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028ceec855297bb026a7656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a089c17d9392b73a55738ba19aae192f2f9c5612dc8bd803ca23b9c2fb9c309e5680a00433a43ec306f5266774cfe99da271ec19c1c4578de077d7b04e417e49352112a02cb440a099221deb207d755acf96c594c74c29542a4a2bbe7a8eb9d8f11863bc" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -1368,29 +1423,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x9eb1dcefdae7fc61fdacb218921236acad55350bda6c209931d89b65dcfd0eeb", + "parentHash": "0x9f769468769e89b9dc650168649eb0c666f70c82600be471f072caefe08c9d55", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x523c5a14c0fc2ea830dfb85907766c4d902eeb56315cc1802aa94c92c906abb1", - "receiptsRoot": "0xc121a079255bfaefd387d136353ea50d122f14486efe1e24d992102de7da41c1", + "stateRoot": "0x2bfa5cdb21678fe08dc24caaf048e65249c12c4f33a9ea751925f324a4b02b9d", + "receiptsRoot": "0x3583fc0e5b1a423557d4c71016a89100e46ef7f652a47871a925385ccaf5e63e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000400000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x2c", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x1b8", "extraData": "0x", - "baseFeePerGas": "0x2bae48", - "blockHash": "0xc0fd1e13ad5b4c7102e278a96573f8cf66809bd6c3445f5c3650189596c0d680", + "baseFeePerGas": "0x2eac80", + "blockHash": "0x4cb55e0dfa4d8e35270542ce0d83991a2b2fddd789475d675f8af1c7c9715594", "transactions": [ - "0x03f8fb870c72dd9d5e883e2a01832bae49830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c2276cc05d723a1e7656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a011f0a8ac2adda075c95bbf6be534e3254dafa759f62cbcf0e91bc6f0335e70aa83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a08dba995d002055ec395867b0cdc2d2986ad057cf63108390ab1d9b4ef1cd6fd0a07f800af40435fc91931b25c9c3c3015fb09c5436c0939d66534ee8dddfc40236" + "0x01f8d4870c72dd9d5e883e61832eac81830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c2276cc05d723a1e7656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a011f0a8ac2adda075c95bbf6be534e3254dafa759f62cbcf0e91bc6f0335e70aa01a0bcba956774ce13fc430468f7baa792a3fb1be066f4bff5c91b42bea18ed423c4a07dc200add9d8245e1673dd414410a55274b01e8380f550a4ad57a88c5df161dc" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0x2d3fcfd65d0a6881a2e8684d03c2aa27aee6176514d9f6d8ebb3b766f85e1039", [] ] @@ -1401,27 +1454,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xc0fd1e13ad5b4c7102e278a96573f8cf66809bd6c3445f5c3650189596c0d680", + "parentHash": "0x4cb55e0dfa4d8e35270542ce0d83991a2b2fddd789475d675f8af1c7c9715594", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xdfa9d2b7cda13e260da200f697f2387095f8318b19915c94ad7633cf6f4759fc", - "receiptsRoot": "0xea990763b2324d2121505b0b74be5126cd1a040b1a13d3d0e4d04db99f66df01", + "stateRoot": "0x5067c5e9581e6ad98b545fb754f6e5b19480afbee8039230f11ebda3a3f0f3e2", + "receiptsRoot": "0x0c1073d8c51aba6619e6f1b2ee9c89a99c042612749538ccff05e390ce5e6e0b", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000020000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x2d", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x1c2", "extraData": "0x", - "baseFeePerGas": "0x263c58", - "blockHash": "0x84af2f9798e57abc0431d1f0156b45f6521c7720ff0215459af9fa0553eb47e5", + "baseFeePerGas": "0x28d775", + "blockHash": "0x5cda29c5e65864ba897efa8e61cbefabb0653e2c90aa6317cc66f8b7ea849855", "transactions": [ - "0xf8762b83263c59830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c580abd8a903ed7d3656d69748718e5bb3abd10a0a07c3c3d9aa157f22797519c2adcb77137a16f0a978442ad7213b31129e399269ca053840caea2b9c28f05566f931ec7cda3061b26cb4cea9f805af8353f89cf776b" + "0x03f8fb870c72dd9d5e883e62018328d776830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c580abd8a903ed7d3656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a06551251b96ca27f3af8a2c500d6dd1ea5b9ab7002b3d923b66db0493f4a7123e83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a02f5adb260968bedf29862dd1224abbdc35c6184c3d7938ccf3d588e0df024208a00c4219fd23c6cff6f9fb31ede5fa47953e3a58fe68f9bec110cd6989f348e42f" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0x7ce0d5c253a7f910cca7416e949ac04fdaec20a518ab6fcbe4a63d8b439a5cfc", [] ] @@ -1432,21 +1487,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x84af2f9798e57abc0431d1f0156b45f6521c7720ff0215459af9fa0553eb47e5", + "parentHash": "0x5cda29c5e65864ba897efa8e61cbefabb0653e2c90aa6317cc66f8b7ea849855", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xca5cbb3c9dd01d9af5180eae51d6d8f564132488f10c5d85f2aad41f76c62563", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xc6a9cb94f56b6bcc3165bb550fd7faa650023515adab2b2975271d31e0308d04", + "receiptsRoot": "0x339d975219ef9a145e813a6df1e3ffbacc69a5b4bac7146356aedca4dca023f4", + "logsBloom": "0x00000040000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000008000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x2e", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x1cc", "extraData": "0x", - "baseFeePerGas": "0x217809", - "blockHash": "0xcb33361cca9889678cb7c5fe9a4fe345d929cc71e8f6e53e5cd310820e01dff3", + "baseFeePerGas": "0x23bcfb", + "blockHash": "0x4fab41210b0a89ad65ef56cccce7146b0c7792e631cb57f9d45f2c390c0930e8", "transactions": [ - "0x02f86c870c72dd9d5e883e2c018321780a8252089483c7e323d189f18725ac510004fdc2941f8c4a780180c001a097d5d861629fb7c4c15662cb0459b76abc9217b963ffa402806e8a13235e6c3ca006f42c3ec85ac47fc5eae74bbfb58c55d113ca213b6d8a31b9b284f4c53606ee" + "0xf876638323bcfc830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c1652c4d6db8ff1e1656d69748718e5bb3abd10a0a078526c3e19804e68c0fa3f35a65313654a6abcd8dc081a25936f97ae21e96345a032b8eea38263558ac3c8a13f03bdb1f888fd54018bacf36c47501a9015fcb885" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -1463,21 +1518,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xcb33361cca9889678cb7c5fe9a4fe345d929cc71e8f6e53e5cd310820e01dff3", + "parentHash": "0x4fab41210b0a89ad65ef56cccce7146b0c7792e631cb57f9d45f2c390c0930e8", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x539e0d194f8e6bfb6c425d7f8753df0d75fb12220efdaaa621e7ef7c97327a38", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0x4f2ae5c737d65adeed947135195017ffd5be54da2d42d61f17d81637d1f5bbfa", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x2f", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x1d6", "extraData": "0x", - "baseFeePerGas": "0x1d4a3a", - "blockHash": "0xef24d6293c96bd11abe059e96317856581f1736cf94786dbc0fc0d366df430af", + "baseFeePerGas": "0x1f45bd", + "blockHash": "0x7bab3d8b7342961697225b52e7d8bb83b46cc34903907b0e4661947eb109afdc", "transactions": [ - "0x01f86b870c72dd9d5e883e2d831d4a3b825208941f5bde34b4afc686f136c7a3cb6ec376f73577590180c080a0868fba18eb3230967166a7edbdc2504c2d1efd0d49f778d4a60e8b0db2587028a016086a90bb652179a93788f55823d5d8d8ca3fcf22e7e36dbf6c45eec6bdae67" + "0x02f86c870c72dd9d5e883e6401831f45be825208941f5bde34b4afc686f136c7a3cb6ec376f73577590180c001a01748da08db49d847acad96b1d4af30504d6eee036ab35f8828a4c2e4f21d21a3a03ba294f61faf848a43c69a3dcadf78a45734c3e46b40ae6e9fa4b37606b58b0b" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -1494,21 +1549,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xef24d6293c96bd11abe059e96317856581f1736cf94786dbc0fc0d366df430af", + "parentHash": "0x7bab3d8b7342961697225b52e7d8bb83b46cc34903907b0e4661947eb109afdc", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x48b9e8211c2ddabfb64514a6e5dc2f63fabe2bad8a06e9a8b553c43a60b13718", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0xf6394085c8ebd8e530dd4f89b4dae409c07a8035264dc316fc6450fe8ece4132", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x30", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x1e0", "extraData": "0x", - "baseFeePerGas": "0x19a1ff", - "blockHash": "0x95d87d14848a52aae340beecba232b70e909de98a3e2648fd44b66b73f7e12f8", + "baseFeePerGas": "0x1b5d2a", + "blockHash": "0xbfeba0d543fa88ab54802a9d5206fd41b5718136dfd21a9c821efb609698750b", "transactions": [ - "0xf8692e8319a2008252089483c7e323d189f18725ac510004fdc2941f8c4a7801808718e5bb3abd10a0a0847f750f8cd8a5d53ccb55b2b59b1c8aed393e7eef8cb47abdefe512f4b21548a04b7305134a0b0043633b2f39f5d80333a8355e51d412735d78de08afa3f4b410" + "0x01f86b870c72dd9d5e883e65831b5d2b8252089483c7e323d189f18725ac510004fdc2941f8c4a780180c001a0029616fc18705b16b8c9b4e8bc43e76f2fd38183a6fa0dae10667282f8d67b88a03b7a41fe2c99b08eccf79a8b77871a09e796e8224360a0960c4b7054aacf718a" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -1525,28 +1580,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x95d87d14848a52aae340beecba232b70e909de98a3e2648fd44b66b73f7e12f8", + "parentHash": "0xbfeba0d543fa88ab54802a9d5206fd41b5718136dfd21a9c821efb609698750b", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xf439de1a0caaaebf3494a15de8803730dc41ac7ccd216cff2a4dcb7230581d44", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x4528ce89fc87b464a0cdf50e2ebd92a622451c4bf29236f3d5d94b7dcda48ebb", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x31", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x1ea", "extraData": "0x", - "baseFeePerGas": "0x166eaa", - "blockHash": "0xb5e2e62689ca47b11879ba997cd532c410ab09f03719817fd33dc6923d990a03", - "transactions": [], - "withdrawals": [ - { - "index": "0x3", - "validatorIndex": "0x5", - "address": "0xd803681e487e6ac18053afc5a6cd813c86ec3e4d", - "amount": "0x64" - } + "baseFeePerGas": "0x17f1a5", + "blockHash": "0x0050e8364ebc7a92e7caf312e0b10aa59f685d32073de47561185a14dfb3fce1", + "transactions": [ + "0xf869668317f1a682520894d803681e487e6ac18053afc5a6cd813c86ec3e4d01808718e5bb3abd10a0a0877c2154ffb76b5feb76e93d1c93398c99ec12a16f88fbde76d0fb89dd133556a004909a51d865376fa682042d498affdab8ea4f47a9c3870010e18b7c2c8a54b0" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -1561,23 +1611,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xb5e2e62689ca47b11879ba997cd532c410ab09f03719817fd33dc6923d990a03", + "parentHash": "0x0050e8364ebc7a92e7caf312e0b10aa59f685d32073de47561185a14dfb3fce1", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x253153c88c427fd59bb0022d9ee7e77c1c82ad3df936e4adcddbac5606b68ddf", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x5254811a5c2755a7ac85595209aaeec699ff0bd3930d86610527317f83d05563", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x32", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x1f4", "extraData": "0x", - "baseFeePerGas": "0x13a0d5", - "blockHash": "0x56110ba58fe532a71688f5cb3ff7129f7e9636d4aaf69a4347f70299b6f21a22", - "transactions": [ - "0xf8842f8313a0d68301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a06084bb9d0485fb800f9fe54ad691985f8b129c9a041f731d464e6a69a62ba9c1a01b4e93d85984bd5c0dac90720de54f0482ac2cd9c9177650ebb85a4c29833c53" + "baseFeePerGas": "0x14f38c", + "blockHash": "0xcf0550d9f0e956ea4aea8fd5d4412812acb72922b3c6bd47c8a0086bd0c4abf5", + "transactions": [], + "withdrawals": [ + { + "index": "0x3", + "validatorIndex": "0x5", + "address": "0x654aa64f5fbefb84c270ec74211b81ca8c44a72e", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -1592,21 +1647,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x56110ba58fe532a71688f5cb3ff7129f7e9636d4aaf69a4347f70299b6f21a22", + "parentHash": "0xcf0550d9f0e956ea4aea8fd5d4412812acb72922b3c6bd47c8a0086bd0c4abf5", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xc8862c70a77a3de6bbc1d10421e0125c3e711c9bd6d4f9357e1ebdcf97757185", - "receiptsRoot": "0x3a82faa3f7e8c825464303587a1e69b4bad3780148937c8746f832aebb601f7f", - "logsBloom": "0x00000000000000000000000000000000000000000000000000020000004000000000000020000000000004400000000000000000080000000000000000000000000000000000800000000000000000000400000002000801000000000000000000001200000000000000000000000000000000000000000000000000000000000000002000000000000000200000000000000000000400000000000000000000000001000000000000000000000200000000040000000800000004000004800000000000000000000000000000008000000000004000000000000000000000000000000000000020000048800000000000002000000000000000000000800820", + "stateRoot": "0xa3ac0f155614dfcf08a5284382b3352011663fd33c8cc2a7422be722f30f542a", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x33", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x1fe", "extraData": "0x", - "baseFeePerGas": "0x113041", - "blockHash": "0x2e693ca7593217b296154d482519dd780931e96b006b2deb05490fc2375c8c92", + "baseFeePerGas": "0x12551b", + "blockHash": "0x80994d3ef7108fd26e8124978fbad74e9223d3205785161c272f91311e7481b9", "transactions": [ - "0xf87b308311304283011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0ebf28cffb555f6149bccfa9a4e6e960534d962c25699da92f3467dcadd4f65a1a02e18b53fd5d4b16988e165ab3396984f33958aec50064099cba0056107c6c647" + "0xf884678312551c8301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a001e316cedf4998e68c19455626c86444d00ee8de19af86d9343d5197fc602872a0302ee512ee50e575f905ccca9b087afca4532b9114325b703e1d0c5a9749309c" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -1623,21 +1678,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x2e693ca7593217b296154d482519dd780931e96b006b2deb05490fc2375c8c92", + "parentHash": "0x80994d3ef7108fd26e8124978fbad74e9223d3205785161c272f91311e7481b9", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x21ce67a7cbd6ace7dc42fb2e8c98a63ca87ddb33a0ad3a31b16ffc2bec255c65", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x4dc84b9445ef8b7f20493698c0acaadf021d02a3c4146d03915edb63d5699391", + "receiptsRoot": "0xe787458a52a5467278d4d6772533ece20b0cd70e458347d122e98995c73f85cf", + "logsBloom": "0x00000020001000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000004000080008000000000000400000000000000000000010000000000000000004000000000000800000000000000000000000040000000000000000000080000000000000000000000000000000002008008000004002000000000000000000000000000000000180000000000000080000000000000000000000000010000800000000000000002400000000000200040000000000000000000080000001000000000000101000000000000000000000001000000080000000000000000000000800000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x34", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x208", "extraData": "0x", - "baseFeePerGas": "0xf0c1c", - "blockHash": "0x919d586bdedaf4fb38996e5a32eaa14f753a1babb1da62c6d0aa2035005b5d86", + "baseFeePerGas": "0x100ae2", + "blockHash": "0x164df48af3dddb7478b82f0c716a3e991ce37c2c13a60959409e4e1ffd139f49", "transactions": [ - "0xf86631830f0c1d8302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a03ea49161c9b977393c9d765e2286c1142f8529323b7ef0e6b68dda28f1239603a032b36762398e02c8368d0fe69ec76b5fba945c136a7e06304a58cf2b1b62729a" + "0xf87b6883100ae383011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa06ada20d747ecb015772bafb3195f0fdb8dfe7c11d4aa4ac79bb24002bb932b72a05275dca89d6591422a4e1f80843c15f2c09c3ac8e54141c77df9e12c3c63e697" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -1654,21 +1709,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x919d586bdedaf4fb38996e5a32eaa14f753a1babb1da62c6d0aa2035005b5d86", + "parentHash": "0x164df48af3dddb7478b82f0c716a3e991ce37c2c13a60959409e4e1ffd139f49", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xda4cd278427ad08c2147716f414b9daab40231ade9fcb1d42baebb8e4ba56d46", - "receiptsRoot": "0x46c9ff6a21405f72ad433e6b8aa71b50f3fb0a5c7fbeb964cb561cfa5fd3cf7e", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000001000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000020000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xba18c47045f1d22f34df69c0e3450a33254bea64e1191f1fa2754b6b30bcd49c", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x35", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x212", "extraData": "0x", - "baseFeePerGas": "0xd2da8", - "blockHash": "0x978425ebd54536bfd17945cf57726cd02fc25b083bc9332b7b4c8a94c37762bb", + "baseFeePerGas": "0xe09bf", + "blockHash": "0x2c22e6b47f0dc7b95265f02e285984be0c2d2462a9646c69b0c7369b93ab859b", "transactions": [ - "0x02f8d5870c72dd9d5e883e3201830d2da9830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cac2ee5432174b752656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0efcb86facadbec33b8779888975eacca8f44a9073a845521617f1fb30e1ac81801a05fae983b0fa627652888859db16b05d933c27604a4c193629f58fac19ee73d12a05419fe7056d1fdb665bca996c17944711f339966334a962f767133687b832fa7" + "0xf86669830e09c08302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0f51698fb9c38430a1243bc7e0c35434f6fae3ebd8cc290d26b34450bb0706c3aa02206c685b7506d874c925fbdcab9afd49f90df6c8ca816eb1222d11109a39e03" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -1685,21 +1740,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x978425ebd54536bfd17945cf57726cd02fc25b083bc9332b7b4c8a94c37762bb", + "parentHash": "0x2c22e6b47f0dc7b95265f02e285984be0c2d2462a9646c69b0c7369b93ab859b", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x0810e4cc0f16ec17edf78a400c8efee493c863c7ef2ed760356855e7298e4fea", - "receiptsRoot": "0xa7bb91000287f7c0128087719cc6ddcd616ab350484fb520e76b6e581d5ebd25", + "stateRoot": "0x7da858bd9ffeecf4bdc441ba8fdbb63a257bfe8ff7a0b563a5e2884e2002efe0", + "receiptsRoot": "0x6928e95da80558d961c0a6dc15e81d34f230bf4d42d763d26e5bd89d47546b3d", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000002000000000000000000000004000000000000200000000000000000000000000002000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x36", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x21c", "extraData": "0x", - "baseFeePerGas": "0xb891d", - "blockHash": "0x808ecd5038418740fc4b27954cdd2e4952569e8062b846b5cdd234b1eaaf7795", + "baseFeePerGas": "0xc48e3", + "blockHash": "0xc11fc865b8f4414834cdc0b3d92d5ff380c8078f3b61eca63c3f05a33d0ed9b7", "transactions": [ - "0x01f8d4870c72dd9d5e883e33830b891e830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c5201fc7d087c0d9b656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a09038344c39b01167bfa8e99a6425d34bca24c27ceb191e8eba70ab5a8f719ce501a01810fe081a9df9de52cf2baaed3f136cdd16ed6fb3c860aa71f41ba7096ad1c5a06c9e05751e206ff38b9e192289b24bf8962d77448351b1f35dc5b431ebdc0636" + "0x02f8d5870c72dd9d5e883e6a01830c48e4830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c5201fc7d087c0d9b656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a09038344c39b01167bfa8e99a6425d34bca24c27ceb191e8eba70ab5a8f719ce501a0e0966f74387580c0164cf8efdeebae697624386c6ed5a2697c88847737accf3ca00fdaa5809b2728a85d7652c435e864bff6af5c092429b2741ff25fae8019368e" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -1716,29 +1771,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x808ecd5038418740fc4b27954cdd2e4952569e8062b846b5cdd234b1eaaf7795", + "parentHash": "0xc11fc865b8f4414834cdc0b3d92d5ff380c8078f3b61eca63c3f05a33d0ed9b7", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xe24e18212ede77b435698b2c3edcd891f73d208151d14021bdb894c4f944f6e5", - "receiptsRoot": "0x2798a949b707f2f5df2e046ea3e8bb201e9d6f7b10018f2d35c5ec9fa80c8885", + "stateRoot": "0x995f953236c31742eed6d6ce7d0ce6c0e1381f24aa773f4748b605cb204943a5", + "receiptsRoot": "0x7f635468d01df617f5f6bd5abf3a1015737db6cbd860eefac9fa3f24bd4e6037", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000004000000200000000000000000000000000002000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x37", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x226", "extraData": "0x", - "baseFeePerGas": "0xa18fe", - "blockHash": "0x4313be4af809c236c319dbd5dad18e0d030f610e7e4cacef0ff8b26af563b046", + "baseFeePerGas": "0xabfea", + "blockHash": "0x7f47b785f867aacca1b27d55186dbb6a7a9a6b83754e6d2d0d2b9f1698f32f27", "transactions": [ - "0x03f8fb870c72dd9d5e883e3401830a18ff830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038ce62b8536019651e7656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a08460e232c64e6cd9f816c02d855c892755984ebbb91592e683cda80aaba4ba2283020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a099dc58693b7dfd97272436ef8a2bab266caec51f233baa1108f5885449eb4f2ca06c0d1d946a7c787695511505281cce9c65b4e6ab824ea52b608399c8013460c5" + "0x01f8d4870c72dd9d5e883e6b830abfeb830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028ce62b8536019651e7656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a08460e232c64e6cd9f816c02d855c892755984ebbb91592e683cda80aaba4ba2201a02559b89237cbb7c1c024467392c1083aa32590e8e8d0d9a28df74485e2c75af6a00f08ec235061bcd8b3f1bb17792dceb30a5284b27c258a619fb14238a0fc5a53" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0x217e8514ea30f1431dc3cd006fe730df721f961cebb5d0b52069d1b4e1ae5d13", [] ] @@ -1749,27 +1802,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x4313be4af809c236c319dbd5dad18e0d030f610e7e4cacef0ff8b26af563b046", + "parentHash": "0x7f47b785f867aacca1b27d55186dbb6a7a9a6b83754e6d2d0d2b9f1698f32f27", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x8e5be0f31660f917fc9ef594f2952008faf8b5b7d86ebde604cc2d12ca6934e7", - "receiptsRoot": "0x8a60bb1e24339f5115c680df6608b457500fc8f3313d738aacab165a72e6e978", + "stateRoot": "0xddce5378bef297b245d35e3795388f10c00044b010a89f4a354bee02175cfc9c", + "receiptsRoot": "0x87a409cc89dd0fd67b46999dc1d3c04d4fe154f7d31ac7f1d5cc32dab0b0d4a7", "logsBloom": "0x00000040000000000000000000000000000000000040000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x38", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x230", "extraData": "0x", - "baseFeePerGas": "0x8d6c2", - "blockHash": "0xcad24a57225330d06226b15cd3b5be7b0f2a42fef155e489994f7026f79924f4", + "baseFeePerGas": "0x9680c", + "blockHash": "0xc0df0d295b403cc825a0825f741923f806f603ff53aafcc04f6b91f39dd35198", "transactions": [ - "0xf876358308d6c3830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c74fb911b03a9f447656d69748718e5bb3abd109fa09b1980b11de8f043e965487b78594b788c64434b74d434201051bbfc4f2472c6a068aa5f4cb9982931e79579100e0fd5ac4c0a6ee46a7a09dee7fe150f900dee95" + "0x03f8fb870c72dd9d5e883e6c018309680d830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c74fb911b03a9f447656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0fa29cff134420b6526f434ab690a9c3a140aa27b8479ae3d8d83b6c799acbc2383020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a01b75abfd139972c90f4493f3e7b818e9437ad4db371d961862f09b73b38b4778a020bfca36ce5c2e2c4800663aa36e4a9154486712bdefd8ed5328b63e3c33f942" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0x14b775119c252908bb10b13de9f8ae988302e1ea8b2e7a1b6d3c8ae24ba9396b", [] ] @@ -1780,21 +1835,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xcad24a57225330d06226b15cd3b5be7b0f2a42fef155e489994f7026f79924f4", + "parentHash": "0xc0df0d295b403cc825a0825f741923f806f603ff53aafcc04f6b91f39dd35198", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xabe5b798fd9af1679cb95f39a37df8944585ad8cebc7b8ea81a2b372d9d55e12", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xa7cea7741eaea66430085cc95526eb540432857dcd8c2301aa432fbbf6b65ffb", + "receiptsRoot": "0x99ed340dbe91050b3fc6ca6aa348f7c1b8bc0a85be44d8e3c6c14c810a8c1ce6", + "logsBloom": "0x00000000000000000000000000000000000000000200000000000002800000000000000000008000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x39", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x23a", "extraData": "0x", - "baseFeePerGas": "0x7bca9", - "blockHash": "0x16e634e48fc62762ce8fc1762c6bfd34e94b3533b98a5fb1bbd504b131a64a65", + "baseFeePerGas": "0x83b26", + "blockHash": "0x9f7f274336bcfaf82e4f7696590eb831dee46dbe71821c14a197810edcb2834a", "transactions": [ - "0x02f86c870c72dd9d5e883e36018307bcaa8252089484e75c28348fb86acea1a93a39426d7d60f4cc460180c080a0e3cd72920d622e7c8f3317d1f8a8387e25524d15f7e5fa54b2376f750236cf4ca013736138281feef80a6a77396ab234e03d09b82ca141d8b26fa24af15063d135" + "0xf8766d83083b27830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cd3e32cccb15d8b65656d69748718e5bb3abd10a0a0ecc2f008ce3a742e1b054d0bf507156b897156a4ed0598daef1e4a9ec2d1a481a007da830d27ff00aad22718653bc3cedcf22082b248f07d2f878a7449abb84b1b" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -1811,21 +1866,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x16e634e48fc62762ce8fc1762c6bfd34e94b3533b98a5fb1bbd504b131a64a65", + "parentHash": "0x9f7f274336bcfaf82e4f7696590eb831dee46dbe71821c14a197810edcb2834a", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x2fd54e41658c7a7134d46b16e8152a342d2e2993f81d8ab2dc0f25448e248b9e", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0xb247e20af3081900fffb8529138f90154b9e6bf4ee70e3afae3d85245415f3de", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x3a", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x244", "extraData": "0x", - "baseFeePerGas": "0x6c55b", - "blockHash": "0x39f1c7f651e1970418fd8a5e0786c83e813744d55ea965e7902112bc02f190ec", + "baseFeePerGas": "0x733d8", + "blockHash": "0xabc3fbe0c41b79c30f91b2834dfa28a2a3ca23aff7505b53ef5383f3fef45987", "transactions": [ - "0x01f86b870c72dd9d5e883e378306c55c825208945f552da00dfb4d3749d9e62dcee3c918855a86a00180c080a018d4576c526d8b56ab73d3ec9929d86808d13d3e3c88a45a5ae82c590d492c7ea00cbd53212b5b966bc6af503f738b7f9ec274225664c2d75e15f6a701a24ba9f1" + "0x02f86c870c72dd9d5e883e6e01830733d9825208945f552da00dfb4d3749d9e62dcee3c918855a86a00180c001a02db9ba21034d6d62a8b1997c6beb5ce965cbb5f6a011e75c00674cd452858126a0586e8d8ef2601881468ad3b2fc6b663781b528a93727175a8fdb50633208959b" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -1842,21 +1897,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x39f1c7f651e1970418fd8a5e0786c83e813744d55ea965e7902112bc02f190ec", + "parentHash": "0xabc3fbe0c41b79c30f91b2834dfa28a2a3ca23aff7505b53ef5383f3fef45987", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xfbe509b0b3251cebdcd95315fbbcb61f913a524602d35c03b5f270b667108f3a", - "receiptsRoot": "0x642cd2bcdba228efb3996bf53981250d3608289522b80754c4e3c085c93c806f", + "stateRoot": "0xb05cfb0b57d2beb5b6ff5a361057afef5a11ab641b7f90073e856d848e0e1114", + "receiptsRoot": "0xbe3866dc0255d0856720d6d82370e49f3695ca287b4f8b480dfc69bbc2dc7168", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x3b", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x24e", "extraData": "0x", - "baseFeePerGas": "0x5ecee", - "blockHash": "0xceccf9166834bac24869c590390335f72c85c59a1553be2d99db38b039bb4c99", + "baseFeePerGas": "0x64d66", + "blockHash": "0x761bd27a0e51092eee4eaa4a545708b2df734d240ec2e5909e784e478752626f", "transactions": [ - "0xf869388305ecef82520894eda8645ba6948855e3b3cd596bbb07596d59c60301808718e5bb3abd10a0a03ec04936103192dfdb6ba9599584104a1a1af9d46f81c4ccefda71f2637632dba00c983e0ddaec1491cde1f892944cd420020d6a4ffab6a8206404c2f4e562f6bd" + "0x01f86b870c72dd9d5e883e6f83064d6782520894eda8645ba6948855e3b3cd596bbb07596d59c6030180c080a00de2602b708e8efb0cfd73660ad2dda2e5e1602ab9de18dd725e1c005bf7e50ba00dd41de8f8fb6ed0f5adeb0ef8718da775cad6ce8585602d584c39e455ad2804" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -1873,28 +1928,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xceccf9166834bac24869c590390335f72c85c59a1553be2d99db38b039bb4c99", + "parentHash": "0x761bd27a0e51092eee4eaa4a545708b2df734d240ec2e5909e784e478752626f", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x5b7a9350c65fcf4bc55005baa15c44063e165fb4ac7c1f53f13fbf9363b608da", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x8a768be0bdcd6258f177e1fa0b68d6a2ceae367186afeb3bd14ca23bfe50d4e5", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x3c", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x258", "extraData": "0x", - "baseFeePerGas": "0x52f87", - "blockHash": "0xb8c495461332ae67504ee899542ccf73e859f73c6682fad15415743f15b7f5e6", - "transactions": [], - "withdrawals": [ - { - "index": "0x4", - "validatorIndex": "0x5", - "address": "0xe7d13f7aa2a838d24c59b40186a0aca1e21cffcc", - "amount": "0x64" - } + "baseFeePerGas": "0x583c1", + "blockHash": "0xfee26a4ca9c8d56be94795b13f522d026f47a749fb3969c5f5ffa7465acefd36", + "transactions": [ + "0xf86970830583c282520894e7d13f7aa2a838d24c59b40186a0aca1e21cffcc01808718e5bb3abd10a0a0adf6eef3b27cd6d5ec8de3fa62efb9e9217693837fe48bb007d00b822458f8a4a05c37acc91f44d9ae418a88e72eb7fba781def6146cb447544ce6763dfa39aaaa" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -1909,23 +1959,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xb8c495461332ae67504ee899542ccf73e859f73c6682fad15415743f15b7f5e6", + "parentHash": "0xfee26a4ca9c8d56be94795b13f522d026f47a749fb3969c5f5ffa7465acefd36", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xeef64cf4a7bb430d2200064c49eb11996795bdbb68fc4af5398a582c4be86ff1", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x3dba76642c4eb32df53e7f15deb6e14cd5f314893d6d84b98c82cf6875249e66", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x3d", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x262", "extraData": "0x", - "baseFeePerGas": "0x48997", - "blockHash": "0xfe4445a66aeaa138c2045c340fffae7db7f7a49b7a31df8b8b5f5aa431c58546", - "transactions": [ - "0xf88439830489988301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa038216928b5f6a70e1cf134bb6c9a951de7c2817fc38b3f86949550175a859fb0a043f7d04317166f2d72e9cfd988bcf737ffc95a343c9733f11b288021f523a5ac" + "baseFeePerGas": "0x4d350", + "blockHash": "0xd99ba2e7fce99a98dec8caee0bf6422887042e79facfcb081e4c5d04a3f8fdb6", + "transactions": [], + "withdrawals": [ + { + "index": "0x4", + "validatorIndex": "0x5", + "address": "0x1f5bde34b4afc686f136c7a3cb6ec376f7357759", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -1940,21 +1995,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xfe4445a66aeaa138c2045c340fffae7db7f7a49b7a31df8b8b5f5aa431c58546", + "parentHash": "0xd99ba2e7fce99a98dec8caee0bf6422887042e79facfcb081e4c5d04a3f8fdb6", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x0e3c5c9b3160c6b8d8951ca6b10c478d32c9d7bfd6e62c363054554fd9ddb9a9", - "receiptsRoot": "0x0c764fac3f63a25bae530d64f6553466d7a33565bbfc2aeb58e88cd53d2f1e3f", - "logsBloom": "0x10000000000000000000000000000000000000000000000000000000000000000000020000000040000000000000000000000000000000000000001200004000000000000000000000000000010000000000000000000000040080000000001000000200000000000000000000000000000000000000000001000000000002000000000000000000000000200000000000000000000000000000000000000000040000000000000000000000202000020000000000001000000020000000800000100000000000008001000000000010000000002000010000000000000000000000000000040000010000000000000020000000000000000006000040000000", + "stateRoot": "0x25d950bb56cc65ee4c44f70dcb9894858d2a8433c6a6972307e9065d13f86416", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x3e", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x26c", "extraData": "0x", - "baseFeePerGas": "0x3f935", - "blockHash": "0x0f13f717c99151d8b5b509af5cacb5313f1ebf813d7a6b37764cbe1ec0459beb", + "baseFeePerGas": "0x438e6", + "blockHash": "0x1ac60d9a0fbdd7d5779432344ddb1cc080b7d70d8049631e9a5767f94dfc0fb0", "transactions": [ - "0xf87b3a8303f93683011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0b2beb8e7391a9ac3ede139938af3c58f6916107ba6daf327a8964b4f6d273a8fa05561b70ac9189628fd0beaa4547deec02c2fa58766fcde758de4bb2ac93e2d35" + "0xf88471830438e78301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa057079c9077c3232a4f91efd2b4f84dfce1a679facf8c6290c59b2548d2258f97a008023fccd46ee398d35a5f82e4d0663a96bada0efbce6f6dcb4c47ab3ee10c60" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -1971,21 +2026,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x0f13f717c99151d8b5b509af5cacb5313f1ebf813d7a6b37764cbe1ec0459beb", + "parentHash": "0x1ac60d9a0fbdd7d5779432344ddb1cc080b7d70d8049631e9a5767f94dfc0fb0", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x365f7c27afe4331fd7832a76194f6da1222367f343ab73aabd703d7cb320beae", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xb034aadc849aa478d255949d503c0d25679dcfbe117545e5f4094bc426cebe5d", + "receiptsRoot": "0x1efb5076ec1f4f5cb2b603c551c50de2f00dae69dcfa5160a217576a9f6551de", + "logsBloom": "0x00000000100000000102000000001000000000000002000008000000000000000000000000000000800000200000000000000000000040000002400000000000020002000000000000000000040000000000000000000000000000000000000100000000000002000000000400001000000000000000000000000000000000004000200000000000000000040000000000000000000000002002000000000000000008000000008000000000000000000000000040000000000000000000000000000000000000000000000000000000000100000000000000000000000000101000000000000002000000000020080000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x3f", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x276", "extraData": "0x", - "baseFeePerGas": "0x37a7e", - "blockHash": "0x2e33aeb9f45e7cb955774b6b43df2c3a438c5aa03a69f90793f137ff5d2eb49e", + "baseFeePerGas": "0x3b1e2", + "blockHash": "0x0592a18e16fdecf8028cfd0172fbd99a44287f9fa77970a947623c4305aff927", "transactions": [ - "0xf8663b83037a7f8302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0330d4dff22fc1215cb9dd37e6c0e4f5f5b8b343901decd1dc090217a1a30780fa0634cd91aecc44473bde30fc756a8d35b9ba50c8f70e199469cd4c48666724b23" + "0xf87b728303b1e383011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa03cdf945881ecaa78ff016a6f8ec7e26cc8ed55984d846133e2f8158839c6f9e4a025d0995c64961fc82c032d3236de123ebb467551301d2d925c53572e5e3df84e" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -2002,21 +2057,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x2e33aeb9f45e7cb955774b6b43df2c3a438c5aa03a69f90793f137ff5d2eb49e", + "parentHash": "0x0592a18e16fdecf8028cfd0172fbd99a44287f9fa77970a947623c4305aff927", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xaa1f9542e99b8fc7584926efd625552d9a0b49ac0737ef2ef01f2a328c0b3d07", - "receiptsRoot": "0xc9510b4222f446bd32f7fc5db4f3d25c48644389a56e3f38da4bd0e8e85ea5db", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000009000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x765a22e55593f83268d99b38f8a055963be0b8e886293899167fc7b2c63a7858", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x40", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x280", "extraData": "0x", - "baseFeePerGas": "0x30be4", - "blockHash": "0xf496b8d4d19037d646dcbc3796d2a28bf176488e2e238107feaa0b4b7f5ae6a5", + "baseFeePerGas": "0x33bb3", + "blockHash": "0xe276709cf0da03abbe0672cd6542c8823ba1a79ced1d077331d26a4bfbe4664b", "transactions": [ - "0x02f8d5870c72dd9d5e883e3c0183030be5830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c6c744aeee3965d5c656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0905cfe802dc4c667312ea08fdbe97798b88cfb11049ade2b18ad9001e8b6dd7c01a08108fba0b09bd2524b990bfdb8859c61415ce9fc89c5a74c6646c006d48cf063a07e42d23500741f1c090ef29678d3ee14ebab252ee22b7b2739b7f247d6f77726" + "0xf8667383033bb48302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a03064d3c81552b2f7c755a56e3679ebcb88a0bf3f13e813f602bb295e0296387da06bdcc96db69bd03db606db527de86f95db09095a11a8e79164de8a4c08da57f5" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -2033,21 +2088,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xf496b8d4d19037d646dcbc3796d2a28bf176488e2e238107feaa0b4b7f5ae6a5", + "parentHash": "0xe276709cf0da03abbe0672cd6542c8823ba1a79ced1d077331d26a4bfbe4664b", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x6a74cc114b3893db5aae2f6053f8dc07aa202d92809edeaa5c992d6ec64de2d4", - "receiptsRoot": "0x642c1186627a30db8aca0880b5a4e4898347733004fcba0261730af52e7f84e9", + "stateRoot": "0x4f01b084f910cc06f872778327aa44fe90539990dcd5c91b72543a3113ad75a5", + "receiptsRoot": "0x2e9c0e40c154746c3b1ce61786b868384f1c7545b0e7a8b50fb140c45ebce26f", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000804000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x41", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x28a", "extraData": "0x", - "baseFeePerGas": "0x2aaad", - "blockHash": "0x49005c56e2c43c7d5d10026c97dce5b3b2e4a38eda72b6db3e544d2e92c12047", + "baseFeePerGas": "0x2d452", + "blockHash": "0xdc32af56e34daa6037e96a2990d6485815b9dbb16ed0fd48e19e794b16d78d52", "transactions": [ - "0x01f8d4870c72dd9d5e883e3d8302aaae830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c3f2b9739dd517491656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a04b3120af8064823e074758c51cd6cd0954587c0d94b5b37b336261fc7aa2ddb380a01e0726157040be97d0fc732cfe43a33f37d3c7023ef5506a6ddc70c382a86568a059b0b6972511633af465bd1361ab7150667deb1069d0d257f6f2f2a7ab02235b" + "0x02f8d5870c72dd9d5e883e74018302d453830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c3f2b9739dd517491656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a04b3120af8064823e074758c51cd6cd0954587c0d94b5b37b336261fc7aa2ddb380a00945194e5e0e0e8f8d4beb2742ced81be8ccf85bcc21421034985cd93cda13cca037b277e7ab9549fac0f305fd40ecf1684db94b9445a306488746b6e023277d6a" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -2064,29 +2119,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x49005c56e2c43c7d5d10026c97dce5b3b2e4a38eda72b6db3e544d2e92c12047", + "parentHash": "0xdc32af56e34daa6037e96a2990d6485815b9dbb16ed0fd48e19e794b16d78d52", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x14b3123c5e05edc308b317830c11696e3a852faacddfd3c797313e76f3e8d4ac", - "receiptsRoot": "0x336f42e12ba106c40aa9562f2451020ac99cd3f09668f3c93d60e7867939b8bb", + "stateRoot": "0xb5e9446f68d570b553da6d0412e990de655b3fb769d6d42d3e828b0af590bf89", + "receiptsRoot": "0x8a3e160a97c192e4e39bd411702fd7936d10b2726925e81452d8a00a76ff84c4", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000008000400000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x42", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x294", "extraData": "0x", - "baseFeePerGas": "0x25594", - "blockHash": "0xae199d9dff48f9bc1202bd414078c175b977869bce215c79259cbed32e490b16", + "baseFeePerGas": "0x279d0", + "blockHash": "0x2256ff7bd7ede2f79b3392f7898790b3bfcc1dc7bb0143c654a33f2e2f5888ae", "transactions": [ - "0x03f8fb870c72dd9d5e883e3e0183025595830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c4f2fdd3d218cddc4656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0e7d55978188f31ab090b1f10d8d401a66356b11ca8c296384a0a51e36e6ec11f83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a0ba7c04326cf6a555be5bd9f31cb2fba1eb9a9f3e33e2946aac1f9fc22b568383a04a0b8e9efdb25fa0cb8a181b58efb746c78f2ddff7e871de4eb252238150a672" + "0x01f8d4870c72dd9d5e883e75830279d1830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c4f2fdd3d218cddc4656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0e7d55978188f31ab090b1f10d8d401a66356b11ca8c296384a0a51e36e6ec11f80a08c13050003ddcd771f0fec8d1b89878ce5a27e037db9429f1d109aaef82789f5a018ee9dccf551e5444ce9833475c88d1c0ddb2101104f7164126c7856ad4c1164" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0xcc9476183d27810e9738f382c7f2124976735ed89bbafc7dc19c99db8cfa9ad1", [] ] @@ -2097,27 +2150,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xae199d9dff48f9bc1202bd414078c175b977869bce215c79259cbed32e490b16", + "parentHash": "0x2256ff7bd7ede2f79b3392f7898790b3bfcc1dc7bb0143c654a33f2e2f5888ae", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xe2923af53ace216a2f3756f07e02eec3fe11417e1444f7f7f3ee962730052b0c", - "receiptsRoot": "0x0c1845ba8a6c851d9de17fa0df7f08367b9b3a8b47d536aaca24ca3551c9e1cb", + "stateRoot": "0x0aef69115f48eb6fbb8edd230c372b670502469d2172a2bebed94e19c97bf267", + "receiptsRoot": "0xe3c4e63900d391a75cfe5ee6bb7369b9098e65dc9696f770dbfbcb859b46a2a2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000009000000000000000000000000000100000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x43", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x29e", "extraData": "0x", - "baseFeePerGas": "0x20b17", - "blockHash": "0x0065ca2f730c7ef4ae37e81f916bfe2a89b86ee315d17796e0b8b5bb76c4127e", + "baseFeePerGas": "0x22a9e", + "blockHash": "0x6163d0b7f02b214352ded0703f0e17a07ffd6b732cf37498e0ea7326863972eb", "transactions": [ - "0xf8763f83020b18830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c830865895079ba54656d69748718e5bb3abd109fa030af21395f8f337afa3ec46a10e083ab868ec41ded089861c9bb7031f6996fc0a01f6cb2daa409d5eabfe1e2f78a94ae403fd8f790b25817a007d999b0bbb9b4d5" + "0x03f8fb870c72dd9d5e883e760183022a9f830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c830865895079ba54656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0412379b7f583981ea6e84408cba75ced69039e07ce9cdaa32a8a9dac997aaafb83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a0fef9b70f4e7ee3d672ab232eed3bec3848bc09d3605a903b2441923255454e68a05758f2d31da55b029c5a2c3171f9403fdde911d63722385217e2def96d11b87c" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0xf67e5fab2e7cacf5b89acd75ec53b0527d45435adddac6ee7523a345dcbcdceb", [] ] @@ -2128,21 +2183,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x0065ca2f730c7ef4ae37e81f916bfe2a89b86ee315d17796e0b8b5bb76c4127e", + "parentHash": "0x6163d0b7f02b214352ded0703f0e17a07ffd6b732cf37498e0ea7326863972eb", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x79b6da8621db4d382ab7daf4b067e987df60959df8352369ab182b7e5edb388b", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x80781ed49b23a46e97b31ec8dcd53fe51b069cbe29c9059f8b773c2c93303ace", + "receiptsRoot": "0xf8e5ad4aed3c039edc467864aff788852767d1c4a20c83f3fa61007cde5a8acc", + "logsBloom": "0x00000400000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000008000000000002000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x44", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x2a8", "extraData": "0x", - "baseFeePerGas": "0x1c9e1", - "blockHash": "0xc091a79738ea695804fd7a370a3d24728d5d4523a047835b28fbe5790c914af0", + "baseFeePerGas": "0x1e551", + "blockHash": "0xa5662af7bb63607ebbc0c5ba713be53a59b376199c9f702b141d4b2cf75571b8", "transactions": [ - "0x02f86c870c72dd9d5e883e40018301c9e2825208945f552da00dfb4d3749d9e62dcee3c918855a86a00180c001a00929204cf592a006c27998253c5071e583e2c920514e7d5c1e34a49e37453f38a05dbbbc9782cc4d74b300914cb993d12bd127c2122e7fe1b7cca30c65f7c6edcb" + "0xf876778301e552830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028ca45bff2be728c2a3656d69748718e5bb3abd10a0a0637b96978972ace94aa6b3dc16863c4c205f86005b7ad7876604edd0b5dcffcea005525d14e41366ef8e2d7a7dac83ea9beda14c6271773fe543dc053b22bc939f" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -2159,21 +2214,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xc091a79738ea695804fd7a370a3d24728d5d4523a047835b28fbe5790c914af0", + "parentHash": "0xa5662af7bb63607ebbc0c5ba713be53a59b376199c9f702b141d4b2cf75571b8", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xa7486d74361a7d787a9e90106c8a08d8a235890e58111e07ec69684b9758ab09", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0xd4dc380582a6502e31b2981b10348a41e347cce67dbefd9cd0b256ecae8497ba", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x45", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x2b2", "extraData": "0x", - "baseFeePerGas": "0x190b6", - "blockHash": "0xc0dec6888ce6c75c575ce5ada6f3425cf1511b4d31b4f7ffeb63e93bf00ff243", + "baseFeePerGas": "0x1a8ad", + "blockHash": "0xc2f77b16764d5704a9c3fc3ccdc291c2301b512341ed07de3420e05814f38f44", "transactions": [ - "0x01f86b870c72dd9d5e883e41830190b7825208943ae75c08b4c907eb63a8960c45b86e1e9ab6123c0180c080a040e500b278d2f1bc4f1712d23db7301b0c51eb5fcee5c0e6c2fffe2eeb2c5297a050aa2d6a1dfe6d17354f121168b2a9e2e4e9a486ad2b6ce20c10167c33b1f0ab" + "0x02f86c870c72dd9d5e883e78018301a8ae825208943ae75c08b4c907eb63a8960c45b86e1e9ab6123c0180c080a0b180dd7d638a1ee48b760f539880f22ce181f24c4f19cd81a3bd9bc4889771e5a01a78726e8eaf502fac630205fd3a783e99717fc0d01a97b13c2e0e0ce0ebbb79" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -2190,21 +2245,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xc0dec6888ce6c75c575ce5ada6f3425cf1511b4d31b4f7ffeb63e93bf00ff243", + "parentHash": "0xc2f77b16764d5704a9c3fc3ccdc291c2301b512341ed07de3420e05814f38f44", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x0780d1da5793aa323fc66a9089541cb12ae3cb7510f9f3685a3941195276d2ad", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x06ea061dfa57f22d1f8e3ffb69d504b38f4c81e4c79f885a292e06f6f797448f", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x46", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x2bc", "extraData": "0x", - "baseFeePerGas": "0x15eae", - "blockHash": "0xfd1c5aae32a2ab886fbc6b5229bd30528f904fa67063d334e6428dfc94a9909b", + "baseFeePerGas": "0x1739a", + "blockHash": "0x0f684901e87fafdad7d7ffe9f324a534b06cfc52bb98cfd6937ad3373edbe050", "transactions": [ - "0xf8694283015eaf825208942d389075be5be9f2246ad654ce152cf05990b20901808718e5bb3abd109fa0cc54eb0962f6ee85e270409d8e16dcd4a85b55c027c40fede1eb337b6b22b113a06eb534ff3e0ad65677e8d47cbeef950d10ff14edcbbeedae7163c139e20a4289" + "0x01f86b870c72dd9d5e883e798301739b825208942d389075be5be9f2246ad654ce152cf05990b2090180c001a0ef28e0030d89af2f11006a9ba0f24be22336f00c930a4650e0c527e12c697992a07b186a3fa04ad8a6ad04b637060a816f58e68bc71fca5d8fe15f0dc670657f2a" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -2221,28 +2276,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xfd1c5aae32a2ab886fbc6b5229bd30528f904fa67063d334e6428dfc94a9909b", + "parentHash": "0x0f684901e87fafdad7d7ffe9f324a534b06cfc52bb98cfd6937ad3373edbe050", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x67d9e95841df8e76fc7449398d692c9e22aa5a9cc46062f0f9ce86e86c6be65b", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xeeebbcb11f4cae22dc094529622b5447de8cf3711f5f62d61e91c03d58dfbd87", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x47", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x2c6", "extraData": "0x", - "baseFeePerGas": "0x132e5", - "blockHash": "0x537b75471b40aaa24670d4ed625d075165b59e4ab455236c14dedd7e99e65d34", - "transactions": [], - "withdrawals": [ - { - "index": "0x5", - "validatorIndex": "0x5", - "address": "0x654aa64f5fbefb84c270ec74211b81ca8c44a72e", - "amount": "0x64" - } + "baseFeePerGas": "0x14529", + "blockHash": "0x7ac52282fa3642fe038111e06c27e42bb80e6687faff3a80802b98c0046cff14", + "transactions": [ + "0xf8697a8301452a82520894654aa64f5fbefb84c270ec74211b81ca8c44a72e01808718e5bb3abd109fa0d8f3e3854eebe13f0c2c5a9a086625e9a783dd5f78abaa521f9373df8d72c1d0a063c664d9e97dcc81eca63119405dc35becafccfb5b916b142cd6719001cb3899" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -2257,23 +2307,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x537b75471b40aaa24670d4ed625d075165b59e4ab455236c14dedd7e99e65d34", + "parentHash": "0x7ac52282fa3642fe038111e06c27e42bb80e6687faff3a80802b98c0046cff14", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x1e288bfa95da0801a29d41c58b606e07c2741f55b9de3176b9f1304a270bd043", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0xc02ebc764f72e04d2c52303b225236c219a3b495bb71bbe714422ba3ebc275df", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x48", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x2d0", "extraData": "0x", - "baseFeePerGas": "0x10c89", - "blockHash": "0x509c406dedf930913cc53d51de88a6b34b0edf15d45c88deee154cdea0b35415", - "transactions": [ - "0xf8844383010c8a8301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a00f95d60b8058eb4ed470df1649e1d49a6bdd13b4d4550cf9190ad46deb6e385ca06a35861fbdd443bdaf5b29b45009d23e10095e81e6bc5ae57d56ac18bdad4f8d" + "baseFeePerGas": "0x11c86", + "blockHash": "0x6ac35d9c3afb594c2625d6aa43c248e7f1ebca6cbb3ab4381e8532390005e4d4", + "transactions": [], + "withdrawals": [ + { + "index": "0x5", + "validatorIndex": "0x5", + "address": "0x0c2c51a0990aee1d73c1228de158688341557508", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -2288,21 +2343,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x509c406dedf930913cc53d51de88a6b34b0edf15d45c88deee154cdea0b35415", + "parentHash": "0x6ac35d9c3afb594c2625d6aa43c248e7f1ebca6cbb3ab4381e8532390005e4d4", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xe629e14f080a5b136f2692b4d69c567f5434c457903057b1b6f5ee7f48f1683e", - "receiptsRoot": "0xbacbf940adc4821ad97f4693540bbfd97f5e03fafb76a803ca8a9d0f48eaad59", - "logsBloom": "0x00000000000000002000200000000004000000000210000000300000000010000000000004000000000040000000000000000004000000000000000000000000000000000000040000000000000000000000000000000000000000000000000800000000000000000020000800000000000000000040000000200000000000000000000000000000000000000000001100000000002000000000000000000000000000000200000000000000000000000000000010000000000000000100000000000000400000010000200000000000800000000000000000000000400000000000080400000000000040000000000800010000000000000000000000000000", + "stateRoot": "0x691f24e77ccb290db740fdc2461d6e88e7399b205bbf1b3f277eed2f504bef78", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x49", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x2da", "extraData": "0x", - "baseFeePerGas": "0xeb29", - "blockHash": "0xcd249ec42453922de5255c9b47ac76191e3cb60144ad0c4bd1b5e02d672c08a0", + "baseFeePerGas": "0xf8f6", + "blockHash": "0x1e3f81c1be76102b47f9d823bb475a6061f72286e53a8d72abc2d363567498ba", "transactions": [ - "0xf87a4482eb2a83011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0844a9661b1056386289b482f1ad2b05fae312ad19ce2e3a3d06ab9028ec70a33a022f2d8348abde63af504b925a8ba1d258a2208d2aa056b8b73cbdaad67c55f5d" + "0xf8837b82f8f78301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa01a2c152b4497e19b7e724411e8a6fbd5f83a68170a9df80cc84ae05e8ca999b7a022ed8a35c5c8b0c78c05bdb2f4c8cf37acfdb3e2185b51ab4192549aec484e6d" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -2319,21 +2374,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xcd249ec42453922de5255c9b47ac76191e3cb60144ad0c4bd1b5e02d672c08a0", + "parentHash": "0x1e3f81c1be76102b47f9d823bb475a6061f72286e53a8d72abc2d363567498ba", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x585fadd5c479efb4ac957ebc42b3af0672543a6486bac7218af2a8d20a438172", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x1b0d0fe24e13177b0cb5a28d6373d104236ccb98fbf6cb10ed29d1ba67fa9dd3", + "receiptsRoot": "0x3969065861bedbd5387fb8b39289a77281e33297ca1e3ba1ff99ee964a5784f3", + "logsBloom": "0x000800000000000000000000000000000900000000000000002000000000c0080000000000000010000000020000000000000004100000000400008020100000000000000000000000000000001000200000000000000010000010000000000000000000000000000000000000000000040000000000000200000000000000800001000000000000000000000000000000000004000000000000000800000000008000800000000001000000000002000000000000000000000000000000080000000000000000000400000000000000000000000000000000000000000000000000080100000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x4a", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x2e4", "extraData": "0x", - "baseFeePerGas": "0xcdde", - "blockHash": "0x4b17336fdc9eccebc8c836ffcf41d077a956e9cf786521e9eb4d01db5de5a935", + "baseFeePerGas": "0xd9dd", + "blockHash": "0xb3633d86d73d0b3c8ee7b906a5a0d4bc5ea1bed0490eb0211164833cf5a4b3f4", "transactions": [ - "0xf8654582cddf8302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0903ed0f6e8c13e03dd6873a3dd66d60f595f047b94c3320eb409a6ea4a039b0fa05c8a6d80d1ef19f554c6c5b8dc2093fb9665369c706ff7afb53d7c8b4886743a" + "0xf87a7c82d9de83011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0f7d00688d1f40250cdb8c619eda10279419faf6472ee3aa7d1feaa1e0bf7efdda017d632024676f4ef25a13722ed514b057ea2cbd71ee991d87a3af5d8482e0a1d" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -2350,21 +2405,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x4b17336fdc9eccebc8c836ffcf41d077a956e9cf786521e9eb4d01db5de5a935", + "parentHash": "0xb3633d86d73d0b3c8ee7b906a5a0d4bc5ea1bed0490eb0211164833cf5a4b3f4", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xaad034b9aed035a65c6f0a7bcd8327867b8afc96c350c9c71cab19e4e9c2f309", - "receiptsRoot": "0x5261381ed0a36b358279ebe50c64a85c106a8166fade9b69010f342eb757bea1", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000008000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x8c4a0b2cd0d38b00231f79f70a66a68702d667bd74b7aa1330760bcb768900dd", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x4b", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x2ee", "extraData": "0x", - "baseFeePerGas": "0xb44d", - "blockHash": "0x85784669b5e3b7ce03064984463c5c167f4c90bbc7731862bd5d6cdcbbe7dfaf", + "baseFeePerGas": "0xbea5", + "blockHash": "0x502288a02dc23356064d1f98cd38f8e346943b6f6837f0bf98f63534c2027ca9", "transactions": [ - "0x02f8d4870c72dd9d5e883e460182b44e830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c324bbfff4e8882f2656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a00d968817f6ab6815faa1501ac1eafc810f4bc9b7423abc4f1bd5e65e791b4e0b01a0cf115f14e366d52ac5a9b1faff8e03b73051d51a3deef72e84a21d76a6894971a0764be216a65078c1f43363c76dbe88be7be58367d618682445d8c44a819f6b6a" + "0xf8657d82bea68302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0516d936b4d302f4b4b967654d6241e7994da2c03543a97f4d80bc07fee475f58a012daa6b095ce29321e499ec8d2e7d3e769608987216e241d64f84b6579714ca6" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -2381,21 +2436,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x85784669b5e3b7ce03064984463c5c167f4c90bbc7731862bd5d6cdcbbe7dfaf", + "parentHash": "0x502288a02dc23356064d1f98cd38f8e346943b6f6837f0bf98f63534c2027ca9", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x10f5f1733d662117fa95692a2c2b9867cdb9f1f04b83ae8bc6a75df18429ec4b", - "receiptsRoot": "0x8c6369cb0d38a3b914a4021483e92520156bcf6d81d9d294540fe99ec3c1c0eb", + "stateRoot": "0xb6a97798efa3805c67d7259cf491abfae020063aaf5f2feed35e93dcfea9f172", + "receiptsRoot": "0xbd7ba02f42baaba5afcb42284037349a6efa8e3f3d7ab3708a0699ddd73c601c", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000080000000000000000000000000000000000000004000000000000200000000000000000000000400002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x4c", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x2f8", "extraData": "0x", - "baseFeePerGas": "0x9dd4", - "blockHash": "0x6d3b7ae474719d6929a8374bac361084a530941d9e9c8754bc8765a818704dc4", + "baseFeePerGas": "0xa6d6", + "blockHash": "0xb2145a089c38b7db50fc671aa89fca64e00fa383f540f3c704ed51e7f2179f3a", "transactions": [ - "0x01f8d3870c72dd9d5e883e47829dd5830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c3acdabed71e665d0656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a041565ae6f06f2555139f444c467d6b709b45180aa0c6b15bb5b1388d55ef952c80a0252e9727a43663fd5aa98761487ebeb15b95d7db033235f7d351eb9acb475979a01f3d1b12b2c37a769a0c272fe6e9a7ef01d133dbd50b57cead6d7b7507facc0f" + "0x02f8d4870c72dd9d5e883e7e0182a6d7830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c3acdabed71e665d0656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a041565ae6f06f2555139f444c467d6b709b45180aa0c6b15bb5b1388d55ef952c01a0cffc0f208f83285346026b83f2f5ba195f945ad960f36ce58acb16009de6cfaca068fd55444b5a2fce5d02a87a91ad6dc56928196a22068fa1758bb2457c15da4c" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -2412,29 +2467,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x6d3b7ae474719d6929a8374bac361084a530941d9e9c8754bc8765a818704dc4", + "parentHash": "0xb2145a089c38b7db50fc671aa89fca64e00fa383f540f3c704ed51e7f2179f3a", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x7206ee5e84555ed8f4ba8d272e1dccfe1925624632761455bcfdc0e67c5e823f", - "receiptsRoot": "0x6982e94426d405c8d3de49f7b6ce870c10701f30c45ecd2af43f133599b6f8bf", + "stateRoot": "0x0c77ef683c268de05888918e6561811589e39b2847f09eca14cd12df1264b96a", + "receiptsRoot": "0xe680fa7144191a3cf69ccec9595d61c7d7d0c32d5ee17d9b5438f3532262508f", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000080000000000022000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x4d", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x302", "extraData": "0x", - "baseFeePerGas": "0x8a28", - "blockHash": "0x60ab9fa061b4a52ae93aac61a70a7049d5ace2d85ad81cd3ba18e5b6f9df5a90", + "baseFeePerGas": "0x91fe", + "blockHash": "0xf0c902bd6d37bdecc5d0b17b012dbabf6856efe771bc52c790be6127b8b8a9ed", "transactions": [ - "0x03f8fa870c72dd9d5e883e4801828a29830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c3bcdbc5784078a41656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a024a4daf5b3cac3bf3066902cda09da0fc862e0a6723c47981ed601782ad6907983020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a0be16a650dcd81359ba2d9f87a008c438a386e541e9a4ba6ed80dfedacea76e12a03d50205907b0ab60580851df05efbb4abc9d8019111bdabb3223a48d33b0048e" + "0x01f8d3870c72dd9d5e883e7f8291ff830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c3bcdbc5784078a41656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a024a4daf5b3cac3bf3066902cda09da0fc862e0a6723c47981ed601782ad6907901a0ee85123914a3aa5f95b01a79655cc1f7fb805fb946305eb4a4e6c45e63b61146a06f65c10b513b8c62ec6eca0817a310160feef72e30640bd0dcade50073d4f2a6" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0x774404c430041ca4a58fdc281e99bf6fcb014973165370556d9e73fdec6d597b", [] ] @@ -2445,27 +2498,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x60ab9fa061b4a52ae93aac61a70a7049d5ace2d85ad81cd3ba18e5b6f9df5a90", + "parentHash": "0xf0c902bd6d37bdecc5d0b17b012dbabf6856efe771bc52c790be6127b8b8a9ed", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xdd742a8891473ccbb5ccc2120e977e1408c391722034f2f2484307282b7e767a", - "receiptsRoot": "0x42fd4760a510b52f9c950b84b193545e86594957ee0531c97075c8d30a2cabda", + "stateRoot": "0x1ffd3bf8da28d4c548f4e514d43d10194031b9dc5cf5eaed1ff5a57ab36711cb", + "receiptsRoot": "0x4a34ffe81cd211ed9e5fe067a9cfa19fb29d00dfaeabc3f54cf50382500a0019", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200004000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000020000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x4e", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x30c", "extraData": "0x", - "baseFeePerGas": "0x78f0", - "blockHash": "0x8d76a11f766a753283cdebf3c0a4ada62f0a85333eadf13f5c94b5528b9a0bb8", + "baseFeePerGas": "0x7fc0", + "blockHash": "0x0e065a7c1d66be9a7505eaa9846edba1efbc5a2643b0cde0dc11ab9b0e82d2fb", "transactions": [ - "0xf875498278f1830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c2d5a0323bb16361f656d69748718e5bb3abd109fa04bebaf0a20678a2de1d3fb9bf40b4ab012b3cd73349d89900b4e5f6d58432fd1a024734d16fda50818adff08a6379f83c3cad54ccf6ef14788cc620042b50439de" + "0x03f8fb870c72dd9d5e883e818001827fc1830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c2d5a0323bb16361f656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a087dfa85154edde1626e3a09196eab4b60f71887ec7b50ccbbe7ec76c0be6bdff83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a03a16a62e2d20179fb36e647559caed5f827dd7fdc1777b3e687239c0bc331b40a0750b6366c5221fc164daf878b0d8c10fbf8c1cabaffa2733423a85854ce197c5" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0xd616971210c381584bf4846ab5837b53e062cbbb89d112c758b4bd00ce577f09", [] ] @@ -2476,21 +2531,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x8d76a11f766a753283cdebf3c0a4ada62f0a85333eadf13f5c94b5528b9a0bb8", + "parentHash": "0x0e065a7c1d66be9a7505eaa9846edba1efbc5a2643b0cde0dc11ab9b0e82d2fb", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x9c475f68fef47ca76bf7002bb05160c1ed7573f0dfcec725e4a664eabccfc1ce", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xb9782d7da020d4884445bb656b079722cb8bb4583a4a2eca1c5974c258554751", + "receiptsRoot": "0x91e123290f40baef855faafc638e4a0fb8e66f75f017102a0d0868297be67cfb", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000000000200000000000000000000000000002000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x4f", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x316", "extraData": "0x", - "baseFeePerGas": "0x69dd", - "blockHash": "0x70ed6c8dfbfd1a79453b1360fe0c9024d1c9a51b7e9ae491dc9f672c1495ee52", + "baseFeePerGas": "0x6fca", + "blockHash": "0x7a5a9823699ec0f335d977fc08ca50d0786b044c177fadab0f36957d5ee8a6ef", "transactions": [ - "0x02f86b870c72dd9d5e883e4a018269de825208943ae75c08b4c907eb63a8960c45b86e1e9ab6123c0180c080a0cec492241954a9cc71f9b7dcacfb8f26b2c3e393964b9ee7fcc1ccaaf04a4969a048fbd9b31f2ac94df51147ab5444d3d866e8c34df7e4a832555861dea6d5c5cd" + "0xf8768181826fcb830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c17df9eb398ae59f4656d69748718e5bb3abd10a0a003340fecb9ea01552af2504c98160019eaa42c855ed117749d37b724ce620601a04d9acc9f0e3232018c44e7b5321d22662a3dbb54c4697ddf4f1145ca67d10965" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -2507,21 +2562,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x70ed6c8dfbfd1a79453b1360fe0c9024d1c9a51b7e9ae491dc9f672c1495ee52", + "parentHash": "0x7a5a9823699ec0f335d977fc08ca50d0786b044c177fadab0f36957d5ee8a6ef", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xb3b9f2c0207a37013276417dcb6f68feadd4c581a6584b6d7c8ec57027966809", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0x182f327169e1cb576c48d7a9572fbb0cf7f0d225e54d20a954c5e578d69fd53d", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x50", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x320", "extraData": "0x", - "baseFeePerGas": "0x5ca6", - "blockHash": "0x829bf1d587f5294d8ee978c07aa33af6df08dc44876e81c4f2d1d9403e6c0478", + "baseFeePerGas": "0x61d2", + "blockHash": "0x0c2f74470c7439c7e783de2e128f65e66d794d01c2bbabe225599eb81927f680", "transactions": [ - "0x01f86a870c72dd9d5e883e4b825ca78252089416c57edf7fa9d9525378b0b81bf8a3ced0620c1c0180c080a0173d73de31dce0e30697770fa0adace02cdddce31c863f96b48ebd5644f39dc5a04dcb29a3c6f29163bd885c9954afd430aa16fbdd6c33ded3705b13730c6e9c21" + "0x02f86c870c72dd9d5e883e8182018261d38252089416c57edf7fa9d9525378b0b81bf8a3ced0620c1c0180c080a0ebc44bd7b8c39ecdc6cc765d875b385d9fb0cf045e32c1b4ab3d22241e7fb4b7a03d190e6a241ee75b8c85438d705c262ca58659710dfe38b97c761d7d13d446a8" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -2538,21 +2593,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x829bf1d587f5294d8ee978c07aa33af6df08dc44876e81c4f2d1d9403e6c0478", + "parentHash": "0x0c2f74470c7439c7e783de2e128f65e66d794d01c2bbabe225599eb81927f680", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xe2f7eedb26752b56cc96454638b9be27c25f16a24dfc7076701a4bb9cc93d79b", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0xd4e910f9fd994562b4360fb5559afc2bc1110371b11abf616c4bb965845d0bcb", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x51", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x32a", "extraData": "0x", - "baseFeePerGas": "0x5115", - "blockHash": "0xb57dc2887b5798442036ac860b372cb07b5858c460977c426b53bf780aee15ba", + "baseFeePerGas": "0x5599", + "blockHash": "0x7489436084d1c2fbd1ef76bd84ee9ff43e054e6ca744fb1ad299f8fb6a5171c6", "transactions": [ - "0xf8684c825116825208943ae75c08b4c907eb63a8960c45b86e1e9ab6123c01808718e5bb3abd10a0a0eec30a6c02d46baadfef66f942f70140f3b78f905d3af1147f1501bec20ef862a014e5e443a94dff326c43d830e21df8c9025ea9d8198f59be1e991d06aa1ada9a" + "0x01f86b870c72dd9d5e883e818382559a825208943ae75c08b4c907eb63a8960c45b86e1e9ab6123c0180c001a02a7d2a3e2d41438dfe5475471cec7e56bd1c81266f47344535c6318b3a99fd68a00991dca22170ff4884e9f4303163e10c25960dd9348eadc244e05f8e5229c56b" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -2569,28 +2624,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xb57dc2887b5798442036ac860b372cb07b5858c460977c426b53bf780aee15ba", + "parentHash": "0x7489436084d1c2fbd1ef76bd84ee9ff43e054e6ca744fb1ad299f8fb6a5171c6", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x6d4e3e96904866f611e25ff2555e0edf6c4a78ef22ea78dc0d256ca8205485ca", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xc87c01bb88b69df7936fde7d5eebbe8c8f7f5f2a9e0b2dd73e362cca15a9ebd3", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x52", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x334", "extraData": "0x", - "baseFeePerGas": "0x46f6", - "blockHash": "0x6793c6d579b24b7bfac5cfd619b7335aace2365f75cf5b0d1e1b5c367288b74b", - "transactions": [], - "withdrawals": [ - { - "index": "0x6", - "validatorIndex": "0x5", - "address": "0x717f8aa2b982bee0e29f573d31df288663e1ce16", - "amount": "0x64" - } + "baseFeePerGas": "0x4ae7", + "blockHash": "0xb535bb07496aa8764a751097afb4fda7881b9de41e6f3c4c329360a808caff31", + "transactions": [ + "0xf8698184824ae882520894717f8aa2b982bee0e29f573d31df288663e1ce1601808718e5bb3abd109fa086a4fc9f76099c05095cb8e166ac7c4787800a2068ce52721c78e642270fd987a04ee2856ebdcb0ac92d683f3d6e7ca3a149f8fbc77bad4ac767c29a256e42ac6b" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -2605,23 +2655,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x6793c6d579b24b7bfac5cfd619b7335aace2365f75cf5b0d1e1b5c367288b74b", + "parentHash": "0xb535bb07496aa8764a751097afb4fda7881b9de41e6f3c4c329360a808caff31", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xc79924280afff05363b95785cda5387e9e82ddae8266c1e34e9c8f5a4e2bfe5e", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x7aa894a3689264d49f1055a6842e045acdf00ae2b5e12b211cd40d70c47a4e05", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x53", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x33e", "extraData": "0x", - "baseFeePerGas": "0x3e18", - "blockHash": "0xab38058baae4ce65fe734310ef852d1adb2eb0e5bce297e2dfb1f2aabb8155fe", - "transactions": [ - "0xf8834d823e198301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a0ae704e1b38122ca02493c828a10c293237b1088376a32c71c0402cc4ccee0ea9a039f2324696ba0be7a7730d4f922ae10586c25d92b6525e0f1ec332de4fbf3b36" + "baseFeePerGas": "0x418b", + "blockHash": "0x1237af5eec8dabdae0efd403a87ef5588b2dbd724946f41c7e161df50328e468", + "transactions": [], + "withdrawals": [ + { + "index": "0x6", + "validatorIndex": "0x5", + "address": "0xe7d13f7aa2a838d24c59b40186a0aca1e21cffcc", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -2636,21 +2691,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xab38058baae4ce65fe734310ef852d1adb2eb0e5bce297e2dfb1f2aabb8155fe", + "parentHash": "0x1237af5eec8dabdae0efd403a87ef5588b2dbd724946f41c7e161df50328e468", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xce9a3b040049312688b963ff49410e9dfff53349b9abd1a3f93d4e67b2f2408d", - "receiptsRoot": "0x192362bc21457de45deb735ce9f1cd26e7ee37928db9cdc4d40436d2134140f7", - "logsBloom": "0x00000000008002000000004000000000000000800000800000400800000000040040000000000000000800000000000000000000000040000008002000000000000000000000000000000000000000000000000000000020000000000000000004000000000000000000000008400000000000000000000000010001000000000000000000000000000000800000000000020000000200000000000000020000000000000000000000000000000000000000000020000000000000000000000000000000040000800000000000000200000020008000002000000000002000000000000000000000000000000000000000200008000000000000000000000000", + "stateRoot": "0xe38021b2014f295451d83e2b8f68f31f2faa6a43e27900f628cd836f8f6e422a", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x54", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x348", "extraData": "0x", - "baseFeePerGas": "0x3661", - "blockHash": "0xc129c2d37fdd0defa0d0cdd7b27a95e5f17eb1beb11a8713bc4b398dff6f69a2", + "baseFeePerGas": "0x395a", + "blockHash": "0x7bb88dc7b037cc2aa86a83318f9e2db824f840e0c04526f61fd2921f327eab14", "transactions": [ - "0xf87a4e82366283011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0fe30fa3e184a6907501b49905902316be2f564d4196be62497233bc1610dedd2a016312759531406df473240de2509a119c62c1833808a0a2b246c6d62af9a249c" + "0xf884818582395b8301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a04a7a1795e316e2ad3abceb425aa55df15927308048e2a9dea4b486d66658f123a06ca3114fcbc80ca53c48072c795e1ce3d391808e75463a63f1e191838d9609b8" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -2667,21 +2722,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xc129c2d37fdd0defa0d0cdd7b27a95e5f17eb1beb11a8713bc4b398dff6f69a2", + "parentHash": "0x7bb88dc7b037cc2aa86a83318f9e2db824f840e0c04526f61fd2921f327eab14", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xb8adf9d72b4060e71a58b8c69a089dc07fccd0f8a6bae96f83f05273a65283ae", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xb714b8ca31d57e62146b43e6442498002810cbfb49bbc5b6a08a5b160bfc3970", + "receiptsRoot": "0x0138ed3983b7647acc046786b4b6d86708d0f183403b9a77ea595644e149a5ff", + "logsBloom": "0x14000000000000000000000000000000000000000000000000000000000000004000000000000000000020000000000000200000000000000000000000000000000000000000000000002000020000000000000000000000400000000000000000000000000000000000000000000000000000000001002000001000000000000000800000100000000000004000000000002000000002000000000000000000100000000000000000000002000000000000000800008000000000000000020000120000040000000000000000000000000000008400000000000000000800004000004000000000000080280000000000000000000000000000000000000010", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x55", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x352", "extraData": "0x", - "baseFeePerGas": "0x2f9b", - "blockHash": "0x5e61412b6b77af36026fc83378b2aff64e52121621912d35061bf7db4e315657", + "baseFeePerGas": "0x3231", + "blockHash": "0xe8235717342e9768bf65d0600947b88bebc1d922822b1cc577075dd7ef002462", "transactions": [ - "0xf8654f822f9c8302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0682574928d1ae7cc05750ebf529d96ab94d0b2721e0c40e628dc2d79acd3f5b9a06f0f8ed0215494365e2529f8b460b27d24de18f27bf35d38096f7c1d76b80227" + "0xf87b818682323283011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa014e3aefe0eff66f1d9ad9528bd9da9b03983e8cff43a31b2e778efcbda8930f5a0077f29ae0c9b1d26866c2eafc0527772517fbdbe18df4478308d662358250f77" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -2698,21 +2753,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x5e61412b6b77af36026fc83378b2aff64e52121621912d35061bf7db4e315657", + "parentHash": "0xe8235717342e9768bf65d0600947b88bebc1d922822b1cc577075dd7ef002462", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xa08f4f70e62edae94e6d64a375443d46c1d54439b3e4b8c4f9b40882951c21ba", - "receiptsRoot": "0x2975f936074e89e49d796dc3b56be7f803c99492e85fab5560e6930cb537658f", - "logsBloom": "0x00000000000000000000000040200000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x1841c9f0c510c24ab42d67869a29f5adfd06b6d6c5b5ddee06c4cfcbe5c5d0f9", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x56", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x35c", "extraData": "0x", - "baseFeePerGas": "0x29b2", - "blockHash": "0x06a3b3e77a4ecfa284cd0cbc5f563dafcebefcaa7e4610b0433f1da2353d65a5", + "baseFeePerGas": "0x2bec", + "blockHash": "0xf321197dfc592eb856c14ffe0ed175cbb25105b435473559447d58154769bcc0", "transactions": [ - "0x02f8d4870c72dd9d5e883e50018229b3830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cf283ffec056e262f656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0a0634d80c0a702c2b06dfe60ace0d8f788b99406f1d2ac44ad3a26faa3fc146480a021f7ebe5983412cc2643a7a86426e7a1c3acf25fa8ae945515d1c18bcbc04d41a05acfac3d64f7915ab60faddf75f5bd069d60c790c1d53a987d0599c5a7c499d3" + "0xf8668187822bed8302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0aa147aa4c44e555f9e8873cd8b3afb39b241323cfa077523a747495b3ca29e63a05c3d48da118d887c83a4261eb09f7d83c948b9e3f24ddce4708deaa62c5d98e3" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -2729,21 +2784,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x06a3b3e77a4ecfa284cd0cbc5f563dafcebefcaa7e4610b0433f1da2353d65a5", + "parentHash": "0xf321197dfc592eb856c14ffe0ed175cbb25105b435473559447d58154769bcc0", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xf28efb86161fd054eaeeb8012454fd6fcabbf1d1a00393e0115d80eab410d30d", - "receiptsRoot": "0x7d22b3980b29df178aadcc46b209a79b386bf81e22e12abda09b5f28bd65ceee", + "stateRoot": "0x41dcdaa9f663b966c234de0aedd89a4a1692c0bf0275081261e82139194bf60a", + "receiptsRoot": "0x336786bdc663d43ebabeb886381cb2e7ca199608ccc0465cc994123bbbbdff0d", "logsBloom": "0x00000000000000000000000000000100000000000000000000000000800008000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x57", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x366", "extraData": "0x", - "baseFeePerGas": "0x2480", - "blockHash": "0x096a5b9ce9899b40e70d721ead24b8da99a16bd9d115412a1e5d4ba2478ba276", + "baseFeePerGas": "0x2670", + "blockHash": "0x2b09c7fb6f54983fcee6cbcd8eef58ac886978c5ccf72edd52795a95ce956c1f", "transactions": [ - "0x01f8d3870c72dd9d5e883e51822481830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c8e5b86c510108d5c656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a000f7ca033c24d91f8fc39cbf0edc8a43192507f93d7316f311b05eeb85921eed01a09e097f570d76bf39617cd5dd44154c9e0fcf81f3e7f5b83e92764c27d565bf9aa053c086d715941f75c5c0878067815b8cc96734268162abe11b47f3a06e3adc05" + "0x02f8d5870c72dd9d5e883e818801822671830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c8e5b86c510108d5c656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a000f7ca033c24d91f8fc39cbf0edc8a43192507f93d7316f311b05eeb85921eed80a078ec0616bbfe023736d088366d8893c2170c658abc2ec2b8f06ff6fa5fc256cfa07b6597cc5c652edc098335e1f1f16424e77e21e9446cb2d9e7d2be7b54f2aef6" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -2760,29 +2815,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x096a5b9ce9899b40e70d721ead24b8da99a16bd9d115412a1e5d4ba2478ba276", + "parentHash": "0x2b09c7fb6f54983fcee6cbcd8eef58ac886978c5ccf72edd52795a95ce956c1f", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x35b9213f895371cbb4392162da8a7500f5a47cb89e3fa982a508bad473c26271", - "receiptsRoot": "0x945052b14f54239fd074dc767b331c1081ed1b6e0f16b7b26adc4ff42a85542e", + "stateRoot": "0x0a92d83649ae6489939a153a7e3cb81bc0325aacb18b9575afb916d8d270beff", + "receiptsRoot": "0x5f1c9b9dc8dca44c88617679768cc2d1ad31b0ebe7c614d1fafee6d9999c9152", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000010000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x58", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x370", "extraData": "0x", - "baseFeePerGas": "0x1ff4", - "blockHash": "0xa6b1b6fbde7fcc8c1c4b6b035835d839914b9d3ad21dedf946f5d91754d9a6c4", + "baseFeePerGas": "0x21a3", + "blockHash": "0xc39e1323f7b6949a21a1bb6f98d9ebd22d3e776e07676c4cce9fc4174deda0dd", "transactions": [ - "0x03f8fa870c72dd9d5e883e5201821ff5830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038cdc2a7ef24edc33ac656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a07c24a68c92e3b68daa153ae82eff9be1ebbab973384e0f4b256f158f93c5d52583020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a017e7abc42245a61de024c71dc03c28e284e819dd4c65cbc300aa4ae44f419d08a07ae5e68345b3710abb71dcb5b4661750bb74db92fbde39954ca440883ba1dc0e" + "0x01f8d4870c72dd9d5e883e81898221a4830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cdc2a7ef24edc33ac656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a07c24a68c92e3b68daa153ae82eff9be1ebbab973384e0f4b256f158f93c5d52580a0831b8f078baa90df02337d5459d784fe392f1ca33a4ca7fb35ae5dc178470c42a035748828f384b1b35b60f8b8590dbfb5911dc0dc3e33bd6fcb487d9d7147af51" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0xad13055a49d2b6a4ffc8b781998ff79086adad2fd6470a0563a43b740128c5f2", [] ] @@ -2793,27 +2846,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xa6b1b6fbde7fcc8c1c4b6b035835d839914b9d3ad21dedf946f5d91754d9a6c4", + "parentHash": "0xc39e1323f7b6949a21a1bb6f98d9ebd22d3e776e07676c4cce9fc4174deda0dd", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x1bf7f56cd090ccc023f7e630f15afc802cc285fc6c1b6b58d5c7758dd7cc3da4", - "receiptsRoot": "0x627165c3f8e25a917da5a29d58d0e712ff1762956a221a0560878d7c29865dc9", + "stateRoot": "0x47f0051f4be1a77be57f28680637127ef2d03fec527c038b066f492063465932", + "receiptsRoot": "0x5406859786ff896ef8beba8d78f442b4d12652ab0fafe3938e9169ada2ecbd27", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000008000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x59", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x37a", "extraData": "0x", - "baseFeePerGas": "0x1bf9", - "blockHash": "0x96d9997e171f41cd83e6829c097bd37f9c352553c0a1fb5a739d2766cd7b0772", + "baseFeePerGas": "0x1d6f", + "blockHash": "0x8b79d25d91549e398a5fa94bf6f56b1837b11d042b65811411fe53100ee18c2e", "transactions": [ - "0xf87553821bfa830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cd458dc07963e0c5c656d69748718e5bb3abd109fa03486504c2c493dc7c0df1daaa1f22b3253fb838145724f7a687fe81661704de9a00dab1a6db8a4c04cb34fb6a8861624fe5dbe210257e3ef723042bf7fb42d8d12" + "0x03f8fb870c72dd9d5e883e818a01821d70830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038cd458dc07963e0c5c656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a06e2466f20ef20cb42d216dbf4a0d934199213e9b8d75bedc9c2d3e038a58747483020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a0433af35ed09ed9256baa86d2e0c2c30ea9bd210e6962686f2d3a8b4da1908f15a03f98e493e855d7c3e4c4600bda0508ead72e28a07a24226727208a15c3091c94" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0x9e9909e4ed44f5539427ee3bc70ee8b630ccdaea4d0f1ed5337a067e8337119f", [] ] @@ -2824,21 +2879,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x96d9997e171f41cd83e6829c097bd37f9c352553c0a1fb5a739d2766cd7b0772", + "parentHash": "0x8b79d25d91549e398a5fa94bf6f56b1837b11d042b65811411fe53100ee18c2e", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xa5e05aa6d25b0f8d77edc2c17afd1a35927ebd5f0219255768f83a6bca6c2774", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xc66042410497fe5b80bc68d333229ae61dca3b0e109c6daaa3bfff8d8faa7908", + "receiptsRoot": "0x9670d0efa9339a29aa56b91a617ed8f9b2e2f133afefa3835004ad7437127b96", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000400000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x5a", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x384", "extraData": "0x", - "baseFeePerGas": "0x187d", - "blockHash": "0x70db0ab4ec61502d2a53b8faa0ffe5a45d7db6f562af25e6564d8d2669989d0a", + "baseFeePerGas": "0x19c2", + "blockHash": "0x5d33f0b59d254d470019eac98e38a2a90468e5873067bb5e3cf8e0ccb84ad048", "transactions": [ - "0x02f86b870c72dd9d5e883e540182187e825208944dde844b71bcdf95512fb4dc94e84fb67b512ed80180c080a071641b0db3191ff7b3372c8d63f3e392f1ec323473550c359736914d5ae435cba0021fe07df29b5ef1cc0ca885184047b173929624a0a7faf0cf3437ab9a5e7320" + "0xf876818b8219c3830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cb465b4f1541b4582656d69748718e5bb3abd10a0a0375b35765fb3e1e7e1c2677f15c2c1a583822be8a48c4ed15199ea13a7d5e76da079c3a952c79c81ecfbf37ab16b18ef010572ee9f7ed965ce29d04baf09ade62b" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -2855,21 +2910,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x70db0ab4ec61502d2a53b8faa0ffe5a45d7db6f562af25e6564d8d2669989d0a", + "parentHash": "0x5d33f0b59d254d470019eac98e38a2a90468e5873067bb5e3cf8e0ccb84ad048", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x6b0ad802144e4563427f6909d3dc126246c0b8649117b1a8fffb6a548c2bb6eb", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0xe47d0c7ab29cdf81e0e85896ea7ae19d982b9d703113997a48b4df8dd86a76bb", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x5b", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x38e", "extraData": "0x", - "baseFeePerGas": "0x156f", - "blockHash": "0xa6aa03ee648578c9413c668ab9f6d2dc480a48bcf7b126dec17b85be35b28604", + "baseFeePerGas": "0x168b", + "blockHash": "0xae8ff3f7d1bde73dbd36f2293e845fa059a425576be62bffdc4ba6a2e1be5afa", "transactions": [ - "0x01f86a870c72dd9d5e883e5582157082520894d803681e487e6ac18053afc5a6cd813c86ec3e4d0180c080a09d31e711219a13ab4928d1b1741ce55a3e4b6ba173deb752a85e2b12661a7c0ba075180a720633d4411a4b1b7bdea101501ec6b4d1c50c411aefd8ee921afded20" + "0x02f86c870c72dd9d5e883e818c0182168c82520894d803681e487e6ac18053afc5a6cd813c86ec3e4d0180c080a085716712d538ede8849aaca9d7b79c7c91c4cae166df0f6d381e7667f0c2f732a0471c89e0b46db402eebfa4ac5495101b36b275cc3fa88a58dceacadf514047c5" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -2886,21 +2941,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xa6aa03ee648578c9413c668ab9f6d2dc480a48bcf7b126dec17b85be35b28604", + "parentHash": "0xae8ff3f7d1bde73dbd36f2293e845fa059a425576be62bffdc4ba6a2e1be5afa", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xd53027d41e55fa10d6a7a51bcfd3a6f904c3360fe366d2ff3050afd2a5838e1d", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x4e68ea06813576e3022b778d12baa3a0c6e08f1d56794a95210a87219e860bb6", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x5c", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x398", "extraData": "0x", - "baseFeePerGas": "0x12c2", - "blockHash": "0xbec4f585aade8992655a98ecf32e5ad71245f864bb2c3987b0216bfcf2acb0c0", + "baseFeePerGas": "0x13ba", + "blockHash": "0x8d1fd7f00d80dd8d4c799dd381b71eb349e695d4190f97e206550ddde559adf4", "transactions": [ - "0xf868568212c38252089416c57edf7fa9d9525378b0b81bf8a3ced0620c1c01808718e5bb3abd10a0a0b6faa7b0b72e8d5d945d970a2a587026d18039ca5c2a36cc85a81f4a6463c054a077e7921998baebfe50319cab574a14c1d851440c69a2f0772327629f19811e72" + "0x01f86b870c72dd9d5e883e818d8213bb8252089416c57edf7fa9d9525378b0b81bf8a3ced0620c1c0180c001a0e4568a847a164ca753f4b1ffeb8198bdb0d3118950051738177269c588c50548a073417a8864d9dcf956ed9226081dbcd9bbf7530eff2f7ba55b64793c70ea13dc" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -2917,28 +2972,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xbec4f585aade8992655a98ecf32e5ad71245f864bb2c3987b0216bfcf2acb0c0", + "parentHash": "0x8d1fd7f00d80dd8d4c799dd381b71eb349e695d4190f97e206550ddde559adf4", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x9b12ffe7615b8381a3d361af306212c07f0a006162f1b0bdc7a3305964072a70", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x87962ddb7af98bac117f959ef2a9db93891f07c7eb14ce6462fbdb98ccdd2598", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x5d", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x3a2", "extraData": "0x", - "baseFeePerGas": "0x106b", - "blockHash": "0xa75924e8dc804bc7d9588a41ae6545effa02c568f519abb7f109d76ae17442c0", - "transactions": [], - "withdrawals": [ - { - "index": "0x7", - "validatorIndex": "0x5", - "address": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "amount": "0x64" - } + "baseFeePerGas": "0x1143", + "blockHash": "0x16b224e441aa3817c03949a4e7930d87e0ff9240d0f2955fdebf23a7f410148a", + "transactions": [ + "0xf869818e821144825208947435ed30a8b4aeb0877cef0c6e8cffe834eb865f01808718e5bb3abd10a0a092972bf43d78d5819a1bdf53e7efeb459eb8a792ff3e234ada208d7c5e4053d3a067fe419c0dd23c87fcc35b22c456148d64fda89bcb7cc42d09611d6891d988ca" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -2953,23 +3003,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xa75924e8dc804bc7d9588a41ae6545effa02c568f519abb7f109d76ae17442c0", + "parentHash": "0x16b224e441aa3817c03949a4e7930d87e0ff9240d0f2955fdebf23a7f410148a", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x205f42eb8c6ea2b8f12b340c6a6267c591bd4226f937c79de0611ca85f4dbdfe", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x7e706e5f82ffa370e285ac51e5448ab881d94fb03e4de6309fe23c97190ae7fb", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x5e", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x3ac", "extraData": "0x", - "baseFeePerGas": "0xe5e", - "blockHash": "0xc80ae577ac0e00ce2a417f069f0db47ca32ba3576ea6092273c623a035980fba", - "transactions": [ - "0xf88357820e5f8301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a0796daf4b6f92e4c939847cdf656db14c7789b58313aec2713c29efae499e15a6a04fb5264cd95b8a06582bdbf1bb93b25e642a25be12f938005b348f02f186d161" + "baseFeePerGas": "0xf1b", + "blockHash": "0xcf191216637f378d2ee7f2dd47d9a330b3cdd0e20d7a27f8c8bbfb1df421a9eb", + "transactions": [], + "withdrawals": [ + { + "index": "0x7", + "validatorIndex": "0x5", + "address": "0x84e75c28348fb86acea1a93a39426d7d60f4cc46", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -2984,21 +3039,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xc80ae577ac0e00ce2a417f069f0db47ca32ba3576ea6092273c623a035980fba", + "parentHash": "0xcf191216637f378d2ee7f2dd47d9a330b3cdd0e20d7a27f8c8bbfb1df421a9eb", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x48b892bb8b406d4ac3fb597fa6c9ffca4acd27fb4f2704ecf6bd764d79da23eb", - "receiptsRoot": "0x9486adf3b9ae8b48318e66420a28ade75a4e8db57e410418b81478f7996b8f23", - "logsBloom": "0x00000000000000000010000000000000000100000000000000000104000000000000000000000100000000000000000010000000000000000080000000080000000000000000080000000000000000200000000000000000000000000000000000000002000000000800000000000000140000000000048004000001020000020000008000000000000000300000004000000000000000001000000000000000000000000000000000000000000000000000000400000000400000000000000000000100000000000000000000080000008008000000000000000000000000000800000000000000000000000000000000000000000000200000000000000000", + "stateRoot": "0xb042a00ed6a77273755ab545b03fc1144ddf3db74032f1e81d69dd8431a17bee", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x5f", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x3b6", "extraData": "0x", - "baseFeePerGas": "0xc95", - "blockHash": "0x3e10fa0f7879c62f9eb6373a80bf6a0a2d4c16fee5ba96566d62488db5477e92", + "baseFeePerGas": "0xd38", + "blockHash": "0x962e7b0b218852cf9c41bbb7fd8908baceece8e7e4c8b2b5d2ab5390f0561b02", "transactions": [ - "0xf87a58820c9683011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0e6fff4260c9471cfb777098433e0fb364640acb16343288999acf14c0b88809ea00b968782ab0888217477cafea77f3b57db4d431452cb8ea7e6978ae773cf2985" + "0xf884818f820d398301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a0f373452c20d1ec4a5f1f9255b970391bb33a96fb2428012cdc7d2402f50f9510a014d393105d47c725cb239a6dc7929f41cec85ea2791245ec7328bf909b801825" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -3015,21 +3070,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x3e10fa0f7879c62f9eb6373a80bf6a0a2d4c16fee5ba96566d62488db5477e92", + "parentHash": "0x962e7b0b218852cf9c41bbb7fd8908baceece8e7e4c8b2b5d2ab5390f0561b02", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xdcbc6fa752481c6726f4fb3c12bb4139441dc502d855073c856fe72f2e2b9700", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xc3d437dbca917bed12247fd4d677cfda795617d2a0cac9b1eb4d84dbcf3e4e40", + "receiptsRoot": "0xb405ff6fd8cc52640cb348d177599ba52ce5dc59921931c9d718f749ae77516d", + "logsBloom": "0x00000000010000000020000000000000002000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000800000400004000400000002080000000000004000000000000000000000010000000000000000000000000000802000000000800500000000000400000000000040000008000000000010000000000000400000000000000000000000800000000000000400000000000000000090000001000000000000000000000000000000000000040000000000000040000000000000000000000000000008000000000000000010000000000000000000000000000000000000000100000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x60", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x3c0", "extraData": "0x", - "baseFeePerGas": "0xb04", - "blockHash": "0x9ae8e852cab82414dd0762c67565523f30c9049a061c7c3b4a310cfcd4df9d2a", + "baseFeePerGas": "0xb92", + "blockHash": "0x13dc0c8daad8b71fc3f0e62a209b9710cc78934504a6c2e990549a2e473152ed", "transactions": [ - "0xf86559820b058302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0db909926540f1032894a4db02a37d05c8edff1f5541159e8ed3a1cb143c1928ea07ffeb1ba41fd78f66ba04956b0b9cc7f834d6b5961f3afc8a6bae5525739ef5e" + "0xf87b8190820b9383011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0c1298064eb80e75637fcdff710a12e9dc1605aca384b5b592253529c1e8b355da0073cbdd116c442617c0dc6851a8da08694352b93c7a5dc7efcab67166a3be3bf" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -3046,21 +3101,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x9ae8e852cab82414dd0762c67565523f30c9049a061c7c3b4a310cfcd4df9d2a", + "parentHash": "0x13dc0c8daad8b71fc3f0e62a209b9710cc78934504a6c2e990549a2e473152ed", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xc94ba29902b69aa858c2583ca321e2c1e63e6f4dd190a4040362c54969113191", - "receiptsRoot": "0xf596f1ec769d7d49f408b6aa2d8146e77550c7576de2779aeba070e5bc9c370c", - "logsBloom": "0x00000000000000000040000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000109000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x34225405226610fb240063eb3c644c4127c0ea7851574098de3bd90bd276da11", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x61", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x3ca", "extraData": "0x", - "baseFeePerGas": "0x9a6", - "blockHash": "0x6c4fe4ae5fb8b2a347e58868bc6a741a6df75a83593b062869cacb7ce3a715af", + "baseFeePerGas": "0xa20", + "blockHash": "0x333cea669c831ec4b078f39fb05de11664b438741df8d8cd37ea771049dc1f30", "transactions": [ - "0x02f8d4870c72dd9d5e883e5a018209a7830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c50edc262344620eb656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a050495437ee69f7b12c5d6eb55cdcd8f5ce12a2eac21a2a42a7549e9f5289b1fb80a0d1a42fdd58ea301bc622518a5df023b6c47ce337d27c4b6085207d4dbde3dfd7a03a891e16fee217f1f98c0d535690b2ebfce973836172d6aaa77a80ecb8d24049" + "0xf8658191820a218302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a09f934cddc23c26d67cf15b795a2722166f9569fc065a5268ccd163511bd858e3a0305fa6b3562156f48c780d8082402a8c6c9a217f075ade3369217238f169e3bd" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -3077,21 +3132,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x6c4fe4ae5fb8b2a347e58868bc6a741a6df75a83593b062869cacb7ce3a715af", + "parentHash": "0x333cea669c831ec4b078f39fb05de11664b438741df8d8cd37ea771049dc1f30", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x872601fe4846f89a9affffdd232712819a15245cbb7dc617ae9b16d2a3741c27", - "receiptsRoot": "0xa29fa19bf70f4fc573b33c765b9603c1f39820fb7c365f971cf8425b8a5172da", + "stateRoot": "0xea8d727fd31590d4639fc0cc8c1b2f0e6ac99087f54b79a828771d0142e91bb7", + "receiptsRoot": "0xc2b73eff237f18f6bce6ce993ae0f47ddc37bbbd547c4088022e93ed833e1597", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020009000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x62", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x3d4", "extraData": "0x", - "baseFeePerGas": "0x873", - "blockHash": "0x6722daf402b94682af585921807783bb92e1957789399ed0e0be0e0faa5a8c87", + "baseFeePerGas": "0x8dd", + "blockHash": "0xe377c7a76084c79781cecc442ff79d5a76ab95710878ef19fbaa2ae3b3806d2e", "transactions": [ - "0x01f8d3870c72dd9d5e883e5b820874830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c899b80c8dc11d5c2656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0761bf5fb1730fee0e499bb1806b9ae14394e673ab9c1dc12e95b9d3f1647cecd80a0bbb21740cb875793183087033bbe574233d7f0a3ab8b89d4cdc2a2603ccf603ba048c6ff73f3ee02a1d69feb70cf642978368e40861e768cfa7ecd229fddfe54c5" + "0x02f8d5870c72dd9d5e883e8192018208de830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c899b80c8dc11d5c2656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0761bf5fb1730fee0e499bb1806b9ae14394e673ab9c1dc12e95b9d3f1647cecd80a09b91b35faf73278875d8b28749c5dd841293b70dfbdc96e04d89cb42cda3b03ea063366cbfc247a591f88a6bddbb9cddc21eadea8110091b1d22c7c57acba40d5b" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -3108,29 +3163,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x6722daf402b94682af585921807783bb92e1957789399ed0e0be0e0faa5a8c87", + "parentHash": "0xe377c7a76084c79781cecc442ff79d5a76ab95710878ef19fbaa2ae3b3806d2e", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x2239cee6ef71575c8197ff42e2a28e8b2e561b59874f19934636da3c8e3510ad", - "receiptsRoot": "0x006004762186f9eb89941184c170358002854d9fc3990ce1ee068b72f42b6a01", + "stateRoot": "0x9017d746d09d04aca579fe8eb3c9e71c7bce382d5bae554cef86e49f875aa41b", + "receiptsRoot": "0x54b3b8ed5b54b9ec9b5971b24e235b772e34ad7a5bdd4fd296b48ba684baa071", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000004000000000000010000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x63", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x3de", "extraData": "0x", - "baseFeePerGas": "0x766", - "blockHash": "0x651c869c9f62a753fa0c545a984f596d2068aa542234b109032b93a583442ffe", + "baseFeePerGas": "0x7c2", + "blockHash": "0x583000818d360ecba85c0924bee169e64dc799c21d5e468711324c423ae1246c", "transactions": [ - "0x03f8fa870c72dd9d5e883e5c01820767830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c913746d244054c52656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a002bd9d62880450596e11c3417f2644a81f7cc233a05394bbbfb58428ed53f41383020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a03adcb0eae8331808d9e643d067c542b39ec1496eecc687b299eff56aeea0601fa05fec7e1a65b7d0d89524440cbcc569eef8433d1c3976497daddccffdbc32a21e" + "0x01f8d4870c72dd9d5e883e81938207c3830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c913746d244054c52656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a002bd9d62880450596e11c3417f2644a81f7cc233a05394bbbfb58428ed53f41301a0f1cd3b7cc4ea54fad0018a7fb75e8d0f107bf31f5c71442703c9b0c683959285a031e17437c91b89caf38aaecf3844414afa1a3f07821d339049b45706a16ab08d" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0x9d580c0ac3a7f00fdc3b135b758ae7c80ab135e907793fcf9621a3a3023ca205", [] ] @@ -3141,27 +3194,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x651c869c9f62a753fa0c545a984f596d2068aa542234b109032b93a583442ffe", + "parentHash": "0x583000818d360ecba85c0924bee169e64dc799c21d5e468711324c423ae1246c", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x29db53323cdcc44b58a5f4b48dcd02b2a7c0014d7044387f711b6b2b48b00ac9", - "receiptsRoot": "0x2733fb23cff5be65a62478606a44d8c502792b0c48a42dc70cfa0b80ef758dbc", + "stateRoot": "0x338950c7ec1e65de1294e3016ca6d64e3f0ff6e1fa53151aa5724c9a52ae4f92", + "receiptsRoot": "0x7f9dc480827d9967528a81ce3e2ab6861814297b6d40c45cead1101effd467c4", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000002000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000012000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x64", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x3e8", "extraData": "0x", - "baseFeePerGas": "0x67a", - "blockHash": "0xe93d89f5d6ab364e7c6597d99b6041f6c1d503a639f1265e8ffb1261f87fa2f3", + "baseFeePerGas": "0x6ca", + "blockHash": "0x89628d10b5c915f51b8def1dd2ea8a9b2e89b30da4435cbe0f5003651bb05e8a", "transactions": [ - "0xf8755d82067b830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c019f76127757f5d2656d69748718e5bb3abd109fa0218afd167510eac77bba6b2fdaa59d3580fd0a70719e57e0e40cda7712a36f8ca041221634bbbf80f4bbd0087fff1a6753631a32e4c2c5684e5191eb8b3d613c2c" + "0x03f8fb870c72dd9d5e883e8194018206cb830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c019f76127757f5d2656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0d75c9abb1414054ca164bba2f8c09917fb90c24789feaa311ee34a0b3f4a82f083020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a0289f457754837be82c7d03b5981b35a569e55d4b30eb3aea79316d672c7b0536a06482af279d5b870ce13e9635e3fcb9186d92418967247ca510cbad40dcd9153b" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0xa7fd4dbac4bb62307ac7ad285ffa6a11ec679d950de2bd41839b8a846e239886", [] ] @@ -3172,21 +3227,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xe93d89f5d6ab364e7c6597d99b6041f6c1d503a639f1265e8ffb1261f87fa2f3", + "parentHash": "0x89628d10b5c915f51b8def1dd2ea8a9b2e89b30da4435cbe0f5003651bb05e8a", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x6d1ac14be0fb955ef6d906d373d29690e9609bdbd24b0c4f9d8bbdc2570c4e1d", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xad6b17cc65d1fdd8f28fcb3ee39f548408af6b1af05380c1961828bc9dba46f0", + "receiptsRoot": "0x8981ee59e3934e570ba1fb69f44a1d8986c1446a4f48f2e0756a24fa1f740f3d", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000002000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x65", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x3f2", "extraData": "0x", - "baseFeePerGas": "0x5ac", - "blockHash": "0x0507a6937203ad4297bca7595e8e0d7715d59bb7296968aebd84c135b707c638", + "baseFeePerGas": "0x5f1", + "blockHash": "0x0de163e9e16a0d88854f6e66f30e50d44d2e569f9f581e9a368adaf1f4a5ca6a", "transactions": [ - "0x02f86b870c72dd9d5e883e5e018205ad825208944a0f1452281bcec5bd90c3dce6162a5995bfe9df0180c080a031b61d05b2b5a5d3618cb2d89d8569ef1f539a16677e2aa8a7396aa684614c77a05e846fbccb38e529992125ba3fb8c49f6abec967dce763660761198fc7813dfa" + "0xf87581958205f2830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c18c281524d7c4ff0656d69748718e5bb3abd109fa0f047c5b762e2efed8e71c169f23fd0c53ab5fcf34d3d472ddc0310b05ff226209f3cd176171de0ef5bcecbd510427783369ffd540c7bde1c61f43a140ff99685" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -3203,21 +3258,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x0507a6937203ad4297bca7595e8e0d7715d59bb7296968aebd84c135b707c638", + "parentHash": "0x0de163e9e16a0d88854f6e66f30e50d44d2e569f9f581e9a368adaf1f4a5ca6a", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x7065f9b94923ab593d8472a940eca2f1c4bf224de039f252e5f9e020b5f78b70", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0x23a81b5965be134234ba9fab880fea28a11443538394a1a251bbbfa47e925c38", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x66", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x3fc", "extraData": "0x", - "baseFeePerGas": "0x4f7", - "blockHash": "0xf08662ab38a7f4db3179eb425b28a2dd5d918c80b87740d1b88699ebe905a11b", + "baseFeePerGas": "0x533", + "blockHash": "0x0220ce36b8436b0b234a97413f91bd64f6d41cf4b10fd0bd10e53d8b8f7d79ea", "transactions": [ - "0x01f86a870c72dd9d5e883e5f8204f8825208945f552da00dfb4d3749d9e62dcee3c918855a86a00180c080a0d257f99d3499a621786e5a89bf766d9231746493e9b7b3956d9f0b370ac1be56a03a2a2c61d628a2c65befe9279bc9debf8df4697734f7403086fad1f5fa5299ea" + "0x02f86c870c72dd9d5e883e819601820534825208945f552da00dfb4d3749d9e62dcee3c918855a86a00180c001a013a8f22d2dd004d6646400fc702d2e61e66b617312e69c8e550ebfb0d84c5d3fa03358b4f85b43c55fb6e153cd64120ff6ee2ec0f4a43dbf8cead59653c4c3271f" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -3234,21 +3289,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xf08662ab38a7f4db3179eb425b28a2dd5d918c80b87740d1b88699ebe905a11b", + "parentHash": "0x0220ce36b8436b0b234a97413f91bd64f6d41cf4b10fd0bd10e53d8b8f7d79ea", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xcfb338887a35752ca4cfc6134cf589ab41cbadecae007a26d188901e182c7e1e", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0xba4c766f7fa091672b98e7db67aa7c2573d85102eecb603daa4447ca95903960", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x67", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x406", "extraData": "0x", - "baseFeePerGas": "0x459", - "blockHash": "0x122f9c89a20f0af63d4d5af9ac5e5ca3907ae256efa3d561f22b9288ad122f17", + "baseFeePerGas": "0x48d", + "blockHash": "0x73d6ae295486e56af688dc96243f9841a3a40c4100ea132f2c0d3c7a92d7a724", "transactions": [ - "0xf8686082045a825208944a0f1452281bcec5bd90c3dce6162a5995bfe9df01808718e5bb3abd109fa0a39701c019e6e29a937a0efe26e4a5e34b00a2c12c2812953967794bbb2c14dea0649354ae5e34e4b7b850e1330099b68dfce37805f773db51cae112bf38afeeea" + "0x01f86b870c72dd9d5e883e819782048e825208944a0f1452281bcec5bd90c3dce6162a5995bfe9df0180c001a0a5d1e43dad93fe87054a2f49c363c340be697f12e993168de197bd80f052100da012aacc66ff5d1aa9b6baa6744c91d795609889866c9a8d427cd761a9199df346" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -3265,28 +3320,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x122f9c89a20f0af63d4d5af9ac5e5ca3907ae256efa3d561f22b9288ad122f17", + "parentHash": "0x73d6ae295486e56af688dc96243f9841a3a40c4100ea132f2c0d3c7a92d7a724", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xf127a71e9abb554f65e7c0aaef0ab838d638b850e63d8270cec55904dc7106dc", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x52eb22576f77ca03957b5f63ade7342c6bf8aacb784592a3909868a7a21f4374", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x68", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x410", "extraData": "0x", - "baseFeePerGas": "0x3cf", - "blockHash": "0x8cd5f4a012d4f51460556c04b7fc6f4a4d94d1203cb092d0297372a43fdf283d", - "transactions": [], - "withdrawals": [ - { - "index": "0x8", - "validatorIndex": "0x5", - "address": "0x717f8aa2b982bee0e29f573d31df288663e1ce16", - "amount": "0x64" - } + "baseFeePerGas": "0x3fc", + "blockHash": "0xc57eea72ca6da6fa23e48e0a02d56ccaa84b59f4f663d04d492ba107f6989475", + "transactions": [ + "0xf86981988203fd82520894717f8aa2b982bee0e29f573d31df288663e1ce1601808718e5bb3abd10a0a097a3b18f6239b6aec0a821a378cae98a6623db266debcbd9eed9c1d5bc40f6baa0490640fa301fc984f82ce5c262befaff288336d97bc20d3ceae26eb01689cc04" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -3301,23 +3351,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x8cd5f4a012d4f51460556c04b7fc6f4a4d94d1203cb092d0297372a43fdf283d", + "parentHash": "0xc57eea72ca6da6fa23e48e0a02d56ccaa84b59f4f663d04d492ba107f6989475", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xa318a4d8ad3b1a05833ee60497927b12a615d115db0812903b6b3b0117aec6d0", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x97dabc3756587832d8b03b3acffca7fb7466a2ead707cc537dba31ab484880f7", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x69", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x41a", "extraData": "0x", - "baseFeePerGas": "0x356", - "blockHash": "0xeba87b6b36d970ede1071402e363515bfc524572febb086525b84c792093175f", - "transactions": [ - "0xf883618203578301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa0a10fa7164cced8d2a3bd2f586c3bccaa86bec0337decd61d6196e028e4030c73a04f09a1f0824fc63829428889a95b7030d8dd809b9e56aea441a09a1a95802bef" + "baseFeePerGas": "0x37d", + "blockHash": "0x38aa8a3150af9b19993b8d4cb3e670bb365853c341f1a24d57ba8e1328afb1ad", + "transactions": [], + "withdrawals": [ + { + "index": "0x8", + "validatorIndex": "0x5", + "address": "0x1f4924b14f34e24159387c0a4cdbaa32f3ddb0cf", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -3332,21 +3387,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xeba87b6b36d970ede1071402e363515bfc524572febb086525b84c792093175f", + "parentHash": "0x38aa8a3150af9b19993b8d4cb3e670bb365853c341f1a24d57ba8e1328afb1ad", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x905e296705351182cef7897c05522e78c9372cdcbd6a731907faee6f63d20b06", - "receiptsRoot": "0x9eeaf7ef73497823223378406a8d225dfe5b60042fce8770c0c2a7c2c5714936", - "logsBloom": "0x100000000000000000000000000000000000000000000000000004200000000000000000000000000000000020080000000400000000000000000000001000000000000800002000000000000000000200000000000000040000000000000004000000000000000000000001800000000000000000080a0000000000000000000800100000000080000000800000000040000000000004000000000000000000000000000000040000000000000000000000000000000000000000000000000000000020000000000000400000000020000000020000000000000800080020001000000000000000000000000000000040000000000000000000000000000000", + "stateRoot": "0xa97f3e742d168891905997ef57a1f86ecaea7d77ef1f7b2377a4460a5e2cd5ab", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x6a", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x424", "extraData": "0x", - "baseFeePerGas": "0x2ec", - "blockHash": "0x1db257ebc3fdfbb6fe6fa8234fbc771becfee96128648eac4164773196acea99", + "baseFeePerGas": "0x30e", + "blockHash": "0x853b45ca33c271b321625535fbd242f5edd582be0056641890b66a2b1fbe0677", "transactions": [ - "0xf87a628202ed83011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0d24465c4877d28eae24a14ca982e561a5163c6bbe358b1c2f73ff936d50eaeb3a02eaa4e9b5434329a62f7bf3d254bb96eb7dd0b155f2cdb75f6ea37a3518c09f7" + "0xf884819982030f8301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa041897d6afedb5cb20754c2b134459edf01d22d468c5b28dcd54802a1f69fde17a04a32652d45cd541b994dcddc0ce35cf9b98cf14d19870d967ae5e6c3b5c5d4db" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -3363,21 +3418,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x1db257ebc3fdfbb6fe6fa8234fbc771becfee96128648eac4164773196acea99", + "parentHash": "0x853b45ca33c271b321625535fbd242f5edd582be0056641890b66a2b1fbe0677", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xb5b20b658b75ed622731629e45c6e98dcaaa3c55f1478d74482795b701eb20d0", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x80c9e740cae1ac0f1eb2206c5c2b80d6a306e943f495ce8dab2a0b926ce9214b", + "receiptsRoot": "0xa6212db9ce25b219d93a8a29f40769b126d4bafd6ffccbc0880c77dbc5fa7f36", + "logsBloom": "0x00800100000000000000000000000000000000000000000000000000000000008000000000000000002000000000000000040000000000800400000000000000000000000000000000000810000000000005000000000000208000000000000000000000000000000000000200000000100280000000000100000000008000000010000008000000000000000000000000000000000000000000000000020000008000001000000000002000000000000000000000000000000000000000000000200000000000000004000000000040000000000000000000000000000000000000000000000000400000000000000000004084000000000000000000000080", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x6b", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x42e", "extraData": "0x", - "baseFeePerGas": "0x28f", - "blockHash": "0x2a5fd10344d681d2e72384382583b1a9fd82fd0125a1fc24b4296bf3e37cf096", + "baseFeePerGas": "0x2ad", + "blockHash": "0x7bd34591adec12322873c046b6d45fc55defd4891f58e6f26970c14e964bce5e", "transactions": [ - "0xf865638202908302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0492cbed3575864725f568fc42711408ac80668d1afe3dcbce06a138f7b62bb35a0141638d9e8d058ac06a1e817e6c1f66d4a226de5d3047e043fb234b6b89d7e16" + "0xf87b819a8202ae83011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0a17e60599dac5123759f100bab44aab2cad0a13e91134df6b840f68c47a7f020a04fe10fa48eaed38510105f9e49289da16ce716fc19af3f45434aaa50d7a16cfe" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -3394,21 +3449,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x2a5fd10344d681d2e72384382583b1a9fd82fd0125a1fc24b4296bf3e37cf096", + "parentHash": "0x7bd34591adec12322873c046b6d45fc55defd4891f58e6f26970c14e964bce5e", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xbd4789f74fae185b96efda6c2ef419fe9ab9d33f89de1c3389d1c6e64672d663", - "receiptsRoot": "0x95393692a67eeda3b9cba04610c3dbf9c1a2fcef878680e3365e0a5e13995226", - "logsBloom": "0x00000000000000000000000000000000000000000000000000008000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x3e580ee5e9d009a82d2c87540a4263af7596886ce20ac7261a2e27c083fecd7a", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x6c", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x438", "extraData": "0x", - "baseFeePerGas": "0x23e", - "blockHash": "0x647266d2cef5a6b13af790b1b0af42fae3962e80f0724115407e6ecf0b2a6556", + "baseFeePerGas": "0x258", + "blockHash": "0x8f288d915f33362322143bec0749279cdfb9f0b72e7a6c379af08c7b4f88b24c", "transactions": [ - "0x02f8d4870c72dd9d5e883e640182023f830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c9a87cc3076dc0da4656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a059b1019e8b01471b1dd478e65c30667d2d1780ed0c8bf5fc784b1413789b2f8201a0c50123161c011aa5c434f47412e85e3d23f83f8eb7f5e653b5e1014cd13528eaa0148a25184ec141ed7f9215254f4f4806f78da682c3d3f66aa3e3c1094f4db467" + "0xf866819b8202598302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0b32880b6ede949484b92e883b687bd0ce727c757bd623dae2415f028b62e4e7aa02ce71b46c90e0065768640c5aa3acb7516fe5b4db286a8338b0515d406197bca" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -3425,21 +3480,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x647266d2cef5a6b13af790b1b0af42fae3962e80f0724115407e6ecf0b2a6556", + "parentHash": "0x8f288d915f33362322143bec0749279cdfb9f0b72e7a6c379af08c7b4f88b24c", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x0366e1c148753cbcf3400abb05da7ae31165163d45dad1c2f33f08f6b4ce4821", - "receiptsRoot": "0xd0d0683682a7dfeecf539831e169a2293fa3304248cecf6d40a759e36658877c", + "stateRoot": "0x1ce25437b8a589f13b7085f231b8f7f5c4a93f885c25eb8d944886c431eb59be", + "receiptsRoot": "0x43c5f978670ef0dae590498c6d0518e967b7c7ed52111d5b13185a938af5d41a", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000009000000000001000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x6d", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca90", "timestamp": "0x442", "extraData": "0x", - "baseFeePerGas": "0x1f7", - "blockHash": "0x52979d072bdf7bfb3fd707c0f83a4a3de1d1c8fb5380c240f858ed964aaa8106", + "baseFeePerGas": "0x20e", + "blockHash": "0x6886974a4794aa2d984957964c2480cce1346776b180888a3777857b4405e26c", "transactions": [ - "0x01f8d3870c72dd9d5e883e658201f8830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c9ede968e005a23ff656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0468eae0ffdb87a4dc081a86c494969801637f690e1e1da15fb4a9d2c78272da801a0149abcc3167c411f429a2c9caa64e6ac3e56ae1085a23fcf6494e2ed5d384ef5a00e307ed91455775838666610589af7d05d007f7d0213d0dc50da7800f8501c95" + "0x02f8d5870c72dd9d5e883e819c0182020f830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c9ede968e005a23ff656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0468eae0ffdb87a4dc081a86c494969801637f690e1e1da15fb4a9d2c78272da880a0e6c33e69ea565fe18cbd379c02857aa56dfe3a972204697ac14d6619e48b2305a002b2af300ad5e3dc36b0e265c4d65cf6c13d5556cb4a1a700a8cdd719d251ee9" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -3456,29 +3511,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x52979d072bdf7bfb3fd707c0f83a4a3de1d1c8fb5380c240f858ed964aaa8106", + "parentHash": "0x6886974a4794aa2d984957964c2480cce1346776b180888a3777857b4405e26c", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x34fed49a40f6a9d0ca498e700a05451505ba89367e63f7a46f1706e58117ac10", - "receiptsRoot": "0xf648e46bd37c97cd795ddfab278e6559906de048035d1506cd5d09af3b35e60e", + "stateRoot": "0xca7162623f72164aeaf374fe3c32c58cd21d8066618c32ca2a4c8c90a2025775", + "receiptsRoot": "0xdcacdeb437408789ca3bf5b1b081a9b26cc7bf6c355db7aaf17443ec89cd05ef", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000400000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x6e", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x44c", "extraData": "0x", - "baseFeePerGas": "0x1b9", - "blockHash": "0x7a86b91b59bbb2f833af91649b2cd1ba2b4e5f78e5775d78c03ab8b71045b3e3", + "baseFeePerGas": "0x1cd", + "blockHash": "0x20e5954a1da37baa1f7446598fd7d4311241c09d4283fdec67782114693bdf99", "transactions": [ - "0x03f8fa870c72dd9d5e883e66018201ba830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038cfd87400839d77a68656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a00dcf6219856f226889a2440b388d8e15f5df0eb64a7b443f3a7a5dca7b87b0f283020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a0931bd1e023b91d40d304e3f93356dc9a0458e42baff3b7902c8e37905ff2e12da0578219fac1e70b8e8df918fb511dd7d9c8ab126c302cd77d7777764febc9e3aa" + "0x01f8d4870c72dd9d5e883e819d8201ce830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cfd87400839d77a68656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a00dcf6219856f226889a2440b388d8e15f5df0eb64a7b443f3a7a5dca7b87b0f201a0cff21674476cc07b9f38cc5aab097071353760a95f9aa2e8049f80caf28f4ddca031559d3752bb3432fff6b568726d9731d15ec40fb1a3b1c4714f60468cdde645" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0x39c96a6461782ac2efbcb5aaac2e133079b86fb29cb5ea69b0101bdad684ef0d", [] ] @@ -3489,27 +3542,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x7a86b91b59bbb2f833af91649b2cd1ba2b4e5f78e5775d78c03ab8b71045b3e3", + "parentHash": "0x20e5954a1da37baa1f7446598fd7d4311241c09d4283fdec67782114693bdf99", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xabb3c52d564e6e1e1c5d9bf01b6f4d60d32aed3d80a781c1467683529ad75882", - "receiptsRoot": "0x5034e9ebd4c3eb2a30e153892377f3cbc49ab2ad49da8eb85600997255c146bf", + "stateRoot": "0xf138a6a42f8a0b01106d265649d6e1e77bb582bcb504ac5b100ed1e7987b6e0e", + "receiptsRoot": "0x207683b9380f85f9daf6ac31b5cc7ece0a2e4078cef1134779d83b7ce7bd5ce3", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000080000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x6f", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x456", "extraData": "0x", - "baseFeePerGas": "0x183", - "blockHash": "0x4643bd6c3e1a9ac7a7ad650d12048b9e733e219b843f2b3d830f5da795852454", + "baseFeePerGas": "0x194", + "blockHash": "0x48ccbd91a8643d6e270829515db0595bc97d123453e4a0bc7a1baea82ca1e736", "transactions": [ - "0xf87567820184830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028ccf12b9aa38445e4b656d69748718e5bb3abd109fa07920da58c7a8bb3d1a93ae181aaba1994d54bfa9936c6847f452085ca4aab987a05f66b99150ed42111c97dc597bedc8b99a15de0e3fd079231d229d6f344da46e" + "0x03f8fb870c72dd9d5e883e819e01820195830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038ccf12b9aa38445e4b656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0165e0e0cc13ca53c5af4860637550364c5c90a512906490ace14efb53487374183020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a0104f471c547d944706288931b5525d9f332410ad3ebc64963d8b8d2474b01b7ca061e0d3293304121836414e3048b13fb6f884694241d6fe7058d50b22c8604893" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0x72a2724cdf77138638a109f691465e55d32759d3c044a6cb41ab091c574e3bdb", [] ] @@ -3520,21 +3575,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x4643bd6c3e1a9ac7a7ad650d12048b9e733e219b843f2b3d830f5da795852454", + "parentHash": "0x48ccbd91a8643d6e270829515db0595bc97d123453e4a0bc7a1baea82ca1e736", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xcff80202fad319bbd221a272bf547ee59fc92bf289e20f3162b61a9fefd661af", - "receiptsRoot": "0x005fb2a0d0c8a6f3490f9594e6458703eea515262f1b69a1103492b61e8d0ee2", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x7753114a456c78900ad8e9673cf870b8c95db614a0cc1428494876fce0f54cf5", + "receiptsRoot": "0xe1b2c181ff50b25faa3594385214d87e5b6ca47a01bf95a0f3c713d755270a2c", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000080000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x70", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x460", "extraData": "0x", - "baseFeePerGas": "0x153", - "blockHash": "0x7c1fb25dc97d20bb97dce8d8343149b20a96180f46f4b771285546da9d3ef7d3", + "baseFeePerGas": "0x162", + "blockHash": "0xef397b238df4b06cf009bacffc969cdeb71e9d300c860286ca42ac367a950d15", "transactions": [ - "0x02f86b870c72dd9d5e883e680182015482520894eda8645ba6948855e3b3cd596bbb07596d59c6030180c001a0ec462cecc7c71106b7cc36137de204cc166a0c8903553bb54445d254c9fc0e59a07b804ce9fa8f68064c993b5da7db54cd8bed544975610c8a5f64e7bd6ecdabaa" + "0xf876819f820163830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c6f384780a449817f656d69748718e5bb3abd10a0a0c8855b327d545d197c8ea42913d6e6f1a023c8795004d55fa73d74b2f7330996a053b7ac83526f7c656dde300e49653c1a267cd492a762fa0e052417a7ed900e84" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -3551,21 +3606,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x7c1fb25dc97d20bb97dce8d8343149b20a96180f46f4b771285546da9d3ef7d3", + "parentHash": "0xef397b238df4b06cf009bacffc969cdeb71e9d300c860286ca42ac367a950d15", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xc6eeb56e5484926bcf28f23f4c7a45270aa94a09b4d15ce8d3def1eacbe41ca4", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0xf5f63230b011d62f47d559f3a6d736919d6b75d8f1bd2b521835b01ee35da07b", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x71", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x46a", "extraData": "0x", - "baseFeePerGas": "0x129", - "blockHash": "0xadf0cc4f267c585703d9e7403b046ab5ba320204592557eef982e4c409e3d2ea", + "baseFeePerGas": "0x136", + "blockHash": "0x9a191d0332521ea449a502780c73defd9d7726f61e22c2f527a03184a51364db", "transactions": [ - "0x01f86a870c72dd9d5e883e6982012a82520894717f8aa2b982bee0e29f573d31df288663e1ce160180c080a0ce04f690427d24c279459d884ed669546ce90f5f2df71b823876a7419259a73aa00609df091f125957bd4d9be5cf19f3470fe71e4be5b4db9f96a0daf31e8f5a57" + "0x02f86c870c72dd9d5e883e81a00182013782520894717f8aa2b982bee0e29f573d31df288663e1ce160180c080a0aeb9d2f1b9bb9490246a5104359ec40f1585b4432d5cd05e9ddeb472efa75e29a0465de58a9af484eb91deaf00c76a59c0327c8a2382dd2c080857e2cceb7e4257" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -3582,21 +3637,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xadf0cc4f267c585703d9e7403b046ab5ba320204592557eef982e4c409e3d2ea", + "parentHash": "0x9a191d0332521ea449a502780c73defd9d7726f61e22c2f527a03184a51364db", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xa8849ca5ed7a18269196963d71e4ce3c8a376e81a85107104f467e1c77a9ddd6", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0xe0ac7c4f27b417077446f788d8926c18413426d90adf42b625120334373041b7", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x72", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x474", "extraData": "0x", - "baseFeePerGas": "0x104", - "blockHash": "0x2ee413006dcb6448fb5c37443102aae3575781369fa9cd34175c0f03e3ddb693", + "baseFeePerGas": "0x110", + "blockHash": "0x340fdec47cff7b492def7053fb1e31b0b185e4dbe7cd0f4b0d382a8dafed7ddd", "transactions": [ - "0xf8686a8201058252089484e75c28348fb86acea1a93a39426d7d60f4cc4601808718e5bb3abd10a0a0c3dc13e38f7bff80b68a31cc9e53f620161dd450f4c696236468eef7c7ba2faea01fb1bc7aa82335170e77594acf9aed68211234bde4bd9d174314178ef74dd94b" + "0x01f86b870c72dd9d5e883e81a18201118252089484e75c28348fb86acea1a93a39426d7d60f4cc460180c080a0b362243ec3185de1c86033c889074dcacc86181c8aba64aea5035ac644fcecdea06cf847a804833ae95a02f0e657fb7c794ae9106def6686d4fce01e532ba07d8b" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -3613,28 +3668,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x2ee413006dcb6448fb5c37443102aae3575781369fa9cd34175c0f03e3ddb693", + "parentHash": "0x340fdec47cff7b492def7053fb1e31b0b185e4dbe7cd0f4b0d382a8dafed7ddd", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x8a1ec9a0c964fbaf4b7f1767faad0ea0e1cc88801706c08e97c1b76933e8177b", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xcc19587cfcd1fdce2a73ad7b0d01b4b6b0831d39107ffc3ddcef74cbacee6e81", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x73", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x47e", "extraData": "0x", - "baseFeePerGas": "0xe4", - "blockHash": "0x55487f68bbd481313212ae5cca520be32f0a54c44e77705e13518a9c8b1a54bf", - "transactions": [], - "withdrawals": [ - { - "index": "0x9", - "validatorIndex": "0x5", - "address": "0xe7d13f7aa2a838d24c59b40186a0aca1e21cffcc", - "amount": "0x64" - } + "baseFeePerGas": "0xef", + "blockHash": "0x821c99ea8afea16f7a10bfadfedd23466f35e9bbde9ec413c2c84b7c7dcc3856", + "transactions": [ + "0xf86881a281f082520894e7d13f7aa2a838d24c59b40186a0aca1e21cffcc01808718e5bb3abd109fa067f789b6dc7e2c4128bd1873dce830a92792c36a75b8bcb1d4e227b22562a1bba04a675300d70bfc167d4a7685a9f38eb8bc3a6a87f21eaa2efd3a1e92c01e1330" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -3649,23 +3699,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x55487f68bbd481313212ae5cca520be32f0a54c44e77705e13518a9c8b1a54bf", + "parentHash": "0x821c99ea8afea16f7a10bfadfedd23466f35e9bbde9ec413c2c84b7c7dcc3856", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xa53943d22ce3fda978418903209e780b9878ead66bed439adf09e733ceffcb0e", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x4c8b5d435e363146a761bc4ac3b630593d83116a4eb0373cf6d131e74bd4eef3", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x74", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x488", "extraData": "0x", - "baseFeePerGas": "0xc8", - "blockHash": "0xd9fa2ad334f336af1b5f9fdb858c0ed6c956b7e0f9454c5e7ee8b64462725ec8", - "transactions": [ - "0xf8826b81c98301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a0844fce1ef5552ade29ffc13373e10f0c4b17c330e87863ce986fcd67a6f24e74a06ac11975e7515b69b03f90faf6f3206817931f607dd61040f8644241de4be8f0" + "baseFeePerGas": "0xd2", + "blockHash": "0x5f07aa290e33f4c5f100362b8dfa284c93b910b9895f066fc2a6242698b6ed52", + "transactions": [], + "withdrawals": [ + { + "index": "0x9", + "validatorIndex": "0x5", + "address": "0x4dde844b71bcdf95512fb4dc94e84fb67b512ed8", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -3680,21 +3735,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xd9fa2ad334f336af1b5f9fdb858c0ed6c956b7e0f9454c5e7ee8b64462725ec8", + "parentHash": "0x5f07aa290e33f4c5f100362b8dfa284c93b910b9895f066fc2a6242698b6ed52", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x7ebb65f88baf475ec0280941de0ec9b32ff0ecf1d4773ee5a2f2a736d14dfbf4", - "receiptsRoot": "0x6ac819d6516dcb344dca13b617ccde929eba52bdfff5b57fbc3449fa71daa72d", - "logsBloom": "0x00000000000000000020000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000100000000000010000000000000000000000000000000000000200000000000000000000000000000000000000000000004000000000002000040000000080200000000000000000000000000020000000040040410000000000000008000044000010000400000000000008000000000000200000000000000000000000000000000000000000000000008000000000000000000000000000000002000020000800084000000000080000000000400000000000000000080000000000000000000000000", + "stateRoot": "0xb33e182a894d3f528a4a33534816e9ef8fc0451b14abe4e6c5e151878671df7a", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x75", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x492", "extraData": "0x", - "baseFeePerGas": "0xb0", - "blockHash": "0xb7f7753236089ad38a8f5fc7d31811b521331e866eece20f7de934579ab95d1e", + "baseFeePerGas": "0xb8", + "blockHash": "0xbbb17f7c60251f96dc948ee25b7afc5ee511eac82fe10ca186cb860349dacde2", "transactions": [ - "0xf8796c81b183011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0c174c4d0bb9963d480b8254de1b9147a6357c2f19e6ac8a71bcd11a7a2ab12dda0732a1860cec66350374c2cbac1a9f0e8b6386317aaf8597aa6c4bbab4991cfd5" + "0xf88381a381b98301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a0a5138be66af28cbaf455d5ed952e47b76baf14544c883d15153678fca309b9a6a05e8e0383deb815320cbaac38554ff3c5327d32ba1afcff2743faa5ab5f3fcd59" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -3711,21 +3766,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xb7f7753236089ad38a8f5fc7d31811b521331e866eece20f7de934579ab95d1e", + "parentHash": "0xbbb17f7c60251f96dc948ee25b7afc5ee511eac82fe10ca186cb860349dacde2", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xd65821d8f18e362704ebbc137324dcab618207ce58d8c92ef32990f4dff7761d", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x407c941b1a23d6111bad7e16209fb3835fcfcf9bb70cc8c6c8798fe76aaf0d16", + "receiptsRoot": "0xac3ab9bfa285995e77225cba509246d3e4dadb885d2d4143a23a2fc3abe5d702", + "logsBloom": "0x0000000000000000000000000000000000000a00000000000000000000000000000000000000000000010000000000000000000000000000008000000000000048000000000000004000000000000000000008000000000000000000000020000000000000000002201010010000000000000400000000200000000000000000000000000000000000000000200000000000a000000001000080000000000000000000200000000000000000000400040000000000000000000000800000000000000000001000000000000802800000000000000000000080000000000000000000000000000000000000000000000000400000010800000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x76", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x49c", "extraData": "0x", - "baseFeePerGas": "0x9b", - "blockHash": "0xed36126582b6287363b3cbc31b9c39d7afd4d97ee5e83c00b2cd5449c1d6848a", + "baseFeePerGas": "0xa2", + "blockHash": "0x29e7fcb64ad5f6c93603b4ce8d738253b71bc820c4d0ad9d5438ab5eacdd88c9", "transactions": [ - "0xf8646d819c8302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0dfde1f4a31f0020dc87c2572131bf5d96b9e3a756a0c530eaf1af42c329c7576a02514150fb58cb64b06c460e7af51ded20ced9595d9de56ad88ec982cc5c4794d" + "0xf87a81a481a383011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa026855ef1a5b1ca3e15375ade2c88965bf0c7dcb5309d65c78c5010e8e6c350c7a051316a95caca985d7c43fe51b4827a08fdcfc8449bd5ccc47e7a9968b7887b6a" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -3742,21 +3797,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xed36126582b6287363b3cbc31b9c39d7afd4d97ee5e83c00b2cd5449c1d6848a", + "parentHash": "0x29e7fcb64ad5f6c93603b4ce8d738253b71bc820c4d0ad9d5438ab5eacdd88c9", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xbfe4a4ed5d8c5dd809c20601719a5c989a00b8496c2dde4f63dff40ec1ee67ee", - "receiptsRoot": "0xbb4b35695bf1d4da91a2959a4e1beeaf0e94f784016e3abab46fcb118b19c33b", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000008000004000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xe341e4d29ee872f05e45b525449bdf9536c2075a04704b307ed7864c65eae6c5", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x77", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x4a6", "extraData": "0x", - "baseFeePerGas": "0x88", - "blockHash": "0x836c48482765990a0b394761a91ee93850aff87b82fac9b1def52375ed7535b3", + "baseFeePerGas": "0x8e", + "blockHash": "0x2021bdc5b47d00e0f11ec24e61aa59485311e5d98f657841de44e0d1750e0f2f", "transactions": [ - "0x02f8d3870c72dd9d5e883e6e018189830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028ce5868624950d7b3f656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a047cd31a1b89686fa610642222d2da6119e54ee8ca761bd01a649e3759e47746c80a0122f8ed1a3241a3f8428a9e8e34cf6da7ffcc6ae4ac12b7935aad14f1831d7faa0658f5be0960c1ceb873dee434e22a2c80cc97879133d1838673fc8579525d6fa" + "0xf86481a5818f8302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0f46012f411a6d50ffe53fc5c22ba931db152b93ddb188f6edeee8f1ca062e9339f6e327706f4e22469b36dac8a19cbf4d65756d6bb4f3fc49e3f60d8c03aab71" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -3773,21 +3828,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x836c48482765990a0b394761a91ee93850aff87b82fac9b1def52375ed7535b3", + "parentHash": "0x2021bdc5b47d00e0f11ec24e61aa59485311e5d98f657841de44e0d1750e0f2f", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x0e82742b466bce6844a7e2805cca31bbe264af1734e9ea8bb532725d43b1237a", - "receiptsRoot": "0x3c2584b43ed6850bacfb2a0d19311ff17baaa0c01436e7a981abc5f0db79f8a6", + "stateRoot": "0x6caa67c7b30c9fdb1af5fedd55f87696738e7d193058c3f8e1c98820c1489e62", + "receiptsRoot": "0x92c8cf691dd844327c90c5bb04bcfb5345f2ef1394ae36a75e8baa4f65f993a9", "logsBloom": "0x00800400000000000000000000000000000000000000000000040000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x78", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x4b0", "extraData": "0x", - "baseFeePerGas": "0x78", - "blockHash": "0xf01e70ef5e688634e591415823fc7c898679659802e4db0de9ec3c3af735f664", + "baseFeePerGas": "0x7d", + "blockHash": "0xd169f3abbf7dd41949f941333a4920bc5246531e22d02fdbe8ed03361303bf13", "transactions": [ - "0x01f8d1870c72dd9d5e883e6f79830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c3549372440f3505b656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0dbc7a073eb54d33d8e6dec5b0b635a874204bda1c23234ff0cca057ff8ed77f501a056996168cd85e8e5d689565d346c2e139aeef2bf6f1c65cc759b48fdd955968da07ff97b195809ea3b42ceeadcff6d101822cdaf6d1be0cb56fe2b0ef00b5b717a" + "0x02f8d3870c72dd9d5e883e81a6017e830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c3549372440f3505b656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0dbc7a073eb54d33d8e6dec5b0b635a874204bda1c23234ff0cca057ff8ed77f580a00b2c0cf799d43e22a728841a1494e20131a1a2b52e09b9ad57dc487af379e682a01b30b5afd63250806e718773744346534319acceb55957d43ce764163a804b84" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -3804,29 +3859,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xf01e70ef5e688634e591415823fc7c898679659802e4db0de9ec3c3af735f664", + "parentHash": "0xd169f3abbf7dd41949f941333a4920bc5246531e22d02fdbe8ed03361303bf13", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xae1f69500c8994278c41c0e159106e6f4b688be296fb115bfe6af77cf4d9e6fc", - "receiptsRoot": "0xf7b10686a974aa90247a5f4acaae577e16e0fafd0eed9eb02ebf8186c979cb7a", + "stateRoot": "0x3f73d33f5e42371bf65da8ffb177ee93c69428644866531d9b56691404bdf289", + "receiptsRoot": "0xb10d58cf0d745c9dbce5b4ab33542a137979527e4f053cbb44167a466bad1a05", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x79", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x4ba", "extraData": "0x", - "baseFeePerGas": "0x6a", - "blockHash": "0xc04cb16eda5544fcfa77e18ed2092981e834e71cabc2b61bd25153c830b660ff", + "baseFeePerGas": "0x6e", + "blockHash": "0x9d39f6431f7fe252031d29d7ff4f65e9948d5fdc872709df7eee4e856c0a1a66", "transactions": [ - "0x03f8f8870c72dd9d5e883e70016b830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c377bce5421c11bab656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a00f624930606bfcd2386d583abca6ab10227d71fc1633fea53f94bd146c152b8f83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a047e6cb09a7296ded3a00c5eb72eef7de21f83e5b4f1b5ddfe76bab19eec5bce9a02a0222118f9eb3daa5d7ea174cfe5ca3850889b08f71627e157e79c0c94c2f3d" + "0x01f8d2870c72dd9d5e883e81a76f830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c377bce5421c11bab656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a00f624930606bfcd2386d583abca6ab10227d71fc1633fea53f94bd146c152b8f80a06a33ac88f439c584e45d150712b7e7692b0d7024b3dc900539ef3247853055ada0176000dc39fcf5d596d84ea91e26fe1a211a8d62805db37eceaba5ccb59e1d18" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0xcc1ea9c015bd3a6470669f85c5c13e42c1161fc79704143df347c4a621dff44f", [] ] @@ -3837,27 +3890,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xc04cb16eda5544fcfa77e18ed2092981e834e71cabc2b61bd25153c830b660ff", + "parentHash": "0x9d39f6431f7fe252031d29d7ff4f65e9948d5fdc872709df7eee4e856c0a1a66", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x1480fa2896359aa3cdc46abf7f813a7f4586ca63acc3ed60ad6c0e904bf82e47", - "receiptsRoot": "0xad3ae0362ab95a18b4cbd7d4aae22aa7043fc237ac9a9532d25781124f99d82a", + "stateRoot": "0x1d9609b90685770110b2476d46f49aea2f67737c92e6e9b5c420d2f15eb415f0", + "receiptsRoot": "0x296b867543af84c3d651cbfac504068ce97d86179ba5e6cfe14bcc44e34ed95d", "logsBloom": "0x00000000000000000000000000000000000000000000000000000100800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000200000000000000000000002000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x7a", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x4c4", "extraData": "0x", - "baseFeePerGas": "0x5d", - "blockHash": "0x0041d260ba8d4501bbc92352b34daaaec17e3f3fc3652c9b92d87a587beaed96", + "baseFeePerGas": "0x61", + "blockHash": "0x289c7906360262eebacaf52eae6931669dfb87141c14408ee41ccddb738dd7c7", "transactions": [ - "0xf873715e830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c1e6612d36269933d656d69748718e5bb3abd10a0a0b4f6ac5bba5f751656d27aa834bd607a421be4b25fb9bd6d44c0d042590a59d5a0430846ae13aceaa6491aa630da433990c9e6f773ec33ec179917b9f18cc6e323" + "0x03f8f9870c72dd9d5e883e81a80162830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c1e6612d36269933d656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a016bee816935475cd45501fc5fd01bf913f8ef54330a43d80ef73101a4c728b3483020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a07499c73f4295100f94ea0523fce120fded78b558a61dac9d7b2535e82710cad4a0111aae152b56480ba75a3d2ac49febb0bd173ab893b702ef664ff606551fe932" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0xb0a22c625dd0c6534e29bccc9ebf94a550736e2c68140b9afe3ddc7216f797de", [] ] @@ -3868,21 +3923,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x0041d260ba8d4501bbc92352b34daaaec17e3f3fc3652c9b92d87a587beaed96", + "parentHash": "0x289c7906360262eebacaf52eae6931669dfb87141c14408ee41ccddb738dd7c7", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x05ec31cba0fd8b2ab3bccce33dedfdd7182dfb153dd7538793e27e630d026b93", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x5cacd008a445e93a324142ab1bfc5794f5bcce2a2b392bf929e8ad0a3aea5f50", + "receiptsRoot": "0xcfb5f26b28261eac800c3507d09de63a767f7959e88b0f4037d366e5d2133d8f", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000010000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x7b", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x4ce", "extraData": "0x", - "baseFeePerGas": "0x52", - "blockHash": "0xd2331ab665bad7fa9a43bc09da232bb06c72bc79d817a9f1c5bb05f96b9646e6", + "baseFeePerGas": "0x55", + "blockHash": "0x8d2db945bede6e953aaaa66c1b859b0853a8a12cab8f9f88dc1439e1ff3ea600", "transactions": [ - "0x02f869870c72dd9d5e883e720153825208947435ed30a8b4aeb0877cef0c6e8cffe834eb865f0180c001a0ca6f290bc58c596ecf60c042d784bf6614046f417274749abb60a6c8dee20e60a028dc9de376bab6b0f4857ed3f07119ff61152305bc467e07e221f0950992a4c4" + "0xf87481a956830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c5a3590fbe3ffbfe0656d69748718e5bb3abd10a0a0f84a2873f18ec9922dc629b684cd45ce085ce9850201eeebdee509bfff5212e9a022cce8b8816ac12e4d36cb810d0e86123b0159c6d637a11b5d5e1740728784b6" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -3899,21 +3954,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xd2331ab665bad7fa9a43bc09da232bb06c72bc79d817a9f1c5bb05f96b9646e6", + "parentHash": "0x8d2db945bede6e953aaaa66c1b859b0853a8a12cab8f9f88dc1439e1ff3ea600", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xdb068a648f8027eddd24cf90e37cff5d4b734d68270d9736ebcf79408bab0be3", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0x7e2a98e8098df21a5e3ec8f45ae22eece90f13abef7f434d63eebe3b815199f7", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x7c", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x4d8", "extraData": "0x", - "baseFeePerGas": "0x48", - "blockHash": "0x0043e6a0ed19de50761c59208a225a7f9bac091c3eb7dad46807998cf6ee69c7", + "baseFeePerGas": "0x4b", + "blockHash": "0x66457f34ca4352d6bd07e3db8cfb4f37433c0f9e9d926d5fdbd1535974a28ee5", "transactions": [ - "0x01f868870c72dd9d5e883e7349825208940c2c51a0990aee1d73c1228de1586883415575080180c080a032a2fdfc6e8af7f2aa9e598c6030dcf3bd5bfb3b3e6dbc380ade9a4f6e24ea46a05c9e963837afa3b15e63566bfd577f10a2c35d5877c66fc85cee42ec7cca9f5c" + "0x02f86a870c72dd9d5e883e81aa014c825208940c2c51a0990aee1d73c1228de1586883415575080180c080a014420e1fc7b27d46b3c887ccdf67aed952114dd72d04bd29f06f3b4eaa6b7e81a04c54d830c147d1230a380f1183af14d39e76b2b8b1bd77be8eeb6f0b587a5341" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -3930,21 +3985,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x0043e6a0ed19de50761c59208a225a7f9bac091c3eb7dad46807998cf6ee69c7", + "parentHash": "0x66457f34ca4352d6bd07e3db8cfb4f37433c0f9e9d926d5fdbd1535974a28ee5", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xa32b1b718a1517a2dbb796c8428a8949d51c845cb5bc68ddc5829aca9cd184b5", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x1eadcb4a0fe52d542e5ea4f94887a525f9b5f717472c583cbdf61931834d7b82", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x7d", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x4e2", "extraData": "0x", - "baseFeePerGas": "0x40", - "blockHash": "0xf64f01561392db4d006de40b0c35b3b8b56204cbd89b734608d148d2ae629228", + "baseFeePerGas": "0x42", + "blockHash": "0x6afdc529eb5072bef6f94d783505d24465dbb564d90cd22e668c549929d19615", "transactions": [ - "0xf86674418252089414e46043e63d0e3cdcf2530519f4cfaf35058cb201808718e5bb3abd10a0a04492dad8443375d9959f8fc24313113adbe78f4d8675ea6028d50fc459f3c34fa06222bd09536c90124b7a82a43c817c38a34ee8bed6af3fa4b293ae4aa31a189a" + "0x01f869870c72dd9d5e883e81ab438252089414e46043e63d0e3cdcf2530519f4cfaf35058cb20180c080a006c8f54096b844bea98112ea6365153b95771820e116040c9b5534905c828154a07cf9595cdc1661f4180a064ca64334249c8917ce90e0ecb265678eb5b1e6e92e" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -3961,28 +4016,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xf64f01561392db4d006de40b0c35b3b8b56204cbd89b734608d148d2ae629228", + "parentHash": "0x6afdc529eb5072bef6f94d783505d24465dbb564d90cd22e668c549929d19615", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xc7a87b275cac7243486e8f78dcd2dc1dd561d74319222ca75f00b2c4a1dff6bf", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xa1bbd210e8703502ba17727b89ee0db73a83a227cb5ab0133cc99398352e296b", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x7e", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x4ec", "extraData": "0x", - "baseFeePerGas": "0x39", - "blockHash": "0x49e6318f4587a021ad50e32ccad223164e0cc1ba28e1be6ee01060d331ecebbf", - "transactions": [], - "withdrawals": [ - { - "index": "0xa", - "validatorIndex": "0x5", - "address": "0x4340ee1b812acb40a1eb561c019c327b243b92df", - "amount": "0x64" - } + "baseFeePerGas": "0x3a", + "blockHash": "0x6d83bef72d2b5bae5824e9489cd9f98336df2e38500e48a8ef3664bcf9358374", + "transactions": [ + "0xf86781ac3b825208944340ee1b812acb40a1eb561c019c327b243b92df01808718e5bb3abd109fa08e5a308f2b14221042af194e912f88dbd52c261536c913cb1190e36a432f6e87a0584c48ffe6c228afac193d806b7ad4d7a73be3ddf49fe1917d758262485f6554" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -3997,23 +4047,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x49e6318f4587a021ad50e32ccad223164e0cc1ba28e1be6ee01060d331ecebbf", + "parentHash": "0x6d83bef72d2b5bae5824e9489cd9f98336df2e38500e48a8ef3664bcf9358374", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x96e7a8269c8e48ac7a7b445f1b438f88c1534d0bb86c21c7dd52885ec1481b8b", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x340c95da0e49447da1de182ca9a5d02ecbc34f48d02bddfd610b07fa6b0943d2", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x7f", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x4f6", "extraData": "0x", - "baseFeePerGas": "0x32", - "blockHash": "0x51af93a015c8a1395fdf3030bfa74b3f7104037671ab930defa6eb75e222e1eb", - "transactions": [ - "0xf88175338301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa052d500007cddc18002c2672c0dbc1990811460048d361419dffade1ce101b832a04f6108a2fa5a99ffc810d8593e6c3995ada16e5a1ca772a67d9ac158256758e6" + "baseFeePerGas": "0x33", + "blockHash": "0x16712d8be0e3f51b960bc8d1a39d96d79eb37a4c4ef736357367ea38a9287711", + "transactions": [], + "withdrawals": [ + { + "index": "0xa", + "validatorIndex": "0x5", + "address": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -4028,21 +4083,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x51af93a015c8a1395fdf3030bfa74b3f7104037671ab930defa6eb75e222e1eb", + "parentHash": "0x16712d8be0e3f51b960bc8d1a39d96d79eb37a4c4ef736357367ea38a9287711", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x8310dc68223b2c72b24ce65dd25aaf65b275894ca69f2c7681680a7598571444", - "receiptsRoot": "0xefd8b8e464ca380008383fda4fac3a7a461e5f0474d252d603f316debd45de9c", - "logsBloom": "0x00000002000041000000000200000200400000000000000008000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00080000000000000000000000000000000000000000000400000000000000008000000000000000000000000800000000000000000000000000000000000000000000000000000000000080000000000008000000000000000000000000000008000002000000000000000100000000000000000200000000000100000000000000000000000000030000800000000000000000000041000000002000000000000000020000400005002000004000000000000000000000", + "stateRoot": "0x8acbf719a58ff74e046433f815412cb38a696863ccb330893593d71a5ac248e0", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x80", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x500", "extraData": "0x", - "baseFeePerGas": "0x2c", - "blockHash": "0x7ca2f8c5a75e26ee5575e7d68fb5035c6a3ad57fb35b1308c19cf0c563e86b55", + "baseFeePerGas": "0x2d", + "blockHash": "0xb97b02fd00e46ec8d5b47eac30dff86679166d19e3485e4b7f979bec91fa7e0f", "transactions": [ - "0xf878762d83011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0f681d83827bf4634bd4e1ecd3026953b8b2ebd0014c6db725491f9d6989e1e14a03b3335cf3f7999c19274f41fa482fb6363d4e18626accccadb347e5817b22481" + "0xf88281ad2e8301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a094d63da6ecadc8763c6fc569386579a1c8cc77dd39edb2973a273508e39aebb0a04337e8d0a408809a2996b19be20a7b8f155256be70f44caeddfabb1f2a063e01" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -4059,21 +4114,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x7ca2f8c5a75e26ee5575e7d68fb5035c6a3ad57fb35b1308c19cf0c563e86b55", + "parentHash": "0xb97b02fd00e46ec8d5b47eac30dff86679166d19e3485e4b7f979bec91fa7e0f", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xbcab9d02dcbf723c5d60536871e651f6ffe620546c5721cd6439f72fc9121935", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xb27928f6d85906997f70782f19936567637c9bcb8876412a24a9adca4dd4d040", + "receiptsRoot": "0x78bf002def881b942f59bd9f0bac91ba3a525640038dcdb1e0b25e9b3249b2dd", + "logsBloom": "0x00000000080000000000080000000201000000000000000000000000000010000000000800000000000000000000000000000000000000000000000000000010020000000000000000000008400000100000000000000000000000000000000000002000000000000000080001000000000000000000000000000800000000000000000020000000000000100000000000000000000000000002000100000080000000000004002000000000000000000000002000000000021000000000000000000001000008000080000000200000000000000000000000000009000000000000000000000000000000000000000000000000000000000000001000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x81", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x50a", "extraData": "0x", - "baseFeePerGas": "0x27", - "blockHash": "0x7614b81f123a279df0a712b8e9f0a9999add17fa9020ed9fabd1fd89315362cc", + "baseFeePerGas": "0x28", + "blockHash": "0xc407ae41449bc17863646ffe04e7a8107b4a2145152c875a5f910fdb54cc2701", "transactions": [ - "0xf86377288302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0c146142efd1561230a2d2ef6ecec9cf9be6271a10fd51ecf2e7ce09758037be9a069a11d8bac3df89cda3e144201a06f7fcf7e0cd170306e3d6cf0e51116efea64" + "0xf87981ae2983011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a09e2ba151002a18ce41caceb5a1e545a8fdaa62ce94b7fd48717f223aaf610eeea01edd9fb887a8a37e0b1820ed03d6efc284d387550ae400c562ec0fbd9ecc5d12" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -4090,21 +4145,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x7614b81f123a279df0a712b8e9f0a9999add17fa9020ed9fabd1fd89315362cc", + "parentHash": "0xc407ae41449bc17863646ffe04e7a8107b4a2145152c875a5f910fdb54cc2701", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x9c8f0ef089a58523152c15c140a1c89aeca3a7876045f93097574e1099f4583e", - "receiptsRoot": "0x0e199ed3c170c92dca3cd1aa9248fe6a9f6bcd95c64d18da5e54bdfc3b422717", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004800000000000000000000000000", + "stateRoot": "0x76e565499e484affc5c1708a70f87b11e744772b1464b91c260efbfa2bdccd80", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x82", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x514", "extraData": "0x", - "baseFeePerGas": "0x23", - "blockHash": "0x218dd8608e6cdb93545a3e1203979ab4ca55f0f5bccf76a533fdd191d19f708a", + "baseFeePerGas": "0x24", + "blockHash": "0xf2253cd37aa85a5a3332dd6d777d209db9644eb59806646a39dd5869cdc496cc", "transactions": [ - "0x02f8d2870c72dd9d5e883e780124830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c99ca04a4bf313cdd656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0562f817652b4478bc1e434240cd21e00774a5a1210833cbf0225273e2b98bae280a01f430a7342e607007f513ba0696d28e052c0a2ef944fa28aeaa4037034009210a0309576f12525f004074368b7f8248c46cb033b311c4d898f9c8fcfcb12c03e85" + "0xf86481af258302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a05975ba53224ec111ff1bb23873600db7cc61926c3847316c4e2a492b20fa5732a02c068c3244eb42cfd7b92137b27fb9f25f911e1df7e7be93368f606cb3542ea6" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -4121,21 +4176,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x218dd8608e6cdb93545a3e1203979ab4ca55f0f5bccf76a533fdd191d19f708a", + "parentHash": "0xf2253cd37aa85a5a3332dd6d777d209db9644eb59806646a39dd5869cdc496cc", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xd4398f2e95d2b42f66c099f5f54bf784ba5e513926c56ffc18f72e9243c9256c", - "receiptsRoot": "0xd2739a1d0afc6cfbfb2a3cc7da84309cc3b60aef32cf4654c2d836a711bdbab0", + "stateRoot": "0xbb7ee79189b09144739cb6d6b9a15fc93fbbe226bd9c0e804a167441be168c03", + "receiptsRoot": "0xf24c9ed06c403ec3641a338b6bf76d2b8b69c09637089ec672663b52bab7a270", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000001000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x83", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x51e", "extraData": "0x", - "baseFeePerGas": "0x1f", - "blockHash": "0xa5e002a44d498e7a40b8a36eeb8ce8101353c3d379a5955d5809fcaf559a2bfb", + "baseFeePerGas": "0x20", + "blockHash": "0x4185ee3fea8a5aef0c504563c6c4e08f4ebacc343720d6c179ab5cc24c15e1dc", "transactions": [ - "0x01f8d1870c72dd9d5e883e7920830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cb3ce3e52ced1e406656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a07a9cae3647128ba14914f547c5f27444cd7325bbc37e5038abc31eea4500303480a0d3dd236e2e105b7bee61b1b48f944948afdcd12dfecb955bb752af7b8c046adda055eb47d4d846ad6954754a8bd9e8c224a2052202008ebdbbbb4fa7f339273c8d" + "0x02f8d3870c72dd9d5e883e81b00121830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cb3ce3e52ced1e406656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a07a9cae3647128ba14914f547c5f27444cd7325bbc37e5038abc31eea4500303480a028b8f0363d8fb373dcb8fa21b62103f630fed526ecf5a90b579c5a00d331428da04628f11ee1c58986a7609c7c1fb6eae0d7fb84ae83af6cb7e3509dc87172c1d5" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -4152,29 +4207,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xa5e002a44d498e7a40b8a36eeb8ce8101353c3d379a5955d5809fcaf559a2bfb", + "parentHash": "0x4185ee3fea8a5aef0c504563c6c4e08f4ebacc343720d6c179ab5cc24c15e1dc", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xc2deaea2a4f5283a91fd7da8b0a078c1dee45e03e52373016e7880b32185601f", - "receiptsRoot": "0x24fd8bb66bc1411f5e1df9829f471db8c66dd4e59df98c2c7f016fdf1b95162c", + "stateRoot": "0x4446c578b3a536638c4b16440c3589c747d8a4d95c998bf9407de3cb775ef1b4", + "receiptsRoot": "0xe329fe07d7e78174b7a34c5069074ce4f0306ff5541b45bbfc122b4c9c2dcfed", "logsBloom": "0x00000000000000000000000000000000000000000080000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000002000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x84", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x528", "extraData": "0x", - "baseFeePerGas": "0x1c", - "blockHash": "0x1f7613cc089d031344e77e764174fee74d4eb6f501f467664b12220179d10fac", + "baseFeePerGas": "0x1d", + "blockHash": "0xa8c286786d85b5134461a58e930e24544971798fdb65aa5daf662cb224a9fe40", "transactions": [ - "0x03f8f8870c72dd9d5e883e7a011d830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c9686e77044883203656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a02daaea9286d7edb7568e0803a61bfdb1e1506156d27e93bdf1942564850646c683020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a02d932238962a79cf74fc0d1d98eb7eb35a6a95bb961538c9e439d457810940efa0607bd4ac5c4ab3080847eabc8647734c4f211dcbe0c02516bfac55bbb8bd4da6" + "0x01f8d2870c72dd9d5e883e81b11e830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c9686e77044883203656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a02daaea9286d7edb7568e0803a61bfdb1e1506156d27e93bdf1942564850646c680a0200604dce713ec4a8a6b0f3825cb26b9ea9b1a0da084404a2bda2d73069952aaa070324b2af9d515556462318e4eadfe3ade90d12af7b669a351679c633bc63ce5" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0x5f5204c264b5967682836ed773aee0ea209840fe628fd1c8d61702c416b427ca", [] ] @@ -4185,27 +4238,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x1f7613cc089d031344e77e764174fee74d4eb6f501f467664b12220179d10fac", + "parentHash": "0xa8c286786d85b5134461a58e930e24544971798fdb65aa5daf662cb224a9fe40", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x6cc6238c45c78f3aa66a619a09daf0d65769b3ef8698df424412d84e789d694c", - "receiptsRoot": "0xb85a4beec31e19cff4e11eedc6048b1458277fd803588a927a0b10645fbf09bb", + "stateRoot": "0xeb421e4444d173b5c42082f64ea03fd658a87dcca0265233b8e0eb20cc52f1b5", + "receiptsRoot": "0x49322e9c1e4cfb4f3c4c1a62084c1a153c335ce9a9715dd56a46fcde04073cf6", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x85", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x532", "extraData": "0x", - "baseFeePerGas": "0x19", - "blockHash": "0xab82fa0386891a0f6590a93f3b0c6852f582a38757c1a32d1d37a8195830c9ef", + "baseFeePerGas": "0x1a", + "blockHash": "0x8ca47a4e017b39fcff33d45a2d8be59d4a66b73516c322c950a5d8ed77d29fc8", "transactions": [ - "0xf8737b1a830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c9080873b94ba4d37656d69748718e5bb3abd109fa039e86bd7baaa40d2feb73cc99b71b4ecca448258c13fbca6ade8b9148c464e22a07a9c6db0c1493357ac938689eb50dff7368fc83d774fb8779b6d3774b16dd2e9" + "0x03f8f9870c72dd9d5e883e81b2011b830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c9080873b94ba4d37656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0af1f0d50933e49dd24b61a24c670809a5b875e3b746862636288dead8579dc4e83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a049b90ae04588ab88c3c610e04057a6e6f1eb102f83a41bd86c665c87c7ec6010a07c9611e201df0beacd9c8f2340f66e6f0888028b9c938a678f64f93b8970412f" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0x5ba9a0326069e000b65b759236f46e54a0e052f379a876d242740c24f6c47aed", [] ] @@ -4216,21 +4271,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xab82fa0386891a0f6590a93f3b0c6852f582a38757c1a32d1d37a8195830c9ef", + "parentHash": "0x8ca47a4e017b39fcff33d45a2d8be59d4a66b73516c322c950a5d8ed77d29fc8", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xb8f05e7edf45432becb47125a06723edfed825fe60d1c737495a2943f2931b94", - "receiptsRoot": "0x005fb2a0d0c8a6f3490f9594e6458703eea515262f1b69a1103492b61e8d0ee2", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xcf683f9a8fc2e09a2a7d6630f527f1c9c6b7924f5f995482516ff0c4d79b93d3", + "receiptsRoot": "0x78f959e0b126f88874a77c41bf993ed21543a27d93b487da4ad510bc20e5b96d", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000008004000000000000200000000000000000000100000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x86", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x53c", "extraData": "0x", - "baseFeePerGas": "0x16", - "blockHash": "0xb0d4b43954c092e02e74342616a87ee25e15dabb9ba4d94c0bd474a907dff210", + "baseFeePerGas": "0x17", + "blockHash": "0xc4974092ba20d3c24becf83c675956c9f6602d500d594df532c50a50eb5b2191", "transactions": [ - "0x02f869870c72dd9d5e883e7c011782520894eda8645ba6948855e3b3cd596bbb07596d59c6030180c001a08c9649b9b7aaf52480798b0a7cae37b11d92860c73e1b027f3fc679e6e4d7ccaa03075417132f7ae630e7e0f6b25b453fa59eec3098a931317d52c0578e02bef5a" + "0xf87481b318830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c9a0793cd2f811c2f656d69748718e5bb3abd10a0a00e15dd4043e12cdfd8ee3dec9c459492f8a3e528aa60e3ba6acbcdfd59238549a01841e554d95bb45b914d82ae2d8377aedb51c009fedeb7dc0fbee0ea2cc561f5" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -4247,21 +4302,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xb0d4b43954c092e02e74342616a87ee25e15dabb9ba4d94c0bd474a907dff210", + "parentHash": "0xc4974092ba20d3c24becf83c675956c9f6602d500d594df532c50a50eb5b2191", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x3014013b123c35cd5d494cc382ce4fcb877bd594d6f34937fb169db6bd4b595e", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0x9cee696519e3c8c9d45c6929bebf1fc35b452d1e7ae59fbe275d3f51a1e53b79", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x87", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x546", "extraData": "0x", - "baseFeePerGas": "0x14", - "blockHash": "0xf14886af3d36d40608acfeebf709b67d679146b86594eb7f3d717ec214cb423c", + "baseFeePerGas": "0x15", + "blockHash": "0xd84d3edc5cce7692db143df3abed01f05fb1aa8a6e7b468cc55e46db10c821bd", "transactions": [ - "0x01f868870c72dd9d5e883e7d1582520894d803681e487e6ac18053afc5a6cd813c86ec3e4d0180c001a09e397063008ad5f6e64e5523f5976457c60e7aa2b15caad46f81c8bf11bdd971a029ceb9831415f2670bacdba2bf1dfb10060b89df9ae3faf7cafc5186d89bf5c2" + "0x02f86a870c72dd9d5e883e81b4011682520894d803681e487e6ac18053afc5a6cd813c86ec3e4d0180c001a032e9acab0aaedc9a6d597ffaa190a36db1b49c7e56904de8e4b0de46d101aa6ca057b52014d9124de1a283ff1e1f085e494f576f067f5434ee0c3af4397e8af808" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -4278,21 +4333,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xf14886af3d36d40608acfeebf709b67d679146b86594eb7f3d717ec214cb423c", + "parentHash": "0xd84d3edc5cce7692db143df3abed01f05fb1aa8a6e7b468cc55e46db10c821bd", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xce9c1f4e0d2f824c7fd3f8d97a7d46b165f08b7f9e3cbd58bcff478ee5906e8d", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x62094902d5724b10739b9bdcfeee5288699fa25553c41af941c347b457da6e87", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x88", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x550", "extraData": "0x", - "baseFeePerGas": "0x12", - "blockHash": "0xc310edfd4b8d1456b9d2f25ad392a0f409356115a0b6baa06c5055355e690380", + "baseFeePerGas": "0x13", + "blockHash": "0xdccdc1d4567294a4ad0281a7386e643435a612358a8687b79707541a0e572e58", "transactions": [ - "0xf8667e13825208940c2c51a0990aee1d73c1228de15868834155750801808718e5bb3abd10a0a0a8e6163a5aaf23cc3407838738c30449547cab7596386147ca02e9187eb0223ca05f8d7500498eb3601b606146a5ca3e1e490aabbd8398f95f7498deddec90f868" + "0x01f869870c72dd9d5e883e81b514825208940c2c51a0990aee1d73c1228de1586883415575080180c080a07eec774e019caadea89c99edcd3c8201c5ed0bfa625773e6d815496f25ef561ba04000ab033e2b451ebd982ca35052e9ee2570503bef1690abfceb1d534fe9cdb8" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -4309,28 +4364,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xc310edfd4b8d1456b9d2f25ad392a0f409356115a0b6baa06c5055355e690380", + "parentHash": "0xdccdc1d4567294a4ad0281a7386e643435a612358a8687b79707541a0e572e58", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x34907069df9fccdce8426d160e557127cb90c64dd2a3c49eaffaec5cfce14889", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xc0b8e44839fff97c5de61362219e96a8251565ada18d7a697ba7c12283401d1b", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x89", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x55a", "extraData": "0x", - "baseFeePerGas": "0x10", - "blockHash": "0xeb26879fc8d9023ee720917ace6b9bfebe36c4b18c476581524c26ff6b1b1770", - "transactions": [], - "withdrawals": [ - { - "index": "0xb", - "validatorIndex": "0x5", - "address": "0xc7b99a164efd027a93f147376cc7da7c67c6bbe0", - "amount": "0x64" - } + "baseFeePerGas": "0x11", + "blockHash": "0x9c338a73883a108eb3ac237422cc78ba03e073881d79758dccd91587b69164fb", + "transactions": [ + "0xf86781b61282520894c7b99a164efd027a93f147376cc7da7c67c6bbe001808718e5bb3abd109fa08f549ed1b90821980450d358705366f82e85469df9e52acde2413c95a2b04b7fa051cc4bb372f1883538285a80e001ef96b0359f2a152ff054c18783d5e2ca7741" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -4345,23 +4395,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xeb26879fc8d9023ee720917ace6b9bfebe36c4b18c476581524c26ff6b1b1770", + "parentHash": "0x9c338a73883a108eb3ac237422cc78ba03e073881d79758dccd91587b69164fb", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xf24a7ac20ba67253c7f7dbcd1f1fb58f3b560da554fdf15787adcc2ea7352f04", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0xd5df990c3f0155e1ce3e9314cdacbdc4ef45c93e8ca7a3a5b8ba25aa8041f96b", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x8a", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x564", "extraData": "0x", - "baseFeePerGas": "0xe", - "blockHash": "0xbc885f1dd76d6044edf950a00f65f8b7e09037b64694a8a5bf040a8f875df73d", - "transactions": [ - "0xf8817f0f8301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa00e72485654ffa94bcd36d1670fc89157d9195087a4958e6ea2c10562eced83c1a077968946182406940484c4909601e11ed580e2696f3493c7175fbddd19312c93" + "baseFeePerGas": "0xf", + "blockHash": "0xcdd79ad9085d20d3fd31b042a53227c3760792c62e42f29a10400382b2d8dcc4", + "transactions": [], + "withdrawals": [ + { + "index": "0xb", + "validatorIndex": "0x5", + "address": "0x16c57edf7fa9d9525378b0b81bf8a3ced0620c1c", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -4376,21 +4431,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xbc885f1dd76d6044edf950a00f65f8b7e09037b64694a8a5bf040a8f875df73d", + "parentHash": "0xcdd79ad9085d20d3fd31b042a53227c3760792c62e42f29a10400382b2d8dcc4", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x374c1bfe201a2258607d0523b591bb3ab9321842477f16707d83aac398f7f16b", - "receiptsRoot": "0xbd8b87a861501658112e3db9724e09bd5b25d0893525ffda947d4779df5c8b9b", - "logsBloom": "0x00000000040000000000000000000000000000000000200000080000000000000000000000000000000000000000000000000000040000400000100000000000000000000001000000000004000000000000000008000002200000000000080000800000000000000000000000000000080800000000000000001040100080000000000000000000000000000000000000000000000000004000000101000200000000004000000000010000000800000000000000000000000100000000000010000000080020000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000000000008000000", + "stateRoot": "0x3383a866fe5d985b101657e6de0425f7ef6d214e208f7af5fd2bd61122d4eb29", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x8b", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x56e", "extraData": "0x", - "baseFeePerGas": "0xd", - "blockHash": "0x3f8e6751bb589f71b4529f33b341be4bcbb64cc89a86ac00ba2ecd28b96843f4", + "baseFeePerGas": "0xe", + "blockHash": "0x344657a467d897d67b16bf7bb922de11197ff1b4c1ea2749a82749b854f53e94", "transactions": [ - "0xf87981800e83011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa02e68a3e01e0491870679191bd5d5a8f24c9ad0695c0e466a5b2083bb17939812a02c6946e6087d40aa0f34fbf65c20f71298b0acab2931d114f9253ca0bd2aeeee" + "0xf88281b70f8301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a057308c5fd37531f5fc3ad1677290cb900caaa60b46b96155bfb98f292b70724ba07cf6c86968468dba0aef0956bf79c2706f1d6fa5a9322523e803fe3db85197b0" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -4407,21 +4462,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x3f8e6751bb589f71b4529f33b341be4bcbb64cc89a86ac00ba2ecd28b96843f4", + "parentHash": "0x344657a467d897d67b16bf7bb922de11197ff1b4c1ea2749a82749b854f53e94", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xe12f0c307f5b8dbd21ffb62035a3a29f8214b886fb4ab820d52e777272739527", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xcd90a9b18190850ad23264ef71618a3492995a5498eea23c5c5df454b1a6617a", + "receiptsRoot": "0xfe5ceeab9511d0b0c785330e83642dbf57f8d67b87e3d7d54b9b0ddc3d355c0e", + "logsBloom": "0x01000000000000800400000000000000000000000020020000000000000000000000000000011000000000000000000000400000400000008000000100000000800000010000000000000000000800002020004000000000000000000000800000200000000000000000000000000000000020000000000000000000000000000000200000000000000200000000000000000000000000000000000000000000000a00000003000000000000000200000000000000000000000000000000080000000000400000000000000040000000000000000000000000000000000000000000004000000000200000000000000000000000080000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x8c", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x578", "extraData": "0x", - "baseFeePerGas": "0xc", - "blockHash": "0x53c40989ba0f74285db823aeb706fbdd2f34e53b65edf8edda6054f6fe0154f0", + "baseFeePerGas": "0xd", + "blockHash": "0xc34874c1c02df9d9f0f62ff0c9451be8623e01125af8abcdfb0a3e5fd39753b0", "transactions": [ - "0xf86481810d8302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0790f5ed3e0a86db50c08e8f8be00a4ffba3441d16fb346dc9770eb3ed42d3382a04e5977b201718f87ecefd86cb78c73e445490319a286721ea8eca3e1d9d56326" + "0xf87981b80e83011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0c04438100b1f00f280d0e6df1df756f9e392c0c71ec4b56ac1fedf3c76a234b2a015c9453b9e2d35dce89d5443da2bf9cb24d375cba9e0afd233ae1edfc3fc061a" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -4438,21 +4493,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x53c40989ba0f74285db823aeb706fbdd2f34e53b65edf8edda6054f6fe0154f0", + "parentHash": "0xc34874c1c02df9d9f0f62ff0c9451be8623e01125af8abcdfb0a3e5fd39753b0", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xf54e2a19725ec61f6c584507212b46c69f46612692deb8831b23169f30c7d8c3", - "receiptsRoot": "0xa8125b1762025ce748089560e745a695d68cd5f1d6bce93b9c203e3ead57e848", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000008000000000000000000000000004000000000000204000000000000000000000000002000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xb2dd76e38b11d311e81f7a740bcd9cb83e168f69b7fc8a2c7f007ddf5af0b055", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x8d", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x582", "extraData": "0x", - "baseFeePerGas": "0xb", - "blockHash": "0x56aac6e61bbe149532c6f833c15bea8fd7739b35b114c63d0c81d1b6803a9324", + "baseFeePerGas": "0xc", + "blockHash": "0xf26963dd24f2fddb0fcb041ffd520a4a8571622f70168563809051d1f78f5952", "transactions": [ - "0x02f8d3870c72dd9d5e883e8182010c830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028ccbf493b3fd5e21b0656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0b9f03edd278ccfc90e45785c1fea3f972618a32899f836dd4fe0e63eaf8c7c4001a0b3b89d84c11187bb50f67a342fdae6a35e024b4a6a4ff546733645767045760ca05e1eeee847ab7f53450eccdf65f9dcc0d41c4e709dd5d9ea938fbeff783e5d68" + "0xf86481b90d8302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa09f8aa7dda49f464aa1f4f8519484cf1b673ec01872e12bd35637666bee7025fda02074a1b2b7d3290179447179f9788c0c146e42784ecacdc844da0c6edb192edb" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -4469,21 +4524,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x56aac6e61bbe149532c6f833c15bea8fd7739b35b114c63d0c81d1b6803a9324", + "parentHash": "0xf26963dd24f2fddb0fcb041ffd520a4a8571622f70168563809051d1f78f5952", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xb964b6c8e95c7efa510287147e3ff724e70b308f6057ab45a7b2145b39747d25", - "receiptsRoot": "0x9d62ba578ebcff7a0054729605a139f9f7292833c6773b0ef0125f3e7723f404", + "stateRoot": "0xa370b7c8886acece71be21d4dea69a48c838ce0d785245f36e8b1fd0dee1dcde", + "receiptsRoot": "0x98d5a8d9463c7cfd16619a1d08b39fddab9070eac03e815b0855dff50a632a83", "logsBloom": "0x04000000000000000000000000000000000000000000000000000000800002000000000000000000000001000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x8e", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x58c", "extraData": "0x", - "baseFeePerGas": "0xa", - "blockHash": "0x20a194b00f602fcb1db01bb84014dda4654f7bbf59de521992100e4c90d95eae", + "baseFeePerGas": "0xb", + "blockHash": "0x5b33c4a77a663f8420d206e8c8c677b306dd9dda3c549b73978c22385e064edb", "transactions": [ - "0x01f8d2870c72dd9d5e883e81830b830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cff183a49015bd7b5656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a02df4cc92987ab73b08a3474750456382a0add51fa25f928480762f3d993f298480a0db78a0e59dce232f5116604b4eedf3edf585172a505530cd0ced9c1574be944ea051d0573c904c5fbddea3424251c85cc629f7d4c8e4ec14a25d6bfa929c375b22" + "0x02f8d3870c72dd9d5e883e81ba010c830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cff183a49015bd7b5656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a02df4cc92987ab73b08a3474750456382a0add51fa25f928480762f3d993f298401a0c1256a32789b5fe90540903202afdfad4c7f5c187fc88a667184e3dcd6466d86a043d7e25ff9f0d4ce4e5b6b257b1b522c9a3a016f7019c4578b6153395166c4b0" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -4500,29 +4555,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x20a194b00f602fcb1db01bb84014dda4654f7bbf59de521992100e4c90d95eae", + "parentHash": "0x5b33c4a77a663f8420d206e8c8c677b306dd9dda3c549b73978c22385e064edb", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x4ec7a8beedb541399d064d98c10425602e479459c9dc4a3e3ea520bff571c303", - "receiptsRoot": "0x7a3e7656e97605f422dad63c732f0d4f9b377abf5f689e6797fb4ac3a371eb97", + "stateRoot": "0x8e1d102032a6109e16aeef5dd9cd242d5cc66eda8a69ade9abdc95c02fd86c76", + "receiptsRoot": "0x88deff45d0fe91c2f6850181d6ad7390fde228c2f6e5abb0d3830d3459672fa0", "logsBloom": "0x00000000000000000000000000000000000000000000200000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000200000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x8f", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x596", "extraData": "0x", - "baseFeePerGas": "0x9", - "blockHash": "0x6a7e2a65b2c12ddb337eef91aa0772eae0064f24028cbb5f8d4d7c0c8f1437f9", + "baseFeePerGas": "0xa", + "blockHash": "0xc6e8d87cdf8be0370ba65cf1df31014d0ff6d70d4c63dec3968fd63c7fbaa74a", "transactions": [ - "0x03f8f9870c72dd9d5e883e8184010a830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c3a4d2a2d8e89dcaa656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0faca663a6ed04f52c0e7a8981cb438545f614a2cf84f9077659d0fce0045cda783020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a026afa46d3cb08b993c92000c3d8ee74b6abc12ab63e64adfcb0555404d56b899a0420f20f106de44b6e28510d45b612268c1c0172aaceae7569db3ffd1cd1da249" + "0x01f8d2870c72dd9d5e883e81bb0b830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c3a4d2a2d8e89dcaa656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0faca663a6ed04f52c0e7a8981cb438545f614a2cf84f9077659d0fce0045cda780a0b34564ae1216ed23a180648a9398609b48f7f5a4f786cd25fa7e26adf427b84da06a1f0863160a10acc0af91e4aa129b1ff0327966e52c0b14560c482757af9336" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0xfc7f9a432e6fd69aaf025f64a326ab7221311147dd99d558633579a4d8a0667b", [] ] @@ -4533,27 +4586,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x6a7e2a65b2c12ddb337eef91aa0772eae0064f24028cbb5f8d4d7c0c8f1437f9", + "parentHash": "0xc6e8d87cdf8be0370ba65cf1df31014d0ff6d70d4c63dec3968fd63c7fbaa74a", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x4eec2647b04de80dc0d87bbea4c6b0ab96e8b2bc11ee339fe44817f348e5e296", - "receiptsRoot": "0x7d644822f58fb3e699e5d3b1d271ffae81684f751f34c5b7fa47ab9dda46fce7", + "stateRoot": "0x7299bbf0e68f51d3a4a053519ca1eaac62ce1b73e2f40c1ded6b0007a5e2369e", + "receiptsRoot": "0x79a3f6b00de36045af809a4ff54f7f35c3a124c4838006f6e62d62b3985e6fea", "logsBloom": "0x00000040000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000200000200000000000000000000000000002000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x90", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x5a0", "extraData": "0x", - "baseFeePerGas": "0x8", - "blockHash": "0x2f3f1707049c34f0ce4b2222d6cbe9f149d79a0e2c1ea6101058cefe33e9b3f6", + "baseFeePerGas": "0x9", + "blockHash": "0x94fd8a5a17afb5aa4438bd72dddf23c73c0ed5059227e6d84a327e217593cb65", "transactions": [ - "0xf874818509830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c80c3c5cf7f5cf0b5656d69748718e5bb3abd10a0a0e0ac4eff9ebab8559197243bef5cd2c60aa79adebc4497312e60029f504dcf14a02434c08e81ef95b7ecf18451d4ed1840da75b11851e68df7a9854c74be700af1" + "0x03f8f9870c72dd9d5e883e81bc010a830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c80c3c5cf7f5cf0b5656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a05b300d53be5798f53b472dadb8966674169ff3e8d08eccb3f065bd827abd7b7783020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a0f851c2d3a735c7ef307477434eb4b5ba1c30d070febbe9b4865904777447516ea045a97fc6acf7ae508165a18bcf6516660b745f80565ce9c5edf2266f40a161a0" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0x949613bd67fb0a68cf58a22e60e7b9b2ccbabb60d1d58c64c15e27a9dec2fb35", [] ] @@ -4564,21 +4619,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x2f3f1707049c34f0ce4b2222d6cbe9f149d79a0e2c1ea6101058cefe33e9b3f6", + "parentHash": "0x94fd8a5a17afb5aa4438bd72dddf23c73c0ed5059227e6d84a327e217593cb65", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xc45cb8b8a6cc4822bb401e7544b060f50bfaa1a177423c129d9c54ea0e67e3eb", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x709238142976a079d01661a354c91b5e6ab29d290b35d82ead568a07837d3630", + "receiptsRoot": "0x890a7fcaebc200470f3723bd29cac828f0db770ae9b1ef0e5bfec62424386fa1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000080000000002000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x91", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x5aa", "extraData": "0x", "baseFeePerGas": "0x8", - "blockHash": "0xb7332dcef7339e1aaf6fe2b41257738e00b916fbb030c919dafa065f36889886", + "blockHash": "0xdbdf9af38beb3fa29d94941294bca3788732dcd92eb6b4bf2dbb822000cbc0b2", "transactions": [ - "0x02f86a870c72dd9d5e883e81860109825208947435ed30a8b4aeb0877cef0c6e8cffe834eb865f0180c080a090531038e16ae92f428682d1c2c7d7f318184674978738bab0b4981d95fd10b3a01e7d766f9c50ecd0b97fbe73e9256debb5113427989e5ea170f9d8dd62952e6b" + "0xf87481bd09830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c9a8f0ecf08d4f674656d69748718e5bb3abd109fa0dccff08c49f955c959600fc7f3ab37b55d3e37b831cfd9782d555de3c0cbf7c6a045aff05f24374b0ab99facc7a467ad904e6d7beb38dafafb283a01cef49490a8" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -4595,21 +4650,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xb7332dcef7339e1aaf6fe2b41257738e00b916fbb030c919dafa065f36889886", + "parentHash": "0xdbdf9af38beb3fa29d94941294bca3788732dcd92eb6b4bf2dbb822000cbc0b2", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x943ea463107bb78f57c7c9b85983de8d4d60b6d134b20fecd0795eee98b5053a", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0x554b96d56fd9ab9918903c71042e054f4f0171965371f12f0a9644b5516ab29d", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x92", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x5b4", "extraData": "0x", "baseFeePerGas": "0x8", - "blockHash": "0x03c384271631c83751232b695f032adf6fb4244c81cbebf3e6fdd030b61e384b", + "blockHash": "0x61355293082e8a9f906e7b52d9d7770877083021e6486ae90f63b2e4bccff11a", "transactions": [ - "0x01f869870c72dd9d5e883e81870982520894d803681e487e6ac18053afc5a6cd813c86ec3e4d0180c001a0e9b2c7aa279c415491f684a96341e7f0423497e2709f335a338642e0ef35f01ba04438415c1afa592f8319c78f4b7b6c38da34495df036c9291d063b14d33b1997" + "0x02f86a870c72dd9d5e883e81be010982520894d803681e487e6ac18053afc5a6cd813c86ec3e4d0180c001a0e7a2e65939bf5e7e1f9e4838d5a5b5a881a58609204a82900f113d8f6f416782a0509b43ba07b225240f188764f5b842cbe2f2d16fea536db1c4a81ab726af2f40" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -4626,21 +4681,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x03c384271631c83751232b695f032adf6fb4244c81cbebf3e6fdd030b61e384b", + "parentHash": "0x61355293082e8a9f906e7b52d9d7770877083021e6486ae90f63b2e4bccff11a", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x327d285af76733061aa1841998502862449c00ef7f48e95ab14bd3d27d96b3d6", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x3b251710415924109488349b79ef84225cab42d2ea65e17a834daa10943222cc", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x93", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x5be", "extraData": "0x", "baseFeePerGas": "0x8", - "blockHash": "0x5d72bae0b85bb59e94d55b7f439c6c0a9a1a8a47fa242f5dc64a82b880260cfe", + "blockHash": "0x0e1c46da0dfdbdd801d7b76c10462b10a1ff579e5f26535bcd3ab1c482043abc", "transactions": [ - "0xf8678188098252089414e46043e63d0e3cdcf2530519f4cfaf35058cb201808718e5bb3abd10a0a060af856a9de223c16e8b15052f3917b808c2e18c2f3053604b378fa1b4722761a07d65c79888d1e83e012b101aed962efcdce3d1f4feb0d63547137c2f822f3122" + "0x01f869870c72dd9d5e883e81bf098252089414e46043e63d0e3cdcf2530519f4cfaf35058cb20180c001a0071828366e1b4aaa0a35f6bbed954f6571edf0d48a5ae9a5e02510e5f793e90aa06cd2f3366b7f32f225cd9043eb54bc4645e4889445825321ce0bed640a32984f" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -4657,28 +4712,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x5d72bae0b85bb59e94d55b7f439c6c0a9a1a8a47fa242f5dc64a82b880260cfe", + "parentHash": "0x0e1c46da0dfdbdd801d7b76c10462b10a1ff579e5f26535bcd3ab1c482043abc", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xbde8a50be5930aa6dac2c84e5826117c2f051180a1f6029b8148245bd25c1f8d", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x36e31ca597eae4ce5f115afba7ef29c573998b57082d5fd539392981d438f2f8", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x94", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x5c8", "extraData": "0x", "baseFeePerGas": "0x8", - "blockHash": "0xb3a80dd6748adaba8d2598da58441cc645b165d96de91b605122e82caff076d8", - "transactions": [], - "withdrawals": [ - { - "index": "0xc", - "validatorIndex": "0x5", - "address": "0xd803681e487e6ac18053afc5a6cd813c86ec3e4d", - "amount": "0x64" - } + "blockHash": "0x049cc427707b87414178123334cd9ccc891c192faddb16129b8d87dc945d4710", + "transactions": [ + "0xf86781c00982520894d803681e487e6ac18053afc5a6cd813c86ec3e4d01808718e5bb3abd10a0a00a6e0a8854d689d4bb96c8f7a1dc30e9be33e53c9bb42d9f63c9a849ffea0e9ba0531e3351e970d6eeb3fb92cb018ed6eb5c9b91cb096bd6a19016c8ab70fe1a2d" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -4693,23 +4743,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xb3a80dd6748adaba8d2598da58441cc645b165d96de91b605122e82caff076d8", + "parentHash": "0x049cc427707b87414178123334cd9ccc891c192faddb16129b8d87dc945d4710", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xdb57798d9239d49ad7beff96ac5d91cca083a8d83e6847a8f645d921b0445d7c", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0xabf995ae299a44dbc09d702a5d9d98833a13995b651ae91448d5cc32fe2a0b28", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x95", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x5d2", "extraData": "0x", - "baseFeePerGas": "0x7", - "blockHash": "0x32305ca5493b007b7c591c7ea565ad705010ad747126202b191c78ffb49ea51e", - "transactions": [ - "0xf8828189088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a01c38a62689270d465f4bda87acb5d75a053abb6bbbf49e6fc7cd16208906fba5a06de900ab669c0bda07ae794da2fc54a615003fb80e57615fd5b9b0f586915f5f" + "baseFeePerGas": "0x8", + "blockHash": "0x24e92a19adbe76129e31fa0e7968f3f65f230ea20152fa92bd8553a90040f415", + "transactions": [], + "withdrawals": [ + { + "index": "0xc", + "validatorIndex": "0x5", + "address": "0x4a0f1452281bcec5bd90c3dce6162a5995bfe9df", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -4724,21 +4779,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x32305ca5493b007b7c591c7ea565ad705010ad747126202b191c78ffb49ea51e", + "parentHash": "0x24e92a19adbe76129e31fa0e7968f3f65f230ea20152fa92bd8553a90040f415", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x89e41795c7ad30582f1551e838f9801c8ef860a3306fb2d644e46d2cd92402e7", - "receiptsRoot": "0x17f90c244a9a77995c62ce193b5d9794f865c66a53604d9a9d1b78f3742b3634", - "logsBloom": "0x00000000000000000000000000000000008000000000000008000000000000000000000000000000000000008100000000000000000000000000400000000000800000000000000000000000000000000080000000000000000040000002040400440010000000000008000000000000010000000000000040000000000000000000000000000000000000000040000000000020000000000001000000004000000000000000000000000000080000000008000000000000840000000000000040000000008000000000000000000000080000000000000000002000000000040004000000000000000000000000000000000010000000000000100000000000", + "stateRoot": "0x7704b78c42f88db083513a5d15a6e9487c3050e366fe0f0d5639b02ddb781e74", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x96", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x5dc", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x11b82f7fbb7a781b00b4eb695a56aacd1a5477a2bc4e8167d4c08b95c4186e4c", + "blockHash": "0x34e0ff9f154ad49785b9a2220d5dcdb476e3cae2c513209d0dc88bc65a3a327b", "transactions": [ - "0xf879818a0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0fb6bc8abefcdf980e3381a9e578c4cf34833af1c70660974f233fe998c298865a020bf2bbe3972007569c1ae08084b52510f8814b4f769fa66d962aadbb9537776" + "0xf88281c1088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa037df2e80cd1cd376e703299e9bfbf3486f6187240c517fb4ba1d75c5c8014333a0395ac027c7717521d27ce4c7f0915d4247233858d81e0e5fb5f751a3cb8ad24a" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -4755,21 +4810,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x11b82f7fbb7a781b00b4eb695a56aacd1a5477a2bc4e8167d4c08b95c4186e4c", + "parentHash": "0x34e0ff9f154ad49785b9a2220d5dcdb476e3cae2c513209d0dc88bc65a3a327b", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x49c3d821bbff9c9c40c6f7394732381dcbb37e24e9f3f74691f394705e3d2be6", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x524abb7336dd9295d1ec210102e6cc84a021ac036c8f6bd8f238cb0a52677545", + "receiptsRoot": "0xc388647b000f1383cbebb0ed7e92f352c545b9ebe2c6ac08f992463e6e09104a", + "logsBloom": "0x0010000000000000000000080000000002000000000000000000000000000000000000000000000008000000000000000000000000000000004000400000000000000000000000020000000000000000000000080000000000000000000100000a000000000000008000000000000000000000000000000000044000000000000010000003000000000080000400000000000000100000000000000840100000000000000000000000000000000000000000000000000000000000000000040000000000000000001000000000040020000010000000000000000000800000001000000000000000000000000000000000000000000004000000000002000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x97", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x5e6", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x7ad16d4c674b10a59ca3364904af33fa3713db2e963cf7c36da3f3172a917aaa", + "blockHash": "0xa038ce1b4343a5466e32f10fc868b23f7ced36538dd115cdfe0deac9f6f21402", "transactions": [ - "0xf864818b088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa08e7741ea80652f87e939c0f591416f0f73151b81bcc63ae349f0c9bf56908a95a06ee9f7164b8ddce20836b87a826a5c526ffdfb40990a65a087ac7d87d364fceb" + "0xf87981c20883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0491326428cbf8f3791553c76c78b3a8ee32f6ed7ebc5e1a1885e8092bdbd716ca0103120ddf388ae2ceacdf2dc1134c0fb97a2d1eecaf65ad36fc01b2540962892" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -4786,21 +4841,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x7ad16d4c674b10a59ca3364904af33fa3713db2e963cf7c36da3f3172a917aaa", + "parentHash": "0xa038ce1b4343a5466e32f10fc868b23f7ced36538dd115cdfe0deac9f6f21402", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x37df5f0770949e923cb083680259e9e615f6bc1a603a2023a2abc463a88ef54c", - "receiptsRoot": "0xac2a853b1066ff5e9270a7a956abece9e2bd883772b78533d9df88a8b4a1f7b8", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xdf239bf5b245cdefcd327048fda5f415637641b66cd3a69c0372737205007160", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x98", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x5f0", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xe756ee647aad508c521e5463abc774c9ad8d3ac6f25a52c4b6970a04f716331d", + "blockHash": "0x4f6d29ecc1150caa2e43a7837fc7fc577bcda7cceb9de4da0c2e9da8baf8733f", "transactions": [ - "0x02f8d3870c72dd9d5e883e818c0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c6053ba2fde42abfb656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a072be914df22404e1ed45a8224b52201a77605d52065746a00af5f60980fa4c9980a0522b27fdb7acd48ea02e87e558d437f945b892fc546ca6bd82a043e0153b28b8a06cae65c67e0dd039ec3d58ea6f186c847da741c79ee2173f06659592a285c797" + "0xf86481c3088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0b332a6454e92c8d3936b40c1df2aef29a838c16e7177ce000e35e361066d269da07a7fc53b1aeb7c083a041165d13147c6d1deae8a21a4bf3f6d62768380848615" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -4817,21 +4872,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xe756ee647aad508c521e5463abc774c9ad8d3ac6f25a52c4b6970a04f716331d", + "parentHash": "0x4f6d29ecc1150caa2e43a7837fc7fc577bcda7cceb9de4da0c2e9da8baf8733f", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x9017dac7007df13ce16ccdf5385ba94ee95ab77dd4f1351b3caf925f6616166f", - "receiptsRoot": "0x8e9254ee48bb358e97f45c836031761c1a46f624715a4ba1b30c2d86bc19d704", + "stateRoot": "0xa25918ff31e91a4f99c166b9b3fa393f3453ab907d9b81459bb6844a5b12f1fa", + "receiptsRoot": "0x7fd0cf4cbbe369444e96b1f4d7533afabf16b63bb4f3eb844f027f2eebf96c2e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000009000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x99", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x5fa", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x1a924af515c53c392afb3be5839f952f6495116f677ba7cc630c76d08fa12e24", + "blockHash": "0xd34e3051d7184c6c18e3d51f0a693baf889da9ae98d6a5e777a22d2cb96697dd", "transactions": [ - "0x01f8d2870c72dd9d5e883e818d08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028ca6e511cffb46c94d656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0f8b0a158a81e46d2f46d268e7726acaf7c33fc321c36f6157f07abbf7fa49e5b01a0715913aa6cf5380403ee348bd55e7c9a3dfc41f1b9a4e28a7955e310be9aaa9ea02fec01c6a963c199e0797a76be983eb17c1ec48c18fd2a17f9490337497f584b" + "0x02f8d3870c72dd9d5e883e81c40108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028ca6e511cffb46c94d656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0f8b0a158a81e46d2f46d268e7726acaf7c33fc321c36f6157f07abbf7fa49e5b80a028339c4317b1a4fb76d48fa0cd6a29abc826a45b563b494c0ca1c5ffef33d3b2a007bb11604c0047ca9043ea07c26349fa14c720cefe216465b33ea084395dda63" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -4848,29 +4903,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x1a924af515c53c392afb3be5839f952f6495116f677ba7cc630c76d08fa12e24", + "parentHash": "0xd34e3051d7184c6c18e3d51f0a693baf889da9ae98d6a5e777a22d2cb96697dd", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xe438b4371e3f6c985c10f21afbe1df068e63ae81bed7214ebc6ab201ac562903", - "receiptsRoot": "0x4c32e94ddeb7664373b789e8223b53175959a2abdbd83227de34a34669f3b84a", + "stateRoot": "0xe65290d97963972989777bdfaa1152136a9e81ccc8faa979e0dbd534ee8bb2bf", + "receiptsRoot": "0x893f11f7f5a7b678432ebbac4a86a509d7656206a8810a15f466bf9acf9cfd1c", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x9a", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x604", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x0de1dee56d87848e4730dd05feae6c512a356a38bd52304e1e399e8d48be718b", + "blockHash": "0xeb5370ab05f5d8f13e2cc9a45d11eccc1ee7537478e749105b03631c2504d6cf", "transactions": [ - "0x03f8f9870c72dd9d5e883e818e0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c9ff25288d1780279656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0e6a5227fabefc934ddc0a3142a50747ad1157ad0829ec0bbc389d5e22e3282c283020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a080987e3e15e1c0d42cfb26bb7680ac355d8dc6a1984ec21d99001393e2164d36a0787b1b461bd9e5a1924ca1cbdf05320add9bb8021bed65b80f07707b2aa6cf9f" + "0x01f8d2870c72dd9d5e883e81c508830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c9ff25288d1780279656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0e6a5227fabefc934ddc0a3142a50747ad1157ad0829ec0bbc389d5e22e3282c280a03bf33993224c8a368bea3542fd6aa7858acf26e6d6502a566915ba2b9b6d1391a07571c2c9c8374a69dff4a253d7a3d55c3adab0009085d12902f9e89045712cae" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0x9cb8a0d41ede6b951c29182422db215e22aedfa1a3549cd27b960a768f6ed522", [] ] @@ -4881,27 +4934,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x0de1dee56d87848e4730dd05feae6c512a356a38bd52304e1e399e8d48be718b", + "parentHash": "0xeb5370ab05f5d8f13e2cc9a45d11eccc1ee7537478e749105b03631c2504d6cf", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xce08dc560fbc13b5694bdc9f5e22f3708caed3ed03102074fcf4425a6c451018", - "receiptsRoot": "0x687695a315f4cdc3fcdd030f1478f03077e99bba681e7a2b1e9b2f4c616033a2", + "stateRoot": "0x412e0f4f3f6a04bf0be452ada7b442767cbc7c633343fb2d195a1c162a2cd2ff", + "receiptsRoot": "0x043045c702ca4ddfc2b93d7c6b0a72d3cac8b45d8266b9d59e9c4969fed62413", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000100000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000040000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x9b", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x60e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xde590f5a6aa2882e34cb6894bf54e16296d5abeb244c7df2c0b12ec627c41432", + "blockHash": "0xe9419065bedd423519028a6f39e599358596a72614880942181ef4d3fbff8807", "transactions": [ - "0xf874818f08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c67720111e9886ccf656d69748718e5bb3abd10a0a00c9e5d0c1e1d14bd227c8daf4d9d1a15293c6a488248dcf111ecf973274988f9a008ec61336a0c67d4cc8567abd645aaec105905d1f3638a195a1ad9d0d81eb250" + "0x03f8f9870c72dd9d5e883e81c60108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c67720111e9886ccf656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0970a64830f255bfc38886621b37a7f1a7284bad6c4a04b6a2442ad212e19a6a283020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a045f140f24c3576ee1c2e376e479443c1a6dbafc1dd95558b01b4763514c0d586a03c895c3bb8f1ff86db606969e2d453d89ef9b333c9711a6f9dc27d8909182fb4" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0x2510f8256a020f4735e2be224e3bc3e8c14e56f7588315f069630fe24ce2fa26", [] ] @@ -4912,21 +4967,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xde590f5a6aa2882e34cb6894bf54e16296d5abeb244c7df2c0b12ec627c41432", + "parentHash": "0xe9419065bedd423519028a6f39e599358596a72614880942181ef4d3fbff8807", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x346aaa3da9697932f0716771cd128bc92e7ce3616e4fe38278a93cdc844e993e", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x24b0d883fc8c4f3b70cdb9d56f4ff5952ad845d9420b2bbc361992696b12ccf5", + "receiptsRoot": "0x9df0a67ac640d2a5e9b58437e352ea8fbea4cf8ef96aae000e4f818348399468", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000001000000000000000000000000000000000000000000000000000000000000000000000004000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x9c", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x618", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xcf5949ad3562b8f632d82c9af77116a0b83b9b9806e86d0c2bce517c7be2e842", + "blockHash": "0x076da0f0e01bfd4890f2134fd5df4b54a113439e488680ec9983b81de6178a43", "transactions": [ - "0x02f86a870c72dd9d5e883e81900108825208944a0f1452281bcec5bd90c3dce6162a5995bfe9df0180c080a0732ede76830c2550b47c03a4df6dc6c1690ee0ebab6bc51c2f411a513be950bca0030ab88f2cde156cb8f2646f2f6c85ec20d8639c17fe58d708902c976e692519" + "0xf87481c708830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c070947bf5fba1a40656d69748718e5bb3abd10a0a08a515c5e572e72c0c656a798234dd714bd747da87004cd95e61faff98c3800d1a06fc7eed86942feb5c6da3d0736c9cfd8c57115374bc5afdce9dfbe6f534c4853" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -4943,21 +4998,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xcf5949ad3562b8f632d82c9af77116a0b83b9b9806e86d0c2bce517c7be2e842", + "parentHash": "0x076da0f0e01bfd4890f2134fd5df4b54a113439e488680ec9983b81de6178a43", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x38c9484710c5444a193d3fc1448b8ed06532fa7073760da3393403ca34057c9f", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0x43d829eb7c5b95629b2b2e9563c214eae8b0e7f523a43a0f993491911e70b48c", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x9d", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x622", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xb158abf8e49c9fa6cf8103699f81039a82d085721e5cff677edec8c43bee073d", + "blockHash": "0x1b765e0e7ef21700d430daf30c1fb898805cf27237768ae58dd82f68cd1cc26e", "transactions": [ - "0x01f869870c72dd9d5e883e81910882520894e7d13f7aa2a838d24c59b40186a0aca1e21cffcc0180c001a0d1bbed0389a5e060eee006d53bae7c7fd7c6890b17a4132712081a6b4cc5865ca021c33c5e1aeb65f26efcd10806ffa37f5703430185c700867bd46d0a782ed315" + "0x02f86a870c72dd9d5e883e81c8010882520894e7d13f7aa2a838d24c59b40186a0aca1e21cffcc0180c080a041c33f7a4851dd0ab1cf4b658c074d18a239d191c85bdab129679d9561e92927a0228a4a148ffac4dddd2fa3205b3a637bc23f4045cc87ddd19928e7e22c2b3f5f" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -4974,21 +5029,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xb158abf8e49c9fa6cf8103699f81039a82d085721e5cff677edec8c43bee073d", + "parentHash": "0x1b765e0e7ef21700d430daf30c1fb898805cf27237768ae58dd82f68cd1cc26e", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xe25e53409bfccf98112b91a7055943795d2113d83922d66880721a98d54cad66", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x206012e96ed4e84110d9be1ca09ea22c443baeb684467784475ce6be4bcba9f9", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x9e", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x62c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x4c5f50016d24ab6a9b40d925d7b4be07d51679d2f5b12565958dfa80229031fa", + "blockHash": "0x6dcc010b937b7e48545d5476b017e93f0baa2308ef3be862c1c6286911eb63c1", "transactions": [ - "0xf8678192088252089483c7e323d189f18725ac510004fdc2941f8c4a7801808718e5bb3abd10a0a06dac6d4bfed86b0059948afae52133c3e337647d78d1fa5936c9ae819e786645a01cb72ae9ae1feebdc94e332cb21e9180e56e8a604d94c8d100002f260a96cb2a" + "0x01f869870c72dd9d5e883e81c9088252089483c7e323d189f18725ac510004fdc2941f8c4a780180c080a08c1b326c11d9107cf8dcc4e98c2819457f420a6c3941a84ba9627e0686950fb8a03b8de73d7fff309ee86a65ce3066911038404582806e55504b384a106b9c7918" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -5005,28 +5060,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x4c5f50016d24ab6a9b40d925d7b4be07d51679d2f5b12565958dfa80229031fa", + "parentHash": "0x6dcc010b937b7e48545d5476b017e93f0baa2308ef3be862c1c6286911eb63c1", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xc65e57367ac6ff6635a710d5bc27bebe7f80d0021157eda2596ccb455f88f048", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xf3f5c238750592e8f53f407252bf506501f82dcfa7e794808a7120c689f65800", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x9f", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x636", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xdbbf71ab7420933453fd51ae3e6cdb95f05e1c25016e979fbe33deb794ea9ae2", - "transactions": [], - "withdrawals": [ - { - "index": "0xd", - "validatorIndex": "0x5", - "address": "0x717f8aa2b982bee0e29f573d31df288663e1ce16", - "amount": "0x64" - } + "blockHash": "0x616a767f1417bf61770bdd4b9947a864fadcbda76a60ac901115b74f55948b81", + "transactions": [ + "0xf86781ca0882520894717f8aa2b982bee0e29f573d31df288663e1ce1601808718e5bb3abd109fa06b9105776265e2eb63e0bf0c4addb6783220e742b41ebe10a92bece1e6837312a05510defc6505b89b296ce8d40bd1195b1edf432bb763f4da034dc7ea1650e000" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -5041,23 +5091,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xdbbf71ab7420933453fd51ae3e6cdb95f05e1c25016e979fbe33deb794ea9ae2", + "parentHash": "0x616a767f1417bf61770bdd4b9947a864fadcbda76a60ac901115b74f55948b81", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xea0aba9aaa2ae0cf32fec0e4b08a632e9b8d8887865acf1e68540e4f4a4afe84", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x55c977c17a92e1ae4d3e016af463ce8c5e60a1ad88c4ac6bf42cb2d7645a9f40", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xa0", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x640", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xe2e850cb3176df3accc03247b8e9cdb15261ac3021c4911839aad275fe2a42ef", - "transactions": [ - "0xf8828193088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a040f8d2fcd495c8f12942431ed7a6d5256b628943b9fa7a303335348cf89c8885a00313b5b242e626a8d8add5c6534c8bfd4a8e89216286c97b4bd5afa5c0029f47" + "blockHash": "0x90f962233f21820cbfb476d1e7b58191e31a745b143fe000a7fdbfb636295ff5", + "transactions": [], + "withdrawals": [ + { + "index": "0xd", + "validatorIndex": "0x5", + "address": "0x0c2c51a0990aee1d73c1228de158688341557508", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -5072,21 +5127,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xe2e850cb3176df3accc03247b8e9cdb15261ac3021c4911839aad275fe2a42ef", + "parentHash": "0x90f962233f21820cbfb476d1e7b58191e31a745b143fe000a7fdbfb636295ff5", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x134a16436f36855eedcee6544782decc1791b81080f1ed90a44b8b75eeb08605", - "receiptsRoot": "0x4cc54ac939400db6a2166180135b79d2c15a4bd2809d5bcebc29edcb76790555", - "logsBloom": "0x000000000080000000010000200000000000000080000000000000000000000000000000000040000000000400000000000000000000008000000000000002000000000000000000000000000004000800080000000000000000000000100000000200000000000000000000000000000000000008000000000000000000000000000000100000000000000000000000000000000000000400200000000000000000010000000000000001010080000400000100000000000000000000c0001020000000000000000000000000000000000000000001000000200000000000000000000100000000000000000000010000000040200000000000000000000000", + "stateRoot": "0x74a14c1e1011ae12f1fbb485a231299d813b54bc4d999f115a1f2324a01bd690", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xa1", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x64a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x5fd45fdf3f74bde3842258b46aec022feec7f5148302447a63b6e480d4444330", + "blockHash": "0x9c02e583208597dda2607d80ca5dced296b7245635677699871833053f4561b4", "transactions": [ - "0xf87981940883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa00fa1d4ec54187e3d7d841b1e6593ecaf79255268f6ff6de216214efde80089c7a06575a46743117ed35853698e47b367112b81b09d8cef718f35f4e811114cc260" + "0xf88281cb088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa03edf0d866ad40481335a06c4ed3935cb3bd382c3c3b3cb12fa24c8db6b34a4e8a0681998194756c6bad9dd89d8c29f6464bd0b8a8b6a7cf5465d429534ce853a41" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -5103,21 +5158,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x5fd45fdf3f74bde3842258b46aec022feec7f5148302447a63b6e480d4444330", + "parentHash": "0x9c02e583208597dda2607d80ca5dced296b7245635677699871833053f4561b4", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xb0c8f232687dbcac3ee4d9142855aeaa4623b0a201f5fb0dbc6206e76daec3a8", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x5357e9126528d1c6f7fe3381bcfb3ab2a116e46c744976476130b98c83d4dd05", + "receiptsRoot": "0xd1b8ea751c030fc813bb08cdcd4dc5e76acac5cdcbfb46521d83603631b88032", + "logsBloom": "0x00000000000000000000000000004000000000000000000000000000000200000000008000000000000000000000000000000010000000000000000000000000000000000008000020000000000000208008000000000000000400000000000000000000000000000000000000801000000000000000000000200000000000000000000001000000000040000000012000000100000000000000000000000000092000000010000000000000000000000040000180000000000000000018000000080000000000000000000000000000000000000000000080000000000000000000000010000001040000040000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xa2", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x654", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x639a8f45c9f9219f27cf4db4c33de2d346df8a09dcc770ac6044f60184330864", + "blockHash": "0xb298175a8ca6852255acb5a528906d85a5d33fbf66c70cb786877f4ca844a7b6", "transactions": [ - "0xf8648195088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0cd33c99152a08debe65994ef384af02421d2608bd849e3edf699f2a1e0e60b64a030dcdc834dd98a1f6f8ea6f840146af61439872287267af4e461ab8494c28dc1" + "0xf87981cc0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0c65d8f7eedad5fc65ae8507ca80feadcd774fee1dd73119d7d8ffa163cfcdb75a03ec2b4264045a0fdb87ec0a68c2713c2aa89cc88a53d6a0ba9369ba46c966b10" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -5134,21 +5189,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x639a8f45c9f9219f27cf4db4c33de2d346df8a09dcc770ac6044f60184330864", + "parentHash": "0xb298175a8ca6852255acb5a528906d85a5d33fbf66c70cb786877f4ca844a7b6", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xdd32fc8571657d3464251558c486ff861307737b49054d272262dbe5fcbdd593", - "receiptsRoot": "0x9066b594cce8a9e20431c038c86c396aa3496faedf1d9e1e5ff05387c36ed966", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000002000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x565c09bc1c43c645ac8b18e100a92327c80e55d03f65b91482e37c23f89c95e6", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xa3", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x65e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x45941317b4ff496cb5e8832d48f69c5f1d611cf609bf3d2933dba68dae211c49", + "blockHash": "0xcdb49313f08242666708fd58106cd77d39cac694d5109d6292d5205f0eab8cad", "transactions": [ - "0x02f8d3870c72dd9d5e883e81960108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c690ca2dda4d66fb3656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0ff5c526fc525d03cecce39f4ec167af09f80525e2d44e60ee4df33a357b24ed201a0c7f4fb8e478d0b3739b860f0368dbbca53502c2d71bca014ae9f8eea8262a3cba04efef6442d91a5470a0c8382d0804a6f1e1496722c12794354965577eb687605" + "0xf86481cd088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0954dc4438b20c59dc1409dfe59a25aa4cda9c7de4d0baa465739deabf3a06f7ea03f7e67426575e9d540c0ba89f52f7ced09e3d219d43a1058dea19e7bcdc11b09" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -5165,21 +5220,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x45941317b4ff496cb5e8832d48f69c5f1d611cf609bf3d2933dba68dae211c49", + "parentHash": "0xcdb49313f08242666708fd58106cd77d39cac694d5109d6292d5205f0eab8cad", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x5553e1692be29a202dee1fd0a0faccc7277830f2c548d8ed47f7b893c563dcb2", - "receiptsRoot": "0x38a18fba7aa21f6f6ceb46a7528f7d9c29d6b4df3481cb302f43b2f2b5084d8b", + "stateRoot": "0x9e7780c154ed61b4eaae15d585766b657905382c8f13309fb018009f36303e20", + "receiptsRoot": "0xecb72b4d3789c1737a69c8aad641dd7e92aab30d4349c2ac74833432580cebe2", "logsBloom": "0x04000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xa4", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x668", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x471066471af127a34b62c9f34c3fbfb26ba29d233f81d568f4d120d35d50ceaa", + "blockHash": "0x141eb84f21835812981ca866915b141c199b2a6e574624de1a35b28784d70e31", "transactions": [ - "0x01f8d2870c72dd9d5e883e819708830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c3ca23be55f2c8073656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a085ca3ddf1ae9fb0aeadecd8109961dc5d5eaff16ef7adc672149a7826c69da9780a02c872933387857b9fec1927c3c165793e90839365712494d58200e9de8b2f857a049ec239515f6ed48ce0fa7a523131fded9c6c580edc6df2a3b7f76544b617cc4" + "0x02f8d3870c72dd9d5e883e81ce0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c3ca23be55f2c8073656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a085ca3ddf1ae9fb0aeadecd8109961dc5d5eaff16ef7adc672149a7826c69da9701a00434ec4941775675dbf9e46da286c975bde49d6eb7b45a4863799a3c0edf827ea06f6548537b6a064b7cabe0a5ecb83f732473423b430202fc98382a22ed98b62d" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -5196,29 +5251,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x471066471af127a34b62c9f34c3fbfb26ba29d233f81d568f4d120d35d50ceaa", + "parentHash": "0x141eb84f21835812981ca866915b141c199b2a6e574624de1a35b28784d70e31", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xc5a4ddf07d3a195d208631b627fa15b7b25e9ab983a75f5b037195df8a509ec9", - "receiptsRoot": "0x5eff3beb82c599d5d1f903ed5c7e366d0d784353dbc0e531e781fa82ca4f8cc5", + "stateRoot": "0x4575650570f9869fbefb9cff07c26aac03b2523aaa6edbe932a0d1b83b96ecae", + "receiptsRoot": "0x9aba37ad1750da383eb0dadcff269b5cca7ae0e6aa7678f6ae229f103200d344", "logsBloom": "0x00000000000000000000000000008000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xa5", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x672", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xe89e5d3756805d8458b5057f19b7d97faa7fa2351b2a08ddd75405c00af3a8c6", + "blockHash": "0xee6b0ee8c674e6c358ad14a9dc39c9ade98b944a4c3c97992bb882f536e976d5", "transactions": [ - "0x03f8f9870c72dd9d5e883e81980108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038cc6f00ba448f8e0bc656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a06a99e5276c6ea0c0894cfaf376fbbfdc736b359e1560a77365c14fcdf6cbbf5383020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a04848c847e1db33fa57a37324f5ea2bc8c0d73c1b5e8bb55277ed9abd8c1935cba05f7b4fbf6d345db1d94535937a709d81e9965d747b2c70195c6c5c32881dc0ab" + "0x01f8d2870c72dd9d5e883e81cf08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cc6f00ba448f8e0bc656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a06a99e5276c6ea0c0894cfaf376fbbfdc736b359e1560a77365c14fcdf6cbbf5301a09cecaf27b88dd3958b7a344a56a8d5ab2a838c70ea04c9b1fc5b301c9a5d7c51a002f992c07a70217ec6833ffc04e0464dc87ed889970b554f407f2666dbf6ff01" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0x9b72096b8b672ac6ff5362c56f5d06446d1693c5d2daa94a30755aa636320e78", [] ] @@ -5229,27 +5282,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xe89e5d3756805d8458b5057f19b7d97faa7fa2351b2a08ddd75405c00af3a8c6", + "parentHash": "0xee6b0ee8c674e6c358ad14a9dc39c9ade98b944a4c3c97992bb882f536e976d5", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x82f560474af8d995c875164f8e5ccc4a4c3c775f28cfc1dc00fd4edaea33eb62", - "receiptsRoot": "0xa876268e414ed930180e4e8f99b97830f96c76546b212484b43f4a722a275053", + "stateRoot": "0xecda93701462231bcc24eb6dce6a0f175dc693b4832ba2545813a34543b22b99", + "receiptsRoot": "0x2ba6641c3305aa448eb231382ae874e1eea4d19ebfebff99d00bea6fddf8b779", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000080000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000001000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xa6", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x67c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x8052bf3205c8803a64bb4cc52c4e86516db9734d9bf0ff47349a337e9bbe10e0", + "blockHash": "0x56a342018c122b38dda95d4590e3be13521d9b293a469b089eec358c040cca09", "transactions": [ - "0xf874819908830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c2989ce0858ff5f25656d69748718e5bb3abd109fa06ed33391e8205c7a247b82ab2cb6c28ff92e6fab9130115cc6d5538918433677a05fb41e0f3d9636d598ae9e4d4627cf27d782e5b412cdf7718020426523191e05" + "0x03f8f9870c72dd9d5e883e81d00108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c2989ce0858ff5f25656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0611f5b5e5ee263412fed40f169d0727f4e6e1a2bc94caf668d2bcf22cddca8c183020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a0dcbbe04e77e572bde0be21e68a274bcb735a417b8876907de9c1f0a80e3d0284a01b9d3fa5c553b96642afb915a531249d1999c562dacdb0b5e06c32e687901229" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0xf68bff777db51db5f29afc4afe38bd1bf5cdec29caa0dc52535b529e6d99b742", [] ] @@ -5260,21 +5315,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x8052bf3205c8803a64bb4cc52c4e86516db9734d9bf0ff47349a337e9bbe10e0", + "parentHash": "0x56a342018c122b38dda95d4590e3be13521d9b293a469b089eec358c040cca09", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x85d3721cd9e6fbf5dd19125a46b3bfdd52c5400508ca9dd504118719ca09f4a4", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x330a3944149ed44fe47b3ca2b2a1618b112f5d346d38bb9d666489ae4908a595", + "receiptsRoot": "0xea12e1bcc7a5684187716a9436c960415cfd557c403bdbdda332da3158d1cfa3", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000004000000000000000000000000000000000004000000000000200000000002000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xa7", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x686", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xdcf632311be8dfd6de736c05b4ae66e2aea72f7825fb23294bb8ccfeb218f486", + "blockHash": "0xe08d69283e46660cc7d2ec2297498bea4fc2d9e6be5a966fc62d8cc0bf79eb8c", "transactions": [ - "0x02f86a870c72dd9d5e883e819a01088252089414e46043e63d0e3cdcf2530519f4cfaf35058cb20180c001a03f7964062354cfc08584c3f5788a33d09e1d64681ce283f5582f11f55ceff565a07eeefc310b165a51dc3a0fd06f07f835e9c2ade6781709504a0b2523cca73546" + "0xf87481d108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028caca9e87acc060271656d69748718e5bb3abd109fa05349613da922d5ce5ebe0ed5d3bd6969f0ff6f054bbecf4cf7a5a205bacc01b7a06a1439f870fd4766fd74b6a6af2f70d564578c72b0020f3668e16b1184564089" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -5291,21 +5346,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xdcf632311be8dfd6de736c05b4ae66e2aea72f7825fb23294bb8ccfeb218f486", + "parentHash": "0xe08d69283e46660cc7d2ec2297498bea4fc2d9e6be5a966fc62d8cc0bf79eb8c", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xbcbeeb50071dd1d8c9390988cfc6aedd2a137cded25825e554269057bf0a2339", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0x7016b5f282139f399516d247a38e39ad6228bae9e255751d76f31be99ac34005", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xa8", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x690", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xf4d88732713252e8ab1932ca55135b3819ef47a73a05002a338e5aa5617e7d9d", + "blockHash": "0x06cfd65e4ad3f00b853db8c0218f003e65ecdfa83b2cf36be05da03c9abd2b8d", "transactions": [ - "0x01f869870c72dd9d5e883e819b08825208944a0f1452281bcec5bd90c3dce6162a5995bfe9df0180c080a0f9075df943f26e91ecd0f87e2d5cba53345aaaeea86a9ae71f571f3f9446e8c5a0648499cecaa5f66e84d6fdef0ad70eb732edfbe27e7d8f0aa0ad36dcf1a1f013" + "0x02f86a870c72dd9d5e883e81d20108825208944a0f1452281bcec5bd90c3dce6162a5995bfe9df0180c001a0dae685ec946642a5c0e2759c376aed664fe7d5bddf439a8e1403e2d632ac90fba04112033fdc1ba221062dcaeb14c4a63b1cb46b7d8c04003d1872d00ce7d40cf3" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -5322,21 +5377,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xf4d88732713252e8ab1932ca55135b3819ef47a73a05002a338e5aa5617e7d9d", + "parentHash": "0x06cfd65e4ad3f00b853db8c0218f003e65ecdfa83b2cf36be05da03c9abd2b8d", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xcd074008f02ff8e77540321cd30af0917f5519990a3fa89750911df721222d97", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x7277b9a176ad81cedd383da3e909ba6044c96e228b04855b660605bf2d589131", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xa9", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x69a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x5f5f3976768eaf850e525d41f05497af4731aa637d2b323dbc69154553943c50", + "blockHash": "0x1eaa31322ebe3166d05d4aaecc37da61443ec14bb10abea11a0de6271ceaac31", "transactions": [ - "0xf867819c08825208941f5bde34b4afc686f136c7a3cb6ec376f735775901808718e5bb3abd10a0a0ca6eeaf7f7ddbb82c0374b0eee910d70ca9469397d5bb0b597666c38fca8f7b6a01b4a657dc2c418102526186ddc7c9cbcef74881083391ed51d9dad587db1d4a4" + "0x01f869870c72dd9d5e883e81d308825208941f5bde34b4afc686f136c7a3cb6ec376f73577590180c080a02853d9147f6a2d7fc288c912a1047c24e8761a94b64f11a9bffc8698cfc8cf72a0566df35b5cc2c5a6a90d55970dc391ff6414fa840cf072faaf39abb9920ed36d" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -5353,28 +5408,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x5f5f3976768eaf850e525d41f05497af4731aa637d2b323dbc69154553943c50", + "parentHash": "0x1eaa31322ebe3166d05d4aaecc37da61443ec14bb10abea11a0de6271ceaac31", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x2e6fa7f5528da8a715dd74c4b756d34e23732ecd2627b9d4663c2d2592d22fe8", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x273628b39c876725fb027c45fd15fa66ec51778ba185bf9f69a10740e95a4b97", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xaa", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x6a4", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xc1a9ccd5f651aa46a26433e521d6e7c4fcc6714f8fb9068ee4f1e0a8d043da0d", - "transactions": [], - "withdrawals": [ - { - "index": "0xe", - "validatorIndex": "0x5", - "address": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "amount": "0x64" - } + "blockHash": "0x861e741db3d23647d8a9fc61ee8361b044ab5f6472a15e33e1347d26802ae652", + "transactions": [ + "0xf86781d408825208947435ed30a8b4aeb0877cef0c6e8cffe834eb865f01808718e5bb3abd10a0a0a2c21da04e89413afc7bed90ed49d4f9bdb55e7c5e9d67e96a9ed52883eb36efa023b562940e61aaf3eea56e019e2cd44d02e38f367762d1974d3cf87e9d45bbc2" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -5389,23 +5439,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xc1a9ccd5f651aa46a26433e521d6e7c4fcc6714f8fb9068ee4f1e0a8d043da0d", + "parentHash": "0x861e741db3d23647d8a9fc61ee8361b044ab5f6472a15e33e1347d26802ae652", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xc8dec30c9a01e3cb25857fea4c9fec2588e9a88c04964ec88446def8b92c1dd1", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0xe11eb32a68511b9e3d3ab1af9e0dbbd31a734752d8d01d3178d1288ada023c0a", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xab", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x6ae", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x9fb16206a35f8b4b9d8c30570c7010b5bc6a4149b5aa2ce42da9d60c92b5ea1d", - "transactions": [ - "0xf882819d088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a0e745f6682c5edbc361349ac85db663d445e657534cab54042b4e7a929c71b3dfa01da4ada16183397c613a392e286749ce543cb828887825535209225ba2cbce1b" + "blockHash": "0x2cf03f61b899f9e1da26b010eec455dd52486700e03c7ac6dd5aef77e1d0ce4a", + "transactions": [], + "withdrawals": [ + { + "index": "0xe", + "validatorIndex": "0x5", + "address": "0x1f4924b14f34e24159387c0a4cdbaa32f3ddb0cf", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -5420,21 +5475,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x9fb16206a35f8b4b9d8c30570c7010b5bc6a4149b5aa2ce42da9d60c92b5ea1d", + "parentHash": "0x2cf03f61b899f9e1da26b010eec455dd52486700e03c7ac6dd5aef77e1d0ce4a", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x4367db6c6b954c306e2e3d3a3cb846b43cf3a484741c8fd6d0a49099dcb68c32", - "receiptsRoot": "0x1dfa260a60333675b1de018c45c25c44470a3f3159a99821318421f2c1f4e58a", - "logsBloom": "0x00000400000000000002000000000000000000010000000000000000400020002000400000000000000000200000000000204000000000000000000000400000000000000000000000000008400000000000000000000008080000000000002040000000000000000008000040000000000000000000000000000000000000000000001000000000000044000000000000000000000000000000008000000080000000000000000002008000001000000000000000000000000000000000000000000000000000000000840000000000000000004000000000000000000000000000000000000000000040000041000000000000000000000000000000000000", + "stateRoot": "0x2ac9068ae7984536b6cba66a193cf4cb5097df3347dcdf2c4f96aa73add0e7d1", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xac", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x6b8", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x4d980e42bd8ab35744bf9b5aa58fbc8b71efd85b839b90e2e50584246a3831f8", + "blockHash": "0x63c823f9caa95abdf5aaeaea7d33753359ccd4b76e64155a760bf3355edcc73c", "transactions": [ - "0xf879819e0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a05431136f2ece8ba6297f27c127413c8f219ba3be455c05b1a07e064b1de4e36ca01ca3eb0aa10c2cf4de708b21daf94ea3cc4a14e47b42f50ccef6f288b300dfe2" + "0xf88281d5088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa0a4f76822624e38a1098a5068f6f67a121977d29dd56f9e166058381da8d01c53a0742ea9a61fdf179b566429a182e367ec8473848e40660a9e2445744d81b41094" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -5451,21 +5506,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x4d980e42bd8ab35744bf9b5aa58fbc8b71efd85b839b90e2e50584246a3831f8", + "parentHash": "0x63c823f9caa95abdf5aaeaea7d33753359ccd4b76e64155a760bf3355edcc73c", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x001a7058a39d22062714eccf3366ff07d3406f5d5c1cc173a5c9fc2d0b2cfef8", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xabc665a965c4293132e3673c8075a7918772341f9165c93b079a745ebaed0256", + "receiptsRoot": "0xc78cbe275dbb91288da2eba36a5b552aa1833bff451f2bdaeaa349efd865a3d3", + "logsBloom": "0x00000100000000004000000004000000100000000000000000000000000000000000000004000000018004000000000000000000000000000002000000000000000020002000400000002000020000000100000000000000000080010000400000200000000200000000000000000000000000000000010000002000000000000000000000000004000100000000000000000000000000000000000000004000000000000000000000080000004000000000000000000000001000000000000100000800040000000000000000000000000000000000000000000000000000000000000000400000000000004000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xad", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x6c2", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xc9f402d074ac593ae2f09a8bb846b9e46963c305a8c33690c08ca0c8e0ac719f", + "blockHash": "0x8db5431f9466088e255da8a3ba2c8687e71836d5d1945b13c7f3d9ac7c89632b", "transactions": [ - "0xf864819f088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0705afe706be82a4c7f9a5964e09c9e265b285e4382028136ec8af1e7fb0c7aa2a03f927fc55ed798c4cfb0ef7beb90c044b5325a7b61c45a16504dcc5ddf712d3f" + "0xf87981d60883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0b369556d11c62983b278d0d4fe00f1409f86b5b783428e41a0c01f6d6fcdb40fa008bc2b849bbd2a50c5a6fcd542b20d9f0eeee0456905db1815d5bcd9e3ca47f4" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -5482,21 +5537,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xc9f402d074ac593ae2f09a8bb846b9e46963c305a8c33690c08ca0c8e0ac719f", + "parentHash": "0x8db5431f9466088e255da8a3ba2c8687e71836d5d1945b13c7f3d9ac7c89632b", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x564d65ae8bc86bf22cb161dc6c91a654b73d6d2c221f7048b77fc31b6aa08ed5", - "receiptsRoot": "0xb8137d0711f48435401dd4cab75c13b44ad3e5241d683b34e44073ebaf1c1193", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000400000200000000000000000000000000002000000000000000000000000000000800000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x6df2168a34cdc84a5a95ca4e9fe06f424de8fc9fe15b265ca63cec1b91367473", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xae", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x6cc", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x7c6e0e3b4dfc0728d41f7d5729a60d53758cafbab878bca3beed01bdc5ae9c56", + "blockHash": "0x0233de4a61a9a43ed4501eedc83ae61cc6b2f31f7681bb1de10650f724635917", "transactions": [ - "0x02f8d3870c72dd9d5e883e81a00108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c4a593ce54c67c2ac656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a087fc0239418406958902bcd8e059f9ddc08fb2683a4be0cfd47b1eb97418be1e01a00ed05cf53044f80bc23a49fd3dc69816901a3ff92e1f24bc7fd1fc5cfb87396ca057644e118120719799ba3ebd9b1aa684eb57c6dc92119684adbf26dbd4fdadbc" + "0xf86481d7088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0648e900cc276bee3ab846c737125fbbfca11f5629571b450fb288db3af6bc317a00dd7a954f8127971ee7cbb1e9de7a915bc2572e038713a108be58abc7f476e9e" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -5513,21 +5568,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x7c6e0e3b4dfc0728d41f7d5729a60d53758cafbab878bca3beed01bdc5ae9c56", + "parentHash": "0x0233de4a61a9a43ed4501eedc83ae61cc6b2f31f7681bb1de10650f724635917", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x232b2e0f21a64714fbe5752dae331bf86b0d26ffc92322b62504607a474b224c", - "receiptsRoot": "0xf5d1435054aadeb055c81d3f19a4e56814ce25c8f3a64a413d39681990c927a2", + "stateRoot": "0xf889bbcdd463f48171e33c543817751582a109051c92139e479bc718eeca99c6", + "receiptsRoot": "0x5866cd46efc1eafd675e446d2d1d2978c98c92f320876f60f5cf43c191278df7", "logsBloom": "0x00000000000000000000000000000000000000000000000000000004800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xaf", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x6d6", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x36daac85c3d71809d96b04586cf5c50594ae2cafa74b9734491f6fb31b85142c", + "blockHash": "0x899b58ec03cb142e0b55e1fe0ef6c351291a27b9074344bc7e2cafa96373aef6", "transactions": [ - "0x01f8d2870c72dd9d5e883e81a108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c963a3b3b836863cc656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a073b2b230124967b31546c7e2fedbc5ab108a537ef6d645621fe74fcdc0644b2801a0ef1453210d03f1651ebad4cfcf238686c7c450a8a2488d0f442db7ea291923caa0798c152e68943ea3a4326bb6c39a8e9956c7d87e5391ecbe6de1f839ae11afad" + "0x02f8d3870c72dd9d5e883e81d80108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c963a3b3b836863cc656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a073b2b230124967b31546c7e2fedbc5ab108a537ef6d645621fe74fcdc0644b2801a0011cfdd064c9e26b7e3138ab8645a76613b43cfa62982b70ba5e854594927e1ba03c7d9afcfae4fe514ae67a15a57ce6e7bdf32ef4dbc0106bcddf30d3310125ac" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -5544,29 +5599,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x36daac85c3d71809d96b04586cf5c50594ae2cafa74b9734491f6fb31b85142c", + "parentHash": "0x899b58ec03cb142e0b55e1fe0ef6c351291a27b9074344bc7e2cafa96373aef6", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xe868a681d8537e3e322ab2e64f5b6735416f171863eb9343ae96f8f8d51356ef", - "receiptsRoot": "0x04403e16895c094448badf3e31688d759f0993ccf9d9b2cc1fc84d82800f2cec", + "stateRoot": "0x853abd8efed4d27ea5e08885d43378676c813de46a4d761f3bb3ffc0ae60c9ba", + "receiptsRoot": "0xfcff7b43bca1a879ee00b1cde33af7491d6ffbd5f02de3552de7d18866184f76", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000040002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000010000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xb0", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x6e0", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xedd306e502f0e098d70102017c0f33272d5934bbf766ef1c5ece71713d4f59c2", + "blockHash": "0x13f99454d41f5ac10fd52abd046cde67bb8c0bf7d6010c6b17c465ecbb3ed540", "transactions": [ - "0x03f8f9870c72dd9d5e883e81a20108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c2502e1f0dd547127656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0bdfd2b337ff30e9e15c09313bf796d3c75177943e0aa0445f479fbd2dd5c1d6e83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a0e41316ae994091bbaf7e2e97d273ce1a16381c60af07c363bee1aea6c89c83f3a04c1879555adec4de34049425b52f6d4e547ac57a1deda752cf0aea86d599b638" + "0x01f8d2870c72dd9d5e883e81d908830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c2502e1f0dd547127656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0bdfd2b337ff30e9e15c09313bf796d3c75177943e0aa0445f479fbd2dd5c1d6e80a066e575cfc23073b657fc9251aecfeb587f2906d1c5b1381299d908522a6b38c6a054d7c2b1b04312aa07c71c338095b4993a003d277faa621e0003d7cb81e61b1f" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0x6f22ae25f70f4b03a2a2b17f370ace1f2b15d17fc7c2457824348a8f2a1eff9f", [] ] @@ -5577,27 +5630,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xedd306e502f0e098d70102017c0f33272d5934bbf766ef1c5ece71713d4f59c2", + "parentHash": "0x13f99454d41f5ac10fd52abd046cde67bb8c0bf7d6010c6b17c465ecbb3ed540", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xd58cceebab8ff9038ced6500866b8edffabd41017ff99914350deed71f660bc8", - "receiptsRoot": "0x2af5beed5b567fac7c47bd8e37184bbc6f8ad91cffc3e43116f17c16ea798b81", + "stateRoot": "0xd6e6896cfa33fe72f4f9d47f67f78fbb1957fbc4cd70f2389f0c25f7375e03c6", + "receiptsRoot": "0x5a0501a7d3c464a4d381c2295800026c7729d8b2656bb16c1300af53cce6a87b", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000002000000000000000000000000000000000000040000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xb1", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x6ea", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x1fdd1686c4e06bf2baf2287347ed95a45855aa4b546244e83e7aea4c6dd56a72", + "blockHash": "0x9a2024c4823f8c503a053ffba21d3d5b8aa44bd69e0e326a3dd861d5ebacbbc5", "transactions": [ - "0xf87481a308830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c72faa693d5bb5456656d69748718e5bb3abd10a0a0f23547199e74f2ba75c5dff20d614778a8826e0da6574b86b8e6cec15bdd7786a02461f37d47a7d68db841e7b2d3ec9e999a04fb55ecfda0b3213c451a3418199f" + "0x03f8f9870c72dd9d5e883e81da0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c72faa693d5bb5456656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a04632fe8e9579f33e2e42e68811d49a09ad1af1f01a68e7ae742f765e8e797ff883020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a079ebe352f2b61d78c3276a2a94cb7198cadb8e627b35ed127031eba7e98c1bb5a02e2d14e03df516fb1127811012d0584bcc1d13db4fb633ed7d09b6732ea92ebd" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0xf11fdf2cb985ce7472dc7c6b422c3a8bf2dfbbc6b86b15a1fa62cf9ebae8f6cf", [] ] @@ -5608,21 +5663,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x1fdd1686c4e06bf2baf2287347ed95a45855aa4b546244e83e7aea4c6dd56a72", + "parentHash": "0x9a2024c4823f8c503a053ffba21d3d5b8aa44bd69e0e326a3dd861d5ebacbbc5", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x7159f8b467ffa4666bb640be0fbac17072bba7a084d2591c7123ad506e71d455", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x531e33f5d41f49c6c731302d2fd370ac59953a63cb342c0cc82ac2def7af9635", + "receiptsRoot": "0x8d5ad869d06b7f76a71ff0573f5bc66eee7262abdca743edde6b98b2378236d3", + "logsBloom": "0x00000004000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xb2", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x6f4", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xa69441f08a1bef357d6f34fb74e4eeeaff0feb787f61e10879faf72609aeae24", + "blockHash": "0x97fc752f97b39827ba60179602671d30c1f05bf991650cac51f0346ee24d733d", "transactions": [ - "0x02f86a870c72dd9d5e883e81a40108825208941f5bde34b4afc686f136c7a3cb6ec376f73577590180c001a021303b463c6aafaeebeba14b0276f77308dfb02aee5d8cf8d18c7a6b0f8f5f20a017d70f0dfcc668f51b412ecdb441eabaa92c3a05f649e027922a37a858e6be1e" + "0xf87481db08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c3f1234d9a783e10a656d69748718e5bb3abd10a0a0b875a96cc7b43a73edd962e8bbfa4263f6034d1ce25cba2284e2bedd957be720a0639b5e0868048f5d2a42030ecacd89d86a4c271c0db1db9e9a447c03251face0" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -5639,21 +5694,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xa69441f08a1bef357d6f34fb74e4eeeaff0feb787f61e10879faf72609aeae24", + "parentHash": "0x97fc752f97b39827ba60179602671d30c1f05bf991650cac51f0346ee24d733d", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xad7daddd8ac491c23cb54f9805b98cfa1ec0455bf333a1c5cbb0f69f7dd69cfe", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0x350e249b7dc570b0e2f3186029b5c9951a18da70c4292b58e5cecb224fbea9fa", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xb3", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x6fe", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xc37e2ca4253945c00e611fd26819875ef83d98dc20bb326a8e4ebbd804613214", + "blockHash": "0x30a494978e0eac0abda5140961431834ace71b6251f4c533c823913efd652aff", "transactions": [ - "0x01f869870c72dd9d5e883e81a508825208941f5bde34b4afc686f136c7a3cb6ec376f73577590180c001a027058d63f06541a9d1096de84b552d3ed9d9c3a1f9fffb5ec09eb534572d4d63a0725d37562a61ee9f0c8f67350f939ff0149289340fb21b0fd6eee4cdfb3675d4" + "0x02f86a870c72dd9d5e883e81dc0108825208941f5bde34b4afc686f136c7a3cb6ec376f73577590180c080a00fedcabee43c250b1ed3963893a0936866044f218dc3b7f06d4dc2d714ff3cefa020acb4fd5af94d1f7b2eff92382a6e6e43c56d02aeef41d22042d892e6078176" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -5670,21 +5725,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xc37e2ca4253945c00e611fd26819875ef83d98dc20bb326a8e4ebbd804613214", + "parentHash": "0x30a494978e0eac0abda5140961431834ace71b6251f4c533c823913efd652aff", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x055e26ef6ae3fa56e6e9d7a0c149e4d5a4cba9e6cc3dcf761f4b57fb545dc1f8", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x2bcd8e5c3bffa0866dde2054e9aee882c7a625e53f5b58d072cf77ee0ff49d6a", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xb4", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x708", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x8564835e8d24f3fd01643847625fac3fa7bb13ba829c1a5ad7efd6ceda4f5bed", + "blockHash": "0x6b5d54fd2861b26dd7f2851d7e5370a10006dda6c3030e6d3ec4165516e939a9", "transactions": [ - "0xf86781a608825208944a0f1452281bcec5bd90c3dce6162a5995bfe9df01808718e5bb3abd109fa06bb8cef12c0ac6f6490be490baea684d8ee3fb5a4adda03e890f9fc1f81bf48ca06bbe16d08e1776119189560e89057ba6d8af45c383c2ec23c1b74fdaa7395102" + "0x01f869870c72dd9d5e883e81dd08825208944a0f1452281bcec5bd90c3dce6162a5995bfe9df0180c080a04f6a301ae2761c56643aaf7514c0caeffe709da0547ecd30cb55463dbf15a417a05fb1e6589cb27f52e2ac658cb70feedc90d1ff9a81032d4b77fe0ab16eb39f25" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -5701,28 +5756,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x8564835e8d24f3fd01643847625fac3fa7bb13ba829c1a5ad7efd6ceda4f5bed", + "parentHash": "0x6b5d54fd2861b26dd7f2851d7e5370a10006dda6c3030e6d3ec4165516e939a9", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xd203aca206010f7376fa398f9973cd163e7edb2e666af495953f132f0abd8a35", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xe0ae6430ec981d5e1c3832c665913aa0fc2f101e9dab4e5f354e90e481901e98", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xb5", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x712", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xc64398436144bb3196587e5ee9267e878400c5616f97cf97fd0921bae181bad4", - "transactions": [], - "withdrawals": [ - { - "index": "0xf", - "validatorIndex": "0x5", - "address": "0x2d389075be5be9f2246ad654ce152cf05990b209", - "amount": "0x64" - } + "blockHash": "0x4b463a47e277fe903ef73f2504075e63194e03017c299bb340ca82383bc93110", + "transactions": [ + "0xf86781de08825208942d389075be5be9f2246ad654ce152cf05990b20901808718e5bb3abd109fa0de1ebf0a5b83d01e0d1b9b25fea505af5ee5b2fb8f6a563c34a99f813ac3c7c2a0326b01a462426e82549b61283e59a12451b2416be9017fb0c710764106015ae4" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -5737,23 +5787,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xc64398436144bb3196587e5ee9267e878400c5616f97cf97fd0921bae181bad4", + "parentHash": "0x4b463a47e277fe903ef73f2504075e63194e03017c299bb340ca82383bc93110", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xbe2a810abab83cd951177184055b77b27c030508188678587cbe8132de994797", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x035c2aa50a246db44bb0dd50d4788b886b79708af7368191f55e12b56f707bfb", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xb6", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x71c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x12d4a656b5b4d8d9c55515a7698a254fa74a397390a57167f785a2d3602539a6", - "transactions": [ - "0xf88281a7088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa0c5bb4c7666740a63b896f57906ea516686a3f0e3501001e8d1aa27ea158717f1a064ae416a38b4a7a973b0d0ed713577647767e09f12968f8b7dd7bcf2f1f014e3" + "blockHash": "0x26fb93f17f20d3912165be93e6c74e30ce01bbd23b1050dc2b0e990810ad8ebe", + "transactions": [], + "withdrawals": [ + { + "index": "0xf", + "validatorIndex": "0x5", + "address": "0x0c2c51a0990aee1d73c1228de158688341557508", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -5768,21 +5823,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x12d4a656b5b4d8d9c55515a7698a254fa74a397390a57167f785a2d3602539a6", + "parentHash": "0x26fb93f17f20d3912165be93e6c74e30ce01bbd23b1050dc2b0e990810ad8ebe", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x6329ac409b68501594692643f9c388498a7de1c41ad6789fd1af4b37aceff22a", - "receiptsRoot": "0x98b6f0626985aa0ccf4936d47825312e988b42eaadf98e729290b3bc943f88fe", - "logsBloom": "0x00000080000000000000000000000000000000000000004000000000000010000000000000000000000000000000014000800000000000000000102000000000080000000000020000000000200000000000000000100000000000200000002000000000000000000000002000000000000000000000000000000000000000000000002000000020040000000000000200000000000000000000000000000000000000002000000000000000000040100000000000022000000000000000000000000000000004000000080000000000080000000000000004004000000000040002000040000000000000000000000000000000000000000000000000100000", + "stateRoot": "0x07f2da0c4c14403434a2154536785f6a3b2fb4d3211063ffd119a61459926da3", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xb7", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x726", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xc858dea4bf702c29161d33ba7c02bfb4977169668843521b0df693d5eebcf5a3", + "blockHash": "0xe08e97c0e494b917d5103858981ef94e7c83ae607274785cfa6e1d58fbeb5ac7", "transactions": [ - "0xf87981a80883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa04a9bf10e11abbcc9a33e6d7d71b5593164b7c112aaac0ae2ae7eeed4c7442c04a065d51bda999af8cfece3c43c6f48d89fac8a82a2d2f576204a9d32991cf16b13" + "0xf88281df088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a07a2594e4484e7401726b6d3d098d01ecbd35e6b17644e589b97bcba3b2c77459a07f08177d12d8069b57c85212658a3492818d0b2062923c1644b83e0ac6b2a379" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -5799,21 +5854,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xc858dea4bf702c29161d33ba7c02bfb4977169668843521b0df693d5eebcf5a3", + "parentHash": "0xe08e97c0e494b917d5103858981ef94e7c83ae607274785cfa6e1d58fbeb5ac7", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x4e962e27aad16223647ac79606e777971b1debc744616ab3a2d40872adf77287", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x1fc1787348b8a8a51bc390b7240425a40582cdb9f7db29d2526736160f6767b3", + "receiptsRoot": "0x4486addaa38db9aebd1fe1c6c8b70d213fdb181cfc9962b444b3c8b4c8503e74", + "logsBloom": "0x00200000100000001000100000000000000010000000020000000000000000000000000000000000000000000000400000000000000000000400004000000200100000001000000008000000000000000000000000000000000000100000000000000000200000000000020000000000000000000020000000000000000000000000000000000000000000000000000000020000000000000000002000000020000000000000000000000020000000000000000000000020000200000000000000000200000000000200005000000000000020000800000000000400040000000000020000004000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xb8", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x730", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x347ad864a477308c79cb4f766e8a6b62f4ece0a981cdfe49987e542acd89b5ac", + "blockHash": "0xde6bf1db842cb83446e36edc46014d23163fd84aebd1c03939eb0bd290767afd", "transactions": [ - "0xf86481a9088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a046152e7f3fede1276e473bb9aafaa72e9cfa60447b0f30bc961ddf840fa45b1da068a9cbc1ffee81b72b52d9c1bb698240d7bf0f1a5673d108c3de46614306afaf" + "0xf87981e00883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a01a23a49d397fc0ab58da7ef83b06ef187ebdd01e8f76022b0e729ca6cbbfda53a052b822f9bbef37785b4a10956aebfb2ffc1104356a85f8cc66f13e79af3e8abf" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -5830,21 +5885,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x347ad864a477308c79cb4f766e8a6b62f4ece0a981cdfe49987e542acd89b5ac", + "parentHash": "0xde6bf1db842cb83446e36edc46014d23163fd84aebd1c03939eb0bd290767afd", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x2790bbb5ba41428ab0b184406e5725bf4d5fbbb603d8a15325eb1b847b4346d9", - "receiptsRoot": "0xeebb7dba7001e7060c6d18cc19e463b790ceab439dd73fc5c2d6907700acb6e9", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000002000000000000000002000000000000001000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xe6840cd73d8ca325ff70656c4ecded82de9a05e7212932b0abedcee5f59da334", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xb9", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x73a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xac0c873a3d9942f92427ae37009ee280b326788fa803baba4dbbcc31736ff2ff", + "blockHash": "0x6bde1987ef5b8bb5fde73ccb7b722f060ce2d5f1f3cf0744498e2eded6ad2fbd", "transactions": [ - "0x02f8d3870c72dd9d5e883e81aa0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cee5a944cf4c7c482656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a085c0042b81b23b846d1e4881b0131b4bbff774dd9bdece2e74fa92ebdb053c3480a0ab91a3e2fdf14c51273af6668fc2fa61f476555b41d52a466d663dcd5d6c776ea07ab7fe8ae84e3e65f3dbe646961c27216943f9d9eb9b2d3c48571cb1fee9f027" + "0xf86481e1088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0a48a7919c6813fd6419de6ac1026eb97cc5ce927050352aff02a6430e0bce5a9a0676e62102cb37a89ee4386c6192ff396f337791d3d12d6162952e5662b61a059" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -5861,21 +5916,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xac0c873a3d9942f92427ae37009ee280b326788fa803baba4dbbcc31736ff2ff", + "parentHash": "0x6bde1987ef5b8bb5fde73ccb7b722f060ce2d5f1f3cf0744498e2eded6ad2fbd", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x75397ed7dffd9a11c4edcbeeb1e639eb77305bd178dc500dcab6ec8b3faf0408", - "receiptsRoot": "0x22cd406e847641904efd5d8ac1f487eb2623b4fc895fd69ee449f25ad57d6f4f", + "stateRoot": "0x4ae22551484995968643becf5e15bf744ea0c792cb7155b6f9d98f51b7e4dafc", + "receiptsRoot": "0x7fcede4f85e49a01443369f7d463ec02d99314aba310830e45143af821431c90", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000010000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xba", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x744", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x5f67af973e604193cdcd68a80dea8ff0622ee1341330c1b8601502020617c2cd", + "blockHash": "0x02795b8afbf3b9cd3539cf5e1c373c07ef6e1be6f4deb1fdbbd6cbe365387dc5", "transactions": [ - "0x01f8d2870c72dd9d5e883e81ab08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c6508b81f8764eb37656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a046765aab85a7ee88496ecde24f93cd5ce361b5a9fb43a2641d77bfbc9792801001a0341b7f2ef62ec29717a389a4940e28475731569675759ae3e8a33f3ca3157861a01538b9cd1c41315974a941a54a6e8f59bf9319214877dbe5b29da3d6500b917c" + "0x02f8d3870c72dd9d5e883e81e20108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c6508b81f8764eb37656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a046765aab85a7ee88496ecde24f93cd5ce361b5a9fb43a2641d77bfbc9792801001a086efb5c80be03c51d8454222b0bfd296ff0e19e9d9ef9b3a7862830f74f4925ca0043fac0a6e63dac67dc062fc560a23a2e96a2fbbf462ec99aeee113249f4c154" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -5892,29 +5947,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x5f67af973e604193cdcd68a80dea8ff0622ee1341330c1b8601502020617c2cd", + "parentHash": "0x02795b8afbf3b9cd3539cf5e1c373c07ef6e1be6f4deb1fdbbd6cbe365387dc5", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x48bdda61ea2778c74512475292f1383ad3858049a72ae7db5e30bd3fbf2bd624", - "receiptsRoot": "0x71352a0ec9727dcb65a37d458c233348bdf13252737a63c23cad594194349710", + "stateRoot": "0xf019e36fcbec65df2ce3027134c18b719508f70227ddc57c88435ab3619fde36", + "receiptsRoot": "0x677f708e7c661f962f797d1958ecd12718aff9362efcf2f98d4bac893d1d499a", "logsBloom": "0x00000000000000200000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000040000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xbb", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x74e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x493bf6336f7b638f36a29952c86afbb58526152b62be20eb6433bee0474d62a8", + "blockHash": "0x8e4c83e5e358f39de84987818cbd14c1a963ed5c8de83717bb6f89d11ed0ed65", "transactions": [ - "0x03f8f9870c72dd9d5e883e81ac0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c5f69e43b76f789f0656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a023c2e06f633f91e89e0d95cf87dce47fe1cb2b95434ff45773f1fd560ad2dcf683020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a0d0263d59ac408ad76fb77656223a8015758a80eab5dff92e7088f0254143ca70a068b79a5e30ce091911f3bca90ade5affc350907f6c8bf8af1dcd860808d126b0" + "0x01f8d2870c72dd9d5e883e81e308830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c5f69e43b76f789f0656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a023c2e06f633f91e89e0d95cf87dce47fe1cb2b95434ff45773f1fd560ad2dcf680a0c1e6fb9cec6eab080407dd898bcafea263be141bbc087449dd270184d2726910a0416d9a5dbd083739e7846e4b7c01de859b064c9561d8b5b6b1a621e62776ea0c" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0xdf979da2784a3bb9e07c368094dc640aafc514502a62a58b464e50e5e50a34bd", [] ] @@ -5925,27 +5978,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x493bf6336f7b638f36a29952c86afbb58526152b62be20eb6433bee0474d62a8", + "parentHash": "0x8e4c83e5e358f39de84987818cbd14c1a963ed5c8de83717bb6f89d11ed0ed65", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x80fd3239645de81ad57f1ebccda32eb45a50668e451b3b26e7218ac0dcadbeef", - "receiptsRoot": "0x247cd528261f6874860ba6679d6568e67b880e47319f8c3b0dd31bc1fb6755d3", + "stateRoot": "0x9f3f6b79b1d42e1d290edb6a602d04f78d4c33e0a60015056d519fded78c4f1e", + "receiptsRoot": "0x46a2752a9a9314e92f22636a4d915502df5b82eb8e09f2aa0b13a3422a472d42", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000002000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xbc", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x758", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x2febc2674bc628df6cde532fe9c598bfca92240c5f240d189aa372425c24487a", + "blockHash": "0x2f741c1a54dfde09c36f6f171be91f7cc50a184e29c875af602ef52ed58e6e89", "transactions": [ - "0xf87481ad08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c9d643f50f3c3ae83656d69748718e5bb3abd109fa0b3e7127bf0e21a500b9b3b883ec9def5eae78ce9bc8fee10d6cdeffdc0c13f60a00e74798f17ce1b4972603e58546b548c1e24bfba21c3d96bb035c709efeb8490" + "0x03f8f9870c72dd9d5e883e81e40108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c9d643f50f3c3ae83656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0205bcc2489f954a3af7a16da4d6042a75fcd6eb69b848c52b3448acb24b2358083020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a0bf2b925dfa8018902b89a9625827eaa5500ec20b3f4c4395cfccc31472f32a42a06fbac8676fcb56b7f8b639476c8afe7354fa09cdba4de8a8b015e9dd8b188e2c" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0x15855037d4712ce0019f0169dcd58b58493be8373d29decfa80b8df046e3d6ba", [] ] @@ -5956,21 +6011,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x2febc2674bc628df6cde532fe9c598bfca92240c5f240d189aa372425c24487a", + "parentHash": "0x2f741c1a54dfde09c36f6f171be91f7cc50a184e29c875af602ef52ed58e6e89", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xbf8e94c61c11a129156b7e3fa9ba0de86d54dc00d74a4471e9c98ba815759b38", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x02fe0bb4eb66b26437ec7903fd7eb0eed53170157937bb735b7c00333e361481", + "receiptsRoot": "0xa22af58078ce594861d8ae9f8058938980d716301669166c1f2073b3844c1b15", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000080000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xbd", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x762", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x341223f936840f7f6a33fd74e14e5ebe4300b215cfadf77a8f6e88bfed017dad", + "blockHash": "0x7d60f33d7e776182fce5bd0572f488cd429e742705eb78603179446152aaec20", "transactions": [ - "0x02f86a870c72dd9d5e883e81ae0108825208944340ee1b812acb40a1eb561c019c327b243b92df0180c001a0ed38f6f89589e40421e3b475ea232220aaf132fa8b2f8a429b56aaa847116b9da0097910c31d39272f66c86d4146ca7e354af1e69ef3bfa8c18d40d2b95e4db5f5" + "0xf87481e508830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c6188771ea4290e13656d69748718e5bb3abd109fa07c93f78010a094d863376ae82eb4a6d37f04442bdc09fcf74dc2a123b8ae6e74a063013dde3a3c73fff4c1d998cd90fce67a104ee5a32be271d42fab78d23d8a1d" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -5987,21 +6042,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x341223f936840f7f6a33fd74e14e5ebe4300b215cfadf77a8f6e88bfed017dad", + "parentHash": "0x7d60f33d7e776182fce5bd0572f488cd429e742705eb78603179446152aaec20", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x204529ee2f764b20eaaf6435c4f230829529269cacb29935eb0c3a7120bc1921", - "receiptsRoot": "0xbe3866dc0255d0856720d6d82370e49f3695ca287b4f8b480dfc69bbc2dc7168", + "stateRoot": "0x665b04889d2e15ede87951b27ea61a4add7124de7f2023dbeb9f1e636e7b71ae", + "receiptsRoot": "0x005fb2a0d0c8a6f3490f9594e6458703eea515262f1b69a1103492b61e8d0ee2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xbe", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x76c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xfcacae1b8715635bf3bbb10a375c44c799c2a882cab116306400381ff62e71f2", + "blockHash": "0x822c072433cf13fa896fb579c98e53f0ff3d231f10168b07647d214b5e2a0c24", "transactions": [ - "0x01f869870c72dd9d5e883e81af0882520894eda8645ba6948855e3b3cd596bbb07596d59c6030180c080a056843c6013ef0f7e993d7d4a299d7333722cae8844b9bda606a8f85236a7ae66a06e0498193d10d4767c06dc92c7945d7e8e0fb727437f5f683c4d15d7520aca67" + "0x02f86a870c72dd9d5e883e81e6010882520894eda8645ba6948855e3b3cd596bbb07596d59c6030180c080a0724f2f20750b6e846792035de6314f74d67bc678eb374e7a0378a0d08aca5c58a03dc7cb7a3820fe519393e3919fefb78a91efa6fb06630951b26818f36804ed07" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -6018,21 +6073,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xfcacae1b8715635bf3bbb10a375c44c799c2a882cab116306400381ff62e71f2", + "parentHash": "0x822c072433cf13fa896fb579c98e53f0ff3d231f10168b07647d214b5e2a0c24", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xfd9c7a4406ab2c46dcc6be382fb183735b1d3e070a9d1f1635a7bbb429b1f90b", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0xb339bf1097bd9ed7a2baa28b92f5c00263a4df11bf31866ec32b39406c8bec23", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xbf", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x776", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xddb665db1612487f7e1e333fbb5f607b93bcfc618983de7dd61d76dac6f3d948", + "blockHash": "0xc763e36a2d4a71b815dd3cf970327db148b6f24eb23522a4cd962848679f683a", "transactions": [ - "0xf86781b008825208944340ee1b812acb40a1eb561c019c327b243b92df01808718e5bb3abd10a0a015432bdd04ffc5215aa37318a4e5ac3bfbd95cb9f9fdeda20ed2366c03b0ccc2a03f18a7bbed8d5056b9cf1b0f48a57f2a697b4374aee87989304389efd91b8c82" + "0x01f869870c72dd9d5e883e81e708825208944340ee1b812acb40a1eb561c019c327b243b92df0180c080a07fe961f6b99cee70e756dc7fe479180d7855fe002c7572dabe4d7839f708cb3da07ce880477fce751e253fe79741ead343f714c620ae8e9b1d4925d4d8afe43556" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -6049,28 +6104,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xddb665db1612487f7e1e333fbb5f607b93bcfc618983de7dd61d76dac6f3d948", + "parentHash": "0xc763e36a2d4a71b815dd3cf970327db148b6f24eb23522a4cd962848679f683a", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x62ba3f65349e4c111e0d29f69d2b8e23e737f8b593645d9bd27527b4b6a281c2", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x425443c55bf6cc11f8c742160a3355474bde4551409997d9b56ce6017628c6ce", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xc0", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x780", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xcdeb0c3a06240f7f742c497bb142ac2477df943a878f8296b911b9f1169c1e46", - "transactions": [], - "withdrawals": [ - { - "index": "0x10", - "validatorIndex": "0x5", - "address": "0x2d389075be5be9f2246ad654ce152cf05990b209", - "amount": "0x64" - } + "blockHash": "0x2ed48a4ebdefc743bcdbec0ecadc64fa641776a8ad70df8e58c6b29bf6c1a23a", + "transactions": [ + "0xf86781e808825208942d389075be5be9f2246ad654ce152cf05990b20901808718e5bb3abd109fa07ed61509c7ec5fe3ef1deb7c2bf8d01c9f501d9982d2208aecd8d3a7ddfb38afa06c74720e72af536646d725c7d49080686eb94b1d599a8bb99a1279644ca31090" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -6085,23 +6135,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xcdeb0c3a06240f7f742c497bb142ac2477df943a878f8296b911b9f1169c1e46", + "parentHash": "0x2ed48a4ebdefc743bcdbec0ecadc64fa641776a8ad70df8e58c6b29bf6c1a23a", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xeed15dc1d1c3aa58ec844a312c71e28df4da173c397548d8054958fd9935c25b", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x03ed1415ee8648d07940a6d32100ba55e7f6e14bc6ca0b3a8775013753cea0c1", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xc1", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x78a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x24b14515d27271ed944fd78cdea5855bbedf6cd84d65f925f8f06a426f7b1e4b", - "transactions": [ - "0xf88281b1088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a0e10c5cbc9b32e3884f89ae0b846ec590fac27b518c0b94d4073b29c8bec9f0f6a0211543469b2609d656ed3cf1c81d0c46a1b9d9fe3e40f4db0470629d2dd7a87c" + "blockHash": "0x1e23bc483f7c371d9ebf493ba84b563479656771fe17f2846fd9c863fc9cfafe", + "transactions": [], + "withdrawals": [ + { + "index": "0x10", + "validatorIndex": "0x5", + "address": "0xe7d13f7aa2a838d24c59b40186a0aca1e21cffcc", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -6116,21 +6171,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x24b14515d27271ed944fd78cdea5855bbedf6cd84d65f925f8f06a426f7b1e4b", + "parentHash": "0x1e23bc483f7c371d9ebf493ba84b563479656771fe17f2846fd9c863fc9cfafe", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x2fe80dd71f69b62d75eed163395dfc900797e0aea020977a6e407545190fbfb7", - "receiptsRoot": "0xfa5f21241960744e16ad565849246d4f375208ad4df418933fb3f903cb4e8ee4", - "logsBloom": "0x00000000000000010000001000000000000800000000000000000000010000000000000000020000000000004200000000000000000000000000000000000080000040040000000000000000004000001000800000000000100000000000000000000001010040000000000000000000000000000000000000000000040000000000000000000020020000000000000000000000000000000000000000000000000000000000004800000080000000000010000000000102000000000000000300000000000800000000000000000000040000000000000000000000000000000000000000000000000000000000000020000000000000004000000000000000", + "stateRoot": "0x096099f2d7c47a0c7af6ab420ad9fa6334c7bf732790f7386ed6618672cc4fdd", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xc2", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x794", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xd5f960e48e2767108920eba4e8e326c9fc3233c3a2fa349770f04debccc14826", + "blockHash": "0xe61411b998dcbec97ad2ce9bca20014fa673980d1e884325c1075abef61f152d", "transactions": [ - "0xf87981b20883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0ea8ac7e4b44a2483e97723230e913a48bf2a489c115c4ac4ec032391cb653adfa0600e5992a204e2b0537dae104e1ca272eeb87767082c4eb860ef8b3fcb80a242" + "0xf88281e9088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa0de5f5b108b09654f7d8ed16787102174e2698a344aa177ab38997e0290331143a004d275d26d1ae07aefc0aaed81a95b90427dccc3d696d0db8d3e63f19825c3c7" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -6147,21 +6202,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xd5f960e48e2767108920eba4e8e326c9fc3233c3a2fa349770f04debccc14826", + "parentHash": "0xe61411b998dcbec97ad2ce9bca20014fa673980d1e884325c1075abef61f152d", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xa6c3339ba4148d799a285ee82ba2a3d078288592249d5f83e42b99b06f157370", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x6be2b9dd7bded88692d1e5ed6e70c8b1d7aa45c5eebfd2f3ff481387b9b14061", + "receiptsRoot": "0x024d9f09c9b45b8c40485e9f29bcee4a0d25aa4160ea228584aa418139c3d88d", + "logsBloom": "0x20000000000000000000000000000000000000008000000000000400000000000000000000000000000000000000000000000000000000000400000000000000000000001000000000800000000000000400000000000000000000000000000000000000000000000000000000000000040010000000800000000000000000000000000001000000000000000020000004000000800000000000000000000000000010040000000000000000000000000000100000000000000000000000000000000008000018000000200810000000000200000002000000101000000000020800000000000000000000000000000000000410000000000100000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xc3", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x79e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xcbfad2a8bdfe5205c485383414e29d8e0a9c8b10812151d25bb51a74c95549a2", + "blockHash": "0xf24e0907bc9948667699c8f9094931f930f8617e5eafff2271656cfbde5c2956", "transactions": [ - "0xf86481b3088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a07fd2ac2b263f2af12a338119e615fae0d3051dea3796964c46d16c0f941546b5a05414f2148eebe1d2ad114e32ca88ab51e1439fac716bedd3cb87c2110e39d9f3" + "0xf87981ea0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0e42ca826d4b55e9090e794708839ec814729589638826bfb6435f3754ec9ebcfa03b0c3a0bf6311efe28815ab455878767818db4e14f6fd6f406decfabc4117fed" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -6178,21 +6233,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xcbfad2a8bdfe5205c485383414e29d8e0a9c8b10812151d25bb51a74c95549a2", + "parentHash": "0xf24e0907bc9948667699c8f9094931f930f8617e5eafff2271656cfbde5c2956", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xb9543b5c0e7a63e34155d717234d5205c636cc3e6988b66dcf579d56fc91821a", - "receiptsRoot": "0x736e6281d7032bd4ba22922bc0bb6327c4c5b291b7d3cdcb1ed2a8f9ad3a5fa2", - "logsBloom": "0x00000000000000000000000001000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000004000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x528c818971f8e91e1138d4713d88d762e81af2176d7db93264c3b0b8fd47cb0f", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xc4", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x7a8", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x078aa96db2936406a8d1d69a59f72bd60a908cbde5d2abb12166b41ff714977b", + "blockHash": "0x9587ef58a068fcb27daff28ee3da231caed47c7efa9371fb42b14fc9908767b5", "transactions": [ - "0x02f8d3870c72dd9d5e883e81b40108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c67fc28af42e5f642656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a032984cfbb954e0815427570f4ceaef21a3691026950e5ad80401232f687620e701a021bb96eed8ad52a0a4f89d5bd6584a666acd40f58e0ac4abf20005b8bf18d8cba02a3ce328668299ad47d4e7dfa4ed46db5b4bc9b661db9c081654eef1f82f837e" + "0xf86481eb088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa02a1b6ee9e8eb5cd94cd651a3b2930c4543986132e2e215e6f9416dc8be31344ca01f7587b14f4234961447f94cae13c54280f72390b491219b98f1fc2f4a3aab0e" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -6209,21 +6264,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x078aa96db2936406a8d1d69a59f72bd60a908cbde5d2abb12166b41ff714977b", + "parentHash": "0x9587ef58a068fcb27daff28ee3da231caed47c7efa9371fb42b14fc9908767b5", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xb00ebb7f6604fb250e1351de6bac6befa9e7e6ce445dafb62ab501fbe85531d5", - "receiptsRoot": "0x44882009e0eee4abe404df368647481c05b2c6c068b0c8c1df0ce88f47bae444", + "stateRoot": "0xfa0dc9ff28e4f903721edb3b35e3b68e8315261318d7b8177e556dadcb11ef6a", + "receiptsRoot": "0xa4e6a14fb19ddad6e78264292f9df58b55152218eae0eff88e1b9348bc3fd654", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000040000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xc5", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x7b2", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xc03fc9d4b6d49d1599717fbf75a9ad47496efb1ec6fafaa5b4bee2afae9bee30", + "blockHash": "0x035aad19a0a2ed13bbbd78630f35c556bfe04d7a89bb2fdbe485ad344e6e81b3", "transactions": [ - "0x01f8d2870c72dd9d5e883e81b508830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c2b5bb2644ee8dc40656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0d0e6005ee39e02d654cc2db358df9659d8265e24d7362df88a7df9200438f6ba80a0f649eb6ccffab94e9a5c90d0e9ca5e0c684ec630d63ab9fa111a9e3c228a1caea05eac0ee3d924d0666bd81261897d914f3018747fa0e061a5e6a55cce4d575dbd" + "0x02f8d2870c72dd9d5e883e81ec0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c2b5bb2644ee8dc40656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0d0e6005ee39e02d654cc2db358df9659d8265e24d7362df88a7df9200438f6ba019fb39e93ff859f3600c01b7d7097a5a8612b77a52e73ddc099d3888b83b8aa48a00b0213a0a435161fb50eb892a0b62016e30e794657df8203ec443f4181519eaa" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -6240,29 +6295,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xc03fc9d4b6d49d1599717fbf75a9ad47496efb1ec6fafaa5b4bee2afae9bee30", + "parentHash": "0x035aad19a0a2ed13bbbd78630f35c556bfe04d7a89bb2fdbe485ad344e6e81b3", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xb0c41dffbade6271470b8f8c5b780ad0b1f02a2119260335d471965ed57569ee", - "receiptsRoot": "0x891fd12b9e201bc60c807e319a161d32840bbe493d9c44a1db9b58083f874dbc", + "stateRoot": "0x17fec881f0a46758a00b8d3f1188246eb7201d6ffbc40723236e1772001c04fc", + "receiptsRoot": "0xcb9c042b698bc6af04b2691e0a065e428419e99e72cf44d9648a8cf4d8f0914a", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000009000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xc6", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x7bc", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x0fa887a20612f7ab9a00abfeb074c01ae4b509b4859c48c2e24abf27b7d7fed3", + "blockHash": "0x5124774422b19463745f7a5aa4c1399d3e8c13abdf68cd0eb70477ba79b3bfd4", "transactions": [ - "0x03f8f9870c72dd9d5e883e81b60108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c28b4f9f2367ebabf656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a03c8110e03f1b54de6085ff899d0dccd87806b788d1ef3fddbca1de4c356266e783020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a04d341d72ad1244a3c31bc3b0015fb98913e5335530a4a62559c93853fb44cdf3a06d3d0dd50c842fe58e16e08248ab122efc34c430b8d750fc332644664c3e5b09" + "0x01f8d2870c72dd9d5e883e81ed08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c28b4f9f2367ebabf656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a03c8110e03f1b54de6085ff899d0dccd87806b788d1ef3fddbca1de4c356266e701a06640a31d9e8567d5cb1bdbc8c2f8503d8baecddbb42384fbb138148ffb7c53a5a017ba1e6660bdc56e4f8d5713b7f3e336bffdbaea515ff701ee12ae5dac240318" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0xa73eb87c45c96b121f9ab081c095bff9a49cfe5a374f316e9a6a66096f532972", [] ] @@ -6273,27 +6326,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x0fa887a20612f7ab9a00abfeb074c01ae4b509b4859c48c2e24abf27b7d7fed3", + "parentHash": "0x5124774422b19463745f7a5aa4c1399d3e8c13abdf68cd0eb70477ba79b3bfd4", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xe72ad6c35d2223bf7e059940350eaabe3e8981c6378596be49864116d0f657a1", - "receiptsRoot": "0xd1e721c5ecad92ff5f7a0d380819f14b87b579ac4df1d2968489b730f9b40d9e", + "stateRoot": "0xef7a3636b93f0d6718bd63542c1360e0eb2b96b5eeeee35a0ef9b99f8547321c", + "receiptsRoot": "0x342eaed63cb38bea909573825289290790acecc440db7592465f2ce257905ce1", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000009000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xc7", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x7c6", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xbdc33ca00ea1641cf1ca2816913824999b73d47a92e7d5303c4104035ae78725", + "blockHash": "0xa467cc633a88b190c7c454be97d066a22527ccfa3784a6d0eaebb099363da22a", "transactions": [ - "0xf87481b708830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cbf894c2fffdcdbd0656d69748718e5bb3abd109fa036a4779c859e40e5aedd04afbdc0b99e5c1b2fa06f706e75c8d30952858c566ea05ba2bffb61a84a9947a0c93159d4315826133aa2842fa1931bbc4ff2f60f4eeb" + "0x03f8f9870c72dd9d5e883e81ee0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038cbf894c2fffdcdbd0656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a00a2bc3fd72bd3f8bb7f1de9a7dc9e928a7c6a831237124e65c60c25f8348af1983020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a01b1fbce7c0ef87f6f9663a0b60e65cc7677278016d927e12347e76adb5c349fca02c4342ff904879e71f5a9bc230ba38bf9a8fae1d59c8960a706ef33214d2d0d9" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0x9040bc28f6e830ca50f459fc3dac39a6cd261ccc8cd1cca5429d59230c10f34c", [] ] @@ -6304,21 +6359,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xbdc33ca00ea1641cf1ca2816913824999b73d47a92e7d5303c4104035ae78725", + "parentHash": "0xa467cc633a88b190c7c454be97d066a22527ccfa3784a6d0eaebb099363da22a", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xae965001554c570fdf099944449e4a8619bb09413c1b150ad226f240b28c09a6", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x8c8db72fff2333a2033534e709f102e14a1f5d447f4f0bc8dab1593f29b9b755", + "receiptsRoot": "0x89ad6e712ff59972d0e9cb30bb1e153bcf812624c56f0b21b11f5392068d364f", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xc8", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x7d0", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x44aa9401e0d5848c03c53c87cb883698f3a346340416803b666fce0eb7912595", + "blockHash": "0x4b395a1569a2995fc5ad6e079e367cd135ae61be2315a57336faec96ff6be4f2", "transactions": [ - "0x02f86a870c72dd9d5e883e81b80108825208942d389075be5be9f2246ad654ce152cf05990b2090180c001a0627cc882a43d440583c3751b3cd55df3486c73273d7a96078c16a6ebde51f31ba062b06acb893608526565b6b55122fdbf4312e143f2af2a32154bd057f050c4df" + "0xf87481ef08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c3ea8a9234e6d52c8656d69748718e5bb3abd10a0a0f425e20bb20618d370264da280ce98b8cfc5ed905266f4a97b5410a7a13e99cea0169d5c9b136d5c55900d7bc5e9d877219bb0018ed5dec92df79f6fd7657f8095" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -6335,21 +6390,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x44aa9401e0d5848c03c53c87cb883698f3a346340416803b666fce0eb7912595", + "parentHash": "0x4b395a1569a2995fc5ad6e079e367cd135ae61be2315a57336faec96ff6be4f2", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x217fa2954ee1343cc299de1fd1145da676980d65134ea921cc5b2c1b1041214c", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0x7eefbb5fcfd5311819571c7f36f79c4e46685e02b12d0152b08824a5a4a6e37d", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xc9", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x7da", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xabf8b8c18e738be05befb8682083d8212b57c009c599b65535c4a7f47930bfa8", + "blockHash": "0xf3574c46ee7be2f327b4c968186b9cba6ce8bc43cac0917119e3226630ac2e40", "transactions": [ - "0x01f869870c72dd9d5e883e81b9088252089484e75c28348fb86acea1a93a39426d7d60f4cc460180c080a0f18f3e9683cdbef4545211391dc53712720b86cbf3eaa4644fd33713f571a874a009b214615dc2e3423998b3b16d8e8d74d48240a6c2bff07c4cf200d0f6d50419" + "0x02f86a870c72dd9d5e883e81f001088252089484e75c28348fb86acea1a93a39426d7d60f4cc460180c080a01e30abbce6dc782012eea990165f7b02747ba70b0c723f37ed8cd9798ee051b5a069bd38061c66a0605b2bd6dec21e0feff4604ffa7c0562cf735c5a095f2cbacc" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -6366,21 +6421,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xabf8b8c18e738be05befb8682083d8212b57c009c599b65535c4a7f47930bfa8", + "parentHash": "0xf3574c46ee7be2f327b4c968186b9cba6ce8bc43cac0917119e3226630ac2e40", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xcaba00e546f770e334b071bdb4d3f4ea77da9722b5bb0c7a0a865d8abd661c97", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x80b41a6c60d2170decdefb74572e5452246657529a32a9ede6c14a73215b993f", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xca", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x7e4", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xc61c8872972b975d28191544f7200c3f3684a9e152c87f626b6c85aa56af4a22", + "blockHash": "0x4b92c1e975dfdc44423fea09f15c0b0f6cd94b52f75eadaf500817dadfedc05e", "transactions": [ - "0xf86781ba08825208947435ed30a8b4aeb0877cef0c6e8cffe834eb865f01808718e5bb3abd10a0a063c98b14032fb2c822eb17147b7063eb5c85bb109db346745c9686f12f56884aa0730758544ae9aa1dd644331ddca4a97df3a5cc880fe78c433a80877756440deb" + "0x01f869870c72dd9d5e883e81f108825208947435ed30a8b4aeb0877cef0c6e8cffe834eb865f0180c001a069d90c3f5ad35ea13b207c3c320c16387cea3db454e625f0837e315e7064a377a06f6640758b45d8d313870e0244e026757adfac8afe22afc443478390488ef0ac" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -6397,28 +6452,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xc61c8872972b975d28191544f7200c3f3684a9e152c87f626b6c85aa56af4a22", + "parentHash": "0x4b92c1e975dfdc44423fea09f15c0b0f6cd94b52f75eadaf500817dadfedc05e", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x8f04f9a48e73c999528f2cf1176cd4b3d3029d20066292517fe649c0cb705624", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x6710a5c1a72b3e069b6ed71011bf5f7345dbce0862c383ff43a5bf797ca65eca", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xcb", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x7ee", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x1e7e2004a340707d31625b7ac9ea03d7add6dddfa7c32922e6222147b86aa4b6", - "transactions": [], - "withdrawals": [ - { - "index": "0x11", - "validatorIndex": "0x5", - "address": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "amount": "0x64" - } + "blockHash": "0x5f7c14e45a99709c6dd5b99043f115777e3fa2aff9baea04e819c8ea1d49ff4b", + "transactions": [ + "0xf86781f208825208947435ed30a8b4aeb0877cef0c6e8cffe834eb865f01808718e5bb3abd109fa04dc3febffa0fb3a85d3f7b6b04471b40f9b8ee4752919fd7eb275ab26a7e6ceea0118961b62ac804bda39a47c2fd2bb14cd20ab3f02d5d3c7857482e20c43d0703" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -6433,23 +6483,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x1e7e2004a340707d31625b7ac9ea03d7add6dddfa7c32922e6222147b86aa4b6", + "parentHash": "0x5f7c14e45a99709c6dd5b99043f115777e3fa2aff9baea04e819c8ea1d49ff4b", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xb5e6b4f20465ce1176c50efeeb839321c9c4e8094097f7f7108b6c133dd62dc7", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x9084f2e6fa64e170542a90022d0b1afb798b5e041c64c4d9060fe0d2fae2c4f3", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xcc", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x7f8", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x13676db30bae04c5f3b7f190e44e72d1c1b1299567e9e3757603554f30ff45f5", - "transactions": [ - "0xf88281bb088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa019a238a4412caee8f29267c4c04a9570f4d39d62a947012241b6f44e13f75caaa0783f12ca97199c3ca3165a6756de7e8026f49c4aba3753d5b03557938dbf44fb" + "blockHash": "0xa6a548359521b4b239f05fd8001e74c3cdec873dccbc6e9d558942720219436c", + "transactions": [], + "withdrawals": [ + { + "index": "0x11", + "validatorIndex": "0x5", + "address": "0x84e75c28348fb86acea1a93a39426d7d60f4cc46", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -6464,21 +6519,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x13676db30bae04c5f3b7f190e44e72d1c1b1299567e9e3757603554f30ff45f5", + "parentHash": "0xa6a548359521b4b239f05fd8001e74c3cdec873dccbc6e9d558942720219436c", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x171d9a961fefe91fd1792a751cf4fde90239576fa142b5bd9f588ae9d4d896ce", - "receiptsRoot": "0xa04c112180a3fffdcc1655e8f47a8103a63799fd47aa23ec9b102d827ad96ce3", - "logsBloom": "0x00000000000000000040000000000000080400000000000000000002004000000000000000000000000001000000000000000000000000000000004000000000014000000000000000000006000000000000001000000001000000408000000000000001000000000000000000000000000000000000000000010000000000081000000008000000002000000000000008000000000000000000000000000000002000000000000000000000000000080010000000000000000000040000000000000000000000000010000000000000000000800000000000000002000028000000010000000000000200000000000000000000000000000000000000000000", + "stateRoot": "0x1e670194ebc744dd6b0999f3f8cb20b3043dd3225da24ce3585c6a5bcaa73f21", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xcd", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x802", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x20836fb907f186aefcdcb5764e3d7c48fcd1b16bc98b967edd65b354e68a3e79", + "blockHash": "0x2fda609eaf660679f823fb4376c4bd0cadade83e2fe577f82d1ab3d9f0f42699", "transactions": [ - "0xf87981bc0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa08a8ec366f0bf0013e493ef12013a96ca99ac07150b9b7df31d5d97a634e428c9a030674d41ad2c7628441bd42eee190439577b04f2e19e5193e8290b4f18cad676" + "0xf88281f3088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a02289959547b578eba29dfa0768eae6a5a0f8b7d99462d204107f2686027e90d8a02713d89b93092db05cbc9a9b84afb226fffcdfceacb312dab91431ae251af3f9" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -6495,21 +6550,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x20836fb907f186aefcdcb5764e3d7c48fcd1b16bc98b967edd65b354e68a3e79", + "parentHash": "0x2fda609eaf660679f823fb4376c4bd0cadade83e2fe577f82d1ab3d9f0f42699", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xc6f62b62137ceb0a14ad1b3fde8fa84c7aa3817990780aeb851e34068f9e169b", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xc862aa6db897c9f52cc4720788ee061436ea3f10bbc8409d6e65185d94352c93", + "receiptsRoot": "0x3f561108b42b5d639e72338a2c50305f093b051318915b07bbd00898dc95b39f", + "logsBloom": "0x0000000000000000000000000000000800000000080000000000000040000800000000000000000000000000000000000000040004000000000040000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000200000000090000000000040000000000000000000000000000001000800000002000000000000000000000000000000000000000004000800002000000000000000000000000000000000001000000008080000000000200000000000000a020000000000000020008200002000000000002000000000000001800080000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xce", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x80c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x5936f662e12c0f1b392611803d3cddbe33bb2d7605769956e334c560b372537a", + "blockHash": "0xa8551de9ee0942059b85b3390a4a8e2b4717e843f5338062877d9a125e1c5d62", "transactions": [ - "0xf86481bd088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa029e6e202c55f9d645b907bc215cd740d2778d6e9d804394013051e786b753969a0037d7a826d61cb0657e04993e66a822a5aba369a49cb548c74c822f50472cde3" + "0xf87981f40883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa00f01325060cdb378a59cdb1f33d728f6a97afa73faac18412da93354251e23b0a0778eb42239b79ccb8aea4921b4d37826c05753e963dfd8a84086fb9b54fe2a55" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -6526,21 +6581,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x5936f662e12c0f1b392611803d3cddbe33bb2d7605769956e334c560b372537a", + "parentHash": "0xa8551de9ee0942059b85b3390a4a8e2b4717e843f5338062877d9a125e1c5d62", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x16a2bf920aecbb10ddfa63e5b2401f42894e33699c457972c2dff7f8b352bbfa", - "receiptsRoot": "0x78163770546821afe0210ddf4d9b40d3ded121339b8329cac20c43d146e0e972", - "logsBloom": "0x00000000000000000000000000000000004000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000210000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x6fdfa0af2b35c52938735071dcc796a47a88984b36f4c4692d33966d070a4c7a", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xcf", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x816", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xfa49b5f47466644348d75c491db8ff92813c96fb5b3f4a4deaa02bc92e3e134d", + "blockHash": "0x1cd2293c5df7c51a36bc8527308cfde43dde547b42129799d3f9f94f4b2a5d8a", "transactions": [ - "0x02f8d3870c72dd9d5e883e81be0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c979e5a5fe124c246656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0d34d30c2584168001b907965762f784cb4337381aa8090ae36bc66bd515849b580a088110c04c0c6652f487085c6ceda215e70df1c33b1125ac7bcb0af5d489bdd03a054ab88f5af3d8f0dcfaff237bb154395d0c6a59814458a682fed5887ccdd70b1" + "0xf86481f5088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0acaf7d557190a46d89d405d0e8bddab4c67007976f47d7941d359b762419c0d9a0700a188d7fab3f77f68b79258b9fad4ecc01fc029ed4fd5186eb07e35df103e4" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -6557,21 +6612,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xfa49b5f47466644348d75c491db8ff92813c96fb5b3f4a4deaa02bc92e3e134d", + "parentHash": "0x1cd2293c5df7c51a36bc8527308cfde43dde547b42129799d3f9f94f4b2a5d8a", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x23c36b132f262810c3858b7e846e553e8c5b4157f0cc759dd4d06cc5b1e2acba", - "receiptsRoot": "0x039055b9ec999e72f11bd659bb792a736d3cc09a343ef525508c39e56c466436", + "stateRoot": "0xa44d0a46223e903d3168caf55f0230899f101c64a42cff41438b3d496bc0fe37", + "receiptsRoot": "0xd42cf506fa4fd2e3355607964d41795f80d5bab48586be0f46bbeb8ab4626634", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800100000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000009000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xd0", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x820", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x6cedc591e85ed32d70655274734b636e3482105a5e9d416e62ef1dda2ddd4a9d", + "blockHash": "0xbc42869ab3a2245d1c7a2d33a982c8696aab3d3c0f9dfa69d8be2d2cc9cf1d31", "transactions": [ - "0x01f8d2870c72dd9d5e883e81bf08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c8676dcf035dc0936656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a04323bceecd4ef7216d5b57b9dd12ecf03842ed56d87fe43d0959436f408f44c401a006d444f4f74e5eea0c3eaaa7254b1749c2620e613021fe3118fb522709af0d49a06893fc0e845a1bf821c0d571ca39aca9143876955a810d4f8c22dcdadbedc7b0" + "0x02f8d3870c72dd9d5e883e81f60108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c8676dcf035dc0936656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a04323bceecd4ef7216d5b57b9dd12ecf03842ed56d87fe43d0959436f408f44c401a0fb473a535de94722bba71f55061aae1314b7bc78cc1cb160f3bbc481c41ddadda04e09cdf8831c9e3bda3e24a64ef78bdf96a7b332d1d52cf577d74b2829dcd8d8" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -6588,29 +6643,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x6cedc591e85ed32d70655274734b636e3482105a5e9d416e62ef1dda2ddd4a9d", + "parentHash": "0xbc42869ab3a2245d1c7a2d33a982c8696aab3d3c0f9dfa69d8be2d2cc9cf1d31", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x270b9ee22c74c4a262b9a8d5bbc2d91acab5a3d227276856c5db8b57035ab2e5", - "receiptsRoot": "0xb19edeea01beedca72ba67077e0ec43a996a180c8a53de05e2258484987bc1c8", + "stateRoot": "0x4aaffc98ea6a7e916cc783b132dc537a600ba35c901871cfc507f899334351db", + "receiptsRoot": "0x251f5e2c4b0c5e3dd44fc865bd15c121286aa01ae089e879659e6718e90fe9c5", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000800000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xd1", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x82a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x53bfe21b477b2780bf2e1aa15b19710aa9bb5100cd7bb69c8cc3a881ae50ab54", + "blockHash": "0x8e8b607660e0016ba139872bc35730d2efe0426136dc7e32ef6091f2c72acf50", "transactions": [ - "0x03f8f9870c72dd9d5e883e81c00108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038ca2da1c555f06d1f8656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a05d7c0426d6595c1819b962730e5d2a44644703ebd960ec3ac51297ad937692f483020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a0ac9d964fcceb3bb9986d78e3355e6759b0c09aa500b94f8d45a56b387f4e0a9da043a7692fee848877dea8f525b33bfa8ce74fa83d23863b6089b9aacda57aff16" + "0x01f8d2870c72dd9d5e883e81f708830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028ca2da1c555f06d1f8656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a05d7c0426d6595c1819b962730e5d2a44644703ebd960ec3ac51297ad937692f480a0adfa1f7c4c15fe13bce3258149d900ad82ecaa1066f237a6456ec3b529237754a079eedcd2a684aee1a2b771a435b3186a5da0936c6089174e8fafbf122ffa836f" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0x6d7b7476cecc036d470a691755f9988409059bd104579c0a2ded58f144236045", [] ] @@ -6621,27 +6674,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x53bfe21b477b2780bf2e1aa15b19710aa9bb5100cd7bb69c8cc3a881ae50ab54", + "parentHash": "0x8e8b607660e0016ba139872bc35730d2efe0426136dc7e32ef6091f2c72acf50", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xfdac4f685bce039b15ebcf355bdea6d1bdcb23fd1fa61d5e605d92be7ffb65e5", - "receiptsRoot": "0xc82851acbbbc23f6dcb23ae872dbe441b63e88a28797c7f64d078f287f00aad9", + "stateRoot": "0x480608e954ad9f709e266ca8e840f66eac2f7ff838180c130b3e348bb1c99054", + "receiptsRoot": "0xba5bc7653da51e3500f74cdd416e4eedb5414648e374233de868ac67343e50d1", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000020000000000000000000000004000000000000200000000000000000000000000002100000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xd2", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x834", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x4c30c648a319319788200f7273f6de74e321f1796b01a2988f98840a11e307f1", + "blockHash": "0x85ad1ea8a6413676241be28adc37e9e9eafc7d7d92838f662f89e954b1946243", "transactions": [ - "0xf87481c108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c6cb6df52764cfebc656d69748718e5bb3abd109fa07b559e33b774aecd9aacf0286e66cf455b956de0d23d65e0890b6f8af7824e0ea07d0d6856bf3a5f25b3c38567f1e4c82b67fdbe1fec56883d1a311f858693aef4" + "0x03f8f9870c72dd9d5e883e81f80108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c6cb6df52764cfebc656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a04c3dffb6198347c61671fa1fafd5d80f384ab67a494f5c7bc7428bcb6ca5a44583020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a066a0c94f13a1f94614e0f1df0af17cd8652599496fecceb1a7e58bc545490efba0675eb1dc9602c18b7c1eec372e8ae3daa1dd5a3aeca1a89e52c85bc4d72aa854" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0x417504d79d00b85a29f58473a7ad643f88e9cdfe5da2ed25a5965411390fda4a", [] ] @@ -6652,21 +6707,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x4c30c648a319319788200f7273f6de74e321f1796b01a2988f98840a11e307f1", + "parentHash": "0x85ad1ea8a6413676241be28adc37e9e9eafc7d7d92838f662f89e954b1946243", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x5829a4e6c3ba50f94b040eebbd055206d5ff8549d0013b43359d680bf4581b62", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xce71f031bbf67f2695e759640a3940d1278f1bc7c6de271994bf84d3e657c802", + "receiptsRoot": "0x85b5286a8beb7cd62c5f621a2fbb6f9afd256c9ea0f0b7e10d3fcb8a55c80bcf", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000004000000000000000000200000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xd3", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x83e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xf490758a0266199a571a859efe170beefeb78de97d3a20328ac3d4bf07240fdb", + "blockHash": "0x43cc37e72c9060cd84480dc2b3ad47b73ae9d3153ef17aaee77426eaea98c979", "transactions": [ - "0x02f86a870c72dd9d5e883e81c201088252089416c57edf7fa9d9525378b0b81bf8a3ced0620c1c0180c080a0aef9e39d76c8457e0a7bb9c8756d1bfa6345f68099e474f8e30f3740a1d6ddfca06fbc5fba7e481cec9942305199b40aec155fec75b61945f4f9f9669e593e6a1b" + "0xf87481f908830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cfdcda6573c19394f656d69748718e5bb3abd10a0a0061608e071cc09a95aa321d3751fccb473d16626ab1626ace43d95f685ff49fba01e4c519dcaa3e93ab814cde795a6fa4c5f87f037558981f42438de11a3447302" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -6683,21 +6738,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xf490758a0266199a571a859efe170beefeb78de97d3a20328ac3d4bf07240fdb", + "parentHash": "0x43cc37e72c9060cd84480dc2b3ad47b73ae9d3153ef17aaee77426eaea98c979", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x9fa6c6e9301b88853215e45c7486e03668c41923a9433035600c6774c3f70ac1", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0x7dce685a8396403165e98bd384df9ecbf5d01f7e564a347c71cfbdb3deb02c28", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xd4", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x848", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x0a1e9c1d1ad91f4d574599fe8247974beb2ab68c78b43cdda303870ede057f49", + "blockHash": "0x52cb7c3d0a4baf4b97c814f69a29ce7efd02b30063caeb4dd25182e4945f9443", "transactions": [ - "0x01f869870c72dd9d5e883e81c308825208942d389075be5be9f2246ad654ce152cf05990b2090180c001a09c5619eb9696478f17d50fb6170ee50d8af515c6cbd08e108487c4f3777211aea05db82c382e1cf0861b97e06484e0a3fb71dccfeba88b69d211a8782962b7cd2e" + "0x02f86a870c72dd9d5e883e81fa0108825208942d389075be5be9f2246ad654ce152cf05990b2090180c001a06a4620766ee6615712cff89a149f4a1d4af61e13971ed8217cf05b3c84266b89a007a1673bc56c3298d9ec061ec32cf0b35be7d8a7d18ca2b122e3f8a9915a04e8" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -6714,21 +6769,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x0a1e9c1d1ad91f4d574599fe8247974beb2ab68c78b43cdda303870ede057f49", + "parentHash": "0x52cb7c3d0a4baf4b97c814f69a29ce7efd02b30063caeb4dd25182e4945f9443", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x7acb7b8b3870b4776f57a820b541ae9bde134f1d1972ab0294e2e66ac60e6736", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x7c30f7a61d25d256743ddc4f767bfe647c86218e1e04e0e81a378ddbffc2cd83", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xd5", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x852", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xd89a67d59bfca6ef7942ef28cb121005dfd9c18b404a8dfb95e7c4d1b405a87e", + "blockHash": "0x414140870ecffda2fd30789856025aeeeee6ed2d339c89b09142a80b5d02b2fc", "transactions": [ - "0xf86781c4088252089414e46043e63d0e3cdcf2530519f4cfaf35058cb201808718e5bb3abd109fa08e1059084e07382e7c3f645d2adf302436c9114e70e26b5bdbfa2adff7dbd48ca03c3d1e78c1a4db22758155af5ece83f71158ab8163f9066b651745a186872fc5" + "0x01f869870c72dd9d5e883e81fb088252089414e46043e63d0e3cdcf2530519f4cfaf35058cb20180c080a0ea7f055ff679356b6bbc372e259d1f107d08db148907f27c2e1287bc0e0ab595a01ff11cc25aab1db903fbe7a5a12ca3f0a15551f92df97c0619e875fe72984da2" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -6745,28 +6800,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xd89a67d59bfca6ef7942ef28cb121005dfd9c18b404a8dfb95e7c4d1b405a87e", + "parentHash": "0x414140870ecffda2fd30789856025aeeeee6ed2d339c89b09142a80b5d02b2fc", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x981e76609731467dfeeb081989c54862b48595f14366b0717dad9ce88d967997", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xd0ddf082a0315b3a2fcd6256c25ea67d747fb54b237dcdf8ffc431286c68cade", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xd6", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x85c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x44e4a64750e4c9f6511df524c16e9cb23554a89325cf503b74f8f25f16253cec", - "transactions": [], - "withdrawals": [ - { - "index": "0x12", - "validatorIndex": "0x5", - "address": "0x84e75c28348fb86acea1a93a39426d7d60f4cc46", - "amount": "0x64" - } + "blockHash": "0x6d091cc14eb2771eda246d6c98884ca88b3e9c1193f9b1094786e7ac38615d0f", + "transactions": [ + "0xf86781fc088252089484e75c28348fb86acea1a93a39426d7d60f4cc4601808718e5bb3abd109fa0d12da3e860c37ac15537560dc07ea48946855a3dcb2045f27bb14034ad34e7a6a05c6a3fdcdc7318b687ae69d8fe93217851dda4df774c487d0fd025495d81eeb3" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -6781,23 +6831,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x44e4a64750e4c9f6511df524c16e9cb23554a89325cf503b74f8f25f16253cec", + "parentHash": "0x6d091cc14eb2771eda246d6c98884ca88b3e9c1193f9b1094786e7ac38615d0f", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xd00459f2dd9d486fd22a4c2a34cf9793da5a6b76b9020e151db7db7eb402e5f5", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x87180f17e7aa5d9be9e242e7f923bdfb1b095d8774047d3b56ec932625df566d", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xd7", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x866", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x9a379148fa0512b767d90e2a9a20248c6c19441d7f9284b00f802de8d40c5404", - "transactions": [ - "0xf88281c5088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a029fc410923581507d7291574037a67f6e1eac9f100ffdce835f42d20fa508971a03d3e1a36a3adcc64bc95d036c1335989bd3cd8810a7009fe910d469a0b384b0c" + "blockHash": "0xc2c1970e54d67656e78c75f59b990d4a682800dac92f32e35bbf5c9f4123080e", + "transactions": [], + "withdrawals": [ + { + "index": "0x12", + "validatorIndex": "0x5", + "address": "0x4340ee1b812acb40a1eb561c019c327b243b92df", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -6812,21 +6867,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x9a379148fa0512b767d90e2a9a20248c6c19441d7f9284b00f802de8d40c5404", + "parentHash": "0xc2c1970e54d67656e78c75f59b990d4a682800dac92f32e35bbf5c9f4123080e", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x3dedfe9b872cff7e3a73dc6415b388469f09609fc9b9ea8e87d988f3acdb2c40", - "receiptsRoot": "0x44356f2265ddbe65555b4b95e21c7ef48964641e03ab3082353b07d9078f8f51", - "logsBloom": "0x00000000000000000000000000000000000008000000000080000000000000000000000000000000000000000040000000000000000000400009000000000008001000010000000040000000000000000000000000000000000000000018000000000000000000000000000000000000000080000000100000000000000002000000000000000000000000000000000000000000000000000000000000000000004002022002000000044000000040800000000000000000000000000001000000000000000000000000000000000800000000100000000000000000000000000000000000000400000006001000000000000000000080002000000000000000", + "stateRoot": "0x9ead26372087738f0a82c760bf0f9f43dcd72e44b65d094a9b53ef5ce38d0227", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xd8", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x870", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x96ce02bc5a0630bbf7d4c1340ff68ba3cbc53a401d8ced01339937d2d764980e", + "blockHash": "0x9869f9d317befc2be06e35c4bb421b2f70ee3a551da726ac450fbe5683e175e9", "transactions": [ - "0xf87981c60883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa030a9d121bc9e2cfecc1898c345a758637c76cd12bff359a9fae9fa5fd4159ca5a079825054df53269360ab9971dbb4fdd41654d53af7ea4b63a9649138e499326f" + "0xf88281fd088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a0f07ecb99ca6e3f73e8d15bbb95529e9b6889f7f9a879d2287bb7e15f7dcac49ba0487bc2fddd49b63ac5e1c05e9dd58319163ef2be8e6be6d808aaa82171a95c92" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -6843,21 +6898,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x96ce02bc5a0630bbf7d4c1340ff68ba3cbc53a401d8ced01339937d2d764980e", + "parentHash": "0x9869f9d317befc2be06e35c4bb421b2f70ee3a551da726ac450fbe5683e175e9", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x2befec4b322b55dd859c81bafc76ee06de698ba0a0e1a80100dfc52ecf3a5da9", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x0df6593528615a46f29a840e91658bc09028b232ff4d02b0fc4c889e0f188b1e", + "receiptsRoot": "0xdaeb5682484dc43ef26215a9aaf64a787fc4388eaaca288d11e605f4eca59e1e", + "logsBloom": "0x0000000000000000000000000000000000200000000080000000080100080004000000000000000000004000000000000800000000000000100000000000000000000000040000000000080010004000000000000000000000000000000000000000000000000000200000000000000002000000000000000000000000000000000000000c000001000000000100000000000000000000002000000000000000000000000000000000010008000000002000020000000000000000000000100000000000008000000000000000000000000000000000000000000000000000000000000008000000000000088040000000000000000000000000000400800080", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xd9", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x87a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x41eea349b7529f1465e872f4eeb3958da339bd18193b9055d1f77649b5b5a8b1", + "blockHash": "0x6cd3151a665feb73ef2fd1c09b2ba1dd622e424cf8d437491f67d7acea386a25", "transactions": [ - "0xf86481c7088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0cb1af42d19318f59a0ac8d3cede5c0676a469b9321ba05d79b399c6f797643baa028a8a87701ac2d081f04455ad349560814f8587a534598361d105c7abf886af7" + "0xf87981fe0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0484f9c198cee5bbdb572ac3000910d183ca76e7a0a7728f7e8c387ca592a194ba05963cdec459e60452eba1c8a91a102e59751ed71cbd061efeb41b107e7fb5758" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -6874,21 +6929,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x41eea349b7529f1465e872f4eeb3958da339bd18193b9055d1f77649b5b5a8b1", + "parentHash": "0x6cd3151a665feb73ef2fd1c09b2ba1dd622e424cf8d437491f67d7acea386a25", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xa59cae76341e126fdd5fdefebd48eaa5a60c0545051f79d5cdbb3fbcfe96ab37", - "receiptsRoot": "0x7336229ff06445fc64883e750bb07c2ac1556b12458cb4981ea24c2fefde5c07", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000", + "stateRoot": "0x33ef2451a664c8d76e1ea636fd70fafc878a7789b182c93dc03ab7b5c99745df", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xda", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x884", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xecdbfed50e09e8bea9b23b0c056b9ef72bd724fd104590fdccfed99e26401a78", + "blockHash": "0xf12671c7915ba944f549618aa1a618c58890d1bb1374ba0d5bfe9a1d219d4e10", "transactions": [ - "0x02f8d3870c72dd9d5e883e81c80108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028ca593b76d11072099656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a03982f6a73961b17f67a84959ebc42a5a3ebdd1faa925399f3f276cc2de65f2fb80a0d670ad4d51a872c140a4fe0209330c2e44232837dcb8ab09afff5fc171348c9da04298e929bef7c3d15e8b40dcc6046337ca4e725704f513c2e84286e67f8b7b05" + "0xf86481ff088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0096dbe957c596a1274724cb8a26e91c4d0a5988acc6c4d71663631e2003c975ea06a37dd9cbf388aed02bc4c4798716068e9b5fff60f5f663a38846d109746fba9" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -6905,21 +6960,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xecdbfed50e09e8bea9b23b0c056b9ef72bd724fd104590fdccfed99e26401a78", + "parentHash": "0xf12671c7915ba944f549618aa1a618c58890d1bb1374ba0d5bfe9a1d219d4e10", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xd3d3012407a941194dba4e6a98cf30f376facbea5142628a3ea5606967259d43", - "receiptsRoot": "0x4c08bb651446370eb08574678f4868ba4e705afaf09438505c2ec10b6fd39ace", + "stateRoot": "0x5cea96ea8b8dd8cc17ea87b5d131fee80c3508fd9b4f15fd00b1fa0df6fbaf7c", + "receiptsRoot": "0x79bd13afbabf9625dc7470703ed2e7c638bf975d014e2cadd1a11155a50a7008", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000008", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xdb", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x88e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xfa439516704748050ea45b059aad351048e40ae85f495fd0ec4e77c34a02325f", + "blockHash": "0x2cc973d866118aeeb5d5a45bbda5f59f56d1824d01605eff38bde4ba082a2953", "transactions": [ - "0x01f8d2870c72dd9d5e883e81c908830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cce282565ecdd5bc9656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a081607ef8d6fd479d2d0f55ec50762ee5fc35883ee5600525ce1e9ef3398d5aa501a0c3c70831d5587c9351e2459dd471faf12422892116d4c8d42b9a63243d9606d9a07300a31913c6ee1498e1f4eb9bf30503ccfe418b0d48dcbd01ab9cd342882f65" + "0x02f8d4870c72dd9d5e883e8201000108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cce282565ecdd5bc9656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a081607ef8d6fd479d2d0f55ec50762ee5fc35883ee5600525ce1e9ef3398d5aa501a043097c04f7681d47ec224343d8a8a5558814dfb7460a998cf76d8391d00b8a2fa067abff87ca6315bce87430aa9c8d8e1996fbe1cd7723f494253354e33f755e88" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -6936,29 +6991,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xfa439516704748050ea45b059aad351048e40ae85f495fd0ec4e77c34a02325f", + "parentHash": "0x2cc973d866118aeeb5d5a45bbda5f59f56d1824d01605eff38bde4ba082a2953", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xa9888352cf098a936c7ca1bd6dcf29c67a1269911598a3ad2532349bc1878095", - "receiptsRoot": "0xae08072b6df3427088c5c0fe33f7d710b6536f08bcbd142288632314b8757901", + "stateRoot": "0xbca1b202e9a17426e5ae61f7ad2d3b503b2180cde0e6736b34e3d818d1fd6e78", + "receiptsRoot": "0x19a448cfeccf7b829cf2af44a4c5575f12b2872abf24705826ec1f2523284bc4", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000804000000000000200000000000000000000000000002000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xdc", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x898", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x8967b48c91a9a3ac039752dc1b0b5c091e38b28635f934949604b9ad0e2017e9", + "blockHash": "0x633313f0428dac31c59a736f610f5da75f22d0c2ea8d112987c918c7405c0440", "transactions": [ - "0x03f8f9870c72dd9d5e883e81ca0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c7c3a8ef48b3cebe9656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0e207f028cce1624a1fc76c56f1794c2704a692c1f214685291d618e40733ff1b83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a051c209d8f78486a77a18312b2a8d08bb75d4a5add1c8499c9683a1a798bd9da7a00faf9bffc5ebaa9f6e1a348321daaabcd83479aa3e844d01d583a4d1a5595030" + "0x01f8d3870c72dd9d5e883e82010108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c7c3a8ef48b3cebe9656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0e207f028cce1624a1fc76c56f1794c2704a692c1f214685291d618e40733ff1b01a00174c0a739a6f4744c6590a84c6b65616b2fc9e9d61747c29f63a30fd16a35ffa0403d478c44f9fad1dd7ff6e514a211e095cbfd97d880f6ba65248f8069928fd3" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0x36e90abacae8fbe712658e705ac28fa9d00118ef55fe56ea893633680147148a", [] ] @@ -6969,27 +7022,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x8967b48c91a9a3ac039752dc1b0b5c091e38b28635f934949604b9ad0e2017e9", + "parentHash": "0x633313f0428dac31c59a736f610f5da75f22d0c2ea8d112987c918c7405c0440", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x0103e3b78da1bc9f87e6c73115cca698b429eff7aba71492f1f64d551a56a857", - "receiptsRoot": "0x058846f9ac88fafd60b7a79014917afcf9b3015dc0f98a5aa3ab58700bc35cf1", + "stateRoot": "0xff3498c0882d17bdde653eac3785d898e6799bab863447e537a4baa61425e6d1", + "receiptsRoot": "0xf791bb85f6463471b2e9f6760696edbaa8ce005016d56e8455620c102a85f97d", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000020002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xdd", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x8a2", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x4a6fe8bfb3d8209f060b20fd83362433e87e45b6059450ecd92207e5bb4bbdad", + "blockHash": "0xab9619afd1e6619dbab5761d6fc5da9a0fbf8b6489fb96eb864e687bbce7952a", "transactions": [ - "0xf87481cb08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cf2b2ffddc2dde581656d69748718e5bb3abd10a0a020d836af511621c71c81861e9c0f57225cfd85e18ec6b35ed22a285e3b51f8e2a03d6ee47e8e5d7d5b239153906a7129278cae4941edc1d80ee1116e56c9a4c7e3" + "0x03f8fa870c72dd9d5e883e8201020108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038cf2b2ffddc2dde581656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a08a38792846734575025e5114061b62006064b0636caf6733294eb26895bda2ac83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a02abcc99a781c0f7361e7f522a801f831348da0a9fb22421d11c76c9d49a0e431a07acf8b832d0171a0227738295de6d5854861e05a321660d2470ac9a3c50fe41d" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0x164177f08412f7e294fae37457d238c4dd76775263e2c7c9f39e8a7ceca9028a", [] ] @@ -7000,21 +7055,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x4a6fe8bfb3d8209f060b20fd83362433e87e45b6059450ecd92207e5bb4bbdad", + "parentHash": "0xab9619afd1e6619dbab5761d6fc5da9a0fbf8b6489fb96eb864e687bbce7952a", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x01cb1e199169e38b74db5252fd7c4e85a1c3c434cd4ee9175f41923b28317d41", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xcd03023d5fd58e2b8d999c16360f778338eac694840dcb6adcc8f90a0c849192", + "receiptsRoot": "0xafd49c477f051880c7aa55ee362f5bbb56c937b1404f08f5c35e3ca9fbf5c734", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000200000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xde", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x8ac", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x58f4f818948eb949af6ebbe9c9922a6742c45eb6c60cc272027488d0d0fb8207", + "blockHash": "0x827cf63f6f1bfebc2c18dc37c641eb9038174492ce580fc881027cbd447dde09", "transactions": [ - "0x02f86a870c72dd9d5e883e81cc0108825208944dde844b71bcdf95512fb4dc94e84fb67b512ed80180c001a033bfa67c45c7321f9c73581990967d07c95309544419108b403b1872567fc5c5a02f15eb8aeff6e7295cd5a48666b0db706fe17c02d590d4a29ec041af67aef794" + "0xf87582010308830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cabe108b68cb3921a656d69748718e5bb3abd109fa0c0a89bb8e4d7ad8bd04b96d0d7be1ffb0fa0b3708e941779034f8b7fc0e8224fa04e995d47759a912b21e632b3efae2104ed0946a2da7e32135db5df622ef33c0b" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -7031,21 +7086,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x58f4f818948eb949af6ebbe9c9922a6742c45eb6c60cc272027488d0d0fb8207", + "parentHash": "0x827cf63f6f1bfebc2c18dc37c641eb9038174492ce580fc881027cbd447dde09", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x6321fb11cded8d0f04d07ae0cd09591a76b1f645051ff9c38c8482c5c5a734ed", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0x5e23c4e8ec85e768ad515d8ad0f274fdfc0e2db2a98a4f7726859680a78cb337", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xdf", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x8b6", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x75150cd02c717d33df03986668fca9287fa715ae9b3dc786e9a012689cbb4f2b", + "blockHash": "0x17c4a736b0ea52a0a4f64166d211b654d10c8a6b316b7a3d151c84f1afbe2cfc", "transactions": [ - "0x01f869870c72dd9d5e883e81cd0882520894654aa64f5fbefb84c270ec74211b81ca8c44a72e0180c080a0e4c3a90362ec63060f76c892b83612c948dfdd1de2737c2239a052597e8284eda01411079de57054dba22fbf68440b0532614dda48338f16aba134c921308f3c58" + "0x02f86b870c72dd9d5e883e820104010882520894654aa64f5fbefb84c270ec74211b81ca8c44a72e0180c001a02c4661994899245f1f7161c24e6476e42cf57379598cb20cc7a08b75a1673672a0377e496dd0113a554708d7c43244625559fab193cf18ee3b3edae331f9f8deb9" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -7062,21 +7117,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x75150cd02c717d33df03986668fca9287fa715ae9b3dc786e9a012689cbb4f2b", + "parentHash": "0x17c4a736b0ea52a0a4f64166d211b654d10c8a6b316b7a3d151c84f1afbe2cfc", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xed039258f8abcd18b3eb25a20c2ed8798ce6dbcfd9cc3220a5e611a886388d40", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0xc4d5ad6932daaf18ca694faec40edc097895ddef0909be79e3231f30ab039e3f", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xe0", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x8c0", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x4b087119094ef790b1981596fe9adfed930802ffbf33a9b5f91cf06b36aac5cf", + "blockHash": "0xc7d92e27e6635446bbbf148991143322dfee51d0c6923abdfe69a9661aa51f3f", "transactions": [ - "0xf86781ce0882520894654aa64f5fbefb84c270ec74211b81ca8c44a72e01808718e5bb3abd10a0a0876a442f175fe09eeb195fa0a9bf7d7fd0b81017cf723c52d4e46a2d8d4c55fca07c3d774813ab31a2d4bb6f07267865be0d0dd7cf05512ff5ecc86c10532b696f" + "0x01f86a870c72dd9d5e883e8201050882520894654aa64f5fbefb84c270ec74211b81ca8c44a72e0180c080a0d097876d7e2f660c01f19ad07b26bd4fa4ff1f4e21ffce5ee20a63b39f59263da018f3047c40bc77768b6b81ec939400d56a4afb151403ad33686528bd7fb3dba9" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -7093,28 +7148,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x4b087119094ef790b1981596fe9adfed930802ffbf33a9b5f91cf06b36aac5cf", + "parentHash": "0xc7d92e27e6635446bbbf148991143322dfee51d0c6923abdfe69a9661aa51f3f", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xfb1c2e225033ea79370ea89f66289c2fe60fcad15cc0cc2f0e44b0f538540c6d", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xf5fe34d46eb9d7c1429d565d8aadcc47fdcd088720899bcfd735ec4c9fb46ddf", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xe1", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x8ca", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xf7c7c5456af3ba05c94cd1d23c70ac90ea4b79b78e561045c649b08bfdaae321", - "transactions": [], - "withdrawals": [ - { - "index": "0x13", - "validatorIndex": "0x5", - "address": "0x0c2c51a0990aee1d73c1228de158688341557508", - "amount": "0x64" - } + "blockHash": "0x7fd92767aad5a519ab7a1ee8f06e62a0869042dfaf4aba3b9e47037667137147", + "transactions": [ + "0xf86882010608825208940c2c51a0990aee1d73c1228de15868834155750801808718e5bb3abd109fa0ec1d50950b085d1abcd0edad527bc1dd6896a4ef8008a5b05bfeddcd4c86a664a01872d9a9283c4a11e2e017b5f22919b71f12a25480aa6a20b862ec014bb7f794" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -7129,23 +7179,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xf7c7c5456af3ba05c94cd1d23c70ac90ea4b79b78e561045c649b08bfdaae321", + "parentHash": "0x7fd92767aad5a519ab7a1ee8f06e62a0869042dfaf4aba3b9e47037667137147", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x52e80785d861bf8a6cc6be5dd4bfc993448cbcf27df9a3eeaca02e933e60b0fd", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x1dde1f32d73de2474f924f4693731db2140ff9b6b686a42f873d48147020847d", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xe2", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x8d4", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x918ae7ac657fc84fc8cb10dcb3794f22ee74635bc3c48a09447f82525c8b4cff", - "transactions": [ - "0xf88281cf088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa0d9bd9ba3bc4d8d9712cf4f58d49cd71c1e9d160c4283af86642828cb29a86881a078ed288cdb8c0bb6c587538b05a2960ac5dbbe5372a6d4a30c415455279b6123" + "blockHash": "0x508e549615fc6041f7c0737e69a19b2a78954a3b2e401c1e6cdfcd065f591170", + "transactions": [], + "withdrawals": [ + { + "index": "0x13", + "validatorIndex": "0x5", + "address": "0x16c57edf7fa9d9525378b0b81bf8a3ced0620c1c", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -7160,21 +7215,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x918ae7ac657fc84fc8cb10dcb3794f22ee74635bc3c48a09447f82525c8b4cff", + "parentHash": "0x508e549615fc6041f7c0737e69a19b2a78954a3b2e401c1e6cdfcd065f591170", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x7f06aab010cf4664949f79c5df9ee9b20994444245a8c62f7c284d9947303dd1", - "receiptsRoot": "0xf6c2782752ebf597acafad6abf0e6202a2eb97b2ec68517799c69bacf47d86d9", - "logsBloom": "0x00000000000000000000000000000000000010000001000000000000000000000000000000000000000000000000000200000000000000000040001000000800800008000000000804440000002000000000080000000004000000000000000000000004000020000000000000000200000000000000000002000800000000000000000000000002000000000000000000000000000000000000000080000000000000000000000001000000000000000000000000024000000000000000000001020000000000000000000000000020000000000000000000000100000000000000000080000000000000000000000000000000000000000080000000000600", + "stateRoot": "0xda7bf74c9af8065830e837aa77b89ef9403692755ea65faab697c9ec7960a65e", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xe3", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x8de", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xb77cf24f0c1fb354f7bf7c80e1804fdc2328774a1af50eb7959a46a8fe51a590", + "blockHash": "0x380fa604fda76b136b8d0cd29fdd1d4d947c90d328e70679c89d25fd46e30e20", "transactions": [ - "0xf87981d00883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa098f00f0dd1331f7d9de3cf956fe0464b2e0984cc2262b81128a7507572839978a0561657f3d9e0be3d34aaa3b6087cb9055eae540180ea81358be1c7d9cf1a3be8" + "0xf883820107088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a05dd8a8d661cd961e55957d672db81e05101fa822f0ac004ed49853a86071caeca03f56576f78f77226deb6a1e429a9ee442ae7b1d46881779f7cf9845425248784" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -7191,21 +7246,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xb77cf24f0c1fb354f7bf7c80e1804fdc2328774a1af50eb7959a46a8fe51a590", + "parentHash": "0x380fa604fda76b136b8d0cd29fdd1d4d947c90d328e70679c89d25fd46e30e20", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xaaa416970b533c6a6842c7930d502904027f76a8f862dd7bf57e1b7010960dfe", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x0249e268841392bf9fdaf916572f800d9af3df2c6aa664a747e49af6424d19af", + "receiptsRoot": "0xd70a5525f8fbf21175efafcb9acbda1a8d48b1896bd4cf23a8d6c1474c59457d", + "logsBloom": "0x00000001000000000010000000080000000000000000000000000008200000004000002080000001000000000000000000010000000000080000000000000000000000000001800000000000000000000000000000000000000000000000000b00000200000000000000000000200000000000200001400000000400100000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000800000000000000000000000000000000000000000000000020000000010000080000000000000114000000000000000000000040000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xe4", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x8e8", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xb3317abdbcc0bdc256a422a5c333572f99ff8651f095922cdd5b995b44185a49", + "blockHash": "0xa3e71744d3faa5f9827963a5f0d659487a2d102a538122e75395ec771100c68c", "transactions": [ - "0xf86481d1088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a04569e675422075ad4ebd160dd8022e55321509fdbe93f360b3bd35db8104400aa054a06595c32949d3b1baa931e20ca03839c15311c83489df49a9edd73ff409ef" + "0xf87a8201080883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a039291e6b998bc1d7a27a5cceb0045691058a4e921bb821d41618e742e432d66ca05a2a31d95742ffe4689a40e948e01edf3c6e75aa38b4bf8cec5f2445058fdcce" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -7222,21 +7277,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xb3317abdbcc0bdc256a422a5c333572f99ff8651f095922cdd5b995b44185a49", + "parentHash": "0xa3e71744d3faa5f9827963a5f0d659487a2d102a538122e75395ec771100c68c", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x8a5e1328b9170468421131678aff4a27c60534242f9ab63212e3b38fa255a58e", - "receiptsRoot": "0xb75a29ffc033968354f87e14e356ca2f90c49c9f3bcbc6224261c048498afe00", - "logsBloom": "0x00000000004000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000", + "stateRoot": "0x2af21bb17b0fef2cfd313f9c6cd140bbea1d7890d5ddcec58ea0463936302c7b", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xe5", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x8f2", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x3958180bd85edf4b17cf80881d40b68216a23a2dbadb92fff52757661070ec35", + "blockHash": "0xcf2f9ba00e585e8346fe60f6bd23d83f81f57b272f3d7ee803aec61e3b66973e", "transactions": [ - "0x02f8d3870c72dd9d5e883e81d20108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c15314adb38ad874e656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0782a285a3a645a32202a71e713e4a813bbaef9f50ce10e4caa0122c110d86bf680a0524664d3bd0879e248a9ec4a8e1caaba5d51a5d50eb6bb9899be1c2b712a0b69a03df458a145f697af315e747b3dfc8fe53920ba921a5447a7313ee7bfeb3a125d" + "0xf865820109088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa089f115b1426cd5610145d87fc9df3c7dd27f55689e7cecb967bf1a5f88dc7d06a00bccc3cc4a1b7dcfbef0ae543a7ddeb2f131308635a3fb752b37c41506e23f44" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -7253,21 +7308,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x3958180bd85edf4b17cf80881d40b68216a23a2dbadb92fff52757661070ec35", + "parentHash": "0xcf2f9ba00e585e8346fe60f6bd23d83f81f57b272f3d7ee803aec61e3b66973e", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x31ccb550a59d99bfada2947f48481c5fb19963be2aa56fbb37f6b2f9da6115f8", - "receiptsRoot": "0x16b250651438c816ab67a4cf2fd473107a4b1bff0fff288d1f48d8cabd8267d0", + "stateRoot": "0xe1f9b9144e9dc8182d6530aec489863d8509ca6ebc136ae0c15e73acf9a44238", + "receiptsRoot": "0x59e63920eb582c6c1ae19664c57b68675b05075e549bdd56ac27d2fa7cdbe3b7", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000080000000000004000000000000200000000000000000000002000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xe6", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x8fc", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xb1503e5b89008f2ec7cf91492da840a6786f020d11cd33a8ebfd68ee824313ea", + "blockHash": "0x66730b682308530fd5172418ae2100a58c0c78d8e2a4cf3962f74bb5d08a2ad1", "transactions": [ - "0x01f8d2870c72dd9d5e883e81d308830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cf92aa615f9b4e91c656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0b36949b816cb2ec4ab90f345d0bed84f55b8fcbeffd22198724c45d8a30b20a680a0d5a6eaf83827edf2c33a97e9909dd47f64e6bac6ab6b343e840f8897df4e5b6aa02999286ada33637076dfc36acb4718a034bcab145843cc4d76eb1895ad8eb5ab" + "0x02f8d4870c72dd9d5e883e82010a0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cf92aa615f9b4e91c656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0b36949b816cb2ec4ab90f345d0bed84f55b8fcbeffd22198724c45d8a30b20a601a061ff9c4feac16a7f8ecc5df8c184e1ef1335cd485373081b0943d8e665386fc5a06351a12031ab5030ccd9e74fc17f06a4af327e4cd75dc5b96a3e9171ab461d3f" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -7284,29 +7339,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xb1503e5b89008f2ec7cf91492da840a6786f020d11cd33a8ebfd68ee824313ea", + "parentHash": "0x66730b682308530fd5172418ae2100a58c0c78d8e2a4cf3962f74bb5d08a2ad1", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x3df027b36c56a135b888b77de630950a40e69281e5be0eaddcec18db6afcbb16", - "receiptsRoot": "0x105f1535835d30dc0d749e0d4cb7d0c3d18e64e74e8f7e158695ce6d057d241f", + "stateRoot": "0xcc8af6749e2ed26a08d6095101170bd336ab1a8a6e62ce01f24b780811d0efc0", + "receiptsRoot": "0xc37260f445c9b53c029d62d3d2158e5afe0f66f526fcd9a27b46710027e6f483", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000080000000000000000001000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xe7", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x906", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x74b7c334b7e246ba4cbdb9a91cf69bf72a3491ca4e39c2cda81e39c080bbe720", + "blockHash": "0x4138427f2aaf856de7604cae4193f96636c73e0a8984e967f88eeb9cb9868235", "transactions": [ - "0x03f8f9870c72dd9d5e883e81d40108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038ca7b2474c2b69133f656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a018fbf0ae0e2133584c461cbd43169854c7c7e818e8b5779892da244f24d27b5683020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a0b4c11de109225403f2ed87e63a7eef36369da1db9fcf5fa469ad526bd948cee2a01ec6b85c41b4cc079ea1804ef0f7343edb57a71780fecdf5897b0285e2889788" + "0x01f8d3870c72dd9d5e883e82010b08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028ca7b2474c2b69133f656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a018fbf0ae0e2133584c461cbd43169854c7c7e818e8b5779892da244f24d27b5680a00de88175878b02e140c2e76f3fa2c6ea350b2115fb956aa96f8918d227fae23da072ce3850569847f9c6bd3b6a1ffc680c759e67b96690fa87308b5ab1a234fb0f" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0xb52bb578e25d833410fcca7aa6f35f79844537361a43192dce8dcbc72d15e09b", [] ] @@ -7317,27 +7370,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x74b7c334b7e246ba4cbdb9a91cf69bf72a3491ca4e39c2cda81e39c080bbe720", + "parentHash": "0x4138427f2aaf856de7604cae4193f96636c73e0a8984e967f88eeb9cb9868235", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xfa9de399a80e099e176e71ab4c1a0d628e21f1ebe37a100858b3ea6c1996f0fc", - "receiptsRoot": "0x95482d5c3c390e57fab959a9832bc6e46f7cc877207ccea7fbf81eab51318fa5", + "stateRoot": "0x7d4a41062a1ebaf74eb039e9ca60cfa45e8690a27384180f36064472aefec560", + "receiptsRoot": "0xa3f96ff7d0b57b15707ad579b78988215c35c11d442ec707893281de3dcb9b8e", "logsBloom": "0x00000000000002000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xe8", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x910", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x5e06576f385d64e5475da19a55db8a1b49a905e54cdd00bc833f9a6e0d1821de", + "blockHash": "0xff6c572142173aee3cce05872637e9fa20576e126122f8f096b26c2d7ab562ca", "transactions": [ - "0xf87481d508830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028ca3b82995153488b2656d69748718e5bb3abd10a0a07eae71aefd59e673c777592dc069c9500c2c9cbef7d64fada0a7f34516c5b29aa048780b89098362f47f20ebeb192901c96db681450badc981a2e3fe0266bad08d" + "0x03f8fa870c72dd9d5e883e82010c0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038ca3b82995153488b2656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0e70ed54757ba10a0b95454f6483d3d2e11613828f13d57d50b8a3a98e2c8df1c83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a0c60e26947a2dbf98447511e72332b2ca362b880fea4fb64fc03462b11b4ba092a038d4b9510bfef9146677f146fc8a1b3c5bc614e54ad5d9a4d6b4d2399cfbeb8b" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0xff8f6f17c0f6d208d27dd8b9147586037086b70baf4f70c3629e73f8f053d34f", [] ] @@ -7348,21 +7403,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x5e06576f385d64e5475da19a55db8a1b49a905e54cdd00bc833f9a6e0d1821de", + "parentHash": "0xff6c572142173aee3cce05872637e9fa20576e126122f8f096b26c2d7ab562ca", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x21f8e87041249c1ba465194c8b715ef58ec364a0b6018f13d524156bd563f74d", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xf80c6c2a65d77db9477b6f676680863460670fa7046e68e566a4ff9a7306f4cf", + "receiptsRoot": "0x647efb03cf0003f7b38e68d1ecc9fb1c211ce88915481adcdf5d3fb6d8c81eda", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000100000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000009000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xe9", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x91a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xcdf017d14aa10cc174c1f3f7d597eb085f52da7793e92fd8f84f0032009962df", + "blockHash": "0xfc3daf2feab4448c624c2b6de75cee4ba8555bfedb236a6dabd08625ee75fb8a", "transactions": [ - "0x02f86a870c72dd9d5e883e81d60108825208944dde844b71bcdf95512fb4dc94e84fb67b512ed80180c001a09f04acf081827c526e799759177320566ce80aeb5f40c64bb24fe9636c8de9c2a007126608b53aa815dd075c43c20ff4f8da9bab03923fe2c03f847260ea95617e" + "0xf87582010d08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c5bf69af19e2c4d7e656d69748718e5bb3abd109fa0c2503c301bf0681ea966f102db7699fa826963b8df17a946954326bb0cb6dbada037aa73c91078f86f187d56b09ef9d2ea8f48db84166ec5c49e78f78fb5ef6e43" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -7379,21 +7434,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xcdf017d14aa10cc174c1f3f7d597eb085f52da7793e92fd8f84f0032009962df", + "parentHash": "0xfc3daf2feab4448c624c2b6de75cee4ba8555bfedb236a6dabd08625ee75fb8a", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x1b33f7de0c2d5985d1b09d684947d984700f244819f685a91cb0cc45ee4724a1", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0x3285403b266677669b7500a603d1554194888122e7bc7184693687023540b695", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xea", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x924", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xd85b3616680a40d04d64e6ee0d1b0dfbf1967634ca82b0a38be88513a556fce6", + "blockHash": "0x56a716225b0c189b6dfe04eb8dd9012e50bab4fde5c850b3ac032b0bb74c5916", "transactions": [ - "0x01f869870c72dd9d5e883e81d708825208940c2c51a0990aee1d73c1228de1586883415575080180c080a0b74bdf8180bf53defa1de1178eab5ee3390868af0c625f4cd9c5e90703326318a03e4b8d27029ff92f18b8c5c9a11edf7a4656513af34736fc8d518ba7b793716e" + "0x02f86b870c72dd9d5e883e82010e0108825208940c2c51a0990aee1d73c1228de1586883415575080180c080a033a4673c9a8472f5a5ccc2a5de380f0fda913f9862c1586db4ec85045104f242a075d9175ffec2c56075f9656daedf1326c52ee8a96ba5d77be995fa8546bcd89f" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -7410,21 +7465,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xd85b3616680a40d04d64e6ee0d1b0dfbf1967634ca82b0a38be88513a556fce6", + "parentHash": "0x56a716225b0c189b6dfe04eb8dd9012e50bab4fde5c850b3ac032b0bb74c5916", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x35abc62183846924a22493fc22e165f8cc0b1a6d6cc11ec9150956b8b671a995", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x989911af2991818b56381d69809f0899154d0bc06c90160a4b7cc170e484b53c", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xeb", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x92e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xaeb7dd5da8baa32aeb4a33f9d87914815fa0c941f5bc08e595d4e37bfdae7025", + "blockHash": "0x5fb1bbafb479d9b6bb8f0d6a832717b2d585af05d70edc9938597e9c349ccb1e", "transactions": [ - "0xf86781d808825208945f552da00dfb4d3749d9e62dcee3c918855a86a001808718e5bb3abd10a0a077b27af56bab269e10d8c4120c827ea8a6e267e410dcc43f940ccb21aaf725aca055f4af3cb45acc78c5dd2ee9025229ea3c52dd746f032ca0f6e892ee1bb7aa39" + "0x01f86a870c72dd9d5e883e82010f08825208945f552da00dfb4d3749d9e62dcee3c918855a86a00180c080a06453186f6a9c55fb36454e34d41c27d13fc0049f5af658fa7490cc8362744190a0504fbaa0f5e9507b29e006587d014651b19bf2dcb8218e14d965236d548ffb39" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -7441,28 +7496,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xaeb7dd5da8baa32aeb4a33f9d87914815fa0c941f5bc08e595d4e37bfdae7025", + "parentHash": "0x5fb1bbafb479d9b6bb8f0d6a832717b2d585af05d70edc9938597e9c349ccb1e", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xae24678714258a0678a642f2019faee2b2a60be135f63c7216c65f266ffaa8d8", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xe584cc11999a6c0160d771fcdd009ca6d340893ec577572315234fc2c8f5bce8", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xec", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x938", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xd522a23cf0118178de9b0c94528f7161fa5f0e0c954ff141d86f7335fbed4276", - "transactions": [], - "withdrawals": [ - { - "index": "0x14", - "validatorIndex": "0x5", - "address": "0xd803681e487e6ac18053afc5a6cd813c86ec3e4d", - "amount": "0x64" - } + "blockHash": "0x520f6482328ec8e1a2d2f759d3718f9527046b4eec351d127b4d10920ae7c02c", + "transactions": [ + "0xf8688201100882520894d803681e487e6ac18053afc5a6cd813c86ec3e4d01808718e5bb3abd10a0a03b970b860fc60d5aee40e41743c1eb009255cf8bf7c82dd12f64d675ff24c7f0a06a08d813a4649df981fa4e95c1e425514989b0cc86c10bf5fc46ae9d7530836a" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -7477,23 +7527,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xd522a23cf0118178de9b0c94528f7161fa5f0e0c954ff141d86f7335fbed4276", + "parentHash": "0x520f6482328ec8e1a2d2f759d3718f9527046b4eec351d127b4d10920ae7c02c", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x98514467ea14630203e7f8752b2861b363ad510a1795389c5257082298d0c6f3", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x90aa516f7634bde1bc39f6e1544693038238b3788c5fd7ec5caf70979bdef707", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xed", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x942", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xc24d834bba0307acaf2621819d979f535f972358a557d008cdd4374d6d7279e4", - "transactions": [ - "0xf88281d9088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a0675450801a9ff0ba52e0d0c6a9919e99ee02fbcc1f777c783a3a1f458e376ecea0114e5fe0b93d270f3d78915b9fb62e9f640b7024db11cfa38e879ccbff473605" + "blockHash": "0x89d7de3b3cc3f788c75f502ad3c5194de01d53e6d01675bb8e7319084bb044e8", + "transactions": [], + "withdrawals": [ + { + "index": "0x14", + "validatorIndex": "0x5", + "address": "0x1f4924b14f34e24159387c0a4cdbaa32f3ddb0cf", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -7508,21 +7563,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xc24d834bba0307acaf2621819d979f535f972358a557d008cdd4374d6d7279e4", + "parentHash": "0x89d7de3b3cc3f788c75f502ad3c5194de01d53e6d01675bb8e7319084bb044e8", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x7e34cffa4512765540682e386ccecb352c2939095d4c0705a98e87ce3c50b9da", - "receiptsRoot": "0x0982027ef8748748f3f43f93d29f704d942455b23d272ef229e30020ec561a98", - "logsBloom": "0x00000040000000001000000000008000000000000000200000200000000000000000008000000000000000020000000040000000000000000002000004000000000000000000000000000000000000000000000000000080000000000000001000000000000000000400000000000000000000000000000000000000000000000880000000000400002000000040000000000400000000000000000810000100000000000080000000000000080000000000000001000000000000000000000000000000080000002000000000000010000000000000000010000000000000002000000000800000000400000000000000000000080000000000000000000000", + "stateRoot": "0xe80483c4ed93170ee2a52821d16553f4ec3b7423733606f1f76c8737ff6f1b9b", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xee", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x94c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xbc7ccdf6cbccc29bfcb63055c8f06b26648f3b719434b29a74a477466fefaa5e", + "blockHash": "0xea6c0f8842754decf0722e63340f9ce8fbe8d0ad696225c4942eeff7c815cfe3", "transactions": [ - "0xf87981da0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0d59a28faa98ddfa84972f7929fbec44330a628fb5bef71f778cebfd935bcaee3a02cd31b98758b8b921a23dc0e8499be4f6ea77c1ebbe2bf67957b699af942e6c5" + "0xf883820111088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa02c77f1a00ffa8149181fe59b1219dcd106642312194ffdfb0efa3a25b739d368a019af967d474a4d25721ef42b7fa0c41572a848efdb3bf8ef229836d07e0696c3" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -7539,21 +7594,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xbc7ccdf6cbccc29bfcb63055c8f06b26648f3b719434b29a74a477466fefaa5e", + "parentHash": "0xea6c0f8842754decf0722e63340f9ce8fbe8d0ad696225c4942eeff7c815cfe3", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xbc99bcc1d52e9f4766e23368257dc9c64781b15b59232171c60c4115dce203d4", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x37054ed1d4de8936d6b6d8309d87835e891d4cb7d403664cbff23ccfce00585d", + "receiptsRoot": "0xb3c76769874da188359ca338714937e0ae1586a0b69cea7a88db3f231f9c245e", + "logsBloom": "0x00800000000000001000000000000000000000100000000000000004400000008000000002410000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000800000000000000000000000000002000000000000000000000000000000000000002000000000004400000000000000000100000800000000000000000000040000000000004000000000000000001000200000000000000000000000000000040000000000000000000000800000000000000000000008401040000000080000000000000000000008040000040000000020000000000000000000000000000000200000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xef", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x956", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x84f81fe1c154c744c26786ae33b6ace4bc6e4e9318fd57b03a61e9d18ca64711", + "blockHash": "0xff641c571c4ee7c6ad4776d9e6a619e15a9e9c68173a576adeb39a4d6b7cbcf4", "transactions": [ - "0xf86481db088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0c22c5f39061382a2ef0994d92c08dfcb184e64bbda5c809b7e9105ead307a742a053e1ea72ec9869938790b2d96b105f7b39db6b423cf370074474e16385b45f5c" + "0xf87a8201120883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a082a80eca863ae9c64748a354a84f40290916bcaf8413792b21b3424378e6228ca03d390881b2d45d2465a2b5d4c3544cec5f43ecda93ad6c960cfa291fcaad51eb" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -7570,21 +7625,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x84f81fe1c154c744c26786ae33b6ace4bc6e4e9318fd57b03a61e9d18ca64711", + "parentHash": "0xff641c571c4ee7c6ad4776d9e6a619e15a9e9c68173a576adeb39a4d6b7cbcf4", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x7a68d970418201b546fd51691c989867e1c29978eea373e2375bb60b385ce4a9", - "receiptsRoot": "0x627ec21f4de1c579315e005c05b00e19d0186ecbc6377fb85a68878fe8079cd5", - "logsBloom": "0x00000020000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000020200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x8c068ec1861153736ce04d560c6cf63b729d008c9e5c4156b8b8b4351b53577b", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xf0", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x960", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xca2b42e197de583b704164d6db489ec43fe7394d38dd8a5752be70f52854ca58", + "blockHash": "0xc0c2d5bded8a29c205781c8126d07498355257ffe0b0a9c63513891158703356", "transactions": [ - "0x02f8d3870c72dd9d5e883e81dc0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cd9b3346dfd0e60ce656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a044dc9099d91b074b843002013672df4de9f691cf60546fa74eccafa9044a75a280a08e839541f45f093117f75e17bb6c5d90e060d95d635df5e508df75ae4ea15d02a04a37a82b8fb0d5c28bd196c2dff563b98943f4c294be797f927a9f20c4f93eb6" + "0xf865820113088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a03ea334e2aa8e74511ed0ad87fcda79a9f680ae5812f88a13df8fbf5f7230c27aa054c5cc729b1ef1167f035aed984cd1aeb394e725797757c42b96bcf3285aff08" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -7601,21 +7656,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xca2b42e197de583b704164d6db489ec43fe7394d38dd8a5752be70f52854ca58", + "parentHash": "0xc0c2d5bded8a29c205781c8126d07498355257ffe0b0a9c63513891158703356", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x9693fa6d1b00303f873a8ad1471a142a790f8b6306e0f1ca9e3f3cdc799f5f33", - "receiptsRoot": "0x776bbccca0cbbdb94db3be7cbb0d3ed277ade8c66c9e4f0cd3b5375ef26cb454", + "stateRoot": "0x7f1e0aba7bde42d7d8cdfc2d10067e723053ab75fba529a996072e3be4e3026a", + "receiptsRoot": "0xdb3d7500cd8c087e3a0392bf0fa606dcdd10b495faddc3e157febe381694bf58", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000080000000000000000400000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xf1", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x96a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xa09abb195168c21894826ccd65fa0c8549eb923a5b399c62cf9fd1011c465b69", + "blockHash": "0xaee5da2562edc43aae63fdbfcc1ed4a3b9584d31b515a14b6c9e974cbdb8dd29", "transactions": [ - "0x01f8d2870c72dd9d5e883e81dd08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c420286a1fdfc0e5e656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a040c619388e6393f420e805451bd48b10c670de7d51e916a3ffe5ac3c96b8193880a095c62361aa8837bc1855c305ba620d2626ab06fa3c0f9e53e15a2514a9107b51a0338b0de9a2eae1aa2a4ab316146123ec3c5c186cfca763aec26070ce1b9fccb5" + "0x02f8d4870c72dd9d5e883e8201140108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c420286a1fdfc0e5e656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a040c619388e6393f420e805451bd48b10c670de7d51e916a3ffe5ac3c96b8193880a0963c43efda9e42fb6774a28c7f5e012114afdd0681d067b1b6caf587004146e5a00c0e598f93f2345166df6807de074860ae1776148f8391bf32e32ffd519614ee" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -7632,29 +7687,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xa09abb195168c21894826ccd65fa0c8549eb923a5b399c62cf9fd1011c465b69", + "parentHash": "0xaee5da2562edc43aae63fdbfcc1ed4a3b9584d31b515a14b6c9e974cbdb8dd29", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x8eebf0393ed59ddc4859f5692ade88d664163044283c2fccf142ea9ae3506833", - "receiptsRoot": "0xf3febfa0beb41ed1c3b2dde301a1af4a1900ac13bc37322396ba28a3a0809745", + "stateRoot": "0x0b4814aeab2857f64293c7da4c2d9ad9e1ccbde78f61c37ec905a83812e42357", + "receiptsRoot": "0x57bab588deeaa419da929e4a6d21f5823ffae41492db9abc935466c941655403", "logsBloom": "0x00000000000000000000000000000000000000000000000000002000800000000000000000000000000000000000000000000000000000000000000020000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xf2", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x974", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xb4020e4b07dcf86bae80b8743a2ea666f6f3d45a5df2284109c25d7f51609ec5", + "blockHash": "0x6d56c50e850214cd81f339f0febfcb4874950f0a6e6c541f448c0dd83bbdec6a", "transactions": [ - "0x03f8f9870c72dd9d5e883e81de0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c7071be300963ff92656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0e8a78860d5ffde377f4eb0849fe59ed491d4a12fd51edebc2bceab3549d8346383020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a04f7d0bf8f16c7a0e75ce26ac545d0d575ff7f413e2a16e5027afb8a5c4b7f26fa063e8202466a1dfe963f6db436894e47e6eb7e0098800e35cfc1d5254af2077eb" + "0x01f8d3870c72dd9d5e883e82011508830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c7071be300963ff92656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0e8a78860d5ffde377f4eb0849fe59ed491d4a12fd51edebc2bceab3549d8346380a00e7186da492612df60948da5e541d1ce2857a85ad3ea9f07865c9397ade6ffe8a0617e8bb930030a03d25a1b5f1f07b373d9356259d0eea3480deb3c7826d49961" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0xd3e7d679c0d232629818cbb94251c24797ce36dd2a45dbe8c77a6a345231c3b3", [] ] @@ -7665,27 +7718,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xb4020e4b07dcf86bae80b8743a2ea666f6f3d45a5df2284109c25d7f51609ec5", + "parentHash": "0x6d56c50e850214cd81f339f0febfcb4874950f0a6e6c541f448c0dd83bbdec6a", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xa268f440925802a0673a23ed9f85bbc06c22f5d2500ce472b384aea395f774d4", - "receiptsRoot": "0xd7f23872614f396dbd94d6ba150b6ef7539f1428c8df485d79def87a8a0785cb", + "stateRoot": "0x2b1e160783e5eff9abed73679a7ceacc0cdd2bd1ff00adec81b0ce03bd7acb2f", + "receiptsRoot": "0xc702b9e5bef54fbd359fb825b44e4b1edd30258116936c988dc9f756d035bd48", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000400000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xf3", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x97e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x787fcaaf148ba19e63da9cd7d513303b2e8565baf64c4c28680996276e57c93c", + "blockHash": "0xa0e695a82a49373c16acf2ecbd742c53ea37cadecc6dfd681e6b393bdca6c445", "transactions": [ - "0xf87481df08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c3389deedf755957b656d69748718e5bb3abd109fa01e50b3cb9c04e70ceb18374d66620c5441f9e5f23971bbf4e0176d9a973b1137a05b14a56ab599e3f1344627bf3387e3ab72c6d4e34bdfae32c7ad88ee018969ec" + "0x03f8fa870c72dd9d5e883e8201160108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c3389deedf755957b656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0427b8ffdff6454ea85c8251407144400ed4e693ffb6a74f319e0238c0e72afad83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a018196be640c0bacce391e26e900787177b20c087bc92aff6671faa5841174ea2a0197c06391e39c60ba885e840bbdcb01006afcffe27d34e85fdf7fd2e853d9f0e" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0xd1835b94166e1856dddb6eaa1cfdcc6979193f2ff4541ab274738bd48072899c", [] ] @@ -7696,21 +7751,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x787fcaaf148ba19e63da9cd7d513303b2e8565baf64c4c28680996276e57c93c", + "parentHash": "0xa0e695a82a49373c16acf2ecbd742c53ea37cadecc6dfd681e6b393bdca6c445", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x8940dfd9f8d3951b612ad8d6210ccf787fc72c21129453cda59091cec9e42459", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x6aae432319fe437eaf4806252103b8df1111b0dd91815b058fa6affdebd3dbbe", + "receiptsRoot": "0x3f253895aade44a9a272ab90feac8bca59f9ef2c9182ecaff4708c0964c4e6ad", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000041000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xf4", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x988", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x9d81061f02d7bf9a3a57e1b2b291bbe6100fdd34168fcc324a3e4c360168a058", + "blockHash": "0xee14abc18ab909a3c3ff3afbccd5f0b3844727f10754428c44a7c8898f8343ad", "transactions": [ - "0x02f86a870c72dd9d5e883e81e001088252089416c57edf7fa9d9525378b0b81bf8a3ced0620c1c0180c001a03cb7b4f18d670562fe957a5f6ce00c3f4f472eb49b06bcdeb554183884eba2cfa017e043c09ffbab9304b2f96729fbeb6ffca00aab56a5bc5b27854eebc9642635" + "0xf87582011708830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c328378d492d41023656d69748718e5bb3abd109fa062fa6a4169d9b7adfa4d6fa305c20b40b828bd2b35dc9bc5d8f69f0944618b9aa013f7457305014b59b83fdd28ac7d7d4de3578ad157e054d4295e42f8105fdf38" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -7727,21 +7782,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x9d81061f02d7bf9a3a57e1b2b291bbe6100fdd34168fcc324a3e4c360168a058", + "parentHash": "0xee14abc18ab909a3c3ff3afbccd5f0b3844727f10754428c44a7c8898f8343ad", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x1216a69e570307973e76a594d89cda1e9e79f8d357d46aca9cba98aaaf0f3009", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0x6df949a5989f2b5ae123a2cac652c30938649af91697084fc7393701137bbf4b", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xf5", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x992", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x111ebb07018c6d7bf8df23b0454405dd991d7f8407d7c14f8bb86a0bd78032ac", + "blockHash": "0x5964eed483298c980e3372a7adab0e90ac671c5bb0fcb80e481a6fd533851ed6", "transactions": [ - "0x01f869870c72dd9d5e883e81e108825208944a0f1452281bcec5bd90c3dce6162a5995bfe9df0180c080a09310fb7d3a437d4c9463094aaf7375a66a58cd9577c736f75bba7330f7fe4113a0145d516d95878524a261a4c34a9c4f0256f7701db03e6f4c5dd900306719fdb2" + "0x02f86b870c72dd9d5e883e8201180108825208944a0f1452281bcec5bd90c3dce6162a5995bfe9df0180c080a02592d6e2ddf8518f5b4d3cb227432b4e799ae5bf0c54236e085790306350398ba013d79dbea43f805f839a8a7bfbb86da979de2f4116c57cec6c97152e3185a16b" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -7758,21 +7813,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x111ebb07018c6d7bf8df23b0454405dd991d7f8407d7c14f8bb86a0bd78032ac", + "parentHash": "0x5964eed483298c980e3372a7adab0e90ac671c5bb0fcb80e481a6fd533851ed6", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xad350a4099570877c1704f074b19c5f3dcea56dca6c9e792016e2a56b379ee52", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x94dda996f1424b5b19de2493fd5feb565bc904e6d179a71ba684ccdc9a8e1c1a", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xf6", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x99c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xf0fff4c5758d8f5bc9e659c933b0267500c3dcd25916df0c0cd11f51a80057e4", + "blockHash": "0x9093cd0fdc936c5e1a1cde72e4327a8b042d0153d3b268b5441631496ab5b897", "transactions": [ - "0xf86781e208825208944dde844b71bcdf95512fb4dc94e84fb67b512ed801808718e5bb3abd10a0a0c74c4a0d4a72241c9d5837ddc4891eedc641596acc6d6b63ce03d98a10ac501aa0599e554c304a4d88ac4be7aa118b76dcc057fcbf2c4652ba0095f954f61e710a" + "0x01f86a870c72dd9d5e883e82011908825208944dde844b71bcdf95512fb4dc94e84fb67b512ed80180c080a08f3c930c7a4ed0fc43ffe7cfbcbe0eaa913d2422265d09304e67af8fbd1d1edea07fa116f75eb5f7eb90fbd5ad2185a718c9b29da65dcfaddc62f4f1cf9b7b7b4f" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -7789,28 +7844,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xf0fff4c5758d8f5bc9e659c933b0267500c3dcd25916df0c0cd11f51a80057e4", + "parentHash": "0x9093cd0fdc936c5e1a1cde72e4327a8b042d0153d3b268b5441631496ab5b897", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xc27bc2d5cb669f6c51c6a5ff47e1c7636846e82c3a3ef76be73cdbf01577b022", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x50ba0b45c64457f53d8f17fd2973f72a7e154c9ac52412a3078e1c7fdd9cdb97", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xf7", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x9a6", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x4063e7bd93501354cbef2184f7139559650a22eeca85d60bd62f4a468f2bd22c", - "transactions": [], - "withdrawals": [ - { - "index": "0x15", - "validatorIndex": "0x5", - "address": "0xd803681e487e6ac18053afc5a6cd813c86ec3e4d", - "amount": "0x64" - } + "blockHash": "0x123f2c0202f5d919d2376513b9d5c5c9dceda4b91e6fd70f386d0d88ec067885", + "transactions": [ + "0xf86882011a0882520894d803681e487e6ac18053afc5a6cd813c86ec3e4d01808718e5bb3abd109fa0f4d74436654fa222f1dcfe045bb2f56eeb9ed8d35c962ad79e3695dbf9c13d30a07fa1183cbcb7773b1c4084568a2ff4eba4a6ee2993ab4b293ead0c228e70b866" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -7825,23 +7875,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x4063e7bd93501354cbef2184f7139559650a22eeca85d60bd62f4a468f2bd22c", + "parentHash": "0x123f2c0202f5d919d2376513b9d5c5c9dceda4b91e6fd70f386d0d88ec067885", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x0991eed72783cbb17cb6cdbc85373e808feeb2134a1663c7b7356514635f4b9e", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x51896bacbfafd9c65c4bf4e5c828fe1dd91e2eeea39da7a1a31bdc2b7593f011", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xf8", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x9b0", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x161049c951eaacfafd5b046be03ee813c9a9a6d3167fe4591f75673f0ff5097a", - "transactions": [ - "0xf88281e3088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a018eea4cbb63e21a12b7091ab411cbfe92334a0cce67c4cb3d8e33e7c7d442ed9a07dc5c68241d131de386967a2cf4da3e73d483574b0fe5f3989423fb9ba522cb0" + "blockHash": "0x03599481645edb627d61df608525160e3ea5fc6081aa353bdd9828b21f314c63", + "transactions": [], + "withdrawals": [ + { + "index": "0x15", + "validatorIndex": "0x5", + "address": "0xeda8645ba6948855e3b3cd596bbb07596d59c603", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -7856,21 +7911,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x161049c951eaacfafd5b046be03ee813c9a9a6d3167fe4591f75673f0ff5097a", + "parentHash": "0x03599481645edb627d61df608525160e3ea5fc6081aa353bdd9828b21f314c63", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x14b379a9fd456004e3447097b74c17d5142fa544a85caee69bd3f06e143746ad", - "receiptsRoot": "0xf4c9c04b70aac8e92168f4194367a03efb812d78ea2c1b88ff85f330e155d270", - "logsBloom": "0x04000000000000000000000000000000000000000000000008000000800800000000000000000001000000000000000000000000000000018000000000000000000200000000000200000000000200000000000800000000000080000000000000200000000000000000000000000000000000000000000000000000000000002080040000000110000000000000200000000000200004800000000000000008000000000200000000000000000000000000000020000000800000000000000000000000000000000000000040400000000000000000000000000000020000000000000000000000000000200000000000000000000000000000000000000040", + "stateRoot": "0x430d7fbc65b1a35ad32e5cb29b13911b47d226d8edd6a587086eea71c0c0838d", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xf9", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x9ba", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xf10eb78649d3c7dccd8a00576e460bed3eedf5e1e9b94e96cd2cdcf11c4171e7", + "blockHash": "0xb70f87f8243cc700afc179251e201ce53395e86cb99d8f2de002488a632f765b", "transactions": [ - "0xf87981e40883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0401981fa89684c53c54fa7cac07db4b9adaa4fab50210204ce297bbd3893456aa055c506967e336b46424dd6adc093947469947f517a4101251f4dee49584f404a" + "0xf88382011b088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a084c8d41b9787a77274d53507c769d83f917f64b919e7a2424928c9959bbdbfafa06b83df98f1e5cc5e873ae9ac9207af7dbeb000786f40cc76083afd748d337c9e" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -7887,21 +7942,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xf10eb78649d3c7dccd8a00576e460bed3eedf5e1e9b94e96cd2cdcf11c4171e7", + "parentHash": "0xb70f87f8243cc700afc179251e201ce53395e86cb99d8f2de002488a632f765b", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x51e359714f3797b19f69d62e42532edc6e1a77905de51d5f71cb791a02fcaba7", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x7f49042388b1464946998060a0f422a3ae704bcb900166b6b531f95af7dde2ed", + "receiptsRoot": "0x0f107923c29a48b7014b6b5bb47237cd248821464a08db5f1d990d39f08c8786", + "logsBloom": "0x00000000000200000000020000000000000000000040400000040000000000000000000000000000000000220000000000000000000482000000000000000080000010402000020200000000000000002000000000000000000000000000000000000000000000000000200000000008000000000004004000000000000000000000000000000000000000000000100020000000000000000000000040000000000100000000000000000000000000000010000000000000000000000000080000000000000000000000000800000000000000000000000100000000000000004000000002000000000000000000000000000000000040000000000000000001", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xfa", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x9c4", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x9d9c2b94a73067a8ba8736b77b159187bad6ce53b4372d3d0d0aa534aae1d7bd", + "blockHash": "0xc4bf5494f56bc45ce01dad37aee3ce9ffc45d83fdc000e12181f5f8acb8019cd", "transactions": [ - "0xf86481e5088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0bd39af3df2a11f6261e939824dabf6a9e71a3a2c8c1bb063500678af676108e5a009b9c69c3a0de121dcc763befe353b95f0eba94610f3787372819b5ab152f9e1" + "0xf87a82011c0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a001f0bfa70518840b6c846fc573298406585f3ae18d41bd7b09b74a4bcc5ea45aa0497baf1aa5e0080d99e9492897d489f1fd1387d65451da9d5e8e87d5d215c3d7" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -7918,21 +7973,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x9d9c2b94a73067a8ba8736b77b159187bad6ce53b4372d3d0d0aa534aae1d7bd", + "parentHash": "0xc4bf5494f56bc45ce01dad37aee3ce9ffc45d83fdc000e12181f5f8acb8019cd", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xb73d161455722e25876b549dd5e50384c3d558b9c41a6d212c27ab93f00e073d", - "receiptsRoot": "0x6195d7c85c340ae69791a06465e39d5a202cb53bfb9950da9be615af1fa1c49f", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000804000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000800000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xc5b50d5f5bb8459ffc0293d6a89682f22e33c497c5060d2b84db9c24f8800747", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xfb", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x9ce", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xa4b169ebb5479f117266df73694d46f704685c3d756d411dcb5fc0b15f500f47", + "blockHash": "0x4a451e3d5c50c59b8f500744456ddbc1305fd7d30a3088e18b63ab514e146a5a", "transactions": [ - "0x02f8d3870c72dd9d5e883e81e60108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cf88292cc89bf0c81656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a01bf804b21bbd284f3f59e4862747fabb1d91cd202d99df811fbcd650c8916ef101a07a6aa4a316190d2d4190f770ddb893b1460e70fbd3650250387cea8bb5d252cea075c4ad6724b9fd04714eacc8a9fcf101cb4c379177c4903e610d15d80ad1c58f" + "0xf86582011d088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a09802950fbf7bc635e1999203e18e5a7eb8ff2878cdeb9e4dacad002689b01b55a0676f17a2bae780db0606eafe3c28ad8ab6ba4f46a4ca3911469ef1538a566d06" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -7949,21 +8004,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xa4b169ebb5479f117266df73694d46f704685c3d756d411dcb5fc0b15f500f47", + "parentHash": "0x4a451e3d5c50c59b8f500744456ddbc1305fd7d30a3088e18b63ab514e146a5a", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x7af673b579848cf739d0977946fbd5e08ece6e8d39f46aaa4092adca0297131b", - "receiptsRoot": "0x90f07e67f04ced23fa47da5ee86634d02744163e2a0c9345a2892e2ac573f8b9", + "stateRoot": "0x5d62e876c9fb75994f975f38a997ced53c6d9e93efa0b68782d2874d51cb796d", + "receiptsRoot": "0x98a9a37889a99b4f9f21fda3496a111b5c72b1f223748956005057dc45b50c9c", "logsBloom": "0x00000000000000000000000000000000000000000000000000100000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xfc", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x9d8", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x205a14b20d2c13f174859295063f88da3779c22b3cd8cf8d3718cf014f8c0af9", + "blockHash": "0x7e09bd28fdc45aa33de70b9cc577566820bcc691bb602bb4ea34c060240a3a34", "transactions": [ - "0x01f8d2870c72dd9d5e883e81e708830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c9a60100c3b84dcd2656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0a22721490cd06a0e77bc2b085bb4d57e7e5e0b459a2afc65ec4697d51926e1b801a0bdda6e7c6e57e00f3a00b472b4a480c2c87440d4b19e5e5482a08fdb666378bea00a82355c7bac100d5dc94f6b76c352b07c531e7cf98d746e089624ee6176d086" + "0x02f8d4870c72dd9d5e883e82011e0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c9a60100c3b84dcd2656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0a22721490cd06a0e77bc2b085bb4d57e7e5e0b459a2afc65ec4697d51926e1b880a0b289d6cf504d44238e278312e383bd74e5c41396a1b72bfa9b450aaffa7b07b1a03ae51f148de13d9dbcbb1b8b3f4d24b07fe30032979ba0e38aaceb36bd988221" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -7980,29 +8035,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x205a14b20d2c13f174859295063f88da3779c22b3cd8cf8d3718cf014f8c0af9", + "parentHash": "0x7e09bd28fdc45aa33de70b9cc577566820bcc691bb602bb4ea34c060240a3a34", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xda95fcdaffc081ecc6ee8aeb8fc0c34af8d264d206679f8117abcf4ac790aded", - "receiptsRoot": "0xb88d784bbfd12192ec4b0785299fc73c6a5520012b7dc507f6c10f550dc6c11b", + "stateRoot": "0x12f9955199b8b97c6b2f014a63595097abf47b3f6cb5647c81cbf2b813eb5f74", + "receiptsRoot": "0xdd239257b0e6e609ba5892c702f3cdf7bb5df0ea65d15417448bca696977ecea", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000100000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000001000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xfd", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x9e2", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x68ee7090901b0083e417d17e1e9eb637b50146077b32d5f3b63568a738220c98", + "blockHash": "0x6b8f79e73655d6e6bf62130982a8130929598f06e537104557fafb585ef859aa", "transactions": [ - "0x03f8f9870c72dd9d5e883e81e80108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c77a74f070310737f656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a09138868b39f601dde19efa6e9a154230a51805e9a6cabaf28fed5163aea5832883020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a0357ca9f0031cc59e4be7c4b351da952e631b306646cfa1a0d24a1f9d54392e39a064bad8e978674e591d8b7999ef85fdabb7aea42d32310e005b695f4d98cb5d2e" + "0x01f8d3870c72dd9d5e883e82011f08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c77a74f070310737f656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a09138868b39f601dde19efa6e9a154230a51805e9a6cabaf28fed5163aea5832801a016d8f464e102d235f5b4a4cfe670e9994b533a50eac8688f258ae0fb2cc84f59a055d952ef33fb3e62215ea5259c32d7b04002b805e8a09c792b04737361d90165" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0x7044f700543fd542e87e7cdb94f0126b0f6ad9488d0874a8ac903a72bade34e9", [] ] @@ -8013,27 +8066,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x68ee7090901b0083e417d17e1e9eb637b50146077b32d5f3b63568a738220c98", + "parentHash": "0x6b8f79e73655d6e6bf62130982a8130929598f06e537104557fafb585ef859aa", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x086b21523f79b6a1d0bcd4d46a705a225bc8019a10d832acc835ca6d325547de", - "receiptsRoot": "0xf71010c9701f748e035d4cdd1eca78bc13330e2390c1107ae5578dd636d6f6dc", + "stateRoot": "0x1b0f5e16afef64944c550859b5703cb5f7d1fa907857b24bf8095990f031144e", + "receiptsRoot": "0xcece2afc40f80de52e7f38fdf0e3b080356a02624715ed0e51dd82f578e52f88", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000808000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000201000000000000000001000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xfe", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x9ec", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x1d4e0daba7e6bdc87c5ecff530bca645bbe36a6a538e27b956c9c106607d982e", + "blockHash": "0x2f59eb73c385708d16bfbdabd173a892b1aedb35aef605b39bf4ecb37e5f4d81", "transactions": [ - "0xf87481e908830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c729a65bda31a91e7656d69748718e5bb3abd109fa021ff0b4ad222bba50e9623a46935ff2ccacc88cd21a12ff2bcefe083acb12188a03a105b75e0e54e676cb822a1c85854bdb35b41e517c3b2c8a917325dca037d5c" + "0x03f8fa870c72dd9d5e883e8201200108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c729a65bda31a91e7656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a02dd51e8325001014c6845bc5ad51b134ab237f95ab18da55cabc4275b029bf3f83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a048b3e953645fd3e4cbea431b95e043ac285045829d6532739853eeb511cea26ba00d538af75559625a07f08c4ed4259602d548b81f08a01c3e2b15fdc75883d1aa" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0xf63a7ff76bb9713bea8d47831a1510d2c8971accd22a403d5bbfaaa3dc310616", [] ] @@ -8044,21 +8099,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x1d4e0daba7e6bdc87c5ecff530bca645bbe36a6a538e27b956c9c106607d982e", + "parentHash": "0x2f59eb73c385708d16bfbdabd173a892b1aedb35aef605b39bf4ecb37e5f4d81", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xb36ba377ca20ab99b4babb2408e48bad77df897f4bcd5e8d04a7903ab87166c7", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xb56427b3a211f0a2f62a3a0b2cc41a6183f481796616214d294633846d550537", + "receiptsRoot": "0x08f1a82b6731cc83acd11b29a3f0bc0d9c641f0f090f9a4fed92b49de10c8276", + "logsBloom": "0x00000000000000000000000400000000000000000000000000000000800000000000000000000000000000000000000000000000000100000000000002000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0xff", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x9f6", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xadf3ad66db1c5384657a2b75a1753887c646c629bd10a8a50d15097b79c14cbc", + "blockHash": "0xdc795b259c72a03503f2caa5002867f7321785d36a0fc325f23c6a7f0b5bc910", "transactions": [ - "0x02f86a870c72dd9d5e883e81ea0108825208941f4924b14f34e24159387c0a4cdbaa32f3ddb0cf0180c001a033b27b4f7423b03e6e2fadd430fa2f7e913ef796faf7e7266513fb2d93c8a77fa02420d42939972bab5a6fe4e1198f47cec08194808b4e5cf4d5cf30f9e5972e9a" + "0xf87582012108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c706590b13eb1c33d656d69748718e5bb3abd10a0a08932fe032e5f900ede1c39bb840498c393f529ab619f244cd632db7668b22392a0499938e0564c1ab6ddf20ac4e3bb4eb19dbfadd170e12d62850e9bdfd2d74306" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -8075,21 +8130,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xadf3ad66db1c5384657a2b75a1753887c646c629bd10a8a50d15097b79c14cbc", + "parentHash": "0xdc795b259c72a03503f2caa5002867f7321785d36a0fc325f23c6a7f0b5bc910", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x97e68aafb0b19c385ac8546331867122911edc8c22a288849a8cc318082eda74", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0xf2e41fdb4e72f7a36c1008b3ebe31da625d6cd0dacd4f72b5f2e81a21110a95d", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x100", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0xa00", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x9ae54ebf672230a7e3ae4ef423aacf24189f52e240c1356817cb32d767618063", + "blockHash": "0x271a4760953153009f96bed8d964dfa87d6893d05200beca8c28b05661a749a0", "transactions": [ - "0x01f869870c72dd9d5e883e81eb088252089416c57edf7fa9d9525378b0b81bf8a3ced0620c1c0180c001a0cc554cf1b152fa1c01e7e409f59f1e2ae8aa77511b726144f7e43136b67bcaa4a0261707e0abe087ed97585f530ffaa0b30f685ef1a20a7f063a34de1672467f17" + "0x02f86b870c72dd9d5e883e82012201088252089416c57edf7fa9d9525378b0b81bf8a3ced0620c1c0180c080a0cdca45c3cf416d7336cd612875776e83a4852aa0d31a8eb64ed139b5cbda30c0a02abc192501a700bed7a29fa13f9c23d4685ac51f7d98226e739272b1718a28ac" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -8106,21 +8161,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x9ae54ebf672230a7e3ae4ef423aacf24189f52e240c1356817cb32d767618063", + "parentHash": "0x271a4760953153009f96bed8d964dfa87d6893d05200beca8c28b05661a749a0", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x6a7e15a097391ede75bbf2a63347ffe9b7cb42135899d0295ff15749e00acb53", - "receiptsRoot": "0x642cd2bcdba228efb3996bf53981250d3608289522b80754c4e3c085c93c806f", + "stateRoot": "0xd4e0fc59a22ec4e6f85ee34181ee0aa62fd0e262627bde52f5a30d3d72b5aefb", + "receiptsRoot": "0xbe3866dc0255d0856720d6d82370e49f3695ca287b4f8b480dfc69bbc2dc7168", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x101", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0xa0a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xed093194e152b98e10d55a8db6403780d17346e9eff9c511712725e08c422381", + "blockHash": "0xa01a3f6a72dc1967245123b06ac7eae459690d7ef3a4d07700c0e3745a74db71", "transactions": [ - "0xf86781ec0882520894eda8645ba6948855e3b3cd596bbb07596d59c60301808718e5bb3abd109fa0f9040bc146997f43cf4322ae00653a6f48de8da4718552435c5b42ca8c54e359a04f0f757fd150d6d5e9856ee6a925e5191c90aad31452327effed832c764f4349" + "0x01f86a870c72dd9d5e883e8201230882520894eda8645ba6948855e3b3cd596bbb07596d59c6030180c080a0bdc843dcf9fe4bfab0842fa7fe93d5a18ab077b852e42b43e45aaef6e542d18ba061e44f1be5b39592a8ba72b746d8f5387f6fdbe81721782361b958893625157c" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -8137,28 +8192,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xed093194e152b98e10d55a8db6403780d17346e9eff9c511712725e08c422381", + "parentHash": "0xa01a3f6a72dc1967245123b06ac7eae459690d7ef3a4d07700c0e3745a74db71", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x3175246abc21d105322ad9b1b3bba97d2dbae62d42054dd51b59786ae702e3f8", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x0d9cc93a6bc9a1e7acabb383958c985ed8f99e6f5520eb221e749d1dae041285", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x102", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0xa14", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xcd35112597db3095f6c10b644aee930651c44a03d8c168581d8aff8d26050491", - "transactions": [], - "withdrawals": [ - { - "index": "0x16", - "validatorIndex": "0x5", - "address": "0x84e75c28348fb86acea1a93a39426d7d60f4cc46", - "amount": "0x64" - } + "blockHash": "0xe098e6bdfcbf458b4139ee1ebb140d43f6d606f540d989eba5b8b97435bff5ae", + "transactions": [ + "0xf868820124088252089484e75c28348fb86acea1a93a39426d7d60f4cc4601808718e5bb3abd10a0a0d435058270eac8cc8ab931fb3fab35f5c0fd1b61807a8f41dc882b5d56bb390ea045ee97f442161f5e4286ed78131e766593df3cb9607e686443d13a54b1962c76" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -8173,23 +8223,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xcd35112597db3095f6c10b644aee930651c44a03d8c168581d8aff8d26050491", + "parentHash": "0xe098e6bdfcbf458b4139ee1ebb140d43f6d606f540d989eba5b8b97435bff5ae", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x8f2c077936f439e11f80611dc95c720ad9f4dceb3f0ea11713514b308d279490", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x79104cfc128a45bc8bec55c00d116a4cea3a32716a1d264c9b037976e7284d53", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x103", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0xa1e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x46728f520936c769482557b2d4d05386f030a3d9c03cca9d123940d3d3fc97be", - "transactions": [ - "0xf88281ed088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a05ff5043201525e47b2a17bd2efc4aae132dd6f168252e51b2f20fb6fb7ac6043a05476a8576d657d8ff75014e8bcc77e6e9657526efa8b79f085f8f78ca70d3ce7" + "blockHash": "0x8820f152b3cff23de1f3b9447dd120cdc4db4b52be2289b8addfd158c2ad60b2", + "transactions": [], + "withdrawals": [ + { + "index": "0x16", + "validatorIndex": "0x5", + "address": "0x5f552da00dfb4d3749d9e62dcee3c918855a86a0", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -8204,21 +8259,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x46728f520936c769482557b2d4d05386f030a3d9c03cca9d123940d3d3fc97be", + "parentHash": "0x8820f152b3cff23de1f3b9447dd120cdc4db4b52be2289b8addfd158c2ad60b2", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x8b08ae94f43b6cde596fead75fc65515098159157826766c042df86e8ee39fbb", - "receiptsRoot": "0xe96c8af980d88dfdb57bb4e77d6139098674406977393b19a5a4a06d409ed1e8", - "logsBloom": "0x80400000000000000000000000000000040000000000000000000000001020000000000000000000000010000000000000000000200000010000000000000000000000000000000000000000001008000000000000000000000800000400000000000000000000000000080000020400000000000000000800000000000000000000000000000000000000000000000200000000010000000000000000000000000020000080000000008000400500000020000000400000400000000000000000000000000000000004000000000000000400000000000000100000000000000000000000000000000000000000000004001000000000000000000000000001", + "stateRoot": "0xc9f270a3715490a6d21769ad119b76059f3bac9a0927df091b843209c6ae901b", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x104", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0xa28", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x65989a6ce9bd74150837c8f8feea080d86236e1706b2b1d9bb42ae329a212110", + "blockHash": "0x9055974f536a57910076dff54ffff9856ac72456315542541730ccbd2f24ea9e", "transactions": [ - "0xf87981ee0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0249a03e12c72b484b782d7dd0202a67a7e362781b8037c07502d359ff95d49e5a00966596e0c65871380a7525de7d858c6f29b5262df7672499db7e39ba7779ec2" + "0xf883820125088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a0ce757243cc0db6a5bc75785d39bf586d46a5d7fe15d5c7aac61ed7fdbe104a91a062efba996990699558521640d5718e65cf0861a2bd1f56539a434d296b3fc0a9" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -8235,21 +8290,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x65989a6ce9bd74150837c8f8feea080d86236e1706b2b1d9bb42ae329a212110", + "parentHash": "0x9055974f536a57910076dff54ffff9856ac72456315542541730ccbd2f24ea9e", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x2a7940a6da7cd8688d8fff2706eb485e00b273a76cb1c620612243f456dd136b", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x7c6c05ef0a73857681154a418f8621ca2f30e4c623228dde96a1e6e82fc53a25", + "receiptsRoot": "0x55dad0db67f2a541e084a97b2740c312e248e965b1c1f7f1e31d0737bfd90305", + "logsBloom": "0x00000000000400000000000000020000000000000000001000000000000000000004000000002000000000040000000020040000000010000000000000000000000000004000020000400080000000000000008000000000000002000000000000000000000000000000000000000400000000000000000000000000000000000000040000000000000000400000000000000000000000001000000080000000100000000080000000000000000002000000000000004000000000080000000400000000000000000000000000000000000000000100000200000000000000000000000000000000000000000000000040280000000000000002000000000010", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x105", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0xa32", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x1244e39eddc59b8d38c3c9e609867b149bb1222e3087fcde4e60d1785f9ca6fb", + "blockHash": "0x7102af3da7876aa9cff2e92b872cae97f9eaca3f19c6b184a9000d27dbca4e74", "transactions": [ - "0xf86481ef088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0f71990113edc7bbd8fb0652e4f147e4cf8454da209758a3edeae5d85d8ce6348a064c11008d0f851e7b753f6b8557dfa300044fde1503c10d518795b97ca0baaa9" + "0xf8798201260883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa02d7ade69ce5b4edeaf29fbc8d988dd32569ec074296dd98dbd5914a6dd17269c9fafc4d0c1e5aadb398ed630e85c406608324043d76b3f9c8e8b49192bdd4d7d" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -8266,21 +8321,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x1244e39eddc59b8d38c3c9e609867b149bb1222e3087fcde4e60d1785f9ca6fb", + "parentHash": "0x7102af3da7876aa9cff2e92b872cae97f9eaca3f19c6b184a9000d27dbca4e74", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xc28b9a58e85ba57dc108f326dec626ef81a0b16946c895ad90961c1cf43c23d6", - "receiptsRoot": "0x2c661ac051aa0ffbf53e7fb3e9fbc5527454a4d1e22c9eece00da386134aaae5", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000040000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x13a8de182e47d58d6c065bc564dff31025097da722d82e7a8d693a14df57ba96", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x106", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0xa3c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x9b11fa343fc18df51ad37fa94c9d6c17916786bbbab8bc10e3a3d1c0580e0b2f", + "blockHash": "0xd50ce3a9f526cc3f15e8938ea731693ca87130f6ea684d06e3df024c0c2d298b", "transactions": [ - "0x02f8d3870c72dd9d5e883e81f00108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cc4b2277a673e7dea656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0628887ea9304aeb7f3934543b9d14ab4e7e5cd422ba572d39d6ee10c3304534580a04216844f9698b4c3ac489b56ede5c1330ac2dcf5ab2f0d44882d60f2565d7c34a04f6922b75af7e0fccc73af8aa2253cb6a690121061c83dbbe40890d778514ac6" + "0xf865820127088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0185ee9769a4c97615b18b2e54cd2fff632e9115f7ad53cf2ec3c8ffe2109741da00328e76fb900029f080951acfabd4b5f061481a9dbf613e804ce7bbec0e87038" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -8297,21 +8352,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x9b11fa343fc18df51ad37fa94c9d6c17916786bbbab8bc10e3a3d1c0580e0b2f", + "parentHash": "0xd50ce3a9f526cc3f15e8938ea731693ca87130f6ea684d06e3df024c0c2d298b", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xac12a5a83732b8e0cfb72b17b98da2c647d6c43aafc8781cec9bc934c4667cea", - "receiptsRoot": "0x6a3af165755b8f4ddfb198a02c1ea6fa0e476be8a9e91d41195866f75a6c65bd", + "stateRoot": "0x010a4f44ff3cd9b11606dbaf036f8387acdc2004c52f6d810edc8ca4eebda97b", + "receiptsRoot": "0x316125a325d25224538bdff871ac99cf3bfb3c35d4200250353f77119403dce2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000200000000004000000000000200000000000000000000000000002000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x107", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0xa46", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x6bd2bb001303e7dfb428c75ea4bd6dd7115d6ff61add2924cb23a0115c920884", + "blockHash": "0xe87cffe7581ce382f9231fd3e5f6c6dd15670fac36f758bcaf841c44459f882f", "transactions": [ - "0x01f8d2870c72dd9d5e883e81f108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c1b6adcc983ad4086656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0ac748acc1af284e25d06434a8c1bbbf75bb8154a06f53f75d4f36edb656a49ba01a003a3e9854f243d54d673cb575bebb4d014860aa9e0053491cc0fe1cc10aaa8ffa0502f1bf5418002e6a5e19bf6387aec07f366edad070548e4271359c07e1c8dbd" + "0x02f8d4870c72dd9d5e883e8201280108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c1b6adcc983ad4086656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0ac748acc1af284e25d06434a8c1bbbf75bb8154a06f53f75d4f36edb656a49ba01a048442e64874ab0b16121c95b466712cbdf2e87653a8df012137c53072b2cc743a06f2692920a03883be81526c7daa0b9fa309f8f6f24b4023fda243f7844f7e501" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -8328,29 +8383,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x6bd2bb001303e7dfb428c75ea4bd6dd7115d6ff61add2924cb23a0115c920884", + "parentHash": "0xe87cffe7581ce382f9231fd3e5f6c6dd15670fac36f758bcaf841c44459f882f", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xafb2da9323c0f07fd5d9356a2c9bf67b082d7e36db4871d76339ce059d0caa5f", - "receiptsRoot": "0xc5610bcb5002376ea2eabd88001c2b2fac4b1c3dd0c0046f926c16c3f0c852f3", + "stateRoot": "0x862679188996c77b1c01e201cc58bb22326c513b56a65aa1930c9fca7861c761", + "receiptsRoot": "0xae0675e593af9295b673e2aedba6455869043f45bd1182c52bed6d3517c78ca6", "logsBloom": "0x00000000800000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x108", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0xa50", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xdb94bbffb05461e4f8a83c827cb5b0cc8e54ce71af9f4b57fd712c7bf245a67e", + "blockHash": "0x4b2ca2c24eb4cfff7f4ea2a8657efae77d1f12850557b1b3cedaf5326498a476", "transactions": [ - "0x03f8f9870c72dd9d5e883e81f20108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c6fc8c6364b779b27656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a04348597bdcdee80c8e110d94f771eb7edce9c8691b2f90b71c0d11f729f086c983020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a0f4f3451f3c730bab02a9b6000e8fa5cb299d75f3963eb0e1ba4e926a284c93e3a0107d70040f1a155b756b0130439565c52db057287755e9e721e3f24d6655506f" + "0x01f8d3870c72dd9d5e883e82012908830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c6fc8c6364b779b27656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a04348597bdcdee80c8e110d94f771eb7edce9c8691b2f90b71c0d11f729f086c901a0caf86e2da1e470d76d0a5e3fe70b58a3a6113abf07985e08eb193cfd96c5918ca02a8b90442569638779433a89bf2760eeef5edc15ad093b998a10c2fb381e99fd" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0x99ac5ad7b62dd843abca85e485a6d4331e006ef9d391b0e89fb2eeccef1d29a2", [] ] @@ -8361,27 +8414,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xdb94bbffb05461e4f8a83c827cb5b0cc8e54ce71af9f4b57fd712c7bf245a67e", + "parentHash": "0x4b2ca2c24eb4cfff7f4ea2a8657efae77d1f12850557b1b3cedaf5326498a476", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x06aa6955d876a1263894ecbb03fb81460996e83dfd0bd1f67700abf52f69434c", - "receiptsRoot": "0x82a4ca68aa94d5dad5dab5df853ef13aa848d3e427c2264269dafff205d3e4d0", + "stateRoot": "0xf801f0ae5e3d5a5d90ca28b461d3e0a677d9e4cf7255caf1c2eef8eb071711e5", + "receiptsRoot": "0xd593abc3db20ebd5b10a6733655958da6d1c5b35ee05b4814cdc175ee7531b30", "logsBloom": "0x0000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400400000000020000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x109", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0xa5a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x669d2fdcd20848e3f746c76753dac2763d798d43492e58e75eec82ef4fb156b3", + "blockHash": "0x6442f9445011c3fabe60fa667b6d3312a035f8b31ba11d66784657a7b1610e67", "transactions": [ - "0xf87481f308830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c62087a44acecfb2c656d69748718e5bb3abd109fa0fe8ea091430d3b75ba298e74524e5fb6fe481c4950b522fffccf1e94206ad5c7a013bb8d11137fbf2826ff165447f9f15b8b4acfab5d0e0b092632975f351dbf73" + "0x03f8fa870c72dd9d5e883e82012a0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c62087a44acecfb2c656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0321c62425869f150c2cb7f489691c3e5cd49f7cd62d07ecbb7477c4148aaaa0b83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a0f28cb1c217ed21fd0c1cca1ac6471a4a1e1322513803209debc62d460bbcf5bfa01d36fb08965086554afaf29e564765993a89f231d1fb7c822f9cedbf38142192" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0x02a4349c3ee7403fe2f23cad9cf2fb6933b1ae37e34c9d414dc4f64516ea9f97", [] ] @@ -8392,21 +8447,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x669d2fdcd20848e3f746c76753dac2763d798d43492e58e75eec82ef4fb156b3", + "parentHash": "0x6442f9445011c3fabe60fa667b6d3312a035f8b31ba11d66784657a7b1610e67", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xa3f1d1f3a5479545b0e1a5e8ede05281f5c19182191663ebceb9d877d674175a", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xc24cbb64371207d2535756c6e351e52664feff1f248b0bd5ec9da5b2a6ba1503", + "receiptsRoot": "0xd91270b8ced1e15e9ae15e9082afa3ab675eb35f2ef90504cd34f809be9580d1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000808000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x10a", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0xa64", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x8bc68b8a166d2b68a73be23ea20193dccd82a3bfedac661f969bdc32fcd454a4", + "blockHash": "0x957a973ad8b0b3e200ae375441704b26ce89fa5056a66550359b34ee91a2a0d4", "transactions": [ - "0x02f86a870c72dd9d5e883e81f4010882520894c7b99a164efd027a93f147376cc7da7c67c6bbe00180c001a0614813ef71b15ae6c0e87a53fdce19608fb50a3f85b90d201fa9fe374e9b28f9a00d51baec84d22441726cfa3d3c87a08e190a791d39736d820726d270edd8c29e" + "0xf87582012b08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cc71d2dcac9d2c7d8656d69748718e5bb3abd10a0a06b7a5561adc1da4a84af285176c1278e1e457c2e6c88bd1c581986952c6a38c6a024432b3cfeb0da3431d49dcf45dbcf347efc2224f6ad8043c85b3efa66300c43" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -8423,21 +8478,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x8bc68b8a166d2b68a73be23ea20193dccd82a3bfedac661f969bdc32fcd454a4", + "parentHash": "0x957a973ad8b0b3e200ae375441704b26ce89fa5056a66550359b34ee91a2a0d4", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x08dab9f63e2c2aafaa520e12138b01b3e0c23c308893968af25a0d38b15d6c00", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0xfd434f0cd7eb391ab7f027196e5f51ac834f735fcac32b8e31d6ad78d18faa3f", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x10b", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0xa6e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xf8160bbab91163c4b7120ab3c60606cc47ba1ec0e765daf1d68ca0dcf52d2787", + "blockHash": "0x714651f961e055fb12c089df6e5c83f279400bba685d20810303f77984712cd0", "transactions": [ - "0x01f869870c72dd9d5e883e81f50882520894654aa64f5fbefb84c270ec74211b81ca8c44a72e0180c001a0a6f0f360c5a1a83b44c9596dd1f56ce31b234d0420f6156884a29a66cfbc42bfa0669e36bd373c9265ca998588d043303e88da8c2f8ec8898ca0be6009218d00b6" + "0x02f86b870c72dd9d5e883e82012c010882520894654aa64f5fbefb84c270ec74211b81ca8c44a72e0180c080a07ef0599368e48f92cea08522b2af646397a75b14c5019e5100960f7c6e3621d1a07571eeaa9614c533053d49ebe30d33740bbc681996119333a84bcdc1684fa236" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -8454,21 +8509,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xf8160bbab91163c4b7120ab3c60606cc47ba1ec0e765daf1d68ca0dcf52d2787", + "parentHash": "0x714651f961e055fb12c089df6e5c83f279400bba685d20810303f77984712cd0", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x7b0f4215fad37adedc45506bbf63d576e0546ec58e3715743bda1d182a87173c", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x7f6912c6944851e25a3496940081d559f868580a929a9b423d524fccc743495a", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x10c", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0xa78", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x3f4cebd4ebd414ba3710ad5eabfefa06fc5f007c62ef0900e07c263e1923889f", + "blockHash": "0x0b3f682d9d441ee52d4a38112d385f970973958bc4586ed97a2ef47a202aa38f", "transactions": [ - "0xf86781f6088252089483c7e323d189f18725ac510004fdc2941f8c4a7801808718e5bb3abd10a0a0b657470f4dd51519c81a036de7f51b2e5554575d49a376a08f4bc155880f2a91a02b9e03016faed61ecece3dddea17a7c27b6e75076cc1351a06966a18ac98636d" + "0x01f86a870c72dd9d5e883e82012d088252089483c7e323d189f18725ac510004fdc2941f8c4a780180c001a078804d323a6d0022973b593c84be513f2f2479a7d370b92f94f4a944b832d913a0396694a61a6e2793d452220f9d6bcdec26754cb218a622fc6c3a1ec73cf406c0" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -8485,28 +8540,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x3f4cebd4ebd414ba3710ad5eabfefa06fc5f007c62ef0900e07c263e1923889f", + "parentHash": "0x0b3f682d9d441ee52d4a38112d385f970973958bc4586ed97a2ef47a202aa38f", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x2554f77d3552a0ee983978ced700fedd929024bc7690cdf168f1e9ca0c5ada7d", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x642b07f0c012d1a6cc8684db3f438e5b94bff72c3fd16afa1ffd385b5849c102", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x10d", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0xa82", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x51a4821b633b80775e02a85aafd3a58ed2796e158c03aea46004e25ca138eaa1", - "transactions": [], - "withdrawals": [ - { - "index": "0x17", - "validatorIndex": "0x5", - "address": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "amount": "0x64" - } + "blockHash": "0xd6a33b58b1e38fe4ac1c3386de7de4d1db23f14871f1b0a6163750738a6844b4", + "transactions": [ + "0xf86882012e08825208947435ed30a8b4aeb0877cef0c6e8cffe834eb865f01808718e5bb3abd10a0a0779b187a8ebce5b522a53b7c1b541b85e639525c747ac9f29d79361d3cf113cba04013c8dcb8374c518e4cf57dc71e4c48a093002b181cfcbe8d90b312879038f2" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -8521,23 +8571,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x51a4821b633b80775e02a85aafd3a58ed2796e158c03aea46004e25ca138eaa1", + "parentHash": "0xd6a33b58b1e38fe4ac1c3386de7de4d1db23f14871f1b0a6163750738a6844b4", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x5d2d837f98e90f380271bc4eaaa543f15630b485a755956ab1d023e14d41ef2c", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x7ce4e321ae6a7f99bf8c18556e0337125cde5f4396966ceec6cd7019d2423f62", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x10e", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0xa8c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x6904e188fffed4cc41632df32452ec9bd4cafdee6f5d76c36e1b2efd33ad9079", - "transactions": [ - "0xf88281f7088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a0bbeeb602a74706ac6e91e64344c1844808b21eda8b2303c2fe5d6a0072be018ba03b5274579f02a9f98c995311ab714ba8f8f83d782cb802aa7eab0d47627f90c8" + "blockHash": "0x7fc400f7b6c69771e1a1dd0fef6a7fcb25f9d4a2160f28c2c20ff5c8c5557396", + "transactions": [], + "withdrawals": [ + { + "index": "0x17", + "validatorIndex": "0x5", + "address": "0x4dde844b71bcdf95512fb4dc94e84fb67b512ed8", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -8552,21 +8607,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x6904e188fffed4cc41632df32452ec9bd4cafdee6f5d76c36e1b2efd33ad9079", + "parentHash": "0x7fc400f7b6c69771e1a1dd0fef6a7fcb25f9d4a2160f28c2c20ff5c8c5557396", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x2408c8ee1b99f42499120241935b75233442b2ced2ee4df0b662845fd312da2e", - "receiptsRoot": "0x0d4f58d0c68a50f97304f479e8cafe31adfb13cbd601e084066af748100882c7", - "logsBloom": "0x00200000000000000040400000000000000000000002000000000000000000000420000000000000000000000001000000000000080000000000000000000000002000000100000010000000000000000000200004000000000000000100000120000000020000000000000000000000010000800000001000000000000000000000000000000000000200000000000000000000040080000000000000000000000000000000000000000004000400000000000000000000000000000000000000000000000000000000000010000000000008000000201000000000000000000000000001000002002000000000200000000000000000000000000000000000", + "stateRoot": "0x7ff2b46cdb8074ca55d4b3fc13192c9699cb0b7a76d8e9958fd73aada75e88b6", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x10f", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0xa96", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xf6354df3badf86b25e2f88f4630610c9c756a76eab5489bf84dc4b5faa5dfcad", + "blockHash": "0xd40c0450e901d3193859726272a91036198d0bb55438bb30e7e2ee747bf90d07", "transactions": [ - "0xf87981f80883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa074dc1ffa4861a35bcc8448c8e6b1405fbd4b51a3f750a4afcf44ee192c186bcea01755d34cbd340f9c8439880745cad348449f931dc18dc31c69e8b60bccca14b3" + "0xf88382012f088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa0d30b64c986d60875c723271137dda91480051141fa40b9b19fda5b35b28498d0a072b15981e23481356183bb684d92a17520fcc49b8e79bd66b01c2a3eb00e5080" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -8583,21 +8638,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xf6354df3badf86b25e2f88f4630610c9c756a76eab5489bf84dc4b5faa5dfcad", + "parentHash": "0xd40c0450e901d3193859726272a91036198d0bb55438bb30e7e2ee747bf90d07", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x656387ab387b18449d508730369f7633ecc8ad248063a0d2106374a5a72ea043", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xbb6617e19c771c68482094b894c8e7436cbbac7c4f17f55675ef403ea931e18f", + "receiptsRoot": "0x5622fe693f4cec7001b7b5255002970d6a43e8766dd6b65f97dcef68b4b15e73", + "logsBloom": "0x00000000000000000000000000000000000040000000000000000000000001000000000000180000000000500000100000000000000000000000000000000004800000000000000000000000000000000000040008000000000000002000000000000000001000000002000000000002000000000000000000000000000000000080000000000000000000000010000000400000000000001000000000000000000000404000000000000000000000020000800000000004800000000000001800000000020000000000000800000000000108000000000000000000000000000000000000000000000000000000000000002800000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x110", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0xaa0", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xa3f857458c4f8e850d17825dd663d51219737a227a157cb9f3eb21a7dabf3c12", + "blockHash": "0xb56358c5f0686a2af5b2569179542237964b481269f589871f1d0a8494b22716", "transactions": [ - "0xf86481f9088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0c169d3545078ccd936ab6cd33f5f22548618c895668c4f84af4f9ebc950eec38a06c86ddbbf36b2aa97dd38d268b4e64b967167f51530c48c63e3a23e24bcae4b3" + "0xf87a8201300883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa067ce64185ff235bc6fb6d1c933db1f65991ea4268907c8029122d1338e903d4ca04dcd6718312a76e391829354b6971c306a8935e0c61eb6ff1f8dd4114a8e22be" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -8614,21 +8669,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xa3f857458c4f8e850d17825dd663d51219737a227a157cb9f3eb21a7dabf3c12", + "parentHash": "0xb56358c5f0686a2af5b2569179542237964b481269f589871f1d0a8494b22716", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x803db5b17b6a762269881f87517f2941a1a9c42fcd0cddfe7544945544566c49", - "receiptsRoot": "0xecb4f3e60b707949e677bf6d670c9f95cb89f881a643f318b0147d300b110a10", - "logsBloom": "0x00000000000020000000000000000000000100000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xf7a1364bb961162f6574f5b3a8b7b56166ad532a49dc6fd5c80053712008e967", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x111", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0xaaa", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xa9e96ee23c11f8d5762340e128d2280d87ee788885951468baa9a384665b95f7", + "blockHash": "0x6db49261c82dcd68dbd907e9ae99e60e8b60a144e20fa40bc9760e6af5ae95ab", "transactions": [ - "0x02f8d3870c72dd9d5e883e81fa0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c1edb46f05849d382656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0ee181b97fd68754f6245c655a0a0686e8d12aa4eac5f1d059e7e3b8d6a92407380a0d1c9df9a238c482417fc0bb6a007472f4bc8e77e2c87eb0b31e25370cfdfba11a065fe3cbb739fc600e9a03210f5dbe449df426cb872cfbbc7a9d19c20dec09381" + "0xf865820131088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0963b4b682cee1ac82d2573a185fc77f4dd0bafe984dd0ec3eae6ba6c5b96f336a07bd8df7e9e06faa4484b7a99f81264ec6450f44fd7cfda336c64a771e7879cc0" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -8645,21 +8700,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xa9e96ee23c11f8d5762340e128d2280d87ee788885951468baa9a384665b95f7", + "parentHash": "0x6db49261c82dcd68dbd907e9ae99e60e8b60a144e20fa40bc9760e6af5ae95ab", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x54cffe7d4fef024de316515ce8a1b8d45facfc45060afe9422513b076d3d7d60", - "receiptsRoot": "0x2c4e34289f602c7112bedf7b63c453a4b8ca4d68eb2c6aa24af4ef274deefa2b", + "stateRoot": "0x6337ba2546295dc867f60b1bf81165e062cea1fef20ebc7704386c0e24ed09c4", + "receiptsRoot": "0x04f73f76e4bba7f03157c98cc8882d865b925617737189a14a142449408e9f72", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000040000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x112", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0xab4", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x443c32584ab5e94cf1393eba7de764dcbf40a903572c0b1737a2198537886269", + "blockHash": "0x295a8e852bcd10264566f53a7c2b7010d082476d400aeee5d1067c6237964b33", "transactions": [ - "0x01f8d2870c72dd9d5e883e81fb08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c84eb17e70e299b7f656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a04edb05f465bc71ee02c59ac9b5b50ddd974960ea2bd7e8cf7ae91c38c0b5789c01a0f27f117e815339f2749850a97c719a6c69358b37864d12e9898e689f446a9ceea015788df7af934298d0184f55d371f2ad0c79cf140b9ece4e8518d8a5f0a21efc" + "0x02f8d4870c72dd9d5e883e8201320108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c84eb17e70e299b7f656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a04edb05f465bc71ee02c59ac9b5b50ddd974960ea2bd7e8cf7ae91c38c0b5789c01a0f7a778b0a09332e80f8e81093e5e1e7c52bbd27b7ffe32ecc0f7502aa17548e3a01bbb86d42cab74c611445a5952513f45d34bcc5991768a03f1c3094ab8718821" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -8676,29 +8731,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x443c32584ab5e94cf1393eba7de764dcbf40a903572c0b1737a2198537886269", + "parentHash": "0x295a8e852bcd10264566f53a7c2b7010d082476d400aeee5d1067c6237964b33", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x26a0e4a442d51c93e770373c6818c0c67ef9ddd7d626707a1f1de5cab25a8086", - "receiptsRoot": "0xc06b7b23d29690d39174ae317e01ab8a941444749c462ce9f86508e504b7b4e2", + "stateRoot": "0xd9103dad491d1411ebde692ed260f608f8a0e516b3667c19745b853d134e05ed", + "receiptsRoot": "0x54b806f301e72c5c97cd72fdb3bfe7f7bf3a33126648b0819df63ffffb9bebd8", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000400000000000000000000000004000000000000200000000000000000000040000002000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x113", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0xabe", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x1910146905689fbbc61f374a7bde5325be084f307a5617b7bdb319691d7cbe7e", + "blockHash": "0x59c54b1678dca13353be6cbe9090244300dafeeaf924758a74eccaf5d8e83cbe", "transactions": [ - "0x03f8f9870c72dd9d5e883e81fc0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038cd67b2566c143f645656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0af1c2654b2e98e9ffbb02f14d88617a245a9a1679162be29776a4836185dc2fa83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a0e0f28063ea2a24086eab327a71ff3e93f1fe235ae1e1b4481a15c47a53d5bd9ca019cc7b23d66b225280440f0a95b90d9213c83bbf26e5a4d4e6a7a8dc4c72c4a8" + "0x01f8d3870c72dd9d5e883e82013308830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cd67b2566c143f645656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0af1c2654b2e98e9ffbb02f14d88617a245a9a1679162be29776a4836185dc2fa01a068ea7748cd8fb3a62c9c0ca526662190eb90da364aefa43f95a7fd80069f8e0da03fa5b362efa81b138425b1995031b081841e3b74d0e466406092121b431984fa" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0xec60e51de32061c531b80d2c515bfa8f81600b9b50fc02beaf4dc01dd6e0c9ca", [] ] @@ -8709,27 +8762,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x1910146905689fbbc61f374a7bde5325be084f307a5617b7bdb319691d7cbe7e", + "parentHash": "0x59c54b1678dca13353be6cbe9090244300dafeeaf924758a74eccaf5d8e83cbe", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x365814495fb3a18e4e09db0619a45be4ad5122707ea2dfd6884b63b5e1c2dcd0", - "receiptsRoot": "0xdb1dd143b29f2936ae059b08853ae6e6a89db350809c3185de6ea9c618ea6920", + "stateRoot": "0x3ea9fc59800a6487e43efaa31e2b75edbebac868211334f6424d27229ee9aae9", + "receiptsRoot": "0x75976c90eec5e0755df80f972dc62aa94af9d4dff4dc2348789422a62d262259", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000008002000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x114", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0xac8", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x5d602bc5189b5a955faeb7842825c53c4cd335c0cac7756599e3a7d7a9b1e604", + "blockHash": "0x62434faab09991ba4832b647e7260e305c48a47556068e84a5a0f8d1cd23ca0d", "transactions": [ - "0xf87481fd08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028ce6d182630e8ffca8656d69748718e5bb3abd10a0a05e0045c49ffc8d2f6c70cd6fc2033bcd0a31c6515b8744720686836a04a2236ba02411fd9607b7640df6c5a2ac2eef30895bd0ed221718ad5b37a5d23d719398a7" + "0x03f8fa870c72dd9d5e883e8201340108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038ce6d182630e8ffca8656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a01f6ebf3e4d9c96ec86b866137bbec9bbb56d188e7126babfccc6394fdcc6a3d483020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a046d328ccc281080c9cbd39806ec008e6e80362fd11dab9fea364f7671e540ea2a01ae74b5fd369a9282a2830a1c67e92416772ebb18da78a90501156733b650e99" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0x2fc9f34b3ed6b3cabd7b2b65b4a21381ad4419670eed745007f9efa8dd365ef1", [] ] @@ -8740,21 +8795,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x5d602bc5189b5a955faeb7842825c53c4cd335c0cac7756599e3a7d7a9b1e604", + "parentHash": "0x62434faab09991ba4832b647e7260e305c48a47556068e84a5a0f8d1cd23ca0d", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xef3660b1a4ef1379d8611613bfdd0fa481d0cb0c447ba91662ed3061407ea867", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xd2b92c2a4b2e37692c4fa39277a649ba09add321635433a9f5a85e10323aec38", + "receiptsRoot": "0xa4fb4fa96e26e57cd23777822feb59c66993b86b1c5fe2998054861530bc08a4", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000400000000000000000000000000100000000000000000000000000000000000000004000040000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x115", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0xad2", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x7cdd5d09a0af5e26bad74166fd6a4324185ee337b005e5df5f4f67f00155cce9", + "blockHash": "0x9852b90c33582df6fce102fb4e211a0e0b391b486dd80752560076c200aedf9a", "transactions": [ - "0x02f86a870c72dd9d5e883e81fe010882520894e7d13f7aa2a838d24c59b40186a0aca1e21cffcc0180c001a08fc9a8d1ebbdace1c8111cb137b3024b0620a4311574a5bcc3af2c0c5a0b5b7ba0238b44f3d32d593eafedec3d2cca2bbfe3e68dc96e333dc5b7c0b4c0141b4af2" + "0xf87582013508830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c175564045165c9ce656d69748718e5bb3abd10a0a0b7490c29a40996e144cc3955a4c2aae7f86a138eef44a24dfd28adf7268314b2a04f5f8a7010b2c8cc4d519bf0712bdcaefc997b02d8085f945349a58b9e39ac64" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -8771,21 +8826,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x7cdd5d09a0af5e26bad74166fd6a4324185ee337b005e5df5f4f67f00155cce9", + "parentHash": "0x9852b90c33582df6fce102fb4e211a0e0b391b486dd80752560076c200aedf9a", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x17d40d4bf412667ea693c2b08587f543806e84f610c1b5a360a9b0be7b25cee6", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0x16bc56677af4614198a208557d5464144cff14ed2c033401272883a09b176655", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x116", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0xadc", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xda06797d4ea9e2d242a7f1d77163e4cd0d18aa7e9ae04a2357c7a359c3a7897b", + "blockHash": "0x65240654f94bde1e2d244ef74fc438f08b54b1e9faecc7ec1ca49a7ba83ce5ce", "transactions": [ - "0x01f869870c72dd9d5e883e81ff088252089484e75c28348fb86acea1a93a39426d7d60f4cc460180c080a08b3ceb8078fd45b2305a1cbe2d116976b180ec20267f1af943ce1548112d7aaaa008999b87bb4d79a8fa0ec280bb0f35435852ec683167f3ccdd63f3987da1209a" + "0x02f86b870c72dd9d5e883e82013601088252089484e75c28348fb86acea1a93a39426d7d60f4cc460180c080a0d9ffd12f7588d14332da52ceb4862c1c9440972503b6bea4ff2f0c814bef0d77a07bfc019e96b947ae8453633bb24a02b9d4ee42d6a61dac59acaba0b3145ab205" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -8802,21 +8857,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xda06797d4ea9e2d242a7f1d77163e4cd0d18aa7e9ae04a2357c7a359c3a7897b", + "parentHash": "0x65240654f94bde1e2d244ef74fc438f08b54b1e9faecc7ec1ca49a7ba83ce5ce", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x5f02ae67228f20bbde12c883504a1579c4d976759a0e50f2e940e3ffbc481591", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0xe6bdb5afa9a849de6b0d4bd5fe3539809083c6c836a54f36b4471339f72bd480", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x117", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0xae6", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x69c23b6cef19f994ec1120ebe41647daae8fc602ceeccb500bef3599ea8dc4d6", + "blockHash": "0x9f54ff65564ec9e51c194c32c07d73fa64f558ae0df769401105131d1f438d44", "transactions": [ - "0xf86882010008825208947435ed30a8b4aeb0877cef0c6e8cffe834eb865f01808718e5bb3abd10a0a04ae4a6f0f05c189b4c0a428d6be613758e3a1d6510bebbd6eb33ad3798621ba5a0147389eb4a565503213a8cd391c0896dd64feb7221e25dff795671cf193d970b" + "0x01f86a870c72dd9d5e883e82013708825208947435ed30a8b4aeb0877cef0c6e8cffe834eb865f0180c001a086bdb289e75a85bb6f3b4f8b6c2749f65e4b15e58eed8cc66c2ba2d6f5de8ceaa069b4015ac783ad4aadec56b02eca50b0a31b82b72199b09043fb6ba2f4b8e00c" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -8833,28 +8888,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x69c23b6cef19f994ec1120ebe41647daae8fc602ceeccb500bef3599ea8dc4d6", + "parentHash": "0x9f54ff65564ec9e51c194c32c07d73fa64f558ae0df769401105131d1f438d44", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x96484f33b10331b3839e43593cccf2809ecb6e009c3a8b0de26dae14f2b77454", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xcbf9bef3ad12460cbdc3971187c32f61429c42c3bedd417d57e066788b99b0cc", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x118", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0xaf0", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x1be678ea3efa6308b7fb5b3102651a8493462715c6b09f6cd9697efd05fc7d0e", - "transactions": [], - "withdrawals": [ - { - "index": "0x18", - "validatorIndex": "0x5", - "address": "0xc7b99a164efd027a93f147376cc7da7c67c6bbe0", - "amount": "0x64" - } + "blockHash": "0x1e86080bc89bddf96fd5508dc58502c9062a2d3e496aa859dd0b10ed033ff085", + "transactions": [ + "0xf8688201380882520894c7b99a164efd027a93f147376cc7da7c67c6bbe001808718e5bb3abd109fa0a662f632deb3fef96f5ab89f3b020b503a4729d9db036e2ec67bba1bb1452df4a044fa3357f58f9bd405168dc003f6e1861a724212d0ba39b33ec537685f365a81" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -8869,23 +8919,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x1be678ea3efa6308b7fb5b3102651a8493462715c6b09f6cd9697efd05fc7d0e", + "parentHash": "0x1e86080bc89bddf96fd5508dc58502c9062a2d3e496aa859dd0b10ed033ff085", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xf6d58eabd98bd5598e385d578a8ff15f667d36691225d10c633f928d2d689ba6", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x6a7076fae4ff76a77d4f1acafc2da76a7050a4e5ccd3ccd0d3d637a51ca47aa6", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x119", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0xafa", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xf776a4d1d5c352151872b684cb240fb3b7d163b655fd5939337a070a7c896d7a", - "transactions": [ - "0xf883820101088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa01549f55cbe39fb1cba5adf3e7f319c7d79d4fde019b360b322dfa2db5e155727a05961f7e708d6cfa0831a1ba4ad345c01627fc5b952c825aed42912aa8725fb53" + "blockHash": "0x5cb14068ec9e99fcb6e8e78e64cd2aea94f667888a9aa540844dfe0bc8a375dd", + "transactions": [], + "withdrawals": [ + { + "index": "0x18", + "validatorIndex": "0x5", + "address": "0x2d389075be5be9f2246ad654ce152cf05990b209", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -8900,21 +8955,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xf776a4d1d5c352151872b684cb240fb3b7d163b655fd5939337a070a7c896d7a", + "parentHash": "0x5cb14068ec9e99fcb6e8e78e64cd2aea94f667888a9aa540844dfe0bc8a375dd", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x18cd75fc41ff27a21a24a3cfb6bf9ee4635411cabd10c7519fbea1d7faea8a80", - "receiptsRoot": "0xeee70baf6dc22b8457f4fe7e2b8f1e5414f56cd212e6b199d50e0a88c1ad764c", - "logsBloom": "0x00000000000000000000000000000000000000000000040000000020000000000000002000000000200000000000000000800200000002000000000000000100000200000000040001000000004000000000000048400000000004000000080000000000000000000000000000000000400000800000000001000000000000002c00000000000000000000000000000000008000000080000000800000010000000000000000000080000000000000000000000000000000000000000000000000000000000000100000000000200000000000000400000000000000000000000000000000000000000000000001000000000000000002000000000000000000", + "stateRoot": "0xe5e70db521666aeb73a06f9c286b7502fdacb311fdc60efac8a8da590cfeb160", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x11a", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0xb04", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x9dc4808f611d1b29c89fe57085c64ec7815675f779d602734d45848babdaa5ce", + "blockHash": "0x44aeef6943cd37a6ffff1de2e0904beb164a461631b591993ab85ccb86abf4f9", "transactions": [ - "0xf87a8201020883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa06595f7a77a4e8c661b3e414b74d407c99eaf12519f8e25800117c63249b616d2a06f667e8299ab690f9e8bca562a0931b49ccaab00bbf3ac4e18a3370d0a7259f0" + "0xf883820139088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a02d4e1f125fb474ed8d60cfc496faf39035ebcd57af5937887ffa2ded09bcde39a03d5597e69b61d3f7abb3383a20338375b913743918ace209bec0c8d0f4f658b1" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -8931,21 +8986,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x9dc4808f611d1b29c89fe57085c64ec7815675f779d602734d45848babdaa5ce", + "parentHash": "0x44aeef6943cd37a6ffff1de2e0904beb164a461631b591993ab85ccb86abf4f9", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x22e2c1b880fa2a250f7d054acb7ef6b8111655409519759fc81d381890285875", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x1d45be906d2849f6e3161e17312a2fd977b60a55636ce6cd70eed8549bfee233", + "receiptsRoot": "0x2548b2c4f6ffcaa8cae3f813cc2f88574ccc98c9cdde87e4418a4066a0bcea20", + "logsBloom": "0x00000000000000000000000000000001000000000040000000000800025000000000000000000000000000020000000000000000000080000008004000000000000000000000000000000000000041000000000008000000000000800000000000200000000000000080000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000040000000000000040000000200000000081000400000000800000000010000000000000000000800000000000001000000000000000000000200000000000000000000008000000000000000000000000800000000000000080000004010000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x11b", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0xb0e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xe015df4bb2e84589a3bf64fa91b73091581910b42e0ee91f1d6cf25912d60027", + "blockHash": "0x61e5376ab0b484c9dca320837e8bc9dada91f2d60b550767d26adf500f5df996", "transactions": [ - "0xf865820103088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0e0be39b51a060c97c9269d342c0afbbc6dd2435241c31100c744a50ff3bb560ea04165ba1f56b87012d4bb382b551a94e4f01f7a6e59451039b43c7a4b29a18b4c" + "0xf87a82013a0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0eff406704f79d3f4db5be64f739a44fe6eceee562491b506795e88167f139e25a00cf97cfb7cdad504262c0d23737384042a1d4c3fd0fa4df3cb7ad6a96d54521e" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -8962,21 +9017,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xe015df4bb2e84589a3bf64fa91b73091581910b42e0ee91f1d6cf25912d60027", + "parentHash": "0x61e5376ab0b484c9dca320837e8bc9dada91f2d60b550767d26adf500f5df996", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x8bd72ff011c3ef2840fabbc5a422d1083fd40fe66ef36041c5a26d8555a54224", - "receiptsRoot": "0xa521888fe7f59d6f4ca65e0a1e98a920cf3352adaff79f113375281dcbd20b5b", - "logsBloom": "0x00000020000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000020000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x7cd71e8b07b7bb3fa70ed94616f4887bbfa4a6cce6facaa44e6865f59ae037c6", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x11c", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0xb18", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x9f3faf24dbf97542f5dcac91d35da491af51e24504e58f42c328ba2758b0b268", + "blockHash": "0xeb675d937511476e7fcc82eec7615c2910d74026ae57a3fd9e144ec4afc45a00", "transactions": [ - "0x02f8d4870c72dd9d5e883e8201040108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c1787f004c4316268656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0f0ca8a88096a033508993a424f4e40ee1d800f62390dfe4ed5dd74a0f6785e2580a0c0ef0c887b5a20d77bce56cc1a830c3e40be563bdfd1869dc8b7b844f8f87974a059b3da2bf65afd778bbe63dbdd64af23a66818ac2babbcf63a0d241a04eeef37" + "0xf86582013b088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa05732694bc88f7cc2644b44204bd328078810fb3926618d4ffdfa3e03ea000bb9a01010ef4bcf3eadac81e801f0c25e44a20dc4bd033f17e4ed09e3a0ac5a4b016e" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -8993,21 +9048,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x9f3faf24dbf97542f5dcac91d35da491af51e24504e58f42c328ba2758b0b268", + "parentHash": "0xeb675d937511476e7fcc82eec7615c2910d74026ae57a3fd9e144ec4afc45a00", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x25ad05d939524d40cddd283c1a7d67244e5dabb0c3e91442fc5b3259f830bdfe", - "receiptsRoot": "0x2e98deb47717de4589517376b85dcf871454659477b5c5c389be57ce31fa4dc8", + "stateRoot": "0x167eaa4051016ad131f5b603d25a900155c045229531514f479eb9b7bbb5aa5e", + "receiptsRoot": "0x5d14337c2d0d5f4da33e745c879800c2634b055d0f71545f3b3618e639eb1b6b", "logsBloom": "0x00000000000000000000000000000000000500000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x11d", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0xb22", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x594c9091455bd0cd08631909cab257feeae3a05401a43544e423c759be125f77", + "blockHash": "0x1cafd78ec641f4af5d4f70f2a69c94688dab74feb7d64115401f7cafec61c7e2", "transactions": [ - "0x01f8d3870c72dd9d5e883e82010508830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cadcad3ba169a8a51656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a00678ff21f84e5213aa8d1d173b3517f8e6c3d1523959c101c75a31daa70ab94201a023c96758cd5fee077920a67e2ff017fa227e63f7486eb5f696507a64d50fad86a006755b6e7016c5e2d1532ef8bf3868845066ae9697920deea92230848988c6ce" + "0x02f8d4870c72dd9d5e883e82013c0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cadcad3ba169a8a51656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a00678ff21f84e5213aa8d1d173b3517f8e6c3d1523959c101c75a31daa70ab94201a01918dbeecc2f61b5e9e696225c1c5f13090a04891d9a4393892109a8163ff3f7a0639e9ec95866c6dca604fb9798e992dd1989b08ffc54299a1a6dc1a2f94498ef" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -9024,29 +9079,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x594c9091455bd0cd08631909cab257feeae3a05401a43544e423c759be125f77", + "parentHash": "0x1cafd78ec641f4af5d4f70f2a69c94688dab74feb7d64115401f7cafec61c7e2", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x7d09b29b87c32bfcf4565856ff0ea4de4f86cfa15376b1f386adf7e193408f83", - "receiptsRoot": "0x84ee5d98c63a630bb6674d0045378f8ddedb2bf68b7f89189eb4477927016868", + "stateRoot": "0x775c80d1a80b1c76fe2f1c0af49b49c4a8e7405bd8090d956d047e998795caac", + "receiptsRoot": "0xd847ae81e705bf592e83e07e114adb8ef9d33af6da479f7c3963828da86d7c41", "logsBloom": "0x00000000000000000000000000000000000000000000040000000000800000000000000010000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x11e", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0xb2c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x1f1d279ca073fab2be1f425ff8c09696653b77632516524baee6171427d75532", + "blockHash": "0x437f7e43e11d7d3c69a7449e6cf3bb70f85495c6f84326ec4300833a445c7d8e", "transactions": [ - "0x03f8fa870c72dd9d5e883e8201060108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c8443769f598e5687656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a081260b78e72018d5773b6ba1df006b09a387fd733e59ad152c119d9848ecf1f983020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a00a4d0dfa4ef6445e63d10894fc07f68cc4c8849d23419c3d055690cad04445cba0463eb2a9bf761bfe759d65ce21ac7036ea3624c89321931dac40082f1bc24988" + "0x01f8d3870c72dd9d5e883e82013d08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c8443769f598e5687656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a081260b78e72018d5773b6ba1df006b09a387fd733e59ad152c119d9848ecf1f980a07b3fc599b095127e4e675563db4952e2c13c30485fc0e4ac434bb3d175e129e8a03ed2d1e42886b4ec6a6b828f389d4a27849e8487598d5c01c0a1bc5b2c026f5b" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0xadfe28a0f8afc89c371dc7b724c78c2e3677904d03580c7141d32ba32f0ed46f", [] ] @@ -9057,27 +9110,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x1f1d279ca073fab2be1f425ff8c09696653b77632516524baee6171427d75532", + "parentHash": "0x437f7e43e11d7d3c69a7449e6cf3bb70f85495c6f84326ec4300833a445c7d8e", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x6d864643a0d723539b741f6ec461b719d9ec8b15954e446782bdd2fb1daf9657", - "receiptsRoot": "0x05a287c710d49390a940418bb5b4e9156adcb109f5fd95e33bf9032646f7bf19", + "stateRoot": "0x8cde4488811e966f0881d87ae02ff4dca1a2aef4f11a854fbe9cd0659f553d67", + "receiptsRoot": "0xc99124f8a46ba081e312e6db1e41f758085537c17dba467ece154417c33b0a81", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000080002000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x11f", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0xb36", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xc48ec13e43df85d25ae98c82d9ef4c2d1d09195aec3de87dd7b36f9cb530e234", + "blockHash": "0x28c467c36d5a76c1f47784655e0360553564b11d092613b84636d27c005a64d9", "transactions": [ - "0xf87582010708830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c3f20aa6ef3a2d29e656d69748718e5bb3abd109fa05be6a5b4b3ee3ed08965f80adff402ac1d4c42bd388b9c5ad8e65d517ee676e4a01275191545b88aca4a31f12601a4d515bf666a03c61639d0832acd2e9fb6abc4" + "0x03f8fa870c72dd9d5e883e82013e0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c3f20aa6ef3a2d29e656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a09ebbf91a66183d0d37b03faf46daf8fe238c1aa2b24e6663dc14e50557d432c783020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a0944a43418c2a82928098195bcd1063a0d4d5553ff905a4772c55031d9b5e188ca0269be874b42c07952b5bfc61303a8ac6ed2aefe16fd234e88f97478436f78795" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0xb264d19d2daf7d5fcf8d2214eba0aacf72cabbc7a2617219e535242258d43a31", [] ] @@ -9088,21 +9143,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xc48ec13e43df85d25ae98c82d9ef4c2d1d09195aec3de87dd7b36f9cb530e234", + "parentHash": "0x28c467c36d5a76c1f47784655e0360553564b11d092613b84636d27c005a64d9", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x5db606d71cea1cec324482204654ef78a867c6eb0f07f449640020833b509661", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xf69a897df14993c56451103689053946df7a09c574a10f197c1956e036db6322", + "receiptsRoot": "0xe608d9463d18b52caf248aff389704e7a8d431adce9046d407a3929c168ffbae", + "logsBloom": "0x00000080000000000000000000000000000000002000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x120", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0xb40", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x082ba48558d19f6911b12db3e969c8f770871c5836cbd2a02d6686624c744c88", + "blockHash": "0xdcfb02fb51c962c7da9968cb094da0deead9be715cd80fe4edb15316afe5abd3", "transactions": [ - "0x02f86b870c72dd9d5e883e82010801088252089484e75c28348fb86acea1a93a39426d7d60f4cc460180c001a02c524f745ada3ce6c926875babfecf9f8756339cd21fb66cc4ada274d84ffbcca07b3c97003cbd3a0321f3d2f927dfc68696d17600b8c5f9cb0f785d188f75d530" + "0xf87582013f08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cdb7522f95019b619656d69748718e5bb3abd109fa0028fb8a95e9b6be0f40433e37016b9d8aec371876c9efb6d542acfd11a6f5a63a0681fd28936f71c4e26b68dcfb31b01deec00398390ea47791fe6c670133cf93d" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -9119,21 +9174,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x082ba48558d19f6911b12db3e969c8f770871c5836cbd2a02d6686624c744c88", + "parentHash": "0xdcfb02fb51c962c7da9968cb094da0deead9be715cd80fe4edb15316afe5abd3", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xe45abb3f86c7ca4f95eba76b969b2b194ec3b8b90e0562567c04502ce0203c9f", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0x162e360af683c5a166d055477db0cc06b05117ed9bb7b2558930f81871a5b778", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x121", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0xb4a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x1e9ef85d67a81bd278cb21a68a068060358717f518aa9a31059b0ea52e9470f5", + "blockHash": "0x54e726c63980affe15f4fcbf0649b8839b2cec81fb03ff9d4885c49c0c13e49b", "transactions": [ - "0x01f86a870c72dd9d5e883e82010908825208941f5bde34b4afc686f136c7a3cb6ec376f73577590180c080a079cd6136faed0aa7f90de446a33df400fc30558589ea33c79ee41dca8ec1904aa060c35b52f54ade9734135680f625dd5790fad894704e08a9e631a53d6aca1de3" + "0x02f86b870c72dd9d5e883e8201400108825208941f5bde34b4afc686f136c7a3cb6ec376f73577590180c001a074086a3abc29275ddd4ca998950ba0189b06bf9fc4fe60336541e33abb96a44ba06021836d2af3aa84c9649616dd1248c020ac4b17b9b04af339f48afb9fecdaba" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -9150,21 +9205,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x1e9ef85d67a81bd278cb21a68a068060358717f518aa9a31059b0ea52e9470f5", + "parentHash": "0x54e726c63980affe15f4fcbf0649b8839b2cec81fb03ff9d4885c49c0c13e49b", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x2412974147eafbd2d6c512e7832d37fa6d15590e35d393651b5548ee0f50e940", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x67989baebf9aa997591e0226162add8feffae878efc188ab93d2a22ef07e5683", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x122", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0xb54", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x92ccd6105a6a3d6636516fc3de3d1d5b83476e27c6c15f0d1f0a4ac3cdb77f96", + "blockHash": "0x0d07c9bc86d9d0dd335a1d0b4af655218071687d5aa6a1bee5c9dcf69479624b", "transactions": [ - "0xf86882010a08825208943ae75c08b4c907eb63a8960c45b86e1e9ab6123c01808718e5bb3abd109fa0e48eab7a2337ecd9a7d93785dfb1a302c4ded058ec53dfb818fc0c5a30eb53eca027a97d55006822944807657fc6326c6f5468c9338f28b9922e7cbce40d184201" + "0x01f86a870c72dd9d5e883e82014108825208943ae75c08b4c907eb63a8960c45b86e1e9ab6123c0180c080a0ff1a23dfb62a03a09b014b4bf3e691fbe52a6b78da07ad989de34eaedcfdbabba0331d3bba364e174c4e7b0776864c8abdc389a33620ab9e301cc0fbafca7dbdc9" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -9181,28 +9236,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x92ccd6105a6a3d6636516fc3de3d1d5b83476e27c6c15f0d1f0a4ac3cdb77f96", + "parentHash": "0x0d07c9bc86d9d0dd335a1d0b4af655218071687d5aa6a1bee5c9dcf69479624b", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x190e225db93099517b36effe3f597034d5fe7fd0f772595c7a2d772a3bafdb69", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xd306e642f35fe1a4e613e1090c7c530bd153926e736d8892a27df2f21e712430", + "receiptsRoot": "0x642cd2bcdba228efb3996bf53981250d3608289522b80754c4e3c085c93c806f", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x123", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0xb5e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x59eb05ad455dd8785b7a82a8ec0b14908b49b9b99b89438e48a64f2c35dbec5f", - "transactions": [], - "withdrawals": [ - { - "index": "0x19", - "validatorIndex": "0x5", - "address": "0xeda8645ba6948855e3b3cd596bbb07596d59c603", - "amount": "0x64" - } + "blockHash": "0xee4bde5bb8d77b4d171c88650704849bc8308792022a9e0df731a264b6d986a7", + "transactions": [ + "0xf8688201420882520894eda8645ba6948855e3b3cd596bbb07596d59c60301808718e5bb3abd109fa084430de15b72b4529fbbc01601d015a6788bbcd471aa9b921c7b7d816fc71ca0a079bf52bdf4c4bdd192851e1e50b9257e6f6bf9a0d0bcc94eb73002ac5a9275c1" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -9217,23 +9267,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x59eb05ad455dd8785b7a82a8ec0b14908b49b9b99b89438e48a64f2c35dbec5f", + "parentHash": "0xee4bde5bb8d77b4d171c88650704849bc8308792022a9e0df731a264b6d986a7", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x602b8a0196a45e1c76fcfb3da25e5ab5577be52d365fbd68a7574f02fd9c5a21", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x0c1c56ccfaa16e9979041c01127f074290f865d4ae7592866ee323ce8f87b82d", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x124", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0xb68", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x8aff95cd5730ce6970eca865968ba524b1e66c7688319793c6edaa11791b0a33", - "transactions": [ - "0xf88382010b088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a0c0d1b53f8fa79401d3b27c1e82ed9e037a75cb9b147879399c9fe3c1084e8357a031aa98f702ea2eb4f7940dac34ac8c9d1ee30292458599593b553534af013f67" + "blockHash": "0xed908adb5661b69ea32366f362a10182a478af8b7ae01a870be3ae36c0a4138e", + "transactions": [], + "withdrawals": [ + { + "index": "0x19", + "validatorIndex": "0x5", + "address": "0x2d389075be5be9f2246ad654ce152cf05990b209", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -9248,21 +9303,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x8aff95cd5730ce6970eca865968ba524b1e66c7688319793c6edaa11791b0a33", + "parentHash": "0xed908adb5661b69ea32366f362a10182a478af8b7ae01a870be3ae36c0a4138e", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xfffd80f0432d0b41f5c21f59c2310f41a6d0f518a02fefecfd70a262d28bd1b7", - "receiptsRoot": "0xcac9bc12b1a5ea1f1749945728fc4827d6be026580117754514f28543ea90065", - "logsBloom": "0x00000800000000000000004000010000000000000000000000000000000000000180000000000000800000400000000000001000000000000000100000000000000000000004000008000400008000000000000000000000001000000000000001000000000000000008000000000000000000000000000000000000000000000000000000000000090800000000000000004000000000000100000000002400000000000800000000000000000000000000000000000000000000000400000000200000000000000000000000000000000000000000000000000000000000002000000000000000000200000040000000000008008000000000000000022000", + "stateRoot": "0x4f6a1ce7ef10269593a283f75ef466c9ba84d79f3f845a12b4d1f7162acba87b", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x125", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0xb72", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xe9652de769d861b7ae1ff71d6086d0049ff01ee57126e7b37f8acb1009efdcb7", + "blockHash": "0x2aaf777b8b9baa765e6c315b77d2ed0bf12654e466a9f5d9a4b3892c34d346ef", "transactions": [ - "0xf87a82010c0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0bd455370a23cf28aba44289a9d2d01f09d02e24617a22c876330c1a634e5cfe2a0533da1d94bf07e6d9f5c1fbf84ba789600fa7db1d43672012af0c66c72ae610c" + "0xf883820143088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa03fd1ed4657ffde9f278a6dbd7498fbd9178afe039cf507c14562ed99832b0650a07ab31ad66326ea0083695f22435947c3f55b501c16febb9fd763573b86ad5390" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -9279,21 +9334,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xe9652de769d861b7ae1ff71d6086d0049ff01ee57126e7b37f8acb1009efdcb7", + "parentHash": "0x2aaf777b8b9baa765e6c315b77d2ed0bf12654e466a9f5d9a4b3892c34d346ef", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x223b61f461d72039063ef208e4d34ade4ab6182ac9286802e92e34ed451da91f", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x5ded562d3f6efa30dbf5691e43a3c2209bde0e1ea1b7e7e613703197991d351d", + "receiptsRoot": "0xd978bab18927277656ed7e13f23ec0784c693d4aa84da97132004c0e3c499947", + "logsBloom": "0x00000004000000000000040000000000000000180000000000000000000020000400000000802020000000010000000000000000080000000000000000000000000000000000000000000000000000000001000004000000000000000000000000000000001000000010000000000000000400000000000800000000000000000000000000000000000084000002000000000000024000000000000400000000000000000000000000001000000000000000000000000000000000000000000002000000000000000000000800000000080000000200000000200008000000000000000000000008000000000400000000000080000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x126", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0xb7c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x62defc14b1b4b19b963574f0ddbe0b887a8017d28661a9d889c55729a388a40b", + "blockHash": "0x833f91460ba1a4d3754963b49508167d180860494029996788dfe0a4b7c1898f", "transactions": [ - "0xf86582010d088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a05c79f636d4fff235cf268f4628807ebaf6f678544021908341b8042efc4b4dfaa062ccc5326a5c336e6ec4c42b4c5914b316ccb5a01241a866d21f447b4bc4f828" + "0xf87a8201440883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0a8b9c241eaf3e71ad4fd47ef1b71de7c8907a9532b5cc8a28fcdfa146b511503a06d4416bc1436c0ab12d096e4489e0d213122e05824adb8ff95a01ac9e2d42242" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -9310,21 +9365,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x62defc14b1b4b19b963574f0ddbe0b887a8017d28661a9d889c55729a388a40b", + "parentHash": "0x833f91460ba1a4d3754963b49508167d180860494029996788dfe0a4b7c1898f", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x24c2880a28d4e01ecf7bfd004e4dde71ac8b2eceae57ca38aef54b5cafaafb68", - "receiptsRoot": "0x9f1aec51311c99ff2556e7ae510cfc0e13b0b9568362b661cfe1caa4d333b386", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000008000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x7e9f3bc83383ca95fe5653f585731fb296de3048f13503b0a6009bb7729cf9fd", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x127", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca90", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0xb86", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x98539ac0cea39c8cc5774cb783fa5993c03ab9e2dcc9e2e24ac18d9af67dacb6", + "blockHash": "0x55415e30e330b78eea4143896ca20531aa466962f9e7c270892c0c82b9dc52e8", "transactions": [ - "0x02f8d4870c72dd9d5e883e82010e0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c5d741e496f004f3e656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0d2dcfcdea157f70f8422558eb02bdc6a503cf24126f8f2dc2b52a644f5f0227101a03988ba449890e872876769b683ea83684aa9dfab1698dbe8c583052e14772fb4a02965eafe834e54c031b9d56a8ba549ae0e0947f8cdab83a52f5ff3057da40ada" + "0xf865820145088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0fd89b49a61d6883e8494ee4e49b923a929d45b1f213cd7115cc4c71bde233cfca04bfdd7ef8f5a843b7c774ac0b4d6277670d143664a6f0e44ee875b412f62c441" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -9341,21 +9396,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x98539ac0cea39c8cc5774cb783fa5993c03ab9e2dcc9e2e24ac18d9af67dacb6", + "parentHash": "0x55415e30e330b78eea4143896ca20531aa466962f9e7c270892c0c82b9dc52e8", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xb2f3b4b778f8095c0150536a7d267de8df138835ae2815940481daad4a528535", - "receiptsRoot": "0x3eaa13309f383a89aaadf58231da7f07a8b193ca8772a87fb6c32ebf0ed7c164", + "stateRoot": "0x0490c1fa403a13e5798f6c58646769b6dc95070bb79d3a845f136f978508623f", + "receiptsRoot": "0xa7afd0b07e7a2e88b4d7cb98997e0de937a24ea996e160baa8b28357c6cf85e7", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000100000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000002000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x128", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0xb90", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x84018a2df44823700329319d9aff27b73093f4284a45402e4a40958dde3ef298", + "blockHash": "0x3fbfd523742f263285774e53c795a95cd422dfcab3af25a98440ef2d9eaded1b", "transactions": [ - "0x01f8d3870c72dd9d5e883e82010f08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c526ae023b07bd13d656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0b3750ecb88b6e11e5f686cbacb3d24e61396cef4a1525b30d5a30edc4b3fdec080a0d21b4680a8c217acd22a05694031efcabec0311ec4c932df9f776e1a3799ba59a04b555912c1ed496307b90b872a43cfc1b9fafbcc370dd9c65dc691ce6e54e21e" + "0x02f8d4870c72dd9d5e883e8201460108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c526ae023b07bd13d656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0b3750ecb88b6e11e5f686cbacb3d24e61396cef4a1525b30d5a30edc4b3fdec080a081642f28c9de3fe1723ef8ccee70c49bed708f8877ce676752d45beff9536f33a078e5303b3fa3cd8038b4acae749adaa355781910f0a3fc023b6fabd75af45827" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -9372,29 +9427,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x84018a2df44823700329319d9aff27b73093f4284a45402e4a40958dde3ef298", + "parentHash": "0x3fbfd523742f263285774e53c795a95cd422dfcab3af25a98440ef2d9eaded1b", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xe750fcd9e9232f9f78e3710665189f967d03b76d8d8ddbd667e961b3c7e53a21", - "receiptsRoot": "0x0d0970d40d588ca540695901d111652461d1246630331bf30cb857868404e0f2", + "stateRoot": "0xf95f4921c08963ef37e942092ca3b4fcf53f0b11bac2d0c5bc0a420e0a3a4ba7", + "receiptsRoot": "0x5b0661634b1e9cb68a186435e4aa5a4bcc97a2b464a4c992a399499830e31c98", "logsBloom": "0x00800000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000200000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x129", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0xb9a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xe2c8b858ba858e6c7b73dbc23702f10a9a75117fbeaa447084be91921cfbe7f5", + "blockHash": "0x360482b09341ef1eb6bd12fbc2290c17fbcc72f8f1128a1f0eaedd6da6350c60", "transactions": [ - "0x03f8fa870c72dd9d5e883e8201100108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c8a1488f31c40de0e656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0f9b648439e7b876f9aa1b178fc6381f44bcaee23754d8da33b2d44e78cf47bb183020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a05e89472cf12cb81f835386e94bfe860f236decc11fa90459166e73dbb264c336a0164dc5735512cbd95aaeb58f3e75044bbd10c59ae433dfa87179c1cfe915e6f2" + "0x01f8d3870c72dd9d5e883e82014708830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c8a1488f31c40de0e656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0f9b648439e7b876f9aa1b178fc6381f44bcaee23754d8da33b2d44e78cf47bb180a0b74f33715a3d5e6c5acb5487fe7f13ee89ee0d2dcc8e8c8178733081a59ab6f5a0758d36564ed54824326dfe5d02d8a45fef7a563564df9e25ba21693dcfd456ad" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0xbc17244b8519292d8fbb455f6253e57ecc16b5803bd58f62b0d94da7f8b2a1d6", [] ] @@ -9405,27 +9458,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xe2c8b858ba858e6c7b73dbc23702f10a9a75117fbeaa447084be91921cfbe7f5", + "parentHash": "0x360482b09341ef1eb6bd12fbc2290c17fbcc72f8f1128a1f0eaedd6da6350c60", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x917f884041821b758a575dfb1dc88c0b12796fdc1023c638ef6c9ad881ac82e1", - "receiptsRoot": "0x64750f5470b09938713b1ee31a83a785fc2d232be127c7f839bf78fe5bb0ab04", + "stateRoot": "0x42b2eebbff687a49e5ae924fcc9d17fba5ec8d503c2a07e3ec7623a0b50ccef3", + "receiptsRoot": "0x3eb919d2fcef89e2c1516e126d60ed91a86467b2e89e39d014d587c5388ff17f", "logsBloom": "0x00000000000000000000000000000000000000000000000000020000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000008000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x12a", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0xba4", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x0a1092b8900b3db78271854ecef3b6b400f1fec980047d9ff07a130255a910f2", + "blockHash": "0xe1a596d7fe5e0df44bd95f04d6e52f6942a3ca81f2c339e69436a1ab39b6cb96", "transactions": [ - "0xf87582011108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cf9a5cb54664ef5f8656d69748718e5bb3abd10a0a00f564c0588a89fc970c508b4377f92cdae44a4d9da6d1ce161d62dcf4b7dc534a02343246e2d82d714b18ce75beb3115172b7f680be54ea957410cc4a59d97f75b" + "0x03f8fa870c72dd9d5e883e8201480108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038cf9a5cb54664ef5f8656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a094605c950838b2b0b1ce76f58acfb91a94c2aba787d02add7187360989745a4e83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a03b8ca3a76add252f7bbd8101e13577794778385a8f1bbccb7064828def032416a02b89693ba23e931ff1c55436ea8b56c04db444414933dcf27aa7d5ac19c84d34" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0x3ff8b39a3c6de6646124497b27e8d4e657d103c72f2001bdd4c554208a0566e3", [] ] @@ -9436,21 +9491,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x0a1092b8900b3db78271854ecef3b6b400f1fec980047d9ff07a130255a910f2", + "parentHash": "0xe1a596d7fe5e0df44bd95f04d6e52f6942a3ca81f2c339e69436a1ab39b6cb96", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x5b6235b02e42e778f6d3c97d4e08e717c74b4674a305652e696c84789a899abe", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x3b30cf8f701b20e556ba7642cd359cfe5c11b209ae4fa954fe9bf251e46d289e", + "receiptsRoot": "0x6c51b3f43a82c0424cf86ab4750ada1ab75eb4375120685c9031a4076901be2f", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000024000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x12b", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0xbae", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xa1e26afee8565c8352f0dcc623e984f72d24e09e005aba99f916fdb7c3807ab7", + "blockHash": "0xab15736f5f9a88b9ee82577680039c70f6ee7a1a45bcef23aa00ad68f2c4c3c1", "transactions": [ - "0x02f86b870c72dd9d5e883e8201120108825208944dde844b71bcdf95512fb4dc94e84fb67b512ed80180c080a0ff9e3913d23c05e13e847479ef40474942fb7cb8c8bbd8b6802587b50ccb69d4a02b1eb6dda4520f42c3b23c1c8334a1c0012b41370ae5652ebf3c07f3bbae72f0" + "0xf87582014908830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c4242e5ba3689784a656d69748718e5bb3abd10a0a006f0d8139bdc84c0e072ec2975098473df9fdcfbdc075b28f89ac9d94fb3ef6da00e30d4713b01d7958df25332fd92eb5d172eace2dd409b10fa28f2903890ab27" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -9467,21 +9522,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xa1e26afee8565c8352f0dcc623e984f72d24e09e005aba99f916fdb7c3807ab7", + "parentHash": "0xab15736f5f9a88b9ee82577680039c70f6ee7a1a45bcef23aa00ad68f2c4c3c1", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x38eb1f6c274b1f9babffc45e581441e4896d82c332ec61d562f5f4e94e11bbf4", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0x3223ad04cf675fa197ecf36289db8a47181442ff0a593bd6bf5959f306c8f451", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x12c", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0xbb8", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xdba21acb5043d419d3e972fad568d8e6179cffb0654e73c7f093a48877f38e9c", + "blockHash": "0xb09555539b48721618134671e9f09ca11c3473b6c972eefc61f7bf6e59901843", "transactions": [ - "0x01f86a870c72dd9d5e883e82011308825208943ae75c08b4c907eb63a8960c45b86e1e9ab6123c0180c001a0cd7d371b7e0f8162c06104886a132576bf82ae6a13250bd07db3e91dd3eeb879a038ade257128163d69601b8640d431ebf72fc3b45d47a3276a23eac921a643f57" + "0x02f86b870c72dd9d5e883e82014a0108825208943ae75c08b4c907eb63a8960c45b86e1e9ab6123c0180c080a0caed21f372ee5c4593454ade30ef1ee8224ac2ad66bc1aadb1cffa7e8e50c1ffa022bf467d785ea97c1f2b00679c759242c9099fbe548cc079ec5cdb8eef24cb9e" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -9498,21 +9553,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xdba21acb5043d419d3e972fad568d8e6179cffb0654e73c7f093a48877f38e9c", + "parentHash": "0xb09555539b48721618134671e9f09ca11c3473b6c972eefc61f7bf6e59901843", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x8a186f5fa70bc32b4def07f2f57dc4f6179ea83d21554890bf9a7286f81638cb", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x4d11bf1d5f97964995316bbb0cb6301bc72e4654e1b4bff5ac56aaab9e534534", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x12d", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0xbc2", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x4d7b2d7c56da60a9b57c4210cdedba40311978ea1aebf519aac65867e16f6a3e", + "blockHash": "0xfd0af364faeb502cd7a06b059c730040c89c4bb60af5f9e432062745c47a1c76", "transactions": [ - "0xf86882011408825208940c2c51a0990aee1d73c1228de15868834155750801808718e5bb3abd10a0a0fe2259e6d738f53a75a9a67fddb88bffd1ccf316b25a1666ae5e90d907128a0ca033c772738145475a5a6aaae112d3b1ee7ee5ef23ad1ec4c39b78632c1afdedbe" + "0x01f86a870c72dd9d5e883e82014b08825208940c2c51a0990aee1d73c1228de1586883415575080180c001a06e7e89f25881bac2942ebb15774d731ff658735063d2fc83af8a3b1e2cbfbebda02f005a584d1e67574a67f45d45c37e214ad520891e291a3a098ec7a675c09ef6" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -9529,28 +9584,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x4d7b2d7c56da60a9b57c4210cdedba40311978ea1aebf519aac65867e16f6a3e", + "parentHash": "0xfd0af364faeb502cd7a06b059c730040c89c4bb60af5f9e432062745c47a1c76", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x74dfc7e86aea9f99ad82259ee8bca79aa19d7b9c129773af3bccb6ef49758f9a", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xb8f4b54f262266ac9a6a7f7251af900e88df5d053dba8951be923734fe45c718", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x12e", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0xbcc", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x5ee998d96985103ae9e6f31a41ee0d44a4da62003a63b5ff4f29570aa42ddee4", - "transactions": [], - "withdrawals": [ - { - "index": "0x1a", - "validatorIndex": "0x5", - "address": "0xc7b99a164efd027a93f147376cc7da7c67c6bbe0", - "amount": "0x64" - } + "blockHash": "0xccc479403433e4222f2c1886e3707712822a3ac130f37263b277d7f42fedf93c", + "transactions": [ + "0xf86882014c0882520894c7b99a164efd027a93f147376cc7da7c67c6bbe001808718e5bb3abd109fa0c074d8b1d59a61ddf17c7cd6d9d6d155df7d22c6b02cf6873962860e76e4c946a06bfea57fd386eef123c608f5001b2540921441d7a5518602beaf671b55db011a" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -9565,23 +9615,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x5ee998d96985103ae9e6f31a41ee0d44a4da62003a63b5ff4f29570aa42ddee4", + "parentHash": "0xccc479403433e4222f2c1886e3707712822a3ac130f37263b277d7f42fedf93c", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x153776d17db6371e53f002afb53b2db67197ef79d802bf1500ea8cf0196cc1ef", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x98eea718b816a398d4eec814aed057da38bcf0d0ab9ec7f87ccc3467d3adcbc1", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x12f", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0xbd6", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x81db24e85960807d0f347bacc0364a9327e64955fecca02ab5fcc55efdc4a37f", - "transactions": [ - "0xf883820115088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a08cddb5ad687d9cfb5635935429f6bc6f73da0d0f14602aedb753d50fb90c11cfa04481220f6b763ec9de7a2ea8a2e64af551a6b90dd3d95d135deab8442aafd85b" + "blockHash": "0xcac6455fec57cb7705d097952412eaa1e3984c8a50f703d4dc84d990e099ce9e", + "transactions": [], + "withdrawals": [ + { + "index": "0x1a", + "validatorIndex": "0x5", + "address": "0x4dde844b71bcdf95512fb4dc94e84fb67b512ed8", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -9596,21 +9651,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x81db24e85960807d0f347bacc0364a9327e64955fecca02ab5fcc55efdc4a37f", + "parentHash": "0xcac6455fec57cb7705d097952412eaa1e3984c8a50f703d4dc84d990e099ce9e", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xf9fc5c25631e000a316925fb6b7190dd60ad610dc5866db54c1bc91c412f1aa6", - "receiptsRoot": "0x8499e3e63985d28600cbd00c0cffcd173218e8c1df3db90d1ab97a16e7c6e9b7", - "logsBloom": "0x00000000000000002000000000000001000000000004000000000000800000000000000001020000000000000000100040000000000000000000400020000000000000000000008000000000000000000000000000000000000000000000000000000000200000000000000000000050000000000000020040010000000000000000000000020000000000000000000000000000000000000000000000000080000000000000000000010000000010000000100000000000000010000000000000900000004800000020000000001000000000000000000000000000000000000000000400000000000000000000080000000000000000000020000000000008", + "stateRoot": "0xce500d05e918d1eccdf5f44e824e036dae2f5a856441d076b3b0493383161822", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x130", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0xbe0", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x9cbca6aa8b06935a740ab85580674c5cd4b2a840d078c92e005294241a7eac81", + "blockHash": "0xc2497bf1f6196ab87d85a9b1ea008b60687721f7bc75ab3fbf8de50d455baf03", "transactions": [ - "0xf87a8201160883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa039c0aabe6c9bd83ba7ce680430dae1ebfcd48db47589f2e66855d8869c0c9480a0175f7631a70797beed4bd4d075cadc7d86d638def72c6a2644cc767662bc24a0" + "0xf88382014d088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa0aed77e1adc4d85735ae91736955ce7d4ccb4a821ca1a354af9c21126fc56d433a0159e0e1a7f5e2eb9ebe116a56a30ce40135336d305851afba8a65a5ea6a89788" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -9627,21 +9682,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x9cbca6aa8b06935a740ab85580674c5cd4b2a840d078c92e005294241a7eac81", + "parentHash": "0xc2497bf1f6196ab87d85a9b1ea008b60687721f7bc75ab3fbf8de50d455baf03", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xfc236631b79f578cf1f730acf4ea9cd3083f4c12d72fa4d909968a88bfa2f1ee", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xd5fd98b8df59ff1b25ae93c21f976b037e8046ede37661d1a5e5b27ffb7f8fcf", + "receiptsRoot": "0xd0d766b35165fdf34cddcbe108f063ac07fe182d2b3a2088dc66cbf65536e9a1", + "logsBloom": "0x00000000000000000000000004000200000000000081000000000000000080000000000004000000000000000000000000000000000000010000000000000400000000000010004000100001000000000000000000040000000000000000200400000000000000000000000000000000000000000000000000012000000000000000000000802000000000000000000000020000800000000000000000000000000000000400000000000000000000000000000000400000000000000000000000000000000c00000000002000040000002080200000000000000040000000000000000000000000000000000000000100000000000200000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x131", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0xbea", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x5121438babb00581bb8862b84bfedfa4d586d59b08f7de67cad8988693061458", + "blockHash": "0x42690f0496662b95458544ff5fa9db8e9839a90c142ba6e211b2ad2fd19a8bfa", "transactions": [ - "0xf865820117088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0e6ec4a35afc15586c4dd750e4610c8b5401687e10ad12f251a4c56f663a8d9dca04c89c681c9d15f4059cc1bfc3e0ccb2228b8d757e810671e8548d5c3ae36a295" + "0xf87a82014e0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0aa853c0c43255b1996de6db7e434268a8c78acf7d547e5f77804b1f9c56c163fa0490f9b0c07434c0d825892fc0d0d96adde2f67b2fe83bc28c5332d62ddced55d" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -9658,21 +9713,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x5121438babb00581bb8862b84bfedfa4d586d59b08f7de67cad8988693061458", + "parentHash": "0x42690f0496662b95458544ff5fa9db8e9839a90c142ba6e211b2ad2fd19a8bfa", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xac1f35c169de27ab0497059cb09328b0e2f70022723b371d66a94f99db12baab", - "receiptsRoot": "0xc60042a0f586b4655b929d1f35cf04df2a18799eb4ff8258d47b6b643ab92d14", - "logsBloom": "0x00000000000000000000000000000000004000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000", + "stateRoot": "0xff7e337033c82bba1ba7fda4ef78dcd73c72c96f4e4b280cc4a07d6d75b87e65", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x132", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0xbf4", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x2c00478ccf60b7813adf88eae40d7f36cb2bb19d7d3a5e41904411d59f85b85a", + "blockHash": "0x5dc6a2e4dea9a9151cfb8dc58b8ad3e2e2c590f73ef3659f24bbd1484f5f51ca", "transactions": [ - "0x02f8d4870c72dd9d5e883e8201180108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cc45ec4c5c9153907656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a04d4855c520c09f3435e2cb46ceb4d2a12df59c127a1f2e871e7e9e8203fd6ce180a065dc63e2ecf0ec0098c02f9d874bb7809d9ea529e99a35efd267944f9f021d6ea057461847abc4de428ee5deca8fa2a6dde61d653ee897a03134d6ab1111edbcfe" + "0xf86582014f088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0f811ab125d628afb503e72fc03ffcf8bf0c94b9278b04a80d4583b5bdca47058a011ed1658949375d5f114abafe92733343e1e9decf853394a04e68b8b7fe1d945" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -9689,21 +9744,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x2c00478ccf60b7813adf88eae40d7f36cb2bb19d7d3a5e41904411d59f85b85a", + "parentHash": "0x5dc6a2e4dea9a9151cfb8dc58b8ad3e2e2c590f73ef3659f24bbd1484f5f51ca", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x09ae7bf54009cd877f0f4133dd934f1a7ffd44ce1700eca8ddc4fc3dd47a9138", - "receiptsRoot": "0xc6bbe32048f874de5ca9d433a0888e2d71c39fa006e27ba75a563a3f15860984", + "stateRoot": "0xb7f91e8621bd652b26c1cd38102a0da65f88cb5f181daeb52efffcb0b87117a7", + "receiptsRoot": "0x8f4bc522aee40a55d1ea96544b202ffe7c48a27588ca8e0b6280f8e8771d0953", "logsBloom": "0x00000000000000000000004000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x133", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0xbfe", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xbd2d25d7773172160974f1a8b6b790c629e44a011321c53a0cb08888b9cac459", + "blockHash": "0x170d3dd10df213b71da46b8d94023a22e58c3366eac78c70b095fbceee126712", "transactions": [ - "0x01f8d3870c72dd9d5e883e82011908830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028ce355c4e09ad571c8656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a038570ba11cfca6a25bea615c7ec09ae671516245a92a5f8fc61d2e82529454e880a021fc4049285e37a5ffddc71b565a74354b78b3ae23768ddd78f4f89769cca8d2a0506f4888cd6ac4b74e51e1fd2f41c9413ac7dc3e7164594bdd19a9bddb0d13a7" + "0x02f8d4870c72dd9d5e883e8201500108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028ce355c4e09ad571c8656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a038570ba11cfca6a25bea615c7ec09ae671516245a92a5f8fc61d2e82529454e880a0352c735b38d32df5bd6596e8984191065e4da2d6e56547f409c217868a0f56bfa05a618d58a18225ddf45f3243a69200f85a04e21a2778b3434823c21a18925a1e" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -9720,29 +9775,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xbd2d25d7773172160974f1a8b6b790c629e44a011321c53a0cb08888b9cac459", + "parentHash": "0x170d3dd10df213b71da46b8d94023a22e58c3366eac78c70b095fbceee126712", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x447376f436dbcd45154e2d2bcd6ddfe920e413f2ef9a075ba4caae45548871f5", - "receiptsRoot": "0x3ae89f3114f462c13ae1e0805dbcc594921657a098d21c128f119a43a13ef1d7", + "stateRoot": "0x4f8e99267b3f2c937906657a584aeb5e96845da3109e7f0f8cb517e571c70fd4", + "receiptsRoot": "0x1d42b78a784f6ac9a2e208af5dbdce6343dd4a3bc391338f5010f590e5dda60d", "logsBloom": "0x00000000000000000000000000000000000000000800000000000000800000000000000000000000000000000000000000010000000000000000008000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x134", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0xc08", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xa8a4ee8234dac48e460f619c77d02008ff818db6cf1a0a80de6a81af3e0d7e91", + "blockHash": "0x42e46e023d7d24d978c93644717729a7fdcb0e07c67e390a2c6699c4cb7fc7cd", "transactions": [ - "0x03f8fa870c72dd9d5e883e82011a0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c7906a8e7d74f757e656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0befb4ff6aefe6c4d85158d11057517eb9cb1e1cae3e9d2d9c90ff40b2cceb54683020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a007d97ba541e40dea07923e06265c253c519d279feb2e3e53a79e72946e3b66ada06f694b98cad48d402d39ce4d034fc8ca75f5ebee4b4bb9b1a2eb67c188a49435" + "0x01f8d3870c72dd9d5e883e82015108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c7906a8e7d74f757e656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0befb4ff6aefe6c4d85158d11057517eb9cb1e1cae3e9d2d9c90ff40b2cceb54601a0d25ae0523675e0fd64ad02bf5d19902816fc5d0f836981b8d57dab847a15338da001df53840599b6eb6e5daa0a0ecda3fd0f24226b06cb0ed473458dcee396527c" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0xf6342dd31867c9bef6ffa06b6cf192db23d0891ed8fe610eb8d1aaa79726da01", [] ] @@ -9753,27 +9806,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xa8a4ee8234dac48e460f619c77d02008ff818db6cf1a0a80de6a81af3e0d7e91", + "parentHash": "0x42e46e023d7d24d978c93644717729a7fdcb0e07c67e390a2c6699c4cb7fc7cd", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xf90b6e0f42a055c9b33ca1ca15998bf55c39408aa568028028daa46d9ff67c14", - "receiptsRoot": "0x0afed92b676a3b1e3c4945631c2f35f307b341f6fcc961101935f91fbf6a2475", + "stateRoot": "0x017c09a63851eb3673e1252e64d50010ba08eb374d930344b1190fb2d908c255", + "receiptsRoot": "0x1289b9de706c4e04e62cb0d571c3b3d1ca2855f8d4b220daba7d185a8b6b14c2", "logsBloom": "0x00000000000000000000000000000200000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000008000000000000004000000000000200000000000000000000000000002000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x135", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0xc12", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x11ddcb0efb438a2965ba558170ed3ccb27ac43bc3f7028628edcb3406a1d4623", + "blockHash": "0xa7c1b6d6c5d4fc516c4b7a9e6917a1929957edf45107e164fc0768578e4e555f", "transactions": [ - "0xf87582011b08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c34cb6faed8212f15656d69748718e5bb3abd109fa09e8eed2041c0b3fb16bc35e8ef8410ba6a311729651c095c3dd63a2de47e79c8a056b251d337e880ef0a3377774c6b911689f29cf74fecf094438e39f5d59c2cee" + "0x03f8fa870c72dd9d5e883e8201520108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c34cb6faed8212f15656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a03eb32abcff52bfdf0887e9aebaeeaee4a61b76f2fbc9a183c2afc8552d46c3f683020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a0fd544670525ed6d6fb445354933e077363014839e878ea0cb8f610c2338af4d3a06dd8877e0b44875d49819c17c4a79181047bad799c836c69ef605c70ba23b859" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0xa6589e823979c2c2ac55e034d547b0c63aa02109133575d9f159e8a7677f03cb", [] ] @@ -9784,21 +9839,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x11ddcb0efb438a2965ba558170ed3ccb27ac43bc3f7028628edcb3406a1d4623", + "parentHash": "0xa7c1b6d6c5d4fc516c4b7a9e6917a1929957edf45107e164fc0768578e4e555f", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x1e2b5442751f07806f0aa28e34525050adbff63fa3f8e6a882c3915d87656f05", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xcd8b73cb5b48d69916d97b098deda61b10f5e3f21fec80cfd678ef5b7ffce38e", + "receiptsRoot": "0x86c42eb55a78f125fe8441afa55d1dec4b294bf9314f70ef52ddb716188ec561", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004400000002000200000000000000000000000000002000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x136", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0xc1c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xccff97103894795edef27f3a29b05a2109a4f024d3c935233faff6be394b92f7", + "blockHash": "0x0762831f8a197faace5f89136d4e8fd2bdbcd634050bb8c28593c6f62769c2f6", "transactions": [ - "0x02f86b870c72dd9d5e883e82011c0108825208942d389075be5be9f2246ad654ce152cf05990b2090180c080a00a17151e389df51a00e7bf3feadef3191ea0ad38ec1be3fd7476baacdfe7d8eba04cdbe251df1c62cb3f1d59821bc6353909447d7267a172254f184967500e515f" + "0xf87582015308830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cb731385f04d97db8656d69748718e5bb3abd10a0a09abe467beb55df0823716b56ef94e1034cb4caf9f8f2befb3d03fcadae7f6f02a0548c60031efd2568057a7b428586bc61a539482aa759896d0885be892488ea46" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -9815,21 +9870,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xccff97103894795edef27f3a29b05a2109a4f024d3c935233faff6be394b92f7", + "parentHash": "0x0762831f8a197faace5f89136d4e8fd2bdbcd634050bb8c28593c6f62769c2f6", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xf595ac6b9f66304ef0c2e38e43c9b96ab2360dc87317a74c84eef96614e093c1", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0x347540851d85d8e1a3f6aecbe00a90100a88748f66ac59dfc2175dcb2ac705d8", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x137", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0xc26", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xaac581c002035b4c80879f87a1418a3129921f493472482a52b09d0fb6233f04", + "blockHash": "0xb534a77d9471e828befa7adf86678b4a7a928e2a2db3e9ccb919eb0d2e2d7131", "transactions": [ - "0x01f86a870c72dd9d5e883e82011d08825208941f4924b14f34e24159387c0a4cdbaa32f3ddb0cf0180c001a03cb049339eda9bb3c16ca7a3cd92102728378f3d2d232f60d3b45323d821eb8fa004242cea89f245dd65d9a0180c437b23e265a262607b7785eab2683e1779fe1f" + "0x02f86b870c72dd9d5e883e8201540108825208941f4924b14f34e24159387c0a4cdbaa32f3ddb0cf0180c080a027b3576746e2090eb8c591f5218834c24fc8e546cc326cd47c3d549b0000ef86a0483343082391b0902e7685358a12b24bfe74b84c21b75178790b6127f082858c" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -9846,21 +9901,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xaac581c002035b4c80879f87a1418a3129921f493472482a52b09d0fb6233f04", + "parentHash": "0xb534a77d9471e828befa7adf86678b4a7a928e2a2db3e9ccb919eb0d2e2d7131", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x7965f70a4268dacdca0ed3c4136a4d8c56dea966fdfa0bf518bd9404481270d2", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x86cc1c8ec7b8a9e6864a885a24a5ad32131aa338b242b21b8872784f5ed964a6", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x138", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0xc30", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x7e3909c2f8ede6f928c0820363dbd9abb712eec9f7be844bfcf8d3d04a538bfe", + "blockHash": "0x797081f69a1e07e62ab7d70958e3840489579027770db2acd79ab7da50c5684e", "transactions": [ - "0xf86882011e08825208940c2c51a0990aee1d73c1228de15868834155750801808718e5bb3abd10a0a07eb9ca4cb5e5dc6d8a4a12a87d3176e97df25a11cef96653b54f5764840d31d9a0173cbdb2a5bb18932a30b3826c0fe27605f622eca7dbc36c42fca92e3ff94e0c" + "0x01f86a870c72dd9d5e883e82015508825208940c2c51a0990aee1d73c1228de1586883415575080180c080a0bd50cc3348f9c4df62c2b6819da09ad9f59d6f664ac93d858cd9c4a8a7712fb1a00dd838cd7e8b5f7ea87752357dd50603a9dba395f44148b5d074c04041d45be3" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -9877,28 +9932,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x7e3909c2f8ede6f928c0820363dbd9abb712eec9f7be844bfcf8d3d04a538bfe", + "parentHash": "0x797081f69a1e07e62ab7d70958e3840489579027770db2acd79ab7da50c5684e", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x12fe5f9fd18b1d449fd3c25d815c065e9782e2c28cda214d77b45560fc932896", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xf427430575efd44fff9c42db0eef2fbf16eed6170dc1f0c9e27740493e64c2dd", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x139", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0xc3a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xbd1f3e51c77a927fc30973f8452ada7e030b8452273afd75dff18884af8a204c", - "transactions": [], - "withdrawals": [ - { - "index": "0x1b", - "validatorIndex": "0x5", - "address": "0x654aa64f5fbefb84c270ec74211b81ca8c44a72e", - "amount": "0x64" - } + "blockHash": "0x0ad3abab22df80481936bb2a0d8b50a807633495c41ede9d1570c25b59fdeaa8", + "transactions": [ + "0xf8688201560882520894654aa64f5fbefb84c270ec74211b81ca8c44a72e01808718e5bb3abd109fa08c1fffe0d5b5dcddc5c7eec0cd0e58e596dd46e45cb71629b3a03bc43b0a03f3a0773aeca142fc242046765c6bd72997f60eb5aa72a136b641efd1c790cb6146db" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -9913,23 +9963,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xbd1f3e51c77a927fc30973f8452ada7e030b8452273afd75dff18884af8a204c", + "parentHash": "0x0ad3abab22df80481936bb2a0d8b50a807633495c41ede9d1570c25b59fdeaa8", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x3bbfaf4efde9a24437c51d9ae86ad6bf8287f5ebbd8fe8ebc15c3619a602c6d6", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x0895c6fd3c63f4ac032cf4c14fbd1b4bc865f40ffe4ac85d47238b2eb763fa79", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x13a", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0xc44", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xf976366428e1f9e79b69a03a333c3ea2d57804cafad16ea0301def95480afa16", - "transactions": [ - "0xf88382011f088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa02e045ae41ba056fdd3328bd0ac90d86f6f3add947c60dc848d79fdc23e242a84a00bf35d683f8fd6a4e287c87c7c8bccb31d736c126602c55917e4641e902124bc" + "blockHash": "0x5d7d1a0c180dbae5272ccc6e6c01b45960408a2205e36e897320813cc1627af5", + "transactions": [], + "withdrawals": [ + { + "index": "0x1b", + "validatorIndex": "0x5", + "address": "0x14e46043e63d0e3cdcf2530519f4cfaf35058cb2", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -9944,21 +9999,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xf976366428e1f9e79b69a03a333c3ea2d57804cafad16ea0301def95480afa16", + "parentHash": "0x5d7d1a0c180dbae5272ccc6e6c01b45960408a2205e36e897320813cc1627af5", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x11f4b017e2e14ef950b5fb2ca09ea0e8546b9f9bb912ab2c493482b5af85b401", - "receiptsRoot": "0x874bf4080d916fe835dd08d3faffc7a4ebe2a8782654f36aae4b318a177e6e70", - "logsBloom": "0x00020000000020280000200000000000000000000000000000000100000000000000000000000000000000000080000000000000082000000000000004000000000000000000000008000000000040000004000000000000000000000000000000000000000000000000000004000000000000000000000000008080000000000000000000000000000000000000000000200000000000000000000000000000000000000000000010000000080240000200000080000400000000000000000000000000000000000000000000000000000000020000000002080002000010000000000000400000000000000400000000000800000000000000000000000040", + "stateRoot": "0x78b3cb7b18a396757fbc27a3b254334b513e9b11632726110581a1ac9775aae4", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x13b", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0xc4e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x3752f226d6f4f227e0d59f153fcdefff90cc3aa9566c14b02bf86a5ba7e5f740", + "blockHash": "0x457cf3e561354b6040afd9e0d386b3fea81719cc40b3fca29fc4d4f99be875f9", "transactions": [ - "0xf87a8201200883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0b220dbb522cd4c5abed86b07e4d87f62cd190c0bc3b535096a8006efc574b1e7a018a5c6b5be430f923a15c2b1b06de19dd8d1ac808da574f75e7c9254478fae01" + "0xf883820157088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa035f6ba62287308ffbbfb8261894edf57969a9f95630d6b145f44404efce327dea06580af4b699a96a41c5a0f39cf3a7ed3a0c6758ceb2d8d8705f88319643227f3" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -9975,21 +10030,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x3752f226d6f4f227e0d59f153fcdefff90cc3aa9566c14b02bf86a5ba7e5f740", + "parentHash": "0x457cf3e561354b6040afd9e0d386b3fea81719cc40b3fca29fc4d4f99be875f9", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xeee8e0dee166ef99e5fa64f9b7c3616cb8fccab712bbe198c9e17ceea46b5d86", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x402bc8c855f2ccb2d737c396d499ead744bb2dee1621fa24bf74fa6a2c91f34e", + "receiptsRoot": "0x7db11edace07336d23f92ccb11a83f53ba5423dd770cebd9373a83640ab9352e", + "logsBloom": "0x00000000000002000000000000000400200000000000000000008000000000000002000000000000000000000000000004000000041000000000080000000000000200000000400010000020000000000002000000002000000000000000000000010000000000000000000000000000008200000004000000000000000000000000000000000000000000000000000000000000000000002000000000000010000000042000000000000000000000000000000200000000080008000000000000000000000000100000000000000000000000000000000400000000420000000000040200000000000000000000000000000000000000000000000000000040", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x13c", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0xc58", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xbd34ef105826797a46b3ccc8b4a82c61897bce87047aa90ca88d590887dcef52", + "blockHash": "0x4e8f0489aada99804a9c89679ee1fd98cf0197713766bbb480c77970a95f3f5b", "transactions": [ - "0xf865820121088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a041a8dcd438529e1583b280d53972be37cc7ca049ce3643d8752f19e74c503de9a033fef9a4edbfc399a4652ebd1de044d19cde1cf51ee7c438d535c627d836439b" + "0xf87a8201580883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0ad8dcfb4390f7fa366243f1beb1e059e2f9950088868fec28ee22311f265f35aa05eab4d60f1d1f52965202e06cbe1085e28463db4f1746426c899cbba05acda08" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -10006,21 +10061,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xbd34ef105826797a46b3ccc8b4a82c61897bce87047aa90ca88d590887dcef52", + "parentHash": "0x4e8f0489aada99804a9c89679ee1fd98cf0197713766bbb480c77970a95f3f5b", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xc8f81fc12020b9daf991498ee4c67716c5e529cd6ea105b9620ebca5ca0062da", - "receiptsRoot": "0x4910e91c5e2a39c0c7abd39d435d5ee2788849ddfd7b6b0c5fe5d3dbede8f0a1", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000801000000000000000000000080000000000000000000000000000000000000000000000000000000000002000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xc02f0ee9f7010e2148b506712066b306ffbbc78d75b209a88daa358d20b6545d", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x13d", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0xc62", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xa2689bec112dc66781dfbbfe0877f3b56c055872e331b6d45acd6e8d97e046e6", + "blockHash": "0x8df9fb79d5b59f66814970a325d025e1e059f33616840d45bc73ee25a40f10ee", "transactions": [ - "0x02f8d4870c72dd9d5e883e8201220108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028ca4875981ed75b054656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a08a76d1e2fd58cc0018aa306e83990d74d16ba9aeab4794595fc72551f046547601a027fec5a40c1948d0ef8fb2c9b078ba930dc8d8592f691f20f104421b34aa7bf4a065e542ab66d86bf61ec21b6efa043928ad96a6e34cde2d1c44f103f1628927e1" + "0xf865820159088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0f40d3332d3996cca69bc91b95b31592abb5dbe52ee89c79da915ab5c9d03c34ea07370380f1a072929757900ea593b048aae64884632dcba2edfb0cd70ab3f6c1f" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -10037,21 +10092,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xa2689bec112dc66781dfbbfe0877f3b56c055872e331b6d45acd6e8d97e046e6", + "parentHash": "0x8df9fb79d5b59f66814970a325d025e1e059f33616840d45bc73ee25a40f10ee", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x2635a59927f7b04cd4536a0592c61c64bd6c746df1418ab57d7c318e9b7d057f", - "receiptsRoot": "0xfdf07728708e04bcc7e76047ee1911f309757477f5df93a25114e24b5630af7a", + "stateRoot": "0x8f2edfd625374a5d7beec93191a77b0fd3456319b09968da07909fa875398a36", + "receiptsRoot": "0x89fd8ceeb002cc5ef22dbfceaa45eec15c6f19cc82bc35bf2293380c9be3dd3e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000009000000004000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x13e", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0xc6c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x3f028560d99874cc15a76dd76b7da32cdb9548a9e262b5c986bc62ae920e643a", + "blockHash": "0x1da2f81639c8614abf6f4720da2ffca4a5557ae2c62f68948a325f08dce60a71", "transactions": [ - "0x01f8d3870c72dd9d5e883e82012308830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c5bd1cbdccbb7a3a8656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0d5eb8e9a486b23e10cf0092ca8690e7bd6d6c90932960cdfa5da36d1e1f2042380a03e7e1bb13e2ca57486b2f72bbb4a64a7320520d20c4d8a37499a739a6090713aa038d501ca743320bb18155ced455be09ca9802c7715746d355db1942f04d3d57b" + "0x02f8d4870c72dd9d5e883e82015a0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c5bd1cbdccbb7a3a8656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0d5eb8e9a486b23e10cf0092ca8690e7bd6d6c90932960cdfa5da36d1e1f2042380a0f44092a2c4d82ff06c2fed6ee5b831c59867cfcd0fb23d715503bfb6e81f86d1a077a2b1deba8fc487ce7645bb71b1341826193e05b9a9fb5f2839df7171d24682" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -10068,29 +10123,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x3f028560d99874cc15a76dd76b7da32cdb9548a9e262b5c986bc62ae920e643a", + "parentHash": "0x1da2f81639c8614abf6f4720da2ffca4a5557ae2c62f68948a325f08dce60a71", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x11042b90c5b05bf61a5b314e291ecb32c4feb8964fb002a69c7334e0d74915de", - "receiptsRoot": "0xf2e9f16617598b8bd3b8029a0e67f45874e0fcdec0515e73f20f677a43ba6aa4", + "stateRoot": "0x1c52961562bb9bf1e8ca7d75a53500f81b569d990de2e17441780ba2750f69a8", + "receiptsRoot": "0x7e6e34797a1654b05e5069d916c674f9b74f7a6429a62477147dae8d5cd50684", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000010002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000100000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x13f", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0xc76", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xa0755b0908be2efd8534b105a279c0045087852b3c412f2d3a888988e4fa475c", + "blockHash": "0x378d38c1343aa2703f647894a5fb7330de9fc0e363c86f55beee5d8d66e1d714", "transactions": [ - "0x03f8fa870c72dd9d5e883e8201240108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c15917920cd0da2be656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a09575996f3ad6e9709d7122224335451a59395327d297fd7967004e8dc139130883020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a05a856ee6dffab5fbfd8e1c4ff819353145b18b607699bd9e634af1af2b9081d3a06ab060ac1af8ddfa65300f04c3c68a441c754f390cfa1255626c29391278e71d" + "0x01f8d3870c72dd9d5e883e82015b08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c15917920cd0da2be656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a09575996f3ad6e9709d7122224335451a59395327d297fd7967004e8dc139130880a0861b172f70afee55f8c80a2011df58329d3dcf4977721a0d81cd3b0baec58ef1a027c4d7790f49b29a2c101cc3add1e14793c20a3d799a36ddf17fdb13be5ba69b" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0x0ae4ccd2bffa603714cc453bfd92f769dce6c9731c03ac3e2083f35388e6c795", [] ] @@ -10101,27 +10154,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xa0755b0908be2efd8534b105a279c0045087852b3c412f2d3a888988e4fa475c", + "parentHash": "0x378d38c1343aa2703f647894a5fb7330de9fc0e363c86f55beee5d8d66e1d714", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x6cfcc9ad804ee654482854af83dcdc7f83c693fcbe07c7188bcbbdddddf3927c", - "receiptsRoot": "0xef73cc140dd423c074df587c3d1dc998c1ef798f26acfcd7b4375010adedb9f5", + "stateRoot": "0x6e3f441e95b9277bd883cc95fa0e356cd755c77a78ce43298910126bff8c1a43", + "receiptsRoot": "0xb6746e44eeed87a9ce96f9a793b871ec3850e9b9fcb159b0d6331c6e160eb316", "logsBloom": "0x08000000000000000000000000000000000000000000000040000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x140", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0xc80", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xdc88273a8339355e4c23b544329f1564ff0f17cda095b1ec2dff43d3dd0e39ed", + "blockHash": "0xa2f88ca8a8ab5ef26e33eb38b5f28edf9349afb29e5f1a8435c070fbc8df25ea", "transactions": [ - "0xf87582012508830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028ca0eb3590d415621b656d69748718e5bb3abd10a0a056263d5515ea59d6ea7821724b2d3600cd4ec52cfd38e5145999c1b46abbf679a003bd6826947fd80264e99af1ab05dc826e5f5545ab7d40be5c77c46a4a5e853c" + "0x03f8fa870c72dd9d5e883e82015c0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038ca0eb3590d415621b656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0d314fafd686fcd729a24ff511ae5e19248bd6ac6de8c28c79918df72de20e63e83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a0fbfb4dc589628139ed92ff30a50aa483198db95f62d826b3396c3a8bb1147ad2a04e103d38c928e9c5df35c00103eb3da8be27ef8b735fa9bb9dccbc1692128de4" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0xd860c999490d9836cc00326207393c78445b7fb90b12aa1d3607e3662b3d32cd", [] ] @@ -10132,21 +10187,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xdc88273a8339355e4c23b544329f1564ff0f17cda095b1ec2dff43d3dd0e39ed", + "parentHash": "0xa2f88ca8a8ab5ef26e33eb38b5f28edf9349afb29e5f1a8435c070fbc8df25ea", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x34c42ce2ae63c16b981127388494b5a674542730742e466dcfd45e6444c536be", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x105d899797d6f5405211a54971d5510e22b55e583e3d2c84dffa0551f42b406b", + "receiptsRoot": "0xbefb0d7f70ff16c79a480b2ed6c8dc4b091d44453ecb28c6678b57bf6a5bc47b", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000001000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x141", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0xc8a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xea4108c88374dcffd042b2fd53de46cc82aa3a0c1573c6228198529dd90ad350", + "blockHash": "0x54dc888fd505259107b6574dd8a20a802deb1d07bb9728a54d74795789454270", "transactions": [ - "0x02f86b870c72dd9d5e883e820126010882520894c7b99a164efd027a93f147376cc7da7c67c6bbe00180c001a0c0be9c595e579a6396a39470d43578ea9c7797439481f5a538a3e30968f54689a02aba0937f802edac589ec6bebf62ff7f4578c242cb7df2d1873d3ad2fecd8890" + "0xf87582015d08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cd2f3a8041747db44656d69748718e5bb3abd109fa0498ebae158440b3a5a9f1fee09afb45e54d26070dfb752347789730dbe7f1bbea00607f270ceb41f8bbf3f1dc833a48e2c961c9d7bdedaf926be20b5b0905cbf74" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -10163,21 +10218,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xea4108c88374dcffd042b2fd53de46cc82aa3a0c1573c6228198529dd90ad350", + "parentHash": "0x54dc888fd505259107b6574dd8a20a802deb1d07bb9728a54d74795789454270", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x9c3444d082b3419f2c1aabbc3d270af0aa1d68c9f7d1d2f225955807b46129cb", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0x4da42e9b2ad1e02c7735e0953382c1550a5698713259b895930ed535f40d9565", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x142", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0xc94", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x89aa4d141def4c923b06aed9552126683bfb54e96f310d8fbc98bdef21e3b319", + "blockHash": "0xe9b56ec487c3b9eda677017acd8c89f1a995b8edca20949d5492bd47f1278705", "transactions": [ - "0x01f86a870c72dd9d5e883e82012708825208940c2c51a0990aee1d73c1228de1586883415575080180c080a0bc2274e5af7d6af7375fabff23d452d07fccc3ab64e4a8255f456d403182d234a059110fbe12731f4269b029c5b17c1d30f337a2794516d08f30ecb4e953069068" + "0x02f86b870c72dd9d5e883e82015e0108825208940c2c51a0990aee1d73c1228de1586883415575080180c080a05ffa0758fb568bf788d3252bf8b649f3999c5d2009d2685e996b432c69603c5aa06d233e0513203eba2b10f5b6a12e683eacf974f0e27bf938cae9563c3c662a6c" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -10194,21 +10249,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x89aa4d141def4c923b06aed9552126683bfb54e96f310d8fbc98bdef21e3b319", + "parentHash": "0xe9b56ec487c3b9eda677017acd8c89f1a995b8edca20949d5492bd47f1278705", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xc039aa511d618a79634afb4b7038f6674069cce2dd0ec0d1f97d195b836a9ac0", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x87e82e69847cd556c83117835035d0e472cfcbda01e0ca2858f820aa8ebf4315", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x143", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0xc9e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x5e09d28a6f9e43be4a5f908f764b9c25db1fcb323d9af4d54a9a486721b6b766", + "blockHash": "0x411ec72e0e4ba3c70825d4d76357e30b010815babbbc1837e2c70006d33e809b", "transactions": [ - "0xf86882012808825208943ae75c08b4c907eb63a8960c45b86e1e9ab6123c01808718e5bb3abd10a0a02fff8f6f955c6177c3f68cc124a27d9b3865e467cdd2cfe8575dfded052b350ba038ce7fd03ddd6880c63946f71a580a34831c38a4bcbba3de6665448fbcb7ad11" + "0x01f86a870c72dd9d5e883e82015f08825208943ae75c08b4c907eb63a8960c45b86e1e9ab6123c0180c001a0c7038d0ff0894d50c4b3988e5e7ea777a7e62678be35d606ebabeeb5ee56fd04a03d5ae90baa01e4a58a59acad839e89d0c48c989a911847cf911fd0ce0bc50cf1" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -10225,28 +10280,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x5e09d28a6f9e43be4a5f908f764b9c25db1fcb323d9af4d54a9a486721b6b766", + "parentHash": "0x411ec72e0e4ba3c70825d4d76357e30b010815babbbc1837e2c70006d33e809b", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x88214fefb638436f3e36c6e8f552adff7a18e75de8ef1ca40c9115f9666e10e2", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x3dd0f9c76155c2f57d35021c21437aba5e1985188c0bab677194408ac703bbb2", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x144", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0xca8", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xa8e614e1553ea89015d1c2d2d90ef31794bacd4f661a9b8ca0e8f57cb8358a99", - "transactions": [], - "withdrawals": [ - { - "index": "0x1c", - "validatorIndex": "0x5", - "address": "0x84e75c28348fb86acea1a93a39426d7d60f4cc46", - "amount": "0x64" - } + "blockHash": "0xf92cd7abdc875dece612e2568996c3d03cef02faaf7b0924665b97123207f9a6", + "transactions": [ + "0xf868820160088252089484e75c28348fb86acea1a93a39426d7d60f4cc4601808718e5bb3abd10a0a0df4798399378df307b8a5b41a9e1ffd7e31de6e9569c116ecbfed2404267433ca05727229c50d7a6cb0b77b548ca59c83b08bc7e0955aa1bc73d5f1b308d90457c" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -10261,23 +10311,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xa8e614e1553ea89015d1c2d2d90ef31794bacd4f661a9b8ca0e8f57cb8358a99", + "parentHash": "0xf92cd7abdc875dece612e2568996c3d03cef02faaf7b0924665b97123207f9a6", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xf3cfefcaf0d1829c13c22b2c2a272f81664f58b1264bd3d6ce81587433bad033", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0xf561e42206ebda045741ab8254b0d4d2756369c803084af8c151f34eb91fc39d", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x145", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0xcb2", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x772516ae20b52f5521b3a703dd4fcecd98f348fa2f0523f85aa4b801d46b8a2d", - "transactions": [ - "0xf883820129088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a08b5ea5a1d6a55227e31b8c30960a96dfddbe2cf11c4d54d294e3c13f31e80a4ca017c92582dacae25bc23fd2f006f45f478a8afab54135dfb63899a9ae4ec8f27c" + "blockHash": "0x445c164c66dbe2d97e415132e6519d7765d441454461655d1bc2fef9a5233720", + "transactions": [], + "withdrawals": [ + { + "index": "0x1c", + "validatorIndex": "0x5", + "address": "0x83c7e323d189f18725ac510004fdc2941f8c4a78", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -10292,21 +10347,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x772516ae20b52f5521b3a703dd4fcecd98f348fa2f0523f85aa4b801d46b8a2d", + "parentHash": "0x445c164c66dbe2d97e415132e6519d7765d441454461655d1bc2fef9a5233720", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xbd91b74f92f8b1f1512c0c16e4d4d6a0cff41ebcd1024b73a590b8190cf870cb", - "receiptsRoot": "0xb08f0d9dedf1fbd11cab90ab1cb4a13c5e5988497da8ed6abbbeb80482029125", - "logsBloom": "0x00000000000000000000000000020000000000000000000000000000000000000000010020000000000000000000000000000000000010000000000002000000040000000000000000000002000000008000000000000000000000000000000000000000000080000000000000000080001000000000000000000040000000000000004000000000000000040004002000000000000000000000040040000080000800000100000040040000000000000000000000000000002000800000000000000001000000000080000000000000000000000000000000000000800002000000000000000000000002400000000001000000002000000000000000000000", + "stateRoot": "0x47fbc9bde812f0e06d109960fe87e00942bafe4ae3c42ee5d32f1b2bf98f3934", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x146", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0xcbc", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x40137062068c2bef8766bb8df571f0e0c341f3877dc1d7311c84177331165a5a", + "blockHash": "0xfff2ffe2e7354436e669edcbb6301ebde9eb5d415e4dc27166e7a301463ead0a", "transactions": [ - "0xf87a82012a0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa03e1a10d66caaef6e2b05ea47a618cdb3d493e18deb0d1014c2cda62f2f63b41fa059eae72098410e95b8ac649e5cb4e89f88f4e8869afd63751232883dbb47ceb7" + "0xf883820161088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa06422792ba59cf88fa36d63374647be8ba347cda8de184377b957e649c1966a53a0617dd0ad96166579c3178602c7b0d1e0994f0248bb6f88c344c3f8dd32570b02" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -10323,21 +10378,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x40137062068c2bef8766bb8df571f0e0c341f3877dc1d7311c84177331165a5a", + "parentHash": "0xfff2ffe2e7354436e669edcbb6301ebde9eb5d415e4dc27166e7a301463ead0a", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xf79638445390b53b07ef4d608b9d08c40cbdef73771ed96e0524353c0870c483", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x1b68dca38e932c0134b8936a72f7b7f3a6edaad6ad3ad8d7a2f0acd1dd3ef9d6", + "receiptsRoot": "0x1e7d0a3194a1f0d4e8f6cf96b9cbaf7e6a030ddc9143b6095d3492270736aaca", + "logsBloom": "0x00000000020000000000000000000000000000000000000001000000000000000000000000400000000000000000000000000000000000000800000000800000000000000000100000000000010000000000000000000004000080000000000000000000000002101000000000080002000000001000000000000000000000000000000000000000020000000000000000000000008000000000000000004004000000000001800000000020000000000000008000000000000000000000001000000000000000000200000002000000000000000000000400200000000000000000040000000080000000000001000000000000000080000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x147", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0xcc6", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xc10d42ae21c805f56d5f486087ab29e6c5f16d2743dceea53e68b4c4ec8c41de", + "blockHash": "0x3783621d2f500f95d6dd1f072a06f3cf7776c9b364a4d986b644f9084dc27e5d", "transactions": [ - "0xf86582012b088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa09671ecdeaae37b39f175061ce6dfe09d47d0b4234656fcd52771e7604356075ca059c42b5a6ddd0b2cb0438604a0770962df4c4e0b510a48b3daec27b10aab464d" + "0xf87a8201620883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa004c85d63e9b4217809b130798c2bd8029ff6dd85b22cd994201386124c7f238aa0447cb8fa5531097c248069a659914d8b94a66e1fa5b30c545d2844bf6ce64581" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -10354,21 +10409,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xc10d42ae21c805f56d5f486087ab29e6c5f16d2743dceea53e68b4c4ec8c41de", + "parentHash": "0x3783621d2f500f95d6dd1f072a06f3cf7776c9b364a4d986b644f9084dc27e5d", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x9c7b6d27985ea981fdacf1a7e5dd136d0d3de60b5bdfbd2c63aea8c1c31b661c", - "receiptsRoot": "0xec2e029e4137b461c04f9b94fdbda71b6f4249479b9adb0095317c11a399f011", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000010000000000000000000000000000000000000000000000000000400000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x8fd0acd1906e7050c77629d7a59ed69f6fdfc6f518284914385eb70e3a8c9fda", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x148", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca90", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0xcd0", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xf37ed9b3c15bebe2c65743e7013c97fa8b75f97e8791a353c033c16171a82fe8", + "blockHash": "0xc292d2df68caf410c52129638905a541d121618c637b4b6e401ae5783369b805", "transactions": [ - "0x02f8d4870c72dd9d5e883e82012c0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c712fd7264800465c656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a07a63090121e41c76eee07564883abe3bd839fb20a0d2513bc9bc524f6c16f88a80a0e2dc2c6fca7b8a278c94417088f7a8b8437187328bfd007920d513824b1bef35a0022bfdea3b75175f59d0447dec7ab34f0584df815d06f1e70ba9c7361f6f7f1e" + "0xf865820163088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0507acf13b05050a3d16ecdf17df7d49fe7d7e25e27ab042450ce3eef1dadee19a06095e719d861aa2688a03fdc622be9bec38e2807c7a5c1850ae1198f86f2f17b" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -10385,21 +10440,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xf37ed9b3c15bebe2c65743e7013c97fa8b75f97e8791a353c033c16171a82fe8", + "parentHash": "0xc292d2df68caf410c52129638905a541d121618c637b4b6e401ae5783369b805", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xaa3a2d4acb17ce1ea988794b3335606e349baf071a6418c4d2262737a78e2c21", - "receiptsRoot": "0x50d115fa5f6857f190b2f2e00f1f97beb32711184258c05a2d6334140958c2e6", + "stateRoot": "0x3b1824013446c48faaeaf632a0a5ba3e95ca2777b2b37737dfe60f76c380c9e8", + "receiptsRoot": "0xeb1f423fada524e7f50d34548572c7f716405c09713466256a2f7a0d970b3a15", "logsBloom": "0x08000000000010000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x149", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0xcda", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x8271d4efd4a54b038c0cc02e2a437d7cc3d96aed9148763fb2825fcc1ca58a1c", + "blockHash": "0x18c79f9a20b1eb4d040190838ad1ecb9401a4d7c6aafdff548163fa0e81a2312", "transactions": [ - "0x01f8d3870c72dd9d5e883e82012d08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c44ae3eac6b9e5d37656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0b5e95d5da3e73f937bfbc9b4990bfdbd865c6d3a3b50478657e20b507fac754180a067a4f15c1e36c36e16f90109a5d4ce480d2f1941ee0ec885fe89df52552e1b51a07e0c91908cb4177b81c87ecf6f6e6d7b1e642d29e441f698a8d431ed1ea3cdb1" + "0x02f8d4870c72dd9d5e883e8201640108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c44ae3eac6b9e5d37656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0b5e95d5da3e73f937bfbc9b4990bfdbd865c6d3a3b50478657e20b507fac754180a0aeedac54dc3139a4ba210b5b116daf9a5550de57d98a76e04e5c4b4b56fe209da07a59f711fb189c0bdd003ec929938412ccedad84a93d1435e6106c392035aed6" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -10416,29 +10471,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x8271d4efd4a54b038c0cc02e2a437d7cc3d96aed9148763fb2825fcc1ca58a1c", + "parentHash": "0x18c79f9a20b1eb4d040190838ad1ecb9401a4d7c6aafdff548163fa0e81a2312", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x85f16877081694ae3dc66ee4b6d931e6a3f85d3a6b56055fc61a350430c8dc5a", - "receiptsRoot": "0x54f709424481c40c85d8249a8dd2d11c088ab7eae925a4150441225b960ac786", + "stateRoot": "0xd5d99efcc753c5c5d4c241ffd8805eb62b5943f0ce1fef646456a5ef5eae0663", + "receiptsRoot": "0xb9379afefc656aab5c5c77974265a7cc99c2b7003acad435f5dbf5557087bb55", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000010002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000009000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x14a", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0xce4", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xa9505142d5e8f2f3585f3d753c6cc615395b9694739c2aaebfdfbd52ea22d378", + "blockHash": "0x079a82efae89bae7dc9f51d23fe219551e0e8dc8d8a1783163ce664741d77c9a", "transactions": [ - "0x03f8fa870c72dd9d5e883e82012e0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c9b8c3a423a55b426656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0a791ce367786fdc4c5216c8b94dfe1076746e058166dabda25b5e6a3266ce85783020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a0db2322624476ad46dd2320b019f59466ce8ebf0b9a56c2fb14349b334ad6911ca050725915ee3893eaa2709708aefe5d8daae00786aeb6cc44438bad13dd9271ad" + "0x01f8d3870c72dd9d5e883e82016508830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c9b8c3a423a55b426656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0a791ce367786fdc4c5216c8b94dfe1076746e058166dabda25b5e6a3266ce85780a02461015008be779dd9a8822bb2ff8e7e847bb5bb7d4dd8f3a06dca8551dc419ba05f3626fd4ed8ee8965c1f65d71f7ec69330d0b991625d99a3ea66a6fa51026a5" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0x7e0752ddd86339f512ec1b647d3bf4b9b50c45e309ab9e70911da7716454b053", [] ] @@ -10449,27 +10502,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xa9505142d5e8f2f3585f3d753c6cc615395b9694739c2aaebfdfbd52ea22d378", + "parentHash": "0x079a82efae89bae7dc9f51d23fe219551e0e8dc8d8a1783163ce664741d77c9a", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xf64b7bf6dd3782b691a65d074c515dc96dcbbc5b654c41b1bb561b9171febc65", - "receiptsRoot": "0x9f8321c089b9a301b52205bdab9f5c7c5906a7307859eb67580623ae764a40e4", + "stateRoot": "0x06631aceda8dc4801fdca60a168a6c9c9439e10ca0dc70892c7bb6740411164c", + "receiptsRoot": "0x33fdabd28a3754e4172eb8b07983af5ec122a6e17e25af95cd2bd17209791648", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000028000000000000000000000000000000000010000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x14b", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0xcee", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x4d6b8d46d03208985e99ee7ca9d38e3ff54871672663c6a1cb4d8a558fe8b5fc", + "blockHash": "0xbf3d02ee23b46b03fe7a0cf3e5ab2709608d2d6c237357932b73caf7bd0e5962", "transactions": [ - "0xf87582012f08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c85b0cf6f2ed6a4c9656d69748718e5bb3abd10a0a0080ede13d861e65459ccfda69653b507eef89c9ae71c31e0514bf89d368bf505a05d18a3565ae14331ad7336b97842425228126f33c6e477b3a5e9f8eb11e6e69a" + "0x03f8fa870c72dd9d5e883e8201660108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c85b0cf6f2ed6a4c9656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0951b3b37c2a87b5a67918e750832a50c5565298a35390bad3ffffadb2f7b4afe83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a0a3c91082aa5f98cf42c4635a0312f74b7b7dbdc08c66a9b9173d87f93f61260ea00d0aab49ed35714a83897d245d244c71253b6a52271d36a52ec080fcd9cf5b37" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0x31d973051189456d5998e05b500da6552138644f8cdbe4ec63f96f21173cb6a1", [] ] @@ -10480,21 +10535,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x4d6b8d46d03208985e99ee7ca9d38e3ff54871672663c6a1cb4d8a558fe8b5fc", + "parentHash": "0xbf3d02ee23b46b03fe7a0cf3e5ab2709608d2d6c237357932b73caf7bd0e5962", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xf472cd60d56758c2d3646fa51d854ed0b56f9266db923772edef4e5bf0745785", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x84b23c952dfa8f61b6d87ee85bff87b0032b5eb70a26865a552473d5276899b0", + "receiptsRoot": "0x1931b499cde32287e47b63b488b406d2c7ac767ea3e059e789ac043bd64aba21", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000040000000000000000000000000000000000000000100000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x14c", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0xcf8", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x317d6cd8a8783099c05585ff4132c92fa56746ac04dc89d01f90a6087d95e3fa", + "blockHash": "0x8f34050bd77c450b1684065a6d47f74e03a13366670639e0ffc82ce56190e7ad", "transactions": [ - "0x02f86b870c72dd9d5e883e820130010882520894d803681e487e6ac18053afc5a6cd813c86ec3e4d0180c080a0f548c826f4e2b8c513899f21fedf09191bb02e657d036f2b312e534f346e1d89a04a1527da2c52c307743f6d31c941ec2d3575b540e89b5fb70bd21c7d3067d7d6" + "0xf87582016708830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cc35bf5ec655dfd63656d69748718e5bb3abd10a0a0d4ae78d9dffb14b7db544598fc5f80423a487823dc88824385b22fa4a190ad6aa02ce93b7da454a24456708adc38859894e47577d28f46e6b73beba044fcf6c4b7" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -10511,21 +10566,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x317d6cd8a8783099c05585ff4132c92fa56746ac04dc89d01f90a6087d95e3fa", + "parentHash": "0x8f34050bd77c450b1684065a6d47f74e03a13366670639e0ffc82ce56190e7ad", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x38d13fd335d3ff58df3bceceddd00a98f9a65076c295b474cb913443df6855a5", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0x07d91ddc6ee5b8bd4b862a7691ce11a8ea3eba567629b1166557b19281a63287", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x14d", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0xd02", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x1aa7fbd954a82016be127f3624a93bda8d45351191031f3671060abf2fbc7140", + "blockHash": "0x1dc2e1bdcaf6cbc04adf6f2a0bec9df3fb5148469ff491701db0d36a3ccb5561", "transactions": [ - "0x01f86a870c72dd9d5e883e82013108825208944a0f1452281bcec5bd90c3dce6162a5995bfe9df0180c080a08b4402e18a1769ab35ad1c02fa3b3979e6cb5e2499015a08b523d95fbbdc556ca02055eeb30f2f30be3f98032663d662106c441fabd3faf595bb6446464de85d42" + "0x02f86b870c72dd9d5e883e8201680108825208944a0f1452281bcec5bd90c3dce6162a5995bfe9df0180c080a06083e02dd8339c5792974c703870779547de75c6279c216853355220975839c1a025eed1338e4e0ac887f37f02f1ddb4e3b97ad71456af950db3641bb3a46a9418" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -10542,21 +10597,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x1aa7fbd954a82016be127f3624a93bda8d45351191031f3671060abf2fbc7140", + "parentHash": "0x1dc2e1bdcaf6cbc04adf6f2a0bec9df3fb5148469ff491701db0d36a3ccb5561", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x041f809591aed092d570607d5814744284ede19b1e54f129be243ec696ea8ae1", - "receiptsRoot": "0x642cd2bcdba228efb3996bf53981250d3608289522b80754c4e3c085c93c806f", + "stateRoot": "0x66d19e54834612f718e66638e4da798d11e32dee10599594af5d4ac963c31fe7", + "receiptsRoot": "0xbe3866dc0255d0856720d6d82370e49f3695ca287b4f8b480dfc69bbc2dc7168", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x14e", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0xd0c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xf0a0f1e9079642d9be82b1a2c786bf1c89f4e0bec03cbd6c1be96b92c47cbeeb", + "blockHash": "0x03399daa6b9a5022b6c6ef393204ddd994dda29cc67998c0dbc1df5f2c7df9bd", "transactions": [ - "0xf8688201320882520894eda8645ba6948855e3b3cd596bbb07596d59c60301808718e5bb3abd10a0a0b8bcc7e609ee631b36339e1e6ccb48055c09c7b0a2ba3303178302dcf4af06b0a07420abb736eb6501693bb726a81507236a738ec8fa0b0e81292ed59f08f1b7f0" + "0x01f86a870c72dd9d5e883e8201690882520894eda8645ba6948855e3b3cd596bbb07596d59c6030180c001a066d0b1cb01e5b1afd0885c075801ec0cdf540c2bd6f83e80d39a7576799e97d0a034239eccc43be4c97c1b5dbff66a2f851dfaa3f24bf9eb204eac8d35795f8f5f" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -10573,28 +10628,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xf0a0f1e9079642d9be82b1a2c786bf1c89f4e0bec03cbd6c1be96b92c47cbeeb", + "parentHash": "0x03399daa6b9a5022b6c6ef393204ddd994dda29cc67998c0dbc1df5f2c7df9bd", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x74a65347258f456cb834196ea2439718d86593bad1b6246e957eacfd0b198a56", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xd07861e5c0a3edd3ea5ffc4245c8a65752d0ed2fc1e5fd2b02c670c97972a859", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x14f", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0xd16", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x286ee500a7ccd24305014fc9ed773b472aa0e9de2005f98b0136bbba193e89f9", - "transactions": [], - "withdrawals": [ - { - "index": "0x1d", - "validatorIndex": "0x5", - "address": "0x4340ee1b812acb40a1eb561c019c327b243b92df", - "amount": "0x64" - } + "blockHash": "0xccc15fd8ddf55d7c8eb75b38f01938eab69a8286a525182fa302c34738c401a8", + "transactions": [ + "0xf86882016a08825208944340ee1b812acb40a1eb561c019c327b243b92df01808718e5bb3abd10a0a0039e6d44ad23b2533467c0d3cd5bb01a4e7ae614a20256b153c139d3d989f99ea00692528563f318af8a9e33e1759fd83c3b093baf1e4bcb4a860c0ff44a83872c" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -10609,23 +10659,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x286ee500a7ccd24305014fc9ed773b472aa0e9de2005f98b0136bbba193e89f9", + "parentHash": "0xccc15fd8ddf55d7c8eb75b38f01938eab69a8286a525182fa302c34738c401a8", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x5f377cadc6b9379c381701e2fa03a1b8d60018477a76628e6d5c022b7778a32e", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x5ed562333386ccae375d7fb9800a627295ef884723e4a4f545ee59a37c3eb951", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x150", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0xd20", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x2f60754b89d3acfa2cd8e479e2b94e90c07bc5ca92f5e49b3d0280a30775893c", - "transactions": [ - "0xf883820133088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a00c230c2c6cb704d59fe5ffccb904f6cf5b95915d05b320eb186477831604f30da00138622287e1cd74e8b94f83db1a37b906e7381952de02a27ed354c8cfb237dc" + "blockHash": "0x5f1a9c738684387b66a96f080ed4606ca3b54cc6ef8fbeac69197d9d0ebc18d4", + "transactions": [], + "withdrawals": [ + { + "index": "0x1d", + "validatorIndex": "0x5", + "address": "0xeda8645ba6948855e3b3cd596bbb07596d59c603", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -10640,21 +10695,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x2f60754b89d3acfa2cd8e479e2b94e90c07bc5ca92f5e49b3d0280a30775893c", + "parentHash": "0x5f1a9c738684387b66a96f080ed4606ca3b54cc6ef8fbeac69197d9d0ebc18d4", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x3360e3947013a74b2bd63f3112f968512361bb63b15562b26486a30c4672aba8", - "receiptsRoot": "0xa234730f8e7ba7c91f2cafe17e1c638dcd8835ad12aa27770f24e3a49a031784", - "logsBloom": "0x04000040800000040000000000000000800000000000400000000000002000004030008000000000000000000000000010000001000000000000000000000002000000000000000000000000000400004000000000000002000000000000000000000000000000200000000000000000000000000000000008000000080000000000000000000080000000000000000000020000800000000000000000000000000000800000000000000000200000000000000000001000000000080000000000000000000000000000000000000000000000000000000000000000000000000000004000000000400001800000000000000000000000080000000000000000", + "stateRoot": "0x222c41acd75836ca90069e3f9de16c669c2e7de990533763e7af046eacba1e99", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x151", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0xd2a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x1d2172c03aa39bcb2ff80dc3a80b157ee311f01f1972c3ae61df2fbc08581df1", + "blockHash": "0xfdee8c650dfb4cf5fce50480224694b856fde37082e78eb3c82971a2a010f62d", "transactions": [ - "0xf87a8201340883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0e78b28732bf01b7e0f9ac86de0370156a1cec747b602f1720e9bb70319ac0c0da01b0570b525a20760358ab113ec97686d6e849ee0ad08743894366d9c8c6241d7" + "0xf88382016b088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a0e14bd8f9c55ca04ed6d545670bf80e4d5cd3753cf8e9d79de138ff52527e8706a04cd3d2765967c35cac423914086efcc5ccfe9877923bab5a397cfa8cfc9e56a5" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -10671,21 +10726,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x1d2172c03aa39bcb2ff80dc3a80b157ee311f01f1972c3ae61df2fbc08581df1", + "parentHash": "0xfdee8c650dfb4cf5fce50480224694b856fde37082e78eb3c82971a2a010f62d", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x35cf21dfc0aace304593e0b5f92a4b86080f2d77f42e0a6df1a38316e0699b16", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x3588e1ec84f9149cbe63ebc7fb9088af1dc3d1e489bcb713e0748cb1f2822597", + "receiptsRoot": "0x7de618c7f6479943d81923081acc397007151920bb5e12ac9312cc34b8ed67d2", + "logsBloom": "0x00000000000000000000000000002000000000000000000000000000000080000000000000000000000000000000000000000000008000010000000000000000000000000000000000000000000000000800000040000420000400000000000000000000000000000000000000000000000000000000004000000000000000000200000018000000040000008400000000000000000000000000000001000000001000000010000001000400000000000000000200000000000002000000000000040400000000000000000000000000000000001000000000001000000000000000000000000080000000000004100000101000001000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x152", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0xd34", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xb5038ea078e022c5f7c97429a3f36c5b15ef525012266a78784315d5f5f8f742", + "blockHash": "0x8b6e1a97ed0b60399797bc48fdc165d7bda6b855f94691276d2e5068d44e0aec", "transactions": [ - "0xf865820135088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa05c10478b2c093f52e6576817dfb0ca2c716eccc77bc3dcc43e3482a14b62aa6fa0183b8f5a623bec5c593fd56f02844a7cb3d358cd61894ff8dcf56bb6b0a50726" + "0xf87a82016c0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a060bbdcc20b9b67af82bc31f9f9d0089a552e568b1a903e22e854ba8d84501f4fa0232988e345d316b37a3c87b07cce6f89b328af0fb7da666eee864ad218631586" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -10702,21 +10757,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xb5038ea078e022c5f7c97429a3f36c5b15ef525012266a78784315d5f5f8f742", + "parentHash": "0x8b6e1a97ed0b60399797bc48fdc165d7bda6b855f94691276d2e5068d44e0aec", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xd1878ecb20758419ab44897b3c479570e4917dc2a18611df054680a838162dca", - "receiptsRoot": "0x33917054a5e8342edac692f717af9212958d9e262cae6256fc670896a6ac7159", - "logsBloom": "0x00000000000000000000000080000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000020000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x5f7bae63cf253fb10898a003bece41c3e646441959a5351103acb233264f3c9c", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x153", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0xd3e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xb63287f903b3d2cd28cec281f1de235c85ed05ba3857e28cc86f9c29f39d57da", + "blockHash": "0x3f9354b48f2c7bcf684bcb6ed3a7635eaca6ba81654a3fc3e4c7273c61b28583", "transactions": [ - "0x02f8d4870c72dd9d5e883e8201360108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c76ed30898ed7a9d0656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0c4f8d20ccba0b50d46d9c87f28cebf8c165fced694a2b34412a4b6153b987a1780a0a62a69f48f7b52ee09e21c86e91fb9bdf25246ecc175a9dadd9ad58187b78a32a0534a6c65d782c27d335d7d0ec0817041faed9e63ea864da2169b1dac9cb62e13" + "0xf86582016d088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a07d8f64f397682c2dc4e4f2e9edc5e5105157947a983155dddcce221450289edca01a1edf02e97c2554ba07e9e35a81aa04c7fd1c2509a7c3a6375b2916f5666c1c" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -10733,21 +10788,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xb63287f903b3d2cd28cec281f1de235c85ed05ba3857e28cc86f9c29f39d57da", + "parentHash": "0x3f9354b48f2c7bcf684bcb6ed3a7635eaca6ba81654a3fc3e4c7273c61b28583", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xe849e500d56ee2ada110a6081ee1c6617be2adcf083a1caf42e265a067b61aa3", - "receiptsRoot": "0x2dc20a0000586ebc72ed5256aee2947505381983c7d080a69ef8c68d3b802280", + "stateRoot": "0x9a222c73b9c600679419a5af18189da838d947f98c638bd0474e4d68bd8f1b6a", + "receiptsRoot": "0x823e6949edb9c9bd5b0af828fb641d8aea43105774abd1fd3faada72763044b4", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000800000000004000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x154", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0xd48", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x9c476efe697f7d3482e8a3a620811c6dc88ed3b98cdc752a53bb756d13a6dcb5", + "blockHash": "0x54553da46a588f6dc14580c6ccb5f2ca5c6f6a189dc465c0d4d84ad2c9749a4d", "transactions": [ - "0x01f8d3870c72dd9d5e883e82013708830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028ce481f18bdff3a685656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0a3e65c2aeaf352e79173be13e572f691d8d75ea1064610b8418246d95bcc421c01a07939e49d0e5b19e71cd5225a0ce00fce92b05235773d9b97194d5333f9929387a0144d3d0ce7f1c3218e46f3f02b7bbace6c0064be726954bc3d9b399e865501d4" + "0x02f8d4870c72dd9d5e883e82016e0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028ce481f18bdff3a685656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0a3e65c2aeaf352e79173be13e572f691d8d75ea1064610b8418246d95bcc421c01a039d63f63b01a369e7db2762519ce08455d58461fe8570ab07cb548909d0dd88ba073c757184c1fd8c3e74471845440ce123e4405b6ac0074caf7bd93c3fcfc465d" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -10764,29 +10819,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x9c476efe697f7d3482e8a3a620811c6dc88ed3b98cdc752a53bb756d13a6dcb5", + "parentHash": "0x54553da46a588f6dc14580c6ccb5f2ca5c6f6a189dc465c0d4d84ad2c9749a4d", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xeb9a8fabeb5e95490ffb76f24c9af75ba76542e9bf057cef47022880c907a6e8", - "receiptsRoot": "0xbfd591c5699b876e0ffac9c863e7d879eb9e84fd53f09eb7209130d6fddd4a5e", + "stateRoot": "0x17e9d3e4fbc706c36b789842b0eb9cf2523438df5a01e52f507b4fc1e296bb8e", + "receiptsRoot": "0x82d7f72b29e21d7d039c2bc1f2df736f0cee592c5f5e1724fb9ffe58ed8a5629", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000002000000000000000000000000000000000000000200000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x155", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0xd52", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xde9ba0e426dbd981f0ea6eb968d6f3a725b664f175d245e6e9e2478ff44afb72", + "blockHash": "0x565a7651bb85599dd4e8bb9deea8c1068fc0525ef77a602875c0ee4c27ecdc3b", "transactions": [ - "0x03f8fa870c72dd9d5e883e8201380108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c225431167194f3d1656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a06df5983ddc40ef2c7ffa2c79bf9402568f2ee0ec7b675ca15aaa20b536d2a5f283020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a0045a6e1a7be12514ed1b4efb3a494e830a1bb319191b159e22b087b1eb54b9b5a03a9c077a4fb3b3c677d901b35817f68a7fd370d207cf131535c5e099b3bb42e1" + "0x01f8d3870c72dd9d5e883e82016f08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c225431167194f3d1656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a06df5983ddc40ef2c7ffa2c79bf9402568f2ee0ec7b675ca15aaa20b536d2a5f201a02332db0453a44066141395c41f2e04de302344b8f118c64ed1fbad3dc317d442a01f412460ccf966d717e8a70cd28f21b6f71dd49262442f79966ac025ad03579c" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0xf4df943c52b1d5fb9c1f73294ca743577d83914ec26d6e339b272cdeb62de586", [] ] @@ -10797,27 +10850,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xde9ba0e426dbd981f0ea6eb968d6f3a725b664f175d245e6e9e2478ff44afb72", + "parentHash": "0x565a7651bb85599dd4e8bb9deea8c1068fc0525ef77a602875c0ee4c27ecdc3b", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x371ed66c922382b1d523ea4195c56699910652c6012551f348e3c9f3bf436eaa", - "receiptsRoot": "0x488144f2ced26a3a3d1625aec2b9c5da10348700ae76d648175adeb8d1338372", + "stateRoot": "0x0d71e018402a3123814c4e00c01b7bc158e78d8490bb5dea9ad281af7de8ca31", + "receiptsRoot": "0xfa3aaeda4cdf53def7263758bfbecad51a4429b1b8b80029b2fd739732612b8f", "logsBloom": "0x00000000020000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x156", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0xd5c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x36e28ee4cdd767038d87e898e8b59f777b31454f9960e87ab3fc258223c5b212", + "blockHash": "0x5a060514a5987fb5defacc69d60df530d84825bb7102f52665c197a5b7cf0d3d", "transactions": [ - "0xf87582013908830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c932062c9eeeeb3ed656d69748718e5bb3abd10a0a01212b3d30e6b13040680917257beb75539068dd48a14e7fd8521dec956c0c37aa001697ca60a4210a55ee2ef7fa50227de02aadc61edec2fff5af8e30ba63373fc" + "0x03f8fa870c72dd9d5e883e8201700108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c932062c9eeeeb3ed656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0e067f85eba81feba79bf640415c11ab4448d5cc4a41652fc0a200be4d266178683020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a005e73074788c05a172afc1a7c5fef991fcbd408ca579a676bd847f27135f90e2a049a59e686b76644576945598bbc9a508f2596c54ee90e5dd8666324632a330bd" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0x0bb47661741695863ef89d5c2b56666772f871be1cc1dccf695bd357e4bb26d6", [] ] @@ -10828,21 +10883,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x36e28ee4cdd767038d87e898e8b59f777b31454f9960e87ab3fc258223c5b212", + "parentHash": "0x5a060514a5987fb5defacc69d60df530d84825bb7102f52665c197a5b7cf0d3d", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x317db0374b2ad9e322ab95b31c69e1859fc2f2b5975a2c348bd6377779eb672a", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x58bce5cd6dd8d9ee462efa92e639c335c83cacaa9d4ec886beb8f54c47c7fadf", + "receiptsRoot": "0xc841f2781db47e1e32867dc6d784cd6c89a5f827ca9280e5c20568d0261bfd30", + "logsBloom": "0x04000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000080000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x157", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0xd66", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x2955e6adbcf58ce3f34fc93da829c9c44a6641382ff92336f8cdedd1734669bd", + "blockHash": "0x37a95c1c4d8ae9548f7abf278b6d3c8fd6abce3ad831527a483b585ae5574496", "transactions": [ - "0x02f86b870c72dd9d5e883e82013a01088252089483c7e323d189f18725ac510004fdc2941f8c4a780180c001a060996b291aa6694897f4fd95c881f9c8831551f65d91c2edb0398f8a3ba31c61a00fec3df98ac224517ad5c762dd10caf4bb737e813993340c856a9aa3f63d24ef" + "0xf87582017108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c273de87756911775656d69748718e5bb3abd109fa0281c137f735893068d049ff9c97d9033fa5c9a6f56651ff1b6a442320ddec381a00180b3f8386e2cd45894bd0a2fd42f8e9f61a32d82b93a590f352203bd185a9e" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -10859,21 +10914,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x2955e6adbcf58ce3f34fc93da829c9c44a6641382ff92336f8cdedd1734669bd", + "parentHash": "0x37a95c1c4d8ae9548f7abf278b6d3c8fd6abce3ad831527a483b585ae5574496", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x54016558c8961722006c12d3c14a0e63f83acb89ffe3111a8e23ed00fa021d93", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0xf5e39baa18e94b48282c51bc27137bdba258a3a5200b2da4fe2dea6a7a970fdd", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x158", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0xd70", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x4ef098ab7baa897a6c538545fe29382fbc85c59ac78a01b5428a0db58bb5bfca", + "blockHash": "0x02bf4c87617d99c78ee4061fcad0436ec41d1feb5768436917aad995dc1a5c46", "transactions": [ - "0x01f86a870c72dd9d5e883e82013b0882520894654aa64f5fbefb84c270ec74211b81ca8c44a72e0180c001a061490ee93d7aef29c2ca23db661ecbe276001f15fd2760c5b6e068a844c8e806a02295e4ea97c85188c5accaa5ef1125ce2af9f791ebddb1d37be6a72809c81ed1" + "0x02f86b870c72dd9d5e883e820172010882520894654aa64f5fbefb84c270ec74211b81ca8c44a72e0180c001a0cb87fe5f6cea3745d84f4b61df60a46ec996be8d880e124a72bae1185a32cd66a04c9f4401a5ea80dcd61c2b85eef64a24cfcc272ae5e518cc4e2eb56031510151" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -10890,21 +10945,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x4ef098ab7baa897a6c538545fe29382fbc85c59ac78a01b5428a0db58bb5bfca", + "parentHash": "0x02bf4c87617d99c78ee4061fcad0436ec41d1feb5768436917aad995dc1a5c46", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x8e469b68b653164eb3983c967ddce5c94c6427eb70f9b8e087cb0f369169ee1d", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x2c91336305090ae48c3c695559b175c60fda5fce0b544330272c89d5b0bee540", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x159", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0xd7a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xee27e318aea1e83eb7b252d701fc255f8a295bc048819b674977db2140507eaf", + "blockHash": "0x1c88871de6d44ab71e79a3fdbe2e43604daf0194b3a02e1a90337e837201b57c", "transactions": [ - "0xf86882013c08825208944dde844b71bcdf95512fb4dc94e84fb67b512ed801808718e5bb3abd109fa0b230939d00d05d9935edc1612d35a4d651d0e5799ece9623548a3b863fae8dc4a0696d1b595f4c07376bfd0d6c5cdf8bf551cdef599da5b3bc81251eb0d9c49809" + "0x01f86a870c72dd9d5e883e82017308825208944dde844b71bcdf95512fb4dc94e84fb67b512ed80180c080a0e662016c668666c375d9ff00087154a63129117ac762552065839cafe401f6f8a06aef1d3e9c2b42f3f4f72f00c872591c85e681079deb0a0d3f1b342e6377e376" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -10921,28 +10976,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xee27e318aea1e83eb7b252d701fc255f8a295bc048819b674977db2140507eaf", + "parentHash": "0x1c88871de6d44ab71e79a3fdbe2e43604daf0194b3a02e1a90337e837201b57c", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x5eb753f46d09f0dac91bca6ca550b735c2402def5c8b90df0a2e54c72a14485f", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x572ee06dceed53734f875c218c0d293026893416aed5d4792e9003218552a52f", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x15a", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0xd84", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x99c16f02cab4384eae354d510b84f49fb3cc77ac1a2deeaa87c7342894ce256b", - "transactions": [], - "withdrawals": [ - { - "index": "0x1e", - "validatorIndex": "0x5", - "address": "0x3ae75c08b4c907eb63a8960c45b86e1e9ab6123c", - "amount": "0x64" - } + "blockHash": "0xe65b0ebcbf8e53e362f198d5286b3be688e04b74109af7e41ba28fc4d7cb5df7", + "transactions": [ + "0xf86882017408825208943ae75c08b4c907eb63a8960c45b86e1e9ab6123c01808718e5bb3abd10a0a09fac97de10f5e954dc14927a4e68880f5bfe4a2469c41852c31cfa342a1679f7a033f6b2c3f5812970ba8675bef5eda9ae9f4ee085527566fe729b6040045d8503" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -10957,23 +11007,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x99c16f02cab4384eae354d510b84f49fb3cc77ac1a2deeaa87c7342894ce256b", + "parentHash": "0xe65b0ebcbf8e53e362f198d5286b3be688e04b74109af7e41ba28fc4d7cb5df7", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xf8fb0d5f0b03dbce3ec0306a54eafcfe052b73623ad18e2893c3aa563c9c2cd5", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0xb6c5658fa78aca5831389ede1edf136bc1c396427b317d6f13b9a6726cf8b349", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x15b", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0xd8e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x38c75f8d455709c7dbb8ac586e04a2579d9e7d28a4d33a460588b70612a882e8", - "transactions": [ - "0xf88382013d088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa0532bdb455b7324083403ddc1e13da4549613978a1ec591d46995f3eb2c5a0b3ba04ca1c0a37e2de03d4ef5c2ebb955e541ba2085c46d1dc8a85743b8c67afe2e2f" + "blockHash": "0x675cb4223640eb85c8810a74a6fb0820d86a138a1eef666f1a22d27ba1ce730c", + "transactions": [], + "withdrawals": [ + { + "index": "0x1e", + "validatorIndex": "0x5", + "address": "0xc7b99a164efd027a93f147376cc7da7c67c6bbe0", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -10988,21 +11043,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x38c75f8d455709c7dbb8ac586e04a2579d9e7d28a4d33a460588b70612a882e8", + "parentHash": "0x675cb4223640eb85c8810a74a6fb0820d86a138a1eef666f1a22d27ba1ce730c", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x1f6f555d6e1a61e23db2f07df96d47f070643806deda0e021bac0a3c75461cd0", - "receiptsRoot": "0x24845ea0fc4154b4598890122a5384b3fc9fceccb83c56364d61d4a3a42299bf", - "logsBloom": "0x00000000000000000002000004800000000000000000000000000000000200000000000000000000000000008000000020000000000200000000000000000000000000000000000000000000000000000000000000004000000000000000000000000008010000000000000008000000000020000004000400000000000000080000000000040000000080000000000002000000000000000000000000001000000000200000000000800100000000000000000040000008000000000000000000000040200000000000000000000000000000000000000000000000020000000000200000020000001008000001000000000000000000200000000000000000", + "stateRoot": "0x8b8b0f72c04409635982a7e1f5288061a014232da79f52de36c759e4ce17931b", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x15c", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0xd98", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x346083b60f44fd307e10d7e0f67b5da3d1230332adf26749cb5c80d00003300b", + "blockHash": "0x05276dd8169c6699371aea9e2758f23c15c2739166b91fd5f8556101b4bb3f21", "transactions": [ - "0xf87a82013e0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0012ead7b881a49a22e7b9eb57c01088ec1e72c9939e582f16ef3558afa51147ea019f4d510d02d8bb75f75f20bd37711605c8c338385f2dfcffdaf6a6a895c6c81" + "0xf883820175088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a010215ed3ba3ccf56eca9507dc5e826c264631d30230d14b85f7b8cf9748a88d8a07b36f2aac7a46cac9e76a2033565f48449f989fcdcae906f12c9967c6f59c746" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -11019,21 +11074,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x346083b60f44fd307e10d7e0f67b5da3d1230332adf26749cb5c80d00003300b", + "parentHash": "0x05276dd8169c6699371aea9e2758f23c15c2739166b91fd5f8556101b4bb3f21", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x63b1e01af28bea08292e308f0eb39db17751900ef949289cd5b4da93d6440ef9", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x1f1840c6881b5b3235e79dc812bd381db601a181f084f19f9c45b8f22a54aeaa", + "receiptsRoot": "0x97626aeb2db4486d9fe2841c5771953372c090a7db331043abf77a91bb418339", + "logsBloom": "0x20040000400000000000000000000000000000000000008000000000001000010000000000000000000000001000420000000000000000000000000000004000000000000000000000000000000000000000000000000002000000000000000000000000000000400000000000000000000018000000000000000000000000000000000400000000000000000080000400000000000000000000000000000000000000000001000000000000040000000000000000000000000000000200200000800000000800000000000000040000008000000000000000000400000020000000000000000000000020000001000000000000000000000001000000000a00", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x15d", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0xda2", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xdef08200cf595f64a706819f16a1c39b7409cbbc14fc29a87b50c95a3f9e0464", + "blockHash": "0x2bb6a28a333d633baef19929640188c26f70dfd798c0948bcb81f7b48b7e6f83", "transactions": [ - "0xf86582013f088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa05503af9f6399474958ec75701b360f133e8767010db164cb4e1c0fc415e806bfa0660e8b86200fb2a10af8ee02f9645b8e1d48042c5380542b53797fc255884094" + "0xf87a8201760883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a009972e5c75852272d8e9587a45206370028150edac38eba5d91838075a5b323aa05bb3b9eb946f2f2273c735f60707a6c0bf7d2f137e64fc32e6c6f1e260446a05" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -11050,21 +11105,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xdef08200cf595f64a706819f16a1c39b7409cbbc14fc29a87b50c95a3f9e0464", + "parentHash": "0x2bb6a28a333d633baef19929640188c26f70dfd798c0948bcb81f7b48b7e6f83", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x82f87064f0098ed17ea770b3040e2a8833923f0e159ea09ee1e0e142cd2193cc", - "receiptsRoot": "0x6e519d18eadaffe71c1fd8e69d0b0ed1012b8fd9f79e97da742a5bd2a119becb", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xf11800afbdc603c481b385010048719fba5062700189315fcff6ca3aba232204", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x15e", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0xdac", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x701b50b242d6e6062020d66c4134f678c49fc7887ba1f962f97863b7648626f2", + "blockHash": "0x418ac48b8467db2e040a7b57b9f81e3f5295077d62988735ef5db301e4312d85", "transactions": [ - "0x02f8d4870c72dd9d5e883e8201400108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cda2a1c4a6f29dc43656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a04b916e15bdb0f5b4bccaa3447694db53cc34095b5bc26299c14a9f573bd6c75801a05b3c47bad5778a6f2b5f618f1746185144a162ed303258d23f52d6d3b3ea4b0ba043b36639da4429ce3a5c7d6e0fc7da8d99b8535ad730aa357e277c1a4a485987" + "0xf865820177088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a02ce52dd89b969da3b9c18ea9cfe004e1bc316f5d57bfd03df25535c708e9a4ada0273e77e52bd6658f4ea91a07d37202381c047b8dd49cb4a1907130d75d44641b" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -11081,21 +11136,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x701b50b242d6e6062020d66c4134f678c49fc7887ba1f962f97863b7648626f2", + "parentHash": "0x418ac48b8467db2e040a7b57b9f81e3f5295077d62988735ef5db301e4312d85", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x6f0f84289a9bde0f88dc60d0ca020fde4b803200f53882b4133da32fa23e11f1", - "receiptsRoot": "0x505408927d83279aff752328f9d0bccad95e9e4eef621b6daddd4b8ca4400627", + "stateRoot": "0xd54e91945baab2131000d844ffc2206205d11be87fd5b0bb692ca44fe04f4d39", + "receiptsRoot": "0x285d25f5101d22f9eaff4bde9abc022b398732069305daba98f23adaaf2ed5be", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000400000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x15f", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0xdb6", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x3265fc38a6c5684461c72e9c03fe1ddd99a53cddb2d371d0fc1188a130d76e79", + "blockHash": "0xd97364746b3c009e86e4601ea8a4ec3eed223a070b3b343b33ad8a121708aad7", "transactions": [ - "0x01f8d3870c72dd9d5e883e82014108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c9544ff5cb729419c656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0cd78e90ed1705eeff092f3df07b16a382082e9c388030ec3188daefa57a731dd80a05e969015af64fe334d2efcb6140612c74081ea1b13cb4b3e6fff55c5c09587c7a040e997ea1855f5eec240cea3d1d78506e6e2029d8cf3e1ba09a8276224c77902" + "0x02f8d4870c72dd9d5e883e8201780108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c9544ff5cb729419c656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0cd78e90ed1705eeff092f3df07b16a382082e9c388030ec3188daefa57a731dd80a04a6cfece11982a16f1a088d2da3c2ba7f42fe826ebeed0caf4ce8a9174b7cab4a005a8938150b068d77d10a4647a4e8f70940fa26c688282d7b5443c0d1f747cf8" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -11112,29 +11167,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x3265fc38a6c5684461c72e9c03fe1ddd99a53cddb2d371d0fc1188a130d76e79", + "parentHash": "0xd97364746b3c009e86e4601ea8a4ec3eed223a070b3b343b33ad8a121708aad7", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x96671fc468fca5490c17be95a600802bf2e9aec1fc65ef02f06e08a7eb750b57", - "receiptsRoot": "0x18cf9fb8fd5c05afa7e14a1e88a774e6901368001f71c84e9e0f69dcab86e19b", + "stateRoot": "0x3db80d9560ba49da9f3db2dc7bb6d41f6e5344a3ff239566c73e8e2a4c26ab9c", + "receiptsRoot": "0x1b2a2ea4be7012743e0819798ac021ff08d03138c84a96f97d99f44b4fc4be25", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000020000000000000000000000000000000000000000000000000000000000000000000000004000000002000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x160", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0xdc0", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x84bf2031465aeaaa042fc5f12c7cf61ce1cdb3225525bf961b115bffb477ba2d", + "blockHash": "0x915b1161ecce056ce9b09ad20e535ee47578a868802d36a1bfa38ee437beca07", "transactions": [ - "0x03f8fa870c72dd9d5e883e8201420108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c63d51adce824b5da656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a040325cfcd159fa7bf89d8c252b6ff47cbc17aafff5e7feb92014d00285484cfd83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a0d091dd0d488f94804707798f84d010809a6af6449224dd237629331078f91c3ba045a80c3a55fe668cabd867d15b92607311061af5ef4d15f2de9fb3732367d1e6" + "0x01f8d3870c72dd9d5e883e82017908830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c63d51adce824b5da656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a040325cfcd159fa7bf89d8c252b6ff47cbc17aafff5e7feb92014d00285484cfd01a0cd0a6786dc03f09d4f57b430527c01761a20316ca9800fd74b2bedec8978ab42a02267603eb966f091bf5c62d000b256f1701199c2b55bafdae1df8c5c5db6ce7b" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0x7cfa4c7066c690c12b9e8727551bef5fe05b750ac6637a5af632fce4ceb4e2ce", [] ] @@ -11145,27 +11198,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x84bf2031465aeaaa042fc5f12c7cf61ce1cdb3225525bf961b115bffb477ba2d", + "parentHash": "0x915b1161ecce056ce9b09ad20e535ee47578a868802d36a1bfa38ee437beca07", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xa328fd0afd4855ac88654b9232abcfb46f0160928ab05db2b041993d60ef50a4", - "receiptsRoot": "0x1a56364363167e0e0d22ef01ae11d49ff6fdfa179e1e93ff9cfe93b66f7a9e69", + "stateRoot": "0x2c5ec480f25be5621da61853aa669c019215deae07d0d43d0356b19e13d2e78b", + "receiptsRoot": "0x17c65ac03b70b69ff8d7bb62b8f0ba8fe30dc0cde6f2694c29eef9fe6ecef98d", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000009000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x161", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0xdca", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x95d03fc9c7ab7b1f91a38325076295ba7251541246ff6929d4c3b4d7af875705", + "blockHash": "0x4f58b596ab05605431d3a936043301eeda09adbfa46a3c02e452abcd988f4b34", "transactions": [ - "0xf87582014308830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cd120caade914624c656d69748718e5bb3abd10a0a0f9ad5ab1339e6df5515b0a06ed1b5fcefdfb497a458a10d1f6c4d7ddff785f34a075ffb836a3c0f32cdc485d56cffd5877eec01e02f952dbed1f3b24dd7e4578e6" + "0x03f8fa870c72dd9d5e883e82017a0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038cd120caade914624c656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0d73688caabee79f6ecf3a0b092d26e639b7e486e45c00031db80d3d7abe8c68383020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a0014f1329eea5010dc0ce5c91bdc12dd6db4f6e6f64335242a2dd68139fc9e0f8a0047128a9852f2ff7470e0ad01a14101bbd076014368a0b00817d47824ca08618" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0x943d79e4329b86f8e53e8058961955f2b0a205fc3edeea2aae54ba0c22b40c31", [] ] @@ -11176,21 +11231,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x95d03fc9c7ab7b1f91a38325076295ba7251541246ff6929d4c3b4d7af875705", + "parentHash": "0x4f58b596ab05605431d3a936043301eeda09adbfa46a3c02e452abcd988f4b34", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xf4beeeba7e78c83863ab3df26df08f8eef086f7ca90ab6d626873bc57ff24c19", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x5066f72db27fc26d1e53522d6c5ab4ec15b43236adb9315ee560eeccd1b3a1ec", + "receiptsRoot": "0xcaf62ebcef1ad7dd1af416141ade74d405d6f79da262e49f0fa7d37af60fcf4c", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000400000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x162", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0xdd4", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xd7e39656fea33b079d0fffa85665bda655e35ac8cd609b24db52fc10dd22030b", + "blockHash": "0x318aec788d4efe4aba9138446d6aa0e292c18554eb34a15b827c22188fbebb46", "transactions": [ - "0x02f86b870c72dd9d5e883e820144010882520894717f8aa2b982bee0e29f573d31df288663e1ce160180c080a06bd165a9d39e2cde94707e00703d551c677d194c8a27bc0958a95f1cf5cc3b66a077dd528aac9a99930887ae334cae6579651a3f537da469d6b58467b7f6eae8d3" + "0xf87582017b08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cc14eb1947b69c832656d69748718e5bb3abd109fa0601d55820ca29740a96aee46cf81129de59d8cf42cdfd82033eaba021f3c828fa04d69feeeb37c377d530f81aa3526ad392828615e5d8ce9308b54a9c7f16eb427" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -11207,21 +11262,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xd7e39656fea33b079d0fffa85665bda655e35ac8cd609b24db52fc10dd22030b", + "parentHash": "0x318aec788d4efe4aba9138446d6aa0e292c18554eb34a15b827c22188fbebb46", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x3f3333213a8cabf535c44779e3a714381b1fc54f4bcb9c103a56dce09a0e2ac2", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0x3fb21f54feb17ff64599c5f4d6219a6d841cbc243e854f16b6b4ba1fead7b9a2", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x163", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0xdde", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x56f28aefa9c8a192e22bfd3ba9946ca3b8d1e96897d3599f8f7ce0af473662b6", + "blockHash": "0x4401d3aa9f1ff873ad2aab1d705c874c41cb5bf206ee59eed2e5daee6c6410e0", "transactions": [ - "0x01f86a870c72dd9d5e883e82014508825208945f552da00dfb4d3749d9e62dcee3c918855a86a00180c080a040b7abdaae14c9c548d77583eaf61153bdcf2af46f724abe4efd423d61077e13a02bf59a5961a1fb1d1a00b6c35d78d95b0f0e00d3b7bd6fa0bb4b16eaaf0bccd2" + "0x02f86b870c72dd9d5e883e82017c0108825208945f552da00dfb4d3749d9e62dcee3c918855a86a00180c080a020c3205f300f3a18173e9184024c4bee2604bddb03d4f5444f5192a0556848e8a07f31e8e53caba85a657a76e356f4d00936ff071196496fa38e6cf9561df47872" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -11238,21 +11293,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x56f28aefa9c8a192e22bfd3ba9946ca3b8d1e96897d3599f8f7ce0af473662b6", + "parentHash": "0x4401d3aa9f1ff873ad2aab1d705c874c41cb5bf206ee59eed2e5daee6c6410e0", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x786ef26f04264a255c620783ab3f8ad48ee353ec00032be699f581aa59459502", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x59df92b306e8627f08bb4f6b15ec055ab32cc5e20f6a39f4d7a9200da45deb3d", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x164", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0xde8", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xa256e8a74e0d5f0db511d6df3d329492b15504f515278ff998d108a49902a8d6", + "blockHash": "0xea7938e34260a926ccd50ce03f9d1f387948af9b961c6f48ceb76ebbecaa2658", "transactions": [ - "0xf868820146088252089416c57edf7fa9d9525378b0b81bf8a3ced0620c1c01808718e5bb3abd109fa025de91a23f27d8c900dc950bbb17e06495339c1f24a8b6c6e06f11a1c4468450a01737e65efad4010e16860a4b4944c6ef6624d5f2c1fd29bc7626f55e99e80a01" + "0x01f86a870c72dd9d5e883e82017d088252089416c57edf7fa9d9525378b0b81bf8a3ced0620c1c0180c001a034bc900da40475695628b9df027c69b53db2a329edf7eff1bd2993e662a0596ba003cc67c5a7b1ddeab871b20722ce8b604c128a3c5b3bdd4aef0c27b893913cf4" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -11269,28 +11324,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xa256e8a74e0d5f0db511d6df3d329492b15504f515278ff998d108a49902a8d6", + "parentHash": "0xea7938e34260a926ccd50ce03f9d1f387948af9b961c6f48ceb76ebbecaa2658", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x8367e96cedb6544c9f21058628d72ff78e4be19aeb9e3581eb254cf62a580005", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x0d8cf4596d32bf3d818719617fd18dc80e999ed27bc7075545a4ffc375680d4d", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x165", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0xdf2", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xfda145c2f89e067fcb82e98c5a201fb8f9949d578a1b87241e6f7c103fbda5d4", - "transactions": [], - "withdrawals": [ - { - "index": "0x1f", - "validatorIndex": "0x5", - "address": "0x654aa64f5fbefb84c270ec74211b81ca8c44a72e", - "amount": "0x64" - } + "blockHash": "0x08f4cc7edd04bd308dc6e7bf4cb07b806e7e2de61545abd1f51f9ad1d59cf75a", + "transactions": [ + "0xf86882017e0882520894654aa64f5fbefb84c270ec74211b81ca8c44a72e01808718e5bb3abd10a0a02a40854304a78f963d447a4fc6ed04a83f080d70bc2b9d08830ff778f1691b40a06fc3befc469ccd25b11fe53d93ca3b7f1b17b10753d260374b10b36cb86b6b83" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -11305,23 +11355,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xfda145c2f89e067fcb82e98c5a201fb8f9949d578a1b87241e6f7c103fbda5d4", + "parentHash": "0x08f4cc7edd04bd308dc6e7bf4cb07b806e7e2de61545abd1f51f9ad1d59cf75a", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xa2185fee71394ba245d483bb95d117c04e584a1e3486154dbda7ac23d5e5d6c3", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x2d19f68d8b2ac2dc83f59e006c7ed180a7e1e2f39bcb154b7d047bad5f034f6c", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x166", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0xdfc", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xc60a413c6267e5f34ee8e27efcb89e2bbcdd4b839cb0c961f7dd37805181626f", - "transactions": [ - "0xf883820147088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a0f91141179eb75a36e3f88edefa1b6aea266f623647afe0f3a269019f22ff823aa04e9bd3bdeca6818a15445105ae924e61f126ae9355741307b4a5955699b0104e" + "blockHash": "0xa00622d4741d5328d26df1a386bc743d636523cbfb4ae132ef9973770be54646", + "transactions": [], + "withdrawals": [ + { + "index": "0x1f", + "validatorIndex": "0x5", + "address": "0xeda8645ba6948855e3b3cd596bbb07596d59c603", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -11336,21 +11391,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xc60a413c6267e5f34ee8e27efcb89e2bbcdd4b839cb0c961f7dd37805181626f", + "parentHash": "0xa00622d4741d5328d26df1a386bc743d636523cbfb4ae132ef9973770be54646", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x5c401a283294494c8cb499c7017ec143afc3880bbf163332bd4f85257fde02b3", - "receiptsRoot": "0xa6efaa2bd5e8b55c9ee7555c2010566ebce0eceb665633bf89fc058554243280", - "logsBloom": "0x00000000040000000000400080000000000040000000000000000000000000800800000001000000000000000000010000000000000002000000000000000000000000000000000020000000004000000000000000000000000000000000000000000000860000001000080010040010000000000000000000000000000000800800001000000004000000000000000000000000000400000000001000000000000000000000000000000000000000000000000000000000000000000000080000000000800000080000000000000000000000000000004000000000000020000000000000000000000001000000000000000000000000100000000000000000", + "stateRoot": "0x9946811b1d721b495e3481d0450a058d0dffca108f1c990a2b3c6fd77e9de916", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x167", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0xe06", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x9267c3d2e49d9a2fbb84a69db614d9fb33bae938ee4bd0fadcf5cc033562bd8c", + "blockHash": "0x9f5cf2010cc5b11d8e26387a3dc7871353fc465161e0179d7a022e7fc216d894", "transactions": [ - "0xf87a8201480883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0d18d9add1c775ef5e466f61a1519ab1701644a82a77e2fe7f2919eee9be1f271a03bc8219f96194b5cb1414c95ee3839ad3e868bf3e60d4b33e45ced1b73b52401" + "0xf88382017f088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa08ded30f91eadb86aef45f8603080b77479c324a6b0461176bd05b9dc52434366a01f8e64121ef22b0a68dbb5f5fc3ee0e379d24ea28ba18716bc76924962a89efb" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -11367,21 +11422,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x9267c3d2e49d9a2fbb84a69db614d9fb33bae938ee4bd0fadcf5cc033562bd8c", + "parentHash": "0x9f5cf2010cc5b11d8e26387a3dc7871353fc465161e0179d7a022e7fc216d894", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x58b966da2254b60e84562b9b265b24b27f440c3148decb437e8eb759ecedd58b", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xc32c77e18357c918a8f28263a0a462d8fbc88cb1cf30ecdbc99541d78ca50cc8", + "receiptsRoot": "0xff1547a0c5d35ecfe6c88ff5afc801fa62ef513b146587249b8f6bb774601a86", + "logsBloom": "0x00000000000000000000000000000004000000000000000400000200000000040000000000000000000000000000000040000000000000000000000000020400000000080000000001000000000000000000000000000000020000000001000000002200000000000000000000000000000000000000000200000000000000002000000200000000000000800000000000400000000000000000000200000000440000000000000010000000000000000000000040000000080300000000000000000000004000000200000020000000000000000000000000080000000000000000000000000000400000000000000000000000010000000000000000004000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x168", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0xe10", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xf66d68a2b0dd9fbc45a5646cebcb99e8af641c8a372724264058493e141eaa46", + "blockHash": "0x7bae673e78c9468adcbc5af662fa1a64303269928a74faf206c36e8e90d39e9f", "transactions": [ - "0xf865820149088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a066053e37815a04b8665e4108e806ed564fd57af67c7f28cc40b79272e011ec75a0095d99837cab6fc1a53b126936c0d8c2ca339ac55af799229323b7ea128e33cb" + "0xf87a8201800883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa06ee1e2240987a5957c71668bddd78286a8a97c3605f540169dcfed9ba4479311a023858f1a8516678c55295559ae843c02f92211dfb2ebbac5a5cb039c2b7bb1df" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -11398,21 +11453,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xf66d68a2b0dd9fbc45a5646cebcb99e8af641c8a372724264058493e141eaa46", + "parentHash": "0x7bae673e78c9468adcbc5af662fa1a64303269928a74faf206c36e8e90d39e9f", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x4453faa136a6236d91bfa955406d6bd7989ad4e6fb06f331d0b8328d4ce02162", - "receiptsRoot": "0xbfbc3f80b299340eaab4e22415e1ed57ebb1d5a83d4431f7189a1851e9ab94f4", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000040000020000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xd2fe93f9138446fa18a96211c54de9e99438eb07ee496c0f47348d731e93207d", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x169", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0xe1a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xcafa23b21dd847e0a6863e2d6a9e81749d2ae6174e340bf3ed6c27e030ed38fe", + "blockHash": "0xf5c8e55d5ccac994718819a5e84706912e3a13ed1138af213068a1dfee7333fc", "transactions": [ - "0x02f8d3870c72dd9d5e883e82014a0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cc5d1b5234d598db7656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a07975cc1088361453b019ff19e2177b264cfea56f4c09b1a8a086f6c405dd516c01a0e02857fe8d948db7745f2b17a5cd9713b92a60da8da7daa70d5b1713b12a62ba9f8e03e24b97096b677d1bed7544c3ecc4a18d98989b9dc0bdc5d9a9a7e25fa3" + "0xf865820181088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a01f6404f32c81c38b12d5556286f11a241ff430689390a8152fcf4d5b1e51e260a06f69bf082d07343d45159ea6f2225c15323ff958fa7df453597aacb83a5717f8" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -11429,21 +11484,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xcafa23b21dd847e0a6863e2d6a9e81749d2ae6174e340bf3ed6c27e030ed38fe", + "parentHash": "0xf5c8e55d5ccac994718819a5e84706912e3a13ed1138af213068a1dfee7333fc", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x37fb7cae9e1c94703e61e83bc7ef00f5677ec59a3ac867818e3c55010afc2648", - "receiptsRoot": "0xd212385e4afdb5978e6dcb1ce04cf85af1c33c1878da895bc40c97df4abef905", + "stateRoot": "0xd8fe6161789d8b8289fce5f90ea6f929ec4053b65c5a5ee382349c23bf2b6520", + "receiptsRoot": "0xb7877e21a3193c714ca254cdfcbadfa256aa5dc5112a0dff0c627c851f8aa9bd", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000040000000000000000000000000000000004000000000000200000000000100000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x16a", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca90", "timestamp": "0xe24", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xd6aca4fd2acf5ca563efa815897afcfaa175b8955931f699ae4018ac86eeea91", + "blockHash": "0x5ce347e7492dc1fae5a790ee38bbae921fa4c33c12d9728102107ff2242037df", "transactions": [ - "0x01f8d3870c72dd9d5e883e82014b08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c5b00e11941ab7046656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0490b9d550a200295b38f2456a42525d3a43c345d2fa1431e770fea9656b2672301a025d780cad1d212faf6744c9e152ba4b6ab144f30edd18a15680fbfdc5bf8e08ba00bebac8aa02d02642c519f1182de690b3d42fa44389d0be8239f41cc97d2de09" + "0x02f8d4870c72dd9d5e883e8201820108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c5b00e11941ab7046656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0490b9d550a200295b38f2456a42525d3a43c345d2fa1431e770fea9656b2672380a0ec7b63e7f42e8247f1617fba414694633262e54c0f369e39902446fd7dbffda3a04b7b40d08a68a5ef1dd52cf072227ad975fd1d542a0ccec8a5eaa894e6c3901b" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -11460,29 +11515,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xd6aca4fd2acf5ca563efa815897afcfaa175b8955931f699ae4018ac86eeea91", + "parentHash": "0x5ce347e7492dc1fae5a790ee38bbae921fa4c33c12d9728102107ff2242037df", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xc47ec5827b3096b1f71cfb5615412890ced2d0e4e25c6b809e54647f92007a0d", - "receiptsRoot": "0x51dc4d1b69b22caadb80e85c68166344898ffbc5d4767ee1214c717c46416a88", + "stateRoot": "0xea78b4b29e8d1e06d68d3a7de1e1c383e1876435b30cc398bfee3718d30b92d4", + "receiptsRoot": "0xb45be2085dc2fb2dfd02b696999104f86fdb1648f6e6766eae89996f38066b77", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000009000000000000000000000000800000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x16b", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0xe2e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x16b4cebad9f39a7db380791451d3a9dd9c35dbadc751254c41f94cae8280358e", + "blockHash": "0x704f8986273e3ddd2829747071efe079b0ad626aa5ce53ab8b881fe2dae20407", "transactions": [ - "0x03f8fa870c72dd9d5e883e82014c0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c0581a3f309f9b7a9656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0039a54e14fa9769f840074356dec3dbd47c3588fe71fe942fb7aec5edfd0a09683020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a093f8d363100badb86a1cfaa2bf17b1d051130d2c906dd48c0c44038f4e5f3a5ba0236c43ff36fb2dd731590896717db4c534db3e2e2937fdfead8bf6d2e1d3b4f3" + "0x01f8d3870c72dd9d5e883e82018308830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c0581a3f309f9b7a9656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0039a54e14fa9769f840074356dec3dbd47c3588fe71fe942fb7aec5edfd0a09680a0df8454b1d2ac55fb2b56518b9af603d081fb456dc5a2d1a4f14d32a1930e0b65a05eec84799f4c8113b8e558e727c7cbd95fdac9a60a1a19337b20957589ef9670" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0x54a623060b74d56f3c0d6793e40a9269c56f90bcd19898855113e5f9e42abc2d", [] ] @@ -11493,27 +11546,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x16b4cebad9f39a7db380791451d3a9dd9c35dbadc751254c41f94cae8280358e", + "parentHash": "0x704f8986273e3ddd2829747071efe079b0ad626aa5ce53ab8b881fe2dae20407", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x089e671fabff27b7a6a5bec573cf9815686c0597138d9284647a5fe97590d738", - "receiptsRoot": "0x7ac3337326ead8b549b53abed41fcc43cf5d7b8545dc05588173145a617cf712", + "stateRoot": "0x60ca9246696f71c8c5ef48227f3d0706810e226f520d614353c5a27d1a2adc84", + "receiptsRoot": "0x686bb5690e471cbe94f0fbd0bd64178a41189bf1b22860833a753d748989a8c6", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000800000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x16c", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0xe38", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x505a6bf5ab0f40712af88078826c83c152e5ec99fd74ae718e47c0f1b6c7c0fb", + "blockHash": "0x8b372f1d731e91f9e3e65d489488e2f5256c2db193d27c80adfd7500930bfed8", "transactions": [ - "0xf87582014d08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cdddf70b2f66dd741656d69748718e5bb3abd109fa0a67de64d6cb2c553afbb804db1871168ceaeaac9e6ad06e8ec141cfc01757178a06d770bae5765c71dd7d77a11ec2e4a15bc84453dbd2016d66a0756c340bcdbc9" + "0x03f8fa870c72dd9d5e883e8201840108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038cdddf70b2f66dd741656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0945c01f307d13fcdab0a2a3a4c4bd5ebb69a00c3dd59896a959664e01ce1069583020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a002913953086fb38270b582f9264a54a8f7a9fd52f3914c93e1c6bf61ba29c05ca0488e04b63258b9f1b21371dd85f1d48d3eb8ab573f1b7baeed6a7bdad7599698" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0x1cfeb8cd5d56e1d202b4ec2851f22e99d6ad89af8a4e001eb014b724d2d64924", [] ] @@ -11524,21 +11579,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x505a6bf5ab0f40712af88078826c83c152e5ec99fd74ae718e47c0f1b6c7c0fb", + "parentHash": "0x8b372f1d731e91f9e3e65d489488e2f5256c2db193d27c80adfd7500930bfed8", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xe6d3d3f1f1dedd2bf3fddb34a7ad6d5af258eb1080793c91ee8f8844f26ddce9", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xa52cc45cb02dacad022ceafe5fbd047084ced7e1156c04a3939a063823deba23", + "receiptsRoot": "0x3d50045ea7712dabc7bc624626b661a55830490fc4abe245fd79bc3052adf0d7", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x16d", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc25c", "timestamp": "0xe42", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x0f15f04e28de513a6e468d22860d94e5389a07b5b630f8a8e7b84ed7bc0b8558", + "blockHash": "0x8037a2e6778f5a2f86243f0f68e1dc27711a83e23f17dffeadba79650efdc061", "transactions": [ - "0x02f86b870c72dd9d5e883e82014e0108825208945f552da00dfb4d3749d9e62dcee3c918855a86a00180c001a005b69e48a3446f70511c54ab36235de711ac546cf056d7e97bc902215e365ec9a02a292f3b4f719296a9a548a42464b52e79d70703a662122c809146ef351c73e5" + "0xf87582018508830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c00593792347501e7656d69748718e5bb3abd109fa04aec43f149d696a06905565e4456b92ab3d9291dcf6ce18bbf3e6e0b2e974bfaa05ff76d260a8b25969aaa34161113ed0948153acf0e0f6d56a8fc002712f8b22b" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -11555,21 +11610,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x0f15f04e28de513a6e468d22860d94e5389a07b5b630f8a8e7b84ed7bc0b8558", + "parentHash": "0x8037a2e6778f5a2f86243f0f68e1dc27711a83e23f17dffeadba79650efdc061", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x85571fdc8cc44636348f3c10cdf031ffa5504dc9eedd3598b0710ddad0efe28b", - "receiptsRoot": "0xbe3866dc0255d0856720d6d82370e49f3695ca287b4f8b480dfc69bbc2dc7168", + "stateRoot": "0xa57db84a5de1a4aa407ead420958d26afc17b75e078728dd02a40e99a5f91790", + "receiptsRoot": "0x005fb2a0d0c8a6f3490f9594e6458703eea515262f1b69a1103492b61e8d0ee2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x16e", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0xe4c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x7371118bf9383f5e8b92bbb6cc9aaff94c06477228cde2abfffc48cabafc1bec", + "blockHash": "0x83b55c0c81d1b9e925dd8ded23f5d620d5c90ff0669978808bafe0f9cf4fba4f", "transactions": [ - "0x01f86a870c72dd9d5e883e82014f0882520894eda8645ba6948855e3b3cd596bbb07596d59c6030180c080a072885b5a14a5cae7134e7aa308ef77fdebcd2cb995d9d9c4bdedaa8733fd6cd0a05eb1d201d26f47f1eca74d1f787f91c43f9089ecfb050f67af872352e0431a14" + "0x02f86b870c72dd9d5e883e820186010882520894eda8645ba6948855e3b3cd596bbb07596d59c6030180c080a0c3c4bec7bac5ca693f7fc674a4c3230f1f3ea8dd998de09c920825d26301c011a05ff7bd766555a0e202234d8a43c208bf8c1f9a20a1b30d6c310480dd8dd54fcb" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -11586,21 +11641,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x7371118bf9383f5e8b92bbb6cc9aaff94c06477228cde2abfffc48cabafc1bec", + "parentHash": "0x83b55c0c81d1b9e925dd8ded23f5d620d5c90ff0669978808bafe0f9cf4fba4f", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x2fcb885f5cd5d4b9bf40eb6d5c0fd445648f559beee2dc7e8c0690c36d31ef8c", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x5705b5b4a3f14d552ac085df2780784da408fa2156d8cccf85527f327a387531", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x16f", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0xe56", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x77d7c2eb0af7749896c1be40161508d650c019a8fdfdabab4b34b47f0caa5a80", + "blockHash": "0x47d1a1fd87ce37b222c945a0926df5db04b51f7cb7bbab3b5038aa755aecd57d", "transactions": [ - "0xf868820150088252089483c7e323d189f18725ac510004fdc2941f8c4a7801808718e5bb3abd109fa086aab378b3165e20297e9d6ff3d5da704f3e4b3d1f087ad9131a8d5bc5a3c8eda03aa230322dcea454aa1edae6bc9a9af8a0a2c40d5836334b3f2c4fbe1b59c046" + "0x01f86a870c72dd9d5e883e820187088252089483c7e323d189f18725ac510004fdc2941f8c4a780180c001a0371d1a507de4da57f89a4fa71df9f02443ff37580810ea26149bd128c9d6acf5a02818244deb6894ab6b9e2c34e1e6f7c7224d53e27857cf37639cc5d0636587d7" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -11617,28 +11672,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x77d7c2eb0af7749896c1be40161508d650c019a8fdfdabab4b34b47f0caa5a80", + "parentHash": "0x47d1a1fd87ce37b222c945a0926df5db04b51f7cb7bbab3b5038aa755aecd57d", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x727be1133b3b99853b987da08d0e07e8b01358cd426ba12896fe05bb20ec75a6", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x77ee4ebcbde63ea5acdb408b7126f4d9699f740c236b83e9d7d7989d6d0e6369", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x170", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0xe60", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xc3c6a43b0a9fec6d3e9c232cd9048eb4b655f8c779ff7c510195e75d4c3cb3dc", - "transactions": [], - "withdrawals": [ - { - "index": "0x20", - "validatorIndex": "0x5", - "address": "0x654aa64f5fbefb84c270ec74211b81ca8c44a72e", - "amount": "0x64" - } + "blockHash": "0x05a64565e90b2488725a1682f087cb8eda679593d4163e606df37d717fa885f3", + "transactions": [ + "0xf8688201880882520894654aa64f5fbefb84c270ec74211b81ca8c44a72e01808718e5bb3abd10a0a0339ee08f01a43156d5d3bb10e7ffc8dc8f15a9964de8dca936dd06895d01ae12a06168e11111c7dadee1a31c2454f90e0e833efb767d3b5ff4dfdeff164dc75196" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -11653,23 +11703,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xc3c6a43b0a9fec6d3e9c232cd9048eb4b655f8c779ff7c510195e75d4c3cb3dc", + "parentHash": "0x05a64565e90b2488725a1682f087cb8eda679593d4163e606df37d717fa885f3", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x6aa75134a379dc98080f0313ed78800dfac8e76e701b63edee260fffe7dd0182", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0xa58038fc8f490096219df276b21b9d88303ec60cc0ccfc5f7f3bba39e4744c6b", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x171", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0xe6a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x024a6e084b404338002e6dd8b70331a3ad6d896cdedecd23db0c7db0cca13ea7", - "transactions": [ - "0xf883820151088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a0b7f14a7de3212ac6e25fcc2e7727627619c71692e0a9d8c723f7337738fec4cea0745eab42b319407c929087225440ea9007b7d47751fec14db91ef9bfd055a8b8" + "blockHash": "0x3340b09045d81928d5feb249588b82048aac136feda454dc13bfa778ddaa1405", + "transactions": [], + "withdrawals": [ + { + "index": "0x20", + "validatorIndex": "0x5", + "address": "0x5f552da00dfb4d3749d9e62dcee3c918855a86a0", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -11684,21 +11739,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x024a6e084b404338002e6dd8b70331a3ad6d896cdedecd23db0c7db0cca13ea7", + "parentHash": "0x3340b09045d81928d5feb249588b82048aac136feda454dc13bfa778ddaa1405", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x94edb1c63ebe96190bba51941774daccf9601236019266f0a758d2d43ce14fa7", - "receiptsRoot": "0x7251de47ca910034b44cc1b34a11098cb7cb41a4251591cbd744030fa6e56070", - "logsBloom": "0x00000000000000000000000000000000000000040000000000000000000020000800000000000000000000000000000000000000000100800000000000000000000000000000000000000000000000200000000000000002000000000000000000000000000000000000000000000000000000000000008000000000000080000040000000000000000000000000000000021000000000201000000000000000000008000000000000000000000800000000000000000000000000004000000100400000000000000080000400000000000000000000000001000000000000000000000000000080004000040004000100000000010010000400000000000805", + "stateRoot": "0xc32294428fa6e335bae612012e6cc9dc08d1bf2dbe9cf366f198214e4466cd40", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x172", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0xe74", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x4ac493337944aac392f8ec72d0187775a98712347f2d3a8ce5e6dfade5fc88e1", + "blockHash": "0x327de227ff353f33e394e8d4000f33513c924ea807b747f3cc63bfb40d9c950c", "transactions": [ - "0xf87a8201520883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa09ffdca5ddee51f70d71957df581c7af8b647e7ce3cca634b713703fa2056b8eda0633e4ec86b1a5621be40b8b90ee6ab1c6ced4b8f24038739623a7fd720c37cc2" + "0xf883820189088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a0c84af0e889fa167b50bfae9fd9df3027267fdf72de8d1f40dbc48af87d5d1024a04f53c349e331c4e6d3193cd6cfec2505da47cd38124a2648371e279be9cbf727" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -11715,21 +11770,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x4ac493337944aac392f8ec72d0187775a98712347f2d3a8ce5e6dfade5fc88e1", + "parentHash": "0x327de227ff353f33e394e8d4000f33513c924ea807b747f3cc63bfb40d9c950c", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x9deac8e88d661e3853fcf27372aa74ee3e8a0564581abf2229380cb91bae7285", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x3c040a6da222421e2f4620f2fba8740e6ea68d7f94e330746a3256c7a3d396ef", + "receiptsRoot": "0x2357cddf5a247c3284cb2c7fbf7c87db673014c9c939cb04074dd476481354f6", + "logsBloom": "0x200000000000100000000000000000000000001000000000000000000000000000000000210000000000000000000014000000000000000000000000000000000001000000000000000000000000010010000000000000000000001000000000000200010000100000000000000000808400081000000000000200000400000000000000000000000000000000000000000002000000000200000000000000000000000000000000000000000000000000000000002000000000000000200000000000000000000020000000000000000000000000040000000000000000000000000000000000000000000000000000a8000000000080080000000001000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x173", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0xe7e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x53f13c2ada283dad19b4c6e1f5d01844ecdfce9b5e5cc064e025aafaa95c97fc", + "blockHash": "0xfd5902869946c283cf714ba1369a87a419d2efaf809ffee5828138db3998941e", "transactions": [ - "0xf865820153088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa01c4c4dad5cc48dc34f7de3b598ffb02acfa6bd18bbc39ff5f48a7430f1d7e2d6a066a0b6a1d3d70b98a58c1f596a1285cabbe35ebf5365b26e894eed6d8d6c2bf9" + "0xf87a82018a0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0bc60b8fd75a4a6d419c09e06f388fd81cfe284c81ef1650db35c8c7fd2d5d857a00b0949182ee719e540197684cce3122e9c425479b3529d5ee69d034e409b75d3" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -11746,21 +11801,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x53f13c2ada283dad19b4c6e1f5d01844ecdfce9b5e5cc064e025aafaa95c97fc", + "parentHash": "0xfd5902869946c283cf714ba1369a87a419d2efaf809ffee5828138db3998941e", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x9e53e02a391036fd160aa186d64c5c624a55126dcf665e641e61b04e9ea19536", - "receiptsRoot": "0x14b7dc4ec7b9ec6c7fd91c49ac7aaa6cc4f8f48ff188006e4b72f3b3c862dd0f", - "logsBloom": "0x00000000000000000000000000000000000000000000004000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004002000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x1694c00941781d5c70edf603dee32f6773dbbc1d9c86d2e5977868dda81a614e", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x174", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0xe88", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x5aebb1a84a124ace93a6955bad2c1d3e26769ad5c4c8f7952bca62ffa6ecbb72", + "blockHash": "0xc2ef323c573205f1f1ba96da000d08c88d09b24c95389963a37a5b5f466b8ce8", "transactions": [ - "0x02f8d4870c72dd9d5e883e8201540108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c5ed5f2eba43b9d6e656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a05423899586eb1d932cb9da03e478e1dd5d4cbbcb66d24262c7d67e543185c2ef80a035dfd635ab1210be852d9275b75490f908301278d8ecbb2d474367286494ea4fa0488d69db83f65da1b0bd9b15bff90193f94540e8fc85e50bc64fd3e0e04c13ab" + "0xf86582018b088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0c268b7a640d08c838a6f6ef04e709f5f45931009e2d0cc43d5e34ce51a8573aba071f8e6078f9e1bdea21152d97cf745e8655622832da6c475dbe76427a29925a1" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -11777,21 +11832,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x5aebb1a84a124ace93a6955bad2c1d3e26769ad5c4c8f7952bca62ffa6ecbb72", + "parentHash": "0xc2ef323c573205f1f1ba96da000d08c88d09b24c95389963a37a5b5f466b8ce8", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x92918085a958a3055fb1d5f08b63e9d93cad3c7dad9663e1298a31effb229074", - "receiptsRoot": "0x42df6f859795da6ef2cbdd440584688a8e875ce5708e87120336cf44292c4ec3", + "stateRoot": "0x7b58d5e0bf2d4951c64784716b25cd2a8432ea5b3d64588c238f964c597b43bf", + "receiptsRoot": "0x2139ad9e9e6fb567eef086dfcdc3b8c592a9d00f0c493d3b8604bba23e6349a1", "logsBloom": "0x20000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000009000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x175", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0xe92", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x722cb497906813e0dac64a5e558aebc697f65a0929bdc4c9b763507b37d17442", + "blockHash": "0x29f8ae9fa882fecb82cac317d253adfc23ac083ac8a57f07aa14f450e6cc3a70", "transactions": [ - "0x01f8d3870c72dd9d5e883e82015508830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c7eccf8bd8f40396c656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0cb35fbd0ebf79655e6882326c19855ff90befcd2e589418566ec2e3a1efd65d880a0b5b75892245daeb02357c3cda72945b5cbc657144f86830ce3d44cd376c7d496a040829b65800769ce56e763b9f4f6b4c75cd3e2a4cffe4f83c62a44543385f6b0" + "0x02f8d4870c72dd9d5e883e82018c0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c7eccf8bd8f40396c656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0cb35fbd0ebf79655e6882326c19855ff90befcd2e589418566ec2e3a1efd65d801a002f43581fb7145b456d03c03f9a526a2505856e42a7178322e9f43a036141a32a021d13f8f0d56cbb9cc9fbca01d7388a6e82e9e625a459ea7b13b61c967f41ec7" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -11808,29 +11863,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x722cb497906813e0dac64a5e558aebc697f65a0929bdc4c9b763507b37d17442", + "parentHash": "0x29f8ae9fa882fecb82cac317d253adfc23ac083ac8a57f07aa14f450e6cc3a70", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xb313932927133a6c5633b2359129debddf853188e91c7f6c1a1ea15a78310c4b", - "receiptsRoot": "0x0c6b26f41076d265df6003902de96f7e86c075dc5e9a63f8f48a1267d0597426", + "stateRoot": "0x1cafae05ad0b27eeeb762833767e33aef80d349f3b52cc1fdd1ccb751137c448", + "receiptsRoot": "0x8f1aece13eb2799292b9fbff80eaf4196ce333ff2013a1a28a5c610a490d5347", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x176", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0xe9c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x86eef2cdfc7f44f813f99a5699adb200ac3e48a490a1e01656f2991f1655f387", + "blockHash": "0xbc73c987e59da4fa66253e4e382bbc25daa551bcebaa40766218c84c249e2022", "transactions": [ - "0x03f8fa870c72dd9d5e883e8201560108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038cfe2939afc4f11be2656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0927e4ce70caf344a9e108ea8803cd49216852109c3e4922dfed2680e9f24361d83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a0ec40ba7acaa9407312daa093659c29c50aa57686f5ed6c0ee253eaa2ec69caa3a07eac3c4bcdd598a852f6b2820f9560ceeb947b77aa25df5d7b8c2d626ac5b0d7" + "0x01f8d3870c72dd9d5e883e82018d08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cfe2939afc4f11be2656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0927e4ce70caf344a9e108ea8803cd49216852109c3e4922dfed2680e9f24361d01a0d95882f987be1e86360e909070e98c792ae6eaaa4b5e2b13694a417527988975a058e9d712d8da58243e07ae56c75048e6b0af05838b776a2ca2ef62f2c3a0f2c0" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0x2b2917b5b755eb6af226e16781382bd22a907c9c7411c34a248af2b5a0439079", [] ] @@ -11841,27 +11894,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x86eef2cdfc7f44f813f99a5699adb200ac3e48a490a1e01656f2991f1655f387", + "parentHash": "0xbc73c987e59da4fa66253e4e382bbc25daa551bcebaa40766218c84c249e2022", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x3cbbeca49a1945127768c0baff5802baa1b8e628e4488ed812d556689fe73bef", - "receiptsRoot": "0xdf52941811dbd734ad63629b45095b537ed4ea55e67c677ff846c59d39594956", + "stateRoot": "0xa1bcd8e41df121cc6008d64b049472bde881c2b02c3404e257c61348fc7e98e8", + "receiptsRoot": "0x38b661822706570b109818ad3bf3889b3ba7cf457447413c4a2c5cef0742f17f", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000020000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x177", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0xea6", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xf80b907a5268d198f59415e895a2dbd2d2f0ee499394f873bcaad64be35ba295", + "blockHash": "0x8f9e9db44c2a14d5e6f4c109568e1ed5220cbc09face49934d24593d20779eed", "transactions": [ - "0xf87582015708830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cb5b303999df36021656d69748718e5bb3abd10a0a02616c26eab0952df93c0d803a3e77215f6291c78b8c8c06cd6db33c82f250740a038c446a1a88f1b808599ebe1fef015f19a071b51127078f2267f52fcc7358ac4" + "0x03f8fa870c72dd9d5e883e82018e0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038cb5b303999df36021656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a03f410a22d042d915c50f9269337a2bc7155f86d79bbff1721d83f44153635ac283020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a033f479e6f3f19a32cc4ceda762c7ba3d9f72621244228a9617802b01d5d5e204a035baaf72094ac2a994d50552f4a9b2a21dbe633ce9888276f44b3aee2d961e90" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0x18d5804f2e9ad3f891ecf05e0bfc2142c2a9f7b4de03aebd1cf18067a1ec6490", [] ] @@ -11872,21 +11927,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xf80b907a5268d198f59415e895a2dbd2d2f0ee499394f873bcaad64be35ba295", + "parentHash": "0x8f9e9db44c2a14d5e6f4c109568e1ed5220cbc09face49934d24593d20779eed", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xee441adb4bd9619daedecd5e1159e20ec049eed25fa122b221edfc99bab92964", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x2472f7a374c2fca03cd15eaa484de9f3b526a0877881a36dfbc2af2eba089f44", + "receiptsRoot": "0xac03a0dc44405b2c0e2667e8fa4aa0b25fe0b1008612d6d4052eada04eb50785", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000001000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x178", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0xeb0", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xc4db6912f2653a9382b68bac827e5dd2eb40e3231f203a2f1f8eef0f72e6f02b", + "blockHash": "0x4cbf14ace7c97bbe835d0811871f9eef77d6fe81ece5eaa55e741a4dc1fdd3d0", "transactions": [ - "0x02f86b870c72dd9d5e883e8201580108825208944dde844b71bcdf95512fb4dc94e84fb67b512ed80180c080a0ec5d5b723b5308b6e3d040a18b25da216cd567053aa39e428de32f696081e037a01f5d2bc541a323b6809774727bd3bcde8f0119aeacf17016ee9a64a15f0623ca" + "0xf87582018f08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cbd669399699ff5ca656d69748718e5bb3abd10a0a05c3882ff6907deaee22070aa90082cdeffdf3770d929a3d6684f3f5832c30b35a076abd65da2e310d25032bc86d2eea4738c754f26c43887e83bb74058637aa103" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -11903,21 +11958,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xc4db6912f2653a9382b68bac827e5dd2eb40e3231f203a2f1f8eef0f72e6f02b", + "parentHash": "0x4cbf14ace7c97bbe835d0811871f9eef77d6fe81ece5eaa55e741a4dc1fdd3d0", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xfe9441c6fb0bea27580b114b71918de7c6a52fd9b4476596ba6f1c61203d9144", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0x6a6027ce9189bacce9c0908574485cea0ec74426bee16fd91d4a2c2092344a67", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x179", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0xeba", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x499ed1595f081f971a86fa5d465264ec4ebcf362ca75b566c64ed9e143779b92", + "blockHash": "0x6958b982b14e1cffdfc4bd059530efa2eafa98b8b7f5e4d52ea1bae428329660", "transactions": [ - "0x01f86a870c72dd9d5e883e82015908825208941f4924b14f34e24159387c0a4cdbaa32f3ddb0cf0180c001a0a5ef9f26c5bc750525a80636c71e0e8108fd2ddb4f7f578c8d0a028e9109fdf9a046dce974cdccbe68db42073fe3cc2fe7ed24213042a89baf3c62c9d6884b7d82" + "0x02f86b870c72dd9d5e883e8201900108825208941f4924b14f34e24159387c0a4cdbaa32f3ddb0cf0180c001a0d3c0a98720b5e62ab0dd2e09c6c6a1d5febbd25768653c7a4dcd0231543b9682a049b33efb78187957b6eb5cfce6ce21711e147451aa4d0baa7f0240a7b52098fe" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -11934,21 +11989,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x499ed1595f081f971a86fa5d465264ec4ebcf362ca75b566c64ed9e143779b92", + "parentHash": "0x6958b982b14e1cffdfc4bd059530efa2eafa98b8b7f5e4d52ea1bae428329660", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x3f938be2a05406b71df1d2f0e7a39ac8e229ce087850ad6142bffbb884b06101", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x75e7371248e8b4d09aa48c22f93e0ffdd00c3d29d642da5268241d569d495079", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x17a", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0xec4", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xb079707f805c9e021d3e353694af2c1295ff098e90f96b7e597f604df32d4f7d", + "blockHash": "0xec74048a1581a2c5f60b21cd9e25bf9c356d64346df78fdd4d5ab6da471c09fd", "transactions": [ - "0xf86882015a08825208943ae75c08b4c907eb63a8960c45b86e1e9ab6123c01808718e5bb3abd10a0a0e4a8c4ab19bcffc864f8fd1231ed192ce8929410d06e442a6fd0ae7222385d26a0256ace97ccc4af6f32ad0b74fadad90576966cb20e2a09c0c01e866b42b6f99e" + "0x01f86a870c72dd9d5e883e82019108825208943ae75c08b4c907eb63a8960c45b86e1e9ab6123c0180c080a0894398d753a80224c3f5956da5fc19f14e47b8030d3a343d2d048db9b7b02e84a07820115a71ebb13d5ab484f151febbfd58299e76bd7dcac10dbc1bfa83c2b5b0" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -11965,28 +12020,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xb079707f805c9e021d3e353694af2c1295ff098e90f96b7e597f604df32d4f7d", + "parentHash": "0xec74048a1581a2c5f60b21cd9e25bf9c356d64346df78fdd4d5ab6da471c09fd", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xeb98c7b011307451fd9a31dbb0759dded576923c4b6dfa33c88eee8e553591b6", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xc75c81a1bb1dfebcbcb49def1720e9aefe91ed91083f0516a736738ce6bbf1a7", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x17b", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0xece", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x07a887698ad470a92e0ea4b515f4e0c1eef4d02e005090f039ccad1f98dfa78e", - "transactions": [], - "withdrawals": [ - { - "index": "0x21", - "validatorIndex": "0x5", - "address": "0x4a0f1452281bcec5bd90c3dce6162a5995bfe9df", - "amount": "0x64" - } + "blockHash": "0x96f61cc569a5cc077dab9be9396177a63a089524e4afbbf0ebeb09e357665e83", + "transactions": [ + "0xf86882019208825208944a0f1452281bcec5bd90c3dce6162a5995bfe9df01808718e5bb3abd10a0a04668f7c9201425d3f6934768909eefda549b8cfdf822cf0c1575aaaa5784f1b3a0033e7f718580e0142fc94ccc16757feae1ed14f59b7a4e7e9a590818c90e536b" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -12001,23 +12051,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x07a887698ad470a92e0ea4b515f4e0c1eef4d02e005090f039ccad1f98dfa78e", + "parentHash": "0x96f61cc569a5cc077dab9be9396177a63a089524e4afbbf0ebeb09e357665e83", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xfa5fbe90adb6cd85bed45c22220141e4d4d688ee56d31f9e5ae9395b8c3542d9", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0xdbdb7b39c79c0f51a988892b44279d3f6ed5e200e3d28ca9756b5e6bd93de127", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x17c", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0xed8", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x37c51aeb36996d1204e1cc23f24fc8ce6a531230eac5fd95a0157afbae993408", - "transactions": [ - "0xf88382015b088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a0fc733fa3fb48d3f13ee5eefc2c264d3403b8f29611cb31af2321865502c828bba059f364a077bf6aa468af37acd5c9eed697dbea3e4d35f230c96c6f0961214e44" + "blockHash": "0x0ca41041aeed31cf7dbf302aad1a13f021cff17dc3b30ab3ab8fb5c109bf9965", + "transactions": [], + "withdrawals": [ + { + "index": "0x21", + "validatorIndex": "0x5", + "address": "0x4340ee1b812acb40a1eb561c019c327b243b92df", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -12032,21 +12087,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x37c51aeb36996d1204e1cc23f24fc8ce6a531230eac5fd95a0157afbae993408", + "parentHash": "0x0ca41041aeed31cf7dbf302aad1a13f021cff17dc3b30ab3ab8fb5c109bf9965", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x5dd19ed57b4f4d3f2fae68e07911c6940af44fb058c9a9454775e87433315e18", - "receiptsRoot": "0xaaf879f16bc945f981764629a68f186ca15a1cc726a6e0994ef7227794ef638a", - "logsBloom": "0x00000000000100000000000000000000100000000000000002000000000000000000000000000012000000000000002000000000010000000000000000004000000000004000008000000000100000000001000000000000000000000000000010000000000000000000000000000000000000000000000000000000080000000000000000000000000000080000000000000000000000000020000000000000000008000100000800000000000000000008080000000000000000000000000000100010000000040000000000000002009008000000000800200000000010000000000000000080000000000000000000000000000000000000000004000000", + "stateRoot": "0x189c87301bd9530fbf7526346c89f2acf21a4a1dd57cc6a4aa4ca21a6cf3261e", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x17d", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0xee2", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xfb7823c99d6a8cecf4576cccad394131869c27c19903241a4bac149e8a9df5cb", + "blockHash": "0xf2198f4eac45134910f2f5c2f4f4bba2ee608c19e01728288f8f5c583df9b618", "transactions": [ - "0xf87a82015c0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0bca3972d67f3e443b15ef0b1f58d20971b740224462b717cb8a13fcee5381836a004c0d9a49c69b979caa2a1a507fdae8b61d34eb76652ceed6327bf4d4e75f02c" + "0xf883820193088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa0fe7d9978bcd2d0147d75b3322de5df21f02a0869bfe5fe96c29dc4670b74fcc1a00110a8737cac1a06b33aa2c4c8d09a5308175223c16758e35b70f380337b6f96" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -12063,21 +12118,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xfb7823c99d6a8cecf4576cccad394131869c27c19903241a4bac149e8a9df5cb", + "parentHash": "0xf2198f4eac45134910f2f5c2f4f4bba2ee608c19e01728288f8f5c583df9b618", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x434fd480c866cda1d71f0ee80014364d4c42243823bf64409c1776409b4e7062", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x545c993f4299dee364d8f2be4bc7761850c795b03df742693fd8e3ce2147ed82", + "receiptsRoot": "0x53e8b715d86b96a08a43b3f516f075e85d4776c7512a2c0a25b78194be60f9fc", + "logsBloom": "0x00000000000000000000000300000000000000000000000200000000000400000000000000000000810000001000100000000001000102100000000000000000000000000000000000000000020000000000000002000000100000080400000000000000000000000000400040000000000000000000000000000200000040000000000000000000000000010000000000000000080000000000000008000200000000000000000000000000000000000000000000000000000000000000000100000800000220000004000002020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x17e", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0xeec", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xb43189b040f33d48780cb23517066fa7ef9be143f72926c776dd2a0deb74cdd8", + "blockHash": "0x9ed60ccc2815f143b3776e728718019b7820044b0e8f1048fada365fefb130d4", "transactions": [ - "0xf86582015d088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0ebb83ef8d58970c8d0b8eef25ef497d0a50401368a20f8f8a7d0ba061cbe2d73a042360047a3fc34863766c17a2c7bbc10355084608fbf1041530d1a14e4c01288" + "0xf87a8201940883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa09064ce9eae2e88497aa4825b33c5780a72d7f7d495ca9a8d18fa2185e2f22edca049b610ab7217c5e910519dcbc21477ed15b9be01b566bbd18aafc049d63c047c" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -12094,21 +12149,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xb43189b040f33d48780cb23517066fa7ef9be143f72926c776dd2a0deb74cdd8", + "parentHash": "0x9ed60ccc2815f143b3776e728718019b7820044b0e8f1048fada365fefb130d4", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x463aef358cdff7e34839a185fb9f55a731b3494c97d0862eac151900b40fcf0c", - "receiptsRoot": "0xa34aba31a61b5b0f8a666d471417fe5a2b7b346b8cf7596cb7b91e574cdf33db", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000008200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xbb9320ec53937dd8a33deff1261bcf4c66c5dc794cc8e60bc6d3c1f20918bc19", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x17f", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0xef6", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x36d98a00fa9cb5f2d23adaac16766bf86c534154016d362227b77a09e466ed03", + "blockHash": "0x9062dff550aa9077f3623061b2bfd2bd8d2c86e29909967d614bd4944d9775b4", "transactions": [ - "0x02f8d4870c72dd9d5e883e82015e0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c9ccc0eb18b01c799656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0187c8bbc8cd3f478b5688bc03cf5eda82ee75aa605e946b39ed1898f0cc0e00f01a0fe9e522796cce1e5edeee1b4d839489efdf2a88716a677225586730033a452f8a042412e98bc67d6fece4f9e6e0295b8a7db6a654e3d3aa45189d7df51fefa9e8c" + "0xf865820195088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a08de2c7c835ae8f6ccd20e20df057097cb6e8fe56599af11c8489579e84eba2cca002241c5d8c31bb3275de49cc635e8f80655e2cdc5d2ef90467af6c0714ef5957" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -12125,21 +12180,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x36d98a00fa9cb5f2d23adaac16766bf86c534154016d362227b77a09e466ed03", + "parentHash": "0x9062dff550aa9077f3623061b2bfd2bd8d2c86e29909967d614bd4944d9775b4", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xeed54f9703bb531d2c17ad91c352a358544c949059e43a638688ebb06e5af764", - "receiptsRoot": "0x546613d89c675ca166e3b86c77b03920935c041b3652da17dd6f6cc04aff6678", + "stateRoot": "0xe2887614ef7dfd46b2eb60757d520eb36e14df3de8eec61992c4ed45ce64cdd5", + "receiptsRoot": "0x2bb262e1c2de3c524cea3467cc4102a62ffbb6e5dd8e4d3e5e01b5245a226e79", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000001000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000020000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x180", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0xf00", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x864f50b8a89fc8049af6830206eeacfa26205d9ac2f1e9ef297c024532a57be4", + "blockHash": "0xd157f96d8cff964d61e492c245aa25b09c561e5c6336ed5452387454dd2936a1", "transactions": [ - "0x01f8d3870c72dd9d5e883e82015f08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c036eab5d1496600f656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0afc44d58dec637206e79248a528189c68365e20afc23410475deb5e5dc69c82a80a03228bf3e8e8afcf77dddab3e3c888665915421562e1ba75483734c20b3bccbd3a035e97ae4c4084f99cdc32d4971ccecc9da56b456a4290721283fa44c5d6dc8e9" + "0x02f8d4870c72dd9d5e883e8201960108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c036eab5d1496600f656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0afc44d58dec637206e79248a528189c68365e20afc23410475deb5e5dc69c82a01a0898501fdb06f8326c17c49fbd51da51df4310e5fad6c7c800c2b8726e182ad36a064853e8169e7953b610056f9db4b7f7a095e1277984c1438f143c586fdfc6016" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -12156,29 +12211,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x864f50b8a89fc8049af6830206eeacfa26205d9ac2f1e9ef297c024532a57be4", + "parentHash": "0xd157f96d8cff964d61e492c245aa25b09c561e5c6336ed5452387454dd2936a1", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xc0b2c99de9c2cab2946d5074ed9201e9579af45846fb1d9e1c07487de30a9779", - "receiptsRoot": "0x4aecc944f33d425d167e974a14892ffee063fd9697823a42a2e0037e5a2c1d8d", + "stateRoot": "0xa2c306a43172bcba3f96e70bf46f2c55b2189dfd9f6b2c0f8a747b6367697d73", + "receiptsRoot": "0x16cedaf9e08250d2f20ee5725d06428ee114670fba949a51f5357b4e01fccda1", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000009000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x181", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0xf0a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xa68dad1f5a2ca3fec7174293fb1eafeed1b3e1209dfc74ba1d4f67272530d1b9", + "blockHash": "0xb8edb732bc8eebb71c6b57b77061ba1acf052b420d919e5da1720abb3c7edb21", "transactions": [ - "0x03f8fa870c72dd9d5e883e8201600108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038ccb602560a8ca054b656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0e2a0b166c03b200234eacf5eaf9ea11746c9bfd00e72f55d8cab76e0eca7195a83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a014ab990b716fd8be13e9a2439dd38ab3469f2ba1e9e5355031f7d57cc16fe28aa01fcc7a8080064238333c605ad57b373665d3ea857b58dcc4493ab055be5667ff" + "0x01f8d3870c72dd9d5e883e82019708830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028ccb602560a8ca054b656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0e2a0b166c03b200234eacf5eaf9ea11746c9bfd00e72f55d8cab76e0eca7195a01a05060bffe7a652e40c953fb35b1e32ee82b3dbd200487895b6095d5c13b643adba077ebf6ec2af6f21adb5a0a42b2cbae112b29bcfbe2fffc372f2aa66fcf35cef8" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0x867a7ab4c504e836dd175bd6a00e8489f36edaeda95db9ce4acbf9fb8df28926", [] ] @@ -12189,27 +12242,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xa68dad1f5a2ca3fec7174293fb1eafeed1b3e1209dfc74ba1d4f67272530d1b9", + "parentHash": "0xb8edb732bc8eebb71c6b57b77061ba1acf052b420d919e5da1720abb3c7edb21", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xbc6c97a060f00ab1be806a461d8e04d012651014ea6100c41753e932b3c43ec5", - "receiptsRoot": "0x4331ea2666467e36433120994481707bce23469d4639f5cb85785f8fc1daebfc", + "stateRoot": "0xb7d507270112bc4faab433198f6bd8ed283d9dfce7c48f022dbe35b2eb1e878b", + "receiptsRoot": "0x4748a7a6d1cc5092adc5b85c9c5b670600b531b5a1f8450d3b47d6cc3a789ae3", "logsBloom": "0x08000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000040000000200400000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x182", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0xf14", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xb5d6be7351994263965ff5d6bec155497dfae4101d9fa6f7474f4346432cc94f", + "blockHash": "0x15266d7b9ec958793882168c6ecb5b92093f733c0e47fa9f9885dec39977e5e0", "transactions": [ - "0xf87482016108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c7ea611ad5cf07d1b656d69748718e5bb3abd10a0a0873a6822a956861366590a1156d256b1bbb07e02e15f6da3b166522ae0d2f50c9ff1915186b50164055d6b6e3a9b46df65ead3ed7889c2696bf87c0b89e2924b" + "0x03f8fa870c72dd9d5e883e8201980108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c7ea611ad5cf07d1b656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a04b85d3d5e4e06787a4e7e6d00f4e2f6d7e0358d9e511177ab584553d4ca0603883020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a0144a8ecfd93531def162b68dfaa7a049752c47ab7057ca9a403e193c15261054a04ad33f9300255a732f62f35103bb245fe6afe7d0fa04495d2cc33c5f8906b239" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0x0d01993fd605f101c950c68b4cc2b8096ef7d0009395dec6129f86f195eb2217", [] ] @@ -12220,21 +12275,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xb5d6be7351994263965ff5d6bec155497dfae4101d9fa6f7474f4346432cc94f", + "parentHash": "0x15266d7b9ec958793882168c6ecb5b92093f733c0e47fa9f9885dec39977e5e0", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x8203857ab0f4351d2fc345161fed67871eacce08f4c0590074372d0ffa2ef01b", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x43a00b1aa4db0f080095e7930a6065ce834fcb8c29c2f072f2ccbc4d85cd452a", + "receiptsRoot": "0x2d99a1b319bf0d04c62af6aaf8f18092048165fcee3802270419d4acdc954cac", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x183", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0xf1e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x435041bdf7d03562f6cc28be67dd48e2a55cb6c36a8bde74217c78962fe35c04", + "blockHash": "0x96ad738816a0c5035be9c01fbbed53998bc70a21a08bd0fa2427288c9d4b4cfa", "transactions": [ - "0x02f86b870c72dd9d5e883e82016201088252089483c7e323d189f18725ac510004fdc2941f8c4a780180c001a02e258ae70f2eedc9eea027f8bb64f75b3f28c6c08d3c634d9f2bf63472a836bca01bda3a325bafa449bf2e7dc725b096b5fae087bb633c2fb250dd5b77122ca795" + "0xf87582019908830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c70bbcbdfb5c84e35656d69748718e5bb3abd10a0a08cb38dfecd5d15969ea5bd2db95c50bcddf8cb5d48a5431037c46511722c4cffa03022edf33caada42b8a0f6d0c07bbd36c13a812c3bca92c6e90262aa7a702152" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -12251,21 +12306,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x435041bdf7d03562f6cc28be67dd48e2a55cb6c36a8bde74217c78962fe35c04", + "parentHash": "0x96ad738816a0c5035be9c01fbbed53998bc70a21a08bd0fa2427288c9d4b4cfa", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x34e957b7fe8989ad1a1348053a6fcf0f60eb9831d3e0411557da90f20290b592", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0xd9d011d38278604ddae7d5e49d640e29f0b5128ba4e3ce8ecdafa9cdb5553cf6", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x184", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0xf28", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x74659e9bea0d8d39ee2966f14026731c00cfeac2addae8ab7440f3897752035a", + "blockHash": "0xd78dcce2b8cf4bd8d77c2e3212a31f5e1eb0c62184d07d2c0bd0dcfaf9258e67", "transactions": [ - "0x01f86a870c72dd9d5e883e82016308825208945f552da00dfb4d3749d9e62dcee3c918855a86a00180c080a06c29f5b2e14545a26d4c4fabd5be664ade5046e75bf947df58319e704cd15e83a0411cfb33b24f61406444f3b60bd7269aba228f69fb30073879e54c1d5a61f7a0" + "0x02f86b870c72dd9d5e883e82019a0108825208945f552da00dfb4d3749d9e62dcee3c918855a86a00180c080a058796c88204f4a019fa411ee0fb065d3499c48ecd98ef4b5ff4c8f12d9936140a008d74723a6429931c2bda0c48d75cc1de3e4fe79e15dc74a9f8e81798932edba" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -12282,21 +12337,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x74659e9bea0d8d39ee2966f14026731c00cfeac2addae8ab7440f3897752035a", + "parentHash": "0xd78dcce2b8cf4bd8d77c2e3212a31f5e1eb0c62184d07d2c0bd0dcfaf9258e67", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xea3a8543a0d754626f48f9e2bccafddf6b5391ed9da5a8e802d9aeff39ba3500", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x8c1f0cb437c8070e56df88cdbe91555b33d59248b13433075cd22430ad834811", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x185", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0xf32", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x8166e02057fbd66e2bdfdeb5e1b7348030fb8dcdf336c608186ecdf95a878d73", + "blockHash": "0x53b455b1a2321612d4750d1cb5f2154662340f0596d839583ad50db5d90c42f9", "transactions": [ - "0xf8688201640882520894c7b99a164efd027a93f147376cc7da7c67c6bbe001808718e5bb3abd10a0a0d892ded71ca2da8583433304c4936503f7c77abf5f5192edcc2f71445614fa3ba0578cb9c3c920c69eddae921e7c6d67ff6f7cde3c4b1f45f48724be79fe9a13b9" + "0x01f86a870c72dd9d5e883e82019b0882520894c7b99a164efd027a93f147376cc7da7c67c6bbe00180c001a09d5b18b761d63d1a9df732a8936576c71c3ce118a856e5dcc45bbd3ebc334545a0080b412935374e02b9713851a796e0afdc96f6eb0709c83884ed51d0a65691ec" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -12313,28 +12368,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x8166e02057fbd66e2bdfdeb5e1b7348030fb8dcdf336c608186ecdf95a878d73", + "parentHash": "0x53b455b1a2321612d4750d1cb5f2154662340f0596d839583ad50db5d90c42f9", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x2f9f3ce5b39159a1a49122bf41140eaee9ec2bb1a396e59fb7fb2520dd512096", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x858cecf2b89032ee42d75787514ce9f12e640d24168d3787531a4844dc3328c2", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x186", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0xf3c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x686342d6e14add1de361c209a4f097174472120c2649d4b1e3c0d69478c573a5", - "transactions": [], - "withdrawals": [ - { - "index": "0x22", - "validatorIndex": "0x5", - "address": "0x2d389075be5be9f2246ad654ce152cf05990b209", - "amount": "0x64" - } + "blockHash": "0xe665360c7c8888bfa138a986f8ff7f890a44b9e8f80b7e736f5f43a7c8bc5349", + "transactions": [ + "0xf86882019c08825208942d389075be5be9f2246ad654ce152cf05990b20901808718e5bb3abd10a0a0e7eed0cb4b06500b37b924d33a203b5defa189b4c3d6d3fb4b8a15d547bb773ca05a505687b0397d49822226429f7d7d751b0e22e5cfbb1ba857fd6cf08fd1fdc8" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -12349,23 +12399,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x686342d6e14add1de361c209a4f097174472120c2649d4b1e3c0d69478c573a5", + "parentHash": "0xe665360c7c8888bfa138a986f8ff7f890a44b9e8f80b7e736f5f43a7c8bc5349", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xa913a36ebb2c7286813fd5544542ba932c75ceebd10efa36b772066d1336b019", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0xdef174abca6e69793809763b1d37b188934297769a4536a98c35f27da9cc7e0c", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x187", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0xf46", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x69ee2c164e201f10e82103b762fa299a98efcd3efb531d7f684cc93fe20877bc", - "transactions": [ - "0xf883820165088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a08f095627d823ccfe8ac3f93f8d6ce42a33865c729ec95941f9b1428590e1b922a01241e87129a475efd61aae53033db7e37576260983c403c1c3663a4e0cfce194" + "blockHash": "0xe5efcbb043c2a94c768287dceb47dd6b9cb7a7cfa2d9af29222678ed900368c8", + "transactions": [], + "withdrawals": [ + { + "index": "0x22", + "validatorIndex": "0x5", + "address": "0xeda8645ba6948855e3b3cd596bbb07596d59c603", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -12380,21 +12435,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x69ee2c164e201f10e82103b762fa299a98efcd3efb531d7f684cc93fe20877bc", + "parentHash": "0xe5efcbb043c2a94c768287dceb47dd6b9cb7a7cfa2d9af29222678ed900368c8", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x30136876a22c79da7c69981a1022b210879614e2cc999acd90f349bb81ed7876", - "receiptsRoot": "0x9dd67ebc56712a7467d9464a0af506a7e731935e3dfe70c7d0bfefbc10cc316d", - "logsBloom": "0x00000000000000000000000000000001000000000000000000000080000000000400000404000000000080000000000000000000000000000000000004000000000800000020000000000400002000001000000000080000000000000000000200000004000000000000000000050020000000000000010000000000000000000000000000000000000000000000000000200000001000000000000004000000000000000020000000000000000000000001000000000000000000000800000000000000000000000000000100000000000000000020000000040000000000800100000000000002000200000000000000000000000000000000000000004000", + "stateRoot": "0xba682cb45dc6229bdf92ac214a08cf011d628144f6c88f59065c0769a7527b91", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x188", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0xf50", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x977c2a14bc576911c691938eb8badf6a77843c4214b0613133fa356a23aa7f92", + "blockHash": "0x21f6741c735a5806078a1f39d17733b135210be8033a80be4fefc59d42c45bc7", "transactions": [ - "0xf87a8201660883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a006e6eb4624ffee7629bad221ef5a8e8cf28e9acd1488f2762f76c254fbd5a5fea03eade6b173f9e255a9280f2e9c948a01fa5f67cbb75fa4107f30bfa818c1ee3b" + "0xf88382019d088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa030067aafa083ba90ed5ac98c474bd13b26f75a5183b1057cf1b3e136b27c6a8aa07cccc9bd109d2b8ed64e6992f93b62781e31b3a4987c08d299562237a932f3ef" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -12411,21 +12466,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x977c2a14bc576911c691938eb8badf6a77843c4214b0613133fa356a23aa7f92", + "parentHash": "0x21f6741c735a5806078a1f39d17733b135210be8033a80be4fefc59d42c45bc7", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xd655197085c144158f70b071963f65898ac8b024e09f768aa23debb200627769", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x29532a6b078691fb21bfd376abeed8257e221095f8b8c605e5c83882d4c7f7b1", + "receiptsRoot": "0x408b424cfe8e4a58b00e7e016fefdee6397c334eb769ab72684a4cda56dc1e80", + "logsBloom": "0x00001000800000000000400040000000000010002000000000004000000000000000000000000000000000000000000000000000000000040000000020000000000000000000000000000000000000800000000200000000000000000000000221000000010000000000000000000000000000000000000000002000000000020000000008000002000000000000000000000000000000000000000000000100000000000000001000000000000020000000000000000000000000000000000000000000000000000020000000000000000001000000000000000200000000000000000000004000000000000000000004000080000000020000001000a00008", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x189", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0xf5a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xd9a295a0e39c94e3e9c9305b2e410aa89ee5380a8c343b901fc2ce60a19a431c", + "blockHash": "0xd158907e25d23731ef6dce6a9d1614ba8b69f1080f78acecf9c403a853b3e7e1", "transactions": [ - "0xf865820167088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0d3dddbfaf3f7d67794a1af773a81224a033a1c309ed8d1256b0fdf41afa302f4a057c135428d584fec4526536760d0d6801243a495811b0ff25dcc9441fb5320c3" + "0xf87a82019e0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa06f959e2a059ecc0164e6c5c3f07a6ad7a53406b6c9baaae29c3a1edd2fd5664fa039353c67eed349b29feb34980aa3de22607a382bbe3bb1114c347ed65a0087ce" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -12442,21 +12497,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xd9a295a0e39c94e3e9c9305b2e410aa89ee5380a8c343b901fc2ce60a19a431c", + "parentHash": "0xd158907e25d23731ef6dce6a9d1614ba8b69f1080f78acecf9c403a853b3e7e1", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xe945c1dd5800f2dc2c10b812401b1d619f1052672ca44029c41780adff44296a", - "receiptsRoot": "0x6c5b098fbf232d565604bd4d7e82242720e0fa2629ef35404a6d74d66237c0db", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000800000000000000000000004000000000000200000000000000000000000000002000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xce1f293e6e98a03a0418ac1c56114779aac94fc03eff0b0ecbbf97610ef698db", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x18a", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0xf64", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xf2d8812d4f28578755d4229aef19bd2162c69cd9dbc684dd6a0b0b64c979bd73", + "blockHash": "0x6fab05257a0a012b2d7ae03c844ddece0883c3c319ac1396c86f6f0e136d034b", "transactions": [ - "0x02f8d4870c72dd9d5e883e8201680108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c3ce71abfd2a9f6e3656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a01bf8eef1506aea16c94dd534ab271dfdae26648de569b3bf6fc8bf4c76bd1a9980a08a54ccd165615a3f6c5c494e2844295ccf525857205a2f86c053030f24d74587a040be30b7aeb05f7cc03b3d2ee39a6cb0c401083a305e93735e93eea1c3ed827b" + "0xf86582019f088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0e3e15349981a88905d5af6ec3b7e5af4805bfb673fb2e4d6fa577d357cd5cf05a05268e935e21321793bbd1a8bbd62b66a633009d365cfe6869eb2d79951367e9c" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -12473,21 +12528,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xf2d8812d4f28578755d4229aef19bd2162c69cd9dbc684dd6a0b0b64c979bd73", + "parentHash": "0x6fab05257a0a012b2d7ae03c844ddece0883c3c319ac1396c86f6f0e136d034b", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x5fc89e717b8110ffa180abbbf968a6e6a0fa0474f7b1384dbed83d5095b5351a", - "receiptsRoot": "0x125f11b4c9f735f497b05529580226e6e3e005be03a1957777846217f5357f0a", + "stateRoot": "0xf561f28bb33b4623bc346f51cffbbae8ae28693c726809cf8d9fc73c1f318501", + "receiptsRoot": "0x19c705ba74035fab2b2c8330c0d306854a4c35fd804490bd12c26795086413a6", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000800000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000109000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x18b", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0xf6e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xc64105453f3f4a50ea7452760ca6066140fc6f2115e16065c397778756460d79", + "blockHash": "0x7c1553d1737048182d4b9d286bce8cfebcf1db592863dcdb04597d033557214e", "transactions": [ - "0x01f8d3870c72dd9d5e883e82016908830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c885c8e7048f4f360656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a01f1860251182573015d583a718463a52050e45d795ec0f94d112206c3fd62e4580a02ac6dde1e6dff9ec4155a56114ddd824ef545648c7d523b4b1ece0b781cdcb89a06007350fcd96693d0dedbeea776518761a47dc51a714f55c031b20d443c3cee1" + "0x02f8d4870c72dd9d5e883e8201a00108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c885c8e7048f4f360656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a01f1860251182573015d583a718463a52050e45d795ec0f94d112206c3fd62e4501a096bc82b0394d53979f9ae1ebef4aa75f643d05c6228a48d5b1467dd903724a6ba05ed6416fb1a0a40a782fda54a4b1f2bd007238047a9006bab629e3cd8310c068" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -12504,29 +12559,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xc64105453f3f4a50ea7452760ca6066140fc6f2115e16065c397778756460d79", + "parentHash": "0x7c1553d1737048182d4b9d286bce8cfebcf1db592863dcdb04597d033557214e", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x6d3bb9ac8c90193e805743b2009e22877fcf38cef9e0fa3ad42b672c596a7785", - "receiptsRoot": "0x56aa14a0b1fc6db4ec5f0332dfefcd53238b912e98e4f8171f6ba5ebb1670f40", + "stateRoot": "0xc1d1402980206ba41ffc92e430b8e35fdc94736a6f5b07e310e7bf2ae2d330db", + "receiptsRoot": "0xf07cb300dfd0f69edcb7adc7b068aa9a82bb4546861e357f19be0583910716ba", "logsBloom": "0x00000000000000000000000000000000000000800000000000000000800000000000000000000000000000000000000000000000000000000000400000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x18c", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0xf78", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xff05bd7ed3a3f4e5abc2e5232c98d4343072bfd25121b241932703d33f875c0f", + "blockHash": "0xb9a2df3ba23cf8289d6075dcaecd47b52b9fb750dee39aa9a93b6477e99b348c", "transactions": [ - "0x03f8fa870c72dd9d5e883e82016a0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038cb3bbc461cd7b04b9656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a092da59b68bfd8a9c1cb1ca6a302ee966f829f2727a36823b0dc7fddf7790a10883020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a022c5c0771555973c9e1e3f6bc48bff07002eb74100e495b653e17e4681fce80aa0521757e341c26b96807d5659162b9a96382937584bafa07e43b5d3ac095da704" + "0x01f8d3870c72dd9d5e883e8201a108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cb3bbc461cd7b04b9656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a092da59b68bfd8a9c1cb1ca6a302ee966f829f2727a36823b0dc7fddf7790a10801a04e402365b760304dd7885b33e0cad13b6c8de41105f23e8706aaa2e986d81610a02b0842a437c416ef9f7d3184d3ed41a83fbdb1e43de6c7902ce7d7321c4ab71a" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0xe2f1e4557ed105cf3bd8bc51ebaa4446f554dcb38c005619bd9f203f4494f5dd", [] ] @@ -12537,27 +12590,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xff05bd7ed3a3f4e5abc2e5232c98d4343072bfd25121b241932703d33f875c0f", + "parentHash": "0xb9a2df3ba23cf8289d6075dcaecd47b52b9fb750dee39aa9a93b6477e99b348c", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x3fc40ef76d78e19fac56084394db689edd279c048d0f449c09c39c04e5689494", - "receiptsRoot": "0x66b64724e3272f2ec6ef9d0c3f85a510900120dbfe843f1cda530557fd6c93cc", + "stateRoot": "0x8b2014cc1ba5d9b7be83ed0ec428dfe1df8c8b617bab285b61c5cdf11a2fd406", + "receiptsRoot": "0x0be5e2fc34752a3c00710ad282caf7be3018221bc0333964932a60404bca82c5", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000010000000000000000000000000000000000000000000000000000000001000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x18d", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0xf82", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x2fa9e1447264c03da65b930986c6c67078d887aa0b6252b49026c3bbc522ca59", + "blockHash": "0x8db428484b88609d95276b97bfc852bbad22b06dd7f40ac765e4e3333720ea83", "transactions": [ - "0xf87582016b08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c96c2e214be2bd0a2656d69748718e5bb3abd10a0a0eefa13b194da056212daca7c04fa697d680a2a7cf45a7eda53dfda0aa02692e1a06d27f41d4cb9322c0bde9008870c771aaeadd7a0dd25a0f965e07877d28854d7" + "0x03f8fa870c72dd9d5e883e8201a20108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c96c2e214be2bd0a2656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a00c8e91bcf03d65aedba99f4f76d3ff8cd007668948ce12daf4dded4761c7b19d83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a0d0af7bb08c69b25a8eef5629377b5ddcf45799c33c8b1fb564edee75b88dfef8a028f3e326278765d228f6354d7ad10b1ee3fd5926cb3d5b3a8e140b4fef5b5c35" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0x48ef06d84d5ad34fe56ce62e095a34ea4a903bf597a8640868706af7b4de7288", [] ] @@ -12568,21 +12623,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x2fa9e1447264c03da65b930986c6c67078d887aa0b6252b49026c3bbc522ca59", + "parentHash": "0x8db428484b88609d95276b97bfc852bbad22b06dd7f40ac765e4e3333720ea83", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x90bbc672313c5767ed1c21447ae06c6ebc9a1379a8d3bada37250d468cf4b6fd", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xc7d3270843fb0721e863b71bf2e9569178c4c1772df6ffb9830dcccb98ec52a9", + "receiptsRoot": "0xc0fd8226f5464b77c8ed07cc668d831a475c36e763de8a60694e0167d21c1daa", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000202000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x18e", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0xf8c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x10c9eb1115f231e7a50650aa52acc568532a80c7c1e0d695517fe4da1d493a8e", + "blockHash": "0xd52069ed6df2e1d2f640f30f418cfdf95501b1c6085ac06093c891607b0032c3", "transactions": [ - "0x02f86b870c72dd9d5e883e82016c01088252089416c57edf7fa9d9525378b0b81bf8a3ced0620c1c0180c001a096c29ad0d1f2947c8efd66353a3f3f2b4921d9bf5c58d0e4670348e29bf1b89da061bbc93071262fa15425909be708bf2c21d06886344e338e9e04dd196d7ba310" + "0xf8758201a308830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c4f4dd67aabaad6c3656d69748718e5bb3abd10a0a081b8e4c24820f2e8ea5fd2d4fc084667750f08875faa805fcc4e83a4f487341ca0024d08d37c00b11e2e3f6e3d23f2a466c331f91d8bcc8afae4c4b803263e9c97" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -12599,21 +12654,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x10c9eb1115f231e7a50650aa52acc568532a80c7c1e0d695517fe4da1d493a8e", + "parentHash": "0xd52069ed6df2e1d2f640f30f418cfdf95501b1c6085ac06093c891607b0032c3", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x8db3010d08c4adcf5d271beb8e207ce75e9830c859070fdfc4dc4f30d6805c83", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0xec34f503baa8a3bf9d5b965aa73eaf7f1c59e6f77f140485375ee0838d1837a8", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x18f", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0xf96", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x5abe00a7721db9dc1fbf458d49714c666ca2424e476099adfb77fd8dd54a0eab", + "blockHash": "0x7a253f0e42ca478ad6c4ae1e4892cbddb34294950e425582a85ae2da34f8a8c2", "transactions": [ - "0x01f86a870c72dd9d5e883e82016d0882520894d803681e487e6ac18053afc5a6cd813c86ec3e4d0180c080a05451364a93364dc251918bf5d8f7cfffdf33b58bd3d48c3f333eab4daec6658ca0156953f7d30f24273a44d6a2f15e1520afcdcbbf7aedbd72f3c395d74cde0e92" + "0x02f86b870c72dd9d5e883e8201a4010882520894d803681e487e6ac18053afc5a6cd813c86ec3e4d0180c001a09728fb333f0202298944f0eba61beb26ec81f57db95bcc9d7b9693432fce75f5a0183787fafb6563e8cd2f9850179759dd5b2d72aa986d21af6543b16e638a7c21" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -12630,21 +12685,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x5abe00a7721db9dc1fbf458d49714c666ca2424e476099adfb77fd8dd54a0eab", + "parentHash": "0x7a253f0e42ca478ad6c4ae1e4892cbddb34294950e425582a85ae2da34f8a8c2", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xcc7f1ba89ea6d4c2a5fbfcc4b42ef1609d9d10fcbad86d34eade03f4d447e7e8", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x7a93c947d5396808acb6505c825ee8766d47620a3fb91bcd2e890a602199901f", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x190", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0xfa0", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xade4149b0375ad07777a88bf87a50426806e7e69c98719e63763ebf8585d39be", + "blockHash": "0x4e526a541914f396684974eafbce8e6b898a3330278c3e7626816d435a2ef4d0", "transactions": [ - "0xf86882016e08825208944dde844b71bcdf95512fb4dc94e84fb67b512ed801808718e5bb3abd10a0a030fd8987e8637c05b888e039311b4ce539062b9bb74e95bee4c1230a15316660a03b5edc40f556993df62f7210fa58a970b14bd8d4473a0df7590026589e83ea75" + "0x01f86a870c72dd9d5e883e8201a508825208944dde844b71bcdf95512fb4dc94e84fb67b512ed80180c001a090a30db198c78f870c93648d4e02917e60d6aa6c9a1ae6af1ad01d8d48391ce6a07313f35931f53dd4edfbb01130a31f51813a1906ad845061ef41baaf5fb42a62" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -12661,28 +12716,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xade4149b0375ad07777a88bf87a50426806e7e69c98719e63763ebf8585d39be", + "parentHash": "0x4e526a541914f396684974eafbce8e6b898a3330278c3e7626816d435a2ef4d0", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xc2a2590076144444ddd91da89477bb827ca9153ac0d75676422ec75ff69577ff", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xbd3526bec68fc236a888c5edb23f1c7885fa46e2deb25fb667f03288fe7cf5f0", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x191", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0xfaa", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x90544280b5a1c89044d0a9acf28015355e9f87f99cebb6e423a2429593805c3b", - "transactions": [], - "withdrawals": [ - { - "index": "0x23", - "validatorIndex": "0x5", - "address": "0x0c2c51a0990aee1d73c1228de158688341557508", - "amount": "0x64" - } + "blockHash": "0x03dc453bfc92a17cf81454eafdde515558d116047e9d2deb26e4d653df5960cb", + "transactions": [ + "0xf8688201a608825208940c2c51a0990aee1d73c1228de15868834155750801808718e5bb3abd109fa0cef73dc4066b0c8a15b87503df3ac6e7b114ed7a6360bca4c469f3c7a1cdeb46a06912fc6d6eab8e3ab4aad5a6082f82d0cd129071c059db8fba5a911cc4dfe664" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -12697,23 +12747,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x90544280b5a1c89044d0a9acf28015355e9f87f99cebb6e423a2429593805c3b", + "parentHash": "0x03dc453bfc92a17cf81454eafdde515558d116047e9d2deb26e4d653df5960cb", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x816daf4319bb2e73679d9c72bc1197acfea24dcced35aacf7b959958b14b5748", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x80d8942ec16df8ea30502c625b3a4f5bf3c7a5c7a35ccf4de6869b534d2fdd30", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x192", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0xfb4", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xcbaec457a9bb83f627a46b321256873866c0a5c079315e1294328fc71b7d8529", - "transactions": [ - "0xf88382016f088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a05bb36f34fe06f126bd1110d297313d58ae78718e9e0fb3ff6e18afdfa56f3818a075ea98ed3729a3ece6704da4d80d5b13225ad6ebc6acfb834c2a8a669a991836" + "blockHash": "0x7c28f6c5bd3f408616c4374f509a34b30c118bf5d1573a2093630f20e43f2117", + "transactions": [], + "withdrawals": [ + { + "index": "0x23", + "validatorIndex": "0x5", + "address": "0xd803681e487e6ac18053afc5a6cd813c86ec3e4d", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -12728,21 +12783,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xcbaec457a9bb83f627a46b321256873866c0a5c079315e1294328fc71b7d8529", + "parentHash": "0x7c28f6c5bd3f408616c4374f509a34b30c118bf5d1573a2093630f20e43f2117", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xb95406b5c576820d6fd109e71b527d4f9bb1dbb458ed2a4a6d90f8a6cb25b384", - "receiptsRoot": "0x4cd138fe4eb3a09100a9486093e73b7f05b48c286e7571fac1da38fa9c1e237b", - "logsBloom": "0x08000000000000004010000000000010002000000000000000000000040000000000000000000000001000000000020000000000000000000000000000000400010000000000000000000000000000000000000000000000000000000000000020000000000008100000040000000000000014000000020000000000000001000008000000000000000000000000000100000000001000000000000000000000000000020000000000000000000000000000000000000000020000000000800000000000080000000000000000000000000000000000000080000000000000001020000200800002000000000000000040000000000000000000000400000000", + "stateRoot": "0xe70190f6ed009bd81015684f2421d43c0c0695ccc602351a921a3ea92c1cb3fd", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x193", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0xfbe", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x888127ccf7a04b3ab6dc54a687036e7464c30e3fd813a0f4ddc69094cf250b90", + "blockHash": "0x930fac8adfdbe31343d02ff687fcb52da1c6e61bca71f0f4a0dac8bbdbe9f243", "transactions": [ - "0xf87a8201700883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0c8616a2b954cfb2f2707c4a8fc6b8cc75c9fb1cd061be837d795c2174b773f77a04da08801f22e504206cac7fc792e4c0a65fb0ea8ca981381b419d3db08cc4b32" + "0xf8838201a7088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa03ca2ba685ec1759bc7560c52f9418727274e73d6d59cb61191058cc2dd519565a017c62d2d43eed87d417edf9d377102a2e0b71fe7e552f3427e7e9a16fe1378a6" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -12759,21 +12814,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x888127ccf7a04b3ab6dc54a687036e7464c30e3fd813a0f4ddc69094cf250b90", + "parentHash": "0x930fac8adfdbe31343d02ff687fcb52da1c6e61bca71f0f4a0dac8bbdbe9f243", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x6283fe7582b09ba2f3c59f797b270ac18c7ed091340aee4f4e8b2074b1b5d4d6", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xe06824207c5c1eb5931283fa74777883a8be1eb6e99ef1bc27a3c5088a84d328", + "receiptsRoot": "0x81566a1b74d5ec58900e780cbef9b6e773a0846e3666a2418de8c08a89afd8a0", + "logsBloom": "0x000000000000008000000000002102000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000400000000000000000000000000040000000000000000000200000000000000000000000001000000100000000000000010000000000000000000080000000000000000002000000900400000000000000000000000000000000000000000000000c0000000040020082000000000000000101000000000000048000000000000008010000000004000000000010000100000000000000000020000000000000000000000000000000000000000000400000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x194", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0xfc8", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x08d7f2f015c06dee88d707cbc050021fd38afd6a253d3382a783e92ab30f22c8", + "blockHash": "0x899574f6e851f799bb169b1b2ff31f51b11d500716847b660fbb717340b90f14", "transactions": [ - "0xf865820171088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0eeee915b6dcd97f488b2e0862ddf49be8f02b71ce27a970aa3d150a2b73c3d76a0151ede7670a2f2958cd967258efea3bebb7c9da0e7adadc47e07701477782f70" + "0xf87a8201a80883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0f8134902b3f0afcf54b9d803218c26ee97f023a427dfc515f7d872d4ee39c0dca03f44b5313aa79c53ad01f6f331fa50aee26a6386265921b7cfa24f18b876225d" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -12790,21 +12845,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x08d7f2f015c06dee88d707cbc050021fd38afd6a253d3382a783e92ab30f22c8", + "parentHash": "0x899574f6e851f799bb169b1b2ff31f51b11d500716847b660fbb717340b90f14", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x14d9fb7608ad2f76c0b79ea38c91e2f01743e40d5ce71a906ed89f44ce2d9a12", - "receiptsRoot": "0x83e14211439ab2e9769078e7d4bacb6da4763d09cfcd4fdda6b28526fa7e792d", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000010000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x4f1078dbf2c9687a55b2d2567e284374928604f4ce0032a3c665953f019ea6a9", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x195", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca90", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0xfd2", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x729c0e22346bb677499d2b9af1da34dfaf7653ace58567673fc6894cf8d56289", + "blockHash": "0x7310d47dc31a6bc3bcb6dbf90735258a092efc6fc83100937e73835ee2d70531", "transactions": [ - "0x02f8d4870c72dd9d5e883e8201720108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c07dd9b08a900173f656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0434e2bcc5f4148668dd618144aac33ef5d463b292b3baad302a60aeb6be03b8601a087509826265d785d522c46423fbe09005b3a67c94c3c16add305eb7f8119ee71a02b871f33bb0bd2bbf2fdd46a0959e221ee03f0670343b9c4e8f6648cf9193d6c" + "0xf8658201a9088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa08207de7d895b35b441bd31c016e50ec023f27817975912b467b01a883e8dee8ca0120b129c7aaaf566631c317698caf548d5a0bf20a6e8332f541795868287c3bc" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -12821,21 +12876,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x729c0e22346bb677499d2b9af1da34dfaf7653ace58567673fc6894cf8d56289", + "parentHash": "0x7310d47dc31a6bc3bcb6dbf90735258a092efc6fc83100937e73835ee2d70531", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x203063aa2a6c46cf7d25340d80f0ddb56a22eadc507641d8af3809cbd8cf9937", - "receiptsRoot": "0xda00a4cb704a559e0a67e72cc49701afc18109c598434e05644724ad3f65dbac", + "stateRoot": "0x11f4034edad0b613feef6d1e991d8ba4b3364a611236fd8ee052b20b0cd37ae2", + "receiptsRoot": "0xf444c39e621724e2fceb53f84e89737a22b3af6b612abaedd4ab25b5ee65e683", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000200000000000000000000000000000000000000100000000000000000000000000000004000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x196", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0xfdc", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xd60f9025487642346d1ff6fcb21558a0b719524dda4fb773e50254be6ea5cb70", + "blockHash": "0x9096409d42e5525d369ed6637798f87763c39cded3d9b86b9428c86c93b61b86", "transactions": [ - "0x01f8d3870c72dd9d5e883e82017308830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cffdd7bff610bd696656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a019fbac480a243f8c051e10225cec11bcb7fb274fac8792ca7e36bab8e39d312c80a04bc739bceb821f509ae877ea8ea9bd82c253a7753543df995f20a5591ac284f7a0792682a6835e34c96fce7d5981820fe7205c6ecd5570acc8d5fcbe48d4487e90" + "0x02f8d4870c72dd9d5e883e8201aa0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cffdd7bff610bd696656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a019fbac480a243f8c051e10225cec11bcb7fb274fac8792ca7e36bab8e39d312c01a0ee963bcb4fb67a997b3769f7e321f72876d65a535d74c9466c16f3a73477aa63a03e568a3d2715ba5b2b11274ac55fa7aeb105913dfd4f8c1138ab6c0ae6b982a8" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -12852,29 +12907,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xd60f9025487642346d1ff6fcb21558a0b719524dda4fb773e50254be6ea5cb70", + "parentHash": "0x9096409d42e5525d369ed6637798f87763c39cded3d9b86b9428c86c93b61b86", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xaa9c985aae31d5ca2a42624e5fafc7e2d4808cbf3dcfe033e719e1ac2bca7057", - "receiptsRoot": "0x1964831ba5d3c16a8539d764198bf986575324dd965ea3339e95c107e17177b1", + "stateRoot": "0x6c3de87f414ec08a57a84621b1f5494b34a97eebe4f8395527f60fd871010ab8", + "receiptsRoot": "0x53a86de1d09b83de67cfc4d6118e9cf5314c3eed7608c554909ae2574208b53a", "logsBloom": "0x80000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000800000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x197", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0xfe6", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xc2f378a6349f5ff2413494603a2bf9bf387182e0d7b2e042e0aa9bdde16b44e6", + "blockHash": "0x12d88d0223ca1c9cf55b618b3c4874591d2ab50eedc5b7acb833cec3efc2c2c2", "transactions": [ - "0x03f8fa870c72dd9d5e883e8201740108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038cef0bad2321e818b5656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0677a6b432bd3361f469c2e051c8e09ea92ed0d049eb563118ff8c680fc93a2a783020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a0c44f471d116d1aca7299d564e3f5e2cd7a0d796310285dff60e4935815089e60a07e10d8cb1bff275ed9bedd1418aefc18e815db7568f529e032c0afc560d61b23" + "0x01f8d3870c72dd9d5e883e8201ab08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cef0bad2321e818b5656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0677a6b432bd3361f469c2e051c8e09ea92ed0d049eb563118ff8c680fc93a2a780a053276ccd02cf1655c5832a3fc3f0644ba7c5de29c41fb404fef7b1e42d743c10a032602afc3a48d2f2ce0f3e4087c5cf59888242eb8a6b72b7f67e1efa45940b4d" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0x6cef279ba63cbac953676e889e4fe1b040994f044078196a6ec4e6d868b79aa1", [] ] @@ -12885,27 +12938,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xc2f378a6349f5ff2413494603a2bf9bf387182e0d7b2e042e0aa9bdde16b44e6", + "parentHash": "0x12d88d0223ca1c9cf55b618b3c4874591d2ab50eedc5b7acb833cec3efc2c2c2", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x6e77461f7994d7cdf0faa3f3bbcc5f6aba9bf8c65d3a5b52e9eac397b37823c9", - "receiptsRoot": "0x1f55e6dc8eee0103c0154282873007279dc35597279793c98f6fcc2d4de2a915", + "stateRoot": "0xdc9634fc3e1d0aff77dddafeb45a9a91afbace01a4333f0bd86d9d777577da46", + "receiptsRoot": "0xa9d01bd64bd9caeb7b4f166fe7b5e2baadfb930035dccc463e2a094af5ab77e8", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000020000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000020000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x198", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0xff0", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x2332603e1b89c41adb97428017bd2297310b5deeca32af3d79c88a23090d5aaf", + "blockHash": "0x0f52fa7983ab74a3b8f29492272435381ef85bc78db04283ef614c1fed3aa454", "transactions": [ - "0xf87582017508830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c68c46027ef4b7464656d69748718e5bb3abd109fa019abe845ab42c8f4f0b26a3ce199dd4855ae4b18713465d1c48ab06574bc3654a034ad1f9c7406c18cdd07c4178899e6d3ac1e0836d38a915e532ec331cf97b78c" + "0x03f8fa870c72dd9d5e883e8201ac0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c68c46027ef4b7464656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a082a4bb68f7522b711c9f22b00f9c5e050f52cb2bc5f0f50eadcb12a5f1c3083983020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a069bfc96d7bc42e126e6348fece3369b2e46c9bd72df269c5aeabe314898bef5da0305fa207d3fc1c4f795de4132b599e0ef15486865359dd3935f9b73c3634e1c4" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0x60eb986cb497a0642b684852f009a1da143adb3128764b772daf51f6efaae90a", [] ] @@ -12916,21 +12971,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x2332603e1b89c41adb97428017bd2297310b5deeca32af3d79c88a23090d5aaf", + "parentHash": "0x0f52fa7983ab74a3b8f29492272435381ef85bc78db04283ef614c1fed3aa454", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x77cc52aea1dd33ea8055a4f3224367ee609ee0724101acc80c44640e89b57c67", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x8012a731e1bf0836bab09fcfb9c5b286c430cbf5bf3cf5bee5a632cfa52f3fe3", + "receiptsRoot": "0x73d6a4d5387da1c08aba18cbdff3ec5099c19fd396d23cfb5be896c8c744a18f", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000004000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400080000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x199", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0xffa", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x0b88f4a3ea4fe334e0f85983fc3ed8f0e5031f76642df83e9ffddff65637cf43", + "blockHash": "0x84d0bb93eddee81c91f12a28c949b30782bd4e0edba3512ec7ece7930c060823", "transactions": [ - "0x02f86b870c72dd9d5e883e820176010882520894654aa64f5fbefb84c270ec74211b81ca8c44a72e0180c080a0c35eb8c466b63ba1e03aaa0fe19df9e1e342fadf2146ac08e65d6d1df68343aca05d2d29e1d0c3eaac3128ceb1f97b49287e80dcfd9c4d352c5aa5c6cd306dcac6" + "0xf8758201ad08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c6ae46cf81c369e21656d69748718e5bb3abd10a0a0f3af9d4836ccf9a28d01a3c8f31b8a3f65e53ac8ecf85273cf05d0acc5047900a048427de7841f09a85a37409520e5878f6fb353a385d823985d99d33cc417f5ce" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -12947,21 +13002,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x0b88f4a3ea4fe334e0f85983fc3ed8f0e5031f76642df83e9ffddff65637cf43", + "parentHash": "0x84d0bb93eddee81c91f12a28c949b30782bd4e0edba3512ec7ece7930c060823", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x60ea844559cd2bf012d37b9820a350bfa749ab84e3dbce1773f4d223fcfb9297", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0x49b22b8988b9ce9cf215f77389080ce8091c88236757a50c3cc2b530ff93e685", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x19a", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x1004", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xd5359ec7c8dbda34bbb1391a68ee130ee2fd94cdd86f2e6683e4ca680ef2ee43", + "blockHash": "0x033fd8cb5296f3226b34e1dc1084b6a25480fa39cec6e680902d838135aa1fb9", "transactions": [ - "0x01f86a870c72dd9d5e883e820177088252089484e75c28348fb86acea1a93a39426d7d60f4cc460180c080a0218999699955a193b336dfabf9ae461a76e2a706bdaa4210c77c0621106d4867a078c56e123752282d049c7f07b855516a29f56636dbb6584c645003e6a8d0a351" + "0x02f86b870c72dd9d5e883e8201ae01088252089484e75c28348fb86acea1a93a39426d7d60f4cc460180c001a05f06d517a74de8d666613df85a2053dba339563eefcd9a968eb70ff707bf0754a04d8a63e4b8c3db8a67ab6585f08e112608faad9d2b5ce0e00dcfd96f0fa330d7" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -12978,21 +13033,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xd5359ec7c8dbda34bbb1391a68ee130ee2fd94cdd86f2e6683e4ca680ef2ee43", + "parentHash": "0x033fd8cb5296f3226b34e1dc1084b6a25480fa39cec6e680902d838135aa1fb9", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xb43131e2c4acc2d2e3c4b6a047e5c29d04db1dd153a9ef7f4512b8e557612ddf", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0xd6a79ba7a6ff238b9c9e0187c689ce8c06a1b9f2f147519d3b21913535fee054", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x19b", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x100e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xe068d60356aae28f3154fa8f886f0f0067a7b74b524601c2f623610d258cbebb", + "blockHash": "0x737d7e54435171f7d4f1a31907fd2e6c53cce00b323b09de43222b5c27b78de2", "transactions": [ - "0xf86882017808825208941f5bde34b4afc686f136c7a3cb6ec376f735775901808718e5bb3abd109fa06bb2030f614880eafeb4b5e867ccd0db435b5087d7ac256a1735f6bd31fe87fca02cd3a5b7ce81806d5ca89c9c27cfbe358f2aa39e2945b76f3cc1e4ca77390ec2" + "0x01f86a870c72dd9d5e883e8201af08825208941f5bde34b4afc686f136c7a3cb6ec376f73577590180c001a0d819fc2311e388306378ed79eb2e7a84d2019702015d0442a4962fc404155e2da078b1a0494387cec889d0936cd7c86bfd0cd164c8a59fdb0d92db3f544468e599" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -13009,28 +13064,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xe068d60356aae28f3154fa8f886f0f0067a7b74b524601c2f623610d258cbebb", + "parentHash": "0x737d7e54435171f7d4f1a31907fd2e6c53cce00b323b09de43222b5c27b78de2", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x91b38283503f272f386fd74b54f772dfacccfe91e92aee0ba9a5c4decd81bcf3", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x3bfbb383dc248abfa038405d9007842fc9b4f5fb6d427ce73c2ba66713aa4d8b", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x19c", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x1018", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x650b963d47bb9f9b86c29b9d9e52c219bb70525460c04812bd6da741c0e4f90e", - "transactions": [], - "withdrawals": [ - { - "index": "0x24", - "validatorIndex": "0x5", - "address": "0x14e46043e63d0e3cdcf2530519f4cfaf35058cb2", - "amount": "0x64" - } + "blockHash": "0xa18e5315c6a7fc757c84bdcc6b663d717c0549aa53f913f05e2cffaf6d9f2227", + "transactions": [ + "0xf8688201b0088252089414e46043e63d0e3cdcf2530519f4cfaf35058cb201808718e5bb3abd109fa0294c12c24ad5ff685c6e22560ff7c009bd0a45bd75f2794d20f0d6b22a613823a05353ecc7c5bc868be13afebdc9011268eae9dbe38d588b6c392df53fa4426021" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -13045,23 +13095,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x650b963d47bb9f9b86c29b9d9e52c219bb70525460c04812bd6da741c0e4f90e", + "parentHash": "0xa18e5315c6a7fc757c84bdcc6b663d717c0549aa53f913f05e2cffaf6d9f2227", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xe793c954b6162268e4323115f6365d84736afbafc70c8564364b56ae961afab4", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x142436557545c30c44363b6484e74b07c37dd3b2b7a9e6784d8a35910e1c2486", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x19d", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x1022", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xa36c2bf72d713f99a25528fb03aa69429831432f179f6c7c406918b542f76ea5", - "transactions": [ - "0xf883820179088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a062f9d84758ddae03eefb5a4d51f524d42cd0d5a5cfa84ba6fdbe7f10587d1f15a079cd08882dbba6a8c5a3ed94d390e058c8682dd0b9b479df10928ed9444bfb89" + "blockHash": "0xb29d54443444ecf45ee00696aecb54c788d5bf75b57f20e5130c8a9233ca4c96", + "transactions": [], + "withdrawals": [ + { + "index": "0x24", + "validatorIndex": "0x5", + "address": "0x14e46043e63d0e3cdcf2530519f4cfaf35058cb2", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -13076,21 +13131,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xa36c2bf72d713f99a25528fb03aa69429831432f179f6c7c406918b542f76ea5", + "parentHash": "0xb29d54443444ecf45ee00696aecb54c788d5bf75b57f20e5130c8a9233ca4c96", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x894f1006a54555b3172661c3a5e6685eafc36ebc667efa983a102af3d75b26a0", - "receiptsRoot": "0xc0d1fae7a44f5a08a6509a062badef2b96f711095c30375cf335ee497308dc96", - "logsBloom": "0x00000400000020000002000000000040000000000000001000000000000000000020000000000000000000000000020000000000010000000000000000000000010000000008018000000000400002000000004008000000000010000000000000010000000000000000000000000000002000000000000010404000000000000800000000000000000000000000000000000000000004080000000000000080002000000000000002000000000000000000000000000000000000000000020000000000000000000000000044000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "stateRoot": "0x5c8d981fc6b1a0f36d6f67caeacb1a1299c64d747e77b94b6676b08daea00cd1", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x19e", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x102c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x3987af76d0a00951e4513199ee41aec1071161b52151ce66934cda577c4336c6", + "blockHash": "0x7c3805da218aa7f4e84fd775e7020c28243f7be58b18e624e447ac2905f40b08", "transactions": [ - "0xf87a82017a0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa00f896411bf64843d5340737f541e899492806f8936469e4b6a9678e55156c71ba06e77e690e26a2d8b86020c19245ca4c3ee9c937adc0cf8ee86b469cfa2aa6fd2" + "0xf8838201b1088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa0045d05afb5984928670226945103658d90226b238769ec6bb94ef4b811014bbea0520d77475cb63aa161a1660f2c8c3edf93bf7144e0b83a9ea4f26eebe3d85789" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -13107,21 +13162,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x3987af76d0a00951e4513199ee41aec1071161b52151ce66934cda577c4336c6", + "parentHash": "0x7c3805da218aa7f4e84fd775e7020c28243f7be58b18e624e447ac2905f40b08", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xf1d3bae1b9a67dcf701164be3c70998e5abbf0eb3506c05e120e100f5a4db0c9", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x37e39fb2cf7e5f3b4a61aa2d916d8685236e04cd39f457168496de231114e560", + "receiptsRoot": "0xfbe1a653c6dd606eb25aafa9b0d2aaadc1159b5cce2e08f3115abcdc570dd839", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000002000000000000000010000000000000000000002000000000000000000000000400000000000000000000000000000000020000000000000000000000000800000002000040000000000800000000000000000400000000000000000000000000100000100101000000000000000000000000000100000000000000001000000000000010000000000c00000000000000011000000000000008000000000000400000000010000000000000000400001000000000000000000000020000000000000002400000000000040000001000080000000000000000000040000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x19f", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x1036", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x7158030722716ed4b3153861925682677908d60a72f68d54c31732380dda9939", + "blockHash": "0xfd605ccf0552f8e7b221992726e492451007e6c6fb9d16e9c9a34200886a04d1", "transactions": [ - "0xf86582017b088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa002c0ddfb24254a26c7e83c8a2acb634669318b2d7d8f19d5137aaf6664bc9570a050eef823124703af3f339e533d639fd03f2cde4fd2d3c0edbaa02ecb0d0e8d22" + "0xf87a8201b20883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0b2b55ba8f16cab418721c37d01f5541cca57114991a68007b7af3dcdab25d08fa05467d2dafe6378bf9d876ba0fd4d4f6486a2d33faa2cb833af6cc9b184cae185" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -13138,21 +13193,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x7158030722716ed4b3153861925682677908d60a72f68d54c31732380dda9939", + "parentHash": "0xfd605ccf0552f8e7b221992726e492451007e6c6fb9d16e9c9a34200886a04d1", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xcddab4e72b430f6ecb050f28fff1d86122c7026fd305f08a7e09bfd8361810f2", - "receiptsRoot": "0x0ab2aaedb87b9c5061ad67c8e9690c0a9808d4878de14c2f74723364438e2d8f", - "logsBloom": "0x00000000000000000000000000000400000000000000000000000000800000000000000000000000001000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x4a14d680740cc7ff13ff5795b4760edde2bd0957554767961145c99bfe0c3e85", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1a0", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x1040", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xfe58c2367f07005a8773b7faee91e02dbafcb140bc800a5145ee2e31dcca251e", + "blockHash": "0x105a3b333d909958236b0da2089e6ab33cfd18fdcb2b7778c0c9d71db4298d8b", "transactions": [ - "0x02f8d4870c72dd9d5e883e82017c0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028caadfe33857f4d842656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a07b95105ef96b105a85277c69993f6f56602d912fe712ddf6156cdfcd8c49060701a07ab3a43124121badbbb9366336cfb92a45c2543a5841f896c5d75db686dc4fcaa0121f0254852b6317571e856a781e2ac05dcb587b4b671c1ee5045fa969bf951d" + "0xf8658201b3088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0b9bf568ddb39b91b0ad1f900ca747b72113d1ede1696c191eb367cc9a5928903a0354e8a4937be2f9bf8d165eb08b939fd37146a70b72e958f05833285ec92d427" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -13169,21 +13224,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xfe58c2367f07005a8773b7faee91e02dbafcb140bc800a5145ee2e31dcca251e", + "parentHash": "0x105a3b333d909958236b0da2089e6ab33cfd18fdcb2b7778c0c9d71db4298d8b", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x85f3cd564a6764dfe793c7fcbc39ce1eb4f27a57c846d7e2140233e1400526bb", - "receiptsRoot": "0x0580aa483cf3198d19d0b7f6e9de2a5331079abd9b266f246f031ecbb63bd95a", + "stateRoot": "0x5f6d88002f6ec9dfd4bcf0d386bb420a3c80bc2de0db349737238cefb0ea1762", + "receiptsRoot": "0x5ae0afe8b3c9a6fe2753d58deee3d7a3935003d1268f603a8e9105ed066df674", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000020000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000009000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1a1", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x104a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xe75e1fff4381bbf11eaa336b11a4a79a82f0a39a8afeda3673bc6b98bf091f92", + "blockHash": "0xa67f1ef534a72c18b935ecdd616dfc74353d87c9a17f605056f99194ca51affa", "transactions": [ - "0x01f8d3870c72dd9d5e883e82017d08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c04708e04480c538d656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0fb2772a3127ac292efa3da20fad64d950bf973fb209892fdf834766aa8cdc3ba01a0173b8145bdb22dcce47f47388371d9f3f5974a982f12614c3ecf1bd97b07c419a0133b6d49e23902ba792b434f38f70ea44c830a2f9a7253c945c2cf470ff986ff" + "0x02f8d4870c72dd9d5e883e8201b40108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c04708e04480c538d656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0fb2772a3127ac292efa3da20fad64d950bf973fb209892fdf834766aa8cdc3ba80a0ddb4aeb62dbc896dba05fe7f78e1a1b56de377120bdc0b624395504f32aae2c0a0471e3f27fcc5933c147e74695e1cf14c9fd287721f8410ae6497b814e418a297" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -13200,29 +13255,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xe75e1fff4381bbf11eaa336b11a4a79a82f0a39a8afeda3673bc6b98bf091f92", + "parentHash": "0xa67f1ef534a72c18b935ecdd616dfc74353d87c9a17f605056f99194ca51affa", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x0e4bf4c311366cf2c4203cea923b148f91bca9c1fee87080893ae8396e5b73de", - "receiptsRoot": "0x424e342ad6537fd933701062b2254df294eadb9b0bae746c37bcceb2bbe5784a", + "stateRoot": "0x81f739b4c4a80880f57fcfd8299d8a13ec3e03b5d18e0e9ebbbc22b5bf57a1ba", + "receiptsRoot": "0x1101e907ef640b6732e2561b65877e64564f7ff7f6fb22987f21a5febf783d1c", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000020000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000080000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1a2", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x1054", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x7de3c0bd5e846119edcd858e4d51f0c0153974ea077bce8048eb3e7d191c3c65", + "blockHash": "0x9227d788b19ed84597de40bf0d549437fac98898f323c856512eb3e4ece9dded", "transactions": [ - "0x03f8fa870c72dd9d5e883e82017e0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c96428e7ddf22a6f5656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0250ca62bfd18dde43e70bab089d01d591ce6ab28978434258ae1017c72f12b0a83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a073a74ab70a71e0aa0cfcaad84c73af0a2752d5fa3e498aa3a4838fa12578db20a05d16a6b804734303cb0d0f900a32e93c7cd9330a839dd27c9f09d175b333a77d" + "0x01f8d3870c72dd9d5e883e8201b508830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c96428e7ddf22a6f5656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0250ca62bfd18dde43e70bab089d01d591ce6ab28978434258ae1017c72f12b0a80a0ba52b73bca5eeadfd26b3b0036725c4436f447d1925771334f6e9aadb39aa503a0732ccb0e4d917b530939e459c96b540978db93ed6b94f9c40c40eae3a6cc79a5" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0x5e1834c653d853d146db4ab6d17509579497c5f4c2f9004598bcd83172f07a5f", [] ] @@ -13233,27 +13286,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x7de3c0bd5e846119edcd858e4d51f0c0153974ea077bce8048eb3e7d191c3c65", + "parentHash": "0x9227d788b19ed84597de40bf0d549437fac98898f323c856512eb3e4ece9dded", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xc4d7ddce008ad84dd5f904814ff4db9da61e982622fccc0149f045e3ff6b295b", - "receiptsRoot": "0xca8c2f123e2ca46851eec7bf481705b1ab754040c83e62c04c6be43336e74235", + "stateRoot": "0xe4d2cece4ad701df6f87d2dffa991858df1c3824b479ce126d8f6ac71c91b7dc", + "receiptsRoot": "0x9d7a6982ec8b327f2d6fc89884729da67feeaf03fbc98294792a2eacef14a5a9", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000004000000400000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1a3", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x105e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xc6053e841c2e4bc75e4e959e1b74a9387b351bb4919ae295314e834c5d94e6ed", + "blockHash": "0x9ac08c74df2efa845713d7c48cb120f3974a7d70270d7e43f2e30651695453a0", "transactions": [ - "0xf87582017f08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028ca4ea5930018eb6de656d69748718e5bb3abd10a0a087d67062c811df509205b9a98f5cd1149db0f711bef8dadd8afcceb3e2deb33fa0565434af06bcc29ccb45767e2f84becf7f31c9194eb9cc0b4073c2a93e252bc4" + "0x03f8fa870c72dd9d5e883e8201b60108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038ca4ea5930018eb6de656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0ce87527a0ad3ddb4d0d57d8077e84d48a6f3810f2a5672143d3b6969b0f86d6e83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a01e3eac364ebf604b3aede0ceb9ded0664b3cc8c2b95fa6d50fe63f39150369a8a03bdbf726f8daad3eccbe49523ed01cfdc7be73bc56178cfa262b6b621ffea578" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0x9f78a30e124d21168645b9196d752a63166a1cf7bbbb9342d0b8fee3363ca8de", [] ] @@ -13264,21 +13319,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xc6053e841c2e4bc75e4e959e1b74a9387b351bb4919ae295314e834c5d94e6ed", + "parentHash": "0x9ac08c74df2efa845713d7c48cb120f3974a7d70270d7e43f2e30651695453a0", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xd48aa6daa5c25bd835c2bc73a9ef497c742f596ac86390c1cdd08e726883ccd8", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x91abe8be79c91da7ef24f512943bddfa049501020d7035a76b0af54c806e93ab", + "receiptsRoot": "0xa600bd75f3d3caf5636d9baf534586af3c2b4150d5a93313c34faabcbf37fc5d", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000800000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000800001000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1a4", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x1068", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x404b549fee0787cefdf4065cb76e3a0e66aab2ad8c6a318e9adfe0bc4a73b85d", + "blockHash": "0x9c60b65b9e76366621f1355ea1e2e292c0f2f2be7bc0f402ad0095cf9b024598", "transactions": [ - "0x02f86b870c72dd9d5e883e820180010882520894e7d13f7aa2a838d24c59b40186a0aca1e21cffcc0180c080a008861b6f3d35926627f023b5813774cddb40cfa87d288c6ccfc964e5bad3212ea02dc34c0f4a392b7a6cd0930c1e2e997e90c65baa6f30809b42b421240986a64f" + "0xf8758201b708830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c2f18b099ede0c012656d69748718e5bb3abd10a0a0a7c1e5848166c2db947cd8e1ddcac62614bb8e27982f6c0f78478f7caa8891efa03172574a6aed5db3f18943592c15518ae1d5ed6c25485f3c8813f7ffcfa02db9" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -13295,21 +13350,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x404b549fee0787cefdf4065cb76e3a0e66aab2ad8c6a318e9adfe0bc4a73b85d", + "parentHash": "0x9c60b65b9e76366621f1355ea1e2e292c0f2f2be7bc0f402ad0095cf9b024598", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x733956370b9a63c38e3b43a9476668130057597197e83611dccf93d236f948d6", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0x35aa3d8b6cb55e2a0eebd5a754a341e49bc2c605716f28de4c9336bc58e0be1f", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1a5", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x1072", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x1ef7fa7c852474808b71df44ef25db220e3dbbb3fd5e18cbb7445b0546b2dbb7", + "blockHash": "0x2198fa802b4c34aa089ce7b6ce1d7eeb5fc3c2dcc6f6db71ca3d15f8c586a230", "transactions": [ - "0x01f86a870c72dd9d5e883e820181088252089416c57edf7fa9d9525378b0b81bf8a3ced0620c1c0180c080a0305b41cda8519ea8cbdac25b01e849925a8f150a6a5d529a0acbc7eab39da49ca059338257b32dce95ba36161b8cbbe1a1532a96a00a69d18e51415eeafea7cdd3" + "0x02f86b870c72dd9d5e883e8201b801088252089416c57edf7fa9d9525378b0b81bf8a3ced0620c1c0180c001a09520e2ec267207e2385106bd676de25575a03d987a86b3201948ad414fadcc5fa03282a47ea09ef3cc501ff025af54fdb37399806f5880dfa823ad3fbefabd06bb" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -13326,21 +13381,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x1ef7fa7c852474808b71df44ef25db220e3dbbb3fd5e18cbb7445b0546b2dbb7", + "parentHash": "0x2198fa802b4c34aa089ce7b6ce1d7eeb5fc3c2dcc6f6db71ca3d15f8c586a230", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x91a24ce9c7807c4cc2a7e6c226ec8a673b4bfc54b51ee1fdf92fd54c2c40547a", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x7131e4e3048c342fbc04ae495f58613640c05b17a8183890d7ccd516b8b3ae14", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1a6", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x107c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xc5e3d5218b2e1a652c2f2d9613df0b5e389b8695c73562332f4c3381d59faddc", + "blockHash": "0x4df5952c9c5555bae758de89b1a4bef3107e63fe722a5e95161e02f4132faa78", "transactions": [ - "0xf86882018208825208940c2c51a0990aee1d73c1228de15868834155750801808718e5bb3abd109fa051771698d0cbc3cb2bf6d62fe327745ad1f0a74a6c98ab0f7e08b61f9fd3a795a05b8f90ab7b967427dec2d5128cfaf53456a2e41dfe053028b15349615a38c993" + "0x01f86a870c72dd9d5e883e8201b908825208940c2c51a0990aee1d73c1228de1586883415575080180c080a0bc490209934f064f57f6b56c593fbd08bfc42a695ace8b885f17fee9611d7bc8a078addf2935069355d58d1cd4a5f8809031dfcc3ed15a29f3b854e91460f5f1ea" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -13357,28 +13412,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xc5e3d5218b2e1a652c2f2d9613df0b5e389b8695c73562332f4c3381d59faddc", + "parentHash": "0x4df5952c9c5555bae758de89b1a4bef3107e63fe722a5e95161e02f4132faa78", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x28febba9418b7966c83066c069f21ae146c56bae2c9be677413a522793ec89d4", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xa5a97915021b6a174f1e1e25e3537aeed3b459d431743574291fb3d1bf2b68c9", + "receiptsRoot": "0x642cd2bcdba228efb3996bf53981250d3608289522b80754c4e3c085c93c806f", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1a7", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x1086", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x3bddbb879a8d46f692289da30f77e1ba669940bd42a1279d275b94c24dcaf9e0", - "transactions": [], - "withdrawals": [ - { - "index": "0x25", - "validatorIndex": "0x5", - "address": "0xeda8645ba6948855e3b3cd596bbb07596d59c603", - "amount": "0x64" - } + "blockHash": "0xbf89f44ab29227a246931d0d96a52e7b788dcb2411625bca2d50be6a3797d8aa", + "transactions": [ + "0xf8688201ba0882520894eda8645ba6948855e3b3cd596bbb07596d59c60301808718e5bb3abd109fa05200e72ef6248d64e5b1b66b5b62b009fa164eb803eaf2712fbacb715884dc60a0661aa7732289934bcb684843e240c480b9b9b3df52d08d07e25db6e679efb598" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -13393,23 +13443,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x3bddbb879a8d46f692289da30f77e1ba669940bd42a1279d275b94c24dcaf9e0", + "parentHash": "0xbf89f44ab29227a246931d0d96a52e7b788dcb2411625bca2d50be6a3797d8aa", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x00a97dd6125d423743fb0de7fa16cabb523a863ccce837e2efc525c197b887f8", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x3a9725954a60141996c988304a4431fedb18567332653f23571c53611f252789", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1a8", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x1090", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x5ddb9e58b0ef297a051097bc988e136b1749d9f3445561b6b14a692fad23b8da", - "transactions": [ - "0xf883820183088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa04b4bf92950c32fe37f7e225b7ac450771573c14da0fc850e5bec45917d4e2112a063619497f80b1174cda00936abf5deb5adb18b6511a34d6bad1c011601de0933" + "blockHash": "0x9d798f5f1806b22c73320500e5b0ecad6ce1e56f0bebd96df975eabd7e9307fc", + "transactions": [], + "withdrawals": [ + { + "index": "0x25", + "validatorIndex": "0x5", + "address": "0x5f552da00dfb4d3749d9e62dcee3c918855a86a0", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -13424,21 +13479,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x5ddb9e58b0ef297a051097bc988e136b1749d9f3445561b6b14a692fad23b8da", + "parentHash": "0x9d798f5f1806b22c73320500e5b0ecad6ce1e56f0bebd96df975eabd7e9307fc", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x0dba2b3227bca5df06f4358a8f424d800b317f32f319a0a965fc0d31489a7b3c", - "receiptsRoot": "0xa95c0659ea55647106bb0421d6e846937fff8a0204b430d49515f001f39a76c6", - "logsBloom": "0x20000000000000000000000000000200000000000000000000000400000000000010000000000000100000000001000000400000000000400000000000000000000000000100000080000000800000000000000000000000000000000000001000000000000000000000000000000000000000000000000000040000140000000000080040000000000100000000000000480000000000000000000000000000000000000480000000000000000000004000000000000000000000000000000100000000000000004000000000000020080000000000000000000000a00000000000000000000000000000002000000000000000040080010000000000000000", + "stateRoot": "0x1f5a65fcf9ad787107bdd22b6bd03f2311390e8c24b403a2196e134123f05e04", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1a9", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x109a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x36be5e83ae2b1baebbb956bc7c44f540745e5a78a59f3ca2aa088fb994fc62c8", + "blockHash": "0xf0688b0ce2364b1c0e3d43325d3d3c8ccd63e530630a920664d49547169d0601", "transactions": [ - "0xf87a8201840883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa00360adf25dc0ca9566cdbbda097786916c7c04d26534c99cc1f15f2de7207e55a034c2533a5ee702ef318af118fe07a2ad8be3071a75af6c299bcfeb3b3b6dab28" + "0xf8838201bb088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa0a8b429d8d8413fd79f290fb0095b068f54f005b66457d4e0fbc317325180993fa051faf81e6e050e7c985468e51a2d0e7ed2a48ba0a3ea33df3a59c6d2acd866d2" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -13455,21 +13510,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x36be5e83ae2b1baebbb956bc7c44f540745e5a78a59f3ca2aa088fb994fc62c8", + "parentHash": "0xf0688b0ce2364b1c0e3d43325d3d3c8ccd63e530630a920664d49547169d0601", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x62d6bd10e1c7d9799ce034ad0d67d6b8fd2a1c5ed1bba14fb7b0ad8ba4ba5b09", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xf6d42ab939e8a7ec8c7f5b8d1fea7cc02a696e17692a90710070f92ae60ddc50", + "receiptsRoot": "0xd1b80c442926fe5c120d48dbba8a939553768e94cd9d3d93d689e20358cfbe4b", + "logsBloom": "0x40001000000004000000000000000000000000000000000000000000000000000000080000800000000000000000000000000004000000000000000000000000000000000000000000000000000000008000840000000000000000000000000000000000000000000000002000000000000000000000001000000000000000000400000000000000000000000000000000101000000010000000000020000000000200000000000000000440000000040200000000000000000000000040000100040000080040000001000000000000000000000080000000000050000000000000000000400000000000000000080000000000000400000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1aa", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x10a4", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xcd0da9da1e9b992dbbc4e98d488adea3b884852750ac79bde2b2ea2265a65d9f", + "blockHash": "0x08d303e510e1cc58b695d015fc2c2210daa94f0f3ff193d83ea43135bbb590b5", "transactions": [ - "0xf865820185088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0bfd2c15f64a419a3af3fdf8b3876d98d34b5b8bde7b0c603b26b2a320b626abca02fe1bee07dac1dff99d8c00afce05afe089d45fb884f0ce0e363ab6b3bd1b0a9" + "0xf87a8201bc0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0f528e7e5606653de34f71128dd2325b8d9ae69900242cc49dc3297ae729656eda06a5dcad3a7bc21867e1507f36889cfff8492c01b5a472dcee9de4c819c500508" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -13486,21 +13541,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xcd0da9da1e9b992dbbc4e98d488adea3b884852750ac79bde2b2ea2265a65d9f", + "parentHash": "0x08d303e510e1cc58b695d015fc2c2210daa94f0f3ff193d83ea43135bbb590b5", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xa21d9910200d72f9b7fb5cb2e75dfabe60d7686f27d43a2ebbf792503223b8e5", - "receiptsRoot": "0x961e82599eb3b2fe09e2d99b9454c55550f006bb8b24bedbeb265b4c8b8f0762", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000800800000000000000000000000000000000100000000000000000000000000000001000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x6dcc9c866eadcecfa79df027d479128cfb976f4a4f9a58b25bce25508a36a404", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1ab", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x10ae", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xa5a646fb42670f9bb6782713ff7b2cdb24cd4bb3323b0586c5e2c03d03221d30", + "blockHash": "0xb266835618e75e3292af2395d56e02a6e3e35264a596cb44f38148b1499ea0d6", "transactions": [ - "0x02f8d4870c72dd9d5e883e8201860108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c2bf53f54e8dd4d5c656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a02ecc9be98f9a8adac6e6acc5f160b0d15439b3856f0dee2a3005db79076252a101a02872d41683ea77b63dcf1907c1442d5785d5f06ce268b336b3a1d2c6a14f989da0140d4174638d1c19ce4e7256670b1dfde9f39cfe6ab4c5d2b9c25a0babf0f70c" + "0xf8658201bd088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0b09a24109a3aa2a21627335bb2db9bf7ea898fc97942727cf6ea7ed4d7fcab38a0191c9a40b0a3d226b36e86ec936f46dba272452b4583baf56e58c114e86875be" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -13517,21 +13572,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xa5a646fb42670f9bb6782713ff7b2cdb24cd4bb3323b0586c5e2c03d03221d30", + "parentHash": "0xb266835618e75e3292af2395d56e02a6e3e35264a596cb44f38148b1499ea0d6", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x5668ab2632de1e192960b43729c4874cdaec8fdf971da4bb9a52d81bc6090c0e", - "receiptsRoot": "0x62f3226a4e64d6a22b562e03d1575571d22526bdc185564fe6066d8bfd4a3e1b", + "stateRoot": "0xbc137cf8f41cf2406c69068da0f2a206eca06cdde21e0248db73b5e8791f0203", + "receiptsRoot": "0x7387492d4f80338aa35cc796106c3c1c13d4f7856f89223f50ec2e3eb254db59", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000009000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1ac", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x10b8", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xec2df5da5678a7b5ea6e5606f84879096c1b455ff0c9fe35679c9436c77953fd", + "blockHash": "0x301512acf2893751ec72f15dce9fdfb887dccfa96c80d6580a3487dd7857087a", "transactions": [ - "0x01f8d3870c72dd9d5e883e82018708830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c94159fe8d22ac484656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0a90642da2f095eb8128f01811cb553162395cfcecbe5b077f12c62a1effa7c8280a0f2ec4363c51bf39f7d230d7b373ac487aad7feb17090149f86a5874c719dfe9ca02a086f083832d22833880e64ddd6be5e66edaded139778afa4944a0695fd9db5" + "0x02f8d4870c72dd9d5e883e8201be0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c94159fe8d22ac484656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0a90642da2f095eb8128f01811cb553162395cfcecbe5b077f12c62a1effa7c8201a03a816ba4bc14949ab0ac310f3ffd9f89d92d7ab8f0a4d09c5d45c9401bbde552a032913568eddcee54e3fb9bc629f4c6703e84b9993f8803e82a7a946690b2a4de" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -13548,29 +13603,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xec2df5da5678a7b5ea6e5606f84879096c1b455ff0c9fe35679c9436c77953fd", + "parentHash": "0x301512acf2893751ec72f15dce9fdfb887dccfa96c80d6580a3487dd7857087a", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xd148adac40832b208eeae2792b4f3993d7e0a77984621fd57184eea110e7ebd5", - "receiptsRoot": "0x360fcdd796679c1d4ac0abb9164036e531fc69bc66cbb05cf5289f179a7de02e", + "stateRoot": "0xfe0d52fe58965589a853421ce0cfa0e5bc83c31c146f9818e494579d4233451c", + "receiptsRoot": "0xd952a215b77535449177637a95b2ca41bd0a547138df1aae9b7b876444256554", "logsBloom": "0x00000000000000000000000000000000000000000080000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000002000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1ad", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x10c2", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x3b1fcf135ef30081e41bfa1d41b0fff91843274d326b76a81723c7cbcf81c7a5", + "blockHash": "0x22c0f9622864f960991a2027fa3b70d9941bdb21189e7aa09f68660e27be1dcd", "transactions": [ - "0x03f8fa870c72dd9d5e883e8201880108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c79b38a395911e1de656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0cea8a961664f986542ebbc496878d052736682831cd7847bc769ae16e9eefb6583020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a0f28c84cbbd1c15d7b491fdef5672bfb99f5c973911f83a2d9083fba59e896465a00824dd81cd879f51862d7cb3cf53ec6a83849e3665d4a1fba60220dd72ee17b4" + "0x01f8d3870c72dd9d5e883e8201bf08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c79b38a395911e1de656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0cea8a961664f986542ebbc496878d052736682831cd7847bc769ae16e9eefb6580a0b38990f5679948bcd4756b2135c382f591d087ee507b4bc71215a67d003f5b48a0434451386aa5c7e22ee1e061fd0a80a8f6641ea94a4ff9474fb2d58ea02fb89d" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0x060aba9d44a5513488273214452bed1c1e85dc18695bf28a44d98dd24d20cee5", [] ] @@ -13581,27 +13634,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x3b1fcf135ef30081e41bfa1d41b0fff91843274d326b76a81723c7cbcf81c7a5", + "parentHash": "0x22c0f9622864f960991a2027fa3b70d9941bdb21189e7aa09f68660e27be1dcd", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x95df3ba204688c6f07e371a7804f555c5c6cadc52161403edfaee76dc75cec47", - "receiptsRoot": "0x9c2e5caec128d23b6bfc7d0b84bb065f516462d455584be36674424be7ba2858", + "stateRoot": "0x6d3cf2ba2fa0035bd25a8262b00c1d42b4e7a16bd05f0da1de12a2947c8df893", + "receiptsRoot": "0xb98bfdbf09ddfd3ce555531f4daebba699bf7e5b2de78ebe546cc491965b6426", "logsBloom": "0x00000000000080000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1ae", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x10cc", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x76c48fbe8881579636df3e68fe55621e99026e7d9810b74ff9cdb7557873d056", + "blockHash": "0xf6131b88cdb92ad5d8d74aa040be0cef999f2adfc6adc0b8c0f2748ea1aa2e22", "transactions": [ - "0xf87582018908830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c59a78d4a871468d2656d69748718e5bb3abd109fa07e98f37b83b11f881db0fca02730e3c1230dc2dfadad408236e1968812196f57a02cb56b32722cfd2e1998f5971bc3b59989468f87910e6a73585589fcb34bfc1f" + "0x03f8fa870c72dd9d5e883e8201c00108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c59a78d4a871468d2656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0e3cb3b98042d005e52e8bbbf49b25e11be63ec7c63ae5a5043e44c545fce633e83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a0017276065030e2f613990c6df7af28405409a9fde15b9d044daa3d5e0fa92627a05d73a9a0f2f89def0f67b51d3e506afa31f4f093c097f39467c782bf2b0bbbb2" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0xd5fc23888bb73b0a9c6bf06b969040c7be41d5bfcbaf51388390fe09abbfe03f", [] ] @@ -13612,21 +13667,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x76c48fbe8881579636df3e68fe55621e99026e7d9810b74ff9cdb7557873d056", + "parentHash": "0xf6131b88cdb92ad5d8d74aa040be0cef999f2adfc6adc0b8c0f2748ea1aa2e22", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x6aebec23a3a1fa16eaff744a55cd2dda5b85cdc56ae1f26cd263347cf98c202b", - "receiptsRoot": "0x005fb2a0d0c8a6f3490f9594e6458703eea515262f1b69a1103492b61e8d0ee2", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xd2c77328e8b2d379000523d599659d6061ec088e98829ce5e9982e63329326d8", + "receiptsRoot": "0x983d9f4de1366bdb064be176064c96cfee1482a997696604372a08e4e1cdef98", + "logsBloom": "0x04000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1af", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x10d6", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xb0915a68a1ecb0bcafe6d483d3fddd6a93249d963db6e9650695570b2d494448", + "blockHash": "0x558e886b4bbd77f53aa9a1a056e8e08481da9dc38b7a3859e498e410dcd973af", "transactions": [ - "0x02f86b870c72dd9d5e883e82018a010882520894eda8645ba6948855e3b3cd596bbb07596d59c6030180c001a0971237415e49f25d91c059c902cbabcac9134a93470a1e50be6623609e9239afa04f15ac058a42f0589ca9667ba90c54f29623badc33777fab188cfcbcde1e2c8a" + "0xf8758201c108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c8972e901c8e8d563656d69748718e5bb3abd109fa05a39c1b3c12064690b302e86cc1ab31ee0aabcd928370be7278f9a53e69fd744a01e19f38fe7caaf5c8bafae2337ca163e64000b534ffa83e12eb8c842d9edd772" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -13643,21 +13698,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xb0915a68a1ecb0bcafe6d483d3fddd6a93249d963db6e9650695570b2d494448", + "parentHash": "0x558e886b4bbd77f53aa9a1a056e8e08481da9dc38b7a3859e498e410dcd973af", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x6518db9c6e4925aecb5b221d3f27037a2b223de4a73411217f8df154d8fbc9aa", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0x53ba0edc93db891b865e2607a2d19a07e198c5fdb111aef0d16fe386bbd0f532", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1b0", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x10e0", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xfdda715666ca9712626e528f4570ffb24d48cdcc62e14571241d1a2f61576c46", + "blockHash": "0x2588de766ecc1af72b5f7b2a729453d703d85d9bfc027898833f2771039877e7", "transactions": [ - "0x01f869870c72dd9d5e883e82018b08825208943ae75c08b4c907eb63a8960c45b86e1e9ab6123c0180c080a094a1ec3a9b3fb3f62f38dfac1f8d7c36d07dd6547a14f6dcc2d8c370c0c120e39fc62b895dd48527c1be40a87e5f771038e3449fc4f99f7aad6ac843a338463f" + "0x02f86b870c72dd9d5e883e8201c20108825208943ae75c08b4c907eb63a8960c45b86e1e9ab6123c0180c080a04eb20b29b5954872fa9ca7d40c30e2f4eabddace9bded5aa80200472d3a5bb72a0356057b0f4e4d3871924ab3018271b9b721910e1d81d54a1d94c50c15fbb093e" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -13674,21 +13729,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xfdda715666ca9712626e528f4570ffb24d48cdcc62e14571241d1a2f61576c46", + "parentHash": "0x2588de766ecc1af72b5f7b2a729453d703d85d9bfc027898833f2771039877e7", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x6f9f6aad7db1ac4ca3fd2599e952b004f573a52af118c075241ed55f520b1b53", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0xcb734b11977fd3bef39d9d1796a9740f2519b1e67d12837581048e67551f984c", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1b1", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x10ea", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x91bab78100c2b6909b533e246d772659957330f8ddfcf194087a8fb67bdfb6f7", + "blockHash": "0xdade7fc48d32dc68d41020ac79b868485abb3558e53bb63a2e8aa47932e39476", "transactions": [ - "0xf86882018c0882520894654aa64f5fbefb84c270ec74211b81ca8c44a72e01808718e5bb3abd109fa00560b8397596944a06bec099e80d88b0eba0078a9278b7b48c38ba24dd7cddd9a07e3a0b1cd87163b082111f97a391e0711dd157dcd44ec6da0f2a0d73f5a9e9fd" + "0x01f86a870c72dd9d5e883e8201c30882520894654aa64f5fbefb84c270ec74211b81ca8c44a72e0180c080a031e714710112f21058257225bc17be6d429053ff06e6e00b9539445f2fbeee9aa0673f8e3872dce62f5d036b2671e4371fa956af2eaf368d7ce6071918d6d980f4" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -13705,28 +13760,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x91bab78100c2b6909b533e246d772659957330f8ddfcf194087a8fb67bdfb6f7", + "parentHash": "0xdade7fc48d32dc68d41020ac79b868485abb3558e53bb63a2e8aa47932e39476", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x8c3a01f48611558c766a08174b1c9261f47caa7885ca5ef2656de8ce54c7af07", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x8c6932274324937cf298e1c1d53df3407c6f0a80724a5611e9e81a7188057d3d", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1b2", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x10f4", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xad585c5a49c5db92630ed7c7b67fc367f3405060a0bff9de9dd64b996505a66d", - "transactions": [], - "withdrawals": [ - { - "index": "0x26", - "validatorIndex": "0x5", - "address": "0x0c2c51a0990aee1d73c1228de158688341557508", - "amount": "0x64" - } + "blockHash": "0x8ceeb2afd3646d249dccab24330b4251a5ce2d7ad671541d746f5daef884bd41", + "transactions": [ + "0xf8688201c408825208940c2c51a0990aee1d73c1228de15868834155750801808718e5bb3abd10a0a0b37ca854685d8c8d72156a029b9ff2504261800143b7e6a5a4a3a2f8b3038014a045f3c7dcb4e1f373001d2dba66eb0319cb24c3194ce752b81db843f6d4a68c61" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -13741,23 +13791,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xad585c5a49c5db92630ed7c7b67fc367f3405060a0bff9de9dd64b996505a66d", + "parentHash": "0x8ceeb2afd3646d249dccab24330b4251a5ce2d7ad671541d746f5daef884bd41", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x67e890251a1df44f1fdd8e95b3e3325a51c1e5d8e6b56a098dcfb4bb810bb615", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x240e95ee499f741a4c783b2055041d46a0bd79e898c12110ea4cd21831fbda38", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1b3", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x10fe", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xb8b4a3064cf8c569375764e5323ef7a03667dab6ea562bedcf67aeca7ad55e44", - "transactions": [ - "0xf88382018d088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa0494f4ddedaa75cd53c5d2b2b18873541589fa6ff122d30a8c1fe9d1854e23f1ea0285043a32e0d1aba79a3fdd8fb2b8898584296a6a87f00616834ba6b9f34bf62" + "blockHash": "0x24c5b68530cc49171a66f1dc312ea1a15c3b234db8561a1fb08bf8c3adb972d4", + "transactions": [], + "withdrawals": [ + { + "index": "0x26", + "validatorIndex": "0x5", + "address": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -13772,21 +13827,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xb8b4a3064cf8c569375764e5323ef7a03667dab6ea562bedcf67aeca7ad55e44", + "parentHash": "0x24c5b68530cc49171a66f1dc312ea1a15c3b234db8561a1fb08bf8c3adb972d4", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xb2950cc3040ff95b8285e0f5023157a9f6f174b23b821ac6b477a9369ea87ddd", - "receiptsRoot": "0xb43680ba5a32c58cb1926993bfe009fce37108c8a7b2e732e7213c54c9e3e0ef", - "logsBloom": "0x40400000000000000000000400000000000000100000000000000000000000000000000000800000000000000100000004000001000000010000000000000000000000002000000000000000000000000000000800000000110400002000000000000000000000820000000000000100000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000004002000000000000000100000001000000000000000000000000000000000000000000000000000024000000000100000000000000000000000001104000100000000000000000000000000000000002000000000000000200000000080000000000", + "stateRoot": "0x2029e8f91c93f23a5dd780e135b953c0fad03065b297a5c5971ae7a64686a8f2", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1b4", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x1108", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x53611bef1500f1568f35390b80eb6baf31ffaf9d8a4d34aab3932e5adffcecb5", + "blockHash": "0x82f242525cebab571fe6e5fe6fcd838c55ca48eea1eb255ef7bba0fb43dea956", "transactions": [ - "0xf87a82018e0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a073772e2e2652f74c11e6eab648cfc427cac926989470cc8ff4a0a14e83919427a03c84a88b5ee47058d530e52402f6130f7318043baff71a0d7bc021befd85d48c" + "0xf8838201c5088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a0298bc191f179c75529f83f3ebb570c552a1e3c7fbe738fc407692c000515004ea05d05a28bc1eeaea191904de98b8486684da78321372603f377939bd4c1b9a229" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -13803,21 +13858,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x53611bef1500f1568f35390b80eb6baf31ffaf9d8a4d34aab3932e5adffcecb5", + "parentHash": "0x82f242525cebab571fe6e5fe6fcd838c55ca48eea1eb255ef7bba0fb43dea956", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x31a8c1120baafc802bd64c6831c84074573982654387f88b7b6dbc76f3644a07", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x02d64962553a6ee9c5acb360729cf9ef45830c33ecbc7db6125fd6f4aa0d18ce", + "receiptsRoot": "0xb8b914589b743e34b5a77ea5f20820ee6309792c6238a972c5ae711e24d918d7", + "logsBloom": "0x0000002000000000000000000000000000000204000000420000000000000000000000000804002000000000800000000000000200000000000000000000000004080008000010000000000000200000000000010000100000000000000000000000000000000000000000000000000000000000000002000080c008000000000000000000000000000000000000000000000000000012210001000000000000000000000000000000000000000000000000000000000000400000000000000000000000000040000000000200000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1b5", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x1112", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xdd0f743e193c79a4a3ac080b01ed2ed15d9321300c002d70d74fb4c9b44564fb", + "blockHash": "0x413f11217c8822a00b8b8b614c7e438db97162345ea9d01d1b46bd859f589395", "transactions": [ - "0xf86582018f088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a006c454e8035cd15a2911e3b903fe167f51c630e009e96e5728bbce23bececaa2a01ce57e3a4cb8cae72e443e34abb166ec39e127e063b281a172b2b70d3e9db923" + "0xf87a8201c60883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0144819e3ba3b7b08a6ab16f130ae8ef5ae64b7c3a9a71fb327580735b5f7bca9a00b44f7e6491d37dc3326bd6a92649ffa89df3b3d9ab652bb241fbeb12a240a50" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -13834,21 +13889,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xdd0f743e193c79a4a3ac080b01ed2ed15d9321300c002d70d74fb4c9b44564fb", + "parentHash": "0x413f11217c8822a00b8b8b614c7e438db97162345ea9d01d1b46bd859f589395", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x3ba3d7945f4a4c397d5dbaeeebe57a4f33a15b564598c7282babc9cfb20fd9ce", - "receiptsRoot": "0xdf851086fb2354fe79ca0d3e9e3bf40f1e41c7463ee9581918eb449a0fc555c8", - "logsBloom": "0x00000000000000000000000000001000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xd37c5e362086edd1d3a3169ae13c733ffd92063791e3907ab2bee2a8a97f08bf", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1b6", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x111c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xcfffe2d9251de471b21928c131be8ecb1b332ec4a9ffc226e64f041820caec47", + "blockHash": "0x37a642a12a17850ffc84a65efd942917d6c413e0623d9ed0dfd583f4a6dd280e", "transactions": [ - "0x02f8d4870c72dd9d5e883e8201900108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c4370601485444f78656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0c452b6d808f45af81c3310dcf94a1704359eafc34709c45b0c7b95adf4cd02af80a06476a024de65684f7abf56ea2992795bc32b9eabca3dfd802f24104738659638a051b6383d626465cf6ff6073eeec5e9fd1759e5a5d5fa203e448eb0dbf03eb614" + "0xf8658201c7088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a06f1927be139e3b48d8120968bde41ffe936decbde7e43aa0d2930bc0c5d0f6daa049c95570c851c4e12be2197005208534a25c2dd4c5a5e03a14c9373e6d0c77eb" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -13865,21 +13920,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xcfffe2d9251de471b21928c131be8ecb1b332ec4a9ffc226e64f041820caec47", + "parentHash": "0x37a642a12a17850ffc84a65efd942917d6c413e0623d9ed0dfd583f4a6dd280e", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xd2a9076a6c93bae04e4d50c5275761281942cf47668dfc8569587d6361e62970", - "receiptsRoot": "0xa9fb713fa5eca2599ae81d8cd7ab1a44a18ce704ce5949d7778e96bd30d85037", + "stateRoot": "0x5c86a438d336a63de19080d7751184e2d26d8ac59f22caf6b4e4319e187cda6c", + "receiptsRoot": "0xdc0e6d287583eee8532625d0a03d749699dadb32658545f589010cc54cb4da12", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000001000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1b7", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x1126", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x758647ab7f0d8935064c2c38ef6a2a34457df9c78297c2d42376ce18051a4a56", + "blockHash": "0x2319866ae408c2c16def479454f550894284b65217d988c0f0346c8b788e6f50", "transactions": [ - "0x01f8d3870c72dd9d5e883e82019108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cdb38dd98f8319698656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a075eb384e56c3a3a30a408622e6f0595d30705efaff129c133effc43c3b946de080a02bcf01133888df5ef0373d5382917ef6108b1e147cd3c726ccbd72d5156072e6a0671aeea102efacbde075bc75a80fbaab9e15a6e470ecb4717adbe436ef47503a" + "0x02f8d4870c72dd9d5e883e8201c80108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cdb38dd98f8319698656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a075eb384e56c3a3a30a408622e6f0595d30705efaff129c133effc43c3b946de001a08cd129f5d58113adc5d2175265af0cbe79f04bbce7e8b5f4d6d7772d842355bda05e2bda814e12427c7dbe1ef1dceb7f72fef976ba6ae4f95912a65a011cfc96cb" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -13896,29 +13951,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x758647ab7f0d8935064c2c38ef6a2a34457df9c78297c2d42376ce18051a4a56", + "parentHash": "0x2319866ae408c2c16def479454f550894284b65217d988c0f0346c8b788e6f50", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x9d015c81c2be398fa128de167193c6852c7d31f1f63e6143987bc30b80acbe7b", - "receiptsRoot": "0x03859880c301da93fbc6097c99964de48eae15915c5720e0898b968b0e1e4c43", + "stateRoot": "0xa3edc3d3e1ae71ec0935c87361343b15ad083e06ada9a65299b8f675ad0b4c4a", + "receiptsRoot": "0xb686b4df3c5763dda0313e842ba52aad7478706c4f1540c8d3ff42cf6fabc95a", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000009000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1b8", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x1130", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x1431bfb93a91538f50aebe4b46add424df29fddb8a479eb51c44539f7425d9c2", + "blockHash": "0x21cd372ca079c9c9a302ce46dd6604fe0dab8d1c4963735f200fa7aecf68723e", "transactions": [ - "0x03f8fa870c72dd9d5e883e8201920108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038cff9997836ba653fb656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0e5f4774cc356a99594f072de9e8113739c65fb51b5d0fef3f40627cac02dd96383020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a067d170ea015f418a85dd9018a66eb5b3f497daeac2e3274aa6e81e12d64dc70ea06ccd0d6a09b13920187d3cc8dd09ed30bd66e8c79d7e7507a10f8fc53333c20e" + "0x01f8d3870c72dd9d5e883e8201c908830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cff9997836ba653fb656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0e5f4774cc356a99594f072de9e8113739c65fb51b5d0fef3f40627cac02dd96380a055ccc88d5b46b9a98693893875ce949a2997b6b76f98d97ad4202a89ec4f079aa070330743a9d9be8865bd7b0089a3fb737d57c14fe6254facb2a51ab02be8f0fc" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0x6a3a65f6fcf34e82edbc10f8ce17c7aac559454d22b5f8b865b0b26182a791b2", [] ] @@ -13929,27 +13982,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x1431bfb93a91538f50aebe4b46add424df29fddb8a479eb51c44539f7425d9c2", + "parentHash": "0x21cd372ca079c9c9a302ce46dd6604fe0dab8d1c4963735f200fa7aecf68723e", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x1dc00f12b4b67a4ff4469ae92ee5b06f5dec0fc9af1d77d900a374d4ec90e41f", - "receiptsRoot": "0xe4403f226ea34a50550c614e431141bcbc357496382725cf7ab388e550ed1a73", + "stateRoot": "0xdd55b05de585cfd2a8d41191457a953f76626f2a0cedeb1448c3902727a41859", + "receiptsRoot": "0x4e50c1a049436b10baf48b4ae3dfa5b7e19e6afc14f46c08be52adce8c6cb827", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000200000000000000000000000004100000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1b9", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x113a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xf2d3d4be2e09a5499d838936b169c6ccf83a1dc510305e54e1e181243480bdcc", + "blockHash": "0x95a47db05dc3a6043cd4a648e1838876d7814cdfc2acc03b6bfd228751a193a9", "transactions": [ - "0xf87582019308830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c104809bbbe393c1d656d69748718e5bb3abd109fa02b5dab3335cc19db2050fd831c2ae4fcbe18c229a211ea5ded9fe5f138453a1ca038ed41d85fa8d81885e0b0c20ef134cbf94674f344ef5188fa1f65040cdfe937" + "0x03f8fa870c72dd9d5e883e8201ca0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c104809bbbe393c1d656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a01fac03facd67f44699ff86330a7f959ed3745add76d323f4832bc17c35be45c983020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a0db9f0f490ed8381bf486f22d4b0d5226a6e7ce6965c9769fa156db9ba394a3c9a05ab4c4a13649551a96b56599d84c048023ae831138412ee45562c9636c95cdf7" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0x43a4a75cdb8ddebc28bf09b4ae12d71dc0765defafcd384de22c3711726a5d80", [] ] @@ -13960,21 +14015,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xf2d3d4be2e09a5499d838936b169c6ccf83a1dc510305e54e1e181243480bdcc", + "parentHash": "0x95a47db05dc3a6043cd4a648e1838876d7814cdfc2acc03b6bfd228751a193a9", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x7612c719dd4e8378185ea148558b178f0b5eb37dfe856cdcec2057ffef4b6088", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xf2cb5bd72087da6e81d52ae2abcf72b76331431447563452675768b1a70a7bbf", + "receiptsRoot": "0xdefbcd20212e2e430e02a0de3569f95e8eb5d21e41ed5263ee9c2f3299f5052c", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000010000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000009000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1ba", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x1144", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x9b8c6ecde0c9f7d3096db113472984400265c16b8f423527046f7c9cacec1c0d", + "blockHash": "0xe3b09d5570d946f2ab70308a08f0275c443d7ec9d9ef3c32df7c2320f790b4ec", "transactions": [ - "0x02f86b870c72dd9d5e883e8201940108825208944dde844b71bcdf95512fb4dc94e84fb67b512ed80180c001a0c05fbff6fba6c5f9097b8a5bc7dcd23a1bef40852915fbdc672f2e03fc052a91a0540679ac128e14617a1ecc0e9d18925c965cfd379a01b7304025f3f5bb88fc0e" + "0xf8758201cb08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c703c4a06d7179e4a656d69748718e5bb3abd10a0a0e7f4fd1285f514a91903757942ca5aa4781906b30e993e5fa33d34221e809822a06013f233be081d763faf9d0e8eac1c3d6029b9b67e8f6d498dfe8d3a423f7531" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -13991,21 +14046,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x9b8c6ecde0c9f7d3096db113472984400265c16b8f423527046f7c9cacec1c0d", + "parentHash": "0xe3b09d5570d946f2ab70308a08f0275c443d7ec9d9ef3c32df7c2320f790b4ec", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x4187854dddfec6279591a4cd9f726102c4663d1c16c87b947effcadd52f9e692", - "receiptsRoot": "0xbe3866dc0255d0856720d6d82370e49f3695ca287b4f8b480dfc69bbc2dc7168", + "stateRoot": "0xe2cbfdba708a8b5fbc56611cd27b752ddca3923f5dc75ed84a5b43911fdb8ce6", + "receiptsRoot": "0x005fb2a0d0c8a6f3490f9594e6458703eea515262f1b69a1103492b61e8d0ee2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1bb", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x114e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x045aa374dc38d101b3846713180df1f69828e97bd630e2264149777bb19ece35", + "blockHash": "0x590060fc82b55361ca5d13db77f55b5a5cfef362ddb300440f0a48984c9a2e28", "transactions": [ - "0x01f86a870c72dd9d5e883e8201950882520894eda8645ba6948855e3b3cd596bbb07596d59c6030180c001a0a0df669968597ced5aded55893e3dd7d9b40fb05c02657c585877ba9c2aff66ca013e8c0042ac9517ca0e2b59635460a4258283501935b57efa48422b0f3542282" + "0x02f86b870c72dd9d5e883e8201cc010882520894eda8645ba6948855e3b3cd596bbb07596d59c6030180c080a0a20315d3ed21bb88bfd934cf3e23f53ed24dae6e6d83f8b2dab1e7922d267e4da0357155bbeee9cec7c806346a0841bc5d80be7ed07f362f924f64bd2848e93718" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -14022,21 +14077,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x045aa374dc38d101b3846713180df1f69828e97bd630e2264149777bb19ece35", + "parentHash": "0x590060fc82b55361ca5d13db77f55b5a5cfef362ddb300440f0a48984c9a2e28", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x970698018f4fecbb86c13ddef6562a78648e7fb584fce6003cd0e01575241f5a", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x14d4a55b70c236c6f56d690d0505a67793c3fc14f88c8fe55fef99a87f8d238b", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1bc", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x1158", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xe316b409f1472bfb043c4be4e9654a37e2a898850d9bdc815cb9ca1a44b29118", + "blockHash": "0xa9b21f63b40981e09ca454b2739149666dc23a4d33f5a0014463766354cc19f6", "transactions": [ - "0xf868820196088252089414e46043e63d0e3cdcf2530519f4cfaf35058cb201808718e5bb3abd10a0a0de14126ae90f4e6f7172ac889d7788bdd6bbe19ccb3649b216b7a8f507af2e97a05576ccc32b95a6f5e588706f32dc88137bd9baea96e1743a6ead07f44d30a1d7" + "0x01f86a870c72dd9d5e883e8201cd088252089414e46043e63d0e3cdcf2530519f4cfaf35058cb20180c001a0799dee9c4902eea8b959e169341226e86bda96fd383dcf742a8d8ee607d452d1a016d91de400f3829a5f2957ed11d2d2590cea12e5729e3ec4f47f79652bb4dbef" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -14053,28 +14108,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xe316b409f1472bfb043c4be4e9654a37e2a898850d9bdc815cb9ca1a44b29118", + "parentHash": "0xa9b21f63b40981e09ca454b2739149666dc23a4d33f5a0014463766354cc19f6", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x67c4905dadd5aaad517aa94d209cdc69989c8be8e39ff038f8931792508d1eea", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x22f7dc0d0918b910c836297e58c34a66d703869adbc00a6c1011107e96621834", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1bd", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x1162", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x5cf2998fd231bdc16bd2c20b02d58af1f81d846a058464ac2e74f75a0485a33b", - "transactions": [], - "withdrawals": [ - { - "index": "0x27", - "validatorIndex": "0x5", - "address": "0x1f4924b14f34e24159387c0a4cdbaa32f3ddb0cf", - "amount": "0x64" - } + "blockHash": "0x331d419065a5d0ffa904c435e9022d1e621315eff68f2201ec63a690fec3003e", + "transactions": [ + "0xf8688201ce08825208941f4924b14f34e24159387c0a4cdbaa32f3ddb0cf01808718e5bb3abd109fa0013753736fec54974ea7e62a21ca2d63995a9c79ef236e9d9debc400b8760c69a02973fdb3be9801e07d7a58c65212d62e8c2963af00cb0c647d8c07de15ba59b4" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -14089,23 +14139,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x5cf2998fd231bdc16bd2c20b02d58af1f81d846a058464ac2e74f75a0485a33b", + "parentHash": "0x331d419065a5d0ffa904c435e9022d1e621315eff68f2201ec63a690fec3003e", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x04994fb18b014bcd55798ba91dd1f026b23bff9e2273be08e1a90a1d67250247", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0xe89ff10d95b4057957a289b060ede7881fc349c059e3d554df9dc08dcbcc03bd", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1be", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x116c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x576518015f61ddc9e28fcf964fa2a13490057c8f8ab669ad82dd2e6bfa19879b", - "transactions": [ - "0xf883820197088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa0849cc75ee152d62a3fb486fbab7cd848e2ecc27b9fb566366572e443e33108f9a0603a1d5b2f13c657021472c600cdef596694268c678d88e5de5d3cb209ba5e9d" + "blockHash": "0x44b075e106306c1ca24ca9dc1c5a27e68dbe86367904581bb3981acba06ce979", + "transactions": [], + "withdrawals": [ + { + "index": "0x27", + "validatorIndex": "0x5", + "address": "0x1f5bde34b4afc686f136c7a3cb6ec376f7357759", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -14120,21 +14175,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x576518015f61ddc9e28fcf964fa2a13490057c8f8ab669ad82dd2e6bfa19879b", + "parentHash": "0x44b075e106306c1ca24ca9dc1c5a27e68dbe86367904581bb3981acba06ce979", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xfab1e189dfb3cb6578b298363ad541e5355806fa45d0ee637004c23cfce550a3", - "receiptsRoot": "0xd6c1b856f2d2b69cadd746efc3b38a99237e658b25115819c0d394d46830876f", - "logsBloom": "0x00000000000040000800000000000001000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000002000008000000000000000020000000000010000800000000000000000010000000000020800000000000000000000000000000000000000000000000400000400200000000008000100000200000000005004000000000000000000000000000000000000000000000000000000000000000000000000200800008084000000000014800000004000000000401000000000010000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x5cb0060c1b5035f04c6560f07346437d075d089ab444f8d39a603f4ba55c9819", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1bf", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x1176", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x21d1d59bcf21cac072a2803938f6fd69d922d1e47a8b7049d8818266bfc27951", + "blockHash": "0x6faa7c1f263480410463c1eaa2ff9a4471dee90cd7b440f9a7fffc7c49c1ab57", "transactions": [ - "0xf87a8201980883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0e0e84d0c2b2c6c49455f0fde3aa355f43de01b49ba6cc21add7a314e42e54b5da03b960f8f3f84bfa9314ed1fa56ecae25166b3245e306aa0520932e0f5256d2fd" + "0xf8838201cf088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa0a6e9bd0d3e84219311126f49695d73b24d6e3cc7f93de67a89d4aafd9a93e64ba0025abf1e6f82e07bbf8a351f2d9001232f9fd24c860e07986b7172e696133f92" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -14151,21 +14206,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x21d1d59bcf21cac072a2803938f6fd69d922d1e47a8b7049d8818266bfc27951", + "parentHash": "0x6faa7c1f263480410463c1eaa2ff9a4471dee90cd7b440f9a7fffc7c49c1ab57", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x85f8cf721945b935f88454cb7dcc80ed6077316a10ba2604bbd0a52f1d60b4f0", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xb9bd751abe7d66c1c1790a05bb8757fec0f057be217d02192c9f6bb5ca328493", + "receiptsRoot": "0x53ffb06514a069fddc141fc8780f7a3250e5185d19f1f03afce5c150535d3671", + "logsBloom": "0x00000000000000000000000004010001000020000000000000040000000000000000000000000000000000000001000000000080001000000000000000000400000000000800000000000000000000000000400004000000000000008000000000000000000000000000000000000000000010000008000000000000000008000000000000000000000000000000000020000004020000000000000000000002000208200000000000080000000200000000000000000000000080000020000000000001200000000000000000000000000000000000000000000000000001000000000000000000000080000000000000000000000010000000100000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1c0", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x1180", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xe4e0607f25a8dcac8a8f7758373f3bbc1bc35176e239966d35a57925684b82fe", + "blockHash": "0x027b707ded941bf200797c580cf2a73d3dba48794d0b2b198965ff9d0aa4b46b", "transactions": [ - "0xf865820199088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a036833029d4bfa43d4b9105e35e8df17007b71e832ea60faa678edf307b7cbef0a079cc8016b3453932fb5d5a5b6f4de361976a12d3859608299b9c76b129f8a0d3" + "0xf87a8201d00883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa080ec0729adbc58c2d0a4e13a4edd9cbdeedf2afce5680be0d9db7e6cce0c888fa020bafea6d0c7a0c7c55be363c3b547722dc768227324c852a55ac7d96c5d2591" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -14182,21 +14237,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xe4e0607f25a8dcac8a8f7758373f3bbc1bc35176e239966d35a57925684b82fe", + "parentHash": "0x027b707ded941bf200797c580cf2a73d3dba48794d0b2b198965ff9d0aa4b46b", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xa5458c65c7dbd987ae9d0926cc781bfd453a18b00eea106e8dc9a2c99a5dfa28", - "receiptsRoot": "0xe768f6ae38c5f2054e7ff83ad46a4cc93748c6d829e8f17f6091c07003ccc959", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000040000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000002000000020000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x3cafac9d93b9780d61690341e246e277cfc101f2a9827230e45d2705b38733ab", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1c1", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x118a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x8b744a371a22b4986eeceb8ee0f512ca44affb56ecd495cea9e6c66a490e1f9b", + "blockHash": "0x35c25ba5f49d95a411ef32426c443c91e887ca1dedf2a6356969292822c0d91e", "transactions": [ - "0x02f8d4870c72dd9d5e883e82019a0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c50784d15bdea7b9e656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a07eae9da1da48fe866f64de7ac5c70c8e43644867b917aa8461f84915396d359801a05fa759f9d89dee838d6c206faaaca0274fc1ce0470137fd92b29414dc7385bc4a06ebb401fcc19aa9889892ff829c1787ad97bf27a553ab1020f96476679279d0f" + "0xf8658201d1088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a067d7bc8bd21e7870cb9a94b7a9c8f95f5dcaed9a2bc12bffb640187fcf640071a06b0f89bdc01f6d022a692dc040694ca3b987500dc5ccf4e4e8127bf666efaddb" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -14213,21 +14268,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x8b744a371a22b4986eeceb8ee0f512ca44affb56ecd495cea9e6c66a490e1f9b", + "parentHash": "0x35c25ba5f49d95a411ef32426c443c91e887ca1dedf2a6356969292822c0d91e", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x7580d75a460174096af8b7c511f879cf88f9d281b055d58651f1d274b7484a5c", - "receiptsRoot": "0x23c5f32b160f9cdb83afe13090caebc9ebeadcea470982a379a62325aa78b865", + "stateRoot": "0xcd77fdf9f53d458b6a00340027e15704573a60a9b5e6d4f32582ef3d13633657", + "receiptsRoot": "0x1baab2abac477c00e188098d5643447424ec92c721137857f7c00b3d392c07a5", "logsBloom": "0x00000000000000000000000000000000000000000000000000000840800000100000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1c2", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x1194", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xca1d7f951d628dd35b23cac8c21070a5740d64bba614089170c895a0ec8f57ef", + "blockHash": "0x83e0cab914be2a9ba1c2be60f0ecdff76ee5c946daeef001af4b6a6aa47873dc", "transactions": [ - "0x01f8d3870c72dd9d5e883e82019b08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c8da9dc6f96ca4d62656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a02aee290f6f3f6c60a6985d0150eab487f9de1c47962a779be7343cc0cff270f980a0257adcb05e25646f33deeb98bea0697f601355b5e72da46fcb1c1d0ea1d81fe5a051107d8771eb7448a728cc1a4e5edf15caed6246726977d2480ea42f187d1f0b" + "0x02f8d4870c72dd9d5e883e8201d20108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c8da9dc6f96ca4d62656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a02aee290f6f3f6c60a6985d0150eab487f9de1c47962a779be7343cc0cff270f901a0ce71194d023e725d872a55051aba64d20e24d16d1a81e6da2256862aae57c673a003c574aab00604a8b86ca7e8b210a741cc8bcdfdac2f839a4822e66e2aedd640" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -14244,29 +14299,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xca1d7f951d628dd35b23cac8c21070a5740d64bba614089170c895a0ec8f57ef", + "parentHash": "0x83e0cab914be2a9ba1c2be60f0ecdff76ee5c946daeef001af4b6a6aa47873dc", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x626ca5ae10a12b2efd2b48e7c3bc1e6976cd77ed69722edb4f86b80c2c3a2661", - "receiptsRoot": "0x32ad5c4b7fa7b3c1a393566bab829ec3a4d407c36d8fdb1ddab694bbcd33d1e7", + "stateRoot": "0x4b908a733cb9a3b988ba82a43ddd855a6f42be9d310f9933b2891a4e49b10a5d", + "receiptsRoot": "0x701448c456b1489d79ba377d9019ab44a0401af5fadc84c2756768db23324bc4", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000002200008000000000000000000000002000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1c3", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x119e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x410876f7d8880a998a060adf663027422ab139d54e12e973c1bb8342844cb351", + "blockHash": "0xc735802bd46c31c8a7e3e83c2605a218c92e66f7507e88f4cb1c0f351c0a71a3", "transactions": [ - "0x03f8fa870c72dd9d5e883e82019c0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038cc02a894c6c24e04c656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a06f9ff000b2dc3a554bbbb882ebc7726b700eb7afea141ab16e00a057f314d0db83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a0d5cda3865be365c1ae76bd5e2b0b91f7637da3b11cacdedbfa21cab859942279a0013845f66b55919c176cb4f0647f6894b77cbf0ff4c88a2914124b84977d08a1" + "0x01f8d3870c72dd9d5e883e8201d308830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cc02a894c6c24e04c656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a06f9ff000b2dc3a554bbbb882ebc7726b700eb7afea141ab16e00a057f314d0db01a0d6de670436ac3ae5380c60a087ffe3eaf456f354e48a7bac2e1468679b84bab4a014801e5a1c0e20813699837922eb7c7e5d0b25bf83053e6190120f4f149fc64c" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0x427e24cb2c8355bd1f18d20aa668805a4e4acfa1411ef2ec980839670499c0a7", [] ] @@ -14277,27 +14330,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x410876f7d8880a998a060adf663027422ab139d54e12e973c1bb8342844cb351", + "parentHash": "0xc735802bd46c31c8a7e3e83c2605a218c92e66f7507e88f4cb1c0f351c0a71a3", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xa46ba3066c87ce7119b56ce58630ed0cc27373af242719b16976cd670d8ae556", - "receiptsRoot": "0xa4870845d20ff24f436d4c5554b2a5e54400e3e3a9d3a5a2e16a97b91a6dc6cc", + "stateRoot": "0x0b01b0650b43e5149d6fe634fc523568912e7dfc24e3fc12f76f7c9bd3fd57eb", + "receiptsRoot": "0xd2041356b6b4963f58ae843a9218173d592eee55a090752e4f05672fe2f0c690", "logsBloom": "0x00000000000000000080000000000000000000000000000000000000808000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1c4", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x11a8", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xb30c453a9fb88e026819b182903ff90738d44f4237cf66139fe010a93c83ffb4", + "blockHash": "0x781d1e3fdabfafcea2fa6d4486634b6af94498fa3562407f4caa4c4294575417", "transactions": [ - "0xf87582019d08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c8a743c95d9f14e1c656d69748718e5bb3abd109fa03be3a8d50842a232a28fcf0b3a18425ea2e6f39bbc75d0d5e3e65230e64b3f2ea0289e148b41d97dc01ad89dad1158eeb20f42d906387502cd5beafbb5655670c9" + "0x03f8fa870c72dd9d5e883e8201d40108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c8a743c95d9f14e1c656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0e4c7ff156c2f31d046217715d0f193c8a6b3a7af6341d6abe0e28c49d121063883020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a0eb249a5a248d6ed36e9308aad9f867cb6e1543acd0b54ee759efd99e31b27715a07c6a4d27c82be737a7dc621828dc123a5127fc704832bb0bd644ad24a9a4286f" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0xb96ddc711361deb1db8cbe6a3bf2bfa883bce23e2f2260c3a0f3c6758f3fcabb", [] ] @@ -14308,21 +14363,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xb30c453a9fb88e026819b182903ff90738d44f4237cf66139fe010a93c83ffb4", + "parentHash": "0x781d1e3fdabfafcea2fa6d4486634b6af94498fa3562407f4caa4c4294575417", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xd607b37fd2cb910a26e9a84b69095bfc848b823c57d979da9cbf70b8ddfb5849", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xcef1e895ff61074bcc7d523b2c6ae314934a2f4457c346cce68c5c8f4c525ff7", + "receiptsRoot": "0x02706fc8554e54ddc25d62368381f347f8635fbbdb1e6e9ddf7be2a8662d4bbf", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1c5", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x11b2", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x5588cd9a04aa1c7e5590c15bf201aa722f59c4aa952bedd1e0de2cd2026c016b", + "blockHash": "0xe516c9e13a00da98680afc3265f13e142ebdd467d12da151e6e5a9677a228c6e", "transactions": [ - "0x02f86b870c72dd9d5e883e82019e0108825208940c2c51a0990aee1d73c1228de1586883415575080180c001a0f5f044b3c2b0e5cac578371ff5332de04f8752ba742606f0899c231dd8960c91a022c3cefad9171af45288b936783781dff0ef8210fc66235a0071d8bf7c72af17" + "0xf8758201d508830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c328289220139d4c2656d69748718e5bb3abd109fa037ff19350601c99d783120182d1a079acce8954f3349cecd6680bcdba2a5e6dba02b7141665011e9aa355d5b4ef78c12ea4aa61df652fbf19599b997e3e40591ee" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -14339,21 +14394,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x5588cd9a04aa1c7e5590c15bf201aa722f59c4aa952bedd1e0de2cd2026c016b", + "parentHash": "0xe516c9e13a00da98680afc3265f13e142ebdd467d12da151e6e5a9677a228c6e", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xa07aee3a994f4786a9132255d8d82a9ceffe0a586b3b66dfc26b517c7ae9263f", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0xa383b9c211851dcd74124fde5b33f90126e42511a894f8f16a37b8c89402474f", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1c6", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x11bc", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xac273cc7933a2407ec16281e6c7e43bb9b24efd517f53122d265c0fd8e400e6b", + "blockHash": "0x666ac8fcb85fe5025a7b996eb4f4d6411019124c819a009b7e0c7f0e0c4c4c3f", "transactions": [ - "0x01f86a870c72dd9d5e883e82019f08825208941f5bde34b4afc686f136c7a3cb6ec376f73577590180c080a07b02bc124dd50bc80814d08749d075bede4b4c13202a5fad804135b8b493754da002629acd4c30c01ce1c63f74d44d505f544a35cdb087482b803e5e01bf98cc76" + "0x02f86b870c72dd9d5e883e8201d60108825208941f5bde34b4afc686f136c7a3cb6ec376f73577590180c080a0a70906f3b9d0186d8478f9ed31a1bd32a6825ea4ab1afe5d0c2a6cbc9037cde3a07d7777a97031d3a57bbf6ae2d834240e6b47e828b707ed6092d2794c251d19a5" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -14370,21 +14425,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xac273cc7933a2407ec16281e6c7e43bb9b24efd517f53122d265c0fd8e400e6b", + "parentHash": "0x666ac8fcb85fe5025a7b996eb4f4d6411019124c819a009b7e0c7f0e0c4c4c3f", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x80cbabc0bbc66c40593eac7415a5e92ae1c19d77abf691cd6aa369fbd5410449", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x7fe7149a24850748ad6a6e9bb70bd2f99400d08d71005ff580e843f8a6bb2eec", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1c7", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x11c6", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xde0c3b47b2a8550abaebd952555b5a604916b2aa0c3516ac07f7cf9bf6d289b6", + "blockHash": "0x3c141c08a245a3db335db0f6bb0cff5848f6425057c9961cb3bef827aa0ff53d", "transactions": [ - "0xf8688201a008825208944dde844b71bcdf95512fb4dc94e84fb67b512ed801808718e5bb3abd10a0a0fe551bca46e599932399359e23ba76065cd515b2a6096048cef9a7c127737dd2a052a0df5bbac278462e0f84337ffc1ae8c2667a58205eac272d6596c8e9116ea1" + "0x01f86a870c72dd9d5e883e8201d708825208944dde844b71bcdf95512fb4dc94e84fb67b512ed80180c001a0d95b3075ed5cd26fd129ff63a5f677c3285ab8a5636df2441de3570eca497511a0047269f7e8a838ffc7d01a99eae702a1bd1972a728a1546bb3b59746172d66ed" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -14401,28 +14456,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xde0c3b47b2a8550abaebd952555b5a604916b2aa0c3516ac07f7cf9bf6d289b6", + "parentHash": "0x3c141c08a245a3db335db0f6bb0cff5848f6425057c9961cb3bef827aa0ff53d", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x65c9d878df12d376f241b7359e683f079b80cfef32ab553ac6d6f19cd09a66c3", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x42199969c7e33002b1bfc796611c40beaaabd61bf5c7ca2de6c9e941350a4258", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1c8", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x11d0", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x305bd96c60a6435f5371739f23364940ac2ee253e9a6f8d3bd89a623112533e8", - "transactions": [], - "withdrawals": [ - { - "index": "0x28", - "validatorIndex": "0x5", - "address": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "amount": "0x64" - } + "blockHash": "0x63dcab73a746ec6c5ac8f1ff8ddbce7cd483c26548f86554fcc40c2ccc041262", + "transactions": [ + "0xf8688201d808825208947435ed30a8b4aeb0877cef0c6e8cffe834eb865f01808718e5bb3abd10a0a06f658dca9087556cde4e1708d9f14e16e2b5677a8ba0cd4f330fce97a74e80aea01fc0554df07ab3adb59f1f690d9eac44c2b8a8d6d495e31a6e339af3de9b45d7" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -14437,23 +14487,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x305bd96c60a6435f5371739f23364940ac2ee253e9a6f8d3bd89a623112533e8", + "parentHash": "0x63dcab73a746ec6c5ac8f1ff8ddbce7cd483c26548f86554fcc40c2ccc041262", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xe81f2fc60ae550918e122a070d583ce4eadb9dda94f028f04b5c2585627a9c0f", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x9c9072fd7910b1ca7ebecd5c80f83b4ce7c035b862429a49a439e3e1a41d9b4a", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1c9", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x11da", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x322c4d0e57f585f032d5cbfff69c3adb7ac8084c95761a9bbad98b97f101327f", - "transactions": [ - "0xf8838201a1088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa010d014cb65ac522ff899f3b31c72ab16b980f306d0243add48333b3aa655ff66a0103a6f272e55d5c5454f473227432bba2671535641717072db7a9a299ab87074" + "blockHash": "0x3aaec8ddc0224f4b084a8ccc04efefac99cbef0e503b8a7bebc3c7aa4fe46521", + "transactions": [], + "withdrawals": [ + { + "index": "0x28", + "validatorIndex": "0x5", + "address": "0x4340ee1b812acb40a1eb561c019c327b243b92df", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -14468,21 +14523,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x322c4d0e57f585f032d5cbfff69c3adb7ac8084c95761a9bbad98b97f101327f", + "parentHash": "0x3aaec8ddc0224f4b084a8ccc04efefac99cbef0e503b8a7bebc3c7aa4fe46521", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x1c3e70f87cf00906c14ca168c6b2013992feab17ce72ed6c25ba1941fc5894a9", - "receiptsRoot": "0xef465287d76259c60ad703f515c44ee922414d482c2a6522e489a568d5e7333f", - "logsBloom": "0x10001000000000000000000000000000000000000000000000000100000000000000000000000000000000800000000000000000000000000000000040000000000000000000000000000000000000080000000000000000400000000000000000001400000000010006000000000000000000800200800000000000000000000000000000002000000000000000000080000000000000000200000001000000000000000000000000800000000000000000000000000000000000000000000000080000000008004000000080000000000000000000000000000000000000000200000000020000000020000000400080000008004000000400000000001000", + "stateRoot": "0x6c1e3f0baedbd30d7dffdfee5739c9a99ade5bd4686afdac817a424ef05d3354", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1ca", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x11e4", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x721f94cdb4c6e847bfbc88d65c74a8eb476178d1fa868af25151fd17256aa5cb", + "blockHash": "0x4dbe3b6b04f679aa9677b3a64d1dcfabc5906a12c178e5ff54b7efbfc2c79b50", "transactions": [ - "0xf87a8201a20883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa081f406b3a913530deb0925331aa8467e902ffec9a5425e75c4f662ca9a2f27a1a013b947b3ff5824ccde3401fef17837608be8f786eeccfeae8e3a9e902fbef5d5" + "0xf8838201d9088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a0e2ee2f23a81bd341cd6b4bac5edd7402704ca1bda5f78fb3147c00e409beed43a03505f6ddc3fd70088bab88e500a4a4b9be02f5835d498a6f16a6b0b3751155ec" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -14499,21 +14554,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x721f94cdb4c6e847bfbc88d65c74a8eb476178d1fa868af25151fd17256aa5cb", + "parentHash": "0x4dbe3b6b04f679aa9677b3a64d1dcfabc5906a12c178e5ff54b7efbfc2c79b50", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x27bc1b69541d7cc57bbfc82baa65a943bf40ae8402d5a77505a6a5c3995e05d5", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xb290df099cf4037d6fbed724859ccf2f96b881e7e4fdf7a75b204cdf53ba5995", + "receiptsRoot": "0xc8e21fa98e1d330dab7a033af29fe0cf36f4daab88993fcc8df33a203fecf36a", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000020000000000000000040000000000000000000000000000000000000000000000000000000000000000000080000000000000800000000000000800000000000000040000000000000000000000000080000000000080000000000000000000000010000000000000000000040000000000001000000020820000002000000200000000000000000400000000040000000000000000000000000000004000041000000000000000000000000000000000000000000000000200000000000200000000000080000000200000000000040810000000000100000000800000000000000402020", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1cb", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x11ee", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xe98015589d78db8a32de341208e325d7613c6db8683c7d1376113589e15acf0f", + "blockHash": "0x457c3a83d0815833923bd48642d056782f5fd188041e8cd92f260e2383e0361b", "transactions": [ - "0xf8658201a3088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0fcb36b193135dcc545402c100aa7515eca3114a58ec3ddad2222389dada34c93a04274b8e22b8a65231a168d3e874add304538b0e84fcadcdf667de1c457ec6576" + "0xf87a8201da0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0237cdc137b8c4d7a982822810516a56e8e67196a758016a7e061f5eea951df9fa017c6bdf19ae12a24c00d688f69bd80246314ed28ce8d36411a447cdad435f10f" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -14530,21 +14585,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xe98015589d78db8a32de341208e325d7613c6db8683c7d1376113589e15acf0f", + "parentHash": "0x457c3a83d0815833923bd48642d056782f5fd188041e8cd92f260e2383e0361b", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x534a22a7bb7f69a06a59da75fc8e0177fb324c75cf4193eebb37cf0415fe1325", - "receiptsRoot": "0x2e70f6fe320c333766de84b318783349f7bb1037cf5ac5f612703d2439f6aece", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000", + "stateRoot": "0xb1a4a7c84c982bc22f68d702132228c58ca1bc16187b245b8ce361cda2907bb9", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1cc", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x11f8", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xca13a2bf7d0eb0db6335849b7706678ec18caf013540bf57873532d5bc5cced4", + "blockHash": "0x02522280a85179021caaa61d6482df93c045087417ba2191809b602832aa710c", "transactions": [ - "0x02f8d4870c72dd9d5e883e8201a40108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c7025e3856d4257fc656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0492ae6c575840126917090c30d003aec0892cd6250f877b99f33b72133b94f2380a0493823516fb5621e5a2fb93f68383f54d9df203babab75c5511e756def8a623ba052e62f5274027ac06f53bcf3fdb0e92f64b12e47ac3034d28e4541c76f2d7b82" + "0xf8658201db088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa01d365c507c37b8a89a02925f59c07239c2a5c2cc08c8e5475522fa289f724e1da06f98b1519f68481ec1fd84cf7d7bc9bd001f9c4309f9160247645c0fa6d20867" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -14561,21 +14616,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xca13a2bf7d0eb0db6335849b7706678ec18caf013540bf57873532d5bc5cced4", + "parentHash": "0x02522280a85179021caaa61d6482df93c045087417ba2191809b602832aa710c", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x4806e71590b11d66562b670bfbb4227af9255f94e8fc0176fdb281bd7675f5c7", - "receiptsRoot": "0x2e8de0056d0fc190139defd3579bc5c7fec36ff1ae323626a9506b593849b1e3", + "stateRoot": "0x4ea59afceb52755cf58d31eba5073167399546703c0efbbd57f8cd254814013e", + "receiptsRoot": "0xa248be07f9d0bb446a3c5e24547e89ec9f0371ca6fed43f2d435bb6f972bcb91", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1cd", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x1202", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x4d93ae5d91ac6a55b6fe9e452210d4e60472cb09900262104063f91e1c4475fb", + "blockHash": "0x4d587bd01bcfa40e1795ad3ea5f77b546910c6870bc7e6657d40a1f2d8feede3", "transactions": [ - "0x01f8d3870c72dd9d5e883e8201a508830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c068ce3b3f4387cea656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a041b546f355dc0dd009ac5da8bfd17c8e197595c1c1f21aabbb1f3b18343a071880a01412cdbfb14747299cd2225b102548b2d7db5ab760d6ee92d7dfd502dd40ba60a061a8e13fed190951bc37b4d53414fd44b3eafac7c6455f0e83c70c56db6398dd" + "0x02f8d4870c72dd9d5e883e8201dc0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c068ce3b3f4387cea656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a041b546f355dc0dd009ac5da8bfd17c8e197595c1c1f21aabbb1f3b18343a071801a053ed4223e270f3dd37120d52db640e57e1a0ad5b928374dc62152d647920ebf4a06ef2c07bb9f0f5cb0adafc9e27bee133499dde9e89aed5c119de862f9965f5b7" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -14592,29 +14647,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x4d93ae5d91ac6a55b6fe9e452210d4e60472cb09900262104063f91e1c4475fb", + "parentHash": "0x4d587bd01bcfa40e1795ad3ea5f77b546910c6870bc7e6657d40a1f2d8feede3", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xd01d51aef5c56620f82b4a65c4de929f29de75529a0f8f39caccf5cb20f5d1df", - "receiptsRoot": "0xe0cb24dd872908c91fbc43cb557530d5965d1875176bb5f5b0c3330cd869b44f", + "stateRoot": "0xb5fe5b21dfee7eef09f05fab7032c8b66f89da53dcf11de600c0cadf1b4478a5", + "receiptsRoot": "0x2cba0c3de079ded028edde282d307cfb5ec9095fa5b3362bc4490e2967c15948", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000010000000000000000000000000000000000000000000000000000000000010000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1ce", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x120c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x4557b30a7674af7cbacde7748dff90a2d7b4b2a86f9d79d791e89d39f818a4b2", + "blockHash": "0x961d29a7fc57915697ba5b2fae8d3771d8bd91576c32c05afee041ac17d848b0", "transactions": [ - "0x03f8fa870c72dd9d5e883e8201a60108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038cc3396aa113bce01b656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0fd6fc192aa03eedb6505372aa1dcda93dd186fb3eded0bcafdaa4f2829fe43b583020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a083bf65495878dd9268b7b195bc145b7ad21da1c74abd11f3b8c14ce5c5ccf56ca05c3b754eeb0bc0f79c3f06c9cb839a04fc654da6adbcfaef5de25b0f42f1d36f" + "0x01f8d3870c72dd9d5e883e8201dd08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cc3396aa113bce01b656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0fd6fc192aa03eedb6505372aa1dcda93dd186fb3eded0bcafdaa4f2829fe43b501a046b49012734c5a0e65cb4b74bf1886be2f71dc7b430445f07b84f26e25b57e9ea076c6c2dde207d08fb4076b5c4fc5f2a83e834d341c72019653f4a5e97bec1eea" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0x76daa53b1c8d26a50bd4e4eca2703ba4bcad8248f6ad3227ed0af745d19d8ae4", [] ] @@ -14625,27 +14678,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x4557b30a7674af7cbacde7748dff90a2d7b4b2a86f9d79d791e89d39f818a4b2", + "parentHash": "0x961d29a7fc57915697ba5b2fae8d3771d8bd91576c32c05afee041ac17d848b0", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x6f28e7c311ff4014108eaa947693b7e142229cd3511fd91708744809a3ae3f5a", - "receiptsRoot": "0x803ef636ba01c78ca5c2de004aa09486ba182fbf479f6e4c274f62e0c4c6a8cf", + "stateRoot": "0x4647c30a119488f69aabc14383509b4114c8f059fb3ea7c563e9dc55e2265c90", + "receiptsRoot": "0xdbf406590cf69a43661fd555c05ff6cfbb66a115a4d0cee64ef14ddcc120e62e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000800000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1cf", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x1216", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x07a8c620ead87a45afb4e0e815a54ca217e4054077635d1524710f1ce5ecea24", + "blockHash": "0x5c3884749debf301065e34263780232f327a57a85b4fe19376e62de3723aa5e6", "transactions": [ - "0xf8758201a708830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c1bf41e5570d77f5f656d69748718e5bb3abd109fa0e8b18ebd47bd5fe6b3d0da3e846fecc95bfe019238497660fd044622d333ee68a01c2021e56a61b76b9d4b2cee62f1fd038a60d891897ad0c842b0afd39a709956" + "0x03f8fa870c72dd9d5e883e8201de0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c1bf41e5570d77f5f656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a09225354562a563158ba2ce0e86cfeed7fde0ed27c77342aaea09551b9c00ea1983020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a0df6296070eab7c096d63549942185fcb3c14794e2c5e342f5fbb503bcb3b7280a01ea49bc7ee91a3444e64a233809b57b57929fc6c778052d54ff4fab394d5f6ee" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0x2143743a63aa6ab5a7a6586dc404e48493f59fcb7021c079cd5e7efbe4a9fc62", [] ] @@ -14656,21 +14711,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x07a8c620ead87a45afb4e0e815a54ca217e4054077635d1524710f1ce5ecea24", + "parentHash": "0x5c3884749debf301065e34263780232f327a57a85b4fe19376e62de3723aa5e6", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xa3bec6f881c7947a0f7f0862184894e824488ebca6c7c737c3b2d4ce9649adec", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x7e3982e8359b08fc71bb0f57a00785d1df341e1d865459fcb8c7aa277d900421", + "receiptsRoot": "0x4af70ee701dec7aa6d3fa118f2cf11272798fb644c3e37dc9316e6ee45c139ba", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000004000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1d0", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x1220", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x87bca64e4e6c1a83cf43da1257fa59a376009b2c9f2f37487f85eb8013fb2f0f", + "blockHash": "0x713463804bd20977b4cd34532f3d1168f0a49501d5408fb2877478a477a1f971", "transactions": [ - "0x02f86b870c72dd9d5e883e8201a8010882520894654aa64f5fbefb84c270ec74211b81ca8c44a72e0180c001a04004c9e1e07f1fcb40b17fd0155a6ad6512d31c0be3e7975a470536834fa6a7aa032ce14734e673e544c999078ea52e7b5f99c334dacbc37fe09545f4992974742" + "0xf8758201df08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c389d43df20b49725656d69748718e5bb3abd109fa04fe1b45a88d8e36e60f5c7b0031228371b19d91623eeafc272583c8a1a7d54bfa064c2ce10ca42d5dd64d25b3deae63ff28d5d08eae0df34405559c2f2333dfa52" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -14687,21 +14742,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x87bca64e4e6c1a83cf43da1257fa59a376009b2c9f2f37487f85eb8013fb2f0f", + "parentHash": "0x713463804bd20977b4cd34532f3d1168f0a49501d5408fb2877478a477a1f971", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x717549302dad496e69418af6eea2f9b487baed0236ba4b90d13f46b8df45d3be", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0x152631f6c3a90c1969cd5f2d066ce16ea6d418631f9e8473847eba018ba28744", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1d1", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x122a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x5984be6ef98b1e35c943bed4caf24066c34bea65dd09cf99762e7e3b6e41ae03", + "blockHash": "0x461c8fd694ea0c1af8793266c605b6ceeaf7245cec97495903ea2a14ecac4380", "transactions": [ - "0x01f86a870c72dd9d5e883e8201a908825208943ae75c08b4c907eb63a8960c45b86e1e9ab6123c0180c001a09abcdf1c2570570e59c823ab3a69bbfddc6d1008562623128e2c1f61e7b6f0dfa03995c9953c9b0931904e8b8d2e6a05128f9f292f0a6763e576ec5176e6cc4a6e" + "0x02f86b870c72dd9d5e883e8201e00108825208943ae75c08b4c907eb63a8960c45b86e1e9ab6123c0180c080a018f98563dca8b7917f8eb1be73f5d88d894d07df709e919e08faeba12208a428a015f6fe6a957f175590b2d354e0fe2068460eaf4091cb1ccf00383d896842b7aa" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -14718,21 +14773,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x5984be6ef98b1e35c943bed4caf24066c34bea65dd09cf99762e7e3b6e41ae03", + "parentHash": "0x461c8fd694ea0c1af8793266c605b6ceeaf7245cec97495903ea2a14ecac4380", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x47528cdf5370069155e80e30d1f5ca1c7038610dd2a594fd0b40184b32daa753", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x36011c9656d381ccf0ae8eba22328e64e6d94a57911ab9836e31a68e2ddf6814", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1d2", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x1234", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x223fd06ad6b3a95d0ca0b0fac2819ca9cc7abbcf53686cd3cc9ea9a7099aed2a", + "blockHash": "0x35e31088a1515e1ba6609d0950a16e8f35cde03fa07f46e18e4b86e2cca4edc2", "transactions": [ - "0xf8688201aa0882520894c7b99a164efd027a93f147376cc7da7c67c6bbe001808718e5bb3abd10a0a07a7094e56286d07a0843ec216423dd2e25b45950cd30267a31673a2a03ebbacda079b43cc4f41e5edd1dc8d07ef006668d9b1481e724ac8f5361f431fe2aaf11af" + "0x01f86a870c72dd9d5e883e8201e10882520894c7b99a164efd027a93f147376cc7da7c67c6bbe00180c080a07ec461e1d7b71f934e52df449d0378122ace5caa1405c8e154179a99efb44c6aa055bdbb97e7cf0c95bf33add6a5e04eb8d38f1d012f738227d310c74daaa9bf98" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -14749,28 +14804,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x223fd06ad6b3a95d0ca0b0fac2819ca9cc7abbcf53686cd3cc9ea9a7099aed2a", + "parentHash": "0x35e31088a1515e1ba6609d0950a16e8f35cde03fa07f46e18e4b86e2cca4edc2", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x4a805ac2d1c6c3f45e4aa754b3c3f9d92a0c4f02b5b5a6d735ace7041b26081f", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xedbb5222d2e224a4b461c61b0f3f39a4cb6079bd8ee8c281a81423ebe476efd1", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1d3", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x123e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xbf9df0134a7722c090ee27e9061af8e32ba1f36de3561cf540aa19c1e0301694", - "transactions": [], - "withdrawals": [ - { - "index": "0x29", - "validatorIndex": "0x5", - "address": "0x4a0f1452281bcec5bd90c3dce6162a5995bfe9df", - "amount": "0x64" - } + "blockHash": "0x61ba03ccc0e0cf9cd98cdcba500e40e8129eb3eb85920d1fef44a05588d49c3c", + "transactions": [ + "0xf8688201e208825208944a0f1452281bcec5bd90c3dce6162a5995bfe9df01808718e5bb3abd10a0a0f088cde85f447d17aa52c469fc2470136b6b700db905c72ad47966bfa4d6e425a002d5e45688e4a4832e334e370d496967e653a59b8fcf820ed78b3416e5932333" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -14785,23 +14835,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xbf9df0134a7722c090ee27e9061af8e32ba1f36de3561cf540aa19c1e0301694", + "parentHash": "0x61ba03ccc0e0cf9cd98cdcba500e40e8129eb3eb85920d1fef44a05588d49c3c", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xad4453dbba65e66c8793ae1a41e1c1c430f00c1bbe8a6e30663cfa1b13d6ebdf", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x70aed96d46f82f4f5e9f14bc337e9f9f3b1c252dafc675c12683d547273c4b25", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1d4", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x1248", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x3426b1051fd2963cf74c091c9281236fec075e3b1a6207e0ea8bd590d234231f", - "transactions": [ - "0xf8838201ab088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa07f301798a3e8eac769613ffe0c2b89d2a35a386254117a17cadd0ec7ac71d7ffa048e580964d38c0fc0468c0f2a82331e1afe0565d47329be39f2dcb58e7c26583" + "blockHash": "0x851f39c5ce5f4801b082523faa0cc03f2ff3568a0c243f620e5c339ea39da2b2", + "transactions": [], + "withdrawals": [ + { + "index": "0x29", + "validatorIndex": "0x5", + "address": "0xeda8645ba6948855e3b3cd596bbb07596d59c603", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -14816,21 +14871,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x3426b1051fd2963cf74c091c9281236fec075e3b1a6207e0ea8bd590d234231f", + "parentHash": "0x851f39c5ce5f4801b082523faa0cc03f2ff3568a0c243f620e5c339ea39da2b2", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xd6604a1a483323a25dbb76b0d43c9c7e328e4182688d2b5a588d37665e2b24fb", - "receiptsRoot": "0x13d0652e24c37c769d347b120265923055f96ae713b9d77ff70edac07e2b97ab", - "logsBloom": "0x0000000400000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000020022000000000000100000000100000000800000000000000000100000020200000010000000000080200000000000000001000000000000c000100000000000000040000200000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000004004002000000000000000000000000000000000020000000000000000000000000800000000000040000000004000000080000000000000000000000000000000100000008200000040000", + "stateRoot": "0xa6330e611d1b54d2f4635073f1a7a17356ab1cc0df2b99100bfd1b457df73898", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1d5", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x1252", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x108535b032c23c831ea3f0e5e60b628b1653a8d4ff2a04f84ea0c28a5f7a334c", + "blockHash": "0x448656736cc3a9a8e8ab0c5e548319b14a51b40e45f5de7eddaf25ca390c3530", "transactions": [ - "0xf87a8201ac0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa089e20aa467ccbe356f76641d9d5cd4fed171b7c95fa49a16980f2fe2a009ea12a047599499ea6eaf56f04c07564a72c486750251dcebc77a37ae34c02b326b886c" + "0xf8838201e3088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a07f59e7ae860ba10d241156b78d6f76682d3067dab13a9d1d3523353b3ed88d5ca04e3b21dc0d748f7a542108f94dffe326dc5c99b2e834e2140dff9e6131cfe88f" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -14847,21 +14902,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x108535b032c23c831ea3f0e5e60b628b1653a8d4ff2a04f84ea0c28a5f7a334c", + "parentHash": "0x448656736cc3a9a8e8ab0c5e548319b14a51b40e45f5de7eddaf25ca390c3530", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xdc68060e9a8798d536f700d4e95e4a7d65072e218d15704879d6ae2697129ae1", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x91e358d29507ec8bfb636eca841fa13420f25f50274bf8de0eb3eebb1aa6d2db", + "receiptsRoot": "0x292095426e80ff11bd31daf84ac551227369f2579436815b4d1d608f57000653", + "logsBloom": "0x0000000000000100000000000c000000000000000000000000000000000000000000000000000000000000080000000000200000000000000000000000000000000000000000000800000000000004000100000000000000008000000000040080000000200000000800000001000000000000000020000000800800000000000000040000200000040100000000000000000000000000000000000080000800000000000000000000000000000000000000000080004000000000000000000000000000000000000000000000000001000000000008010000000000000020000000080000000800000000020000000000000010000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1d6", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x125c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xc57d09bf4689a42694a8b98bb6ef2cb60c0af0446b6dbd1f55fb9d19743d0b6f", + "blockHash": "0x525d5448d96a5a36b6bd87c4599662f32304d64eeea5f5c07897724a91a4d8a9", "transactions": [ - "0xf8658201ad088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0402b2c34f4929951c4ac6235d801ea3ac81b76f9fcd89a7ff457d5e7623d7940a031a80cf58f13a978fd87ef8f856a4d194ee9ff56144c8c1070b5f75771c04314" + "0xf87a8201e40883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0938be590b7b3723bf5586bd0eaefb2f94d0ff43a17ceb6081c061848426477a1a07b1ad333de362621715df1cf0fb344a008b8199415e58b6f698ef4f6531a5c8c" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -14878,21 +14933,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xc57d09bf4689a42694a8b98bb6ef2cb60c0af0446b6dbd1f55fb9d19743d0b6f", + "parentHash": "0x525d5448d96a5a36b6bd87c4599662f32304d64eeea5f5c07897724a91a4d8a9", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x7f50235f00afa9a49c4ab915fbae8a3967ce90aa5e1b98ef4c2d3549adf74ebe", - "receiptsRoot": "0x52c0a49dc885b9730273efa05b99464faa0b07a33714b5f0c1f2ecff60c052cc", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000004000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000", + "stateRoot": "0xd403d08c7d8c0f028874fb847965d5ef3a214d68c07efc2b9533fbd5db668020", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1d7", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x1266", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x62ec7b9a65be76bed69c2d1b89c7338fd99f11c52ce57d223d0978ad2623b666", + "blockHash": "0x3e17e4473b4356e9cf755ce3275618fd3e3d4b82d193bdf6a57a2ecc4ddef386", "transactions": [ - "0x02f8d4870c72dd9d5e883e8201ae0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c575c87bc04e9291a656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0c8bbb420578d2d80897ca392a55fce5e4834f1d641472c0fd6a9698b7a8e786601a05fc12f7471072f1ea6a98b7cd2f0c7f07f0e1cbb78f71c04f4be678636daae25a01bf0a3c0b5161dffb0fe80025e912d42c79d7370819f162f598c312790ea27e2" + "0xf8658201e5088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a04485367c62ef9ca1969823b20d6ce8fe64a021da6b1871961bd374297ecf21cea01fc5a7cdb0893792b24dde71ddd73f8111539365bc989162a0e267658817719a" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -14909,21 +14964,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x62ec7b9a65be76bed69c2d1b89c7338fd99f11c52ce57d223d0978ad2623b666", + "parentHash": "0x3e17e4473b4356e9cf755ce3275618fd3e3d4b82d193bdf6a57a2ecc4ddef386", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xfb7c33ebafcb6cbfa3b0aa70a6cfc12de4fac7274242a2c970b9fdad17f74bb6", - "receiptsRoot": "0x99009295049bbc6668b80a4398a19de7347c72fa2aeeaf7e11906e87c57a06e6", + "stateRoot": "0x170c8cc5d0247d0d135009b21a0ae603f0c42e999359739fbccf16937a5bfe75", + "receiptsRoot": "0xc0fb8b64d307424a0d5a9e490ad7d74da1794516d7ec328ba2cdec4291ad9ad6", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000800000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1d8", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x1270", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x88fc2bd51129c6a76a5fc4d74e5bca399695ea9b272f65febb655c211ffecccf", + "blockHash": "0x7e688056a77a5d6803174648e4a6d2e982a0e02677ae38261c21c6390e90a659", "transactions": [ - "0x01f8d3870c72dd9d5e883e8201af08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cbf2de05a5f3c3298656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0ca27d6fc8e6016df20a295f26b57b2f6ac7a8cec98224571f416ea88c0ee7b9701a0e6226076cfd8bf43fca38277ffd730aa478ace3525224344c3624d3dfb198151a05a4909aa856a16e38a9daca59a24444b99977e4a10aa825abba4890817466af9" + "0x02f8d4870c72dd9d5e883e8201e60108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cbf2de05a5f3c3298656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0ca27d6fc8e6016df20a295f26b57b2f6ac7a8cec98224571f416ea88c0ee7b9701a0779b08a58ec2d864e553ad8c02e52783cd8dc92c3f182b0fd1a8c1687c226b5fa019fc8caadbc0e69431cf04307ecc13220fb5e531540a48c4b3be40b523210dee" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -14940,29 +14995,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x88fc2bd51129c6a76a5fc4d74e5bca399695ea9b272f65febb655c211ffecccf", + "parentHash": "0x7e688056a77a5d6803174648e4a6d2e982a0e02677ae38261c21c6390e90a659", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x8d7f1216133c42f768e27b8aea317b208bc85bd0dd7df779a73f848f4004aa67", - "receiptsRoot": "0x3790f8072f001910a81933cec43d8df45f92389bbec3f61d73660404da6590cd", + "stateRoot": "0x4cdee9ef273af6c95159af584b45cc77f2a085839708c8f7618e697a645a821c", + "receiptsRoot": "0x564111f73c7c842eb0bd76f41ca63bb0d2442cde7376c4f994becd72b9b29d2c", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000400000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1d9", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x127a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x4a6fe7d7a0b3433c8c0017a34efcd408751e24ee224d865746e43ee5dbc6b72f", + "blockHash": "0xe2f9a4e56ef10377498499f58bc152015a2db11f8b485232541dfde10f04591f", "transactions": [ - "0x03f8fa870c72dd9d5e883e8201b00108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038ca9a00d7fed08a726656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0506c0723b5e537632209d4a824a6073d5eccadb36b9b8717b2ecc9e2d5cacda283020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a05ca17d0e9f7fcc7e49fa76b0028de5cb6788be576198194960ff4672e6a309a9a04df6d7a4e2a05d0d9917c68215bbe868461ffc8d3c3816930cf2a92da2ce7dc2" + "0x01f8d3870c72dd9d5e883e8201e708830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028ca9a00d7fed08a726656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0506c0723b5e537632209d4a824a6073d5eccadb36b9b8717b2ecc9e2d5cacda201a01f265a3f554c74f8c8d093a6129bfee22d49da316557402ff5ca22a12b764909a00c8e2a3a41ea947f37a8094c476783fb030af2309a725c35aa7ae852483687af" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0xb9b10d869f9b60ca46c5484073a0bb44fe92a031955f3555ed291fe0ffd8328a", [] ] @@ -14973,27 +15026,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x4a6fe7d7a0b3433c8c0017a34efcd408751e24ee224d865746e43ee5dbc6b72f", + "parentHash": "0xe2f9a4e56ef10377498499f58bc152015a2db11f8b485232541dfde10f04591f", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x2f0f3af3ff59064bcba740401a4b8159ee53e9603974f178483083cf618e4d9e", - "receiptsRoot": "0xbb95ad607d48a3ca500b5faef910c56816051b61786acf3e0ba108ec22807fca", + "stateRoot": "0xc074a3a13d58d82b0af6ce7002f6cc820dd9e670c0f3f4d60d7d0175c0927a32", + "receiptsRoot": "0x5787dd7b4a17e226d55eb1a2ec75e4741dea9adf4a6e0a82395532f4ef505b4c", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000008000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1da", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x1284", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xb4d421616ea7a4adc51abdc1eb68ae4517c83a7e65545ad5bd8570fea865bbe4", + "blockHash": "0x33287f7e4ff32b8a0e6c65d03e04ea27978409381ab031fb8b26d5fe4e14fb3c", "transactions": [ - "0xf8758201b108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cc69de6f1cebe0728656d69748718e5bb3abd10a0a0a49c19f71e8331b897802ff1ac62f66cb63247f31993d6fc3776696f4b17c729a05bba34c418b3147244fa9d4fccd8890d222c7f44190d9017ca38c7f6bced2095" + "0x03f8fa870c72dd9d5e883e8201e80108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038cc69de6f1cebe0728656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0231eb803c34ec183e74b466c105b5518b554ce215bbc31bfa52c384138b8479a83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a015131907b52a5121e8eb89d0aa72b94f20a9b9a58d68a9232396d384b13889e6a0489dd64af98876d13d25bfe420e0a64e30e6f199cde9ef8ab78520806b3b37be" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0xba29f52ef7aa5b2c71b61919ff7890c9c8d37234ba7fde07a58301b90296e3b2", [] ] @@ -15004,21 +15059,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xb4d421616ea7a4adc51abdc1eb68ae4517c83a7e65545ad5bd8570fea865bbe4", + "parentHash": "0x33287f7e4ff32b8a0e6c65d03e04ea27978409381ab031fb8b26d5fe4e14fb3c", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xb88eb1c1760f6a7a8ba8daffb098eb4560ceafe894dd33354ef3026cdb00a7ae", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xc00f3501b3014c75b63bef51a9f76ffebf460119a95937151d6614d9a3549a77", + "receiptsRoot": "0xeb483474067eef838278e418e2b7e436f757856a7684c74ff8666af3aaa2b49e", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000010000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1db", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x128e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x35ca0c82bbc6c2a282e04efd935ad91744a76f738b1a05f543f362089b077549", + "blockHash": "0xf6073bc7c2255ed4e3365fe8668f9529aa2327e566eea8485e105fe80d0afa5b", "transactions": [ - "0x02f86b870c72dd9d5e883e8201b201088252089484e75c28348fb86acea1a93a39426d7d60f4cc460180c001a0af05a64f1aca07aedd20d06dd8e6e3c4ceefcde58d487bcfd54bdfaab1c7d274a00302f428e3a63afcfe2be921c12e6ee23e607e08e7ff6ce15d6af2a407f77686" + "0xf8758201e908830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c4748f0d7de9cec6d656d69748718e5bb3abd10a0a0c7d4ce8366b2f235acc4271275e5389f2043a7492ff26d3cc2f3900cd5d37d20a041cdc65056832a4515d6e9a0db3be2677692f1e6286b5d7bf731d0c8f94a46c0" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -15035,21 +15090,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x35ca0c82bbc6c2a282e04efd935ad91744a76f738b1a05f543f362089b077549", + "parentHash": "0xf6073bc7c2255ed4e3365fe8668f9529aa2327e566eea8485e105fe80d0afa5b", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x7665d8970349ea14cbebfdda189a477293e19ca82343a488ff177f4d7440a0d7", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0xd91d71d1575ddebaf88f0fee029716eb85e5f9fe35aeeb44bb084dde2ee839c9", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1dc", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x1298", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xa2e71dde107bc1f02f8f2303e84580a4061adb821347fd065dea806464488543", + "blockHash": "0xf8819d443db1143c7f37606b9cd6003db500b36f8059e0a1b42587b4b7f532fa", "transactions": [ - "0x01f86a870c72dd9d5e883e8201b308825208942d389075be5be9f2246ad654ce152cf05990b2090180c080a017ce16ee9af5b82c7f29ab98a1bac8aa25420afd16954fb36221582db90ab964a0367033c2da81dabfaddc542ffea3d7e7acf0e75567de6ae4a6170985887bfe82" + "0x02f86b870c72dd9d5e883e8201ea0108825208942d389075be5be9f2246ad654ce152cf05990b2090180c001a01da39a69e12e28d7ca88d666e8e7aa7980698823e17b649e3375e7ca781113d6a062b5fe98fa598535f33aad705871cab848540282aef3a455517cf51e259733d0" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -15066,21 +15121,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xa2e71dde107bc1f02f8f2303e84580a4061adb821347fd065dea806464488543", + "parentHash": "0xf8819d443db1143c7f37606b9cd6003db500b36f8059e0a1b42587b4b7f532fa", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xc79190bbbaa9d1892a4030dfad5eba2b9e0475d43bca555735ed542fda15f2cd", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x3c51b97b8ace9390727db6917acd8adb3ab62007c674dfb0b8bed30cb3f6e8dd", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1dd", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x12a2", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x8c2efd84e25c29636ce86228e1fa39045936581562d1d80d1273951d3a7e5b5b", + "blockHash": "0xe1dbbc3e7db42e01ee269badbb49ab349b05938d0fe3840f97a9cd6c51384a26", "transactions": [ - "0xf8688201b4088252089483c7e323d189f18725ac510004fdc2941f8c4a7801808718e5bb3abd109fa0d1a8bb93f8b00fd581da6c59f4b2fe8164085b721ceea7768a8ffe0622ebc0d9a04085917721c3989a38169b02489a0a47161f7197e1254c9795a85e505272e6f4" + "0x01f86a870c72dd9d5e883e8201eb088252089483c7e323d189f18725ac510004fdc2941f8c4a780180c080a072485996da69cfd4e9f408f5fdc5f6288d563b6f4d33e7bda3b4ea7a3e01aeb6a07c48e1d88e7888cd8c7c49e0955a8af513c63c72234c36b702a814c31577777c" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -15097,28 +15152,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x8c2efd84e25c29636ce86228e1fa39045936581562d1d80d1273951d3a7e5b5b", + "parentHash": "0xe1dbbc3e7db42e01ee269badbb49ab349b05938d0fe3840f97a9cd6c51384a26", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x67e66504545bc74878b8ab06179caf460f30c6d642352ee54b67ec5d2602eed8", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x1ae307592d0be62d296a59ae574a4c27eb86be7c143fa3dbedf9543543b25f74", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1de", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x12ac", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xae195bb8f9a28f440a0a10bbf872db2c50aae4f08d49089e3b8783187b8b2d5b", - "transactions": [], - "withdrawals": [ - { - "index": "0x2a", - "validatorIndex": "0x5", - "address": "0x4340ee1b812acb40a1eb561c019c327b243b92df", - "amount": "0x64" - } + "blockHash": "0x92e9256953269935a75a21cb3a31b1797564c37a20a104d622c188d6bbbdcf89", + "transactions": [ + "0xf8688201ec08825208944340ee1b812acb40a1eb561c019c327b243b92df01808718e5bb3abd109fa04b03ab3260de9c9db8e6a7d5c33eb45368d0dc3562f761441023416de5fb3b60a03b13926c431a56db5d297eef17e5bade7d889f7328c56e4612c59eec12f277d8" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -15133,23 +15183,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xae195bb8f9a28f440a0a10bbf872db2c50aae4f08d49089e3b8783187b8b2d5b", + "parentHash": "0x92e9256953269935a75a21cb3a31b1797564c37a20a104d622c188d6bbbdcf89", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x66547ac00f48e5f20225bde1cbeb6e6f863f04ab15824f641aa9e9ec9c072573", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0xc969cd9048b452774286e82c1c8a38efc9a1053af6e602b95532a11a51b85d0c", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1df", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x12b6", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xd74fba51d365cdfe355295a9a9cb7470ab1ddb53070cc23dc84706d30a1c9d65", - "transactions": [ - "0xf8838201b5088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a0f4bde21ce8013a82ddd78f70733543867415604c7f83e83e0d9983d1c2042f09a02fa838ccec26ff6ed33a6a253318f6b36fde84386ccff6828731b20a873f8947" + "blockHash": "0x0d4b4ba377d471804631f61c131ff1829b09242afb36c667f66eb3a70677bec2", + "transactions": [], + "withdrawals": [ + { + "index": "0x2a", + "validatorIndex": "0x5", + "address": "0xe7d13f7aa2a838d24c59b40186a0aca1e21cffcc", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -15164,21 +15219,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xd74fba51d365cdfe355295a9a9cb7470ab1ddb53070cc23dc84706d30a1c9d65", + "parentHash": "0x0d4b4ba377d471804631f61c131ff1829b09242afb36c667f66eb3a70677bec2", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x51bfce1b3b28f09cfa61606b2238f6b463ed521abd10bc0dec419b0b9dcbb452", - "receiptsRoot": "0xf45df5f4db771d6e3e81e5adb7565f1c865fad3fd735887f7774795b5edac729", - "logsBloom": "0x00000000000000000000008000000400020000000000000000000000000000000000000400000000000000000200400000000000004000000000000000000000000000000000000000000000400000000400000000000000000000000000000001002000000000000000000020000000000002000000000000000000000000010004000000000000000000000000000800000000000000000002000000000000000004000000000000001040000000006000000000000000105000000000004800000000000000008000000000000002000001000000000000000000000200000000000000000000000000000001000000000000000000000000000080000000", + "stateRoot": "0x797dc51f8fa6b9029acb93b97263f84dffc9a7f2482c302172a3e5e55b81c7e5", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1e0", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x12c0", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x586bfb94de868a094829593278f0059423d4b3a4fa381118368e866ac9ad174d", + "blockHash": "0xa02fc5e98bc45d4a34dc34d16d71c95e6cdcac504157769ba0e41582d1c7c28e", "transactions": [ - "0xf87a8201b60883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0921567dd55a14824f6f5143836996b8922c81586b17d75347e0bc8a2b7a801bca0131f215ee5fc6ebd61c03573fbe0aca770913b85f5dfaee4a24eb6338dcedc97" + "0xf8838201ed088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa01fe54bfd95c8d7bf278cc8bdf65426bd4e6ab72015758f0b5f2478f29552b42ea0084cddd4e5630f43baebcf6407bb7d29c5adc14bd7edd4cda31812d963ad8e17" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -15195,21 +15250,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x586bfb94de868a094829593278f0059423d4b3a4fa381118368e866ac9ad174d", + "parentHash": "0xa02fc5e98bc45d4a34dc34d16d71c95e6cdcac504157769ba0e41582d1c7c28e", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xde2f8aa7fcd1b76f0f530a100c0a12756c25d5690ab1575e547bbbee2cb8f02f", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x2764c03f2a545c1ec2680ebd911dec206cc3a14d26cf1bcb768af950fa856b75", + "receiptsRoot": "0x03cd6eb6a3385fd00376333c1a05626d66c0921a7eba669300cf12ef2e377f98", + "logsBloom": "0x000008010000008000000800000000000000000000000100000000020000008000c0000000000000000000080000010000000000000000000000000000000000000010200000400000000000020000000000000010000000000000000000029000000000000000000000002000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000102000000000000000000000000000000000010000000000000001000000000201000000000000000000000000004000000000002000000000800000000000000000000000000000000000000000000800000000000000100000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1e1", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x12ca", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xed9fa0da61fcefb49df7807a0e827069520dd2e1b7823c23b6c8316f261a1526", + "blockHash": "0x313563af27e7adf66fd7f2842209e0e0c325506fcac7f6dd3abc361d9e03d498", "transactions": [ - "0xf8658201b7088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0aecf3049dc7efad3353bc715162e1b9dde150cdf5e73bedf97d46143b653b1caa059150a8228653539febb5d7fc110bc90267c4daa458447ee2a6cd74d6cf84abf" + "0xf87a8201ee0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0bbb63c32f8a2e23b9b4602f633aa36df1fbec569e655c3901dc8925f2a85cdc3a0281062cc40caf732aa3922eb6b66c423fdca4ba589a8cd2daa4e7e1fd74ec0dd" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -15226,21 +15281,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xed9fa0da61fcefb49df7807a0e827069520dd2e1b7823c23b6c8316f261a1526", + "parentHash": "0x313563af27e7adf66fd7f2842209e0e0c325506fcac7f6dd3abc361d9e03d498", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x15c9e6b89f4e66587fd549b5f8a4b383585a915cba6660d8b06fdfbbb52d69db", - "receiptsRoot": "0xce3f0a477c2a7c5cab029ccb48c1898c02bd2489da74880f776886d5cfe1ec85", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000008000000000000000000000000000", + "stateRoot": "0x54b4354c9b9d598973c271a3817acbc49f1f0b124bd12630660fa91b5982e381", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1e2", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x12d4", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x2d4f68ab5cb1b7d5942ed325911da4de560c281bc4165f12e79b40896faf9240", + "blockHash": "0x337fb18e572e14e967fa54af1ce06a81e52ac2a3baf227d55bcd08499dd4117c", "transactions": [ - "0x02f8d4870c72dd9d5e883e8201b80108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c03aca25852d251d4656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a03a970a6d07c991261dcb566f26d21a76c578d05d1565c47dbc1fc071934c8c4380a06cc1446084f31de8ff2d02d5bdde83a5e6590f378258dcc4c9c0f8333a6ee1eba0421801793f6f0a0741d1eb34af7fdfbeab593a6b79da2fb321759296c32dab96" + "0xf8658201ef088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a05e2d7258def4f606f3dbd00a8b07954b2904936c48e431ecfff630e2474bf6c5a038c4338ee8b04b290b101d71c63dee17a2cf1df63a77b49c2b2c6e3f09a21ec0" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -15257,21 +15312,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x2d4f68ab5cb1b7d5942ed325911da4de560c281bc4165f12e79b40896faf9240", + "parentHash": "0x337fb18e572e14e967fa54af1ce06a81e52ac2a3baf227d55bcd08499dd4117c", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x7418feb7a3b18f559a82312bdf476251e2015a73489fc0a24c054f2198e6e4e2", - "receiptsRoot": "0xb962be4ba02b6d4a9f438029040b74e9fef16c46e3afe1c644f163387ca2d7ae", + "stateRoot": "0x756692ec3ca2529fc666721eade8e28fc3bf2e6f748d915ae79e86fcafb63c4d", + "receiptsRoot": "0x011e1a201070905363e09002f3f9895b8f14774d3fc5202082b525f9e77a7d93", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000100000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000200000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1e3", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x12de", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x173ba1064b822d7fd886f79df09291855941c7e187348cb1be74b4f3853ac46a", + "blockHash": "0x497a904516fc0847ae8cadbe627a4c5999451d9c6fb9c407a20478c7f90c3820", "transactions": [ - "0x01f8d3870c72dd9d5e883e8201b908830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028ccd7535d68ec8cda3656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0d1a0570d06c0cc4198b4475cb892ec41ca3239ff670666bcd97faeb62c1db6bb80a034ff1d0664e9a113b7d67aaf8dac7887dc3cd46cda5b46f9be63942bb7ec7617a0762f090dd6f3994d24e026bbbf0309b9d1dad5a365d1ced9f43aa69942a5838c" + "0x02f8d4870c72dd9d5e883e8201f00108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028ccd7535d68ec8cda3656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0d1a0570d06c0cc4198b4475cb892ec41ca3239ff670666bcd97faeb62c1db6bb80a0f72ec2e95c10423e647163811ca72f731a3a12202ec71bd4d97bcfa6facb17e2a019dd72bbf2c4d19d317ae86a3da3a022a7b0e582924288a5e207f3b660747e46" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -15288,29 +15343,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x173ba1064b822d7fd886f79df09291855941c7e187348cb1be74b4f3853ac46a", + "parentHash": "0x497a904516fc0847ae8cadbe627a4c5999451d9c6fb9c407a20478c7f90c3820", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x6ecb1e3489f8078a29b87e0eb6d2fd6e945896714d99eddee74d85a4851c1cd9", - "receiptsRoot": "0x58311e701f652cdacdebe59e7b45f8b1b0ebff606fe210236709f712d6f9063d", + "stateRoot": "0xac9ecf7757f857d61ee4ca1211cc414554ce54263aefaf7a069abf879129cf57", + "receiptsRoot": "0x3028c4498f6278049cdf4797d1163e119d4fadda69e43af341e8b4d95c4b8505", "logsBloom": "0x00000000000000000200000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1e4", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca90", "timestamp": "0x12e8", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x5fe23349b74796ea88667c124d31b7f83d1ea6c55888612d0546fcd8781469f0", + "blockHash": "0x1683f93d623b43c0071b287a4f3bba01765e6a5fa591d80e140d2f709960d5a3", "transactions": [ - "0x03f8fa870c72dd9d5e883e8201ba0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c1877e1001127f07b656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a027edda711baed4a613c44d8ac8678531c9938eea106e7c5649e438f3d24b8fe383020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a067af6f0192162151e653097d20f7f403d55f09c1017f56c8b99b6b8d54cb57a7a0321c7a4916061de4a010df3a26b3e925d5780f2ae481dc180f845beedab7fe68" + "0x01f8d3870c72dd9d5e883e8201f108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c1877e1001127f07b656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a027edda711baed4a613c44d8ac8678531c9938eea106e7c5649e438f3d24b8fe380a047024ee93ab99dcc228fd1e485cca5f3010b5fe2b446aeede6c98bbcd6c9fee2a01fe50ac44ac57779c871c63ec2df5a6dfdad969fbb566eaf6c14ffb1d12d4018" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0x79b058ec1c5cbe0920b5952501060f137989ac99cce216800bd06649890c3be1", [] ] @@ -15321,27 +15374,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x5fe23349b74796ea88667c124d31b7f83d1ea6c55888612d0546fcd8781469f0", + "parentHash": "0x1683f93d623b43c0071b287a4f3bba01765e6a5fa591d80e140d2f709960d5a3", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x27390abd199fe04144543d27d967696f694d14f167df82a55dd83bc3c40878d9", - "receiptsRoot": "0x7739ee9e2c025b802aca02f952dd550a19f4b1f2f88320592f42157b192eb663", + "stateRoot": "0xad689dfd4bbf472268372f49c2ec1049241d6e80073f472b565c064649238da1", + "receiptsRoot": "0x61e976734fc5e2850c9a6bd14e910990a749febb3ffe4d73b78e2a4f5def1a09", "logsBloom": "0x00000100000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000009000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1e5", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x12f2", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x44b4ee4af4ea93cdc1f6d6a7600b78b1f18918e5adb36a95773fb69f0c95960b", + "blockHash": "0x47bb80c5043a6c8898d1006da95899d8814b8bdc8bc7f5df945418bc33d14616", "transactions": [ - "0xf8758201bb08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cba2beb3c8594f746656d69748718e5bb3abd10a0a0e661c2c68de66c165b67b63e4d3f2f38ea26a81665d63e8f74e6d11e81d3fc85a001ddd2c77206d9343887e41e90004a1cd663a3925c152df47d96a822781c744a" + "0x03f8fa870c72dd9d5e883e8201f20108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038cba2beb3c8594f746656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a017f29f600f5128013ce183ac10efc609231aff556df37c8f5d6802c1240c22f483020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a0e5de33d01e5b9d527ee677943307ee5be7b5a38c86979224b3b199211974195ca05ab07fd3d7a6b85d14bf1d13df1608e86738b172e39dd8cc6cd5af5ee77855ac" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0xf4c5320c831d84242a9194e38951a279654456e3eb90f3712c14fdac4d326723", [] ] @@ -15352,21 +15407,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x44b4ee4af4ea93cdc1f6d6a7600b78b1f18918e5adb36a95773fb69f0c95960b", + "parentHash": "0x47bb80c5043a6c8898d1006da95899d8814b8bdc8bc7f5df945418bc33d14616", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x50d5213b8e73149d638d379da242d321106af3f234c0c1bf2a77431c669537e0", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x15e32b70e8785a70e77417d4ef9504d4aaca3a6d12f79ae45546756d816b828b", + "receiptsRoot": "0x653ebe6c9fb5db0b5a624be66ec1ec7cd215019fe1795fc4981a469cbb373f32", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000004000000000000000000000000000000000000000000000000000000000000000008000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1e6", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x12fc", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x6e1a5f320d6c603aebe7b47c6f98bab7e6ca3f63648853117f90681ef82be343", + "blockHash": "0x2365c3df9f22079331e7519296bf2f4115bee3a8fa70a357a4fbd4e21476581e", "transactions": [ - "0x02f86b870c72dd9d5e883e8201bc0108825208942d389075be5be9f2246ad654ce152cf05990b2090180c080a04c6e4253cf03fcfd3b8c654c9d4c722cbf7599f527ddb8c29c4cb700928ab211a033779b52f70e001e25329224c6a3faee756bd10e3534b7ab6ad99a5652623c5f" + "0xf8758201f308830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c806201b9a3c840b8656d69748718e5bb3abd109fa07be0eb25643b24292dfde8273e2dfb6cd0147a45ada67c9d109d8d8523481f72a045c91bc91c4beec1a018c6c60f60580b03821b21fcc60973c76f927ef94bb132" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -15383,21 +15438,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x6e1a5f320d6c603aebe7b47c6f98bab7e6ca3f63648853117f90681ef82be343", + "parentHash": "0x2365c3df9f22079331e7519296bf2f4115bee3a8fa70a357a4fbd4e21476581e", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x17c5048dbe3b6539839d450f5c43586cf6048ff932a9699d67fb9f23551bc833", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0x1990743fabed219ac5547559b6d626d6be7c11914cfabde737f28ed3ebf5baff", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1e7", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x1306", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x0e0736ecbc21d8283a34e648718dfde99dcf213778a19cbb385a528281994d02", + "blockHash": "0x5d5980aceee17c98188ebf3255e3b3e26b8a5d38f9a4ed95a36cdc818661b619", "transactions": [ - "0x01f86a870c72dd9d5e883e8201bd08825208947435ed30a8b4aeb0877cef0c6e8cffe834eb865f0180c001a0b32fa00b190ac2b9eb4b3268aa9141cb78a8916b05f6c0a40f206ee664c8a719a012c6432eb6a03755afae2c6de4391acd53acb4d1883a8ace297e86ed36bfdedb" + "0x02f86b870c72dd9d5e883e8201f40108825208947435ed30a8b4aeb0877cef0c6e8cffe834eb865f0180c080a0777135addfe6098ee525763dd774f7721e88834d4fbfd8da87da3c62940b2026a040ce07ca2815f08f677b0cf89c53179ee3a7a2c11670f9591b3cdfa9e2a8c6b9" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -15414,21 +15469,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x0e0736ecbc21d8283a34e648718dfde99dcf213778a19cbb385a528281994d02", + "parentHash": "0x5d5980aceee17c98188ebf3255e3b3e26b8a5d38f9a4ed95a36cdc818661b619", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xc219431ca24a3d75c7de17bafe6d3d0929836c9e3671768301f2438d78d91ec7", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x49a0ed0a84fbfabaebeaf8a60822500b6822fb2d67efb25d48bee3f59ee24442", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1e8", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x1310", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x8d71815cf7e21c74cf91c9f2ff59fd941cbcf127084f929254498163c494f183", + "blockHash": "0xa848e5ed65c70444a6d1fe529127abea702ad12603be4c42be221994762e0c08", "transactions": [ - "0xf8688201be088252089484e75c28348fb86acea1a93a39426d7d60f4cc4601808718e5bb3abd10a0a0d5da0e78527ea2676cda16dbf0ca9fb8853ef3d655e4ec8b9b6767b495bb25e1a0631003e734b6121487daf284ca1039416efe86e21334eaffb8ff56c86afceeba" + "0x01f86a870c72dd9d5e883e8201f5088252089484e75c28348fb86acea1a93a39426d7d60f4cc460180c001a06995aa9dca71ef9b2d5badfc1bedfbc0f346a4612e6c76c183e097e37a3bfdbaa03b25ad942ef7828e93cedaa4f1a7042b189c901dd2ca868aa06cd4b09b7e77f6" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -15445,28 +15500,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x8d71815cf7e21c74cf91c9f2ff59fd941cbcf127084f929254498163c494f183", + "parentHash": "0xa848e5ed65c70444a6d1fe529127abea702ad12603be4c42be221994762e0c08", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x9e33a5b74ae3ae525bea4008b6dcf596742e4a6bfb70da6dac944a5bcd8fad08", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x66c3694db73f10f25c700132c14df95c8368216c69a7252cd50ea1178269ff2c", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1e9", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x131a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xbff2f568d9a26daaaedd8e26e46d3eecb122cfb8c091bc194d6326c88d058f1d", - "transactions": [], - "withdrawals": [ - { - "index": "0x2b", - "validatorIndex": "0x5", - "address": "0x83c7e323d189f18725ac510004fdc2941f8c4a78", - "amount": "0x64" - } + "blockHash": "0xe98fe8994405578378ed95c1d4b9a45d743c652214e50ac48bc8b36a42d2a4d0", + "transactions": [ + "0xf8688201f6088252089483c7e323d189f18725ac510004fdc2941f8c4a7801808718e5bb3abd10a0a044c3a773e583e21230ea57a7e6fbbd6f2dc0df7eb24010fce0a18fc48037eaeda062fa63e7d6f6949fb9c42ff8bf387ee4c184a6b06fbb8791b55ee7edbc126975" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -15481,23 +15531,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xbff2f568d9a26daaaedd8e26e46d3eecb122cfb8c091bc194d6326c88d058f1d", + "parentHash": "0xe98fe8994405578378ed95c1d4b9a45d743c652214e50ac48bc8b36a42d2a4d0", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x877e7f78c65e7e3685b7683704a0eb62a1c55b982bcc836455d2d3a9c12eeefd", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x63746c1e716d79e76bba04f87d2cc99ede11eee8082b90037841bbebabd1fefe", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1ea", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x1324", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x509d2a2521abc4c30ba8b397d9e86976e6134a844bea08ebeac4a4b009bfdd32", - "transactions": [ - "0xf8838201bf088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa0ab9145a13f1f6ee6429e1b007c4fd516dad28c5c8cde6f1d12abc7c715e4ef6ea0495d16fc67a9781f1de9758ea4bd665a7234f9ea5708dc90916ee927d85c2ee5" + "blockHash": "0x2a67633e64cfd77fe6ce3386742cde79338e1a34f5c7c904ea3eb8f64696d35f", + "transactions": [], + "withdrawals": [ + { + "index": "0x2b", + "validatorIndex": "0x5", + "address": "0xeda8645ba6948855e3b3cd596bbb07596d59c603", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -15512,21 +15567,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x509d2a2521abc4c30ba8b397d9e86976e6134a844bea08ebeac4a4b009bfdd32", + "parentHash": "0x2a67633e64cfd77fe6ce3386742cde79338e1a34f5c7c904ea3eb8f64696d35f", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xb3e38a9114049cd2a23f3ea7a946ee0dc2d5436e82e7407809abb4ee54727456", - "receiptsRoot": "0xdd42cfcddceb6322a92d9a307599a410f09f67d7a46c17fbd43a5ba7d862f8f4", - "logsBloom": "0x00000000000000000000000000000000001000000000000400000000000000040800400000000000000000000000010000000100080000004000000100000000000000000000000000000000000024000000000400000000000000000000000200000108000000080000000000000000040000000000000000000000000000000000000000000000000000000000000000000000001000000200200000000000000000000000000020008000000000000000000000000000000000000080000000400000000000000400000000040020000000002000000000000000000000000000000000000000000000006000000000000000000000000000000000020000", + "stateRoot": "0x4b1fd39d3c84f7de5b23c95d26b731554c7d7fbb8a4599476f2f57b48eae13e5", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1eb", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x132e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xc73fe82ce95274c1aca827b1e2bcbdc56663f172a9a808e02fb03b594afd5494", + "blockHash": "0x5d1662243b6c9f6dbf53fe2b79a220453b883e9c80bb06e31f2295e68918aecd", "transactions": [ - "0xf87a8201c00883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa06de4d59a4c5a3ad0afbe74ddf01646de5300055e3fb8c58de0c3aa607a407946a0469a4b7411a764a83be3c34664f12faf29c4c1808825f1b440aa502db5f3f402" + "0xf8838201f7088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a06265f4fe6fabae053312352231c46d971e6d55966e9ec1bdea76d56682c30374a06fbb15c78daf63f5a7fa00678e8fd8b9df8b949b773f0091b04ab05d593d8927" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -15543,21 +15598,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xc73fe82ce95274c1aca827b1e2bcbdc56663f172a9a808e02fb03b594afd5494", + "parentHash": "0x5d1662243b6c9f6dbf53fe2b79a220453b883e9c80bb06e31f2295e68918aecd", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xd2d759f0c7df5bee393757eb8d19a2f338e5fc379c375645a6c72088364b5d09", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xdde8adf28a35e206ec2c8e0278d521ac46804e44d6b34cea7b264e2c93905117", + "receiptsRoot": "0x42633a48d7c517b6986b13a13ddf51bebfb0c2da6c2b809ed79e88f8b6a57e3f", + "logsBloom": "0x00000000000030000000000080000000000000000000000000000100000000000000000000100000001010000000000000000000000400000000000000000000000000000000000004100000000000000004000000800000000000000000000000000000000000000000000200000000000000008000000000000840000000000000001000000000000000000000000000008000050000000000000000000000000000040000000000100000000000000000000002080100004000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000005000004000100000000000002000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1ec", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x1338", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x8e940db2d4e9688d0eac137008f26832b205e32c67877475cc0348c38be128ab", + "blockHash": "0xeafb3303dba8dc7f4b41bb7b37f3c93e95c8eabd33c392d88dfd0582aa88dc05", "transactions": [ - "0xf8658201c1088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0a815113aa8040972264e983cb3903de2084ffe5b6557ef6a2717111dca7693dea07fb1c0149302c30af0a272c7b2463730984775bad879350692b7f60aab3f24d4" + "0xf87a8201f80883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a00a5beccc3e6ccaed4bfbe069c8b3ec28887eb8779cbd8d24aa80bad7db8d2ac0a07f0837873e5a2df96b5fa4f053a038a382aba9e1f6cf7d4b8fcc6e6e519f47f6" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -15574,21 +15629,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x8e940db2d4e9688d0eac137008f26832b205e32c67877475cc0348c38be128ab", + "parentHash": "0xeafb3303dba8dc7f4b41bb7b37f3c93e95c8eabd33c392d88dfd0582aa88dc05", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xaee5de9b102d4af57cb0ab48df984fa280d8189a0808f7f4c595050b40b221af", - "receiptsRoot": "0xa2b618c505ef3395f557921dfeac32a668e58693fa54e4c0b0412235a373fe65", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000008800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002010000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x1b94679eb1ac049ae1685672462af0024f4bea3fe24a7f4ed983c6cbac4ac1c2", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1ed", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x1342", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xc4686ab32da32550e9cc95adc86e731d96b3498f28c3454972b8647922a8c775", + "blockHash": "0x8658952c14dcc2b8f15ed4f1f4e861e033bcdbe4b0b17671dd7984b29d1a8ba3", "transactions": [ - "0x02f8d4870c72dd9d5e883e8201c20108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cbdbdb63ec06dbc4d656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a051524a498a88953303410a83d67c2b8c69ddafeb99b570accaaed774fbc8583e01a02d00dcf0c9f72c9480f3a2f32d53f2d1bd9cc9c7e57c939faabf531d74b5d592a022f86ce2737fe4d613c5c85cec6dc7bf30499d75a43e8af7f8929ab623bad2b2" + "0xf8658201f9088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0aab80d2f2a4c8bc95e431a1cfccf592ca0aa7a04dcfb04e7e4d7a857b6bc05dba046a818232a3d66ef623aa85756752da22b70d25b901d6a51ea00eeb3df940038" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -15605,21 +15660,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xc4686ab32da32550e9cc95adc86e731d96b3498f28c3454972b8647922a8c775", + "parentHash": "0x8658952c14dcc2b8f15ed4f1f4e861e033bcdbe4b0b17671dd7984b29d1a8ba3", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xd02c8177f7c4cf3ab2b848531bcca041fc894e2d86df57796d3323527d5b481d", - "receiptsRoot": "0xb59464b3db3775db16d568e667b0b003728a26c5ef1b495b5a851f8701bb1bbc", + "stateRoot": "0x51568df621da44c017bee6679e8829703398115672f0a1904ecb0525c15c8bb3", + "receiptsRoot": "0xceb21df14a345f6ffaa4003b6a05ad0fc8b9f37fff443b452e11cb95b2cc3c90", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000010000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1ee", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x134c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x2acc9875f08bf7c9185aea7dcce6c1163b303e620de25993fb494a866f831b9a", + "blockHash": "0x9a4b8616c2ab2fd6d1d94a86a6e4a5ebe988708def10c935772e47bdaefe5b0c", "transactions": [ - "0x01f8d3870c72dd9d5e883e8201c308830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028caf8e348bf4f0a699656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0a6602e59691514abf1ee46e71c1f4c7411eddb76e687f8f4aaa1ebf305b97f6c80a077b4fbc6b2b04c54b28551086048b86633d30baddcac9cfb815f60f60d5f52c6a0307d634630eecf0ea9ed75b079936760730effb7113d0fe8cead79b67c7ce759" + "0x02f8d4870c72dd9d5e883e8201fa0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028caf8e348bf4f0a699656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0a6602e59691514abf1ee46e71c1f4c7411eddb76e687f8f4aaa1ebf305b97f6c01a04d9e82bcdb1d5195d2c75a9d5ed8c74bea34ce034ea4b867463f76fe897c9acfa03a356eed52c14df6b863950c89b4087d98291e72993290b671b01fff013cd5eb" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -15636,29 +15691,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x2acc9875f08bf7c9185aea7dcce6c1163b303e620de25993fb494a866f831b9a", + "parentHash": "0x9a4b8616c2ab2fd6d1d94a86a6e4a5ebe988708def10c935772e47bdaefe5b0c", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xa7b6f6132a35d132c8373b83275fdb1899f009f55697d912a487d1e73dac389b", - "receiptsRoot": "0x69272db254a554362866187ba8d083482ba41778b8b26368260a30cd99da7f0f", + "stateRoot": "0x141f77f9eb7139cdc31274634d663688361d71b55e095a8909dc145e25a8a789", + "receiptsRoot": "0x86b3621195987df290f2e0187032ec98536358f92657dc5d97a75981f552999f", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000080000000040004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1ef", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x1356", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xe5e2de3cd1a2a8f6551e93be0ab3644c84c9653cae77d63caa4a10f5b805ffd4", + "blockHash": "0x1987f5210117e3866820238e7be09c5b972ff01bc9d3062259ac73abc9fb5d1b", "transactions": [ - "0x03f8fa870c72dd9d5e883e8201c40108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038cbfc7b909ffb8a701656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0bae4f13d358194452066fc1305964decaafbc9c56a2fd16936d25d9521a57a1983020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a01e19794d92c3e106531229523c5651f09eebad9b1ab8af16b4f574986cddf370a04e514870232ca6580c57baaea9f826b732ccc92bea5f776f60cb6a6667a92f1f" + "0x01f8d3870c72dd9d5e883e8201fb08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cbfc7b909ffb8a701656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0bae4f13d358194452066fc1305964decaafbc9c56a2fd16936d25d9521a57a1901a0211fce01407f71e35b8267bdad0ebd5391dbf851bf33683953a9af52d2f94259a018e11c9d49d9344f5b96e664aff381844801869400c3dafe0ad896e645402764" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0x9f7e031c508d86e139947f5b167bce022363da48a40dc260d10b7056ac51cf31", [] ] @@ -15669,27 +15722,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xe5e2de3cd1a2a8f6551e93be0ab3644c84c9653cae77d63caa4a10f5b805ffd4", + "parentHash": "0x1987f5210117e3866820238e7be09c5b972ff01bc9d3062259ac73abc9fb5d1b", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x0ce171ab00e064bd363971bdfb9342cd0d45256cd988fa0bd05197d3d027418a", - "receiptsRoot": "0x331c72dc5228abe1d292e038f6ac92d48b45608a0bb99b821a629112eaa757e2", + "stateRoot": "0x5338ae6528c1e13e7970622a637f1d74d94595e136e791364e3a7f75fff9c2d9", + "receiptsRoot": "0xe9d41dd663d82d4e26983666a122a7b7e2a347cd4b5873329f7d7f2d7ed0287d", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800200000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1f0", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x1360", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x6413cdb135c067bf7c9894bc05cbef70350d5d2bcd089f661257b80a28d71a26", + "blockHash": "0xded42d295832ce8251701cc7582d068b37adcf17bf96e9728f49c7ee7dd93c7a", "transactions": [ - "0xf8758201c508830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c6cbb5e7a4b55690b656d69748718e5bb3abd10a0a0693fb616abfdf9147a81ba213e94679ff3efdcbc80075a645b33eef4673cd6f4a0696a52ef0e40d7dc5540b69f994bd6a38449159100cde3fbdba155fc26ac297c" + "0x03f8fa870c72dd9d5e883e8201fc0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c6cbb5e7a4b55690b656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a08405cb4703a08e5160e343c37d42df5f045091f6b22664b0ec3f587df18d2d8283020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a04daf1481394f8ce2ba160b6d1cc3d26cc17bac218d8d73c24bffa94c81be5ebea005faf6eba70ae5d5e002c780638b380ac6b084fd1ad76bfa82f83c300b609a05" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0xae2de0af5de73a96ed6b567a73e6a11b603d6cd010885f5c0311faafa922f2cf", [] ] @@ -15700,21 +15755,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x6413cdb135c067bf7c9894bc05cbef70350d5d2bcd089f661257b80a28d71a26", + "parentHash": "0xded42d295832ce8251701cc7582d068b37adcf17bf96e9728f49c7ee7dd93c7a", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x7a70c9dfdacb14eddf9099658ab558b18bee5226ac70462bfd133bb44e08244f", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xa3e6560274c15daa2e0a04e384dfe1d6c95cc8b38ac80869cc94b5a604d2cda8", + "receiptsRoot": "0x483ea5eb66c23a317dbd69d496892e22bdc4475156c7797ed76aafd02d8bfcd8", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000400000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000040002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1f1", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x136a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xe800f779e224dcc43b5c7bb57da2d643e20dbdb53e1cd60e41207b620a040b5c", + "blockHash": "0xb9244e48395116c8a53aabace93900c569c53b973a9e3687002cd218d807f608", "transactions": [ - "0x02f86b870c72dd9d5e883e8201c601088252089416c57edf7fa9d9525378b0b81bf8a3ced0620c1c0180c001a0b14191fe5a86ab1c2eefb3e545ed407a50427c4ab05e43b533fa630b54822b00a05269dabe1ed832d6827d152774e95ab4962dac9c030381d89f8dc5419c955fd3" + "0xf8758201fd08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c19deac0d9d02f92f656d69748718e5bb3abd10a0a0253d7d68f600f2d8bf9d53020fe772e78cbaa5717e162acc8df591a2066bd201a0291572bc54c1fef91bd3cb7ad4dd0a09dafe919392d1df28a9a0fcdea6ec5078" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -15731,21 +15786,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xe800f779e224dcc43b5c7bb57da2d643e20dbdb53e1cd60e41207b620a040b5c", + "parentHash": "0xb9244e48395116c8a53aabace93900c569c53b973a9e3687002cd218d807f608", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xd5389d4e7c476363d1aa9bc8c47483bdf71f3993ec983fabb617dd69454ab4d2", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0x8cd708e3014abc0f67e0b7de8c77215d14ca6ec2e0bf5569c274ebccefa11cdd", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1f2", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x1374", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xe3bd2dc0e6af6253299c175f22a860b34d75ee109faa0c7dc437c94c8e35643f", + "blockHash": "0xca9205d2f444fffd9a22b3f45c1ae061924fe6b5d885079b4f215fd6da081c89", "transactions": [ - "0x01f86a870c72dd9d5e883e8201c708825208940c2c51a0990aee1d73c1228de1586883415575080180c080a01251136e3ff24d4eddd91f954ca0024980b54ff7f34d9b0254e4af434c121087a047c647dc9ffa9dc78c540c1847bcb598e573d498b6e218ccad749a138bffffa4" + "0x02f86b870c72dd9d5e883e8201fe0108825208940c2c51a0990aee1d73c1228de1586883415575080180c080a04175b4893216d653bd35be0e04a3a9392927c00bd7b2620519ba862b83365272a00bdd994d4fb2691ccdaa459935f42bc09e596067aa1e70b75c6c6d5a0fac6c5b" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -15762,21 +15817,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xe3bd2dc0e6af6253299c175f22a860b34d75ee109faa0c7dc437c94c8e35643f", + "parentHash": "0xca9205d2f444fffd9a22b3f45c1ae061924fe6b5d885079b4f215fd6da081c89", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x96d35284d3c35cc0f1109ee9387ed55f921c875c60d0ebe1086295c55898a214", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0xb9a63c728fd4d69a046f9472a178d78e399dde099a9a88220d16516a36a68a30", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1f3", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x137e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x44924c88d1ebadca339c20badf7e5e22ce7ec673cfcb7305d46487417a852cde", + "blockHash": "0xd6d29225f2af2f42a875f8e69837b6abac59f79c06b12476351cf46b1f721268", "transactions": [ - "0xf8688201c808825208945f552da00dfb4d3749d9e62dcee3c918855a86a001808718e5bb3abd109fa06a85e590feffd58fc2903caa04a04bcd5c3f5824b42db665d2190652de42a998a060c02bb53efc5d6c73b2f019d8258cd71c1bed7bf3226ca1b3c6f5e4f19f26f2" + "0x01f86a870c72dd9d5e883e8201ff08825208945f552da00dfb4d3749d9e62dcee3c918855a86a00180c001a03c2c9118bf1c36271b931bb65ac95e8331a6dd380c0d394a5da03c8b2fc45254a04d95a9c6f65ab0486f6859104819b6d4b8db39a16c4333ea8b42ec1b7d529c86" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -15793,28 +15848,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x44924c88d1ebadca339c20badf7e5e22ce7ec673cfcb7305d46487417a852cde", + "parentHash": "0xd6d29225f2af2f42a875f8e69837b6abac59f79c06b12476351cf46b1f721268", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x955e191119551f055a9e6f3e11d07af09851acf643d64a5d0c1f129b894a1609", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x39badf70c7bd52bd12b4380af723bf4fafea00801a564ee0a8f16f21f5af537b", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1f4", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x1388", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x7151d7993c13af657fb9afbcad9340ddb46fac82b873b64baf85f8f5780151df", - "transactions": [], - "withdrawals": [ - { - "index": "0x2c", - "validatorIndex": "0x5", - "address": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "amount": "0x64" - } + "blockHash": "0xa006e393879b70cf602f0122a886d8167c8708f8e7feef6de52675f650f07b2e", + "transactions": [ + "0xf86882020008825208947435ed30a8b4aeb0877cef0c6e8cffe834eb865f01808718e5bb3abd109fa014a28150001e45fd1e5c8aeac21968d48528fd2ad3cbebe0fc3e81856c72bceca056aa4cd1c773b160dd5324012b004c009f03a75f89d965417ec73244172ccbbb" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -15829,23 +15879,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x7151d7993c13af657fb9afbcad9340ddb46fac82b873b64baf85f8f5780151df", + "parentHash": "0xa006e393879b70cf602f0122a886d8167c8708f8e7feef6de52675f650f07b2e", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x96e8ab6546be093aedbe2325151a1cf208e1bc9e5469883ef677a00cdc310520", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0xc1247f5789fadbd0acd8635083ea35818c1ac48f492726ff3c578a0281dc0c07", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1f5", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x1392", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xeb6625cb0981451d810c0172e25819ca3b6fc2035ea04542f3dee1dce7c516df", - "transactions": [ - "0xf8838201c9088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa09f242f7711b79cdfb5a72c58154bde5cdb442725057daf94dbae85dc50d69feea022df1168ec1f2265cd4caa1a6e79f68efa4ebf524029e655b27d6e9b58428399" + "blockHash": "0x8698a5e929f6712d07c38692354fc0cd108829576fcf507d8249375bb4d34e60", + "transactions": [], + "withdrawals": [ + { + "index": "0x2c", + "validatorIndex": "0x5", + "address": "0x84e75c28348fb86acea1a93a39426d7d60f4cc46", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -15860,21 +15915,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xeb6625cb0981451d810c0172e25819ca3b6fc2035ea04542f3dee1dce7c516df", + "parentHash": "0x8698a5e929f6712d07c38692354fc0cd108829576fcf507d8249375bb4d34e60", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xf0bc8cdc892895d0382a37436fbae7a42d95b0b86fc6b6e09d53546a0207dfac", - "receiptsRoot": "0x8f1810576b4069894550fda7f0bd820eb92d3b664107d4cafb0fa4f94dc2c5f6", - "logsBloom": "0x00000000000000000000000000200000000800000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000080000002000000000000080000800000000400000080000000000000000102020000000000040000002000000000000000000400000000000000000000000000000000200000800000040000000000000000000000000000000000000000000200100000000000000000010000000000000000000000000000000000000000400000082000000000020000000000000020000000000000000000000024000000000000002000000000000000000000800001000008000000000000080", + "stateRoot": "0xdaf3b9859e5c20e495cc76741c4f5dece17f47b52452c636d8b877c5dcbbfbed", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1f6", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x139c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xefab54ac6e96aa6fc5d3270f7a928f03ab557ce9b7d2ed68f08825ca50c6307f", + "blockHash": "0x1e95d4fa85ff39313eed8480ff6f794da6cbdf6c865c33aa2c514fb097c6817d", "transactions": [ - "0xf87a8201ca0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa039c9ec5087989e0ccbd6bcd6d6d98f4088fb0106d55f845c3270d8341d641229a02360f0209d0f71281c3ea6422573e4a818aecaf0d549e29993b48bac4b2df08f" + "0xf883820201088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a09923b9daa48437491a665744b9cd0ce294d3bc24ba845bd801454be70946bcfea0165f575ce7c9a8eeaf1de39f15d8114e9e7a6b84d9442b8ce2b05d24febe40c5" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -15891,21 +15946,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xefab54ac6e96aa6fc5d3270f7a928f03ab557ce9b7d2ed68f08825ca50c6307f", + "parentHash": "0x1e95d4fa85ff39313eed8480ff6f794da6cbdf6c865c33aa2c514fb097c6817d", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x28edc0ed8c0f0ea206e56a325c0d472b6270596e9254797cb248638b7a9fec42", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x47e13343df17d5b67ba4915c2263b79374d5797850dfb49b6076fd1973f57dc5", + "receiptsRoot": "0x2cfadbb06ed7cdff5d419ab398e471d5e12cc56d6a968b771ef85410ab3c4b66", + "logsBloom": "0x00000000000000000000000000000000000020000000020040000000000000000000000000000000000000000000000000000000000000000400000000000000000000000010002000000001000080000800000000000008000000000000002000000000000800000000088000200000080000000000200000000000000000000000080000000000008000000000000000000000004000000000000000080000000000000000000000000000000000080000001000000000000000001004000000000000000000000000000000000000000000000000000080020000042000000000000000200000000000001000000000000000000000400000000000004000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1f7", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x13a6", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xf0591fc75f0711d3d9234011205cb9bd2c40a3477994d943e6d7a12c72e8d613", + "blockHash": "0x52eb082eb7be273f4d5280bbef49733796215c09a7c71ca1b20fcf9ec180affe", "transactions": [ - "0xf8658201cb088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0d1923c8d37e8ccf7655dc86d425eed22c0463724e8fad35e7b08f509ede8e6c8a04f2f8a02f1d8dc629c0cc259e537e28f4522a3116298c1b24c7be64f9131712f" + "0xf87a8202020883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0ce3ad1aeb48a11c8ce83ee5925d5412ad4604ee96fc344ff8d25ad5613bdb0daa03c1cce897babc59372b111e74bd265a7dae4e8287764ee7f461af0721810f961" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -15922,21 +15977,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xf0591fc75f0711d3d9234011205cb9bd2c40a3477994d943e6d7a12c72e8d613", + "parentHash": "0x52eb082eb7be273f4d5280bbef49733796215c09a7c71ca1b20fcf9ec180affe", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x3d7616976d4d75fc2791c04abab12aac2c78ff3b23f040c0d5dfc1d392d9407b", - "receiptsRoot": "0xea5be4c117d6e881a0a1fec4529a98caab71dd5d707a0876a1621aab324b7505", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000008002000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000009000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x223becc9e964d120cd1dac22c4ba32b31456b78b718d255c012365116dd68df4", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1f8", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x13b0", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xdf54b762c56706ef7861a0725b7fd4f01aaadcac614d3d3f39569cb8e621fd1a", + "blockHash": "0xd671e7ebad6a5828dbcc7932d67618bba676951ddc013cd528bf9b41a99f50b7", "transactions": [ - "0x02f8d4870c72dd9d5e883e8201cc0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028ccd2e3086ddc2ace4656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a096c0d209b0a5b8b06947cc4c7ca723df55c5b972711b6c08ec7b9c393fa6e8ea80a07fe69218a844aee02158afa85fcbff97e407b786542649788f12ca2fee4d1860a020e258ab41db1a20c0c56271edf7f26e16649cc18853668e1c49837a63993a4a" + "0xf865820203088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a077496f47c2c10b741cbb7f4a2a1c3fa843407d1ff64d8a1ca25bd3cfaf9b5ba6a00873c225525b82c71d00833b83812205e694a9e66d4d3027cda8b432aff5d37a" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -15953,21 +16008,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xdf54b762c56706ef7861a0725b7fd4f01aaadcac614d3d3f39569cb8e621fd1a", + "parentHash": "0xd671e7ebad6a5828dbcc7932d67618bba676951ddc013cd528bf9b41a99f50b7", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xe7f32766b9aacad31862ca17d8c92188805f7979821e77fbb6061ec9b320b613", - "receiptsRoot": "0x1f914c56592f749fd28f2caa300a6799e1c32c2e45a73828c28a84759e9f2a96", + "stateRoot": "0x27784726627f6a6eaa7c04f9eff52dbe92076a4e45e166d44ecb318cb019f92c", + "receiptsRoot": "0x0fa45692791b30d727b254ac4bde2e0c789a86df9789054ad5d617e2a5686439", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000104000000000000200000000000000000000000000002008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1f9", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x13ba", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x4effa3cb8383f0ece82c3391e95ce6a88be26f87bddcc62dfd99cd7a5a11dbfe", + "blockHash": "0x1c10e60513c164ab7482d2c33062cbc0f8191dc03f48a211fb9ba5cc9687646e", "transactions": [ - "0x01f8d3870c72dd9d5e883e8201cd08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cba96783a3c242e12656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a00a5a37a1db2e0068ee9791dbe377a74c4f7bc36bc27af57ca7e49059127e8eb080a0062b5a038fc99ab6efd44780c98ae6cd61f31cf04c26fd39c7b3bec8ac03c134a07c9f218dcd1403f4f06eeedacfdc6cd59568e55b48b6f87358b80cd9cd50d4d3" + "0x02f8d4870c72dd9d5e883e8202040108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cba96783a3c242e12656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a00a5a37a1db2e0068ee9791dbe377a74c4f7bc36bc27af57ca7e49059127e8eb080a0f21908b759628502248071901716b3e84277824718bedb0ba1ab22c611038307a058abe19656820d15ca1350c4d776193017041f731e71ee8885edbc7fc5a6b782" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -15984,29 +16039,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x4effa3cb8383f0ece82c3391e95ce6a88be26f87bddcc62dfd99cd7a5a11dbfe", + "parentHash": "0x1c10e60513c164ab7482d2c33062cbc0f8191dc03f48a211fb9ba5cc9687646e", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x0807efd5f3ab55636012ada7ec38da71e53884084e30f6a897d7b05a5c5fc7c3", - "receiptsRoot": "0x7d42d51cb89c85398dffa2c7bf080ceec75a6b26afdccd37a22d621f438e7bfb", + "stateRoot": "0xd080cbbec39adeafaba8b5b7a3cc932f2aa9448c5e51d2810128bc93afdcd8f1", + "receiptsRoot": "0x56163a3eed26e00e586f2678efc072a984feda04f1afd75bc134da6c9554fb62", "logsBloom": "0x00000000000000000000000000000000000000000001000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000009001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1fa", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x13c4", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x2d903ece7c308b988d585304235cb0f3bacbafb64ec0b62da27c1f77aeb18d76", + "blockHash": "0x3a66ebe86f285009227283701e0bd5d1ef913636a7a1331799de1c1faa5e4c29", "transactions": [ - "0x03f8fa870c72dd9d5e883e8201ce0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038cc1493cb1f9cdc80f656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0989e02934facff928d8e788f174ab7d48838c62b07d420a8527cb7eaabdbe91b83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a0168d3c7a04bcc073bb45ffa0b8fd35031efcdc8e9cfb08579208573d2acc3142a02af9d8933f7d5abf54870b26a17a465ffaeff4df77230346f9044e11dea6978b" + "0x01f8d3870c72dd9d5e883e82020508830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cc1493cb1f9cdc80f656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0989e02934facff928d8e788f174ab7d48838c62b07d420a8527cb7eaabdbe91b80a04007c1c4f6f6fc1c60b2d8dafa0d6a0d52d5ddf181b0bbfe369a92b133a35773a073a10d1f377d99aeee46b608507f6b2a52933f4c520d32a2c43dd362ff3e4f17" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0x38a90f286b0a1fe34e7d3b9ff797c39789970041d2818e5adc11b91e0579537c", [] ] @@ -16017,27 +16070,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x2d903ece7c308b988d585304235cb0f3bacbafb64ec0b62da27c1f77aeb18d76", + "parentHash": "0x3a66ebe86f285009227283701e0bd5d1ef913636a7a1331799de1c1faa5e4c29", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xf75bf5befb9b72b7c11ca0f64b9cdb20ff4390f70955370f2cff744bedfaafaf", - "receiptsRoot": "0x19dc9bb39d5f6f19a6d2a4521d0630d23599b30a077d025fc8f7bc7bf57c719b", + "stateRoot": "0xfff28addd1b7fa8c13f670f43ee8aecf5fd4e8aea884117a513422e644e5b687", + "receiptsRoot": "0xc6a015ae06bab1f1d18ac5b6e54324d2b92aa4b0c32cb2529c66468a8d154fc9", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1fb", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x13ce", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x005a1cd86c8a2bb05874d5fd341035e7228067175a1c757b91f442dc34922a1b", + "blockHash": "0x062f4d4d65aba3e78d382b9f46e4d5542195003f96b51b865458dcc1f826bef4", "transactions": [ - "0xf8758201cf08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c4d992d778a781294656d69748718e5bb3abd10a0a0b6df52cd6d5c870905e39a359ac9ce37ac8d151c60eae85736fe3c0e21d8d489a07655a80dc2c45e6713f4d40840a5cb8b3de31b4bc7592e238a41d75d3a4b9544" + "0x03f8fa870c72dd9d5e883e8202060108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c4d992d778a781294656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0e865c3418b47b88e94c28956b326a799298fb44c62a7a6bb55fd991f7c0442ca83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a0ed85242a312a75755e1bc8248d6b19e7cc43a61f86453fe3f6e5f54b361a7336a02e7e7870938cc996edaef7553435f345932ead2769411bb771f8dcd0f940ff2a" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0xc19bcd1a95bf2edb1eaa8cf59fb23d053422845e57f4a41a2832500d1f415f5a", [] ] @@ -16048,21 +16103,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x005a1cd86c8a2bb05874d5fd341035e7228067175a1c757b91f442dc34922a1b", + "parentHash": "0x062f4d4d65aba3e78d382b9f46e4d5542195003f96b51b865458dcc1f826bef4", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x7ba3acfe7f78ab817ecc275982440c85e8ceefa241edf02fb5bda27d40715afc", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x28b12ecfc2cc82d9d1f91fc9f8c8eaf83039177a1c6bb969f957fd2aa14a2a51", + "receiptsRoot": "0x62b1a196f913cc42183a51458d294e07675ebadf511c3d4a05da2e591ac137dc", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000200000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000008000000000000000200000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1fc", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x13d8", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x9e7ffa6ebba334b9810de0937096a05f054a43eb03621ca8874411e5ddaf7543", + "blockHash": "0x41870d7fcfb0ba5dd5425e3a3302b3e93025132d1a2776a249a88c572fb6be05", "transactions": [ - "0x02f86b870c72dd9d5e883e8201d00108825208940c2c51a0990aee1d73c1228de1586883415575080180c080a09b2154776de3ec96562664c4cefd5a0e42c48789d13b04c1ee7fc45c9d695fa7a067389d062cc02c3a9500d08b206f4f8bc0363aa685b8b9a8a5ef4a81eb82d4d9" + "0xf87582020708830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cf82c55c40f1ff9a2656d69748718e5bb3abd109fa0d38c5217a65679581f1f3dc5b08806638d23232ad739fed58056327a46151846a05ce9944be58bb04737796bbdd217c8649ca8e154b545e08f7fc383a67ef4ac22" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -16079,21 +16134,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x9e7ffa6ebba334b9810de0937096a05f054a43eb03621ca8874411e5ddaf7543", + "parentHash": "0x41870d7fcfb0ba5dd5425e3a3302b3e93025132d1a2776a249a88c572fb6be05", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x87e1f05da062baba064a0625b957dd18d2afce4914e5a57971dd4c08b789aa98", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0xac3b461b766b9c6094c55862cced1cf04309a8059ebdf92ed0460f2c24618b79", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1fd", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x13e2", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x68b50078b3394b06d6ee3a3b12462a38eb85286023c07d90e290ba808b5da702", + "blockHash": "0x7c13316eda73749098cf4575409649054e1835f58d626491b4a4b95f2a8a0564", "transactions": [ - "0x01f86a870c72dd9d5e883e8201d108825208947435ed30a8b4aeb0877cef0c6e8cffe834eb865f0180c080a0214ea359664d05afcaa80e32b3381041386921a2fc2959dab6b640751fb38ddea07d738ad38513b5651ba8bfc08cb21557223086eba81ccdb9f19cd934f59134a6" + "0x02f86b870c72dd9d5e883e8202080108825208947435ed30a8b4aeb0877cef0c6e8cffe834eb865f0180c001a037494e00581b8418c83e72d08293e639690b050b0978070b8479021d3931d298a067014bfc84b271a6596c0aff08cafca2f0ba275c2f67671364b7ab72a43f25a7" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -16110,21 +16165,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x68b50078b3394b06d6ee3a3b12462a38eb85286023c07d90e290ba808b5da702", + "parentHash": "0x7c13316eda73749098cf4575409649054e1835f58d626491b4a4b95f2a8a0564", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x633881f7142b2012e0c6bad7bc4c51e40679d0c01c8c19ba3aa1608c96c69eaf", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0xaed39ace72d41eb2e4eb2770635e8249e9c6c4dd278a6c31c4681079395ede37", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1fe", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x13ec", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xbae08b3b1ac544135b3a06fbaafb931229a99d0e47434318580146086ce0dab3", + "blockHash": "0x5fe375eb49f8ae346cfc274905e352f9d90b8e27a9557c111a4da925da1ec952", "transactions": [ - "0xf8688201d208825208941f5bde34b4afc686f136c7a3cb6ec376f735775901808718e5bb3abd10a0a0e917c71f21dfb1b319d11f2bca6800be74fad51f8e6f728460a9ac8bbe27827ea029942083348d7b4b32fe2c081b415970337e60e99675ba18590101fd3e5de0d9" + "0x01f86a870c72dd9d5e883e82020908825208941f5bde34b4afc686f136c7a3cb6ec376f73577590180c080a0fa223e2885966d1ca3ceecec6f277bd350ee2f59e9ae82d53fd88898ec680c49a0538f2f37378b8cd670d70e8b36ae9ad172e94305ba98d641e722c8fbf1712759" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -16141,28 +16196,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xbae08b3b1ac544135b3a06fbaafb931229a99d0e47434318580146086ce0dab3", + "parentHash": "0x5fe375eb49f8ae346cfc274905e352f9d90b8e27a9557c111a4da925da1ec952", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x1b77c1aeefa6f0f0c54074c34f4036d6131bbd246208612b75f6b370a32dd2d9", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x8baf3ffb404de68289de0f11633ae838022c5b3ac5bab2cd3ac3c795e34f7d87", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x1ff", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x13f6", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x91711182ab4cdd63dfaac9e02b07f4d49016fe1ac744ff90843bd1f52f893761", - "transactions": [], - "withdrawals": [ - { - "index": "0x2d", - "validatorIndex": "0x5", - "address": "0x717f8aa2b982bee0e29f573d31df288663e1ce16", - "amount": "0x64" - } + "blockHash": "0xb2e74edc8a1efbf6260ee1bab5e093a479e2f7e5cd4b857567c0f375363e9620", + "transactions": [ + "0xf86882020a0882520894717f8aa2b982bee0e29f573d31df288663e1ce1601808718e5bb3abd10a0a02cfe24f61eb9ca2f74317c6223b681e61697200e548fc4b8cc1b7f4350542eaba040ba7a29dd832f75d2dd4416b98bda4470f633e72bf8bcccd52c3d767bdbec09" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -16177,23 +16227,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x91711182ab4cdd63dfaac9e02b07f4d49016fe1ac744ff90843bd1f52f893761", + "parentHash": "0xb2e74edc8a1efbf6260ee1bab5e093a479e2f7e5cd4b857567c0f375363e9620", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xe7d3338604fdbbe66dc8f1bb3bd9b8d66ef7f1659671827316f61b261799b4a5", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0xc8185aa95f2877e6faf46f6677254001b6b49c793a272a024d5a656fb4fef25f", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x200", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x1400", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xfc6438ea7c3138aca8cf840a05aa7e627ecea40cec8d6166406f98449ba6182f", - "transactions": [ - "0xf8838201d3088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a06c77e9d2b020f89b08ac3b941ced9fa71750062c2023d25ffae22a3b62c7ee96a074e9fc4218a4af7745759a2cc801d188b8c126cb0851c0d521774e4f6eee728f" + "blockHash": "0x66e753584038f784cd85643a76dbb590005f0704537ac697c648abe7cff660cb", + "transactions": [], + "withdrawals": [ + { + "index": "0x2d", + "validatorIndex": "0x5", + "address": "0xd803681e487e6ac18053afc5a6cd813c86ec3e4d", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -16208,21 +16263,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xfc6438ea7c3138aca8cf840a05aa7e627ecea40cec8d6166406f98449ba6182f", + "parentHash": "0x66e753584038f784cd85643a76dbb590005f0704537ac697c648abe7cff660cb", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xce3babe7367acf2a20f05e38f7ef7ab85e308db3405803f7e9d83b2312d9bf70", - "receiptsRoot": "0xe764d433a3fcdf26dd0789611144e14219aec816ff6b5d755df8cef4a4e23783", - "logsBloom": "0x20000000000000000040000000000000001000000000002000000000000000000000000000004040000000000800000000000060000000000000000004000000000000000000000000000000000400000000000000004000000000000000000000000000000200000000000000008000010000000000000000000000000000000008000000000000000000000000000000000002100080200000000000000000000000000040001000000000000000000000000000000000000000000008040000000020000000000000000000000000000000100100000200001008000000000000000000000000000000000000000040000000000000000000080000200000", + "stateRoot": "0xd5e8265bcaff3797a87a90c25aed521b31e6a692f1c97c44fa7f789b515ea1f8", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x201", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x140a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xd7d6cfbe9f350fc0643592dbd7a2a98639f92b0183cee49ef6f5d99aba72b47a", + "blockHash": "0xf4d20bce9d8457ff1dd755e1dfbbb89c7bd0ad0a4cbbd507a20a66a75ad9223a", "transactions": [ - "0xf87a8201d40883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0ec40fb21e72abbf085d2b8cb926a287b4e68de48301c538a60be1d31156b50fca07c6315ac48acc96969968e60e283fd046e31c32811865d5d3302389bca84e589" + "0xf88382020b088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa02d1a66d116fb0a777bea6eb147dc41708a0bfd06e8512b1d1d3c78ce9f0f4dc1a03076348c6bb81346bc655312f2e478a19d42ffde18ac9946c59edcc283939a6d" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -16239,21 +16294,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xd7d6cfbe9f350fc0643592dbd7a2a98639f92b0183cee49ef6f5d99aba72b47a", + "parentHash": "0xf4d20bce9d8457ff1dd755e1dfbbb89c7bd0ad0a4cbbd507a20a66a75ad9223a", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xa176a68ba3c1ecb49e1fd1acc1ed5b300b0cefb6c520e6d88155b92dc2d8d621", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x2a3bd842a1a1d8cd178073262255c1ea79d7f6632ef5968ed70ed1eba1c4dd82", + "receiptsRoot": "0xd48e8e5d94ee6d26c4943db2f03d6a24e765d768a78aeb663b7e269221b08db7", + "logsBloom": "0x00000000000000000000000000000000000140004000000400000000000001000000000000001000009800000000000000000000000000000000001000000000000200000000000000010600000000010008800008000800000000000000001040000040000000000000000000000000000000000000000000000000000000000000001000800000000000010000000000000000000000000000008000000000000000000004000000000000000000100000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000100000000000000000000000020000000000020000000000000000800000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x202", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x1414", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xe42d2c63e650101bc54d149c19d67b78ec05431cfc15134146790f1da71548b2", + "blockHash": "0x8ccbef8f2661bcf3123cd1d94c22200a4ae5f196f22cc0a75a24a2eb88b18acd", "transactions": [ - "0xf8658201d5088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa07fa54a77142f2ca3c948e34cdf94db1d9ea75232b08ddba064f58d7d1b4081d8a06f6b19500cdfe707a22f0febdc08d281ef27b87b2522194e5a02745c61698839" + "0xf87a82020c0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a007a2f5b051d9a1041a91a371c1cbc41650761498f137e6eb6e36612176de65d4a07611eb038c947ea2b85933da24eb375ac1fa9edeedd695638c206defa8c67d7f" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -16270,21 +16325,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xe42d2c63e650101bc54d149c19d67b78ec05431cfc15134146790f1da71548b2", + "parentHash": "0x8ccbef8f2661bcf3123cd1d94c22200a4ae5f196f22cc0a75a24a2eb88b18acd", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xff3d8349337fdd2205778b8a03c55b0313cf6a59c855ab9d98f7b9716194773c", - "receiptsRoot": "0x246cbacfcb463724b93536f5433ff6394ba997b12924adeb1ee57f771700bacd", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000020000000000000000000000000000000000000000000", + "stateRoot": "0xa9cefeaea24bd9d0c3aa07342a5f53092b8b1144869aa81090e1e6d95e0b1d06", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x203", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x141e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x718c2451b8df916754650ca5d9a3fca98e0f9209d41cdafd30d3ee9343b12216", + "blockHash": "0xbf528a0231aa3fc212ff82fbc410ffd8e8e2191e9af0a3fbc6b5c246cb7ac8aa", "transactions": [ - "0x02f8d4870c72dd9d5e883e8201d60108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cd04c9c422abfc528656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a039410f5a8f450e0b7fe63aa93e214a7c5cbe78786c815ebc926f1e8a2a14f4bb80a07951a771241a4c9da56ec3d101b386c01aaaa5993f05cc6d824a1c99bb7bcb8ba07a9576937beaedc82156293b534c1e2624d7dcb41d2c7ac5d587340d0458fca4" + "0xf86582020d088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a070534015db87e0db8903f2cbc9d465d1c6c44e431d2e3490852888903f9b8096a029db6e5b30f48e7e3229cd47b4e8a76191eb8705548fe163cf2fafaeb6220d6e" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -16301,21 +16356,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x718c2451b8df916754650ca5d9a3fca98e0f9209d41cdafd30d3ee9343b12216", + "parentHash": "0xbf528a0231aa3fc212ff82fbc410ffd8e8e2191e9af0a3fbc6b5c246cb7ac8aa", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x298da922dad8f43ce69c938556232f0eed7f747036e3961ebb5476616577f79a", - "receiptsRoot": "0xbd98f2dc2a79fd7f904ca89c03703911ce6a2f9ae74bbc57857af94b74244656", + "stateRoot": "0x80aecb6dbe2c7a75962e4d89ce833f85f3af8e70f537287cda1168f8e23de9e0", + "receiptsRoot": "0x078019fe2cc83afe1b116e5dbee7fceb7fbdeaada494157bffc7bef8a2e3b5c2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000100000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000010000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x204", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x1428", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x64f5dc426951c8d5c389bed1af605f9101235dbfaa4822f2ba83bbe9973be25b", + "blockHash": "0x03938f3ef2d6d88872a92445d63c6617c2ad1c6729900a8263f19ec9d03d5106", "transactions": [ - "0x01f8d3870c72dd9d5e883e8201d708830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cff6bcf94f901ef8f656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0b50dcc47e811f76cc69369cb397936a5c70520a51f33b84f1b54591da145e82380a0fa698bdc90fd08a9f3f1ab954bfe1236b8534f57fe8fb4f5ddd6885e9bca938ca06e75008087626148ebaa8c850497b8511af50ca8a5dd45524cfaec940b29aa5f" + "0x02f8d4870c72dd9d5e883e82020e0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cff6bcf94f901ef8f656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0b50dcc47e811f76cc69369cb397936a5c70520a51f33b84f1b54591da145e82301a0954945afebc39cb2f1f0a6504e5606a4db83e50f4ea6fdaaeae212a30f54919fa0095095c34217ff20ae8d68a0a117249ee30fedf2b8bf4c0fc8a9a87699c93cc9" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -16332,29 +16387,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x64f5dc426951c8d5c389bed1af605f9101235dbfaa4822f2ba83bbe9973be25b", + "parentHash": "0x03938f3ef2d6d88872a92445d63c6617c2ad1c6729900a8263f19ec9d03d5106", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xba26112fc1c8049c8f452bfc2c8f32fb9a675a345e25b5ee216d461df7db6203", - "receiptsRoot": "0xc927ac9f5187e2207bffcd8b6530ddee8970370c321c33c3942a120de068d618", + "stateRoot": "0x30356bd77ddf676a5b105b904496f703c42f4be1ee4e1f1dba2707e4d2bb1e87", + "receiptsRoot": "0x6c1ba699b63b83808505871fe095ee486063a79c874aee1b239cbe441298869f", "logsBloom": "0x00000001000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x205", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x1432", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x1841a4c413f59d37b93421bc6d165288e0546f1261e25357feae9c96a66402e3", + "blockHash": "0x76b268f5c2c12013dabdac36f0d7a87aeabf6d0b9c66afe989de308e9d8cb0ea", "transactions": [ - "0x03f8fa870c72dd9d5e883e8201d80108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038cf79d15aecc7ad11f656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0e891146f52235abb9f53919fc0e41a678d5a8a807a2247177d67539a2bcc3d1a83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a0541fee253cfa9457ab460ad9b861e6d894b303ac93e8dbb0d9222e9d2f025859a00eb8085ea838b18113febf57834095a4606646d9694b290e133d9acc7a523491" + "0x01f8d3870c72dd9d5e883e82020f08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cf79d15aecc7ad11f656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0e891146f52235abb9f53919fc0e41a678d5a8a807a2247177d67539a2bcc3d1a01a0a449b48d32bfb71a61dad3295c6857ad88ccc3e4c3954c52bdc93ae4f4f282b4a061f1cf53321cb02f0ac4067101d21989a51f7213089735ff85668ffd5653e20c" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0x5f4be0643a56b90ece82db7ff08963e8d9796840afd11d6a1d0d39b4498fa26e", [] ] @@ -16365,27 +16418,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x1841a4c413f59d37b93421bc6d165288e0546f1261e25357feae9c96a66402e3", + "parentHash": "0x76b268f5c2c12013dabdac36f0d7a87aeabf6d0b9c66afe989de308e9d8cb0ea", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x7d4ddda2b28be342f1458924b4f860e59a0cc00953b848d7686827dde5f3d514", - "receiptsRoot": "0x5a656d8918863a21cc2ce891040bb31b0ef68b4f6fe333b63dbc9eed8d97ef1a", + "stateRoot": "0xc5d2728bde5d000988fce58ac8a8d6b12bbc29fee6e60fb5c013ee53332bc02b", + "receiptsRoot": "0x0f724fed44b731282bd5b6bd8e2afc72aaf68431ae987ed7f446f6a457d3508d", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000002000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x206", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x143c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x289f40c44da44e6d545900ecfab81d0d86b9756e74d6bfa2fb0095cf28a93cdd", + "blockHash": "0x9025f8fd00f67b94a9b19712e0ff275ddddf0638f35bcd818639f440daf3d392", "transactions": [ - "0xf8758201d908830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c777feac9ca0bfcc3656d69748718e5bb3abd109fa01a2065ee360d4a5bc46515858e6464c6529ee55ba3c714fa94b8a90bed4dc6f4a0425c529b6e0b928072abdf1f6b0fbc3f329bc68d80ea1f9a88e89fb672049174" + "0x03f8fa870c72dd9d5e883e8202100108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c777feac9ca0bfcc3656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0ec200bf1cc6a2c5d58960dc3476cc4794ba1a9fca2ac3d09b63e7811b7299c3d83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a01c781f7fd731cd5eddd7aa29ec280813a90464401110f8dc56d109bd85b01f35a024d6dfa68f4658f54bdd52385ef635e2e8463e56b8cb91065585d14729bc3b22" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0x15b308f32252d593d6f48353f3217f10c391d03cff6eb9742f3bccbe6d1d6145", [] ] @@ -16396,21 +16451,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x289f40c44da44e6d545900ecfab81d0d86b9756e74d6bfa2fb0095cf28a93cdd", + "parentHash": "0x9025f8fd00f67b94a9b19712e0ff275ddddf0638f35bcd818639f440daf3d392", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x21cc4bf891fa35781985475468fe6e4973891cee2be5ce2a40512413e21c911c", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xcf4b63f32e658014e45a0e3f2016ac8b8ce99828d31100654db894e3b07a1722", + "receiptsRoot": "0xcfe99c24117ebf9a03d23bc0dae58444e2d52cb95e80e4429d02e38881c6b2c3", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000004000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x207", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x1446", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xb80db8759f920638458bd60e8f97e9a0773970c30941cf2744f4db475b5c53a8", + "blockHash": "0x6d6253031c30b55f6529d6543f837195d883ed16bd214ae6b065668651295a7a", "transactions": [ - "0x02f86b870c72dd9d5e883e8201da010882520894c7b99a164efd027a93f147376cc7da7c67c6bbe00180c080a0bd058792f7ad1149ac662402304d2f4aa1b9fc78836dd7332185356a4059b763a062a11cbb48aa986174da2d746dad05ae5b4c0292f9782adf3cdd65324ff7f7e5" + "0xf87582021108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cc6f4832da197a358656d69748718e5bb3abd109fa0aabfccd924bf15abd9fdc4aaf99c9ea89b8c0b52c3949ec070eb4b05b5aeaecaa0159ef7ad8519aab9cb77e51f407fd99b95fe9e28b678cd5f62be4cf4844f1674" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -16427,21 +16482,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xb80db8759f920638458bd60e8f97e9a0773970c30941cf2744f4db475b5c53a8", + "parentHash": "0x6d6253031c30b55f6529d6543f837195d883ed16bd214ae6b065668651295a7a", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xdbabffdcf20b39b47375cb2813dc7b5ef1386fd2fedc073f4a39269326eb42b9", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0xd70315b88320ba6df67cec0d83140174c0729e61b0e3651f1aa928e050866982", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x208", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x1450", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x4280ca715e955153245aa296395bd7f179a13606f4e909119b1d58b7b0457e34", + "blockHash": "0x3d381099b916c9111f0a6ef929f91814a584f390a9032879d7e41c6eed3f4870", "transactions": [ - "0x01f86a870c72dd9d5e883e8201db088252089414e46043e63d0e3cdcf2530519f4cfaf35058cb20180c001a0a3445dea2e057243a7cade92be94c8a047ef1d7e225e0903c7cc1d284d54837da02c5353c9bcd1e1bda954dedda00d7a487916882e4924ebee445a577cdc37073e" + "0x02f86b870c72dd9d5e883e82021201088252089414e46043e63d0e3cdcf2530519f4cfaf35058cb20180c001a0ba8bd8b5385767687d7077ee8611cd17ab3d8d5c11c833a600060b9e16dc6dc0a0670a8a4b83b407418808abdb824f1659c116cb2b8cb0b88992afd1a494108731" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -16458,21 +16513,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x4280ca715e955153245aa296395bd7f179a13606f4e909119b1d58b7b0457e34", + "parentHash": "0x3d381099b916c9111f0a6ef929f91814a584f390a9032879d7e41c6eed3f4870", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xaf7ca220478eaaa309220cdf2b29be6989118676c4bb3605ff4e06d3f52cebce", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x2d3763013786aeb5174bbd5da31e61b80c259a65693381e3effefd0546c3099c", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x209", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x145a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x56c95098c7c859b8b786bc2f776f739ba109a1d662beb8545294938b9ce5ef4f", + "blockHash": "0x915d521f633b9e30bbb9abc8024728d9f1c69a3f06fe8f490c82143ea04d2e52", "transactions": [ - "0xf8688201dc0882520894717f8aa2b982bee0e29f573d31df288663e1ce1601808718e5bb3abd10a0a0fa276d4cb8eca10e037988083dc9ccc88d525b2e0103bbe0595a1cf7ae6cdc17a0430d478df942ce08d2cbff40008fa68efee94bbbf2d02a9b8b406b580a215ecb" + "0x01f86a870c72dd9d5e883e8202130882520894717f8aa2b982bee0e29f573d31df288663e1ce160180c080a00d216b3a8f229ef2ce66b38ee57655db833353f59ad7ffed532ac584b9b5f5a9a04f929c3fd6020f1d5fb70bcc02bcf5dd8387b927cb1cf87e83ee3842d113d895" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -16489,28 +16544,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x56c95098c7c859b8b786bc2f776f739ba109a1d662beb8545294938b9ce5ef4f", + "parentHash": "0x915d521f633b9e30bbb9abc8024728d9f1c69a3f06fe8f490c82143ea04d2e52", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x27370273d3893ce3bbbbeb8bce070f64c2ad3ddbf21b5b91ae05af0ca5a51a80", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x97e710f46d4a4060e4d9dbaef0a028ee439812a6b45072ada40e7ef8149d4ae9", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x20a", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x1464", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xed614b855d979afefa3c40027ca4b6fff89a1467173e85302b48a478bfa7abad", - "transactions": [], - "withdrawals": [ - { - "index": "0x2e", - "validatorIndex": "0x5", - "address": "0x0c2c51a0990aee1d73c1228de158688341557508", - "amount": "0x64" - } + "blockHash": "0x863e79fd3c6376662be319b3ef0eb05283fc9f713417b7856a7c8615f977d8c9", + "transactions": [ + "0xf86882021408825208940c2c51a0990aee1d73c1228de15868834155750801808718e5bb3abd109fa0463b8a6f4391ea41bc550df58b0a7269723d27f89ea39503e185b29825ab27e5a00da136a3737caa05c897b1e9394f0b603c050b6759b03a7a3ca98c00a1a8fd93" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -16525,23 +16575,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xed614b855d979afefa3c40027ca4b6fff89a1467173e85302b48a478bfa7abad", + "parentHash": "0x863e79fd3c6376662be319b3ef0eb05283fc9f713417b7856a7c8615f977d8c9", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x02aa4ef008879baf8013e7423aec03edce2bb972deaed85a328fb3091b4ed15e", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0xa593c2a149e212398ba3eec8f8eeb490ca7a1c1933946666e69cf2107368dc35", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x20b", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x146e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xf379747713313c3ef604ea0d5446066edf0b695213acfb86388ba46e6c926bae", - "transactions": [ - "0xf8838201dd088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a023dc415db791f292cabc61a8b7283f85bce4e465f6874575754d609e1f3ce941a0700ac3dda3383581af5d6955cd810cbb7307ec7137ded66c03b7e22358454d5d" + "blockHash": "0x92017f3c5f46fc656d0b2279ed722c9ee2fefd6aaeef49a9b72a7f3988fda54b", + "transactions": [], + "withdrawals": [ + { + "index": "0x2e", + "validatorIndex": "0x5", + "address": "0x654aa64f5fbefb84c270ec74211b81ca8c44a72e", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -16556,21 +16611,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xf379747713313c3ef604ea0d5446066edf0b695213acfb86388ba46e6c926bae", + "parentHash": "0x92017f3c5f46fc656d0b2279ed722c9ee2fefd6aaeef49a9b72a7f3988fda54b", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x0cd299e9c060969fe6593b7ea08a63355e4280a3f2922270ff3095637dd7948f", - "receiptsRoot": "0x2cb4423ee880ff1ea3b8a2183d7f06169300ebc9b6fe32056fbced32f27b1be7", - "logsBloom": "0x00000000040000000000200000020000000000000000040000000000000000000000000004800000000008000000000000000000080000000000000000000800000000040000000009000000200000000000000000000200000000000000000000000000000000000000000000000000000000002000000000000000000800000000000000001000000000000000000000000000000000000000000000880000001000001000400000000000000000000023000000020100000000000000000000000000000000000040000000000000000000000000000004000000000000000000000000000000000000004000000000008000000000000040000000008000", + "stateRoot": "0x4256a8cdaa5d1adaa4fa6f73a61ecb3c4e0e505e0f8b79a76c6e966bb32f6295", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x20c", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x1478", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x71345ffec2ba388522c6703f19f24c5af1eb742a44d2ae6749276739d138912e", + "blockHash": "0x5b54670c143ac7faa7dd65ddb7e3b7c85d6932c049e071be3a0f9f51ee3b889d", "transactions": [ - "0xf87a8201de0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a05c1d31b87f32db69d5b9d2e257a848d4c1cb58cd4732960d72e270da0683e93ea01a6781141f8fbb42eadaa7d0a2a57590405d3ffa3890a0f7c648769c3989100f" + "0xf883820215088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa0b15869920d79036b50d162705926df5f6143bca108327d7fdef8c0c15b1aa13fa024bdc8a317f2fd9a864ee29de1674c86bdc4b12de94cfc724f0eaee99aa0b73e" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -16587,21 +16642,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x71345ffec2ba388522c6703f19f24c5af1eb742a44d2ae6749276739d138912e", + "parentHash": "0x5b54670c143ac7faa7dd65ddb7e3b7c85d6932c049e071be3a0f9f51ee3b889d", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x4ea5649d17703d51dac0fe529718f0f0cf21f44cc8d509d2543d3d4f90d12719", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x24d01ee8a1ac915a330883c94b58c0d88104e52919c8a6f47150046d2338c7df", + "receiptsRoot": "0x357ce885261f1ec04a6bd7de15cbe2cd9ac6c89e882b560c78050de4f04f90e0", + "logsBloom": "0x00800000000000000000000000000000000000000000000000000008000000000000002000000000200000008020000000000000010000000402000000800000200000000000000000004000000000000000000000000000800000020000000000100000000000000000001000000000000000000000000000200000000000000000000000000000000000000000000000400008000200000000080000000000840000000000004008000100000000000000000000000000000000000000000100000020000000002000000000000000000000000000100000000000000000000000000000020000000000000000200000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x20d", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x1482", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xc73d56854a544ce56956bab6d4ffab7beca0ec861ff5cf5906aa2aec20682c75", + "blockHash": "0xdcc13010415b57cb7729b370840b98797aff553ee150d53acc57944d6880476e", "transactions": [ - "0xf8658201df088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa01720814975890f03e1a3279eb0d5af0541a4b8e217f481890cee5a0dd8ac4023a02843cd3100592f8bf4347b31728aa75f3f75cea374b67f80d3e71527fd65c016" + "0xf87a8202160883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa07eb9ff8d5e16ef4fa6411ab271051945fe0d16680e8c9cea42f481b11c3a98dba0180958212e5b37bf6e3ae590abdb71876d9cfb4cf5734186cdf2ead9ee9237c4" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -16618,21 +16673,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xc73d56854a544ce56956bab6d4ffab7beca0ec861ff5cf5906aa2aec20682c75", + "parentHash": "0xdcc13010415b57cb7729b370840b98797aff553ee150d53acc57944d6880476e", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x190daba25ceaf68c12492a2d923af7d8c96b4afceebc901351efb217d9775367", - "receiptsRoot": "0x10047deb371c2c9cb54cd89eb2eab6b6797c5d35722426601ce4389b6de76f54", - "logsBloom": "0x00000000000000000000000000000000000000000000000000010000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xb8ceb7172e8b987932f130ee715a174319067b41534f6519d42c51bf08c83a22", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x20e", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x148c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xd543d5b576ae572d9996cd3d05295368b201e3c618ae5da30fbec43cf24b52a3", + "blockHash": "0x2d3c7ce06501bbf1916b0a41b645130ba77f69e25b150354934ea8ea0cb3b012", "transactions": [ - "0x02f8d4870c72dd9d5e883e8201e00108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cc37096f89eb8687f656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0075a739ccce514f063220aa4bb66f08a7966189b0f24a2c5ad4692133d7aa6cb80a0fb8b4fc683ed078751d7cb16998f23fee9c6c518cb6cb7e53f358166b70be89ea01e42a4c3032a587f5d47a21bb164b61c3dea45c85ce2135315c43ca4cf50b464" + "0xf865820217088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0668c188b5f045222d9eccc2032de6dea0afbea32eb584ff4e55b5e593f691d6ba0420ee8705676a5551e2147d23444f2ac1f699cd379b63dc3d17327874758f77f" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -16649,21 +16704,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xd543d5b576ae572d9996cd3d05295368b201e3c618ae5da30fbec43cf24b52a3", + "parentHash": "0x2d3c7ce06501bbf1916b0a41b645130ba77f69e25b150354934ea8ea0cb3b012", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x69e05db1324cc8ff7d7db4d31bc7d3a3c2402ca7111bf4f5392dfeefc6197a4a", - "receiptsRoot": "0x03a983607249a979042b87909c438e5c752cc71e90cd1d80608242f9c900d81a", + "stateRoot": "0x904a1249204b256c8f6954c075b83c8de19e30575b1e5208ac33d97ce882ebd5", + "receiptsRoot": "0xd95afa4c4613559483642d24acd6e5db40206d887e6964bd5c27ecdbde7a3fa2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000800000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x20f", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x1496", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xdba4322406050555a1a8cfbae1c6fd627bee7757384059a41bfd5b6147543f53", + "blockHash": "0xb8489443b8bb965ee7e0cc42e8ff8c2467d199cd09434fb394df3f34a2a985b7", "transactions": [ - "0x01f8d3870c72dd9d5e883e8201e108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c4dd208cc7281960f656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0c6bea923a54f8cf570edfddbda896a2ebf7b53d33b1dac8914ed024ff0621f1880a0a1b21815f9c5e92dc5dd6d6de2de28a6cb43d213da883f52b3713b5c82772fa4a0799b9eab259ac6b761d6d5dff843ccd407f5fc75d73cf3048db0ef83514ddebf" + "0x02f8d4870c72dd9d5e883e8202180108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c4dd208cc7281960f656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0c6bea923a54f8cf570edfddbda896a2ebf7b53d33b1dac8914ed024ff0621f1801a0aba17b5a65ce9a852c8ecd7c479fd06aa9e1dffa7f9b73007599b84cbb0b6d73a060f6c1e699925c3a40cbb5d13ea0fb9554065d03f4d1158d25769ab386cdba54" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -16680,29 +16735,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xdba4322406050555a1a8cfbae1c6fd627bee7757384059a41bfd5b6147543f53", + "parentHash": "0xb8489443b8bb965ee7e0cc42e8ff8c2467d199cd09434fb394df3f34a2a985b7", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x6eb258534e7dc87b92c21e0b551b5ba4b7cbe61220ff88cac3f745c57ced124e", - "receiptsRoot": "0xe78cde3d52f87a1ad382ccdd7c7856f8d373afb165be7c463efcb1996196ceab", + "stateRoot": "0xd60ede81eb19a10fd03c3600b55a9a5cdf0110f27da09dd6891981a5d4e129aa", + "receiptsRoot": "0xacf1ab751527f15fa748a4689f1123006cd24b65daa0e2713f8f364742dbe6fc", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000010000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x210", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x14a0", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x9eadaf49e03a16c9c7cb8d2ea59c3285d7530750a462d6a9338e9a9e730b1055", + "blockHash": "0xc4194a2d7270901ff947af6ebd80fa701243344f704f832880455f4041285986", "transactions": [ - "0x03f8fa870c72dd9d5e883e8201e20108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c6892c905221f3788656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0ab15322a52f3de5dda0553d7abbf171524cabb9c97dacea8806c750361d472df83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a0ad577f0e6c48f80b38cd100b0209f429072e28e557bcd66fdefe6218dcdafbc9a0382bce4cba9056329b00ca3921f927c3ca90a41f36a3f3e195f3b4d1e2161824" + "0x01f8d3870c72dd9d5e883e82021908830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c6892c905221f3788656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0ab15322a52f3de5dda0553d7abbf171524cabb9c97dacea8806c750361d472df01a080f0928379dc5edff0f44537e1b8a3b6c2225d9551b308815ae44b233bb5e34ea026b23cf8a1ef2f5fd5a5a299be0664512a45761a13130800bdc3cd02d26a0fbd" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0xb9808a96196fba3329eb714aa00743098723d9850510689ad18fd6952b655882", [] ] @@ -16713,27 +16766,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x9eadaf49e03a16c9c7cb8d2ea59c3285d7530750a462d6a9338e9a9e730b1055", + "parentHash": "0xc4194a2d7270901ff947af6ebd80fa701243344f704f832880455f4041285986", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xfd8541477e0d1ae87c8d86a53a130c1a3dca87b079202aa93d60b191a75de382", - "receiptsRoot": "0xbd9775274f3b90081fefb52407bc7b88acf25c5822271cc5b6fcfb34878e391c", + "stateRoot": "0xec9e01a9a015ef87e3b2d41db50f242fcb1fc42f17e112cc7b9672d17cd4f9e7", + "receiptsRoot": "0x00fc1c9c0d4279a6fad522a1397aa4bcdb88cf8075c1ce2a0a0eb462fed5ac88", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000002000000002000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x211", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x14aa", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xeefa15b3aa7fbee117a78b61a365f6e38b6d8ae21482bc2eda241e637d43af8a", + "blockHash": "0x1d01c2348f9ac6b46cb793467df238a9f23c29c1d3de9e454bc61644705db054", "transactions": [ - "0xf8758201e308830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c315c130cd091bd0d656d69748718e5bb3abd109fa00783dd9ccbdecdb119bd9f6c0fc409abea3f74be77e87fbf7452de4b522b9db0a00a46e1b4c79bbfccd0c4c1b3966b26a26e5dac23650d62371e8685c2914d7db6" + "0x03f8fa870c72dd9d5e883e82021a0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c315c130cd091bd0d656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a009b79212fdf6dfcd322d6aabd5ba752b962d7e575cf299112bead28ab955f4c883020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a0c715416384ee2899ec119959a1682f21aa8907d3eb84f387b6ac74f2a83f30b2a010f076d8bede6a714d02e8b27bbd295401c65e6e15a733e0f6ab7c54aaa92b82" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0x3cacbae26791d03a0ba1bec3ba0599219257c88708b022bbddb7e7673ef818e1", [] ] @@ -16744,21 +16799,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xeefa15b3aa7fbee117a78b61a365f6e38b6d8ae21482bc2eda241e637d43af8a", + "parentHash": "0x1d01c2348f9ac6b46cb793467df238a9f23c29c1d3de9e454bc61644705db054", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x465a36ea30cba123d3b7913756c9c00d129550e958bfc4d6b316d39048c408fc", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x09fa5222cabc90d86f87f8dd06feb219be169eaaa0d1985b4266aa36854a7052", + "receiptsRoot": "0x5a71db43e13b3a52004a27880670d67a960357953f6118d42eb1e3d72b26d372", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000010000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x212", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x14b4", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x3c7d782eb5bbcdd254bbdb120e432c90d9b0510a3c7e64507ed2c82fc01a2a7a", + "blockHash": "0x7cdb5360f32a30019bf96d2ea2034810820d065f655f99482aa59696b371afa4", "transactions": [ - "0x02f86b870c72dd9d5e883e8201e40108825208940c2c51a0990aee1d73c1228de1586883415575080180c001a0f2cf4a1cc75a89cfc63c40d50d28eb5ca1cfc27dc639bb63cf27b8a550a495fca05c00f451e22fffa147a2febb5e19fcc67110fd7dae790449b0fb7d7123b73601" + "0xf87482021b08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028caff8e65c5d46d32e656d69748718e5bb3abd109fa0f2a65c97ed86c5b4e2c278d5387dffb88aa8e21278258203337c11698baa8d2f9f50e25c1b3b57fab34b084be2aa9263723320189e1d295b9eb7212feb638ff3" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -16775,21 +16830,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x3c7d782eb5bbcdd254bbdb120e432c90d9b0510a3c7e64507ed2c82fc01a2a7a", + "parentHash": "0x7cdb5360f32a30019bf96d2ea2034810820d065f655f99482aa59696b371afa4", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x262abcbb09739f0c4315c4f1cc05812ed8517ddb9490aad148028dc7fa469e4c", - "receiptsRoot": "0xbe3866dc0255d0856720d6d82370e49f3695ca287b4f8b480dfc69bbc2dc7168", + "stateRoot": "0xb2f6e94dd715d7dc986869c5eb611f51bd51c4563201719bdbc85ec3e832459a", + "receiptsRoot": "0x005fb2a0d0c8a6f3490f9594e6458703eea515262f1b69a1103492b61e8d0ee2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x213", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x14be", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x56d781324e6bdab32f417adff9cc2b4c645f819184b323f47ec974574121b309", + "blockHash": "0xd17bc796f0ad66329bca1ca889a6c67406db80c0f43200fb0926495f409432b1", "transactions": [ - "0x01f86a870c72dd9d5e883e8201e50882520894eda8645ba6948855e3b3cd596bbb07596d59c6030180c001a0272979494bc567f4068b0a0045c47c7a4d5b61830336ca2f0b5dfb71b360b5b2a06e18389eef16507c32a65a33657d91c0c86ba494fd098e4597c8dfcda5adcdac" + "0x02f86b870c72dd9d5e883e82021c010882520894eda8645ba6948855e3b3cd596bbb07596d59c6030180c001a0663e9d8d81442374c9eb5bfc2c647f256b417216c932c3bf75ba31d2c4866b50a02e371666983865035d0b7c87b8fbfc55fd8c931a32a9b9de4a7dc84d90408092" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -16806,21 +16861,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x56d781324e6bdab32f417adff9cc2b4c645f819184b323f47ec974574121b309", + "parentHash": "0xd17bc796f0ad66329bca1ca889a6c67406db80c0f43200fb0926495f409432b1", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x7a641000a828fc192ecc11aa311654b566eed5e1b3bc965c728d6e5acb96ef1b", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0xdf1f33d9acce87b5dbabfa935a37a51546b99e10166d15213dca15800609adba", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x214", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x14c8", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x997c22b77767599b4d1f9f7d21ad9b34b1e13e5ba18986d4dee06d282e89e453", + "blockHash": "0xd8472a9633cefd2b65c8d169fdcc6737e60390ee74069eea5c6209c6e2ad1634", "transactions": [ - "0xf8688201e60882520894c7b99a164efd027a93f147376cc7da7c67c6bbe001808718e5bb3abd10a0a0a0159c130ac25ae9f757ddb7ce145902e9d9c6b2bca2367aee5c0c177138b3e6a06eb8a315be9419b53fffdc809106fe98042b1282ebc54139bed557f95d3cb9d0" + "0x01f86a870c72dd9d5e883e82021d0882520894c7b99a164efd027a93f147376cc7da7c67c6bbe00180c001a007a998646376bad827bdfa2b8be92733e00703f2ecb6cbf2254cf3f80a63245ca00291247571b7de6e4024d131f4fbf186f0f384105376661e0f504e389dc05eb5" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -16837,28 +16892,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x997c22b77767599b4d1f9f7d21ad9b34b1e13e5ba18986d4dee06d282e89e453", + "parentHash": "0xd8472a9633cefd2b65c8d169fdcc6737e60390ee74069eea5c6209c6e2ad1634", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x7d0ac3c7e061d59804dfb4c844c4d6a6c3daf56fb399b9a693a08432128a377b", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xd30e3cd0f7be062c2b863f467970e432059fa882baf20e0f5004b6bc7f270ce6", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x215", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x14d2", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x49223c27247cbb012c480dd78497ea761f0de37eab920e169067d710a6c697a6", - "transactions": [], - "withdrawals": [ - { - "index": "0x2f", - "validatorIndex": "0x5", - "address": "0xc7b99a164efd027a93f147376cc7da7c67c6bbe0", - "amount": "0x64" - } + "blockHash": "0x619efa7e75625a7ebedc7f3f9399965b08abf5834485d1db46a18e52f18c31ee", + "transactions": [ + "0xf86882021e0882520894c7b99a164efd027a93f147376cc7da7c67c6bbe001808718e5bb3abd10a0a02c313c47f073d960dc06bb477f0d12cc143c04ab7f5f822856b697515b8175aaa01cce6e9a1cbf32acc375da6cbb5d6120a0fe6a55b61caec560b77b8f324b3e62" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -16873,23 +16923,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x49223c27247cbb012c480dd78497ea761f0de37eab920e169067d710a6c697a6", + "parentHash": "0x619efa7e75625a7ebedc7f3f9399965b08abf5834485d1db46a18e52f18c31ee", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x97d7c32f96e823071bd92e3ce789ffb7f71a577d045524345567215b20e9c5d4", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0xedbfadfdf2d1f7d9ccb6865aec20bcf6488308e772821067fdc942762d129723", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x216", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x14dc", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x09f9f3b73c653b5d3440ff550da397d5d6b4dd3e3297a2f2d3c5e67bb128afc9", - "transactions": [ - "0xf8838201e7088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a0a65d61b55253835ba754891614405c576b15fab6aaedcf41e661ad09ddc3249aa01c58d6a0533b60d246426b0475bf951081ad130b8a4ecf17ca3fe45817bc54d7" + "blockHash": "0xc2b62f015db1c1d98d0614179d0ce92635a62ab4922a2faa0139119d3d63e071", + "transactions": [], + "withdrawals": [ + { + "index": "0x2f", + "validatorIndex": "0x5", + "address": "0x3ae75c08b4c907eb63a8960c45b86e1e9ab6123c", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -16904,21 +16959,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x09f9f3b73c653b5d3440ff550da397d5d6b4dd3e3297a2f2d3c5e67bb128afc9", + "parentHash": "0xc2b62f015db1c1d98d0614179d0ce92635a62ab4922a2faa0139119d3d63e071", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x06e29a646e53e63f21496c4a3750ab792ae936c9f6aba8ef6c0b394c4162b7ee", - "receiptsRoot": "0x4dc3ce129c50f0f33376b2873180d30ad489254d84227440afda885d13128bc7", - "logsBloom": "0x00000000000800000000000000000000200000000000000000000000000200000000200000000000004000000000008000000000200000400000000000000000100000000000000000005000000000400000000000000000000000000400000000000800000000000100000002000000000000100000000000000000000400000040000000000000000000000040000000000000000000040000020000000000000000000800000000000002000000000009200000000004000000000000001000000000000000000800000000000008000000040000000000000000000000000000000000000000000000000000000004000000000000000000000000000000", + "stateRoot": "0x777b1a54c64e05fede625221c54318074a47d6c025c2ede671e8c860fa84a0b9", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x217", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x14e6", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x6e277d1000baa83809de9f5f90fc8a3387d1ff660f9a7d7857ec4c3e66f70d57", + "blockHash": "0x58bb373fbaddaa37a1fd35bfbaedfca10e720b9517932daa0041139db7285ac0", "transactions": [ - "0xf87a8201e80883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a02d4072f0fa61da269b2848af2a7c2301b26e411ce33bd229fc1147c4b627b49aa00316bbe2cee82df396f55967d0087d87803bba9f596022542d4e58b23f6fbc6c" + "0xf88382021f088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a011dd7fa5782307088d05ffd1d11037add044a77cb4bbc829bbb4eac634039afaa015df7b7332a0971fd7ddafb31de4113334576d8b7fa2f95fc38453974a0211d5" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -16935,21 +16990,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x6e277d1000baa83809de9f5f90fc8a3387d1ff660f9a7d7857ec4c3e66f70d57", + "parentHash": "0x58bb373fbaddaa37a1fd35bfbaedfca10e720b9517932daa0041139db7285ac0", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xf8d9694b5feb43df6c73fb0bd5319235826db3cc7e0cb14bdd5623a50bbd234f", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xd5ed54f5fe309c1ac6a3939c3d956a15cd79ad3909229d68a47b8e8b59d3da0c", + "receiptsRoot": "0x2d9ff7a5d365e1d00478fa9158143b2e67b31c3a818e288be00a635c43a08b6a", + "logsBloom": "0x00000000000004000000000000008000000010000000000000002000000000000000000400000000000080000010000000000000000000000004000000000000000000000000004000000000024000000000000000000000040000000000000000000000000000000000040000000000000400000000000100000000000000000800000000000000000000000000000400000000100010000008000000000000000000440000000000000001000000000000031000000000000000000000400000000000000100000020000000000000000000000000000000000000000000000000000000000000000000000000000000800000080000000000000000080000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x218", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x14f0", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xeacee55ad16ffef8f34262dd2351947882b5c327565581fdaece63fe35c8044c", + "blockHash": "0xc9e6ff8c4334da9106046cf0aa6ada5653c1c7e4e04e2625132bdf77159440d7", "transactions": [ - "0xf8658201e9088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa022c7b242e1ef059218eb70cf070b49f60caa6fa032bb8b8632f5f09d29f80c35a03c4ce2290d2679e8b9b97050a9ea8831fddff3867a0252c0cbc9ef00e4280e5c" + "0xf87a8202200883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa01f06e1d4129ab42e72bb52b1e9410b535dc6ec558097e4dfe2a33a19120c75a2a0695aca2ee3dd5f3c254de06e6d230556cc653d6363bd81a24fcb2069d3a449cc" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -16966,21 +17021,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xeacee55ad16ffef8f34262dd2351947882b5c327565581fdaece63fe35c8044c", + "parentHash": "0xc9e6ff8c4334da9106046cf0aa6ada5653c1c7e4e04e2625132bdf77159440d7", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xd115c5969ec12b4c5bdc21f5d83d9579a719dcfb222d3ff0283db5e289d98a5d", - "receiptsRoot": "0xce729af5fa5f299bdcd0ff1a99fc476c251d9e0bbf22c3b46addefc7b85f9c29", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000040000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000008000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xbc96c677aad13efe3f2d8d067ad5a84db086d5144d2c9fb1d12e44d3cbfa583e", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x219", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x14fa", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xd13cb1082077f93cf162c8868d1e2ddfa3987c12f0b4d17de8f4e456ba9f646b", + "blockHash": "0xd8c58761e29f93f85ed6cba366a7bf37793501e56beb1505083593cef82267c5", "transactions": [ - "0x02f8d4870c72dd9d5e883e8201ea0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c07626586e3a0f1ec656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a09f5941a130f6c2ff98ec21bb2517998dc5c8512230dcb37ede3cb8a4694175ab01a0fb5fb3892fb8cd6a9be0f5b801786a8c79e88b0d9ef5449d56f0c98d185d7d2ea076ecbe90f25a389ad5def021d71350df29f6b730378b85ccf791a8f44c2ac96a" + "0xf865820221088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a074883c6fbc22c51da2652c7b3af7a2ba5c22717e5c9bf833e606ea95fed9f6cca0764930ed2fc298115a761a3b936ee4e72f4bc48a5410a3a63c536078177d9734" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -16997,21 +17052,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xd13cb1082077f93cf162c8868d1e2ddfa3987c12f0b4d17de8f4e456ba9f646b", + "parentHash": "0xd8c58761e29f93f85ed6cba366a7bf37793501e56beb1505083593cef82267c5", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x81dc32740002a865b0568ecce82a55ff87f3102900c79b2ced81f0436469cecf", - "receiptsRoot": "0xe60b0698c810d1736de5e101f9ef3c378d764079246b845b4b3b2497748b7adc", + "stateRoot": "0xe192da5f688bd047ad26395be54b9afa59d532d45dbd46bbe452eff570f6e4ea", + "receiptsRoot": "0x4fae97195c53d94669ebdff34d0aaccc4bac74fce21c7635fa7c743dce5124f9", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000080000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x21a", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x1504", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x323fc2bb76f6f190369ed67f4eed60233e9ace45b6b77a8a545147f6e2a12826", + "blockHash": "0x1d090490f42aa267658565f6ca68e0d230f7d6e2c2c850276c5428f2e6feac7e", "transactions": [ - "0x01f8d3870c72dd9d5e883e8201eb08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c983c2551657b63bc656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0b296a1364260e1c8d47bcf2239f26b6b909a0a7687250af4af545eff0ea95ed701a08a1e2bea85d17cc28b85ba5aa259d8ecd80f18f356953fd6700bb69a1c4db7b4a046a33e75aa1e0b4dee47a01767b6dc71865ce4520ea58069ffe116cb781bafab" + "0x02f8d4870c72dd9d5e883e8202220108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c983c2551657b63bc656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0b296a1364260e1c8d47bcf2239f26b6b909a0a7687250af4af545eff0ea95ed701a083edf46568e48b42edaeb79d3e8ee7b0b66102c9a0c4c43ffe5f6c9fc128ead0a063242a2130fb3d7bf7bb7ecba5dcd7cbf88189e4769018a0809e66ec7a22a95a" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -17028,29 +17083,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x323fc2bb76f6f190369ed67f4eed60233e9ace45b6b77a8a545147f6e2a12826", + "parentHash": "0x1d090490f42aa267658565f6ca68e0d230f7d6e2c2c850276c5428f2e6feac7e", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x747e7773e984de4004d7c2fc72ed3d964cff24311f52642022b8d08627233b99", - "receiptsRoot": "0xd84d1f3c040aa4e5e5c4655e4e31423fd5d4c2ca46d25cb7693bc6bde4c923a8", + "stateRoot": "0xa09fe3c9aa57bed39e8aba098b01bae1f9102747baa8d2190f251d86d0997efb", + "receiptsRoot": "0x103e3209b1a4ebafea6a2a117831dc392ef04124614f97228e1c6f309597d062", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000004000000000000000020000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x21b", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x150e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x1a26d12a9846cfa2af53cc33f21eadb49c2f39560b460bbb1d7c253025da7917", + "blockHash": "0xf0867530c5e2d8e1e6f5e8fce7da42ed7d2b62d8f996ad93efabfdb12bd3cfba", "transactions": [ - "0x03f8fa870c72dd9d5e883e8201ec0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038ccb38a78682f396bb656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a06c172610999b0729fbb6bb1ba27e7a0009f1b584ad6f8307d3dcc7d24a18087483020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a066648a01bc2252d7e0633c6b759cccd6c6d121ac88f86a69fc118d657e4f6740a01c809c36c3734566dcd0329b3ef0ed31c03a6c7637050bc71f371f875f943bbc" + "0x01f8d3870c72dd9d5e883e82022308830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028ccb38a78682f396bb656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a06c172610999b0729fbb6bb1ba27e7a0009f1b584ad6f8307d3dcc7d24a18087480a0bc2651e817375b070b0d9f91130822e5c467312725dff25ffd146eba7a12036fa02b2296294d45cd11376edd4a348493a28de7c89ce9228f2b82e1328e2f3669be" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0x72ac7ccbdef2d82e39f5ea95cccfdb59f5d1c4a9a83e7e32a275dd2cf71db91b", [] ] @@ -17061,27 +17114,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x1a26d12a9846cfa2af53cc33f21eadb49c2f39560b460bbb1d7c253025da7917", + "parentHash": "0xf0867530c5e2d8e1e6f5e8fce7da42ed7d2b62d8f996ad93efabfdb12bd3cfba", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x69f76adb56454f7d5f754a13c539416c6c7f06afadd175bb91be5a6f39f45414", - "receiptsRoot": "0x02bf599be82af8d5d9e94a53483a4491b53a865e277f526e8de25320e409ca91", + "stateRoot": "0xab4675cbf4cfed5bbcd4654aa3852c9d0cd8b4186ba58b7fe82d8eda579144d6", + "receiptsRoot": "0x51b30d8dea1a3d0bcdaf826a64f1bb286c7194c9918991a2ee3fd1dd787a1c39", "logsBloom": "0x00000000000000000000000000000000000000000008000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x21c", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x1518", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xa68b828d73467b4edbb8f3a188d1d23b8de8113e1157ebe14ec188e8f266637e", + "blockHash": "0xb2db3d26bc5c38616a7acbaba0e72cbc0d27ddb96f8fe1f4f1437d6ea7c058f9", "transactions": [ - "0xf8758201ed08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c73f53dd5c5a5b8e6656d69748718e5bb3abd109fa07d2f8da526aca447b41d7e8128a8043efa6181ba64f9a80d4e328fe707ac92c8a068a7bf6266e3a6bd7628ecb2df712e9e0fef35fa5e6de05411680d753e797401" + "0x03f8fa870c72dd9d5e883e8202240108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c73f53dd5c5a5b8e6656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0ce285eb20810f2d026bc0b62faf3735df2193835ffd85df244ecc2df24f43b0083020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a0941d11643e6706c38a19d1fa80a870e7553db9ec5a28fa96765f19a5d594d278a0498241744e65d1a71b91e39257a3abddfc93c33cf8042f7ec3d4cca14f2ebbfc" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0x2f72d33db4de041ba2707492686a6f045671d2b63383cc70a770a94f39244793", [] ] @@ -17092,21 +17147,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xa68b828d73467b4edbb8f3a188d1d23b8de8113e1157ebe14ec188e8f266637e", + "parentHash": "0xb2db3d26bc5c38616a7acbaba0e72cbc0d27ddb96f8fe1f4f1437d6ea7c058f9", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x056f995edf8b4f996fd33e30c6822d5826b8a00b41c400c12782b8b3a0e813a7", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xff10357b70eee297cad094f5054140e825d657702345f074536db819f6aa30e7", + "receiptsRoot": "0x1fc5e8be642a0e47830d5f9cb00a1eae91931e0d8cab894c49b586d5b2603a60", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000a00000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x21d", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x1522", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x46d5ce094294750e8d8c4508cea607a110ac887c6876460834bb7f944fb3cba0", + "blockHash": "0x0dbddf3e586a2f5369ac360a4fee1273047238f16f2f4e8b6e16471b2455701a", "transactions": [ - "0x02f86b870c72dd9d5e883e8201ee010882520894d803681e487e6ac18053afc5a6cd813c86ec3e4d0180c001a045477c69fb8e39de6fbb74e2f46fad8a0100af2422237e37b5381c0f68a79966a06c71c781157867e0ee7e162f1a938b634665f3f31a948fce4681c9ba26370cff" + "0xf87582022508830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028ce2934853c0e07a07656d69748718e5bb3abd109fa0806bcb8f517214e708a17372de5245a67396c6a5250aeab9d012af6135f5f20ea045044a58c796c3fbcaaa6841ce92ae2b54c84783d31e07c106ec325bbbb2d7b3" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -17123,21 +17178,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x46d5ce094294750e8d8c4508cea607a110ac887c6876460834bb7f944fb3cba0", + "parentHash": "0x0dbddf3e586a2f5369ac360a4fee1273047238f16f2f4e8b6e16471b2455701a", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x55f9573aaadb8fc314ca55c112fd5dc4e4d954e062e593d2e11a12cec791d44a", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0x92ddc959cb2fb1dd69692ad7bfb8f2bc298dd502b425c332fd2dee520e707e6b", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x21e", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x152c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x8d3698f018ddc839a43997a360b3715b80f6f8fbf70836166601ecc42439b1df", + "blockHash": "0xa82749ce59055410613ad90d73c4fdfe715f9b60c665689c4c377125b1dadaef", "transactions": [ - "0x01f86a870c72dd9d5e883e8201ef088252089414e46043e63d0e3cdcf2530519f4cfaf35058cb20180c001a01f2f31fc6b3aed1b75d585c4d97bc8dcc68d59face5224e5ac09d09bd9e5e3c7a0064ff5892a02c786cbd932238664e43b0655e87c2b14939c70f3253121e28d12" + "0x02f86b870c72dd9d5e883e82022601088252089414e46043e63d0e3cdcf2530519f4cfaf35058cb20180c080a05ba7aa03d805cec4b4fcdf0f85965c6640d52210dfc7d7a21f67d1dec2289472a0427f828a0df5cdb75f359b746505e42d73e5698ae804b83e892bc076eb23d39e" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -17154,21 +17209,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x8d3698f018ddc839a43997a360b3715b80f6f8fbf70836166601ecc42439b1df", + "parentHash": "0xa82749ce59055410613ad90d73c4fdfe715f9b60c665689c4c377125b1dadaef", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x3ff7261f715a6e65f20e6b3891169cad8aadba6e833ee6d9d19bd4be4aebb1ea", - "receiptsRoot": "0x642cd2bcdba228efb3996bf53981250d3608289522b80754c4e3c085c93c806f", + "stateRoot": "0xf5b4db74a22182e3244d6c46bfd8ef415deac2300c7bd7657fc8863215d4dd1c", + "receiptsRoot": "0xbe3866dc0255d0856720d6d82370e49f3695ca287b4f8b480dfc69bbc2dc7168", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x21f", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x1536", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xbdaeadf6d9045a0a986c15262d81d49e1f12a3301035d7d7d03855f315498397", + "blockHash": "0x5be3c764fef371841fdaca04c885c757d884f9ff8971250ae39d77c76e573636", "transactions": [ - "0xf8688201f00882520894eda8645ba6948855e3b3cd596bbb07596d59c60301808718e5bb3abd10a0a06277e04f735948e7b3587c9a498a1cbd1cf26e757597dcaacb670ced21fd851da0419c5056ebae72ab55a9f66fc7a781841fbe5ef02d3eacbde641c11ac45abf97" + "0x01f86a870c72dd9d5e883e8202270882520894eda8645ba6948855e3b3cd596bbb07596d59c6030180c080a07cd0b848f57e8939951cf57255fdc454da314830486776b660aa6d2cd9a572eda05a20a6565e5bcb733ec560e01d446c81e38b85f66de4f359920f29ec10850ffb" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -17185,28 +17240,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xbdaeadf6d9045a0a986c15262d81d49e1f12a3301035d7d7d03855f315498397", + "parentHash": "0x5be3c764fef371841fdaca04c885c757d884f9ff8971250ae39d77c76e573636", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xe359a229439c935d37eb15692119abf3f62f0d44121173742451cbe3c5125978", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x2b1852b2db8a8e35f48485d7f315f8969b95fd277d9b533a61f75a133f52e594", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x220", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x1540", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x4466a1b8ce15a2b972b93d345e42e24d6c55e49e6e6b390daa111115737c8893", - "transactions": [], - "withdrawals": [ - { - "index": "0x30", - "validatorIndex": "0x5", - "address": "0x1f5bde34b4afc686f136c7a3cb6ec376f7357759", - "amount": "0x64" - } + "blockHash": "0xb710b8559fdeaf52af97d3fcf0879011c37044dedb8f94dbbc338a85bfd7c61a", + "transactions": [ + "0xf86882022808825208941f5bde34b4afc686f136c7a3cb6ec376f735775901808718e5bb3abd10a0a05ceec42baa76b27fe39d9ab36d09835722c6d10baeabea922bdbb6b2d796a0b4a01c35d21343f362a283bf74dfbdd4cab090d16de909e304324c69c006be235c79" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -17221,23 +17271,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x4466a1b8ce15a2b972b93d345e42e24d6c55e49e6e6b390daa111115737c8893", + "parentHash": "0xb710b8559fdeaf52af97d3fcf0879011c37044dedb8f94dbbc338a85bfd7c61a", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x276a6f0667818b0b9e48329b0df3a12c55432a69b7a2e18d804ab0438b9a6981", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0xa298d3c4bd50f7285630e98b96c2abdbc4eb9ce9a3bdba0e8c3da99566655de1", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x221", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x154a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xaac5449b0cee4d0ff7e6dc495061712400e5f908b5f5699bd489f8433c7f3ce6", - "transactions": [ - "0xf8838201f1088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a0b64f8faa510164cddef08b97617a6d5080fcbab753249ff2069fdebd9bcf18daa03295fb60880b2d53920760615f698f90d44dbf6be4a6b043b842d245e80611a9" + "blockHash": "0x6eb711b67df8460994ec6d375c26a4209acae1a918f7a62392f2a562500980c5", + "transactions": [], + "withdrawals": [ + { + "index": "0x30", + "validatorIndex": "0x5", + "address": "0x4340ee1b812acb40a1eb561c019c327b243b92df", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -17252,21 +17307,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xaac5449b0cee4d0ff7e6dc495061712400e5f908b5f5699bd489f8433c7f3ce6", + "parentHash": "0x6eb711b67df8460994ec6d375c26a4209acae1a918f7a62392f2a562500980c5", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x0d95bdf7c340d3e2da1a434be9aaeed806ec9df50c6981f59f5fcf28e38837cb", - "receiptsRoot": "0x8651d247e3bca392f863186a65208d131bf252e4150ed9ffd7087e51751ba514", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000004040100000000000000000000008000200000000040008000000000000000000000000000000000000000000000000000000000400000000000000000080000000000001000000100000000000100100000000100000000800000000080000000000000000000000040000200000020000000200000000400000000000000000000000000000000000000000000000000000000000000000000000104000800040004000000004200000000000000000000080000000000000000000000000000000000001000000000000000000000000408000400000000000000000", + "stateRoot": "0x5285f20269553112d3fa1b74ef776f3ef4f7cbbe49fbb6285beca90542b1cc18", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x222", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x1554", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xbfc6905b39a1fd70f2d85dbd0ec084fc9bba34dd6bb89e4feae605de3472a46a", + "blockHash": "0x1da9f51a070e2bf7a49e7631ac54fb0e79bf4034dd2b982f8929cf12c469a593", "transactions": [ - "0xf87a8201f20883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa055096b6dc4a45fbf9170e9c187b9bc41f2438258148bb7d806d75359079ba6b3a044b007eb890bb333264526a6b7e7c92a6d517de42713ac3f96a0b57f2a4ee607" + "0xf883820229088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa01933a4971aa769804ba4ac63507f32bcf9c2b1bf5161dc27e2c465c26caa3c6ba0086c4c204789cfee0de84e151bf06d2c18d9823d6f4abc7035e9e6039f192c50" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -17283,21 +17338,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xbfc6905b39a1fd70f2d85dbd0ec084fc9bba34dd6bb89e4feae605de3472a46a", + "parentHash": "0x1da9f51a070e2bf7a49e7631ac54fb0e79bf4034dd2b982f8929cf12c469a593", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x8c3fac07843541c61d52b4eb13fef58d805669c15dd83653eebce4e9715b1867", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xd358f95f0a8aa12bd08232b92749f5e2f189a508447f6a89814509f9581062db", + "receiptsRoot": "0x9519cf62b07b8cbadc460fdc3cefec4aafe9d2bf3b3d4cc3a11d9ad733cb4826", + "logsBloom": "0x00000000008000000000000000100000900000000000000000000000000000000000000000000000000080000008010000000000000000000000400000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004100010004000000000000000000000000000000410400000000010000000000000000000000000000000000050000000100800010000000000000800000000000000000000000000001000004000000000000000000000041040000000000000008000000000000000010000000000004000000000000000000100000000000000000080000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x223", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x155e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x1320207357e4a928664d17895ca63c2e929115bf3078b13a0623a42b1361a27e", + "blockHash": "0x9d719d04326acbac551edf543d8f760e26c65609601f950dc8d7271cbf40a006", "transactions": [ - "0xf8658201f3088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a06ab85e777a6cc0b2dbd52f9c3516390edff3e0e948e7dd2386e7519d8a70e413a05b740cd62710ab8d44076701ed2162a4bd272d2f60800640256f0cd4d6805cdb" + "0xf87a82022a0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a060cbd58eda040403b14eca1644f33a5246fe27034ad239413c2b33ed98d7113ca03597763dacc4c210366705368fc9f34c7dd812026df69e046746150922755936" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -17314,21 +17369,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x1320207357e4a928664d17895ca63c2e929115bf3078b13a0623a42b1361a27e", + "parentHash": "0x9d719d04326acbac551edf543d8f760e26c65609601f950dc8d7271cbf40a006", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x145414168f2684ac713c1caf12bf80f01f1f9dc4f715f864682ed163654362cc", - "receiptsRoot": "0x91bed430019e3f90cc84ef5e5d56f4276141d26e047324f5e3fb3c631cac4539", - "logsBloom": "0x00000400000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000002080000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x21fc7f56ef62f2a6af0c85e8acd8ad3cb17ae34c757b5251e7c07b17f255b0c6", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x224", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x1568", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x6988fc4983a5d91cb76203880fcb0be8d513013f9eda28c6db7c27d0e457f417", + "blockHash": "0x488537d78be3c43ce3232056b5e0b1ce2ca9a88d4d7d768f654e0698928743e0", "transactions": [ - "0x02f8d4870c72dd9d5e883e8201f40108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c637837799e0edd06656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a030335bc132be5a5f3bf464e0eed03a3c74f180cb9906552e187e4c04f024b80401a0b8c1fd8af8304dfa9ea0a05efca1dc046c0ee303d2480d33d3571b26ac1cac60a02d88376e9ef62f084881d7cf42a02e196b01d008a3f8162b87b72fc5d0898520" + "0xf86582022b088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0aac243f3dc5739a48c97d8c1bf8378d7ddf5d316f6a94d1130065bf9abf2666aa06f86954f6ba0d3366b63224de6f55748f27828f807bd3504bf24a71cd38fe9e6" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -17345,21 +17400,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x6988fc4983a5d91cb76203880fcb0be8d513013f9eda28c6db7c27d0e457f417", + "parentHash": "0x488537d78be3c43ce3232056b5e0b1ce2ca9a88d4d7d768f654e0698928743e0", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xd6fcd0749b8b8f49a67d5942c805262f2713201ef2b6ec63b03b6f07de933c62", - "receiptsRoot": "0x844343467c0c25b600bcdee7a3390b3dd9c8ff6bdbe8a74cd849c574c7f096b6", + "stateRoot": "0xd449037270da36f46b81bc1bc11581777b0a23eca0de0502ed5fee65686d472e", + "receiptsRoot": "0xecd16d9340092fa4b69bc2bec07184158e9217ba92b74e0c643205379a3ed4fc", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000010000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x225", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x1572", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x293913aa6fd6784e2dabfa7bdbf08dbcceac77ec746f2beaffe37f5c82ebd6e7", + "blockHash": "0x04b7bb9acaf695da6f2e725c22098a6a6d2216ab3478a9e053526bb50e276afe", "transactions": [ - "0x01f8d3870c72dd9d5e883e8201f508830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c2dbeda6b380ad817656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0142951613bf93db71eba96bb48c57a42168fcfded6491e1229ea2b8570f77e7f01a03dba7195885ae53d62969038775930e5c3836122abd090a07c76596de48a59b3a029534862b9449692777ea4f45389c1ca850bdf164e951c3db834325a39798096" + "0x02f8d4870c72dd9d5e883e82022c0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c2dbeda6b380ad817656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0142951613bf93db71eba96bb48c57a42168fcfded6491e1229ea2b8570f77e7f80a03dc0fc4e572b227c6083e6ad856fc992d5fa235f9fbb320f913d2edf4ea64f0fa02341f3497adae073a51ee0db66676e3bf0d9953a65b539a04eaf1f027880c595" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -17376,29 +17431,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x293913aa6fd6784e2dabfa7bdbf08dbcceac77ec746f2beaffe37f5c82ebd6e7", + "parentHash": "0x04b7bb9acaf695da6f2e725c22098a6a6d2216ab3478a9e053526bb50e276afe", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x51e463c94ba9dfedc74f013b95d9a29f55f140f4fc8959bf37e5744fef64988b", - "receiptsRoot": "0xcf20b8f39841205271cd4ae3ff22bcebb43f26f931e0bf0ad958927e914bbf67", + "stateRoot": "0xaa8508404b0b8c762b662ef018e226d1f83c73c51b84eef67747fdaaa33e9dfc", + "receiptsRoot": "0x0a490da86114d077ffdc597832c806c9215f936ea0e51ceaa334a1782825e1ff", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029000000000000000000000000000000004000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x226", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x157c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x3c64be9f5fc05b3a06c21263201805872058b6dd89f5871f56126074937d7d69", + "blockHash": "0x7181f0084b63db7479c003d7dd4291ca02dae8d4283f82becb53681d47398afb", "transactions": [ - "0x03f8fa870c72dd9d5e883e8201f60108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c909c95399f08d166656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0a344ff63ecb6c6cbbd711b06a84844147910ef79a57679958664abf4af9938d383020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a013ed2516b753d14620bca1a0422f2396eb472cf0d7eaf692644e3f7c2bbb9e4da0335f33a96e11fad5cc14e20505ec96498459e66485ce9949cc2a25748218ddc3" + "0x01f8d3870c72dd9d5e883e82022d08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c909c95399f08d166656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0a344ff63ecb6c6cbbd711b06a84844147910ef79a57679958664abf4af9938d380a0cf8496be36e7255631748864451cff36c50e2fbe7036a76df16e0a59aefc5dd8a0403adcbafeb9d64323127b28e306cf232099d0f120f3975f442972347ff89850" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0xc5ea3d95ee2c22d741f6c48ac6d87e445e826cc8f6d25a1b2c12f3d9a447a353", [] ] @@ -17409,27 +17462,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x3c64be9f5fc05b3a06c21263201805872058b6dd89f5871f56126074937d7d69", + "parentHash": "0x7181f0084b63db7479c003d7dd4291ca02dae8d4283f82becb53681d47398afb", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x1bba34157476fa72f9a3d061f9fb9cf626def503bad27fe5d6b29f4e3d51f021", - "receiptsRoot": "0xf0fdb3e364bbf5d119e2eeed252eef654a0a76118cc40780c49ec0aab44fe863", + "stateRoot": "0x5a29bc7e141a8b5204a67235e6cf2c1bce99f683d255f84745d92148f9a9d90c", + "receiptsRoot": "0x649ed1c0dd1ebcbf96c00305385c490cce0bd53a5131b834fa8fd8db67dbfcc8", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000008000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x227", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x1586", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x9c0e5ad32b88aabd00d4e08f111128f36d2b3b9d00ec205b4deea450d7e20f52", + "blockHash": "0x026fb7db67bd230b10afa06b1c7b20edc1219887a13c0accd594f54aba577ca2", "transactions": [ - "0xf8758201f708830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c448907ad05bd07de656d69748718e5bb3abd109fa03dae5b6b96f83657923f3df7a39f0c556348cdaafdc2d0164a981238e2f802c4a01aea0f93b7403c476e0475b00a54e552ac60c9035d81f549dc394c00e5d61b46" + "0x03f8fa870c72dd9d5e883e82022e0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c448907ad05bd07de656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0f26b2f780c4b92b3f15f1d6e90f7d5a176b58eefea6f0d9cf2f8a0d1f86a139f83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a00ccf3dd0a97645a72eb3926dd694bfa7ff8cde336db1942846b4de7a197753a7a03c34702a7d5ce59948ced0f97c212bffc972d75c29d8b61ca6b943b23a497c8b" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0x4085071556a9ec9d229d1d9b802b3e89cdd093f9f9139ea42eb5abe892541ff8", [] ] @@ -17440,21 +17495,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x9c0e5ad32b88aabd00d4e08f111128f36d2b3b9d00ec205b4deea450d7e20f52", + "parentHash": "0x026fb7db67bd230b10afa06b1c7b20edc1219887a13c0accd594f54aba577ca2", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x8fdbd867ec5bb8ea8003e3d4e44f084399bbb492e18fe9181cd118bd4fa0d8d7", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x23302eed23ec4d3037ed09a5c8d1cb987b85319c0c6b2ee7cd773b629740e9de", + "receiptsRoot": "0xbe2c34b575afb52dadfa7ff4470d2fdf22388347ae87c871dfec683d85f53fda", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000200800000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x228", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x1590", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xee8f988f3c18a72c2abea54699c856a15afdbaeae545924997985cb47210c6d7", + "blockHash": "0x60596113f907eadfb5229325292e44044821a9e22f7e575b24cab3ea58fb5190", "transactions": [ - "0x02f86b870c72dd9d5e883e8201f80108825208944a0f1452281bcec5bd90c3dce6162a5995bfe9df0180c080a04956daf7db75c5ee31cc0222de61402254b0ae5673fa3ecb6f10eae2da9c0f0da046ef206b998dfe4a0fd4211738e9feacb9bbc383b4bca9d8f2f86678c9262fd4" + "0xf87582022f08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c3bf5f7de7fc40580656d69748718e5bb3abd10a0a0ccb3b524b4240095f21c092cafaf4f649981463e6effd560e4ecc03245e2b29da06cf8a83ca8be11c4e6c8aa095255f57bb7898bdb3183ff669d1170abb34e9e77" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -17471,21 +17526,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xee8f988f3c18a72c2abea54699c856a15afdbaeae545924997985cb47210c6d7", + "parentHash": "0x60596113f907eadfb5229325292e44044821a9e22f7e575b24cab3ea58fb5190", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x1dda48a48b4ae196dd289c4b65ee93793862b910a1ed7446434c5f11ae9b6beb", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0xb331683494cf8e7e2b2a4a68164ae46640adcaa324e827dfa62218e36050a286", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x229", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x159a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x90036a13de8b68ad7fa9658cb90a841951763c528de8a3891db006570d06760b", + "blockHash": "0xd168573695101511d7504d9d987c5a0fa7e64b52dbba520aece42e39e9b889b7", "transactions": [ - "0x01f86a870c72dd9d5e883e8201f908825208943ae75c08b4c907eb63a8960c45b86e1e9ab6123c0180c080a0b550fec75bc8acf21764afaa05eb86ee6e4e69353b0ad78d09557614e93d4786a0727f2c3ee4f3f7bc4c42ce9f5237958dc70f61007f90731764de7aeaa8628274" + "0x02f86b870c72dd9d5e883e8202300108825208943ae75c08b4c907eb63a8960c45b86e1e9ab6123c0180c001a0a5daecaa8ba4d8243ee4167aa85b9225f420e7c2c6a131e182dca618d722678ca05e69feb5985a26381b431b80fd5a0bd3ce608c5f44dfc4da0296a1c4534152ac" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -17502,21 +17557,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x90036a13de8b68ad7fa9658cb90a841951763c528de8a3891db006570d06760b", + "parentHash": "0xd168573695101511d7504d9d987c5a0fa7e64b52dbba520aece42e39e9b889b7", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xd758afcb5f2401ee815721c8170216980c0b8e02fd72d239f50d445efb4925cb", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x04145bd0d53de7b5d09b43bfc479edaaa22403d5bba73db923f5e19f3ee1fe3a", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x22a", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x15a4", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x641e4d31a221b340b02dfbe9aa430eab15367721b41a224ad5aaf44d60bfb649", + "blockHash": "0xcde6e6e9437d8d53d9d119f59621d8af4aab0d36357ae361fc39100037289949", "transactions": [ - "0xf8688201fa0882520894654aa64f5fbefb84c270ec74211b81ca8c44a72e01808718e5bb3abd109fa0c004a45a8d6c03d0407993c24893342e0b3d765f3cd2be95c41222f0d5bcdf2ba078eb1e3e86929285260ec472b40b720db7b1df51009c4f614ab18fdf65a33b93" + "0x01f86a870c72dd9d5e883e8202310882520894654aa64f5fbefb84c270ec74211b81ca8c44a72e0180c001a04e47b90029babb8898afda6f32fb6267d7d6a46fd109e268007c4078ed201721a05d7952ca59f6203255e98664242bb052bfffe1cbc5a45a32de744356e521d056" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -17533,28 +17588,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x641e4d31a221b340b02dfbe9aa430eab15367721b41a224ad5aaf44d60bfb649", + "parentHash": "0xcde6e6e9437d8d53d9d119f59621d8af4aab0d36357ae361fc39100037289949", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xc83c6683fac973de49a9b4c8aeda81273118113e44ae6113a15c5c7937283a90", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xa8a3551dbb96af8965635f8a32f91c0b2b215eec518a95f92bdfaa4d88541527", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x22b", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x15ae", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xdfa68efde1f8c73371b729e119655153388ca5404df5f27cb8aef2d5dc49d472", - "transactions": [], - "withdrawals": [ - { - "index": "0x31", - "validatorIndex": "0x5", - "address": "0x5f552da00dfb4d3749d9e62dcee3c918855a86a0", - "amount": "0x64" - } + "blockHash": "0xaf7988749b7c275b2319bbe47c81260f8c3084d77e284db0b00237173851550f", + "transactions": [ + "0xf86882023208825208945f552da00dfb4d3749d9e62dcee3c918855a86a001808718e5bb3abd109fa0882015d7b266b0a114a6d06da722f8b4eb73c1081ea516ef123b498cca88af5ca04c79877c6ae33388b3e79635b23dd69fb0bb4c7f99efdf3d14c700f23efe3185" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -17569,23 +17619,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xdfa68efde1f8c73371b729e119655153388ca5404df5f27cb8aef2d5dc49d472", + "parentHash": "0xaf7988749b7c275b2319bbe47c81260f8c3084d77e284db0b00237173851550f", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x7f9a1949008ffd79638b1722265e65a2ec6e7febf650b5246318eb249aab28fe", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0xcffb3fc3c48a966aaccf3265534a087a069b99b14ebff35fadfc5b76d19ad77b", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x22c", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x15b8", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xe069e5bf125ec3bd85fc691a6e299363e03130bbbdcbb1d4c0e7ed74c44d19ae", - "transactions": [ - "0xf8838201fb088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a00bb0355e05dff14ae7f093498b4243cb3f5ec8b786d9bc58875d08f7dcb7c0f9a030677e88a404292fe6afbdcb47585f66a8ce2ce7e32f6974314733c8af6fe032" + "blockHash": "0xe80952fe3298776700d0d5527b12772000caeafe16823a1d07d023c092aced4f", + "transactions": [], + "withdrawals": [ + { + "index": "0x31", + "validatorIndex": "0x5", + "address": "0x3ae75c08b4c907eb63a8960c45b86e1e9ab6123c", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -17600,21 +17655,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xe069e5bf125ec3bd85fc691a6e299363e03130bbbdcbb1d4c0e7ed74c44d19ae", + "parentHash": "0xe80952fe3298776700d0d5527b12772000caeafe16823a1d07d023c092aced4f", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x925dccff4419cd0be1f34db61ebb25b1bedf06c688bc8dd95845ff1a3af5cb89", - "receiptsRoot": "0xe77c45568257ac258a041df8558ba0bfcf5ba6d92493d955fe531307b348c97d", - "logsBloom": "0x08800012000000000001000400000000000000000000208000008000000100002000200000040000000000000000000000000000000200000000000020000000010000000000000000000000000000000080000400000000000400000000000000000000000000008000000000000000000020000000000000000000000000000000000000000000000180000200000000000000000000000000000200000000000000000000000000000000020100000000000000120000000000000000080000000000000000000000000800000000000000000000000000000000000000000000000000080000000000000000400000000000000000000000000000000000", + "stateRoot": "0xc5b4b364d51cb425a8f27ab133549f2e58fb5417e32e874a442f5d1832a8aaa8", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x22d", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x15c2", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x7d4c7faff291a34dab9ad08cc22b38e3e0623fbd96e53041f1936aefea2d3d01", + "blockHash": "0x0462b045d5e548d1267a9124eede57927ff6653ee26e515e79484a37fa332fec", "transactions": [ - "0xf87a8201fc0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa022d44bf5f520547c3d62b3af2a668c38a875402603b1761ad0739cbbf6d949fba07d7e176f316d43054bfcbdcbd949c9fa509f66b01d4e43017c3e464b4ad3011e" + "0xf883820233088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa00cba1aff982def9dac39bbfdd8f498296e1c67367236597c77165ad0390378bfa06632af5a65ef5f911e0f8e786b5d695d267351987617cd9479d06ed5fe83147d" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -17631,21 +17686,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x7d4c7faff291a34dab9ad08cc22b38e3e0623fbd96e53041f1936aefea2d3d01", + "parentHash": "0x0462b045d5e548d1267a9124eede57927ff6653ee26e515e79484a37fa332fec", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x36392ba06448a6cf31c42cb250684201926f0ef3a52485c34a6b6465e2316f2a", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x641c1debf3055a466f9aa4ccac95fb2d724f2a2e9f3a89e33c356e3c5ed735b3", + "receiptsRoot": "0x24164ae5affdfeb7ac1b0e45fb9580b20c9ebe72f1308f7ae46c04e9a98a62e2", + "logsBloom": "0x00000000000000000000000000000000400000000000000000000000000000008000000000000000000800000000000008100000000220000000000000000000000000080020000000000000000000000000000000000000000000000001080000000000000050000000008000000200000000001000000000000000000080000000000000400000000000010002000000000000000004000000001000001000000000a10000000000000000004000000000008000100000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000080040000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x22e", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x15cc", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x35fcbe1e362b97d634c17b08b78c253df56c0f4a52fdcc1da23c4c56871485aa", + "blockHash": "0xc2379dccca93cb7af1b9495cb45ff56200395f2d0f799afda2cf7d1a8dc2207c", "transactions": [ - "0xf8658201fd088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a0e96d4d5bf4aefc09603bc653170722a3d3f6fcd29ca3d386c9559d7147078ae5a01529eca727370b97f6b345c20f6e92c687d8e75cbe2cf2ad859e79f74b8c486c" + "0xf87a8202340883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a013c9ae1f02d80119784f5303e3ef1b90c0e572b76521c2917586005a14236deba07acf4937f74477bbc4f9b1a7db1562a7388e6d2a493fbf30f7bdb7bbe6b9d034" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -17662,21 +17717,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x35fcbe1e362b97d634c17b08b78c253df56c0f4a52fdcc1da23c4c56871485aa", + "parentHash": "0xc2379dccca93cb7af1b9495cb45ff56200395f2d0f799afda2cf7d1a8dc2207c", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xd15854e44e4578650c11096a7c5dca9372abb9e52fff061a36a4865caf71b224", - "receiptsRoot": "0xcafafc113c46cd8f5bb6742a25cd34b0805b1fae9ed6e020f013acac38019f5d", - "logsBloom": "0x00000000020000800000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xd4bef8c5196a6887ddbdd9c798b43317e23992841c8e5fbdae002664620bbbb4", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x22f", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x15d6", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x944867748f6677c888eeffa2f0ab037f72791f19d4957c1b015300f87e8f6946", + "blockHash": "0xa7614022dce29db83d3fdfda49d693584249cd3719f6981766ee013a59c53df5", "transactions": [ - "0x02f8d4870c72dd9d5e883e8201fe0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c013b74e9ecf6eb94656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0c668aa05d66c2f88a95db12354386f3b6a1722a98aade506e117201f2fd0511f01a0c8ec83bcb1f4c322ab9372efd5360da4dc73819f230fb165b44fc294d1c6d7caa044ea233abe9745a9ea796049df9b6580c6f8ac2cba9a57642fbeb0abea41b4cf" + "0xf865820235088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0f86d215ae7100c55f14c1ec6f53d83c3d1fa777e3e1d9c23839a167beae6e475a01c0b30892286a4ede34138e7df61813bea4df91bf9675cba296e9ca662f3bd9b" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -17693,21 +17748,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x944867748f6677c888eeffa2f0ab037f72791f19d4957c1b015300f87e8f6946", + "parentHash": "0xa7614022dce29db83d3fdfda49d693584249cd3719f6981766ee013a59c53df5", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xbeee5aed5c512fe2aba90434b11ca3cd83cfe2363f9f1e4542b45fc592163f07", - "receiptsRoot": "0xd620721bcdd8db78ee477a81e7dcc0da3e86b50bba6bc734e1bd7fcb760f6f47", + "stateRoot": "0xd6079afb6c2ce2b1207b0ee498ee03c9130f633fa041b07920d04acacf526b23", + "receiptsRoot": "0x7cdaf89496c1a5a3c531b09245bad68268f8c9825175334217f3fa2b65ca8005", "logsBloom": "0x00000000000000000000000000000000000000000400000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000200000000000000000000000002000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x230", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x15e0", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xe2a46fb9f878a562bb0392bec6634965964c742d80102bed78abf111455c1530", + "blockHash": "0xa9a699c07f4409eab9ca244799436f35249c79448cfb16f1daac3ea84453ab62", "transactions": [ - "0x01f8d2870c72dd9d5e883e8201ff08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c1f9e851ca16e6cb9656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0a99b8fb9a23a3a24ef3330a371d081c4158ea1b75c9af3c2bda5440857bc8237019fe363a7a627edb29fd42f641a4694ba154799ce85e5a089f3edb570a69bcfbda0012663e85e981501f5ece5197c12aba3a097cd8de77deedbfef0e9fec5024b94" + "0x02f8d4870c72dd9d5e883e8202360108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c1f9e851ca16e6cb9656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0a99b8fb9a23a3a24ef3330a371d081c4158ea1b75c9af3c2bda5440857bc823701a02c04468982075a831b72edc190258ec5b3892f86db9e97cfce65258e812ed1e3a03ed173c6e01067ad6b4be1d2eb27d49a4b226a30df40193c7aae6cb3d69bc424" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -17724,29 +17779,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xe2a46fb9f878a562bb0392bec6634965964c742d80102bed78abf111455c1530", + "parentHash": "0xa9a699c07f4409eab9ca244799436f35249c79448cfb16f1daac3ea84453ab62", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x789226dabdabfbf7f597dac2cb52db1b2e268ea801b28231c64b7cecfa70adc3", - "receiptsRoot": "0x6c3240fa7b3dad315fd76137e8b64fbc73fdd42666fa325ba022d6515817de0d", + "stateRoot": "0x8d0be3fc6e3043dcb92b33976b33b7136cdf20b5e8d85fcbfa8ee74d9102e158", + "receiptsRoot": "0xf9d700dd528cda36168b7c1b46ab2ad9b3f2d9f8f04ed2464e747e3cdbcdb948", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000080002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x231", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x15ea", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xb229d60b67c1708d3994b81cb282f73ef6d2ae75438e401f4c8025562e2340fa", + "blockHash": "0x25b92c413d927baecbcc7836cd6464336f0a89e2d65a9fa0cfbe8729fb3b2eb6", "transactions": [ - "0x03f8fa870c72dd9d5e883e8202000108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c544caaa25bed802a656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a088edc52ba848622b1d92e73d2c311c1c83420986c621546fbadac23c3428c57083020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a097709dec1bc6016459a45d2525e964c2e6096b513dd70f369034e621f2f40c87a067a4d43475d8fe708b6a474c73678d638d91c70ff39973670da0278a2f522ae3" + "0x01f8d3870c72dd9d5e883e82023708830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c544caaa25bed802a656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a088edc52ba848622b1d92e73d2c311c1c83420986c621546fbadac23c3428c57080a0b586a9f73d5ffc9bb1ce68608c76aaeb65093dcf2b5506ecdfc5a71031ce677fa03c970c8cf4f1668de9c0bcbc91f7efc7227cfab82c441dc23557057ab739fa04" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0x80e9466bece8ddfabc70825bcec4e24aa55e1acf4ede6dc91e58bbd507b89106", [] ] @@ -17757,27 +17810,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xb229d60b67c1708d3994b81cb282f73ef6d2ae75438e401f4c8025562e2340fa", + "parentHash": "0x25b92c413d927baecbcc7836cd6464336f0a89e2d65a9fa0cfbe8729fb3b2eb6", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x84b817485cb14c9eae65f776c34caa5e958edccc2b42a3d7ac864ee5bbc88631", - "receiptsRoot": "0xd66e37e7c990514ad3bbcafb9158eadbce5669b8d56f61675eba2473a8890b66", + "stateRoot": "0xc4be91b8c59b503cab4bc24d11919560692712526990bbf14960dc484e32f1f7", + "receiptsRoot": "0xe7ba570a13b897c5510b99633c11830f998713b3b1f736009bcdf8b43fb2c377", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x232", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x15f4", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xb3b6afe52f6d14dd44a71f1ff185ed96179409250f324659fa1d1abd1b232739", + "blockHash": "0xa57990630fd6f670bb7e9f46d7c3e913b5392a7b13a83e9e040118b5edce4bf1", "transactions": [ - "0xf87582020108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c714a7ce99187d89b656d69748718e5bb3abd109fa095b150f56f03a017ede55787d2b0258ca65a9760df427ff0234099e5e0196c2ea06815159cf1061de7fcd19095e685a4469d8a6efa28d7cd8ed7d19531970d447e" + "0x03f8fa870c72dd9d5e883e8202380108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c714a7ce99187d89b656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0ab5140d25dce39c42d511dba633cde87b45465d48aa4ec211b27de998abbadfc83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a02edc679fb6ed3885ebe5d6bb3bf437381ab42e8cd40409eb57d8de68b7a89da0a0548ae149f4ed6a40f7a033ac18c25055586e1ebaf136839c6b88a1372675c4e4" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0xb60ebee302c2151ccc37af32e3613b07defd9503e344434d344ba3f8331954fa", [] ] @@ -17788,21 +17843,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xb3b6afe52f6d14dd44a71f1ff185ed96179409250f324659fa1d1abd1b232739", + "parentHash": "0xa57990630fd6f670bb7e9f46d7c3e913b5392a7b13a83e9e040118b5edce4bf1", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xa523e6ff0e4803aa8dbe968c322a315db96a3e88d1b7058534df79c7db027dd9", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xce000de5c6f0db7899b3dbce03252e92e3007540ceefb7b66276eee38ac41ac7", + "receiptsRoot": "0xc043e7daa7e45f96db1727335498d81d0b589b81016c3e1d6dbd89fd988b5431", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000009000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x233", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x15fe", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xadafa5a8ecaf727c48b659ef4ab3204554e7cf7b27e69207926a5a62c24fcab6", + "blockHash": "0x1d6f6c4bfa2d734a2b4869d97a28ed74e5ac40595899853e85e98349788a9d58", "transactions": [ - "0x02f86b870c72dd9d5e883e8202020108825208944a0f1452281bcec5bd90c3dce6162a5995bfe9df0180c001a0acab93bf4cb4b97fcd49b3e4df8b1c86c8f11bd672b9fb9745dcd6e544ffafa0a07e7d4a3efd96afa71faaaa62585632f9b490365abd96856dcd992c0c75cdf01e" + "0xf87582023908830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c531a2d567445d0b0656d69748718e5bb3abd10a0a09a98ac819a48f4ea3d4c12bb691465eaec672dddf796189317c9c2066bea7fd1a022eed06705e732be508890102bd1c4e1847059dbd4a27f6d93143cd7d602ea1d" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -17819,21 +17874,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xadafa5a8ecaf727c48b659ef4ab3204554e7cf7b27e69207926a5a62c24fcab6", + "parentHash": "0x1d6f6c4bfa2d734a2b4869d97a28ed74e5ac40595899853e85e98349788a9d58", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x0add3d869b6d31d27b406a0b296ad46480417ec18534319ee366f06f559a7326", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0x3bf8746ca1a5a50afc191189886796323d288227abc154db248a29a72c29eb24", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x234", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x1608", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xdabd6ae95f5c2d68740f3001b8321ff60efcbd343b4c1d27e425b6e1d6dcbbef", + "blockHash": "0xe8c2b0ff9fe420948d5a90471748469f7cd018d8b62b156404626ee33a4f4edf", "transactions": [ - "0x01f86a870c72dd9d5e883e8202030882520894717f8aa2b982bee0e29f573d31df288663e1ce160180c001a0e24f830339f5be384db5c29002a98cb0a34f2738d1c9872e2aa0a29cc0544dd8a033e12812533b46a55b9559ec498b72f7dc1b75ce991e2006e10b5c276a3cdbc1" + "0x02f86b870c72dd9d5e883e82023a010882520894717f8aa2b982bee0e29f573d31df288663e1ce160180c001a0458b87fd7d6396257685ab25480385171ca3bed9eca7289b40c702be82263b63a04aae7b1501ca7450a82f3c2639369c4c13310358ffaf9bf44ff8d8abe3753348" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -17850,21 +17905,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xdabd6ae95f5c2d68740f3001b8321ff60efcbd343b4c1d27e425b6e1d6dcbbef", + "parentHash": "0xe8c2b0ff9fe420948d5a90471748469f7cd018d8b62b156404626ee33a4f4edf", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x965ac1ac3accdab7930879f4ee756efac7007fb4576f1da9cd6c05563079ea2e", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x5baf3090db9bba2e50d74a2b0e97d3aaed18413163635d322d717d4844a2f272", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x235", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x1612", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xbc4039fe1b1fe6767d379b48649f0208eedd6211fd09012c410e96231a70bd32", + "blockHash": "0x96419b60000d8e4e9815500d8e3d69eef3c19d36997bdaedd42cfabf174ae505", "transactions": [ - "0xf8688202040882520894e7d13f7aa2a838d24c59b40186a0aca1e21cffcc01808718e5bb3abd10a0a07258d0e5116a06fac217d7dd9e68efdf1dd0a41cfca170707ca91e13b66a47fca07124963ae3315bbf6d55b6f57b6b9d0cc9e99b89359e1f80a25f7ab119ac6888" + "0x01f86a870c72dd9d5e883e82023b0882520894e7d13f7aa2a838d24c59b40186a0aca1e21cffcc0180c001a0ec6af985b7f6670ae589b8b15da1147ccc88af6bb495de6ba682258cd1c0d9faa009958afe72b0ad14f51323cd570488978d8b98b3cb03234f08b4dc0e3fd70bab" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -17881,28 +17936,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xbc4039fe1b1fe6767d379b48649f0208eedd6211fd09012c410e96231a70bd32", + "parentHash": "0x96419b60000d8e4e9815500d8e3d69eef3c19d36997bdaedd42cfabf174ae505", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xce63da29607372e5fb2bd2e3cfc40ad9c32a06a0d75e94b450ece4fbd1782dbc", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x695baba1a16890cf56027a4abec52df8010f389b85c159e4beeca0edefe7d1c6", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x236", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x161c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x83db531e70791b6207c14af0b6321145a00614c977b70fd0668270988de4d5b6", - "transactions": [], - "withdrawals": [ - { - "index": "0x32", - "validatorIndex": "0x5", - "address": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "amount": "0x64" - } + "blockHash": "0xffafac142daa1e5dfaa588553a29883ef5d6b9a56408401cc20dd60121467861", + "transactions": [ + "0xf86882023c08825208947435ed30a8b4aeb0877cef0c6e8cffe834eb865f01808718e5bb3abd109fa088128ea9ba6ec872f8a52ec25fbacca092f5cee67c79cd0cedaf1d9e4097a719a04b62d924ecf4b8c8a432f8ce37a9696014fcb741c6cb197dc0a4d51f80620760" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -17917,23 +17967,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x83db531e70791b6207c14af0b6321145a00614c977b70fd0668270988de4d5b6", + "parentHash": "0xffafac142daa1e5dfaa588553a29883ef5d6b9a56408401cc20dd60121467861", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xfba0205e6afe3530dfd7f7ca2f566e5e3fec41a1b72768cef1bd130e0896db9d", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x5398054f6728892e01100f6038e1bc552df25943d10ff4dbcf8fffed8910ed5b", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x237", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x1626", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xd790766e32a204eba62eb8748875d63e58f290375cb77e1a8e06cee26be50aa0", - "transactions": [ - "0xf883820205088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd109fa08a3293f922745d79e457a90657c7800d24062b70cbd24731cc509cc035a826a5a02418be783d16ad760c9008ff9bc552ff330273c1b77300054a827e1e537078f0" + "blockHash": "0xeb9bc3c34aeff870450eef73debeab5d6a4e853fd5e94794de8de70f3328400b", + "transactions": [], + "withdrawals": [ + { + "index": "0x32", + "validatorIndex": "0x5", + "address": "0x84e75c28348fb86acea1a93a39426d7d60f4cc46", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -17948,21 +18003,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xd790766e32a204eba62eb8748875d63e58f290375cb77e1a8e06cee26be50aa0", + "parentHash": "0xeb9bc3c34aeff870450eef73debeab5d6a4e853fd5e94794de8de70f3328400b", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x02e8449319a691d4372e57402adf68b09a0c127eacf25dd8c5d24b99ff592f1c", - "receiptsRoot": "0xab5236843c6ec7a9a5c1c857233c1a31227c51fff87b08748241e6e356e656a8", - "logsBloom": "0x0000040000000000000000000000000000004000000804000000000000000000000000000000000200044000040000000000100000000000000000000000001000000000000008000000000000000400000000000000200000000000200000800202000000000000000000000000040000000000008000000000000000000000000000000000000000000000000000000000000000000010000000000000002000000000c000000000000000000000000000000000000000000000000000000000000000400000000000004100000000000000008000000000100000000000020000000000000000000000000000000000000008000000020000000008000000", + "stateRoot": "0xfa0ad05fbd9c5cee03dc844c85e34894cd8e358275a8fb4695d6ed4f7e886ccc", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x238", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x1630", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x5f7355f8b08daee6ee6be9e9522ecedee0db5282463952021b5eef1bf8fc6c7e", + "blockHash": "0x168cb5014662382595da9de5a5d07020a00f6871e24ec2f12e4d2c01200a1021", "transactions": [ - "0xf87a8202060883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a0152333c4db61c12a484f33619b7494425c4fb730fa90c830e7440f1a51185003a02373ac712cabf3578803bbff9524b1eca00561fbf30a54e5a6d635eb3a1d42b2" + "0xf88382023d088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a0996d3dd760a40ac198ea0625ac932a0049423f2ea1b0badff9790bdd3581de80a0405373b8832cc078d5449bd5d864b000ea7d5d05311a002b11f86354d133f606" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -17979,21 +18034,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x5f7355f8b08daee6ee6be9e9522ecedee0db5282463952021b5eef1bf8fc6c7e", + "parentHash": "0x168cb5014662382595da9de5a5d07020a00f6871e24ec2f12e4d2c01200a1021", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x9f1f21f14844bbf78578c02bfdab936943f011175e11d57192f110a015e6c69e", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xb65bbb0de3f324d1479391e73300b9a96d8ef970393b9c75f4b13a9f55426510", + "receiptsRoot": "0xc2438923e0df877ca3d800892d179f7cdc17b2846caae090c64ded60b4758d92", + "logsBloom": "0x000000020000000000400000000000000080000000000000000000000000000200000000000000000002000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000480000000040200000000000000020000000000000000000000000000a0008000000001000002000000000000000000008400000000001000000000400000000000000000000000002000100100000000000000001000000000000000000000001000000000008000000000000000000000000000000000000010000000000100100000000200000084100000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x239", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x163a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xcd23cbad2ba375c546161adcaee6c4c81319c164b1ad8466811b7490b95e286b", + "blockHash": "0x12d8f16244cd8fd6024d151e6a2070009c315dffa38ee8c5330e1bd3d4c3e550", "transactions": [ - "0xf865820207088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0258584a1147b37a17be31c06af2090dd5eb443f969c020363b2f2cdc459a9596a0282b4f2574e1ec52f6c5289fb36aa4817f07f8fa2b55357f8c918accad542069" + "0xf87a82023e0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa05bcaf8b4aabd360569527d984095742ff50fe933205b334015f9f2d4724a63e5a03e07aa87b6af37e9e8d3fea351ecef37f86685ae75a72d0dd99d79c889f0672a" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -18010,21 +18065,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xcd23cbad2ba375c546161adcaee6c4c81319c164b1ad8466811b7490b95e286b", + "parentHash": "0x12d8f16244cd8fd6024d151e6a2070009c315dffa38ee8c5330e1bd3d4c3e550", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xd5fb4dd1825b5b107a175ea86e678c666d0e3a7856767e9ea03a8d6fe66852f8", - "receiptsRoot": "0x40e99d7d453a379f204ed089fd42ece7ec4f5231d41153766f315683085eb5fa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000040000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000409000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x2e488aafed1429cc1d6e1833a29b29a042a00665358bebc6cfc6bae35da3a455", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x23a", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x1644", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xf1357f71ed1cdbcf8c1a31552f1223403b9d85b44dd4ff2c9a3683ee440c95c8", + "blockHash": "0xae534ee68fddcbb56a54e1389963b1b91f2bd81903668bc912fb38e8222616ee", "transactions": [ - "0x02f8d4870c72dd9d5e883e8202080108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c364818558262ea3f656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0fc6dfdea8f35e8af49faf38c0164a3deacd65c3927eeece6023868f32fd382a701a02b4279a6f9ec69f63621cb880a47c59e094f6fddf49b9095256bcef44d629798a0674c21917344a22cee20997863b3a49fa450283aa7af2f6b0777b734190d4e05" + "0xf86582023f088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a06c258143226b3e0b083ceb085ed33504648cb3a1131e5fad2688cbfcdd9302f9a03178f9023079da66e69d8b7011168bca212ced59b8e8273b6b5ab0c606d309cd" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -18041,21 +18096,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xf1357f71ed1cdbcf8c1a31552f1223403b9d85b44dd4ff2c9a3683ee440c95c8", + "parentHash": "0xae534ee68fddcbb56a54e1389963b1b91f2bd81903668bc912fb38e8222616ee", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x827c4203000de525ba92f76614d6007fbd4696e3a62bc974c3dacba3f6a9817f", - "receiptsRoot": "0x0531e3172fd7f36101c399b4954b96f5e3ca6b52b24b166dc8014ed3ec2a6c5e", + "stateRoot": "0xc87653c55d2584811df8ca04b51e47c130dcdb90a6d10184b8529130af87694a", + "receiptsRoot": "0x7bd993dae053a05a7cf4a17e754878feed89e6549f4797c790a975045fccd4af", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000200000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x23b", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x164e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xb69086a5e21ff6ac0b0177b825eb4ac57307f19211d34d5d27f270d74ca07a17", + "blockHash": "0xd17d8c2fc653829318949d721e152c1578ac66a99c02fea2ed7e9902345888ca", "transactions": [ - "0x01f8d3870c72dd9d5e883e82020908830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c7ec75a9a44cbd37a656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0b9a419e057752857f289694284890ff1fcbfbe5d736b5e52bb8568e077f4988301a0612f7a0e06dd7918c6389d3bd4f8bc57e10b32d70da74e884f0dda3b53761209a066d37136bacb647658ec9a497ba10f778bfb78a68f0a1d812d010e56705984d3" + "0x02f8d4870c72dd9d5e883e8202400108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c7ec75a9a44cbd37a656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0b9a419e057752857f289694284890ff1fcbfbe5d736b5e52bb8568e077f4988380a0d8eb62de0723c4d3071e1e7338cd9dc052714d483705501cf2d7a43ede1ab2efa0691aeb7be0289e154e0db27233a86db840d3df0eb68c3226ae31f2667a85ec61" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -18072,29 +18127,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xb69086a5e21ff6ac0b0177b825eb4ac57307f19211d34d5d27f270d74ca07a17", + "parentHash": "0xd17d8c2fc653829318949d721e152c1578ac66a99c02fea2ed7e9902345888ca", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xfc7105c3a5bf1b58cef7558dc26078ae7adc4a72d55093a1af5a25c1efd40b3f", - "receiptsRoot": "0xe963bcbf726070b5ddc6f9d75c199509949be21a06df053d721b3483a55e0b30", + "stateRoot": "0x34be0e307d6f9095e613d7c1c4ede1d624ff2ccfa921847110a3318499c3aa06", + "receiptsRoot": "0x0e59486f8a1b78699db78104935292fe0707ea9c742817a63491084a27cd878c", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000001000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000800000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x23c", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x1658", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xd5c1878d16190ffce6abc0972a9250ab129a383fecf447dd5e1e5fe9c560e2b7", + "blockHash": "0x8d7e0a0e7b3ae1c2af06dbe35c75cb89f39ee82eabdcc3dee776c4528e5f44ae", "transactions": [ - "0x03f8fa870c72dd9d5e883e82020a0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038cdfd0fe3a4aba411e656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a07a536b71187079aaf5462b7d483063e3d25cea8e3a6790ebdbb284666fe8106883020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a011d5b637e77b5987aede42c7762b7fbd44f55cd97820b01c4601b58fc40686c4a059ce5c1474f7dbdc38706a8663fa0a2d2b22f7cf0aabfcb68de52b863d87dc03" + "0x01f8d3870c72dd9d5e883e82024108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cdfd0fe3a4aba411e656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a07a536b71187079aaf5462b7d483063e3d25cea8e3a6790ebdbb284666fe8106880a0f6d1633a6e9bf948390d5892e601e41435c9d8e194d2420e09d0d2f46498a9e0a052e5d636c533da0e88e37ba8dd2578610f9169b94721f4ff9720a434732fb3ac" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0xa662fe4e7f5b359da22861957ebabef233d14df689a0a378333f9caaae8ddcc1", [] ] @@ -18105,27 +18158,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xd5c1878d16190ffce6abc0972a9250ab129a383fecf447dd5e1e5fe9c560e2b7", + "parentHash": "0x8d7e0a0e7b3ae1c2af06dbe35c75cb89f39ee82eabdcc3dee776c4528e5f44ae", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x85ac092ae2e24e0ddaf4dad90aa0c735d6a3986bc5cc14cb2aee394ee03f5974", - "receiptsRoot": "0x6a9f814aa655c257313a8eb715a3a9b779ff613959c7527c5a3e7b839425a1eb", + "stateRoot": "0x147f4144141326f7f9ae8c80266475516cc2ec5b684b0917dad44c659a9893e8", + "receiptsRoot": "0xc640d110a9d3c3320caf892ed640488ade7bb415e95636395222ab8540b62a92", "logsBloom": "0x00000000000800000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000004000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x23d", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x1662", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x7adf3774b7bd3f89b0948e1ddbbf300835f06dcee2f437e09ee4473df6c8a07c", + "blockHash": "0x1d2cf4804fe3b07289794f1cb5227e51d697cad91934eb7c4705834e36100bb6", "transactions": [ - "0xf87582020b08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c48fa07464a4e8d5b656d69748718e5bb3abd10a0a0db116037fd0b9637c96295f7c48bc7ab5362b2fe6b64a7fe14a816fb948be9bfa00e01886ea233240e06d6c3d593c31d257f47ae07ba00f8cc91ab4471a83cecb6" + "0x03f8fa870c72dd9d5e883e8202420108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c48fa07464a4e8d5b656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0c558392238c2d11cdd04a6ae37065f3541a22140500f92c0d8006ff95e8df59583020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a029d3c0911a45d36d03af347109f14a7446680818bb9026183118c333c4c07d86a0598c061b1a983b2ac6f74268f8c3dc4bfb87b7ac815ab6103dd7bd7be1d3387d" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0x4e99f494a9bb40f134a5ef00de1bcdf3f971b37c873330d5aeb3d49efbcb4c00", [] ] @@ -18136,21 +18191,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x7adf3774b7bd3f89b0948e1ddbbf300835f06dcee2f437e09ee4473df6c8a07c", + "parentHash": "0x1d2cf4804fe3b07289794f1cb5227e51d697cad91934eb7c4705834e36100bb6", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x168521f6122464c3f1a43faebf1d77414c95c5d95a87201b9bd00437195c19b7", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x3ce5fb93422fcf699bc95fd8778f03bbd2b4a584ffa01bb9f70e88f3fe0a671c", + "receiptsRoot": "0xb1ad8fb2618c7819ec0d8ff2b6931220689bb87ef72ab6dd77f1a41420b1ac0c", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000002200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000009080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x23e", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x166c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x2dfc4f087156df89e8f26744590b923f3a81642defd298dd1a1db5bbce0b3d89", + "blockHash": "0xf90b5cc6dac74d3bc26ea436c5009c72a78b680483bba81d842d5500cf2cadcb", "transactions": [ - "0x02f86b870c72dd9d5e883e82020c01088252089416c57edf7fa9d9525378b0b81bf8a3ced0620c1c0180c001a0a42fb001ff2a98cf4adfc09b23851b6fb8da636779221bc8b41c346091630e0fa049a5f535ef66a2f57688fbafaee8d90671f6231df0629f00de594d1bef8728ac" + "0xf87582024308830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c0676fa58a1c69ae3656d69748718e5bb3abd10a0a0a98fee5db4ca354081a61973239ef94ae57943d10cb07136e4d8fbb92dfe569da017ec1654d447d17754d34c0eea157cb503aba5e67b6dba2c31dd9b7aef1b00ec" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -18167,21 +18222,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x2dfc4f087156df89e8f26744590b923f3a81642defd298dd1a1db5bbce0b3d89", + "parentHash": "0xf90b5cc6dac74d3bc26ea436c5009c72a78b680483bba81d842d5500cf2cadcb", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x4202c11970a82d82c8fee99ca6add1ec9866f1ec626ddd4bf865f4762580bcf6", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0x50dc0734b1c45d6c8d624c8773a23461205a777f6846b4817e26cd87647cac5c", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x23f", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x1676", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xe58a461ab85b4e2208262ab6de81621a9fe3c96e4eadb9253e7baecdec571434", + "blockHash": "0xda50bf0b60a87259fb867f9ed72c9b70defa034f7579ef5d8b3b1fdc0dcef8fe", "transactions": [ - "0x01f86a870c72dd9d5e883e82020d08825208944dde844b71bcdf95512fb4dc94e84fb67b512ed80180c001a03f3d6d379ab516c497b0af6290227424b16953bbf968837762326ac2f290bac1a006aab01c6bdfcee9a191a5c9e874e6f34035aa41b07b8785483ffc00b705a8eb" + "0x02f86b870c72dd9d5e883e8202440108825208944dde844b71bcdf95512fb4dc94e84fb67b512ed80180c080a0d1f25aa15ac65ba71d17caeceaeea4a0e095f92175ae2035770d1e4e7d86e714a0158a76f98ee1a2ba361fbb825d373ed56e790b07a09637c7f8d7fba072a025f2" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -18198,21 +18253,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xe58a461ab85b4e2208262ab6de81621a9fe3c96e4eadb9253e7baecdec571434", + "parentHash": "0xda50bf0b60a87259fb867f9ed72c9b70defa034f7579ef5d8b3b1fdc0dcef8fe", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xd5f511f8949fd8dc7d1098d4c4ed5ab7f9147c89d4235efe097844de896bed23", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x652ae3ffb65dba74e57debeae4c3f989a8d5873e8a4b62674ba0c19108b04664", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x240", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x1680", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x0bdeb401cf2ad8a1f33f3e6a71602b0720182bc5a290cbf92a20ad5a47b421df", + "blockHash": "0x0ed725064a1263c0361d176ecc01bd8f3282fbf917f16c7acc8d74da1a076d5d", "transactions": [ - "0xf86882020e08825208944340ee1b812acb40a1eb561c019c327b243b92df01808718e5bb3abd10a0a05a23960f1d1161a098f5641967203fe3edb3c7e42ee612a474396843253189a7a01e0088b2a97fb0295f0d618ade3f3969d8148fc6577023ae0482060a0f872280" + "0x01f86a870c72dd9d5e883e82024508825208944340ee1b812acb40a1eb561c019c327b243b92df0180c001a0517ec55d421f419f0e343fcfa86577353588322a74e91bddfe81dbace50a8ee1a039516532a256e54763b0026a5527722b1f7aa18a10a023c3860841b67c9196d4" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -18229,28 +18284,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x0bdeb401cf2ad8a1f33f3e6a71602b0720182bc5a290cbf92a20ad5a47b421df", + "parentHash": "0x0ed725064a1263c0361d176ecc01bd8f3282fbf917f16c7acc8d74da1a076d5d", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x101b820600d1c50ee651d71c08332c9c5fffb5be36dfc5e605adfc7d2c135d65", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0xa8d21ab2906d9edc878981252da0147788dd70314a77405e31a613a5b6e6fb30", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x241", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x168a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x29456e95da920f3dbc36b3dc0a926f2dec210b800550386ca672ed6110b169c6", - "transactions": [], - "withdrawals": [ - { - "index": "0x33", - "validatorIndex": "0x5", - "address": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "amount": "0x64" - } + "blockHash": "0x6c84eb9a9f855cc6e5d2e3a2e3745e58a19f3dc35dc4d4b87e03fd8be4541313", + "transactions": [ + "0xf86882024608825208947435ed30a8b4aeb0877cef0c6e8cffe834eb865f01808718e5bb3abd109fa0a04c4303a6827047f885f5ce098244f44caea3ec02cb19f78fc815761b11ce15a065f4f3fab3c6b51b870a275a7099dac199129d91f96011295d7f3ee43b351811" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -18265,23 +18315,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x29456e95da920f3dbc36b3dc0a926f2dec210b800550386ca672ed6110b169c6", + "parentHash": "0x6c84eb9a9f855cc6e5d2e3a2e3745e58a19f3dc35dc4d4b87e03fd8be4541313", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xfc527558007c4f087e899bb1b473615a09e153d997c6cc52fd0a6620f88d6dcc", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0xfef13c4295d27b16ab0e667de806b4cecf97fcf5cb22757d9d53319ae5c05ae1", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x242", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x1694", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xae6208b2d4c5f776a63eb1e4dc138b366387fe7ddecf72fd98130637bf65dfeb", - "transactions": [ - "0xf88282020f088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a0a57ec1616eb73d62f45ea8a0a64baa948e495d7d227b19fd2a1a8ae15e1583569f1aef5b444ca71d6e75d73f714f9bbc5af70b6c4c0919b43dd7711d010d38f6" + "blockHash": "0xdfe776d8d16b551a7020bdb98ccfbed0c74ce701b7da68a2124088f2661a3592", + "transactions": [], + "withdrawals": [ + { + "index": "0x33", + "validatorIndex": "0x5", + "address": "0x2d389075be5be9f2246ad654ce152cf05990b209", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -18296,21 +18351,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xae6208b2d4c5f776a63eb1e4dc138b366387fe7ddecf72fd98130637bf65dfeb", + "parentHash": "0xdfe776d8d16b551a7020bdb98ccfbed0c74ce701b7da68a2124088f2661a3592", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x84f3f8d900f4fffe9bd7cedaf36f2ce7782b849d48687b2b4928e7b2f9c97416", - "receiptsRoot": "0x0db8ebc21dbec5d968112dd938204da0a80726a51093c6550507fd204d7ba3a7", - "logsBloom": "0x02000000040000000000100000100000000000000000000000000010000000000000000000008000000020004000000040080000000000000000000000008000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000020000002000000000000000800000040000008002000800000000000000000000000000000000008008000000000120000000000000000000800000000000000002000000000000000000000000000400000000000000000004000000000000800001000000000000000010000000002000000000000000000000000000000004", + "stateRoot": "0x6d5ed717142863823c1e1a30822027887222f2e890c1e108595382f6168b62c3", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x243", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x169e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xbba5107c05a512e72c49b459b20a6ecdc1cfec225f866ef045c9a3693df05905", + "blockHash": "0xff3de971bda54ed67b27bd4b95e38b9045f21d23c4b3b1613def488d9826e293", "transactions": [ - "0xf8798202100883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a02db5572b1b643362370466278086633f4a8b861f4cd3c66fec25129b6f67ad639fa072b90382203dd402b353b789d846eccf6c56c88c49469b852233677fbaa1" + "0xf883820247088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a039df9a0e8de2224bf52aaf601ff7bad23f0934867dd7f1363a51849c6e781c62a06eff52b6c11453d75259640c321523ed37e8263826df260da5bbbdbc2cf3a39b" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -18327,21 +18382,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xbba5107c05a512e72c49b459b20a6ecdc1cfec225f866ef045c9a3693df05905", + "parentHash": "0xff3de971bda54ed67b27bd4b95e38b9045f21d23c4b3b1613def488d9826e293", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x1451a8d4cd68bbb4d5d6f4fe56ad0ab8b35af1200daa855eb3737484c4196b9f", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xdcde1a92d0a85b6a47fc83c03ba46bc2d46cc74e208666bdfe3a5e8e50ed1099", + "receiptsRoot": "0xf69d56acdba1da2116fe7b0ff52cea51d28e294fb1137e9766983df99550c415", + "logsBloom": "0x02000000000000000000000000000000000000008000200400000000000000000000000000000010000000000000000000000004000000000000020000000000000000000000000000000000000000000000000000000000100010000000000000000000000000000000000000000000000000000000000000000000008000000000000000004000000000000000000000004000000000000000001000000040001000000000000400020000000000000008000000000000800000000000000000000000000000000000000180800000000100000000000000000800000000000000000000000000008000000000000000010001020000000000001009000800", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x244", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x16a8", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x626d2bcb3645a3cab73403328051faad33be5e5f5f75ff38e195b77dfb0fba01", + "blockHash": "0x689a76ccb80461e78e22e1997c949bb143882516f7db6ec6aeb1062342881540", "transactions": [ - "0xf865820211088302088a808090435b8080556001015a6161a8106001578718e5bb3abd109fa0a96441d65104c23cf9a7088dc28637f66e0622e6b1e5255df248ee585f2e1b31a078dd2974918e32b1927eb9287a7707a78a8811f95522a812266e254c06dbe696" + "0xf87a8202480883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd10a0a030798404d7e574a0b486ccaeb48204b05953314a7fc90a94e161025c06ed2caba01f5c18091e4e21d0a9020534f8c9b1196140a632b752b788cb0721740a2cebd6" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -18358,21 +18413,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x626d2bcb3645a3cab73403328051faad33be5e5f5f75ff38e195b77dfb0fba01", + "parentHash": "0x689a76ccb80461e78e22e1997c949bb143882516f7db6ec6aeb1062342881540", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x9e6b0afec3d1916e27584af48d680684c7ebd341dbc32150e62191b6e1567cb9", - "receiptsRoot": "0xf0305f035bddf00f19ac42d5ccf9c28b3c82c1aec51c2140e5134160855bda60", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000002000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000001000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x64f2b3af837014cc23fdcf675c5954f171432c9f8e5e55c20c5500a05c0673df", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x245", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x16b2", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xaf6d014836a41c11af83a95a92d5324c0dd0e063a6feda19a05966c97cbeadf0", + "blockHash": "0x179654e16a3900b68bb66927ab2e714430ee0eadadf1930eb6073454bfe66d72", "transactions": [ - "0x02f8d4870c72dd9d5e883e8202120108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cfd2bb460afdb41a7656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a014ec3dfb63100132cf23ef71b80689146033fc6ceb9f8c0f0a65ef93cd18c2c701a0b9ab2ed269132f6bcf5993e88b5a2dc4ef5570c0b458f3298a2fe5b52ffa72f0a06749f3b679e3b44c0719696e00ff6b617236313c0968bd2a57bb8071aa6c9171" + "0xf865820249088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a08c673b248fe7fa166d33b9597135ac842aeaa2cf3af7e62532c629103c211cc0a0047bdd9a697f1e5be98aecf488f95e7a04f443e6f00daf280e82f533d2e703a1" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -18389,21 +18444,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xaf6d014836a41c11af83a95a92d5324c0dd0e063a6feda19a05966c97cbeadf0", + "parentHash": "0x179654e16a3900b68bb66927ab2e714430ee0eadadf1930eb6073454bfe66d72", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x1db89cc805b90fb11a5ecbcc4799cd83273d928d594710e61b5b3f9f1c0a236a", - "receiptsRoot": "0xccfd2a7a120d603bcbed46bc9f503dd0b3b4b143fe3968b0d072ff5f576bdd5c", + "stateRoot": "0x65959aa2ff931be2daf44495237c367cee6c6fec1af6b2d6d52cc983fadc9ee5", + "receiptsRoot": "0xb1244d83d83209f04cfa439f7bee0ba45cd1717a5d43b67782ad7026c0d4d510", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000202000000000000000000000000802000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x246", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x16bc", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x6268abdce6bb3bee101c9e848666f3522cf429cab4725f23a27a5eb9575ed2fe", + "blockHash": "0x7a4bcc5016b6d39420221e1206b50128e0efe3fee6a1c5eb573e6bedaab5f215", "transactions": [ - "0x01f8d3870c72dd9d5e883e82021308830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c93e6b57cd7fc7d47656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0e0fa1a4e967a01f4a84aa6715b0977cc111d3cc0834c5d04f0f1d87e0d561a7101a01ef6a9871216401c4675b1e0fd92fa9f3e9852afe2b6db70b677a848a9fee53ea04088e3e07660ed373cf7c1cccc9006fc0606725d9f8cf0e806c7648033092b2b" + "0x02f8d4870c72dd9d5e883e82024a0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c93e6b57cd7fc7d47656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0e0fa1a4e967a01f4a84aa6715b0977cc111d3cc0834c5d04f0f1d87e0d561a7101a0587405becdd9f7f7b949ea6524e45b1fbb5f9f0f2a9c65c0115cafc935b665efa05cae49e4f84edcceef753265da15b95cb5642d45e39119883fde73bc755cf6ef" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -18420,29 +18475,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x6268abdce6bb3bee101c9e848666f3522cf429cab4725f23a27a5eb9575ed2fe", + "parentHash": "0x7a4bcc5016b6d39420221e1206b50128e0efe3fee6a1c5eb573e6bedaab5f215", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x981e30545692b2c9117c021ba3fd7200ab656a0516acce07ce55671afb03f178", - "receiptsRoot": "0x1f2cb774b67f97bda6ed769189bba6aa75e9b1255e3e2737494c6731cd4dbcbd", + "stateRoot": "0xaeb918d8589201b296ed6a99d6ebe6db00c29dfff95dbafbef8eb673e88790f9", + "receiptsRoot": "0xd26fd26453a9b2409f607a2d805423998851f65f00bd96ec3a7bab0b8314fe72", "logsBloom": "0x00000000000000000000000000000000000000000000000000800000800000000000000000000000000000000000000000000000000000000000000000000000800000000000000000004000000000000200000000000000000000000000002000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x247", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x16c6", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x5f5a1ffa3df60840b186c814fe10bee8d745a195f68174d5097067663eb692c8", + "blockHash": "0x54d398355fd128ea6d1db1e790364b184845a3687dfa213ac446f7d298755717", "transactions": [ - "0x03f8fa870c72dd9d5e883e8202140108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c171fa5153d9de7dc656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0a0c2e429d47e77e9b7c98c1aa4aefb731206f41b64a6587678905a86d14a7d7583020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a06c389f2f897e70da12b4b3f34239da178f4ad032d13217b485a72c39257d4081a059985e5a30367433b076881ca953326c2c205ac46a46b5a5c5b3de8af8bff067" + "0x01f8d3870c72dd9d5e883e82024b08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c171fa5153d9de7dc656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0a0c2e429d47e77e9b7c98c1aa4aefb731206f41b64a6587678905a86d14a7d7501a03a036c24dba63089c6a07f0f722f3e19df2d4571d2a15f06566b9feeb0be9d90a059f82d91f48682b9f2330f33dcad8b3a28535173358773e94444c418448a7f51" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0xf48ee127fa2d3b4a69eff4f11cc838cf34b88ea4eb595db690e2f098af6dc64e", [] ] @@ -18453,27 +18506,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x5f5a1ffa3df60840b186c814fe10bee8d745a195f68174d5097067663eb692c8", + "parentHash": "0x54d398355fd128ea6d1db1e790364b184845a3687dfa213ac446f7d298755717", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xb0d405e8c5e405de5557c8129aeb800b257c8ce69d6e85aac49969b2412d8c89", - "receiptsRoot": "0xa20442a8b2cea953b63f35f3702d29b408aa490d1cbb05ed89f116110422444f", + "stateRoot": "0x97b30e98baf08c3cb8775680eb83d94aed2a81be867506bf42757d32ed1f465d", + "receiptsRoot": "0xeb1a9ea66d2a50f24352c84749d44eba91e4bea2d92e5ca4df45c4033a66f032", "logsBloom": "0x00000000000000400000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000200000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x248", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x16d0", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xb43bd5c412948cb43408ac47c85d080b9bcdcecc982ec14aa3a09dd531edbda6", + "blockHash": "0xc52e636696619f0055d30d50b17d0f5a62537fa775dcd349d3948956c57a578d", "transactions": [ - "0xf87582021508830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c1bea227fe2612720656d69748718e5bb3abd109fa0ab1b2a24caee27f36c27c4b9d6146de80abc99d51fc459b4fa40c6639497beb1a035b0e865c5e6c2246bfb766bde2c9b9af8d1fa737efeda5f0c9c6594fa615739" + "0x03f8fa870c72dd9d5e883e82024c0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c1bea227fe2612720656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a069626497767f58c222726a6a3c65050bcfdbb9346f9e5d146ef02bf59275b3d283020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a031f0892dffde4213fe0284ac6420ef191b3aafc4857a03cb45f31f8568f0b28ea0368d809ce4f97e3291908864a932be0c231f197f067c7b1a68bb75fdc8b01109" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0x0c047872d9588bf22e89ea7ec207e8be8486d0bfa775d147ea49b25a9847b3c6", [] ] @@ -18484,21 +18539,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xb43bd5c412948cb43408ac47c85d080b9bcdcecc982ec14aa3a09dd531edbda6", + "parentHash": "0xc52e636696619f0055d30d50b17d0f5a62537fa775dcd349d3948956c57a578d", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x7640efa3ea726c17a2a644d3f633e4872f488073eeb9d1d0fa7d6a76da8de37b", - "receiptsRoot": "0x005fb2a0d0c8a6f3490f9594e6458703eea515262f1b69a1103492b61e8d0ee2", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0x12011fc0bb202064b37e2073c3d16bff439bbb9c90c6cd20fef3226dcc887e86", + "receiptsRoot": "0x5a6a0dc6cbea4cdd8a1cdb1ea36a5b7e07330b3c819b58e776b3701ca28aab50", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000009002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x249", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x16da", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xfea440ef23de659e22508daedb4d4dd91a5bb39df9d3f039a24cde8ffa6527e4", + "blockHash": "0x6c72dd1012068c32cf36641b1564e48296fb121ab7a9a9baefd5c28416d8d054", "transactions": [ - "0x02f86b870c72dd9d5e883e820216010882520894eda8645ba6948855e3b3cd596bbb07596d59c6030180c001a0143c22b16b7469abc885b8df50817d05005239f4a88f1e36dec1acd976aee532a0239432b2462737698c72307a848e65f79e2aaec778ee225064553b9cd6c47024" + "0xf87582024d08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028ce44dd8ca1b4c2263656d69748718e5bb3abd109fa06ca241263493e263b18d58aa1f5db96bf7bac49aded5de38168e81fe54fc5d42a003b6588ca3402ad0b50cef554a1397d5c3f3a1eeb6d8d1741c478d9cc44ec5ce" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -18515,21 +18570,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xfea440ef23de659e22508daedb4d4dd91a5bb39df9d3f039a24cde8ffa6527e4", + "parentHash": "0x6c72dd1012068c32cf36641b1564e48296fb121ab7a9a9baefd5c28416d8d054", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x30298c9c7cdf0f7300b7e99e37cba2246fe79b05ff63d6cddf56f0e120e92a38", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0xb08cd3fc698ac319d37e19de2b37050bc499752841e2b7c7ba5063dedd0f4328", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x24a", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x16e4", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x5bda26af5e60d0a9bdccc94a59421b97f0d82cc828a117643b021ca4dbaa4372", + "blockHash": "0xa9697418504b9f328eb3b4bb3c4a82ccdad93df60ba4f9666a9ed9d4b61215af", "transactions": [ - "0x01f86a870c72dd9d5e883e82021708825208945f552da00dfb4d3749d9e62dcee3c918855a86a00180c080a0066d4c75c7fa794a218f4da41cfe23b5ae88fd68d035e330accc26dfe734d3a3a0057990c5f8dd5982ab7701725beca4af30f550063e131145dc0469dc56e62a2f" + "0x02f86b870c72dd9d5e883e82024e0108825208945f552da00dfb4d3749d9e62dcee3c918855a86a00180c001a0a2f63e0b0cca4620f870d79af0002a98b9cbb9e064c8b81ef0a843131cc49a67a07e9c2a4e7e425a4e875c025d609cbd3aae4f72d219664c7a494fc2226ac98ea4" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -18546,21 +18601,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x5bda26af5e60d0a9bdccc94a59421b97f0d82cc828a117643b021ca4dbaa4372", + "parentHash": "0xa9697418504b9f328eb3b4bb3c4a82ccdad93df60ba4f9666a9ed9d4b61215af", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x3464c5fa5ece202889ee11c62b4a5ae4ddc886286f322b86fa5297f630750b77", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x66cdb0536095f974bdbdbaff5fe08182728bbfe241e49645d10986c5867b3f8c", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x24b", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x16ee", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xbd1d9841873dd0a26419f9a183a78370dedd826f922adeff78afef05811f8f71", + "blockHash": "0xeccc52333b224ed9aa4a274c7c2e6ad7043da8fec8cbd1841c4df037d272a070", "transactions": [ - "0xf868820218088252089414e46043e63d0e3cdcf2530519f4cfaf35058cb201808718e5bb3abd109fa076571d850861e7b1df4aaa542979d07e265dcb85c2f6dff257793323843a1c40a05bd6105d6a281fd6b83642c6c3ccf034586fcc2e7acfd3128112ed3e1e05d7e0" + "0x01f86a870c72dd9d5e883e82024f088252089414e46043e63d0e3cdcf2530519f4cfaf35058cb20180c080a089fb7c079dc6325a8c1e2101776f25d0eaadfd9c5f170e1bc727b75d795a3003a008c2f5bf7e8ec06b9d5db13ddaaebfbf765e117298919e7fdbea7a250796c321" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -18577,28 +18632,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xbd1d9841873dd0a26419f9a183a78370dedd826f922adeff78afef05811f8f71", + "parentHash": "0xeccc52333b224ed9aa4a274c7c2e6ad7043da8fec8cbd1841c4df037d272a070", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x44d0fdb391789dad1ba58d79be1c608a15e0b85f0c56a3af181ac8d4b1c8a561", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x545d513c53bddb5d4002b4e88a2f11d15f63ff38ab9ef94b3df8a560a19fa362", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x24c", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x16f8", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x5f40f6bc01be52c0a6f0f800c4120e73ae430d2a0e2cc6cfd6958ef33aad54e6", - "transactions": [], - "withdrawals": [ - { - "index": "0x34", - "validatorIndex": "0x5", - "address": "0xc7b99a164efd027a93f147376cc7da7c67c6bbe0", - "amount": "0x64" - } + "blockHash": "0x0e033ec5d1b65a42204e9caf992cf062bf74c8a309c9b2e769b858e366650d94", + "transactions": [ + "0xf8688202500882520894c7b99a164efd027a93f147376cc7da7c67c6bbe001808718e5bb3abd10a0a03e549b7984b29b1df2092f5bcc53a93bb13f9217d18040bd5f3f9ba073b1714fa01824f6d408f8ac57237b06eefffef459ea8db23afd08bc788cf6c4e78f8c9a9f" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -18613,23 +18663,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x5f40f6bc01be52c0a6f0f800c4120e73ae430d2a0e2cc6cfd6958ef33aad54e6", + "parentHash": "0x0e033ec5d1b65a42204e9caf992cf062bf74c8a309c9b2e769b858e366650d94", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x8ac4b662fee7b371a7a1677ece50909770c14a335438a5d0a2c1b45b7c0c7e35", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x7db9c63aa71032059d5073a74cfe6ea27ab1c24ec5600bc7d2513af677438810", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x24d", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x1702", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x5528f6ef151d9a9f71dae57e39b1cd2c5c6e5c7e0cd3a419afbee06e313d9f47", - "transactions": [ - "0xf883820219088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a019c2fc75ed9320542c35ca28052512936b9954b33a2707282c709bd3103e6567a04f66fe0576ef6b87d76061f4b50262f2b410bd91ed81ed6ef20161440c302b75" + "blockHash": "0x787a2bb58c6e1d4ac5d91e6fb7bbf1713c1e902ca3b86d920504167e9704e574", + "transactions": [], + "withdrawals": [ + { + "index": "0x34", + "validatorIndex": "0x5", + "address": "0xc7b99a164efd027a93f147376cc7da7c67c6bbe0", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -18644,21 +18699,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x5528f6ef151d9a9f71dae57e39b1cd2c5c6e5c7e0cd3a419afbee06e313d9f47", + "parentHash": "0x787a2bb58c6e1d4ac5d91e6fb7bbf1713c1e902ca3b86d920504167e9704e574", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x00b336f0e8aaf230ebe5b4cc09829786b2ccb66b49bafbd29cb019b16745cbe5", - "receiptsRoot": "0x2451e6fbb51a782a188493c5fe74bfcbb29e3e0ab32a5c3b0d4f12455ee15966", - "logsBloom": "0x00000000000100000800010000000000000000000000000020008000001000000000000000000000000001004000004000000000000000000000000000000000008000200000000050002000000000000080000000000200000000004000000000100000008000001000000000000000000000000000000000000400000000000000000000000000100000000000000000000000000000000020000000000000000000000000000000000000000000000000000008000000000000400001100000000000020000000000000000000000000001001000041000000000000000000000000000000000000000000200000000000000000000000000000000000000", + "stateRoot": "0xc3c5a6d6f2c1b107494fd143c13eb9609aa63f80edc16015e1e0ed8b7bf7a66b", + "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x24e", - "gasLimit": "0x23f3e20", - "gasUsed": "0xfc65", + "gasLimit": "0x11e1a300", + "gasUsed": "0x19d36", "timestamp": "0x170c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xdff8f0703a0840e4d227f77f46348869d6c8b8c30b872137b26a9e2842914410", + "blockHash": "0xaa4611fb72fb0a85c2d1bc1083c160f1f316538c7f58ef556f4340ea20068ce1", "transactions": [ - "0xf87a82021a0883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa081f24574bb6d5fd961496bf2911b1dff1157f69a39cbda71261b5812716324f9a0611602fa072852d98a4b658d42cb9be3ab41a857244cd38449a2ca2843cfb2b6" + "0xf883820251088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a0f2a14202ed7395347d395732b271818fa11116b0d3f85e1e6f5ed333fb6343f2a02d0cf49b1eb8efce93816ce11f7832d15a01f0842a80f60577f3fd1e25cf3c74" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -18675,21 +18730,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0xdff8f0703a0840e4d227f77f46348869d6c8b8c30b872137b26a9e2842914410", + "parentHash": "0xaa4611fb72fb0a85c2d1bc1083c160f1f316538c7f58ef556f4340ea20068ce1", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x8fd5156899dd8a8847796b80fae5cb28aa68432d14c7982faeb871c452efb7cb", - "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xb132ef8988775a208bdf2b6899c8055ed01edbe8a9d79ca2cf8c42e9c219084f", + "receiptsRoot": "0x63da246261c11b79d6b2257757fe9bc25a2e8854f3ef308b3389316f6b6535db", + "logsBloom": "0x00800000000000000000000000000080000000000000000000000000000020000000000000000008001000000400000000000002000002000000000002000000000000000000000000000000000000000000000000040000000000000000010081000000000000000000000020080000000000000020000000400000000000080000000000000800000000000000000000000000000000000400000008000000000000000000000000000000004000000000000080000000000000000000404110000000000000002008000000000100000000000000000000000000000000000000000040000100000000000000000000000000000000000000000200000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x24f", - "gasLimit": "0x23f3e20", - "gasUsed": "0x1d36e", + "gasLimit": "0x11e1a300", + "gasUsed": "0xfc65", "timestamp": "0x1716", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x4ce9196d2fbc4bda9fcb9ab61e86167c9e1b547e873a7e5226f922b18db59953", + "blockHash": "0x5e35d6b8ace034f15f9ea52f7f1a6a1ec774e7a4234137c6c5bb913dfd733971", "transactions": [ - "0xf86582021b088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a07da1cc208fc8db65c8310f6a595651f7b9a44d36fb7855cfe1f3021236af7b12a0154d8dea9bb629b9574b8f738435b4a4d91b93637a0725247025d9353f4b5435" + "0xf87a8202520883011f588080a54360005260006020525b604060002060208051600101905260206020a15a612710106009578718e5bb3abd109fa0b160861a308a8186409f97802c5e41436e66e14606a74bffc5a64d53c0fc5538a05e314c022138bfe5565de55118d90d5e749fc772592746bc21cbdcaf5d663e2c" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -18706,21 +18761,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x4ce9196d2fbc4bda9fcb9ab61e86167c9e1b547e873a7e5226f922b18db59953", + "parentHash": "0x5e35d6b8ace034f15f9ea52f7f1a6a1ec774e7a4234137c6c5bb913dfd733971", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x2b1d33774c57b125dc481095f387ec1e12ffc071dbd98027f4aa545c74fe7b20", - "receiptsRoot": "0xb09954e33355e8b7fea3b4fba9111d225dfc44667568a936f3a27675f05b4555", - "logsBloom": "0x00000000000000000000010000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000210000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000", + "stateRoot": "0xbb279d232e60a8f01c32bec723e64223daee4fd285506789e1051cbc25f03aa4", + "receiptsRoot": "0x8e47c51ae3cc2e7f29232aac553163472046f2668ba19aa17733e156999a8234", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x250", - "gasLimit": "0x23f3e20", - "gasUsed": "0xca9c", + "gasLimit": "0x11e1a300", + "gasUsed": "0x1d36e", "timestamp": "0x1720", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x5ba98af8b68bbf0d86879ec911858300293e7bbe347abc02548c5084ab5a0d3e", + "blockHash": "0x0a0ed30330099aaed4d9fc919882376e3624d21bc3b39691003081f575f6b27f", "transactions": [ - "0x02f8d4870c72dd9d5e883e82021c0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cbf89b8d49503bdf3656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a05571137d48f7d081e62051a6bbca9d1e25c93ac6f84b7a3bc146f126ac80928d01a021b98f88ca8c35bd6d21a37b6a2519ec36c67c517cef173141ac82c2eeb611a0a021575bbda347f6e57138b220cce4ccd9664eaf6dece4b2f99045267c81da9a5e" + "0xf865820253088302088a808090435b8080556001015a6161a8106001578718e5bb3abd10a0a065082b051f83ae94104b9807a153a05cb7eb2836f39078467253e7f0d534672ba068d1f2159b8c6045fc516e3c55dbf768a35f3134d307096629de881164298ad1" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -18737,21 +18792,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x5ba98af8b68bbf0d86879ec911858300293e7bbe347abc02548c5084ab5a0d3e", + "parentHash": "0x0a0ed30330099aaed4d9fc919882376e3624d21bc3b39691003081f575f6b27f", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xfed11f6990ebf4a1e995149d9531df1b9c75eb063347ee56a56b12cdca216ee7", - "receiptsRoot": "0x0656eac35536632b283e78d198105757c78d5ca745dd7c155d6f4e18b6c85f53", + "stateRoot": "0xa6f4f81752da75e187320b73c4cc6ef5333fc0d46c06c4a5f925cf4a8be7411a", + "receiptsRoot": "0x8354d2ef1f62c7c7a783ea323b1289332872be764a4f9fad5bdb89a847fb2718", "logsBloom": "0x00000000000000000000000000800000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x251", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x172a", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x3d33f3036b1399cf00cc8966e85b8553b5d7d4127ad121f382df765661a6627a", + "blockHash": "0x3f445c59eb76afc237ab0aff24e4afece553617597903e7c54e2e52535f5f69a", "transactions": [ - "0x01f8d3870c72dd9d5e883e82021d08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cf395506d95a7654f656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0701960547b78067b00883157f5e9fca3bbea742385129f0db7e1e69ce445dfef01a0187066d8724b64ae34dee9c210e49d16ad5ba5b4c2341ebec15c6b5a4362c66ba02d3b474d88899bad59ba824935a87aec4c6b59660a6408728b157db70eb7d087" + "0x02f8d4870c72dd9d5e883e8202540108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cf395506d95a7654f656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0701960547b78067b00883157f5e9fca3bbea742385129f0db7e1e69ce445dfef01a090eb34a1e3b22bc5f3751af1df6b9b965d574c80aadb09c86472283753a4052da065feaedaa76e0a9b777e3f442714d305d25146b79cb2389f094bea6fe359013f" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -18768,29 +18823,27 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x3d33f3036b1399cf00cc8966e85b8553b5d7d4127ad121f382df765661a6627a", + "parentHash": "0x3f445c59eb76afc237ab0aff24e4afece553617597903e7c54e2e52535f5f69a", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xeb44311abb1ba7528b75d2454b74e669f9e3f62e7cf84642adafebca15c46a38", - "receiptsRoot": "0xc23ba9703a5d1c83cc099524b48c9c1f1d9cdb06c970a9d26200d8643a6f74ec", + "stateRoot": "0xb2c8af99b02731886eacb5fc4d5e43bb3127b0325129d8d6cd3764c2a3d72f7e", + "receiptsRoot": "0x089a9f710854e80061a0fcd4b802e49f829d4564f2fc88ceec2251af4cc62791", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000002400000000000000000000000000000004000000000000200000000000000000000000000002000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x252", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0xca9c", "timestamp": "0x1734", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x3ed14e1e4d79669a7104b244f12d0dbbda1873230eddacca3ddf00d5e278be9b", + "blockHash": "0x5b913043ae15b19475bdf3bce3000c885837ce744816ee34aa4c4fa13c29e273", "transactions": [ - "0x03f8fa870c72dd9d5e883e82021e0108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038c8bb77ba856e3d12f656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a048ca1081e747a7f831228b894dd5fc401d64c6496a2b9e578dd3c59b8f0df2cc83020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6880a07968587982d4ec1553c6256dcd929997fae662a778950a5cedc82d409ece8f46a075a549540d89b304904d14d4af525bf0a6989a7c63602e5c5390da5451a0927c" + "0x01f8d3870c72dd9d5e883e82025508830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028c8bb77ba856e3d12f656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a048ca1081e747a7f831228b894dd5fc401d64c6496a2b9e578dd3c59b8f0df2cc01a0cb42a8410b26080d7376b8def1c490bcfa0ca62594d82e6b68d18380eb2cd3c7a019def470d2019119f86d96a8d24bb2670661c787a4cb0cc7bdc4a59193f70c19" ], "withdrawals": [], - "blobGasUsed": "0x20000", + "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, - [ - "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" - ], + [], "0x18104f198e6c84cec4875b8b6d2734b6b9b8ce4bbbe158adfa81bfdb239595e2", [] ] @@ -18801,27 +18854,29 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x3ed14e1e4d79669a7104b244f12d0dbbda1873230eddacca3ddf00d5e278be9b", + "parentHash": "0x5b913043ae15b19475bdf3bce3000c885837ce744816ee34aa4c4fa13c29e273", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x415e45d750fdc4726e897237d64fb00fec0992a1323c4bce1af1d3d526ff8043", - "receiptsRoot": "0x7925339d2acc12b05a73a129f8b2737689c6336bd6e01f999c561249cbe6fe01", + "stateRoot": "0xcce9580e6a5a277358bed1921548dc0141515b0e3923ce9ce3286359bfbaadc3", + "receiptsRoot": "0xe8f72ee3af379d8d2d326d7d0bc69d74d371407807cd8ca51129af59bc1d94dd", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000400000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x253", - "gasLimit": "0x23f3e20", - "gasUsed": "0xc268", + "gasLimit": "0x11e1a300", + "gasUsed": "0xca9c", "timestamp": "0x173e", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x93a7231507f57e163e3b2e48a47132fc1eff83375b041b46a35e61a090ded25e", + "blockHash": "0x00cd4351d6d5b3636ccb5424b17c5a8b33e881f83ac158694c1f198b70290d93", "transactions": [ - "0xf87582021f08830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cdbc56807623499cf656d69748718e5bb3abd10a0a0d18bc40c1e3a5823d9f91a0b507e49b77eadf82ed88419fce974ac277690920ba053a0eacf14f315dc03e6bfc73c7d61571ebd6eaa67b5e7889c6ce1194bba7310" + "0x03f8fa870c72dd9d5e883e8202560108830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df038cdbc56807623499cf656d6974f85bf859947dcd17433742f4c0ca53122ab541d0ba67fc27dff842a00000000000000000000000000000000000000000000000000000000000000000a0ee0b894f33a9643c94e4e2237077260f4191c5bf6bb3c17a2212b86af6f67df483020000e1a0015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f6801a0a545f5e30bc665283edb8248dcac5114a99c8464afcf2f69435871fb45ede974a07b1ab9cd75c4e5e222ca96204393a181bfec664116be58b4f1ed72889642df01" ], "withdrawals": [], - "blobGasUsed": "0x0", + "blobGasUsed": "0x20000", "excessBlobGas": "0x0" }, - [], + [ + "0x015a4cab4911426699ed34483de6640cf55a568afc5c5edffdcbd8bcd4452f68" + ], "0x64f9ed7df2e19a503f0b6f5b79e4d7b512c66623c28887e7f8968750f081f06a", [] ] @@ -18832,21 +18887,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x93a7231507f57e163e3b2e48a47132fc1eff83375b041b46a35e61a090ded25e", + "parentHash": "0x00cd4351d6d5b3636ccb5424b17c5a8b33e881f83ac158694c1f198b70290d93", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x30a4cff5811cdeb2add55e03102e2cd5cc9e7750540d186bb4a2a165167401e7", - "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "stateRoot": "0xcff585af11146778da3d20655de97626de2e292b6db3e9c3f6feee73dc2ff9fd", + "receiptsRoot": "0xa3560e3cdfbff1482ab2bf3f71bb70a7b7d912f65785d863f6b937f212cdb999", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000200000000000000000000000000002000000000400000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x254", - "gasLimit": "0x23f3e20", - "gasUsed": "0x5208", + "gasLimit": "0x11e1a300", + "gasUsed": "0xc268", "timestamp": "0x1748", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x42f57c5994becd0c778c625c4564b288f2ddd5523bf3505dcba11d4f31e317ea", + "blockHash": "0x84dfa1c19923082db1a37ae307ef33a005c1ae987763f3537078e44a91f72cef", "transactions": [ - "0x02f86b870c72dd9d5e883e820220010882520894d803681e487e6ac18053afc5a6cd813c86ec3e4d0180c080a0061a9064cafcc779bebfc3410463e27e57ef4b69b13b063d79a9a258a363d917a0279a658e80bd6527683f521da84fd287422105c3bddeff127c20420dde99b7f6" + "0xf87582025708830186a0947dcd17433742f4c0ca53122ab541d0ba67fc27df028cbee48aed349a6783656d69748718e5bb3abd10a0a03b7ea625f55336efa74b3e1d5df85cd6a73899201dae3e0d777eae286069b7b5a00d59d0faeebbe85d9e7c86c5d2db39a9f01fc707b6690230811d8c6414686695" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -18863,21 +18918,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x42f57c5994becd0c778c625c4564b288f2ddd5523bf3505dcba11d4f31e317ea", + "parentHash": "0x84dfa1c19923082db1a37ae307ef33a005c1ae987763f3537078e44a91f72cef", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x571f92dc76ef8c4ec47f5e496abe8c7182c5c4331537aeae052f95c2521b28c7", - "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", + "stateRoot": "0x4e2712c48c9758696c0619d7cff4034b34f17ae40d1fad8da2697b3dd479af21", + "receiptsRoot": "0xf78dfb743fbd92ade140711c8bbc542b5e307f0ab7984eff35d751969fe57efa", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x255", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x1752", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x05b8baa80ba3a0782ff6cade5129fb4e3cc8733de5d8da918d2338245ab76b6c", + "blockHash": "0x4f62f1eb606efbd760b849b83f48b5080b0045364da18111e5f81faa74bdf648", "transactions": [ - "0x01f86a870c72dd9d5e883e82022108825208947435ed30a8b4aeb0877cef0c6e8cffe834eb865f0180c080a017fe88f6088755cd0167e286cff24eda1e4d2d4cdb035a966036882fc5ce8e92a045ead0434b8343a5db8eefa40b4f88b7191c771313a83550aae586d18be22036" + "0x02f86b870c72dd9d5e883e8202580108825208947435ed30a8b4aeb0877cef0c6e8cffe834eb865f0180c001a00bfb57a904239393551f7406c67cb7bba19973813d6a38d0c6b1441212a8772ca06b94c83d0cadf6dae03d601459712527754ee348037dbd203bf583e3908754c5" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -18894,21 +18949,21 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x05b8baa80ba3a0782ff6cade5129fb4e3cc8733de5d8da918d2338245ab76b6c", + "parentHash": "0x4f62f1eb606efbd760b849b83f48b5080b0045364da18111e5f81faa74bdf648", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x6b8f10ea0c744a4333a8ba86f8204a648ba50145d4263af8d1ce8d35bfdcc6e3", - "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", + "stateRoot": "0x87930359636f6c38717ff53ce11fff3d2dfe40300a1c005581fd9ece966db920", + "receiptsRoot": "0xd3a6acf9a244d78b33831df95d472c4128ea85bf079a1d41e32ed0b7d2244c9e", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x256", - "gasLimit": "0x23f3e20", + "gasLimit": "0x11e1a300", "gasUsed": "0x5208", "timestamp": "0x175c", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x7d4219f429001b5f014e933f9a36aa865d09955de79a8292aac8a00e75ba0f03", + "blockHash": "0x6845189fc5fffc30575935e9f8db4c343bcf5001360241b5af6a10c91f5b1003", "transactions": [ - "0xf86882022208825208941f5bde34b4afc686f136c7a3cb6ec376f735775901808718e5bb3abd10a0a0256584d11c94a5ec9fc723cbd9961e7a2569a48a23bc1eae505a74b46065f33ea0120d196163359143ae54697ae076c590ef82df3a89e275147f807fa12a9b34d9" + "0x01f86a870c72dd9d5e883e82025908825208941f5bde34b4afc686f136c7a3cb6ec376f73577590180c001a0e90c53bb3a6b15d32df5ad188aebcc3cfa97a2456a9d16557d3fe649b16debeea01ddee1a867f45c916ba53d89c4dce859812cc7af6a820a44cc6ff58a251464e6" ], "withdrawals": [], "blobGasUsed": "0x0", @@ -18925,28 +18980,23 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x7d4219f429001b5f014e933f9a36aa865d09955de79a8292aac8a00e75ba0f03", + "parentHash": "0x6845189fc5fffc30575935e9f8db4c343bcf5001360241b5af6a10c91f5b1003", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0x2335c84c9cbec7fa7456b92b69afcb95a075433eaacf4aea36c3eb4b9564a333", - "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", + "stateRoot": "0x62d156f5ddab09f393224bf2f3932e87a93a6c39679aca2f580234fcb4dfb3ca", + "receiptsRoot": "0x056b23fbba480696b65fe5a59b8f2148a1299103c4f57df839233af2cf4ca2d2", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x257", - "gasLimit": "0x23f3e20", - "gasUsed": "0x0", + "gasLimit": "0x11e1a300", + "gasUsed": "0x5208", "timestamp": "0x1766", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0x65151b101682b54cd08ba226f640c14c86176865ff9bfc57e0147dadaeac34bb", - "transactions": [], - "withdrawals": [ - { - "index": "0x35", - "validatorIndex": "0x5", - "address": "0x1f4924b14f34e24159387c0a4cdbaa32f3ddb0cf", - "amount": "0x64" - } + "blockHash": "0x7e80093a491eba0e5b2c1895837902f64f514100221801318fe391e1e09c96a6", + "transactions": [ + "0xf86882025a08825208941f4924b14f34e24159387c0a4cdbaa32f3ddb0cf01808718e5bb3abd10a0a0343078ff0a2a584258302df6ae1f2571d9ba89d1f7f3fa8fec4c0611aa2d39f1a04a2a53b393aaa218a9ef7a9f7075470a98f4be9d2be19999a4eb3e1ff437880b" ], + "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, @@ -18961,23 +19011,28 @@ "method": "engine_newPayloadV4", "params": [ { - "parentHash": "0x65151b101682b54cd08ba226f640c14c86176865ff9bfc57e0147dadaeac34bb", + "parentHash": "0x7e80093a491eba0e5b2c1895837902f64f514100221801318fe391e1e09c96a6", "feeRecipient": "0x0000000000000000000000000000000000000000", - "stateRoot": "0xce423ebc60fc7764a43f09f1fe3ae61eef25e3eb8d09b1108f7e7eb77dfff5e6", - "receiptsRoot": "0xfe160832b1ca85f38c6674cb0aae3a24693bc49be56e2ecdf3698b71a794de86", + "stateRoot": "0x8fcfb02cfca007773bd55bc1c3e50a3c8612a59c87ce057e5957e8bf17c1728b", + "receiptsRoot": "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421", "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "prevRandao": "0x0000000000000000000000000000000000000000000000000000000000000000", "blockNumber": "0x258", - "gasLimit": "0x23f3e20", - "gasUsed": "0x19d36", + "gasLimit": "0x11e1a300", + "gasUsed": "0x0", "timestamp": "0x1770", "extraData": "0x", "baseFeePerGas": "0x7", - "blockHash": "0xce8d86ba17a2ec303155f0e264c58a4b8f94ce3436274cf1924f91acdb7502d0", - "transactions": [ - "0xf883820223088301bc1c8080ae43600052600060205260405b604060002060208051600101905281526020016101408110600b57506101006040f38718e5bb3abd10a0a0b0889fe12fde37694f828cdb251c94d1e3abed2fd46e321ceb40d28e9747cb85a048aaf8240ecfb1382b4bc47b52ed705786f67b1ae71fbc2a00eb0169f43d0ec5" + "blockHash": "0x44e3809c9a3cda717f00aea3a9da336d149612c8d5657fbc0028176ef8d94d2a", + "transactions": [], + "withdrawals": [ + { + "index": "0x35", + "validatorIndex": "0x5", + "address": "0x717f8aa2b982bee0e29f573d31df288663e1ce16", + "amount": "0x64" + } ], - "withdrawals": [], "blobGasUsed": "0x0", "excessBlobGas": "0x0" }, diff --git a/cmd/devp2p/internal/ethtest/testdata/txinfo.json b/cmd/devp2p/internal/ethtest/testdata/txinfo.json index 254b59d346..4cbecc1bc7 100644 --- a/cmd/devp2p/internal/ethtest/testdata/txinfo.json +++ b/cmd/devp2p/internal/ethtest/testdata/txinfo.json @@ -16,12 +16,12 @@ "randomstorage": null, "tx-eip7702": { "account": "0xeda8645ba6948855e3b3cd596bbb07596d59c603", - "proxyAddr": "0x417fe11f58b6a2d089826b60722fbed1d2db96dd", - "authorizeTx": "0x09fd47ebbdfe396288c03b04fd643183097559faff558e5cfbf64cdc1a224d4c" + "proxyAddr": "0x4dc5e971f8b11ace4f21d40b0ede74a07940f356", + "authorizeTx": "0x64c47531984e4099548b480b5af0bce04ab89d29f2fe7ae36e97ba68d688539f" }, "tx-emit-eip1559": [ { - "txhash": "0xaceca283c1a65deea29cfb78389fb2dc90df8ac9426d63d83c9fe67cb0cb7839", + "txhash": "0xf3b025eaf924500c53bc0b9f0f5733d56b59b7dade1df336ba8b39c83d92ac57", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x7", "indexInBlock": 0, @@ -29,441 +29,7 @@ "logtopic1": "0x3569f740e521d8bb11c5b72660dc96272ad66bfd811ed918c3a9e02acd4ade8f" }, { - "txhash": "0xd463f0b9ea6530b1d24d8b8b7021979d48dac8452ed957fb722263a5a1b5ed08", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x14", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0xcb55d89f2ee070d017b426876d6072d91c2a7311ade9a1bed2f8200127ec380e" - }, - { - "txhash": "0xe131203a45328fe320b0820698177e8ad2f3b3ee8c552787ddb1db725a2c4484", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x1f", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x73286395f2a86bb5537d9b45ca7c681044645f31475a11d49285d6a0f028b8f0" - }, - { - "txhash": "0x4cee3118350175e8ddab6edac9672440c672baea4c9eecd53e4dd411a978a990", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x2a", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x35f96bc70aa62a539fa99d9153b0f8aaa4594abf70cc8a8d9018e04e39a17982" - }, - { - "txhash": "0x0cdaf3e63a21eacdaf83b844b5ee98f7ea540667d68f6c527af01a8724bd23b1", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x35", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0xefcb86facadbec33b8779888975eacca8f44a9073a845521617f1fb30e1ac818" - }, - { - "txhash": "0xd2a4dda75edef4c514a21ca9167f310fe3d296497ab78e66a2861d07dbe38585", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x40", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x905cfe802dc4c667312ea08fdbe97798b88cfb11049ade2b18ad9001e8b6dd7c" - }, - { - "txhash": "0xfeb2fe04b5241685c79ee42b624b2144a8c6e2871e12d2da75d39b03a9b9a950", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x4b", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x0d968817f6ab6815faa1501ac1eafc810f4bc9b7423abc4f1bd5e65e791b4e0b" - }, - { - "txhash": "0x3d08d1fdf8a7b74fe2af54dcff575b87ff4c0203810df3647ba2a02793710b5e", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x56", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0xa0634d80c0a702c2b06dfe60ace0d8f788b99406f1d2ac44ad3a26faa3fc1464" - }, - { - "txhash": "0x8be5109fe8dddab4ee47ee4ea8e5c1973eeedcf13749be4e4fca93d9c0550a6e", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x61", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x50495437ee69f7b12c5d6eb55cdcd8f5ce12a2eac21a2a42a7549e9f5289b1fb" - }, - { - "txhash": "0x37d1d547768ea14ceef7274f5f24c8bfeabe795faf8626556a6688a4b72485a3", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x6c", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x59b1019e8b01471b1dd478e65c30667d2d1780ed0c8bf5fc784b1413789b2f82" - }, - { - "txhash": "0xf2fc33ca3b9e09c698e75ddef6db493d606edc4d36803966341cc0937be3dcb1", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x77", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x47cd31a1b89686fa610642222d2da6119e54ee8ca761bd01a649e3759e47746c" - }, - { - "txhash": "0xe6cd7289688ee233a5cc20add1ce439e3faee022bb954c80b84b4ce3c84690d4", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x82", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x562f817652b4478bc1e434240cd21e00774a5a1210833cbf0225273e2b98bae2" - }, - { - "txhash": "0xda6e57b6ed17f0591bb5313cc927800303bae5fcb20507a1eae0d5c24b4da809", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x8d", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0xb9f03edd278ccfc90e45785c1fea3f972618a32899f836dd4fe0e63eaf8c7c40" - }, - { - "txhash": "0x3e01b65976317255bd0ebd2ed6e506c7c44671e5786302052367a9d9c5fe1b70", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x98", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x72be914df22404e1ed45a8224b52201a77605d52065746a00af5f60980fa4c99" - }, - { - "txhash": "0xfc6bafe4ad86d5d2343cdcaa2d695050931b1d2a49a63e5be4deccd97b84bcaf", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0xa3", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0xff5c526fc525d03cecce39f4ec167af09f80525e2d44e60ee4df33a357b24ed2" - }, - { - "txhash": "0x687bb7707e54385064c6b22425f9ad06fa0377ee68b8bab7ffe34f592c79b8d5", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0xae", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x87fc0239418406958902bcd8e059f9ddc08fb2683a4be0cfd47b1eb97418be1e" - }, - { - "txhash": "0x20add83f7f234cace1af3d3bfc50e28ad885767711f4a143f397b09359999353", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0xb9", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x85c0042b81b23b846d1e4881b0131b4bbff774dd9bdece2e74fa92ebdb053c34" - }, - { - "txhash": "0x5133df1193a2f8e63c0eee29b4cf93edad7b35ec68e5bdd214d959096b330aa2", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0xc4", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x32984cfbb954e0815427570f4ceaef21a3691026950e5ad80401232f687620e7" - }, - { - "txhash": "0xa2c5369f2abed72c2a9826e79228b372e4b1a387e5832965af5d0d874df68576", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0xcf", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0xd34d30c2584168001b907965762f784cb4337381aa8090ae36bc66bd515849b5" - }, - { - "txhash": "0x82abb81ce6873ac4e3dda7b2276c80923283f8a43671eed167b41720f6bdbb27", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0xda", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x3982f6a73961b17f67a84959ebc42a5a3ebdd1faa925399f3f276cc2de65f2fb" - }, - { - "txhash": "0x302d4582613dfd96d4c9e18bfecb1017f40a8d8313ef13356e1885575d21622f", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0xe5", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x782a285a3a645a32202a71e713e4a813bbaef9f50ce10e4caa0122c110d86bf6" - }, - { - "txhash": "0xaab104ba3538ee8a11349279ac0ba9374cff8b325fbbadab6bac24828f297a49", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0xf0", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x44dc9099d91b074b843002013672df4de9f691cf60546fa74eccafa9044a75a2" - }, - { - "txhash": "0xc6c2d288432ce16555d12b522398b07beb749eb44f6162c4d71c90670b59df79", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0xfb", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x1bf804b21bbd284f3f59e4862747fabb1d91cd202d99df811fbcd650c8916ef1" - }, - { - "txhash": "0x205e93a639805b8104b073a1aac798821403d8deeac62a463f934df64907808f", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x106", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x628887ea9304aeb7f3934543b9d14ab4e7e5cd422ba572d39d6ee10c33045345" - }, - { - "txhash": "0x64e12e4bcceab36795d18fa5758676bd96d4f6ae943c206bba9782dc96c3ef6b", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x111", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0xee181b97fd68754f6245c655a0a0686e8d12aa4eac5f1d059e7e3b8d6a924073" - }, - { - "txhash": "0xfce43c4ea272fb22e6443782eee4d50c567c17e7e9def4573569778f0ac8558a", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x11c", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0xf0ca8a88096a033508993a424f4e40ee1d800f62390dfe4ed5dd74a0f6785e25" - }, - { - "txhash": "0x92457c1dd22ebbf0c6b477646b4efa376d5f5c4a55b8cc267e84304b61ca2449", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x127", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0xd2dcfcdea157f70f8422558eb02bdc6a503cf24126f8f2dc2b52a644f5f02271" - }, - { - "txhash": "0x99a7fc49256d1f8092db5990270645ab9a4d96b49fb9224bafe6fddb7f6f86f0", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x132", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x4d4855c520c09f3435e2cb46ceb4d2a12df59c127a1f2e871e7e9e8203fd6ce1" - }, - { - "txhash": "0xcf272615d5e4bf4555cf867154234f5df2e230442c1c87508c051e407e2811d7", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x13d", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x8a76d1e2fd58cc0018aa306e83990d74d16ba9aeab4794595fc72551f0465476" - }, - { - "txhash": "0x26501c0425d7865224b5b38b85ec90d07881f213813c81f85aa863c94109bd64", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x148", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x7a63090121e41c76eee07564883abe3bd839fb20a0d2513bc9bc524f6c16f88a" - }, - { - "txhash": "0x49249dfc575b61369ae47f58f81cd66315038672a912cb900babfa535e52ed9f", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x153", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0xc4f8d20ccba0b50d46d9c87f28cebf8c165fced694a2b34412a4b6153b987a17" - }, - { - "txhash": "0x0f88d2f5193f44c1595c53019d68fce6fe715e2f9aa8fa4edd751546cbc21475", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x15e", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x4b916e15bdb0f5b4bccaa3447694db53cc34095b5bc26299c14a9f573bd6c758" - }, - { - "txhash": "0xa164fc90c20e70842b76427eaca6ef266fa3ba71e933c5ce9df68d2e817f6197", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x169", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x7975cc1088361453b019ff19e2177b264cfea56f4c09b1a8a086f6c405dd516c" - }, - { - "txhash": "0x25b5c50473f34a2940ccccf2080dbd466a264e936c2a38ee6b1410ee4d5798e5", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x174", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x5423899586eb1d932cb9da03e478e1dd5d4cbbcb66d24262c7d67e543185c2ef" - }, - { - "txhash": "0x14f08427a199620151f7cbe9d4d4a6a6b087e41e294e80ac23d7bb89e9100378", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x17f", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x187c8bbc8cd3f478b5688bc03cf5eda82ee75aa605e946b39ed1898f0cc0e00f" - }, - { - "txhash": "0x5b5626eb904ccbd5e3f96a12ae819a7997238d6950a6eead7e55171e9c8aab3f", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x18a", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x1bf8eef1506aea16c94dd534ab271dfdae26648de569b3bf6fc8bf4c76bd1a99" - }, - { - "txhash": "0xece63f7c604356e632fdd80e92222629c86f470612feabf2e7059fdb7d09a11d", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x195", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x434e2bcc5f4148668dd618144aac33ef5d463b292b3baad302a60aeb6be03b86" - }, - { - "txhash": "0x5b8bef43f888a81d06bb9757ebfbc240f379bcdfef6efbefd76c6974a2b844be", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x1a0", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x7b95105ef96b105a85277c69993f6f56602d912fe712ddf6156cdfcd8c490607" - }, - { - "txhash": "0x1e0ee081c4d5b43e12ed4eb80f14a1519f6e47f1d2ed7d88eea2097b1f2fa0db", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x1ab", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x2ecc9be98f9a8adac6e6acc5f160b0d15439b3856f0dee2a3005db79076252a1" - }, - { - "txhash": "0x4a2c9d2193f39a13e47237e14bd645267a17d3f096fd7ee6646ec0f4b71ea82e", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x1b6", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0xc452b6d808f45af81c3310dcf94a1704359eafc34709c45b0c7b95adf4cd02af" - }, - { - "txhash": "0x5d0a088f57e56aeaaff5958232ae8a0e4846cee85333b465d43c4462714558d0", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x1c1", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x7eae9da1da48fe866f64de7ac5c70c8e43644867b917aa8461f84915396d3598" - }, - { - "txhash": "0x169f28d6c3062de156f293def5ccad7deff2211443ffd2a44e3e1a711df25478", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x1cc", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x492ae6c575840126917090c30d003aec0892cd6250f877b99f33b72133b94f23" - }, - { - "txhash": "0xa1deb6e1a31c1eefc0b4348baddcd41b9671fa0189eb32643fde34dfd21a1774", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x1d7", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0xc8bbb420578d2d80897ca392a55fce5e4834f1d641472c0fd6a9698b7a8e7866" - }, - { - "txhash": "0x383b1359ef9168e0c519618b865a0b2bd246f40574f854c56b3dfab642a4c5bd", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x1e2", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x3a970a6d07c991261dcb566f26d21a76c578d05d1565c47dbc1fc071934c8c43" - }, - { - "txhash": "0x17551b7e94b2b97a41b94ac50c71106bfa09ea50ea92512fb63057557c05a644", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x1ed", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x51524a498a88953303410a83d67c2b8c69ddafeb99b570accaaed774fbc8583e" - }, - { - "txhash": "0xd2d67b7bee59a1bc320887f03e4c39e9c771af365a2949b53621402857985a7a", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x1f8", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x96c0d209b0a5b8b06947cc4c7ca723df55c5b972711b6c08ec7b9c393fa6e8ea" - }, - { - "txhash": "0xb826afbbbb480140ac552e49ffb3985f7d3dfe9f37dcb3271ec5c35d71c9c844", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x203", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x39410f5a8f450e0b7fe63aa93e214a7c5cbe78786c815ebc926f1e8a2a14f4bb" - }, - { - "txhash": "0x5be0a9f1701d01528926726a6a63fda07641d87172d1138b3a76c15af80cf396", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x20e", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x075a739ccce514f063220aa4bb66f08a7966189b0f24a2c5ad4692133d7aa6cb" - }, - { - "txhash": "0xdf443c6601c8656a7bffdfb38d9cc4ec15c324ed50e099546f2a548d1fd6bf6a", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x219", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x9f5941a130f6c2ff98ec21bb2517998dc5c8512230dcb37ede3cb8a4694175ab" - }, - { - "txhash": "0x5c94f25cebcaeaea9dce953b49dafa01f5ebab6bab84ac85257a4df50d216ff5", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x224", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x30335bc132be5a5f3bf464e0eed03a3c74f180cb9906552e187e4c04f024b804" - }, - { - "txhash": "0xd7ea9612e78bfd71cd959c1bb7b860fb96010f6132326724dd4fe1cd89262928", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x22f", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0xc668aa05d66c2f88a95db12354386f3b6a1722a98aade506e117201f2fd0511f" - }, - { - "txhash": "0x71f54b7f3f4acfdb51b3bc5e822e3a491a6a892b9ef7dee7493d38f135d69df5", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x23a", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0xfc6dfdea8f35e8af49faf38c0164a3deacd65c3927eeece6023868f32fd382a7" - }, - { - "txhash": "0x34c7189ae7c5894d908d9df8038d9f15d46bf8fef3b44c179f4bf5c194a49963", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x245", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x14ec3dfb63100132cf23ef71b80689146033fc6ceb9f8c0f0a65ef93cd18c2c7" - }, - { - "txhash": "0x801afe1e8d16b2fa9dca00d4ce5aca48efe8cfb7fedaa9ca4e60e3ec5ba7e9ce", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x250", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x5571137d48f7d081e62051a6bbca9d1e25c93ac6f84b7a3bc146f126ac80928d" - } - ], - "tx-emit-eip2930": [ - { - "txhash": "0xc9303fcbe3f18d9b5f259e62f7b59d8fe7ef6545b301a3022610c8cc32e3d12a", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x8", - "indexInBlock": 0, - "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x881a8434f98b103a2ee48727304618ca54234f1474c44bef70c21accc4dbc0a7" - }, - { - "txhash": "0xe7ec4729b421badeb6aeae0214ad958c9b51516d617f089dc8fbd514380630de", + "txhash": "0x62da81199d8ac0d4231dec90c6085f1153a58eba6bbac04f71da4d5076c9b7c1", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x15", "indexInBlock": 0, @@ -471,7 +37,7 @@ "logtopic1": "0xf77c749ecb156f605e2334b14caea388100bed09b4c16579c952a96e90355629" }, { - "txhash": "0x06e43cd84b25d35ea82b3b04c4778d565b7370b2551b36382bb0e971d27961fb", + "txhash": "0x7a8c4456e604a0b6210f29c6e68405d2ca5425fdce16bfcc6dfa3d3904b32740", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x20", "indexInBlock": 0, @@ -479,7 +45,7 @@ "logtopic1": "0x415feb809041baabc4d9246223e40f1083963cbe1ef6dedb8b153e49d02ee7ce" }, { - "txhash": "0x414663e2a0b7c8300c9e4f7f6836ff392e626ac8442023e81f479028e0bef79b", + "txhash": "0xd1ec37a2bc2841c4dc61de447dbe772a92284714f03752bc4056eafdac74dc21", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x2b", "indexInBlock": 0, @@ -487,7 +53,7 @@ "logtopic1": "0x89c17d9392b73a55738ba19aae192f2f9c5612dc8bd803ca23b9c2fb9c309e56" }, { - "txhash": "0xc6fa80c16effc705553d70ec5776c402eaaceee2ecb41dc444da158ed0166d8a", + "txhash": "0xa2b3275339e1237e6918726e0f0906f7f6a70a069cfefd3d9b5380e67c2d1305", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x36", "indexInBlock": 0, @@ -495,7 +61,7 @@ "logtopic1": "0x9038344c39b01167bfa8e99a6425d34bca24c27ceb191e8eba70ab5a8f719ce5" }, { - "txhash": "0x84efb3f3887121d539cadf5e973689d70d91389fc03435e4f51ad361d089ce19", + "txhash": "0xc488c5aac30312fe8365ed78fc6cc12b531f9cfc315e6ec5ddb610eac4a48976", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x41", "indexInBlock": 0, @@ -503,7 +69,7 @@ "logtopic1": "0x4b3120af8064823e074758c51cd6cd0954587c0d94b5b37b336261fc7aa2ddb3" }, { - "txhash": "0x9fad4904eed2887e05f4f5d2152f2c89a36d9d936c29c50a7ce7601effd8b19c", + "txhash": "0x7b43a1b8ddf97ab6ccb6dcab385184d1a1165e3c221013b34448223af45fc832", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x4c", "indexInBlock": 0, @@ -511,7 +77,7 @@ "logtopic1": "0x41565ae6f06f2555139f444c467d6b709b45180aa0c6b15bb5b1388d55ef952c" }, { - "txhash": "0xeb53887ad3621080290ea5f1ea0adf1f8085bec14df74c5b81b3c7efe4b7efde", + "txhash": "0x8954b9d95e7b0d5a726847449419e1cf77a624199e1fa89f311150dcac94b361", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x57", "indexInBlock": 0, @@ -519,7 +85,7 @@ "logtopic1": "0x00f7ca033c24d91f8fc39cbf0edc8a43192507f93d7316f311b05eeb85921eed" }, { - "txhash": "0xbc3f4e9e137c2e0c8973401ad6f64795c04b7d47ac215feb6011aa9a7ed03c7d", + "txhash": "0xb2749d3a5d1b062f85a4717ee5c3a7a686a31b03ecb2e29394bce32e15bc3e08", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x62", "indexInBlock": 0, @@ -527,7 +93,7 @@ "logtopic1": "0x761bf5fb1730fee0e499bb1806b9ae14394e673ab9c1dc12e95b9d3f1647cecd" }, { - "txhash": "0x86c2c4e5a08428efde69db7036025b1349438f22d85c2bbc9714544473f984d0", + "txhash": "0xbf2b014779d3872e5b8ae89c65d8c5912e60c459698f44f7281b9f14e03e6baf", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x6d", "indexInBlock": 0, @@ -535,7 +101,7 @@ "logtopic1": "0x468eae0ffdb87a4dc081a86c494969801637f690e1e1da15fb4a9d2c78272da8" }, { - "txhash": "0x90439c435817e3a77f33a7746c3f79961ecd321fab300519708d661fc7ec65eb", + "txhash": "0x1d27789de7fbb33eed6c51da18ee5e7cef7b242046842d42141cfb7f4893b624", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x78", "indexInBlock": 0, @@ -543,7 +109,7 @@ "logtopic1": "0xdbc7a073eb54d33d8e6dec5b0b635a874204bda1c23234ff0cca057ff8ed77f5" }, { - "txhash": "0x88792d2ea77fce18827a27f02f6aaf54824e5bd6e60215e26e69fe73d00de657", + "txhash": "0x48369062975939c17e4695b1368d7a1e0b60d145662ef9ba0b7a61b39c3f2cd4", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x83", "indexInBlock": 0, @@ -551,7 +117,7 @@ "logtopic1": "0x7a9cae3647128ba14914f547c5f27444cd7325bbc37e5038abc31eea45003034" }, { - "txhash": "0x1492acea121d6e2e74507e43a99ed8146c57ed80720f2d108cf9c31a22cb5951", + "txhash": "0x7fbb4a27af5e59af9219a6b3a63b8cedf03d7f4601f1cdb83d12ccb85f50d315", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x8e", "indexInBlock": 0, @@ -559,7 +125,7 @@ "logtopic1": "0x2df4cc92987ab73b08a3474750456382a0add51fa25f928480762f3d993f2984" }, { - "txhash": "0x36c80351a5e5b1af63afa0bcf9b3ba0cbda0ec541b3744977b7f049654c54eef", + "txhash": "0xcaf24c0839480fea158a7ab6ef75a23ef77474cfd9ab3c8ac081a945aab21c4e", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x99", "indexInBlock": 0, @@ -567,7 +133,7 @@ "logtopic1": "0xf8b0a158a81e46d2f46d268e7726acaf7c33fc321c36f6157f07abbf7fa49e5b" }, { - "txhash": "0x15417bc19302807aa8dfa6e7f27d558b7bc3cc63fe1e420ed02cb33d0b7098ab", + "txhash": "0xdae00232b88d3b90d09205f957ad48386379d37ac2d5540d8af9fe9d553fdbda", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xa4", "indexInBlock": 0, @@ -575,7 +141,7 @@ "logtopic1": "0x85ca3ddf1ae9fb0aeadecd8109961dc5d5eaff16ef7adc672149a7826c69da97" }, { - "txhash": "0x02ffd0bf00551df3bdba55994ac9ace84b08169515ca7ad46018caf13cfcfe15", + "txhash": "0xa10cd97b8629e989007f80e56895aefd1c1e989dbf217ea151b283f86acb2a06", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xaf", "indexInBlock": 0, @@ -583,7 +149,7 @@ "logtopic1": "0x73b2b230124967b31546c7e2fedbc5ab108a537ef6d645621fe74fcdc0644b28" }, { - "txhash": "0x322d17f7800f157cab844c56b8997f73a4af682c2b9d1896e7febd234f5e3055", + "txhash": "0xaea435d689fd6296e3cce8d5804b780ce50074f43d6fe6181de0342698eab582", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xba", "indexInBlock": 0, @@ -591,7 +157,7 @@ "logtopic1": "0x46765aab85a7ee88496ecde24f93cd5ce361b5a9fb43a2641d77bfbc97928010" }, { - "txhash": "0x58e2dd04291740326a8f8fe3475781d8c1dee08176a2ae44eadac4c7518c6bcc", + "txhash": "0x97ed8f06347509fcd1ad5b8e81c69d3aa2b17f614923eeb028932a7cd68be7a4", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xc5", "indexInBlock": 0, @@ -599,7 +165,7 @@ "logtopic1": "0xd0e6005ee39e02d654cc2db358df9659d8265e24d7362df88a7df9200438f6ba" }, { - "txhash": "0x095eb45d2c81cff8a691af38b0b7e3bbf69a77a740a8362f8ad4d7e710de08de", + "txhash": "0x85bdef644e1d4dd68f8d748f29ff0047b55ec15731f700b2c9a7aec250a70031", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xd0", "indexInBlock": 0, @@ -607,7 +173,7 @@ "logtopic1": "0x4323bceecd4ef7216d5b57b9dd12ecf03842ed56d87fe43d0959436f408f44c4" }, { - "txhash": "0xf69b4d268ccdd64739eb9f74d76e06b6d7ed43e1e86d0d6e7deef093826718f5", + "txhash": "0x81eed80ddf014a4ca8e043b52302f20d4f0ccb6a9ff9b595abcb3ee027977be0", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xdb", "indexInBlock": 0, @@ -615,7 +181,7 @@ "logtopic1": "0x81607ef8d6fd479d2d0f55ec50762ee5fc35883ee5600525ce1e9ef3398d5aa5" }, { - "txhash": "0x8e430bb7a64d7757860a881f31b721c8457b80b69332dd67668be803f48e5d35", + "txhash": "0x7ad3bf852c70e27efab2e2dcb39dead02b88818efbbd12b7aa0633541f7b3f38", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xe6", "indexInBlock": 0, @@ -623,7 +189,7 @@ "logtopic1": "0xb36949b816cb2ec4ab90f345d0bed84f55b8fcbeffd22198724c45d8a30b20a6" }, { - "txhash": "0x61f149d4cfff2ec32410a4684600ef4dff10be09284ae170d4693b9590642e14", + "txhash": "0x4aef6e5f54a5115cffe06cf73a588815fa873ef550c94e89713678889585c6e0", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xf1", "indexInBlock": 0, @@ -631,7 +197,7 @@ "logtopic1": "0x40c619388e6393f420e805451bd48b10c670de7d51e916a3ffe5ac3c96b81938" }, { - "txhash": "0x7ca86b15d7e14a9bbe4a012edf616f8341625a032c2bfb16b0361742165b6033", + "txhash": "0xee20ead2bc204a4049915c4996e332b148ff187fc4653058dbf0df9e73b451c2", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xfc", "indexInBlock": 0, @@ -639,7 +205,7 @@ "logtopic1": "0xa22721490cd06a0e77bc2b085bb4d57e7e5e0b459a2afc65ec4697d51926e1b8" }, { - "txhash": "0xd9fca30f3482e9d19271c9f1223ced48fd7e315ca4d0ea28c038afa16ba17d3f", + "txhash": "0xc46b84e641877cab5374c169a802c50ed4bbb63a4be91a2d2e9ea62cc3bed0d7", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x107", "indexInBlock": 0, @@ -647,7 +213,7 @@ "logtopic1": "0xac748acc1af284e25d06434a8c1bbbf75bb8154a06f53f75d4f36edb656a49ba" }, { - "txhash": "0xb5bd2b2a1e89dbfc78b28316727a351716033e8968a5832f0fc6f5fad06061a3", + "txhash": "0x38e848949e94f3d41ba77dd36fda8159401263178046316cf1d2321999101cd9", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x112", "indexInBlock": 0, @@ -655,7 +221,7 @@ "logtopic1": "0x4edb05f465bc71ee02c59ac9b5b50ddd974960ea2bd7e8cf7ae91c38c0b5789c" }, { - "txhash": "0xa620915661e953c73734bc32bb5d340ff2616906dd600a08a777c02f01a752cd", + "txhash": "0xe1bbc32cee7b6f6ff8477171315df665b211dac38a64c519aa32402dea5cb675", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x11d", "indexInBlock": 0, @@ -663,7 +229,7 @@ "logtopic1": "0x0678ff21f84e5213aa8d1d173b3517f8e6c3d1523959c101c75a31daa70ab942" }, { - "txhash": "0x792c9815f48f974bb737f43e351015f573dde750d3c5bc2ecf78524381addc46", + "txhash": "0x9615de1a110d38ec38ef96054453067bec5e39472ce177d0fbc8523b503edfef", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x128", "indexInBlock": 0, @@ -671,7 +237,7 @@ "logtopic1": "0xb3750ecb88b6e11e5f686cbacb3d24e61396cef4a1525b30d5a30edc4b3fdec0" }, { - "txhash": "0x66f4a947f820d53549e32402217beb1fa688d0a3a9df01393883b43add1af7ba", + "txhash": "0x9393ec29fb5a5d71fceec3dc7301afa92a3792d77a2c1be6a29be162cd822e26", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x133", "indexInBlock": 0, @@ -679,7 +245,7 @@ "logtopic1": "0x38570ba11cfca6a25bea615c7ec09ae671516245a92a5f8fc61d2e82529454e8" }, { - "txhash": "0xd62159aaeae3823a577e60ec54af48a461c39a2a8d84db012ba6cf9f9716e65a", + "txhash": "0x3f51ad5645ecb1d7229406838378a0f949a2703afba50a615d7efe57a90cf669", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x13e", "indexInBlock": 0, @@ -687,7 +253,7 @@ "logtopic1": "0xd5eb8e9a486b23e10cf0092ca8690e7bd6d6c90932960cdfa5da36d1e1f20423" }, { - "txhash": "0xa5c399b1c83feee457bd10e9cb5443f4184e28f49d44aa75432061e3b379934b", + "txhash": "0x038b847a33bab554aa0ff0219acb7475ab1c51415337790b78a2a41664194361", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x149", "indexInBlock": 0, @@ -695,7 +261,7 @@ "logtopic1": "0xb5e95d5da3e73f937bfbc9b4990bfdbd865c6d3a3b50478657e20b507fac7541" }, { - "txhash": "0xdf6e0917de58a976925e579a3bf7be58bc52009f6307ca89aea3564ea78059dc", + "txhash": "0xbbff97fbb8a0fd1716b8f33e0f5b56017a9657eac41585f95559845293a34e8f", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x154", "indexInBlock": 0, @@ -703,7 +269,7 @@ "logtopic1": "0xa3e65c2aeaf352e79173be13e572f691d8d75ea1064610b8418246d95bcc421c" }, { - "txhash": "0xec034419430d4e6672f6e20c2145c4fadf17f3e06a3e821e9ca6a786c9b45515", + "txhash": "0x72c15fd124c1097b19c923848c9b14fd73511db3416327885c156ad62252efdb", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x15f", "indexInBlock": 0, @@ -711,7 +277,7 @@ "logtopic1": "0xcd78e90ed1705eeff092f3df07b16a382082e9c388030ec3188daefa57a731dd" }, { - "txhash": "0xd1b8042da59f6d7a3f740c84f28c46cba7706397e581b7b9c5b2cc80f17586f4", + "txhash": "0xc7baf1ea1dd369c9955b15edc0e2644083c227cfdd165f83ef6025ed6b02c344", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x16a", "indexInBlock": 0, @@ -719,7 +285,7 @@ "logtopic1": "0x490b9d550a200295b38f2456a42525d3a43c345d2fa1431e770fea9656b26723" }, { - "txhash": "0x96566916710216635e35febde8ce995b9c109a38e5870706cf77279f609ddb98", + "txhash": "0x2e221c13d1a9566863bbf42cc0cbefe015613bbd7e9e19b46a2484f4fc81fcac", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x175", "indexInBlock": 0, @@ -727,7 +293,7 @@ "logtopic1": "0xcb35fbd0ebf79655e6882326c19855ff90befcd2e589418566ec2e3a1efd65d8" }, { - "txhash": "0x3d5e920028d1218989019830525bff1e6f08eb79953470d4f2692476849db51f", + "txhash": "0xa1af8ade321526f139ceb3e76fa12522a5d5cdac78deb81c0f49cbb5b4a9e93e", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x180", "indexInBlock": 0, @@ -735,7 +301,7 @@ "logtopic1": "0xafc44d58dec637206e79248a528189c68365e20afc23410475deb5e5dc69c82a" }, { - "txhash": "0x4c04efa9772f455ce5d77eac6037dcf8f8a904d7849dcc139f1c98b9d90d0471", + "txhash": "0xab12c172b674032a76a6bfdf79ecc0846d337953d23523fcb709c119cded3f4c", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x18b", "indexInBlock": 0, @@ -743,7 +309,7 @@ "logtopic1": "0x1f1860251182573015d583a718463a52050e45d795ec0f94d112206c3fd62e45" }, { - "txhash": "0x0ee54e10b675053fa6e447175e8a0e64af66d0f3c4938f5a545e392c329e1e73", + "txhash": "0xb5062802b3ebe1a560d0a84ae7405ace74a3bc1b04cbdc0f88a0e894b7cfc90c", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x196", "indexInBlock": 0, @@ -751,7 +317,7 @@ "logtopic1": "0x19fbac480a243f8c051e10225cec11bcb7fb274fac8792ca7e36bab8e39d312c" }, { - "txhash": "0x6bd480320bb019a63d45deeac7ed513db679147d411f6e8c7a884430d5e9f684", + "txhash": "0x9e3599809a88b599b80114ddf4d2f7c38be757f998b0914954553abc81206fa7", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1a1", "indexInBlock": 0, @@ -759,7 +325,7 @@ "logtopic1": "0xfb2772a3127ac292efa3da20fad64d950bf973fb209892fdf834766aa8cdc3ba" }, { - "txhash": "0x27cdbcc53409169cfaf19ca3c19a424308dd879a53bfb34f0cb622e98341e09c", + "txhash": "0x4a2eb0bf09b80def14f483a6175281c4067fd2eb220cc47707130d3b14f0fb8c", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1ac", "indexInBlock": 0, @@ -767,7 +333,7 @@ "logtopic1": "0xa90642da2f095eb8128f01811cb553162395cfcecbe5b077f12c62a1effa7c82" }, { - "txhash": "0x691d488d31d23773b488470cbd25e0036b2bfa466ba08e951eea23b856f3f908", + "txhash": "0x6cc89bb432f442a20c17b618b075e052f9eebcecc39b21776af49a4cff501bfa", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1b7", "indexInBlock": 0, @@ -775,7 +341,7 @@ "logtopic1": "0x75eb384e56c3a3a30a408622e6f0595d30705efaff129c133effc43c3b946de0" }, { - "txhash": "0x8878d98141b90199635b3989109699d477c828c5faedf356781f6eb587c4344b", + "txhash": "0x509133ac59b43f8954559fc0234228110b81c7272b9db1112828ee03d407030a", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1c2", "indexInBlock": 0, @@ -783,7 +349,7 @@ "logtopic1": "0x2aee290f6f3f6c60a6985d0150eab487f9de1c47962a779be7343cc0cff270f9" }, { - "txhash": "0xf59da47c6804c63a8634cc67a08092994451fdd5fa56b7225c40a67edc23e635", + "txhash": "0x900a3e1ca48e9a476a45fe3d0f88a8b40134ca59f902719ff75db2b7a361a06b", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1cd", "indexInBlock": 0, @@ -791,7 +357,7 @@ "logtopic1": "0x41b546f355dc0dd009ac5da8bfd17c8e197595c1c1f21aabbb1f3b18343a0718" }, { - "txhash": "0xeab623e58b8f2d54649a24878731423ef914b23194a1ffed91b143b877fd69f8", + "txhash": "0x7dfe4a0c877a5193b0f3180e2d8465ee5f042e420f740edd72139dcbdbb46d56", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1d8", "indexInBlock": 0, @@ -799,7 +365,7 @@ "logtopic1": "0xca27d6fc8e6016df20a295f26b57b2f6ac7a8cec98224571f416ea88c0ee7b97" }, { - "txhash": "0x0f68375d9c8575badff105441ec3f3fa0227c2fd5015fd3fb288cab15a0dc269", + "txhash": "0xe67e670bef823b90351ae0811db0c4b167a6549543345128309c0281ef8365d8", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1e3", "indexInBlock": 0, @@ -807,7 +373,7 @@ "logtopic1": "0xd1a0570d06c0cc4198b4475cb892ec41ca3239ff670666bcd97faeb62c1db6bb" }, { - "txhash": "0x5e1845a8cd15ad7e127cdede8899eb6a473e59045ad5cac8cbceac140b6ae52b", + "txhash": "0x8f376b2834fec36a91e856fb0e7b85db94d2d764b6131f064cbb9d796bfb2a19", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1ee", "indexInBlock": 0, @@ -815,7 +381,7 @@ "logtopic1": "0xa6602e59691514abf1ee46e71c1f4c7411eddb76e687f8f4aaa1ebf305b97f6c" }, { - "txhash": "0xa56dc267f90bde33765a9acdb6853250ea8405b0819e0884ddb2cd26af1ed262", + "txhash": "0x66485193e1246cf388f2f6702307d7ddb4dc665b6d98a61b1e603a667b62254f", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1f9", "indexInBlock": 0, @@ -823,7 +389,7 @@ "logtopic1": "0x0a5a37a1db2e0068ee9791dbe377a74c4f7bc36bc27af57ca7e49059127e8eb0" }, { - "txhash": "0xc97c6242194520c2185b98119eb572ff29243d6b86afe9e78209c2c0633f8e43", + "txhash": "0x487fb2870d14ac9e4df7b20b32afc3b499e69233aacdd983714ca9a879a690ad", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x204", "indexInBlock": 0, @@ -831,7 +397,7 @@ "logtopic1": "0xb50dcc47e811f76cc69369cb397936a5c70520a51f33b84f1b54591da145e823" }, { - "txhash": "0x102f1c2680bb4bbde8b42b0ed2b27d0f53b0741f6bfafce3326300f0ba02d461", + "txhash": "0xb4226c093edab69c51ae8c63ae4572b7a5084fb3943e11d192b0587480f61827", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x20f", "indexInBlock": 0, @@ -839,7 +405,7 @@ "logtopic1": "0xc6bea923a54f8cf570edfddbda896a2ebf7b53d33b1dac8914ed024ff0621f18" }, { - "txhash": "0xf312429462bdb087f27b05d3485452aad3177090d1c834c4c3b1febae3ebdeb3", + "txhash": "0x4d1eb4c4f40faf9774d150502f66f0c95cea371c61340d48fdbda852d459716b", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x21a", "indexInBlock": 0, @@ -847,7 +413,7 @@ "logtopic1": "0xb296a1364260e1c8d47bcf2239f26b6b909a0a7687250af4af545eff0ea95ed7" }, { - "txhash": "0x6b99996554a4f85b731230f246e924a1d5c455311909d76074a378e2ad0dc344", + "txhash": "0x6adc552ebbb9b37ef662251ae9625857551100f6560033b09f70b7f3be3e673c", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x225", "indexInBlock": 0, @@ -855,7 +421,7 @@ "logtopic1": "0x142951613bf93db71eba96bb48c57a42168fcfded6491e1229ea2b8570f77e7f" }, { - "txhash": "0xe0909f2b9a4d6b4064c61ed92c0914edf5bdc08ea9454cad75409f8edc2b99fc", + "txhash": "0x65adf12f5b8c2e24801a6845adbc615d2b58294f8019572e9ad56921f34507d2", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x230", "indexInBlock": 0, @@ -863,7 +429,7 @@ "logtopic1": "0xa99b8fb9a23a3a24ef3330a371d081c4158ea1b75c9af3c2bda5440857bc8237" }, { - "txhash": "0xec379187efb4e736e8274e899cc4bc4b8c1f94596e67999d57ad1950a9e12e91", + "txhash": "0xf58d4acaa927394b8be4a4a5c2f8594cdd47d6b994f86b40190628fac65891d0", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x23b", "indexInBlock": 0, @@ -871,7 +437,7 @@ "logtopic1": "0xb9a419e057752857f289694284890ff1fcbfbe5d736b5e52bb8568e077f49883" }, { - "txhash": "0xeb7451aba7fe97573c34ea34bdf06b8782335c6de5ba4507aa55c799b1446032", + "txhash": "0x61d683cbcc73112161fba6dfd3ec9c70339854e7986be731313162e6a571c9a4", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x246", "indexInBlock": 0, @@ -879,7 +445,7 @@ "logtopic1": "0xe0fa1a4e967a01f4a84aa6715b0977cc111d3cc0834c5d04f0f1d87e0d561a71" }, { - "txhash": "0x73bb7b0c0bfe122b47a7242c5cb85473bfb1b6ab532968acb36e2e95d28abd80", + "txhash": "0x9ccd92d4101101b304db4ed5b25e14444900774ba9a8659f01846da9b8f95660", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x251", "indexInBlock": 0, @@ -887,17 +453,17 @@ "logtopic1": "0x701960547b78067b00883157f5e9fca3bbea742385129f0db7e1e69ce445dfef" } ], - "tx-emit-eip4844": [ + "tx-emit-eip2930": [ { - "txhash": "0xf420e289a5ee4f9f9741ede7f240216b93ddb6e9b6e54859db1d33e57edfb174", + "txhash": "0x76f2917dfdad8c636c493258e672938661a2044a05338bbad7d14d446fae4d45", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x9", + "block": "0x8", "indexInBlock": 0, "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0x63cde520fb894276a981d2c9099bef9beb949121c1be98f3abe1b721d880899f" + "logtopic1": "0x881a8434f98b103a2ee48727304618ca54234f1474c44bef70c21accc4dbc0a7" }, { - "txhash": "0xd5b23faaf6a0054ef645601b6a3882ff63368c518afc2f6555408d35f41adab6", + "txhash": "0x30fc0bab35d4325db37b953f5cf26e05f2c18593adcc4c14c8fb04b28501c2c5", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x16", "indexInBlock": 0, @@ -905,7 +471,7 @@ "logtopic1": "0xa41cb4f2ab2731a8889754ae1a340c666cb8107b497b922073df80a9b255e31b" }, { - "txhash": "0xddcf88da9d1942ff808a887b92501dcd74b01cfb8031324b684a4ee29fb63c1b", + "txhash": "0x07032ce65db029864ffcc0c3b00ed01bf8fa90da0efc781ecf517920ed762304", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x21", "indexInBlock": 0, @@ -913,7 +479,7 @@ "logtopic1": "0xb2416e7ca12669406e6cd5154ad5177841b7d0cddeb2760249c28e1aa151f970" }, { - "txhash": "0x45a0afbc813c5795a8a3f22ff93dfe6810a1557a96e1fb87c90e68d6e834bf6b", + "txhash": "0x61a1ed16c11ef4e4c8036233b87753a761be8c9702514ea87fe3bc82345bbbba", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x2c", "indexInBlock": 0, @@ -921,7 +487,7 @@ "logtopic1": "0x11f0a8ac2adda075c95bbf6be534e3254dafa759f62cbcf0e91bc6f0335e70aa" }, { - "txhash": "0x39bec15647bf657b5d91d4571f2e68e7c86705d521d48c09c35c2bd40eed7c0e", + "txhash": "0x24a0922096c6a6b34668d0b06c4724db961e3b4c462c6fa645517e19293ec37d", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x37", "indexInBlock": 0, @@ -929,7 +495,7 @@ "logtopic1": "0x8460e232c64e6cd9f816c02d855c892755984ebbb91592e683cda80aaba4ba22" }, { - "txhash": "0x64505ad9b89241532e82029f9eae4c180ac6c32b09a29b1f452c92da1af320a9", + "txhash": "0xdce27eb7c2b44d61022e4923329a9b18f0dd26093a88dd5efa772fb1e52273eb", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x42", "indexInBlock": 0, @@ -937,7 +503,7 @@ "logtopic1": "0xe7d55978188f31ab090b1f10d8d401a66356b11ca8c296384a0a51e36e6ec11f" }, { - "txhash": "0x7191d4d64827164b565c87480409d22354811d609572d1c2a314c86560fa4302", + "txhash": "0xdb7b8df9ad36fc8838cfedc2f272cb205f7ad2860cd1f5ac5e739ed1a2973784", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x4d", "indexInBlock": 0, @@ -945,7 +511,7 @@ "logtopic1": "0x24a4daf5b3cac3bf3066902cda09da0fc862e0a6723c47981ed601782ad69079" }, { - "txhash": "0xe94af7e94ff9b3cc7ec58666ef5333ffdd8cec10340e270f519ac5a95277eddf", + "txhash": "0xccf0da8511e51af458ef4ea7734531fdb77b8bb48191efd8257cf6ac16daf3f6", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x58", "indexInBlock": 0, @@ -953,7 +519,7 @@ "logtopic1": "0x7c24a68c92e3b68daa153ae82eff9be1ebbab973384e0f4b256f158f93c5d525" }, { - "txhash": "0xade7523b78f2e5f6c67cd47e6d7e2f8011534e6ed32552d5bf8d8e5bc3a56d1c", + "txhash": "0xe78dac2c962f7fc240909233c4b8bbf47a6ab4b9b3b4376ecb92a4eff4e147e3", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x63", "indexInBlock": 0, @@ -961,7 +527,7 @@ "logtopic1": "0x02bd9d62880450596e11c3417f2644a81f7cc233a05394bbbfb58428ed53f413" }, { - "txhash": "0x3292412496ffb7d9778bfb58cb3831b7faad4fd66db3d0eb781fc42acfff63cb", + "txhash": "0x2e5f23d99b09fd9f81f2fc7013c3a3bd8fea88bd6df07e2b236addad4e9e94e3", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x6e", "indexInBlock": 0, @@ -969,7 +535,7 @@ "logtopic1": "0x0dcf6219856f226889a2440b388d8e15f5df0eb64a7b443f3a7a5dca7b87b0f2" }, { - "txhash": "0x647ebc00e9b4f1745b906d55709623d4565c4ee37cc43cce3294e86fbb06af9c", + "txhash": "0x37010507fe716034116f8d945ce2bc35d3718e7c10b78ba34e4ddf780c6063b7", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x79", "indexInBlock": 0, @@ -977,7 +543,7 @@ "logtopic1": "0x0f624930606bfcd2386d583abca6ab10227d71fc1633fea53f94bd146c152b8f" }, { - "txhash": "0xb19cf34f280a82abe8279d9037a23cff23592f19805be3d08683929a618523ae", + "txhash": "0xb53c6450c32830cf3be18b73370a0a290a12acbf4d734e8ad8785d4742e8035b", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x84", "indexInBlock": 0, @@ -985,7 +551,7 @@ "logtopic1": "0x2daaea9286d7edb7568e0803a61bfdb1e1506156d27e93bdf1942564850646c6" }, { - "txhash": "0x36f1fabea1bdec555c4febcf4c87ea5bcdf9ae5a1bd9a10726287649704d94c2", + "txhash": "0xb7b48df8d1f44601669025fe789c2a5aa05771ac35ea90bd5bef536ecdc4f92e", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x8f", "indexInBlock": 0, @@ -993,7 +559,7 @@ "logtopic1": "0xfaca663a6ed04f52c0e7a8981cb438545f614a2cf84f9077659d0fce0045cda7" }, { - "txhash": "0x4b518ca4f87136c909ff5c85233c42466d29a1a07991ad4e5a757d81c2b4c9f9", + "txhash": "0x938a5fc80f6fbdf6d5c8838458e4695f0b8fca8db7fc49ead340ed4f0ca2b3d3", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x9a", "indexInBlock": 0, @@ -1001,7 +567,7 @@ "logtopic1": "0xe6a5227fabefc934ddc0a3142a50747ad1157ad0829ec0bbc389d5e22e3282c2" }, { - "txhash": "0xfb9370f7667bbfae1f6223e3abff4af8464d2ae0639e915d7f33e0b8fd9db0b5", + "txhash": "0xe3d00022dd63b6705c7eab12a15ad5f279b99eeff670bf4316d4ccda0045f324", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xa5", "indexInBlock": 0, @@ -1009,7 +575,7 @@ "logtopic1": "0x6a99e5276c6ea0c0894cfaf376fbbfdc736b359e1560a77365c14fcdf6cbbf53" }, { - "txhash": "0x3673b0487371e7e696dafa1a8e4564fb345c950362dac3641d570b2f37018940", + "txhash": "0xc0f5f7053ddfd90bf909cba8f2d0ba8ec3f5ac2f9efdf7d44f6e632d02d77d51", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xb0", "indexInBlock": 0, @@ -1017,7 +583,7 @@ "logtopic1": "0xbdfd2b337ff30e9e15c09313bf796d3c75177943e0aa0445f479fbd2dd5c1d6e" }, { - "txhash": "0x1117f306b532c07bc696dd2b53a66fc8ea8c7be319c8db8149b13a564d9964eb", + "txhash": "0x06b8f91efd631d83bbc3cabc57e6e4dd311e638f32c0bcd0e2bde98454cde233", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xbb", "indexInBlock": 0, @@ -1025,7 +591,7 @@ "logtopic1": "0x23c2e06f633f91e89e0d95cf87dce47fe1cb2b95434ff45773f1fd560ad2dcf6" }, { - "txhash": "0xd589b01ccc4b4c2004a2bd5b3f83fe8749ecce32dc8d96b3a5ee0be0b452374d", + "txhash": "0x9dbd1ff97745b8fd334b4a2bc75ccaa32ded0c9bfb954baba7f5d9bb7280e6e7", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xc6", "indexInBlock": 0, @@ -1033,7 +599,7 @@ "logtopic1": "0x3c8110e03f1b54de6085ff899d0dccd87806b788d1ef3fddbca1de4c356266e7" }, { - "txhash": "0x2ae3fdf2e8671f02c712cc2f0ed0a64464e2b3eb69324b4b3291adc850eafb4c", + "txhash": "0xa214e938f072e94479207b9fb4c2c5a247acdd9d6ae0af03d31783495bd82219", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xd1", "indexInBlock": 0, @@ -1041,7 +607,7 @@ "logtopic1": "0x5d7c0426d6595c1819b962730e5d2a44644703ebd960ec3ac51297ad937692f4" }, { - "txhash": "0x3896b74ebf76ff849f44241bec1e1f649653376971e657ad787801cf89bc002e", + "txhash": "0x24f06cd0fe391480eb99730d94c35fbba76cf55fc51c58a6afb25a1629e86964", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xdc", "indexInBlock": 0, @@ -1049,7 +615,7 @@ "logtopic1": "0xe207f028cce1624a1fc76c56f1794c2704a692c1f214685291d618e40733ff1b" }, { - "txhash": "0xa0416d5370e59e86c33919e17cbef2ddc5aec738068d627a5158b46513115470", + "txhash": "0x5a93049aaace1c9fdcfa440ede274acc58613f8476bfd80d17cc67a289481551", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xe7", "indexInBlock": 0, @@ -1057,7 +623,7 @@ "logtopic1": "0x18fbf0ae0e2133584c461cbd43169854c7c7e818e8b5779892da244f24d27b56" }, { - "txhash": "0x36e00ad068d4b0aeec3c2d5a7a196da7feb1ae69b19289156477b7b5a025a908", + "txhash": "0xbab062324e2bd4efa01fba78c887d8893e40aa9cfb2af72a115877cdbba7efc1", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xf2", "indexInBlock": 0, @@ -1065,7 +631,7 @@ "logtopic1": "0xe8a78860d5ffde377f4eb0849fe59ed491d4a12fd51edebc2bceab3549d83463" }, { - "txhash": "0x8ae68021325ec15d383dac77654f45002c2540c113c8069496b4c7b7ae847f42", + "txhash": "0x88411eed62ba108205b74c16cb97c78eb5e670c73a462c81892decf6caf83b48", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xfd", "indexInBlock": 0, @@ -1073,7 +639,7 @@ "logtopic1": "0x9138868b39f601dde19efa6e9a154230a51805e9a6cabaf28fed5163aea58328" }, { - "txhash": "0xa0521c7d9e65b85ce70e1047a30fc0f40716c958e5d26ed1b892dbb58c631623", + "txhash": "0x79f84618f37ce72b674e601cb0a4305f2995911efc8cc403de6fee482f34acc3", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x108", "indexInBlock": 0, @@ -1081,7 +647,7 @@ "logtopic1": "0x4348597bdcdee80c8e110d94f771eb7edce9c8691b2f90b71c0d11f729f086c9" }, { - "txhash": "0xd08c91a1bd8cedb22608d15dcc429cd8fe2785c0e28f8aff323d8a47957b22d2", + "txhash": "0xe46b05ec347dd18d056a9318a43b3d196e0c493c56cda202b97ee26f9b132af1", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x113", "indexInBlock": 0, @@ -1089,7 +655,7 @@ "logtopic1": "0xaf1c2654b2e98e9ffbb02f14d88617a245a9a1679162be29776a4836185dc2fa" }, { - "txhash": "0x50266b81dee4437511591aaa60df86717642524cab47d508be3cfe16248574a9", + "txhash": "0xf67bb9d97909efffb323cd48f9547bf08c5051bf1bb9ea58c2e7e9929e9b5a0b", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x11e", "indexInBlock": 0, @@ -1097,7 +663,7 @@ "logtopic1": "0x81260b78e72018d5773b6ba1df006b09a387fd733e59ad152c119d9848ecf1f9" }, { - "txhash": "0x0dab5929cbcf54b4b6742c4e7ea56774f9f07c5ee046151312accbad330ab7d1", + "txhash": "0x49a00cf1ab0cac049709ad4d7d7a18c5622fa59abc25e0f33f3319c154f27a69", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x129", "indexInBlock": 0, @@ -1105,7 +671,7 @@ "logtopic1": "0xf9b648439e7b876f9aa1b178fc6381f44bcaee23754d8da33b2d44e78cf47bb1" }, { - "txhash": "0xd72795a9627079d42e1f65998602783c0e1152b1a6ee62b5f399955aaf1a3808", + "txhash": "0x5490dad7b381c41f8492dac1d97b40465a0291c0a9ad625c4a53d5ef74ba78e7", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x134", "indexInBlock": 0, @@ -1113,7 +679,7 @@ "logtopic1": "0xbefb4ff6aefe6c4d85158d11057517eb9cb1e1cae3e9d2d9c90ff40b2cceb546" }, { - "txhash": "0x1f049fea47d8615029fae54748b820cca1369ac4fb2bd01e570a5bd2478c683e", + "txhash": "0x2f02d65eb6718a9fb37ad3ac3b7811d45a161b9e07681b8b17892929212caa94", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x13f", "indexInBlock": 0, @@ -1121,7 +687,7 @@ "logtopic1": "0x9575996f3ad6e9709d7122224335451a59395327d297fd7967004e8dc1391308" }, { - "txhash": "0xa507e1f9dc79761107510d4f931dbcc1d2d846bb2c2007faae7198c926431d61", + "txhash": "0x3e1aacd5bbb49d73201c1b91c53abf7a7dc9633d7e4a9eeb1acb248cfd6299bb", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x14a", "indexInBlock": 0, @@ -1129,7 +695,7 @@ "logtopic1": "0xa791ce367786fdc4c5216c8b94dfe1076746e058166dabda25b5e6a3266ce857" }, { - "txhash": "0xdc4ebad42a33cedb2c56f2963b7f665b806c7e76a95b3527e03dcee1e8d3aac0", + "txhash": "0x9eefff22b8fc296d66b4c0892dd021090efc184974347ba86750265ee81f4967", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x155", "indexInBlock": 0, @@ -1137,7 +703,7 @@ "logtopic1": "0x6df5983ddc40ef2c7ffa2c79bf9402568f2ee0ec7b675ca15aaa20b536d2a5f2" }, { - "txhash": "0xc1631f848ee48f93986a0d7f3a3856229d6d7f2ab448da79299ae65ef5c9c72d", + "txhash": "0x1c330cf34399c5116a1f0040282be248753e2b3deadf05ad719684e06ff62a75", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x160", "indexInBlock": 0, @@ -1145,7 +711,7 @@ "logtopic1": "0x40325cfcd159fa7bf89d8c252b6ff47cbc17aafff5e7feb92014d00285484cfd" }, { - "txhash": "0xa8b3e0feee69ef4ad9f164709f9d8c93cb0cef54b547d6df3d3bd60d9373ac61", + "txhash": "0x97e229b0d274161ce5acfe05d2770f44e1dc5f5c2390e0b001d227f01e1d56a4", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x16b", "indexInBlock": 0, @@ -1153,7 +719,7 @@ "logtopic1": "0x039a54e14fa9769f840074356dec3dbd47c3588fe71fe942fb7aec5edfd0a096" }, { - "txhash": "0x59a87b6c242eee2b5bfb727160765d68198245907faeabf342d28663f9695bc0", + "txhash": "0x68e4f0d419f3f18f2f448f2a2a85eb33cedb8eb9baaae0c41052b3e5c5ab783a", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x176", "indexInBlock": 0, @@ -1161,7 +727,7 @@ "logtopic1": "0x927e4ce70caf344a9e108ea8803cd49216852109c3e4922dfed2680e9f24361d" }, { - "txhash": "0xb6e6ee58c5cdab20b7a2ab2593716985f53644bdab28c89f5cf05c4704b9a43a", + "txhash": "0x4d02d96d7dff2017f1b95c045a61000ad1c2644f342fbdfe39eccc70f3feec7d", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x181", "indexInBlock": 0, @@ -1169,7 +735,7 @@ "logtopic1": "0xe2a0b166c03b200234eacf5eaf9ea11746c9bfd00e72f55d8cab76e0eca7195a" }, { - "txhash": "0xf8b2538634ae7c9012e0298b5658de6faf19edbcc7a6ad8ad9409c3e876ca311", + "txhash": "0x731cb5ada167fa9cdb4b85e62eef892890f5f4310f548a6928a0aec9cfb361dc", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x18c", "indexInBlock": 0, @@ -1177,7 +743,7 @@ "logtopic1": "0x92da59b68bfd8a9c1cb1ca6a302ee966f829f2727a36823b0dc7fddf7790a108" }, { - "txhash": "0x3a93ba0531ec222285241aa65a45f44ab14900e4d9c5389f0713456436881b60", + "txhash": "0x6acbb0bc12e52870c6fb5240ffb771f703d91f3d933ecb4a228693174787552a", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x197", "indexInBlock": 0, @@ -1185,7 +751,7 @@ "logtopic1": "0x677a6b432bd3361f469c2e051c8e09ea92ed0d049eb563118ff8c680fc93a2a7" }, { - "txhash": "0x1e7d6ae181604098663d2a7b69f2d6a5ef30fe23e953ef480595751a24b63899", + "txhash": "0xd76726d4614e485b18408bc45046136e9cdd2d897485fe4e4dad69c9e849c3c1", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1a2", "indexInBlock": 0, @@ -1193,7 +759,7 @@ "logtopic1": "0x250ca62bfd18dde43e70bab089d01d591ce6ab28978434258ae1017c72f12b0a" }, { - "txhash": "0x80223c925ca21ffa9b819dbdb802b1483b8828f209a1e44a6b66e777aeecfd5f", + "txhash": "0x238bb24148c083d631203d405f31779bf2f8cb674683d7cfaae0a45f33c6be8a", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1ad", "indexInBlock": 0, @@ -1201,7 +767,7 @@ "logtopic1": "0xcea8a961664f986542ebbc496878d052736682831cd7847bc769ae16e9eefb65" }, { - "txhash": "0x05f3165887c2a6fe74c26b7a5561c22124331bb248a8c83400f9e84254a0a656", + "txhash": "0x29d488a18542c3622726b62f9e223c8b43a885c568d726aee959288cfdf7b3ad", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1b8", "indexInBlock": 0, @@ -1209,7 +775,7 @@ "logtopic1": "0xe5f4774cc356a99594f072de9e8113739c65fb51b5d0fef3f40627cac02dd963" }, { - "txhash": "0x9bdf145cf420be4935f61d48d278854fbb146c5dce686a81f586a6b72e2f1697", + "txhash": "0x1fe0e80aaeb234d31d5c78f52564efda7ffcd74817e6231c4598eadab68b8dc6", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1c3", "indexInBlock": 0, @@ -1217,7 +783,7 @@ "logtopic1": "0x6f9ff000b2dc3a554bbbb882ebc7726b700eb7afea141ab16e00a057f314d0db" }, { - "txhash": "0xb1c7a90ffebb5658771131f7286426643259c1d9d3c6581d97a2faccacd3f2b3", + "txhash": "0x05e939d864b0384a980615b891a60e3c7fd6fdd4f123a03a506c3deb1cd10bef", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1ce", "indexInBlock": 0, @@ -1225,7 +791,7 @@ "logtopic1": "0xfd6fc192aa03eedb6505372aa1dcda93dd186fb3eded0bcafdaa4f2829fe43b5" }, { - "txhash": "0x837101affb0ad970b9101a914f733b437fa042e2550b3d781f6775285fc8cb99", + "txhash": "0xfafb4b8d000ff550dbf4a1e3cc6b1f06ee2973d10dcddfedf7587ea72feefd5f", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1d9", "indexInBlock": 0, @@ -1233,7 +799,7 @@ "logtopic1": "0x506c0723b5e537632209d4a824a6073d5eccadb36b9b8717b2ecc9e2d5cacda2" }, { - "txhash": "0x4a5060608b481087ac139068f55d76edcd8a4fa189abca438bf0b18d25450638", + "txhash": "0xcd68404c240e22562bac6dbd9ac85f0807cd263e8b9b30ae67a0d515cae30cc0", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1e4", "indexInBlock": 0, @@ -1241,7 +807,7 @@ "logtopic1": "0x27edda711baed4a613c44d8ac8678531c9938eea106e7c5649e438f3d24b8fe3" }, { - "txhash": "0x7bf955bd6b528d2435096d3d88b3b39deaee5f7702b206c6e0e9cadf739b2aab", + "txhash": "0xf12ae2e38e424be45a18c6b0977c009de69f6f3993c34bfbd4ed40f0501def7f", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1ef", "indexInBlock": 0, @@ -1249,7 +815,7 @@ "logtopic1": "0xbae4f13d358194452066fc1305964decaafbc9c56a2fd16936d25d9521a57a19" }, { - "txhash": "0x20ffe88022aa6e1b6a9ff7f2a6465a3db959aad55dd70dc3380d63087e7ee390", + "txhash": "0xe8a619cde23c8746d4847eead4dbe79500af69f978bf0d7b8470432eef4a5a31", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1fa", "indexInBlock": 0, @@ -1257,7 +823,7 @@ "logtopic1": "0x989e02934facff928d8e788f174ab7d48838c62b07d420a8527cb7eaabdbe91b" }, { - "txhash": "0x4b5bb822f7a362c9e204624b436f342b3abded4c548e19e9a01d36d3493c8a32", + "txhash": "0x2313cd696ec9c6a7b5ad21e9daa106264d9c382c0e3a067529a56d81a4511c96", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x205", "indexInBlock": 0, @@ -1265,7 +831,7 @@ "logtopic1": "0xe891146f52235abb9f53919fc0e41a678d5a8a807a2247177d67539a2bcc3d1a" }, { - "txhash": "0x4a8d2ceec1465c2db3990dabd36c0027303110f516a7b591c01a733ef7e7cbed", + "txhash": "0x602659a646a466a7044b066ece12a8ff17e34c2e6a4ca667bb794933f874e561", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x210", "indexInBlock": 0, @@ -1273,7 +839,7 @@ "logtopic1": "0xab15322a52f3de5dda0553d7abbf171524cabb9c97dacea8806c750361d472df" }, { - "txhash": "0x56a530e9c72cfcf61a6b0d1fe735f3df56792dd25f942baec63e0ccbb2a41a8a", + "txhash": "0xfc39bd0e3451001fe930e70883bb945d8373dd99baa6964973d8aa3ac74a3d34", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x21b", "indexInBlock": 0, @@ -1281,7 +847,7 @@ "logtopic1": "0x6c172610999b0729fbb6bb1ba27e7a0009f1b584ad6f8307d3dcc7d24a180874" }, { - "txhash": "0x4233ea782ca4eb51f939a929af9257a374af873d136c50fac14d2df85564e5d3", + "txhash": "0xb1d7b6a1f9fc6af8bc3fd36d72e4d8682167af0c52dad7c1d63e755ace3afc3d", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x226", "indexInBlock": 0, @@ -1289,7 +855,7 @@ "logtopic1": "0xa344ff63ecb6c6cbbd711b06a84844147910ef79a57679958664abf4af9938d3" }, { - "txhash": "0x9f26d7fa9f6598f111b1ff50e143b2579520afa7fd5013544762b1378d2ab4ec", + "txhash": "0x7f1eea64084e269d16f948a767155c7c0111865f58b9e91c3f7cbe30cec180e6", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x231", "indexInBlock": 0, @@ -1297,7 +863,7 @@ "logtopic1": "0x88edc52ba848622b1d92e73d2c311c1c83420986c621546fbadac23c3428c570" }, { - "txhash": "0xfb7f1b4cae168e0c7c37155044d0f8907514472726a682ad14dc562cb86ef124", + "txhash": "0xde6513995c2989b0a314800a65da7a5aa3d3bb50215909aafcabce6063ebb69b", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x23c", "indexInBlock": 0, @@ -1305,7 +871,7 @@ "logtopic1": "0x7a536b71187079aaf5462b7d483063e3d25cea8e3a6790ebdbb284666fe81068" }, { - "txhash": "0xda8372595a6f7b652d57a878d3de4a14ed4f4ec71a0c465e01ba8bc29c542cd4", + "txhash": "0x1669770dfc06f40ec72b287e27938ff69b1e3055d68ec6e33633da92108ddda0", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x247", "indexInBlock": 0, @@ -1313,7 +879,7 @@ "logtopic1": "0xa0c2e429d47e77e9b7c98c1aa4aefb731206f41b64a6587678905a86d14a7d75" }, { - "txhash": "0xdec9676345f2218dcc1eb83512845910541be142c407b8ec119aab5323132dfc", + "txhash": "0x50277d3afe5e049a21cb992cd83e0c069dcc5e5bb97963693fe480cdf48c204e", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x252", "indexInBlock": 0, @@ -1321,17 +887,17 @@ "logtopic1": "0x48ca1081e747a7f831228b894dd5fc401d64c6496a2b9e578dd3c59b8f0df2cc" } ], - "tx-emit-legacy": [ + "tx-emit-eip4844": [ { - "txhash": "0x93b1dc3b8982a6c8bd8cecb7d5cf45af27ee28b41daf9c801e51065eb7dc60d4", + "txhash": "0x87630fa02828dad0c04ea8ffa7c5d742bf6aac72b8b0a7e72a28b7d2c0d9fdcb", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0xa", + "block": "0x9", "indexInBlock": 0, "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", - "logtopic1": "0xb8d28e7b703baf999848ecbba44026cb6479b3f0466037bcf2221ffc3f8549f9" + "logtopic1": "0x63cde520fb894276a981d2c9099bef9beb949121c1be98f3abe1b721d880899f" }, { - "txhash": "0x56d2f9f1862cf585c2419e181e919504b73608b705237dde572bd616f1d650a3", + "txhash": "0x75118b029d56f192f458f1a2a38238237f19c11f88eb97e0483ad26e021ae15c", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x17", "indexInBlock": 0, @@ -1339,7 +905,7 @@ "logtopic1": "0xa6d01173df2aa437fb0118d181e64a8f8e05713fc01c42fbfd2250516639ae95" }, { - "txhash": "0x86073ac16f561025c7719c0cea52c04a136770717a5d0a9f70e3dcd87efb4e5c", + "txhash": "0x99ba6434209d91a5fc015f2c409877d1d5567287b64c46f984a64d631efa866d", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x22", "indexInBlock": 0, @@ -1347,7 +913,7 @@ "logtopic1": "0xe94d0b2545ec05c3ce3431c4d45c3b62fcab156563e8308fae1ebd27a2810c1a" }, { - "txhash": "0xb19203054582d226c20a830e5ae3337d13af37db285d2936f7949eee221dd332", + "txhash": "0x17eced62882b234b280f2382a0225cf218e59de7124bd3d7214fa2da8b766188", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x2d", "indexInBlock": 0, @@ -1355,7 +921,7 @@ "logtopic1": "0x6551251b96ca27f3af8a2c500d6dd1ea5b9ab7002b3d923b66db0493f4a7123e" }, { - "txhash": "0x794c81d1b630164f8bd2b0abb4ff9606598f03e56e5475526b6736b449feee46", + "txhash": "0x7cb0ae261889695ae99b64ea9f6468a493f87b90fccf073761daf15ed4868551", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x38", "indexInBlock": 0, @@ -1363,7 +929,7 @@ "logtopic1": "0xfa29cff134420b6526f434ab690a9c3a140aa27b8479ae3d8d83b6c799acbc23" }, { - "txhash": "0x0fcdbb8b331a37eae304599f5e40496965eba8649cdd28319abe9a5184186285", + "txhash": "0x0e6a717775a24331736f5062466715bdf7a4330466d235a6ffdd746bffdcaf22", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x43", "indexInBlock": 0, @@ -1371,7 +937,7 @@ "logtopic1": "0x412379b7f583981ea6e84408cba75ced69039e07ce9cdaa32a8a9dac997aaafb" }, { - "txhash": "0x6bf0e75233c60170a92dcff17d3906533daf2aecc20a427a3cb6260717103396", + "txhash": "0x153401e45e9053f121b36d88763bec1515553e3762cf5f46f4d125b0700435aa", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x4e", "indexInBlock": 0, @@ -1379,7 +945,7 @@ "logtopic1": "0x87dfa85154edde1626e3a09196eab4b60f71887ec7b50ccbbe7ec76c0be6bdff" }, { - "txhash": "0x95a5b38bf61dedf258cbaec502c5e0c09e1e19e90c504dd48af18f9412ea487c", + "txhash": "0x559f888f55e908ab3f4ad9d0d693b4d572ff9ab00058df6465cfe43722b45c6b", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x59", "indexInBlock": 0, @@ -1387,7 +953,7 @@ "logtopic1": "0x6e2466f20ef20cb42d216dbf4a0d934199213e9b8d75bedc9c2d3e038a587474" }, { - "txhash": "0x4e6eaacb23cdbedac1a0468927c2b1cdeec1448cbf57936620ccfdd0f75ae91a", + "txhash": "0x154de45bd8bde35c256318cb983131890d97b99689ec175d686cf88742e82fc9", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x64", "indexInBlock": 0, @@ -1395,7 +961,7 @@ "logtopic1": "0xd75c9abb1414054ca164bba2f8c09917fb90c24789feaa311ee34a0b3f4a82f0" }, { - "txhash": "0xb83984637e9c41986b59bfc847b7c922363add3a6412024a73357549f27bf4dc", + "txhash": "0x67de1da7ebd65a1f384814112a0ef54c3907e09e18c8a0ddb5630a6883a3c8c5", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x6f", "indexInBlock": 0, @@ -1403,7 +969,7 @@ "logtopic1": "0x165e0e0cc13ca53c5af4860637550364c5c90a512906490ace14efb534873741" }, { - "txhash": "0x4f70c780915a9595d214c9c9fc4d96eb7bda3776cd2301f89f831421c13ea768", + "txhash": "0x478293db9f43eec14e4a54b90cb07d6e85e72095f3729d3f80c7e8c33f4b0f19", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x7a", "indexInBlock": 0, @@ -1411,7 +977,7 @@ "logtopic1": "0x16bee816935475cd45501fc5fd01bf913f8ef54330a43d80ef73101a4c728b34" }, { - "txhash": "0x37967eef8dec21d44420c96212a7723608eae9c9df5587b70e3f324a09e0c1bd", + "txhash": "0xd229b870b66a6c5452c88260ef6cc32ffa71363ddbd09340ccda6173af447fc8", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x85", "indexInBlock": 0, @@ -1419,7 +985,7 @@ "logtopic1": "0xaf1f0d50933e49dd24b61a24c670809a5b875e3b746862636288dead8579dc4e" }, { - "txhash": "0x15880426a7d1d3df1aa32e7693cb507f8fc69ab9d90e5559eddd9424cdb4f80d", + "txhash": "0xf70f764ffe1e6c2e2770eab2bf0137ece8563607cc3578c8b0e76709105553fd", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x90", "indexInBlock": 0, @@ -1427,7 +993,7 @@ "logtopic1": "0x5b300d53be5798f53b472dadb8966674169ff3e8d08eccb3f065bd827abd7b77" }, { - "txhash": "0xf1aae9cd76d3f95b8796faf9b2d46303421eb3f8bf370b2367a72817d2600eb8", + "txhash": "0xdf9bcc5831652ac45ba42e4128e057379f8c3b6fb6aa602ff2c1e490ede09321", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x9b", "indexInBlock": 0, @@ -1435,7 +1001,7 @@ "logtopic1": "0x970a64830f255bfc38886621b37a7f1a7284bad6c4a04b6a2442ad212e19a6a2" }, { - "txhash": "0x43c353bb6e0361414d7df069730164f8049957afc9376e24fbce3cf8659b8085", + "txhash": "0xadfcdf36179a98c790d47379913a53dd22487dbd7cb1110da530a0b93247d6fc", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xa6", "indexInBlock": 0, @@ -1443,7 +1009,7 @@ "logtopic1": "0x611f5b5e5ee263412fed40f169d0727f4e6e1a2bc94caf668d2bcf22cddca8c1" }, { - "txhash": "0xe70aa05480e8ec451e6063031138f83fd569c1b9ec1edd2ce6e5256e7e92965e", + "txhash": "0x89a19e25a99d212f59b3f9aa2767bc896e05ce9d1117fc048ae4fcbcdc83b8d6", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xb1", "indexInBlock": 0, @@ -1451,7 +1017,7 @@ "logtopic1": "0x4632fe8e9579f33e2e42e68811d49a09ad1af1f01a68e7ae742f765e8e797ff8" }, { - "txhash": "0x5b7c43d070aea7cb7e9c8daa027e319ebf8662e56701abbedfe2bef07daa9eb1", + "txhash": "0xd20b4075e81e20237b969c5e1859b24ed57dd08e7995dc33ddfaf3d13a5077a3", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xbc", "indexInBlock": 0, @@ -1459,7 +1025,7 @@ "logtopic1": "0x205bcc2489f954a3af7a16da4d6042a75fcd6eb69b848c52b3448acb24b23580" }, { - "txhash": "0x6fafd835f52299368f36bcc17c548df55adfa18f26e56847114893b7ce9de699", + "txhash": "0x5836c415ab49b17a68c21b26c484e9a2a7d6ed3ae02d915be819657b2f0d87b5", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xc7", "indexInBlock": 0, @@ -1467,7 +1033,7 @@ "logtopic1": "0x0a2bc3fd72bd3f8bb7f1de9a7dc9e928a7c6a831237124e65c60c25f8348af19" }, { - "txhash": "0xa53506fce1b528bd18d18154b72025ebf9c8297ccd17cc52a94c2bcc03a504c1", + "txhash": "0x002ad9234cb0fe05d594ff3261c0c0aa9834e884b9554dd2e50796bfb43d2115", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xd2", "indexInBlock": 0, @@ -1475,7 +1041,7 @@ "logtopic1": "0x4c3dffb6198347c61671fa1fafd5d80f384ab67a494f5c7bc7428bcb6ca5a445" }, { - "txhash": "0xd21d210873d8178c9ca4b9fd98e3d90e4f6fb00f81d82eb44d6f0c5c2d3b69ac", + "txhash": "0xf31826ea55e1dfd9a0ef79e69c038c18ce2613ab7521dd40278a57f5abe6597c", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xdd", "indexInBlock": 0, @@ -1483,7 +1049,7 @@ "logtopic1": "0x8a38792846734575025e5114061b62006064b0636caf6733294eb26895bda2ac" }, { - "txhash": "0x00fe86870f7e16b7b184caef8aafe35112faa784d316c71a1932d2e0eca799fb", + "txhash": "0x8d92d60cb82c87fa52373745142a7aef3a4e61c4ef8263143b72921ded517926", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xe8", "indexInBlock": 0, @@ -1491,7 +1057,7 @@ "logtopic1": "0xe70ed54757ba10a0b95454f6483d3d2e11613828f13d57d50b8a3a98e2c8df1c" }, { - "txhash": "0x182de5a2fa9261eb867b7c233750ec22f6456a9902af2677476fef9747af3d65", + "txhash": "0x8f92d8ff45acea30275dfe8b0db8275ef2788dc98e2e463f95b611c06e42605c", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xf3", "indexInBlock": 0, @@ -1499,7 +1065,7 @@ "logtopic1": "0x427b8ffdff6454ea85c8251407144400ed4e693ffb6a74f319e0238c0e72afad" }, { - "txhash": "0x5e8121133745699e0ffdd3cdf62fcce14ad16005c7ec53225df1aac03fc067a7", + "txhash": "0xca302bad2ca8f5faf8b03738527fc4336d676426582ca7325fc8d056223d0800", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xfe", "indexInBlock": 0, @@ -1507,7 +1073,7 @@ "logtopic1": "0x2dd51e8325001014c6845bc5ad51b134ab237f95ab18da55cabc4275b029bf3f" }, { - "txhash": "0x06cf9afd2a64d19c462dff4acb3c32bf9603478d308a5107ae197acf716be505", + "txhash": "0xa96c411f76d0a78fd803b9e54451f18c325516bf7f2425dc13a186087c7cdd6f", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x109", "indexInBlock": 0, @@ -1515,7 +1081,7 @@ "logtopic1": "0x321c62425869f150c2cb7f489691c3e5cd49f7cd62d07ecbb7477c4148aaaa0b" }, { - "txhash": "0x0390a326d5615bea72add73e2398cda64b160a4f7980038997006feeb1721d62", + "txhash": "0x5453ca1ac0d4597813a0719201d71fbaf656645760f2e9552963e5ee7bac2713", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x114", "indexInBlock": 0, @@ -1523,7 +1089,7 @@ "logtopic1": "0x1f6ebf3e4d9c96ec86b866137bbec9bbb56d188e7126babfccc6394fdcc6a3d4" }, { - "txhash": "0xaa9089bc7bf3a9fff0ac8c3d8974ebcbbdf24c494c6be9f6dc330700e0c511ac", + "txhash": "0x6865e9e71c92547c91d69f78d48b135cf41025bcb5aed177989683f6b747e660", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x11f", "indexInBlock": 0, @@ -1531,7 +1097,7 @@ "logtopic1": "0x9ebbf91a66183d0d37b03faf46daf8fe238c1aa2b24e6663dc14e50557d432c7" }, { - "txhash": "0xc4740d2ec8cc977d641f18f97c1d789b0a761e0a8057105437acaf8f7e5f33cb", + "txhash": "0xdaf6cde4356d00a862a0c1c651703008413f3ccc4d00f9046fc83c09ecb1ec7c", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x12a", "indexInBlock": 0, @@ -1539,7 +1105,7 @@ "logtopic1": "0x94605c950838b2b0b1ce76f58acfb91a94c2aba787d02add7187360989745a4e" }, { - "txhash": "0xaab8e9062dcf651d0bd5fff9cb086ee779f3f91bce1c9a090baba71e0500d696", + "txhash": "0xe72dff0e31241074f1696cfb82a60f4ce97103508edfd854fe2e8e61a694bfa6", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x135", "indexInBlock": 0, @@ -1547,7 +1113,7 @@ "logtopic1": "0x3eb32abcff52bfdf0887e9aebaeeaee4a61b76f2fbc9a183c2afc8552d46c3f6" }, { - "txhash": "0xe1fb51da4cd5656875be51625ad129bbaef0a28066ccf1729dc8d4809f636240", + "txhash": "0x140b3630a28806c4e07ade0b9ef16d6c46fb643dfefd197f8732ab6fd1a146ed", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x140", "indexInBlock": 0, @@ -1555,7 +1121,7 @@ "logtopic1": "0xd314fafd686fcd729a24ff511ae5e19248bd6ac6de8c28c79918df72de20e63e" }, { - "txhash": "0xed9806dd032752f6fdd4234b61a6aa6941af207de555aaaac5610b04f4be967f", + "txhash": "0xdb0d10d5fb34e5ccf5b1e3bb0eb7107a0772bbc160430c02c8f9de9f1b58bde2", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x14b", "indexInBlock": 0, @@ -1563,7 +1129,7 @@ "logtopic1": "0x951b3b37c2a87b5a67918e750832a50c5565298a35390bad3ffffadb2f7b4afe" }, { - "txhash": "0x66cbbe01979712ff30beed89a5088350249b13ea9d1c162b3d770c4ae98387c0", + "txhash": "0xd7268bce9c920c807d1c5a4bdd9ad35e6229feba835b3a0ffdf1226bd47e4f40", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x156", "indexInBlock": 0, @@ -1571,7 +1137,7 @@ "logtopic1": "0xe067f85eba81feba79bf640415c11ab4448d5cc4a41652fc0a200be4d2661786" }, { - "txhash": "0xfca2d9cd7cf664cc092bc71e1ff0e6ebefb991bd0a83d1a42d2ebb0fd6b5a50f", + "txhash": "0x94018987b14bf2d6796924a52406f3659776f92832953fdd62d44673dd7e817d", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x161", "indexInBlock": 0, @@ -1579,7 +1145,7 @@ "logtopic1": "0xd73688caabee79f6ecf3a0b092d26e639b7e486e45c00031db80d3d7abe8c683" }, { - "txhash": "0x576ac317e0aa5ce1268c528945bc17fddb69b3391b22df0db5ef6ac7d3d9eced", + "txhash": "0xe9d9cd83cb08f1dce82791973d9cda526004b154ab7c41c2115af0db4f9c3494", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x16c", "indexInBlock": 0, @@ -1587,7 +1153,7 @@ "logtopic1": "0x945c01f307d13fcdab0a2a3a4c4bd5ebb69a00c3dd59896a959664e01ce10695" }, { - "txhash": "0xed8db5d85b8d9618a7c012715866440ab390b23bacb24885a9638b9d48028faa", + "txhash": "0x9412fef1c0313b43d6bcee24f8fedf864ff075a158b254e1f47250347459935f", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x177", "indexInBlock": 0, @@ -1595,7 +1161,7 @@ "logtopic1": "0x3f410a22d042d915c50f9269337a2bc7155f86d79bbff1721d83f44153635ac2" }, { - "txhash": "0x90dd94f9997d05a851a81789518079ba4251ca0c3485083dea817e32df80a2b0", + "txhash": "0xe26d038ae4f3490bd88bffc6dd8c673cec148d00d1332958a94e0155146bd688", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x182", "indexInBlock": 0, @@ -1603,7 +1169,7 @@ "logtopic1": "0x4b85d3d5e4e06787a4e7e6d00f4e2f6d7e0358d9e511177ab584553d4ca06038" }, { - "txhash": "0x019dd8e438d6818397398da44bf836cc9eab53e49fe604be0048bd72d06f7ecf", + "txhash": "0x50f46bf3575161f98d3e823b1e8708627ef2c2705e9fba8b43de84032d791306", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x18d", "indexInBlock": 0, @@ -1611,7 +1177,7 @@ "logtopic1": "0x0c8e91bcf03d65aedba99f4f76d3ff8cd007668948ce12daf4dded4761c7b19d" }, { - "txhash": "0x694c644dd4e60de18a392c912e6c883a9fe177f6995d3ac4b1d0e121ed0b7b2b", + "txhash": "0xbaee8142b7fd3fa6fa047a67ea1d12b9e366bcde62535d93534f32386fda0222", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x198", "indexInBlock": 0, @@ -1619,7 +1185,7 @@ "logtopic1": "0x82a4bb68f7522b711c9f22b00f9c5e050f52cb2bc5f0f50eadcb12a5f1c30839" }, { - "txhash": "0x48578438fdd693c25ed25e30c141ed5db0743f49c55a4d355c774f5da6ba0a12", + "txhash": "0x168c04757e530b0f6a19b88bb769693adc15ac857c48a2aa3fa67dceab97a484", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1a3", "indexInBlock": 0, @@ -1627,7 +1193,7 @@ "logtopic1": "0xce87527a0ad3ddb4d0d57d8077e84d48a6f3810f2a5672143d3b6969b0f86d6e" }, { - "txhash": "0x6daaa691e14a7a4c586ce5f411c60671c793c2ac01710ceae2e36b2cc2631822", + "txhash": "0x95e1fd4c38074c94083bed06f882b6b2f88364de3413f7ab8fd47a57cfe239e3", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1ae", "indexInBlock": 0, @@ -1635,7 +1201,7 @@ "logtopic1": "0xe3cb3b98042d005e52e8bbbf49b25e11be63ec7c63ae5a5043e44c545fce633e" }, { - "txhash": "0x7e1ef2e07a223c6ad828353b5052bba8a87b5c5115ba507f4bd22f9e842a499b", + "txhash": "0x59b762afe595324d884387df2e79ac368fe6e8f5a8985c913b7f447459c91b79", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1b9", "indexInBlock": 0, @@ -1643,7 +1209,7 @@ "logtopic1": "0x1fac03facd67f44699ff86330a7f959ed3745add76d323f4832bc17c35be45c9" }, { - "txhash": "0xfee141740da30da512d76b3db294ba34e78a108433fc76054c9d93a6222023d8", + "txhash": "0x1a11fc2d6215e58d2d50ccb49c641e0ff870d7eeb54d7315b4151031bf9cde4f", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1c4", "indexInBlock": 0, @@ -1651,7 +1217,7 @@ "logtopic1": "0xe4c7ff156c2f31d046217715d0f193c8a6b3a7af6341d6abe0e28c49d1210638" }, { - "txhash": "0x41f54d93a2f08e78459286b2502954cfa13dc70a18ca7ec73dc1905905544aca", + "txhash": "0xdb923b2884944f8adbf8a4e771e4001de4b8da897191c7aa9a9153338e6d0a78", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1cf", "indexInBlock": 0, @@ -1659,7 +1225,7 @@ "logtopic1": "0x9225354562a563158ba2ce0e86cfeed7fde0ed27c77342aaea09551b9c00ea19" }, { - "txhash": "0x63dfd5f89048de40697cf44e045668ed559be531969a8a1e70d0276e5379335d", + "txhash": "0xf9d3b87c7fc9b4c13eeec16198e8af4ed75c954de57fc5d9a9faf23a6607642b", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1da", "indexInBlock": 0, @@ -1667,7 +1233,7 @@ "logtopic1": "0x231eb803c34ec183e74b466c105b5518b554ce215bbc31bfa52c384138b8479a" }, { - "txhash": "0x7244fa2b6a90be34eb69c9c848da7784cff392463f1b4c52307df75bffcf36c8", + "txhash": "0xbc52633dc609189d4ff57b01d62bdb08f9d72ffc41b56948bf14cf6e6d4155f6", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1e5", "indexInBlock": 0, @@ -1675,7 +1241,7 @@ "logtopic1": "0x17f29f600f5128013ce183ac10efc609231aff556df37c8f5d6802c1240c22f4" }, { - "txhash": "0x8f31383336ceaa850f701b920f47617acca17664ca5f4c971df87ddd0650ebbd", + "txhash": "0x7faacc820e63e7d98aa1bbf4f06e6b834ea0c09f92cf7f0215b9a362e626dee8", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1f0", "indexInBlock": 0, @@ -1683,7 +1249,7 @@ "logtopic1": "0x8405cb4703a08e5160e343c37d42df5f045091f6b22664b0ec3f587df18d2d82" }, { - "txhash": "0xf08771ff65480e0a952226da4d9f994451e971e3acf08185b9442a106ab9c586", + "txhash": "0x44982cdb60b916247d171d4601a276d35fdf2b4609b8f284c9c1a370d8b83f9f", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1fb", "indexInBlock": 0, @@ -1691,7 +1257,7 @@ "logtopic1": "0xe865c3418b47b88e94c28956b326a799298fb44c62a7a6bb55fd991f7c0442ca" }, { - "txhash": "0xebec9c429aacd0d3b9a9b0650e3136763b70799015d78d0718a37a56bb840130", + "txhash": "0x98977c7f5978be5e730e77d48d8c6a424d8fc5e2dac8054091fb267d39c7f283", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x206", "indexInBlock": 0, @@ -1699,7 +1265,7 @@ "logtopic1": "0xec200bf1cc6a2c5d58960dc3476cc4794ba1a9fca2ac3d09b63e7811b7299c3d" }, { - "txhash": "0x52edf7a236dd4d81f928a63f9249a8b3d60e09ae1e44801ace03c2f806cf539c", + "txhash": "0x571efdba0d0d1d75f25fee27437772f66e3b5eae7b7360d46cfd10f543a48714", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x211", "indexInBlock": 0, @@ -1707,7 +1273,7 @@ "logtopic1": "0x09b79212fdf6dfcd322d6aabd5ba752b962d7e575cf299112bead28ab955f4c8" }, { - "txhash": "0x08a32aa63fce9746806dc432b63c5059c988cae94575471a64e898dda449209b", + "txhash": "0xb762b9e7af89f7a7798ade8f2bc6445262220ac9938dfcc16a6a6594d1e0db89", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x21c", "indexInBlock": 0, @@ -1715,7 +1281,7 @@ "logtopic1": "0xce285eb20810f2d026bc0b62faf3735df2193835ffd85df244ecc2df24f43b00" }, { - "txhash": "0x160b312c6247f5629ef3557427776e40b11c6da95495086f92bd3e68796ead01", + "txhash": "0xd6145f9061be63bed4d88f14de088ca1ad8e4b928cea570fb529d3ea6321b6e6", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x227", "indexInBlock": 0, @@ -1723,7 +1289,7 @@ "logtopic1": "0xf26b2f780c4b92b3f15f1d6e90f7d5a176b58eefea6f0d9cf2f8a0d1f86a139f" }, { - "txhash": "0x112b594c142d35c4888d2ea319c3d2128fa6d485fd127abca1c1fca07c10ad23", + "txhash": "0xbaf1e1bc18bad6d7788791cbc1ae5bb91e2dd4a09c50c999385a8c1835414e35", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x232", "indexInBlock": 0, @@ -1731,7 +1297,7 @@ "logtopic1": "0xab5140d25dce39c42d511dba633cde87b45465d48aa4ec211b27de998abbadfc" }, { - "txhash": "0xcbb68fb40512406853eae3d8378920825b17ba9ed6849ebfb115f21e07803425", + "txhash": "0xcef14bcb034bec993d8d12107db4dbdcf23f730dcf5d42091ce3a1ea6f7ac13c", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x23d", "indexInBlock": 0, @@ -1739,7 +1305,7 @@ "logtopic1": "0xc558392238c2d11cdd04a6ae37065f3541a22140500f92c0d8006ff95e8df595" }, { - "txhash": "0x4aa773330bd4bbf6ff2b0754b34ec922c9cc1466702f07aae225637e0bf812b9", + "txhash": "0x3c84318e56935f73527aca010331231b010ad0903bfe8939994ad9680f6d3d25", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x248", "indexInBlock": 0, @@ -1747,7 +1313,7 @@ "logtopic1": "0x69626497767f58c222726a6a3c65050bcfdbb9346f9e5d146ef02bf59275b3d2" }, { - "txhash": "0xe5af8b4f6d6aa91fe8d453312890cf607a28bd49e3f6aa4fa032dd3d8606498b", + "txhash": "0xf654d5f9c472097f745521cdecdd9854b4c4f1e23c7c027121724d67be42cc42", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x253", "indexInBlock": 0, @@ -1755,1300 +1321,1735 @@ "logtopic1": "0xee0b894f33a9643c94e4e2237077260f4191c5bf6bb3c17a2212b86af6f67df4" } ], + "tx-emit-legacy": [ + { + "txhash": "0xc9e729de373f2fcab9ddd36402c047cb117522ef48b25435bd415b9bcf794bb9", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0xa", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0xb8d28e7b703baf999848ecbba44026cb6479b3f0466037bcf2221ffc3f8549f9" + }, + { + "txhash": "0xfe4c001ff9cbf3338dd712296b718a6467ab734617ca225ce7ce4e3a9547be41", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x18", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x95104e47e1982aba633477f377b1511396c3fe83600224bcb0c78949be705b33" + }, + { + "txhash": "0xffde4e2fd1cd2f5e51e564b08216b9ef80978c586098221cd19f1ee742db1c03", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x23", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x2acfc92a1cc51397c95e434631e449d83a81de91964ed735a8c8b71b35e1a626" + }, + { + "txhash": "0x965195498584dd1a4ee5ae7d60e5bb4dae1254b2ec61023f7b86678d75643201", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x2e", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x5b6618f0def0d634d51118d232eadc26ecbc8d54a7efaa225afc472f0a611c69" + }, + { + "txhash": "0x209a012091e6c869a96f21aee8de7ca44490a593d0f619793b961b2ba4a777b2", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x39", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x349c26db328204bd2527eb45003b0039d5a636f76c8849bca0b34e8fb134f505" + }, + { + "txhash": "0xff76c1915b804a9f4abe17f6564b278ece6cbc1ceca0604856e7f440cbd6d9c8", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x44", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0xb66fab7dddd4d16174b227a6f958d7ba2ae8ebc52d763b02c1ff944362755e6e" + }, + { + "txhash": "0x39c37d8cff047f5047fce694f7703b57b08cf414710cd94fc3daea5902330559", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x4f", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x780fa5a814a83baf682b2f170be956308be6ce1bf84ce68ca5f3c59cc41c7c28" + }, + { + "txhash": "0xbac05861c5a87e48448ca240659aca18658a08c7d0b6318690809b0c227470db", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x5a", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x9739ae7192ad23a41778719941582886701a0830589c7ebfc5db094037635d82" + }, + { + "txhash": "0xf24d6d5bd0136dc7a2cf4ce1e2daf6191b415af43dcaf6bf1d43ae69ef2a306c", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x65", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0xf5acd98a17a3425f113b869e0dd03f82ee696401d2e7f59e8902610150a95a20" + }, + { + "txhash": "0xaf83fcaed15f46e777c9cb54fd6465f00dd6d929c556bd5644ea39fce51be74a", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x70", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x5cd04d660080fb51a0cc8df0d716e1bff4eff98c887cf3274aabe7ec53dc3615" + }, + { + "txhash": "0x7382ad28a6589fcf07195874a36eee8f4c5fa22f3288a1979b374d80e7c6fb88", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x7b", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0xf199b2d65bb711d578312320d210574bcc79d63c841d7dcf96ee3604140a7353" + }, + { + "txhash": "0x730f124954d2b20c9ebfdf6715da7192a570450b485ae60c12a102fecd80d21d", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x86", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0xe9bc0af4e1917255f83262d4d61622be8b86fcb24a5810c7b592dd6da6861d56" + }, + { + "txhash": "0x69e193cbcc3231501957748043aa48e52b141d0fa38dc6f5027e06790e3088fe", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x91", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x74871a06c400033dfb8aee09db8282719447dc850ca097c5e240f67a2fd7fec2" + }, + { + "txhash": "0x375b37a5a1fc955be827b5782601616fe2c2f420728237644f93f6ba41aa925f", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x9c", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x32eac35ea119adcf265e25a03e27234688fd743982f4ea87940a85b601b4243f" + }, + { + "txhash": "0xbec707c5af50adffd736ffad61ec142954a1a0c79b64b7bc7d826417ef746b1d", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0xa7", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x6d8f3f1992b15fdc2a757b2b99a8a3721589fc2e31188ab7620ca2884102ece5" + }, + { + "txhash": "0xdea7d229c8331223fc55f26e6db29436721e1d94181fa4aa35ebea2f52250058", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0xb2", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x10ed5dd66ac107d9c27405dd97b947d333696bb8749b7a6b0890b449d3bf2238" + }, + { + "txhash": "0x84ac82e58add797c823abd8d3b4f4a20665dc4068f300be3a9459bf2ef456ef7", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0xbd", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x8348faa37f759999e3e7d161ca60aeee74b5c55075e626534a26da3aa8962a71" + }, + { + "txhash": "0xe0ca84624d60f1953d23b326950059ef3223e3330bdcea93fac344ec82abc168", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0xc8", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x228c9eabdaf185c57233f73fb31db8870dd1d46eef92c3d4c5a5eba1b8f73f00" + }, + { + "txhash": "0x099cb6b36a37892bbb3d51706996a094a1415a6f33212f243865b875b72e2b8e", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0xd3", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0xee9be26249f0e23118ea14c2c58ab3fc7e42e888edb4b1de6de4a03e0b793b00" + }, + { + "txhash": "0xc2e05a39699ee47ddbce4e95a5340c269f1ee97e5a7548459d31ad6799c0890f", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0xde", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x18c688de10e38d70bcc478405df715df76bef7c2783e310b391dc958ab5b0901" + }, + { + "txhash": "0x40f57b0347ea5eeea424e89e020452901299918adbba53ac7638f90ff17ca735", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0xe9", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x656fd2851f3badaee7500720d14437294b0fcb76990f68895b487132860e635a" + }, + { + "txhash": "0x96a0fe2e43927cf872963c776aa100c66f2113175962fc6086791c32ae2733cb", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0xf4", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x70fe2e29e879b5adeef12bf7a782c3fd7815b6fcd3defad6eea94b8fac090e8d" + }, + { + "txhash": "0x74a0161cfd87a7d05de5e037daf133ba5ae70b2a16762e851241223c57747d7b", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0xff", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x95eac6698d094a89aa0fbdbe4dfa56a92b928657bfd2a6374fdd5ffadfd8ebe5" + }, + { + "txhash": "0x5ae569d9a62af8934e450e18e1f228f47122ecee5a989786ea8d5026924bb1a5", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x10a", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x24562ede5125f88e7d44659502457e8632f0cd29dd768d7ce337e567830c6b90" + }, + { + "txhash": "0x6ec782b355abd516c6fd977888a21cb7aa40bd801f5fa617d24125c2a64b869d", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x115", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0xecb9f805cd314a9aef8cf2c51ccee54704c5cdcb0cf745bd3411c0cfd1bb2381" + }, + { + "txhash": "0x7adbe701b69f8e23d502a523be257949189f1c64796dcb2a196b1a38e0bb9fc0", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x120", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x0e207a83fb16f4e1d86cdb18c78df10f272b8c9dfc773d8c636bf763e5d86ede" + }, + { + "txhash": "0xb906b20d68d3e9eab03429a2138b01a70b3849e38daeffa372bbb2691a65d4da", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x12b", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x1098fa447b36d691c6d8801147ed65b27ab8c9667e089b59f1a1cdbe54cddecb" + }, + { + "txhash": "0xedb1504025eb7f6b7726435ebd218617ad192c7b1c1d91f5fa391e2282fdd888", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x136", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0xfef2849e52369d74814504a0592be1651fc3581e54b57283fd34053344624f83" + }, + { + "txhash": "0x18ab4d8f2762ba37f4386d2b2ccb442460fe99bd12bc1e64979008300b1b3524", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x141", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x304f1607803b1445143f85e860e6837543043e4a7ce83fb6c4b98a2b57a5be44" + }, + { + "txhash": "0xeb189808d46e050503dffeb59abb4f6971a926b2ce701d7a6fc2858a62f9d656", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x14c", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x6b5eaf5499e02713812d712b5b5d3ee95e185212f6a71cc9a583a971cd861a4f" + }, + { + "txhash": "0x644010d9403c3e434feae06db0943ee0e382a7a16b3534738ec34608134463c3", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x157", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0xf4770d7a56ee02b105688173dbb647939e9168262a4d14b9f6a6efe19b647388" + }, + { + "txhash": "0xf75f7d6ca00fda8215c4f48052b84f6a083b5698d13a627f910e93eeb6dc9bd5", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x162", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0xf4c5c0fe94f1f62a752dc2b883078110c5753ac15ab5fe6f425821fb61963118" + }, + { + "txhash": "0xd989970efb8d750e0d5bd61ff5cfbf84aa5fef070d6bcc6f71258471207bb046", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x16d", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x8d866e9225b61c55bb3e8d27f9eed41faec221f3eb1ea322661ce1956885d021" + }, + { + "txhash": "0x16622bce94aaa8e9dfd14e1a3889aee0bf65769454b7c781a2c822bdc2811336", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x178", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x7fffa2c61f6cad00c700b65e33937fcbab57dff84b2e792d81126626970905f1" + }, + { + "txhash": "0xe1c47b77b2b7c5ce5f4d5984ab1279abd3f976603e5d1996b454500bab1e4865", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x183", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x9f569f15edd7832cd57a6cff95e09ab162c23f3dda7e729a74b2f41624294998" + }, + { + "txhash": "0x3a1237cd02dcd1e6e8974ed68da1077dfd2dee6725e8287254e29ad19766d649", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x18e", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x22bc306256606a63c7e6adbfdb53ac8a2579216b16bcdc452de151e042d02124" + }, + { + "txhash": "0xb9d6436537e309c4ba46c1c33a099f7f4f0cbf408d39a8815b343972d104822c", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x199", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0xef03c0a4bb7099df0152e975b6c3172e7f47225648d2754efc7e81f2d1ed71c4" + }, + { + "txhash": "0x54713a1d1c77ea2e204d386c140d54cf409d8a7290be65251399b02bfc1b6718", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x1a4", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x6542b8fc06728a624d10d21d45cb3fc58b811a380547cab3d5bf9e8af0de6951" + }, + { + "txhash": "0x9b50b6ff2a9fdd1fa9b5a016c500bacfcd6472817c916582d1c7f908a792bf42", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x1af", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x6760889404c1143da18e9f066f1d68de75c9a16a9d10a280d41864fd7580456f" + }, + { + "txhash": "0x36d9fc6535adfa5bd43b983dbb71f27fe4e224f38ffd753351241951f147cba0", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x1ba", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0xef429d45b992d9e888f08c3038963cbf4aa2b1e5b209fff23a8299c595430277" + }, + { + "txhash": "0x1f137085055e119cca83f54e757c0db8f19a6781305a2c9348b5fdc2be9668c0", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x1c5", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x9a9b2b0f17eb8c44f3d00dc6cd8475e9783cc715b3779af9170ddeed0221bcf2" + }, + { + "txhash": "0xc656c9855aca6fa4ccedde00cd56b2a340391315abee1c18228dcc4e6d482b56", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x1d0", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x04050d53dc4e38076a46f473ca2ccad11c6f0357bccc0d1fc7a16e0523892956" + }, + { + "txhash": "0x77a65636b0191f4f3eedd30f15a98a3e6a0132c0496ea87a85932d35971c48bb", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x1db", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0xbb8f646a16b72f34169bcd82f0c023b582d2ae9f395fb59f9e022e6caacd83a0" + }, + { + "txhash": "0x893aaf0147a55c11d2f3a7316abe881fd6176b170f434d5a8786bae3ccc7b4d1", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x1e6", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x304daa529f8e4e88c6c20e572fd04f196d6a32a5a47361118b7f42b4602c44d0" + }, + { + "txhash": "0x3040182f2f5da3ce5e34f51eadeff0200754f66f65e2993047ec7970300f2369", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x1f1", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x7e93ec1b055e40d91bd222d7a3d4b0e85d09dfd561b0cd47d09a25fe183a06da" + }, + { + "txhash": "0x98381ec459f4b3df5573e50dbb902bac9822ce2ffb9f5382ee3d46485a6e0700", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x1fc", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0xbdfccf10ce95236042860c90f84756794940d0d15da20833f8bdc1b921be3efa" + }, + { + "txhash": "0x50f1f26fbf8dad7abcc19a5330645c94410ba61993f68b00d992195a4f9c0d69", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x207", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0xd407a81a8c9c2573926ab54ecd5ee3eb6f1853de6b11142313df08897b6842e2" + }, + { + "txhash": "0x8e9a160d98ae1ef12734744cfc7d76fe8c7c9913612ea670cfdf33ecad642fb3", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x212", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x005c4510db462e3bc91da9b8d22c23873a9f44acfaa4c50c91af1d92652e2e34" + }, + { + "txhash": "0xbbbc951661c3d4f863d5e05b77682ee5f2640fd3a33d499ab644c02d677581f0", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x21d", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x2724a489616bca201e7565382948f9832cbb927d030b1d2439c28ba1910c9bc6" + }, + { + "txhash": "0x4b8f8616a8e4c15a532d546db4d61a3cd2f6d850b9f23f87ad6145746c2c660f", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x228", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x474ee39f920d2819e9ccf6080e9b95c49fc2dfc9841cb795583b81b7497c0425" + }, + { + "txhash": "0x9c178718bacc5a61736d5659e6130cf16b96a69f0a0d2b1684d70179d4d0eb2d", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x233", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0x67f77810c4968b55b6ae34b927b213ced7c266fba0cf752957a861450bb43a7a" + }, + { + "txhash": "0xf83ffa5e5321a459515c73c3a553c595ecc4cc1048d22391609427debd3f9079", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x23e", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0xfc4b6ee72c1b0e13d4d0c218aa48c6233d313507fb55d142e7a2951f0b7c07d5" + }, + { + "txhash": "0xd52afab5788002f90601ef20ee8254a41dadf76832c70da4bb0ee4e6c3cd9e5f", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x249", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0xff442992eff2fa28cd13c50239c9e15f907488f574ade0e75cdba2cfdb26c480" + }, + { + "txhash": "0x96a373f0a6b2f247ba998c24f9f606e8dc65a39e9fbfd5f9034b4caf0e7dbd69", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x254", + "indexInBlock": 0, + "logtopic0": "0x00000000000000000000000000000000000000000000000000000000656d6974", + "logtopic1": "0xfb0e917bcfc6a3ba3c079d0f19d7f2ede25ac596e725d016e0c31dbc8b390508" + } + ], + "tx-largereceipt": 11, "tx-request-eip7002": { - "txhash": "0x45d9e01d8dc308a89f2911954f518bc0721d7975d5692f6969217a05bc0e23a0", + "txhash": "0x27d8ca12587f28aa0184966fabcbeb321b438a6495d5e8294dc9c62525f41b8c", "block": "0xd" }, "tx-transfer-eip1559": [ { - "txhash": "0xbc83f75c374dc1b4418ef18bf183ed000b3f7c1fca3da045c0f5253eb0177939", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0xb", - "indexInBlock": 0 - }, - { - "txhash": "0x374ca7fe3bceee86e9b9d9ecb31858eeec3ac7ea7a632e56be943bba4e587fd4", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x18", - "indexInBlock": 0 - }, - { - "txhash": "0x9ff78644fb64277ebe7838620b5817a0dbfbaf6b45713b80698628246492cc83", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x23", - "indexInBlock": 0 - }, - { - "txhash": "0x7f7b81c472c91ca8c511f29cab406ac201c770fad32270459a79f54d86c52614", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x2e", - "indexInBlock": 0 - }, - { - "txhash": "0x2ab6b266e3072e1ecbb21ae3111da1face60d84b41191287fa0f95971944e888", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x39", - "indexInBlock": 0 - }, - { - "txhash": "0x25b39f052f73a5bac64ba238ce4ffb9770a35dbd835136cb9ac66f4c3ac936de", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x44", - "indexInBlock": 0 - }, - { - "txhash": "0x9de0b20d432dbbe839b178aa91cfa5381bcd84af3603bf48c4494042f716d507", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x4f", - "indexInBlock": 0 - }, - { - "txhash": "0x610925d303403f4e3aca2495a12e5dc1688839b4f256f80dca33dba22ed45e63", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x5a", - "indexInBlock": 0 - }, - { - "txhash": "0x4abe64b41866828e0be88788bae36cb03dcbf85d070807670ccf27160e5a9a4d", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x65", - "indexInBlock": 0 - }, - { - "txhash": "0x39f187a146d61009a03fecd06cb2f4c4b38cd26765905c3362fde02c046c0c85", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x70", - "indexInBlock": 0 - }, - { - "txhash": "0x2f0d711bdc3d0b2f8efecc78a50bef10cad8dbe36a636685df0ce5e77ff2f470", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x7b", - "indexInBlock": 0 - }, - { - "txhash": "0x0131d1b2950a637e2709deaffd487fd6b395485df174fd33dda6650bcf6fd42a", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x86", - "indexInBlock": 0 - }, - { - "txhash": "0x7a1a947af6d0713ec475e0e401ac0c30502f9d23a3eec761f40116bd1dc9f0c9", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x91", - "indexInBlock": 0 - }, - { - "txhash": "0xc991b6e9ea27ca67d7b00afb5c3dcb0d9de6d2890d5ce4e3f032d9e7b2cb44ed", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x9c", - "indexInBlock": 0 - }, - { - "txhash": "0xd190fa45214c261223635b2a8c2659b2a142d8f213a470917075ebf2482e0d28", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0xa7", - "indexInBlock": 0 - }, - { - "txhash": "0xb4ae0934d6d6775fa216a6f14f638ff0d394bcbfbc97108863a64cf239e0eaab", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0xb2", - "indexInBlock": 0 - }, - { - "txhash": "0xe41f1f5bb0c5f4328c608347f2b347ba249793f47395aa57f735d45fbe564463", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0xbd", - "indexInBlock": 0 - }, - { - "txhash": "0xff3473cad2636d1688009c27d790172c3f359a12b2c46fae71932cfdd62982c4", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0xc8", - "indexInBlock": 0 - }, - { - "txhash": "0xf3892f186643cfa58ecc5a2770c3c06dcdfa06a7701e08e42a8817d7af24093b", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0xd3", - "indexInBlock": 0 - }, - { - "txhash": "0x258d7184e3022ec70cef833ae3a66dce9a36e42a7d2dd0d9e5cc14ed1fb5eedf", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0xde", - "indexInBlock": 0 - }, - { - "txhash": "0x07fa584efe43c50c1ee8bdca6369841ffa7121576750cb7c08bc251356e80a15", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0xe9", - "indexInBlock": 0 - }, - { - "txhash": "0x092365255715c991b48ab31b184ae51f2758c17b2ac1aaf7d1036f105bb333a9", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0xf4", - "indexInBlock": 0 - }, - { - "txhash": "0x8034b5908a0204004211f252b06d2f4efd19d276adf6aafbed3de97e5435499f", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0xff", - "indexInBlock": 0 - }, - { - "txhash": "0xcb89f9e7e062c3d72798c6cc38f7c4ec26a5fa6d8cf86b33b9859657264d32f7", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x10a", - "indexInBlock": 0 - }, - { - "txhash": "0xd37c021b3d8923723a80a78eaf9840a72f4d89aaccc63c80af112d52434fe886", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x115", - "indexInBlock": 0 - }, - { - "txhash": "0x653da2892fc5b19e542ee54ea44cec8b98c7a6a778a6e15cb4007db8b76ed34d", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x120", - "indexInBlock": 0 - }, - { - "txhash": "0xf0721ceefdbd4ad6518652cb402c0611180101bc655545c973018120484c8d7c", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x12b", - "indexInBlock": 0 - }, - { - "txhash": "0xb79eab5bad9b2b9c51873f53ee7820e99446c6530ac407be032d0bda6cd601a5", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x136", - "indexInBlock": 0 - }, - { - "txhash": "0xb000e7ae9e2b767464fc90d633aff286a663f6aa4c33b27b8649867f403b8848", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x141", - "indexInBlock": 0 - }, - { - "txhash": "0xa79af0ce0ef3d6c97f08ad0519ee84eb102a8611ff9bbfdb513b737582c66a71", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x14c", - "indexInBlock": 0 - }, - { - "txhash": "0xf3b4d8172c990c289f658b6c3ecf980ce627bfe540ea7a9a11cc4708a38d1e0a", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x157", - "indexInBlock": 0 - }, - { - "txhash": "0x385cb2c14d85546645d1cbefa13c01bd6b2eb7f848fc132dd33631b3693d0234", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x162", - "indexInBlock": 0 - }, - { - "txhash": "0x2cfecb05aa5dff4016e567291331de567995aef33595892dcc8da9e8626c5e29", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x16d", - "indexInBlock": 0 - }, - { - "txhash": "0x3c551a5bcb06c70c5ed8a024b9c3092d145806ec47c79711e728b776581ba933", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x178", - "indexInBlock": 0 - }, - { - "txhash": "0xf212343a00e92eecaa2882a9028a974cdb53427925ca5e8e514686429783b660", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x183", - "indexInBlock": 0 - }, - { - "txhash": "0x1690ab67922c40b4feba88cb3dadb633142ee6f8e394b61d5ce74efe81aaa7a3", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x18e", - "indexInBlock": 0 - }, - { - "txhash": "0x5051062bb54302b19e2f01987ce412c4026a6eccd8b1224adf89638a893d2ce6", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x199", - "indexInBlock": 0 - }, - { - "txhash": "0x45b3d0b9de23a95ed6af569805c29bbb67e6a70bfa5f5af994b4d134f68b9fbd", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x1a4", - "indexInBlock": 0 - }, - { - "txhash": "0xb3446d893246dd626944b802651f051f7e1f52827b8c1b1a1e1b4ab597286726", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x1af", - "indexInBlock": 0 - }, - { - "txhash": "0x99d235917c941efc6dc2799623a2b36fc4f5eb2a975952e0a402cd368b2c5c3e", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x1ba", - "indexInBlock": 0 - }, - { - "txhash": "0x1841d6e9976ab0bcbc4b00cd67922c026eedd7663122d8f97ad4108f47d70813", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x1c5", - "indexInBlock": 0 - }, - { - "txhash": "0x22c29f259f4f88ba7758679ceba786815af37b386f899e91fe0196729acee24d", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x1d0", - "indexInBlock": 0 - }, - { - "txhash": "0xa157bad573954d4fab243dbb5fc73435233bd00ce8be8dbcd9f7be80b1d17a49", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x1db", - "indexInBlock": 0 - }, - { - "txhash": "0xe0f9de399946816e8a2db32d0738e41d22cce9f444f60824128e5b76ba0e813b", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x1e6", - "indexInBlock": 0 - }, - { - "txhash": "0xf78a2067ea28bab199b8d21a42e09553c1bb8e5df791c76f3ebf77f9162e0da3", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x1f1", - "indexInBlock": 0 - }, - { - "txhash": "0x754486a577ea77ec5e00664bf0451166b2d5dd9fe42e3b55b9824f78aa628d49", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x1fc", - "indexInBlock": 0 - }, - { - "txhash": "0x5eee12b1b419ef402143847e1940476be871883c16c3a0a7229b817123c2a408", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x207", - "indexInBlock": 0 - }, - { - "txhash": "0x5970e58e6ed36d823ef504f70b1a28acc9433b76284ddf1a3814b3beba37146d", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x212", - "indexInBlock": 0 - }, - { - "txhash": "0xf5166d4fec3e9457916b4079e7526672cf797bcf7824b69a54867aa78e2f2691", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x21d", - "indexInBlock": 0 - }, - { - "txhash": "0x9a1c5ba87f390597ebd00d8ad572fd3c8b95c68910e62644cb055a0ef06e8eeb", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x228", - "indexInBlock": 0 - }, - { - "txhash": "0xef08e643ee3fc351e62c29536758cddb55b8978a71e0fd3ef60fc347d5e6965a", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x233", - "indexInBlock": 0 - }, - { - "txhash": "0x5ffa342f7f5240c5fe829b8e171f0e206b71626337c84e091f08fbc38a64a04f", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x23e", - "indexInBlock": 0 - }, - { - "txhash": "0x93c697d79b649351a04237604f19f399b797ca5756ec56c83657f06ceda7f06f", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x249", - "indexInBlock": 0 - }, - { - "txhash": "0xd8d2d00485bb8b861ebfe6cf40ff7244593d92fa9d30f8200542527ced99e37d", - "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "block": "0x254", - "indexInBlock": 0 - } - ], - "tx-transfer-eip2930": [ - { - "txhash": "0xe0b7691cf34a37b87a56a79d2887ebb9e1f132d58b0e34c93e51ac80ae361965", + "txhash": "0x4feb87725c3d45aef205359d7d200f523004b2961282c47736c49e3a453a3ab8", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xe", "indexInBlock": 0 }, { - "txhash": "0xe404d773d3dd0560096e006eca641ba5345090871591f3fe7e375e7a430c98c7", + "txhash": "0xf282b242af9a863a650850cd7390dc3b3b485845e6290ee171edffab96a7c6dc", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x19", "indexInBlock": 0 }, { - "txhash": "0x0714cd906571480a922fe8d78c1f1061fc40db2cd1ed8cbb4369fda866626a0e", + "txhash": "0xebf2517adcc7342a874af927a17590156aa85059fc903ab1b09f97c34c8b8b4e", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x24", "indexInBlock": 0 }, { - "txhash": "0xfe336bb145af0acfb0aaccafd4318827ed629b8dd51c3e9acd799bb8831bc5f7", + "txhash": "0x926f6bb97f760b2ac6c523e975d2697276ee3d881dd8348a4e7b7f2c846da188", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x2f", "indexInBlock": 0 }, { - "txhash": "0x996f4a409ebc40722579170f38948bc8df1aaceddd57fe43799895e989e9037b", + "txhash": "0xef9dea375d62f1406d8777e70192ba24af24044c356da063eb71712eb7499356", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x3a", "indexInBlock": 0 }, { - "txhash": "0x3723f923685f12cc032c922ea5b3bb33c3801e3501fd5c33efe367036068e209", + "txhash": "0x0816a60a0e6fd2afe45e7db877e33d055c3e4549037eb1e5209a21c4018250bb", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x45", "indexInBlock": 0 }, { - "txhash": "0x0920572b6c461143bad4fb1c8fce1172555e1e7def25fa332aa4f925b257372e", + "txhash": "0x9720170ff561812f8bc717c251fbc942af99eefb8b5be1296c0dc3b331da7b33", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x50", "indexInBlock": 0 }, { - "txhash": "0x14976ca88889d8e531c3e6e857777514216db60edbc5275e54e07bc1bca12f9d", + "txhash": "0xceda26628e2eecad063f6a4341ea4043fcce307a748b5a41c2a3d0e45721bb0f", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x5b", "indexInBlock": 0 }, { - "txhash": "0x27bbf3f736afb8fcaecb7ac3ccc9c213884eeb5fc7eb657954e148231ff3bcb0", + "txhash": "0x0d8c55478b560a6305ea886fbbfcb36441767c65270c9618ceb33b22f2ee4eef", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x66", "indexInBlock": 0 }, { - "txhash": "0x9acc4d59b8d8c2266714935b4a6f240f58816db5d957883864be194491038cf0", + "txhash": "0x12b7508b1d9a5f9afb9de821961aca87f93d97849b8a1b5065a0e50cfc2e8a5e", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x71", "indexInBlock": 0 }, { - "txhash": "0xe6aa517bcd4b76ad664af114669499b69d4cd4fa9482e12ac17b519d35d040e1", + "txhash": "0xebe88d489dad8695b60b9e8370ce0e389e7cb9e49670980919aac829e2abb83b", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x7c", "indexInBlock": 0 }, { - "txhash": "0xc282a609762a7ddd8fbf2202f132e7c6e94c63f05ae94a26833cedeb55f3e7ec", + "txhash": "0xdd63b0ac29f1b5b9911a159e704a148fa190ae321158a23e2910b52b69f810ce", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x87", "indexInBlock": 0 }, { - "txhash": "0xbba59f4b08448ce6e94e457da75e10871594f2fb719b47a94d01354b06db8b4b", + "txhash": "0x9352e3fdb1640ce153b9580ddf310002221ec5bc20d4ae4f9148cb7e2d7d15bc", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x92", "indexInBlock": 0 }, { - "txhash": "0x26e0ad605b9338c5f9396bd4da0857e4711b6e67303ab777d2f3e304eeb0198b", + "txhash": "0xff6132e2fb07b0e93bcc88a2eeb025b8e6a24ee6b2b78acb09e8738b3b902c97", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x9d", "indexInBlock": 0 }, { - "txhash": "0x9c2232aba0d6cea846a96d85fff3444cc9a9c2b4063232d1ebbb3b00a5bacda3", + "txhash": "0x8e732995f21ca7456d4e2f2c988990ddbfeb2d0ae968024b1940ee9814b06d2e", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xa8", "indexInBlock": 0 }, { - "txhash": "0x1eacd4527bb933ad6054547d9f245ac44e26dbfa11610ed6e835772c6ac8ae48", + "txhash": "0x6bd76373cd2baa3e2f13ff199293fa5cab2b5e3bd7979769b1d79c3612f393bf", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xb3", "indexInBlock": 0 }, { - "txhash": "0x38647f25a7e7a05902d512884a52a2733603be1e5f20fe9eeda0e2f2dc6fb89e", + "txhash": "0x33895d27bd9d17d08165eebb010d0c01e87503624147a93f05fcc7f6b39cbc00", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xbe", "indexInBlock": 0 }, { - "txhash": "0x35ba3e88129db4e62c1806e016e731c72b4d202c2ed1664af0d751558e0b2f5f", + "txhash": "0xc48a8664d8ad6a7fce451d9414cdbe341466c42f9c9edcd3c7dbcf3b8afe4fdd", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xc9", "indexInBlock": 0 }, { - "txhash": "0x714288a3625459cfae682e2e053fb9a6366dd0e37e655da8ac8a603b0c2c879b", + "txhash": "0x8e28590eac2c10ac2a12b28d30f1085ee506c4bed98ec70a9866d99051b38f4b", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xd4", "indexInBlock": 0 }, { - "txhash": "0x638d97e8a1034faf96ade4fb9ca6abacf25c66ccdfe5824a999cde11eaa3b8ed", + "txhash": "0x22245d80eb9eff7ae730c21743cc4654ca641a3294d1891daafd80aaded914b8", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xdf", "indexInBlock": 0 }, { - "txhash": "0xc1382a6685aa78c36e5ed96410da6fdb90549678bd5017ed89412a19ed199f81", + "txhash": "0x8c8365b97fbaac8e4518c70c04dd29512d1b1a036584ebe908ce79d9f18de9cc", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xea", "indexInBlock": 0 }, { - "txhash": "0xb446f8fe040ee764827538219e03981d204c329070db7c0a48cd44adeb24db8f", + "txhash": "0x55ffd4fc5e14677b4a26018d48c5a99c8df4e7b797073ada522ada9ca7b30ceb", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xf5", "indexInBlock": 0 }, { - "txhash": "0xa358a78375426e23e7c6662acd42da119b8f87f2e2888adc163a170cd5e826c7", + "txhash": "0x9bc9ad750a0a4365323da3dbacb65c3723ae8564f7a1654a113a527d810ef8e0", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x100", "indexInBlock": 0 }, { - "txhash": "0x7a7611969dfd1bde5325f206a97e22c2bc462ff5d2081e71ff89d28777f31c06", + "txhash": "0x1e0effb8659f8e43b7a49a6a926d0b76a352d0a45e86e267b8fbc651ff06a7ac", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x10b", "indexInBlock": 0 }, { - "txhash": "0x457a238e8a1daf3960fc558f8f84033fd33f59fb988b9a9adae36f873ff3c3b4", + "txhash": "0x42faedb8e5b8d6f1433c5d14438cd28eee2080fd7dd375cd574561234aa6ada1", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x116", "indexInBlock": 0 }, { - "txhash": "0x4c2d91cbcb732caa6abcbd4140976d0645f6c22d108e477617ee2db2d8129e67", + "txhash": "0xdf64ad606a0975e92909f66625d6a00019e6664a18c67c84ef61ddded0bf0cc3", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x121", "indexInBlock": 0 }, { - "txhash": "0x8c9d1f3bb047963383dadc9ff7cb858b97773169532212e283a5695eea9e033f", + "txhash": "0x92219dc27a8c0fb0337c093c2e548a135bc5022a85fc6ccb0e7b2257e8bd2e86", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x12c", "indexInBlock": 0 }, { - "txhash": "0x4c09711bf3edf86842c892fcb260674ec524f014ef5c90f9f3bb23794a8b3956", + "txhash": "0x1242e0eacb6a87f1066df63a9046b9d920b27f2e2d5f808599a4029a36a41e0a", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x137", "indexInBlock": 0 }, { - "txhash": "0x31992687ad2485da5c31dfda4dbeeec248a65f5ed003563af394e704dfacfc88", + "txhash": "0xf27431f9cfd98c4b376684550e44b0b8e7c71dc997630f85680e1bc5c18cf3c3", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x142", "indexInBlock": 0 }, { - "txhash": "0x661dde8fed4e46c464a33c0f20ee5403250ff3f3c3f99fa55d4307d911b874de", + "txhash": "0xe32fb93c2365ef4db9f3123a474af1fd4837c7bf0e4e0271c166c260b122aa45", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x14d", "indexInBlock": 0 }, { - "txhash": "0x923cb21db498ee179399dfdb8ebca0e0d9822bca94b1127bcd1f11489845e381", + "txhash": "0xa76927c677654a060e2d90cbe4b326fa5eee76d797f54604786849c23879bdee", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x158", "indexInBlock": 0 }, { - "txhash": "0xb72ca20dc96db26fec00f01efa1b251f29bb12a1ceb311bfe8bf39431769221b", + "txhash": "0x35d8f92489a6e1e20f1942193c470e18f4facd5e92b17db55fa311a397aff249", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x163", "indexInBlock": 0 }, { - "txhash": "0xd156edd6076ac206519a5851bdb1ec90a88452c2948ae3fba2be79f1e91dbfe3", + "txhash": "0x3698d4bd1112c7eceb64425a6b7b6a4b142d32c77bce800bd6767ecd10ca80bf", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x16e", "indexInBlock": 0 }, { - "txhash": "0xf1743d554afb4af9f068901f7ad89b3b432d1bd7a88cbfaeab307a020f14e1de", + "txhash": "0xfc7bad28f0e8df37d6a65b3919d9854d2136e247fa4d2d434ae13f47cee60c81", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x179", "indexInBlock": 0 }, { - "txhash": "0x642dd19ff447e4f83c81c529faeaaf07c811215f9fab8967018ec9ff4c9570ef", + "txhash": "0xde78807bcae67a3590b05f888d9d0a80ddea3c2d30bb2ebcc7a7b84de7943543", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x184", "indexInBlock": 0 }, { - "txhash": "0x259e0e9918735fd7786872176cec8a4669e0bfcae37a6ce496023d871407d395", + "txhash": "0x369b86a5664091d43b8bc3bbe4976da5a793a47583ffcca617267817e3ae445b", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x18f", "indexInBlock": 0 }, { - "txhash": "0x34fe95d74f6232b0273cdac075cba7ab6438ae662e89aa71e8b99206bfc57153", + "txhash": "0x8eac800c7781a5ada09bfabee12ffdcecf65d517d164f42d1629a9d1eeb9995f", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x19a", "indexInBlock": 0 }, { - "txhash": "0xcf826d5d3ccfe1773b5b83a3ec29de8826c92566e310cabf8940733d71ad1cba", + "txhash": "0x7232f8a35c4fc601bde57e96dbd338e6898ae0733b4feefe74610bb44705577e", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1a5", "indexInBlock": 0 }, { - "txhash": "0x5a88d1e506f286c57a7a3a6f68cab3b18e9f3ef279b574e6910cca83bdaf7daf", + "txhash": "0x5b9b04078f27faa47f01cb52179b174c5aaa67b1b3ca6776a2872fbe64be4dac", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1b0", "indexInBlock": 0 }, { - "txhash": "0xe383a01e0ad60a5f35cadbe8938a1459a679b7717166a9373512c1a832f24423", + "txhash": "0x25a2cb528f8f5373d2e472d7e28df6b9b18c6d14a5405433aab7333c6d19fe6b", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1bb", "indexInBlock": 0 }, { - "txhash": "0x65efb74528143a9b3fcedcb4e94892d25661480613c1485fccc00691c7488c8d", + "txhash": "0x64b5195035210f1570783ab55464becc3bc8f3944f854b1432aa9bf4e5f442e2", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1c6", "indexInBlock": 0 }, { - "txhash": "0x54dcbac0ede42273e9b00e78dbc44bd30122cd3b5b17fbf7b8b761bee5de60f7", + "txhash": "0xe898405f30c0ceffd19eb618b30e670cd4f75c3ed6cc3fd7700b40e050d6090f", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1d1", "indexInBlock": 0 }, { - "txhash": "0x725e6fdd298ee6d7a0c85da4b86338b179d0e1e2412042302e14e2d1f80fc7c2", + "txhash": "0x1fe3a558cad7acef03cfe28ad0517af33fe5f1bf5d2497e8b9fc1ddf49f6666a", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1dc", "indexInBlock": 0 }, { - "txhash": "0x9b4e47130328936b6c1c0b1eba493d17c314f973dfe7e75b42a3db206e504a23", + "txhash": "0x1b1a72cfc78eb9ac22b033028c35bdec7347c40f3120ed9527fbde2966b78c35", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1e7", "indexInBlock": 0 }, { - "txhash": "0xece1d40c8ee54ccb4e80533dc30cc365e44f97f62b66173819bf3d8629b69381", + "txhash": "0x0c41e800e62b889789d63028503a2afdc7b48dfa75f8fac0c8b9dccd73726858", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1f2", "indexInBlock": 0 }, { - "txhash": "0x76a2d9684d03b8e18b262d1d27a0d6b21753b93efd510b3913ce0ebe1767945c", + "txhash": "0x7a7ad517c21c75ebca258a25c35b110f414004f87ecfe2aa29283a8b3815f2d8", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1fd", "indexInBlock": 0 }, { - "txhash": "0x46351b527c01acf613175fc763cd5a2a70e35c38c7c76ee0b6555f787d86c6e2", + "txhash": "0x995502755fff45ae2074c787012c900fdd6dc6264910712bf6b3cb0e25539c66", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x208", "indexInBlock": 0 }, { - "txhash": "0xc954c8d329f749ec212c19a85f38482b2a3970da384441ca205ba09a792ea1f7", + "txhash": "0xe19b59781cfb6a730a22b24f96f6b8a9fcd567a0ea4238b2916affe2a1a131f4", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x213", "indexInBlock": 0 }, { - "txhash": "0x96ee75e8ef38f2fdaef65165ea3b03d125558e45a74568479ef47db03aa6c5fc", + "txhash": "0xfdb1b2cb3fcf7c849c5376e1d5765e91cbaeeee0aea7877e1d379522436629c3", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x21e", "indexInBlock": 0 }, { - "txhash": "0x2a843d73fc5567275043097afb99799acc38822f63b279d4b1a027fda110968b", + "txhash": "0x8510955c5bc445ab6272fd2e9cb7ecf10bb529d4edf5cb03eed14a86c34ab7e4", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x229", "indexInBlock": 0 }, { - "txhash": "0x32858610393c1bbc5506b9126e2c6be2030c82c93d298fba9c14cc0ada2513d2", + "txhash": "0xd1c580b4cd75f21af59dc7312726122ca905d363982dd6bdc9b16ab459c4f351", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x234", "indexInBlock": 0 }, { - "txhash": "0xccc59651e1e4c4b64d645f6110eb5433ce8848b4bcdd5bd7d628eed653a9b32b", + "txhash": "0x95826c39ecf731f43925e7be0c36d389cd6dd7cba81911a92e33c60c07a1e54f", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x23f", "indexInBlock": 0 }, { - "txhash": "0x0f6365dd89c14374995007394ad902ef1b4076160ca7c469a2f40db5143e40fb", + "txhash": "0xa25c1a0867649aca89addff35c96b8beb149f68606e08621b9a391ccef9df0db", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x24a", "indexInBlock": 0 }, { - "txhash": "0x2bdf049c6e42fb2882aa350ae0b1ea17e1cc696505a755f97710a13ab5dd2100", + "txhash": "0x87fb42acce30f67650d3917485de95788ba5002054907b67996498c23e03137c", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x255", "indexInBlock": 0 } ], - "tx-transfer-legacy": [ + "tx-transfer-eip2930": [ { - "txhash": "0xf5d6671f1963c4b2803a03776a06fe6fcc7ebae6fcc714f2ba9abaa6b9c4331c", + "txhash": "0xf278a97c1c92c517531ae9f24179862518cf6397cd3615deebe37049d5a6c695", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xf", "indexInBlock": 0 }, { - "txhash": "0x2c4880155cc7084393750b60732e44dfcc36b5da126d7dafd2e3e679d1fe1456", + "txhash": "0xc33009465ef1eb2ff62d02d50cbaaf73fee9dff8be51f71ac7976367ddfc4541", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1a", "indexInBlock": 0 }, { - "txhash": "0x836d8aef2c4549477e76f9d2250a7818d2659551d4e46d979b3a9c0695824fd5", + "txhash": "0xa6598b072ed0598260358ed568e3c907d36e422b14e35ab459e9e24ae98251ef", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x25", "indexInBlock": 0 }, { - "txhash": "0x4142c689b6edab80bd472c19730a883236279ffa68be403a4e0062d34b095cde", + "txhash": "0x61aa0de65eb4a0db81573b043c35a4de3dcfabf37117a3e67905c7d3038dad23", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x30", "indexInBlock": 0 }, { - "txhash": "0x3d15ef5c40d1abe4006d81bc88a3d7918853099afa1d6ce499747ae49181deb8", + "txhash": "0xdcf01b9729cddeefec7be5348f0d364ee1295831f999c0f5a49b047c9694e970", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x3b", "indexInBlock": 0 }, { - "txhash": "0x36b77745eacf696b87e1cefa6eb7308299c022fd04ca579f67bbf9f88a769670", + "txhash": "0x7867b39e0b2f176fbd61364bce00443bd3f2ca5d743d3ab95104cb13a5cf5208", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x46", "indexInBlock": 0 }, { - "txhash": "0x7bd16c7de942d1dfd8a330d3b4f4388897b88c1e55e29950aaa67ab5d340d63b", + "txhash": "0x2ba84167cbba25e83e98cbca146d39a4a36d29dc2c9d971b41bf5ea1b9c9425a", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x51", "indexInBlock": 0 }, { - "txhash": "0x70aa1c05d32af66dadf90df365318ff39bb29204c01e52e7687c2fa03bcd7792", + "txhash": "0x203b1d7997f674fd45fe2eb6af5f0a88b59eaa8598b86f408ca44763e034bd36", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x5c", "indexInBlock": 0 }, { - "txhash": "0x53fb233255b5c3a627afe4bb562c30bcff7c001bbd84118daf5bf7dab3f6b741", + "txhash": "0x8fd08a67b065db1005917aea2934104c6132cad339c2fe07f51e7717bbe4ffe7", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x67", "indexInBlock": 0 }, { - "txhash": "0xfd5f8f34059ec5a386048f048022aebe3977b326babac83b34d43f1810aea93c", + "txhash": "0xf0a9ae994a7741fcbe854f2d4a684f5fd434d40badc2ae36611f5764aaeb08b3", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x72", "indexInBlock": 0 }, { - "txhash": "0x98e0d4060dbb4451b13a56dfee901f55d212981e156ad9672cb4bc32e95f7744", + "txhash": "0x090fcb3259cccab1bad9dd572493e4ee05df3f53137ca16b4e7ea2f5b5c1d7d3", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x7d", "indexInBlock": 0 }, { - "txhash": "0xdf35c584e51084b3e1ce88e6927f8dfe4b338538026e0119ed44a8a06ee8680f", + "txhash": "0xe79b88caea408e8be7e3ac3269889b8f59fd4c1ca612213b9a7999ffe5b72e52", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x88", "indexInBlock": 0 }, { - "txhash": "0xdd0cdb19583b486fe64aea158301d580605ce93f722e5ed76b6d091ef33cb36b", + "txhash": "0x1bfa25e0530d084489db9ab1b6afa7d9f1c3b39f863adf5e2832768927644daa", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x93", "indexInBlock": 0 }, { - "txhash": "0x5fbf81465a08a6fd6c858ba525a6449759ad4dd9772e88aefa7d70b40f59fe94", + "txhash": "0xde483617d2d66c2ad07033b75a73e0c3d9be8e57b614a2aee96eba35f414629d", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x9e", "indexInBlock": 0 }, { - "txhash": "0x0707d1ec61cbc124e3cc6dd2b3617df6d15c247b4513776fbc64d6749e212564", + "txhash": "0x29aeef1bb9f0555427576d10a93920d4cbb848b4df7a11708e1d15877dc1b2e0", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xa9", "indexInBlock": 0 }, { - "txhash": "0x15ce9de77512ff529b9493f36c4faa3b287e2f48634f444ebf33db2bb26f019a", + "txhash": "0x00986df4dd53f3e79bfb60d0d6532963c32d14082b90a5e0f781a90521c39926", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xb4", "indexInBlock": 0 }, { - "txhash": "0x81109d5ba61fc6be29b6825aaa3de407d2691364584ec4465853891a1f9a9092", + "txhash": "0x1041875f7d50a26da74163d4e54a7f9c93d314c299725aa85cbfc7a3ecc35297", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xbf", "indexInBlock": 0 }, { - "txhash": "0x741a9b3cb46fb639934e6705950e754a35be54cde90edaa7dc7a7367b964ec1c", + "txhash": "0x79628bf904cf51c4a9746ca13c3f6f55c8cdae638fb2b3166a66d516c4eb5003", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xca", "indexInBlock": 0 }, { - "txhash": "0xc74ac6c61b5fa34bd613863335dc814d646c9670319c6b78c5ff78edd303a148", + "txhash": "0x40094566e6f9bb849004d5f9593bc361c8572fdda9d56f17dae2cda65c6c1e75", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xd5", "indexInBlock": 0 }, { - "txhash": "0x4cb8d6ad80fb3d560e3c99f89a1e6e949706ee34ac60dfee6d3bac5742defeea", + "txhash": "0x36bcaa05763afdbab9ba004c67cfa38fdd5f0fd87164d8ff388720a54ba4a8a1", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xe0", "indexInBlock": 0 }, { - "txhash": "0x43e55b80d307da89ba157e2404b4f74486379b82442d2c439b796d05f0b0cc48", + "txhash": "0xb624d30fb3f252245883434de2ed770b795e907a619ac88992d6b7699b48cfa7", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xeb", "indexInBlock": 0 }, { - "txhash": "0x2d78dabdfdf32911d516e48b7630ef0c38d1f23e824a0d206126076ab27ea9de", + "txhash": "0xbd3087ce9745fe988d07ea8ba090b4cb8d1a86e57c50fdcdbb30ecb908dc9e6b", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0xf6", "indexInBlock": 0 }, { - "txhash": "0x1b87238c602d7af7240cc63513ffa0ded2851e43587ed3b6a4a9278ebd666f7c", + "txhash": "0xafa45cc36b48bc966aa8aa30e408db455e4f9c1add0587a89ba40a94866d1e03", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x101", "indexInBlock": 0 }, { - "txhash": "0x07796620f21dbc0f24cc465703dec79d4d1ede06e4203229a98ce5a1e3838f97", + "txhash": "0xac35c9970d8166e66a131b1b3dc2f863e7ae36292e6a49bbfcb83f3cdd2ff2d2", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x10c", "indexInBlock": 0 }, { - "txhash": "0xe42627e627add33a75bac9aa36bbafd70ce5c225805c6c38e1cfe4d172d5115c", + "txhash": "0x9b7e08f4c8fa53992950abce073f5eb02f380f451780d0d42de4c69e3a69af23", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x117", "indexInBlock": 0 }, { - "txhash": "0x63a4e7940479d26fe0540ec179765a76ad718016c46f50b091700bc445e94090", + "txhash": "0x3e31801a2a6ea466f490a9b604a116f390794eb63c7ab4721017a5fdf966e166", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x122", "indexInBlock": 0 }, { - "txhash": "0x7069110601d62a25c9f53b0d8014a7a350ef57c49e6f4f065db8dcf2d3df424a", + "txhash": "0x51c1f4e597a9f557a71e97975c0ee80b3036775d922acb96fdcab674023790c7", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x12d", "indexInBlock": 0 }, { - "txhash": "0x908826470714e97daa2f45cca9b77e61fe6187cfd2382cc6855851c3ab6777e6", + "txhash": "0x4e0eec0f6504ef995e5dbf52b0db7c0d4a637b8d4107fd9bb7b9cba124d4e6af", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x138", "indexInBlock": 0 }, { - "txhash": "0xe5e41eee4792cc57e81231553406f05ee5f5d0b1064e93eb113b22a5c67120e1", + "txhash": "0x3dcc58d773206b067dbd8dbc241e12c6cbc22beb64def944ced03490d10c504e", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x143", "indexInBlock": 0 }, { - "txhash": "0x502f2197f9a78a84978ad877be0fe29c5c3277895337c7fba7dd2723644763de", + "txhash": "0xbcd88536b680f217c8ba593327153a9a87850c293c7ab51d28e11161a8c114e6", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x14e", "indexInBlock": 0 }, { - "txhash": "0xba56db6e61a61cd1a3aaade35a19f85c614ff0e7afbb7156986118a0dee9af6b", + "txhash": "0xfb4a89e5ad56f40bbd99694669c41784f0dc7b25ec485b07c29d9b8764f6370e", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x159", "indexInBlock": 0 }, { - "txhash": "0xc68be8d777be9b31eeffc3daf17761f3a5075875655fe029e82e18cf884b0102", + "txhash": "0x403aa6d501d04dc47e052d9e8e35309047e0e6352bcababbb47d8c3095f2478f", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x164", "indexInBlock": 0 }, { - "txhash": "0xcd438fbb83757586be3d83f4d004024f8cbf464f6bf1662671ba4e97177e86b1", + "txhash": "0x2d80b71c714bc3f7fd0c5abce861e0499bf11ab1ac915a4ac399d6046b5341de", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x16f", "indexInBlock": 0 }, { - "txhash": "0x90a4b393275d8a4e40764b90b1820365ae3b0ebd92c14593789618e08fb44b29", + "txhash": "0x8e59e25432ee45eb91663edb66f23e30f8988a94d363bd4211ec8106bc7bdc7a", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x17a", "indexInBlock": 0 }, { - "txhash": "0xa82459bb400a4fa392738753dc867627d2ee8436d95e143119505120808bb756", + "txhash": "0x3b17e71cc75e8af270a71446cb1f55dcd2c3c8c638ba7ca3b156713d5c5bc740", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x185", "indexInBlock": 0 }, { - "txhash": "0xba5383efd6209b60452c61ff20f5faf687ddcbb5426b3d202717a3a0f09cc655", + "txhash": "0x62b840b93964bf5ef9f3b308f6cdad7793796a94d6810edd7db64d2d41801b0a", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x190", "indexInBlock": 0 }, { - "txhash": "0xb99807ee84bbedc5e0f04e8bf82400919ffac94c7daa74ce717a9dfcd692dedb", + "txhash": "0xf1c711c41fc04a59b26b14994f625576a7c708302044d5dbe3926bde93505459", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x19b", "indexInBlock": 0 }, { - "txhash": "0x1b50a9075eea2053d04b1149a22ceb5982115642e42a46f8773b1e75132ba334", + "txhash": "0x7f8d63774d886b4d1e8ad70daf38208d3037fbdf875c1180904240308cb290bd", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1a6", "indexInBlock": 0 }, { - "txhash": "0x607ef258fe227a1f5fb6a5bfaa714df94bc22567731591ebf3d2be6435735c85", + "txhash": "0xc2e3e4e30aa8973c6fa6a8ca0fc9d2c77e4e720d72ed0311132c5a9d33dbad49", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1b1", "indexInBlock": 0 }, { - "txhash": "0x6337272ab1f627a38c734a263da2debe7958c2154f6607f880d2d9c76cc70c88", + "txhash": "0x0a92968be399bb163ed87a9e950f87301d1bee7faddd5ee58a966629eccd4d99", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1bc", "indexInBlock": 0 }, { - "txhash": "0xd41f6909931b295eea7c3463a11c979d7174df197110ab3aeb77c16075b0e5be", + "txhash": "0x7f087aea555e2f441682d04c022a63c60dd38129da8196be244618d539b1d899", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1c7", "indexInBlock": 0 }, { - "txhash": "0x5dbc467c60a1655ffc50b47ae6250331a9cdc7818deca6a630e3f00be2fdd419", + "txhash": "0xfcbee8bc75ade3572115835825b2babe4de4e1e3b776323334e4a6e66c4746ae", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1d2", "indexInBlock": 0 }, { - "txhash": "0xad3cdc85f95156f0e6b5cba9228e01db5f4cadea36238ace690321e8150780b7", + "txhash": "0xf50c7c278b5e2bf2a15b523f4a714ab4c3aa2de23e1b45b20fe7df6dfc0d3d1b", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1dd", "indexInBlock": 0 }, { - "txhash": "0x0c35c17ae34707eb557bd7e3d6d56a0e3f39841365b4ef46b586131ffd80d93e", + "txhash": "0xca67efa5a92421ffc387fcb06b4f53a14148c1da50f0cc514814587f5f1a63aa", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1e8", "indexInBlock": 0 }, { - "txhash": "0x2660c57fca0ca07684524e301982e6ce557d2eef665d60a92c1bbac586b1daa3", + "txhash": "0x2d35008bda6dad6c13a68788a1b0b4b671d82ba03ce007d8026124bc2f78ad4e", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1f3", "indexInBlock": 0 }, { - "txhash": "0x57c142cf1c0eb125de13729a590e4e44dc4b65936068286e4fafa1d144c8548c", + "txhash": "0x6e4b127cec980eaebed4039019171993d63ccf3d8f50792b3b651381391d6a3f", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x1fe", "indexInBlock": 0 }, { - "txhash": "0x4ec028beafac0f493add6acd0e5389d4767f6e756cfbebed4c907312bd990a7b", + "txhash": "0xab711b291a1efce49e0ff8f0aebe8acdc84eae9405b2d70cb4a886854160a1be", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x209", "indexInBlock": 0 }, { - "txhash": "0x92da32c91120e188fd7a7945c1f9632faa33b85b1c2d63e71da6c5e65d2597ef", + "txhash": "0x996878da21de571313c57f2f0dac52d8fc906c4e038bbaa0e5171a46c08dabf9", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x214", "indexInBlock": 0 }, { - "txhash": "0xb31ea80795c9bba23c7509df3148f04d0b6545e29d463e47ebbb59eb19bfc09d", + "txhash": "0xd9743a7901761dce46c57ff8df4d3cdf874e108891ff5661ed7d2a4eaf50b54b", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x21f", "indexInBlock": 0 }, { - "txhash": "0x84ce5e0adc7ecf6da455c89cbb2fb88b19a6530fe3908dc78a3f48e053304bb2", + "txhash": "0x388c9d3c3c9ba4afb738e3a0778166e39f685adcfea23175196f0eee64d173bc", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x22a", "indexInBlock": 0 }, { - "txhash": "0x2660f8cda902bad9c28fe68cc88cd1c8e168ed676b721a1d62ece206520f3ed9", + "txhash": "0xf5df907bbe60656be433813c67a612166b23245e7d83078ae8975835f410d492", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x235", "indexInBlock": 0 }, { - "txhash": "0x9bfb5a154892c511155e70f2897ec9191acc3826d3d94b7f59e14c393f9b82cf", + "txhash": "0xe75a50ed07ea70f57dab38daaa3bfa7e763a4fd4503eb13a77518a10648f7caa", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x240", "indexInBlock": 0 }, { - "txhash": "0x0fbd5dc542001c414af0d21f05c33a425491f56488994d16505c09782cf67076", + "txhash": "0xb01424eaa3df62924ba4d4e52117b89c7ed24a7556c2d46367f908ad41784db0", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x24b", "indexInBlock": 0 }, { - "txhash": "0xbf6d4db691b6c5c6810508476aea4812982794ed5a399fc00c0290dc85901c3f", + "txhash": "0x05fe8649c80459cd462cea4676d39d5be523f672f2a1e5fc210b5b6571b59450", "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "block": "0x256", "indexInBlock": 0 } ], + "tx-transfer-legacy": [ + { + "txhash": "0x4845dfdee733cb11e204253aa9b2e0a9597c9b7f700642d084fd5aad365dbeff", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x10", + "indexInBlock": 0 + }, + { + "txhash": "0xe4ba4ed6784f2f452274186824174874661f76c1961d34fee86371da194a428f", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x1b", + "indexInBlock": 0 + }, + { + "txhash": "0xe30c98691cc89f2db31aec5c2b3cdfd720015210fce4b48a8ce561d7f179af8b", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x26", + "indexInBlock": 0 + }, + { + "txhash": "0x7538bb702539b67fbb8d44d2e946d1d241ddc4c2943e48ecb3107c8868184775", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x31", + "indexInBlock": 0 + }, + { + "txhash": "0x88edfa85d3e3bab608081a9421e0eab5fbd09ad10db58c07c178c6ac74617233", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x3c", + "indexInBlock": 0 + }, + { + "txhash": "0x41aec073b267edc44e28b0c33f8c20e7619687ca5d7f09faa30e49621cdd3e70", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x47", + "indexInBlock": 0 + }, + { + "txhash": "0xe0854da80105ea343c29cb7a8db30413b59f5b62a1f42793ce635be4e7536cc9", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x52", + "indexInBlock": 0 + }, + { + "txhash": "0x0cf942350189ee11294379c2a16c9744bc7502f127f4f71ac95cf0a2f681aa3a", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x5d", + "indexInBlock": 0 + }, + { + "txhash": "0xd521a3fccc17113eac1a50bd0a34a3ca87ee5234c51fe41ba8eb8c26ad142363", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x68", + "indexInBlock": 0 + }, + { + "txhash": "0x1bcb6ff54f0f244c3b7390b488e76c3d1d95ff7f340adb81f785820930edc010", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x73", + "indexInBlock": 0 + }, + { + "txhash": "0x7571a5b0881a76054142ad7af3924bd225a67a4705479f4f87e6a68388a5f0aa", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x7e", + "indexInBlock": 0 + }, + { + "txhash": "0x999f17b911d92aaed0c83e37a545cf44f1effaf1245bddc7c63aae3c092e8200", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x89", + "indexInBlock": 0 + }, + { + "txhash": "0xb72b3670cd73b79b8083e590a96c942c0e387c4f0df39eadee69bf0d23c12f8f", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x94", + "indexInBlock": 0 + }, + { + "txhash": "0x71d5d38bd1d2af22f3a2bbc6b657b2d1c081a5f7a8345e1aa0c9f7bacfe884a0", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x9f", + "indexInBlock": 0 + }, + { + "txhash": "0x6acdc778a4e9df4318ee1f01bd3dbdad1539cdb53ff865d28827ce21ac9ab9d6", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0xaa", + "indexInBlock": 0 + }, + { + "txhash": "0x0303678ee1fa8a6b080ed12b5a752d255008709a9b76e439f48357627d4d8dfe", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0xb5", + "indexInBlock": 0 + }, + { + "txhash": "0x2230bdceb24246aee1c7d17a98eccbfefba3079719c6c1e32e8b7d4fc789761d", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0xc0", + "indexInBlock": 0 + }, + { + "txhash": "0xab1ad5a65facf07d9687759b529fb8e8a1cb29ac4a5bc8178b58218a11b8b611", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0xcb", + "indexInBlock": 0 + }, + { + "txhash": "0xf8d85b2cf1d77a5f513b3158fd49c5fb2b0a11fddad23ddeccfeccfadb3c9e89", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0xd6", + "indexInBlock": 0 + }, + { + "txhash": "0xc076e024e047c92e61148b6a6312f704fd3d969febd46f9b41e0106f4bdce366", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0xe1", + "indexInBlock": 0 + }, + { + "txhash": "0xfc956eea160fcbbd4a13f4f56f984f245ff189f73512b4807b37e47b0f14096a", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0xec", + "indexInBlock": 0 + }, + { + "txhash": "0x37f2c2e41705384ecf88d1bd58520a91614cbcc3a01ee2a9866482c669154d6c", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0xf7", + "indexInBlock": 0 + }, + { + "txhash": "0xf13d8d224ceb88804b6f61adbf0067c9f67e8247b2748db8339b597cfdeffaef", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x102", + "indexInBlock": 0 + }, + { + "txhash": "0x370d01c7b49b48f7eaae30826df1b5f702721dab17da55f509e850665671cf3c", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x10d", + "indexInBlock": 0 + }, + { + "txhash": "0x3f5065a0ca467127e296ad2d27dc690eaf04d36490c7e7b34231c280fddf1797", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x118", + "indexInBlock": 0 + }, + { + "txhash": "0xc9edbf3ceeb867c3c6d22a70356139fdf595ef3f98ca4c41415e30a374d2da5a", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x123", + "indexInBlock": 0 + }, + { + "txhash": "0x3828637a29c6b96eedc2900ea419f059dde3f8d3399db36cadf89870a2784c0c", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x12e", + "indexInBlock": 0 + }, + { + "txhash": "0x477443f1609dd34747aff99d568b3752cd8478f75465c2c09717e69f0cbf089b", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x139", + "indexInBlock": 0 + }, + { + "txhash": "0x5d3c2eb824b0e5fa14dc29635d3b0b17f070ddbbf9c8ce07dd62c212f4af61f6", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x144", + "indexInBlock": 0 + }, + { + "txhash": "0xdbaed77ef32f3a0149d3a220bd0c2c49b6da1b7ef56637442f1b91c916064b0d", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x14f", + "indexInBlock": 0 + }, + { + "txhash": "0xd02a9a5522a418abb75b1330b317c98812c033f7ae8c177355c3836a8a28dc95", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x15a", + "indexInBlock": 0 + }, + { + "txhash": "0x4bca9b38d6eb5008866383961fd1313869a8476fabb260d9b93a5b2dc8986905", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x165", + "indexInBlock": 0 + }, + { + "txhash": "0xeaafeaf48129a32da8973a6190ce0c19b1f3729cc39d3eb55321bd45d3cafacf", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x170", + "indexInBlock": 0 + }, + { + "txhash": "0x85e50638e9e342829033b7f51913edfe86cc1d7691f98ee4f1b725ba20e2a2d2", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x17b", + "indexInBlock": 0 + }, + { + "txhash": "0x7d87678bc9f09d640f401783a67768450e7d19d54ce2deb5fc157fc224be2692", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x186", + "indexInBlock": 0 + }, + { + "txhash": "0x97c821ea0562ce8a74d88a738e7d104f82025952d07e855dca65cd0b46c2d3d5", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x191", + "indexInBlock": 0 + }, + { + "txhash": "0xb6eb23273ff663427676741b12392ee848576225b18baefc308543f209500ca9", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x19c", + "indexInBlock": 0 + }, + { + "txhash": "0x55dbcf25403390d76fab637c2ca501447a93aa371ff36d1316ea2858efbf1aad", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x1a7", + "indexInBlock": 0 + }, + { + "txhash": "0xb163de0bcd66c79501165e608cde61312fcfd73d39c2b1970c4d6db2f8ee9595", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x1b2", + "indexInBlock": 0 + }, + { + "txhash": "0xf6c6d5abdbb9489d60d66a0a1bf8cbfcd3d06c89cd1bb1aaca5fb0994a5c0e1c", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x1bd", + "indexInBlock": 0 + }, + { + "txhash": "0xdca0b4a5f20554780d9b2510913cf39498ba3dd98253eddeb292aaab06cb76d1", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x1c8", + "indexInBlock": 0 + }, + { + "txhash": "0x198387dacde38e90275dc46370055c1180b6fa458930a20c09b900249ac93417", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x1d3", + "indexInBlock": 0 + }, + { + "txhash": "0x39d1f89c9b97905bb44a191b1df7364bbba74cd22634e74faac369419b4f409f", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x1de", + "indexInBlock": 0 + }, + { + "txhash": "0xc7aefb93eb98c60bb8badb08df91beb8ba154ef4c076c2b2fb3e68b1668fbb77", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x1e9", + "indexInBlock": 0 + }, + { + "txhash": "0xf9b76794a6143a25ee62c9d9e847d7068646dc954357bd4be1872148bd91923b", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x1f4", + "indexInBlock": 0 + }, + { + "txhash": "0x3590ade203eb06fa0e509948eecdf53ef176c4792d90d50df070b1d1ca4931dc", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x1ff", + "indexInBlock": 0 + }, + { + "txhash": "0x267c879d60a9e2d6b86e57c6b50933288e1e50299f3cef26379a536a4703577c", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x20a", + "indexInBlock": 0 + }, + { + "txhash": "0x6c64b842af6cf82d41bda0f6181369b98d01b096e897299e46a08bddec540f93", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x215", + "indexInBlock": 0 + }, + { + "txhash": "0xd64c4fdda714ae62c0ba6139a59dbfdd8d7a9d1bdd9ffd9ed6bb6fcfa618aaf5", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x220", + "indexInBlock": 0 + }, + { + "txhash": "0x90faef9e382ce09403e51eee1af464cea2c363a5fe3458f03b123b0bf4c69914", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x22b", + "indexInBlock": 0 + }, + { + "txhash": "0x5cdd6add765fbd5afc12c77be220da2d4a81fdbc4f6572977f710d5eadca35ea", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x236", + "indexInBlock": 0 + }, + { + "txhash": "0x0c961395a8d267e7ce4919a810865266d9286f4272bd3504bc7eabeff7562c7c", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x241", + "indexInBlock": 0 + }, + { + "txhash": "0x2bdbc6ce98d07e93505ceb1f524dbc95f1ced213453e35f1b772e8919729f411", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x24c", + "indexInBlock": 0 + }, + { + "txhash": "0xf0092cb03bbed01544bfef80adfc92f2842a2be9e89a4f0029c50e9511d704e1", + "sender": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "block": "0x257", + "indexInBlock": 0 + } + ], "withdrawals": { - "104": { + "105": { "withdrawals": [ { "index": "0x8", "validatorIndex": "0x5", - "address": "0x717f8aa2b982bee0e29f573d31df288663e1ce16", + "address": "0x1f4924b14f34e24159387c0a4cdbaa32f3ddb0cf", "amount": "0x64" } ] }, - "115": { + "116": { "withdrawals": [ { "index": "0x9", "validatorIndex": "0x5", - "address": "0xe7d13f7aa2a838d24c59b40186a0aca1e21cffcc", + "address": "0x4dde844b71bcdf95512fb4dc94e84fb67b512ed8", "amount": "0x64" } ] }, - "126": { + "127": { "withdrawals": [ { "index": "0xa", "validatorIndex": "0x5", - "address": "0x4340ee1b812acb40a1eb561c019c327b243b92df", + "address": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", "amount": "0x64" } ] }, - "137": { + "138": { "withdrawals": [ { "index": "0xb", "validatorIndex": "0x5", - "address": "0xc7b99a164efd027a93f147376cc7da7c67c6bbe0", + "address": "0x16c57edf7fa9d9525378b0b81bf8a3ced0620c1c", "amount": "0x64" } ] }, - "148": { + "149": { "withdrawals": [ { "index": "0xc", "validatorIndex": "0x5", - "address": "0xd803681e487e6ac18053afc5a6cd813c86ec3e4d", - "amount": "0x64" - } - ] - }, - "159": { - "withdrawals": [ - { - "index": "0xd", - "validatorIndex": "0x5", - "address": "0x717f8aa2b982bee0e29f573d31df288663e1ce16", - "amount": "0x64" - } - ] - }, - "16": { - "withdrawals": [ - { - "index": "0x0", - "validatorIndex": "0x5", - "address": "0x5f552da00dfb4d3749d9e62dcee3c918855a86a0", - "amount": "0x64" - } - ] - }, - "170": { - "withdrawals": [ - { - "index": "0xe", - "validatorIndex": "0x5", - "address": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "amount": "0x64" - } - ] - }, - "181": { - "withdrawals": [ - { - "index": "0xf", - "validatorIndex": "0x5", - "address": "0x2d389075be5be9f2246ad654ce152cf05990b209", - "amount": "0x64" - } - ] - }, - "192": { - "withdrawals": [ - { - "index": "0x10", - "validatorIndex": "0x5", - "address": "0x2d389075be5be9f2246ad654ce152cf05990b209", - "amount": "0x64" - } - ] - }, - "203": { - "withdrawals": [ - { - "index": "0x11", - "validatorIndex": "0x5", - "address": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "amount": "0x64" - } - ] - }, - "214": { - "withdrawals": [ - { - "index": "0x12", - "validatorIndex": "0x5", - "address": "0x84e75c28348fb86acea1a93a39426d7d60f4cc46", - "amount": "0x64" - } - ] - }, - "225": { - "withdrawals": [ - { - "index": "0x13", - "validatorIndex": "0x5", - "address": "0x0c2c51a0990aee1d73c1228de158688341557508", - "amount": "0x64" - } - ] - }, - "236": { - "withdrawals": [ - { - "index": "0x14", - "validatorIndex": "0x5", - "address": "0xd803681e487e6ac18053afc5a6cd813c86ec3e4d", - "amount": "0x64" - } - ] - }, - "247": { - "withdrawals": [ - { - "index": "0x15", - "validatorIndex": "0x5", - "address": "0xd803681e487e6ac18053afc5a6cd813c86ec3e4d", - "amount": "0x64" - } - ] - }, - "258": { - "withdrawals": [ - { - "index": "0x16", - "validatorIndex": "0x5", - "address": "0x84e75c28348fb86acea1a93a39426d7d60f4cc46", - "amount": "0x64" - } - ] - }, - "269": { - "withdrawals": [ - { - "index": "0x17", - "validatorIndex": "0x5", - "address": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "amount": "0x64" - } - ] - }, - "27": { - "withdrawals": [ - { - "index": "0x1", - "validatorIndex": "0x5", - "address": "0xd803681e487e6ac18053afc5a6cd813c86ec3e4d", - "amount": "0x64" - } - ] - }, - "280": { - "withdrawals": [ - { - "index": "0x18", - "validatorIndex": "0x5", - "address": "0xc7b99a164efd027a93f147376cc7da7c67c6bbe0", - "amount": "0x64" - } - ] - }, - "291": { - "withdrawals": [ - { - "index": "0x19", - "validatorIndex": "0x5", - "address": "0xeda8645ba6948855e3b3cd596bbb07596d59c603", - "amount": "0x64" - } - ] - }, - "302": { - "withdrawals": [ - { - "index": "0x1a", - "validatorIndex": "0x5", - "address": "0xc7b99a164efd027a93f147376cc7da7c67c6bbe0", - "amount": "0x64" - } - ] - }, - "313": { - "withdrawals": [ - { - "index": "0x1b", - "validatorIndex": "0x5", - "address": "0x654aa64f5fbefb84c270ec74211b81ca8c44a72e", - "amount": "0x64" - } - ] - }, - "324": { - "withdrawals": [ - { - "index": "0x1c", - "validatorIndex": "0x5", - "address": "0x84e75c28348fb86acea1a93a39426d7d60f4cc46", - "amount": "0x64" - } - ] - }, - "335": { - "withdrawals": [ - { - "index": "0x1d", - "validatorIndex": "0x5", - "address": "0x4340ee1b812acb40a1eb561c019c327b243b92df", - "amount": "0x64" - } - ] - }, - "346": { - "withdrawals": [ - { - "index": "0x1e", - "validatorIndex": "0x5", - "address": "0x3ae75c08b4c907eb63a8960c45b86e1e9ab6123c", - "amount": "0x64" - } - ] - }, - "357": { - "withdrawals": [ - { - "index": "0x1f", - "validatorIndex": "0x5", - "address": "0x654aa64f5fbefb84c270ec74211b81ca8c44a72e", - "amount": "0x64" - } - ] - }, - "368": { - "withdrawals": [ - { - "index": "0x20", - "validatorIndex": "0x5", - "address": "0x654aa64f5fbefb84c270ec74211b81ca8c44a72e", - "amount": "0x64" - } - ] - }, - "379": { - "withdrawals": [ - { - "index": "0x21", - "validatorIndex": "0x5", "address": "0x4a0f1452281bcec5bd90c3dce6162a5995bfe9df", "amount": "0x64" } ] }, - "38": { + "160": { "withdrawals": [ { - "index": "0x2", - "validatorIndex": "0x5", - "address": "0xe7d13f7aa2a838d24c59b40186a0aca1e21cffcc", - "amount": "0x64" - } - ] - }, - "390": { - "withdrawals": [ - { - "index": "0x22", - "validatorIndex": "0x5", - "address": "0x2d389075be5be9f2246ad654ce152cf05990b209", - "amount": "0x64" - } - ] - }, - "401": { - "withdrawals": [ - { - "index": "0x23", + "index": "0xd", "validatorIndex": "0x5", "address": "0x0c2c51a0990aee1d73c1228de158688341557508", "amount": "0x64" } ] }, - "412": { + "17": { + "withdrawals": [ + { + "index": "0x0", + "validatorIndex": "0x5", + "address": "0x3ae75c08b4c907eb63a8960c45b86e1e9ab6123c", + "amount": "0x64" + } + ] + }, + "171": { + "withdrawals": [ + { + "index": "0xe", + "validatorIndex": "0x5", + "address": "0x1f4924b14f34e24159387c0a4cdbaa32f3ddb0cf", + "amount": "0x64" + } + ] + }, + "182": { + "withdrawals": [ + { + "index": "0xf", + "validatorIndex": "0x5", + "address": "0x0c2c51a0990aee1d73c1228de158688341557508", + "amount": "0x64" + } + ] + }, + "193": { + "withdrawals": [ + { + "index": "0x10", + "validatorIndex": "0x5", + "address": "0xe7d13f7aa2a838d24c59b40186a0aca1e21cffcc", + "amount": "0x64" + } + ] + }, + "204": { + "withdrawals": [ + { + "index": "0x11", + "validatorIndex": "0x5", + "address": "0x84e75c28348fb86acea1a93a39426d7d60f4cc46", + "amount": "0x64" + } + ] + }, + "215": { + "withdrawals": [ + { + "index": "0x12", + "validatorIndex": "0x5", + "address": "0x4340ee1b812acb40a1eb561c019c327b243b92df", + "amount": "0x64" + } + ] + }, + "226": { + "withdrawals": [ + { + "index": "0x13", + "validatorIndex": "0x5", + "address": "0x16c57edf7fa9d9525378b0b81bf8a3ced0620c1c", + "amount": "0x64" + } + ] + }, + "237": { + "withdrawals": [ + { + "index": "0x14", + "validatorIndex": "0x5", + "address": "0x1f4924b14f34e24159387c0a4cdbaa32f3ddb0cf", + "amount": "0x64" + } + ] + }, + "248": { + "withdrawals": [ + { + "index": "0x15", + "validatorIndex": "0x5", + "address": "0xeda8645ba6948855e3b3cd596bbb07596d59c603", + "amount": "0x64" + } + ] + }, + "259": { + "withdrawals": [ + { + "index": "0x16", + "validatorIndex": "0x5", + "address": "0x5f552da00dfb4d3749d9e62dcee3c918855a86a0", + "amount": "0x64" + } + ] + }, + "270": { + "withdrawals": [ + { + "index": "0x17", + "validatorIndex": "0x5", + "address": "0x4dde844b71bcdf95512fb4dc94e84fb67b512ed8", + "amount": "0x64" + } + ] + }, + "28": { + "withdrawals": [ + { + "index": "0x1", + "validatorIndex": "0x5", + "address": "0x16c57edf7fa9d9525378b0b81bf8a3ced0620c1c", + "amount": "0x64" + } + ] + }, + "281": { + "withdrawals": [ + { + "index": "0x18", + "validatorIndex": "0x5", + "address": "0x2d389075be5be9f2246ad654ce152cf05990b209", + "amount": "0x64" + } + ] + }, + "292": { + "withdrawals": [ + { + "index": "0x19", + "validatorIndex": "0x5", + "address": "0x2d389075be5be9f2246ad654ce152cf05990b209", + "amount": "0x64" + } + ] + }, + "303": { + "withdrawals": [ + { + "index": "0x1a", + "validatorIndex": "0x5", + "address": "0x4dde844b71bcdf95512fb4dc94e84fb67b512ed8", + "amount": "0x64" + } + ] + }, + "314": { + "withdrawals": [ + { + "index": "0x1b", + "validatorIndex": "0x5", + "address": "0x14e46043e63d0e3cdcf2530519f4cfaf35058cb2", + "amount": "0x64" + } + ] + }, + "325": { + "withdrawals": [ + { + "index": "0x1c", + "validatorIndex": "0x5", + "address": "0x83c7e323d189f18725ac510004fdc2941f8c4a78", + "amount": "0x64" + } + ] + }, + "336": { + "withdrawals": [ + { + "index": "0x1d", + "validatorIndex": "0x5", + "address": "0xeda8645ba6948855e3b3cd596bbb07596d59c603", + "amount": "0x64" + } + ] + }, + "347": { + "withdrawals": [ + { + "index": "0x1e", + "validatorIndex": "0x5", + "address": "0xc7b99a164efd027a93f147376cc7da7c67c6bbe0", + "amount": "0x64" + } + ] + }, + "358": { + "withdrawals": [ + { + "index": "0x1f", + "validatorIndex": "0x5", + "address": "0xeda8645ba6948855e3b3cd596bbb07596d59c603", + "amount": "0x64" + } + ] + }, + "369": { + "withdrawals": [ + { + "index": "0x20", + "validatorIndex": "0x5", + "address": "0x5f552da00dfb4d3749d9e62dcee3c918855a86a0", + "amount": "0x64" + } + ] + }, + "380": { + "withdrawals": [ + { + "index": "0x21", + "validatorIndex": "0x5", + "address": "0x4340ee1b812acb40a1eb561c019c327b243b92df", + "amount": "0x64" + } + ] + }, + "39": { + "withdrawals": [ + { + "index": "0x2", + "validatorIndex": "0x5", + "address": "0x3ae75c08b4c907eb63a8960c45b86e1e9ab6123c", + "amount": "0x64" + } + ] + }, + "391": { + "withdrawals": [ + { + "index": "0x22", + "validatorIndex": "0x5", + "address": "0xeda8645ba6948855e3b3cd596bbb07596d59c603", + "amount": "0x64" + } + ] + }, + "402": { + "withdrawals": [ + { + "index": "0x23", + "validatorIndex": "0x5", + "address": "0xd803681e487e6ac18053afc5a6cd813c86ec3e4d", + "amount": "0x64" + } + ] + }, + "413": { "withdrawals": [ { "index": "0x24", @@ -3058,167 +3059,167 @@ } ] }, - "423": { + "424": { "withdrawals": [ { "index": "0x25", "validatorIndex": "0x5", - "address": "0xeda8645ba6948855e3b3cd596bbb07596d59c603", - "amount": "0x64" - } - ] - }, - "434": { - "withdrawals": [ - { - "index": "0x26", - "validatorIndex": "0x5", - "address": "0x0c2c51a0990aee1d73c1228de158688341557508", - "amount": "0x64" - } - ] - }, - "445": { - "withdrawals": [ - { - "index": "0x27", - "validatorIndex": "0x5", - "address": "0x1f4924b14f34e24159387c0a4cdbaa32f3ddb0cf", - "amount": "0x64" - } - ] - }, - "456": { - "withdrawals": [ - { - "index": "0x28", - "validatorIndex": "0x5", - "address": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "amount": "0x64" - } - ] - }, - "467": { - "withdrawals": [ - { - "index": "0x29", - "validatorIndex": "0x5", - "address": "0x4a0f1452281bcec5bd90c3dce6162a5995bfe9df", - "amount": "0x64" - } - ] - }, - "478": { - "withdrawals": [ - { - "index": "0x2a", - "validatorIndex": "0x5", - "address": "0x4340ee1b812acb40a1eb561c019c327b243b92df", - "amount": "0x64" - } - ] - }, - "489": { - "withdrawals": [ - { - "index": "0x2b", - "validatorIndex": "0x5", - "address": "0x83c7e323d189f18725ac510004fdc2941f8c4a78", - "amount": "0x64" - } - ] - }, - "49": { - "withdrawals": [ - { - "index": "0x3", - "validatorIndex": "0x5", - "address": "0xd803681e487e6ac18053afc5a6cd813c86ec3e4d", - "amount": "0x64" - } - ] - }, - "500": { - "withdrawals": [ - { - "index": "0x2c", - "validatorIndex": "0x5", - "address": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", - "amount": "0x64" - } - ] - }, - "511": { - "withdrawals": [ - { - "index": "0x2d", - "validatorIndex": "0x5", - "address": "0x717f8aa2b982bee0e29f573d31df288663e1ce16", - "amount": "0x64" - } - ] - }, - "522": { - "withdrawals": [ - { - "index": "0x2e", - "validatorIndex": "0x5", - "address": "0x0c2c51a0990aee1d73c1228de158688341557508", - "amount": "0x64" - } - ] - }, - "533": { - "withdrawals": [ - { - "index": "0x2f", - "validatorIndex": "0x5", - "address": "0xc7b99a164efd027a93f147376cc7da7c67c6bbe0", - "amount": "0x64" - } - ] - }, - "544": { - "withdrawals": [ - { - "index": "0x30", - "validatorIndex": "0x5", - "address": "0x1f5bde34b4afc686f136c7a3cb6ec376f7357759", - "amount": "0x64" - } - ] - }, - "555": { - "withdrawals": [ - { - "index": "0x31", - "validatorIndex": "0x5", "address": "0x5f552da00dfb4d3749d9e62dcee3c918855a86a0", "amount": "0x64" } ] }, - "566": { + "435": { + "withdrawals": [ + { + "index": "0x26", + "validatorIndex": "0x5", + "address": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "amount": "0x64" + } + ] + }, + "446": { + "withdrawals": [ + { + "index": "0x27", + "validatorIndex": "0x5", + "address": "0x1f5bde34b4afc686f136c7a3cb6ec376f7357759", + "amount": "0x64" + } + ] + }, + "457": { + "withdrawals": [ + { + "index": "0x28", + "validatorIndex": "0x5", + "address": "0x4340ee1b812acb40a1eb561c019c327b243b92df", + "amount": "0x64" + } + ] + }, + "468": { + "withdrawals": [ + { + "index": "0x29", + "validatorIndex": "0x5", + "address": "0xeda8645ba6948855e3b3cd596bbb07596d59c603", + "amount": "0x64" + } + ] + }, + "479": { + "withdrawals": [ + { + "index": "0x2a", + "validatorIndex": "0x5", + "address": "0xe7d13f7aa2a838d24c59b40186a0aca1e21cffcc", + "amount": "0x64" + } + ] + }, + "490": { + "withdrawals": [ + { + "index": "0x2b", + "validatorIndex": "0x5", + "address": "0xeda8645ba6948855e3b3cd596bbb07596d59c603", + "amount": "0x64" + } + ] + }, + "50": { + "withdrawals": [ + { + "index": "0x3", + "validatorIndex": "0x5", + "address": "0x654aa64f5fbefb84c270ec74211b81ca8c44a72e", + "amount": "0x64" + } + ] + }, + "501": { + "withdrawals": [ + { + "index": "0x2c", + "validatorIndex": "0x5", + "address": "0x84e75c28348fb86acea1a93a39426d7d60f4cc46", + "amount": "0x64" + } + ] + }, + "512": { + "withdrawals": [ + { + "index": "0x2d", + "validatorIndex": "0x5", + "address": "0xd803681e487e6ac18053afc5a6cd813c86ec3e4d", + "amount": "0x64" + } + ] + }, + "523": { + "withdrawals": [ + { + "index": "0x2e", + "validatorIndex": "0x5", + "address": "0x654aa64f5fbefb84c270ec74211b81ca8c44a72e", + "amount": "0x64" + } + ] + }, + "534": { + "withdrawals": [ + { + "index": "0x2f", + "validatorIndex": "0x5", + "address": "0x3ae75c08b4c907eb63a8960c45b86e1e9ab6123c", + "amount": "0x64" + } + ] + }, + "545": { + "withdrawals": [ + { + "index": "0x30", + "validatorIndex": "0x5", + "address": "0x4340ee1b812acb40a1eb561c019c327b243b92df", + "amount": "0x64" + } + ] + }, + "556": { + "withdrawals": [ + { + "index": "0x31", + "validatorIndex": "0x5", + "address": "0x3ae75c08b4c907eb63a8960c45b86e1e9ab6123c", + "amount": "0x64" + } + ] + }, + "567": { "withdrawals": [ { "index": "0x32", "validatorIndex": "0x5", - "address": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "address": "0x84e75c28348fb86acea1a93a39426d7d60f4cc46", "amount": "0x64" } ] }, - "577": { + "578": { "withdrawals": [ { "index": "0x33", "validatorIndex": "0x5", - "address": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "address": "0x2d389075be5be9f2246ad654ce152cf05990b209", "amount": "0x64" } ] }, - "588": { + "589": { "withdrawals": [ { "index": "0x34", @@ -3228,52 +3229,52 @@ } ] }, - "599": { + "600": { "withdrawals": [ { "index": "0x35", "validatorIndex": "0x5", - "address": "0x1f4924b14f34e24159387c0a4cdbaa32f3ddb0cf", - "amount": "0x64" - } - ] - }, - "60": { - "withdrawals": [ - { - "index": "0x4", - "validatorIndex": "0x5", - "address": "0xe7d13f7aa2a838d24c59b40186a0aca1e21cffcc", - "amount": "0x64" - } - ] - }, - "71": { - "withdrawals": [ - { - "index": "0x5", - "validatorIndex": "0x5", - "address": "0x654aa64f5fbefb84c270ec74211b81ca8c44a72e", - "amount": "0x64" - } - ] - }, - "82": { - "withdrawals": [ - { - "index": "0x6", - "validatorIndex": "0x5", "address": "0x717f8aa2b982bee0e29f573d31df288663e1ce16", "amount": "0x64" } ] }, - "93": { + "61": { + "withdrawals": [ + { + "index": "0x4", + "validatorIndex": "0x5", + "address": "0x1f5bde34b4afc686f136c7a3cb6ec376f7357759", + "amount": "0x64" + } + ] + }, + "72": { + "withdrawals": [ + { + "index": "0x5", + "validatorIndex": "0x5", + "address": "0x0c2c51a0990aee1d73c1228de158688341557508", + "amount": "0x64" + } + ] + }, + "83": { + "withdrawals": [ + { + "index": "0x6", + "validatorIndex": "0x5", + "address": "0xe7d13f7aa2a838d24c59b40186a0aca1e21cffcc", + "amount": "0x64" + } + ] + }, + "94": { "withdrawals": [ { "index": "0x7", "validatorIndex": "0x5", - "address": "0x7435ed30a8b4aeb0877cef0c6e8cffe834eb865f", + "address": "0x84e75c28348fb86acea1a93a39426d7d60f4cc46", "amount": "0x64" } ] diff --git a/eth/downloader/downloader_test.go b/eth/downloader/downloader_test.go index f113cf3e9f..01a994dbfd 100644 --- a/eth/downloader/downloader_test.go +++ b/eth/downloader/downloader_test.go @@ -259,8 +259,8 @@ func (dlp *downloadTesterPeer) RequestBodies(hashes []common.Hash, sink chan *et // RequestReceipts constructs a getReceipts method associated with a particular // peer in the download tester. The returned function can be used to retrieve // batches of block receipts from the particularly requested peer. -func (dlp *downloadTesterPeer) RequestReceipts(hashes []common.Hash, sink chan *eth.Response) (*eth.Request, error) { - blobs := eth.ServiceGetReceiptsQuery(dlp.chain, hashes) +func (dlp *downloadTesterPeer) RequestReceipts(hashes []common.Hash, gasUsed []uint64, timestamps []uint64, sink chan *eth.Response) (*eth.Request, error) { + blobs := eth.ServiceGetReceiptsQuery69(dlp.chain, hashes) receipts := make([]types.Receipts, blobs.Len()) // compute hashes diff --git a/eth/downloader/fetchers_concurrent_receipts.go b/eth/downloader/fetchers_concurrent_receipts.go index dbea30e881..74dbc67af3 100644 --- a/eth/downloader/fetchers_concurrent_receipts.go +++ b/eth/downloader/fetchers_concurrent_receipts.go @@ -78,11 +78,17 @@ func (q *receiptQueue) request(peer *peerConnection, req *fetchRequest, resCh ch if q.receiptFetchHook != nil { q.receiptFetchHook(req.Headers) } - hashes := make([]common.Hash, 0, len(req.Headers)) + var ( + gasUsed = make([]uint64, 0, len(req.Headers)) + timestamps = make([]uint64, 0, len(req.Headers)) + hashes = make([]common.Hash, 0, len(req.Headers)) + ) for _, header := range req.Headers { hashes = append(hashes, header.Hash()) + gasUsed = append(gasUsed, header.GasUsed) + timestamps = append(timestamps, header.Time) } - return peer.peer.RequestReceipts(hashes, resCh) + return peer.peer.RequestReceipts(hashes, gasUsed, timestamps, resCh) } // deliver is responsible for taking a generic response packet from the concurrent diff --git a/eth/downloader/peer.go b/eth/downloader/peer.go index 0848e92a26..d20bda69e9 100644 --- a/eth/downloader/peer.go +++ b/eth/downloader/peer.go @@ -60,7 +60,7 @@ type Peer interface { RequestHeadersByNumber(uint64, int, int, bool, chan *eth.Response) (*eth.Request, error) RequestBodies([]common.Hash, chan *eth.Response) (*eth.Request, error) - RequestReceipts([]common.Hash, chan *eth.Response) (*eth.Request, error) + RequestReceipts([]common.Hash, []uint64, []uint64, chan *eth.Response) (*eth.Request, error) } // newPeerConnection creates a new downloader peer. diff --git a/eth/downloader/skeleton_test.go b/eth/downloader/skeleton_test.go index 8c38e9d0c5..b9e7dba6ee 100644 --- a/eth/downloader/skeleton_test.go +++ b/eth/downloader/skeleton_test.go @@ -208,7 +208,7 @@ func (p *skeletonTestPeer) RequestBodies([]common.Hash, chan *eth.Response) (*et panic("skeleton sync must not request block bodies") } -func (p *skeletonTestPeer) RequestReceipts([]common.Hash, chan *eth.Response) (*eth.Request, error) { +func (p *skeletonTestPeer) RequestReceipts([]common.Hash, []uint64, []uint64, chan *eth.Response) (*eth.Request, error) { panic("skeleton sync must not request receipts") } diff --git a/eth/handler_eth_test.go b/eth/handler_eth_test.go index 68e91fa897..4f74f7672f 100644 --- a/eth/handler_eth_test.go +++ b/eth/handler_eth_test.go @@ -137,8 +137,8 @@ func testForkIDSplit(t *testing.T, protocol uint) { defer p2pNoFork.Close() defer p2pProFork.Close() - peerNoFork := eth.NewPeer(protocol, p2p.NewPeerPipe(enode.ID{1}, "", nil, p2pNoFork), p2pNoFork, nil) - peerProFork := eth.NewPeer(protocol, p2p.NewPeerPipe(enode.ID{2}, "", nil, p2pProFork), p2pProFork, nil) + peerNoFork := eth.NewPeer(protocol, p2p.NewPeerPipe(enode.ID{1}, "", nil, p2pNoFork), p2pNoFork, nil, nil) + peerProFork := eth.NewPeer(protocol, p2p.NewPeerPipe(enode.ID{2}, "", nil, p2pProFork), p2pProFork, nil, nil) defer peerNoFork.Close() defer peerProFork.Close() @@ -168,8 +168,8 @@ func testForkIDSplit(t *testing.T, protocol uint) { defer p2pNoFork.Close() defer p2pProFork.Close() - peerNoFork = eth.NewPeer(protocol, p2p.NewPeer(enode.ID{1}, "", nil), p2pNoFork, nil) - peerProFork = eth.NewPeer(protocol, p2p.NewPeer(enode.ID{2}, "", nil), p2pProFork, nil) + peerNoFork = eth.NewPeer(protocol, p2p.NewPeer(enode.ID{1}, "", nil), p2pNoFork, nil, nil) + peerProFork = eth.NewPeer(protocol, p2p.NewPeer(enode.ID{2}, "", nil), p2pProFork, nil, nil) defer peerNoFork.Close() defer peerProFork.Close() @@ -199,8 +199,8 @@ func testForkIDSplit(t *testing.T, protocol uint) { defer p2pNoFork.Close() defer p2pProFork.Close() - peerNoFork = eth.NewPeer(protocol, p2p.NewPeerPipe(enode.ID{1}, "", nil, p2pNoFork), p2pNoFork, nil) - peerProFork = eth.NewPeer(protocol, p2p.NewPeerPipe(enode.ID{2}, "", nil, p2pProFork), p2pProFork, nil) + peerNoFork = eth.NewPeer(protocol, p2p.NewPeerPipe(enode.ID{1}, "", nil, p2pNoFork), p2pNoFork, nil, nil) + peerProFork = eth.NewPeer(protocol, p2p.NewPeerPipe(enode.ID{2}, "", nil, p2pProFork), p2pProFork, nil, nil) defer peerNoFork.Close() defer peerProFork.Close() @@ -249,8 +249,8 @@ func testRecvTransactions(t *testing.T, protocol uint) { defer p2pSrc.Close() defer p2pSink.Close() - src := eth.NewPeer(protocol, p2p.NewPeerPipe(enode.ID{1}, "", nil, p2pSrc), p2pSrc, handler.txpool) - sink := eth.NewPeer(protocol, p2p.NewPeerPipe(enode.ID{2}, "", nil, p2pSink), p2pSink, handler.txpool) + src := eth.NewPeer(protocol, p2p.NewPeerPipe(enode.ID{1}, "", nil, p2pSrc), p2pSrc, handler.txpool, nil) + sink := eth.NewPeer(protocol, p2p.NewPeerPipe(enode.ID{2}, "", nil, p2pSink), p2pSink, handler.txpool, nil) defer src.Close() defer sink.Close() @@ -305,8 +305,8 @@ func testSendTransactions(t *testing.T, protocol uint) { defer p2pSrc.Close() defer p2pSink.Close() - src := eth.NewPeer(protocol, p2p.NewPeerPipe(enode.ID{1}, "", nil, p2pSrc), p2pSrc, handler.txpool) - sink := eth.NewPeer(protocol, p2p.NewPeerPipe(enode.ID{2}, "", nil, p2pSink), p2pSink, handler.txpool) + src := eth.NewPeer(protocol, p2p.NewPeerPipe(enode.ID{1}, "", nil, p2pSrc), p2pSrc, handler.txpool, nil) + sink := eth.NewPeer(protocol, p2p.NewPeerPipe(enode.ID{2}, "", nil, p2pSink), p2pSink, handler.txpool, nil) defer src.Close() defer sink.Close() @@ -380,8 +380,8 @@ func testTransactionPropagation(t *testing.T, protocol uint) { defer sourcePipe.Close() defer sinkPipe.Close() - sourcePeer := eth.NewPeer(protocol, p2p.NewPeerPipe(enode.ID{byte(i + 1)}, "", nil, sourcePipe), sourcePipe, source.txpool) - sinkPeer := eth.NewPeer(protocol, p2p.NewPeerPipe(enode.ID{0}, "", nil, sinkPipe), sinkPipe, sink.txpool) + sourcePeer := eth.NewPeer(protocol, p2p.NewPeerPipe(enode.ID{byte(i + 1)}, "", nil, sourcePipe), sourcePipe, source.txpool, nil) + sinkPeer := eth.NewPeer(protocol, p2p.NewPeerPipe(enode.ID{0}, "", nil, sinkPipe), sinkPipe, sink.txpool, nil) defer sourcePeer.Close() defer sinkPeer.Close() diff --git a/eth/handler_test.go b/eth/handler_test.go index fee6bae138..9cd955d29d 100644 --- a/eth/handler_test.go +++ b/eth/handler_test.go @@ -317,7 +317,7 @@ func createTestPeers(rand *rand.Rand, n int) []*ethPeer { var id enode.ID rand.Read(id[:]) p2pPeer := p2p.NewPeer(id, "test", nil) - ep := eth.NewPeer(eth.ETH69, p2pPeer, nil, nil) + ep := eth.NewPeer(eth.ETH69, p2pPeer, nil, nil, nil) peers[i] = ðPeer{Peer: ep} } return peers diff --git a/eth/protocols/eth/dispatcher.go b/eth/protocols/eth/dispatcher.go index 3f78fb4646..5a01ab32e0 100644 --- a/eth/protocols/eth/dispatcher.go +++ b/eth/protocols/eth/dispatcher.go @@ -214,7 +214,10 @@ loop: continue loop } - pending[req.id] = req + // do not overwrite if it is re-request + if _, ok := pending[req.id]; !ok { + pending[req.id] = req + } reqOp.fail <- nil case cancelOp := <-p.reqCancel: @@ -227,6 +230,13 @@ loop: } // Stop tracking the request delete(pending, cancelOp.id) + + // Not sure if the request is about the receipt, but remove it anyway. + // TODO(rjl493456442, bosul): investigate whether we can avoid leaking peer fields here. + p.receiptBufferLock.Lock() + delete(p.receiptBuffer, cancelOp.id) + p.receiptBufferLock.Unlock() + cancelOp.fail <- nil case resOp := <-p.resDispatch: diff --git a/eth/protocols/eth/handler.go b/eth/protocols/eth/handler.go index aa1c7d45bc..59512f5be7 100644 --- a/eth/protocols/eth/handler.go +++ b/eth/protocols/eth/handler.go @@ -35,6 +35,10 @@ const ( // softResponseLimit is the target maximum size of replies to data retrievals. softResponseLimit = 2 * 1024 * 1024 + // maxPacketSize is the devp2p message size limit commonly enforced by clients. + // Any packet exceeding this limit must be rejected. + maxPacketSize = 10 * 1024 * 1024 + // maxHeadersServe is the maximum number of block headers to serve. This number // is there to limit the number of disk lookups. maxHeadersServe = 1024 @@ -106,7 +110,7 @@ func MakeProtocols(backend Backend, network uint64, disc enode.Iterator) []p2p.P Version: version, Length: protocolLengths[version], Run: func(p *p2p.Peer, rw p2p.MsgReadWriter) error { - peer := NewPeer(version, p, rw, backend.TxPool()) + peer := NewPeer(version, p, rw, backend.TxPool(), backend.Chain().Config()) defer peer.Close() return backend.RunPeer(peer, func(peer *Peer) error { @@ -173,8 +177,22 @@ var eth69 = map[uint64]msgHandler{ BlockHeadersMsg: handleBlockHeaders, GetBlockBodiesMsg: handleGetBlockBodies, BlockBodiesMsg: handleBlockBodies, - GetReceiptsMsg: handleGetReceipts, - ReceiptsMsg: handleReceipts, + GetReceiptsMsg: handleGetReceipts69, + ReceiptsMsg: handleReceipts69, + GetPooledTransactionsMsg: handleGetPooledTransactions, + PooledTransactionsMsg: handlePooledTransactions, + BlockRangeUpdateMsg: handleBlockRangeUpdate, +} + +var eth70 = map[uint64]msgHandler{ + TransactionsMsg: handleTransactions, + NewPooledTransactionHashesMsg: handleNewPooledTransactionHashes, + GetBlockHeadersMsg: handleGetBlockHeaders, + BlockHeadersMsg: handleBlockHeaders, + GetBlockBodiesMsg: handleGetBlockBodies, + BlockBodiesMsg: handleBlockBodies, + GetReceiptsMsg: handleGetReceipts70, + ReceiptsMsg: handleReceipts70, GetPooledTransactionsMsg: handleGetPooledTransactions, PooledTransactionsMsg: handlePooledTransactions, BlockRangeUpdateMsg: handleBlockRangeUpdate, @@ -194,9 +212,12 @@ func handleMessage(backend Backend, peer *Peer) error { defer msg.Discard() var handlers map[uint64]msgHandler - if peer.version == ETH69 { + switch peer.version { + case ETH69: handlers = eth69 - } else { + case ETH70: + handlers = eth70 + default: return fmt.Errorf("unknown eth protocol version: %v", peer.version) } diff --git a/eth/protocols/eth/handler_test.go b/eth/protocols/eth/handler_test.go index 2e0ce0408b..a45abc90eb 100644 --- a/eth/protocols/eth/handler_test.go +++ b/eth/protocols/eth/handler_test.go @@ -596,11 +596,11 @@ func testGetBlockReceipts(t *testing.T, protocol uint) { } // Send the hash request and verify the response - p2p.Send(peer.app, GetReceiptsMsg, &GetReceiptsPacket{ + p2p.Send(peer.app, GetReceiptsMsg, &GetReceiptsPacket69{ RequestId: 123, GetReceiptsRequest: hashes, }) - if err := p2p.ExpectMsg(peer.app, ReceiptsMsg, &ReceiptsPacket{ + if err := p2p.ExpectMsg(peer.app, ReceiptsMsg, &ReceiptsPacket69{ RequestId: 123, List: receipts, }); err != nil { @@ -608,6 +608,103 @@ func testGetBlockReceipts(t *testing.T, protocol uint) { } } +func TestGetBlockPartialReceipts(t *testing.T) { testGetBlockPartialReceipts(t, ETH70) } + +func testGetBlockPartialReceipts(t *testing.T, protocol int) { + // First, generate the chain and overwrite the receipts. + generator := func(_ int, block *core.BlockGen) { + for j := 0; j < 5; j++ { + tx, err := types.SignTx( + types.NewTransaction(block.TxNonce(testAddr), testAddr, big.NewInt(1000), params.TxGas, block.BaseFee(), nil), + types.LatestSignerForChainID(params.TestChainConfig.ChainID), + testKey, + ) + if err != nil { + t.Fatalf("failed to sign tx: %v", err) + } + block.AddTx(tx) + } + } + backend := newTestBackendWithGenerator(4, true, false, generator) + defer backend.close() + + blockCutoff := 2 + receiptCutoff := 4 + + // Replace the receipts in the database with larger receipts. + targetBlock := backend.chain.GetBlockByNumber(uint64(blockCutoff)) + receipts := backend.chain.GetReceiptsByHash(targetBlock.Hash()) + receiptSize := params.MaxTxGas / params.LogDataGas // ~2MiB per receipt + for i := range receipts { + payload := make([]byte, receiptSize) + for j := range payload { + payload[j] = byte(i + j) + } + receipts[i].Logs = []*types.Log{ + { + Address: common.BytesToAddress([]byte{byte(i + 1)}), + Data: payload, + }, + } + } + + rawdb.WriteReceipts(backend.db, targetBlock.Hash(), targetBlock.NumberU64(), receipts) + + peer, _ := newTestPeer("peer", uint(protocol), backend) + defer peer.close() + + var ( + hashes []common.Hash + partialReceipt []*ReceiptList + ) + for i := uint64(0); i <= backend.chain.CurrentBlock().Number.Uint64(); i++ { + block := backend.chain.GetBlockByNumber(i) + hashes = append(hashes, block.Hash()) + } + for i := 0; i <= blockCutoff; i++ { + block := backend.chain.GetBlockByNumber(uint64(i)) + trs := backend.chain.GetReceiptsByHash(block.Hash()) + limit := len(trs) + if i == blockCutoff { + limit = receiptCutoff + } + partialReceipt = append(partialReceipt, NewReceiptList(trs[:limit])) + } + + rawPartialReceipt, _ := rlp.EncodeToRawList(partialReceipt) + + p2p.Send(peer.app, GetReceiptsMsg, &GetReceiptsPacket70{ + RequestId: 123, + FirstBlockReceiptIndex: 0, + GetReceiptsRequest: hashes, + }) + if err := p2p.ExpectMsg(peer.app, ReceiptsMsg, &ReceiptsPacket70{ + RequestId: 123, + LastBlockIncomplete: true, + List: rawPartialReceipt, + }); err != nil { + t.Errorf("receipts mismatch: %v", err) + } + + // Simulate the continued request + partialReceipt = []*ReceiptList{NewReceiptList(receipts[receiptCutoff:])} + rawPartialReceipt, _ = rlp.EncodeToRawList(partialReceipt) + + p2p.Send(peer.app, GetReceiptsMsg, &GetReceiptsPacket70{ + RequestId: 123, + FirstBlockReceiptIndex: uint64(receiptCutoff), + GetReceiptsRequest: []common.Hash{hashes[blockCutoff]}, + }) + + if err := p2p.ExpectMsg(peer.app, ReceiptsMsg, &ReceiptsPacket70{ + RequestId: 123, + LastBlockIncomplete: false, + List: rawPartialReceipt, + }); err != nil { + t.Errorf("receipts mismatch: %v", err) + } +} + type decoder struct { msg []byte } @@ -670,10 +767,10 @@ func setup() (*testBackend, *testPeer) { } func FuzzEthProtocolHandlers(f *testing.F) { - handlers := eth69 + handlers := eth70 backend, peer := setup() f.Fuzz(func(t *testing.T, code byte, msg []byte) { - handler := handlers[uint64(code)%protocolLengths[ETH69]] + handler := handlers[uint64(code)%protocolLengths[ETH70]] if handler == nil { return } diff --git a/eth/protocols/eth/handlers.go b/eth/protocols/eth/handlers.go index 90717472f9..7556df9af2 100644 --- a/eth/protocols/eth/handlers.go +++ b/eth/protocols/eth/handlers.go @@ -246,47 +246,51 @@ func ServiceGetBlockBodiesQuery(chain *core.BlockChain, query GetBlockBodiesRequ return bodies } -func handleGetReceipts(backend Backend, msg Decoder, peer *Peer) error { +func handleGetReceipts69(backend Backend, msg Decoder, peer *Peer) error { // Decode the block receipts retrieval message - var query GetReceiptsPacket + var query GetReceiptsPacket69 if err := msg.Decode(&query); err != nil { return err } - response := ServiceGetReceiptsQuery(backend.Chain(), query.GetReceiptsRequest) - return peer.ReplyReceiptsRLP(query.RequestId, response) + response := ServiceGetReceiptsQuery69(backend.Chain(), query.GetReceiptsRequest) + return peer.ReplyReceiptsRLP69(query.RequestId, response) } -// ServiceGetReceiptsQuery assembles the response to a receipt query. +func handleGetReceipts70(backend Backend, msg Decoder, peer *Peer) error { + var query GetReceiptsPacket70 + if err := msg.Decode(&query); err != nil { + return err + } + response, lastBlockIncomplete := serviceGetReceiptsQuery70(backend.Chain(), query.GetReceiptsRequest, query.FirstBlockReceiptIndex) + return peer.ReplyReceiptsRLP70(query.RequestId, response, lastBlockIncomplete) +} + +// ServiceGetReceiptsQuery69 assembles the response to a receipt query. // It does not send the bloom filters for the receipts. It is exposed // to allow external packages to test protocol behavior. -func ServiceGetReceiptsQuery(chain *core.BlockChain, query GetReceiptsRequest) rlp.RawList[*ReceiptList] { - // Gather state data until the fetch or network limits is reached +func ServiceGetReceiptsQuery69(chain *core.BlockChain, query GetReceiptsRequest) rlp.RawList[*ReceiptList] { var ( bytes int receipts rlp.RawList[*ReceiptList] ) for lookups, hash := range query { - if bytes >= softResponseLimit || receipts.Len() >= maxReceiptsServe || - lookups >= 2*maxReceiptsServe { + if bytes >= softResponseLimit || receipts.Len() >= maxReceiptsServe || lookups >= 2*maxReceiptsServe { break } + // Retrieve the requested block's receipts results := chain.GetReceiptsRLP(hash) if results == nil { - if header := chain.GetHeaderByHash(hash); header == nil || header.ReceiptHash != types.EmptyRootHash { - continue - } - } else { - body := chain.GetBodyRLP(hash) - if body == nil { - continue - } - var err error - results, err = blockReceiptsToNetwork(results, body) - if err != nil { - log.Error("Error in block receipts conversion", "hash", hash, "err", err) - continue - } + continue // Can't retrieve the receipts, so we just skip this block. + } + body := chain.GetBodyRLP(hash) + if body == nil { + continue // The block body is missing, we also have to skip. + } + results, _, err := blockReceiptsToNetwork(results, body, receiptQueryParams{}) + if err != nil { + log.Error("Error in block receipts conversion", "hash", hash, "err", err) + continue } receipts.AppendRaw(results) bytes += len(results) @@ -294,6 +298,50 @@ func ServiceGetReceiptsQuery(chain *core.BlockChain, query GetReceiptsRequest) r return receipts } +// serviceGetReceiptsQuery70 assembles the response to a receipt query. +// If the receipts exceed 10 MiB, it trims them and sets the +// lastBlockIncomplete flag. Indices smaller than firstBlockReceiptIndex +// are omitted from the first block receipt list. +func serviceGetReceiptsQuery70(chain *core.BlockChain, query GetReceiptsRequest, firstBlockReceiptIndex uint64) (rlp.RawList[*ReceiptList], bool) { + var ( + bytes int + receipts rlp.RawList[*ReceiptList] + ) + for i, hash := range query { + if bytes >= softResponseLimit || receipts.Len() >= maxReceiptsServe { + break + } + results := chain.GetReceiptsRLP(hash) + if results == nil { + continue // Can't retrieve the receipts, so we just skip this block. + } + body := chain.GetBodyRLP(hash) + if body == nil { + continue // The block body is missing, we also have to skip. + } + q := receiptQueryParams{sizeLimit: uint64(maxPacketSize - bytes)} + if i == 0 { + q.firstIndex = firstBlockReceiptIndex + } + results, incomplete, err := blockReceiptsToNetwork(results, body, q) + if err != nil { + log.Error("Error in block receipts conversion", "hash", hash, "err", err) + continue + } + if results == nil { + // This case triggers when the first receipt of the block receipts list doesn't + // fit. We don't append anything to the response here and consider it finished. + break + } + receipts.AppendRaw(results) + bytes += len(results) + if incomplete { + return receipts, true + } + } + return receipts, false +} + func handleBlockHeaders(backend Backend, msg Decoder, peer *Peer) error { // A batch of headers arrived to one of our previous requests res := new(BlockHeadersPacket) @@ -435,9 +483,9 @@ func writeTxForHash(tx []byte, buf *bytes.Buffer) { } } -func handleReceipts(backend Backend, msg Decoder, peer *Peer) error { +func handleReceipts69(backend Backend, msg Decoder, peer *Peer) error { // A batch of receipts arrived to one of our previous requests - res := new(ReceiptsPacket) + res := new(ReceiptsPacket69) if err := msg.Decode(res); err != nil { return err } @@ -452,6 +500,41 @@ func handleReceipts(backend Backend, msg Decoder, peer *Peer) error { return fmt.Errorf("Receipts: %w", err) } + return dispatchReceipts(res.RequestId, receiptLists, peer) +} + +func handleReceipts70(backend Backend, msg Decoder, peer *Peer) error { + res := new(ReceiptsPacket70) + if err := msg.Decode(res); err != nil { + return err + } + + tresp := tracker.Response{ID: res.RequestId, MsgCode: ReceiptsMsg, Size: res.List.Len()} + if err := peer.tracker.Fulfil(tresp); err != nil { + return fmt.Errorf("Receipts: %w", err) + } + receiptLists, err := res.List.Items() + if err != nil { + return fmt.Errorf("Receipts: %w", err) + } + + err = peer.bufferReceipts(res.RequestId, receiptLists, res.LastBlockIncomplete, backend) + if err != nil { + return err + } + if res.LastBlockIncomplete { + // Request the remaining receipts from the same peer. + return peer.requestPartialReceipts(res.RequestId) + } + if complete := peer.flushReceipts(res.RequestId); complete != nil { + receiptLists = complete + } + + return dispatchReceipts(res.RequestId, receiptLists, peer) +} + +// dispatchReceipts submits a receipt response to the dispatcher. +func dispatchReceipts(requestId uint64, receiptLists []*ReceiptList, peer *Peer) error { metadata := func() interface{} { hasher := trie.NewStackTrie(nil) hashes := make([]common.Hash, len(receiptLists)) @@ -470,7 +553,7 @@ func handleReceipts(backend Backend, msg Decoder, peer *Peer) error { enc = append(enc, encReceipts) } return peer.dispatchResponse(&Response{ - id: res.RequestId, + id: requestId, code: ReceiptsMsg, Res: &enc, }, metadata) diff --git a/eth/protocols/eth/handshake_test.go b/eth/protocols/eth/handshake_test.go index e2f1e7592a..5746d5896d 100644 --- a/eth/protocols/eth/handshake_test.go +++ b/eth/protocols/eth/handshake_test.go @@ -77,7 +77,7 @@ func testHandshake(t *testing.T, protocol uint) { defer app.Close() defer net.Close() - peer := NewPeer(protocol, p2p.NewPeer(enode.ID{}, "peer", nil), net, nil) + peer := NewPeer(protocol, p2p.NewPeer(enode.ID{}, "peer", nil), net, nil, nil) defer peer.Close() // Send the junk test with one peer, check the handshake failure diff --git a/eth/protocols/eth/peer.go b/eth/protocols/eth/peer.go index 3c6d58d670..754fd02be3 100644 --- a/eth/protocols/eth/peer.go +++ b/eth/protocols/eth/peer.go @@ -17,7 +17,10 @@ package eth import ( + "errors" + "fmt" "math/rand" + "sync" "sync/atomic" "time" @@ -26,6 +29,7 @@ import ( "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/p2p/tracker" + "github.com/ethereum/go-ethereum/params" "github.com/ethereum/go-ethereum/rlp" ) @@ -43,6 +47,15 @@ const ( maxQueuedTxAnns = 4096 ) +// receiptRequest tracks the state of an in-flight receipt retrieval operation. +type receiptRequest struct { + request []common.Hash // block hashes corresponding to the requested receipts + gasUsed []uint64 // block gas used corresponding to the requested receipts + timestamps []uint64 // block timestamps corresponding to the requested receipts + list []*ReceiptList // list of partially collected receipts + lastLogSize uint64 // log size of last receipt list +} + // Peer is a collection of relevant information we have about a `eth` peer. type Peer struct { *p2p.Peer // The embedded P2P package peer @@ -63,28 +76,35 @@ type Peer struct { reqCancel chan *cancel // Dispatch channel to cancel pending requests and untrack them resDispatch chan *response // Dispatch channel to fulfil pending requests and untrack them + chainConfig *params.ChainConfig // Chain configuration for fork-aware validation + + receiptBuffer map[uint64]*receiptRequest // Previously requested receipts to buffer partial receipts + receiptBufferLock sync.Mutex // Lock for protecting the receiptBuffer + term chan struct{} // Termination channel to stop the broadcasters } // NewPeer creates a wrapper for a network connection and negotiated protocol // version. -func NewPeer(version uint, p *p2p.Peer, rw p2p.MsgReadWriter, txpool TxPool) *Peer { +func NewPeer(version uint, p *p2p.Peer, rw p2p.MsgReadWriter, txpool TxPool, chainConfig *params.ChainConfig) *Peer { cap := p2p.Cap{Name: ProtocolName, Version: version} id := p.ID().String() peer := &Peer{ - id: id, - Peer: p, - rw: rw, - version: version, - knownTxs: newKnownCache(maxKnownTxs), - txBroadcast: make(chan []common.Hash), - txAnnounce: make(chan []common.Hash), - tracker: tracker.New(cap, id, 5*time.Minute), - reqDispatch: make(chan *request), - reqCancel: make(chan *cancel), - resDispatch: make(chan *response), - txpool: txpool, - term: make(chan struct{}), + id: p.ID().String(), + Peer: p, + rw: rw, + version: version, + knownTxs: newKnownCache(maxKnownTxs), + txBroadcast: make(chan []common.Hash), + txAnnounce: make(chan []common.Hash), + tracker: tracker.New(cap, id, 5*time.Minute), + reqDispatch: make(chan *request), + reqCancel: make(chan *cancel), + resDispatch: make(chan *response), + txpool: txpool, + chainConfig: chainConfig, + receiptBuffer: make(map[uint64]*receiptRequest), + term: make(chan struct{}), } // Start up all the broadcasters go peer.broadcastTransactions() @@ -214,14 +234,23 @@ func (p *Peer) ReplyBlockBodiesRLP(id uint64, bodies []rlp.RawValue) error { }) } -// ReplyReceiptsRLP is the response to GetReceipts. -func (p *Peer) ReplyReceiptsRLP(id uint64, receipts rlp.RawList[*ReceiptList]) error { - return p2p.Send(p.rw, ReceiptsMsg, &ReceiptsPacket{ +// ReplyReceiptsRLP69 is the response to GetReceipts. +func (p *Peer) ReplyReceiptsRLP69(id uint64, receipts rlp.RawList[*ReceiptList]) error { + return p2p.Send(p.rw, ReceiptsMsg, &ReceiptsPacket69{ RequestId: id, List: receipts, }) } +// ReplyReceiptsRLP70 is the response to GetReceipts. +func (p *Peer) ReplyReceiptsRLP70(id uint64, receipts rlp.RawList[*ReceiptList], lastBlockIncomplete bool) error { + return p2p.Send(p.rw, ReceiptsMsg, &ReceiptsPacket70{ + RequestId: id, + List: receipts, + LastBlockIncomplete: lastBlockIncomplete, + }) +} + // RequestOneHeader is a wrapper around the header query functions to fetch a // single header. It is used solely by the fetcher. func (p *Peer) RequestOneHeader(hash common.Hash, sink chan *Response) (*Request, error) { @@ -330,20 +359,45 @@ func (p *Peer) RequestBodies(hashes []common.Hash, sink chan *Response) (*Reques } // RequestReceipts fetches a batch of transaction receipts from a remote node. -func (p *Peer) RequestReceipts(hashes []common.Hash, sink chan *Response) (*Request, error) { +// `gasUsed` provides the total gas used per block, used to estimate the maximum +// log byte size. `timestamps` provides the block timestamps for fork aware validation. +func (p *Peer) RequestReceipts(hashes []common.Hash, gasUsed []uint64, timestamps []uint64, sink chan *Response) (*Request, error) { p.Log().Debug("Fetching batch of receipts", "count", len(hashes)) id := rand.Uint64() - req := &Request{ - id: id, - sink: sink, - code: GetReceiptsMsg, - want: ReceiptsMsg, - numItems: len(hashes), - data: &GetReceiptsPacket{ - RequestId: id, - GetReceiptsRequest: hashes, - }, + var req *Request + if p.version > ETH69 { + req = &Request{ + id: id, + sink: sink, + code: GetReceiptsMsg, + want: ReceiptsMsg, + numItems: len(hashes), + data: &GetReceiptsPacket70{ + RequestId: id, + FirstBlockReceiptIndex: 0, + GetReceiptsRequest: hashes, + }, + } + p.receiptBufferLock.Lock() + p.receiptBuffer[id] = &receiptRequest{ + request: hashes, + gasUsed: gasUsed, + timestamps: timestamps, + } + p.receiptBufferLock.Unlock() + } else { + req = &Request{ + id: id, + sink: sink, + code: GetReceiptsMsg, + want: ReceiptsMsg, + numItems: len(hashes), + data: &GetReceiptsPacket69{ + RequestId: id, + GetReceiptsRequest: hashes, + }, + } } if err := p.dispatchRequest(req); err != nil { return nil, err @@ -351,6 +405,153 @@ func (p *Peer) RequestReceipts(hashes []common.Hash, sink chan *Response) (*Requ return req, nil } +// HandlePartialReceipts re-request partial receipts +func (p *Peer) requestPartialReceipts(id uint64) error { + p.receiptBufferLock.Lock() + defer p.receiptBufferLock.Unlock() + + // Do not re-request for the stale request + if _, ok := p.receiptBuffer[id]; !ok { + return nil + } + lastBlock := len(p.receiptBuffer[id].list) - 1 + lastReceipt := p.receiptBuffer[id].list[lastBlock].items.Len() + + hashes := p.receiptBuffer[id].request[lastBlock:] + + req := &Request{ + id: id, + sink: nil, + code: GetReceiptsMsg, + want: ReceiptsMsg, + data: &GetReceiptsPacket70{ + RequestId: id, + FirstBlockReceiptIndex: uint64(lastReceipt), + GetReceiptsRequest: hashes, + }, + numItems: len(hashes), + } + return p.dispatchRequest(req) +} + +// bufferReceipts validates a receipt packet and buffer the incomplete packet. +// If the request is completed, it appends previously collected receipts. +func (p *Peer) bufferReceipts(requestId uint64, receiptLists []*ReceiptList, lastBlockIncomplete bool, backend Backend) error { + p.receiptBufferLock.Lock() + defer p.receiptBufferLock.Unlock() + + buffer := p.receiptBuffer[requestId] + + // Short circuit for the canceled response + if buffer == nil { + return nil + } + // If the response is empty, the peer likely does not have the requested receipts. + // Forward the empty response to the internal handler regardless. However, note + // that an empty response marked as incomplete is considered invalid. + if len(receiptLists) == 0 { + delete(p.receiptBuffer, requestId) + + if lastBlockIncomplete { + return errors.New("invalid empty receipt response with incomplete flag") + } + return nil + } + // Buffer the last block when the response is incomplete. + if lastBlockIncomplete { + lastBlock := len(receiptLists) - 1 + if len(buffer.list) > 0 { + lastBlock += len(buffer.list) - 1 + } + gasUsed := buffer.gasUsed[lastBlock] + timestamp := buffer.timestamps[lastBlock] + logSize, err := p.validateLastBlockReceipt(receiptLists, requestId, gasUsed, timestamp) + if err != nil { + delete(p.receiptBuffer, requestId) + return err + } + // Update the buffered data and trim the packet to exclude the incomplete block. + if len(buffer.list) > 0 { + // If the buffer is already allocated, it means that the previous response + // was incomplete Append the first block receipts. + buffer.list[len(buffer.list)-1].Append(receiptLists[0]) + buffer.list = append(buffer.list, receiptLists[1:]...) + buffer.lastLogSize = logSize + } else { + buffer.list = receiptLists + buffer.lastLogSize = logSize + } + return nil + } + // Short circuit if there is nothing cached previously. + if len(buffer.list) == 0 { + delete(p.receiptBuffer, requestId) + return nil + } + // Aggregate the cached result into the packet. + buffer.list[len(buffer.list)-1].Append(receiptLists[0]) + buffer.list = append(buffer.list, receiptLists[1:]...) + return nil +} + +// flushReceipts retrieves the merged receipt lists from the buffer +// and removes the buffer entry. Returns nil if no buffered data exists. +func (p *Peer) flushReceipts(requestId uint64) []*ReceiptList { + p.receiptBufferLock.Lock() + defer p.receiptBufferLock.Unlock() + + buffer, ok := p.receiptBuffer[requestId] + if !ok { + return nil + } + delete(p.receiptBuffer, requestId) + return buffer.list +} + +// validateLastBlockReceipt validates receipts and return log size of last block receipt. +// This function is called only when the `lastBlockincomplete == true`. +// +// Note that the last receipt response (which completes receiptLists of a pending block) +// is not verified here. Those response doesn't need hueristics below since they can be +// verified by its trie root. +func (p *Peer) validateLastBlockReceipt(receiptLists []*ReceiptList, id uint64, gasUsed uint64, timestamp uint64) (uint64, error) { + lastReceipts := receiptLists[len(receiptLists)-1] + + // If the receipt is in the middle of retrieval, use the buffered data. + // e.g. [[receipt1], [receipt1, receipt2], incomplete = true] + // [[receipt3, receipt4], incomplete = true] <<-- + // [[receipt5], [receipt1], incomplete = false] + // This case happens only if len(receiptLists) == 1 && incomplete == true && buffered before. + var previousTxs int + var previousLog uint64 + if buffer, ok := p.receiptBuffer[id]; ok && len(buffer.list) > 0 && len(receiptLists) == 1 { + previousTxs = buffer.list[len(buffer.list)-1].items.Len() + previousLog = buffer.lastLogSize + } + + // Verify that the total number of transactions delivered is under the limit. + var minTxGas uint64 + if p.chainConfig != nil && p.chainConfig.AmsterdamTime != nil && *p.chainConfig.AmsterdamTime <= timestamp { + minTxGas = 4500 + } else { + minTxGas = 21000 + } + if uint64(previousTxs+lastReceipts.items.Len()) > gasUsed/minTxGas { + // should be dropped, don't clear the buffer + return 0, fmt.Errorf("total number of tx exceeded limit") + } + // Count log size per receipt + log, err := lastReceipts.LogsSize() + if err != nil { + return 0, err + } + // Verify that the overall downloaded receipt size does not exceed the block gas limit. + if previousLog+log > gasUsed/params.LogDataGas { + return 0, fmt.Errorf("total download receipt size exceeded the limit") + } + return previousLog + log, nil +} + // RequestTxs fetches a batch of transactions from a remote node. func (p *Peer) RequestTxs(hashes []common.Hash) error { p.Log().Trace("Fetching batch of transactions", "count", len(hashes)) diff --git a/eth/protocols/eth/peer_test.go b/eth/protocols/eth/peer_test.go index efbbbc6fff..81b762452e 100644 --- a/eth/protocols/eth/peer_test.go +++ b/eth/protocols/eth/peer_test.go @@ -45,7 +45,7 @@ func newTestPeer(name string, version uint, backend Backend) (*testPeer, <-chan var id enode.ID rand.Read(id[:]) - peer := NewPeer(version, p2p.NewPeer(id, name, nil), net, backend.TxPool()) + peer := NewPeer(version, p2p.NewPeer(id, name, nil), net, backend.TxPool(), nil) errc := make(chan error, 1) go func() { defer app.Close() diff --git a/eth/protocols/eth/protocol.go b/eth/protocols/eth/protocol.go index ef65a7d034..0df0776c27 100644 --- a/eth/protocols/eth/protocol.go +++ b/eth/protocols/eth/protocol.go @@ -30,6 +30,7 @@ import ( // Constants to match up protocol versions and messages const ( ETH69 = 69 + ETH70 = 70 ) // ProtocolName is the official short name of the `eth` protocol used during @@ -38,11 +39,11 @@ const ProtocolName = "eth" // ProtocolVersions are the supported versions of the `eth` protocol (first // is primary). -var ProtocolVersions = []uint{ETH69} +var ProtocolVersions = []uint{ETH70, ETH69} // protocolLengths are the number of implemented message corresponding to // different protocol versions. -var protocolLengths = map[uint]uint64{ETH69: 18} +var protocolLengths = map[uint]uint64{ETH69: 18, ETH70: 18} // maxMessageSize is the maximum cap on the size of a protocol message. const maxMessageSize = 10 * 1024 * 1024 @@ -211,22 +212,36 @@ type BlockBody struct { // GetReceiptsRequest represents a block receipts query. type GetReceiptsRequest []common.Hash -// GetReceiptsPacket represents a block receipts query with request ID wrapping. -type GetReceiptsPacket struct { +// GetReceiptsPacket69 represents a block receipts query with request ID wrapping. +type GetReceiptsPacket69 struct { RequestId uint64 GetReceiptsRequest } +// GetReceiptsPacket70 represents a block receipts query with request ID and +// FirstBlockReceiptIndex wrapping. +type GetReceiptsPacket70 struct { + RequestId uint64 + FirstBlockReceiptIndex uint64 + GetReceiptsRequest +} + // ReceiptsResponse is the network packet for block receipts distribution. type ReceiptsResponse []types.Receipts -// ReceiptsPacket is the network packet for block receipts distribution with +// ReceiptsPacket69 is the network packet for block receipts distribution with // request ID wrapping. -type ReceiptsPacket struct { +type ReceiptsPacket69 struct { RequestId uint64 List rlp.RawList[*ReceiptList] } +type ReceiptsPacket70 struct { + RequestId uint64 + LastBlockIncomplete bool + List rlp.RawList[*ReceiptList] +} + // ReceiptsRLPResponse is used for receipts, when we already have it encoded type ReceiptsRLPResponse []rlp.RawValue diff --git a/eth/protocols/eth/protocol_test.go b/eth/protocols/eth/protocol_test.go index f93d01123b..04c4c0fc06 100644 --- a/eth/protocols/eth/protocol_test.go +++ b/eth/protocols/eth/protocol_test.go @@ -82,11 +82,10 @@ func TestEmptyMessages(t *testing.T) { GetBlockBodiesPacket{1111, nil}, BlockBodiesRLPPacket{1111, nil}, // Receipts - GetReceiptsPacket{1111, nil}, + GetReceiptsPacket69{1111, nil}, // Transactions GetPooledTransactionsPacket{1111, nil}, PooledTransactionsRLPPacket{1111, nil}, - // Headers BlockHeadersPacket{1111, encodeRL([]*types.Header{})}, // Bodies @@ -94,8 +93,8 @@ func TestEmptyMessages(t *testing.T) { BlockBodiesPacket{1111, encodeRL([]BlockBody{})}, BlockBodiesRLPPacket{1111, BlockBodiesRLPResponse([]rlp.RawValue{})}, // Receipts - GetReceiptsPacket{1111, GetReceiptsRequest([]common.Hash{})}, - ReceiptsPacket{1111, encodeRL([]*ReceiptList{})}, + GetReceiptsPacket69{1111, GetReceiptsRequest([]common.Hash{})}, + ReceiptsPacket69{1111, encodeRL([]*ReceiptList{})}, // Transactions GetPooledTransactionsPacket{1111, GetPooledTransactionsRequest([]common.Hash{})}, PooledTransactionsPacket{1111, encodeRL([]*types.Transaction{})}, @@ -220,11 +219,11 @@ func TestMessages(t *testing.T) { common.FromHex("f902dc820457f902d6f902d3f8d2f867088504a817c8088302e2489435353535353535353535353535353535353535358202008025a064b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c12a064b1702d9298fee62dfeccc57d322a463ad55ca201256d01f62b45b2e1c21c10f867098504a817c809830334509435353535353535353535353535353535353535358202d98025a052f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afba052f8f61201b2b11a78d6e866abc9c3db2ae8631fa656bfe5cb53668255367afbf901fcf901f9a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000940000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000000b90100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008208ae820d0582115c8215b3821a0a827788a00000000000000000000000000000000000000000000000000000000000000000880000000000000000"), }, { - GetReceiptsPacket{1111, GetReceiptsRequest(hashes)}, + GetReceiptsPacket69{1111, GetReceiptsRequest(hashes)}, common.FromHex("f847820457f842a000000000000000000000000000000000000000000000000000000000deadc0dea000000000000000000000000000000000000000000000000000000000feedbeef"), }, { - ReceiptsPacket{1111, encodeRL([]*ReceiptList{NewReceiptList(receipts)})}, + ReceiptsPacket69{1111, encodeRL([]*ReceiptList{NewReceiptList(receipts)})}, common.FromHex("f8da820457f8d5f8d3f866808082014df85ff85d940000000000000000000000000000000000000011f842a0000000000000000000000000000000000000000000000000000000000000deada0000000000000000000000000000000000000000000000000000000000000beef830100fff86901018201bcf862f860940000000000000000000000000000000000000022f842a00000000000000000000000000000000000000000000000000000000000005668a0000000000000000000000000000000000000000000000000000000000000977386020f0f0f0608"), }, { diff --git a/eth/protocols/eth/receipt.go b/eth/protocols/eth/receipt.go index 96e8c4399b..84185bea4a 100644 --- a/eth/protocols/eth/receipt.go +++ b/eth/protocols/eth/receipt.go @@ -202,12 +202,55 @@ func (rl *ReceiptList) Derivable() types.DerivableList { }) } -// blockReceiptsToNetwork takes a slice of rlp-encoded receipts, and transactions, -// and re-encodes them for the network protocol. -func blockReceiptsToNetwork(blockReceipts, blockBody rlp.RawValue) ([]byte, error) { +// Append appends all items from another ReceiptList to this list. +func (rl *ReceiptList) Append(other *ReceiptList) { + rl.items.AppendList(&other.items) +} + +// LogsSize returns the total size of log data across all receipts of the list. +func (rl *ReceiptList) LogsSize() (uint64, error) { + var size uint64 + it := rl.items.ContentIterator() + for it.Next() { + // The encoded receipts are of the form: + // + // [txType, status, cumulativeGasUsed, [logs...]] + // + // We want to count the size of logs. + // So we strip the outer list first: + content, _, err := rlp.SplitList(it.Value()) + if err != nil { + return 0, fmt.Errorf("invalid receipt structure: %v", err) + } + // then skip over txType, status, cumulativeGasUsed: + rest := content + for range 3 { + _, _, rest, err = rlp.Split(rest) + if err != nil { + return 0, fmt.Errorf("invalid receipt structure: %v", err) + } + } + // and finally access the logs list to get its inner size: + logsContent, _, err := rlp.SplitList(rest) + if err != nil { + return 0, fmt.Errorf("invalid receipt logs: %v", err) + } + size += uint64(len(logsContent)) + } + return size, nil +} + +type receiptQueryParams struct { + firstIndex uint64 + sizeLimit uint64 +} + +// blockReceiptsToNetwork takes a slice of rlp-encoded receipts (in the 'storage' encoding), +// and an encoded block body, and re-encodes the receipts for the network protocol. +func blockReceiptsToNetwork(blockReceipts, blockBody rlp.RawValue, q receiptQueryParams) (output []byte, incomplete bool, err error) { txTypesIter, err := txTypesInBody(blockBody) if err != nil { - return nil, fmt.Errorf("invalid block body: %v", err) + return nil, false, fmt.Errorf("invalid block body: %v", err) } nextTxType, stopTxTypes := iter.Pull(txTypesIter) defer stopTxTypes() @@ -219,8 +262,28 @@ func blockReceiptsToNetwork(blockReceipts, blockBody rlp.RawValue) ([]byte, erro ) outer := enc.List() for i := 0; it.Next(); i++ { - txType, _ := nextTxType() + txType, ok := nextTxType() + if !ok { + return nil, false, fmt.Errorf("block has less txs than receipts (%d)", i) + } + // Skip receipts before the requested index. + if uint64(i) < q.firstIndex { + continue + } content, _, _ := rlp.SplitList(it.Value()) + // Stop appending receipts when they would go over the size limit. + // Note we rely on the assumption that the txType is encoded as a single byte, + // which is always true because EIP-2718 does not allow tx types > 0x7f. + size := rlp.ListSize(1 + uint64(len(content))) + if q.sizeLimit > 0 && (uint64(enc.Size())+size) > q.sizeLimit { + if uint(i) == uint(q.firstIndex) { + // The first receipt doesn't fit into the size limit. + return nil, false, nil + } + incomplete = true + break + } + receiptList := enc.List() enc.WriteUint64(uint64(txType)) enc.Write(content) @@ -228,7 +291,7 @@ func blockReceiptsToNetwork(blockReceipts, blockBody rlp.RawValue) ([]byte, erro } enc.ListEnd(outer) enc.Flush() - return out.Bytes(), nil + return out.Bytes(), incomplete, nil } // txTypesInBody parses the transactions list of an encoded block body, returning just the types. diff --git a/eth/protocols/eth/receipt_test.go b/eth/protocols/eth/receipt_test.go index 693ccd6918..237f7b9420 100644 --- a/eth/protocols/eth/receipt_test.go +++ b/eth/protocols/eth/receipt_test.go @@ -105,10 +105,13 @@ func TestReceiptList(t *testing.T) { canonBody, _ := rlp.EncodeToBytes(blockBody) // convert from storage encoding to network encoding - network, err := blockReceiptsToNetwork(canonDB, canonBody) + network, incomplete, err := blockReceiptsToNetwork(canonDB, canonBody, receiptQueryParams{}) if err != nil { t.Fatalf("test[%d]: blockReceiptsToNetwork error: %v", i, err) } + if incomplete { + t.Fatalf("test[%d]: blockReceiptsToNetwork returned incomplete == true", i) + } // parse as Receipts response list from network encoding var rl ReceiptList diff --git a/eth/sync_test.go b/eth/sync_test.go index 77a50bf6d3..e22c495275 100644 --- a/eth/sync_test.go +++ b/eth/sync_test.go @@ -50,8 +50,8 @@ func testSnapSyncDisabling(t *testing.T, ethVer uint, snapVer uint) { defer emptyPipeEth.Close() defer fullPipeEth.Close() - emptyPeerEth := eth.NewPeer(ethVer, p2p.NewPeer(enode.ID{1}, "", caps), emptyPipeEth, empty.txpool) - fullPeerEth := eth.NewPeer(ethVer, p2p.NewPeer(enode.ID{2}, "", caps), fullPipeEth, full.txpool) + emptyPeerEth := eth.NewPeer(ethVer, p2p.NewPeer(enode.ID{1}, "", caps), emptyPipeEth, empty.txpool, nil) + fullPeerEth := eth.NewPeer(ethVer, p2p.NewPeer(enode.ID{2}, "", caps), fullPipeEth, full.txpool, nil) defer emptyPeerEth.Close() defer fullPeerEth.Close() diff --git a/rlp/rlpgen/testdata/pkgclash.in.txt b/rlp/rlpgen/testdata/pkgclash.in.txt index 1d407881ce..a8c4092601 100644 --- a/rlp/rlpgen/testdata/pkgclash.in.txt +++ b/rlp/rlpgen/testdata/pkgclash.in.txt @@ -9,5 +9,5 @@ import ( type Test struct { A eth1.MinerAPI - B eth2.GetReceiptsPacket + B eth2.GetReceiptsPacket69 } diff --git a/rlp/rlpgen/testdata/pkgclash.out.txt b/rlp/rlpgen/testdata/pkgclash.out.txt index d119639b99..302f1ec1cd 100644 --- a/rlp/rlpgen/testdata/pkgclash.out.txt +++ b/rlp/rlpgen/testdata/pkgclash.out.txt @@ -41,7 +41,7 @@ func (obj *Test) DecodeRLP(dec *rlp.Stream) error { } _tmp0.A = _tmp1 // B: - var _tmp2 eth1.GetReceiptsPacket + var _tmp2 eth1.GetReceiptsPacket69 { if _, err := dec.List(); err != nil { return err