1、Hyperledger有独特的共识协议,这个共识协议让odering service(排序)节点进行验证,成本很低,不需要消耗大量电力,让挖矿变得不再必需。所以没有51%的攻击,没有挖矿概念
2、交易速度:
比特币7笔/秒,它十分钟产生一个区块,区块大小是1M。以太坊10几到30/秒,几百笔/分钟。hyperledger50万笔/分钟,随着集群,机器升级,还可以提升
3、hyperledger适合企业级开发
-
premissioned network 授权网络
access control
-
confidential transaction 交易安全
transaction 是可以控制可见性的
-
no cryptocurrency 没有数字货币
没有矿工,低成本,验证操作灵活
-
programmable 可编程
chaincode 链码(smart contract 智能合约)
4、Assets、chaincode&ledger(资产、链码&账本)
-
assets:资产,有价值的东西,可以被交易的东西
二进制方式表示
json表示 {vinnumber: XXX, owner: zhangsan}
-
chaincode:智能合约,链码
transaction | business logic
-
ledger:账本
记录所有的 transaction
所有的参与者都保存了ladger
5、hyperledger如何解决现实问题
两个共识A和B交换一些东西(assets资产)文档、数据资产、版权、健康记录、集装箱、房屋、车辆等。两个公司都有自己的server自己的服务器。每周或每月对账,不同的软件、不同的技术栈、不同的操作人员,很多因素导致数据不匹配。不匹配的时候需要对账。
比如银行一般在月底或年底都会停止办理某些业务,因为需要处理对账。
A银行和B银行需要同时信任一个三方中央机构,中央机构出问题?避免中央机构出问题,超级复杂审批流程,硬件级别访问,操作人员背景调查
所有数据在每个节点同步,通过智能合约描述商业流程
hyperledger保证数据实时同步,所有的node节点保存同步的数据
如果有人修改了自己的数据,所有其他的party就能立刻发现数据错误了
即使一个很牛的黑客,如果把所有node节点数据修改了(修改的是hash值,这种成本是很高的),但数据会校验失败
数据的更新是靠smart contract链码,链码描述了transaction操作是否可以执行
code is law. 链码可以指定背景策略,某个机构可以执行什么策略
smart contract 可以用java、go或nodejs去编写。java开销大,1.1版本java是被禁用掉了。go编写过于麻烦,官方推荐nodejs
6、授权网络和MSP(会员管理者)&CA
business interact with known entities
以太坊属于匿名网络,hyperledger是实名制的网络
每个opertion(角色)在hyperledger都需要数字签名
fabric ca可以通过几个命令就可以生成一套证书,可拔插的组件,可不用,选择其他的,推荐使用这个
MSP只是一个接口,是个规范,颁发授权时要求实现两点,定义角色,定义角色有什么权限
具体的身份格式,用户证书验证,用户证书撤销,签名生成和验证,有MSP定义规范,fabirc ca实现
fabirc ca是用于身份管理的MSP接口的默认实现
msp定义 who you are你是谁,which network you are你在哪个网络,msp的证书是fabric ca来颁布的,每个peer都需要msp的证书,每个order都需要msp的证书
7、node和peer、client、oderers
node是区块链的通讯终端,在以太坊所有的node都是相同的
但是在hyperledger中node分为三种
- client实例化transaction的(cli、node sdk、java sdk)
- peer用来存储和同步ladger的数据
- orderers用来排序分发transaction的
在生产环节有很多个peer,越多越冗余,系统越安全
orderers如果性能够强,50W笔/分钟没有很大问题
8、业务分析
实战案例-场景分析
9、hyperledger的channel
每个channel可以理解成独立的hyperledger fabric的实例,channel是hyperledger fabric里面一个非常重要的概念。
其他区块链系统里没有channel的概念,channel是相互间是隔离的。
创建和加入channel的操作很简单,sdk里面有工具叫configtx
创建channel的时候,一般都有指定哪些peer加到channel里
新的peer加入到channel里面,是有策略的。同QQ群一样,比如只有管理员同意、或两个以上管理员同意、只有群内组员邀请才可以、只有所有群组员同意、只要有一个不同意就不能加进来。业务模型非常灵活
通过工具更新channel的配置,修改加入策略。也可以通过channel,把peer成员移除,sdk里面工具叫configtxlator
10、chaincode智能合约
是hyperledger里的应用程序,是我们编写的商业逻辑,他的作用是更新账本数据的
sdk发起一个transaction,peer执行这个chaincode,chaincode可以用nodejs、java和go编写
在hyperledger里要更新或读取数据,就必须通过chaincode来完成
chaincode必须属于某个channel,因为ladger是属于某个channel的,chaincode操作的是ladger
任何操作chaincode的逻辑,都必需要去出示权限(CA)
chaincode的生命周期
chaincode需要先安装,然后必须要实例化。实例化chaincode会启动docker容器,在这个容器里运行chaincode
- 安装install
- 实例化init
- 调用invoke
chaincode背书策略
实例化chaincode需要指定背书策略
chaincode总结
- 每个peer可以属于多个channel
- 每个channel有独立的ladger
- 每个channel有一个或多个chaincode
- 每个chaincode可以有不同的背书策略
这种可扩展,灵活的设计,让hyperledger可以使用与任何业务场景
11、hyperledger工作流程
1、提案 transaction proposal,peer先接收到proposal,会模拟执行,拿到当前version的ladger去模拟执行。模拟执行会产生一个读写集(read write set),具体读写集的内容:某个key要被update成什么,update后的version是什么 。
2、每个peer会把模拟执行的结果 endorsement response(背书) 签名,最后返回给sdk。
3、sdk收到足够的背书后,就会把信息交给order。order检查签名、背书策略、排序,如果没有问题,就发送一个调用更新的操作( invocation)。背书策略非常重要,不同链码有不同背书策略。不合法的invacation request回被拒绝,不好更新ladger的状态(世界状态,读写集),但是transaction会记录到blockchain,方便以后排查检查问题。
ladger有两套日志:Adds transaction 和 Record state。上述被拒绝的场景,不会更新Record state,但是会记录transaction
orderer节点担任了排序角色,解决了hyperledger的双花问题
ordering service还需要检查所有的背书对应的读写集是否一样,只有一样才会被接受
4、order发起invoke更新请求,所有节点都收到请求,更新自己的ladger
回顾流程
1、sdk发送transaction proposal给一个或多个peer
2、peer模拟执行,给出模拟执行的结果、读写集、key的version,这些信息反馈给sdk
3、sdk收集背书信息,带着签名,发送给order节点
4、order节点检查签名,检查每个peer背书的读写集是否一致,排序,如果没问题,就发出invocation,让每个peer去apply新的读写集
最后几个细节
order节点不是立刻处理每个invacation request
在order节点内部有一个消息队列,我们可以控制这个队列。控制这个队列的数量,容量大小,提交周期等参数。通过调整参数调整hypderladger的处理效率,这些是hyperledger开发中比较高级的话题
12、术语回顾
channel
数据通道,可以理解成独立的hyperledger fabirc的实例。不同的channel的数据彼此隔离,channel可以保证区块链上数据隐私问题,channel类似微信群组
ChainCode
链码、智能合约,chaincode定义了business logic,ladger的变化只能通过调用chaincode来完成,在区块链系统里面code is law
ladger
账本ladger记录的是当前的世界状态(word state),ladger还链式记录了所有的历史世界纪录状态。在hyperledger里面,ladger是一个具有授权管理的共享账本系统,从底层设计上保证数据的一致性、有效性、不可篡改性
network
由peer组成network,在同一network的peer,实施同步记录,保证数据一致
ordering service
排序服务,排序、验证transaction,最终提交invocation,把数据写入peer的ladger
work state
世界状态,当前ladger里面存放的数据 key和value,以version形式存在。当前实现有couchdb和leveldb
membership service provider
管理peer的身份和访问许可
13、渔业系统业务复盘