介绍
node-ledger-client 是一个用于连接 Hyperledger Fabric 的 Node.js 客户端。它支持用户与 Fabric 网络上的链码进行交互,包括查询和执行事务。
在本教程中,我们将学习如何使用 node-ledger-client 引用 Fabric 网络中的智能合约,并撰写一个简单的应用程序来演示如何使用它。
前提条件
在开始之前,您需要首先满足以下条件:
- 拥有一个 Hyperledger Fabric 网络
- 安装 node-ledger-client(您可以通过运行
npm install node-ledger-client --save
来安装它) - 实现您的智能合约,并将其部署到您的 Fabric 网络
连接 Fabric 网络
在开始使用 node-ledger-client 之前,您需要使用它来连接您的 Fabric 网络。这可以通过以下步骤完成:
首先,您需要获取您的 Fabric 网络的连接文件。这包括了您的网络的 IP 地址,TLS 证书以及 CA 证书。
接下来,您需要使用
createConnectionProfile
函数来创建一个连接文件:----- - ------- - - -------------------------- ----- - ----------------------- - - ------------------------------ -------- ------------ - ----- ------------------- - -- ---- ------ --------- ---- ----- --------------------- - -- ---- ---------- ------- ---- ----- ------ - ----- ------------------------------------------------- ----- ----------------- - ------------------------ ---------------------- ------------ -- ---- ------- ---- ---------- -- ---- ----- --- -- ------ -- ------ ------------------ -
在上述代码中,您需要将
walletDirectoryPath
替换为您的钱包目录路径,并将connectionProfilePath
替换为您的 Fabric 网络的连接文件路径。如果您的网络配置文件位于文件系统中,则可以使用createFileBasedConnectionProfile
函数,以避免使用fs
模块来读取文件。通过使用
Gateway
类,您可以打开一个 Fabric 网络的通道,以便与网络进行交互。下面是一个使用Gateway
类连接 Fabric 网络的示例:----- - ------- - - -------------------------- ----- -------- ------------ - ----- ----------------- - ----- ------------- ----- ------- - --- ---------- ----- ---------------------------------- - ------- ------------------------------ --------- -- ---- -------- --- ------ -------- -
在上述代码中,您需要将
identity
参数替换为您作为 Fabric 网络的一员的身份信息。现在,您已经连接到 Fabric 网络以及一个通道(在上述示例中为
mychannel
),您可以通过使用getNetwork
函数从通道中获得网络对象:----- -------- ------------ - ----- ------- - ----- ------------- ----- ------- - ----- -------------------------------- ------ -------- -
交互与链码
一旦您已经连上 Fabric 网络,您可以使用 getContract
函数从网络中获取一个链码对象,以便与其进行交互。
在本例子中,我们使用了名为 basic
的链码,其中定义了一个名为 put
的函数,用于向账本中写入键值对。我们将会向账本中添加一个键为 “foo”、值为 “bar” 的键值对。
下面是一个使用 getContract
函数获取链码对象的示例:
----- -------- ------------- - ----- ------- - ----- ------------- ----- -------- - ----------------------------- ------ --------- -
使用 getContract
函数,您可以调用链码中的函数。在本例子中,我们可以通过以下步骤调用 put
函数:
首先,您需要使用 JSON 格式制定该函数的参数:
----- ---- - ------- -------
使用
submitTransaction
函数将函数的请求发送至链码:----- -------- ------ - ----- -------- - ----- -------------- ----- --------------------------------- --------- -
在上述示例中,我们使用
submitTransaction
函数将函数的请求发送至链码。您还可以使用evaluateTransaction
函数查询链码,该函数返回一个只读的事务,因此它不会在账本上提交任何更改。
完整实例
下面是一个使用 node-ledger-client 连接 Fabric 网络并向账本中添加键值对的完整示例:
----- - ------- - - -------------------------- ----- - ----------------------- - - ------------------------------ ----- - ------- - - -------------------------- ----- -------- ------------ - ----- ------------------- - -- ---- ------ --------- ---- ----- --------------------- - -- ---- ---------- ------- ---- ----- ------ - ----- ------------------------------------------------- ----- ----------------- - ------------------------ ---------------------- ------------ -- ---- ------- ---- ---------- -- ---- ----- --- -- ------ -- ------ ------------------ - ----- -------- ------------ - ----- ----------------- - ----- ------------- ----- ------- - --- ---------- ----- ---------------------------------- - ------- ------------------------------ --------- -- ---- -------- --- ------ -------- - ----- -------- ------------ - ----- ------- - ----- ------------- ----- ------- - ----- -------------------------------- ------ -------- - ----- -------- ------------- - ----- ------- - ----- ------------- ----- -------- - ----------------------------- ------ --------- - ----- -------- ------ - ----- ---- - ------- ------- ----- -------- - ----- -------------- ----- --------------------------------- --------- ------------------------- ----- -- --- ---------- - -------
运行以上代码,您将向账本中添加键为 “foo”、值为 “bar” 的键值对。
结论
通过使用 node-ledger-client 客户端,您可以轻松地与 Fabric 网络进行交互。在本教程中,我们学习了如何连接 Fabric 网络,从中获得链码对象,并向账本中添加一个键值对。然而,这些仅仅是 node-ledger-client 所能实现的事情的一小部分。您可以使用它来查询、修改账本,以及查询区块链上的交易记录。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/600668f8d9381d61a3540f6c