假设存在两个这样的支付转移请求:A通过A->B->C->R将1个msat转移到R,S通过S->B->C->R将5个msat转移到R。让两个htlc同时跨两条路径形成,并让两个支付使用相同的支付哈希,例如H。现在,B-C和CR频道有两个HTLC使用相同的支付哈希。如中所述https://github.com/lightningnetwork/lightning-rfc/blob/master/04-onion-routing.md#failure-消息声明“中间跳不能,但最后一个节点:如果支付哈希已经支付:可能会将支付哈希视为未知,或者可能会成功接受HTLC,“如果R同时接收到两个HTLC请求,R似乎可以释放H的前映像并结算两个支付。然而,是这样的,R将解决一个付款和失败的另一个,以不鼓励哈希的重用?
lightning网络守护程序
闪电路由
小额支付渠道
哈希锁时合约
闪电rfc
分享
改进这个问题
跟随
6月7日4点36分问
Subhra Mazumdar公司
18355青铜徽章
添加评论
1个答案
0
一旦他们发布了前映像,R就不能支付失败。在R发布前映像之前约定的承诺事务包含一个条件,其中payment\u散列嵌入到脚本中。通过提供作为本脚本见证人一部分的前图像,各方可以在不与另一方合作的情况下要求支付应付给他们的款项。
如果C将付款从B转到R,C将在B与R协商其承诺交易之前,与B商定其承诺交易,依此类推。
承诺交易只有在相关HTLC已被移除的新状态下达成一致时才失效,除非收到相应的前照或将HTLC由其转发付款的一方移除,否则任何一方都不会同意。
R不需要尝试并使事务无效以不鼓励重用payment\u散列,因为R首先创建payment\u散列。如果他使用一个合适的DPRNG,两次付款的机会相撞是难以想象的小。
中间节点不需要跟踪先前使用过的预映像,期望它们跟踪是不合理的。大多数情况下,他们只会转发付款,因为这样做不会造成任何损失——在中间方承诺转发付款之前,向他们汇款的一方承诺向资金付款。
跟踪先前使用的前映像的节点如果看到重用的前映像,可能会窃取资金。他们可以利用他们对前映像的了解来删除HTLC并从发送者那里接收钱,但不能将任何东西转发到路径中的其余节点。
如果像B或C这样的节点确实跟踪以前的前映像,并且R使用相同的payment\u散列进行第二次支付失败,那么B或C可以决定不将此失败转发给资金的发送方,而是通过履行HTLC或广播与发送方商定的承诺交易来索赔资金。
分享