(2017年8月)Hyperledger Fabric作为一款联盟链产品,比公有链系统复杂许多,用同样的时间研究公有链技术比如:比特币和以太坊等等,能获得的利益要比研究Fabric丰厚得多,因此在研究了几个月Fabric,改写了部分JAVA-SDK代码,并用它做了一个项目之后,我决定放弃对联盟链的研究,不过在放弃之前,至少得总结一下,有始有终。废话少说,直接出干货:
Fabric各个组件的关系图

SDK(CLIENT) 、PEER、ORDERER交互流程
orderer节点启动时需要用到创始区块文件(通常命名为orderer.block、genesis.block等,在命令行选项参数中指定),构建并连接到系统通道
client发送配置交易文件(通常命名为foo.tx、mychannel.tx等)给orderer节点,申请创建应用通道,orderer节点检查角色、签名是否符合通道创建策略,若符合策略要求,则创建应用通道的创始区块(foo.block、mychannel.block)并将其返回给client
client接收到应用通道的创始区块(foo.block、mychannel.block)后,再将其发送给peer节点,要求其加入应用通道
peer节点接收到应用通道的创始区块(foo.block、mychannel.block)后,根据创始区块中的信息,连接到orderer节点,开始接收该通道对应的区块
client打包chaincode智能合约源码并发送到peer节点,要求其安装chaincode;peer节点做一定的检查后,安装chaincode。
以上步骤一般用管理员(身份)证书、通过sdk程序或peer命令执行操作
以下步骤一般用普通用户(身份)证书、通过sdk程序或peer命令执行操作
client向peer节点发起instantiate、invoke、query等请求,要求其执行chaincode中的对应函数;peer根据请求的动作和chaincode实例(容器、VM、进程)通信,对执行结果签名返回给client
client收集带有peer节点签名的chaincode的执行结果,封装成交易,发送给order节点,order节点对交易进行批量打包,生成区块后递交给对应的应用通道上的peer节点
peer节点接收区块,并对区块中的每一笔交易进行验证并根据交易中的读写集更新Key-Value-Store,发射区块事件通知
client可以选择接收peer节点的区块事件通知,并查询交易执行结果是否符合预期。
FABRIC的缺点
虽然Fabric对联盟链功能的解耦较彻底,各个功能模块组合应用起来也相对灵活了不少,可配置的模式也变多了。但是整个交易流程变复杂了,没有必要让交易数据在网络里来来回回、流来流去。因为相比计算与存储资源来说,网络资源通常是瓶颈类资源,对于那些对处理时间和可靠性有严格要求的业务,就不太合适了。因此对Fabric做一定的改造是必要的。将Fabric某些功能源码抽取出来,添加一些新代码,组装一个Simpleledger是非常可行的。
网友评论