Source Code

;; Simple Crowdfund Contract

(define-constant owner tx-sender)
(define-constant goal u5000000000) ;; 5000 STX goal

(define-data-var total-raised uint u0)
(define-map contributions principal uint)

;; Contribute to campaign
(define-public (contribute (amount uint))
  (let ((current (default-to u0 (map-get? contributions tx-sender))))
    (try! (stx-transfer? amount tx-sender (as-contract tx-sender)))
    (map-set contributions tx-sender (+ current amount))
    (var-set total-raised (+ (var-get total-raised) amount))
    (ok true)
  )
)

;; Claim funds if goal met
(define-public (claim)
  (begin
    (asserts! (is-eq tx-sender owner) (err u1))
    (asserts! (>= (var-get total-raised) goal) (err u2))
    (as-contract (stx-transfer? (var-get total-raised) tx-sender owner))
  )
)

;; Get refund if goal not met
(define-public (refund)
  (let ((amount (default-to u0 (map-get? contributions tx-sender))))
    (asserts! (< (var-get total-raised) goal) (err u3))
    (asserts! (> amount u0) (err u4))
    (map-delete contributions tx-sender)
    (as-contract (stx-transfer? amount tx-sender tx-sender))
  )
)

;; Read functions
(define-read-only (get-total) (var-get total-raised))
(define-read-only (get-contribution (user principal)) 
  (default-to u0 (map-get? contributions user)))

Functions (5)

FunctionAccessArgs
contributepublicamount: uint
claimpublic
refundpublic
get-totalread-only
get-contributionread-onlyuser: principal