Source Code

;; SatGuard Loyalty Points
(define-constant err-owner (err u440))
(define-constant err-amt (err u441))
(define-constant err-bal (err u442))
(define-data-var admin principal tx-sender)
(define-data-var total-points uint u0)
(define-map points {who: principal} {pts: uint,last: uint})
(define-read-only (get-points (who principal)) (default-to {pts: u0,last: u0} (map-get? points {who: who})))
(define-read-only (get-total-points) (var-get total-points))
(define-public (award-points (who principal) (amt uint))
  (let ((ex (get pts (get-points who))))
    (asserts! (is-eq tx-sender (var-get admin)) err-owner)
    (asserts! (> amt u0) err-amt)
    (map-set points {who: who} {pts: (+ ex amt),last: block-height})
    (var-set total-points (+ (var-get total-points) amt))
    (print {e: "points-awarded",who: who,amt: amt})
    (ok true)))
(define-public (redeem-points (amt uint))
  (let ((ex (get pts (get-points tx-sender))))
    (asserts! (> amt u0) err-amt)
    (asserts! (>= ex amt) err-bal)
    (map-set points {who: tx-sender} {pts: (- ex amt),last: block-height})
    (var-set total-points (- (var-get total-points) amt))
    (print {e: "points-redeemed",who: tx-sender,amt: amt})
    (ok true)))

Functions (4)

FunctionAccessArgs
get-pointsread-onlywho: principal
get-total-pointsread-only
award-pointspublicwho: principal, amt: uint
redeem-pointspublicamt: uint