使用nodejs的SDK執行更新操作

上一節講了查詢鏈碼操作,這一節我們重點來講解下更新鏈碼的操作

打開$GOPATH/src/github.com/hyperledger/fabric-samples/fabcar/javascript/invoke.js 文件,我們來看看代碼。

首先下面部分代碼同admin基本一樣,不在詳述。

'use strict';

const { Gateway, Wallets } = require('fabric-network');
const fs = require('fs');
const path = require('path');

async function main() {
    try {
    // 業務內容部分
    } catch (error) {
        console.error(`Failed to submit transaction: ${error}`);
        process.exit(1);
    }
}

main();

我們重點來看看業務內容部分

前面六個部分同查詢操作

  • 第一部分:加載test-network網絡中組織1的的連接配置信息

          const ccpPath = path.resolve(__dirname, '..', '..', 'test-network', 'organizations', 'peerOrganizations', 'org1.example.com', 'connection-org1.json');
          const ccp = JSON.parse(fs.readFileSync(ccpPath, 'utf8'));
  • 第二部分:創建一個新的基於文件系統的錢包來管理身份

          const walletPath = path.join(process.cwd(), 'wallet');
          const wallet = await Wallets.newFileSystemWallet(walletPath);
          console.log(`Wallet path: ${walletPath}`);
  • 第三部分:查看我們是否已經註冊了用戶用戶

          const identity = await wallet.get('appUser');
          if (!identity) {
              console.log('An identity for the user "appUser" does not exist in the wallet');
              console.log('Run the registerUser.js application before retrying');
              return;
          }
  • 第四部分:創建一個新的網關並連接到我們的對等(peer)節點

          const gateway = new Gateway();
          await gateway.connect(ccp, { wallet, identity: 'appUser', discovery: { enabled: true, asLocalhost: true } });
  • 第五部分:連接到通道上

       const network = await gateway.getNetwork('mychannel');
  • 第六部分:連接到合約上

      const contract = network.getContract('fabcar');

第七部分:執行合約的更新方法

fabcar合約提供了兩個更新方法:

  • createCar方法,實現能合約中增加汽車的功能,它需要5個參數,如下面的代碼

       await contract.submitTransaction('createCar', 'CAR12', 'Honda', 'Accord', 'Black', 'Tom');
       console.log('Transaction has been submitted');

    它創建了名爲CAR12的汽車,品牌爲本田Honda,顏色爲黑色,車主爲Tom

  • changeCarOwner方法,實現更改汽車車主的功能,它需要兩個參數,如:

       await contract.submitTransaction('changeCarOwner','CAR12','Dave');

    上面的命令是把汽車CAR12的車主由Tom變更爲Dave

我們使用fabcar合約提供了 queryCar 方法是查詢CAR12的汽車,看看它是否已經變更成功

     const result = await contract.evaluateTransaction(('queryCar', 'CAR12'));
     console.log(`Transaction has been evaluated, result is: ${result.toString()}`);

最後執行完成後,需要從網關斷開連接

    await gateway.disconnect();

本文由小韋雲原創,轉載請註明出處:https://www.bctos.cn/doc/4/1841,否則追究其法律責任

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