Source Code

;; NeuralMint lazy mint
(define-constant ERR-ALREADY-REDEEMED (err u431))
(define-constant ERR-PRICE-TOO-LOW (err u432))
(define-constant PLATFORM-FEE-BPS u100)

(define-map voucher-redeemed (buff 32) bool)

(define-read-only (is-voucher-redeemed (voucher-hash (buff 32)))
  (ok (default-to false (map-get? voucher-redeemed voucher-hash)))
)

(define-public
  (redeem-voucher
    (voucher-hash (buff 32))
    (creator principal)
    (uri (string-ascii 256))
    (min-price uint)
    (royalty-bps uint)
    (ai-model (string-ascii 50))
    (prompt-hash (buff 32))
    (payment uint)
  )
  (let (
      (platform-wallet (unwrap-panic (contract-call? .neuralmint-marketplace get-platform-wallet)))
      (platform-fee (/ (* payment PLATFORM-FEE-BPS) u10000))
      (creator-amount (- payment platform-fee))
    )
    (asserts! (is-none (map-get? voucher-redeemed voucher-hash)) ERR-ALREADY-REDEEMED)
    (asserts! (>= payment min-price) ERR-PRICE-TOO-LOW)

    (try! (stx-transfer? creator-amount tx-sender creator))
    (try! (stx-transfer? platform-fee tx-sender platform-wallet))

    (try! (contract-call? .neuralmint-nft mint tx-sender uri creator royalty-bps ai-model prompt-hash "lazy-mint"))
    (map-set voucher-redeemed voucher-hash true)
    (ok true)
  )
)

Functions (2)

FunctionAccessArgs
is-voucher-redeemedread-onlyvoucher-hash: (buff 32
redeem-voucherpublicvoucher-hash: (buff 32