Source Code

;; SatGuard Rewards Pool
(define-constant err-owner (err u420))
(define-constant err-nf (err u421))
(define-constant err-amt (err u422))
(define-data-var admin principal tx-sender)
(define-data-var total-rewards uint u0)
(define-map pending {who: principal} {amt: uint})
(define-read-only (get-pending (who principal)) (default-to {amt: u0} (map-get? pending {who: who})))
(define-read-only (get-total-rewards) (var-get total-rewards))
(define-public (add-reward (who principal) (amt uint))
  (let ((ex (get amt (get-pending who))))
    (asserts! (is-eq tx-sender (var-get admin)) err-owner)
    (asserts! (> amt u0) err-amt)
    (map-set pending {who: who} {amt: (+ ex amt)})
    (var-set total-rewards (+ (var-get total-rewards) amt))
    (print {e: "reward-added",who: who,amt: amt})
    (ok true)))
(define-public (claim-reward)
  (let ((p (get amt (get-pending tx-sender))))
    (asserts! (> p u0) err-amt)
    (try! (contract-call? .sg-token-core mint p tx-sender))
    (map-set pending {who: tx-sender} {amt: u0})
    (var-set total-rewards (- (var-get total-rewards) p))
    (print {e: "reward-claimed",who: tx-sender,amt: p})
    (ok p)))

Functions (4)

FunctionAccessArgs
get-pendingread-onlywho: principal
get-total-rewardsread-only
add-rewardpublicwho: principal, amt: uint
claim-rewardpublic