风矛之丘

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理


# 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

posted on 2017-08-08 15:00  风矛之丘  阅读(553)  评论(0编辑  收藏  举报