用两天时间阅读和动手实验了fabric的开发,本文目的在于概述fabric的开发现状。
fabric的定位
fabric文档的开门见山讲了自己的特征:
The fabric is an implementation of blockchain technology, leveraging familiar and proven technologies【注:go语言实现、第三方CA】. It is a modular architecture allowing pluggable implementations of various function【共识机制可替换,chaincode可复用】. It features powerful container technology to host any mainstream language 【用go或java编写chaincode】for smart contracts development.
fabric的目标是用于哪些场景呢?这里给出了典型应用场景,包括:B2B合约、制造供应链、资产托管,并且总结了每种场景下各参与方及其行为。
fabric开发者分类
fabric将开发者分为两类:
- 一类是用fabric提供的SDK去实施行业应用;
- 另一类则是帮助完善fabric自身。
fabric推荐第一类开发者下载官方image,并在docker下开发;第二类用户则下载编译代码运行。
本文主要针对第一类开发进行评估。
fabric的SDK主要能做啥?
1.用go、java编写chaincode(类似以太坊的智能合约);
2.用cli/restAPI/nodejs 部署、调用chaincode。
环境搭建
分以下几步:
- 安装docker环境
- 下载fabric提供的image
- docker-compose up运行image,启动fabric-peer、fabric-membersrvc、fabric-starter-kit节点
- 在docker终端下cli与节点交互、或者在docker下运行nodejs应用;或者通过RestAPI与节点交互(可以在docker外执行,相当于http协议跨主机交互)
细节过程在这里。
RestAPI方式的交互,我参考了这篇文章。Rest测试工具用的是PostMan,以raw json post方式提交就好。
免费午餐
对Hyperledger应用开发者而言,IBM Bluemix提供免费的入门级区块运行环境,具体操作请移步这里。作者的其它文章也推荐——看完这几篇文章,就算不动手,也大致了解fabric的应用开发能做什么?怎么做的?
赞与槽
超级账本的目标——行业实施区块链应用的基础组件,以下几点是迈向工程化的进步:
- 利用成熟语言和工具来开发,没有再发明一种脚本语言;
- 明确给出了应用场景及用例;
- 模块化设计;
- 提出数据的受限访问;
从开发者的角度来考虑,我认为fabric距离其目标尚存在以下差距:
- 缺debug!缺debug!缺debug!
- chaincode只看到build->deploy->invoke,debug在哪里亲?目前看来出错时似乎只能依赖log输出分析;
- 用nodejs写application也是如此,只能运行在docker下,虽然提供了与宿主机共享的mytest目录,可以在宿主机下用ide修改代码,在docker下run/debug,但是缺一体化的ide,程序员的开发效率一定龟爬。