假设LND节点A想要向另一个节点D发送支付。基于Dijkstra的pathfind算法找到了一条通过B和C的路径并发起支付。它失败了,因为B->C没有足够的平衡/带宽。
LND会不会只是付款失败,或者换个时间用不同的路线?它如何记住失败的路线?
后续问题:节点A能否找出哪个边失败了?
编辑:更清楚的是,在我的例子中,所有的频道都有0.5BTC作为容量,并且所有频道都有这个容量的均衡分布(0.25,0.25),除了B->C有(0,0.5),所以B目前不能向C发送任何付款。
平衡状态(这里:(0,0.5))是私有的,但是所有通道的容量都是公共的。
由于路由计算是在一个(源路由)中完成的,因此该算法最初不知道余额。如果A只想发送0.001BTC,路由算法会找到路由,但无法到达目标。
雷电网
lightning网络守护程序
闪电路由
分享
改进这个问题
跟随
编辑时间:10月27日15:00
10月18日15:42问
什么
18355青铜徽章
添加评论
2个答案
0
所以我继续看LND的实现:https://github.com/lightningnetwork/lnd/blob/master/routing/pathfind.go 这是函数findPath上面的注释块:
findPath尝试在ChannelGraph中找到从源节点到能够支持amt值支付的目标节点的路径。当前实现的方法是Dijkstra算法的改进版本,用于在源节点和目的节点之间寻找单个最短路径。用于边的距离度量与沿特定边的时间锁定+费用成本有关。如果找到路径,此函数将返回ChannelHop结构的片段,该片段对从目标到源的所选路径进行编码。搜索从目标节点向后执行到源节点。这是为了正确地累积路径上需要支付的费用,并根据可用带宽准确地检查每个节点的转发量。
如果是这样的话,我不认为你的设想会成功。LND似乎不会返回路径A–>B–>C–>D,因为它没有足够的平衡/带宽。
分享
改进这个答案
跟随
是的,这是findPath的一般目标,但只要没有设置带宽提示,它就没有“可用带宽”。带宽提示通常仅为A的传出通道设置。我还扩展了我的问题描述。如果它实际上设置了e的带宽提示。g。失败的路线,这正是我感兴趣的wtho 19年10月27日15:04
渠道中余额的分配不是公开信息,因此lnd在试图通过渠道传送付款之前,不知道资金都在B->C中的C侧。–墨奇♦ 19年10月27日17:25
添加评论
0
事实上,在LND中寻找路径可以描述为在加权图上找到“最短路径”的过程。在LND中,每个信道的权重由收费、CLTV三角和概率三部分组成。如果您熟悉Lightning Network,您将了解前两个因素,最后一个因素是该通道从本地角度支付费用的可能性。
如果路由失败,则容量不足的节点将主动将此信息包含在返回消息中,只有支付方才能解锁和查看。例如,然后支付方将降低本地视图中此通道的概率,然后再次查找路由(您可以将此边的权重设置为非常大)。
您可以在这里找到详细信息。
分享
改进这个答案
跟随
于20年12月26日7:35编辑