🤑 Single Random Winner

The Single Random Winner prize strategy periodically selects a random winner and awards to them all the prizes available in the Prize Pool.

A Single Random Winner prize strategy is initialized with:

Prize Period Start: the timestamp at which the prize period should start

Prize Period Seconds: the duration of time between prizes

Ticket: The interface to use to select winners

Sponsorship: The token that represents sponsorship

Random Number Generator: used to generate random numbers for winner selection


Anyone may start the award process.

function startAward() external


  • Requires that either:

    • the current time is greater than or equal to start time + prize period

    • there is an active random number request and it has timed out

  • Locks the pool. Tickets cannot be minted or redeemed

  • Requests a random number from the RNG service

Once the random number is available, a user can call:

function completeAward() external


  • Requires that startAward() has been called

  • Unlocks the pool

  • Disburses the prize

  • Moves the prize start time forward

  • Clears the random number request

You can check the above required conditions using canStartAward() and canCompleteAward():

function canStartAward() external view returns (bool);


function canCompleteAward() external view returns (bool);


Current Yield Prize

To retrieve amount of accrued prize interest so far you may call:

function currentPrize() external returns (uint256);

Estimating Prize

To estimate what the prize will be you can call:

function estimatePrize() external returns (uint256);

External Prizes

The owner can add "external" ERC20 tokens as prizes. The strategy will award the entire balance held by the Prize Pool to the winner.

function addExternalErc20Award(address _externalErc20) external onlyOwner;

The owner can add "external" ERC721 tokens as prizes. These tokens will be transferred to the winner.

function addExternalErc721Award(
address _externalErc721,
uint256[] calldata _tokenIds
) external onlyOwner


To retrieve when the current prize started:

function prizePeriodStartedAt() external view returns (uint256)

To retrieve when the prize will end:

function prizePeriodEndAt() external view returns (uint256)




function sponsorship() returns (ERC20)

Returns the address of the sponsorship token.

function ticket() returns (Ticket)

Returns the address of the ticket token.