Skip to content

Commit

Permalink
fix: update basic lottery structure with rounds
Browse files Browse the repository at this point in the history
  • Loading branch information
whoabuddy committed Aug 28, 2024
1 parent 0f501a6 commit ba59d80
Showing 1 changed file with 60 additions and 19 deletions.
79 changes: 60 additions & 19 deletions contracts/ex8-02.clar
Original file line number Diff line number Diff line change
@@ -1,33 +1,91 @@

;; title: ex8-02
;; version: 1.0.0
;; summary:
;; summary: nft lottery contract

;; traits
;;
(impl-trait .ex8-sip009.nft-trait)
;; (impl-trait .ex8-sip009.nft-trait)

;; token definitions
;;
(define-non-fungible-token LotteryTicket uint)

;; constants
;;

;; data vars
;;

(define-data-var ticketCounter uint u0)
(define-data-var ticketPrice uint u1000000) ;; 1 STX

(define-data-var lotteryPeriod uint u144) ;; 144 blocks (~1 day)s
(define-data-var lotteryStartHeight uint block-height) ;; start when deployed

;; data maps
;;

;; track round info
(define-map LotteryRound
uint
{
ticketsSold: uint,
stxInPool: uint,
winner: (optional principal)
}
)

;; track user info
(define-map UserTickets
principal
{
tickets: uint,
lastRound: uint,
totalWon: uint,
}
)

;; public functions
;;

(define-public (buy-ticket)
;; we need to know current round
;; mint nft to user
(ok true)
)

(define-public (select-winner)
;; we need to know current round
;; if round is not over, return error
;; if winner is already selected, return error
;; closes out the old round
(ok true)
)

(define-public (claim-prize)
;; we need to know current round
;; if round is not over, return error
;; if winner is not selected, return error (or select one?)
;; if winner is not caller, return error
;; burn nft
;; transfer prize to winner
(ok true)
)

;; read only functions
;;
(define-read-only (get-lottery-round)
;; ain't clairty math fun?
(ok (+ (/ (- block-height (var-get lotteryStartHeight)) (var-get lotteryPeriod)) u1))
)

;; private functions
;;

;; 10. Your task is to create a simple NFT lottery contract where users can purchase
;; lottery tickets (as NFTs) by sending STX. Your contract must meet the requirements below.

;; Here are the requirements:
;; - Define an NFT for lottery tickets
;; - Create a function to purchase a ticket by sending STX
Expand All @@ -41,23 +99,6 @@
;; ticket price is fixed at 1 STX
;; claiming prize burns the nft

(define-non-fungible-token Ticket uint)

(define-data-var ticketCounter uint u0)
(define-data-var ticketPrice uint u1000000) ;; 1 STX
(define-data-var lotteryPool uint u0)

(define-public (buy-ticket)
;; Implement ticket purchase logic here
)

(define-public (select-winner)
;; Implement winner selection logic here (this can be hard coded, or however you prefer)
)

(define-public (claim-prize)
;; Implement prize claiming logic here
)

;; Test cases

Expand Down

0 comments on commit ba59d80

Please sign in to comment.