Source Code

;; Invite Codes

(define-map invites
  (string-ascii 20)
  { creator: principal, used: bool, usedBy: (optional principal) }
)

(define-public (create-invite (code (string-ascii 20)))
  (begin
    (asserts! (is-none (map-get? invites code)) (err u409))
    (map-set invites code { creator: tx-sender, used: false, usedBy: none })
    (ok true)
  )
)

(define-public (use-invite (code (string-ascii 20)))
  (let ((invite (unwrap! (map-get? invites code) (err u404))))
    (asserts! (not (get used invite)) (err u409))
    (map-set invites code (merge invite { used: true, usedBy: (some tx-sender) }))
    (ok true)
  )
)

(define-read-only (get-invite (code (string-ascii 20)))
  (map-get? invites code)
)

Functions (3)

FunctionAccessArgs
create-invitepubliccode: (string-ascii 20
use-invitepubliccode: (string-ascii 20
get-inviteread-onlycode: (string-ascii 20