该数据集包含了在 Etherscan.io 上已验证的 Solidity 智能合约的源代码和部署的字节码,以及根据 Slither 静态分析框架对其漏洞的分类。
语言注释为英语,所有源代码均为 Solidity。
每个数据实例包含以下特征:address、source_code和bytecode。标签有两种配置,一种是 Slither 工具的输出结果的纯文本清理版本,另一种是多标签版本,由整数列表组成,每个整数表示一个特定的漏洞类别。标签 4 表示合约是安全的。
纯文本配置的示例如下:
{ 'address': '0x006699d34AA3013605d468d2755A2Fe59A16B12B' 'source_code': 'pragma solidity 0.5.4; interface IERC20 { function balanceOf(address account) external ...' 'bytecode': '0x608060405234801561001057600080fd5b5060043610610202576000357c0100000000000000000000000000000000000000000000000000000000900...' 'slither': '{"success": true, "error": null, "results": {"detectors": [{"check": "divide-before-multiply", "impact": "Medium", "confidence": "Medium"}]}}' }
多标签配置的示例如下:
{ 'address': '0x006699d34AA3013605d468d2755A2Fe59A16B12B' 'source_code': 'pragma solidity 0.5.4; interface IERC20 { function balanceOf(address account) external ...' 'bytecode': '0x608060405234801561001057600080fd5b5060043610610202576000357c0100000000000000000000000000000000000000000000000000000000900...' 'slither': [ 4 ] }
该数据集有 6 种配置,仅为名称中不包含 all- 的配置提供了训练、测试和验证拆分。测试集和验证集占总体的约 15%。
创建 slither-audited-smart-contracts 是为了为已验证的 Solidity 智能合约的漏洞检测和分类提供一个可自由获取的大规模数据集。事实上,当前为此任务提供的最大型开源数据集是 SmartBugs Wild ,其中包含了使用 SmartBugs 框架的 9 个工具对 47,398 个智能合约进行标记的数据集。
数据集的构建始于提供在 Smart Contract Sanctuary 上已验证的智能合约列表。然后,智能合约源代码要么从上述存储库下载,要么通过 Etherscan 下载,并使用 Slither 合约拍平器进行拍平处理。使用 Web3.py 库下载字节码,具体是使用 web3.eth.getCode() 函数并使用我们的端点 INFURA 。最后,使用 Slither 静态分析框架分析了每个智能合约。工具在收集的合约中发现了 38 种不同的漏洞类别,然后根据文件 label_mappings.json 中的显示,将它们映射到 9 个标签。这些映射是按照 Decentralized Application Security Project (DASP) 和 Smart Contract Weakness Classification Registry 的指南进行推导的,并且受到了使用 SmartBugs Wild 数据集进行 Slither 检测的团队的映射的启发,该数据集可以在 here 上找到。
该数据集最初由马蒂娜·罗西尼(Martina Rossini)在意大利博洛尼亚大学(University of Bologna,意大利)的区块链与加密货币课程项目中创建。
该存储库中的所有文件都适用于 LICENSE 文件中的许可证,但不包括合约的 Solidity 源代码。这些源代码仍然是公开可用的,是通过 Etherscan API 获取的,并保留其原始许可证。
如果您在研究和论文中使用此数据集,请参考以下引用方式:
@misc{rossini2022slitherauditedcontracts, title = {Slither Audited Smart Contracts Dataset}, author={Martina Rossini}, year={2022} }
感谢 @mwritescode 提供此数据集。