Source Code

;; Food Pantry - Community food pantry
;; Halal - feeding the hungry
(define-constant CONTRACT-OWNER tx-sender)
(define-constant ERR-AUTH (err u401))
(define-constant ERR-NONE (err u404))
(define-data-var item-count uint u0)
(define-data-var total-donated uint u0)
(define-map pantry-items uint { name: (string-utf8 100), quantity: uint, category: (string-ascii 20) })
(define-map pantry-donors principal uint)
(define-public (donate (amount uint))
  (let ((prev (default-to u0 (map-get? pantry-donors tx-sender))))
    (try! (stx-transfer? amount tx-sender CONTRACT-OWNER))
    (map-set pantry-donors tx-sender (+ prev amount))
    (var-set total-donated (+ (var-get total-donated) amount)) (ok amount)))
(define-public (add-item (name (string-utf8 100)) (quantity uint) (category (string-ascii 20)))
  (let ((id (+ (var-get item-count) u1)))
    (asserts! (is-eq tx-sender CONTRACT-OWNER) ERR-AUTH)
    (map-set pantry-items id { name: name, quantity: quantity, category: category })
    (var-set item-count id) (ok id)))
(define-public (distribute (id uint) (qty uint))
  (let ((item (unwrap! (map-get? pantry-items id) ERR-NONE)))
    (asserts! (is-eq tx-sender CONTRACT-OWNER) ERR-AUTH)
    (map-set pantry-items id (merge item { quantity: (- (get quantity item) qty) })) (ok qty)))
(define-read-only (get-item (id uint)) (map-get? pantry-items id))
(define-read-only (get-stats) (ok { items: (var-get item-count), donated: (var-get total-donated) }))

Functions (5)

FunctionAccessArgs
donatepublicamount: uint
add-itempublicname: (string-utf8 100
distributepublicid: uint, qty: uint
get-itemread-onlyid: uint
get-statsread-only