;; SatGuard Treasury
(define-constant err-owner (err u800))
(define-constant err-amt (err u801))
(define-constant err-bal (err u802))
(define-data-var admin principal tx-sender)
(define-data-var balance uint u0)
(define-map deposits {who: principal} {total: uint,last: uint})
(define-read-only (get-balance) (var-get balance))
(define-read-only (get-deposits (who principal)) (default-to {total: u0,last: u0} (map-get? deposits {who: who})))
(define-public (deposit (amt uint))
(let ((ex (get total (get-deposits tx-sender))))
(asserts! (> amt u0) err-amt)
(map-set deposits {who: tx-sender} {total: (+ ex amt),last: block-height})
(var-set balance (+ (var-get balance) amt))
(print {e: "treasury-deposit",who: tx-sender,amt: amt})
(ok true)))
(define-public (withdraw-treasury (amt uint) (to principal))
(begin
(asserts! (is-eq tx-sender (var-get admin)) err-owner)
(asserts! (> amt u0) err-amt)
(asserts! (<= amt (var-get balance)) err-bal)
(var-set balance (- (var-get balance) amt))
(print {e: "treasury-withdraw",to: to,amt: amt})
(ok true)))