Skip to main content
QUICK REVIEW

[論文レビュー] Deductive Proof of Ethereum Smart Contracts Using Why3

Zeinab Nehaï, François Bobot|arXiv (Cornell University)|Apr 25, 2019
Blockchain Technology Applications and Security参考文献 13被引用数 12
ひとこと要約

本論文は、Why3(帰納的検証ツール)を用いて産業的 Ethereum スマートコントラクトの形式的検証フレームワークを提示する。Solidity コントラクトを WhyML にエンコードし、安全特性(例:実行時エラーの不在、正しいトークン転送)を定義し、自動定理証明器を用いて検証した。その後、ガス消費量の推定を伴い、検証済みコントラクトを EVM バイナリコードにコンパイルした。主な貢献は、形式的保証を伴い、複雑な実世界のスマートコントラクトに対して Why3 の実用性を示したことである。

ABSTRACT

A bug or error is a common problem that any software or computer program may encounter. It can occur from badly writing the program, a typing error or bad memory management. However, errors can become a significant issue if the unsafe program is used for critical systems. Therefore, formal methods for these kinds of systems are greatly required. In this paper, we use a formal language that performs deductive verification on an Ethereum Blockchain application based on smart contracts, which are self-executing digital contracts. Blockchain systems manipulate cryptocurrency and transaction information. Therefore , if a bug occurs in the blockchain, serious consequences such as a loss of money can happen. Thus, the aim of this paper is to propose a language dedicated to deductive verification, called Why3, as a new language for writing formal and verified smart contracts, thereby avoiding attacks exploiting such contract execution vulnerabilities. We first write a Why3 smart contracts program; next we formulate specifications to be proved as absence of RunTime Error properties and functional properties, then we verify the behavior of the program using the Why3 system. Finally we compile the Why3 contracts to the Ethereum Virtual Machine (EVM). Moreover, we give a set of generic mathematical statements that allows verifying functional properties suited to any type of smart contracts holding cryptocurrency, showing that Why3 can be a suitable language to write smart contracts. To illustrate our approach, we describe its application to a realistic industrial use case.

研究の動機と目的

  • バグによる財務的損失などのスマートコントラクトにおける深刻なセキュリティリスクに対処するため、形式的検証を適用すること。
  • Why3(帰納的検証プラットフォーム)が、複雑なスマートコントラクトの仕様定義、検証、コンパイルに効果的に使用可能かどうかを評価すること。
  • 形式的検証を単純なコントラクトから、複数のデータ型(例:トークン、アドレス、残高)を含む複雑な論理を含む機能的特性へと拡張すること。
  • 形式的検証パイプライン内にガス推定メカニズムを提供し、正しさと実行コストを結びつけること。

提案手法

  • Why3 の中で使用される高水準形式言語である WhyML に、ブロックチェーンエネルギーマーケットプレイス(BEMP)アプリケーションの既存の Solidity ベースのスマートコントラクトをエンコードすること。
  • 前件、後件、不変条件を用いて、正しい残高転送、有効な取引条件、実行時エラーの不在といった機能的特性を指定すること。
  • Why3 の統合された定理証明器(例:Alt-ergo、Z3、CVC4)を用いて、正しさと安全性のための証明義務を自動的に解決すること。
  • 関数に `@evm:gas_checking` アノテーションを付加し、検証中に計算コストを推定すること。
  • Why3 のコード生成パイプラインを用いて、検証済み Why3 コントラクトを EVM 互換のバイナリコードにコンパイルすること。
  • 各操作のガス使用量を追跡し、関数呼び出し全体にわたって合計するカスタムガスコストモデルを統合すること。

実験結果

リサーチクエスチョン

  • RQ1Why3 は、複雑な論理と複数のデータ型を含む産業スケールの Ethereum スマートコントラクトを、形式的に効果的に検証できるか?
  • RQ2スマートコントラクトの帰納的検証フレームワーク内で、ガス消費量はどの程度正確に推定できるか?
  • RQ3Why3 を用いた形式的検証は、BEMP のような実世界のアプリケーションで実行時エラーを防止し、機能的正しさを保証できるか?
  • RQ4Solidity と比較して、WhyML で複雑な特性(例:注文マッチング、残高転送)を記述する際のオーバーヘッドと表現力はどの程度か?
  • RQ5Why3 パイプラインは、仕様定義から EVM コンパイルまで、エンドツーエンドの検証をどの程度サポートできるか?

主な発見

  • Why3 フレームワークは、BEMP アプリケーションの複雑な取引コントラクトを正常に検証した。これには、残高の適切な処理、トークン転送、注文マッチングの処理が含まれた。
  • 形式的仕様により、配列のインデックス外アクセスやゼロ除算といった実行時エラーの不在が正しく証明された。
  • システムは機能的特性を正しく検証した。これには、マーケット参加者間での正しく処理されたエーテルおよびグリーントークンの転送が含まれる。
  • アノテートされたコストモデルを用いてガス消費量が正確に推定され、各操作のガスコスト(例:128 がリスト走査、185 が割り当て)が検証プロセスに統合された。
  • 検証済みコントラクトは正常に EVM バイナリコードにコンパイルされ、仕様からデプロイまでに信頼性が保証されたエンドツーエンドの信頼性を示した。
  • 本アプローチは、マルチユーザー・マルチ参加者型のエネルギートレーディングシステムへとスケーラブルであることが示され、単純なコントラクトを超えた適用可能性を示した。

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

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

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

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