From adc10d23a54d48908ebc05fc30fbe1dc6aa48859 Mon Sep 17 00:00:00 2001 From: Sina Mahmoodi Date: Thu, 18 Jan 2024 15:17:23 +0330 Subject: [PATCH] validate blob hashes --- eth/catalyst/simulated_beacon.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/eth/catalyst/simulated_beacon.go b/eth/catalyst/simulated_beacon.go index dc1b792440..fc2cd1179f 100644 --- a/eth/catalyst/simulated_beacon.go +++ b/eth/catalyst/simulated_beacon.go @@ -19,6 +19,7 @@ package catalyst import ( "crypto/rand" "errors" + "fmt" "math/big" "sync" "time" @@ -202,6 +203,14 @@ func (c *SimulatedBeacon) sealBlock(withdrawals []*types.Withdrawal, timestamp u // Mark the payload as canon if isCancun { + txes, err := decodeTransactions(payload.Transactions) + if err != nil { + return err + } + blobHashes := make([]common.Hash, 0) + for _, tx := range txes { + blobHashes = append(blobHashes, tx.BlobHashes()...) + } if _, err = c.engineAPI.NewPayloadV3(*payload, []common.Hash{}, &common.Hash{}); err != nil { return err } @@ -321,3 +330,15 @@ func RegisterSimulatedBeaconAPIs(stack *node.Node, sim *SimulatedBeacon) { }, }) } + +func decodeTransactions(enc [][]byte) ([]*types.Transaction, error) { + var txs = make([]*types.Transaction, len(enc)) + for i, encTx := range enc { + var tx types.Transaction + if err := tx.UnmarshalBinary(encTx); err != nil { + return nil, fmt.Errorf("invalid transaction %d: %v", i, err) + } + txs[i] = &tx + } + return txs, nil +}