使用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,否则追究其法律责任

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值