您好,登录后才能下订单哦!
这篇文章主要介绍了如何使用Hyperledger Fabric和VSCode的IBM区块链扩展开发智能合约,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
你需要安装以下内容才能使用扩展程序:
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.测试合约
你需要做的第一件事是安装IBM Blockchain Platform VSCode扩展。为此,你需要安装最新版本的VSCode;要查看你是否拥有最新的VSCode扩展,请转到代码>检查更新(Code > Check for Updates)。如果此时VSCode崩溃(我遇到了),则可能意味着你没有最新版本。如果你的VSCode崩溃,请查看下面的故障排除部分。否则,请更新你的VSCode,完成后,单击屏幕左侧边栏中的扩展名。在顶部,在扩展市场中搜索IBM Blockchain Platform。单击Install,然后单击reload。现在你应该全部使用扩展!
要创建智能合约项目:
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
文件以查看智能合约代码框架。不错的工作!
在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
,然后返回该对象。保存文件然后继续!
现在你已经创建了智能合约并了解了你已定义的功能,现在可以将其打包,以便你可以将其安装在节点设备上。
使用Shift+CMD+P
打开命令pallete
并选择包智能合约。在左侧边栏中,单击IBM Blockchain Platform图标(它看起来像一个正方形)。在左上角,你将看到所有智能合约包。如果一切顺利,你应该看到demoContract@0.0.1
。
好的,你已经完成超过一半了。现在是有趣的部分!让我们在节点上安装这份合约!为此,你必须首先连接到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
上就是这样!不错的工作!
这是真正的考验,你的智能合约是否会正确实例化?我们来看看......
1.在智能合约Smart Contracts
下,你将看到一个显示实例化的部分。单击实例化+ Instantiate
。
2.然后,扩展将询问你在哪个频道实例化智能合约,选择mychannel
。
3.然后,扩展将询问你实例化哪个合约和版本,选择demoContract@0.0.1
。
4.然后,扩展将询问你要调用哪个函数,输入instantiate
。
5.接下来,它会询问你的参数。没有,所以只需按回车即可。
扩展将执行一些工作,然后在右下角,你应该看到合约已成功实例化。万岁!
此时,你需要开始与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
好的,所以你已经实例化你的合约,把我们的密钥输出到我们的钱包里,那么现在呢? 那么,现在是时候实际调用智能合约中的功能了!为此,你可以使用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网络提交了一笔交易,并更新了分类帐!
在上一步中,你使用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
。
现在你已经更新了智能合约,请在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
不错的工作。 我们差不多完成了!
而现在,你们一直都在等待...让我们真正看到写在分类账上的内容!为此,我们将使用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的数据外,输出应该类似于上面的输出。
测试功能是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区块链扩展开发智能合约”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。