作者:Shinobi

来源:https://bitcoinmagazine.com/technical/bolt12-lnurl-and-bitcoin-lightning

BOLT 12 是什么?它将许许多多不同的功能和组件结合起来做成了很多事情 —— 静态二维码、模块化发票、收款方隐私保护。

那么,它们整体起到了什么作用?你可以通过一个二维码(“offer”,可译为 “要约”)在不泄露隐私的情况下从其它节点那里获取发票,还可以请求远程节点支付你的发票。

相信熟悉 LNURL 的人都会在心中暗想:“这听起来也太像 LNURL 了吧”。 如果你不了解 LNURL 及其运作原理,这里有个简单的介绍。

LNURL 是什么?

LNURL 是由多个简单协议构成的堆栈,用于通过 HTTP 协调在闪电网络上完成付款所需的信息。LNURL 协议的完整组件列表可以点击此处查看,本文仅介绍与 BOLT 12 相关的核心用例。

LNURL 协议的三个核心组件分别是:一个可以让用户使用公钥登录服务的身份验证方案、一个可以让钱包通过静态二维码向服务器发送请求并获取发票的发票请求方案,以及一个可以让钱包请求服务器支付其所提供发票的取款请求方案。闪电网络发票比链上比特币地址长得多,付款本身就是需要双方都在线的交互过程,因此通过网络连接交互式协调付款信息是合情合理的。

身份验证协议实际上就是服务器提供一个随机生成的数字,由用户钱包使用新生成的密钥签名。在收到随机数的签名后,服务器会保存相关公钥,以便以后登录使用。

发票请求功能以非发票形式提供用户完成付款所需信息。这些信息包括付款描述、预期需要向服务方支付的最低和最高金额,以及让钱包能够请求到真正发票的 URL。钱包会将上述信息展示给用户,由用户设定最终金额并请求发票。将发票请求发送给服务器并从服务器那里获得发票后,钱包会验证发票金额是否符合用户设定金额,并支付发票。

取款请求的运作方式是,向服务方发送信息,接收返回的描述、用于发送发票的 URL、随机字符串(或与账户或用户绑定的确定性字符串),以及最低和最高取款额。填写完恰当的值后,钱包会将发票返回给服务器。如果填写的值有效,并且位于金额参数的范围内,服务方就会支付发票。LNURL 身份验证协议可以搭配使用,确保只有目标用户才能通过 LNURL 链接成功完成取款。

LNURL 已经得到改进,极大提升了闪电网络的使用体验,但是必须使用 web 服务器。所有请求和响应都通过 HTTP 处理,而且除了闪电网络节点之外,还需要其它基础设施来简化协调和付款流程。对于任何线上服务提供商或商户来说,这都是个非常合理的要求,因为他们无论如何都需要一个 web 服务器来提供在线服务或产品。但是,对于想要获得这种流畅体验却又不懂技术的宅家用户、小摊贩、实体店和其他无需使用 web 服务器的用户来说,这确实是个麻烦而且存在安全隐患的要求。

BOLT 12 是什么?

BOLT 12 无需 web 服务器就可以实现 LNURL 提供的部分核心功能。要约编码了触达节点、请求发票所必需的信息,要么是 node_id,要么是通过洋葱消息与节点通信的路径(即,洋葱路由的最后几跳,是预先计算和加密的)。(购买多种物品的)要约还可以编码最低付款额、用来付款的币种、截止日期和最低/最高购买量。

这就是从签发要约的节点处获取真正的发票所需的一切信息。发票付款方可以通过洋葱消息(BOLT 12 的核心功能之一)获取这些信息。洋葱消息功能可以让节点在不依赖闪电网络通道的情况下直接进行端到端加密通信。就像闪电网络付款那样,这些信息可以用于洋葱路由消息。获取要约后,付款方会使用要约中编码的信息发送一条发票请求。然后,要约的创建者将返回真正的发票。

BOLT 12 还可以为每位用户生成独特的要约,以便接收方向要约的创建者请求付款,类似 LNURL 的取款请求功能。BOLT 12 发票承诺付款方密钥的唯一性——如果发生退款的情况,付款方密钥可用来证明谁是真正支付发票的人。密钥唯一性也可以跟取款要约搭配使用,确保只有真正的接收方才能成功获取创建者支付的发票,不像要约副本那样人人皆可获取。

要约的两个用法有效实现了类似 LNURL 的发票和取款请求功能,无需运行 web 服务器。

LNURL 还是 BOLT 12?取决于背后的权衡

既然 LNURL 和 BOLT 12 实现的功能相同,那么二者之间真正的区别在哪儿?既然已经有了 LNURL,为何还需要 BOLT 12? 主要区别在于是否需要 web 服务器。web 服务器需要运行更多基础设施、域名、TLS 证书以及相关的专业知识。

对于大多数企业和服务方来说,这个问题根本不值一提,因为运行任何线上业务都需要具备这些条件。但是,对于没有技术背景的终端用户来说,这是个不容小觑的问题。指望用户为了获得简单流畅的用户体验而在自己的闪电网络节点上维护额外的基础设施是不现实的。另外还有 DNS 中心化的问题,因为域名永远都不可能真正受其所有者的控制。

抛开这些问题,LNURL 和 BOLT 12 可以共存。LNURL 运作良好,而且已经在闪电网络生态中得到了广泛应用,但是只适合企业或服务提供方。BOLT 12 可以填补这一空白,让除企业之外的居家用户也能享受同样流畅的用户体验。

这两个解决方案分别为两类不同的用户群体提供相同的服务,完全没问题。

(完)