Chaincode 事件负载 - Hyperledger Fabric SDK v1.4.1

Chaincode Event Payload - Hyperledger Fabric SDK v1.4.1

我正在使用 Hyperledger Fabric SDK NodeJS v1.4.1,我正试图赶上链代码事件。 这是我的代码:

let gateway = new Gateway();
await gateway.connect(config, {
    wallet: wallet, 
    identity: identity, 
    discovery: { enabled: true, asLocalhost: false },
});
let network = await gateway.getNetwork("myChannel");
let contract = network.getContract("myChaincode");

contract.addContractListener("myListener","myChaincodeEvent",(err, event, blockNumber, transactionId, status) => {
    if (err) { throw err; }

    logger.debug(`Chaincode:${event.chaincode_id} - Event: ${event.event_name} - Block Number: ${blockNumber} Transaction ID: ${transactionId} Status: ${status}`);

},{unregister:false,disconnect:false});

我的问题是我正在接收事件,但无法从中检索有效负载。

我读到有必要在频道中心设置选项:

full_block=true

但是如果我使用网关方法,我不知道在哪里设置这个参数。

这是我使用的代码示例,显示了在何处设置适当的过滤选项

    this.contract.addContractListener('some-string', 'trade-network',
        (err, event, blkNum, txid, status) => {
            console.log('event received', status, event, blkNum, txid);
            if (err) {
                this.emit('error', err);
            } else if (status && status === 'VALID') {
                // only if a valid block is committed should we emit an event
                let evt = event.payload.toString('utf8');
                evt = JSON.parse(evt);
                if (Array.isArray(evt)) {
                    for(const oneEvent of evt) {
                        this.emit('ChaincodeEvent', oneEvent);
                    }
                }
                else {
                    this.emit('ChaincodeEvent', evt);
                }
            }
       },
       {filtered: false}
    );

希望对您有所帮助。

您可以将选项传递给 ChannelEventHub.connect(options)

像这样

channelEventHub.connect({ full_block: true })

检查API文档 https://fabric-sdk-node.github.io/release-1.4/ChannelEventHub.html