RafflFactory
Git Source Inherits: AutomationCompatibleInterface, VRFConsumerBaseV2Plus, FactoryFeeManager 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. The RafflFactory contract can be used to create raffle contracts, leveraging Chainlink VRF and Chainlink Automations.State Variables
keyHash
Max gas to bump tocallbackGasLimit
Callback gas limit for the Chainlink VRFrequestConfirmations
Number of requests confirmations for the Chainlink VRFsubscriptionId
Chainlink subscription IDimplementation
The address that will be used as a delegate call target forRaffls.
_salt
It will be used as the salt for create2_raffles
Maps the createdRaffls addresses
_requestIds
Maps the VRFrequestId to the Raffls address
_activeRaffles
Stores the active raffles, which upkeep is pending to be performedFunctions
constructor
*Creates aRaffl factory contract.
Requirements:
implementationAddresshas to be a contract.feeCollectorAddresscan’t be address 0x0.poolFeePercentagemust be within 0 and maxFee range.vrfCoordinatorcan’t be address 0x0.*
| Name | Type | Description |
|---|---|---|
implementationAddress | address | Address of Raffl contract implementation. |
feeCollectorAddress | address | Address of feeCollector. |
creationFeeValue | uint64 | Value for creationFee that will be charged on new Raffls deployed. |
poolFeePercentage | uint64 | Value for poolFeePercentage that will be charged from the Raffls pool on success draw. |
vrfCoordinator | address | VRF Coordinator address |
_keyHash | bytes32 | The gas lane to use, which specifies the maximum gas price to bump to |
_subscriptionId | uint256 | The subscription ID that this contract uses for funding VRF requests |
nextSalt
Increments the salt one step.createRaffle
Creates newRaffl contracts.
Requirements:
underlyingTokenAddresscannot be the zero address.timestampsmust be given in ascending order.percentagesmust be given in ascending order and the last one must always be 1 eth, where 1 eth equals to 100%.
| Name | Type | Description |
|---|---|---|
entryToken | address | The address of the ERC-20 token as entry. If address zero, entry is the network token |
entryPrice | uint256 | The value of each entry for the raffle. |
minEntries | uint256 | The minimum number of entries to consider make the draw. |
deadline | uint256 | The block timestamp until the raffle will receive entries and that will perform the draw if criteria is met. |
prizes | IRaffl.Prize[] | The prizes that will be held by this contract. |
tokenGates | IRaffl.TokenGate[] | The token gating that will be imposed to users. |
extraRecipient | IRaffl.ExtraRecipient | The extra recipient that will share the rewards (optional). |
activeRaffles
Exposes theActiveRaffles
handleSubscription
Sets the Chainlink VRF subscription settings| Name | Type | Description |
|---|---|---|
_subscriptionId | uint64 | The subscription ID that this contract uses for funding VRF requests |
_keyHash | bytes32 | The gas lane to use, which specifies the maximum gas price to bump to |
_callbackGasLimit | uint32 | Callback gas limit for the Chainlink VRF |
_requestConfirmations | uint16 | Number of requests confirmations for the Chainlink VRF |
checkUpkeep
Method called by the Chainlink Automation Nodes to check ifperformUpkeep must be done.
Performs the computation to the array of _activeRaffles. This opens the possibility of having several
checkUpkeeps done at the same time.
| Name | Type | Description |
|---|---|---|
checkData | bytes | Encoded binary data which contains the lower bound and upper bound of the _activeRaffles array on which to perform the computation |
| Name | Type | Description |
|---|---|---|
upkeepNeeded | bool | Whether the upkeep must be performed or not |
performData | bytes | Encoded binary data which contains the raffle address and index of the _activeRaffles |
performUpkeep
Permissionless write method usually called by the Chainlink Automation Nodes. Either starts the draw for a raffle or cancels the raffle if criteria is not met.| Name | Type | Description |
|---|---|---|
performData | bytes | Encoded binary data which contains the raffle address and index of the _activeRaffles |
fulfillRandomWords
Method called by the Chainlink VRF Coordinator| Name | Type | Description |
|---|---|---|
requestId | uint256 | Id of the VRF request |
randomWords | uint256[] | Provably fair and verifiable array of random words |
_burnActiveRaffle
Helper function to remove a raffle from the_activeRaffles array
Move the last element to the deleted stop and removes the last element
| Name | Type | Description |
|---|---|---|
i | uint256 | Element index to remove |
setFeeCollector
FUNCTIONS *Set address of fee collector. Requirements:msg.senderhas to be the owner of the factory.newFeeCollectorcan’t be address 0x0.*
| Name | Type | Description |
|---|---|---|
newFeeCollector | address | Address of feeCollector. |
Events
RaffleCreated
| Name | Type | Description |
|---|---|---|
raffle | address | Address of the created raffle |
Structs
ActiveRaffle
raffle the address of the raffle
deadline is the timestamp that marks the start time to perform the upkeep effect.