Skip to main content
QUICK REVIEW

[论文解读] Under-Optimized Smart Contracts Devour Your Money

Ting Chen, Xiaoqi Li|arXiv (Cornell University)|Mar 11, 2017
Blockchain Technology Applications and Security参考文献 9被引用 17
一句话总结

本文指出,Ethereum智能合约的主要编译器Solidity由于未优化的编程模式,生成了气体效率低下的字节码,导致不必要的财务成本。作者提出GASPER,一种基于符号执行的工具,可自动检测三种主要的气体高成本模式——无用代码、模糊谓词以及循环中的重复SLOAD/SSTORE操作。研究发现,分别有93.5%、90.1%和80%的分析智能合约存在这些问题。

ABSTRACT

Smart contracts are full-fledged programs that run on blockchains (e.g., Ethereum, one of the most popular blockchains). In Ethereum, gas (in Ether, a cryptographic currency like Bitcoin) is the execution fee compensating the computing resources of miners for running smart contracts. However, we find that under-optimized smart contracts cost more gas than necessary, and therefore the creators or users will be overcharged. In this work, we conduct the first investigation on Solidity, the recommended compiler, and reveal that it fails to optimize gas-costly programming patterns. In particular, we identify 7 gas-costly patterns and group them to 2 categories. Then, we propose and develop GASPER, a new tool for automatically locating gas-costly patterns by analyzing smart contracts' bytecodes. The preliminary results on discovering 3 representative patterns from 4,240 real smart contracts show that 93.5%, 90.1% and 80% contracts suffer from these 3 patterns, respectively.

研究动机与目标

  • 调查尽管存在气体高效编程实践,为何Ethereum上的智能合约仍会产生高于必要的气体成本。
  • 识别Solidity中导致过度气体消耗的常见编程模式,即使使用推荐的编译器也是如此。
  • 开发一种自动化工具,可在无需访问源代码的情况下检测真实世界智能合约中的这些气体高成本模式。
  • 量化这些低效模式在Ethereum生态系统中的普遍性,以展示财务浪费的规模。

提出的方法

  • 使用符号执行分析Solidity生成的字节码,以检测无需源代码的气体效率低下模式。
  • 识别并分类7种气体高成本编程模式为两类:无用代码相关模式与循环相关模式。
  • 实现GASPER,该工具利用符号执行技术,自动在编译后的字节码中定位三种代表性气体高成本模式。
  • 将GASPER应用于截至2016年11月5日部署在Ethereum上的4,240个真实世界智能合约数据集,以测量模式的普遍性。
  • 使用静态分析与符号执行,验证诸如无用代码、模糊谓词以及循环中冗余SLOAD/SSTORE操作等模式的存在。
  • 通过开源合约(如FirstContract和Ballot)的真实案例研究验证发现,以证明可实现的气体节省效果。

实验结果

研究问题

  • RQ1使用Solidity编译的智能合约在多大程度上包含会增加交易和部署成本的气体效率低下的字节码模式?
  • RQ2Solidity中的哪些特定编程模式会导致过度气体消耗?这些模式能否在无源代码访问的情况下自动检测?
  • RQ3这些气体高成本模式在Ethereum智能合约生态系统中有多普遍?
  • RQ4符号执行能否有效用于在无源代码访问的情况下检测字节码中的气体效率低下模式?
  • RQ5优化这些模式在真实合约中可能带来多大的财务影响?

主要发现

  • 在分析的4,240个智能合约中,93.5%包含无用代码或模糊谓词(模式1和2),表明Solidity编译代码中普遍存在效率低下问题。
  • 90.1%的合约在循环中包含冗余的SLOAD操作,可通过将SLOAD移出循环来优化,从而减少气体使用。
  • 80%的合约在循环中表现出重复的SSTORE操作,可通过将值缓存在栈变量中进行优化。
  • 对Ballot的案例研究显示,将单个SLOAD操作移出循环可将每次迭代的气体消耗从20次减少到仅1次,实现显著节省。
  • 研究表明,即使使用推荐的Solidity编译器,仍有相当一部分智能合约未针对气体效率进行优化,导致用户和开发者产生可避免的财务损失。
  • 这些模式在Ethereum生态系统中的普遍性表明,需要在编译器和开发工具层面开展系统性优化工作。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。