数据库schema

Josh Lavin编辑了12月4日这个页面,共1修订

1.主要schema关系

下图显示了数据库中每个集合的主要模式:区交易消息帐户。为了提高读取/查询的性能并减少整体存储需求,我们选择规范化和嵌套这些不同的实体来显示关系。下图显示了每个集合文档的主键以及任意外键。

 

约定

  • 主键和外键字段应以_id结尾,除非它是键列表,如果是键列表的话,字段名称应该是被引用对象的模式类型的复数形式。

2.

字段 类型 关联 ID 描述
id String PK 系统唯一ID
block_num Integer 顺序的数字标识符
previous String FK 前一个区块的SHA256
timestamp MongoDB Date (timestamp) 排期
transaction_merkle_root String 生成的区块的总和检验码(SHA256)
producer String FK 区块生产者的帐户
producer_signature String
transactions [ObjectId,…] 与此区块关联的交易ID列表
ref_block_prefix Integer
producer_changes Array 生产者名单的变化

 

示例

 

{

“previous”: “000000099271295c7e73dcf268802491f8d7e715608a6ec8182f0d4c4d6921bf”,

“timestamp”: “2017-12-04T03:09:10”,

“transaction_merkle_root”: “0000000000000000000000000000000000000000000000000000000000000000”,

“producer”: “inita”,

“producer_changes”: [],

“producer_signature”: “20621b7582a272a8ef15e0caa2590c279b706b851e9007ba558855c0b2844e0bb975481417ecbe7f3b5ffb488ec733f508c6455743bc26604d5f220bcd25e4f731”,

“cycles”: [],

“id”: “0000000abf6baeb841293e7b6423f47e98517206595bbae4eb69281ca0501a57”,

“block_num”: 10,

“ref_block_prefix”: 2067671361

}

 

3.交易

字段 类型 关联 ID 描述
transaction_id ObjectId PK 系统唯一ID
ref_block_num Integer 关联区块数字标识符
ref_block_prefix Integer 关联区块头
expiration String 交易到期时间
scope Array 帐户范围
transaction_merkle_root String 生成的区块的总和检验码(SHA256)
producer_account_id String FK 区块生产者的帐户
signatures Array 签名数组

 

示例

{

“transaction_id”: “f989025b959026f4d1e97346c0808b0fa316f7426384ce4ded83d52fde0404bf”,

“transaction”: {

“ref_block_num”: 7284,

“ref_block_prefix”: 1294303748,

“expiration”: “2017-12-04T07:31:48”,

“scope”: [

“benchmark…3”,

“benchmark…i”

],

“signatures”: [

“1f58d30c249bebfca299d485636b1bf6836df9df4a362221648f433897170fb70f1dc8933f70936d82266534883d187ba39f6fa7a448e881803c8c7530ff3afb18”

]

4.消息

 

字段 类型 关联 ID 描述
code String 合约名
type String 操作(action)名
authorization Nested_Document 授权帐户和权限
data Nested document 用于消息的任何格式的嵌套文档
hex_data String 数据的十六进制表示

 

示例

“messages”: [{

“code”: “eos”,

“type”: “transfer”,

“authorization”: [{

“account”: “benchmark…i”,

“permission”: “active”

}

],

“data”: {

“from”: “benchmark…i”,

“to”: “benchmark…3”,

“amount”: 1,

“memo”: “2017-12-04T07:31:19 1512372679244267”

},

“hex_data”: “0e0080d7c886a63a030080d7c886a63a010000000000000024323031372d31322d30345430373a33313a31392031353132333732363739323434323637”

}

]

授权嵌套文档

字段 类型 关联 ID 描述
account String FK 授权帐户名称
permission Permission 用于授权交易的权限

示例

“authorization”: [{

“account”: “benchmark…i”,

“permission”: “active”

}

]

5.帐户(集合

 

字段 类型 关联 ID 描述
name String PK 账户名
eos_balance String 余额
staked_balance String Staked balance

 

unstaking_balance String Unstaking balance

 

last_unstaking_time Date (timestamp)) 上次修改日期/时间
permissions [Nested document,…] 嵌套的权限结构

示例

{

“account_name”: “inita”,

“eos_balance”: “999977.9995 EOS”,

“staked_balance”: “0.0000 EOS”,

“unstaking_balance”: “0.0000 EOS”,

“last_unstaking_time”: “1969-12-31T23:59:59”,

“permissions”: [{

“perm_name”: “active”,

“parent”: “owner”,

“required_auth”: {

“threshold”: 1,

“keys”: [{

“key”: “EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV”,

“weight”: 1

}

],

“accounts”: []

}

},{

“perm_name”: “owner”,

“parent”: “”,

“required_auth”: {

“threshold”: 1,

“keys”: [{

“key”: “EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV”,

“weight”: 1

}

],

“accounts”: []

}

}

]

}