@@ -3,8 +3,6 @@ package verifier
33import (
44 "fmt"
55
6- "github.com/cockroachdb/pebble"
7- "github.com/dgraph-io/badger/v2"
86 "github.com/rs/zerolog"
97 "github.com/rs/zerolog/log"
108
@@ -26,18 +24,14 @@ import (
2624// It assumes the latest sealed block has been executed, and the chunk data packs have not been
2725// pruned.
2826func VerifyLastKHeight (k uint64 , chainID flow.ChainID , protocolDataDir string , chunkDataPackDir string ) error {
29- db , storages , cdpDB , chunkDataPacks , state , verifier , err := initStorages (chainID , protocolDataDir , chunkDataPackDir )
27+ closer , storages , chunkDataPacks , state , verifier , err := initStorages (chainID , protocolDataDir , chunkDataPackDir )
3028 if err != nil {
3129 return fmt .Errorf ("could not init storages: %w" , err )
3230 }
3331 defer func () {
34- err := db .Close ()
35- if err != nil {
36- log .Error ().Err (err ).Msg ("failed to close db" )
37- }
38- err = cdpDB .Close ()
32+ err := closer ()
3933 if err != nil {
40- log .Error ().Err (err ).Msg ("failed to close chunk data pack db " )
34+ log .Error ().Err (err ).Msg ("failed to close storages " )
4135 }
4236 }()
4337
@@ -47,6 +41,12 @@ func VerifyLastKHeight(k uint64, chainID flow.ChainID, protocolDataDir string, c
4741 }
4842
4943 root := state .Params ().SealedRoot ().Height
44+
45+ // preventing overflow
46+ if k > lastSealed .Height + 1 {
47+ return fmt .Errorf ("k is greater than the number of sealed blocks, k: %d, last sealed height: %d" , k , lastSealed .Height )
48+ }
49+
5050 from := lastSealed .Height - k + 1
5151
5252 // root block is not verifiable, because it's sealed already.
@@ -58,6 +58,8 @@ func VerifyLastKHeight(k uint64, chainID flow.ChainID, protocolDataDir string, c
5858 }
5959 to := lastSealed .Height
6060
61+ log .Info ().Msgf ("verifying blocks from %d to %d" , from , to )
62+
6163 for height := from ; height <= to ; height ++ {
6264 log .Info ().Uint64 ("height" , height ).Msg ("verifying height" )
6365 err := verifyHeight (height , storages .Headers , chunkDataPacks , storages .Results , state , verifier )
@@ -75,11 +77,18 @@ func VerifyRange(
7577 chainID flow.ChainID ,
7678 protocolDataDir string , chunkDataPackDir string ,
7779) error {
78- db , storages , chunkDataPacks , state , verifier , err := initStorages (chainID , protocolDataDir , chunkDataPackDir )
80+ closer , storages , chunkDataPacks , state , verifier , err := initStorages (chainID , protocolDataDir , chunkDataPackDir )
7981 if err != nil {
8082 return fmt .Errorf ("could not init storages: %w" , err )
8183 }
82- defer db .Close ()
84+ defer func () {
85+ err := closer ()
86+ if err != nil {
87+ log .Error ().Err (err ).Msg ("failed to close storages" )
88+ }
89+ }()
90+
91+ log .Info ().Msgf ("verifying blocks from %d to %d" , from , to )
8392
8493 for height := from ; height <= to ; height ++ {
8594 log .Info ().Uint64 ("height" , height ).Msg ("verifying height" )
@@ -93,9 +102,8 @@ func VerifyRange(
93102}
94103
95104func initStorages (chainID flow.ChainID , dataDir string , chunkDataPackDir string ) (
96- * badger. DB ,
105+ func () error ,
97106 * storage.All ,
98- * pebble.DB ,
99107 storage.ChunkDataPacks ,
100108 protocol.State ,
101109 module.ChunkVerifier ,
@@ -106,18 +114,29 @@ func initStorages(chainID flow.ChainID, dataDir string, chunkDataPackDir string)
106114 storages := common .InitStorages (db )
107115 state , err := common .InitProtocolState (db , storages )
108116 if err != nil {
109- return nil , nil , nil , nil , nil , nil , fmt .Errorf ("could not init protocol state: %w" , err )
117+ return nil , nil , nil , nil , nil , fmt .Errorf ("could not init protocol state: %w" , err )
110118 }
111119
112120 chunkDataPackDB , err := storagepebble .OpenDefaultPebbleDB (chunkDataPackDir )
113121 if err != nil {
114- return nil , nil , nil , nil , nil , nil , fmt .Errorf ("could not open chunk data pack DB: %w" , err )
122+ return nil , nil , nil , nil , nil , fmt .Errorf ("could not open chunk data pack DB: %w" , err )
115123 }
116124 chunkDataPacks := storagepebble .NewChunkDataPacks (metrics .NewNoopCollector (),
117125 chunkDataPackDB , storages .Collections , 1000 )
118126
119127 verifier := makeVerifier (log .Logger , chainID , storages .Headers )
120- return db , storages , chunkDataPackDB , chunkDataPacks , state , verifier , nil
128+ closer := func () error {
129+ err := db .Close ()
130+ if err != nil {
131+ return fmt .Errorf ("failed to close protocol db: %w" , err )
132+ }
133+ err = chunkDataPackDB .Close ()
134+ if err != nil {
135+ return fmt .Errorf ("failed to close chunk data pack db: %w" , err )
136+ }
137+ return nil
138+ }
139+ return closer , storages , chunkDataPacks , state , verifier , nil
121140}
122141
123142func verifyHeight (
0 commit comments