readme

简介: 如何使用 geth1.8来监听合约事件新功能介绍geth1.8版本带来了新的事件处理方式,使用 abigen 可以自动生成包含合约事件监听以及过滤相关代码.这样就不用自己去写代码解析 log.比如:abigen --sol token.

如何使用 geth1.8来监听合约事件

新功能介绍

geth1.8版本带来了新的事件处理方式,使用 abigen 可以自动生成包含合约事件监听以及过滤相关代码.
这样就不用自己去写代码解析 log.
比如:

abigen --sol token.sol --pkg token --out token.go

一个例子

通过监听谁给我转账,来说明如何使用新的接口

创建 Filter

只需指定合约地址即可.

filter, err := token.NewTokenFilterer(tokenAddr, c)

监听将要发生的事件

这个应该放在过滤历史事件之前,因为有可能在处理历史事件过程中产生了新的事件.如果顺序错了,就会造成事件丢失.

ch := make(chan *token.TokenTransfer, 10)
    sub, err := filter.WatchTransfer(nil, ch, nil, []common.Address{toAddr})
    if err != nil {
        log.Fatalf("watch transfer err %s", err)
    }
    go func() {
        for {
            select {
            case <-sub.Err():
                return
            case e := <-ch:
                log.Printf("new transfer event from %s to %s value=%s,at %d",
                    e.From.String(), e.To.String(), e.Value, e.Raw.BlockNumber)
            }
        }
    }()

简单直观,不用去关心 log 的细节.
感兴趣的话,可以看一下 TokenTranser 结构

// TokenTransfer represents a Transfer event raised by the Token contract.
type TokenTransfer struct {
    From  common.Address
    To    common.Address
    Value *big.Int
    Raw   types.Log // Blockchain specific contextual infos

过滤历史事件

也很直观,把你感兴趣的事件范围传递进去,会返回一个 Iterator, 遍历就 ok 了.

    history, err := filter.FilterTransfer(&bind.FilterOpts{Start: 480000}, nil, []common.Address{toAddr})
    for history.Next() {
        e := history.Event
        log.Printf("%s transfer to %s value=%s, at %d", e.From.String(), e.To.String(), e.Value, e.Raw.BlockNumber)
    }

结论

有了这些自动生成的代码以后,我们就不用费劲去理解过滤时候的 Topic 怎么设置,Log怎么解析. 直接关注我们想要的事件本身就可以了.
当然也不是没有问题,如果我关注的不是某个合约上发生了转账事件,而是所有的ERC20token, 那么该怎么写呢?
目前我是没想到怎么实现,要想这么做还是要回到老办法上.

目录
相关文章
|
JavaScript
在 README.md 中生成项目目录结构
在 README.md 中生成项目目录结构
1306 0
在 README.md 中生成项目目录结构
|
Windows
快速生成Github README.md的目录
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ESA_DSQ/article/details/79617041 熟悉Github的同学可能知道创建一个Repo,通常都会生成一个README.md。
1780 0
给项目写README文档
给项目写README文档
103 0
|
缓存 iOS开发 API
SDWebImage ReadMe.md文档简单说明
SDWebImage ReadMe.md 文档 附:SDWebImage框架github下载地址:https://github.com/rs/SDWebImage注1:该文章简单翻译了SDWebImage最新版本(3.8.1)的readMe.md,时间紧促,如有不当请指正修改,十分感激。
972 0
|
存储 Java API
为项目编写Readme.MD文件
了解一个项目,恐怕首先都是通过其Readme文件了解信息。如果你以为Readme文件都是随便写写的那你就错了。github,oschina git gitcafe的代码托管平台上的项目的Readme.MD文件都是有其特有的语法的。称之为Markdown语法。基本规则如下: Markdown 语法速查表 1 标题与文字格式 标题 # 这是 H1 &lt;一级标题&gt; ## 这是 H
2815 0
github—如何在README.md文件中添加图片
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34173549/article/details/80551021 1、在github上的仓库建立一个存放图片的文件夹,文件夹名字随意。
10676 1
|
机器学习/深度学习 IDE 开发工具
半自动化生成README.md文件
前言 实现 获取指定路径下所有文件的全路径 获取文件描述信息 生成readme 效果 总结 前言 最近一直在准备面试啊笔试啊什么的,写着写着代码就很多了。
2474 0

热门文章

最新文章