Source Code

;; Gift Card System - Track gift cards (no funds held)

(define-map giftcards
  (string-ascii 32)
  {
    creator: principal,
    amount: uint,
    redeemed: bool,
    redeemed-by: (optional principal),
    created-at: uint
  }
)

(define-public (create-giftcard (code (string-ascii 32)) (amount uint))
  (begin
    (asserts! (is-none (map-get? giftcards code)) (err u409))
    (map-set giftcards code {
      creator: tx-sender,
      amount: amount,
      redeemed: false,
      redeemed-by: none,
      created-at: stacks-block-height
    })
    (ok true)
  )
)

(define-public (redeem-giftcard (code (string-ascii 32)))
  (let ((card (unwrap! (map-get? giftcards code) (err u404))))
    (asserts! (not (get redeemed card)) (err u400))
    (map-set giftcards code (merge card {
      redeemed: true,
      redeemed-by: (some tx-sender)
    }))
    (ok (get amount card))
  )
)

(define-read-only (check-giftcard (code (string-ascii 32)))
  (map-get? giftcards code)
)

Functions (3)

FunctionAccessArgs
create-giftcardpubliccode: (string-ascii 32
redeem-giftcardpubliccode: (string-ascii 32
check-giftcardread-onlycode: (string-ascii 32