热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HyperledgerFabric1.4节点SDK快速入门指南

本文将详细介绍如何利用HyperledgerFabric1.4的Node.jsSDK开发应用程序。通过最新版本的FabricNode.jsSDK,开发者可以更高效地构建和部署基于区块链的应用,实现数据的安全共享和交易处理。文章将涵盖环境配置、SDK安装、示例代码以及常见问题的解决方法,帮助读者快速上手并掌握核心功能。

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区块链的链码及应用开发,建议访问汇智网的在线互动课程:

  • Fabric区块链Java开发详解
  • Fabric区块链NodeJs开发详解


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的IDcryptoContent: {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]
})


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


推荐阅读
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 本文详细介绍了 Java 中 org.apache.xmlbeans.SchemaType 类的 getBaseEnumType() 方法,提供了多个代码示例,并解释了其在不同场景下的使用方法。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 微信小程序中实现位置获取的全面指南
    本文详细介绍了如何在微信小程序中实现地理位置的获取,包括通过微信官方API和腾讯地图API两种方式。文中不仅涵盖了必要的准备工作,如申请开发者密钥、下载并配置SDK等,还提供了处理用户授权及位置信息获取的具体代码示例。 ... [详细]
  • 本文深入探讨了Redis中的两种主要持久化方式——RDB(Redis Database)和AOF(Append Only File),并详细解析了两者的实现机制、优缺点以及在实际应用中的选择策略。 ... [详细]
  • 本文探讨了如何解决在使用CoffeeScript定义类时,实例化后对象为空的问题,并提供了解决方案。 ... [详细]
  • 腾讯视频 Node.js 服务国庆阅兵直播高并发实战
    本文分享了腾讯视频团队在国庆阅兵直播项目中,如何利用Node.js服务成功应对2.38亿次观看的高并发挑战。文章将从服务架构、可用性保障、缓存策略、日志与告警等方面详细解析。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • 尽管使用TensorFlow和PyTorch等成熟框架可以显著降低实现递归神经网络(RNN)的门槛,但对于初学者来说,理解其底层原理至关重要。本文将引导您使用NumPy从头构建一个用于自然语言处理(NLP)的RNN模型。 ... [详细]
  • 本文详细介绍了如何在Ubuntu系统中下载适用于Intel处理器的64位版本,涵盖了不同Linux发行版对64位架构的不同命名方式,并提供了具体的下载链接和步骤。 ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
  • MQTT协议:轻量级消息传输的基石
    MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是一种基于发布/订阅模式的轻量级通信协议,适用于低带宽、高延迟或不可靠的网络环境。该协议基于TCP/IP构建,由IBM在1999年首次推出,旨在通过最小化网络流量和代码量,为远程设备提供高效、可靠的消息传输服务。 ... [详细]
author-avatar
lippor
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有