Whitelist Process
Note: we’ll use Pacific Time (PT, America/Los_Angeles) if not specified otherwise.
Dear QuarkChain community members,
We appreciate your patience and support over the last few weeks for the KYC process. Now we have the KYC and scores finalized. It is the time to talk about our whitelisting process, and the crowd sale right after.
As we promised before, we’d like to make sure the process is as fair as possible. Therefore, along with this announcement, we also publish following information:
- The whitelisting code, hosted in a GitHub repo. As we mentioned before, the code for the lottery system is intended to be reproducible
- Applicants’ access code and total scores, of those who got KYC approved and scores >= 60
- Blacklisted users’ access code, identified by our community admins, for behaviors like selling access code or using multiple accounts
- A blockhash from a future Bitcoin block as a random seed
We will use the hash of a block generated no later than noon (12pm) of Friday, June 1st. Then, we’ll run the program, and get the final list of whitelisted participants. The result will be published in this spreadsheet.
For the whitelist, we will double-check to make sure no inadequate things or misbehaviors are in the list, for example, duplicate accounts with the same KYC information. In this case, we may remove those participants and fill them in with substitutes (who are also ranked by our lottery system).
We’ll announce the details of the crowd sale together with the whitelist results.
As always, the team appreciates your understanding and participation in the project, and we’ll try our best to make the process smooth and fair.
a great job.thx
well done
查下看看有没有中先
anything relates to bounty ?
for those avid of details, thank Michael Srb for this Here's how QuarkChain's lottery worked:
line 74: total_score = sum(c.score for c in candidates) — sum of all scores of all not-yet-whitelisted candidates
line 75: chosen = random.random() * total_score — pick random number between 0 - total_score
line 76: for i, c in enumerate(candidates): — let's iterate over sorted list of all candidates
line 77: if chosen <= c.score: — check if chosen number is <= than the score of the currently selected candidate (this is important as if the first candidate had 100 then he/she would be whitelisted if chosen number is <= 100; but if the first candidate had only 60 points then the chosen number would need to be <= 60 —- and this is why people with higher score had greater chance to win)
line 78: whitelist.append(c) — whitelist candidate if the condition on line 77 was true
line 79: candidates.pop(i) — remove the candidate from the sorted list so he/she will not be whitelisted twice
line 80: break — we've already whitelisted one candidate this round so let's start over and jump to line 74
line 81: chosen -= c.score — this line gets executed if the condition on line 77 is false, i.e. chosen number is not <= than score of the currently selected candidate; so we will subtract candidate's score from the chosen number and we will jump to line 76 where we select another candidate and repeat the process from there