今晚听了一堂随机数风险的交流,发现现有的随机数方式也有问题。
当前diceol选用的是未来某个block id作为随机种子。但是在原力上,因为交易不活跃,某些时段,block中只有一个固定的action,而其他相关的变量都能提前预测到,导致这个block id也是可以预测的。原链稍好,因为交易活跃,每个block大概率有很多个action,所以block id不容易被预测。
大家如果是部署到原力的话,注意上述风险。补救措施的话,可以加一个盐值算hash,盐值的值域需要足够大,避免被字典攻击,更换盐值后再公布以取信。原链应该不用担心。我也不想修改了,大家有兴趣的可以撸。
eosforce 上部署的一个骰子游戏,挺无聊的。支持scatter/麦子钱包,给大家作个参考吧。
推荐链接格式是:http://www.bidname.net/App/EosForce?ref=XXXXX
如果XXXXX不是当前帐号,那么XXXXX帐号可以收到额外5%目前了无价值的DCL。
没有使用EOS提供的两次提交随机种子的方式,而是通过链外resolver定期结算。每隔12秒的block的hash值,被resolver作为随机种子灌入合约,结算。
单次投注,用block hash拼接上投注id,然后计算sh256,然后按字节累加求和,对100求模后+1,得到结果。
多人投注,用block hash计算sh256,然后按字节累加求和,对10或者100求模,得到结果。
上述过程简单,不如全部在链上有公信力。但是因为上述流程和数据都是可以追查的,还是比较可信的。
为了尽快结算,所以结算没有等到块不可逆。如果要等到不可逆块,预计需要90秒以上的延时,更难接受。
由于会以接入节点提供的未到不可逆的块的hash作为随机种子,所以,可能出现个别结算使用的block hash,和最终链上不可逆块的hash值不一致。
这点应该不是大问题,首先这个hash也是源于某个节点计算出来的,也具有足够的随机性和公信力;其次,使用resolve,可以在本地记录指定节点的历史block hash值以进行检查,也是可以事后验证的。
这个游戏目前反应速度比较慢,因为web和结算不在一起,延时至少12秒以上,也不想改进了,谢谢大家理解。
我一直不喜欢菠菜游戏,这次做出来这个主要是练练手吧,以后还是想做点有实际价值的应用。区块链的未来,不能靠这种菠菜应用。
这个游戏在盈亏平衡点的数学期望基础上,扣了2%的奖金,这样玩家将以大约51%甚至更高的概率持续亏钱下去,千万不要侥幸。本来想加上投注历史总额限制,但是需要消耗不少内存,所以放弃了。希望大家能够自我控制住,不要沉迷这种低级游戏,也希望帮大家看清楚菠菜游戏的本质,毕竟亏1000个EOSForce也才100块钱,比亏1000个EOS后才醒悟过来好多了吧。
这里有一篇在EOSBet上输了11万EOS的玩家的哭诉,希望大家引以为戒,小玩怡情即可。