HyperLedger Composer使用笔记(一)
简介
- 使用过原生HyperLedger Fabric的都知道需要通过命令行和各种shell脚本才能建立起一个联盟链(包括crytogen生成身份验证,用yaml部署Orderer节点和Peer节点,安装并实例化chaincode等),HyperLedger Composer 是一个基于HyperLedger Fabric的项目,目的在于
快速搭建联盟链应用
,并结合Angular、Javascript等技术搭建出一个web交互界面。
概览
结构解读
结构图如上,在Composer里,认为通过资产(Assets)、参与者(Participants)和交易(Transactions)这三个类即可描述一个联盟链场景,举个例子:一个菜市场上可流通的资产是白菜(那肯定需要预先定义好的类实例出白菜
这一对象)而这时有两个参与者西洋蔡
和王富贵
,而由于交易也作为一个数据实体存在区块中(参考BTC的复式记账法),则发生一次交易我们就可以认为实例化了一次交易这个类,而这个类的属性。
- 在composer中,最基本的文件是.cto 文件、.js 文件和 .qry 文件,而.acl 文件并非必须,下面对前三个文件进行解读,acl文件的解释后期用到再加入:
- .cto文件: 上文提到的描述区块链的三大元素就是在这个文件中定义,let’s show you the code
namespace org.mynetwork.market // 定义一个叫Asset 的asset子类 asset Asset identified by assetName { o String assetName // 这个相当于主键啦 o String description // 描述,可有可无 o String mainExchange // 度量单位,可有可无 o Double quantity // 度量数量,一般都有 --> Trader owner // 拥有者 // 这里有个小细节: .cto 原生类型(比如String)则写 'o', '-->' 表示这是自己定义的类 } // 定义一个叫Trader 的participant子类 participant Trader identified by tradeId { o String tradeId // 交易者id o String firstName } // 定义一个叫Exchange 的transaction子类,这些信息在实际访问时才传入 transaction Exchange { --> Asset asset // 交易的资产的类型 --> Trader newOwner // 新的拥有者 }
- .js文件: 用于具体描述业务细节的,比如说银行的转账,我们需要从一个账户扣除金额,并增加收款人的账户金额这两个原子操作
/** * 在这里写函数的描述 * @param {org.mynetwork.market.Exchange} exchange -传入参数为一个Exchange对象的实例 * @transaction - 这里一定要有,来修饰以下函数是一个交易处理函数 */ async function exchangeAsset(exchange) { exchange.asset.owner = exchange.newOwner; let assetRegistry = await getAssetRegistry('org.mynetwork.market.Asset'); await assetRegistry.update(exchange.Asset); }
- .qry 文件: 区块链的其中一个特性是可以按链来溯源,所以把查询业务独立出来,这次先不细说。
- .cto文件: 上文提到的描述区块链的三大元素就是在这个文件中定义,let’s show you the code
- 根据以上三个文件,使用相应composer指令能够生成一个网络的描述文件 .bna 文件。根据bna文件可以以三种方式与用户进行交互:
- composer playground: 相当于整个composer平台,能够访问所有建立好的联盟链。
- 使用composer-rest-server(推荐使用): 利用composer-server工具创建一个RestFul服务器,提供Restful API进行交互。
- 使用集成的angular模板构建出一个单页面应用,与hyperleger playground相似,只是改应用只能进入一个网络,其核心也是基于restserver。
- composer playground: 相当于整个composer平台,能够访问所有建立好的联盟链。
- 依次类推,当这个网络中有更多的不同类型的资产或者参与者或者新的交易类型时可以直接在.cto 、.js 、.qry 中增加更多描述。
PS:不同类型的资产是只不同的asset子类,而不是指同一类Asset下的不同实例,比如描述黄金和房产证明所需要属性不一样,则需要另外建一个asset类。
小结
- HyperLedger Composer用数字资产(Assets)、参与人(Participants)和交易(Transactions)三个类来描述一个联盟链,这些类在.cto 文件中描述,而具体的交易细节由.js 文件里面的函数描述,根据传入的交易类型判断调用哪个函数,.qry 文件提供查询接口,以上三个文件可用来生成这个联盟链网络的描述文件 .bna 文件。
- 区块链应用是以Asset为中心的。
在下一篇文章中将会详细讲解部署的过程。