;; SatGuard Governance Token (SIP-010 lite)
(define-constant err-owner (err u400))
(define-constant err-amt (err u401))
(define-constant err-bal (err u402))
(define-data-var admin principal tx-sender)
(define-data-var total-supply uint u0)
(define-map balances {who: principal} {amt: uint})
(define-read-only (get-balance (who principal)) (default-to {amt: u0} (map-get? balances {who: who})))
(define-read-only (get-total-supply) (var-get total-supply))
(define-public (transfer (amt uint) (to principal))
(let ((sb (get amt (get-balance tx-sender)))
(rb (get amt (get-balance to))))
(asserts! (> amt u0) err-amt)
(asserts! (>= sb amt) err-bal)
(map-set balances {who: tx-sender} {amt: (- sb amt)})
(map-set balances {who: to} {amt: (+ rb amt)})
(print {e: "transfer",from: tx-sender,to: to,amt: amt})
(ok true)))
(define-public (mint (amt uint) (to principal))
(let ((rb (get amt (get-balance to))))
(asserts! (is-eq tx-sender (var-get admin)) err-owner)
(asserts! (> amt u0) err-amt)
(map-set balances {who: to} {amt: (+ rb amt)})
(var-set total-supply (+ (var-get total-supply) amt))
(print {e: "mint",to: to,amt: amt})
(ok true)))
(define-public (burn (amt uint))
(let ((sb (get amt (get-balance tx-sender))))
(asserts! (>= sb amt) err-bal)
(map-set balances {who: tx-sender} {amt: (- sb amt)})
(var-set total-supply (- (var-get total-supply) amt))
(print {e: "burn",from: tx-sender,amt: amt})
(ok true)))