Как сделать код узла node.js доступным для установки в одноранговой сети? - PullRequest
0 голосов
/ 29 января 2019

Проблема:

Я очень новичок в ткани Hyperledger.Я создаю цепочечный код внутри папки цепочки кодов образцов ткани.Вот так выглядит моя файловая структура.

file structure

В папке lib я помещаю свой контракт.Вот как это выглядит.

"use strict";

const { Contract } = require("fabric-contract-api");

const util = require("util");

class Landreg extends Contract {
  async initLeger(ctx) {
    console.info("============= START : Initialize Ledger ===========");
    const lands = [
      {
        location: "Kottawa",
        owner: "Tharindu",
        size: "1 acres",
        sale: false
      },
      {
        location: "Bandaragama",
        owner: "Shanilka",
        size: "15 hectare",
        sale: false
      }
    ];

    for (let i = 0; i < lands.length; i++) {
      lands[i].docType = "land";
      await ctx.stub.putState(
        "LAND" + i,
        Buffer.from(JSON.stringify(lands[i]))
      );
      console.info("Added <--> ", lands[i]);
    }
    console.info("============= END : Initialize Ledger ===========");
  }

  async queryLand(ctx, landNumber) {
    const landAsBytes = await ctx.stub.getState(landNumber); // get the land from chaincode state
    if (!landAsBytes || landAsBytes.length === 0) {
      throw new Error(`${landNumber} does not exist`);
    }
    console.log(landAsBytes.toString());
    return landAsBytes.toString();
  }

  async createLand(ctx, landNumber, location, owner, size) {
    console.info("============= START : Create Land ===========");

    const land = {
      location,
      docType: "land",
      size,
      owner,
      sale: "false"
    };

    await ctx.stub.putState(landNumber, Buffer.from(JSON.stringify(land)));
    console.info("============= END : Create Land ===========");
  }

  async queryAlllands(ctx) {
    const startKey = "LAND0";
    const endKey = "LAND999";

    const iterator = await ctx.stub.getStateByRange(startKey, endKey);

    const allResults = [];
    while (true) {
      const res = await iterator.next();

      if (res.value && res.value.value.toString()) {
        console.log(res.value.value.toString("utf8"));

        const Key = res.value.key;
        let Record;
        try {
          Record = JSON.parse(res.value.value.toString("utf8"));
        } catch (err) {
          console.log(err);
          Record = res.value.value.toString("utf8");
        }
        allResults.push({ Key, Record });
      }
      if (res.done) {
        console.log("end of data");
        await iterator.close();
        console.info(allResults);
        return JSON.stringify(allResults);
      }
    }
  }
  async changeLandOwner(ctx, landNumber, newOwner) {
    console.info("============= START : changeLandOwner ===========");

    const landAsBytes = await ctx.stub.getState(landNumber); // get the land from chaincode state
    if (!landAsBytes || landAsBytes.length === 0) {
      throw new Error(`${landNumber} does not exist`);
    }
    const land = JSON.parse(landAsBytes.toString());
    land.owner = newOwner;

    await ctx.stub.putState(landNumber, Buffer.from(JSON.stringify(land)));
    console.info("============= END : changeLandOwner ===========");
  }

  async makeLandForSale(ctx, landNumber) {
    console.info("============= START : makeLandForSale ===========");

    const landASBytes = await ctx.stub.getState(landNumber);
    if (!landASBytes || landASBytes.length === 0) {
      throw new Error(`${landNumber} does not exit`);
    }
    const land = JSON.parse(landASBytes.toString());
    land.sale = "true";
    await ctx.stub.putState(landNumber, Buffer.from(JSON.stringify(land)));
    console.info("============= END : makeLandForSale ===========");
  }
}

module.exports = Landreg;

Вот так выглядит мой index.js.

/ * * SPDX-License-Identifier: Apache-2.0 * /

"использовать строгое";

const Landreg = require ("./ lib / landreg");

module.exports.Landreg = Landreg;module.exports.contracts = [Landreg];

Я нажал $ (npm bin) / fabric-chaincode-node --peer.address localhost: 7052. Но это оставляет меня как ошибка.

$ $(npm bin)/fabric-chaincode-node --peer.address localhost:7052
cli.js <command>

Commands:
  cli.js start [options]  Start an empty chaincode

Options:
  --help         Show help  [boolean]
  -v, --version  Show version number  [boolean]

Not enough non-option arguments: got 0, need at least 1 

Я нажал эту команду внутри каталога Landreg.Может ли кто-нибудь помочь мне решить эту проблему и сделать ее доступной для установки в одноранговой сети?Спасибо !!

1 Ответ

0 голосов
/ 18 марта 2019

Я не использовал эту команду, скорее, я использовал скрипт startFabric.sh для установки в одноранговой сети.Пожалуйста, используйте следующие docker exec сценарии для запуска после выполнения этой строки.

docker-compose -f ./docker-compose.yml up -d cli

Выполните эти строки одну за другой.

docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp" cli peer chaincode install -n landreg -v 1.0 -p "/opt/gopath/src/github.com/strains/javascript" -l "node"

docker exec -e "CORE_PEER_LOCALMSPID=Org1MSP" -e "CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp" cli peer chaincode instantiate -o orderer.example.com:7050 -C mychannel -n landreg -l "node" -v 1.0 -c '{"Args":[]}' -P "OR ('Org1MSP.member','Org2MSP.member')"

Пожалуйста, убедитесь, что имя вашей службы совпадает с родительской папкой цепочки кодов.Вот как книга устанавливает сервис.Я назвал landreg .Если это под fabcar, дайте это как есть.

Я узнал сам и успешно установил рабочий пример с использованием Fabric Node SDK.Мы можем обсудить по скайпу.

Спасибо, Шрирам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...