Documentation Index
Fetch the complete documentation index at: https://docs.raffl.xyz/llms.txt
Use this file to discover all available pages before exploring further.
Raffl
Git Source
Inherits:
ReentrancyGuardUpgradeable, EntriesManager, IRaffl
Author:
JA (@ubinatus)
Raffl is a decentralized platform built on the Ethereum blockchain, allowing users to create and participate
in raffles/lotteries with complete transparency, security, and fairness.
State Variables
factory
STATE
Address of the RafflFactory
creator
User address that created the Raffl
prizes
Prizes contained in the Raffl
deadline
Block timestamp for when the draw should be made and until entries are accepted
minEntries
Minimum number of entries required to execute the draw
uint256 public minEntries;
entryPrice
Price of the entry to participate in the Raffl
uint256 public entryPrice;
entryToken
Address of the ERC20 entry token (if applicable)
address public entryToken;
tokenGates
Array of token gates required for all participants to purchase entries.
TokenGate[] public tokenGates;
userRefund
Maps a user address to whether refund was made.
mapping(address => bool) public userRefund;
Extra recipient to share the pooled funds.
ExtraRecipient public extraRecipient;
pool
Total pooled funds from entries acquisition
settled
Whether the raffle is settled or not
prizesRefunded
Whether the prizes were refunded when criteria did not meet.
bool public prizesRefunded;
gameStatus
Status of the Raffl game
GameStatus public gameStatus;
MAX_ENTRIES_PER_USER
Maximum number of entries a single address can hold.
uint64 internal constant MAX_ENTRIES_PER_USER = 2 ** 64 - 1;
MAX_TOTAL_ENTRIES
Maximum total of entries.
uint256 internal constant MAX_TOTAL_ENTRIES = 2 ** 256 - 1;
ONE
Percentages and fees are calculated using 18 decimals where 1 ether is 100%.
uint256 internal constant ONE = 1 ether;
manager
The manager that deployed this contract which controls the values for fee and feeCollector.
IFeeManager public manager;
Functions
onlyFactory
MODIFIERS
constructor
initialize
INITIALIZER
function initialize(
address _entryToken,
uint256 _entryPrice,
uint256 _minEntries,
uint256 _deadline,
address _creator,
Prize[] calldata _prizes,
TokenGate[] calldata _tokenGatesArray,
ExtraRecipient calldata _extraRecipient
)
external
override
initializer;
criteriaMet
METHODS
function criteriaMet() external view override returns (bool);
deadlineExpired
Checks if the deadline has passed
function deadlineExpired() external view override returns (bool);
Checks if raffle already perfomed the upkeep
function upkeepPerformed() external view override returns (bool);
poolFeeData
Returns the current pool fee associated to this Raffl.
function poolFeeData() external view returns (address, uint64);
getPrizes
Returns the current prizes associated to this Raffl.
function getPrizes() external view returns (Prize[] memory);
buyEntries
Purchase entries for the raffle.
Handles the acquisition of entries for three scenarios:
i) Entry is paid with network tokens,
ii) Entry is paid with ERC-20 tokens,
iii) Entry is free (allows up to 1 entry per user)
function buyEntries(uint256 quantity) external payable override nonReentrant;
Parameters
| Name | Type | Description |
|---|
quantity | uint256 | The quantity of entries to purchase. Requirements: - If entry is paid with network tokens, the required amount of network tokens. - If entry is paid with ERC-20, the contract must be approved to spend ERC-20 tokens. - If entry is free, no payment is required. Emits EntriesBought event |
refundEntries
Refund entries for a specific user.
Invokable when the draw was not made because the min entries were not enought
function refundEntries(address user) external override nonReentrant;
Parameters
| Name | Type | Description |
|---|
user | address | The address of the user whose entries will be refunded. |
refundPrizes
Refund prizes to the creator.
Invokable when the draw was not made because the min entries were not enought
function refundPrizes() external payable override nonReentrant;
_transferPrizes
HELPERS
Transfers the prizes to the specified user.
function _transferPrizes(address user) private;
Parameters
| Name | Type | Description |
|---|
user | address | The address of the user who will receive the prizes. |
_transferPool
Transfers the pool balance to the creator of the raffle, after deducting any fees.
function _transferPool() private;
_purchaseEntry
Internal function to handle the purchase of entries with entry price greater than 0.
function _purchaseEntry(uint256 quantity) private;
Parameters
| Name | Type | Description |
|---|
quantity | uint256 | The quantity of entries to purchase. |
_purchaseFreeEntry
Internal function to handle the purchase of free entries with entry price equal to 0.
function _purchaseFreeEntry() private;
_ensureTokenGating
Ensures that the user has all the requirements from the tokenGates array
function _ensureTokenGating(address user) private view;
Parameters
| Name | Type | Description |
|---|
user | address | Address of the user |
setSuccessCriteria
FACTORY METHODS
Access control: factory is the only allowed to called this method
function setSuccessCriteria(uint256 requestId) external override onlyFactory;
setFailedCriteria
Sets the criteria as settled, sets the GameStatus as FailedDraw and emits event
DeadlineFailedCriteria
Access control: factory is the only allowed to called this method
function setFailedCriteria() external override onlyFactory;
disperseRewards
Transfers the prizes to the provably fair and verifiable entrant, sets the GameStatus as
SuccessDraw and emits event DrawSuccess
Access control: factory is the only allowed to called this method through the Chainlink VRF Coordinator
function disperseRewards(uint256 requestId, uint256 randomNumber) external override onlyFactory nonReentrant;