Source Code

(define-constant O tx-sender)
(define-constant E1 (err u820))
(define-constant E2 (err u821))
(define-data-var badge-count uint u0)
(define-map badge-meta uint {name: (string-ascii 32), desc: (string-ascii 64)})
(define-map user-badges {user: principal, bid: uint} bool)
(define-map user-badge-count principal uint)
(define-public (create-badge (name (string-ascii 32)) (desc (string-ascii 64)))
 (begin (asserts! (is-eq tx-sender O) E1)
  (let ((id (var-get badge-count)))
   (var-set badge-count (+ id u1))
   (ok (map-set badge-meta id {name: name, desc: desc})))))
(define-public (award-badge (u principal) (bid uint))
 (begin (asserts! (is-eq tx-sender O) E1)
  (asserts! (is-some (map-get? badge-meta bid)) E2)
  (map-set user-badges {user: u, bid: bid} true)
  (map-set user-badge-count u
   (+ (default-to u0 (map-get? user-badge-count u)) u1))
  (ok true)))
(define-read-only (has-badge (u principal) (bid uint))
 (default-to false (map-get? user-badges {user: u, bid: bid})))
(define-read-only (get-badge (bid uint))
 (map-get? badge-meta bid))
(define-read-only (get-user-badge-count (u principal))
 (default-to u0 (map-get? user-badge-count u)))

Functions (5)

FunctionAccessArgs
create-badgepublicname: (string-ascii 32
award-badgepublicu: principal, bid: uint
has-badgeread-onlyu: principal, bid: uint
get-badgeread-onlybid: uint
get-user-badge-countread-onlyu: principal