瞭解使用IBM Blockchain Platform的VSCode擴展來簡化開發,測試和部署智能合約的過程。完成本教程後,你將瞭解如何使用VSCode在本地Hyperledger Fabric網絡上快速開發,演示和部署區塊鏈應用程序。本教程假設你對Hyperledger Fabric有一些基本的瞭解。php
你須要安裝如下內容才能使用擴展程序:html
若是你使用的是Windows,則還必須確保如下內容:前端
light
的版本。你能夠經過從終端運行如下命令來檢查已安裝的版本:java
node --version
npm --version
yo --version
docker --version
docker-compose --version
安裝必備組件後,大約須要30-45分鐘才能完成。node
步驟:python
你須要作的第一件事是安裝IBM Blockchain Platform VSCode擴展。爲此,你須要安裝最新版本的VSCode;要查看你是否擁有最新的VSCode擴展,請轉到代碼>檢查更新(Code > Check for Updates)。若是此時VSCode崩潰(我遇到了),則可能意味着你沒有最新版本。若是你的VSCode崩潰,請查看下面的故障排除部分。不然,請更新你的VSCode,完成後,單擊屏幕左側邊欄中的擴展名。在頂部,在擴展市場中搜索IBM Blockchain Platform。單擊Install,而後單擊reload。如今你應該所有使用擴展!android
要建立智能合約項目:git
Shift+CMD+P
調出命令pallete
。從下拉列表中選擇IBM Blockchain Platform:Create Smart Contract Project
。JavaScript
。New Folder
,而後將項目命名爲所需名稱。我將個人名字命名爲demoContract
。Creat
,而後Open
剛剛建立的新文件夾。接下來,從下拉列表中單擊添加到工做區Add to WrokSpace
。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
文件中應該擁有的那個!github
讓咱們來看看你剛剛定義的函數。實例化函數建立一個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擴展。這是一個看起來像正方形的圖標。
LOCAL FABRIC OPS
。在LOCAL FABRIC OPS
右側,你應該看到一個三點符號。單擊該按鈕,而後單擊啓動Fabric運行時Start Fabric Runtime
。你的擴展程序如今將提供將充當網絡中節點的Docker容器。配置完成後,你應該會看到LOCAL FABRIC OPS
下的智能合約Smart Contracts
部分。
Smart Contracts
下,單擊+install
。peer0.org1.examplee.com
。demoContract@0.0.1
。若是一切順利,你應該會在右下角看到通知:已成功安裝在節點peer0.org1.example.com
上就是這樣!不錯的工做!這是真正的考驗,你的智能合約是否會正確實例化?咱們來看看......
Smart Contracts
下,你將看到一個顯示實例化的部分。單擊實例化+ Instantiate
。mychannel
。demoContract@0.0.1
。instantiate
。擴展將執行一些工做,而後在右下角,你應該看到合約已成功實例化。萬歲!
此時,你須要開始與Fabric實例進行更密切的交互。你須要向證書頒發機構證實你能夠在網絡上建立數字身份。這是經過向證書頒發機構顯示你的證書和私鑰來完成的。
$ git clone https://github.com/horeaporutiu/VSCodeTutorialBlockchain.git
Add folder to workspace
,將此文件夾導入VSCode工做區。找到最近克隆的文件夾VSCodeTutorialBlockchain
並雙擊它。IBM Blockchain Platform
擴展。LOCAL FABRIC OPS
下點擊Nodes
。右鍵單擊peer0.org1.example.com
節點。選擇導出鏈接細節Export Connection Details
。VSCodeTutorialBlockchain
目錄。若是一切順利,你應該看到相似的東西:
Successfully exported connection details to /Users/Horea.Porutiu@ibm.com/Workdir/VSCodeTutorialBlockchain/local_fabric
好的,因此你已經實例化你的合約,把咱們的密鑰輸出到咱們的錢包裏,那麼如今呢? 那麼,如今是時候實際調用智能合約中的功能了!爲此,你可使用VSCode擴展。
LOCAL FABRIC OPS
下你應該看到FABRIC GATEWAYS
。local_fabric
,而後單擊Admin@org1.example.com
。Connecting to local_fabric
。FABRIC GATEWAYS
和Channels
下你應該看到個人mychannel
。單擊以展開它。而後展開demoContract@0.0.1
。你應該看到兩個函數,instantiate
和transaction1
。transaction1
,而後選擇提交交易submit transaction
。對於參數,請輸入'hello'。不錯的工做!你剛剛成功向Fabric網絡提交了一筆交易,並更新了分類賬!
在上一步中,你使用putState API
更新了分類賬,並傳入了密鑰和值。key剛好是greeting
,值也賦予了對象。
{ text: 'hello' }
你應該學習的最後一件事是如何查詢,如何從分類賬中檢索數據。你將經過使用getState API
執行此操做,該API接收密鑰並返回與該密鑰關聯的值(若是找到它)。
讓咱們爲demoContract
添加一個查詢功能。
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
函數,該函數接收來自用戶的參數,如電子郵件,姓名,地址和電話號碼,並將該數據做爲鍵值對保存在分類賬中。
此代碼還添加了查詢功能; 這個函數接受一個參數,這是查找的關鍵。該函數返回與給定鍵關聯的值(若是有)。
"version": "0.0.2",
保存文件。
LOCAL FABRIC OPS
下將你現有的智能合約升級到新版本。展開實例化,直到你看到demoContract@0.0.1
。接下來,右鍵單擊demoContract
並選擇Upgrade Smart Contract
。demoContract
。peer0.org1.example.com
。instantiate
。Enter
鍵。通過一些繁重的計算(以及一點點時間),若是一切順利,你應該在右下角收到一條通知說成功升級智能合約Successfully upgraded smart contract
。如今你已經更新了智能合約,請在FABRIC GATEWAYS
下查看並展開頻道Channels
。接下來,展開mychannel
,你應該看到demoContract@0.0.2
。
demoContract@0.0.2
以查看已更新智能合約my-contract.js
的函數,即instantiate
,addMember
和query
。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
文件。
VSCodeTutorialBlockchain
目錄中的query.js
文件。它與invoke.js
文件很是類似,只是它有一個主要區別:let response = await contract.evaluateTransaction('query', 'GREETING');
主要區別在於,在此文件中,你將使用evaluateTransaction API
,它不會將交易發送到ordering服務。所以,它不會更新分類賬。這是很是重要的。在invoke.js
文件中,你將交易提交到ordering服務,這些交易都將寫入分類賬,但在query.js
文件中,你不會更新分類賬。
VSCodeTutorialBlockchain
文件夾。從那裏,使用如下命令安裝所需的依賴項:VSCodeTutorialBlockchain $ npm install
query.js
:VSCodeTutorialBlockchain$ node query.js
你應該看到下面的輸出:
Connected to Fabric gateway. { text: 'Instantiate was called!' } Disconnect from Fabric gateway. done
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
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的最新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區塊鏈擴展開發智能合約