Source Code

;; 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"))

Functions (4)

FunctionAccessArgs
check-inpublic
get-userread-onlyuser: principal
get-my-inforead-only
get-inforead-only