Lottery v2
Contract info
Contract name: PancakeSwapLottery Contract address: 0x5aF6D33DE2ccEC94efb1bDF8f92Bd58085432d2c Random number generator address: 0x8c6375Aab6e5B26a30bF241EBBf29AD6e6c503c2 (Random number generator contract must be deployed first)
View PancakeSwapLottery.sol on BscScan.
View the PancakeSwap: Lottery contract on BscScan.
Audits
The PancakeSwap Lottery V2 has been audited twice so far. View the results below:
Lottery Status states
The lottery has four Status
states, Pending
, Open
, Close
, and Claimable
, that determine which actions can and cannot be taken at a given time.
Read/View functions
viewCurrentLotteryId
Returns the Id# of the current Lottery round as an integer. Round Id#s correlate to round number, and are incremental, e.g. the ninth round of Lottery will be 9
.
viewLottery
Returns information on specified Lottery round as tuple (see Lottery structure below).
Name | Type | Description |
| uint256 | Starting block for Lottery round. |
| uint256 | Ending block for Lottery round (approximately 12 hours after a round begins). |
| uint256 | The price of a ticket in CAKE (approximately $5 USD). |
| uint256 | The divisor used to calculate bulk ticket discount. |
| uint256[6] | The division of rewards across brackets (total must add up to 10,000). |
| uint256 | Amount taken from funds raised per round that's moved to treasury address (maximum 3000). |
| uint256[6] | The amount of CAKE to distribute to winners of each bracket. |
| uint256[6] | Moves through brackets, starting from the highest, accounting for winners when value > 0. |
| uint256 | Id of the first ticket, set with the opening of the Lottery round, that determines the range of eligible tickets for the current round. |
| uint256 | Id of the first ticket, set at the closing of current round, that determines the range of eligible tickets for the current round. |
| uint256 | The amount of CAKE collected through ticket sales for the Lottery round. |
| uint32 | The final number determined by |
viewNumbersAndStatusesForTicketIds
Returns the corresponding numbers and the statuses of ticketIds
array of tickets defined by their ticketId
.
viewRewardsForTicketId
Calculates rewards for a ticket after draw given the lotteryId
, ticketId
, and bracket
. Filling and querying will provide a link to detailed price information on BscScan.
Name | Type | Description |
| uint256 | The id of the Lottery. |
| uint256 | The id of the ticket. |
| uint32 | Bracket for the |
viewUserInfoForLotteryId
Returns user lotteryTicketIds
, ticketNumbers
, and ticketStatuses
of a user for a given Lottery (defined by lotteryID
).
Name | Type | Description |
| address | The address of the user. |
| uint256 | The id of the Lottery. |
| uint256 | Cursor to start where to retrieve the tickets. |
| uint256 | The number of tickets to retrieve. |
calculateRewardsForTicketId
Calculates rewards for a ticket after draw given the lotteryId
, ticketId
, and bracket
.
Name | Type | Description |
| uint256 | The id of the Lottery. |
| uint256 | The id of the ticket. |
| uint32 | Bracket for the |
calculateTotalPriceForBulkTickets
Calculates the price for a set of tickets accounting for bulk discount.
discountDivisor:
Filling and querying will provide a link to detailed price information on BscScan.
Name | Type | Description |
| uint256 | The divisor for the discount. |
| uint256 | The price of a ticket in CAKE. |
| uint256 | The number of tickets to buy. |
Write functions (users)
buyTickets
Buy tickets for the current Open
Lottery round (between 1 and 100 per purchase). Calculates the price per ticket using calculateTotalPriceForBulkTickets
.
Name | Type | Description |
| uint256 | The id of the lottery. |
| uint32 | Array of ticket numbers between 1,000,000 and 1,999,999. |
claimTickets
Claim a set of winning tickets for a Claimable
Lottery round. Checks lotteryId
to determine if round is claimable, ownership of ticketId
, eligibility of ticket (ticketId
falls between firstTicketId
and firstTicketIdNextLottery
), and whether ticketId
falls within eligible prize bracket
(between 0 and 5).
Name | Type | Description |
| uint256 | The id of the Lottery. |
| uint32 | Array of |
| uint32 | Array of brackets for the ticket ids. |
Write functions (operator/admin)
closeLottery
Closes the Open
Lottery to Close
state. Emits LotteryClose
event.
Name | Type | Description |
| uint256 | The id of the Lottery. |
drawFinalNumberAndMakeLotteryClaimable
Lottery must be in Close
state. Draws the final Lottery number for results from randomResult
, calculates the rewards for brackets after accounting for treasury fee, makes Lottery state Claimable
, and transfers treasury fee to treasury address.
Name | Type | Description |
| uint256 | The id of the Lottery. |
| bool | Automatic injection status. |
changeRandomNumberGenerator
Changes the random number generator contract address. Lottery must be Claimable
.
Name | Type | Description |
| address | The random generator address. |
injectFunds
Inject funds into a Lottery. Lottery must be Open
.
Name | Type | Description |
| uint256 | The id of the Lottery. |
| uint256 | Amount, in CAKE token, to inject. |
startLottery
Starts the Lottery, setting it to Open
state. Status must be Claimable
.
Name | Type | Description |
| uint256 | End time of the Lottery. |
| uint256 | Price of a ticket in CAKE. |
| uint256 | The divisor to calculate the discount magnitude for bulks. |
| uint256[6] | Breakdown of rewards per bracket (must sum to 10,000). |
| uint256 | Treasury fee (10,000 = 100%, 100 = 1%). |
recoverWrongTokens
Allows admin to recover incorrect tokens sent to address mistakenly. Cannot be CAKE tokens.
Name | Type | Description |
| address | The address of the token to withdraw. |
| uint256 | The number of tokens to withdraw. |
setMinAndMaxTicketPriceInCake
Allows admin to set upper and lower limit of ticket price in CAKE value. Minimum price must be lower than maximum price.
Name | Type | Description |
| uint256 | The minimum price in CAKE. |
| uint256 | The maximum price in CAKE. |
setMaxNumberTicketsPerBuy
Set max number of tickets purchasable at a time (presently 100). Max number of tickets must be higher than 0.
Name | Type | Description |
| uint256 | Max number of tickets in one purchase. |
setOperatorAndTreasuryAndInjectorAddress
Sets the address of the Lottery operator.
Name | Type | Description |
| address | The address of the operator. |
| address | The address of the treasury. |
| address | The address of the injector. |
Events (User)
TicketsPurchase
Lottery tickets are purchased.
Emitter: buyTickets
go to buyTickets
TicketsClaim
Lottery tickets are claimed post-draw.
Emitter: claimTickets
go to claimTickets
Events (admin)
AdminTokenRecovery
Admin recovers incorrect tokens from Lottery address.
Emitter: recoverWrongTokens
go to recoverWrongTokens
LotteryClose
The Lottery is closed. lotteryId is indexed and firstTicketIdNextLottery
is determined by currentTicketId
.
Emitter: closeLottery
go to closeLottery
LotteryInjection
Funds are injected into Lottery.
Emitter: injectFunds
go to injectFunds
LotteryOpen
The Lottery is opened. firstTicketId
is set from currentTicketId
,
Emitter: startLottery
go to startLottery
LotteryNumberDrawn
Lottery numbers are drawn for Lottery round.
Emitter: drawFinalNumberAndMakeLotteryClaimable
go to drawFinalNumberAndMakeLotteryClaimable
NewOperatorAndTreasuryAndInjectorAddresses
New operator address is set.
Emitter: setOperatorAndTreasuryAndInjectorAddresses
go to setOperatorAndTreasuryAndInjectorAddresses
NewRandomNumberGenerator
New random number generator address is set.
Emitter: changeRandomGenerator
go to changeRandomGenerator
Last updated