Source Code

;; Rewards Contract - Manages commitment point rewards and bonuses
(define-constant err-no-rewards (err u400))
(define-constant err-already-claimed (err u401))

(define-data-var reward-pool uint u0)
(define-map user-rewards principal uint)
(define-map claimed-rewards principal bool)
(define-map milestone-rewards uint uint) ;; points -> reward amount

(define-public (add-to-reward-pool (amount uint))
  (begin
    (var-set reward-pool (+ (var-get reward-pool) amount))
    (ok true)
  )
)

(define-public (claim-milestone-reward (points uint))
  (let (
    (reward-amount (default-to u0 (map-get? milestone-rewards points)))
    (already-claimed (default-to false (map-get? claimed-rewards tx-sender)))
  )
    (asserts! (> reward-amount u0) err-no-rewards)
    (asserts! (not already-claimed) err-already-claimed)
    
    (map-set claimed-rewards tx-sender true)
    (map-set user-rewards tx-sender reward-amount)
    (ok reward-amount)
  )
)

(define-public (set-milestone-reward (points uint) (reward uint))
  (begin
    (map-set milestone-rewards points reward)
    (ok true)
  )
)

(define-read-only (get-reward-pool)
  (ok (var-get reward-pool)))

(define-read-only (get-user-rewards (user principal))
  (ok (default-to u0 (map-get? user-rewards user))))

Functions (5)

FunctionAccessArgs
add-to-reward-poolpublicamount: uint
claim-milestone-rewardpublicpoints: uint
set-milestone-rewardpublicpoints: uint, reward: uint
get-reward-poolread-only
get-user-rewardsread-onlyuser: principal