Skip to content

Commit d506f9b

Browse files
nisdasjames-prysm
andauthored
Fix Execution Block Unmarshalling in Deneb (#12860)
Co-authored-by: james-prysm <[email protected]>
1 parent d557575 commit d506f9b

File tree

2 files changed

+65
-12
lines changed

2 files changed

+65
-12
lines changed

proto/engine/v1/json_marshal_unmarshal.go

-12
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@ type ExecutionBlock struct {
3636
Transactions []*gethtypes.Transaction `json:"transactions"`
3737
TotalDifficulty string `json:"totalDifficulty"`
3838
Withdrawals []*Withdrawal `json:"withdrawals"`
39-
BlobGasUsed *hexutil.Uint64 `json:"blobGasUsed"`
40-
ExcessBlobGas *hexutil.Uint64 `json:"excessBlobGas"`
4139
}
4240

4341
func (e *ExecutionBlock) MarshalJSON() ([]byte, error) {
@@ -110,21 +108,11 @@ func (e *ExecutionBlock) UnmarshalJSON(enc []byte) error {
110108
edg, has := decoded["excessBlobGas"]
111109
if has && edg != nil {
112110
e.Version = version.Deneb
113-
uedg, err := hexutil.DecodeUint64(edg.(string))
114-
if err != nil {
115-
return errors.Wrap(err, "unable to unmarshal excessBlobGas as hexutil.Uint64")
116-
}
117-
*e.ExcessBlobGas = hexutil.Uint64(uedg)
118111
}
119112

120113
dgu, has := decoded["blobGasUsed"]
121114
if has && dgu != nil {
122115
e.Version = version.Deneb
123-
udgu, err := hexutil.DecodeUint64(dgu.(string))
124-
if err != nil {
125-
return errors.Wrap(err, "blobGasUsed is not a string, can not decode")
126-
}
127-
*e.BlobGasUsed = hexutil.Uint64(udgu)
128116
}
129117
}
130118

proto/engine/v1/json_marshal_unmarshal_test.go

+65
Original file line numberDiff line numberDiff line change
@@ -566,6 +566,71 @@ func TestJsonMarshalUnmarshal(t *testing.T) {
566566
require.DeepEqual(t, bytesutil.PadTo([]byte("address2"), 20), payloadPb.Withdrawals[1].Address)
567567
require.Equal(t, uint64(200), payloadPb.Withdrawals[1].Amount)
568568
})
569+
t.Run("execution block with deneb blob data", func(t *testing.T) {
570+
baseFeePerGas := big.NewInt(1770307273)
571+
blobGas := uint64(3000)
572+
excessGas := uint64(7000)
573+
want := &gethtypes.Header{
574+
Number: big.NewInt(1),
575+
ParentHash: common.BytesToHash([]byte("parent")),
576+
UncleHash: common.BytesToHash([]byte("uncle")),
577+
Coinbase: common.BytesToAddress([]byte("coinbase")),
578+
Root: common.BytesToHash([]byte("uncle")),
579+
TxHash: common.BytesToHash([]byte("txHash")),
580+
ReceiptHash: common.BytesToHash([]byte("receiptHash")),
581+
Bloom: gethtypes.BytesToBloom([]byte("bloom")),
582+
Difficulty: big.NewInt(2),
583+
GasLimit: 3,
584+
GasUsed: 4,
585+
Time: 5,
586+
BaseFee: baseFeePerGas,
587+
Extra: []byte("extraData"),
588+
MixDigest: common.BytesToHash([]byte("mix")),
589+
Nonce: gethtypes.EncodeNonce(6),
590+
BlobGasUsed: &blobGas,
591+
ExcessBlobGas: &excessGas,
592+
}
593+
enc, err := json.Marshal(want)
594+
require.NoError(t, err)
595+
596+
payloadItems := make(map[string]interface{})
597+
require.NoError(t, json.Unmarshal(enc, &payloadItems))
598+
599+
blockHash := want.Hash()
600+
payloadItems["hash"] = blockHash.String()
601+
payloadItems["totalDifficulty"] = "0x393a2e53de197c"
602+
payloadItems["transactions"] = []string{"0xd57870623ea84ac3e2ffafbee9417fd1263b825b1107b8d606c25460dabeb693"}
603+
604+
encodedPayloadItems, err := json.Marshal(payloadItems)
605+
require.NoError(t, err)
606+
607+
payloadPb := &enginev1.ExecutionBlock{}
608+
require.NoError(t, json.Unmarshal(encodedPayloadItems, payloadPb))
609+
610+
require.DeepEqual(t, blockHash, payloadPb.Hash)
611+
require.DeepEqual(t, want.Number, payloadPb.Number)
612+
require.DeepEqual(t, want.ParentHash, payloadPb.ParentHash)
613+
require.DeepEqual(t, want.UncleHash, payloadPb.UncleHash)
614+
require.DeepEqual(t, want.Coinbase, payloadPb.Coinbase)
615+
require.DeepEqual(t, want.Root, payloadPb.Root)
616+
require.DeepEqual(t, want.TxHash, payloadPb.TxHash)
617+
require.DeepEqual(t, want.ReceiptHash, payloadPb.ReceiptHash)
618+
require.DeepEqual(t, want.Bloom, payloadPb.Bloom)
619+
require.DeepEqual(t, want.Difficulty, payloadPb.Difficulty)
620+
require.DeepEqual(t, payloadItems["totalDifficulty"], payloadPb.TotalDifficulty)
621+
require.DeepEqual(t, want.GasUsed, payloadPb.GasUsed)
622+
require.DeepEqual(t, want.GasLimit, payloadPb.GasLimit)
623+
require.DeepEqual(t, want.Time, payloadPb.Time)
624+
require.DeepEqual(t, want.BaseFee, payloadPb.BaseFee)
625+
require.DeepEqual(t, want.Extra, payloadPb.Extra)
626+
require.DeepEqual(t, want.MixDigest, payloadPb.MixDigest)
627+
require.DeepEqual(t, want.Nonce, payloadPb.Nonce)
628+
require.DeepEqual(t, want.BlobGasUsed, payloadPb.BlobGasUsed)
629+
require.DeepEqual(t, want.ExcessBlobGas, payloadPb.ExcessBlobGas)
630+
631+
// Expect no transaction objects in the unmarshaled data.
632+
require.Equal(t, 0, len(payloadPb.Transactions))
633+
})
569634
}
570635

571636
func TestPayloadIDBytes_MarshalUnmarshalJSON(t *testing.T) {

0 commit comments

Comments
 (0)