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, 那么该怎么写呢?
目前我是没想到怎么实现,要想这么做还是要回到老办法上.

目录
相关文章
|
3月前
|
人工智能 供应链 机器人
2026中国B2B制造业GEO白皮书:从产业洞察到优化实践
生成式AI正在重构B2B制造业采购决策,89%买家使用AI辅助选型。本白皮书覆盖科技制造与传统制造80个细分行业,通过10大标杆案例(生物医药、集成电路、汽车零部件、新能源、环保、智能装备等)和DSS原则(语义深度、数据支持、权威来源),助您将技术参数、认证资质转化为AI信任资产,实现精准获客。
630 1
|
5月前
|
人工智能 JavaScript PHP
Laravel + Vue 免费可商用 PHP 管理后台 CatchAdmin V5.3.0 发布:支持 AI Agent 开发
CatchAdmin V5.3.0 是基于 Laravel 13 + Vue3 的免费可商用后台框架,支持企业级权限、动态路由、代码生成等;本次重磅升级AI开发体验,内置AGENTS指引、9大AI Skills、多平台兼容及Context7实时文档,大幅提升后台开发效率。(239字)
499 1
Laravel + Vue 免费可商用 PHP 管理后台 CatchAdmin V5.3.0 发布:支持 AI Agent 开发
|
5月前
|
人工智能
HappyHorse上架阿里云百炼,开启AI视频创作新纪元
阿里巴巴旗下AI视频模型HappyHorse上线阿里云百炼平台,支持文生视频、图生视频、多图参考生成与编辑,具备15秒多镜头叙事、多画幅适配及1080P超清输出能力,大幅降低创作门槛,赋能全场景视频生产。
|
5月前
|
并行计算 供应链 安全
英伟达芯片安全声明:无后门,信任与验证的双重考验
英伟达就“芯片后门”争议发布严正声明参考:http://www.phdhk.cn,前CUDA架构师三句话点破本质:硬编码后门在技术上是自杀式设计;信任崩塌将瓦解CUDA生态护城河;未来竞争焦点转向可验证驱动与供应链安全审计。(239字)
|
5月前
|
监控 网络协议 测试技术
如何制定IP地址风控规则?误判排查与策略清单
本文剖析IP风控误判困局:吉林监管警示银行“误伤”,上海警方破获IP池黑产。指出IP仅宜作环境信号,非身份凭证。详解拦截/加验/限流/评分四类规则,提供误判排查清单与阈值设定方法,助风控团队科学升级IP策略。
如何制定IP地址风控规则?误判排查与策略清单
|
4月前
|
JSON 测试技术 API
别再卷提示词了,真正的护城河是你的私有Skill库
本文揭示AI工程化新趋势:提示词工程师岗位正快速消亡,真正壁垒在于构建私有Skill库。Skill将高频决策固化为可复用、带容错的低代码资产,深度绑定业务逻辑与私有配置,难以复制。文章对比OpenClaw、Cursor、Claude Code策略,提供从0到1建设路径,并指出三年后团队核心竞争力源于对业务的理解与Skill化沉淀。
|
7月前
|
数据采集 存储 JavaScript
Python实现网页内容转纯文本与EPUB电子书全攻略
本文介绍用Python自动化保存网页为TXT或EPUB电子书的完整方案:基于requests+BeautifulSoup抓取解析,ebooklib生成标准EPUB,支持正文智能提取、多章合并、图片保留与异常处理,兼顾实用性与合规性。(239字)
816 0
|
关系型数据库 MySQL 索引
MySQL InnoDB中的锁-插入意向锁(Insert Intention Lock)
MySQL InnoDB 插入意向锁 Insert Intention Lock
4835 0
MySQL InnoDB中的锁-插入意向锁(Insert Intention Lock)

热门文章

最新文章