您好,登錄后才能下訂單哦!
這篇文章主要介紹了如何使用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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。