数据集:

mwritescode/slither-audited-smart-contracts

英文

Slither 认证的智能合约数据集

数据集概述

该数据集包含了在 Etherscan.io 上已验证的 Solidity 智能合约的源代码和部署的字节码,以及根据 Slither 静态分析框架对其漏洞的分类。

支持的任务和排行榜

  • 文本分类:可以使用该数据集对智能合约的字节码和源代码进行二分类和多标签文本分类模型的训练。模型的性能根据与数据集中给定标签相比预测标签的准确率进行评估。
  • 文本生成:该数据集还可以用于训练 Solidity 编程语言的语言模型。
  • 图像分类:通过预处理字节码数据以获得 RGB 图像,该数据集还可以用于训练用于代码漏洞检测和分类的卷积神经网络。

语言

语言注释为英语,所有源代码均为 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 ]
}

数据字段

  • address:表示在以太坊主网上部署的智能合约的字符串。
  • source_code:Solidity 智能合约代码库的拍平版本。
  • bytecode:表示智能合约的字节码,通过调用 web3.eth.getCode() 获得。请注意,在某些情况下,如果不可用,则字符串只为 '0x'。
  • slither:Slither 的 JSON 输出的清理版本或类标签列表。

数据拆分

该数据集有 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 提供此数据集。