Skip to content

feat: add Docker-native automatic window keeper - #34

Merged
Nero978 merged 1 commit into
mainfrom
feat/docker-keeper
Aug 23, 2026
Merged

Nero978 merged 1 commit into
mainfrom
feat/docker-keeper

Conversation

@tingtonglls

Copy link
Copy Markdown
Contributor

背景

Netting 合约需要 operator 在指定区块自动执行窗口冻结与结算,否则结算窗口无法持续推进。

此前各分支分别尝试过 PowerShell、Python WebSocket 和 Java Web3j 实现,但当前 Foundry Docker 镜像不包含对应运行环境。

实现方案

本 PR 使用 POSIX Shell 和 Foundry 自带的 cast 实现 keeper,无需额外安装 Python、Java、PowerShell 或第三方依赖。

主要改动

  • 新增自动化 keeper 脚本
    • 轮询 automationState()
    • 自动执行 freezeWindow()
    • 自动执行 executeWindow()
    • 等待交易确认
    • RPC 异常后自动重试
    • 重启或断线后自动补偿未执行的窗口
  • 启动时校验 keeper 私钥是否对应 Netting 合约 owner
  • 自动从 address-data/addresses.json 读取最新 Netting 合约地址
  • 为开发和生产 Docker Compose 增加独立 keeper 服务
  • keeper 仅在合约部署成功后启动
  • 为 Anvil 增加定时出块配置,确保无交易时区块仍会持续推进
  • 增加 keeper 环境变量和运行文档

配置项

  • ANVIL_BLOCK_TIME
  • NETTING_ADDRESS
  • KEEPER_POLL_SECONDS
  • KEEPER_RETRY_SECONDS
  • KEEPER_MAX_CATCH_UP_ACTIONS

使用 Docker Compose 时,NETTING_ADDRESS 可以留空,keeper 会自动读取部署生成的地址文件。

验证结果

  • Solidity 测试:50 passed,0 failed
  • Shell 语法检查通过
  • 开发及生产 Compose 配置检查通过
  • Docker 镜像构建成功
  • 已确认镜像包含 keeper 所需的 cast、sh、sed、tr 和 date
  • Anvil 端到端测试中,keeper 成功连续执行多次窗口冻结与结算
  • currentWindowId 自动推进至 4,最终 automationState() 返回 false / false

启动方式

docker compose up --build -d
docker compose logs -f keeper

@tingtonglls tingtonglls self-assigned this Aug 23, 2026
@tingtonglls tingtonglls added the enhancement New feature or request label Aug 23, 2026
@tingtonglls tingtonglls linked an issue Aug 23, 2026 that may be closed by this pull request
@Nero978
Nero978 merged commit e591ec2 into main Aug 23, 2026
1 check passed
@Nero978
Nero978 deleted the feat/docker-keeper branch August 23, 2026 02:54
@github-actions

Copy link
Copy Markdown

🎉🎉🎉 Congratulations on your new release! 🎉🎉🎉

We have created a release draft of the new version, please go to Release to publish it! ✨

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Try to write Keeper into smart contract

2 participants