闪电网络中的流动性广告

本文是 Lisa Neigut 在 TABConf2021 大会上的演讲稿,主要介绍了闪电网络中的“流动性广告(Liquidity Advertisements, Liqudity Ad)”提议,该提议允许节点公开声明愿意为通道提供流动性,并收取一定的费用,其他节点可以通过这些广告找到入账流动性。

作者:Lisa Neigut

来源: https://btctranscripts.com/tabconf/2021/liquidity-advertisements-niftynei-tabconf-2021

本文为 Lisa Neigut 在 TABConf2021 大会上的演讲,由 natan-del-prado 通过 review.btctranscripts.com 转录为文字稿。

引言

我叫 Lisa Neigut 。我在 Blockstream 。我想讲讲一个对闪电网络规范的提议,我们已经在 c-lightning 客户端中实现了它,希望它能进入更多闪电网络客户端、成为标准;它就是 “流动性广告(Liquidity Advertisements,Liqudity Ad)”。

今天,我会讲讲流动性广告是什么、它是怎么工作的;也会介绍数据一般是如何穿过闪电网络的,也许你也会对使用它有兴趣。

什么是 Liqudity Ad ?

那我们就开始吧。什么是 “流动性广告”?概要地说,一条广告让你可以告诉其他节点,如果他们要跟你开设通道,你愿意在通道中放一些钱,并且你希望他们为此付给你一些钱。

那么,我们先来了解以下通道开启的流程,也许这能让你更好地理解流动性广告在此过程中扮演的角色。

假设你是一个闪电节点,就叫你 “Harry” 吧。一般来说,当你要跟其他节点开启一条闪电通道的时候,只有一方会为通道提供资金,比如这张图上的 Harry ,他想跟另一个节点(我们管她叫 “Heart”)创建一条通道,他会拿出自己在链上的资金、放到通道中。这意味着,在通道刚刚建好的时候,Harry 可以通过这条通道向外发送支付,因为他在通道中拥有余额,但却无法从 Heart 这里收到任何支付,因为 Heart 这边根本就没有余额。

但是,如果 Harry 可以跟 Heart 事先协商呢?那么,在 Harry 开启通道的时候,Heart 也可以给通道提供资金。从而,在通道的初始状态中,两端都有资金,从而 Harry 既可以通过这条通道来发送支付,也可以通过它来接收支付。

所以,问题在于,Harry 和 Heart 要协商,对不对?Heart 不知道 Harry 打算要开启一条通道。她也不知道 Harry 希望她在通道中放多少钱。也许有一些办法, Harry 能够联系到 Heart,并请求她在通道中放一些钱,比如电话,或者通过 Telegram 这样的通讯软件来联系她。但这样会涉及更多的协调。你需要找到闪电网络中的 Haert 节点背后的那个人。如果你之前了解过节点在网络中公开的信息,你就知道,通常只有昵称和公钥,所以你想要找到目标节点背后的联系人,是很难的。

相应地,流动性广告,让 Haert 可以公开一条广告,表明她愿意在通道中投入多少流动性。而且她还可以表明自己要求的通道转发费率、她为所投入的资金收取的价格。因此,Harry 就可以知道,Heart 对于在通道中投入流动性,是有兴趣的;以及,她所要求的回报。

所以 Heart 发出了广告。这就是 “广告” 的部分,也是这项技术名字的由来。事实上,不只是 Heart 能发布这样的广告,闪电网络中的每个节点都可以发布这样的广告。所以,现在,关于要从哪里获得入账流动性(收款额度),Harry 有了许多选择。他可以从中找出一个节点,要求对方在创建通道时,向通道注入资金。他也可以跟许多节点都开设通道,让他们都在通道中投入资金。所以,他从通道创建的一刻开始,就可以从所有这些节点收取支付。

所以,可以说,这在一定程度上就是我们想在一个流动性网络中实现的目标。

节点如何发布流动性广告?

再来看看流动性广告是如何再网络中传递的。

在闪电网络中,可不像我们图片中那样,你给自己的节点加一个小标记。计算机不是这样工作的。我们会用到叫做 “Gossip 网络” 的东西。我会快速解释一下 Gossip 网络在闪电网络中的作用。

我们还是回到 Harry。Harry 想让闪电网络中的其他节点知道他。所以他生成这样一条消息。这种消息叫做 “节点宣告”,它包含了关于 Harry 节点的信息。这种信息的格式也由闪电网络规范决定。事实上,如果我能很好地操作这个演示界面,那么在一分钟之内,我就可以让你们看到规范是什么样的。

所以,Harry 创建了一条叫做 “节点宣告” 的消息,然后他把这条消息发给了他当前连接到的所有对等节点。这些节点收到他的消息之后,会作一些简单的验证,以确保这是一条有效的节点宣告消息。Gossip 消息要符合哪些要求,我这里不会展开,只需要知道这些节点确实要作一些简单的验证。在他们验证了消息之后,他们会继续将消息转发给他们所有的对等节点。这样一来,每一个在闪电网络中连接到其他节点的节点,都能收到 Harry 节点的节点宣告消息、知道 Harry 节点。

节点宣告消息包含哪些信息?

那么,节点宣告消息中包含哪些信息?虽然算是题外话,但是可有趣了。放在节点宣告中的一个信息是 “昵称(alias)”,就像你的节点的名字。所以 Harry 也可以管自己的节点叫 “Harry 的节点”。从安全上来说不是最好的习惯。人们会看到这个昵称,然后知道节点的运营者是个叫 “Harry” 的人。然后人们就会说,你叫 Harry ,闪电网络上有个节点叫 “Harry 的节点”,你们是不是有关系?所以,这可不能不是个好名称。不过,你想的没错,这就是为什么你在闪电网络浏览器网站上阅览时,这些节点都各有名字的原因;他们的名字就来自于他们给闪电网络上的其他节点发送的节点宣告消息。

还有什么信息呢?你可以选择一种颜色,这样,当人们制作闪电网络图谱时,你的节点就会被标上一种颜色;这种颜色(一般来说)也是各节点自己选定、放在自己的通道宣告消息中,告诉其他人的。

还有一种信息是网络地址。这也是你可以跟 Harry 开启通道或创建新的网络连接的原因。当前,我们可以列出 IP 地址,也可以使用 Tor 地址。还有一些提议希望加入更多的网络地址类型。也许你可以放置 DNS 或其它网络地址在这里。

没错,节点宣布消息也会列出该节点支持的特性。比如说,我们有这种特殊的 gossip 查询,可以看出,只有一些节点支持它。所以,我们会在节点宣告消息中表明我们支持这种特性。

还有,就是签名。这保证了 Heart 没法假装自己是 Harry 。只有 Harry 可以以自己的名义发送消息,其他人会验证这条消息是 Harry 发出的,因为 Harry 签名了它。所以签名是消息的重要部分。

还有一个时间戳。Harry 可能会想要更新自己的节点宣告消息。这个时间戳可以帮助你搞清楚哪条消息是更新的,并且你可以把以前保留的旧版本消息删掉。

好了。流动性广告的工作原理就是,我们在现有的节点宣告消息的基础上,增加少量的额外信息。所以消息中既有的信息不会减少,只是增加了少量的广告信息。

以下就是流动性广告向既有的节点宣告消息增加的信息。

流动性广告向节点宣告消息增加了什么内容?

我们加入的一个信息是价格。比如说,Heart 准备在节点宣告消息中打流动性广告,那么,她要加入的第一个信息是,比如说,她愿意提供 100 万聪的流动性给其他节点。因为她提供了流动性,跟她开设通道的节点就可以接收支付;她希望能获得回报。那么她要决定的第一个事情,就是她要为这些服务(为通道提供一定数量的流动性)收取多少费用。在流动性广告中,有两种收费方式。Heart 也可以两者都用。第一种是固定费用,比如说,就收 1000 聪。不论你请求 50 万聪还是 100 万聪,你都要付这么多。第二种是比例费用,我们称为 “基础费率”。比如说,如果她只设置了基础费率,那么当你请求 100 万聪,你就要支付 100 万聪乘以一个比率的费用,比如 1% 或者 0.5% 。如果你只请求 50 万聪,那付出的费用就更少,因为她要提供的总流动性更少。所以,这就是我们放到流动性广告种的前两个字段。

下一个东西也有趣,跟开启通道的费用有关。当你要开启一条新的闪电通道时,你需要在链上确认一笔交易。在流动性广告中,Heart 准备为通道投入一些资金。在比特币中,为了给链上交易提供资金,Haert 需要为交易提供一些输入,也就是 Heart 持有的 UTXO 。然而,一旦为交易增加了输入,就会增加交易的重量,并因此增加需要支付的确认手续费。链上确认手续费的原则就是为上链的任何数据付费。因为 Haert 是为了帮 Harry 的忙才为交易提供 UTXO,我们会要求 Harry 来支付这部分确认手续费。但是,Haert 需要在自己的流动性广告中说明她要求对方承担的链上交易字节数量。

这样一来,当 Heart 给开启通道的链上交易注入资金时,将由 Harry 为这部分数据出现在链上而支付手续费。这很棒,对吧?这样 Heart 就不必为了在链上花费这些 UTXO 而付费,Harry 会承担,这样当通道开启的时候,Harry 就会获得入账流动性。这都是出于 Harry 的请求而这样做的。所以,作为他们的协商的一部分,Heart 可以提前说明,对方应该为她给链上交易增加的多少数据字节支付确认手续费。说起来有点复杂,但结果是好的。如果你看过流动性广告,你就知道这部分信息,就是一个以重量为单位的数字。也许我们后面再看一个例子,你就会知道它长什么样。

最后一个东西是一个有趣的细节。当你在闪电通道中拥有余额,而其他人的支付经过了你的通道,你会得到路由手续费,对吧?你能获得支付,是因为你在两条通道中的资金的分布被改变了(在一条通道中,你增加了余额,在另一条通道中,你减少了余额)。Heart 可以先让 Harry 为她所提供的流动性支付费用,然后,又为转发交易收取非常高的费用;那么对 Harry 来说,这就有点不是滋味儿了,对吧?如果 Heart 承诺为通道注入 100 万聪,但对转发交易收取 5% 的手续费,那 Harry 最终可能一无所获,因为无论谁要通过 Heart 给 Harry 支付,都要给 Harry 付很多手续费,那支付者可能根本就不愿意这样做。

所以,作为流动性广告的一部分,Heart 还要作出一种承诺,就是她会对使用这些资金的转发支付收取的手续费最高数额。也就是说,当某人要通过 Heart-Harry 通道给 Harry 支付时,她最多只收这么多手续费;这个值需要在流动性广告中承诺。这意味着,当你浏览所有广告时,你会看到收费的人是谁,以及,她为所提供的资金收取的最高转发费率是多少。她可以收取更低的费率,但需要承诺一个上限。这就让浏览这些广告的人能够心中有数,判断出谁会尝试敲诈给你发送支付的人。这是你可以用来比较不同流动性提供者的信息。

回顾以一下,流动性广告中包含三种信息。第一种是价格,是广告的投放者要求为其所提供的资金支付的价格。第二种是,开启通道的人(要求流动性的人),需要为广告投放者承担多少通道注资交易的链上确认手续费。最后一种是承诺,是广告投放者承诺对使用这些资金的支付收取的最高费率。酷。

还有一些演示,是关于支付转发费用的。当一笔支付转发过来的时候,因为 Heart 向通道提供的资金,所以现在 Harry 可以通过他跟 Heart 的通道来接收支付。也就是说,某人发送的支付会转发过来,交给 Harry 。在这个转发支付的过程种,会有一小部分资金交给 Heart 。所以,在 Heart-Harry 通道中,Heart 将余额推到 Harry 这边(也就是为之转发支付),是有好处的,她从中赚取的那一小部分资金,就是支付转发费用。这也是闪电网络中通道转发费用的工作模式。

回顾

再快速回顾一下。流动性广告是添加到你的节点宣告消息中的额外数据,它声明了你为流动性收取的价格、跟链上手续费相关的信息,以及一份保证书,你绝不会对使用你的流动性的支付收取超过一定数值的手续费。那么,这有什么用呢?

流动性广告是一种去中心化的寻找入账流动性的方式,所以,如果你准备建立一个节点, 并让希望允许一些资金经过你,这是一种非常简单的办法,可以找出谁拥有闲置资金、愿意分配这些资金,以及为这些资金要求多少回报。很容易看出网络中的谁再提供流动性。因为流动性广告是非常轻量的,所以可以在 gossip 网络中传播。因为网络中的每个人都会广播出来,所以你可以浏览、比对。

还有一个项目,叫做 “Ellen Router”,是一个叫做 Severin 的欧洲人做的。他正在为流动性广告增加一个图形界面。这个项目还未发布,但有希望在这个月推出。他增加了一个图形界面,这样,当你在浏览所有流动性广告时,你就能清晰地看出让人们提供流动性要付多少钱。这里有一个滑动块,你可以很快看到我们前面提到的所有信息。

流动性广告还有一个美妙的地方在于,你可以自己着手研究,你可以自己看到网络上提供流动性的都有谁、他们有多少流动性、他们的流动性对你有多大价值,然后决定是否要跟他们开启通道。

最后,很容易让每个人都参与进来。你需要做的只是给你的节点增加一些配置信息,然后就能投放光棱的。如果你正在运行 c-lightning 客户端,或者你想要运行它以便发布流动性广告,屏幕上这个 QR 码背后有一篇文章,告诉了你如何在 c-lightning 中完成设置并发布广告。

而且,我们 c-lightning 最近也开设了一个 Discord 频道,这是我正在运行的项目。如果你想讨论关于流动性广告或者 c-lightning 插件,或者别的东西也好,我们非常欢迎你。

Q & A

好的。看来还有几分钟能够回答问题。我看到有人举起了手。

“PPM” 指的是什么?

PPM 是 “百万分率(parts per million)”。它是基础费率的单位,就像百分比一样,决定了你要为使用一条通道的每 100 万 微聪 支付多少手续费。1 PPM 就意味着你要为 100 万微聪(millisatoshi)支付 1 微聪。所以基本上,它跟百分比是一个意思,只是更加细致一些。这个单位会用在转发费的计算中。

Heart 所承诺的手续费率可以是一个区间吗?

现在不行。现在,你只是设定一个费率。还有一个对节点宣告信息更新频率的限制。每 5 分钟只能更新一次。这是在规范里定好的。c-lightning 也不会让你违反这一点。如你所说,如果你更新了它,那么它会在到达 5 分钟间隔之后发布。

我想我的演讲时间用完了,但请容我再说几句,关于 Gossip 网络,除了节点宣告消息,还有其它类型的消息,这也是你更新自己的通道转发费的方式。即使你每 5 分钟更新一次,人们也可能在一个小时之后才会看到变更,这跟他们在网络中的位置有关。

希望各位喜欢我的演讲。如果你想了解更多关于通道租借和流动性的事情,今天下午我跟 Ryan Gentry 还有一场苏格拉底会议。那时候我应该会说更多。谢谢。

(完)

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
BTCStudy
BTCStudy
https://www.btcstudy.org/