Hyperledger Fabric和VSCode的IBM區塊鏈擴充套件開發智慧合約
瞭解使用IBM Blockchain Platform的VSCode擴充套件來簡化開發,測試和部署智慧合約的過程。完成本教程後,你將瞭解如何使用VSCode在本地Hyperledger Fabric網路上快速開發,演示和部署區塊鏈應用程式。本教程假設你對Hyperledger Fabric有一些基本的瞭解。
學習目標
- 安裝IBM Blockchain Platform VSCode擴充套件。
- 建立一個新的JavaScript智慧合約。
- 打包智慧合約。
- 建立,探索和了解Hyperledger Fabric網路。
- 在本地Hyperledger Fabric例項上部署智慧合約。
- 使用Node.js SDK與已部署的智慧合約包進行互動。
先決條件
你需要安裝以下內容才能使用擴充套件程式:
- 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
你可以通過從終端執行以下命令來檢查已安裝的版本:
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.開始
你需要做的第一件事是安裝IBM Blockchain Platform VSCode擴充套件。為此,你需要安裝最新版本的VSCode;要檢視你是否擁有最新的VSCode擴充套件,請轉到程式碼>檢查更新(Code > Check for Updates)。如果此時VSCode崩潰(我遇到了),則可能意味著你沒有最新版本。如果你的VSCode崩潰,請檢視下面的故障排除部分。否則,請更新你的VSCode,完成後,單擊螢幕左側邊欄中的副檔名。在頂部,在擴充套件市場中搜索IBM Blockchain Platform。單擊Install,然後單擊reload。現在你應該全部使用擴充套件!
2.建立一個新的智慧合約專案
要建立智慧合約專案:
- 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.修改智慧合約
在 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.打包智慧合約
現在你已經建立了智慧合約並瞭解了你已定義的功能,現在可以將其打包,以便你可以將其安裝在節點裝置上。
使用 Shift+CMD+P
開啟命令 pallete
並選擇包智慧合約。在左側邊欄中,單擊IBM Blockchain Platform圖示(它看起來像一個正方形)。在左上角,你將看到所有智慧合約包。如果一切順利,你應該看到 [email protected]
。
5.安裝智慧合約
好的,你已經完成超過一半了。現在是有趣的部分!讓我們在節點上安裝這份合約!為此,你必須首先連線到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.擴充套件程式將詢問你要安裝哪個軟體包:選擇
[email protected]
。如果一切順利,你應該會在右下角看到通知:已成功安裝在節點peer0.org1.example.com
上就是這樣!不錯的工作!
6.例項化智慧合約
這是真正的考驗,你的智慧合約是否會正確例項化?我們來看看……
- 1.在智慧合約
Smart Contracts
下,你將看到一個顯示例項化的部分。單擊例項化+ Instantiate
。 - 2.然後,擴充套件將詢問你在哪個頻道例項化智慧合約,選擇
mychannel
。 - 3.然後,擴充套件將詢問你例項化哪個合約和版本,選擇
[email protected]
。 - 4.然後,擴充套件將詢問你要呼叫哪個函式,輸入
instantiate
。 - 5.接下來,它會詢問你的引數。沒有,所以只需按回車即可。
擴充套件將執行一些工作,然後在右下角,你應該看到合約已成功例項化。萬歲!
7.匯出連線詳細資訊
此時,你需要開始與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/[email protected]/Workdir/VSCodeTutorialBlockchain/local_fabric
8.提交交易
好的,所以你已經例項化你的合約,把我們的金鑰輸出到我們的錢包裡,那麼現在呢? 那麼,現在是時候實際呼叫智慧合約中的功能了!為此,你可以使用VSCode擴充套件。
- 1.在
LOCAL FABRIC OPS
下你應該看到FABRIC GATEWAYS
。 - 2.單擊
local_fabric
,然後單擊[email protected]
。 - 3.如果一切順利,你應該會看到一條通知,其中顯示正在連線到fabric
Connecting to local_fabric
。 - 4.接下來,在
FABRIC GATEWAYS
和Channels
下你應該看到我的mychannel
。單擊以展開它。然後展開[email protected]
。你應該看到兩個函式,instantiate
和transaction1
。 - 5.右鍵單擊
transaction1
,然後選擇提交交易submit transaction
。對於引數,請輸入’hello’。
不錯的工作!你剛剛成功向Fabric網路提交了一筆交易,並更新了分類帳!
9.更新智慧合約
在上一步中,你使用 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
下將你現有的智慧合約升級到新版本。展開例項化,直到你看到[email protected]
。接下來,右鍵單擊demoContract
並選擇Upgrade Smart Contract
。 - 4.擴充套件程式將詢問使用哪個版本執行升級。選擇
demoContract
。 - 5.擴充套件程式將詢問哪個節點安裝智慧合約,請選擇
peer0.org1.example.com
。 - 6.擴充套件程式將詢問要呼叫的函式。輸入例項化
instantiate
。 - 7.副檔名將詢問要傳遞的引數。將其留空,然後按
Enter
鍵。經過一些繁重的計算(以及一點點時間),如果一切順利,你應該在右下角收到一條通知說成功升級智慧合約Successfully upgraded smart contract
。
10.提交更多交易
現在你已經更新了智慧合約,請在 FABRIC GATEWAYS
下檢視並展開頻道 Channels
。接下來,展開 mychannel
,你應該看到 [email protected]
。
- 1.接下來,展開
[email protected]
以檢視已更新智慧合約my-contract.js
的函式,即instantiate
,addMember
和query
。 - 2.右鍵單擊
addMember
,然後單擊Submit Transaction
。對於引數,請複製並貼上以下內容:
[email protected], Ginny Rometty, Wall Street NY, 1234567890
在輸出中,你應該看到以下內容:
Submitting transaction addMember with args Ginny Rometty, Wall Street NY, 1234567890, [email protected]
讓我們再新增一個成員,重複此步驟,但是對於引數,請複製並貼上以下內容:
[email protected], Arvind Krishna, Broadway Street NY, 1231231111
不錯的工作。 我們差不多完成了!
11.查詢分類帳
而現在,你們一直都在等待…讓我們真正看到寫在分類賬上的內容!為此,我們將使用 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', '[email protected]');
你應該看到下面的輸出:
VSCodeTutorialBlockchain$ node query.js Connected to Fabric gateway. {"address":" Wall Street NY","email":"[email protected]","name":" Ginny Rometty","number":" 1234567890"} Disconnect from Fabric gateway. done
- 5.最後,查詢
Arvind
。修改請求如下:
let response = await contract.evaluateTransaction('query', '[email protected]');
除了Arvind的資料外,輸出應該類似於上面的輸出。
12.測試合約
測試功能是IBM Blockchain擴充套件的一項功能,可以通過UI完成。單擊左側的IBM Blockchain Platform擴充套件圖示。
在 FABRIC GATEWAYS
下,在頻道 Channels
下展開 mychannel
,右鍵單擊最新的智慧合約 [email protected]
,然後選擇 Generate Smart Contract Tests
。
擴充套件程式將詢問你生成測試檔案的語言。選擇 JavaScript
。
生成測試完成擴充套件後,你可以從 demoContract
目錄執行 npm test
,也可以從 [email protected]
檔案中單擊 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區塊鏈擴充套件開發智慧合約