最近项目中需要做一个抽奖的功能,在这个功能里,随机数种子必须是公开的,方便用户查询的,计算过程方便公示的。本来的想法是使用声明抽奖后的第x个区块的区块哈希,这样用户也很容易验证,代码写起来也很简单。但是不幸的是aptos链并没有通过高度获取哈希这种东西,这很令我头秃。组长提议从链下引入,但是公平公正和中心化的稳定性又成了问题,最后我选用了这种方法:
该方法分为三步:
1.创建随机数
在创建某个抽奖项目时,项目方可以自主选用一些密钥
同时定义并公开一个陷门函数
在执行交易时,把 传入合约存储,并触发事件以供用户查验
2.构造随机数(可省略)
每一个用户参与抽奖时,可以添加一个随机数,最后生成一个随机数组
3.揭示中奖密码
管理员传入密钥 ,合约验证
若不成功,则说明管理员徇私,不予通过。
若成功,则中奖号码为
本来想做一个mpc的过程,但是aptos的生态实在太缺了,不太好做,就决定用这个单陷门函数控制的方法了。