BCSkill (Block chain skill )
区块链中文技术社区

只讨论区块链底层技术
遵守一切相关法律政策!

以太坊事件监听器 API

一个强大且可扩展的 RESTful API,旨在监听以太坊智能合约发出的特定事件。

以太坊事件监听器 API

以太坊事件监听器 API 是一个功能强大的工具,可让您监控和捕获以太坊智能合约发出的事件。借助此 API,您可以轻松地为特定合约和事件名称注册事件监听器,并检索捕获的事件数据以进行进一步分析或与其他系统集成。

特征

  • 为以太坊智能合约注册事件监听器
  • 捕获发出的事件并将其存储在 MySQL 数据库中
  • 通过 RESTful API 端点检索事件数据
  • 使用 API 密钥对 API 请求进行身份验证
  • Docker 化应用程序,易于部署和扩展

使用的技术

  • Golang
  • Gin Web 框架
  • 以太坊 Go 客户端 (go-ethereum)
  • GORM (MySQL 的 Go ORM)
  • MySQL 数据库
  • Docker
  • Docker 组成

https://github.com/devlongs/ethereum-event-listener

Dockge 一个精美的、易于使用且反应灵敏的自托管 docker compose.yaml 面向堆栈的管理器

功能

  • 管理你的compose.yaml文件
    • 创建/编辑/启动/停止/重启/删除
    • 更新 Docker 镜像
  • 交互式编辑器compose.yaml
  • 交互式网页终端
  • (1.4.0)多代理支持——您可以在一个界面中管理来自不同 Docker 主机的多个堆栈
  • 将docker run ...命令转换为compose.yaml
  • 基于文件的结构 - Dockge 不会劫持您的撰写文件,它们会像往常一样存储在您的驱动器上。您可以使用常规docker compose命令与它们交互

Uptime Kuma一款易于使用的自托管监控工具

功能

  1. 监控 HTTP(s) / TCP / HTTP(s) 关键字 / HTTP(s) Json 查询 / Ping / DNS 记录 / 推送 / Steam 游戏服务器 / Docker 容器的正常运行时间
  2. 精美、反应灵敏、快速的 UI/UX
  3. 通过 Telegram、Discord、Gotify、Slack、Pushover、电子邮件 (SMTP) 和90 多种通知服务发送通知,点击此处查看完整列表
  4. 20 秒间隔
  5. 多种语言
  6. 多个状态页面
  7. 将状态页面映射到特定域
  8. Ping 图表
  9. 证书信息
  10. 代理支持
  11. 2FA 支持

https://github.com/louislam/uptime-kuma

HiBit Uninstaller

彻底卸载程序,不留下任何残留
强制卸载可删除任何顽固软件
一次删除多个程序
监控程序的安装
节目快速搜索功能
卸载 Windows 应用商店应用
删除浏览器的扩展
粉碎敏感文件

修复注册表问题并提高您的电脑性能
删除垃圾文件和不必要的程序文件
删除系统中无效的快捷方式
查找硬盘中的空文件夹
轻松管理随 Windows 启动的程序和服务
轻松管理 Windows 系统还原点
易于使用的用户界面
自动更新至最新版本

https://www.hibitsoft.ir/Uninstaller.html

forkchoiceUpdatedV3 must only be called for cancun payloads

启动eth2.0 一段时间后,报如下错误

WARN [05-24|11:39:02.090] Served engine_forkchoiceUpdatedV3        conn=127.0.0.1:53124 reqid=355251 duration="74.273µs" err="Unsupported fork" errdata="{Error:forkchoiceUpdatedV3 must only be called for cancun payloads}"

查看代码
https://github.com/ethereum/go-ethereum/blob/b6474e9f90c88003de7d7eb993ddb5f60133172e/eth/catalyst/api.go#L213-L224

// ForkchoiceUpdatedV3 is equivalent to V2 with the addition of parent beacon block root
// in the payload attributes. It supports only PayloadAttributesV3.
func (api *ConsensusAPI) ForkchoiceUpdatedV3(update engine.ForkchoiceStateV1, params *engine.PayloadAttributes) (engine.ForkChoiceResponse, error) {
    if params != nil {
        if params.Withdrawals == nil {
            return engine.STATUS_INVALID, engine.InvalidPayloadAttributes.With(errors.New("missing withdrawals"))
        }
        if params.BeaconRoot == nil {
            return engine.STATUS_INVALID, engine.InvalidPayloadAttributes.With(errors.New("missing beacon root"))
        }
        if api.eth.BlockChain().Config().LatestFork(params.Timestamp) != forks.Cancun { // 关键代码
            return engine.STATUS_INVALID, engine.UnsupportedFork.With(errors.New("forkchoiceUpdatedV3 must only be called for cancun payloads"))
        }
    }

跟踪下代码,
https://github.com/ethereum/go-ethereum/blob/b6474e9f90c88003de7d7eb993ddb5f60133172e/params/config.go#L763-L778

// LatestFork returns the latest time-based fork that would be active for the given time.
func (c *ChainConfig) LatestFork(time uint64) forks.Fork {
    // Assume last non-time-based fork has passed.
    london := c.LondonBlock

    switch {
    case c.IsPrague(london, time):
        return forks.Prague
    case c.IsCancun(london, time):
        return forks.Cancun
    case c.IsShanghai(london, time):
        return forks.Shanghai
    default:
        return forks.Paris
    }
}

当前genesis配置如下

{
  "config": {
    "chainId": ....,
    "homesteadBlock": 0,
    "eip150Block": 0,
    "eip155Block": 0,
    "eip158Block": 0,
    "byzantiumBlock": 0,
    "constantinopleBlock": 0,
    "petersburgBlock": 0,
    "istanbulBlock": 0,
    "berlinBlock": 0,
    "londonBlock": 0,
    "mergeNetsplitBlock": 0,
    "terminalTotalDifficulty": 0,
    "terminalTotalDifficultyPassed": true,
    "shanghaiTime": 0,
    "cancunTime": 0,
    "pragueTime": 1716532255
  },
  ....
  "coinbase": "0x0000000000000000000000000000000000000000",
  "difficulty": "0x01",
  "extraData": "",
  "gasLimit": "0x17d7840",
  "nonce": "0x1234",
  "mixhash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "parentHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "timestamp": "1715760655"

由于设置了pragueTime,所以LatestFork会返回Prague fork,不会是Cancun,所以ForkchoiceUpdatedV3会报错,至于Prague为什么不支持ForkchoiceUpdatedV3,留个TODO

目前要做的是把最新的fork改为Cancun

  1. 将genesis.json中的pragueTime删掉
  2. 停止geth服务
  3. 重新初始化
    ./geth --config ./config/config.toml init ./config/genesis.json
  4. 重启geth服务