From ba64a6c7717e84363391905cd63654331db8aecd Mon Sep 17 00:00:00 2001 From: piersy Date: Fri, 20 Dec 2024 14:57:06 +0000 Subject: [PATCH] Include RequestsHash in header encoding/decoding (#301) Updates header encoding/decoding A new field 'RequestsHash' was added to the header, and we needed to run go generate to regenerate the generated encoding/decoding. We also needed to update celo_block.go to account for the new field. Simplified the encoding and decoding in celo_block.go by simply casting the header into the right type for encoding/decoding. This ensures that we won't need to update celo_block.go in the future when fields are added or removed. These changes allowed us to unskip the tests that were skipped during the celo11 rebase. Fixes https://github.com/celo-org/celo-blockchain-planning/issues/854 --- core/types/celo_block.go | 46 +------------------ .../types/gen_after_gingerbread_header_rlp.go | 26 +++++++++-- eth/catalyst/api_test.go | 2 - 3 files changed, 23 insertions(+), 51 deletions(-) diff --git a/core/types/celo_block.go b/core/types/celo_block.go index ae0a3a98cd..3c69ee6f02 100644 --- a/core/types/celo_block.go +++ b/core/types/celo_block.go @@ -62,27 +62,7 @@ func (h *Header) DecodeRLP(s *rlp.Stream) error { // After gingerbread decodedHeader := AfterGingerbreadHeader{} err = rlp.DecodeBytes(raw, &decodedHeader) - - h.ParentHash = decodedHeader.ParentHash - h.UncleHash = decodedHeader.UncleHash - h.Coinbase = decodedHeader.Coinbase - h.Root = decodedHeader.Root - h.TxHash = decodedHeader.TxHash - h.ReceiptHash = decodedHeader.ReceiptHash - h.Bloom = decodedHeader.Bloom - h.Difficulty = decodedHeader.Difficulty - h.Number = decodedHeader.Number - h.GasLimit = decodedHeader.GasLimit - h.GasUsed = decodedHeader.GasUsed - h.Time = decodedHeader.Time - h.Extra = decodedHeader.Extra - h.MixDigest = decodedHeader.MixDigest - h.Nonce = decodedHeader.Nonce - h.BaseFee = decodedHeader.BaseFee - h.WithdrawalsHash = decodedHeader.WithdrawalsHash - h.BlobGasUsed = decodedHeader.BlobGasUsed - h.ExcessBlobGas = decodedHeader.ExcessBlobGas - h.ParentBeaconRoot = decodedHeader.ParentBeaconRoot + *h = Header(decodedHeader) } return err @@ -108,29 +88,7 @@ func (h *Header) EncodeRLP(w io.Writer) error { } // After gingerbread - encodedHeader := AfterGingerbreadHeader{ - ParentHash: h.ParentHash, - UncleHash: h.UncleHash, - Coinbase: h.Coinbase, - Root: h.Root, - TxHash: h.TxHash, - ReceiptHash: h.ReceiptHash, - Bloom: h.Bloom, - Difficulty: h.Difficulty, - Number: h.Number, - GasLimit: h.GasLimit, - GasUsed: h.GasUsed, - Time: h.Time, - Extra: h.Extra, - MixDigest: h.MixDigest, - Nonce: h.Nonce, - BaseFee: h.BaseFee, - WithdrawalsHash: h.WithdrawalsHash, - BlobGasUsed: h.BlobGasUsed, - ExcessBlobGas: h.ExcessBlobGas, - ParentBeaconRoot: h.ParentBeaconRoot, - } - + encodedHeader := AfterGingerbreadHeader(*h) return rlp.Encode(w, &encodedHeader) } diff --git a/core/types/gen_after_gingerbread_header_rlp.go b/core/types/gen_after_gingerbread_header_rlp.go index e0215a4ddb..8aa2892d2c 100644 --- a/core/types/gen_after_gingerbread_header_rlp.go +++ b/core/types/gen_after_gingerbread_header_rlp.go @@ -43,7 +43,8 @@ func (obj *AfterGingerbreadHeader) EncodeRLP(_w io.Writer) error { _tmp3 := obj.BlobGasUsed != nil _tmp4 := obj.ExcessBlobGas != nil _tmp5 := obj.ParentBeaconRoot != nil - if _tmp1 || _tmp2 || _tmp3 || _tmp4 || _tmp5 { + _tmp6 := obj.RequestsHash != nil + if _tmp1 || _tmp2 || _tmp3 || _tmp4 || _tmp5 || _tmp6 { if obj.BaseFee == nil { w.Write(rlp.EmptyString) } else { @@ -53,34 +54,41 @@ func (obj *AfterGingerbreadHeader) EncodeRLP(_w io.Writer) error { w.WriteBigInt(obj.BaseFee) } } - if _tmp2 || _tmp3 || _tmp4 || _tmp5 { + if _tmp2 || _tmp3 || _tmp4 || _tmp5 || _tmp6 { if obj.WithdrawalsHash == nil { w.Write([]byte{0x80}) } else { w.WriteBytes(obj.WithdrawalsHash[:]) } } - if _tmp3 || _tmp4 || _tmp5 { + if _tmp3 || _tmp4 || _tmp5 || _tmp6 { if obj.BlobGasUsed == nil { w.Write([]byte{0x80}) } else { w.WriteUint64((*obj.BlobGasUsed)) } } - if _tmp4 || _tmp5 { + if _tmp4 || _tmp5 || _tmp6 { if obj.ExcessBlobGas == nil { w.Write([]byte{0x80}) } else { w.WriteUint64((*obj.ExcessBlobGas)) } } - if _tmp5 { + if _tmp5 || _tmp6 { if obj.ParentBeaconRoot == nil { w.Write([]byte{0x80}) } else { w.WriteBytes(obj.ParentBeaconRoot[:]) } } + if _tmp6 { + if obj.RequestsHash == nil { + w.Write([]byte{0x80}) + } else { + w.WriteBytes(obj.RequestsHash[:]) + } + } w.ListEnd(_tmp0) return w.Flush() } @@ -216,6 +224,14 @@ func (obj *AfterGingerbreadHeader) DecodeRLP(dec *rlp.Stream) error { return err } _tmp0.ParentBeaconRoot = &_tmp20 + // RequestsHash: + if dec.MoreDataInList() { + var _tmp21 common.Hash + if err := dec.ReadBytes(_tmp21[:]); err != nil { + return err + } + _tmp0.RequestsHash = &_tmp21 + } } } } diff --git a/eth/catalyst/api_test.go b/eth/catalyst/api_test.go index f1af881214..665661cf14 100644 --- a/eth/catalyst/api_test.go +++ b/eth/catalyst/api_test.go @@ -1382,7 +1382,6 @@ func allBodies(blocks []*types.Block) []*types.Body { } func TestGetBlockBodiesByHash(t *testing.T) { - t.Skip("Skipped during rebase. Fix by setting gas limit or https://github.com/celo-org/celo-blockchain-planning/issues/588.") node, eth, blocks := setupBodies(t) api := NewConsensusAPI(eth) defer node.Close() @@ -1439,7 +1438,6 @@ func TestGetBlockBodiesByHash(t *testing.T) { } func TestGetBlockBodiesByRange(t *testing.T) { - t.Skip("Skipped during rebase. Fix by setting gas limit or https://github.com/celo-org/celo-blockchain-planning/issues/588.") node, eth, blocks := setupBodies(t) api := NewConsensusAPI(eth) defer node.Close()