如何实现一个去中心化方案来为用户发点牌?

如何实现一个去中心化方案来为用户发点牌?

· json · rss
Subscribe:

About

这个方案我已经差不多完成了,但还有几个瑕疵。

首先我们引入一个协议叫做多方随机数协议,通过这个协议可以生成多方确认的共同随机数。

我们使用最简化的多方随机数模型作为演示,每一个用户提交nouce的hash值给对方,然后在所有人(实际中为满足需求的人数)均提交了hash(nouce)后,将nouce再公开,对nouce进行拼接运算既可以得到一个共同确认的hash值。


第零步,所有人预付押金。---防止作弊和反复抽牌至好牌再开始游戏。

第一步,所有人预置13张牌(1-10JQK)--满足公平性

第二步,大家自行洗牌,会改变这个数组的排列顺序,同时公开排列顺序的hash值。

第三步,每一个人与其他人建立安全通道沟通。

第四步,每一个人均与其他3个人完成3次换牌协议。

其中,换牌协议为双方生成的随机数,然后映射到换牌,生成一个13bits的字符串,当字符位为1的时候,意味着需要换牌,然后双方通过安全信道将自己的牌和对应编号发出去。

第五步,在第三步确认开始后等待60s,大家提交换牌协议中自己使用的随机数的hash值和接受到的随机数hash值提交。防止作弊者。如果有人这个时候还未完成三次交换协议,我们认为它需要作弊,而没收它的押金。

发牌协议至此结束。


在我一开始的模型中,没有60s这个限制,将自行交换,满足条件即结束,但结束的最后两个人它们的换牌协议会泄露一定的信息。

如果设置为无限次自由交换的话,将会出现富集者效应,抽中好牌的人倾向于不在与他人进行交换。

通过在一个统一时间内结束,使得它们无法知道自己是不是最后一轮交换,来保证信息的安全性。

在最后开始游戏之前,统一提交数据,可以防止作弊者尝试纂改手中的牌,因为复盘的时候可以计算出来他手中应有的牌。如果他同样纂改自己的随机数hash,在除最后一轮之外的改变,会放大至影响3个人,使得被发现。

当他没有能力窃取到对方手中的牌的数据的时候,需要自己预测对方的牌,并伪装假对方hash来使得自己强行与其换牌具有很高的风险,而如果明确知道对方手中的牌的话,我们可以认为A和B是一伙的,出现了女巫攻击问题,则不需要伪造假hash,可以自由构造自己需要的换牌计划。(因为出现不在对方中的牌的话,显然是恶意纂改)


瑕疵还有两点:

1.仅满足了公平性(4个等价玩家),但随机性不够,例如当4个人均不执行初始洗牌,后续换牌将不会改变手中的牌,但问题难度不高,可以通过增大熵源,来实现。

2.不能预防女巫攻击,因为这很显然当一个人同时操纵3个账户的时候,则另外一个的人胜利期望极大将降低。通过押金的方法可以一定程度缓解,但不能真正改变,不过在已有的伪区块链游戏中同样有着相应的问题。