Нелегальный буфер с запросом манго в ткани Hyperledger? - PullRequest
1 голос
/ 10 июня 2019

Проблема:

Я создал сеть фабрики Hyperledger, которая состоит из 6 организаций и 2 пиров в каждой.И я установил цепной код на 6 равноправных узлах, и я настроил 6 экземпляров Db на диване с теми узлами, на которых я установил цепочечный код.Я успешно выполняю все другие транзакции моего цепного кода, за исключением того, что я выполняю запрос манго.Вот моя функция, в которой я выполняю запрос манго.

 async nthUsersLands(stub, args) {

    let nic = args[0];

    const query = JSON.stringify({
      selector: {
        docType: "land",
        owner: nic
      }
    });

    console.log(typeof query);
    console.log(JSON.stringify(query));

    let landsAsBytes = await stub.getQueryResult(query);

    console.log(landsAsBytes.toString());
    return landsAsBytes;
  }

Вот как я вызываю эту функцию через cli.

peer chaincode invoke -o orderer.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C myc -n mycc -c '{"Args":["nthUsersLands","942990014V"]}'

Это оставляет мне эту ошибку на одноранговом коде цепочки.

2019-06-10T02: 56: 56.937Z ошибка [_]
ошибка: необработанная причина отказа TypeError: недопустимое обещание буфера Promise {TypeError: недопустимый буфер в Function.module.exports.ByteBuffer.wrap (/usr/local/src/node_modules/bytebuffer/dist/bytebuffer-node.js:378:23) в Element.ProtoBuf.Reflect.ElementPrototype.verifyValue (/ usr / local / src / node_modules / protobufjsprotobuf.js: 1886: 39) в Field.ProtoBuf.Reflect.FieldPrototype.verifyValue (/usr/local/src/node_modules/protobufjs/dist/protobuf.js:3499:33) в Message.ProtoBuf.Reflect.MessagePrototype(/usr/local/src/node_modules/protobufjs/dist/protobuf.js:3139:57) в MessagePrototype.encode (/usr/local/src/node_modules/protobufjs/dist/protobuf.js:2675:27) в MessagePrototype.encodeNB (/ usr / local / src / node_modules / protobufjs / dist / protobuf.js: 2770: 37) в handleMessage (/usr/local/src/node_modules/fabric-shim/lib/handler.js:658:35) в at process._tickCallback (внутренний / process / next_tick.js: 188:7)} {"timestamp": "2019-06-10T02: 56: 56.937Z"}

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

Ответы [ 2 ]

0 голосов
/ 10 июня 2019
let landsAsBytes = await stub.getQueryResult(query);

возвращает объект StateQueryIterator, поэтому вы не можете преобразовать его непосредственно в строку.


0 голосов
/ 10 июня 2019

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

async queryMarblesByOwner(stub, args, thisClass) {
//   0
// 'bob'
if (args.length < 1) {
  throw new Error('Incorrect number of arguments. Expecting owner name.')
}

let owner = args[0].toLowerCase();
let queryString = {};
queryString.selector = {};
queryString.selector.docType = 'marble';
queryString.selector.owner = owner;
let method = thisClass['getQueryResultForQueryString'];
let queryResults = await method(stub, JSON.stringify(queryString), thisClass);
return queryResults; //shim.success(queryResults);
}

//query result method

async getQueryResultForQueryString(stub, queryString, thisClass) {

console.info('- getQueryResultForQueryString queryString:\n' + queryString)
let resultsIterator = await stub.getQueryResult(queryString);
let method = thisClass['getAllResults'];

let results = await method(resultsIterator, false);

return Buffer.from(JSON.stringify(results));

} а также проверьте вашу переменную nic, так как она указывает на args [0], которое является именем вашего метода

...