Source Code

;; Rewards Marketplace
;; Redeem points for rewards

(define-data-var next-reward-id uint u1)

(define-map rewards
  uint
  {
    name: (string-ascii 64),
    cost: uint,
    available: uint,
    redeemed: uint
  }
)

(define-read-only (get-reward (reward-id uint))
  (map-get? rewards reward-id)
)

(define-public (add-reward (name (string-ascii 64)) (cost uint) (available uint))
  (let ((reward-id (var-get next-reward-id)))
    (map-set rewards reward-id {
      name: name,
      cost: cost,
      available: available,
      redeemed: u0
    })
    (var-set next-reward-id (+ reward-id u1))
    (ok reward-id)
  )
)

(define-public (redeem-reward (reward-id uint))
  (let ((reward (unwrap! (map-get? rewards reward-id) (err u100))))
    (asserts! (> (get available reward) u0) (err u101))
    (map-set rewards reward-id (merge reward {
      available: (- (get available reward) u1),
      redeemed: (+ (get redeemed reward) u1)
    }))
    (ok true)
  )
)

Functions (3)

FunctionAccessArgs
get-rewardread-onlyreward-id: uint
add-rewardpublicname: (string-ascii 64
redeem-rewardpublicreward-id: uint