Source Code

;; StacksMint Treasury Contract
;; Manages creator fees collection and withdrawal
;; Creator Fee: 0.01 STX (10000 microSTX)

;; Constants
(define-constant CONTRACT-OWNER tx-sender)
(define-constant ERR-NOT-AUTHORIZED (err u100))
(define-constant ERR-INSUFFICIENT-BALANCE (err u101))
(define-constant ERR-TRANSFER-FAILED (err u102))
(define-constant CREATOR-FEE u10000) ;; 0.01 STX in microSTX

;; Data Variables
(define-data-var total-fees-collected uint u0)
(define-data-var total-fees-withdrawn uint u0)

;; Data Maps
(define-map authorized-contracts principal bool)

;; Read-only functions

;; Get creator fee amount
(define-read-only (get-creator-fee)
  CREATOR-FEE
)

;; Get total fees collected
(define-read-only (get-total-fees-collected)
  (var-get total-fees-collected)
)

;; Get total fees withdrawn
(define-read-only (get-total-fees-withdrawn)
  (var-get total-fees-withdrawn)
)

;; Get treasury balance
(define-read-only (get-treasury-balance)
  (stx-get-balance (as-contract tx-sender))
)

;; Check if contract is authorized
(define-read-only (is-authorized-contract (contract principal))
  (default-to false (map-get? authorized-contracts contract))
)

;; Public functions

;; Deposit fee to treasury (called by other StacksMint contracts)
(define-public (deposit-fee (sender principal))
  (begin
    (try! (stx-transfer? CREATOR-FEE sender (as-contract tx-sender)))
    (var-set total-fees-collected (+ (var-get total-fees-collected) CREATOR-FEE))
    (ok true)
  )
)

;; Authorize a contract to interact with treasury
(define-public (authorize-contract (contract principal))
  (begin
    (asserts! (is-eq tx-sender CONTRACT-OWNER) ERR-NOT-AUTHORIZED)
    (map-set authorized-contracts contract true)
    (ok true)
  )
)

;; Revoke contract authorization
(define-public (revoke-contract (contract principal))
  (begin
    (asserts! (is-eq tx-sender CONTRACT-OWNER) ERR-NOT-AUTHORIZED)
    (map-delete authorized-contracts contract)
    (ok true)
  )
)

;; Withdraw fees to creator (owner only)
(define-public (withdraw-fees (amount uint))
  (begin
    (asserts! (is-eq tx-sender CONTRACT-OWNER) ERR-NOT-AUTHORIZED)
    (asserts! (<= amount (get-treasury-balance)) ERR-INSUFFICIENT-BALANCE)
    (try! (as-contract (stx-transfer? amount tx-sender CONTRACT-OWNER)))
    (var-set total-fees-withdrawn (+ (var-get total-fees-withdrawn) amount))
    (ok amount)
  )
)

;; Withdraw all fees to creator (owner only)
(define-public (withdraw-all-fees)
  (let ((balance (get-treasury-balance)))
    (asserts! (is-eq tx-sender CONTRACT-OWNER) ERR-NOT-AUTHORIZED)
    (asserts! (> balance u0) ERR-INSUFFICIENT-BALANCE)
    (try! (as-contract (stx-transfer? balance tx-sender CONTRACT-OWNER)))
    (var-set total-fees-withdrawn (+ (var-get total-fees-withdrawn) balance))
    (ok balance)
  )
)

Functions (10)

FunctionAccessArgs
get-creator-feeread-only
get-total-fees-collectedread-only
get-total-fees-withdrawnread-only
get-treasury-balanceread-only
is-authorized-contractread-onlycontract: principal
deposit-feepublicsender: principal
authorize-contractpubliccontract: principal
revoke-contractpubliccontract: principal
withdraw-feespublicamount: uint
withdraw-all-feespublic