在Raiden协议的当前实现中,当支付路由在某些传输后失败时,已经生成的散列时间锁将留在那里直到过期为止。这消耗了相当一段时间的信道容量。(这种情况不会改变是否发送RefundTransfer消息。)
我认为可以立即释放信道容量(例如,在通道状态的另一侧添加已删除的锁哈希)。现在的设计背后有什么原因吗?
发布于 2019-09-04 12:42:26
这是两件事的结果:
考虑以下拓扑:
- C -
A - B E
- D -如果信道C-E没有足够的容量,则返回的结果路由将是A->B->C->B->D->E。
知道了这一点,假设C和D实际上是由攻击者控制的。如果来自C->B的消息不是传输,那么攻击者就可以向B撒谎,说通道C-E上没有容量,并使用D学到的秘密解锁在链上。为了保护B不受此影响,消息C->B必须是一种传输,这可以保证如果B->C发生,而不是C->B也会发生,从而有效地消除攻击。
下面是一个解决这个问题的建议:https://github.com/raiden-network/raiden-contracts/issues/1216。实际上,这一建议将使refund成为两个参与者的共同价值。
https://ethereum.stackexchange.com/questions/74610
复制相似问题