内容简介: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节点上的链码:
类似于shim api 对链码通信协议的封装,Fabric Node SDK提供了对节点RPC协议接口的封装, 其入口类为 Client
,通道操作则封装在 Channel
类中:
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()
方法可以创建一个空的通道对象,我们还需要添加 Peer
和 Orderer
实例, 以便该通道对象了解要访问的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中链码交易的两阶段提交过程:
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] })
汇智网原创,转载请标明出处。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
操作系统基础教程
戴维斯 / 第1版 (2006年7月1日) / 2006-7 / 34.0
这是一本关于操作系统基本原理的教科书,其最大特点就是从操作系统的分层概念出发,深入浅出地介绍了操作系统的基本概念和基本框架。本书可以作为高等院校非计算机专业相关课程的教材或参考书,也适合具有高中以上数学基础的计算机用户自学,还可以作为社会上计算机培训机构的教材。对所有想了解计算机操作系统,但又不需要或不打算深入学习其理论和实现细节的读者来说,本书是一本极具价值的入门指导书。一起来看看 《操作系统基础教程》 这本书的介绍吧!