;; 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)))