ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Hyperledger Fabric学习笔记——应用程序

2020-03-07 16:01:30  阅读:339  来源: 互联网

标签:网关 transaction Fabric 智能 应用程序 wallet Hyperledger 合约


1、基本流程

下图简单地展示了一个应用程序通过SDK调用商业票据智能合约的过程:

2、Wallet

Wallet中的X.509数字证书将组织和持有者联系起来,使得持有者能够有权限连接到网络,不同的持有者身份拥有不同的权限,并且智能合约可以在执行期间通过transaction context获得这个身份。wallet中不存放任何现金或代币,只存放身份。

应用程序使用FileSystemWallet和Gateway类连接到区块链网络,在issue.js的最上面可以看到包括了这两个类。

const { FileSystemWallet, Gateway } = require('fabric-network');

应用程序使用Wallet类:

const wallet = new FileSystemWallet('../identity/user/isabella/wallet');

3、Gateway

issue.js连接到它的的网关:

await gateway.connect(connectionProfile, connectionOptions);

gateway.connect()有两个重要参数:

connectionProfile:标识了一系列对等节点网关的connection profile文件的系统位置。为了方便读使用了YAML,通过下面的代码加载转换为JSON对象。

let connectionProfile = yaml.safeLoad(file.readFileSync('./gateway/connectionProfile.yaml', 'utf8'));

connectionOptions:一系列用来控制issue.js(应用程序代码)如何连接到区块链网络的设置。它指定了连接到网关需要的了身份,userName和wallet,还可以通过SDK实现一些智能的行为。

let connectionOptions = {
  identity: userName,
  wallet: wallet,
  eventHandlerOptions: {
    commitTimeout: 100,
    strategy: EventStrategies.MSPID_SCOPE_ANYFORTX
  },
}

网关负责使用connect profile和connection options将transaction提议发送到正确的对等节点上。

4、Network channel

网关connectionProfile.yaml配置文件中定义的peers提供了issue.js接入PaperNet的途径,因为这些对等点可以加入多个网络通道,因此网关实际上提供了应用程序接入多个网略通道的途径。

应用程序选择特定的某个通道:

const network = await gateway.getNetwork('PaperNet');

应用程序可以加入网络中的一个子网络,通过连接到多网关的对等点。每个对等点加入到多个网络通道中,应用程序根据它们不同的wallet身份在不同的通道中有不同的权限。

5、构建一个提议

应用程序直接连接到CommercialPaperContract这个智能合约:

const contract = await network.getContract('papercontract', 'org.papernet.commercialpaper');

papercontract.js是一个包含多个智能合约的链码文件,papercontract是该链码文件安装和部署在通道上的名字,通过智能合约的名称从papercontract.js链码中选出需要的智能合约。getContract()方法会默认使用它发现的链码上的第一个智能合约,因此当链码中只有一个智能合约时,可以省略合约名。

6、提交transaction提议

提交transaction提议是对SDK一个单独的方法调用:

const issueResponse = await contract.submitTransaction('issue', 'MagnetoCorp', '00001', '2020-05-31', '2020-11-30', '5000000');

看起来好像是智能合约在应用程序调用submitTransaction()后很快就获得了控制权,但事实并不是这样。在幕后,SDK使用connectionOptions和connectionProfile来将transaction提议发送到网络中正确的节点上。但是应用程序并不用管这些,只需要发起submitTransaction然后SDK完成剩下的所有操作。

注意,submitTransactionAPI包括了一个监听transaction提交的进程,这是有必要的,因为如果没有就无法知道transaction是否已经成功地完成排序,验证并提交到账本中。

7、处理响应

和transaction提议一样,可能看起来应用程序在智能合约调用后很快获得了控制权,但是事实并不是这样,同样背后的共识等过程由SDK完成。

标签:网关,transaction,Fabric,智能,应用程序,wallet,Hyperledger,合约
来源: https://blog.csdn.net/Nemoosi/article/details/104708877

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有