github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/core/rawdb/accessors_metadata.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 19:16:35</date> 10 //</624450079469604864> 11 12 13 package rawdb 14 15 import ( 16 "encoding/json" 17 18 "github.com/ethereum/go-ethereum/common" 19 "github.com/ethereum/go-ethereum/log" 20 "github.com/ethereum/go-ethereum/params" 21 "github.com/ethereum/go-ethereum/rlp" 22 ) 23 24 //readdatabaseversion检索数据库的版本号。 25 func ReadDatabaseVersion(db DatabaseReader) *uint64 { 26 var version uint64 27 28 enc, _ := db.Get(databaseVerisionKey) 29 if len(enc) == 0 { 30 return nil 31 } 32 if err := rlp.DecodeBytes(enc, &version); err != nil { 33 return nil 34 } 35 36 return &version 37 } 38 39 //WriteDatabaseVersion存储数据库的版本号 40 func WriteDatabaseVersion(db DatabaseWriter, version uint64) { 41 enc, err := rlp.EncodeToBytes(version) 42 if err != nil { 43 log.Crit("Failed to encode database version", "err", err) 44 } 45 if err = db.Put(databaseVerisionKey, enc); err != nil { 46 log.Crit("Failed to store the database version", "err", err) 47 } 48 } 49 50 //readchainconfig根据给定的genesis散列检索共识设置。 51 func ReadChainConfig(db DatabaseReader, hash common.Hash) *params.ChainConfig { 52 data, _ := db.Get(configKey(hash)) 53 if len(data) == 0 { 54 return nil 55 } 56 var config params.ChainConfig 57 if err := json.Unmarshal(data, &config); err != nil { 58 log.Error("Invalid chain config JSON", "hash", hash, "err", err) 59 return nil 60 } 61 return &config 62 } 63 64 //writechainconfig将链配置设置写入数据库。 65 func WriteChainConfig(db DatabaseWriter, hash common.Hash, cfg *params.ChainConfig) { 66 if cfg == nil { 67 return 68 } 69 data, err := json.Marshal(cfg) 70 if err != nil { 71 log.Crit("Failed to JSON encode chain config", "err", err) 72 } 73 if err := db.Put(configKey(hash), data); err != nil { 74 log.Crit("Failed to store chain config", "err", err) 75 } 76 } 77 78 //readpreimage检索所提供哈希的单个preimage。 79 func ReadPreimage(db DatabaseReader, hash common.Hash) []byte { 80 data, _ := db.Get(preimageKey(hash)) 81 return data 82 } 83 84 //writepreimages将提供的一组preimages写入数据库。 85 func WritePreimages(db DatabaseWriter, preimages map[common.Hash][]byte) { 86 for hash, preimage := range preimages { 87 if err := db.Put(preimageKey(hash), preimage); err != nil { 88 log.Crit("Failed to store trie preimage", "err", err) 89 } 90 } 91 preimageCounter.Inc(int64(len(preimages))) 92 preimageHitCounter.Inc(int64(len(preimages))) 93 } 94