fabric(v1.0)共识机制和账本存储

  • 共识机制
    • 1、交易排序
    • 2、区块分发
    • 3、多通道数据隔离
  • 账本存储
    • 区块链
    • 区块索引
    • 状态数据库
    • 历史状态索引
    • 记账节点存储过程
    • 读写集(EWSet)
    • 交易验证:
    • 补充:

上一篇:区块链架构与交易流程(fabric1.0)

共识机制

上一篇中,我们说到交易流程可以划分划分为三个阶段

  1. 交易背书

  2. 交易排序

  3. 交易校验(记账)

    广义上说,整个交易流程都属于共识机制,通常情况下,我们说的共识机制仅是 **交易排序**阶段
    

交易排序主要在Orderer节点实现,orderer主要有三个功能:

1、交易排序

目的:保证系统交易顺序一致性(有限状态机)

如果一个系统从最初是的状态开始,每一个状态改变条件都一致的话,他一定会得到一个一致的结果。只有保证交易顺序,状态机改变条件一致,才能保证得到一致的结果

  • solo:单点排序
  • kafka:外部消息队列保证一致性

2、区块分发

  • 中间状态区块(非落盘区块,中间状态区块,包含排序节点收到的所有交易)
  • 有效交易&无效交易

3、多通道数据隔离


排序节点收到交易后,会按照通道进行拆分,拆分后进行排序,排序后发送至不同的通道,各节点通过订阅通道,获取交易区块。类似于kafuka的主题模式

账本存储

区块链

底层存储引擎是文件系统,
使用文件系统存储数据,fabric中,将多个区块,生成一个文件进行存储,查询的时候,需要指定偏移量
  • 区块存储
  1. 区块以文件块的形式存储(blockfile_xxxx)
  2. 文件块大小:64M(硬编码,改变需要重新边缘)
  3. 账本最大容量:64 * 1000000

区块索引

将区块的属性与位置关联起来,使用levelDB存储通过区块区块索引来进行对区块的查询
  1. 快速定位区块
  2. 索引键:区块高度 区块哈希 交易哈希
  3. 索引值:区块文件编号 + 文件内偏移量 + 区块数据长度

状态数据库

可以理解为区块链上的最新数据,随着交易额增加不停的更新,如果丢失,可以从区块链上进行同步,二者不一致时候,则以区块链文件系统数据为准。

历史状态索引

  • 某键在某区块的某条交易中被改变

  • 只记录改变动作,不记录具体改变

  • 历史读取 --> 历史数据索引 + 区块读取

  • LevelDB 组合键

    某一数据的历史交易的索引,不存储任何状态值,这样如果用户需要对某一数变更历史进行查询的时候,可以通过历状态索引快速找到与改数据相关的交易的区块索引。

记账节点存储过程

  1. 保存区块文件 将区块追加或者另起一个文件块,然后更新区块索引(无效交易也会被存储)
  2. 更新世界状态 (无效交易不会更新)
  3. 更新历史状态
    三者顺序执行

之前有说过,区块链的交易流程分为三步:

交易模拟  --->读写集(EWSet)
交易排序
交易验证 ----> 状态更新(更新写集)

读写集(EWSet)

读写集主要描述对区块链的操作:读取,写入,更新,删除
  • 读集:读取已提交的状态键值对
  • 写集:更新的,新增,删除标记键值对(多个更新,以最后一个更新为主)
  • 版本号:二元组(区块高度+交易编号)

交易验证:

主要是对交易读写集的验证(还有签名,证书等)只跟读集有关
读集版本号 ==世界状态版本号(包括未提交的前序交易)
  • 例子:

      世界状态:(K1,1,v1.0)(K2,2,v2.0)(K3,3,v3.0)(K4,4,v4.0)
    
  1. 交易1:Write(k1,v1.1),Write(k2,v2.1)
    交易1对k1,k2进行更新 有效。

     世界状态:(K1,1,v1.1)(K2,2,v2.1)(K3,3,v3.0)(K4,4,v4.0)
    
  2. 交易2:Read(k1),Write(k3,k3.1)
    交易2对k1的读取和对k3的更新,由于k1已经被更新,此时交易2是无效的 交易与交易不知道彼此的存在。所以,读取的都是世界状态。

     世界状态:(K1,1,v1.1)(K2,2,v2.1)(K3,3,v3.0)(K4,4,v4.0)
    
  3. 交易3:Write(k2,v2.2)
    交易3写集,有效

     世界状态:(K1,1,v1.1)(K2,2,v2.2)(K3,3,v3.0)(K4,4,v4.0)
    
  4. 交易4:Write(k2,v2.3),Read(k3)
    交易4有效,因为交易2无效,没有对k3进行更新

     世界状态: (K1,1,v1.1)(K2,2,v2.3)(K3,3,v3.0)(K4,4,v4.0)
    
  5. 交易5:Write(k5,v5.0),Read(k4)
    交易5有效

     世界状态: (K1,1,v1.1)(K2,2,v2.3)(K3,3,v3.0)(K4,4,v4.0)(K5,5,v5.0)
    

补充:

世界状态:
  • 交易执行后的所有键的最新值

  • 显著提升链码的执行效率

  • 状态是所有交易日志的快照,可随时以区块链数据为准进行重构

      理解:假如交易是一条条的sql语句,世界状态就是sql执行后的数据库表的最新信息
    

区块链共识机制与账本存储相关推荐

  1. 区块链共识机制分析——论PoW,PoS,DPos和DAG的优缺点

    近期,随着区块链技术在社区中的声音越来越大,业界已经开始从技术角度对区块链进行全方位的解读.作为第一批区块链技术的实现,传统比特币与以太坊在共识机制.存储机制.智能合约机制.跨链通讯机制等领域并没有非 ...

  2. 第四章 区块链共识机制

    第四章 区块链共识机制 1.概述 2.工作量证明共识机制 2.2 交易优先级 2.3 数学难题 2.3.1 数学难题 2.3.2 动态调整难度 2.4 最长链原则 2.5 作用 2.6 缺点 3.其它 ...

  3. 第3讲 | 浅说区块链共识机制

    ----文章出自极客时间<深入浅出区块链>   作者:元界 CTO 陈浩 我在第2讲"区块链到底是怎么运行的"一文中,提到了"打包Transaction&qu ...

  4. 区块链共识机制与分布式一致性算法

    摘要: 本篇文章是[区块链之技术进阶]的第七篇文章,在之前的文章中咱们多多少少提及了共识算法等相关知识,但是却没有具体地更加深入地了解,本文就为大家掰一掰区块链共识机制与分布式一致性算法,两者究竟有什 ...

  5. 区块链共识机制技术一——POW(工作量证明)共识机制

    什么是共识机制 所谓"共识机制",是通过特殊节点的投票,在很短的时间内完成对交易的验证和确认:对一笔交易,如果利益不相干的若干个节点能够达成共识,我们就可以认为全网对此也能够达成共 ...

  6. 区块链共识机制技术一--POW(工作量证明)共识机制

    什么是共识机制 所谓"共识机制",是通过特殊节点的投票,在很短的时间内完成对交易的验证和确认:对一笔交易,如果利益不相干的若干个节点能够达成共识,我们就可以认为全网对此也能够达成共 ...

  7. 016 | 漫谈区块链共识机制

    原创文章,转载请注明:转载自Keegan小钢 并标明原文链接:http://keeganlee.me/post/blockchain/20180425 微信订阅号:keeganlee_me 写于201 ...

  8. 区块链共识机制 和 经典分布式共识机制

    共识机制作为区块链的核心技术,决定了参与节点以何种方式对某些特定的数据 达成一致,关系到区块链的安全性.可扩展性和去中心化程度等许多重要特性.共识设计的 优劣是区块链自治能否进入良性循环的关键.共识机 ...

  9. 建造更安全的SGX区块链共识机制 Proof-of-Elapsed-Time,百度安全论文入选安全顶会NDSS...

    百度安全在系统安全领域深耕多年,成果产出持续在多个世界顶会亮相.近日,百度安全有一最新研究成果在信息安全四大顶会之一NDSS 2022发表.文章聚焦在新型区块链共识机制PoET的安全问题以及解决方案. ...

最新文章

  1. 如何确定python对应电脑版本_查看Anaconda版本、Anaconda和python版本对应关系和快速下载...
  2. 从syslinux源码定制LiveUSB
  3. 粗糙集理论介绍(概念入门)
  4. sjms-3 结构型模式
  5. python合并多个pdf_pypdf将多个pdf文件合并到一个pd中
  6. nginx php怎么配置伪静态,nginx rewrite 伪静态配置参数和使用例子
  7. oracle有sysdata,Oracle基础
  8. 如何促合作共赢?技术人的一点经验分享
  9. Tips--Anaconda安装TensorFlow报错ImportError: DLL load failed
  10. 《C语言及程序设计》实践参考——阿姆斯特朗数
  11. .net为图片添加水印(转) jpg png和gif格式
  12. 分类算法学习(一)——KNN算法的原理及简单实现
  13. Java - ip2region - 使用篇
  14. 软件测试国赛考试文档,GZ-2019026 软件测试赛项规程-2019年国赛-高职组 - 图文
  15. Ubuntu安装teamviewer12
  16. walking机器人仿真教程-应用-多点导航结合睡眠功能实现智能取药
  17. 机器视觉:工业相机专业词汇中英文详解
  18. android侧滑菜单 动画,Android 打造完美的侧滑菜单/侧滑View控件
  19. Git Commit Message校验踩坑指南
  20. 2010年RSA大会RSA总裁主题演讲:云的安全

热门文章

  1. 高群耀谈移动电影院新愿景
  2. redash 配置使用
  3. python各种模块,迭代器,生成器
  4. 手机信号空中传输原理是什么
  5. xlsx.full.js读取Excel数据转换成二维数组,sheet_to_array
  6. Python pandas 保存Excel自动调整列宽的方法及示例代码
  7. 更坏就是更好(Worse Is Better)
  8. 无主灯设计带来的“高级感”
  9. 用Cisco工具完成简单的企业网组建(部分)
  10. halcon例程解析:检查饼干的质量——check_hazelnut_wafers