Source Code

;; Emergency Contract - Circuit breaker and emergency functions
(define-constant err-not-emergency-admin (err u800))
(define-constant err-protocol-paused (err u801))

(define-data-var emergency-admin principal tx-sender)
(define-data-var protocol-paused bool false)
(define-data-var emergency-withdrawal-enabled bool false)

(define-map emergency-contacts principal bool)

(define-public (pause-protocol)
  (begin
    (asserts! (is-eq tx-sender (var-get emergency-admin)) err-not-emergency-admin)
    (var-set protocol-paused true)
    (ok true)
  )
)

(define-public (unpause-protocol)
  (begin
    (asserts! (is-eq tx-sender (var-get emergency-admin)) err-not-emergency-admin)
    (var-set protocol-paused false)
    (ok true)
  )
)

(define-public (enable-emergency-withdrawal)
  (begin
    (asserts! (is-eq tx-sender (var-get emergency-admin)) err-not-emergency-admin)
    (var-set emergency-withdrawal-enabled true)
    (ok true)
  )
)

(define-public (add-emergency-contact (contact principal))
  (begin
    (asserts! (is-eq tx-sender (var-get emergency-admin)) err-not-emergency-admin)
    (map-set emergency-contacts contact true)
    (ok true)
  )
)

(define-read-only (is-protocol-paused)
  (ok (var-get protocol-paused)))

(define-read-only (is-emergency-withdrawal-enabled)
  (ok (var-get emergency-withdrawal-enabled)))

(define-read-only (is-emergency-contact (contact principal))
  (ok (default-to false (map-get? emergency-contacts contact))))

Functions (7)

FunctionAccessArgs
unpause-protocolpublic
enable-emergency-withdrawalpublic
pause-protocolpublic
add-emergency-contactpubliccontact: principal
is-protocol-pausedread-only
is-emergency-withdrawal-enabledread-only
is-emergency-contactread-onlycontact: principal