github.com/yinchengtsinghua/golang-Eos-dpos-Ethereum@v0.0.0-20190121132951-92cc4225ed8e/core/rawdb/schema.go (about) 1 2 //此源码被清华学神尹成大魔王专业翻译分析并修改 3 //尹成QQ77025077 4 //尹成微信18510341407 5 //尹成所在QQ群721929980 6 //尹成邮箱 yinc13@mails.tsinghua.edu.cn 7 //尹成毕业于清华大学,微软区块链领域全球最有价值专家 8 //https://mvp.microsoft.com/zh-cn/PublicProfile/4033620 9 //版权所有2018 Go Ethereum作者 10 //此文件是Go以太坊库的一部分。 11 // 12 //Go-Ethereum库是免费软件:您可以重新分发它和/或修改 13 //根据GNU发布的较低通用公共许可证的条款 14 //自由软件基金会,或者许可证的第3版,或者 15 //(由您选择)任何更高版本。 16 // 17 //Go以太坊图书馆的发行目的是希望它会有用, 18 //但没有任何保证;甚至没有 19 //适销性或特定用途的适用性。见 20 //GNU较低的通用公共许可证,了解更多详细信息。 21 // 22 //你应该收到一份GNU较低级别的公共许可证副本 23 //以及Go以太坊图书馆。如果没有,请参见<http://www.gnu.org/licenses/>。 24 25 //包RAWDB包含低级别数据库访问器的集合。 26 package rawdb 27 28 import ( 29 "encoding/binary" 30 31 "github.com/ethereum/go-ethereum/common" 32 "github.com/ethereum/go-ethereum/metrics" 33 ) 34 35 //下面的字段定义低级数据库模式前缀。 36 var ( 37 //databaseverisionkey跟踪当前数据库版本。 38 databaseVerisionKey = []byte("DatabaseVersion") 39 40 //HeadHeaderKey跟踪最新的已知头散列。 41 headHeaderKey = []byte("LastHeader") 42 43 //headblockkey跟踪最新的已知完整块哈希。 44 headBlockKey = []byte("LastBlock") 45 46 //HeadFastBlockKey跟踪最新的已知不完整块的哈希双irng快速同步。 47 headFastBlockKey = []byte("LastFast") 48 49 //FastTrieProgressKey跟踪在快速同步期间导入的Trie条目数。 50 fastTrieProgressKey = []byte("TrieSync") 51 52 //数据项前缀(使用单字节避免混合数据类型,避免使用“i”,用于索引)。 53 headerPrefix = []byte("h") //headerPrefix+num(uint64 big endian)+hash->header 54 headerTDSuffix = []byte("t") //headerPrefix+num(uint64 big endian)+hash+headerTsuffix->td 55 headerHashSuffix = []byte("n") //headerPrefix+num(uint64 big endian)+headerHashSuffix->hash 56 headerNumberPrefix = []byte("H") //headerNumberPrefix+hash->num(uint64 big endian) 57 58 blockBodyPrefix = []byte("b") //blockbodyprefix+num(uint64 big endian)+hash->block body 59 blockReceiptsPrefix = []byte("r") //blockReceiptsPrefix+num(uint64 big endian)+hash->block receipts 60 61 txLookupPrefix = []byte("l") //txlookupprefix+hash->交易/收据查找元数据 62 bloomBitsPrefix = []byte("B") //bloombitsprefix+bit(uint16 big endian)+section(uint64 big endian)+hash->bloom位 63 64 preimagePrefix = []byte("secure-key-") //preimageprefix+hash->preimage 65 configPrefix = []byte("ethereum-config-") //数据库的配置前缀 66 67 //链索引前缀(使用'i`+单字节以避免混合数据类型)。 68 BloomBitsIndexPrefix = []byte("iB") //BloomBitsIndexPrefix是跟踪其进展的链表索引器的数据表。 69 70 preimageCounter = metrics.NewRegisteredCounter("db/preimage/total", nil) 71 preimageHitCounter = metrics.NewRegisteredCounter("db/preimage/hits", nil) 72 ) 73 74 //txLookupEntry是一个位置元数据,用于帮助查找 75 //只给出散列值的交易或收据。 76 type TxLookupEntry struct { 77 BlockHash common.Hash 78 BlockIndex uint64 79 Index uint64 80 } 81 82 //encodeBlockNumber将块编号编码为big endian uint64 83 func encodeBlockNumber(number uint64) []byte { 84 enc := make([]byte, 8) 85 binary.BigEndian.PutUint64(enc, number) 86 return enc 87 } 88 89 //headerkey=headerprefix+num(uint64 big endian)+哈希 90 func headerKey(number uint64, hash common.Hash) []byte { 91 return append(append(headerPrefix, encodeBlockNumber(number)...), hash.Bytes()...) 92 } 93 94 //headertdkey=headerprefix+num(uint64 big endian)+hash+headertdsuffix 95 func headerTDKey(number uint64, hash common.Hash) []byte { 96 return append(headerKey(number, hash), headerTDSuffix...) 97 } 98 99 //headerhashkey=headerprefix+num(uint64 big endian)+headerhashsuffix 100 func headerHashKey(number uint64) []byte { 101 return append(append(headerPrefix, encodeBlockNumber(number)...), headerHashSuffix...) 102 } 103 104 //headerNumberKey=headerNumberPrefix+hash 105 func headerNumberKey(hash common.Hash) []byte { 106 return append(headerNumberPrefix, hash.Bytes()...) 107 } 108 109 //blockbodykey=blockbodyprefix+num(uint64 big endian)+哈希 110 func blockBodyKey(number uint64, hash common.Hash) []byte { 111 return append(append(blockBodyPrefix, encodeBlockNumber(number)...), hash.Bytes()...) 112 } 113 114 //blockReceiptskey=blockReceiptsPrefix+num(uint64 big endian)+哈希 115 func blockReceiptsKey(number uint64, hash common.Hash) []byte { 116 return append(append(blockReceiptsPrefix, encodeBlockNumber(number)...), hash.Bytes()...) 117 } 118 119 //txLookupKey=txLookupPrefix+哈希 120 func txLookupKey(hash common.Hash) []byte { 121 return append(txLookupPrefix, hash.Bytes()...) 122 } 123 124 //bloombitsky=bloombitsprefix+位(uint16 big endian)+节(uint64 big endian)+哈希 125 func bloomBitsKey(bit uint, section uint64, hash common.Hash) []byte { 126 key := append(append(bloomBitsPrefix, make([]byte, 10)...), hash.Bytes()...) 127 128 binary.BigEndian.PutUint16(key[1:], uint16(bit)) 129 binary.BigEndian.PutUint64(key[3:], section) 130 131 return key 132 } 133 134 //preImageKey=preImagePrefix+哈希 135 func preimageKey(hash common.Hash) []byte { 136 return append(preimagePrefix, hash.Bytes()...) 137 } 138 139 //configkey=configPrefix+哈希 140 func configKey(hash common.Hash) []byte { 141 return append(configPrefix, hash.Bytes()...) 142 }