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