|
|
@@ -47,6 +47,7 @@ var (
|
|
|
headHeaderKey = []byte("LastHeader")
|
|
|
headBlockKey = []byte("LastBlock")
|
|
|
headFastKey = []byte("LastFast")
|
|
|
+ trieSyncKey = []byte("TrieSync")
|
|
|
|
|
|
// Data item prefixes (use single byte to avoid mixing data types, avoid `i`).
|
|
|
headerPrefix = []byte("h") // headerPrefix + num (uint64 big endian) + hash -> header
|
|
|
@@ -146,6 +147,16 @@ func GetHeadFastBlockHash(db DatabaseReader) common.Hash {
|
|
|
return common.BytesToHash(data)
|
|
|
}
|
|
|
|
|
|
+// GetTrieSyncProgress retrieves the number of tries nodes fast synced to allow
|
|
|
+// reportinc correct numbers across restarts.
|
|
|
+func GetTrieSyncProgress(db DatabaseReader) uint64 {
|
|
|
+ data, _ := db.Get(trieSyncKey)
|
|
|
+ if len(data) == 0 {
|
|
|
+ return 0
|
|
|
+ }
|
|
|
+ return new(big.Int).SetBytes(data).Uint64()
|
|
|
+}
|
|
|
+
|
|
|
// GetHeaderRLP retrieves a block header in its raw RLP database encoding, or nil
|
|
|
// if the header's not found.
|
|
|
func GetHeaderRLP(db DatabaseReader, hash common.Hash, number uint64) rlp.RawValue {
|
|
|
@@ -374,6 +385,15 @@ func WriteHeadFastBlockHash(db ethdb.Putter, hash common.Hash) error {
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
+// WriteTrieSyncProgress stores the fast sync trie process counter to support
|
|
|
+// retrieving it across restarts.
|
|
|
+func WriteTrieSyncProgress(db ethdb.Putter, count uint64) error {
|
|
|
+ if err := db.Put(trieSyncKey, new(big.Int).SetUint64(count).Bytes()); err != nil {
|
|
|
+ log.Crit("Failed to store fast sync trie progress", "err", err)
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
// WriteHeader serializes a block header into the database.
|
|
|
func WriteHeader(db ethdb.Putter, header *types.Header) error {
|
|
|
data, err := rlp.EncodeToBytes(header)
|