Source Code

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

(define-non-fungible-token building-on-bitcoin uint)

(define-constant public-key 0x02673473f73e6f38c2a4263fb4d63720713f8422c4dd5a66202cb6ea117e41828a)

(define-data-var last-id uint u0)

(define-constant err-untransferable (err u1000))
(define-constant err-invalid-signature (err u1001))
(define-constant err-unauthorized (err u1002))

(define-public
  (mint
    (message (buff 32))
    (signature (buff 65))
    (recipient principal)
  )
  (let 
    (
      (id (+ (var-get last-id) u1))
      (key (unwrap! (secp256k1-recover? message signature) err-invalid-signature))
    )
    (asserts! (is-eq key public-key) err-unauthorized)
    (try! (nft-mint? building-on-bitcoin id recipient))
    (ok (var-set last-id id))
  )
)

(define-public
  (transfer
    (id uint)
    (sender principal)
    (recipient principal)
  )
  err-untransferable
)

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

(define-read-only (get-owner (id uint))
  (ok (nft-get-owner? building-on-bitcoin id))
)

(define-read-only (get-token-uri (id uint)) 
  (ok (some "ipfs://bafkreibv3xyy33ei45a5nyaidufdtk5vo4tmg6sscrcnxxnkfv6anm3jma"))
)

Functions (4)

FunctionAccessArgs
mintpublicmessage: (buff 32
get-last-token-idread-only
get-ownerread-onlyid: uint
get-token-uriread-onlyid: uint