Day One 抽奖:任何人都能验证的开奖
报名截止时参与名单即被封存,第二天由公开随机数信标提供随机数开奖,一个三十来行的脚本就能复现结果。

Day One 发布会的片尾字幕下方出现了一个六位口令。结束后 30 分钟内在活动页输入口令的人,都参与了十七份奖品的抽奖:一份 Day One 礼盒加 20 美元,两份礼盒加 10 美元,四份 5 美元,以及十份 5 美元的 CodeNav 额度。免费参加。我们说过第二天公开开奖,下面是具体做法。
怎么开的奖
- 报名截止时名单即封存,时间是 10 月 19 日 12:46 UTC。每份参与得到一个公开编号:与它一起保存的一个随机令牌的哈希,取前十六位,从中看不出背后的邮箱。排好序的名单和它的 SHA-256 封印值在其他任何事发生之前就放在了结果页上。
- 随机数来自 drand,由 League of Entropy 运营的公开随机数信标:主网链第 6568887 轮,10 月 20 日 12:00 UTC 之后的第一轮。它的值由信标的中继公开发布,在那一刻之前没有人(包括我们)能知道。
- 顺序是一个哈希。 每份参与按
随机数:编号的 SHA-256 排序,最小的排第一。第 1 名得一等奖,第 2、3 名二等奖,第 4 到 7 名三等奖,第 8 到 17 名额度奖。有人弃奖,奖品按排名顺延给下一位,页面会显示每一步。
任何人都可以重做一遍。验证脚本三十来行,没有任何依赖;先读一遍,再运行:
curl -O https://codenav.dev/day-one/draw/verify.mjs
node verify.mjs
它会取回封存的名单和那一轮 drand,打印出与结果页相同的顺序。
结果
封存名单里有八份参与,所以每一份都中了奖:一等奖一份、二等奖两份、三等奖四份、额度奖一份。剩下的九份额度奖没有发出。中奖者会收到我们的邮件,每人有一个自己的页面填写收件和收款信息。
结果没有任何一处取决于我们:名单在随机数产生之前就已存在,随机数来自一个不由我们运营的信标,排序是任何人都能重新算出来的哈希。