Hyperledger Fabric Node.js 智慧合約鏈碼開發
Hyperledger Fabric是一種聯盟區塊鏈,Fabric區塊鏈也支援智慧合約,被稱為鏈碼(Chaincode)。Fabric鏈碼就是一個標準的(執行在docker容器中的)作業系統程式,通過gRPC協議與Fabric節點通訊。因此理論上可以使用任何語言開發Fabric鏈碼。目前官方提供了三種開發語言的Fabric鏈碼開發工具包:Go、Java和Node.js,本文將介紹如何使用node.js開發Fabric鏈碼。
上匯智網,用互動方式學習以太坊、比特幣、EOS、tendermint等更多區塊鏈開發教程。
Fabric官方提供了兩種開發node.js鏈碼的途徑:fabric-shim和fabric-contract-api。
使用fabric-shim開發Fabric鏈碼
fabric-shim是較底層的鏈碼開發包,它封裝了與節點通訊的grpc協議。安裝方法如下:
~/fabric-shim-chaincode-demo$ npm install fabric-shim
fabric-shim要求鏈碼開發者定義一個實現兩個預定義方法的類。
- Init(stub):初始化鏈碼時節點將呼叫該方法
- Invoke(stub):節點將應用對鏈碼的呼叫轉化為對該方法的呼叫
引數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()
方法啟動鏈碼例項了。例如:
const shim = require('fabric-shim');
class EzChainCode {...}
shim.start(new EzChaincode());
這就是一個完整的Fabric鏈碼了!將上面程式碼儲存為demo.js,可以直接用node.js啟動:
~/fabric-shim-chaincode-demo$ node demo.js
使用fabric-contract-api開發Fabric鏈碼
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
匯智網原創,轉載請標明出處。
相關文章
- Hyperledger Fabric Node.js 智慧合約即鏈碼開發Node.js
- 區塊鏈100講:Hyperledger Fabric 中的鏈碼(智慧合約)區塊鏈
- 2.06 hyperledger fabric智慧合約
- Hyperledger Fabric 使用 CouchDB 和複雜智慧合約開發
- Hyperledger Fabric 智慧合約開發及 fabric-sdk-go/fabric-gateway 使用示例GoGateway
- 區塊鏈Hyperledger Fabric 2.x 自定義智慧合約區塊鏈
- Hyperledger Fabric 2.x 自定義智慧合約
- Hyperledger Fabric 中智慧合約的基本元件概述元件
- Hyperledger Fabric 2.x 動態更新智慧合約
- 2.07 hyperledger fabric鏈碼案例
- 區塊鏈開發Hyperledger Fabric入門區塊鏈
- Hyperledger fabric 鏈碼篇GO(四)Go
- Hyperledger Fabric系統鏈碼介紹
- 智慧合約鏈遊開發詳情丨智慧合約鏈遊系統開發(開發方案)及原始碼分析原始碼
- Fabric 2.x 智慧合約開發記錄
- 區塊鏈智慧合約開發區塊鏈
- Hyperledger Fabric(Hyperledger Fabric模型)模型
- Dapp智慧合約遊戲鏈遊開發丨智慧合約遊戲鏈遊系統開發案例版APP遊戲
- 區塊鏈BSC智慧合約DAPP開發區塊鏈APP
- NFT鑄造鏈上智慧合約系統開發(詳細說明)丨NFT鑄造鏈上智慧合約原始碼版開發原始碼
- 馬蹄鏈Dapp智慧合約(系統開發)案例丨馬蹄鏈MATIC智慧合約技術開發原理APP
- 智慧合約Dapp專案如何開發構建?智慧合約開發原始碼示例APP原始碼
- DAPP公有鏈智慧合約鏈上系統開發原始碼版設計APP原始碼
- 中移鏈合約常用開發介紹(三)工程化開發智慧合約
- NFT鑄造鏈上智慧合約系統開發(詳情方案)丨NFT鏈上鑄造智慧合約系統開發(需求原始碼)原始碼
- 馬蹄鏈智慧合約DAPP開發需求丨馬蹄鏈智慧合約DAPP質押挖礦系統開發(開發案例)APP
- 區塊鏈DApp開發 | 跨鏈智慧合約技術搭建開發區塊鏈APP
- NFT智慧合約開發鏈遊優勢分析
- DAPP馬蹄鏈智慧合約系統開發(案例)丨DAPP馬蹄鏈開發原始碼APP原始碼
- 智慧合約系統開發原理介紹丨智慧合約開發原始碼詳情原始碼
- 利用Hyperledger Fabric開發你的第一個區塊鏈應用區塊鏈
- Hyperledger Fabric 超級賬本 java開發區塊鏈環境搭建Java區塊鏈
- 鏈上DAPP系統開發|智慧合約DAPP開發搭建APP
- FDF互助遊戲智慧合約開發(馬蹄鏈開發)遊戲
- NFT鏈上鑄造智慧合約系統開發(模型探討) | NFT鏈上智慧合約鑄造系統原始碼demo模型原始碼
- DAPP智慧合約/系統開發/智慧合約原始碼/DAPP/Defi/NFT/IDOAPP原始碼
- FDF迴圈遊戲互助合約開發|polygon馬蹄鏈智慧合約遊戲Go
- DAPP馬蹄鏈智慧合約開發正式版丨DAPP馬蹄鏈智慧合約系統開發(詳解及案例)APP