sahuang/txrca-bench

GitHub: sahuang/txrca-bench

TxRCA-Bench 是一个面向交易级 DeFi 漏洞根因分析的基准数据集与评估框架,解决如何仅凭链上证据让 AI 代理准确识别根因的问题。

Stars: 0 | Forks: 0

# TxRCA-Bench **一个用于评估 AI 代理在交易层面进行 DeFi 漏洞根因分析的基准测试。** TxRCA-Bench 据我们所知,是第一个提出以下问题的问题:*仅给定一个交易哈希,能否仅凭链上数据让前沿 AI 代理识别出 DeFi 漏洞的根因?* 它包含 **70 个真实世界的漏洞交易**,涵盖 8 个漏洞类别,分布于以太坊和 BSC 上,每个交易都标注了真实根因、脆弱代码以及丰富的链上证据。已针对七种前沿 AI 代理配置进行了评估,产生 **490 次分级运行**,由两位独立的 LLM 法官进行评分。 完整报告与发现:参见 [我的博客](https://sahua.ng/posts/txrca-bench/)。 ## 本仓库包含什么 ``` . ├── data/ │ ├── eval_set.json # 70 evaluation cases with ground-truth labels │ ├── pilot_set.json # 11 pilot cases (held out from evaluation) │ ├── benchmark_pool.json # Full filtered candidate pool │ ├── selectors.json # Local 4byte function-selector snapshot │ └── phase1_stats.json # Dataset construction statistics │ ├── transactions/ # Per-case on-chain workspaces │ ├── ethereum// │ │ ├── raw/ # Transaction data, receipt, decoded logs │ │ ├── trace/ # Full call trace │ │ ├── contracts/ # Per-contract ABIs and metadata │ │ ├── contract_sources/ # Verified Solidity source (or decompiled bytecode) │ │ ├── workspace_summary.md │ │ ├── analysis_prompt.txt │ │ ├── runs// │ │ │ └── analysis_output.json # Agent's raw output │ │ └── results// │ │ ├── analysis_output.json │ │ ├── analysis_output.stdout.txt │ │ ├── score.json # Fast-path scoring │ │ ├── score_opus46.json # Claude Opus 4.6 judge │ │ └── score_gpt54.json # GPT-5.4 judge │ └── bsc// # Same structure │ ├── results/ │ ├── manifest.json # Index of all 490 runs (status + paths) │ ├── phase4_full_results.json # One row per (case, setting) with all scores │ ├── phase4_aggregate.json # Per-setting summary statistics │ ├── phase4_inter_judge.json # Inter-judge agreement (Cohen's κ) │ ├── prompts/ │ └── analysis_prompt.md # Agent task specification │ ├── schemas/ │ └── analysis_output.schema.json # JSON schema for agent output ``` ## 数据集 `data/eval_set.json` 中的每个评估案例包含: ``` { "case_id": "aaverepayadapter_c27c3ec6", "chain": "ethereum", "tx_hash": "0xc27c3ec6...", "canonical_category": "Insufficient Validation", "root_cause_narrative": "...", "vulnerable_code": "...", "flash_loan_used": false, "multi_step": false, "profile": "low" } ``` ### 漏洞类别 | 类别 | 数量 | 以太坊 | BSC | 高调案例 | 闪电贷 | | --- | ---: | ---: | ---: | ---: | ---: | | 价格操纵 | 10 | 4 | 6 | 0 | 10 | | 闪电贷 | 10 | 2 | 8 | 0 | 10 | | 重新进入攻击 | 9 | 9 | 0 | 3 | 0 | | 访问控制 | 10 | 4 | 6 | 0 | 0 | | 业务逻辑漏洞 | 10 | 4 | 6 | 0 | 0 | | 验证不足 | 10 | 5 | 5 | 0 | 0 | | 精度损失 | 8 | 7 | 1 | 2 | 0 | | 配置错误 | 3 | 2 | 1 | 2 | 0 | | **总计** | **70** | **37** | **33** | **7** | **20** | ### 每个案例的工作空间 对于每个评估案例,`transactions///` 包含一个自包含的分析工作空间: - **`raw/`** — `transaction.json`、`receipt.json`、`decoded_logs.json` - **`trace/`** — 包含解码内部调用的完整调用跟踪 - **`contracts/`** — 每个合约的 ABI 和元数据 - **`contract_sources/`** — 已验证的 Solidity 源码(如可用),否则为反编译的字节码 - **`workspace_summary.md`** — 上述内容的可读摘要 - **`analysis_prompt.txt`** — 提交给每个代理的确切提示 这是每个代理可访问的完整证据集。不进行网络搜索、不查询区块浏览器、也不使用任何链下上下文。 ## 代理输出与评分 ### 评估的代理设置 七种配置,两种代理运行时: | 设置 | 模型 | 努力程度 | | --- | --- | --- | | `gpt5_high` | `gpt-5` | 高 | | `gpt53codex_high` | `gpt-5.3-codex` | 高 | | `gpt54_high` | `gpt-5.4` | 高 | | `gpt54_xhigh` | `gpt-5.4` | 极高 | | `sonnet46_high` | `claude-sonnet-4-6` | 高 | | `opus46_high` | `claude-opus-4-6` | 高 | | `opus46_max` | `claude-opus-4-6` | 极高 | 每个设置均针对全部 70 个评估案例运行,共产生 490 次运行。原始代理输出位于 `transactions///results//analysis_output.json`。 ### 评分标准 每个运行由两位独立 LLM 法官(Claude Opus 4.6 和 GPT-5.4)进行 0–7 分评分: | 分数 | 标准 | | :---: | --- | | 0 | 无输出或与交易完全无关 | | 1 | 错误的根因类别;分析模糊或泛泛 | | 2 | 错误的类别但包含部分正确观察 | | 3 | 正确的类别;机制模糊,缺少具体证据 | | 4 | 正确的类别 + 正确的脆弱合约/函数 | | 5 | 得分 4 且包含正确的机制和引用的链上证据 | | 6 | 得分 5 且包含正确的端到端攻击链 | | 7 | 完美:得分 6 且无多余类别,正确的冲击影响 | **二元成功** = 得分 ≥ 5。两条特殊规则:若将闪电贷单独列为唯一根因(当它是资本放大器时)最高得分为 4;“精度损失”误标为“价格操纵”最高得分为 2。 每个运行的得分分别存储在 `score_opus46.json` 和 `score_gpt54.json` 中,并与代理输出一同保存。聚合结果位于 `results/` 下。 ## 头条结果 | 设置 | Opus 法官成功率 | GPT-5.4 法官成功率 | | --- | ---: | ---: | | gpt5_high | 35.7% | 20.0% | | gpt53codex_high | 56.5% | 32.9% | | gpt54_high | 55.7% | 38.6% | | gpt54_xhigh | 62.9% | 34.3% | | sonnet46_high | 55.7% | 31.4% | | opus46_high | 64.3% | 47.1% | | **opus46_max** | **72.9%** | **48.6%** | 评委间一致性:Cohen's κ = 0.58(中等至实质性一致);完全一致率 53.4%;一致在 1 分以内 72.8%。 完整的分析(包括失败模式分类、污染控制、按类别细分、努力消融分析以及具体案例研究)请参见 `index.md`。 ## 使用数据 ### 读取基准数据集 ``` import json with open("data/eval_set.json") as f: cases = json.load(f) print(f"Loaded {len(cases)} cases") print(cases[0]["case_id"], cases[0]["canonical_category"]) ``` ### 读取代理输出与评分 ``` from pathlib import Path import json case = cases[0] workspace = Path("transactions") / case["chain"] / case["tx_hash"] # Agent output for one setting output = json.load(open(workspace / "results/opus46_max/analysis_output.json")) # Primary judge score score = json.load(open(workspace / "results/opus46_max/score_opus46.json")) print(score["score"], score["rationale"][:200]) ``` ### 聚合分析 `results/phase4_full_results.json` 包含每组 `(案例, 设置)` 的配对行及两位法官的评分,是下游分析最便捷的文件。 ### 评估您自己的代理 因为每个案例仅由 `(交易哈希, 链 ID)` 和真实标签定义,任何代理都可以参与评估: 1. 向代理提供交易哈希 + 链 ID 以及对应案例的工作空间目录。 2. 生成符合 `schemas/analysis_output.schema.json` 的输出。 3. 使用上述评分标准,依据 `eval_set.json` 中的 `canonical_category` 和 `root_cause_narrative` 对输出进行评分。 代理任务规范位于 `prompts/analysis_prompt.md`。 ## 许可证 本仓库中的代码示例根据 MIT 许可证发布。 真实标注与派生数据集工件根据 CC BY 4.0 发布。 原始链上数据来源于公开的以太坊和 BNB Chain 区块链记录。 真实标注数据改编自 [SunWeb3Sec DeFi 安全漏洞根因分析](https://github.com/SunWeb3Sec/DeFi-Security-Breach-RCA) 数据集。
标签:AI evaluation benchmark, AI智能体, BSC, call trace, decoded logs, DeFi, Homebrew安装, on-chain数据, real-world exploits, Root Cause Analysis, solidity, transaction-level analysis, TxRCA-Bench, workspace analysis, 交易分析, 交易哈希, 以太坊, 函数选择器, 区块链安全, 大语言模型代理, 智能合约审计, 根因分析, 漏洞分类, 逆向工具, 链上取证, 防御加固