c-lightning 0.7版本正式上线,包含更多插件
Lightning Network

c-lightning 0.7版本正式上线,包含更多插件

Christian Decker, Rusty Russell

Blockstream的c-lightning团队很高兴宣布c-lightning v0.7版本正式上线。这是距上一次重大版本上线八个月后有一次重要的发布,凝集了来自世界各地50位贡献者的心血,一共提交了1,300次代码。本次发布的新版本包含了一系列性能提升以及bug修复,同时还引入了令人激动的新功能。

新功能

  • 插件:这是0.7版本的旗舰功能,插件允许开发人员使用他们自己用任何语言编写的应用程序来扩展闪电网络。插件将进一步帮助我们为闪电网络制定最灵活、可扩展和可定制规范。插件使我们能够专注于核心功能,同时使用户和开发人员能够添加自己的功能,将c-lightning集成到他们的环境中。
  • Routeboost现已安装,使得用户能够通过在发票上添加详细信息来在非公共通道发送和接收付款。这对于不宣布其频道的节点非常重要,允许它们将其保密。
  • 改进资金管理:更好地控制哪些币用于资助通道和从节点上提现,有助于避免未经证实的交易中的一些陷阱。
  • option_data_loss_protect现在是默认启用,提高用户自己的数据库以及同伴数据库的安全性,避免数据丢失。
  • 可重复生产的构建:通过一些设置,用户可以创建自己的Ubuntu二进制文件,并检查它们是否与我们提供的二进制文件相同。
  • 更好的文档记录:如果没有详细的文档记录,功能再好也没用。出于这个原因,我们已经修改了我们的文档记录方式,这些文档现在在lightning.readthedocs.io中自动生成。
  • 以及一如既往的:性能提升!性能提升!性能提升!

插件带来的可扩展性及可定制性

虽然可扩展性和可定制性,以及性能和安全性始终是我们的主要目标,但到目前为止,用户必须编写完全成熟的守护进程才能添加简单的功能或进行很小的更改。插件则完全改变了这个局面。插件是十分简单的程序,用任何语言编写,由c-lightning管理。这对应于边车模型,其中相关联的过程与其正在与之交互的另一个过程同时运行。 此外,我们通过插件API公开了许多扩展点:

  • 命令行选项passthrough允许插件注册通过lightningd公开的自己的命令行选项,从而只需要配置主进程。
  • JSON-RPC命令passthrough为插件提供了一种将自己的命令添加到JSON-RPC接口的方法。
  • 事件通知为插件提供有关lightningd事件的基于推送的通知机制。
  • Hooks是一种原语,允许插件接收关于lightningd中的内部事件的通知,并更改其行为或注入自定义行为。

从JSON-RPC和选项passthrough提供与守护进程和任何插件的单点交互,到通知和hooks实现实时交互甚至修改节点的行为,这些扩展点使得与核心守护进程的集成比以前更加紧密。

与现有的扩展c-lightning的方法相比,插件入门的要求也远低于以往。如果你曾经从stdin编写过,写入过stdout并处理过JSON编码数据,那么你就已经拥有构建插件所需的所有技能。此外,我们和社区已经创建了许多库,以便于使用CPythonGolangJava编写插件。

以下是一个Python插件示例,展示了JSON-RPC passthrough、option passthrough和用于将消息记录到c-lightning的通知:

from lightning import Plugin
plugin = Plugin(autopatch=True)

@plugin.method("hello")
def hello(plugin, name="world"):
    greeting = plugin.get_option('greeting')
    s = '{} {}'.format(greeting, name)
    plugin.log(s)
    return s

@plugin.init()
def init(options, configuration, plugin):
    plugin.log("Plugin helloworld.py initialized")

plugin.add_option('greeting', 'Hello',
                  'The greeting I should use.')
plugin.run()


插件系统与JSON-RPC接口是我们交互界面中最棒的功能,并且我们还在不断扩展其在暴露信息和与c-lightning核心交互方面的功能。

新模块化

插件不仅允许用户扩展和定制c-lightning,还使得c-lightning开发人员能够更好地模块化c-lightning。在过去的几周里,我们将一些曾经硬编码到c-lightning中的功能移植到插件中。 将此功能移动到插件中有两个主要目的:

  1. 通过明确说明可以访问哪些信息以及可以执行哪些操作,实现了更大的关注分离。
  2. 如果默认插件不符合用户的要求,我们允许用户简单地用自己的安装来替换插件。

通过自己使用插件,我们还确保插件得到最优质的开发,不断提升他们的表现力以及他们与核心守护进程交互的方式。

例如,我们已将与支付发票相关的一些代码迁移到支付插件中。支付插件的主要目的是接收发票,然后根据发票中的信息执行付款。虽然这听起来很简单,但单笔付款可能会导致从发票中提取额外信息的过程相当漫长,例如路线提示和即将上线的多部分付款。 根据该信息,插件会生成许多路线,尝试在每条路线上付款,并在路线不可用时进行重试。将此功能迁移到插件,将使得我们能够在插件端和核心守护程序上编写更简单的代码。如果用户有更好的支付解决方案,例如用户收到关于网络状态的额外信息,则插件将允许用户用他们自己的替换它,而无需我们将之安装进c-lightning本身。

尽管插件系统最近才完成,但许多开发者已经开始设计和编写一些创新的插件,进一步扩展c-lightning的功能,包括自动驾驶仪、网络探测器prometheus metrics、链间原子交换、其他RPC接口等等。

未来计划

虽然这次的版本发布对我们来说无疑是一个重要的里程碑,但这只是一个开始。在最近完成闪电网络规范的v1.0版本之后,我们将在路线图中展示更多令人兴奋和创新的功能。

首先,我们最近提出了一种更灵活的方法来构建洋葱路由包,允许更多信息被传送到路由中的站点。这将带来许多强大的新功能,例如不需要发票的自发付款,以及在付款期间隐藏付款人和收款人身份的会合路由。

我们一直在开发的其他方案包括双重融资渠道,来为网络提供更好的流动性,以及取消费用承诺,这将能够解决渠道关闭的主要原因之一。

随着c-lightning 0.7版本的发布,我们很高兴能够开始着手安装这些令人激动的新功能,并解决未来的一些重大挑战。

在此我们要感谢许多贡献者,他们不仅为c-lightning贡献了代码,还#reckless又勇敢地测试并提供建设性的反馈。最后,我们还要感谢另外一些闪电网络团队,ACINQ和Lightning Labs,以及其他个人贡献者,这些人的努力让闪电网络社区成为一个快乐、团结和开放的环境!

如何开始使用插件

闪电网络需要更多插件!要开始扩展你的闪电网络应用程序,需要先查看我们的文档,然后查看一些插件示例。我们很乐意聆听你对新更新的反馈,你可以通过我们的GitHub repoLightning-dev邮件订阅与我们联系。