我想知道通过 SDK 安装了链代码的特定 channel 的所有对等点是否可以捕获链代码事件。我尝试了一些实验,但似乎链码事件只能由需要特定交易的对等方捕获,但我需要 channel 的所有对等方接收该特定事件。
最佳答案
链码发出的事件存储在交易中。
就您而言,您将需要连接到对等点并监听合约事件。
这是 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 :
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 的键:
关于hyperledger-fabric - 如何捕获 Hyperledger Fabric 上的交易生成的事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62265808/