Fabric node sdk 1.4简明教程

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

内容简介: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]
})

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


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

查看所有标签

猜你喜欢:

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

About Face 4: 交互设计精髓

About Face 4: 交互设计精髓

[美] 艾伦·库伯、[美] 罗伯特·莱曼、[美] 戴维·克罗宁、[美] 克里斯托弗·诺埃塞尔 / 倪卫国、刘松涛、杭敏、薛菲 / 电子工出版社 / 2015-10 / 118.00元

《About Face 4: 交互设计精髓》是《About Face 3:交互设计精髓》的升级版,此次升级把全书的结构重组优化,更加精练和易用;更新了一些适合当下时代的术语和实例,文字全部重新编译,更加清晰易读;增加了更多目标导向设计过程的细节,更新了现行实践,重点增加 移动和触屏平台交互设计,其实《About Face 4: 交互设计精髓》多数内容适用于多种平台。 《About F......一起来看看 《About Face 4: 交互设计精髓》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具