;; SatGuard Coverage Limits
(define-constant err-owner (err u740))
(define-constant err-amt (err u741))
(define-data-var admin principal tx-sender)
(define-data-var global-limit uint u500000000) ;; 500 sBTC total
(define-data-var per-user-limit uint u10000000) ;; 10 sBTC per user
(define-map user-exposure {who: principal} {total: uint})
(define-read-only (get-global-limit) (var-get global-limit))
(define-read-only (get-per-user-limit) (var-get per-user-limit))
(define-read-only (get-user-exposure (who principal)) (default-to {total: u0} (map-get? user-exposure {who: who})))
(define-public (set-global-limit (lim uint))
(begin
(asserts! (is-eq tx-sender (var-get admin)) err-owner)
(asserts! (> lim u0) err-amt)
(var-set global-limit lim)
(print {e: "global-limit-set",lim: lim})
(ok true)))
(define-public (set-per-user-limit (lim uint))
(begin
(asserts! (is-eq tx-sender (var-get admin)) err-owner)
(asserts! (> lim u0) err-amt)
(var-set per-user-limit lim)
(print {e: "per-user-limit-set",lim: lim})
(ok true)))
(define-read-only (check-user-limit (who principal) (amt uint))
(let ((exp (get total (get-user-exposure who))))
(ok (<= (+ exp amt) (var-get per-user-limit)))))
(define-public (record-exposure (who principal) (amt uint))
(let ((exp (get total (get-user-exposure who))))
(asserts! (is-eq tx-sender (var-get admin)) err-owner)
(map-set user-exposure {who: who} {total: (+ exp amt)})
(print {e: "exposure-recorded",who: who,amt: amt})
(ok true)))