当前位置:首页 » 区块链精品文章 » 正文

13.7 应用开发案例四:发送事件

3855 人参与  2018年09月29日 11:02  分类 : 区块链精品文章  评论

Fabric应用程序除了通过主动查询来获取当前已确认的状态,还可以通过订阅并监听事件(event)来获取交易执行信息,用于进行交易确认或者审计。

本节的例子将展示如何在链码中发送事件。详细代码可见examples/chaincode/go/eventsender/eventsender.go。

发送事件需要使用stub.SetEvent方法。方法格式为SetEvent(namestring,payload[]byte)error。其中,name表示事件名称,payload为事件内容。

通过该方法,可以设定当这个交易在Committer处被认证通过,写入到区块时所发送的事件。

示例链码的invoke分支方法被调用时,会将记录在账本中的递增序列和Invoke传入的参数串联起来作为事件内容,以evtsender为事件名称,调用stub.SetEvent方法。

关键代码如下所示:


func (t *EventSender) invoke(stub shim.ChaincodeStubInterface, args []string)
    pb.Response {
    b, err := stub.GetState("noevents")
    if err != nil {
        return shim.Error("Failed to get state")
    }
    noevts, _ := strconv.Atoi(string(b))

    tosend := "Event " + string(b)
    for _, s := range args {
        tosend = tosend + "," + s
    }

    err = stub.PutState("noevents", []byte(strconv.Itoa(noevts+1)))
    if err != nil {
        return shim.Error(err.Error())
    }

    err = stub.SetEvent("evtsender", []byte(tosend))
    if err != nil {
        return shim.Error(err.Error())
    }
    return shim.Success(nil)
}

应用开发者可以使用SDK中封装的方法监听链码发出的事件,并据此作出处理逻辑。也可以简单用Fabric提供的block-listener工具监听并查看事件。

block-listener工具代码位于examples/events/block-listener,其中展示了如何利用事件客户端来从网络中获取事件信息。创建事件客户端的核心代码如下所示:


func createEventClient(eventAddress string, _ string) *adapter {
    var obcEHClient *consumer.EventsClient

    done := make(chan *pb.Event_Block)
    adapter := &adapter{notfy: done}
    obcEHClient, _ = consumer.NewEventsClient(eventAddress, 5, adapter)
    if err := obcEHClient.Start(); err != nil {
        fmt.Printf("could not start chat. err: %s\n", err)
        obcEHClient.Stop()
        return nil
    }

    return adapter
}


来源:我是码农,转载请保留出处和链接!

本文链接:http://www.54manong.com/?id=891

区块链是什么  

微信号:qq444848023    QQ号:444848023

加入【我是码农】QQ群:864689844(加群验证:我是码农)

<< 上一篇 下一篇 >>

网站分类

标签列表

最近发表

全站首页 | 数据结构 | 区块链| 大数据 | 机器学习 | 物联网和云计算 | 面试笔试

本站资源大部分来自互联网,版权归原作者所有!