From 2e470f186510479ef8311a1da46ac9d1a6bce985 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Tue, 18 Mar 2025 16:56:09 +0100 Subject: [PATCH] core/rawdb: add PruneTransactionIndex --- core/rawdb/chain_iterator.go | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/core/rawdb/chain_iterator.go b/core/rawdb/chain_iterator.go index 759e5913d1..dd9d6a9dfb 100644 --- a/core/rawdb/chain_iterator.go +++ b/core/rawdb/chain_iterator.go @@ -17,6 +17,8 @@ package rawdb import ( + "encoding/binary" + "fmt" "runtime" "sync/atomic" "time" @@ -361,3 +363,28 @@ func UnindexTransactions(db ethdb.Database, from uint64, to uint64, interrupt ch func unindexTransactionsForTesting(db ethdb.Database, from uint64, to uint64, interrupt chan struct{}, hook func(uint64) bool) { unindexTransactions(db, from, to, interrupt, hook, false) } + +// PruneTransactionIndex removes all tx index entries below a certain block number. +func PruneTransactionIndex(db ethdb.Database, pruneBlock uint64) { + index := NewTable(db, string(txLookupPrefix)) + iter := index.NewIterator(nil, nil) + defer iter.Release() + + for iter.Next() { + v := iter.Value() + if len(v) > 8 { + continue // legacy entry + } + bn := decodeNumber(v) + if bn < pruneBlock { + fmt.Println("found entry", iter.Key()) + // db.Delete(iter.Key()) + } + } +} + +func decodeNumber(b []byte) uint64 { + var numBuffer [8]byte + copy(numBuffer[8-len(b):], b) + return binary.BigEndian.Uint64(numBuffer[:]) +}