原文标题: Defining Smart Contract Defects on Ethereum 原文作者: Jiachi Chen, Xin Xia, David Lo, John Grundy, Xiapu Luo and Ting Chen 原文机构: 澳大利亚维多利亚州墨尔本莫纳什大学信息技术学院、新加坡管理大学信息系统学院、香港理工大学计算机系、电子科技大学计算机科学与工程学院 原文地址: 10.1109/TSE.2020.2989002 发表日期/期刊: 2020 年 4 月 20 日/IEEE Transactions on Software Engineering 笔记整理:doxbwx@163.com
??本文对以太坊平台上定义智能合约缺陷进行了实证研究。之前的一些工作是侧重于从安全方面提高智能合约的质量,并且没有验证从业人员是否认为这些合同缺陷是有害的。这是第一篇旨在从安全性、可用性、性能、可维护性和可重用性五个方面系统地研究合同缺陷的论文。为了解决这些限制,我们对17128个以太坊进行了研究。本文主要贡献是:
- 本文从安全性、可用性、性能、可维护性和可重用性五个方面为智能合约定义了20个合约缺陷,列出了每个合约缺陷的症状并给出了一个代码示例
- 本文分析了定义的合同缺陷的影响,并总结了5个常见的影响,可以帮助决定去除缺陷的优先级。
- 本文的工作是第一个关于智能合约缺陷的实证研究。目标是确定它们的重要性,并收集从业人员的意见。本工作是一个实用的合同缺陷检测工具的需求工程步骤。
1.1智能合约缺陷
??本文从StackExchange网站上爬取了17128条帖子,作者通过阅读solidity文档找到相关的66个重要的关键词过滤了4141篇文章,再通过手动过滤与合约缺陷无关的帖子,只保留与合同缺陷相关的帖子。采用Card Sorting的方法对过滤后的合约缺陷相关帖子进行分析和分类。为每个帖子创建了一张包含缺陷标题、描述和注释的信息的卡片。大致过程如下
首先,随机选择20%的卡片。首先阅读卡片的标题和描述,以理解文章中讨论的缺陷。然后阅读注释来理解如何解决缺陷。再根据缺陷的根本原因分为下图所示的前五个类别。 接着,按照之前中描述的相同方法,两位作者独立地将剩下的80%的卡片分类。然后发现了一个“Inappropriate Standard”类别,这在其他牌中很常见。再比较结果,讨论其中的差异。最后,将缺陷分为6个主题;详细信息如下图所示。使用了Cohen’s Kappa来衡量两位作者之间的一致性。 它们的总体Kappa值为0.82,这说明有很强的一致性。
下图为智能合约缺陷的分类 ??再对帖子寻找更多的细节行为定义合约缺陷,最后总结为16种合约缺陷。 ??从Etherscan抓取了所有17,013个经过验证的智能合约,然后随机选择600份智能合约,过滤掉一部分没有任何功能的智能合约后,该数据集剩余587个智能合约。 ??再通过代码差异性,对数据集中的智能合约进行缺陷分类,定义了4种缺陷。 最后一共定义了20种合同缺陷。
1.2结果
根据定义可以将缺陷分为安全缺陷、性能缺陷、可用性缺陷、可维护性缺陷和可重用性缺陷。
2.从业者视角
本文创建了一个在线调查,从现实世界的智能合约开发者那里收集意见。 ??调查对象为在世界知名公司或学术机构工作或学习的合作伙伴和GitHub上为开源智能合约相关项目做出贡献的1489名从业者。一共收到84条评论来自32个不同国家,平均智能合约开发经验为1.95年。 非常重要为5分,非常不重要为1分。几乎所有的缺陷都超过4分,平均分为4.22。
3.合同缺陷分布及影响
??本文总结了5种影响,并手工标注了587个智能合约,以显示它们在现实世界智能合约中的分布。 ??两位作者有比较丰富的智能合约相关开发经验,并且他们的总体Kappa值为0.71,表明他们有很大的一致性,他们共同得出一个关于合约缺陷影响级别的结论。 ??每种影响度的特性 从三个维度来考虑,即合同维度(不想要的行为)、攻击者维度(攻击向量)和用户维度(可用性),其中IP1最高,IP5最低。影响级别为1-2的合同缺陷可能导致严重的不必要行为,如崩溃或合约被攻击者控制。影响级别为3的合约缺陷会导致主要的有害行为,如丢失的gas。影响级别4-5可能会导致一些琐碎的问题,如可读性低,但不会影响合约的正常运行。
讨论
??本文对研究者、实践者和教育者的启示都比较大,目前已经有很多的工具可以实现对上述缺陷进行检测的功能。但是下图四个工具都没有考虑到其他两个被实践者认为同样重要的方面。因此,可以将更多的精力放在开发能够检测除了下图之外的其他13个合同缺陷的工具上。
|