Source Code

;; emergency-guardian-v2.clar
;; Circuit breaker for protocol emergency response.

(define-constant ERR-UNAUTHORIZED (err u11300))

(define-data-var guardian principal tx-sender)
(define-data-var global-paused bool false)

(define-map contract-paused principal bool)

(define-read-only (get-guardian)
  (var-get guardian)
)

(define-read-only (is-globally-paused)
  (var-get global-paused)
)

(define-read-only (is-contract-paused (contract principal))
  (default-to false (map-get? contract-paused contract))
)

(define-private (is-guardian-or-dao)
  (if (is-eq tx-sender (var-get guardian))
    (ok true)
    (contract-call? .dao-core-v2 is-dao-or-extension)
  )
)

(define-private (check-principal (p principal))
  (ok (asserts! (is-eq p p) ERR-UNAUTHORIZED))
)

(define-private (check-bool (b bool))
  (ok (asserts! (or (is-eq b true) (is-eq b false)) ERR-UNAUTHORIZED))
)

(define-public (set-guardian (new-guardian principal))
  (begin
    (try! (is-guardian-or-dao))
    (try! (check-principal new-guardian))
    (var-set guardian new-guardian)
    (print {event: "guardian-updated", guardian: new-guardian})
    (ok true)
  )
)

(define-public (set-global-paused (paused bool))
  (begin
    (try! (is-guardian-or-dao))
    (try! (check-bool paused))
    (var-set global-paused paused)
    (print {event: "global-paused-updated", paused: paused})
    (ok true)
  )
)

(define-public (set-contract-paused (contract principal) (paused bool))
  (begin
    (try! (is-guardian-or-dao))
    (try! (check-principal contract))
    (try! (check-bool paused))
    (map-set contract-paused contract paused)
    (print {event: "contract-paused-updated", contract: contract, paused: paused})
    (ok true)
  )
)

(define-public (callback (sender principal) (memo (buff 34)))
  (begin
    sender
    memo
    (ok true)
  )
)

Functions (10)

FunctionAccessArgs
get-guardianread-only
is-globally-pausedread-only
is-contract-pausedread-onlycontract: principal
is-guardian-or-daoprivate
check-principalprivatep: principal
check-boolprivateb: bool
set-guardianpublicnew-guardian: principal
set-global-pausedpublicpaused: bool
set-contract-pausedpubliccontract: principal, paused: bool
callbackpublicsender: principal, memo: (buff 34