Source Code

;; ========================================
;; VAULTAYIELD - FEE COLLECTOR
;; ========================================

;; ========================================
;; CONSTANTS
;; ========================================

(define-constant CONTRACT-OWNER tx-sender)

(define-constant ERR-NOT-AUTHORIZED (err u100))
(define-constant ERR-ZERO-AMOUNT (err u101))

;; ========================================
;; DATA VARIABLES
;; ========================================

(define-data-var accumulated-fees uint u0)
(define-data-var vault-core-contract (optional principal) none)
(define-data-var total-fees-collected uint u0)

;; ========================================
;; PUBLIC FUNCTIONS
;; ========================================

(define-public (collect-fee (amount uint))
  ;; Only vault-core can call this
  (begin
    (asserts! (is-authorized-vault) ERR-NOT-AUTHORIZED)
    (asserts! (> amount u0) ERR-ZERO-AMOUNT)
    
    ;; Update counters
    (var-set accumulated-fees (+ (var-get accumulated-fees) amount))
    (var-set total-fees-collected (+ (var-get total-fees-collected) amount))
    
    ;; Emit event
    (print {
      event: "fee-collected",
      amount: amount,
      accumulated: (var-get accumulated-fees),
      timestamp: block-height
    })
    
    (ok true)
  )
)

(define-public (withdraw-fees (recipient principal))
  ;; Only owner can withdraw fees
  (let
    (
      (fees (var-get accumulated-fees))
    )
    (asserts! (is-eq tx-sender CONTRACT-OWNER) ERR-NOT-AUTHORIZED)
    (asserts! (> fees u0) ERR-ZERO-AMOUNT)
    
    ;; Reset accumulated fees
    (var-set accumulated-fees u0)
    
    ;; Transfer fees to recipient
    (try! (as-contract (stx-transfer? fees tx-sender recipient)))
    
    ;; Emit event
    (print {
      event: "fees-withdrawn",
      amount: fees,
      recipient: recipient,
      timestamp: block-height
    })
    
    (ok fees)
  )
)

;; ========================================
;; ADMIN FUNCTIONS
;; ========================================

(define-public (set-vault-core (vault-contract principal))
  (begin
    (asserts! (is-eq tx-sender CONTRACT-OWNER) ERR-NOT-AUTHORIZED)
    (var-set vault-core-contract (some vault-contract))
    (ok true)
  )
)

;; ========================================
;; READ-ONLY FUNCTIONS
;; ========================================

(define-read-only (get-accumulated-fees)
  (var-get accumulated-fees)
)

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

;; ========================================
;; PRIVATE FUNCTIONS
;; ========================================

(define-private (is-authorized-vault)
  (match (var-get vault-core-contract)
    vault-contract (is-eq contract-caller vault-contract)
    false
  )
)

Functions (6)

FunctionAccessArgs
collect-feepublicamount: uint
withdraw-feespublicrecipient: principal
set-vault-corepublicvault-contract: principal
get-accumulated-feesread-only
get-total-fees-collectedread-only
is-authorized-vaultprivate