時価総額: $2.8313T 0.35%
ボリューム(24時間): $138.9602B -22.27%
恐怖と貪欲の指数:

28 - 恐れ

  • 時価総額: $2.8313T 0.35%
  • ボリューム(24時間): $138.9602B -22.27%
  • 恐怖と貪欲の指数:
  • 時価総額: $2.8313T 0.35%
暗号
トピック
暗号化
ニュース
暗号造園
動画
トップクリプトスペディア

言語を選択する

言語を選択する

通貨の選択

暗号
トピック
暗号化
ニュース
暗号造園
動画

require、assert、revert によるエラーチェックをどのように処理しますか?

Solidity's `require`, `revert`, and `assert` ensure secure smart contracts: use `require` for input validation, `revert` for custom errors, and `assert` for internal invariants.

2025/11/14 17:19

Solidity のエラー処理メカニズムを理解する

ブロックチェーン開発の世界、特にイーサリアムエコシステム内では、安全で信頼性の高いスマートコントラクトを作成することが最も重要です。契約の整合性を確保するための中核的な側面の 1 つは、適切なエラー処理です。 Solidity には、エラーを管理するためのいくつかの組み込み関数 ( requirerevert 、およびassert )が用意されています。それぞれが明確な目的を果たし、ロジックの正確性を維持し、意図しない動作を防ぐために特定の状況下で使用されます。

入力と条件の検証に require を使用する

requireステートメントは主に、重要な操作を実行する前に入力、外部条件、または状態要件を検証するために使用されます。これにより、十分な残高、正しい送信者の役割、有効なタイムスタンプなど、特定の前提条件が満たされることが保証されます。 require ステートメント内の条件が false と評価された場合、トランザクションは元に戻され、実行中に行われた変更はすべて元に戻されます。重要なのは、require は未使用のガスを呼び出し元に返金するため、ユーザー入力の検証が効率的になります。

  1. アドレスや数値などの関数の引数を確認するには、require を使用します。
  2. msg.sender に適切な役割があることを確認して、アクセス制御を検証します。
  3. block.timestamp を期限と照合するなど、時間ベースの条件が満たされていることを確認します。
  4. 資産を譲渡する前に、トークンの許容量または残高を確認してください。
  5. 失敗の理由を明確にするために、require ステートメントに説明的な文字列を含めます。

カスタマイズされたエラー処理に復帰を活用する

revert は、 require と比較して、エラー メッセージと条件をより詳細に制御できます。 require は条件が失敗したときに自動的に元に戻りますが、revert を使用すると、開発者はオプションのカスタム エラー メッセージを使用してコード内の任意の時点で元に戻すことができます。 Solidity 0.8.4 以降、開発者はerrorキーワードを使用してカスタム エラー タイプを定義できるようになり、文字列メッセージよりも効率的にエラーをエンコードすることでガスを節約できます。

  1. error キーワードを使用してカスタム エラーを定義し、復帰時のガス コストを削減します。
  2. 複雑なロジックが無効な状態と判断した場合は、明示的に revert を呼び出します。
  3. わかりやすくするために、InvalidAddress() や InsufficientFunds(uint) などの構造化エラー タイプを使用します。
  4. 要件でカバーされていない予期しないエッジケースを検出した後、復帰をトリガーします。
  5. revert と修飾子を組み合わせて、複数の関数にわたる検証ロジックを一元化します。

内部不変チェックのためのアサートの適用

assert は、内部不変条件、つまりコードが正しく実装されている場合に false にならない条件をチェックするために予約されています。トリガーされた場合は、コントラクト内のバグを示します。 require とは異なり、assert は失敗すると残りのガスをすべて消費するため、算術オーバーフロー (Solidity 0.8 以前) や保存されたデータの予期せぬ変更などの回復不可能なエラーを検出するためにのみ使用する必要があります。 Solidity の新しいバージョンでは、多くの算術問題が自動的に処理されるため、手動によるアサートの必要性が減ります。

  1. Assert を使用して、計算後に変数の値が予想範囲内に留まっていることを確認します。
  2. 実行中に重要なストレージ変数が破損していないことを確認してください。
  3. 到達不能なコード パスが実際に到達不能であることを、assert(false) を使用して確認します。
  4. 入力検証や外部条件には Assert を使用しないでください。これは内部一貫性を目的としています。
  5. アサートの失敗は、ユーザーによる修正ではなく、コードの修正が必要な重大なバグを示していることを理解してください。

よくある質問

require が失敗した場合、gas はどうなりますか? require ステートメントが失敗すると、トランザクションは元に戻され、すべての状態変更がロールバックされます。未使用のガスは呼び出し元に返されるため、無効な入力を送信するユーザーのコストが最小限に抑えられます。

require でカスタム エラーを使用できますか?いいえ、require はブール条件とオプションの文字列メッセージのみを受け入れます。 error キーワードで定義されたカスタム エラー タイプを使用するには、代わりに revert を使用する必要があります。

Solidity 0.8以降でもassertは必要ですか? Solidity 0.8 以降では自動オーバーフロー チェックが行われたため、その使用は減少しました。ただし、カスタムの不変条件や、プログラミング エラーを示す予期しない論理状態を検証する場合には依然として役立ちます。

なぜrequireではなくrevertを選択するのでしょうか? revert は、実行の中止を決定する前に複雑な評価を実行する必要がある場合、または可読性を高めてガスコストを削減するためにカスタム エラーを活用する場合に選択されます。これは、require によって提供される単純な条件チェックを超える柔軟性を提供します。

免責事項:info@kdj.com

提供される情報は取引に関するアドバイスではありません。 kdj.com は、この記事で提供される情報に基づいて行われた投資に対して一切の責任を負いません。暗号通貨は変動性が高いため、十分な調査を行った上で慎重に投資することを強くお勧めします。

このウェブサイトで使用されているコンテンツが著作権を侵害していると思われる場合は、直ちに当社 (info@kdj.com) までご連絡ください。速やかに削除させていただきます。

関連知識

LayerZero コントラクトを使用してクロスチェーン メッセージを実行するにはどうすればよいですか?

LayerZero コントラクトを使用してクロスチェーン メッセージを実行するにはどうすればよいですか?

2026-01-18 13:19:39

LayerZero アーキテクチャを理解する1. LayerZero は、信頼できる仲介者やラップされた資産に依存せずにブロックチェーン間の通信を可能にする、軽量で許可のない相互運用性プロトコルとして動作します。 2. 各チェーンに展開されたウルトラ ライト ノード (ULN) を利用して、ブロック...

安全な署名検証のために EIP-712 を実装するにはどうすればよいですか?

安全な署名検証のために EIP-712 を実装するにはどうすればよいですか?

2026-01-20 22:20:26

EIP-712 の概要と主な目的1. EIP-712 は、イーサリアム アプリケーションにおける型付き構造化データのハッシュと署名の標準を定義します。 2. これにより、ウォレットは、署名リクエスト中に未加工の 16 進文字列の代わりに人間が判読できるドメインおよびメッセージ フィールドを表示できる...

新しい契約を交わしてエアドロップの資格を得るにはどうすればよいですか?

新しい契約を交わしてエアドロップの資格を得るにはどうすればよいですか?

2026-01-24 21:00:23

契約のやり取りの要件を理解する1. ほとんどのエアドロップ キャンペーンでは、Ethereum、Arbitrum、Base などのサポートされているブロックチェーンにデプロイされたスマート コントラクトとの直接対話が義務付けられています。 2. インタラクションには通常、dApp インターフェースに...

スマート コントラクトのセキュリティ アラートを監視するにはどうすればよいですか?

スマート コントラクトのセキュリティ アラートを監視するにはどうすればよいですか?

2026-01-21 07:59:57

オンチェーン監視ツール1. Etherscan や Blockscout などのブロックチェーン エクスプローラーを使用すると、コントラクト バイトコード、トランザクション ログ、内部呼び出しをリアルタイムで検査できます。 2. オンチェーンデータを信頼する前に、契約の検証ステータスを確認する必要が...

自動支払いのための契約を設定して資金を調達するにはどうすればよいですか?

自動支払いのための契約を設定して資金を調達するにはどうすればよいですか?

2026-01-26 08:59:35

スマートコントラクトの展開を理解する1. 開発者は、ガス効率とセキュリティ要件に基づいて、Ethereum、Polygon、Arbitrum などの互換性のあるブロックチェーン プラットフォームを選択する必要があります。 2. Solidity は、特に定期的な送金や条件付き送金の場合、支払い自動化...

OpenZeppelin コントラクトを使用して安全な dApp を構築するにはどうすればよいですか?

OpenZeppelin コントラクトを使用して安全な dApp を構築するにはどうすればよいですか?

2026-01-18 11:19:49

OpenZeppelin コントラクトの基礎を理解する1. OpenZeppelin Contracts は、イーサリアムおよび EVM 互換ブロックチェーン用に構築された、再利用可能なコミュニティ監査済みのスマート コントラクト コンポーネントのライブラリです。 2. ライブラリ内の各コントラクト...

LayerZero コントラクトを使用してクロスチェーン メッセージを実行するにはどうすればよいですか?

LayerZero コントラクトを使用してクロスチェーン メッセージを実行するにはどうすればよいですか?

2026-01-18 13:19:39

LayerZero アーキテクチャを理解する1. LayerZero は、信頼できる仲介者やラップされた資産に依存せずにブロックチェーン間の通信を可能にする、軽量で許可のない相互運用性プロトコルとして動作します。 2. 各チェーンに展開されたウルトラ ライト ノード (ULN) を利用して、ブロック...

安全な署名検証のために EIP-712 を実装するにはどうすればよいですか?

安全な署名検証のために EIP-712 を実装するにはどうすればよいですか?

2026-01-20 22:20:26

EIP-712 の概要と主な目的1. EIP-712 は、イーサリアム アプリケーションにおける型付き構造化データのハッシュと署名の標準を定義します。 2. これにより、ウォレットは、署名リクエスト中に未加工の 16 進文字列の代わりに人間が判読できるドメインおよびメッセージ フィールドを表示できる...

新しい契約を交わしてエアドロップの資格を得るにはどうすればよいですか?

新しい契約を交わしてエアドロップの資格を得るにはどうすればよいですか?

2026-01-24 21:00:23

契約のやり取りの要件を理解する1. ほとんどのエアドロップ キャンペーンでは、Ethereum、Arbitrum、Base などのサポートされているブロックチェーンにデプロイされたスマート コントラクトとの直接対話が義務付けられています。 2. インタラクションには通常、dApp インターフェースに...

スマート コントラクトのセキュリティ アラートを監視するにはどうすればよいですか?

スマート コントラクトのセキュリティ アラートを監視するにはどうすればよいですか?

2026-01-21 07:59:57

オンチェーン監視ツール1. Etherscan や Blockscout などのブロックチェーン エクスプローラーを使用すると、コントラクト バイトコード、トランザクション ログ、内部呼び出しをリアルタイムで検査できます。 2. オンチェーンデータを信頼する前に、契約の検証ステータスを確認する必要が...

自動支払いのための契約を設定して資金を調達するにはどうすればよいですか?

自動支払いのための契約を設定して資金を調達するにはどうすればよいですか?

2026-01-26 08:59:35

スマートコントラクトの展開を理解する1. 開発者は、ガス効率とセキュリティ要件に基づいて、Ethereum、Polygon、Arbitrum などの互換性のあるブロックチェーン プラットフォームを選択する必要があります。 2. Solidity は、特に定期的な送金や条件付き送金の場合、支払い自動化...

OpenZeppelin コントラクトを使用して安全な dApp を構築するにはどうすればよいですか?

OpenZeppelin コントラクトを使用して安全な dApp を構築するにはどうすればよいですか?

2026-01-18 11:19:49

OpenZeppelin コントラクトの基礎を理解する1. OpenZeppelin Contracts は、イーサリアムおよび EVM 互換ブロックチェーン用に構築された、再利用可能なコミュニティ監査済みのスマート コントラクト コンポーネントのライブラリです。 2. ライブラリ内の各コントラクト...

すべての記事を見る

User not found or password invalid

Your input is correct