;; SatGuard Risk Limits
(define-constant err-owner (err u330))
(define-constant err-nf (err u331))
(define-constant err-amt (err u332))
(define-constant err-limit (err u333))
(define-data-var admin principal tx-sender)
(define-data-var global-max uint u100000000) ;; 100 sBTC
(define-map pool-limits {pid: uint} {max-exposure: uint,sa: uint})
(define-read-only (get-limit (pid uint)) (map-get? pool-limits {pid: pid}))
(define-read-only (get-global-max) (var-get global-max))
(define-public (set-limit (pid uint) (max-exposure uint))
(begin
(asserts! (is-eq tx-sender (var-get admin)) err-owner)
(asserts! (> max-exposure u0) err-amt)
(asserts! (<= max-exposure (var-get global-max)) err-limit)
(map-set pool-limits {pid: pid} {max-exposure: max-exposure,sa: block-height})
(print {e: "limit-set",pid: pid,max: max-exposure})
(ok true)))
(define-public (set-global-max (mx uint))
(begin
(asserts! (is-eq tx-sender (var-get admin)) err-owner)
(asserts! (> mx u0) err-amt)
(var-set global-max mx)
(print {e: "global-max-set",mx: mx})
(ok true)))
(define-read-only (check-limit (pid uint))
(let ((pool (contract-call? .insurance-pool get-pool pid))
(lm (map-get? pool-limits {pid: pid})))
(match pool
p (match lm
l (ok (<= (get tf p) (get max-exposure l)))
(ok true))
(ok false))))