簡體   English   中英

Hyperledger 結構中帶有芒果查詢的非法緩沖區?

[英]Illegal Buffer with mango query in Hyperledger fabric?

問題:

我創建了一個 Hyperledger 結構網絡,其中每個組織由 6 個組織和 2 個對等點組成。 我已經在其中的 6 個對等節點上安裝了一個鏈碼,並且我已經在那些我安裝了鏈碼的對等節點上配置了 6 個 couch 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 error [_]                                    
> error: Unhandled Rejection reason TypeError: Illegal buffer promise
> Promise {   <rejected> TypeError: Illegal buffer
>     at Function.module.exports.ByteBuffer.wrap (/usr/local/src/node_modules/bytebuffer/dist/bytebuffer-node.js:378:23)
>     at Element.ProtoBuf.Reflect.ElementPrototype.verifyValue (/usr/local/src/node_modules/protobufjs/dist/protobuf.js:1886:39)
>     at Field.ProtoBuf.Reflect.FieldPrototype.verifyValue (/usr/local/src/node_modules/protobufjs/dist/protobuf.js:3499:33)
>     at Message.ProtoBuf.Reflect.MessagePrototype.encode (/usr/local/src/node_modules/protobufjs/dist/protobuf.js:3139:57)
>     at MessagePrototype.encode (/usr/local/src/node_modules/protobufjs/dist/protobuf.js:2675:27)
>     at MessagePrototype.encodeNB (/usr/local/src/node_modules/protobufjs/dist/protobuf.js:2770:37)
>     at handleMessage (/usr/local/src/node_modules/fabric-shim/lib/handler.js:658:35)
>     at <anonymous>
>     at process._tickCallback (internal/process/next_tick.js:188:7) } {"timestamp":"2019-06-10T02:56:56.937Z"}

我嘗試了很多來找到解決此問題的方法,但我無法這樣做。 有人可以幫我解決這個問題嗎? 謝謝你。

請參考面料示例中的彈珠鏈代碼以清楚了解使用芒果選擇器字符串我已粘貼以下代碼集供您參考,請確保您的鏈代碼是否具有此方法..

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],這是您的方法名稱

let landsAsBytes = await stub.getQueryResult(query);

它返回一個StateQueryIterator對象,因此您不能將其直接轉換為字符串。


暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM