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

二进制吟游诗人
• 阅读 2206

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

学习目标

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

先决条件

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

如果你使用的是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.开始

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

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

2.创建一个新的智能合约项目

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

要创建智能合约项目:

  • 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.修改智能合约

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

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.打包智能合约

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

现在你已经创建了智能合约并了解了你已定义的功能,现在可以将其打包,以便你可以将其安装在节点设备上。

使用Shift+CMD+P打开命令pallete并选择包智能合约。在左侧边栏中,单击IBM Blockchain Platform图标(它看起来像一个正方形)。在左上角,你将看到所有智能合约包。如果一切顺利,你应该看到demoContract@0.0.1

5.安装智能合约

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

好的,你已经完成超过一半了。现在是有趣的部分!让我们在节点上安装这份合约!为此,你必须首先连接到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.实例化智能合约

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

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

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

扩展将执行一些工作,然后在右下角,你应该看到合约已成功实例化。万岁!

7.导出连接详细信息

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

此时,你需要开始与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和IBM Hyperledger Fabric 区块链扩展开发智能合约

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

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

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

9.更新智能合约

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

在上一步中,你使用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.提交更多交易

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

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

  • 1.接下来,展开demoContract@0.0.2以查看已更新智能合约my-contract.js的函数,即instantiateaddMemberquery
  • 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.查询分类帐

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

而现在,你们一直都在等待...让我们真正看到写在分类账上的内容!为此,我们将使用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.测试合约

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

测试功能是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区块链扩展开发智能合约

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Stella981 Stella981
3年前
Fabric链码开发的8个原则
我相信智能合约(链码)是HyperledgerFabric区块链网络的核心。正确开发链码可以真正发挥一个安全区块链的优势,反之则会带来灾难性的后果。在这篇文章里我不打算探讨HyperledgerFabric链码设计的特定模式的好与坏,而是希望分享我在开发若干HyperledgerFabric概念验证应用过程中总结的一些基本准则。Hyperled
Stella981 Stella981
3年前
Hyperledger Explorer官方安装文档中文版
HyperledgerExplorer是一个简单易用的开源工具,可以用于监视区块链网络中的活动。HyperledgerExplorer支持Fabric、Iroha等多种区块链,可以运行在MocOS和Ubuntu下。HyperledgerFabric区块链开发教程:Fabric区块链Node.js开发详解(https://
Stella981 Stella981
3年前
Fabric多通道网络实战
HyperledgerFabric支持在一组相同的机构之间的多通道部署,每个通道都相当于一个单独的区块链。Fabric的多通道特性不仅可以满足机构之间不同的数据共享需求,同时也可以提高整个Fabric网络的吞吐量。本文将演示如何使用HyperledgerFabric1.4.3搭建一个多通道的区块链网络、部署并访问链码。1、HyperledgerF
Stella981 Stella981
3年前
Hyperledger Caliper
在这个教程中,我们将学习如何使用HyperledgerCaliper对包含多个排序节点的Fabric网络进行基准测试,我们使用DockerSwarm作为容器编排工具。HyperledgerFabric区块链开发教程:Fabric区块链Node.js开发详解(https://www.oschina.net/action/G
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
NEO从源码分析看UTXO交易
_0x00前言_社区大佬:“交易是操作区块链的唯一方式。”_0x01交易类型_在NEO中,几乎除了共识之外的所有的对区块链的操作都是一种“交易”,甚至在“交易”面前,合约都只是一个小弟。交易类型的定义在Core中的TransactionType中:源码位置:neo/Core/TransactionType
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这