EOSIO随机数的一种实现

Tiny Hill

最近帮助 Enumivo(基于 EOSIO)社区做一个投票奖励活动,除了基本的投票奖励之外,还加入了一定的随机机制,增加乐趣。

合约随机逻辑:

  1. 用户发起领取交易,领取投票奖励,同时合约账户转 1ENU 到奖池,同时发起一笔(0-24 小时随机值)的延迟交易。

  2. 延迟交易被触发,检查奖池金额,达到了 10ENU,就把 10ENU 都奖励给当前用户。

随机机制:

0-24 小时这个时间的随机数,就使用之前常用的利用 block prefix 值来生成,这个不是随机的唯一部分。因为就算用户可以控制随机数来控制延迟时间,也没有办法控制延迟交易发生时奖池的金额,奖池的金额完全是根据其他用户的随机行为来进行累积的。利用这样的随机数方案,或许能够开发一款公平的 Lottery Dapp。

可能的攻击方式:

构造交易控制随机数控制延时时间,在延迟交易发生前利用别的账户发起交易,将奖池金额构造到满足开奖条件。像本应用这样金额比较小的开奖,应该没有人会费时费力做这个事情。当奖金足够诱人的时候,就有人和你竞争,增加了开奖的不确定性。

欢迎拍砖。

其他信息

Enumivo

Enumivo 是一个以 UBI(全民基本收入)为目标的区块链项目

白皮书:

https://enumivo.org/whitepapers/whitepaper_cn.pdf