Source Code

;; daily-lottery.clar
;; Cycle-based lottery (conceptually daily)

(define-map tickets { round: uint, user: principal } bool)
(define-data-var current-round uint u1)
(define-data-var round-end-time uint u0)
(define-constant ROUND_DURATION u144) ;; ~24 hours in blocks
(define-constant TICKET_PRICE u100)

(define-public (buy-ticket)
    (let
        (
            (time stacks-block-height)
            (round (var-get current-round))
        )
        ;; Check if round ended
        (if (> time (var-get round-end-time))
            (begin
                 (var-set current-round (+ round u1))
                 (var-set round-end-time (+ time ROUND_DURATION))
            )
            false
        )
        
        (try! (stx-transfer? TICKET_PRICE tx-sender (as-contract tx-sender)))
        (map-set tickets { round: (var-get current-round), user: tx-sender } true)
        (ok true)
    )
)

Functions (1)

FunctionAccessArgs
buy-ticketpublic