EVMLOG:从已知 EVM 地址在链上日志中识别关联模式

前言

链上调查往往从「一个已知地址」起步:要在海量 event log 里弄清它常和哪些合约、哪些事件、哪些对手地址一起出现,手工写 SQL、反复改聚合维度,既费时间又容易漏掉 topic1 / topic2 两侧的不对称关系。下面介绍 SkillHub 上的社区 Skill EVMLOG(坐标 @user_d4087b8b/evmlog):把「地址 padding → 双向 log 检索 → 模式强弱分类 → 交易哈希回查」写成 Agent 可照做的步骤,并约定通过 Dune API 查询 logs 表。

这是什么

EVMLOG 在 Skill 文档中的全名是「EVM Log 关联模式识别(从已知地址出发)」。它由 SkillHub 社区发布者 user_d4087b8b 维护,版本 1.0.0,分类为 it-ops-security,来源标注为 community。Skill 本身是一份基于通用 SKILL.md 格式的操作说明与示例代码,不捆绑独立 CLI;Agent 读取后按步骤调用 Dune,对目标地址在 topic1、topic2 两个 indexed 位上的共现模式做统计与归类。

官方入口:

  • API 地址:https://api.skillhub.cn/user_d4087b8b/evmlog
  • SkillHub 页面:https://www.skillhub.cn/skills/user_d4087b8b/evmlog

页面标签标明 requires_api_key=true,对应文档中的 Dune API Key。

核心功能

以下能力均来自 Skill 文档中的流程定义,可按 Step 0–8 复现。

  1. 地址标准化:将 20 字节地址左补零为 32 字节 topic 匹配形式(A*),用于 topic1 / topic2 等值过滤。
  2. 双向 Log 检索:在指定 logs_table(如 polygon.logs)上,分别查询 topic1 = A* 与 topic2 = A*,按 contract_address、topic0、对手 topic 聚合频次。
  3. 模式聚合与强弱分类:合并两侧结果,按 dominance_threshold、gap_threshold、min_sample_size 等参数区分强模式与弱模式。
  4. 弱模式扩展(可选):对样本稀疏的模式扩大 LIMIT,并关联 transactions 分析 from / to 分布。
  5. 哈希回查与序列:对强模式抽取代表 tx_hash,在同一笔交易内按 log 顺序输出 contract:topic0 事件序列。
  6. 对手地址标签化与新地址发现:用 known_labels 标注高频对手地址,并列出未在已知集合中的新地址。
  7. 结构化输出:主流程 run_skill 返回 CSV 字符串,包含强模式表、高频对手地址表、新发现地址表。

适用链在文档中写明为 Polygon、ETH、BSC、TRON 等 EVM 兼容环境,前提是目标地址可能出现在事件的 topic1 或 topic2(如 ERC20 Transfer、Approval、NFT Transfer、DeFi 自定义事件等)。

安装与启用

SkillHub 页面给出的安装方式是:让 Agent 参照 https://skillhub.cn/install/skillhub.md,安装坐标 @user_d4087b8b/evmlog。文档中的通用做法如下。

1、确认本机已有 SkillHub CLI

command -v skillhub && skillhub --version

未安装时可执行完整安装(文档推荐):

curl -fsSL https://skillhub-1388575217.cos.ap-guangzhou.myqcloud.com/install/install.sh | bash

2、安装到当前 Agent 的 skills 目录

安装时必须用 --dir 指向 Agent 实际读取的 skills 路径,否则默认落在 ./skills/ 可能不会被识别:

skillhub install @user_d4087b8b/evmlog --dir <skills 目录>

常见路径(摘自 SkillHub 安装文档):

  • Cursor:~/.cursor/skills/
  • Claude Code:~/.claude/skills/
  • Codex:~/.codex/skills/ 或项目下的 .agents/skills/

安装完成后按你所用客户端的要求重启或刷新 Agent,使其加载新 Skill。

3、准备 Dune API Key

Skill 示例代码通过请求头 X-Dune-API-Key 调用 https://api.dune.com/api/v1/ 下的 query / execute / results 接口。将 Key 配置在运行环境或脚本中(文档占位为 YOUR_DUNE_API_KEY),勿提交到版本库。

截至撰写时,SkillHub 页面显示的统计为:评分 100000,下载 826,安装 0(以页面为准,会随时间变化)。

典型用法

启用 Skill 后,向 Agent 说明目标地址、链上日志表名与时间窗口,并明确要求按 Skill 中的 Step 0–8 执行。文档给出的 Python 主入口示例如下(需已配置 Dune API Key 与 requests 等依赖):

KNOWN_LABELS = {
    "0xabcdef...": "Binance Hot Wallet",
    "0x123456...": "USDT Treasury",
}

csv_output = run_skill(
    address="0xYourTargetAddress",
    logs_table="polygon.logs",
    block_time_start="2024-01-01",
    top_n_initial=10,
    top_n_expand=50,
    dominance_threshold=0.40,
    gap_threshold=0.15,
    min_sample_size=20,
    max_hash_examples=20,
    known_labels=KNOWN_LABELS,
)

with open("output.csv", "w", encoding="utf-8") as f:
    f.write(csv_output)

必需输入参数(文档表格):

参数 说明 示例
address 目标地址 A 0xabc...
logs_table Dune 日志表名 polygon.logs
chain 链标识 polygon

双向检索的核心 SQL 形态为:在 block_time 过滤后,对 topic1 = '{A_padded}' 或 topic2 = '{A_padded}' 分组统计 contract_address、topic0 及对手 topic,并按 hit_count 排序、LIMIT 取前 N 行。Agent 应使用 Skill 内嵌的 pad_address、run_dune_query、fetch_log_patterns 等片段,而不是随意改写聚合维度。

适用场景与注意

适合谁:做链上风控、合规调查、地址画像的分析师或安全工程师;已习惯用 Dune 查 logs,希望把「从单点地址扩图」的流程固定下来,交给 Coding Agent 按同一套阈值重复跑。

限制与坑:

  • 依赖 Dune API 与对应链的 logs(及扩展步骤中的 transactions)表名;TRON、BSC 等需改 logs_table,逻辑不变。
  • 文档说明 topic0 到事件名的 ABI 解码已从主流程移除;需要事件名时可另行查 4bytes.directory 等来源。
  • expand_weak_patterns 在主入口示例中默认注释,交互稀疏时需手动开启。
  • 查询性能:示例执行使用 performance: "medium",文档建议百万行以内可用;范围过大应缩短 block_time_start 或改用更高性能档位。
  • 每次 Dune 查询会创建/执行 query,请注意 API 配额与私有查询策略(示例里 is_private: True)。

结尾

EVMLOG 把「已知 EVM 地址 + 日志表」下的关联模式识别拆成可核对的多步流程,输出可存档的 CSV,适合作为 Agent 在 it-ops-security 场景下的操作手册。安装与坐标以 SkillHub 为准:https://www.skillhub.cn/skills/user_d4087b8b/evmlog ,API 地址:https://api.skillhub.cn/user_d4087b8b/evmlog 。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye