emergency.ts
1 // Emergency system types for ACDC Forge 2 3 import type { Chain } from './vote' 4 5 // DEQ (Delegated Emergency Quorum) member 6 export interface DEQMember { 7 address: string 8 publicKey: string 9 chain: Chain 10 role: 'primary' | 'backup' 11 addedAt: number 12 addedBy: string // Governance proposal ID 13 status: 'active' | 'revoked' | 'expired' 14 expiresAt: number | null 15 } 16 17 // Emergency action types 18 export type EmergencyActionType = 19 | 'pause_minting' 20 | 'resume_minting' 21 | 'emergency_rollback' 22 | 'freeze_account' 23 | 'pause_governance' 24 | 'emergency_upgrade' 25 26 // Emergency action request 27 export interface EmergencyAction { 28 id: string 29 actionType: EmergencyActionType 30 chain: Chain 31 params: Record<string, unknown> 32 requestedBy: string 33 requestedAt: number 34 reason: string 35 signatures: EmergencySignature[] 36 requiredSignatures: number 37 status: 'pending' | 'approved' | 'executed' | 'expired' | 'rejected' 38 executedAt: number | null 39 expiresAt: number // 24 hours from creation 40 } 41 42 // Emergency signature (from DEQ member) 43 export interface EmergencySignature { 44 signer: string 45 signature: string 46 signedAt: number 47 method: 'online' | 'offline' 48 } 49 50 // Offline signing payload 51 export interface OfflineSigningPayload { 52 actionId: string 53 actionType: EmergencyActionType 54 chain: Chain 55 params: Record<string, unknown> 56 nonce: string 57 expiresAt: number 58 message: string // Human-readable description 59 } 60 61 // Signed offline payload (returned by CLI) 62 export interface SignedOfflinePayload { 63 payload: OfflineSigningPayload 64 signature: string 65 publicKey: string 66 } 67 68 // Emergency system configuration 69 export interface EmergencyConfig { 70 chain: Chain 71 requiredSignatures: number // Usually 3 of 5 72 totalDEQMembers: number 73 actionTimeout: number // 24 hours 74 cooldownPeriod: number // Time between emergency actions 75 lastEmergencyAction: number | null 76 } 77 78 // Emergency action status for display 79 export interface EmergencyActionStatus { 80 action: EmergencyAction 81 signaturesNeeded: number 82 timeRemaining: number 83 canSign: boolean 84 canExecute: boolean 85 }