Source Code

;; Counter Contract
;; A simple counter that can be incremented, decremented, and reset

(define-data-var counter int 0)
(define-data-var owner principal tx-sender)

;; Read-only functions
(define-read-only (get-counter)
  (ok (var-get counter))
)

(define-read-only (get-owner)
  (ok (var-get owner))
)

;; Public functions
(define-public (increment)
  (begin
    (var-set counter (+ (var-get counter) 1))
    (ok (var-get counter))
  )
)

(define-public (decrement)
  (begin
    (var-set counter (- (var-get counter) 1))
    (ok (var-get counter))
  )
)

(define-public (add (value int))
  (begin
    (var-set counter (+ (var-get counter) value))
    (ok (var-get counter))
  )
)

(define-public (subtract (value int))
  (begin
    (var-set counter (- (var-get counter) value))
    (ok (var-get counter))
  )
)

(define-public (reset)
  (begin
    (asserts! (is-eq tx-sender (var-get owner)) (err u100))
    (var-set counter 0)
    (ok 0)
  )
)

(define-public (set-value (value int))
  (begin
    (asserts! (is-eq tx-sender (var-get owner)) (err u100))
    (var-set counter value)
    (ok value)
  )
)

(define-public (transfer-ownership (new-owner principal))
  (begin
    (asserts! (is-eq tx-sender (var-get owner)) (err u100))
    (var-set owner new-owner)
    (ok new-owner)
  )
)

Functions (9)

FunctionAccessArgs
get-counterread-only
get-ownerread-only
incrementpublic
decrementpublic
addpublicvalue: int
subtractpublicvalue: int
resetpublic
set-valuepublicvalue: int
transfer-ownershippublicnew-owner: principal