github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/iavl/nodedb_version.go (about)

     1  package iavl
     2  
     3  import (
     4  	"fmt"
     5  	"strconv"
     6  	"strings"
     7  
     8  	dbm "github.com/fibonacci-chain/fbc/libs/tm-db"
     9  )
    10  
    11  // IsFastStorageStrategy check the db is FSS
    12  func IsFastStorageStrategy(db dbm.DB) bool {
    13  	ndb := &nodeDB{
    14  		db: db,
    15  	}
    16  	if ndb.getLatestVersion() <= genesisVersion {
    17  		return true
    18  	}
    19  	storeVersion, err := db.Get(metadataKeyFormat.Key([]byte(storageVersionKey)))
    20  	if err != nil || storeVersion == nil {
    21  		storeVersion = []byte(defaultStorageVersionValue)
    22  	}
    23  	ndb.storageVersion = string(storeVersion)
    24  
    25  	return ndb.hasUpgradedToFastStorage() && !ndb.shouldForceFastStorageUpgrade()
    26  }
    27  
    28  func GetFastStorageVersion(db dbm.DB) (int64, error) {
    29  	storeVersion, err := db.Get(metadataKeyFormat.Key([]byte(storageVersionKey)))
    30  	if err != nil {
    31  		return 0, err
    32  	}
    33  	versions := strings.Split(string(storeVersion), fastStorageVersionDelimiter)
    34  
    35  	if len(versions) != 2 {
    36  		return 0, fmt.Errorf("error fast storage version format")
    37  	}
    38  
    39  	return strconv.ParseInt(versions[1], 10, 64)
    40  }