Hyperledger Fabric是一種聯盟區塊鏈,Fabric區塊鏈也支持智能合約,被稱爲鏈碼(Chaincode)。Fabric鏈碼就是一個標準的(運行在docker容器中的)操做系統進程,經過gRPC協議與Fabric節點通訊。所以理論上能夠使用任何語言開發Fabric鏈碼。目前官方提供了三種開發語言的Fabric鏈碼開發工具包:Go、Java和Node.js,本文將介紹如何使用node.js開發Fabric鏈碼。node
上匯智網,用互動方式學習以太坊、比特幣、EOS、tendermint等更多 區塊鏈開發教程。
Fabric官方提供了兩種開發node.js鏈碼的途徑:fabric-shim和fabric-contract-api。docker
fabric-shim是較底層的鏈碼開發包,它封裝了與節點通訊的grpc協議。安裝方法以下:npm
~/fabric-shim-chaincode-demo$ npm install fabric-shim
fabric-shim要求鏈碼開發者定義一個實現兩個預約義方法的類。api
參數stub
由節點傳入,它提供了訪問鏈上帳本的方法,以便讀取或更新帳本狀態。數組
例如,下面的代碼實現了一個最小化的node.js鏈碼,每次調用鏈碼都會更新acc0的狀態(例如:能夠使用這個狀態表明帳戶餘額):網絡
const shim = require('fabric-shim'); class EzChaincode { async Init(stub) { return shim.success(Buffer.from('init done!'));//返回success對象 } async Invoke(stub) { let key = 'acc0'; let oldValue = await stub.getState(key); //讀取帳本中acc0的狀態 let newValue = oldValue + 100; await stub.putState(key, Buffer.from(newValue)); //更新acc0的狀態 return shim.success(Buffer.from('update done!'));//返回success對象 } };
一旦定義好鏈碼,就能夠使用shim.start()
方法啓動鏈碼實例了。例如:async
const shim = require('fabric-shim'); class EzChainCode {...} shim.start(new EzChaincode());
這就是一個完整的Fabric鏈碼了!將上面代碼保存爲demo.js,能夠直接用node.js啓動:函數
~/fabric-shim-chaincode-demo$ node demo.js
fabric-shim是一種相對底層的fabric grpc協議封裝,它直接把鏈碼接口暴露給開發者,雖然簡單直白,但若是要實現相對複雜一點的鏈碼,開發者須要本身在Invoke實現中進行方法路由。工具
fabric-contract-api則是更高層級的封裝,開發者直接繼承開發包提供的Contract類,就不用費心合約方法路由的問題了。fabric-contrac-api開發方法以下:學習
~/fabric-contract-api-demo$ npm install fabric-contract-api
使用fabric-contract-api的鏈碼示例代碼以下,除了構造函數以外的每一個方法都自動稱爲鏈碼的方法,可供外部應用調用 :
//demo.js const { Contract } = require('fabric-contract-api'); class EzContract extends Contract constructor(){ super('EzContract'); } async update(ctx, newValue) { await ctx.stub.putState('acc0', Buffer.from(newValue)); return Buffer.from('update done!'); } async remove(ctx) { //..... } }; module.exports.contracts = ['EzContract'];
與fabric-shim不一樣,fabric-contract-api只須要鏈碼導出contracts數組,所以不能直接使用node.js啓動鏈碼,而須要使用fabric-chaincode-node程序。例如:
~/fabric-contract-api-demo$ fabric-chaincode-node demo.js
匯智網原創,轉載請標明出處。
但願儘快學習課程的請訪問Fabric區塊鏈開發詳解,本課程面向初學者,內容即包含Hyperledger Fabric的身份證書與MSP服務、權限策略、通道配置與啓動、鏈碼通訊接口等核心概念,也包含Fabric網絡設計、nodejs鏈碼與應用開發的操做實踐,是Nodejs工程師學習Fabric區塊鏈開發的最佳選擇。