20 如何实现一个类似于猜数字的游戏

A、B玩家选择两个选项的值(例如,选项可能是{0,1},{'a',b'},{True,False},等等)。如果两个玩家选择相同的值,则第一个玩家获胜;如果玩家选择不同的值,则第二个玩家获胜。
因为链上的数据都是透明的,A玩家猜了之后,B通过看合约源码之类,总能解析出A的输入。如何解决呢

请先 登录 后评论

最佳答案 2021-10-14 10:33

你这个场景通常使用 区块链随机数 - 承诺模式 , 在玩家提交选项的时候, 不是直接提交结果,而是提交结果的加密信息(提交一个承诺),通过这种加密信息的方式,来保证无法猜测提交结果。

待所有玩家都参与之后(或者开奖后),玩家再次提交结果与加密信息,在链上验证提交结果与加密信息的一致性,再根据结果发奖励。

请先 登录 后评论

其它 1 个回答

lilianwen - 软件开发工程师

上面tiny熊提出的方案大体是可行的,但是我觉得还不够。例如,A和B两个玩家玩猜单双,猜测的内容总共只有单和双这两种结果。这无论是用什么加密算法都可以被破解,简单穷举一下就破解了。可以在单和双只有这两种结果的基础上新增盐值来增强解密难度。

例如,可以设计这样一种协议,提交的数据总长度是32个字节,其中第一个字节是真实的玩家猜测结果(例如用0x01代表单,用0x02代表双),后面31个字节是随机值。

提交到链上的数据是对这32字节做sha256哈希算法的结果。

这样因为加入了数据空间足够大的盐值,目前基本上可以认为无法猜测出玩家提交的具体数据。

请先 登录 后评论
  • 2 关注
  • 0 收藏,3515 浏览
  • i am duck 提出于 2021-10-13 14:09