mirror of
https://gitlab.com/pulsechaincom/erigon-pulse.git
synced 2024-12-25 13:07:17 +00:00
71 lines
1.5 KiB
Go
71 lines
1.5 KiB
Go
|
package verify
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"fmt"
|
||
|
"github.com/ledgerwatch/turbo-geth/common"
|
||
|
"github.com/ledgerwatch/turbo-geth/common/dbutils"
|
||
|
"github.com/ledgerwatch/turbo-geth/core/rawdb"
|
||
|
"github.com/ledgerwatch/turbo-geth/ethdb"
|
||
|
"github.com/ledgerwatch/turbo-geth/log"
|
||
|
"math/big"
|
||
|
"os"
|
||
|
"os/signal"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
func ValidateTxLookups(chaindata string) error {
|
||
|
db, err := ethdb.NewBoltDatabase(chaindata)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
ch := make(chan os.Signal, 1)
|
||
|
quitCh := make(chan struct{})
|
||
|
signal.Notify(ch, os.Interrupt)
|
||
|
go func() {
|
||
|
<-ch
|
||
|
close(quitCh)
|
||
|
}()
|
||
|
t := time.Now()
|
||
|
defer func() {
|
||
|
log.Info("Validation ended", "it took", time.Since(t))
|
||
|
}()
|
||
|
var blockNum uint64
|
||
|
iterations := 0
|
||
|
var interrupt bool
|
||
|
// Validation Process
|
||
|
blockBytes := big.NewInt(0)
|
||
|
for !interrupt {
|
||
|
if err := common.Stopped(quitCh); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
blockHash := rawdb.ReadCanonicalHash(db, blockNum)
|
||
|
body := rawdb.ReadBody(db, blockHash, blockNum)
|
||
|
|
||
|
if body == nil {
|
||
|
log.Error("Empty body", "blocknum", blockNum)
|
||
|
break
|
||
|
}
|
||
|
blockBytes.SetUint64(blockNum)
|
||
|
bn := blockBytes.Bytes()
|
||
|
|
||
|
for _, tx := range body.Transactions {
|
||
|
val, err := db.Get(dbutils.TxLookupPrefix, tx.Hash().Bytes())
|
||
|
iterations++
|
||
|
if iterations%100000 == 0 {
|
||
|
log.Info("Validated", "entries", iterations, "number", blockNum)
|
||
|
|
||
|
}
|
||
|
if !bytes.Equal(val, bn) {
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
panic(fmt.Sprintf("Validation process failed(%d). Expected %b, got %b", iterations, bn, val))
|
||
|
}
|
||
|
}
|
||
|
blockNum++
|
||
|
}
|
||
|
return nil
|
||
|
}
|