《Characterizing Code Clones in the Ethereum Smart Contract Ecosystem》导读

Characterizing Code Clones in the Ethereum Smart Contract Ecosystem

Abstract
摘要
在本文中,我们提出了第一个大规模的系统研究,以表征以太坊智能合约生态系统中的代码重用实践。 我们首先对我们已收获的1000万份合同的数据集进行了详细的相似性比较研究,然后我们进一步进行了定性分析,以表征生态系统的多样性,了解代码重用与漏洞之间的相关性,并检测出抄袭者DApp。 我们的分析表明,超过96%的合约具有重复项,而其中很多是相似的,这表明生态系统是高度同质的。 我们的结果还表明,大约9.7%的相似合同对具有完全相同的漏洞,我们认为是由代码克隆引入的。 此外,我们确定了41个DApp集群,涉及73抄袭的DApp,这些DApp给原始创作者造成了巨大的经济损失,占原始市场总量的1/3。

1.Introduction
智能合约一般由高级语言如Solidity编写(和javascript,c++类似),然后编写成EVM字节码
Decentralized Applications(去中心化应用,缩写为DApps,包括一个或多个合约)的代码应该是可供审查的,并由自治社区管理。然而智能合约开源的特性为剽窃代码提供了方便,以此造成了代码克隆。代码克隆造成的后果主要有两点,一方面,剽窃者可以插入任意的或者恶意的代码到原始的正常的代码中,一个典型的例子例子就是所谓的honeynet smart contract(27-29),这些是通过小把戏愚弄使用者的合约。另一方面,由于一些智能合约自身存在严重的安全风险,那么剽窃的代码也自然继承了这种风险。
我们这里使用Fomo3D作为驱动例子,它火爆全球,随之而来的就是大量重用它的源代码的类似的游戏的产生。不幸的是,黑客们找到了原始Fomo3D的airdrop机制的设计缺陷,之后相关的dapp就收到了攻击
本文实现了以综合性方法进行大规模系统性地研究来对智能合约中代码克隆行为的抽象。我们收集了最大规模的以太坊智能合约数据集,相近1千万个。我们首先通过移除函数无关的代码来识别克隆的合约,然后进行tokenize来得到opcode。在预处理阶段移除了复制的合约后,数据集规模缩小到不到原来的1%。对于剩下来的78611个独立的合约,我们采用了自己设计的fuzzy hashing方法来生成指纹,然后进行pair-wise相似度比较。特别的,为了加速比较进程,我们采用剪枝的方法通过比较元特征去除了非常不同的合约。基于70 的相似度门限值,我们识别出了472662个相似的合约对(涉及到47232个合约)。

2.BackGround
一个典型的EVM字节码由三部分组成:creation code,runtime code,swarm code。
《Characterizing Code Clones in the Ethereum Smart Contract Ecosystem》导读

3.Methodology
《Characterizing Code Clones in the Ethereum Smart Contract Ecosystem》导读
3.1预处理
预处理的目的是为了1.识别复制的合约;2.对合约进行token化以便进一步的比较
Creation code,swarm code对于相似度计算没有用,并且可以很容易从字节码中被识别出来。然后我们使用hash来保证剩余的合约在runtime code层面的独特性。第二点,为了快速准确的指纹生成,我们移除了所有在PUSH后的立即数,因为EVM是一个基于栈的虚拟机。另外,我们使用hash表来保证剩余合约的独特性。通过这种方法,我们得到了兑现最小的数据集。
3.2指纹生成
计算给定两个序列的edit distance是一种知名的计算它们相似度的方法。我们使用一种fuzzy hashing技术来压缩原始的字节码到更短的指纹,然后计算两个指纹见的edit distance
《Characterizing Code Clones in the Ethereum Smart Contract Ecosystem》导读
3.3相似度比较

《Characterizing Code Clones in the Ethereum Smart Contract Ecosystem》导读
4Quantitative Analysis
定量分析
5.Qualitative Analysis
定性分析

6.Relaterd Work
ECLONE(64)
7.Concluding Remarks and Future work