This article describes how the two whitelisting lotteries of the Fantom Foundation crowdsale will be organised.
Popular ICOs on Ethereum continue to occasionally cause gas wars and network congestion. Not surprisingly, participants of such ICOs sometimes end up feeling that the process was not entirely fair. Even when a smart contract limits gas prices and prohibits investors to submit transactions too often, knowledgeable buyers continue to have a slight edge. And when a project is unable to process all KYC requests on time, this probably ends up favouring investors residing in jurisdictions for which KYC is faster and cheaper. One way or another, investing in successful ICOs is often a lottery, and rarely a fair one.
The Fantom Foundation approach
Fantom Foundation will organise its whitelisting process by running two successive lotteries. These lotteries will be completely fair and transparent, and participants who are chosen in the second lottery will have a guaranteed allocation of tokens during the first 24 hours of the ICO. The lottery winners will therefore not need to be in a rush to send their contribution immediately after the ICO begins, nor will they have to pay abnormally high gas prices.
The two lotteries
Given that KYC procedures are time consuming, Fantom Foundation has decided not to go through a KYC procedure for all applicants. Instead, anyone can apply for whitelisting during a period of 4 days, from 8 June 2018, 9am GMT + 0 until 12 June 2018, 9am (all times in this article are expressed in GMT+0/UT).
Shortly after 9am on 12 June 2018, the complete list of Ethereum addresses of all whitelisting applicants will be published. Based on the NIST Randomness Beacon data at a specific future time, a list of 6,000 addresses will be randomly chosen.
The 6000 address will be selected from a pool of valid applications not from banned countries, or that are suspected to be created by bots.
These 6,000 addresses will go through a KYC process. Those addresses for which KYC was successful will take part in a second lottery, in which a final list of roughly 2,400 addresses ( the final number depends on the ETH/USD price at the prior London 4pm opening according to the Cynopsis) will be randomly chosen.
The NIST Randomness Beacon — a blockchain of random numbers
The NIST Radomness Beacon (https://beacon.nist.gov/home) is a well-known source for random numbers. It has been in operation since May 2013 and generates a 512-bit random number every minute. The data sequence generated also happens to be a blockchain. To quote from the NIST site “Each such value is sequence-numbered, time-stamped and signed, and includes the hash of the previous value to chain the sequence of values together and prevent even the source to retroactively change an output package without being detected.”
The lottery process in detail
We will take the first lottery as an example — the second lottery will be organised in a similar manner.
After the application process for whitelisting closes at 9am on 12 June 2018, a document containing an ordered and numbered list of Ethereum addresses will be published. This will simply be a randomly shuffled list of addresses that have requested whitelisting. The document will also contain the exact minute whose NIST Beacon record we will use to determine the lottery result, and possibly some additional information. It might look like this:
BEGIN LOTTERY DATA
Fantom Foundation — first lottery to choose 6000 addresses
NIST Beacon decision time: 12-JUN-2018 15:00 GMT+0
END LOTTERY DATA
The SHA256 hash of this document will be recorded on the Ethereum blockchain using this contract. That way, any tampering of the lottery data after publication will be visible.
Obviously, the chosen NIST beacon decision time must be well after the initial publication time.
The lottery process itself will be very simple. We denote:
n = number of data points (with indices 0, 1, 2, …, n-1)
c = number of data points to be chosen (with c<n)
R = NIST beacon value at decision time (a very large integer)
The lottery result is determined by m = R % n, which is a number between 0 and n-1. The selected c items are those with indices:
m % n, (m+1) % n, (m+2) % n, … (m+c-1) % n
This corresponds to c items starting at index m and going up; if index n-1 is reached we start again at 0.
Shortly after the decision time, we will publish the lottery result, which anyone should easily be able to verify independently.