mirror of
https://gitlab.com/pulsechaincom/erigon-pulse.git
synced 2025-01-16 15:48:46 +00:00
e4e36c152e
* interface * generalize interface * linters * fix deadlock * fix linters * close goroutine * fix * debug * id+ttl * refactor downloader tests * tests * lru * handle genesis, extract fake consensuses * fix fake consensus * test uncles, verify * after a new master * fmt * fix close * debug * debug * fix chain length * remove test field * use single account * fix data race on closing channel * remove postponed blocks queue * miner test * VerifyHeaderRequests * fmt * fmt * fix data race * handle validating errors * simplify matchParents * remove copy-paste * move sort to constructor * clean up * debug for 10 parents * debug * debug * batch responses * batch requests * works for many ancestors * remove debug * always Close an engine * linters * ancestors deduplication * fix test * reduce interface * api * clique * green clique sync * stable * perpermance per second * full sync * linters * gitignore * deps * fix panic after master merge * init consensus * clique tests * fix tests * fix tests * clean up * reuse snap * store vefified snapshots * optimize snapshots * safe close * cleanup loop * after downloader * downloader and consensus tests * update tests * hack.go * clique flags * fix cliuqe config * review * gitignore * remove additional bucket * blk/sec instead of blk/microsecond * rename * deps * optimize * debug * test * tests without extracted validation process * same base performance as on master * benchmark * simplify ethash verification * ethash * ethash * linters * ethash * master stats * cleanup * gomod * linters * tests * better locks * Fix * Remove logging for verifyHeaders * Verification speed in the logs * Fix compile error Co-authored-by: Alexey Sharp <alexeysharp@Alexeys-iMac.local>
57 lines
1.6 KiB
Go
57 lines
1.6 KiB
Go
package verify
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
|
|
"github.com/ledgerwatch/lmdb-go/lmdb"
|
|
"github.com/ledgerwatch/turbo-geth/common/dbutils"
|
|
"github.com/ledgerwatch/turbo-geth/core/types"
|
|
"github.com/ledgerwatch/turbo-geth/ethdb"
|
|
"github.com/ledgerwatch/turbo-geth/log"
|
|
"github.com/ledgerwatch/turbo-geth/rlp"
|
|
)
|
|
|
|
func HeadersSnapshot(snapshotPath string) error {
|
|
snKV := ethdb.NewLMDB().Path(snapshotPath).Flags(func(flags uint) uint { return flags | lmdb.Readonly }).WithBucketsConfig(func(defaultBuckets dbutils.BucketsCfg) dbutils.BucketsCfg {
|
|
return dbutils.BucketsCfg{
|
|
dbutils.HeaderPrefix: dbutils.BucketConfigItem{},
|
|
dbutils.HeadersSnapshotInfoBucket: dbutils.BucketConfigItem{},
|
|
}
|
|
}).MustOpen()
|
|
var prevHeader *types.Header
|
|
err := snKV.View(context.Background(), func(tx ethdb.Tx) error {
|
|
c := tx.Cursor(dbutils.HeaderPrefix)
|
|
k, v, innerErr := c.First()
|
|
for {
|
|
if len(k) == 0 && len(v) == 0 {
|
|
break
|
|
}
|
|
if innerErr != nil {
|
|
return innerErr
|
|
}
|
|
|
|
header := new(types.Header)
|
|
innerErr := rlp.DecodeBytes(v, header)
|
|
if innerErr != nil {
|
|
return innerErr
|
|
}
|
|
|
|
if prevHeader != nil {
|
|
if prevHeader.Number.Uint64()+1 != header.Number.Uint64() {
|
|
log.Error("invalid header number", "p", prevHeader.Number.Uint64(), "c", header.Number.Uint64())
|
|
return errors.New("invalid header number")
|
|
}
|
|
if prevHeader.HashCache() != header.ParentHash {
|
|
log.Error("invalid parent hash", "p", prevHeader.HashCache(), "c", header.ParentHash)
|
|
return errors.New("invalid parent hash")
|
|
}
|
|
}
|
|
k, v, innerErr = c.Next() //nolint
|
|
prevHeader = header
|
|
}
|
|
return nil
|
|
})
|
|
return err
|
|
}
|