콘텐츠로 이동

Circuit Breakers

고지 사항: 이 백서는 영어 버전이 공식 문서입니다. 다른 언어 버전은 참고용입니다。


Circuit breakers automatically pause or restrict trading when abnormal conditions are detected. They protect users and the platform from cascading failures, manipulation, and extreme volatility.


ConditionThresholdAction
AMM-Oracle deviation>30%Pause trading
Price move (1 hour)>50%Warning + increased fees
Price move (24 hour)>80%Pause trading
Flash crash detection>20% in 5 minPause 15 min
ConditionThresholdAction
Single trade>10% of poolRequire confirmation
Hourly volume>50% of poolWarning
Daily volume>200% of poolManual review
ConditionThresholdAction
Oracle failureNo update >1 hourPause affected markets
Smart contract anomalyUnexpected behaviorEmergency pause all
Chain congestion>100 gweiDisplay warning

Level 1 - WARNING
├── Trigger: Unusual but not critical
├── Actions:
│ ├── Display warning banner
│ ├── Require trade confirmation
│ └── Log for monitoring
├── Auto-resolution: When condition clears
└── Example: 25% price move in 24 hours
Level 2 - RESTRICTED
├── Trigger: Elevated risk
├── Actions:
│ ├── Increase trading fees 2x
│ ├── Reduce position limits 50%
│ ├── Require enhanced confirmation
│ └── Alert operations team
├── Auto-resolution: 1 hour after condition clears
└── Example: 40% price move, >100% daily volume
Level 3 - PAUSE
├── Trigger: Critical condition
├── Actions:
│ ├── Halt all trading (affected market)
│ ├── Disable new positions
│ ├── Allow exits only (if safe)
│ └── War room activation
├── Resolution: Manual review required
└── Example: >50% oracle deviation, suspected exploit
Level 4 - EMERGENCY
├── Trigger: Platform-wide threat
├── Actions:
│ ├── Pause ALL contracts
│ ├── Freeze withdrawals (review)
│ ├── Enable emergency admin
│ └── Full incident response
├── Resolution: Board approval required
└── Example: Confirmed exploit, regulatory action

// Circuit breaker check on every trade
modifier circuitBreakerCheck(address warrant) {
CircuitBreakerLevel level = checkCircuitBreaker(warrant);
require(level != CircuitBreakerLevel.PAUSE, "Trading paused");
require(level != CircuitBreakerLevel.EMERGENCY, "Emergency mode");
if (level == CircuitBreakerLevel.RESTRICTED) {
applyRestrictedMode(warrant);
}
_;
}
function checkCircuitBreaker(address warrant) internal view returns (CircuitBreakerLevel) {
uint256 oraclePrice = getOraclePrice(warrant);
uint256 ammPrice = getAMMPrice(warrant);
uint256 deviation = calculateDeviation(oraclePrice, ammPrice);
// Check deviation
if (deviation > 50) return CircuitBreakerLevel.EMERGENCY;
if (deviation > 30) return CircuitBreakerLevel.PAUSE;
if (deviation > 20) return CircuitBreakerLevel.RESTRICTED;
if (deviation > 10) return CircuitBreakerLevel.WARNING;
// Check price movement
uint256 priceChange24h = getPriceChange24h(warrant);
if (priceChange24h > 80) return CircuitBreakerLevel.PAUSE;
if (priceChange24h > 50) return CircuitBreakerLevel.WARNING;
return CircuitBreakerLevel.NORMAL;
}
// Emergency pause by authorized team
function emergencyPause(address warrant) external onlyPauseRole {
require(hasRole(PAUSE_ROLE, msg.sender), "Not authorized");
paused[warrant] = true;
emit EmergencyPause(warrant, msg.sender, block.timestamp);
}
// Resume with timelock
function requestResume(address warrant) external onlyPauseRole {
require(paused[warrant], "Not paused");
resumeRequests[warrant] = block.timestamp + RESUME_DELAY;
emit ResumeRequested(warrant, resumeRequests[warrant]);
}
function executeResume(address warrant) external {
require(block.timestamp >= resumeRequests[warrant], "Timelock active");
paused[warrant] = false;
emit Resumed(warrant);
}

┌─────────────────────────────────────────────────────────────────┐
│ ⚠️ TRADING RESTRICTED │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Circuit breaker activated for SPACEX-CALL-200B-Q42025 │
│ │
│ Status: LEVEL 2 - RESTRICTED │
│ │
│ Reason: │
│ ├── AMM-Oracle deviation: 22% (threshold: 20%) │
│ └── Triggered at: 2025-10-15 14:30:00 UTC │
│ │
│ Current Restrictions: │
│ ├── Trading fee: 0.60% (2x normal) │
│ ├── Position limits: 50% of normal │
│ └── Enhanced confirmation required │
│ │
│ Trading is still available with restrictions. │
│ │
│ Expected Resolution: Auto-clear when deviation < 15% │
│ │
│ [View Market Status] [Set Alert] [Continue Trading] │
│ │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ 🛑 TRADING PAUSED │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Trading is temporarily paused for SPACEX-CALL-200B-Q42025 │
│ │
│ Status: LEVEL 3 - PAUSE │
│ │
│ Reason: Oracle-AMM deviation exceeds safety threshold │
│ Triggered: 2025-10-15 14:30:00 UTC │
│ │
│ Your Options: │
│ ├── Existing positions are safe and protected │
│ ├── No new trades can be executed │
│ └── Withdrawals may be delayed │
│ │
│ We are investigating. Updates will be posted to: │
│ ├── Status page: status.pipo.finance │
│ ├── Twitter: @PIPOfinance │
│ └── Discord: #announcements │
│ │
│ [View Status Page] [Contact Support] │
│ │
└─────────────────────────────────────────────────────────────────┘

Circuit Breaker Resume Process:
Pre-Resume Checks:
├── [ ] Root cause identified
├── [ ] Trigger condition resolved
├── [ ] Oracle functioning normally
├── [ ] No ongoing manipulation detected
├── [ ] Smart contract integrity verified
└── [ ] Team sign-off (2+ members)
Resume Sequence:
├── 1. Announce planned resume (15 min notice)
├── 2. Enable warning mode first
├── 3. Monitor for 30 minutes
├── 4. If stable, reduce to normal
├── 5. Post-incident report within 24 hours

┌─────────────────────────────────────────────────────────────────┐
│ CIRCUIT BREAKER HISTORY │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Last 30 Days: │
│ │
│ Date Time Market Level Duration Reason │
│ ───────────────────────────────────────────────────────────── │
│ 2025-10-10 14:30 SPACEX L2 45 min High volume │
│ 2025-10-05 09:15 OPENAI L1 2 hours Price spike │
│ 2025-09-28 16:00 ALL L3 3 hours Oracle down │
│ │
│ Statistics: │
│ ├── Total triggers: 12 │
│ ├── Level 3+ events: 1 │
│ ├── Average duration: 1.2 hours │
│ └── User impact: Minimal (all resolved) │
│ │
│ [Download Full Report] [Configure Alerts] │
│ │
└─────────────────────────────────────────────────────────────────┘

const status = await pipo.getCircuitBreakerStatus('SPACEX-CALL-200B-Q42025');
// Response
{
warrant: 'SPACEX-CALL-200B-Q42025',
level: 'RESTRICTED',
triggers: [
{
type: 'ORACLE_DEVIATION',
value: 22,
threshold: 20,
triggeredAt: '2025-10-15T14:30:00Z'
}
],
restrictions: {
tradingEnabled: true,
feeMultiplier: 2.0,
positionLimitMultiplier: 0.5
},
estimatedResolution: '2025-10-15T16:00:00Z'
}