Source Code

;; Simple voting contract
(define-data-var proposal-active bool true)
(define-data-var votes-yes uint u0)
(define-data-var votes-no uint u0)
(define-map voters principal bool)

(define-read-only (get-vote-counts)
  {yes: (var-get votes-yes), no: (var-get votes-no)}
)

(define-public (vote-yes)
  (begin
    (asserts! (var-get proposal-active) (err u1))
    (asserts! (not (default-to false (map-get? voters tx-sender))) (err u2))
    (map-set voters tx-sender true)
    (ok (var-set votes-yes (+ (var-get votes-yes) u1)))
  )
)

(define-public (vote-no)
  (begin
    (asserts! (var-get proposal-active) (err u1))
    (asserts! (not (default-to false (map-get? voters tx-sender))) (err u2))
    (map-set voters tx-sender true)
    (ok (var-set votes-no (+ (var-get votes-no) u1)))
  )
)

(define-public (close-voting)
  (ok (var-set proposal-active false))
)

Functions (4)

FunctionAccessArgs
get-vote-countsread-only
vote-yespublic
vote-nopublic
close-votingpublic