問題一覧に戻る
中級エラー処理
問題45: Try-Catch

Solidityのtry-catchを学習します - 外部呼び出しとコントラクト作成のエラー処理です。Try-catchブロックはコントラクトがトランザクション全体をリバートすることなく失敗を優雅に処理できます。内部呼び出しではなく、外部関数呼び出しとコントラクトデプロイでのみ動作します。Catch句は異なるエラータイプをキャプチャできます:リバート理由のError(string)と他の失敗の低レベルbytes。このパターンは信頼できない外部コントラクトと相互作用する回復力のあるコントラクト構築に不可欠です。try-catchの理解はDeFiプロトコルでのフォールバックロジック実装に重要です。

pragma solidity ^0.8.0;

contract TryCatchExample {
event Success(uint256 value);
event Failed(string reason);

// 外部呼び出しのエラー処理
function callExternal(address target) public {
target.call{value: 0}("") {
emit Success(1);
} (bytes memory) {
emit Failed("Call failed");
}
}
}