Source Code

;; v7-ultra-light
(define-non-fungible-token VIP-CARD uint)

(define-data-var last-id uint u0)
(define-data-var owner principal tx-sender)

(define-map donations principal uint)
(define-map has-nft principal bool)

(define-public (donate (amount uint))
    (let ((prev (default-to u0 (map-get? donations tx-sender))))
        (try! (stx-transfer? amount tx-sender (var-get owner)))
        (map-set donations tx-sender (+ prev amount))
        (ok true)
    )
)

(define-public (claim-membership)
    (let (
        (total (default-to u0 (map-get? donations tx-sender)))
        (new-id (+ (var-get last-id) u1))
    )
        (asserts! (>= total u10000000) (err u403))
        (asserts! (is-none (map-get? has-nft tx-sender)) (err u406))
        (try! (nft-mint? VIP-CARD new-id tx-sender))
        (var-set last-id new-id)
        (map-set has-nft tx-sender true)
        (ok new-id)
    )
)

(define-read-only (get-info (user principal))
    {
        amt: (default-to u0 (map-get? donations user)),
        nft: (default-to false (map-get? has-nft user))
    }
)

Functions (3)

FunctionAccessArgs
donatepublicamount: uint
claim-membershippublic
get-inforead-onlyuser: principal