Source Code

;; alex-origin

(impl-trait 'SP2PABAF9FTAJYNFZH93XENAJ8FVY99RRM50D2JG9.nft-trait.nft-trait)
;; (impl-trait .nft-trait.nft-trait)

;; Non Fungible Token, using sip-009
(define-non-fungible-token alex-origin uint)

;; Constants
(define-constant err-no-more-nfts u300)
(define-constant err-invalid-user u500)

(define-constant mint-limit u100)
(define-constant commission-address tx-sender)

;; Internal variables
(define-data-var last-id uint u0)
(define-data-var total-price uint u0)
(define-data-var artist-address principal 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T)
(define-data-var ipfs-root (string-ascii 80) "ipfs://ipfs/QmTau2hjqSzEAQ1vYL879MiLnexLq5vTAf2WxxYBbH7DB4/")

;; private functions
(define-private (mint (new-owner principal))
  (let ((next-id (+ u1 (var-get last-id)))  
        (count (var-get last-id)))
      (asserts! (< count mint-limit) (err err-no-more-nfts))
      (if (is-eq tx-sender (var-get artist-address))
        (mint-helper new-owner next-id)
        (if (is-eq tx-sender commission-address)
          (begin
            (mint-helper new-owner next-id))
        (err err-invalid-user))
    )
  )
)

(define-private (mint-helper (new-owner principal) (next-id uint))
    (match (nft-mint? alex-origin next-id new-owner)
            success
              (begin
                (var-set last-id next-id)
                (ok true))
            error (err error)))

;; public functions
(define-public (claim)
  (mint tx-sender))

(define-public (transfer (token-id uint) (sender principal) (recipient principal))
  (if (and
        (is-eq tx-sender sender))
      (match (nft-transfer? alex-origin token-id sender recipient)
        success (ok success)
        error (err error))
      (err err-invalid-user)))

;; read-only functions
(define-read-only (get-owner (token-id uint))
  (ok (nft-get-owner? alex-origin token-id)))

(define-read-only (get-last-token-id)
  (ok (var-get last-id)))

(define-read-only (get-token-uri (token-id uint))
    (ok (some (concat (concat (var-get ipfs-root) "$TOKEN_ID") ".json"))))

(define-public (set-ipfs-root (new-ipfs-root (string-ascii 80)))
  (if (is-eq tx-sender commission-address)
    (begin 
      (var-set ipfs-root new-ipfs-root)
      (ok true)
    )
    (err err-invalid-user)))

(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))
(try! (mint 'SPKQ8HJ1ED0Y7YGGH72YJAVX9J73C0D0D6QVCJ8T))

Functions (8)

FunctionAccessArgs
mintprivatenew-owner: principal
mint-helperprivatenew-owner: principal, next-id: uint
claimpublic
transferpublictoken-id: uint, sender: principal, recipient: principal
get-ownerread-onlytoken-id: uint
get-last-token-idread-only
get-token-uriread-onlytoken-id: uint
set-ipfs-rootpublicnew-ipfs-root: (string-ascii 80