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

表名描述keyvaue
Code合约代码hash与合约代码映射表contract code hashcontract code
Account未hash的地址与编码账户映射表address(un hashed)account encoded
Storage地址与存储信息映射表address (un hashed) + incarnation + storage key (un hashed)storage value
PlainContractCode地址与合约代码hash映射表addressHash+incarnationcode hash
IncarnationMap地址与自毁信息映射表addressincarnation of account
ChainConfig链与链配置的映射表configPrefix + hashjson.Marshal(cfg)
AccountsHistory账户与账户状态变化的映射表address + shard_id_u64raroaring bitmap
AccountChangeSet,块与账户状态变化的映射表blockNum_u64address + account(encoded)
StorageHistory,账户与存储状态变化的映射表address + storage_key + shard_id_u64roaring bitmap
StorageChangeSet块+账户与存储状态变化的映射表blockNum_u64 + address + incarnation_u64plain_storage_key + value
Headers区块号+区块hash与区块头的映射表block_num_u64 + hashheader
HeaderTD区块号+区块hash与区块总难度的映射表block_num_u64td
HeaderCanonical区块号与标准链区块hash的映射表block_num_u64 + hashheader hash
HeaderNumber区块hash与区块号的映射表header_hashnum_u64
HeadBlockKey跟踪最新的完整区块hashHeadBlockKeyhash
HeadHeaderKey跟踪最新的区块头hashHeadHeaderKeyhash
BlockBodyr区块号+区块hash与区块体的映射表block_num_u64 + hashblock body
BlockTx交易序列号与交易信息的映射表tbl_sequence_u64tx
TxLookup交易hash与收据信息的映射表hashreceipt lookup metadata
Senders区块号+区块hash与发送者列表的映射表block_num_u64 + blockHashsendersList
Receipts区块号与标准链收据列表的映射表block_num_u64canonical block receipts
Log区块号+交易号对应的日志列表的映射表block_num_u64 + txIdlogs of transaction
SignersDB签名者数据库
PoaSnapshotpoa快照数据库hashPoadata
Sequence表与其序列号的映射表tbl_nameseq_u64
Reward账户与对应奖励的映射表accountval.Bytes()
Deposit地址与其存款信息的映射表AddressPublicKey+Amount
BlockVerify区块号+区块hash与验证信息的映射表Blocknumber+ hashverifies
BlockRewards区块号+区块hash与其奖励列表的映射表Blocknumber+ hashrewards

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

block

Tablekeyvalue描述
Headersblock_num_u64 + hashheader根据区块号和区块哈希生成区块头部信息
HeaderNumberheader_hashnum_u64 根据区块哈希对应的块号
HeaderTDblock_num_u64 + hashtd根据区块号和区块哈希得到总难度
HeaderCanonicalblock_num_u64header hash根据区块号得到标准链区块hash
BlockBodyblock_num_u64 + hashblock body根据区块号和区块哈希得到区块体
BlockTxtbl_sequence_u64tx存储每个区块中的交易信息,tbl_sequence_u64表示交易序列号
TxLookuptbl_sequence_u64rlp(tx)存储非主链的交易信息,rlp(tx)表tx的rlp编码
MaxTxNumblock_number_u64max_tx_num_in_block_u64根据区块号得到每个块的最大交易数量
Sendersblock_num_u64 + blockHashsendersList用于存储每个区块中的交易发送者列表,发送者列表是一个未序列化的数据
Receiptsblock_num_u64canonical block receipts获取规范链对应区块号的收据
Logblock_num_u64 + txIdlogs of transaction根据区块号和交易id获取对应的交易日志列表
Sequencetbl_nameseq_u64用于存储表的序列号 tbl_name是表名 seq_u64是序列号
Stakeamc_stakebytes用于存储质押信息

StateInfo

Tablekeyvalue描述
DatabaseInfoversionKeyByte[]byte(Version)记录相应版本数据库的配置信息
ChainConfigconfigPrefix + hashjson.Marshal(cfg)记录链的配置信息

PlainState

Tablekeyvalue描述
Codecontract code hashcontract code根据合约hash获取合约代码
Accountaddress(un hashed)account encoded根据未hash的地址获取编码账户数据
Storageaddress (un hashed)storage value(types.Hash)根据未hash的地址获取存储信息
ContractCodeaddressHash+incarnationcode hash根据地址获取对应的合约代码
PlainContractCodeaddress+incarnationcode hash获取该账户关联的代码哈希,方便查找的快速映射
IncarnationMapaddressincarnation账户在最后一次自毁时次数

HistoryState

Tablekeyvalue描述
AccountChangeSetblockNum_u64address + account(encoded)记录账户状态的变化历史,存储每个块中账户地址的状态变化
AccountsHistoryaddress + shard_id_u64roaring bitmap记录账户状态的历史变化列表,值是roaring bitmap压缩位图,记录了账户在哪些块发生了变化
StorageChangeSetblockNum_u64 + address + incarnation_u64plain_storage_key + value记录存储状态的变化历史,每个块中的存储状态变化
StorageHistoryaddress + storage_key + shard_id_u64roaring bitmap记录存储状态的历史变化列表,键是账户地址,存储键,以及分片id,roaring bitmap记录了存储状态在哪个块发生了变化