Source Code

;; SatGuard Fee Engine
(define-constant err-owner (err u810))
(define-constant err-amt (err u811))
(define-data-var admin principal tx-sender)
(define-data-var flat-fee uint u1000) ;; flat fee in micro-units
(define-data-var pct-fee uint u250) ;; 2.5% in basis points
(define-read-only (get-flat-fee) (var-get flat-fee))
(define-read-only (get-pct-fee) (var-get pct-fee))
(define-public (set-flat-fee (fee uint))
  (begin
    (asserts! (is-eq tx-sender (var-get admin)) err-owner)
    (var-set flat-fee fee)
    (print {e: "flat-fee-set",fee: fee})
    (ok true)))
(define-public (set-pct-fee (fee uint))
  (begin
    (asserts! (is-eq tx-sender (var-get admin)) err-owner)
    (asserts! (<= fee u1000) err-amt) ;; max 10%
    (var-set pct-fee fee)
    (print {e: "pct-fee-set",fee: fee})
    (ok true)))
(define-read-only (calc-fee (amt uint))
  (let ((pct (/ (* amt (var-get pct-fee)) u10000))
        (flat (var-get flat-fee)))
    (ok (+ pct flat))))
(define-read-only (calc-amount-after-fee (amt uint))
  (let ((fee (/ (* amt (var-get pct-fee)) u10000)))
    (ok (- amt (+ fee (var-get flat-fee))))))

Functions (6)

FunctionAccessArgs
get-flat-feeread-only
get-pct-feeread-only
set-flat-feepublicfee: uint
set-pct-feepublicfee: uint
calc-feeread-onlyamt: uint
calc-amount-after-feeread-onlyamt: uint