Source Code

;; Contract variation 26

;; Badge Board
(define-map marks
  { user: principal }
  { bronze: bool, silver: bool, gold: bool }
)

(define-public (claim-bronze)
  (begin
    (map-set marks
      { user: tx-sender }
      { bronze: true, silver: false, gold: false }
    )
    (ok "bronze-claimed")
  )
)

(define-public (claim-silver)
  (let ((entry (map-get? marks { user: tx-sender })))
    (match entry
      badge
      (if (get bronze badge)
        (begin
          (map-set marks
            { user: tx-sender }
            { bronze: true, silver: true, gold: false }
          )
          (ok "silver-claimed")
        )
        (err u1))
      (err u2)
    )
  )
)

(define-public (claim-gold)
  (let ((entry (map-get? marks { user: tx-sender })))
    (match entry
      badge
      (if (get silver badge)
        (begin
          (map-set marks
            { user: tx-sender }
            { bronze: true, silver: true, gold: true }
          )
          (ok "gold-claimed")
        )
        (err u3))
      (err u4)
    )
  )
)

(define-read-only (get-marks (who principal))
  (map-get? marks { user: who })
)

Functions (4)

FunctionAccessArgs
claim-bronzepublic
claim-silverpublic
claim-goldpublic
get-marksread-onlywho: principal