invokeChaincode, возвращающий ".protos.Response" - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь вызвать цепной код от другого, чтобы получить некоторые данные, которые понадобятся для выполнения определенной функции. Когда я делаю invokeChaincode, я получаю «.protos.Response» в качестве ответа, и я не знаю почему.

Моя функция запроса выглядит так:

async queryFrigs(stub, args) {
    let first = "FRIG1";
    let last = "FRIG999";
    let it = await stub.getStateByRange(first, last);
    let results = [];

    while(true) {
        let res = await it.next();
        if(res.value && res.value.value.toString()) {
            let jsonRes = {};
            console.log (res.value.value.toString('utf8'));
            jsonRes.Key = res.value.key;

            try {
                jsonRes.Record = JSON.parse(res.value.value.toString('utf8'));
            }
            catch(err) {
                console.log(err);
                jsonRes.Record = res.value.value.toString('utf8');
            }
            results.push(jsonRes);
        }
        if(res.done) {
        console.log('End of data');
        await it.close();
        return Buffer.from(JSON.stringify(results));
        }
    }
}

И мой цепной код, где я пытаюсь вызвать этот запрос, выглядит так (просто для проверки, без вашей реальной функции):

async sale(stub, args) {
    let frigs = await stub.invokeChaincode('frigCC', ['queryFrigs'], 'canal-frig');
    console.log('frigs.toString() >>>' + frigs.toString()); // prints .prontos.response
    console.log('JSON.stringify(frigs) >>>' + JSON.stringify(frigs)); // prints {"status": 200, "message": "", "payload": {"buffer": {"type": "Buffer", "data": [... buffer result correspondent to the data. ..]}, "offset": 11, "markedOffset": - 1, "limit": 689, "littleEndian": true, "noAssert": false}}
}

Я хотел бы получить данные в исходном формате, без преобразования в буфер. Может кто-нибудь мне помочь? Что я делаю не так?

1 Ответ

0 голосов
/ 07 декабря 2018

Вам нужно decode выводить с помощью главной книги прото

_ledgerProto.BlockchainInfo.decode(response.response.payload);

См. https://github.com/hyperledger/fabric-sdk-node/blob/30749efdcc2e02d696520e709a1885846d57ba97/fabric-client/lib/Channel.js

...