对于一个区块链项目来说,最核心的数据莫过于区块数据,区块数据结构是整个区块链项目的技术基础。不过由于 EOS 项目一直在快速迭代,区块数据结构也不断更新,所以今天才向大家介绍。
区块头(block_header)
首先是区块头数据结构,包括了哈希、时间戳、默克尔根、见证人账户等。
//区块头结构体struct block_header{ //前一区块哈希 block_id_type previous; //区块时间戳 block_timestamp_type timestam 交易的默克尔根 checksum256_type transaction_mroot; /// mroot of cycles_summary //Action 的默克尔根 checksum256_type action_mroot; //区块默克尔根 checksum256_type block_mroot; //见证人账号 account_name producer; //见证人排序版本号 uint32_t schedule_version = 0; //下一个见证人(可以为空) optional<producer_schedule_type> new_producers;};
区块头(已签名)(signed_block_header)
在区块头的基础上,出块见证人进行签名,就是签名区块头:
//签名区块头结构体struct signed_block_header : public block_header{ 见证人签名 signature_type producer_signature;};
区块摘要(已签名)(signed_block_summary)
签名区块摘要的目的是将区块中的交易(Transactions)分配到各个层级中,这里并没有交易的完整信息,只展示了交易的层级和分组结构。
struct signed_block_summary : public signed_block_header {
vector<region_summary> regions; };
EOS 白皮书里说明了区块摘要的结构:
Region Cycles (sequential)(串行) Shards (parallel)(并行) Transactions (sequential)(串行)
可以看到,多个 Transactions 组成了一个 Shards(片区),多个 Shards 组成了一个 Cycles(周期),多个周期组成一个 Region(区域)。每个区块所包含的交易就被这样的层级结构组织起来,并将最终的组织结构单独记录在区块中。这也是 EOS 以后开发并行执行的基础。
区块(已签名)(signed_block)
前面提到区块摘要只说明了交易的组织结构,并没有具体的交易信息,我们要在区块最后添加完整的交易信息,就形成了一个 EOS 完整区块。
struct signed_block : public signed_block_summary { //完整交易信息 vector<packed_transaction> input_transactions;};
总结
我们用图形绘出了 EOS 区块数据结构,便于大家理解。
圆方圆区块链汇集大批区块链名师,采取导师值班制,为学员实时解决技术疑难。请关注圆方圆区块链知识星球与导师。(培训咨询请联系船长13826054890微信手机同号)
作者小笛 ,专注于 EOS 技术研究与区块链智能合约开发.是圆方圆区块链的导师,更多小笛老师的文章和视频请关注圆方圆链圈公众号。
原文地址:http://blog.51cto.com/13625500/2107527
时间: 2024-11-06 09:33:44