core: pass block into collectLogs (#26335)

While investigating another issue, I found that all callers of collectLogs have the
complete block available. rawdb.ReadReceipts loads the block from the database,
so it is better to use ReadRawReceipts here, and derive the receipt information using
the block which is already in memory.
This commit is contained in:
Felix Lange 2022-12-09 16:14:33 +01:00 committed by GitHub
parent 711afbc7fd
commit 3315bad256
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1996,14 +1996,10 @@ func (bc *BlockChain) recoverAncestors(block *types.Block) (common.Hash, error)
} }
// collectLogs collects the logs that were generated or removed during // collectLogs collects the logs that were generated or removed during
// the processing of the block that corresponds with the given hash. // the processing of a block. These logs are later announced as deleted or reborn.
// These logs are later announced as deleted or reborn. func (bc *BlockChain) collectLogs(b *types.Block, removed bool) []*types.Log {
func (bc *BlockChain) collectLogs(hash common.Hash, removed bool) []*types.Log { receipts := rawdb.ReadRawReceipts(bc.db, b.Hash(), b.NumberU64())
number := bc.hc.GetBlockNumber(hash) receipts.DeriveFields(bc.chainConfig, b.Hash(), b.NumberU64(), b.Transactions())
if number == nil {
return nil
}
receipts := rawdb.ReadReceipts(bc.db, hash, *number, bc.chainConfig)
var logs []*types.Log var logs []*types.Log
for _, receipt := range receipts { for _, receipt := range receipts {
@ -2150,7 +2146,7 @@ func (bc *BlockChain) reorg(oldBlock, newBlock *types.Block) error {
bc.chainSideFeed.Send(ChainSideEvent{Block: oldChain[i]}) bc.chainSideFeed.Send(ChainSideEvent{Block: oldChain[i]})
// Collect deleted logs for notification // Collect deleted logs for notification
if logs := bc.collectLogs(oldChain[i].Hash(), true); len(logs) > 0 { if logs := bc.collectLogs(oldChain[i], true); len(logs) > 0 {
deletedLogs = append(deletedLogs, logs...) deletedLogs = append(deletedLogs, logs...)
} }
if len(deletedLogs) > 512 { if len(deletedLogs) > 512 {
@ -2165,7 +2161,7 @@ func (bc *BlockChain) reorg(oldBlock, newBlock *types.Block) error {
// New logs: // New logs:
var rebirthLogs []*types.Log var rebirthLogs []*types.Log
for i := len(newChain) - 1; i >= 1; i-- { for i := len(newChain) - 1; i >= 1; i-- {
if logs := bc.collectLogs(newChain[i].Hash(), false); len(logs) > 0 { if logs := bc.collectLogs(newChain[i], false); len(logs) > 0 {
rebirthLogs = append(rebirthLogs, logs...) rebirthLogs = append(rebirthLogs, logs...)
} }
if len(rebirthLogs) > 512 { if len(rebirthLogs) > 512 {
@ -2220,7 +2216,7 @@ func (bc *BlockChain) SetCanonical(head *types.Block) (common.Hash, error) {
bc.writeHeadBlock(head) bc.writeHeadBlock(head)
// Emit events // Emit events
logs := bc.collectLogs(head.Hash(), false) logs := bc.collectLogs(head, false)
bc.chainFeed.Send(ChainEvent{Block: head, Hash: head.Hash(), Logs: logs}) bc.chainFeed.Send(ChainEvent{Block: head, Hash: head.Hash(), Logs: logs})
if len(logs) > 0 { if len(logs) > 0 {
bc.logsFeed.Send(logs) bc.logsFeed.Send(logs)