Source Code

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

(define-non-fungible-token neon-inv uint)

(define-constant ERR_NOT_AUTHORIZED (err u401))
(define-constant ERR_NOT_FOUND (err u404))
(define-constant ERR_INVALID_LIGHT (err u405))
(define-constant ERR_UNWRAP_OWNER (err u406))
(define-constant ERR_UNWRAP (err u407))
(define-constant ERR_UNWRAP_INV (err u408))

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

(define-map lights uint principal)

(define-private (is-called-by-charging-ctr)
  (is-eq contract-caller .neon-invader))

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

(define-read-only (get-token-uri (token-id uint))
  (ok none))

(define-read-only (get-owner (token-id uint))
  (ok (nft-get-owner? neon-inv token-id)))

(define-read-only (get-light (swap-id uint)) 
  (map-get? lights swap-id))

(define-public (transfer (token-id uint) (sender principal) (recipient principal))
  (begin
    (print "The fight is won or lost far away from witnesses: behind the lines, in the gym, and out there on the road, long before I dance under those lights.")
    (ok true)
  )
)

(define-public (mint-light (swap-id uint) (invader-id (optional uint)))
  (begin
    (asserts! (is-called-by-charging-ctr) ERR_NOT_AUTHORIZED)
    (match invader-id
      inv-id (let
        (
          (recipient (unwrap! (unwrap! (contract-call? 'SPV8C2N59MA417HYQNG6372GCV0SEQE01EV4Z1RQ.stacks-invaders-v0 get-owner inv-id) ERR_UNWRAP_OWNER) ERR_UNWRAP))
        )
        (try! (nft-mint? neon-inv swap-id recipient))
        (map-set lights swap-id recipient)
        (var-set last-token-id swap-id)
        (ok true)
      )
      (begin
        (var-set last-token-id swap-id)
        (ok true)
      )
    )
  )
)

(define-public (burn-candle (token-id uint))
  (let 
    (
      (owner (unwrap! (nft-get-owner? neon-inv token-id) ERR_NOT_FOUND))
    )
    (asserts! (is-eq tx-sender owner) ERR_NOT_AUTHORIZED)
    (try! (nft-burn? neon-inv token-id owner))
    (map-delete lights token-id)
    (ok true)
  )
)

(define-public (blow-light (swap-id uint))
  (begin
    (asserts! (is-called-by-charging-ctr) ERR_NOT_AUTHORIZED)
    (match (map-get? lights swap-id)
      owner 
        (begin
          (try! (nft-burn? neon-inv swap-id owner))
          (map-delete lights swap-id)
          (ok true)
        )
      (ok false)
    )
  )
)

Functions (9)

FunctionAccessArgs
is-called-by-charging-ctrprivate
get-last-token-idread-only
get-token-uriread-onlytoken-id: uint
get-ownerread-onlytoken-id: uint
get-lightread-onlyswap-id: uint
transferpublictoken-id: uint, sender: principal, recipient: principal
mint-lightpublicswap-id: uint, invader-id: (optional uint
burn-candlepublictoken-id: uint
blow-lightpublicswap-id: uint