-
抽签算法采用Go语言编写,可自行编译
LBKLotteryMachine.go
后运行。 -
Mac平台用户可以下载可执行文件
LBKLotteryMachine
,双击后运行 -
Windows平台用户可以下载可执行文件
LBKLotteryMachine.exe
,首先运行cmd控制台,在控制台运行此文件。 -
根据控制台提示,依次输入TotalParticipants(总参与签数),TotalWinners(可中奖签数),RandomSeedHex(以太坊Block的Hash值),程序会根据以上三个参数,列出所有可中奖的签数。
- 开奖算法输入:本期活动的总参与签数M、可中奖签数N、随机数R。
- 算法输出:N个不重复的1到M的奖号集合。
- 开奖程序多次运行子程序,子程序每次运行得到一个之前未出现的中奖号码,直到最终得到N个1到M的不同中奖号码。
- 子程序所用的随机数为售卖结束之后的第一个以太坊区块Hash值。nonce值起始为0,子程序每运行一次,nonce值加一。
- 子程序每次运行结果由本期的随机数R与当前nonce值唯一确定,运行结果是1到M之间的整数。
- 如果子程序的某次运行得出的号码已经在中奖池中出现,那么将当前nonce值加一后再次运行子程序,直到得到一个未重复的号码。
- 子程序取随机数和当前nonce值作为输入运行。将随机数和当前nonce作字符链接后作SHA256运算,取运算结果的低k位十进制字符,k是本期发放的奖券总数M的十进制位数。例如共有M=55218张奖卷,那么k=5,随机数和当前nonce作字符链接后作SHA256运算的结果为0x.....d508c11427c4b7a4dcb5d01ea1fa,取45011为本次子程序运行的输出结果。
- 如果子程序运行结果大于本期发放的奖券总数M或等于0,那么本次运行结果无效,不采用本次结果,nonce值加一后再次运行子程序,直到子程序运行得到一个有效结果。例如共有M=55218张奖卷,子程序某次运行,随机数和当前nonce作字符链接后作SHA256运算的结果为0x......9815fa37a6acc96a193eed3e7c7003744a04,得到的号码74404,超过M=55218,将被舍弃。当前nonce值加一,再次运行子程序。