問題一覧に戻る
上級セキュリティパターン
問題79: 緊急停止
SolidityのPausableパターンを学習 - スマートコントラクトのサーキットブレーカー。このパターンは、バグ発見や攻撃などの緊急時に権限を持つユーザーが重要な機能を一時停止できます。paused状態の修飾子は読み取り機能を維持しながら、センシティブな操作の実行を防ぎます。インシデント対応、脆弱性時のユーザー資金保護、コントラクトアップグレードの有効化に不可欠。イベントが一時停止状態の透明性を提供。緊急停止の理解は、予期しない状況に対応できる本番環境対応コントラクトの構築に重要です。
pragma solidity ^0.8.0;
contract Pausable {
address public owner;
bool public ;
event Paused();
event Unpaused();
modifier onlyOwner() {
require(msg.sender == owner, "Not owner");
_;
}
// 一時停止状態をチェックする修飾子
modifier whenNotPaused() {
require(!, "Contract paused");
_;
}
constructor() {
owner = msg.sender;
}
// 緊急停止を有効化
function pause() public onlyOwner {
paused = ;
emit Paused();
}
// 通常操作を再開
function unpause() public onlyOwner {
paused = ;
emit Unpaused();
}
// 一時停止状態で保護
function criticalFunction() public {
// 重要な処理
// pausedの時は実行されない
}
}