hyperledger-fabric - 如何捕获 Hyperledger Fabric 上的交易生成的事件?

标签 hyperledger-fabric hyperledger hyperledger-chaincode

我想知道通过 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 的键:

events property in JSON

关于hyperledger-fabric - 如何捕获 Hyperledger Fabric 上的交易生成的事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62265808/

相关文章:

gradle - 运行byfn时出错:由于gradle问题,链码安装失败?

docker - hyperledger fabric 在对等体上注册 ID 类型错误?

hyperledger-fabric - 使用 Fabric Node SDK 实例化 Chaincode 会出现 API 错误 (404) : manifest for hyperledger/fabric-ccenv:latest not found

node.js - Hyperledger 结构中带有芒果查询的非法缓冲区?

go - 如何查询具有部分键值的表

linux - 在 centOS 中使用 hyperledger composer-rest-server 生成 REST api 时出错

hyperledger-fabric - 将 Hyperledger Composer 区 block 链业务网络部署到 Hyperledger Fabric(多个组织)

go - 背书者使用错误 “cannot find package”实例化Chaincode

mysql - Fabric-ca-server连接到azure mysql : this authentication plugin is not supported

hyperledger-fabric - block 数据的结构内部