Source Code

(define-constant O tx-sender)
(define-constant E1 (err u710))
(define-constant E2 (err u711))
(define-constant E3 (err u712))
(define-data-var fee-rate uint u50)
(define-data-var collected uint u0)
(define-map market-fees uint uint)
(define-public (set-fee-rate (r uint))
 (begin (asserts! (is-eq tx-sender O) E1)
  (asserts! (<= r u1000) E2)
  (ok (var-set fee-rate r))))
(define-public (record-fee (mid uint) (amt uint))
 (let ((fee (/ (* amt (var-get fee-rate)) u10000))
       (cur (default-to u0 (map-get? market-fees mid))))
  (map-set market-fees mid (+ cur fee))
  (var-set collected (+ (var-get collected) fee))
  (ok fee)))
(define-public (withdraw-fees)
 (begin (asserts! (is-eq tx-sender O) E1)
  (let ((bal (var-get collected)))
   (asserts! (> bal u0) E3)
   (var-set collected u0)
   (ok bal))))
(define-read-only (get-fee-rate) (var-get fee-rate))
(define-read-only (get-collected) (var-get collected))
(define-read-only (get-market-fee (mid uint))
 (default-to u0 (map-get? market-fees mid)))

Functions (6)

FunctionAccessArgs
set-fee-ratepublicr: uint
record-feepublicmid: uint, amt: uint
withdraw-feespublic
get-fee-rateread-only
get-collectedread-only
get-market-feeread-onlymid: uint