文档章节

Fabric node sdk 1.4简明教程

geek12345
 geek12345
发布于 04/29 15:52
字数 1005
阅读 34
收藏 0

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节点上的链码:

node sdk

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

node sdk brief

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

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

2 phase tx

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

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

© 著作权归作者所有

geek12345

geek12345

粉丝 23
博文 172
码字总数 400044
作品 0
海淀
私信 提问
fabric node api 1.4简明教程

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

汇智网教程
04/27
16
0
fabric node sdk 1.4快速入门

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

ezpod
04/28
0
0
Fabric-sdk-java最新教程

Fabric Java SDK是Fabric区块链官方提供的用于Java应用开发的SDK,全称为Fabric-sdk-java,网上可用资料不多,本文列出了精心整理的针对Fabric Java SDK的最新精选教程。 如果希望快速掌握F...

汇智网教程
04/23
174
0
Fabric Java SDK最新教程

Fabric Java SDK是Fabric区块链官方提供的用于Java应用开发的SDK,全称为Fabric-sdk-java,网上可用资料不多,本文列出了精心整理的针对Fabric Java SDK的最新精选教程。 如果希望快速掌握F...

geek12345
04/25
136
0
Fabric java sdk 1.4简明教程

在超级账本Fabric区块链中,应用通过节点的RPC协议接口访问链码。Java应用可以使用官方提供的Fabric-sdk-java开发包来实现对链码的访问,开发包封装了Fabric区块链的GRPC链码访问协议,有利于...

geek12345
04/29
109
0

没有更多内容

加载失败,请刷新页面

加载更多

JS 打印控制

JS 打印控制 var PrintStartString = "<!--打印开始标示符-->";//设置打印开始区域var PrintEndString = "<!--打印结束标示符-->";//设置打印结束区域var HtmlText = window.do......

DrChenXX
26分钟前
5
0
LevelDB:使用介绍

LevelDB 提供的接口其实很简单,下面举例进行简单说明。 安装 git clone https://github.com/google/leveldb cd leveldb mkdir -p build && cd build cmake -DCMAKE_BUILD_TYPE=Release .. ......

slagga
31分钟前
5
0
《JavaScript正则表达式迷你书》读书笔记

正则基础 常见简写形式 字符组 具体含义 记忆方式 \d 表示 [0-9]。表示是一位数字。 其英文是 digit(数字) \D 表示 [^0-9]。表示除数字外的任意字符。 \w 表示 [0-9a-zA-Z_]。表示数字、大小...

muzi131313
36分钟前
5
0
Git的反悔操作

概述 这次主要来讲讲Git的反悔操作,自己平时在写代码的过程中经常会出现想要弃用所有的改动或回滚到上一次commit的情况。Git上的反悔操作有reset、rebase、revert等,每个操作各有区别和对应...

duduYZ
37分钟前
4
0
实现双向绑定Proxy比defineproperty优劣如何?

前言 双向绑定其实已经是一个老掉牙的问题了,只要涉及到MVVM框架就不得不谈的知识点,但它毕竟是Vue的三要素之一. Vue三要素 响应式: 例如如何监听数据变化,其中的实现方法就是我们提到的双向...

寻找海蓝
49分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部