Source Code

;; ============================================
;; STREAK TRACKER - Inactivity Measurement
;; Clarity 2 Smart Contract
;; ============================================

(define-constant ERR_UNAUTHORIZED (err u401))

(define-map user-start-block principal uint)

(define-public (start-streak (user principal))
  (begin
    (asserts! (is-eq contract-caller .procrastination-vault) ERR_UNAUTHORIZED)
    (map-set user-start-block user burn-block-height)
    (ok true)
  )
)

(define-public (end-streak (user principal))
  (begin
    (asserts! (is-eq contract-caller .procrastination-vault) ERR_UNAUTHORIZED)
    (map-delete user-start-block user)
    (ok true)
  )
)

(define-read-only (get-streak-blocks (user principal))
  (let ((start (map-get? user-start-block user)))
    (if (is-some start)
      (ok (- burn-block-height (unwrap-panic start)))
      (ok u0)
    )
  )
)

(define-read-only (get-streak-days (user principal))
  (let ((blocks (unwrap-panic (get-streak-blocks user))))
    (ok (/ blocks u144))
  )
)

Functions (4)

FunctionAccessArgs
start-streakpublicuser: principal
end-streakpublicuser: principal
get-streak-blocksread-onlyuser: principal
get-streak-daysread-onlyuser: principal