1、基本流程
下图简单地展示了一个应用程序通过SDK调用商业票据智能合约的过程:
2、Wallet
Wallet中的X.509数字证书将组织和持有者联系起来,使得持有者能够有权限连接到网络,不同的持有者身份拥有不同的权限,并且智能合约可以在执行期间通过transactioncontext获得这个身份。wallet中不存放任何现金或代币,只存放身份。
FDF智能合约互助系统开发,FDF智能合约互助软件开发,FDF智能合约互助app开发,FDF智能合约互助商城软件开发,FDF智能合约互助系统模式开发,FDF智能合约互助商城系统开发,FDF智能合约互助系统开发搭建,FDF智能合约互助微商系统模式开发。
应用程序使用FileSystemWallet和Gateway类连接到FDF互助网络,在issue.js的上面可以看到包括了这两个类。
const { FileSystemWallet, Gateway }=require('fabric-network');
应用程序使用Wallet类:
const wallet = newFileSystemWallet('../identity/user/isabella/wallet');
3、Gateway
issue.js连接到它的的网关:
awaitgateway.connect(connectionProfile,connectionOptions);
gateway.connect()有两个重要参数:
connectionProfile:标识了一系列对等节点网关的connectionprofile文件的系统位置。为了方便读使用了YAML,通过下面的代码加载转换为JSON对象。
let connectionProfile =yaml.safeLoad(file.readFileSync('./gateway/connectionProfile.yaml','utf8'));
connectionOptions:一系列用来控制issue.js(应用程序代码)如何连接到FDF互助网络的设置。它指定了连接到网关需要的了身份,userName和wallet,还可以通过SDK实现一些智能的行为。
let connectionOptions ={identity: userName,wallet: wallet,eventHandlerOptions:{commitTimeout: 100,strategy:EventStrategies.MSPID_SCOPE_ANYFORTX},
}
网关负责使用connect profile和connectionoptions将transaction提议发送到正确的对等节点上。
4、Networkchannel
网关connectionProfile.yaml配置文件中定义的peers提供了issue.js接入PaperNet的途径,因为这些对等点可以加入多个网络通道,网关实际上提供了应用程序接入多个网略通道的途径。
应用程序选择特定的某个通道:
const network = awaitgateway.getNetwork('PaperNet');
应用程序可以加入网络中的一个子网络,通过连接到多网关的对等点。每个对等点加入到多个网络通道中,应用程序根据它们不同的wallet身份在不同的通道中有不同的权限。
5、构建一个提议
应用程序直接连接到CommercialPaperContract这个智能合约:
const contract = awaitnetwork.getContract('papercontract','org.papernet.commercialpaper');
papercontract.js是一个包含多个智能合约的链码文件,papercontract是该链码文件安装和部署在通道上的名字,通过智能合约的名称从papercontract.js链码中选出需要的智能合约。getContract()方法会默认使用它发现的链码上的个智能合约,当链码中只有一个智能合约时,可以省略合约名。
6、提交transaction提议
提交transaction提议是对SDK一个单独的方法调用:
const issueResponse = awaitcontract.submitTransaction('issue','MagnetoCorp', '00001','2020-05-31', '2020-11-30','5000000');
看起来好像是智能合约在应用程序调用submitTransaction()后很快就获得了控制权,但事实并不是这样。在幕后,SDK使用connectionOptions和connectionProfile来将transaction提议发送到网络中正确的节点上。应用程序并不用管这些,只需要发起submitTransactionSDK完成剩下的所有操作。
注意,submitTransactionAPI包括了一个监听transaction提交的进程,这是有必要的,因为如果没有就无法知道transaction是否已经成功地完成排序,验证并提交到账本中。
7、处理响应
和transaction提议一样,可能看起来应用程序在智能合约调用后很快获得了控制权,事实并不是这样,同样背后的共识等过程由SDK完成。