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

发布时间:2021-12-07 09:23:40 作者:小新
来源:亿速云 阅读:352

这篇文章主要介绍了如何使用Hyperledger Fabric和VSCode的IBM区块链扩展开发智能合约,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

先决条件

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

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

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

预计的时间

安装必备组件后,大约需要30-45分钟才能完成。

步骤:

1.开始

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

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

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

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

要创建智能合约项目:

3.修改智能合约

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

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

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

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

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

5.安装智能合约

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

好的,你已经完成超过一半了。现在是有趣的部分!让我们在节点上安装这份合约!为此,你必须首先连接到Hyperledger Fabric网络。VSCode扩展附带的网络非常适合开发,它为开发和测试合约提供了最少的资源占用。

以下Docker容器在本地计算机上启动,每个容器在网络中具有不同的角色:Orderer,Certificate Authority,CouchDB和Peer。

要启动网络,请单击编辑器左侧的IBM Blockchain Platform扩展。这是一个看起来像正方形的图标。

你的扩展程序现在将提供将充当网络中节点的Docker容器。配置完成后,你应该会看到LOCAL FABRIC OPS下的智能合约Smart Contracts部分。

6.实例化智能合约

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

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

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

7.导出连接详细信息

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

此时,你需要开始与Fabric实例进行更密切的交互。你需要向证书颁发机构证明你可以在网络上创建数字身份。这是通过向证书颁发机构显示你的证书和私钥来完成的。

$ git clone https://github.com/horeaporutiu/VSCodeTutorialBlockchain.git

如果一切顺利,你应该看到类似的东西:

Successfully exported connection details to 
/Users/Horea.Porutiu@ibm.com/Workdir/VSCodeTutorialBlockchain/local_fabric
8.提交交易

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

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

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

9.更新智能合约

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

在上一步中,你使用putState API更新了分类帐,并传入了密钥和值。key恰好是greeting,值也赋予了对象。

{
  text: 'hello'
}

你应该学习的最后一件事是如何查询,如何从分类帐中检索数据。你将通过使用getState API执行此操作,该API接收密钥并返回与该密钥关联的值(如果找到它)。

让我们为demoContract添加一个查询功能。

'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函数,该函数接收来自用户的参数,如电子邮件,姓名,地址和电话号码,并将该数据作为键值对保存在分类帐中。

此代码还添加了查询功能; 这个函数接受一个参数,这是查找的关键。该函数返回与给定键关联的值(如果有)。

  "version": "0.0.2",

保存文件。

10.提交更多交易

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

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

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.查询分类帐

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

而现在,你们一直都在等待...让我们真正看到写在分类账上的内容!为此,我们将使用VSCodeTutorialBlockchain文件夹中的query.js文件。

let response = await contract.evaluateTransaction('query', 'GREETING');

主要区别在于,在此文件中,你将使用evaluateTransaction API,它不会将交易发送到ordering服务。因此,它不会更新分类帐。这是非常重要的。在invoke.js文件中,你将交易提交到ordering服务,这些交易都将写入分类帐,但在query.js文件中,你不会更新分类帐。

VSCodeTutorialBlockchain $ npm install
VSCodeTutorialBlockchain$ node query.js

你应该看到下面的输出:

Connected to Fabric gateway.
{ text: 'Instantiate was called!' }
Disconnect from Fabric gateway.
done
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
let response = await contract.evaluateTransaction('query', 'arvind@ibm.com');

除了Arvind的数据外,输出应该类似于上面的输出。

12.测试合约

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

测试功能是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 Fabric和VSCode的IBM区块链扩展开发智能合约”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!

推荐阅读:
  1. Hyperledger Fabric能否大规模运行?
  2. 如何编写一个企业级Hyperledger Fabric开源框架

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

vscode fabric hyperledger fabric

上一篇:区块链溯源解决的问题是怎么样的

下一篇:Hyperledger fabric Chaincode开发的示例分析

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》