1.Hyperledger基础学习


HyperLedger基础

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

1、概述

1 区块链的特征

  1. 一样的商业参与方,并非脱媒的游戏java

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

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

  4. 永恒性(IMMUTABILITY)– 每一个参与方一旦交易被赞成发生则没法篡改。
    若是交易是错误的,必须由新交易冲正并全可跟踪c++

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

2 hyperledger项目


图1 hyperledger项目


超级帐本项目主要包括如下几个项目:web

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

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

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

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

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

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

2、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容器(轻量级容器)中,便于统一发布、部署。

3、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。

4、共享帐本

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

(一)帐本

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

5、共识机制

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节点则困难不大。

6、隐私与安全

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

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

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

2 由交易“提交方” 使用本身的“数字证书” 对每一个交易作 “数字签名” 来确保交易没法伪造

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

4 对称加密和公钥加密

encrypt

应用

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

jg

参考资料

  1. HyperLedger Fabric系列微讲堂

  2. HyperLedger Docs

相关文章
相关标签/搜索