Source Code

;; Streak Counter

(define-map streaks
  principal
  { current: uint, longest: uint, lastBlock: uint }
)

(define-public (check-in)
  (let ((s (default-to { current: u0, longest: u0, lastBlock: u0 } (map-get? streaks tx-sender))))
    (let ((new-current (if (<= (- stacks-block-height (get lastBlock s)) u144) (+ (get current s) u1) u1)))
      (map-set streaks tx-sender {
        current: new-current,
        longest: (if (> new-current (get longest s)) new-current (get longest s)),
        lastBlock: stacks-block-height
      })
    )
    (ok true)
  )
)

(define-read-only (get-streak (user principal))
  (default-to { current: u0, longest: u0, lastBlock: u0 } (map-get? streaks user))
)

Functions (2)

FunctionAccessArgs
check-inpublic
get-streakread-onlyuser: principal