深度学习
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(加群验证:我是码农)
全站首页 | 数据结构 | 区块链| 大数据 | 机器学习 | 物联网和云计算 | 面试笔试
var cnzz_protocol = (("https:" == document.location.protocol) ? "https://" : "http://");document.write(unescape("%3Cspan id='cnzz_stat_icon_1276413723'%3E%3C/span%3E%3Cscript src='" + cnzz_protocol + "s23.cnzz.com/z_stat.php%3Fid%3D1276413723%26show%3Dpic1' type='text/javascript'%3E%3C/script%3E"));本站资源大部分来自互联网,版权归原作者所有!
评论专区