;; SatGuard Reserve Fund - emergency reserves
(define-constant err-owner (err u830))
(define-constant err-amt (err u831))
(define-constant err-bal (err u832))
(define-data-var admin principal tx-sender)
(define-data-var reserve uint u0)
(define-data-var min-reserve uint u1000000) ;; minimum 1 sBTC
(define-read-only (get-reserve) (var-get reserve))
(define-read-only (get-min-reserve) (var-get min-reserve))
(define-public (add-reserve (amt uint))
(begin
(asserts! (> amt u0) err-amt)
(var-set reserve (+ (var-get reserve) amt))
(print {e: "reserve-added",who: tx-sender,amt: amt})
(ok true)))
(define-public (use-reserve (amt uint) (reason (string-ascii 50)))
(begin
(asserts! (is-eq tx-sender (var-get admin)) err-owner)
(asserts! (> amt u0) err-amt)
(asserts! (<= amt (var-get reserve)) err-bal)
(var-set reserve (- (var-get reserve) amt))
(print {e: "reserve-used",amt: amt,reason: reason})
(ok true)))
(define-public (set-min-reserve (min uint))
(begin
(asserts! (is-eq tx-sender (var-get admin)) err-owner)
(var-set min-reserve min)
(print {e: "min-reserve-set",min: min})
(ok true)))
(define-read-only (is-healthy)
(ok (>= (var-get reserve) (var-get min-reserve))))