Clear Sky Science · zh

DIVE:一个多标签智能合约漏洞数据集

· 返回目录

为什么更安全的数字合约很重要

每天都有数十亿美元通过“智能合约”流动——这些是在以太坊等区块链上自动执行交易的代码。当这些数字协议中存在隐蔽错误时,后果可能十分严重:资金被冻结、资产被盗以及对新金融体系的信任丧失。本文介绍了 DIVE,这是一个规模大且经过精心构建的数据集,旨在帮助研究人员更可靠地发现和理解智能合约中的弱点,从而使支撑加密货币和去中心化应用的数字协议对所有人来说更安全。

Figure 1
Figure 1.

数字合约如何存在与演变

智能合约在其生命周期中会经历若干阶段。它们以开发者可读的源代码开始,然后被编译成机器友好的指令,并通过部署交易发送到区块链。一旦被接受,合约会获得一个永久地址且其代码不可更改,但随着用户交互,其内部状态仍会变化。在这一过程中,会产生不同类型的数据——源代码、字节码、配置和交易记录——这些都包含关于可能缺陷的线索。DIVE 基于这种生命周期视角构建,从部署前(代码和配置)和部署后(链上行为)收集特征,以便对每个合约提供更完整的描述。

以往数据集的不足之处

早期的智能合约集合催生了用机器学习方法识别漏洞的研究,但它们存在严重限制。许多数据集包含的合约数量较少,集中在狭窄的时间窗口或特定的编译器版本,或者只抓取一种数据类型,如源代码或字节码,而非两者兼顾。有些工作把漏洞当作每个合约只可能有一种,这与现实不符,因为真实合约常常同时包含多个问题。标签也并不总是一致,因为不同研究使用不同的命名方案并依赖一两个工具而缺乏通用标准。所有这些都让跨论文比较结果或构建能在多项研究之外泛化的检测器变得困难。

DIVE 数据集包含的内容

DIVE 汇集了 22,330 个真实以太坊合约,部署时间覆盖 2016 年至 2024 年,跨越 Solidity 编程语言的主要版本。每个合约通过数百个特征进行描述。在部署前,DIVE 记录诸如编译器版本、优化设置、外部库使用、公共接口结构(函数和事件)、代码复杂度度量以及用于创建合约的低级指令模式等项目。部署后,它补充了来自部署交易的信息——燃气使用量、发送的数额、时间及在区块中的位置——以及来自合约运行时代码的指令模式。这种双重视角让研究人员可以研究编码选择和链上行为如何共同影响安全性。

如何识别漏洞

为决定哪些合约存在漏洞,DIVE 不依赖单一工具或简单多数投票。相反,它运行六种不同的分析工具,每种工具有其优势,并将它们的发现通过标准化框架进行汇总。工具输出被映射到 DASP 前十列表中的八个知名类别,如重入(reentrancy)缺陷、访问控制失效、算术错误、拒绝服务风险、糟糕的随机性、抢先执行(front running)、时间操控和未检查的低级调用。然后采用基于“信力”的投票方案逐类别决定对每个工具结果的信任程度。在此基础上,还进行第二步验证,检查标记的问题是否实质上由合约代码支持——例如确认所谓的算术错误并未被现代编译器检查或安全库所防护。这一额外审查消除了许多误报,尤其是针对拒绝服务和时间相关警告的误报。

Figure 2
Figure 2.

该资源的用途

由于 DIVE 是多标签的,单个合约可以被标注为多种漏洞类型,这反映了现实中漏洞的聚集与交互。该数据集支持广泛的研究:二分类与多类分类、多标签与多任务学习、跨编译器版本或年份的迁移学习,以及比较部署前与部署后信息价值的实验。它还记录了不同漏洞共同出现的频率,表明某些漏洞(如重入和访问控制问题)倾向于同时发生,而其他漏洞则更少见且更孤立。这些模式鼓励采用更先进的学习方法来建模漏洞类型之间的关系,而不是将每种漏洞孤立对待。

对普通用户意味着什么

对于大多数人来说,智能合约是交易应用、游戏、借贷平台和其他区块链服务背后的隐形基础设施。DIVE 数据集并不能直接修复漏洞,但它提供了训练和公平测试更强检测工具所需的详尽且标注良好的数据。这些工具反过来可以帮助开发者更早发现问题,帮助审计人员优先安排审查。由于该框架是开放的并且可以随着时间对新合约重复运行,DIVE 提供了一个持续演进的基础,用以改善数字协议的安全性——降低普通用户因所依赖代码中的隐蔽错误而受到伤害的风险。

引用: Alsunaidi, S.J., Aljamaan, H. & Hammoudeh, M. DIVE: A Multi-Label Smart Contract Vulnerability Dataset. Sci Data 13, 664 (2026). https://doi.org/10.1038/s41597-026-07025-5

关键词: 智能合约安全, 以太坊, 区块链漏洞, 机器学习数据集, DASP 前十