Source Code

;; SatGuard Premium Engine
(define-constant err-owner (err u320))
(define-constant err-nf (err u321))
(define-constant err-amt (err u322))
(define-data-var admin principal tx-sender)
(define-map rates {tier: uint} {bps: uint}) ;; basis points per tier
(define-read-only (get-rate (tier uint)) (default-to {bps: u100} (map-get? rates {tier: tier})))
(define-public (set-rate (tier uint) (bps uint))
  (begin
    (asserts! (is-eq tx-sender (var-get admin)) err-owner)
    (asserts! (<= tier u4) err-amt)
    (asserts! (> bps u0) err-amt)
    (map-set rates {tier: tier} {bps: bps})
    (print {e: "rate-set",tier: tier,bps: bps})
    (ok true)))
(define-read-only (calc-premium (pid uint) (amt uint))
  (let ((pt (contract-call? .sg-risk-tiers get-pool-tier pid)))
    (match pt
      tier-data (let ((r (get-rate (get tier tier-data))))
        (ok (/ (* amt (get bps r)) u10000)))
      (ok (/ (* amt u100) u10000))))) ;; default 1%
(define-read-only (calc-annual-premium (pid uint) (amt uint))
  (let ((monthly (unwrap! (calc-premium pid amt) (err u321))))
    (ok (* monthly u12))))

Functions (4)

FunctionAccessArgs
get-rateread-onlytier: uint
set-ratepublictier: uint, bps: uint
calc-premiumread-onlypid: uint, amt: uint
calc-annual-premiumread-onlypid: uint, amt: uint