十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
hyperledger fabric的node sdk最新版本为1.4,本文将介绍如何使用最新版本的fabric node sdk开发node.js应用,以实现与fabric区块链的交互,例如查询链码状态,或者提交链码交易。
峨眉山网站建设公司创新互联,峨眉山网站设计制作,有大型网站制作公司丰富经验。已为峨眉山近1000家提供企业网站建设服务。企业网站搭建\成都外贸网站建设公司要多少钱,请找那个售后服务好的峨眉山做网站的公司定做!本文分五个部分来介绍node.js开发人员如何快速上手fabric node sdk:
如果希望高效系统地掌握Fabric区块链的链码及应用开发,建议访问汇智网的在线互动课程:
- Fabric区块链Java开发详解
- Fabric区块链NodeJs开发详解
在hyperledger Fabric区块链架构中,应用是通过节点的RPC协议API接口访问安装在peer节点上的链码:
类似于shim api对链码通信协议的封装,Fabric Node SDK提供了对节点RPC协议接口的封装,其入口类为Client
,通道操作则封装在Channel
类中:
由于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的当前身份
使用Client
实例的newChannel()
方法可以创建一个空的通道对象,我们还需要添加Peer
和Orderer
实例,以便该通道对象了解要访问的fabric网络的拓扑结构。例如,下面的node.js代码为通道对象配置部署在本机的peer对等节点和orderer排序节点,在默认配置下,对等节点在7051端口监听,而排序节点在7052端口监听:
let channel = client.newChannel('ch2')
channel.addPeer(client.newPeer('grpc://127.0.0.1:7051'))
channel.addOrderer(client.newOrderer('grpc://127.0.0.1:7050'))
在fabric node sdk中,通道对象的queryByChaincode()
方法用于链码状态查询。例如,下面的node.js代码调用链码counter-cc
中定义的value()
方法,以获取计数器的当前值:
let req = {
chaincodeId: 'counter-cc',
fcn: 'value',
args: []
}
let ret = await channel.queryByChaincode(req)
在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]
})
汇智网原创,转载请标明出处。
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。