Source Code

(define-constant O tx-sender)
(define-constant E1 (err u890))
(define-constant E2 (err u891))
(define-data-var balance uint u0)
(define-data-var spend-count uint u0)
(define-map spending uint {to: principal, amount: uint, reason: (string-ascii 64), block: uint})
(define-public (fund (amt uint))
 (begin (asserts! (> amt u0) E2)
  (try! (stx-transfer? amt tx-sender (as-contract tx-sender)))
  (var-set balance (+ (var-get balance) amt))
  (ok amt)))
(define-public (spend (to principal) (amt uint) (reason (string-ascii 64)))
 (begin (asserts! (is-eq tx-sender O) E1)
  (asserts! (<= amt (var-get balance)) E2)
  (try! (as-contract (stx-transfer? amt tx-sender to)))
  (var-set balance (- (var-get balance) amt))
  (let ((id (var-get spend-count)))
   (var-set spend-count (+ id u1))
   (ok (map-set spending id
    {to: to, amount: amt, reason: reason, block: stacks-block-height})))))
(define-read-only (get-balance) (var-get balance))
(define-read-only (get-spend (id uint)) (map-get? spending id))
(define-read-only (get-spend-count) (var-get spend-count))

Functions (5)

FunctionAccessArgs
fundpublicamt: uint
spendpublicto: principal, amt: uint, reason: (string-ascii 64
get-balanceread-only
get-spendread-onlyid: uint
get-spend-countread-only