Source Code

;; clean-water -- clean water fund for villages
(define-constant CONTRACT-OWNER tx-sender)
(define-constant ERR-AUTH (err u401))
(define-data-var fund-total uint u0)
(define-data-var project-count uint u0)
(define-map projects uint { village: (string-ascii 30), goal: uint, raised: uint, done: bool })
(define-map donors principal uint)
(define-public (donate (amount uint))
  (let ((prev (default-to u0 (map-get? donors tx-sender))))
    (var-set fund-total (+ (var-get fund-total) amount))
    (map-set donors tx-sender (+ prev amount)) (ok amount)))
(define-public (add-project (village (string-ascii 30)) (goal uint))
  (let ((id (+ (var-get project-count) u1)))
    (var-set project-count id)
    (map-set projects id { village: village, goal: goal, raised: u0, done: false }) (ok id)))
(define-read-only (get-project (id uint)) (map-get? projects id))
(define-read-only (get-fund) (var-get fund-total))

Functions (4)

FunctionAccessArgs
donatepublicamount: uint
add-projectpublicvillage: (string-ascii 30
get-projectread-onlyid: uint
get-fundread-only