通过fabricSDK(nodejs)创建/更新channel(通过文件)

版本:fabric 1.2

client.createChannel(request)

参数解析:

request 包含下列几个参数:

name	     string	                 Required. 
orderer	     Orderer	             Required. 
envelope	 Array.	         Optional. 
config	     Array.	         Required.  官方文档写的是非必填,但实际上是必填。
signatures	 Array. Required. 
txId	     TransactionID	         Required. 

name: 目标channel名  

order:目标orderer对象 

new Orderer(order_url,null);

envelope:通过configtx工具生成的.tx文件的byte[]。

config:配置,通过SDK解析上传的envelope获取

channelConfig = this._client.extractChannelConfig(envelope);

signature:签名,获取方式同上

signature = this._client.signChannelConfig(channelConfig);

txId::new一个即可

注意:

1、name必须与.tx文件内的channelid相同

2、通过阅读源码可知,默认取envelope中的signature和config,传入envelope参数后这两个参数虽为必填,但未生效,即双方二选一,若envelope中不包含签名,则不传入。

3、必须使用.tx文件内所指定的OrgMSP的管理员进行签名,可多签,更新时必须所有前成员管理员签名。

示例:

this._client.setAdminSigningIdentity(private_key, certificate, "OrdererMSP");

createChannel = function (order_url,channelName,envelope) {
  let order = new Orderer(order_url,null);
  let channelConfig;
  let signature;
  try {
    channelConfig = this._client.extractChannelConfig(envelope);
    signature = this._client.signChannelConfig(channelConfig);
  } catch (err) {
    return Promise.reject(err);
  }
  let request={
    name:channelName,
    orderer:order,
    //envelope:envelope,
    config:channelConfig,
    signatures:[signature],
    txId:this._client.newTransactionID(true)
  };
  return this._client.createChannel(request);
};

 

 

你可能感兴趣的:(fabric)