Source Code

;; ============================================
;; PENALTY POOL - Fund Redistribution
;; Clarity 2 Smart Contract
;; ============================================

(define-constant ERR_UNAUTHORIZED (err u401))

(define-data-var vault-contract principal tx-sender)
(define-constant CONTRACT_OWNER tx-sender)

(define-public (set-vault-contract (new-vault principal))
  (begin
    (asserts! (is-eq tx-sender CONTRACT_OWNER) ERR_UNAUTHORIZED)
    (asserts! (not (is-eq new-vault tx-sender)) ERR_UNAUTHORIZED)
    (ok (var-set vault-contract new-vault))
  )
)

(define-public (receive-penalty (amount uint))
  (begin
    (try! (stx-transfer? amount tx-sender .penalty-pool))
    (ok true)
  )
)

(define-public (request-reward (amount uint) (recipient principal))
  (begin
    (asserts! (is-eq contract-caller (var-get vault-contract)) ERR_UNAUTHORIZED)
    (asserts! (not (is-eq recipient (as-contract tx-sender))) ERR_UNAUTHORIZED)
    (if (> amount u0)
      (as-contract (stx-transfer? amount tx-sender recipient))
      (ok true)
    )
  )
)

(define-read-only (get-balance)
  (ok (stx-get-balance .penalty-pool))
)

Functions (4)

FunctionAccessArgs
set-vault-contractpublicnew-vault: principal
receive-penaltypublicamount: uint
request-rewardpublicamount: uint, recipient: principal
get-balanceread-only