Source Code

;; SatGuard Staking Lock
(define-constant err-nf (err u520))
(define-constant err-locked (err u521))
(define-constant err-owner (err u522))
(define-constant err-amt (err u523))
(define-data-var admin principal tx-sender)
(define-map locks {who: principal} {amt: uint,until: uint,mult: uint})
(define-read-only (get-lock-info (who principal)) (map-get? locks {who: who}))
(define-public (lock-stake (duration uint))
  (let ((s (contract-call? .sg-staking-core get-stake tx-sender))
        (sa (get amt s))
        (mult (if (>= duration u12960) u3 (if (>= duration u8640) u2 u1))))
    (asserts! (> sa u0) err-amt)
    (asserts! (is-none (map-get? locks {who: tx-sender})) err-locked)
    (map-set locks {who: tx-sender} {amt: sa,until: (+ block-height duration),mult: mult})
    (print {e: "stake-locked",who: tx-sender,until: (+ block-height duration),mult: mult})
    (ok mult)))
(define-read-only (check-unlock (who principal))
  (let ((lk (map-get? locks {who: who})))
    (match lk
      l (ok (>= block-height (get until l)))
      (ok true))))
(define-public (unlock-stake)
  (let ((lk (unwrap! (map-get? locks {who: tx-sender}) err-nf)))
    (asserts! (>= block-height (get until lk)) err-locked)
    (map-delete locks {who: tx-sender})
    (print {e: "stake-unlocked",who: tx-sender})
    (ok true)))

Functions (4)

FunctionAccessArgs
get-lock-inforead-onlywho: principal
lock-stakepublicduration: uint
check-unlockread-onlywho: principal
unlock-stakepublic