(define-constant O tx-sender)
(define-constant E1 (err u990))
(define-constant E2 (err u991))
(define-data-var paused bool false)
(define-data-var pause-reason (string-ascii 64) "")
(define-data-var paused-at uint u0)
(define-data-var pause-count uint u0)
(define-public (pause (reason (string-ascii 64)))
(begin (asserts! (is-eq tx-sender O) E1)
(asserts! (not (var-get paused)) E2)
(var-set paused true)
(var-set pause-reason reason)
(var-set paused-at stacks-block-height)
(var-set pause-count (+ (var-get pause-count) u1))
(ok true)))
(define-public (unpause)
(begin (asserts! (is-eq tx-sender O) E1)
(asserts! (var-get paused) E2)
(var-set paused false)
(var-set pause-reason "")
(ok true)))
(define-read-only (is-paused) (var-get paused))
(define-read-only (get-pause-info)
{paused: (var-get paused),
reason: (var-get pause-reason),
paused-at: (var-get paused-at),
total-pauses: (var-get pause-count)})