Source Code

(define-constant O tx-sender)
(define-constant E1 (err u910))
(define-constant E2 (err u911))
(define-constant E3 (err u912))
(define-data-var premium-rate uint u500)
(define-data-var ic uint u0)
(define-map policies uint
 {owner: principal, mid: uint, side: uint, coverage: uint, premium: uint, active: bool})
(define-public (buy-insurance (mid uint) (side uint) (coverage uint))
 (let ((prem (/ (* coverage (var-get premium-rate)) u10000))
       (id (var-get ic)))
  (asserts! (> coverage u0) E2)
  (try! (stx-transfer? prem tx-sender (as-contract tx-sender)))
  (var-set ic (+ id u1))
  (ok (map-set policies id
   {owner: tx-sender, mid: mid, side: side, coverage: coverage, premium: prem, active: true}))))
(define-public (claim-insurance (pid uint))
 (let ((p (unwrap! (map-get? policies pid) E3)))
  (asserts! (is-eq tx-sender (get owner p)) E1)
  (asserts! (get active p) E2)
  (try! (as-contract (stx-transfer? (get coverage p) tx-sender (get owner p))))
  (ok (map-set policies pid (merge p {active: false})))))
(define-public (set-premium-rate (r uint))
 (begin (asserts! (is-eq tx-sender O) E1) (ok (var-set premium-rate r))))
(define-read-only (get-policy (pid uint)) (map-get? policies pid))
(define-read-only (get-premium-rate) (var-get premium-rate))
(define-read-only (get-policy-count) (var-get ic))

Functions (6)

FunctionAccessArgs
buy-insurancepublicmid: uint, side: uint, coverage: uint
claim-insurancepublicpid: uint
set-premium-ratepublicr: uint
get-policyread-onlypid: uint
get-premium-rateread-only
get-policy-countread-only