Source Code

;; 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))))

Functions (5)

FunctionAccessArgs
get-limitread-onlypid: uint
get-global-maxread-only
set-limitpublicpid: uint, max-exposure: uint
set-global-maxpublicmx: uint
check-limitread-onlypid: uint