広告

第14話:不正な操作は許さない!require, assert, revertで堅牢なコントラクトを作る

第14話:不正な操作は許さない!require, assert, revertで堅牢なコントラクトを作る

概要

スマートコントラクトの安全性を支える、3つのエラー処理(require, assert, revert)の完全ガイドです。外部入力の検証に用いるrequireと、内部エラーを検出するassertの違いを明確化。

さらに、現代のベストプラクティスであるrevertと「カスタムエラー」が持つ、優れたガス効率と豊富な情報伝達能力を解説。堅牢でユーザーに優しいDAppを構築するための必須知識が身につきます。

目次
Solidity学習講座:最終版 目次(全20話)
Solidity学習講座:最終版 目次(全20話)

基礎編 第1話:未来のインターネットへようこそ!Solidityとスマートコントラクトの全体像 第2話:準備は1分!ブラウザだけで開発できる「Remix IDE」の基本操作 第3話:記念すべき初コント ...

続きを見る

はじめに

第13話では、ETHを送金する際の最重要セキュリティパターン「Checks-Effects-Interactions」を学びました。その最初のステップ「Checks」において、require文がいかに重要な門番の役割を果たすか、実感していただけたと思います。

スマートコントラクトは、一度デプロイすると修正が困難な、お金が絡むプログラムです。そのため、予期せぬ入力や不正な状態を徹底的に排除する**「防御的プログラミング」**の発想が不可欠です。

Solidityには、この防御を固めるための強力なツールとして、3つのエラー処理機能が用意されています。

  1. require: 外部からの入力や状態を検証する
  2. assert: 内部的なロジックの不整合をチェックする
  3. revert: より柔軟でガス効率の良いエラー処理を行う

あなたはrequireには既によく慣れ親しんでいるはずです。しかし、これら3つの微妙な違いと、それぞれの適切な使い分けを理解することは、あなたのコントラクトの安全性と品質を決定づける、極めて重要な知識なのです。

-Solidity