CoderDamien/smart-contract-vuln-dataset
GitHub: CoderDamien/smart-contract-vuln-dataset
该数据集提供大规模标准化标注的 Solidity 智能合约漏洞样本,支持漏洞检测、类型分类和行级定位三个基准任务,并附带完整的论文复现包。
Stars: 1 | Forks: 0
# 面向 Solidity 和 Ethereum 安全的智能合约漏洞数据集
一个大规模的 Solidity 智能合约漏洞数据集,可用于 Ethereum 安全研究、智能合约漏洞检测、漏洞类型分类、漏洞行定位以及基于 LLM 的代码安全评估。
仓库名称:`smart-contract-vuln-dataset`。
当前发布版本:`v1.0.3`。
行坐标模式修订:`v1.0.3`。
此版本包含与论文对齐的复现包以及漏洞行坐标模式修订。
发布元数据:[metadata/release_metadata.json](metadata/release_metadata.json)。
归档校验和:[metadata/archive_checksums.csv](metadata/archive_checksums.csv)。
DOI 状态:GitHub 发布后,等待 Zenodo 归档。
本仓库发布了处理后的基准数据、标准化标注、构建工具,以及用于开源大语言模型智能合约漏洞检测研究的文档。
中文版本:[README.zh-CN.md](README.zh-CN.md)。
数据集卡片:[DATASET_CARD.md](DATASET_CARD.md)。
论文复现包:[replication/](replication/)。
补充表格:[supplementary/](supplementary/)。
关键词:智能合约漏洞数据集,Solidity 漏洞检测,Ethereum 智能合约安全,重入漏洞检测数据集,智能合约缺陷定位,漏洞行定位,漏洞类型分类,LLM 代码安全基准,区块链漏洞检测,Web3 安全数据集。
已处理的数据集归档:[data/processed/balanced_stage1_resplit_721.tar.gz](data/processed/balanced_stage1_resplit_721.tar.gz)。
合并后的数据集归档:[data/merged/](data/merged/)。
发布说明:[RELEASE.md](RELEASE.md)。
## 论文复现包
本仓库还在 [replication/](replication/) 目录下包含了一个面向论文的复现包。它包括划分索引、标签映射、实验配置、评估脚本、结果表格、预测产出摘要、渲染图表以及图表源文件。
带编号的补充表格提供在 [supplementary/](supplementary/) 目录下。合并的工作簿 [supplementary/supplementary_tables.xlsx](supplementary/supplementary_tables.xlsx) 包含了工作表 `Table_S1` 到 `Table_S14`,单独的 CSV 文件可在 [supplementary/tables/](supplementary/tables/) 下找到。这些表格使论文中对补充表格 S1、S5、S9 和 S13 的引用可以直接进行审计。
当前的复现包与日期为 2026-06-03 的 IST 论文版本保持一致。该研究评估了 226 种模型-任务-模式组合,来自 8 个模型系列的 25 个模型,以及四种使用模式:直接推理、结构化提示、全量微调和 QLoRA。提示词消融补充完全遵循论文范围:2 个 Qwen2.5-Coder 模型,2 个任务和 4 种提示词设置,对应补充表 S9 中的 16 项对比。
从仓库文件到论文结果的映射记录在 [replication/README.md](replication/README.md) 中。具体而言:
- 数据集划分在 [replication/data_splits/balanced_stage1_resplit_721/split_file_index.csv](replication/data_splits/balanced_stage1_resplit_721/split_file_index.csv) 中建立索引,包含校验和,其内部路径指向 [data/processed/balanced_stage1_resplit_721.tar.gz](data/processed/balanced_stage1_resplit_721.tar.gz)。
- 标签映射位于 [replication/label_mapping/](replication/label_mapping/)。
- 实验配置位于 [replication/experiment_configs/](replication/experiment_configs/)。
- 评估脚本位于 [replication/evaluation/](replication/evaluation/)。
- 结果表格位于 [replication/results/](replication/results/)。
- 预测产出摘要位于 [replication/prediction_summaries/](replication/prediction_summaries/)。
- 图表源文件和渲染的 SVG 图表位于 [replication/figure_source/](replication/figure_source/) 和 [replication/figures/](replication/figures/)。
### 论文图表
当前论文使用了重新设计的图表集,位于 [replication/figures/figures_q1_redesign/](replication/figures/figures_q1_redesign/):
| 论文图表 | 文件 |
|---|---|
| 图 1. 可复现的评估框架 | `replication/figures/figures_q1_redesign/fig1_protocol.svg` |
| 图 2. Qwen2.5-Coder 规模趋势 | `replication/figures/figures_q1_redesign/fig4_qwen_scaling.svg` |
| 图 3. 结构化提示词消融 | `replication/figures/figures_q1_redesign/fig5_prompt_ablation.svg` |
| 图 4. 候选命中与精确行定位边界对比 | `replication/figures/figures_q1_redesign/fig8_line_boundary.svg` |
| 图 5. 运行时-性能 Pareto 权衡 | `replication/figures/figures_q1_redesign/fig9_runtime_tradeoff.svg` |
### 论文结果锚点
[replication/results/](replication/results/) 下的汇总结果文件支持论文中报告的以下主要发现:
| 任务 / 分析 | 论文锚点 | 支持文件 |
|---|---|---|
| 正式评估矩阵 | 226 个模型-任务-模式单元;63 个直接推理,63 个提示词,63 个 QLoRA 和 37 个全量微调单元 | `paper_experiment_matrix_closure.csv`; `paper_experiment_metrics_all.csv`; `model_summary.csv` |
| 漏洞存在检测 | 最佳 F1:0.8757(Qwen2.5-Coder-1.5B 全量微调) | `has_vul_metrics.csv`; `paper_experiment_metrics_all.csv` |
| 漏洞类型识别 | 最佳标准 F1:0.6265;最佳 macro-F1:0.4755;最佳多标签 F1:0.4300 | `vul_type_metrics.csv`; `paper_experiment_metrics_all.csv` |
| 漏洞行定位 | 最佳 strict-F1:0.2955;最佳合约命中率:0.8451 | `vul_line_metrics.csv`; `paper_experiment_metrics_all.csv` |
| 提示词消融 | 针对 `vul_type` 和 `vul_line` 进行的 Qwen2.5-Coder-7B 和 32B 模型的 16 项对比 | `prompt_ablation.csv`; `supplementary/tables/Table_S9.csv` |
| 数据集扩展 | 保留的 6 对同模型、同任务、同方法的扩展前后对比 | `data_completion_pairs.csv`; `supplementary/tables/Table_S10.csv` |
## 亮点
- 105,278 个用于二元漏洞检测的合并样本。
- 95,573 个用于漏洞类型分类的合并样本。
- 24,178 个带有漏洞行标注的合并样本。
- 整合了 8 个公共上游来源,涵盖精选基准、注入基准、审计衍生标签、弱静态分析标签以及漏洞发现数据库。
- 挖掘了 19,557 个低频候选样本,准备了 3,157 个审查样本,并有 2,666 个确认的低频样本被接受用于下游构建。
- 8 个标准化的漏洞类别。
- 为三个基准任务提供特定任务的训练/验证/测试集划分。
- 多源构建 pipeline,包含标准化的暂存数据、合并数据和已处理的基准划分。
- 用于导入、标准化、去重、合并、划分和审计数据的可复现工具。
据我们所知,该数据集是公开可用的、融合了漏洞存在标签、漏洞类型标签和行级漏洞标注的最大规模的智能合约漏洞数据集之一。
## GitHub 主题
推荐的仓库主题:
```
smart-contracts, solidity, ethereum, vulnerability-detection, smart-contract-security, blockchain-security, web3-security, dataset, llm, code-security, reentrancy, static-analysis, vulnerability-localization, benchmark
```
## 任务
该数据集支持三个任务:
| 任务 ID | 任务 | 描述 |
|---|---|---|
| `has_vul` | 漏洞检测 | 对存在漏洞与干净的智能合约样本进行二元分类。 |
| `vul_type` | 漏洞类型分类 | 在标准化漏洞类别上进行多标签分类。 |
| `vul_line` | 漏洞行定位 | 预测一行或多行漏洞上下文行的多行预测任务。 |
对于 `vul_line`,`vulnerabilities[].line` 和 `vulnerabilities[].line_end` 是相对于已发布的 `context` 字段的基于 1 的行号。它们不一定是原始源文件的行号。当可以通过源元数据或全上下文同一性映射进行重构时,会通过 `source_line` 和 `source_line_end` 提供原始源文件坐标。`source_mapping_method` 字段记录了映射的依据。
## 数据集统计
### 合并后的数据集
| 数据集 | 样本数 | 主要用途 |
|---|---:|---|
| `has_vul_merged_stage0` | 105,278 | 二元漏洞检测 |
| `vul_type_merged_stage0` | 95,573 | 漏洞类型分类 |
| `vul_line_merged_stage0` | 24,178 | 漏洞行定位 |
合并后的归档文件是为那些需要比推荐的已处理划分更多数据的用户准备的。它们是经过标准化、标签映射和基本清理后更大的多源数据池。
### 已处理的基准划分
当前推荐的已处理划分是 `balanced_stage1_resplit_721`。
| 数据集 | 训练集 | 验证集 | 测试集 | 总计 |
|---|---:|---:|---:|---:|
| `has_vul_721_stratified_v1` | 17,411 | 4,667 | 2,363 | 24,441 |
| `vul_type_721_stratified_v1` | 18,573 | 3,829 | 1,992 | 24,394 |
| `vul_line_721_stratified_v1` | 10,155 | 1,529 | 807 | 12,491 |
已处理的划分更小,因为它们应用了特定任务的过滤、平衡、去重以及训练/验证/测试集构建。
### 漏洞类型计数
合并后的 `vul_type_merged_stage0` 标签计数为:
| 类型 | 计数 |
|---|---:|
| `access_control` | 22,342 |
| `arithmetic` | 24,879 |
| `bad_randomness` | 3,020 |
| `denial_service` | 102 |
| `front_running` | 288 |
| `reentrancy` | 35,151 |
| `time_manipulation` | 3,049 |
| `unchecked_low_calls` | 62,048 |
推荐处理的 `vul_type_721_stratified_v1` 划分包含 24,394 个样本。其标签存在计数为:
| 类型 | 训练集 | 验证集 | 测试集 | 总计 |
|---|---:|---:|---:|---:|
| `access_control` | 4,062 | 819 | 406 | 5,287 |
| `arithmetic` | 6,711 | 1,631 | 844 | 9,186 |
| `bad_randomness` | 1,795 | 471 | 241 | 2,507 |
| `denial_service` | 996 | 269 | 153 | 1,418 |
| `front_running` | 779 | 218 | 119 | 1,116 |
| `reentrancy` | 5,010 | 1,234 | 615 | 6,859 |
| `time_manipulation` | 1,449 | 311 | 239 | 1,999 |
| `unchecked_low_calls` | 4,190 | 571 | 291 | 5,052 |
### 漏洞行定位计数
合并后的 `vul_line_merged_stage0` 包含 24,178 个行定位样本。标签计数为:
| 类型 | 计数 |
|---|---:|
| `access_control` | 5,336 |
| `arithmetic` | 4,754 |
| `front_running` | 288 |
| `reentrancy` | 653 |
| `time_manipulation` | 2,985 |
| `unchecked_low_calls` | 10,248 |
推荐处理的 `vul_line_721_stratified_v1` 划分包含 12,491 个样本。其标签存在计数为:
| 类型 | 训练集 | 验证集 | 测试集 | 总计 |
|---|---:|---:|---:|---:|
| `access_control` | 1,262 | 59 | 34 | 1,355 |
| `arithmetic` | 2,548 | 542 | 289 | ,379 |
| `bad_randomness` | 2,014 | 559 | 281 | 2,854 |
| `denial_service` | 1,023 | 280 | 143 | 1,446 |
| `front_running` | 838 | 233 | 126 | 1,197 |
| `reentrancy` | 269 | 77 | 36 | 382 |
| `time_manipulation` | 1,462 | 287 | 152 | 1,901 |
| `unchecked_low_calls` | 3,312 | 220 | 128 | 3,660 |
## 漏洞类别
标准化的标签空间包含以下漏洞类别:
| 标签 | 描述 |
|---|---|
| `access_control` | 访问控制和授权相关的漏洞。 |
| `arithmetic` | 整数溢出、下溢及算术相关漏洞。 |
| `bad_randomness` | 不安全或可预测的随机性。 |
| `denial_service` | 拒绝服务漏洞。 |
| `front_running` | 交易顺序依赖和抢先交易相关的漏洞。 |
| `reentrancy` | 重入漏洞。 |
| `time_manipulation` | 时间戳和时间依赖性漏洞。 |
| `unchecked_low_calls` | 未检查的底层调用、未检查的 send 以及未处理的外部调用结果。 |
一些中间文件也可能包含 `other` 或 `unknown` 标签,用于表示无法可靠映射到主分类体系中的源发现。推荐的基准划分会根据任务协议对这些标签进行过滤或记录。
## 数据来源
该数据集整合并标准化了来自多个公共智能合约漏洞来源的样本:
| 来源 | 在数据集中的角色 | 支持的任务 |
|---|---|---|
| [SmartBugs Curated](https://github.com/smartbugs/smartbugs-curated) | 精选基准来源 | `has_vul`, `vul_type`, `vul_line` |
| [SolidiFI Benchmark](https://github.com/DependableSystemsLab/SolidiFI-benchmark) | 带有位置元数据的注入漏洞基准 | `has_vul`, `vul_type`, `vul_line` |
| [DAppSCAN](https://github.com/InPlusLab/DAppSCAN) | 真实世界的 DApp 源码和审计衍生标签 | `has_vul`, `vul_type` |
| [Slither Audited Smart Contracts](https://huggingface.co/datasets/mwritescode/slither-audited-smart-contracts) | 从 Slither 检测器输出衍生的大型弱标记数据集 | `has_vul`, `vul_type` |
| [ScrawlD](https://github.com/sujeetc/ScrawlD) | 源码支持的低频漏洞扩展 | `has_vul`, `vul_type`, `vul_line` |
| [Smart Contract VulnDB / SCVD](https://www.scvd.dev/) | 用于候选挖掘和审查的发现级漏洞描述 | `vul_type` |
| [Smart Contract Sanctuary](https://github.com/tintinweb/smart-contract-sanctuary) | 源码恢复和基于源码的样本支持 | 源码恢复 |
| [Empirical Analysis of Vulnerability Detection Tools for Solidity Smart Contracts](https://github.com/fsalzano/Empirical-Analysis-of-Vulnerability-Detection-Tools-for-Solidity-Smart-Contracts) | 论文在多源扩展之前使用的原始基准来源 | `has_vul`, `vul_type`, `vul_line` |
有关来源级别的说明和许可证审查提醒,请参见 [docs/data_sources.md](docs/data_sources.md)。
有关公共来源链接和各来源的贡献计数,请参见 [docs/source_usage.md](docs/source_usage.md)。
有关处理、清理、去重和增强的详细信息,请参见 [docs/data_processing_and_augmentation.md](docs/data_processing_and_augmentation.md)。
有关数据集构建工作的总结,请参见 [docs/construction_effort.md](docs/construction_effort.md)。
有关许可证和许可说明,请参见 [metadata/upstream_license_review.md](metadata/upstream_license_review.md) 和 [metadata/authorization_requests.en.md](metadata/authorization_requests.en.md)。
## 仓库结构
```
.
|-- README.md
|-- LICENSE
|-- CITATION.cff
|-- data/
| |-- staging/
| |-- processed/
| `-- metadata/
|-- tools/
|-- docs/
|-- examples/
`-- metadata/
```
发布政策:
- 原始上游数据不在本仓库中发布。
- `data/staging/`:跨源合并前标准化的各来源 JSON 文件。
- `data/processed/`:可供模型训练和评估使用的特定任务基准数据集。
- `tools/`:用于数据构建、统计和格式转换的可复用脚本。
- `docs/`:来源文档、构建协议、schema、用例和限制。
- `metadata/`:机器可读的统计数据、标签 schema、来源目录和发布检查表。
对于分发条款不明确的上游来源,仅发布来源引用、检索说明和衍生元数据。请勿重新分发原始的源代码归档或原始审计报告。
## 数据格式
每个标准化样本都遵循统一的 schema:
```
{
"sample_id": "source::split::item",
"source_dataset": "solidifi_benchmark",
"source_split": "train",
"source_path": "path/or/original/id",
"granularity": "contract",
"contract_name": "Example",
"function_name": null,
"context": ["pragma solidity ...", "contract Example { ... }"],
"has_vulnerability": 1,
"vulnerabilities": [
{
"type": "reentrancy",
"line": 42,
"line_end": 42,
"line_coordinate_system": "context_relative_1based",
"context_start_line": 1,
"source_line": 42,
"source_line_end": 42,
"raw_loc": null,
"raw_length": null,
"line_scope": "context",
"source_mapping_status": "available",
"source_mapping_method": "full_context_identity_by_source_dataset",
"source_taxonomy": "source taxonomy name",
"source_label": "original source label",
"evidence": [],
"metadata": {}
}
],
"label_confidence": "silver",
"label_origin": "source_annotation",
"dedup_hash_raw": "...",
"dedup_hash_normalized": "...",
"metadata": {}
}
```
有关完整的字段描述,请参见 [docs/schema.md](docs/schema.md)。
## 快速开始
在启用 Git LFS 的情况下下载或克隆仓库,然后解压已处理的基准归档:
```
git lfs install
git clone https://github.com/CoderDamien/smart-contract-vuln-dataset.git
cd smart-contract-vuln-dataset
git checkout v1.0.3
git lfs pull
tar -xzf data/processed/balanced_stage1_resplit_721.tar.gz -C data/processed/
tar -xzf data/merged/has_vul_merged_stage0.tar.gz -C data/merged/
tar -xzf data/merged/vul_type_merged_stage0.tar.gz -C data/merged/
tar -xzf data/merged/vul_line_merged_stage0.tar.gz -C data/merged/
```
```
import json
from pathlib import Path
path = Path("data/processed/balanced_stage1_resplit_721/has_vul_721_stratified_v1/train.json")
samples = json.loads(path.read_text(encoding="utf-8"))
print("Samples:", len(samples))
print("Fields:", samples[0].keys())
print("Label:", samples[0]["has_vulnerability"])
```
更多示例提供在 [docs/usage.md](docs/usage.md) 和 [examples/load_dataset.py](examples/load_dataset.py) 中。
## 构建 Pipeline
该数据集通过以下 pipeline 构建:
1. 收集原始的公共数据集和源代码语料库。
2. 将每个来源标准化为统一的样本 schema。
3. 将特定于来源的漏洞标签映射到共享的分类体系中。
4. 使用原始和标准化的源代码哈希对样本进行去重。
5. 按任务合并来源。
6. 构建特定任务的训练/验证/测试集划分。
7. 审计标签覆盖率、行标签有效性、重复 ID 和来源分布。
请参见 [docs/dataset_construction.md](docs/dataset_construction.md)。
## 引用
如果您使用了该数据集,请引用该数据集仓库及相关论文:
```
@dataset{xu_smart_contract_vulnerability_dataset_2026,
title = {Smart Contract Vulnerability Dataset for Solidity and Ethereum Security},
author = {Xu, Daming},
year = {2026},
version = {v1.0.3},
publisher = {GitHub},
url = {https://github.com/CoderDamien/smart-contract-vuln-dataset}
}
```
在 Zenodo 归档后,请将仅包含 URL 的引用替换为分配给该版本的 DOI。
在适用的情况下,也请引用原始的上游数据集。请参见 [docs/data_sources.md](docs/data_sources.md)。
## 许可证
公共仓库的建议许可政策:
- 仓库代码和文档:MIT。
- 自行创建的数据集元数据、统计信息和标注 schema:CC BY 4.0。
- 原始上游数据:不重新分发。
- 包含上游源代码的处理后样本,仅应在相应的上游许可证允许分发时发布,或者替换为来源指针和重构脚本。
请保留上游引用、声明和许可证文件。请参见 [metadata/upstream_license_review.md](metadata/upstream_license_review.md)。
## 限制
该数据集整合了具有不同标签来源、粒度和置信度的异构来源。标签可能包含特定于来源的噪声、合成漏洞、弱标记和人工审查的子集。在使用该数据集进行基准测试声明之前,请参见 [docs/limitations.md](docs/limitations.md)。
标签:C2, DLL 劫持, Solidity, 以太坊, 区块链安全, 大语言模型, 智能合约, 逆向工具