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, 交易分析, 交易哈希, 以太坊, 函数选择器, 区块链安全, 大语言模型代理, 智能合约审计, 根因分析, 漏洞分类, 逆向工具, 链上取证, 防御加固