;; Implementation 1
;; Daily Check-in & Streak Contract
(define-constant ERR_ALREADY_CHECKED_IN (err u100))
(define-map users
{ user: principal }
{ rewards: uint, chain: uint, prev-day: uint }
)
(define-public (check-in)
(let (
(current-day (/ burn-block-height u144))
(user-data (map-get? users { user: tx-sender }))
)
(match user-data
data
(if (> current-day (get prev-day data))
(begin
(map-set users
{ user: tx-sender }
{
rewards: (+ (get rewards data) u10),
chain: (if (is-eq current-day (+ (get prev-day data) u1))
(+ (get chain data) u1)
u1),
prev-day: current-day
}
)
(ok "Check-in successful"))
ERR_ALREADY_CHECKED_IN)
(begin
(map-set users
{ user: tx-sender }
{ rewards: u10, chain: u1, prev-day: current-day }
)
(ok "First check-in"))
)
)
)
(define-read-only (get-user (user principal))
(map-get? users { user: user })
)
(define-read-only (get-my-info)
(map-get? users { user: tx-sender })
)
(define-read-only (get-info)
(ok "active"))