Проблема:
Я очень новичок в ткани Hyperledger.Я создаю цепочечный код внутри папки цепочки кодов образцов ткани.Вот так выглядит моя файловая структура.
![file structure](https://i.stack.imgur.com/UUCDk.jpg)
В папке 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.Может ли кто-нибудь помочь мне решить эту проблему и сделать ее доступной для установки в одноранговой сети?Спасибо !!