/ frontend / src / types / emergency.ts
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  }