github.com/linapex/ethereum-dpos-chinese@v0.0.0-20190316121959-b78b3a4a1ece/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 12:09:34</date> 10 //</624342617072603136> 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) int { 26 var version int 27 28 enc, _ := db.Get(databaseVerisionKey) 29 rlp.DecodeBytes(enc, &version) 30 31 return version 32 } 33 34 //WriteDatabaseVersion存储数据库的版本号 35 func WriteDatabaseVersion(db DatabaseWriter, version int) { 36 enc, _ := rlp.EncodeToBytes(version) 37 if err := db.Put(databaseVerisionKey, enc); err != nil { 38 log.Crit("Failed to store the database version", "err", err) 39 } 40 } 41 42 //readchainconfig根据给定的genesis散列检索共识设置。 43 func ReadChainConfig(db DatabaseReader, hash common.Hash) *params.ChainConfig { 44 data, _ := db.Get(configKey(hash)) 45 if len(data) == 0 { 46 return nil 47 } 48 var config params.ChainConfig 49 if err := json.Unmarshal(data, &config); err != nil { 50 log.Error("Invalid chain config JSON", "hash", hash, "err", err) 51 return nil 52 } 53 return &config 54 } 55 56 //writechainconfig将链配置设置写入数据库。 57 func WriteChainConfig(db DatabaseWriter, hash common.Hash, cfg *params.ChainConfig) { 58 if cfg == nil { 59 return 60 } 61 data, err := json.Marshal(cfg) 62 if err != nil { 63 log.Crit("Failed to JSON encode chain config", "err", err) 64 } 65 if err := db.Put(configKey(hash), data); err != nil { 66 log.Crit("Failed to store chain config", "err", err) 67 } 68 } 69 70 //readpreimage检索所提供哈希的单个preimage。 71 func ReadPreimage(db DatabaseReader, hash common.Hash) []byte { 72 data, _ := db.Get(preimageKey(hash)) 73 return data 74 } 75 76 //writepreimages将提供的一组preimages写入数据库。“数字”是 77 //current block number, and is used for debug messages only. 78 func WritePreimages(db DatabaseWriter, number uint64, preimages map[common.Hash][]byte) { 79 for hash, preimage := range preimages { 80 if err := db.Put(preimageKey(hash), preimage); err != nil { 81 log.Crit("Failed to store trie preimage", "err", err) 82 } 83 } 84 preimageCounter.Inc(int64(len(preimages))) 85 preimageHitCounter.Inc(int64(len(preimages))) 86 } 87