首页 > 专栏 > 正文

尝试导航不同的 Lightning 实施可能是一个挑战。尽管最初有三个实现:c-lightning、eclair 和 lnd,但随着 ptarmigan、rust-lightning 和 Electrum 的加入,越来越多的产品一直在不断涌现。

通常,开发人员和有抱负的开发人员似乎会根据特定实现所用的语言选择使用它或为其做出贡献。熟悉 Scala?选择泡芙。对 Rust 的潜力感到兴奋吗?选择防锈闪电。但是,还有其他关键考虑因素,例如不同实现的目标、设计理念、用例和权衡。此外,仅仅因为实现是用某种语言编写的,并不一定意味着您必须使用该语言编写代码才能为围绕该实现的生态系统做出贡献。

Lightning 插件的未来

在 Breaking Bitcoin 2019 和这篇比特币杂志文章中探讨了 lnd 和 Rust-lightning 实现之间的新对比。虽然 lnd 寻求减轻开发人员的负担并提供开箱即用的最终功能,但 Rust-lightning 寻求提供最大的灵活性,鼓励开发人员携带自己的组件并将其插入。

相比之下,c-lightning 提供了第三种方式。它维护着一个健壮且安全的核心,旨在不被开发人员调整或替换。通过使用可由开发人员使用各种语言(例如 Python 或 Go)编写的插件,可以获得灵活性和附加功能。目标是让 c-lightning 生态系统成为试验新前沿功能的测试平台,以前是 lnd 和 eclair 等其他实现的领域,而不会牺牲核心的性能和健壮性。

插件是由主 Lightningd 守护进程启动的子进程。他们与闪电合作。任何超出需求的插件都不需要运行。某些插件确实需要将某些钩子引入到闪电网络中,以通知插件有关内部事件和/或改变闪电网络的行为。

第一个 C-LIGHTNING 插件

Blockstream 有一系列Medium 博客文章来展示一些由 c-lightning 团队编写的首批插件。其中包括“Summary”插件,它提供了节点状态的摘要,包括链上的聪(satoshis)、法币的数量、对等点的数量、通道的数量、它们的平衡程度等。

“Probe”插件确定是否存在向网络中某个节点进行支付的路由,返回所需的费用水平并指示哪些渠道正在阻止成功支付。这可用于为未来的付款准备基础或仅用于探索网络的拓扑结构。

“Prometheus”插件收集有关节点性能的数据以提供可视化和警报。使用所有这些插件,您可以选择通过添加功能或从头构建自己的功能来为插件做出贡献。

社区插件

在撰写本文时,总共有 16 个“社区策划”插件可用于 c-lightning。其中包括从 Rene Pickhardt 构建的库移植的自动驾驶仪插件。自动驾驶仪代表用户决定向哪些节点打开通道。用户需要告诉自动驾驶仪自己控制的资金百分比、要开通的通道数量和最小通道大小。当远程方打开和关闭通道时,自动驾驶仪还需要通过闪电通知。构建有效的自动驾驶仪具有挑战性,因为用户偏好(例如最大化成功支付的可能性)可能与网络健康(例如去中心化程度)发生冲突。

还有一个重新平衡插件,它在用户的渠道之间移动流动性,以确保有足够的流入和流出流动性;以及一个无发票付款插件,它允许用户在没有收到发票的情况下进行付款。运行 c-lightning 时,您可以选择打开或关闭这些插件的任意组合。

正如 Lisa Neigut ( @niftynei ) 在她的推特风暴中所说的那样,c-lightning 并没有像 lnd 那样为第三方应用程序开发人员提供“一个标准化的 HTTP 可访问接口,也没有一个身份验证方案”。但是社区构建的插件提供了为其他实现中存在的 c-lightning 构建等价物的机会。

Kristaps Kaupe已经启动了一个 GitHub 存储库,用于模拟一些 lnd 命令的插件。其他值得强调的插件作者是Richard Bondi,他用 Go 编写了一系列插件,包括一个禁止同行的插件;fiatjaf,他编写了一个实现LN URL的插件来帮助付款人与收款人交互;和Conor Scott,他用 Python 编写了许多插件,包括一个用于创建具有顶级容量节点的通道的插件。最后,贾斯汀·穆恩( Justin Moon ) 构建了一个概念验证插件,用硬件钱包为闪电通道提供资金。

插件的挑战

虽然这种插件架构似乎提供了两全其美的优势,但它确实存在一些挑战和潜在的缺点。目前尚不清楚 Rust-Lightning 的最终灵活性是否意味着它更适合寻求将 Lightning 集成到现有代码库的现有比特币钱包。

此外,随着社区插件数量的增加以及依赖这些插件的比特币价值的增加,安全性和管理将变得至关重要。插件之间不可避免地会有重复和重叠。

管理具有挑战性,因为它有效地推荐(非正式地,警告 emptor)哪些插件应该使用,哪些不应该使用。如果没有管理,用户和开发人员就不可能在不检查所有竞争插件的情况下快速入门。有人认为某些语言(和某些开发人员!)更适合编写安全关键软件。但是,特别危险的 JSON-RPC 方法只能通过开发人员选项安装,并且仅用于在 c-lightning 团队的帮助下进行测试和调试。还提供了有关插件开发人员在利用可以更改 c-lightning 的默认行为的特定钩子时可能招致的危险的指南。

这种方法并不是为开发人员创建一个完全无需许可的环境,因为未来的一些插件仍然需要 c-lightning 团队将额外的钩子合并到 c-lightning 代码库中。例如,在撰写本文时,正在讨论促进瞭望塔插件的钩子。由于安全问题或实现细节,某些钩子可能不会被合并。

运行不同插件集的 c-lightning 节点的实例是否会导致 c-lightning 节点或其他实现之间的兼容性问题还有待观察。假设 c-lightning 节点都运行相同的版本,确保不同实现之间的兼容性已经具有挑战性。然而,实验很重要,在最终确定闪电协议的 BOLT 规范时,从实验中获得的经验将证明是无价的。

伦敦比特币开发者

以多种不同语言构建和使用新插件的机会正在吸引开发人员在 c-lightning 之上进行构建。Antoine Poinsot ( @darosior )于 2020 年 3 月来到伦敦出席伦敦比特币开发者聚会。 Poinsot 正在开发一个名为 Reckless的插件管理器,它将为用户提供一系列插件并动态启动所选插件。他还构建了一个 RPC 命令挂钩,它允许插件接管任何 RPC 命令并对其进行更改。这可能是鲁莽和实验性的,因为 RPC 命令是用户与 Lightningd 交互的方式。如果 RPC 命令可以被接受、拒绝或更改,它会打开许多用例 但也有可能让用户失去资金。

这个 RPC 命令钩子构成了 Rusty Russell 最近在在线Boltathon 2 上的演示的基础。从蹦床路由到HODL 发票,仍有大量插件可以构建,Christian Decker预计“已经有一个插件可以做到这一点”成为一个模因。在这种情况下,Decker 和 c-lightning 社区可能只是为了策划这个新兴的插件丛林。

猜你喜欢
发表评论

电子邮件地址不会被公开。 必填项已用*标注

评论信息