Source Code

;; SatGuard Policy Terms
(define-constant err-owner (err u710))
(define-constant err-nf (err u711))
(define-constant err-dup (err u712))
(define-data-var admin principal tx-sender)
(define-data-var t-nonce uint u0)
(define-map terms {id: uint} {pid: uint,text: (string-utf8 500),ver: uint,ca: uint})
(define-map accepted {pol-id: uint,who: principal} {terms-id: uint,aa: uint})
(define-read-only (get-terms (id uint)) (map-get? terms {id: id}))
(define-read-only (get-acceptance (pol-id uint) (who principal)) (map-get? accepted {pol-id: pol-id,who: who}))
(define-public (set-terms (pid uint) (text (string-utf8 500)))
  (let ((nid (+ (var-get t-nonce) u1)))
    (asserts! (is-eq tx-sender (var-get admin)) err-owner)
    (map-set terms {id: nid} {pid: pid,text: text,ver: nid,ca: block-height})
    (var-set t-nonce nid)
    (print {e: "terms-set",id: nid,pid: pid})
    (ok nid)))
(define-public (accept-terms (pol-id uint) (terms-id uint))
  (let ((t (unwrap! (map-get? terms {id: terms-id}) err-nf))
        (ex (map-get? accepted {pol-id: pol-id,who: tx-sender})))
    (asserts! (is-none ex) err-dup)
    (map-set accepted {pol-id: pol-id,who: tx-sender} {terms-id: terms-id,aa: block-height})
    (print {e: "terms-accepted",pol-id: pol-id,who: tx-sender})
    (ok true)))

Functions (4)

FunctionAccessArgs
get-termsread-onlyid: uint
get-acceptanceread-onlypol-id: uint, who: principal
set-termspublicpid: uint, text: (string-utf8 500
accept-termspublicpol-id: uint, terms-id: uint