Source Code

;; Mini-Marketplace: List and Buy
(define-map listings principal {item-name: (string-ascii 20), price: uint})

;; Public: List an item for sale
(define-public (list-item (name (string-ascii 20)) (price uint))
  (begin
    (map-set listings tx-sender {item-name: name, price: price})
    (ok "Item listed!")
  )
)

;; Public: Buy an item from a seller
(define-public (buy-item (seller principal))
  (let (
    (listing (unwrap! (map-get? listings seller) (err u404))) ;; Item not found
    (amount (get price listing))
  )
    ;; 1. Transfer STX from buyer (tx-sender) to seller
    (try! (stx-transfer? amount tx-sender seller))
    
    ;; 2. Remove the listing after purchase
    (map-delete listings seller)
    (ok "Purchase complete!")
  )
)

;; Read-only: Check a listing
(define-read-only (get-listing (seller principal))
  (map-get? listings seller)
)

Functions (3)

FunctionAccessArgs
list-itempublicname: (string-ascii 20
buy-itempublicseller: principal
get-listingread-onlyseller: principal