fabric node api 1.4簡明教程

fabric-sdk-node最新版本爲1.4,本文將介紹如何使用最新版本的fabric node sdk開發node.js應用,以實現與fabric區塊鏈的交互,例如查詢鏈碼狀態,或者提交鏈碼交易。node

本文分五個部分來介紹node.js開發人員如何快速上手fabric node sdk:api

  • 工做原理:介紹fabric node sdk的工做機制與實現原理
  • 身份標識:介紹在fabric node sdk中如何標識應用的身份(證書與密鑰)
  • 通道配置:介紹在fabric node sdk中如何配置通道的網絡拓撲
  • 鏈碼狀態查詢:介紹使用fabric node sdk查詢鏈碼狀態的方法
  • 鏈碼交易提交:介紹使用fabric node sdk提交鏈碼交易的方法

若是但願高效系統地掌握Fabric區塊鏈的鏈碼及應用開發,建議訪問匯智網的在線互動課程:緩存

一、fabric node sdk 工做原理

在hyperledger Fabric區塊鏈架構中,應用是經過節點的RPC協議API接口訪問安裝在peer節點上的鏈碼:網絡

node sdk

相似於shim api對鏈碼通訊協議的封裝,Fabric Node SDK提供了對節點RPC協議接口的封裝,其入口類爲Client,通道操做則封裝在Channel類中:架構

node sdk brief

二、fabric node sdk中的身份標識

因爲hyperledger fabric是許可制(Permissioned)區塊鏈,每個參與fabric區塊鏈的成員都須要有明確的身份標識,所以fabric node sdk中的Client實例須要使用一個User實例來表徵其訪問Fabric區塊鏈網絡的身份。例如,下面的node.js代碼載入本地msp目錄中的PEM編碼的用戶證書與相應的密鑰並生成User對象,而後設置爲Client實例的當前身份:區塊鏈

let client = new Client
let keyPem = fs.readFileSync('.msp/keystore/user-key.pem','utf-8')
let certPem = fs.readFileSync('./msp/signcerts/user-cert.pem','utf-8')
let user = await client.createUser({        //建立User對象
  username: 'user',                         //用戶名稱
  mspid: 'SampleOrg',                       //所屬MSP的ID
  cryptoContent: {
    privateKeyPEM: keyPem,                  //用戶私鑰
    signedCertPEM: certPem                  //用戶證書
  },
  skipPersistence: true                     //不計入緩存
})
client.setUserContext(user,true)            //設置爲client的當前身份

二、fabric node sdk通道配置

使用Client實例的newChannel()方法能夠建立一個空的通道對象,咱們還須要添加PeerOrderer實例,以便該通道對象瞭解要訪問的fabric網絡的拓撲結構。例如,下面的node.js代碼爲通道對象配置 部署在本機的peer對等節點和orderer排序節點,在默認配置下,對等節點在7051端口監聽,而排序節點在7052端口監聽:編碼

let channel = client.newChannel('ch1')
channel.addPeer(client.newPeer('grpc://127.0.0.1:7051'))
channel.addOrderer(client.newOrderer('grpc://127.0.0.1:7050'))

三、fabric node sdk查詢鏈碼狀態

在fabric node sdk中,通道對象的queryByChaincode()方法用於鏈碼狀態查詢。例如,下面的node.js代碼調用鏈碼counter-cc中定義的value()方法,以獲取計數器的當前值:3d

let req = {
  chaincodeId: 'counter-cc',
  fcn: 'value',
  args: []
}
let ret = await channel.queryByChaincode(req)

四、fabric node sdk提交鏈碼交易

在fabric node sdk中,向鏈碼提交交易則複雜一些,須要依次使用sendTransactionProposal()sendTransaction()這兩個方法,這是由於hyperledger fabric引入了背書(endorsement)機制,在應用向排序節點提交交易以前,須要按照既定的策略首先獲取對等節點的背書。code

提交鏈碼交易的時序表示以下:對象

2 phase tx

下面的代碼展現了在fabric node sdk中鏈碼交易的兩階段提交過程:

let req = {
  chaincodeId: 'counter-cc',
  fcn: 'inc',
  args: ['10'],
  txId: client.newTransactionID()
}
let prsp = await channel.sendTransactionProposal(req)  //獲取peer背書
let rsp = await channel.sendTransaction({              //提交交易
  proposalResponses: prsp[0],
  proposal: prsp[1]
})

原文:fabric node sdk 1.4簡明教程 - 匯智網

相關文章
相關標籤/搜索