Source Code

;; v8 - Ultra Stable Edition
(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)

;; 1. DONATE
(define-public (donate (amount uint))
    (begin
        (try! (stx-transfer? amount tx-sender (var-get owner)))
        (map-set donations tx-sender (+ (default-to u0 (map-get? donations tx-sender)) amount))
        (ok true)
    )
)

;; 2. CLAIM NFT
(define-public (claim-membership)
    (let 
        (
            (new-id (+ (var-get last-id) u1))
            (total (default-to u0 (map-get? donations tx-sender)))
        )
        (asserts! (>= total u10000000) (err u403))
        (try! (nft-mint? VIP-CARD new-id tx-sender))
        (var-set last-id new-id)
        (ok new-id)
    )
)

;; 3. GET DATA
(define-read-only (get-user-data (user principal))
    (ok (default-to u0 (map-get? donations user)))
)

Functions (3)

FunctionAccessArgs
donatepublicamount: uint
claim-membershippublic
get-user-dataread-onlyuser: principal