Source Code

;; Balance tracking contract
(define-map balances principal uint)
(define-data-var total-supply uint u0)

(define-read-only (get-balance (user principal))
  (default-to u0 (map-get? balances user))
)

(define-read-only (get-total-supply)
  (var-get total-supply)
)

(define-public (add-balance (user principal) (amount uint))
  (let ((current (get-balance user)))
    (begin
      (asserts! (> amount u0) (err u1))
      (map-set balances user (+ current amount))
      (ok (var-set total-supply (+ (var-get total-supply) amount)))
    )
  )
)

(define-public (reduce-balance (user principal) (amount uint))
  (let ((current (get-balance user)))
    (begin
      (asserts! (>= current amount) (err u2))
      (map-set balances user (- current amount))
      (ok (var-set total-supply (- (var-get total-supply) amount)))
    )
  )
)

Functions (4)

FunctionAccessArgs
get-balanceread-onlyuser: principal
get-total-supplyread-only
add-balancepublicuser: principal, amount: uint
reduce-balancepublicuser: principal, amount: uint