区块链学习-数据库表

共计21个数据库表,以下是表名及相应描述

表名 描述 key vaue
Code 合约代码hash与合约代码映射表 contract code hash contract code
Account 未hash的地址与编码账户映射表 address(un hashed) account encoded
Storage 地址与存储信息映射表 address (un hashed) + incarnation + storage key (un hashed) storage value
PlainContractCode 地址与合约代码hash映射表 addressHash+incarnation code hash
IncarnationMap 地址与自毁信息映射表 address incarnation of account
ChainConfig 链与链配置的映射表 configPrefix + hash json.Marshal(cfg)
AccountsHistory 账户与账户状态变化的映射表 address + shard_id_u64 raroaring bitmap
AccountChangeSet, 块与账户状态变化的映射表 blockNum_u64 address + account(encoded)
StorageHistory, 账户与存储状态变化的映射表 address + storage_key + shard_id_u64 roaring bitmap
StorageChangeSet 块+账户与存储状态变化的映射表 blockNum_u64 + address + incarnation_u64 plain_storage_key + value
Headers 区块号+区块hash与区块头的映射表 block_num_u64 + hash header
HeaderTD 区块号+区块hash与区块总难度的映射表 block_num_u64 td
HeaderCanonical 区块号与标准链区块hash的映射表 block_num_u64 + hash header hash
HeaderNumber 区块hash与区块号的映射表 header_hash num_u64
HeadBlockKey 跟踪最新的完整区块hash HeadBlockKey hash
HeadHeaderKey 跟踪最新的区块头hash HeadHeaderKey hash
BlockBodyr 区块号+区块hash与区块体的映射表 block_num_u64 + hash block body
BlockTx 交易序列号与交易信息的映射表 tbl_sequence_u64 tx
TxLookup 交易hash与收据信息的映射表 hash receipt lookup metadata
Senders 区块号+区块hash与发送者列表的映射表 block_num_u64 + blockHash sendersList
Receipts 区块号与标准链收据列表的映射表 block_num_u64 canonical block receipts
Log 区块号+交易号对应的日志列表的映射表 block_num_u64 + txId logs of transaction
SignersDB 签名者数据库
PoaSnapshot poa快照数据库 hash Poadata
Sequence 表与其序列号的映射表 tbl_name seq_u64
Reward 账户与对应奖励的映射表 account val.Bytes()
Deposit 地址与其存款信息的映射表 Address PublicKey+Amount
BlockVerify 区块号+区块hash与验证信息的映射表 Blocknumber+ hash verifies
BlockRewards 区块号+区块hash与其奖励列表的映射表 Blocknumber+ hash rewards

这21个表大致可以分为四类block,StateInfo,PlainState,HistoryState,以下是对表分类并作出的详细解释

block

Table key value 描述
Headers block_num_u64 + hash header 根据区块号和区块哈希生成区块头部信息
HeaderNumber header_hash num_u64 根据区块哈希对应的块号
HeaderTD block_num_u64 + hash td 根据区块号和区块哈希得到总难度
HeaderCanonical block_num_u64 header hash 根据区块号得到标准链区块hash
BlockBody block_num_u64 + hash block body 根据区块号和区块哈希得到区块体
BlockTx tbl_sequence_u64 tx 存储每个区块中的交易信息,tbl_sequence_u64表示交易序列号
TxLookup tbl_sequence_u64 rlp(tx) 存储非主链的交易信息,rlp(tx)表tx的rlp编码
MaxTxNum block_number_u64 max_tx_num_in_block_u64 根据区块号得到每个块的最大交易数量
Senders block_num_u64 + blockHash sendersList 用于存储每个区块中的交易发送者列表,发送者列表是一个未序列化的数据
Receipts block_num_u64 canonical block receipts 获取规范链对应区块号的收据
Log block_num_u64 + txId logs of transaction 根据区块号和交易id获取对应的交易日志列表
Sequence tbl_name seq_u64 用于存储表的序列号 tbl_name是表名 seq_u64是序列号
Stake amc_stake bytes 用于存储质押信息

StateInfo

Table key value 描述
DatabaseInfo versionKeyByte []byte(Version) 记录相应版本数据库的配置信息
ChainConfig configPrefix + hash json.Marshal(cfg) 记录链的配置信息
PlainState
Table key value 描述
Code contract code hash contract code 根据合约hash获取合约代码
Account address(un hashed) account encoded 根据未hash的地址获取编码账户数据
Storage address (un hashed) storage value(types.Hash) 根据未hash的地址获取存储信息
ContractCode addressHash+incarnation code hash 根据地址获取对应的合约代码
PlainContractCode address+incarnation code hash 获取该账户关联的代码哈希,方便查找的快速映射
IncarnationMap address incarnation 账户在最后一次自毁时次数

HistoryState

Table key value 描述
AccountChangeSet blockNum_u64 address + account(encoded) 记录账户状态的变化历史,存储每个块中账户地址的状态变化
AccountsHistory address + shard_id_u64 roaring bitmap 记录账户状态的历史变化列表,值是roaring bitmap压缩位图,记录了账户在哪些块发生了变化
StorageChangeSet blockNum_u64 + address + incarnation_u64 plain_storage_key + value 记录存储状态的变化历史,每个块中的存储状态变化
StorageHistory address + storage_key + shard_id_u64 roaring bitmap 记录存储状态的历史变化列表,键是账户地址,存储键,以及分片id,roaring bitmap记录了存储状态在哪个块发生了变化