Pausable — 스마트 컨트랙트 긴급 중단 기능스마트 컨트랙트를 운영하다 보면 보안 사고, 버그 발생, 운영상의 문제 등으로 인해 컨트랙트를 일시적으로 중단(Pause) 해야 하는 상황이 생길 수 있습니다.
이때 OpenZeppelin에서 제공하는 Pausable 모듈을 사용하면, 특정 조건 하에 컨트랙트를 긴급 정지(Emergency Stop) 시킬 수 있는 메커니즘을 쉽게 구현할 수 있습니다.
해당 기능은 특정 역할(Pauser) 을 가진 계정만 사용할 수 있으며, 정상 운영 상태로 되돌리는 것도 가능합니다.
Pausable은 스마트 컨트랙트에 Pause/Unpause 기능을 추가하는 모듈입니다.whenNotPaused가 붙은 함수는 실행되지 않습니다.Pauser 권한을 가지며, 필요에 따라 다른 계정에게도 위임 가능.pragma solidity ^0.8.0;
import "@openzeppelin/contracts/security/Pausable.sol";
contract MyContract is Pausable {
function normalFunction() public whenNotPaused {
// 평상시 실행 가능한 함수
}
function emergencyOnly() public whenPaused {
// 중단 상태에서만 실행 가능한 함수
}
function triggerPause() public onlyOwner {
_pause(); // Pauses the contract
}
function triggerUnpause() public onlyOwner {
_unpause(); // Resumes the contract
}
}
| Modifier | 설명 |
|---|---|
| whenNotPaused() | 컨트랙트가 정지되지 않았을 때만 실행 가능 |
| whenPaused() | 컨트랙트가 정지된 상태일 때만 실행 가능 |