@@ -29,6 +29,7 @@ import (
2929 "sync"
3030
3131 "github.com/erigontech/erigon-lib/chain"
32+ "github.com/erigontech/erigon-lib/common"
3233 "github.com/erigontech/erigon-lib/common/background"
3334 "github.com/erigontech/erigon-lib/common/dbg"
3435 "github.com/erigontech/erigon-lib/common/dir"
@@ -72,14 +73,18 @@ type Versions struct {
7273
7374type FirstKeyGetter func (ctx context.Context ) uint64
7475
76+ type BlockHashResolver interface {
77+ CanonicalHash (ctx context.Context , tx kv.Getter , blockHeight uint64 ) (h common.Hash , ok bool , err error )
78+ }
79+
7580type RangeExtractor interface {
76- Extract (ctx context.Context , blockFrom , blockTo uint64 , firstKey FirstKeyGetter , db kv.RoDB , chainConfig * chain.Config , collect func ([]byte ) error , workers int , lvl log.Lvl , logger log.Logger ) (uint64 , error )
81+ Extract (ctx context.Context , blockFrom , blockTo uint64 , firstKey FirstKeyGetter , db kv.RoDB , chainConfig * chain.Config , collect func ([]byte ) error , workers int , lvl log.Lvl , logger log.Logger , hashResolver BlockHashResolver ) (uint64 , error )
7782}
7883
79- type RangeExtractorFunc func (ctx context.Context , blockFrom , blockTo uint64 , firstKey FirstKeyGetter , db kv.RoDB , chainConfig * chain.Config , collect func ([]byte ) error , workers int , lvl log.Lvl , logger log.Logger ) (uint64 , error )
84+ type RangeExtractorFunc func (ctx context.Context , blockFrom , blockTo uint64 , firstKey FirstKeyGetter , db kv.RoDB , chainConfig * chain.Config , collect func ([]byte ) error , workers int , lvl log.Lvl , logger log.Logger , hashResolver BlockHashResolver ) (uint64 , error )
8085
81- func (f RangeExtractorFunc ) Extract (ctx context.Context , blockFrom , blockTo uint64 , firstKey FirstKeyGetter , db kv.RoDB , chainConfig * chain.Config , collect func ([]byte ) error , workers int , lvl log.Lvl , logger log.Logger ) (uint64 , error ) {
82- return f (ctx , blockFrom , blockTo , firstKey , db , chainConfig , collect , workers , lvl , logger )
86+ func (f RangeExtractorFunc ) Extract (ctx context.Context , blockFrom , blockTo uint64 , firstKey FirstKeyGetter , db kv.RoDB , chainConfig * chain.Config , collect func ([]byte ) error , workers int , lvl log.Lvl , logger log.Logger , hashResolver BlockHashResolver ) (uint64 , error ) {
87+ return f (ctx , blockFrom , blockTo , firstKey , db , chainConfig , collect , workers , lvl , logger , hashResolver )
8388}
8489
8590type IndexBuilder interface {
@@ -199,7 +204,7 @@ type Type interface {
199204 Indexes () []Index
200205 HasIndexFiles (info FileInfo , logger log.Logger ) bool
201206 BuildIndexes (ctx context.Context , info FileInfo , indexBuilder IndexBuilder , chainConfig * chain.Config , tmpDir string , p * background.Progress , lvl log.Lvl , logger log.Logger ) error
202- ExtractRange (ctx context.Context , info FileInfo , rangeExtractor RangeExtractor , indexBuilder IndexBuilder , firstKeyGetter FirstKeyGetter , db kv.RoDB , chainConfig * chain.Config , tmpDir string , workers int , lvl log.Lvl , logger log.Logger ) (uint64 , error )
207+ ExtractRange (ctx context.Context , info FileInfo , rangeExtractor RangeExtractor , indexBuilder IndexBuilder , firstKeyGetter FirstKeyGetter , db kv.RoDB , chainConfig * chain.Config , tmpDir string , workers int , lvl log.Lvl , logger log.Logger , hashResolver BlockHashResolver ) (uint64 , error )
203208
204209 RangeExtractor () RangeExtractor
205210}
@@ -269,11 +274,11 @@ func (s snapType) FileInfo(dir string, from uint64, to uint64) FileInfo {
269274 return f
270275}
271276
272- func (s snapType ) ExtractRange (ctx context.Context , info FileInfo , rangeExtractor RangeExtractor , indexBuilder IndexBuilder , firstKeyGetter FirstKeyGetter , db kv.RoDB , chainConfig * chain.Config , tmpDir string , workers int , lvl log.Lvl , logger log.Logger ) (uint64 , error ) {
277+ func (s snapType ) ExtractRange (ctx context.Context , info FileInfo , rangeExtractor RangeExtractor , indexBuilder IndexBuilder , firstKeyGetter FirstKeyGetter , db kv.RoDB , chainConfig * chain.Config , tmpDir string , workers int , lvl log.Lvl , logger log.Logger , hashResolver BlockHashResolver ) (uint64 , error ) {
273278 if rangeExtractor == nil {
274279 rangeExtractor = s .rangeExtractor
275280 }
276- return ExtractRange (ctx , info , rangeExtractor , indexBuilder , firstKeyGetter , db , chainConfig , tmpDir , workers , lvl , logger )
281+ return ExtractRange (ctx , info , rangeExtractor , indexBuilder , firstKeyGetter , db , chainConfig , tmpDir , workers , lvl , logger , hashResolver )
277282}
278283
279284func (s snapType ) Indexes () []Index {
@@ -554,7 +559,7 @@ func BuildIndexWithSnapName(ctx context.Context, info FileInfo, cfg recsplit.Rec
554559 }
555560}
556561
557- func ExtractRange (ctx context.Context , f FileInfo , extractor RangeExtractor , indexBuilder IndexBuilder , firstKey FirstKeyGetter , chainDB kv.RoDB , chainConfig * chain.Config , tmpDir string , workers int , lvl log.Lvl , logger log.Logger ) (uint64 , error ) {
562+ func ExtractRange (ctx context.Context , f FileInfo , extractor RangeExtractor , indexBuilder IndexBuilder , firstKey FirstKeyGetter , chainDB kv.RoDB , chainConfig * chain.Config , tmpDir string , workers int , lvl log.Lvl , logger log.Logger , hashResolver BlockHashResolver ) (uint64 , error ) {
558563 var lastKeyValue uint64
559564
560565 sn , err := seg .NewCompressor (ctx , "Snapshot " + f .Type .Name (), f .Path , tmpDir , seg .DefaultCfg , lvl , logger )
@@ -566,7 +571,7 @@ func ExtractRange(ctx context.Context, f FileInfo, extractor RangeExtractor, ind
566571
567572 lastKeyValue , err = extractor .Extract (ctx , f .From , f .To , firstKey , chainDB , chainConfig , func (v []byte ) error {
568573 return sn .AddWord (v )
569- }, workers , lvl , logger )
574+ }, workers , lvl , logger , hashResolver )
570575
571576 if err != nil {
572577 return lastKeyValue , fmt .Errorf ("ExtractRange: %w" , err )
0 commit comments