我如何捕获 Hyperledger Fabric 上交易生成的事件?

How could I capture events generated by transactions on Hyperledger Fabric?

我想知道是否可以通过 SDK 安装链代码的特定通道的所有对等点捕获链代码事件。我尝试了一些实验,但似乎链码事件只能由需要特定交易的对等点捕获,但我需要通道的所有对等点都接收到该特定事件。

链码发出的事件存储在交易中。

在您的情况下,您需要连接到对等节点并侦听合同事件。

这是 Node.JS 客户端的示例:

const n = await gateway.getNetwork("mychannel");
const contract: network.Contract = n.getContract("fabcar");
contract.addContractListener(async (event) => {
  console.log(event.eventName, event.payload.toString("utf-8"));
});

输出将是:

itemCreated 1f6629d7-999b-4cbb-8b36-68e1de2aa373

然后在链码中,你会设置一个事件,这是Java中的例子:

ctx.getStub().setEvent("itemCreated", StringUtils.getBytes(item.id, StandardCharsets.UTF_8));

如果您想调查交易中有哪些事件,可以通过执行以下脚本来获取区块:

BLOCK_NUMBER=1 # whatever block you want to fetch
peer channel fetch -c mychannel ${BLOCK_NUMBER}
configtxlator proto_decode --input mychannel_${BLOCK_NUMBER}.block --type common.Block > mychannel_${BLOCK_NUMBER}.json

然后你会在JSON中看到一个名为events的键: