Source Code

;; SatGuard Staking Core
(define-constant err-amt (err u500))
(define-constant err-bal (err u501))
(define-constant err-nf (err u502))
(define-data-var total-staked uint u0)
(define-map stakes {who: principal} {amt: uint,sa: uint})
(define-read-only (get-stake (who principal)) (default-to {amt: u0,sa: u0} (map-get? stakes {who: who})))
(define-read-only (get-total-staked) (var-get total-staked))
(define-public (stake (amt uint))
  (let ((bal (get amt (contract-call? .sg-token-core get-balance tx-sender)))
        (ex (get amt (get-stake tx-sender))))
    (asserts! (> amt u0) err-amt)
    (asserts! (>= bal amt) err-bal)
    (try! (contract-call? .sg-token-core burn amt))
    (map-set stakes {who: tx-sender} {amt: (+ ex amt),sa: block-height})
    (var-set total-staked (+ (var-get total-staked) amt))
    (print {e: "staked",who: tx-sender,amt: amt})
    (ok true)))
(define-public (unstake (amt uint))
  (let ((ex (get amt (get-stake tx-sender))))
    (asserts! (> amt u0) err-amt)
    (asserts! (>= ex amt) err-bal)
    (try! (contract-call? .sg-token-core mint amt tx-sender))
    (map-set stakes {who: tx-sender} {amt: (- ex amt),sa: block-height})
    (var-set total-staked (- (var-get total-staked) amt))
    (print {e: "unstaked",who: tx-sender,amt: amt})
    (ok true)))

Functions (4)

FunctionAccessArgs
get-stakeread-onlywho: principal
get-total-stakedread-only
stakepublicamt: uint
unstakepublicamt: uint