Hyperledger Fabric Node SDK和应用开发
Hyperledger Fabric 提供了多种语言的SDK版本,其中提出比较早、比较稳定而全面的是Node.js版本的SDK。
前面提到的fabric示例(如first-network和e2e-cli)都只是在单机上的简单测试,启动一个cli命令行容器来与网络成员节点进行交互,通过在cli容器中手动输入命令完成一系列操作。
而在实际开发中,fabric区块链应用应该拥有一个完整的应用程序来处理前端发起的请求,调用SDK与各节点进行交互,最终利用fabric底层特性将数据存入区块链中。
应用模型

Fabric应用可以分为三层,App层,SDK层,Fabric底层。开发人员需要开发的包括app应用和链码chaincode。应用程序一般运行于客户端节点上,负责处理请求并调用相应SDK与Peer节点,Orderer节点,CA节点进行通信。chiancode负责业务逻辑的执行,从账本查询数据或更新数据到账本。
Fabric Node SDK主要功能
SDK for Node.js有三个最顶层(top-level)的模块:API, fabric-client 和 fabric-ca-client。具体细节见官方文档及源码。
1. API
该模块给开发者提供了可插拔API,以提供SDK主要接口的可替换实现,包括CryptoSuite, key, KeyValueStore。每个接口都有内置的默认实现。
2. fabric-client
该模块提供了用户客户端与Fabric区块链网络组件(peer,orderer,event等)的交互。主要功能有:
- 创建channel
- 发送信息使peer节点加入channel
- 在peer中安装(install)chaincode
- 在channel上实例化 chaincode,分为两步:提案( propose )和交易(transact)
- 提交(submit)一个交易(需要调用chaincode),和上面一样分为两步
- 多种查询功能:状态(通过chaincode),交易,区块,channel,chaincode
- 监控事件(monitoring events):包括peer,block,transactions,custom的events
- 有签名能力的用户对象( User object)的序列化(serializable)
- 配置信息的分层(hierarchical configuration settings)
- 还提供可插拔(pluggable)的日志工具(logging utility)、加密工具(CryptoSuite)和状态存储方法(State Store),可以支持与 peer 或 orderer 的 TLS / non-TLS 链接
3. fabric-ca-client
该模块主要用于成员资格的管理,主要功能如下:
- 注册(register )新用户
- 登录(enroll)用户并且获得由Fabric CA签名(CA私钥完成)的登录证书(enrollment certificate)
- 通过登录id(enrollment id)来注销 (revoke) 一个用户
- 可定制的(customizable)持久储存(persistence store)
Fabric Node SDK具体接口
Node SDK主要的模块及其中重要的方法如下:
1.Client
- getUserContext() / setUserContext():从本地读取/写入用户信息
- 创建其他各种类的示例
2.CAClient
- register():登记
- enroll():注册
3.Channel
- sendTransactionProposal():发送提案
- sendTransaction():发送交易
- queryByChaincode():调用链码查询
- 各种与区块、交易有关的查询功能
4.Peer
- sendProposal():发送交易提案到Peer节点
5.Orderer
- sendBrodcast():发送数据到Ordere节点
- sendDeliver():从Orderer节点获取数据
补充: SDK和Chaincode的关系:
- SDK存在于客户端层面,主要用于与网络中各组件的交互,包括peer,orderer,event,channel,chaincode,提供丰富的API便于开发者编写应用程序。
- Chaincode处于更底层,提供Query,Invoke,Delete等API直接对状态数据库(world state)进行读写操作。
- SDK中的方法可以对区块及其中中的交易、通道、链码等各种信息进行查询,但是涉及状态的读写则必须通过Chaincode来完成(通过发送Proposal至背书节点)。
Hyperledger Fabric Node SDK和应用开发的更多相关文章
- 使用Fabric Node SDK进行Invoke和Query
前面的文章都是在讲解Fabric网络的搭建和ChainCode的开发,那么在ChainCode开发完毕后,我们就需要使用Fabric SDK做应用程序的开发了.官方虽然提供了Node.JS,Java, ...
- Hyperledger Fabric 实战(十): Fabric node SDK 样例 - 投票DAPP
Fabric node SDK 样例 - 投票DAPP 参考 fabric-samples 下的 fabcar 加以实现 目录结构 . ├── app │ ├── controllers │ │ └─ ...
- HyperLedger Fabric 1.4 区块链开发平台(4.1)
目前区块链开发平台分“公有链平台”和“联盟链系统”两类,“公有链平台”主要以以太坊为主的平台,可以在该类平台上进行代币的发行和根据各种模块搭建应用:“联盟链系统”主要以超级账本为主的开源系统,该类开源 ...
- windows 搭建 IBM Hyperledger Fabric(超级账本)开发环境
一.概述 Hyperledge fabric项目是IBM开源的区块链项目.Github地址:https://github.com/hyperledger/fabric 想对fabric有具体的认识,可 ...
- 搭建RESTful API来使用Fabric Node SDK 开篇
在Balance-Transfer中,有关于Node SDK比较完备的例子. SDK的官方文档在这里:https://fabric-sdk-node.github.io/ Balance-Transf ...
- fabric Node SDK进行连接
yum install gcc-c++ npm install --unsafe-perm --registry=https://registry.npm.taobao.org chmod -R
- 搭建基于hyperledger fabric的联盟社区(六) --搭建node.js服务器
接下来我要做的是用fabric sdk来做出应用程序,代替CLI与整个区块链网络交互.并且实现一个http API,向社区提供一个简单的接口,使社区轻松的与区块链交互. 官方虽然提供了Node.JS, ...
- 搭建基于hyperledger fabric的联盟社区(一) --前言
三个月前上面发了一个关于智群汇聚和问题求解研究的项目,我们公司做其中的一个子项目,就是基于区块链的科技信息联盟构建.利用区块链的去中心化特性,构建一个基于区块链的科技社区,以提供科技群智汇聚采集的基础 ...
- Hyperledger Fabric——balance transfer(一)启动示例
Blacne transfer是Hyperledger fabric Node SDK的一个示例应用,主要使用了SDK中fabric-client 和 fabric-ca-client 模块中的API ...
随机推荐
- hdu_2570 迷障 贪心
迷瘴 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...
- LightOJ 1287 Where to Run(期望)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1287 题意:给定一个n个点的无向图(0到n-1),你开始在0.你开始遍历这个图 ...
- 跟风微信小程序,生鲜水果店如何借力小程序每天多赚2万块?
公司旁边的水果店,虽然是一家实体店,但老板有一颗爱玩互联网的心. 老板非常重视线上的营销推广,什么新的线上推广方式都爱尝试一下.公众号大热时做了自己的微信公众号,并且有自己的微信商城,不过线上的销售一 ...
- 怎么查看当前的git分支是基于哪个分支创建的?
2019独角兽企业重金招聘Python工程师标准>>> Question: 比如从 branch A 切出一个 branch B 然后对branch B做了一系列的操作 然后忘记了b ...
- USACO Training Section 1.2 挤牛奶Milking Cows
题目描述 三个农民每天清晨5点起床,然后去牛棚给3头牛挤奶.第一个农民在300秒(从5点开始计时)给他的牛挤奶,一直到1000秒.第二个农民在700秒开始,在 1200秒结束.第三个农民在1500秒开 ...
- Effective C++学习记录
Effective C++算是看完了,但是并没有完全理解,也做不到记住所有,在此记录下55个条款及条款末的"请记住". 让自己习惯C++ 条款01:视C++为一个语言联邦 ① C ...
- python sort和sorted的区别
sort 与 sorted 区别: sort 是应用在 list 上的方法,使用方法为 list.sort(),是对原有列表进行操作,改变原有列表的排序: sorted 可以对所有可迭代的对象进行排序 ...
- D. Kefa and Dishes(状压)
永久打开的传送门 \(这次总算没有写砸........\) \(设f[i][j]为上一次吃的i物品状态为j的最大收益\) \(那么我们就暴力枚举所有状态i,然后在当前状态找出一个没吃的食物j,再去找一 ...
- 2019-2020Nowcoder Girl初赛 题解
题目都不是很难,就是最后一题有点毒瘤 第一题:牛妹爱整除 这个你把一个进制数进行拆分,拆分成若干位,然后在取模,这样会发现如果是x进制的数,那么对x+1这个进制转化即满足条件. 举个例子:一个x进制数 ...
- F. Cards and Joy
F. Cards and Joy 题目大意: 给你n个人,每一个人恰好选k张牌. 第一行是 n 和 k 第二行有n*k个数,代表有n*k张牌,每张牌上的数字 第三行有n个数,代表第i个人喜欢的数字 第 ...