• 1.Hyperledger基础学习



    # HyperLedger基础

    本文是参考资料1的学习记录。

    一、概述

    1 区块链的特征

    1. 同样的商业参与方,并不是脱媒的游戏

    2. 共识(CONSENSUS)– 所有的参与方认同交易的有效性

    3. 可证明性(PROVENANCE)– 每个参与方了解资产从哪里来,其所有权是如
      何改变的。

    4. 永恒性(IMMUTABILITY)– 每个参与方一旦交易被同意发生则无法篡改。
      如果交易是错误的,必须由新交易冲正并全可跟踪

    5. 权威性(FINALITY)– 只有一个地方来决定资产的归属权及交易的完整性。
      这就是共享账本的作用

    2 hyperledger项目

    图1 hyperledger项目

    超级账本项目主要包括以下几个项目:

    1. hyperledger fabric。区块链技术实现项目,采用golang语言实现,是目前几个子项目中最成熟的。项目状态:active。

    2. sawtoothlake。高度模块化分布式账本平台,采用python实现。结合intel芯片功能,实现poet consensus,提供transaction template。

    3. iroha。轻量级分布式账本,侧重于在移动端。采用c++实现,实现sumeragi consensus。

    4. blockchain explorer。展示和查询区块链块、事务和相关数据的web应用。采用node.js实现,其实是一个ui。

    5. cello。Baas的工具集,帮助创建、管理、终止区块链。采用python、javascript实现。服务封装
      支持多种底层架构,支持容器化,区块链即服务

    6. fabric sdk项目。为开发者提供fabric的调用。

    二、HyperLedger架构

    (一) v0.6架构

    v0.6逻辑架构

    v0.6_structure.png

    v0.6网络结构

    v0.6_network.png

    v0.6运行时架构

    (二) v1.0架构

    目标:可伸缩性、性能、安全隔离、可插拔性、可操作性。

    新增功能:多通道、事务隔离(子账本)、可插拔组件(db、ca、共识算法等)、更多类型chainCode。。。

    1 逻辑架构

    1.0逻辑架构同0.6,但是网络拓扑图不一样了。0.6版本至少需要4个validate point,而在1.0中进行了拆分。在原来的0.6中,进行vp节点的扩展是很困难的(原因todo);而经过1.0拆分后,新加盟的联盟节点可以是endorse或commit,难度大大降低。如下图:

    v1.0_tropy.png

    2 运行时架构

    下图为两个版本的运行时架构区别。右侧是1.0中将原0.6的peer节点拆分成了几个逻辑单元。以后的图中,一般E代表Endorser,C表示Committer,O代表o-service

    v1.0_runtime.png

    3 多链与通道

    v1.0支持多链,链将参与者和数据(包含chaincode) 进行隔离。链=Peers + Ledger + Ordering Channel。一个Peer节点可以参与多个链,所以需要考虑按照什么业务逻辑去进行划分链。支持链的作用是,一部分数据的影响可以限制在自己的链中,而不影响其他数据。

    Channel(通道)提供一种通讯机制,将peer和orderer连接在一起, 形成一个个具有保密性的通讯链路(虚拟)。Fabric的区块链网络缺省包含一个账本(称为:系统账本) 和一个通道。子账本可以被创建, 并绑定到一个通道。

    channel

    4 事务

    transaction

    一次事务的执行:

    transaction proposal.应用向一个或多个peer节点发送对事务的背书请求;

    chaincode。 背书节点执行cc,但并不将结果提交到本地账本,只是将结果返回给应用;

    Endorse - Order - validate。应用收集所有背书节点的结果后,将结果广播给orderers。

    store in ledger。Orderers执行共识工程,生成block,通过消息通道批量的将block发布给peer节点。

    每个ChainCode在部署时, 都需 要和背书(ESCC)和验证(VSCC)的系统ChainCode关联。ESCC决定如何对proposal进行背书;VSCC决定事务的有效性(包括背书的正确性)。

    5 ledger

    ledger

    Block结构:文件系统存储。State状态: KV数据库维护。

    6 运行

    推荐的运行模式,各个类型的节点统一运行在docker容器(轻量级容器)中,便于统一发布、部署。

    三、ChainCode

    chaincode是部署在fabric区块链网络节点上的一个接口的实现代码,是与fabric区块链交互的唯一渠道。cc是生成Transaction的唯一来源。

    语言:go、java。推荐go,需要依赖shim模块。

    两种运行模式:

    一般模式,运行在docker容器中。开发调试繁琐。

    开发模式,-peer-chaincodedev;运行在本地,开发调试较为容易。

    p7 运行原理。开发注册过程,多次与peer界面交互

    transaction,一次chaincode函数的运行。world state:所有变量的值的集合

    说明:world state可以用来存储真正的业务数据,包括存证信息、用户操作记录等;transaction可以用来执行用户的存证的流程,设置对应的state;

    0.6底层采用的是kv,不支持table的操作,所以这类api有性能损失。注意接口中的参数广义适配性。

    cc

    channel,通道、子链。同一peer可以加入不同channel。cc操作基于channel进行。同一channel上的peer节点同步其上执行的结果。

    endorser,模拟执行chaincode。分离计算任务,减轻consensus节点负担。支持endorsement policy。

    orderer,对cc执行结果consensus。solo/kafaka/sbft

    committer,将cc执行结果写入ledger。

    四、共享账本

    区块链是一种允许网络成员查看记录的共享账本技术。

    (一)账本

    ledger_2

    Block ledger

    • File system based, only new Blocks appending。基于文件系统,只能添加新区块。

    • Blocks are stored on all committers and optional subset of ordering service nodes。在所以c节点存储,o节点也可能存储。

    State ledger

    • World/Ledger state holds current value of smart contract data。世界状态反映了当前的合约状态,如vehicleOwner=Daisy

    • KVS hidden from developer by chaincode APIs
      e.g. GetState(), PutState(), GetStateByRange(), etc...。通过cc api访问kv值。

    • Stored on all committers。所有c节点存储

    History ledger

    • Holding historic sequence of all chain code transactions
      e.g. updateOwner(from=John, to=Anthony); updateOwner (from=Anthony, to=Daisy);etc。所有cc事务

    • Index stored in KVS and hidden from developer by chaincode APIs e.g. GetHistoryForKey()

    • Stored on all committers

    (二)事务生命周期

    transaction事务是资产的转移操作。contract合约是事务发生的条件。

    transaction_2

    readwriteset的逻辑结构

    Block{ Transac`ons [

    {

    "Id" : txUUID2

    "Invoke" : “Method(arg1, arg2,..,argN)"

    “TxRWSet" : [

    { ”Chaincode” : “ccId”

    “Reads”:[{"key" : “key1", "version” : “v1” }]
    
    “Writes”:[{"key" : “key1", ”value" : bytes1}]
    

    } // end chaincode RWSet ] // end TxRWSet

    }, // end transac`on with "Id" txUUID2

    { // another transacon }, ] // end Transacons

    }// end Block

    五、共识机制

    1 machine fault

    (1) Crash faults (CFT): A machine simply stops execuUon and halts,即简单的停机不响应。对应算法:Paxos, RAFT, Zookeeper AB,...

    (2) Non-crash (a.k.a. ByzanUne) faults (BFT) .有内奸!可能会有作假节点

    2 区块链的意义:从一个企业内的it治理建设,带到企业间的it治理建设。

    3 分布式系统没有全局时钟

    4 超级账本与比特币、以太坊的不一样之处:

    (1)比特币会先记账,那么有分叉的产生

    (2)此处提出的算法,不是先记账,而是先取得共识。共识的工作节点先做完该做的运算,然后大家比较结果,然后再把认可的结果写进账本。不会产生分叉。

    (3)此处的记账节点,也是比较稳定的,但是同时需要注意,记账的是一个节点集合,大家共同记账。先对当前的操作集合的数量、内容、顺序达成一致,然后再同时记账。因为之前的账本一致,而本次的操作顺序也一致,那么新的状态必然一致。

    (4)这里看,和我们设计的随机记账的方式还不大一样。

    5 pbft其中存在一个validating leader,通过leader来协调大家的一直状态。

    7 可能的影响一致性的因素

    不确定的value

    leader选举

    传输慢

    重新配置困难

    8 p16.endorsement policies:channel互不影响;ordering service排序是很重要的工作;加入一个odering节点很困难;新加入节点的时候,不是ordering节点则困难不大。

    六、隐私与安全

    1 数字证书采用公钥体制:

    数字证书是” 公钥+证书名称信息+签发机构对证书的数字签名” 、 匹配的私钥

    数字证书遵从X.509国际标准

    2 由交易“提交方” 使用自己的“数字证书” 对每个交易做 “数字签名” 来确保交易无法伪造

    3 利用数字签名,伪造一个他人的单个交易非常困难,除非能够获得他人数字证书的私钥。分布式账本可以防止如下类型的篡改:删除历史交易;伪造自己的历史交易。

    4 对称加密和公钥加密

    encrypt

    应用

    参考数据架构。这个一个过渡期的架构。

    jg

    参考资料

    1. HyperLedger Fabric系列微讲堂

    2. HyperLedger Docs

  • 相关阅读:
    win7跨网段加域提示"找不到网络路径",解决后又提示"将该计算机的主域DNS更改为“”失败,名称仍然为xx.xx, 错误为“指定的服务器无法运行请求的操作”!
    XP原版系统激活
    使用SQLyog远程连接mysql,错误1130 解决方法
    激活Windows Server 2008 R2 Enterprise 方法
    Non-UTF-8 code starting with 'xff'解决,记录
    Linux 中,基础命令 command not found...问题
    winxp_sp3未激活的登录问题
    linux安装tomcat
    Notepad++ 配置python
    python idle 清屏问题的解决
  • 原文地址:https://www.cnblogs.com/windspear/p/7306754.html
Copyright © 2020-2023  润新知