用VSCode和IBM Hyperledger Fabric 区块链扩展开发智能合约

22次阅读

共计 9561 个字符,预计需要花费 24 分钟才能阅读完成。

了解使用 IBM Blockchain Platform 的 VSCode 扩展来简化开发,测试和部署智能合约的过程。完成本教程后,你将了解如何使用 VSCode 在本地 Hyperledger Fabric 网络上快速开发,演示和部署区块链应用程序。本教程假设你对 Hyperledger Fabric 有一些基本的了解。
学习目标

安装 IBM Blockchain Platform VSCode 扩展。
创建一个新的 JavaScript 智能合约。
打包智能合约。
创建,探索和了解 Hyperledger Fabric 网络。
在本地 Hyperledger Fabric 实例上部署智能合约。
使用 Node.js SDK 与已部署的智能合约包进行交互。

先决条件
你需要安装以下内容才能使用扩展程序:

node v8.x 或更高版本以及 npm v5.x 或更高版本。

Yeoman(yo) v2.x。

Docker 版本 v17.06.2-ce 或更高版本。

Docker Compose v1.14.0 或更高版本。

VSCode 1.28.2 或更高版本。

如果你使用的是 Windows,则还必须确保以下内容:

你的 Windows 版本支持 Hyper- V 和 Docker:
Windows 10 Enterprise,Pro 或具有 1607 Anniversary 更新或更高版本的教育版。

Docker for Windows 配置为使用 Linux 容器(这是默认设置)。
你已经从 windows-build-tools 安装了适用于 Windows 的 C ++ Build Tools。

你已从 Win32 OpenSSL 安装了 OpenSSL v1.0.2

安装正常版本,而不是标记为 light 的版本。
在 32 位系统上将 Win32 版本安装到 C:OpenSSL-Win32 中。
在 64 位系统上将 Win64 版本安装到 C:OpenSSL-Win64 中。

你可以通过从终端运行以下命令来检查已安装的版本:

node –version
npm –version
yo –version
docker –version
docker-compose –version

预计的时间
安装必备组件后,大约需要 30-45 分钟才能完成。
步骤:

1. 开始
2. 创建一个新的智能合约项目
3. 修改智能合约
4. 打包智能合约
5. 安装智能合约
6. 实例化智能合约
7. 导出连接详细信息
8. 提交交易
9. 更新智能合约
10. 提交更多交易
11. 查询分类帐
12. 测试合约

1. 开始

你需要做的第一件事是安装 IBM Blockchain Platform VSCode 扩展。为此,你需要安装最新版本的 VSCode;要查看你是否拥有最新的 VSCode 扩展,请转到代码 > 检查更新(Code > Check for Updates)。如果此时 VSCode 崩溃(我遇到了),则可能意味着你没有最新版本。如果你的 VSCode 崩溃,请查看下面的故障排除部分。否则,请更新你的 VSCode,完成后,单击屏幕左侧边栏中的扩展名。在顶部,在扩展市场中搜索 IBM Blockchain Platform。单击 Install,然后单击 reload。现在你应该全部使用扩展!
2. 创建一个新的智能合约项目

要创建智能合约项目:

1. 单击新下载的 IBM Blockchain Platform 扩展。它应该是左侧边栏底部的一直延伸。
2. 接下来,使用键盘快捷键 Shift+CMD+ P 调出命令 pallete。从下拉列表中选择 IBM Blockchain Platform:Create Smart Contract Project。
3. 点击下拉列表中的 JavaScript。
4. 单击新建文件夹 New Folder,然后将项目命名为所需名称。我将我的名字命名为 demoContract。
5. 单击创建 Creat,然后 Open 刚刚创建的新文件夹。接下来,从下拉列表中单击添加到工作区 Add to WrokSpace。
6. 完成扩展打包合约后,你可以打开 lib/my-contract.js 文件以查看智能合约代码框架。不错的工作!

3. 修改智能合约

在 lib/my-contract.js 文件中,继续复制并粘贴以下代码:
‘use strict’;

const {Contract} = require(‘fabric-contract-api’);

class MyContract extends Contract {

//update ledger with a greeting to show that the function was called
async instantiate(ctx) {
let greeting = {text: ‘Instantiate was called!’};
await ctx.stub.putState(‘GREETING’, Buffer.from(JSON.stringify(greeting)));
}

//take argument and create a greeting object to be updated to the ledger
async transaction1(ctx, arg1) {
console.info(‘transaction1’, arg1);
let greeting = {text: arg1};
await ctx.stub.putState(‘GREETING’, Buffer.from(JSON.stringify(greeting)));
return JSON.stringify(greeting);
}

}

module.exports = MyContract;
注意:.gifs 可能与上面的智能合约不完全匹配,但这是你现在应该在 lib/my-contract.js 文件中应该拥有的那个!
让我们来看看你刚刚定义的函数。实例化函数创建一个 greeting 对象,然后使用密钥 GREETING 将其存储在分类帐中。transaction1 函数采用 Hyperledger Fabric 上下文和一个参数 arg1,该参数用于存储用户定义的问候语。ctx.stub.putState 方法用于记录分类帐上的 greeting,然后返回该对象。保存文件然后继续!
4. 打包智能合约

现在你已经创建了智能合约并了解了你已定义的功能,现在可以将其打包,以便你可以将其安装在节点设备上。
使用 Shift+CMD+ P 打开命令 pallete 并选择包智能合约。在左侧边栏中,单击 IBM Blockchain Platform 图标(它看起来像一个正方形)。在左上角,你将看到所有智能合约包。如果一切顺利,你应该看到 demoContract@0.0.1。
5. 安装智能合约

好的,你已经完成超过一半了。现在是有趣的部分!让我们在节点上安装这份合约!为此,你必须首先连接到 Hyperledger Fabric 网络。VSCode 扩展附带的网络非常适合开发,它为开发和测试合约提供了最少的资源占用。
以下 Docker 容器在本地计算机上启动,每个容器在网络中具有不同的角色:Orderer,Certificate Authority,CouchDB 和 Peer。
要启动网络,请单击编辑器左侧的 IBM Blockchain Platform 扩展。这是一个看起来像正方形的图标。
1. 单击扩展后,你应该在编辑器的左侧看到 LOCAL FABRIC OPS。在 LOCAL FABRIC OPS 右侧,你应该看到一个三点符号。单击该按钮,然后单击启动 Fabric 运行时 Start Fabric Runtime。
你的扩展程序现在将提供将充当网络中节点的 Docker 容器。配置完成后,你应该会看到 LOCAL FABRIC OPS 下的智能合约 Smart Contracts 部分。

2. 在智能合约 Smart Contracts 下,单击 +install。
3. 接下来,扩展程序将询问你在哪个节点上安装智能合约。选择 peer0.org1.examplee.com。
4. 扩展程序将询问你要安装哪个软件包:选择 demoContract@0.0.1。如果一切顺利,你应该会在右下角看到通知:已成功安装在节点 peer0.org1.example.com 上就是这样!不错的工作!

6. 实例化智能合约

这是真正的考验,你的智能合约是否会正确实例化?我们来看看 ……

1. 在智能合约 Smart Contracts 下,你将看到一个显示实例化的部分。单击实例化 + Instantiate。
2. 然后,扩展将询问你在哪个频道实例化智能合约,选择 mychannel。
3. 然后,扩展将询问你实例化哪个合约和版本,选择 demoContract@0.0.1。
4. 然后,扩展将询问你要调用哪个函数,输入 instantiate。
5. 接下来,它会询问你的参数。没有,所以只需按回车即可。

扩展将执行一些工作,然后在右下角,你应该看到合约已成功实例化。万岁!
7. 导出连接详细信息

此时,你需要开始与 Fabric 实例进行更密切的交互。你需要向证书颁发机构证明你可以在网络上创建数字身份。这是通过向证书颁发机构显示你的证书和私钥来完成的。
1. 在本教程的后面,我们将查询网络。为此,我们需要一些脚本。在你的智能合约目录之外克隆此 Github Repo,以获取查询网络所需的必要脚本。
$ git clone https://github.com/horeaporutiu/VSCodeTutorialBlockchain.git

2. 右键单击 VSCode 中智能合约目录下的空白区域,然后选择将文件夹添加到工作区 Add folder to workspace,将此文件夹导入 VSCode 工作区。找到最近克隆的文件夹 VSCodeTutorialBlockchain 并双击它。
3. 在 VSCode 中,单击左侧栏中的 IBM Blockchain Platform 扩展。
4. 在 LOCAL FABRIC OPS 下点击 Nodes。右键单击 peer0.org1.example.com 节点。选择导出连接细节 Export Connection Details。
5. 扩展程序将询问将连接配置文件保存到哪个文件夹。选择 VSCodeTutorialBlockchain 目录。

如果一切顺利,你应该看到类似的东西:
Successfully exported connection details to
/Users/Horea.Porutiu@ibm.com/Workdir/VSCodeTutorialBlockchain/local_fabric
8. 提交交易

好的,所以你已经实例化你的合约,把我们的密钥输出到我们的钱包里,那么现在呢?那么,现在是时候实际调用智能合约中的功能了!为此,你可以使用 VSCode 扩展。

1. 在 LOCAL FABRIC OPS 下你应该看到 FABRIC GATEWAYS。
2. 单击 local_fabric,然后单击 Admin@org1.example.com。
3. 如果一切顺利,你应该会看到一条通知,其中显示正在连接到 fabricConnecting to local_fabric。
4. 接下来,在 FABRIC GATEWAYS 和 Channels 下你应该看到我的 mychannel。单击以展开它。然后展开 demoContract@0.0.1。你应该看到两个函数,instantiate 和 transaction1。
5. 右键单击 transaction1,然后选择提交交易 submit transaction。对于参数,请输入 ’hello’。

不错的工作!你刚刚成功向 Fabric 网络提交了一笔交易,并更新了分类帐!
9. 更新智能合约

在上一步中,你使用 putState API 更新了分类帐,并传入了密钥和值。key 恰好是 greeting,值也赋予了对象。
{
text: ‘hello’
}
你应该学习的最后一件事是如何查询,如何从分类帐中检索数据。你将通过使用 getState API 执行此操作,该 API 接收密钥并返回与该密钥关联的值(如果找到它)。
让我们为 demoContract 添加一个查询功能。
1. 将以下代码复制并粘贴到 lib/my-contract.js 文件中:
‘use strict’;

const {Contract} = require(‘fabric-contract-api’);

class MyContract extends Contract {

//update ledger with a greeting
async instantiate(ctx) {
let greeting = {text: ‘Instantiate was called!’};
await ctx.stub.putState(‘GREETING’, Buffer.from(JSON.stringify(greeting)));
}

//add a member along with their email, name, address, and number
该代码添加了一个 addMember 函数,该函数接收来自用户的参数,如电子邮件,姓名,地址和电话号码,并将该数据作为键值对保存在分类帐中。
此代码还添加了查询功能; 这个函数接受一个参数,这是查找的关键。该函数返回与给定键关联的值(如果有)。
2. 更新 package.json 文件,使包含版本号的第 3 行现在读取:
“version”: “0.0.2”,
保存文件。

3. 要在 LOCAL FABRIC OPS 下将你现有的智能合约升级到新版本。展开实例化,直到你看到 demoContract@0.0.1。接下来,右键单击 demoContract 并选择 Upgrade Smart Contract。
4. 扩展程序将询问使用哪个版本执行升级。选择 demoContract。
5. 扩展程序将询问哪个节点安装智能合约,请选择 peer0.org1.example.com。
6. 扩展程序将询问要调用的函数。输入实例化 instantiate。
7. 扩展名将询问要传递的参数。将其留空,然后按 Enter 键。经过一些繁重的计算(以及一点点时间),如果一切顺利,你应该在右下角收到一条通知说成功升级智能合约 Successfully upgraded smart contract。

10. 提交更多交易

现在你已经更新了智能合约,请在 FABRIC GATEWAYS 下查看并展开频道 Channels。接下来,展开 mychannel,你应该看到 demoContract@0.0.2。

1. 接下来,展开 demoContract@0.0.2 以查看已更新智能合约 my-contract.js 的函数,即 instantiate,addMember 和 query。
2. 右键单击 addMember,然后单击 Submit Transaction。对于参数,请复制并粘贴以下内容:

ginny@ibm.com, Ginny Rometty, Wall Street NY, 1234567890
在输出中,你应该看到以下内容:
Submitting transaction addMember with args Ginny Rometty, Wall Street NY, 1234567890, ginny@ibm.com
让我们再添加一个成员,重复此步骤,但是对于参数,请复制并粘贴以下内容:
arvind@ibm.com, Arvind Krishna, Broadway Street NY, 1231231111
不错的工作。我们差不多完成了!
11. 查询分类帐

而现在,你们一直都在等待 … 让我们真正看到写在分类账上的内容!为此,我们将使用 VSCodeTutorialBlockchain 文件夹中的 query.js 文件。
1. 查看 VSCodeTutorialBlockchain 目录中的 query.js 文件。它与 invoke.js 文件非常相似,只是它有一个主要区别:
let response = await contract.evaluateTransaction(‘query’, ‘GREETING’);
主要区别在于,在此文件中,你将使用 evaluateTransaction API,它不会将交易发送到 ordering 服务。因此,它不会更新分类帐。这是非常重要的。在 invoke.js 文件中,你将交易提交到 ordering 服务,这些交易都将写入分类帐,但在 query.js 文件中,你不会更新分类帐。
2. 使用 VSCode 中的终端导航到 VSCodeTutorialBlockchain 文件夹。从那里,使用以下命令安装所需的依赖项:
VSCodeTutorialBlockchain $ npm install
3. 接下来,使用以下命令运行 query.js:
VSCodeTutorialBlockchain$ node query.js
你应该看到下面的输出:
Connected to Fabric gateway.
{text: ‘Instantiate was called!’}
Disconnect from Fabric gateway.
done
4. 接下来,查询 Ginny Rometty。更改以下行:
let response = await contract.evaluateTransaction(‘query’, ‘GREETING’);
对此:
let response = await contract.evaluateTransaction(‘query’, ‘ginny@ibm.com’);
你应该看到下面的输出:
VSCodeTutorialBlockchain$ node query.js
Connected to Fabric gateway.
{“address”:” Wall Street NY”,”email”:”ginny@ibm.com”,”name”:” Ginny Rometty”,”number”:” 1234567890″}
Disconnect from Fabric gateway.
done
5. 最后,查询 Arvind。修改请求如下:
let response = await contract.evaluateTransaction(‘query’, ‘arvind@ibm.com’);
除了 Arvind 的数据外,输出应该类似于上面的输出。
12. 测试合约

测试功能是 IBM Blockchain 扩展的一项功能,可以通过 UI 完成。单击左侧的 IBM Blockchain Platform 扩展图标。
在 FABRIC GATEWAYS 下,在频道 Channels 下展开 mychannel,右键单击最新的智能合约 demoContract@0.0.2,然后选择 Generate Smart Contract Tests。
扩展程序将询问你生成测试文件的语言。选择 JavaScript。
生成测试完成扩展后,你可以从 demoContract 目录运行 npm test,也可以从 MyContract-demoContract@0.0.2.test.js 文件中单击 VSCode UI 中的运行测试按钮,如 gif 所示。
总结
干得好!你学习了如何使用 Hyperledger 的最新 API 创建,打包,安装,实例化和调用智能合约。此时,你可以专注于开发智能合约并更新 my-contract.js 文件,因为你知道已经处理了区块链的网络方面。你还可以使用 VSCode,Node.js 和 Docker 成功调用和更新分类帐。如果有错误,请拜托我,请对这篇文章发表评论,我会修复它们。非常感谢你阅读本教程。我希望你喜欢它!Horea Blockchain 出来了!
======================================================================
分享一些比特币、以太坊、EOS、Fabric 等区块链相关的交互式在线编程实战教程:

java 比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与 UTXO 等,同时也详细讲解如何在 Java 代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是 Java 工程师不可多得的比特币开发学习课程。

php 比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与 UTXO 等,同时也详细讲解如何在 Php 代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是 Php 工程师不可多得的比特币开发学习课程。

c#比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与 UTXO 等,同时也详细讲解如何在 C#代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是 C# 工程师不可多得的比特币开发学习课程。

java 以太坊开发教程,主要是针对 java 和 android 程序员进行区块链以太坊开发的 web3j 详解。

python 以太坊,主要是针对 python 工程师使用 web3.py 进行区块链以太坊开发的详解。

php 以太坊,主要是介绍使用 php 进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和交易等内容。

以太坊入门教程,主要介绍智能合约与 dapp 应用开发,适合入门。

以太坊开发进阶教程,主要是介绍使用 node.js、mongodb、区块链、ipfs 实现去中心化电商 DApp 实战,适合进阶。

ERC721 以太坊通证实战,课程以一个数字艺术品创作与分享 DApp 的实战开发为主线,深入讲解以太坊非同质化通证的概念、标准与开发方案。内容包含 ERC-721 标准的自主实现,讲解 OpenZeppelin 合约代码库二次开发,实战项目采用 Truffle,IPFS,实现了通证以及去中心化的通证交易所。

C#以太坊,主要讲解如何使用 C# 开发基于.Net 的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和交易等。

EOS 入门教程,本课程帮助你快速入门 EOS 区块链去中心化应用的开发,内容涵盖 EOS 工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签 DApp 的开发。

深入浅出玩转 EOS 钱包开发,本课程以手机 EOS 钱包的完整开发过程为主线,深入学习 EOS 区块链应用开发,课程内容即涵盖账户、计算资源、智能合约、动作与交易等 EOS 区块链的核心概念,同时也讲解如何使用 eosjs 和 eosjs-ecc 开发包访问 EOS 区块链,以及如何在 React 前端应用中集成对 EOS 区块链的支持。课程内容深入浅出,非常适合前端工程师深入学习 EOS 区块链应用开发。

Hyperledger Fabric 区块链开发详解,本课程面向初学者,内容即包含 Hyperledger Fabric 的身份证书与 MSP 服务、权限策略、信道配置与启动、链码通信接口等核心概念,也包含 Fabric 网络设计、nodejs 链码与应用开发的操作实践,是 Nodejs 工程师学习 Fabric 区块链开发的最佳选择。

Hyperledger Fabric java 区块链开发详解,课程面向初学者,内容即包含 Hyperledger Fabric 的身份证书与 MSP 服务、权限策略、信道配置与启动、链码通信接口等核心概念,也包含 Fabric 网络设计、java 链码与应用开发的操作实践,是 java 工程师学习 Fabric 区块链开发的最佳选择。

tendermint 区块链开发详解,本课程适合希望使用 tendermint 进行区块链开发的工程师,课程内容即包括 tendermint 应用开发模型中的核心概念,例如 ABCI 接口、默克尔树、多版本状态库等,也包括代币发行等丰富的实操代码,是 go 语言工程师快速入门区块链开发的最佳选择。

汇智网原创翻译,转载请标明出处。这里是 Hyperledger Fabric 和 VSCode 的 IBM 区块链扩展开发智能合约

正文完
 0