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と呼ばれるツールを提案し、3つの主要なガスコストの高いパターン—不要コード、不透明な条件分岐、ループ内での繰り返し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つのガスコストの高いプログラミングパターンを、無駄なコード関連とループ関連の2つのグループに分類・特定する。
  • GASPERを実装し、シンボリック実行を活用して、コンパイル済みバイトコード内で3つの代表的なガスコストの高いパターンを自動で特定する。
  • 2016年11月5日までにEthereumにデプロイされた4,240件の実世界スマートコントラクトのデータセットにGASPERを適用し、パターンの出現頻度を測定する。
  • 静的解析とシンボリック実行を用いて、不要コード、不透明な条件分岐、およびループ内での重複SLOAD/SSTORE操作などのパターンの存在を検証する。
  • オープンソースコントラクト(例:FirstContractおよびBallot)を対象とした事例研究を通じて、検出可能なガス節約効果を実証する。

実験結果

リサーチクエスチョン

  • RQ1Solidityでコンパイルされたスマートコントラクトのうち、トランザクションおよびデプロイコストを増加させるガス非効率なバイトコードパターンがどの程度存在するか?
  • RQ2Solidityにおけるどの具体的なプログラミングパターンが過剰なガス消費を引き起こし、コンパイル済みバイトコード内で自動で検出可能か?
  • RQ3これらのガスコストの高いパターンは、Ethereumスマートコントラクトエコシステム全体でどの程度広がっているか?
  • RQ4ソースコードのアクセスがなくても、シンボリック実行を用いてバイトコード内でのガス非効率なパターンを効果的に検出できるか?
  • RQ5実世界のコントラクトにおいてこれらのパターンを最適化することで、どの程度の財務的インパクトが得られるか?

主な発見

  • 解析された4,240件のスマートコントラクトの93.5%が不要コードまたは不透明な条件分岐(パターン1および2)を含んでおり、Solidityコンパイルコードにおける広範な非効率性が示された。
  • 90.1%のコントラクトがループ内に重複するSLOAD操作を含んでおり、SLOADをループ外に移動させることでガス使用量を削減できる。
  • 80%のコントラクトがループ内で繰り返しSSTORE操作を実行しており、値をスタック変数にキャッシュすることで最適化可能である。
  • Ballotに対する事例研究では、1回のSLOAD操作をループ外に移動させることで、1イテレーションあたりのガス消費量を20回から1回に削減でき、顕著な節約効果が得られた。
  • 推奨コンパイラを使用しても、スマートコントラクトの顕著な一部がガス効率を最適化していないことが判明し、ユーザーおよび開発者にとって回避可能な財務的損失が生じている。
  • これらのパターンがEthereumエコシステム全体に広がっていることから、コンパイラおよび開発ツールチェーンレベルでの体系的最適化が求められることが示された。

より良い研究を、今すぐ始めましょう

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。