首页 > 解决方案 > 无法在每个事务的链码中设置多个事件,仅获取最后一个事件

问题描述

我在链码(Hyperledger Fabric v1.1)的函数中应用了多个事件。

func (t *SimpleChaincode) initUsers(stub shim.ChaincodeStubInterface, args []string) pb.Response {
...
//Event supplier_bare
err = stub.SetEvent("supplier_bare", userAsbytes)
if err != nil {
    return shim.Error(err.Error())
}
//Event supplier_bare_1
err = stub.SetEvent("supplier_bare_1", userAsbytes)
if err != nil {
    return shim.Error(err.Error())
}
...
return shim.Success(nil)
}

当我调用该函数时,我只得到每个事务的最后一个事件(' supplier_bare_1 ')。

交易(事件):

...
 "events": {
            "chaincode_id": "mycc10",
            "tx_id":"5421ae37d6e1947b7121f411d64dc215ccacbe45b2d0a9c796cc4a3715c922d6",
            "event_name": "supplier_bare_1",
            "payload": {
                        "type": "Buffer",
                        "data": [
                                 ...
                                ]
                       }
           },
...

链代码是否以这种方式工作,或者有不同的方法可以在单个函数中实现多个事件。

标签: gohyperledger-fabrichyperledger

解决方案


从 shim 代码来看,shim 中只有一个用于链码事件的槽,因此只有最后一次调用 setEvent 才会生效。


推荐阅读