fabric java api_fabric node api 1.4简明教程

fabric-sdk-node最新版本为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节点上的链码:

c40c52bffd7bdbd812745661e2c91ae2.png

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

37eafff860c385b5d3726ded5e51c100.png

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)机制,在应用向排序节点提交交易之前,需要按照既定的策略首先获取对等节点的背书。

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

30f98eeacf9eac22d8b860b42e000950.png

下面的代码展示了在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]

})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值