diff --git a/consensus/bor/bor.go b/consensus/bor/bor.go index d1a9b9f2b2..9ecd7d17ca 100644 --- a/consensus/bor/bor.go +++ b/consensus/bor/bor.go @@ -816,14 +816,14 @@ func (c *Bor) Finalize(chain consensus.ChainHeaderReader, header *types.Header, headerNumber := header.Number.Uint64() - if len(withdrawals) > 0 { + if withdrawals != nil { + withdrawals = nil log.Error("Bor does not support withdrawals", "number", headerNumber) - return } if header.WithdrawalsHash != nil { + header.WithdrawalsHash = nil log.Error("Bor does not support withdrawalHash", "number", headerNumber) - return } if IsSprintStart(headerNumber, c.config.CalculateSprint(headerNumber)) { @@ -898,18 +898,18 @@ func (c *Bor) FinalizeAndAssemble(ctx context.Context, chain consensus.ChainHead finalizeCtx, finalizeSpan := tracing.StartSpan(ctx, "bor.FinalizeAndAssemble") defer tracing.EndSpan(finalizeSpan) - if len(withdrawals) > 0 { - return nil, errors.New("Bor does not support withdrawals") + headerNumber := header.Number.Uint64() + + if withdrawals != nil { + log.Error("Bor does not support withdrawals", "number", headerNumber) } if header.WithdrawalsHash != nil { - return nil, errors.New("Bor does not support withdrawalHash") + log.Error("Bor does not support withdrawalHash", "number", headerNumber) } stateSyncData := []*types.StateSyncData{} - headerNumber := header.Number.Uint64() - var err error if IsSprintStart(headerNumber, c.config.CalculateSprint(headerNumber)) { diff --git a/core/genesis.go b/core/genesis.go index b41d693ef7..06235986cc 100644 --- a/core/genesis.go +++ b/core/genesis.go @@ -529,8 +529,8 @@ func (g *Genesis) ToBlock() *types.Block { var withdrawals []*types.Withdrawal if g.Config != nil && g.Config.IsShanghai(new(big.Int).SetUint64(g.Number)) { - head.WithdrawalsHash = &types.EmptyWithdrawalsHash - withdrawals = make([]*types.Withdrawal, 0) + head.WithdrawalsHash = nil + withdrawals = nil } return types.NewBlock(head, nil, nil, nil, trie.NewStackTrie(nil)).WithWithdrawals(withdrawals) diff --git a/core/state_processor.go b/core/state_processor.go index fbd164f40f..4833919364 100644 --- a/core/state_processor.go +++ b/core/state_processor.go @@ -101,9 +101,13 @@ func (p *StateProcessor) Process(block *types.Block, statedb *state.StateDB, cfg } // Fail if Shanghai not enabled and len(withdrawals) is non-zero. withdrawals := block.Withdrawals() - if len(withdrawals) > 0 && !p.config.IsShanghai(block.Number()) { + if !p.config.IsShanghai(block.Number()) && withdrawals != nil { return nil, nil, 0, fmt.Errorf("withdrawals before shanghai") } + // Bor does not support withdrawals + if withdrawals != nil { + withdrawals = nil + } // Finalize the block, applying any consensus engine specific extras (e.g. block rewards) p.engine.Finalize(p.bc, header, statedb, block.Transactions(), block.Uncles(), withdrawals)