Source Code

;; Blanket Drive - Blanket distribution for cold regions
;; Halal - protecting from cold
(define-constant CONTRACT-OWNER tx-sender)
(define-constant ERR-AUTH (err u401))
(define-data-var campaign-count uint u0)
(define-data-var blankets-total uint u0)
(define-map campaigns uint { organizer: principal, region: (string-utf8 100), collected: uint, distributed: uint, status: (string-ascii 20) })
(define-map blanket-donors { campaign-id: uint, donor: principal } uint)
(define-public (create-campaign (region (string-utf8 100)))
  (let ((id (+ (var-get campaign-count) u1)))
    (map-set campaigns id { organizer: tx-sender, region: region, collected: u0, distributed: u0, status: "active" })
    (var-set campaign-count id) (ok id)))
(define-public (donate-blankets (campaign-id uint) (count uint))
  (let ((c (unwrap! (map-get? campaigns campaign-id) (err u404))))
    (map-set blanket-donors { campaign-id: campaign-id, donor: tx-sender } count)
    (map-set campaigns campaign-id (merge c { collected: (+ (get collected c) count) }))
    (var-set blankets-total (+ (var-get blankets-total) count)) (ok count)))
(define-public (distribute (campaign-id uint) (count uint))
  (let ((c (unwrap! (map-get? campaigns campaign-id) (err u404))))
    (asserts! (is-eq tx-sender (get organizer c)) ERR-AUTH)
    (map-set campaigns campaign-id (merge c { distributed: (+ (get distributed c) count) })) (ok count)))
(define-read-only (get-campaign (id uint)) (map-get? campaigns id))
(define-read-only (get-stats) (ok { campaigns: (var-get campaign-count), blankets: (var-get blankets-total) }))

Functions (5)

FunctionAccessArgs
create-campaignpublicregion: (string-utf8 100
donate-blanketspubliccampaign-id: uint, count: uint
distributepubliccampaign-id: uint, count: uint
get-campaignread-onlyid: uint
get-statsread-only