Source Code

;; SatGuard Policy Renewal
(define-constant err-nf (err u730))
(define-constant err-unauth (err u731))
(define-constant err-early (err u732))
(define-map renewals {pol-id: uint} {auto: bool,times: uint,la: uint})
(define-read-only (get-renewal (pol-id uint)) (map-get? renewals {pol-id: pol-id}))
(define-public (set-renewal (pol-id uint) (auto bool))
  (let ((pol (unwrap! (contract-call? .sg-policy-registry get-policy pol-id) err-nf)))
    (asserts! (is-eq tx-sender (get holder pol)) err-unauth)
    (map-set renewals {pol-id: pol-id} {auto: auto,times: u0,la: block-height})
    (print {e: "renewal-set",pol-id: pol-id,auto: auto})
    (ok true)))
(define-read-only (check-expiry (pol-id uint))
  (let ((pol (contract-call? .sg-policy-registry get-policy pol-id)))
    (match pol
      p (ok {expired: (>= block-height (get end p)),blocks-left: (if (>= block-height (get end p)) u0 (- (get end p) block-height))})
      (err u730))))
(define-public (renew-policy (pol-id uint))
  (let ((pol (unwrap! (contract-call? .sg-policy-registry get-policy pol-id) err-nf))
        (rn (default-to {auto: false,times: u0,la: u0} (map-get? renewals {pol-id: pol-id}))))
    (asserts! (is-eq tx-sender (get holder pol)) err-unauth)
    (asserts! (>= block-height (get end pol)) err-early)
    (map-set renewals {pol-id: pol-id} {auto: (get auto rn),times: (+ (get times rn) u1),la: block-height})
    (print {e: "policy-renewed",pol-id: pol-id,times: (+ (get times rn) u1)})
    (ok true)))

Functions (4)

FunctionAccessArgs
get-renewalread-onlypol-id: uint
set-renewalpublicpol-id: uint, auto: bool
check-expiryread-onlypol-id: uint
renew-policypublicpol-id: uint