收藏本页
返回顶部

币海首页> 要闻资讯 > 文章

FunFair:状态通道合约的参考实现(一)

来源:以太坊爱好者    Aries 2019-11-08 16:56 星期五 1,021
币海网微博
微信扫一扫

以下三点会导致通道参与者遭到惩罚。

超时

如果对手方没有在合理的时间范围内对争议作出响应,发起方(实际上可以是任何人)可以在状态通道上宣告超时。参与者必须要能够在自己的状态通道上做出响应——我们称之为 “保持在线”。该调用本身是非常简单的:

这里,我们只需验证响应时间是否过长 ,并根据发起争议时所用状态的余额来关闭这条通道,然后惩罚未响应的对手方,并将通道关闭。我们确实需要输入状态本身,因为链上只存储了该状态的哈希,而且还是未经验证过的哈希。

使用后续状态发起挑战

状态通道上有一个概念叫作即时确定性——指的是一旦某个状态经过了参与双方的签署,就无法再更改了——无需像在传统区块链上那样等待区块得到确认。

最近屡上热搜的「区块链」,到底有哪些实际应用?

这就意味着回滚到某个状态是违反协议的。假设你处于状态 #10 ,然后对状态 #5 发起争议(可能你处于一个更好的位置), 该操作是不被允许的,而且一下子就会被验证出来。

争议发起方的对手方只需调用

输入任意一个经过双方联合签署的后续状态,就可以证明争议发起方已违反协议。我们只需验证签名的有效性,核实该状态在这条通道中是有效的,以及该状态的 nonce 大于用来发起争议的状态的 nonce 即可。

如果争议发起方真的违反了协议,我们可以关闭通道,并予以惩罚。要注意的是,这可能对争议发起方尤为不利,因为其对手方可能会选择任意一个由双方联合签署的后续状态来发起挑战——甚至可以在惩罚措施还没有施行之前,找到一个自己处于最佳位置的后续状态。因此,不要对任何一个旧状态提出争议。

使用不同的 action 发起挑战

最后这个有点微妙。如果我签署了一个状态转换,并将它连同 Action A 发送给你,然后再使用另一个状态相同的 Action B 在链上发起争议,那么问题就来了。

因为你很可能已经进行了下一步操作,但是我还没将我的签名发送给你,因此你不能以之作为后续争议的解决基础。这就意味着,我可以看到你接下来的 action ,然后利用链上争议来改变我的操作。

这与随机数发生器的运作方式关联很大(参见下文),而且能够让参与者预先知道随机数发生器的结果。

因此,我们认为签署同一个状态下的多个 action 是违反协议的。如果对手方看到了争议,并意识到有另一个被签署的 action ,就可以调用

这里,除了常规检查之外,我们还会检查该 action 的哈希是否与我们用来发起争议的 action 的哈希不同。我们还需要核实 Action 是有效的(例如,轮到他们进行操作了),而且会实现一个有效的状态转换(例如,资金仍有结余)——我们通过运行状态机来推进状态,看是否会出现报错。我们之前已经有了一个单独的验证 Action 函数,不过这是它剩下的唯一一个用例,因此只测试推进状态会更加清楚。

如果这些测试都通过了,我们会关闭通道并惩罚争议发起方。

未完待续。

点击关注币海启行微信公众号,了解更多。

版权信息
来源:以太坊爱好者
版权:转载
原文链接:https://www.bihai123.com.cn/news/jishuyingyong/68054.html
作者:
编译发布:Aries
声明:
此文为转载内容,不代表币海启行网的观点和立场,仅供参考。

用户评论 (0)

0/140

关注支持

内容合作 / 友情链接

服务与应用

币海公众号
扫一扫,关注币海
币海网

区块链行业资讯链媒[币海资讯官网]

  CopCopright @币海网 · 前海宏创投资(深圳)有限公司 · 版权所有