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  }