mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-06-12 01:41:36 +00:00
core: set empty BlockAccessListHash on Amsterdam genesis
When Amsterdam is active at genesis, toBlockWithRoot set SlotNumber on the header but left BlockAccessListHash nil. Because both are rlp optional fields on Header, and BlockAccessListHash precedes SlotNumber in the encoded order, RLP writes an empty string (0x80) placeholder in the BAL hash slot. Decoding such a header then fails with "rlp: input string too short for common.Hash, decoding into (types.Header).BlockAccessListHash", preventing the node from loading its own freshly written genesis. Default BlockAccessListHash to the empty-BAL hash (keccak256(0xc0)) on the same fork gate so the optional chain stays consistent and genesis headers round-trip through RLP.
This commit is contained in:
parent
23a6adbcee
commit
2e638e607c
2 changed files with 7 additions and 0 deletions
|
|
@ -557,6 +557,9 @@ func (g *Genesis) toBlockWithRoot(root common.Hash) *types.Block {
|
||||||
if head.SlotNumber == nil {
|
if head.SlotNumber == nil {
|
||||||
head.SlotNumber = new(uint64)
|
head.SlotNumber = new(uint64)
|
||||||
}
|
}
|
||||||
|
if head.BlockAccessListHash == nil {
|
||||||
|
head.BlockAccessListHash = &types.EmptyBlockAccessListHash
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return types.NewBlock(head, &types.Body{Withdrawals: withdrawals}, nil, trie.NewStackTrie(nil))
|
return types.NewBlock(head, &types.Body{Withdrawals: withdrawals}, nil, trie.NewStackTrie(nil))
|
||||||
|
|
|
||||||
|
|
@ -43,6 +43,10 @@ var (
|
||||||
// EmptyRequestsHash is the known hash of an empty request set, sha256("").
|
// EmptyRequestsHash is the known hash of an empty request set, sha256("").
|
||||||
EmptyRequestsHash = common.HexToHash("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855")
|
EmptyRequestsHash = common.HexToHash("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855")
|
||||||
|
|
||||||
|
// EmptyBlockAccessListHash is the known hash of an empty block access list,
|
||||||
|
// keccak256(rlp(empty list)) = keccak256(0xc0).
|
||||||
|
EmptyBlockAccessListHash = common.HexToHash("1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347")
|
||||||
|
|
||||||
// EmptyVerkleHash is the known hash of an empty verkle trie.
|
// EmptyVerkleHash is the known hash of an empty verkle trie.
|
||||||
EmptyVerkleHash = common.Hash{}
|
EmptyVerkleHash = common.Hash{}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue