(define-constant O tx-sender)
(define-constant E1 (err u880))
(define-constant E2 (err u881))
(define-data-var total-fees uint u0)
(define-data-var total-distributed uint u0)
(define-map fee-deposits uint {from: principal, amount: uint, block: uint})
(define-data-var dep-count uint u0)
(define-public (deposit-fee (amt uint))
(begin (asserts! (> amt u0) E2)
(try! (stx-transfer? amt tx-sender (as-contract tx-sender)))
(let ((id (var-get dep-count)))
(var-set dep-count (+ id u1))
(var-set total-fees (+ (var-get total-fees) amt))
(ok (map-set fee-deposits id
{from: tx-sender, amount: amt, block: stacks-block-height})))))
(define-public (distribute (to principal) (amt uint))
(begin (asserts! (is-eq tx-sender O) E1)
(try! (as-contract (stx-transfer? amt tx-sender to)))
(var-set total-distributed (+ (var-get total-distributed) amt))
(ok amt)))
(define-read-only (get-vault-info)
{total-fees: (var-get total-fees),
total-distributed: (var-get total-distributed),
deposits: (var-get dep-count)})
(define-read-only (get-deposit (id uint))
(map-get? fee-deposits id))