問題一覧に戻る
中級関数
問題60: Fallback関数
Solidityのfallback関数を学習します - 関数シグネチャに一致しない呼び出しをすべてキャッチします。Fallbackは存在しない関数を呼び出したり、ETHと共にデータを送信したときに実行されます。データ付きETHを受け入れるためにpayableにできます。receiveと異なり、fallbackはデータ付きのあらゆる呼び出しを処理します。プロキシコントラクト、アップグレード可能パターン、予期しない呼び出しの優雅な処理に不可欠です。Fallbackはmsg.dataにアクセスして低レベル呼び出しを処理できます。fallbackの理解は柔軟なコントラクトの構築とDeFiでのdelegatecallプロキシなどの高度なパターンの実装に重要です。
pragma solidity ^0.8.0;
contract FallbackExample {
event FallbackCalled(bytes data);
// フォールバック関数
() external {
emit FallbackCalled(msg.data);
}
// 存在しない関数を呼び出す
function callNonExistent() external {
(bool success,) = address(this).(
abi.encodeWithSignature("doesNotExist()")
);
require(success, "Call failed");
}
}