HyperLedger Fabric

区块链就是分布式的账本,智能合约,共识(如何在不同peers当中,达成一致)
区块链网络是技术基础设施,为应用程序提供ledger和smart contract(chaincode)服务

1 整体对比

bitcoin :公链 powd
Ethereum:公链 智能合约
Fabric:有权限
智能合约语言支持java,go,node.js
插件化的共识协议,可以选择不同的trust model,部署在单个企业内部,或者可信的权威机构时,crash fault-tolerant (CFT) 协议即可。如果是多方分散环境,byzantine fault tolerant(BFT)拜占庭容错
共识不需要挖块,提高的交易的处理和确认延迟
交易和合约的隐私性和机密性是通过chaincode来实现的

2 fabric介绍

2.1模块化

ordering service建立了对事物顺序的共识,然后将块广播给peers
membership service提供者负责将网络中的实体和加密标识关联起来
点对点的gossip协议来通过ordering service来传播块
智能合约(chaincode)在docker中运行进行隔离。他们可以用标准编程语言来写,但是不能直接访问分类账状态
账本可以支持各种DBMS
一种可插拔的认可和验证策略实施,可以为每个应用程序单独配置

2.2 许可和无许可的blockchains

公链使用pow
许可链,联盟链和私有链采用CFT和BFT
有许可的这种场景通过合约作恶会降低,因为governance model中,每个节点身份都可获取到

2.3 智能合约

fabric中又叫chaincode,它是可信任的分布式应用程序,区块链程序的业务逻辑
现在都是order-execute订单执行架构:验证和顺序交易,广播给peer nodes,每个peer,顺序执行交易
order-execute架构所有存在的blockchain systems,ethereum,到许可链的Tendermint,Chain和Quorum

2.4 A new approach

execute-order-validate
执行交易,检查正确性,从而背书
通过pluggable consensus protocol来订阅事物
在提交到ledger之前,通过特定于应用程序的背书策略来验证交易

2.5 隐私和保密性

如果是公链环境,所有人都能看到你的信息
fabric通过通道来实现隐私和机密性。通过channel建立一系列参与者的集合,所有相关交易信息和合约只有在channel里的人才可以获取

2.6 可插拔的共识

事物的执行顺序是由ordering service来负责。
这样是和execute transactions执行事物和maintain the ledger维护账本是分开的
fabric有一定的信任假设,所以目前共识是CFT(crash fault tolerant)和BFT(byzantine fault-tolerant) ordering
fabric支持两种CFT,第一种是基于raft协议的etcd库,第二种是kafaka(内部是zookeeper)
另外,fabric可以支持不同的ordering service来支持不同的应用

2.7 性能和规模

区块链的性能受到transaction size,block size,network size, limits of the hardware
fabric有开源工具caliper

3.new的2.0 alpha的改动

安全chaincode的升级过程:之前是升级合约,由一个组织发起,可能会对从未安装过chaincode的升级造成风险。新的模型是必须在足够多的组织同意后才可以升级chaincode
raft ordering service:引入了leader-and-follower模型,where a leader node is elected (per channel) and its decisions are replicated to the followers

4 key concepts

4.1 介绍

分布式账本
智能合约
共识:1.当transaction被很多恰当的参与者同意后,才会更新ledger
2.当更新ledger时,相同的顺序相同的交易
shared,replicated的transaction system
为什么区块链有用?共享
为什么hyperledger fabric?私有和有权限,加入节点是有身份共识的,成员都通过membership service provider(MSP)来提供
账本数据可以以不同的format来存储
channel:保证只有可以在一个团体内独立共享ledger

  • Shared ledger:两个子ledger,world statue(描述账本在给定时间的一个state)和transaction log
  • Smart contracts:智能合约用链码编写,当应用程序需要与ledger
    交互时,由区块链外部的应用程序调用。在大多数情况下,链码只与database componet of the ledger、world state(例如查询它)交互,而不与transaction log交互。
  • consensus:
    交易必须按交易顺序写入分类账

4.2 hyperledger fabric functionalities

4.3 model

asset
chaincode
ledger features
privacy
security & membership services
consensus

4.4 blockchain network

应用通过smart contract生成交易,然后这些交易随后分发到网络中的每个对等节点
summary:
ledger,smart contract,peer nodes,ordering service,channel,certificate authority

4.4.1 creating the network

order启动网络,单独的O4,相关的网络配置NC4,赋予O4 administrator的权限。CA4向R4颁发administrator和网络节点分配身份

4.4.2 adding network adminstrators

4.4.3 defing a consotium

x1: O1, O2, O3

4.4.4 creating a channel for a consortium

NC网络配置和CC信道配置是独立的

4.4.5 peers and ledgers

真正的组件,当peer的标识是由CA1颁布的,确定它属于O1,P1启动和O4链接,O4得到请求后,通过CC1来确定P1的权限。

4.4.6 applications and smart contract chaincode

R1充分参与网络
A1通过S5和分类账L1交互,生成由R1背书的交易(request&&response),然后被ledger接受

4.4.7 network completed

最终的区块链网络图.png

peers的类型:committing peer,endorsing peer。leader peer(order的共识), anchor peer(跨组织的比如peer1链接O2的peer)

4.5 Identity

无论是peers,orders,client applications,administrators还是其他,都在X.509数字证书中存有数字身份,决定权限
membership servie负责权限,它默认使用X.509的证书来作为身份,采用传统PKI层次模型
key elements of PKI
数字证书
公钥和私钥
证书颁发机构
证书吊销列表

4.6 Membership

Local and channel MSPs
local:确定自己在网络中的身份,定义了在这个级别管理和参与权限的人员
channel:在channel层级上,确立了管理权和参与权

4.7 Policies

system channel
application channel

4.8 Peers

应用的交互过程


image.png

Transaction flow

1.client initiates transaction
client 通过sdk调用chaincode生成response,然后generate tx,加上签名
2.Endorsing peers verify signature & execute the transaction
背书的peers验证 1交易提案格式正确 2在过去没有被提交(重放攻击保护)3签名有效MSP 4提交者clientA被授权可以操作 背书会预执行一遍,生成事物结构,读写集校验,如果ok,将背书签名返回给sdk
3.Proposal responses are inspected
应用程序提交前,检查需要的背书服务节点peerA,peerB是否都已经签名
如果只是query,检查下提案答复,ok就行
如果是update ledger,需要发送到ordering,这里会检查各个背书节点的response是否一致
如果application,不检查背书,强制发送到ordering,在后续的validation阶段也会强制校验
4.Client assembles endorsements into a transaction
客户端组合好交易,channel ID和背书签名,发送到ordering
ordering只会根据channel ID和时间把交易打包,创建blocks
5.Transaction is validated and committed
blocks被传递到channel的peers中,满足背书策略,并确保自事物生成读写集以来,没有更新读写集状态
6.ledger update
peers追加block到channel的链,然后将write set写到state database,每个对等方都会发出事件,通知client,事物已经不可变的增加到channel的链里。通知事物已经验证或者无效

peers and identities

image.png

peers and orders

第一阶段:application到背书节点上,做预执行,拿到背书签名
第二阶段:单独的背书作为交易一起收集并打包成块
fabric没有分叉,因为在order中,打包到block,就已经确定了顺序
第三阶段:这些块再分发给peers,做一遍validation,然后更新ledger
包括交易数据的完整性检查、是否重复交易、背书签名是否符合背书策略的要求、交易的读写集是否符合多版本并发控制 MVCC ( Multiversion Concurrency Control )的校验等等。当交易通过了所有校验之后,将被标注为合法并写入账本中。因为所有的确认节点都按照相同的顺序检验交易,并且把合法的交易依次写入账本中,因此它们的状态能够始终保持一致。
chaincode的部分,只在背书节点上执行
当块最终会commit到ledger上时,peers会生成适当的event,块事件包括完整的块内容,块的事物事件只包括每个transaction是否已被验证或者无效。应用程序可以注册这些事件类型,以便在发生时通知他们
总结:This entire transaction workflow process is called consensus
整个transaction flow图


transaction-flow.png

4.9 Smart Contracts and Chaincode

智能合约是一个个逻辑,chaincode就是把所有有关联的contract打包,一起部署
smart contract
ledger
endorsement:背书策略决定tx是否有效,不管invalid or valid都会写到ledger中,标记tx是否有效或无效。但是world state只会由有效的交易更新。背书策略只是其中的一种
valid transactions
channel
system chaincode:生命周期系统链码,配置系统,背书系统,验证系统

4.10 Ledger

world state:存储当前所有值的数据库

blockchain: 文件形式存储,通过加密的hash,链接起来来做到不可篡改

DLT(distributed ledger technology): 逻辑上是单数的,在网络中有许多一致的副本

blocks:

block header:block number,current block hash,previous block head hash
block data:transactions
block metadata:块写入的时间,验证,公钥和块作者的签名。添加valid/invalid的标签

transaction:

Header:metadata,相关的chaincode,version
Signature:
proposal:
response:rw set
endorsements:

world state database options

LevelDB and CouchDB(存储json信息,复杂)

namespace channel

4.11 The Ordering Service

联盟链:可信环境,只有消息丢失或者重复,没有错误消息,无作恶。paxos和raft
公链:pow,pos,dpos,bft
probabilistic consensus:概率性的一致性算法
deterministic consensus:确定性的一致性算法,不会引起分叉
分离了execution和order,提升性能和可伸缩性
处理transaction和configuration

raft

leader and follower模型
在一个信道中,同意者集合。leader的消息会复制到follower。系统可以承受leader节点的丢失。只要大多数有序节点>1/2存在,CFT。能保证系统的正确使用
log entry,consenter set, Finite-State Machine (FSM),Quorum,leader,follower
Raft节点总是处于以下三种状态之一:follower、candidate或leader。所有节点最初都是从一个跟随者开始的。在这种状态下,他们可以接受领导人的日志条目(如果已当选),或者投票选举领导人。
如果在设定的时间(例如,5秒)内未接收到日志条目或心跳信号,则节点会自提升到候选状态。
在候选状态下,节点请求来自其他节点的投票。
如果一个候选人获得法定票数,那么他就被提升为领导人。领导者必须接受新的日志条目并将其复制到追随者。

kafka

消息队列Kafka是一个分布式的、高吞吐量、高可扩展性消息队列服务,广泛用于日志收集、监控数据聚合、流式数据处理、在线和离线分析等,是大数据生态中不可或缺的产品之一
Broker:消息处理节点,主要任务是接收producers发送的消息,然后写入对应的topic的partition中,并将排序后的消息发送给订阅该topic的consumers。 大量的Broker节点提高了数据吞吐量,并互相对partition数据做冗余备份(类似RAID技术)。
Zookeeper:为Brokers提供集群管理服务和共识算法服务(paxos算法),例如,选举leader节点处理消息并将结果同步给其它followers节点,移除故障节点以及加入新节点并将最新的网络拓扑图同步发送给所有Brokers。
Producer:消息生产者,应用程序通过调用Producer API将消息发送给Brokers。
Consumer:消息消费者,应用程序通过Consumer API订阅topic并接收处理后的消息。


image.png

Broker上的消息布局
Kafka将消息分类保存为多个topic,每个topic中包含多个partition,消息被连续追加写入partition中,形成目录式的结构。一个topic可以被多个consumers订阅。简单来说,partition就是一个FIFO的消息管道,一端由producer写入消息,另一端由consumer取走消息(注意,这里的取走并不会移除消息,而是移动consumer的位置指针)。
Hyperledger Fabric中的每个channel对应一个topic(topic名称就是channelID),每个topic只有一个partition(0号分区),没有利用到多分区的负载均衡特性。每条交易信息对应partition中的一个record消息记录,形成一条有序的交易信息链,最后,经过分割打包后,形成区块链,写入committing peer节点。


image.png

4.12 Private data

4.13 Channel capabilities

4.14 Use cases

5 application

application design elements

5.1 contract names

5.2 chaincode namespace

5.3 transaction context

stub:world state data APIs:getState(), putState(), deleteState()
getStateByRange()
private data APIs: getPrivateData(), putPrivateData(), deletePrivateData()
getPrivateDataByRange()
transaction APIs: getTxID(), getTxTimestamp(), getCreator(), getSignedProposal()
key APIs:
event APIs:
Utility APIs:

5.4 transaction handlers

5.5 endorsement policies

5.6 connection profile

5.7 connection options

5.8 wallet

5.9 gateway

6 architecture reference

6.1 transaction flow

6.2 CA's user guid

6.3 sdks

6.4 service discovery

6.5 channels

6.6 couchDB as the state database

6.7 peer channel-based event services

6.8 private data

6.9 read-write set semantics

read set:key和version
write set:key and new value(也可能是删除标记)

6.10 gossip data dissemination protocol

leader peer从ordering service 拉取block,然后通过gossip同步到本channel的其他peers

leader election

static
dynamic

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,012评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,628评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,653评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,485评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,574评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,590评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,596评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,340评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,794评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,102评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,276评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,940评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,583评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,201评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,441评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,173评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,136评论 2 352

推荐阅读更多精彩内容