首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有什么办法来对付脱轨游戏中的停顿吗?

有什么办法来对付脱轨游戏中的停顿吗?
EN

Ethereum用户
提问于 2019-09-07 22:12:05
回答 2查看 254关注 0票数 2

假设我想用区块链来下棋赚钱。因此,我可以在区块链上注册一个智能合同(一种国际象棋游戏),与一定数量的以太相关。如果有人想加入,他或她必须下注同样数量的乙醚。谁赢了,谁就赢了。

我们可以执行这个聪明的合同运行链上。因此,对于每一个移动,玩家将不得不登记他的决定在区块链。这种方法将是昂贵的,因为球员必须为他们所做的每一个决定支付交易费。这将是缓慢的,因为游戏的速度将被限制在区块链本身的速度。

为了避免这些问题,我们可以实施这个聪明的合同,以脱钩。除了游戏本身和以太之外,合同还将包含建立通信的地址(忘记安全问题)。

第一个玩游戏的人会用他的私人钥匙签署他的决定(哪个棋子和它的新位置),然后把它送给另一个玩家(而不是区块链)。第二个玩家会用他的私钥签署一个“块”,其中包含他自己的决定,另一个决定和其他签名,然后发送给第一个玩家,等等……

这一过程将持续到游戏结束。然后,任何玩家都可以在区块链上注册最后的区块(包含所有签署的决定)。合同本身可以验证决定的正确性和有效性(在这种情况下,是移动),并将所有的可能性转移到胜利者身上。

问题是:如何处理中止?

如果一个最坏的球员做了一个糟糕的举动,他不会后悔(在发送给另一个球员之后),因为他的决定已经签了,但是他可以永远“什么都不做”。所以,他只会忽略对方的下一个决定,所有的乙醚都会被两名球员永远封杀。为了避免这种情况,我们可以实现超时。

如果合同有超时,另一个问题出现了:一个玩家(让我们称之为A)可以试图“欺骗”区块链,假装另一个玩家放弃了,拒绝接受对方的决定。我们可以通过允许其他玩家(让我们称之为B)自己直接在区块链上注册他的决定来解决这个问题,即使这不是轮到他上场的时候。这样,合同就可以知道球员B是活跃的。

我相信,这样的话,两位球员都会有诚实踢球的动机。

如果玩家A不想(或不能)继续玩下去,B可以将不完整的游戏发送到区块链,在超时后,如果A不发布任何有效的决定,合同将给出A放弃的消息,并将所有的乙醚转移到B。

如果玩家A认为他没有获胜的机会,他将不得不发送一个决定无论如何,否则玩家B将注册在区块链不完整的游戏,时间将开始计数,除非A发布一个有效的决定。

正如你所看到的,我刚刚提出了一个解决方案。我这么做是因为我甚至不知道如何恰当地描述这个问题。

那么,现在(我希望)问题已经清楚了,这个解决方案有效吗?如果没有,还有其他的吗?哪一个?

我以国际象棋为例,但它可以是围棋,跳棋,哈希,扑克,或任何其他的决定游戏。

EN

回答 2

Ethereum用户

发布于 2019-09-07 23:18:40

您已经描述了国家频道:什么是状态通道和用例/代码示例?

它们是一些区块链游戏和一些第二层扩展解决方案的基础,如Raiden或比特币闪电网络。

票数 3
EN

Ethereum用户

发布于 2019-09-08 01:33:47

我写了一些博客文章,这些文章建立了一个完整的状态通道解决方案:

具体而言,第二篇文章的“链上回退”部分与您关于超时的问题相关:

...if玩家的对手已经停止了移动,玩家需要调用startTimeout().作为对超时的响应,轮到它的球员必须通过调用move()来移动。这会重置计时器,让游戏继续进行。然后,玩家可以恢复交换签名消息的典型工作流程,或者继续在链上移动。

我相信这正是你所描述的,所以是的,我相信你的解决方案应该有效。

票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/74750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档