Fabric node sdk 1.4简明教程

栏目: Node.js · 发布时间: 6年前

内容简介:hyperledger fabric的node sdk最新版本为1.4,本文将介绍如何使用最新版本 的fabric node sdk开发node.js应用,以实现与fabric区块链的交互,例如查询链码状态, 或者提交链码交易。本文分五个部分来介绍node.js开发人员如何快速上手fabric node sdk:在hyperledger Fabric区块链架构中,应用是通过节点的RPC协议API接口访问安装在peer节点上的链码:

hyperledger fabric的node sdk最新版本为1.4,本文将介绍如何使用最新版本 的fabric node sdk开发node.js应用,以实现与fabric区块链的交互,例如查询链码状态, 或者提交链码交易。

本文分五个部分来介绍node.js开发人员如何快速上手fabric node sdk:

  • 工作原理:介绍fabric node sdk的工作机制与实现原理
  • 身份标识:介绍在fabric node sdk中如何标识应用的身份(证书与密钥)
  • 通道配置:介绍在fabric node sdk中如何配置通道的网络拓扑
  • 链码状态查询:介绍使用fabric node sdk查询链码状态的方法
  • 链码交易提交:介绍使用fabric node sdk提交链码交易的方法

如果希望高效系统地掌握Fabric区块链的链码及应用开发,建议访问汇智网的在线互动课程:

1、fabric node sdk 工作原理

在hyperledger Fabric区块链架构中,应用是通过节点的RPC协议API接口访问安装在peer节点上的链码:

Fabric node sdk 1.4简明教程

类似于shim api 对链码通信协议的封装,Fabric Node SDK提供了对节点RPC协议接口的封装, 其入口类为 Client ,通道操作则封装在 Channel 类中:

Fabric node sdk 1.4简明教程

2、fabric node sdk中的身份标识

由于hyperledger fabric是许可制(Permissioned)区块链,每一个参与fabric区块链的成员都需要 有明确的身份标识,因此fabric node sdk中的 Client 实例需要使用一个 User 实例来表征其访问 Fabric区块链网络的身份。例如,下面的node.js代码载入本地msp目录中的PEM编码的用户证书与 相应的密钥并生成 User 对象,然后设置为 Client 实例的当前身份:

let client = new Client
let keyPem = fs.readFileSync('.msp/keystore/user-key.pem','utf-8')
let certPem = fs.readFileSync('./msp/signcerts/user-cert.pem','utf-8')
let user = await client.createUser({        //创建User对象
  username: 'user',                         //用户名称
  mspid: 'SampleOrg',                       //所属MSP的ID
  cryptoContent: {
    privateKeyPEM: keyPem,                  //用户私钥
    signedCertPEM: certPem                  //用户证书
  },
  skipPersistence: true                     //不计入缓存
})
client.setUserContext(user,true)            //设置为client的当前身份

2、fabric node sdk通道配置

使用 Client 实例的 newChannel() 方法可以创建一个空的通道对象,我们还需要添加 PeerOrderer 实例, 以便该通道对象了解要访问的fabric网络的拓扑结构。例如,下面的node.js代码为通道对象配置 部署在本机的peer对等节点和orderer排序节点,在默认配置下,对等节点在7051端口监听,而 排序 节点在7052端口监听:

let channel = client.newChannel('ch1')
channel.addPeer(client.newPeer('grpc://127.0.0.1:7051'))
channel.addOrderer(client.newOrderer('grpc://127.0.0.1:7050'))

3、fabric node sdk查询链码状态

在fabric node sdk中,通道对象的 queryByChaincode() 方法用于链码状态查询。例如,下面的node.js代码 调用链码 counter-cc 中定义的 value() 方法,以获取计数器的当前值:

let req = {
  chaincodeId: 'counter-cc',
  fcn: 'value',
  args: []
}
let ret = await channel.queryByChaincode(req)

4、fabric node sdk提交链码交易

在fabric node sdk中,向链码提交交易则复杂一些,需要依次使用 sendTransactionProposal()sendTransaction() 这两个方法,这是因为hyperledger fabric引入了背书(endorsement)机制, 在应用向排序节点提交交易之前,需要按照既定的策略首先获取对等节点的背书。

提交链码交易的时序表示如下:

Fabric node sdk 1.4简明教程

下面的代码展示了在fabric node sdk中链码交易的两阶段提交过程:

let req = {
  chaincodeId: 'counter-cc',
  fcn: 'inc',
  args: ['10'],
  txId: client.newTransactionID()
}
let prsp = await channel.sendTransactionProposal(req)  //获取peer背书
let rsp = await channel.sendTransaction({              //提交交易
  proposalResponses: prsp[0],
  proposal: prsp[1]
})

汇智网原创,转载请标明出处。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Machine Learning in Action

Machine Learning in Action

Peter Harrington / Manning Publications / 2012-4-19 / GBP 29.99

It's been said that data is the new "dirt"—the raw material from which and on which you build the structures of the modern world. And like dirt, data can seem like a limitless, undifferentiated mass. ......一起来看看 《Machine Learning in Action》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具