hyperledger-fabric - 如何捕获 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 的键:
推荐阅读
- android - 使用 Kotlin 在 Android 中进行 SQLite 查询最便宜的方法是什么?
- android - 启动时停止服务
- r - R - 列列表上的 Dplyr
- java - Java中的字符串到32位整数,默认值比异常
- javascript - Ajax在单个请求中加倍GET数据?
- swift - Swift Type Eraser - 创建协议数组
- dask - 使用 dask 诊断单机核外计算的 MemoryError
- python - Python 列联表
- python - 将字符串转换为嵌套数组 - PySpark
- node.js - 文件夹访问 node_modules 的 npm 权限错误