尝试浏览不同的Lightning实现可能是一个挑战。尽管最初有3种实现方式:c-lightning,eclair和lnd,但随着雷鸟,防锈闪电和Electrum的出现,更多的东西一直无休止地从木制品中脱颖而出。.
通常,似乎开发人员和有抱负的开发人员都基于其所编写的语言选择使用特定的实现或为该实现做出贡献。熟悉Scala吗?选择泡芙。对Rust的潜力感到兴奋吗?选择防锈闪电。但是,还有其他关键考虑因素,例如目标,设计理念,用例和不同实现的权衡取舍。此外,仅因为实施是用某种语言编写的,并不一定意味着您需要使用该语言进行编码才能为该实施周围的生态系统做出贡献.
在Breaking Bitcoin 2019和《比特币杂志》的这篇文章中的一个小组中探讨了lnd和防锈实现之间新出现的对比。尽管Lnd试图减轻开发人员的负担并提供现成的终极功能,但是rust-lightning试图为最终开发者提供最大的灵活性,鼓励他们自带组件并将其插入.
相比之下,c闪电提供了第三种方式。它维护了一个健壮和安全的内核,该内核设计为不被开发人员调整或替换。通过使用可由开发人员以各种语言(例如Python或Go)编写的插件,可以提供灵活性和附加功能。目的是使c-lightning生态系统成为试验新前沿功能的试验台,而这些试验是以前其他实现方式(例如lnd和eclair)的地形,而又不牺牲核心的性能和鲁棒性.
插件是由主lightningd守护程序启动的子进程。他们与lightningd合作。任何超出要求的插件都不需要运行。有些插件确实需要将某些钩子引入lightningd中,这些钩子将通知插件有关内部事件和/或更改lightningd的行为。.
第一个C-Lightning插件
区块流有一个 系列 中的博客文章,展示了c-lightning团队编写的一些首批插件。这些包括“摘要”插件,该插件提供节点状态的摘要,包括satoshis onchain,按法定金额表示的金额,对等点数,通道数,平衡程度等。.
“ Probe”插件确定是否存在向网络中某个节点进行付款的途径,返回所需的费用水平,并指示哪些渠道阻止成功付款。这可用于准备将来的付款基础,或仅用于探索网络拓扑.
“ Prometheus”插件收集有关节点性能的数据,以提供可视化和警报。使用所有这些插件,您可以选择通过添加功能或从头开始构建自己的插件来为插件做出贡献.
社区插件
在撰写本文时,总共有16个用于c-lightning的“社区管理”插件。这些包括 自动驾驶插件 从Rene Pickhardt构建的库中移植。自动驾驶仪代表用户决定与哪些节点打开通道。用户需要告诉自动驾驶仪他们所控制的资金百分比,要打开的通道数量以及最小通道大小。当远程方打开和关闭通道时,也需要通过lightningd通知自动驾驶仪。建立有效的自动驾驶仪具有挑战性,因为用户偏好(例如最大程度地提高了成功付款的可能性)可能会与网络运行状况(例如分散级别)发生冲突.
还有一个 重新平衡插件, 从而在用户渠道之间移动流动性,以确保有足够的流入和流出流动性;和 无发票付款插件, 这样一来,用户无需先收到发票即可付款。运行c-lightning时,您可以选择打开或关闭这些插件的任意组合.
饰演Lisa Neigut(@niftynei)在她说 暴风雨, c-lightning不会像lnd一样为第三方应用程序开发人员提供“现成的标准化HTTP可访问接口或身份验证方案”。但是社区构建的插件提供了构建其他实现中存在的c-lighting等效项的机会。.
克里斯塔普斯·考普(Kristaps Kaupe) 已经启动了GitHub 回购 用于模拟一些lnd命令的插件。其他值得强调的插件作者是 理查德·邦迪(Richard Bondi), 他在Go中编写了一系列插件,其中包括禁止同行使用的插件; 菲亚特, 谁编写了实现插件 LN URL 帮助付款人与收款人互动;和 科纳·斯科特(Conor Scott), 他用Python编写了许多插件,其中包括一个用于创建具有最大容量节点的通道的插件。最后, 贾斯汀·穆恩(Justin Moon) 建立了一个概念验证插件,用于使用硬件钱包为Lightning频道提供资金.
插件的挑战
尽管此插件体系结构似乎提供了两全其美的优势,但确实带来了一些挑战和潜在的弊端。目前尚不清楚锈闪电的最终灵活性是否意味着它更适合于寻求将闪电整合到其现有代码库中的现有比特币钱包.
此外,随着社区插件数量的增加以及依赖这些插件的比特币价值的增加,安全性和管理性将变得至关重要。插件之间不可避免地会有重复和重叠.
整理是一项具有挑战性的工作,因为它可以有效地建议(非正式地,警告购买者)建议使用哪些插件,哪些不该使用。没有策展,用户和开发人员就不可能在不检查所有竞争插件的情况下快速上手。有一种观点认为,某些语言(和一些开发人员!)更适合于编写对安全性要求很高的软件。但是,特别危险的JSON-RPC方法只能与developer选项一起安装,并且只能在c-lightning团队的帮助下进行测试和调试。对于利用特定钩子可以改变c-lightning默认行为的插件开发人员可能带来的危险,也提供了一些指导。.
这种方法并非为开发人员创造了一个完美的无许可环境,因为某些将来的插件仍然需要c-lightning团队将附加的钩子合并到c-lightning代码库中。例如,一个用于监视watch望塔插件的钩子已插入 讨论 在撰写本文时。由于安全问题或实施细节,某些挂钩可能无法合并.
运行不同插件集的c-lightning节点的实例是否会导致c-lightning节点之间或与其他实现的兼容性问题还有待观察。假设c-lightning节点都运行相同的发行版,确保不同实现之间的兼容性已经具有挑战性。实验很重要,但是,在最终确定闪电协议的BOLT规范时,从该实验中获得的教训将被证明是无价的.
伦敦比特币开发
使用多种不同语言来构建和试用新插件的机会正在吸引开发人员在c-lightning之上进行构建。安托万·庞索(Antoine Poinsot(@darosior)来到伦敦出席 伦敦比特币开发 2020年3月的聚会。 插件管理器 称为Reckless,它将为用户提供一系列插件,并动态启动所选插件。他还构建了一个RPC命令挂钩,该插件允许插件接管任何RPC命令并进行更改。由于RPC命令是用户与lightningd交互的方式,因此这可能是鲁ck的并且是实验性的。如果可以接受,拒绝或更改RPC命令,则会打开许多 用例 但也有可能使用户损失资金.
这个RPC命令钩子是Rusty Russell在线上最新演讲的基础 螺栓马拉松2. 仍有大量的插件可以从中构建 蹦床路线 到 HODL发票, 和克里斯蒂安·德克尔 期望 “已经有一个插件可以做到这一点”成为模因。在这种情况下,Decker和c-lightning社区可能只是削减了工作量,策划了这个新兴的插件丛林.
感谢Antoine Poinsot和Christian Decker对本文的贡献.