存储模型

数据导出中间件会自动将数据导出到存储介质中,每一类数据都有特定的存储格式和模型,包括四类数据:区块数据、账户数据、事件数据和交易数据,Mysql和ES存储采用类似的存储模型

区块数据存储模型

区块原始数据模型包括三个数据存储模型,分别为区块原始数据模型、交易原始数据模型、交易回执数据模型

区块原始数据表 block_raw_data

区块原始数据表⽤于存储每个区块的详细信息。⼀般通过RPC接⼝调⽤getBlockByNumber或 getBlockByHash接⼝来获得相应的区块数据。

字段 类型 字段设置 默认值 说明
pk_id bigint(20) Primary key & NOT NULL 自增 主键Id
block_height bigint(20) 块高
block_hash varchar(255) 块哈希
block_timestamp datetime(6) 时间
dbHash varchar(255) DB哈希
extraData longtext 附加数据
gasLimit varchar(255) 区块中允许的gas最大值
gasUsed varchar(255) 区块所有交易消耗的gas
logsBloom longtext log的布隆过滤器值
parentHash varchar(255) 父区块哈希
receiptsRoot varchar(255) 回执根哈希
sealer varchar(255) 共识节点序号
sealerList longtext 共识节点列表
signatureList longtext 签名列表
stateRoot varchar(255) 状态根哈希
transactionsRoot varchar(255) 交易根哈希
transactionList longtext 交易列表
depot_updatetime datetime 系统时间 记录插入/更新时间

对应ES索引名为 blockrawdata

交易原始数据表 tx_raw_data

区块原始数据表⽤于存储每个区块的详细信息。⼀般通过RPC接⼝调⽤getBlockByNumber或 getBlockByHash接⼝来获得相应的区块数据。

字段 类型 字段设置 默认值 说明
pk_id bigint(20) Primary key & NOT NULL 自增 主键Id
block_height bigint(20) 块高
block_hash varchar(255) 块哈希
block_timestamp datetime(6) 时间
from varchar(255) 发送者地址
gasPrice longtext 发送者提供的gas价格
gas varchar(255) 发送者提供的gas
input longtext 交易的输入
nonce varchar(255) 交易的nonce值
to varchar(255) 接收者地址
tx_hash varchar(255) 交易哈希
tx_index varchar(255) 交易序号
value longtext 转移的值
depot_updatetime datetime 系统时间 记录插入/更新时间

对应ES索引名为 txrawdata

交易回执原始数据表 tx_receipt_raw_data

交易原始数据表⽤于存储每笔交易的回执数据。⼀般通过RPC接⼝调⽤getTransactionReceipt等接⼝来 获得相应的交易数据。

字段 类型 字段设置 默认值 说明
pk_id bigint(20) Primary key & NOT NULL 自增 主键Id
block_height bigint(20) 块高
block_hash varchar(255) 块哈希
block_timestamp datetime(6) 时间
contractAddress varchar(255) 发送者地址
gasUsed longtext 交易消耗的gas
logsBloom longtext log的布隆过滤器值
logs longtext 交易产生的日志
message varchar(255) 交易哈希
output longtext 交易的输出
receiptProof longtext 回执证明
root varchar(255) 状态根
txProof longtext 交易根哈希
status varchar(255) 交易的状态值
input longtext 交易的输入
to varchar(255) 接收者地址
tx_hash varchar(255) 交易哈希
tx_index varchar(255) 交易序号
depot_updatetime datetime 系统时间 记录插入/更新时间

对应ES索引名为 txreceiptrawdata

解析后的区块数据存储模型

区块数据存储模型包括三个数据存储模型,分别为区块基本数据存储模型、区块详细数据存储模型及区块交易数据存储模型。

区块详细数据存储模型 block_detail_info

区块详细数据存储模型用于存储每个区块的详细数据,包括区块哈希、块高、出块时间、块上交易量,对应的数据库表名为block_detail_info,如下表所示。

字段 类型 字段设置 默认值 说明
pk_id bigint(20) Primary key & NOT NULL 自增 主键Id
block_hash varchar(255) Unique key & Index 区块哈希
block_height bigint(20) 区块高度
block_tiemstamp datetime index 出块时间
tx_count int(11) 当前区块交易量
depot_updatetime datetime 系统时间 记录插入/更新时间
status int(11) 区块状态 0-初始化 1-成功 2-失败

对应ES索引名为 blockdetailinfo

区块交易数据存储模型 block_tx_detail_info

区块交易数据存储模型用于存储每个区块中每个交易的基本信息,包括区块哈希、块高、出块时间、合约名称、方法名称、交易哈希、交易发起方地址、交易接收方地址,对应的数据库表名为block_tx_detail_info。如下表所示。

字段 类型 字段设置 默认值 说明
pk_id bigint(20) Primary key & NOT NULL 自增 主键Id
block_hash varchar(255) Unique key & Index 区块哈希
block_height bigint(20) 区块高度
block_tiemstamp datetime index 出块时间
contract_name varchar(255) 该笔交易的合约名称
method_name varchar(255) 该笔交易调用的function名称
tx_hash varchar(255) 交易哈希
tx_from varchar(255) 交易发起方地址
tx_to varchar(255) 交易接收方地址
depot_updatetime datetime 系统时间 记录插入/更新时间

对应ES索引名为 blocktxdetailinfo

合约信息存储模型

合约信息表 contract_info

合约信息表包含了⽤户的合约相关的信息。 包括合约编译后abi,bin信息,合约的版本号,合约名等信 息。

字段 类型 字段设置 默认值 说明
pk_id bigint(20) Primary key & NOT NULL 自增 主键Id
abi_hash varchar(255) Unique key & Index abi哈希值
contract_abi longtext 合约ABI
contract_binary longtext 合约Bin信息
contract_name varchar(255) 合约名称
version varchar(255) 版本号
depot_updatetime datetime 系统时间 记录插入/更新时间

对应ES索引名为 contractinfo

已部署合约详情信息表 deployed_account_info

已部署账户数据存储模型⽤于存储区块链⽹络中所有账户信息,包括账户创建时所在块⾼、账户所在块的 出块时间、账户地址(合约地址)、合约名称。对应的数据库表名为deployed_account_info。如下表所 示。

字段 类型 字段设置 默认值 说明
pk_id bigint(20) Primary key & NOT NULL 自增 主键Id
abi_hash varchar(255) abi哈希值
contract_address longtext 合约地址
block_height longtext 块高
contract_name varchar(255) 合约名称
block_timestamp datetime 出块时间
depot_updatetime datetime 系统时间 记录插入/更新时间

对应ES索引名为 deployaccountinfo

事件数据存储模型

事件数据存储模型是根据合约中的事件(Event)自动生成的。一个合约中有多少个事件就会生成多少个对应的事件数据存储表。

事件数据存储命名规则

由于事件数据存储模型是自动生成的,所以事件数据存储表名和表结构及字段命名采用统一的规则。以如下合约作为示例。

pragma solidity ^0.4.7;
contract UserInfo {
    bytes32 _userName;
    uint8 _sex;
    
    function UserInfo(bytes32 userName, uint8 sex) public {
        _userName = userName;
        _sex = sex;
    }
    
    event modifyUserNameEvent(bytes32 userName,uint8 sex);
    
    function modifyUserName(bytes32 userName) public returns(bytes32){
        _userName = userName;
        modifyUserNameEvent(_userName,_sex);
        return _userName;
    }
}

事件表命名规则

mysql事件表命名规则为:合约名称_事件名称,并将合约名称和事件名称中的驼峰命名转化为小写加下划线方式。比如上述合约中合约名称为UserInfo,事件名称为modifyUserNameEvent,则表名称为user_info_modify_user_name_event。

ES事件索引命名规则:合约名称+事件名称+event

事件字段命名规则

事件字段命名规则:事件字段驼峰命名转化为小写加下划线方式。仍以上述合约中modifyUserNameEvent为例,包含字段userName,则在user_info_modify_user_name_event表中对应的字段为user_name。

事件数据存储模型

事件数据存储模型除过存储该事件的相关信息外,还会存储和该事件相关的块和交易信息,如下表所示。

字段 类型 字段设置 默认值 说明
pk_id bigint(20) Primary key & NOT NULL 自增 主键Id
block_height bigint(20) index 区块高度
block_tiemstamp datetime index 出块时间
event-paralist 事件字段列表
tx_hash varchar(255) index 交易哈希
depot_updatetime datetime 系统时间 记录插入/更新时间

以上述智能合约为例,对应的 如下:

字段 类型 字段设置 默认值 说明
user_name varchar(255) 用户名
sex int 性别

交易数据存储模型

交易数据存储模型同事件数据存储模型类似,是根据合约中的方法(Function)自动生成的。一个合约中有多少个方法就会生成多少个对应的方法数据存储表。该方法指的是实际产生交易的方法(含构造方法),不包含事件(Event)方法和查询方法(constant关键字标注)。

交易数据存储命名规则

交易数据存储表名、表结构及字段命名规则同事件数据存储模型类似。

交易表命名规则

mysql交易表命名规则为:合约名称_方法名称,并将合约名称和方法名称中的驼峰命名转化为小写加下划线方式。比如上述合约中合约名称为UserInfo,方法名称为modifyUserName,则表名称为user_info_modify_user_name_method;构造方法名称为UserInfo,那么对应的表名为user_info_user_info_method。 ES事件索引命名规则:合约名称+方法名称+method

交易字段命名规则

交易字段命名规则也是将交易参数字段驼峰命名转化为小写加下划线,不再赘述。需要指出的是,对于一些没有参数的方法,交易数据存储模型没有办法存储,即通过无参方法产生的交易明细将无法通过数据导出工具获取到。

交易数据存储模型

交易数据存储模型除过存储该方法的相关信息外,还会存储和该方法相关的块和交易信息,如下表所示。

字段 类型 字段设置 默认值 说明
pk_id bigint(20) Primary key & NOT NULL 自增 主键Id
block_height bigint(20) index 区块高度
block_tiemstamp datetime index 出块时间
tx_hash varchar(255) 合约地址
function-paralist 方法字段列表
tx_hash varchar(255) index 交易哈希
depot_updatetime datetime 系统时间 记录插入/更新时间

3.1中的合约为例,对应的 如下:

字段 类型 字段设置 默认值 说明
user_name varchar(255) 用户名
sex int 性别

导出任务控制

区块下载任务明细表 block_task_pool

存储了所有区块的状态信息和下载情况,对应数据库表名称为block_task_pool,如下所示:

字段 类型 字段设置 默认值 说明
pk_id bigint(20) Primary key & NOT NULL 自增 主键Id
block_height bigint(20) 块高
certainty int(11) 是否可能分叉 0- 是; 1-否
handle_item int(11) 处理分片序号,默认为0
sync_status int 2 0-待处理;1-处理中;2-已成功;3-处理失败;4-超时
depot_updatetime datetime 系统时间 记录插入/更新时间