Source Code

;; baby-mong-mint 1.0

;; sip010-ft-trait
(use-trait sip010-token .sip010-ft-trait.sip010-ft-trait) 

;; define constant values
(define-constant MINT-CONTRACT-OWNER tx-sender)
(define-constant ERR-NOT-AUTHORIZED (err u401))
(define-constant ERR-FORBIDDEN (err u403))
(define-constant ERR-OUT-OF-WLCOUNT (err u503))
(define-constant MAX-VIP-MINT u1)   

;; define vars
(define-data-var wl-wallet-list (list 25 principal) (list ))
(define-data-var is-wl-mint bool false)
(define-data-var is-sale-active bool false)
(define-data-var vip-mint-count uint u0)

;; define maps
(define-map wl-wallet principal uint)

;; WL wallet info
(define-read-only (get-wl-balance (account principal))
    (default-to u0 (map-get? wl-wallet account)))

(define-read-only (get-wl-list)
    (var-get wl-wallet-list))

(define-read-only (get-sale-active)
    (var-get is-sale-active))

(define-read-only (get-wl-mint-active)
    (var-get is-wl-mint))

;; operation code 
(define-public (wl-sale-init (NYC uint) (MIA uint) (BAN uint))
    (begin 
        (asserts! (is-eq tx-sender MINT-CONTRACT-OWNER) ERR-NOT-AUTHORIZED)
        (try! (as-contract (contract-call? .baby-mong-nft init-mint NYC MIA BAN)))
        (var-set is-sale-active true)
        (var-set is-wl-mint true)
        (ok true)))

(define-public (pub-sale-init)
    (begin 
        (asserts! (is-eq tx-sender MINT-CONTRACT-OWNER) ERR-NOT-AUTHORIZED)
        (try! (as-contract (contract-call? .baby-mong-nft set-pubsale true)))        
        (var-set is-wl-mint false)
        (ok true)))

;; marbling-mint
(define-public (claim)
    (begin    
        (asserts! (var-get is-sale-active) ERR-FORBIDDEN)
        (if (var-get is-wl-mint) 
            (begin
                (let ((presale-balance (get-wl-balance tx-sender)))
                    (asserts! (> presale-balance u0) ERR-OUT-OF-WLCOUNT)
                    (map-set wl-wallet tx-sender (- presale-balance u1))            
                (try! (contract-call? .baby-mong-nft mint-with-stx tx-sender))))
            (try! (contract-call? .baby-mong-nft mint-with-stx tx-sender)))
            (ok true))) 

;; Only available on wl-sale
(define-public (claim-wl-token (send-token <sip010-token>))
    (begin
        (asserts! (var-get is-sale-active) ERR-FORBIDDEN)        
        (asserts! (var-get is-wl-mint) ERR-FORBIDDEN)
        (begin
            (let ((presale-balance (get-wl-balance tx-sender)))
                (asserts! (> presale-balance u0) ERR-OUT-OF-WLCOUNT)
                (map-set wl-wallet tx-sender (- presale-balance u1))            
                (try! (contract-call? .baby-mong-nft mint-with-token tx-sender send-token))
                (ok true)))))

(define-public (claim-vip (target-wallet principal))
    (begin        
        (asserts! (is-eq tx-sender MINT-CONTRACT-OWNER) ERR-NOT-AUTHORIZED)
        (let
            ((cur-vip-count (var-get vip-mint-count))) 
            (asserts! (< cur-vip-count MAX-VIP-MINT) ERR-FORBIDDEN)
            (var-set vip-mint-count (+ u1 cur-vip-count))    
            (try! (contract-call? .baby-mong-nft mint-vip target-wallet))
            (ok true))))

;; Multiple Mint 
(define-public (claim-two)
  (begin
    (try! (claim))
    (try! (claim))
    (ok true)))

(define-public (claim-three)
  (begin
    (try! (claim))
    (try! (claim))
    (try! (claim))
    (ok true)))

(define-public (claim-four)
  (begin
    (try! (claim))
    (try! (claim))
    (try! (claim))
    (try! (claim))
    (ok true)))

(define-public (claim-five)
  (begin
    (try! (claim))
    (try! (claim))
    (try! (claim))
    (try! (claim))
    (try! (claim))
    (ok true)))

(define-public (claim-wl-token-two (send-token <sip010-token>))
  (begin
    (try! (claim-wl-token send-token))
    (try! (claim-wl-token send-token))
    (ok true)))

(define-public (claim-wl-token-three (send-token <sip010-token>))
  (begin
    (try! (claim-wl-token send-token))
    (try! (claim-wl-token send-token))
    (try! (claim-wl-token send-token))
    (ok true)))

(define-public (claim-wl-token-four (send-token <sip010-token>))
  (begin
    (try! (claim-wl-token send-token))
    (try! (claim-wl-token send-token))
    (try! (claim-wl-token send-token))
    (try! (claim-wl-token send-token))
    (ok true)))

(define-public (claim-wl-token-five (send-token <sip010-token>))
  (begin
    (try! (claim-wl-token send-token))
    (try! (claim-wl-token send-token))
    (try! (claim-wl-token send-token))
    (try! (claim-wl-token send-token))
    (try! (claim-wl-token send-token))
    (ok true)))
 
(define-public (set-wl-wallets (mint-cnt uint) (addresses (list 25 principal)))
    (begin
        (asserts! (is-eq tx-sender MINT-CONTRACT-OWNER) ERR-NOT-AUTHORIZED)
        (var-set wl-wallet-list addresses)
        (fold set-wl-wallet-map addresses mint-cnt)
        (ok true)))

(define-private (set-wl-wallet-map (single-address principal) (count uint))
    (begin
        (map-set wl-wallet single-address count) count))

(define-public (set-wl-wallet (mint-cnt uint) (single-address principal))
    (begin
        (asserts! (is-eq tx-sender MINT-CONTRACT-OWNER) ERR-NOT-AUTHORIZED)
        (asserts! (< mint-cnt u6) ERR-FORBIDDEN)
        (map-set wl-wallet single-address mint-cnt)
        (ok true)))

Functions (20)

FunctionAccessArgs
claimpublic
get-wl-balanceread-onlyaccount: principal
get-wl-listread-only
get-sale-activeread-only
get-wl-mint-activeread-only
wl-sale-initpublicNYC: uint, MIA: uint, BAN: uint
pub-sale-initpublic
claim-wl-tokenpublicsend-token: <sip010-token>
claim-vippublictarget-wallet: principal
claim-twopublic
claim-threepublic
claim-fourpublic
claim-fivepublic
claim-wl-token-twopublicsend-token: <sip010-token>
claim-wl-token-threepublicsend-token: <sip010-token>
claim-wl-token-fourpublicsend-token: <sip010-token>
claim-wl-token-fivepublicsend-token: <sip010-token>
set-wl-walletspublicmint-cnt: uint, addresses: (list 25 principal
set-wl-wallet-mapprivatesingle-address: principal, count: uint
set-wl-walletpublicmint-cnt: uint, single-address: principal