溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何使用Hyperledger Fabric和VSCode的IBM區(qū)塊鏈擴(kuò)展開發(fā)智能合約

發(fā)布時(shí)間:2021-12-07 09:23:40 來源:億速云 閱讀:343 作者:小新 欄目:互聯(lián)網(wǎng)科技

這篇文章主要介紹了如何使用Hyperledger Fabric和VSCode的IBM區(qū)塊鏈擴(kuò)展開發(fā)智能合約,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

先決條件

你需要安裝以下內(nèi)容才能使用擴(kuò)展程序:

  • 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,則還必須確保以下內(nèi)容:

  • 你的Windows版本支持Hyper-V和Docker:

  • Windows 10 Enterprise,Pro或具有1607 Anniversary更新或更高版本的教育版。

  • Docker for Windows配置為使用Linux容器(這是默認(rèn)設(shè)置)。

  • 你已經(jīng)從windows-build-tools安裝了適用于Windows的C ++ Build Tools。

  • 你已從Win32 OpenSSL安裝了OpenSSL v1.0.2

  • 安裝正常版本,而不是標(biāo)記為light的版本。

  • 在32位系統(tǒng)上將Win32版本安裝到C:\OpenSSL-Win32中。

  • 在64位系統(tǒng)上將Win64版本安裝到C:\OpenSSL-Win64中。

你可以通過從終端運(yùn)行以下命令來檢查已安裝的版本:

  • node --version

  • npm --version

  • yo --version

  • docker --version

  • docker-compose --version

預(yù)計(jì)的時(shí)間

安裝必備組件后,大約需要30-45分鐘才能完成。

步驟:

  • 1.開始

  • 2.創(chuàng)建一個(gè)新的智能合約項(xiàng)目

  • 3.修改智能合約

  • 4.打包智能合約

  • 5.安裝智能合約

  • 6.實(shí)例化智能合約

  • 7.導(dǎo)出連接詳細(xì)信息

  • 8.提交交易

  • 9.更新智能合約

  • 10.提交更多交易

  • 11.查詢分類帳

  • 12.測試合約

1.開始

如何使用Hyperledger Fabric和VSCode的IBM區(qū)塊鏈擴(kuò)展開發(fā)智能合約

你需要做的第一件事是安裝IBM Blockchain Platform VSCode擴(kuò)展。為此,你需要安裝最新版本的VSCode;要查看你是否擁有最新的VSCode擴(kuò)展,請轉(zhuǎn)到代碼>檢查更新(Code > Check for Updates)。如果此時(shí)VSCode崩潰(我遇到了),則可能意味著你沒有最新版本。如果你的VSCode崩潰,請查看下面的故障排除部分。否則,請更新你的VSCode,完成后,單擊屏幕左側(cè)邊欄中的擴(kuò)展名。在頂部,在擴(kuò)展市場中搜索IBM Blockchain Platform。單擊Install,然后單擊reload?,F(xiàn)在你應(yīng)該全部使用擴(kuò)展!

2.創(chuàng)建一個(gè)新的智能合約項(xiàng)目

如何使用Hyperledger Fabric和VSCode的IBM區(qū)塊鏈擴(kuò)展開發(fā)智能合約

要?jiǎng)?chuàng)建智能合約項(xiàng)目:

  • 1.單擊新下載的IBM Blockchain Platform擴(kuò)展。它應(yīng)該是左側(cè)邊欄底部的一直延伸。

  • 2.接下來,使用鍵盤快捷鍵Shift+CMD+P調(diào)出命令pallete。從下拉列表中選擇IBM Blockchain Platform:Create Smart Contract Project。

  • 3.點(diǎn)擊下拉列表中的JavaScript。

  • 4.單擊新建文件夾New Folder,然后將項(xiàng)目命名為所需名稱。我將我的名字命名為demoContract。

  • 5.單擊創(chuàng)建Creat,然后Open剛剛創(chuàng)建的新文件夾。接下來,從下拉列表中單擊添加到工作區(qū)Add to WrokSpace

  • 6.完成擴(kuò)展打包合約后,你可以打開lib/my-contract.js文件以查看智能合約代碼框架。不錯(cuò)的工作!

3.修改智能合約

如何使用Hyperledger Fabric和VSCode的IBM區(qū)塊鏈擴(kuò)展開發(fā)智能合約

lib/my-contract.js文件中,繼續(xù)復(fù)制并粘貼以下代碼:

'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可能與上面的智能合約不完全匹配,但這是你現(xiàn)在應(yīng)該在lib/my-contract.js文件中應(yīng)該擁有的那個(gè)!

讓我們來看看你剛剛定義的函數(shù)。實(shí)例化函數(shù)創(chuàng)建一個(gè)greeting對象,然后使用密鑰GREETING將其存儲在分類帳中。transaction1函數(shù)采用Hyperledger Fabric上下文和一個(gè)參數(shù)arg1,該參數(shù)用于存儲用戶定義的問候語。ctx.stub.putState方法用于記錄分類帳上的greeting,然后返回該對象。保存文件然后繼續(xù)!

4.打包智能合約

如何使用Hyperledger Fabric和VSCode的IBM區(qū)塊鏈擴(kuò)展開發(fā)智能合約

現(xiàn)在你已經(jīng)創(chuàng)建了智能合約并了解了你已定義的功能,現(xiàn)在可以將其打包,以便你可以將其安裝在節(jié)點(diǎn)設(shè)備上。

使用Shift+CMD+P打開命令pallete并選擇包智能合約。在左側(cè)邊欄中,單擊IBM Blockchain Platform圖標(biāo)(它看起來像一個(gè)正方形)。在左上角,你將看到所有智能合約包。如果一切順利,你應(yīng)該看到demoContract@0.0.1。

5.安裝智能合約

如何使用Hyperledger Fabric和VSCode的IBM區(qū)塊鏈擴(kuò)展開發(fā)智能合約

好的,你已經(jīng)完成超過一半了?,F(xiàn)在是有趣的部分!讓我們在節(jié)點(diǎn)上安裝這份合約!為此,你必須首先連接到Hyperledger Fabric網(wǎng)絡(luò)。VSCode擴(kuò)展附帶的網(wǎng)絡(luò)非常適合開發(fā),它為開發(fā)和測試合約提供了最少的資源占用。

以下Docker容器在本地計(jì)算機(jī)上啟動(dòng),每個(gè)容器在網(wǎng)絡(luò)中具有不同的角色:Orderer,Certificate Authority,CouchDB和Peer。

要啟動(dòng)網(wǎng)絡(luò),請單擊編輯器左側(cè)的IBM Blockchain Platform擴(kuò)展。這是一個(gè)看起來像正方形的圖標(biāo)。

  • 1.單擊擴(kuò)展后,你應(yīng)該在編輯器的左側(cè)看到LOCAL FABRIC OPS。在LOCAL FABRIC OPS右側(cè),你應(yīng)該看到一個(gè)三點(diǎn)符號。單擊該按鈕,然后單擊啟動(dòng)Fabric運(yùn)行時(shí)Start Fabric Runtime

你的擴(kuò)展程序現(xiàn)在將提供將充當(dāng)網(wǎng)絡(luò)中節(jié)點(diǎn)的Docker容器。配置完成后,你應(yīng)該會(huì)看到LOCAL FABRIC OPS下的智能合約Smart Contracts部分。

  • 2.在智能合約Smart Contracts下,單擊+install

  • 3.接下來,擴(kuò)展程序?qū)⒃儐柲阍谀膫€(gè)節(jié)點(diǎn)上安裝智能合約。選擇peer0.org1.examplee.com

  • 4.擴(kuò)展程序?qū)⒃儐柲阋惭b哪個(gè)軟件包:選擇demoContract@0.0.1。如果一切順利,你應(yīng)該會(huì)在右下角看到通知:已成功安裝在節(jié)點(diǎn)peer0.org1.example.com上就是這樣!不錯(cuò)的工作!

6.實(shí)例化智能合約

如何使用Hyperledger Fabric和VSCode的IBM區(qū)塊鏈擴(kuò)展開發(fā)智能合約

這是真正的考驗(yàn),你的智能合約是否會(huì)正確實(shí)例化?我們來看看......

  • 1.在智能合約Smart Contracts下,你將看到一個(gè)顯示實(shí)例化的部分。單擊實(shí)例化+ Instantiate。

  • 2.然后,擴(kuò)展將詢問你在哪個(gè)頻道實(shí)例化智能合約,選擇mychannel。

  • 3.然后,擴(kuò)展將詢問你實(shí)例化哪個(gè)合約和版本,選擇demoContract@0.0.1。

  • 4.然后,擴(kuò)展將詢問你要調(diào)用哪個(gè)函數(shù),輸入instantiate。

  • 5.接下來,它會(huì)詢問你的參數(shù)。沒有,所以只需按回車即可。

擴(kuò)展將執(zhí)行一些工作,然后在右下角,你應(yīng)該看到合約已成功實(shí)例化。萬歲!

7.導(dǎo)出連接詳細(xì)信息

如何使用Hyperledger Fabric和VSCode的IBM區(qū)塊鏈擴(kuò)展開發(fā)智能合約

此時(shí),你需要開始與Fabric實(shí)例進(jìn)行更密切的交互。你需要向證書頒發(fā)機(jī)構(gòu)證明你可以在網(wǎng)絡(luò)上創(chuàng)建數(shù)字身份。這是通過向證書頒發(fā)機(jī)構(gòu)顯示你的證書和私鑰來完成的。

  • 1.在本教程的后面,我們將查詢網(wǎng)絡(luò)。為此,我們需要一些腳本。在你的智能合約目錄之外克隆此Github Repo,以獲取查詢網(wǎng)絡(luò)所需的必要腳本。

$ git clone https://github.com/horeaporutiu/VSCodeTutorialBlockchain.git
  • 2.右鍵單擊VSCode中智能合約目錄下的空白區(qū)域,然后選擇將文件夾添加到工作區(qū)Add folder to workspace,將此文件夾導(dǎo)入VSCode工作區(qū)。找到最近克隆的文件夾VSCodeTutorialBlockchain并雙擊它。

  • 3.在VSCode中,單擊左側(cè)欄中的IBM Blockchain Platform擴(kuò)展。

  • 4.在LOCAL FABRIC OPS下點(diǎn)擊Nodes。右鍵單擊peer0.org1.example.com節(jié)點(diǎn)。選擇導(dǎo)出連接細(xì)節(jié)Export Connection Details

  • 5.擴(kuò)展程序?qū)⒃儐枌⑦B接配置文件保存到哪個(gè)文件夾。選擇VSCodeTutorialBlockchain目錄。

如果一切順利,你應(yīng)該看到類似的東西:

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

如何使用Hyperledger Fabric和VSCode的IBM區(qū)塊鏈擴(kuò)展開發(fā)智能合約

好的,所以你已經(jīng)實(shí)例化你的合約,把我們的密鑰輸出到我們的錢包里,那么現(xiàn)在呢? 那么,現(xiàn)在是時(shí)候?qū)嶋H調(diào)用智能合約中的功能了!為此,你可以使用VSCode擴(kuò)展。

  • 1.在LOCAL FABRIC OPS下你應(yīng)該看到FABRIC GATEWAYS

  • 2.單擊local_fabric,然后單擊Admin@org1.example.com。

  • 3.如果一切順利,你應(yīng)該會(huì)看到一條通知,其中顯示正在連接到fabricConnecting to local_fabric。

  • 4.接下來,在FABRIC GATEWAYSChannels下你應(yīng)該看到我的mychannel。單擊以展開它。然后展開demoContract@0.0.1。你應(yīng)該看到兩個(gè)函數(shù),instantiatetransaction1。

  • 5.右鍵單擊transaction1,然后選擇提交交易submit transaction。對于參數(shù),請輸入'hello'。

不錯(cuò)的工作!你剛剛成功向Fabric網(wǎng)絡(luò)提交了一筆交易,并更新了分類帳!

9.更新智能合約

如何使用Hyperledger Fabric和VSCode的IBM區(qū)塊鏈擴(kuò)展開發(fā)智能合約

在上一步中,你使用putState API更新了分類帳,并傳入了密鑰和值。key恰好是greeting,值也賦予了對象。

{
  text: 'hello'
}

你應(yīng)該學(xué)習(xí)的最后一件事是如何查詢,如何從分類帳中檢索數(shù)據(jù)。你將通過使用getState API執(zhí)行此操作,該API接收密鑰并返回與該密鑰關(guān)聯(lián)的值(如果找到它)。

讓我們?yōu)?code>demoContract添加一個(gè)查詢功能。

  • 1.將以下代碼復(fù)制并粘貼到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

該代碼添加了一個(gè)addMember函數(shù),該函數(shù)接收來自用戶的參數(shù),如電子郵件,姓名,地址和電話號碼,并將該數(shù)據(jù)作為鍵值對保存在分類帳中。

此代碼還添加了查詢功能; 這個(gè)函數(shù)接受一個(gè)參數(shù),這是查找的關(guān)鍵。該函數(shù)返回與給定鍵關(guān)聯(lián)的值(如果有)。

  • 2.更新package.json文件,使包含版本號的第3行現(xiàn)在讀?。?/p>

  "version": "0.0.2",

保存文件。

  • 3.要在LOCAL FABRIC OPS下將你現(xiàn)有的智能合約升級到新版本。展開實(shí)例化,直到你看到demoContract@0.0.1。接下來,右鍵單擊demoContract并選擇Upgrade Smart Contract。

  • 4.擴(kuò)展程序?qū)⒃儐柺褂媚膫€(gè)版本執(zhí)行升級。選擇demoContract

  • 5.擴(kuò)展程序?qū)⒃儐柲膫€(gè)節(jié)點(diǎn)安裝智能合約,請選擇peer0.org1.example.com。

  • 6.擴(kuò)展程序?qū)⒃儐栆{(diào)用的函數(shù)。輸入實(shí)例化instantiate。

  • 7.擴(kuò)展名將詢問要傳遞的參數(shù)。將其留空,然后按Enter鍵。經(jīng)過一些繁重的計(jì)算(以及一點(diǎn)點(diǎn)時(shí)間),如果一切順利,你應(yīng)該在右下角收到一條通知說成功升級智能合約Successfully upgraded smart contract。

10.提交更多交易

如何使用Hyperledger Fabric和VSCode的IBM區(qū)塊鏈擴(kuò)展開發(fā)智能合約

現(xiàn)在你已經(jīng)更新了智能合約,請?jiān)?code>FABRIC GATEWAYS下查看并展開頻道Channels。接下來,展開mychannel,你應(yīng)該看到demoContract@0.0.2。

  • 1.接下來,展開demoContract@0.0.2以查看已更新智能合約my-contract.js的函數(shù),即instantiate,addMemberquery

  • 2.右鍵單擊addMember,然后單擊Submit Transaction。對于參數(shù),請復(fù)制并粘貼以下內(nèi)容:

ginny@ibm.com, Ginny Rometty, Wall Street NY, 1234567890

在輸出中,你應(yīng)該看到以下內(nèi)容:

Submitting transaction addMember with args Ginny Rometty, Wall Street NY, 1234567890, ginny@ibm.com

讓我們再添加一個(gè)成員,重復(fù)此步驟,但是對于參數(shù),請復(fù)制并粘貼以下內(nèi)容:

arvind@ibm.com, Arvind Krishna, Broadway Street NY, 1231231111

不錯(cuò)的工作。 我們差不多完成了!

11.查詢分類帳

如何使用Hyperledger Fabric和VSCode的IBM區(qū)塊鏈擴(kuò)展開發(fā)智能合約

而現(xiàn)在,你們一直都在等待...讓我們真正看到寫在分類賬上的內(nèi)容!為此,我們將使用VSCodeTutorialBlockchain文件夾中的query.js文件。

  • 1.查看VSCodeTutorialBlockchain目錄中的query.js文件。它與invoke.js文件非常相似,只是它有一個(gè)主要區(qū)別:

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

主要區(qū)別在于,在此文件中,你將使用evaluateTransaction API,它不會(huì)將交易發(fā)送到ordering服務(wù)。因此,它不會(huì)更新分類帳。這是非常重要的。在invoke.js文件中,你將交易提交到ordering服務(wù),這些交易都將寫入分類帳,但在query.js文件中,你不會(huì)更新分類帳。

  • 2.使用VSCode中的終端導(dǎo)航到VSCodeTutorialBlockchain文件夾。從那里,使用以下命令安裝所需的依賴項(xiàng):

VSCodeTutorialBlockchain $ npm install
  • 3.接下來,使用以下命令運(yùn)行query.js

VSCodeTutorialBlockchain$ node query.js

你應(yīng)該看到下面的輸出:

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');

你應(yīng)該看到下面的輸出:

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的數(shù)據(jù)外,輸出應(yīng)該類似于上面的輸出。

12.測試合約

如何使用Hyperledger Fabric和VSCode的IBM區(qū)塊鏈擴(kuò)展開發(fā)智能合約

測試功能是IBM Blockchain擴(kuò)展的一項(xiàng)功能,可以通過UI完成。單擊左側(cè)的IBM Blockchain Platform擴(kuò)展圖標(biāo)。

FABRIC GATEWAYS下,在頻道Channels下展開mychannel,右鍵單擊最新的智能合約demoContract@0.0.2,然后選擇Generate Smart Contract Tests

擴(kuò)展程序?qū)⒃儐柲闵蓽y試文件的語言。選擇JavaScript。

生成測試完成擴(kuò)展后,你可以從demoContract目錄運(yùn)行npm test,也可以從MyContract-demoContract@0.0.2.test.js文件中單擊VSCode UI中的運(yùn)行測試按鈕,如gif所示。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“如何使用Hyperledger Fabric和VSCode的IBM區(qū)塊鏈擴(kuò)展開發(fā)智能合約”這篇文章對大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI