diff --git a/core/types/block.go b/core/types/block.go index ec90dbe236f..9154d61626a 100644 --- a/core/types/block.go +++ b/core/types/block.go @@ -1198,13 +1198,19 @@ func (b *Block) SendersToTxs(senders []common.Address) { } } -// RawBody creates a RawBody based on the block. It is not very efficient, so -// will probably be removed in favour of RawBlock. Also it panics -func (b *Block) RawBody() *RawBody { +// RawBody creates a RawBody based on the block. +func (b *Block) RawBody(marshallTypedTransactionsAsRlpStrings bool) *RawBody { br := &RawBody{Transactions: make([][]byte, len(b.transactions)), Uncles: b.uncles} - for i, tx := range b.transactions { - var err error - br.Transactions[i], err = rlp.EncodeToBytes(tx) + var err error + if marshallTypedTransactionsAsRlpStrings { + for i, tx := range b.transactions { + br.Transactions[i], err = rlp.EncodeToBytes(tx) + if err != nil { + panic(err) + } + } + } else { + br.Transactions, err = MarshalTransactionsBinary(b.transactions) if err != nil { panic(err) } @@ -1213,7 +1219,7 @@ func (b *Block) RawBody() *RawBody { } // Size returns the true RLP encoded storage size of the block, either by encoding -// and returning it, or returning a previsouly cached value. +// and returning it, or returning a previously cached value. func (b *Block) Size() common.StorageSize { if size := b.size.Load(); size != nil { return size.(common.StorageSize) diff --git a/turbo/stages/bodydownload/body_algos.go b/turbo/stages/bodydownload/body_algos.go index c2d392c379b..89daf511dd2 100644 --- a/turbo/stages/bodydownload/body_algos.go +++ b/turbo/stages/bodydownload/body_algos.go @@ -130,7 +130,7 @@ func (bd *BodyDownload) RequestMoreBodies(tx kv.RwTx, blockReader services.FullB if block := bd.prefetchedBlocks.Pop(hash); block != nil { // Block is prefetched, no need to request bd.deliveriesH[blockNum-bd.requestedLow] = block.Header() - bd.deliveriesB[blockNum-bd.requestedLow] = block.RawBody() + bd.deliveriesB[blockNum-bd.requestedLow] = block.RawBody(true) // Calculate the TD of the block (it's not imported yet, so block.Td is not valid) if parent, err := rawdb.ReadTd(tx, block.ParentHash(), block.NumberU64()-1); err != nil { @@ -155,7 +155,7 @@ func (bd *BodyDownload) RequestMoreBodies(tx kv.RwTx, blockReader services.FullB copy(doubleHash[common.HashLength:], header.TxHash.Bytes()) bd.requestedMap[doubleHash] = blockNum } else { - bd.deliveriesB[blockNum-bd.requestedLow] = block.RawBody() + bd.deliveriesB[blockNum-bd.requestedLow] = block.RawBody(true) request = false } } else { diff --git a/turbo/stages/mock_sentry.go b/turbo/stages/mock_sentry.go index bc4f0113e62..2e1daeee50e 100644 --- a/turbo/stages/mock_sentry.go +++ b/turbo/stages/mock_sentry.go @@ -521,7 +521,7 @@ func (ms *MockSentry) insertPoSBlocks(chain *core.ChainPack) error { for i := n; i < chain.Length(); i++ { payloadMessage := engineapi.PayloadMessage{ Header: chain.Headers[i], - Body: chain.Blocks[i].RawBody(), + Body: chain.Blocks[i].RawBody(false), } ms.SendPayloadRequest(&payloadMessage) } diff --git a/turbo/stages/sentry_mock_test.go b/turbo/stages/sentry_mock_test.go index 9ab7015e06b..51efd88107a 100644 --- a/turbo/stages/sentry_mock_test.go +++ b/turbo/stages/sentry_mock_test.go @@ -574,7 +574,7 @@ func TestPoSDownloader(t *testing.T) { // Send a payload with missing parent payloadMessage := engineapi.PayloadMessage{ Header: chain.TopBlock.Header(), - Body: chain.TopBlock.RawBody(), + Body: chain.TopBlock.RawBody(false), } m.SendPayloadRequest(&payloadMessage) headBlockHash, err := stages.StageLoopStep(m.Ctx, m.DB, m.Sync, 0, m.Notifications, true, m.UpdateHead, nil) @@ -643,7 +643,7 @@ func TestPoSSyncWithInvalidHeader(t *testing.T) { // Send a payload with missing parent payloadMessage := engineapi.PayloadMessage{ Header: invalidTip, - Body: chain.TopBlock.RawBody(), + Body: chain.TopBlock.RawBody(false), } m.SendPayloadRequest(&payloadMessage) headBlockHash, err := stages.StageLoopStep(m.Ctx, m.DB, m.Sync, 0, m.Notifications, true, m.UpdateHead, nil)