問題一覧に戻る
中級エラー処理
問題46: エラーデータの抽出

Solidityのcatchブロックでエラーデータを抽出する方法を学習します - 外部呼び出しから特定の失敗情報をキャプチャします。CatchブロックはError(string memory reason)で高レベルリバートと、catch (bytes memory data)で低レベル失敗を区別できます。この区別により、エラーがrequire/revert文から来るか低レベル失敗から来るかを識別できます。エラー理由の抽出により、より良いデバッグ、ロギング、条件付きエラー処理が可能になります。エラーデータ抽出の理解は堅牢なエラー回復メカニズムの構築と複雑なDeFi相互作用での意味のあるフィードバック提供に不可欠です。

pragma solidity ^0.8.0;

contract ErrorData {
event ErrorCaught(string reason, bytes data);

// エラーデータの抽出
function catchError(address target) public {
try target.call("") {
// Success
} catch Error(string memory ) {
emit ErrorCaught(reason, "");
} catch (bytes memory ) {
emit ErrorCaught("Low-level", data);
}
}
}