用VSCode和IBM Hyperledger Fabric 區塊鏈擴展開發智能合約

瞭解使用IBM Blockchain Platform的VSCode擴展來簡化開發,測試和部署智能合約的過程。完成本教程後,你將瞭解如何使用VSCode在本地Hyperledger Fabric網絡上快速開發,演示和部署區塊鏈應用程序。本教程假設你對Hyperledger Fabric有一些基本的瞭解。

學習目標

  • 安裝IBM Blockchain Platform VSCode擴展。
  • 創建一個新的JavaScript智能合約。
  • 打包智能合約。
  • 創建,探索和了解Hyperledger Fabric網絡。
  • 在本地Hyperledger Fabric實例上部署智能合約。
  • 使用Node.js SDK與已部署的智能合約包進行交互。

先決條件

你需要安裝以下內容才能使用擴展程序:

如果你使用的是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.測試合約

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.如果一切順利,你應該會看到一條通知,其中顯示正在連接到fabricConnecting to local_fabric
  • 4.接下來,在FABRIC GATEWAYSChannels下你應該看到我的mychannel。單擊以展開它。然後展開[email protected]。你應該看到兩個函數,instantiatetransaction1
  • 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的函數,即instantiateaddMemberquery
  • 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區塊鏈擴展開發智能合約

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章