;; Staking Pool V63 - DeFi Contract
;; Generated by Clarity Hub
;; Category: DeFi
(define-constant ERR_UNAUTHORIZED (err u100))
(define-constant ERR_NOT_OWNER (err u101))
(define-constant ERR_INVALID_AMOUNT (err u102))
(define-constant ERR_ALREADY_EXISTS (err u103))
(define-constant ERR_NOT_FOUND (err u104))
(define-data-var contract-owner principal tx-sender)
(define-public (set-owner (new-owner principal))
(begin
(asserts! (is-eq tx-sender (var-get contract-owner)) ERR_NOT_OWNER)
(var-set contract-owner new-owner)
(ok true))
)
(define-map stakes principal { amount: uint, staked-at: uint })
(define-constant REWARD_RATE u10) ;; 10% per 100 blocks (example)
(define-public (stake (amount uint))
(begin
(try! (stx-transfer? amount tx-sender (as-contract tx-sender)))
(map-set stakes tx-sender { amount: amount, staked-at: block-height })
(ok true)
)
)
(define-public (unstake)
(let ((stake-info (unwrap! (map-get? stakes tx-sender) ERR_NOT_FOUND)))
(as-contract (stx-transfer? (get amount stake-info) tx-sender tx-sender))
)
)