论文部分内容阅读
以太坊是一个支持加密货币(以太币)和智能合约的区块链平台。尽管以太坊上已经部署的智能合约数量超过了800万个,但是人们对其用户的特征、智能合约的活动以及它们之间互动知之甚少。而智能合约作为一种利用区块链机制(运行于以太坊虚拟机)来执行代码的软件,由于其具备诸多优点而受到越来越多的关注。为了确保智能合约的执行能够终止并防止资源的滥用,以太坊向部署智能合约的开发人员和使用智能合约的用户收取费用,另外未优化的智能合约相比优化过后会花费更多的交易费用,而针对智能合约的优化可以从底层的操作码序列以及高级语句逻辑结构两个角度入手。此外最近的研究发现,通过使用静态程序分析技术,可以检测出大量智能合约存在严重的安全性问题。对于智能合约,大多数静态程序分析技术需要首先构建其控制流图,而控制流图需要通过控制流转移(CFTs)将基本代码块串接起来,以进行下一步的分析。针对以上问题,本文基于复杂网络分析技术、程序字节码优化技术、程序控制流转移(CFT)技术、gas低效率特征优化技术完成了四项工作以达到对以太坊更全面的研究与理解。本文的主要研究内容为以下几点:本文通过网络图分析完成了对以太坊的系统化研究,之后提出了一种新的方法来收集所有的交易数据,然后构造资金转移网络图(MFG)、智能合约创建图(CCG)和智能合约调用图(CIG)来描述以太坊上的主要活动。本文通过分析MFG、CCG和CIG上的各种网络图指标(如聚类系数),获得了关于以太坊的观察和见解。这些结果使得研究者能够更好地了解以太坊的生态系统。针对以太坊的攻击取证、异常检测和去匿名化三个重要的安全问题,本文分别提出了三种基于三种网络图的检测方法,且通过实际案例的分析验证了检测方法的有效性。针对底层操作码序列的优化,本文提出了24个在部署和调用智能合约时浪费gas的可优化特征代码序列,并确定了替换可优化特征代码序列实例的相应高效代码。本文设计了一个智能合约字节码级的工作流,可以自动检测可优化特征代码序列并将其替换为对应高效代码。本文对已部署的智能合约及其执行记录进行实验,检测出大量的可优化特征代码实例。本文完成了大规模的智能合约CFT识别分析,对6个被广泛使用的工具进行了全面的比较,对所有部署的智能合约进行了检测,并最终获得了许多见解且其中一些可以应用到其他工具上。本文利用EVM来恢复智能合约的历史执行记录,使用这些记录来评估工具,并发现了执行记录可以显著地补充工具发现的CFT。基于以上的观察,本文使用从执行轨迹中提取的CFT来增强oyente,而大量的实验表明,这种增强能减少其漏报率。针对高级语句逻辑结构,本文提出了10种gas低效率智能合约特征代码,并基于符号执行技术设计了对gas低效率特征的检测方法。本文对以太坊的已部署合约进行了广泛的实证研究,分析了gas低效率特征的普遍程度。并且本文针对不同版本的编译器开展了实验,确定了编译器版本升级对gas低效率特征的消除效果。