作者:ACINQ

来源:https://medium.com/@ACINQ/introducing-phoenix-5c5cc76c7f9e

原文首发于 2019 年 12 月 13 日

今天,第二代移动端闪电网络钱包 Phoenix 正式上线。

为何称之为第二代钱包?

当我们首次在 2017 年官宣 Eclair Mobile 时,我们选择将其打造成一个标准的比特币钱包,并选择性支持闪电网络。Eclair Mobile 虽然有一个美观的用户界面,但是在用户体验方面还是会暴露很多闪电网络的内部运作。例如,用户看到的链上和链下余额是分开显示的,还要管理支付通道和入账流动性等等。

Phoenix 是我们重头开始打造的, 因此得名“凤凰”,有“涅槃重生”之意。用户体验可比肩优质的传统比特币钱包,还可实现手续费极低的即时付款。

通道管理、流动性问题、备份烦恼统统不用再愁!用户体验改进是如此重要,值得作为一个类别来讨论。

“媲美比特币钱包的用户体验”是真的吗?

我们来回顾一下闪电网络出现之前比特币钱包的典型应用场景。

  1. 安装一个新的钱包应用
  2. 收到 0.004 BTC
  3. 发送 0.001 BTC
  4. 收到 0.003 BTC
  5. 卸载和恢复
  6. 发送剩余 0.006 BTC,最后只留下空钱包

上述场景看起来非常简单,对于传统比特币钱包来说确实是小菜一碟,但是要通过闪电网络实现难度很大。以下是所有需要攻克的难关:

步骤(1)很简单。果真如此吗? 如果你使用的是传统比特币钱包,你会在这一步将助记词抄写下来。如果你使用的是闪电网络,就没法这么做,因为每笔交易完成后都需要更新备份。也有人尝试使用 静态备份,但都属于边缘案例,而且不支持进行中的付款。

步骤(2)更糟糕。如果你没有支付通道,就无法通过闪电网络收款。但是,你需要比特币来开启支付通道,对吧?因此,除非你本身就持有比特币,否则你无法接收比特币。是不是很气人?

步骤(3)对于标准比特币钱包来说非常简单。即使步骤(2)中的转入交易还没有确认,你也可以直接花费这笔钱,并创建一连串等待确认的交易。但是,在闪电网络上,你做不到这点,因为支付通道必须在交易确认后才可以使用。因此,如果你在步骤(2)创建了一条支付通道,你通常要等待 2 至 3 次确认完成后才能进行付款。

步骤(4):同步骤(2)。

步骤(5):最好的情况是,如果你的闪电网络钱包支持某种静态备份,你就能关闭你的支付通道并取回你在链上的资金。但是,你不仅需要支付网络费用,还得离开闪电网络。

步骤(6):用户通过单笔交易将钱包内的所有剩余资金全部发送出去。请注意,就当前例子而言,钱包内共有两个 UTXO(0.003 BTC + 0.003 BTC)。假设你在步骤(2)和(4)中创建了两条支付通道,直至最近你还是不能将二者合并到一笔付款中。还有一点要注意的是,在闪电网络中,同一条支付通道内的双方必须维持最低“保证金”额,作为激励机制的一部分。这很快就会变成噩梦般的用户体验,因为你无法花费掉 所有 资金,而且无法花费的金额取决于你开启的支付通道的数量。

好消息是,我们已经逐一解决了上述所有挑战。下方视频展示了 Phoenix 的使用场景 (100% 在闪电网络上!):https://youtu.be/E-d4DPA3lNA

当然了,这里面可没用到什么魔法。要实现这点只需将新的功能和折中相结合。

功能

Phoenix 满载各种新功能。其中部分功能会放到其它博客文章中作具体介绍。

  • 收账开启通道。如果你没有足够多的入账流动性来接收付款,Phoenix 会立即自动创建一条支付通道。
  • 无需确认,即可使用。又叫作 turbo 通道。可以让你在创建完支付通道后立即使用它们,无需等待确认。
  • 对等备份。通道备份不再让人头疼。只要重新安装应用,输入你的 12 个助记词,就能访问你的资金。
  • 零保证金 + AMP。即使是分散在多个支付通道内的资金,你也可以把它们当作同一个余额花费。
  • 蹦床支付。以免信任的方式委托付款路径计算,帮你免去繁冗的路由表同步。当前版本的 Phoenix 存在隐私性挑战,详见下文。
  • 互换。即使你在闪电网络上,也可以无缝发送和接收链上交易。

折中

市面上已经出现了五花八门的闪电网络钱包。根据我们在过去一年来的了解,有相当数量的用户准备使用托管型钱包,因为他们认为这是获得优质用户体验的唯一途径。

我们相信自己可以做到两全其美:非托管型钱包和优质用户体验可以兼得。这是我们的初心,我们也没有在这方面做出过妥协。就像 Eclair Mobile 一样,Phoenix 是一款非托管型闪电网络钱包。该钱包基于 Eclair,会在后台运行真正的闪电网络节点。密钥永远不会离开 Phoenix 钱包,即使 ACINQ 乃至整个闪电网络一夕之间消失不见,你的资金也照样完全掌控在你的手中

以上就是不容让步的部分。接下来介绍我们做了哪些折中:

信任折中

  • Phoenix 只连接至 ACINQ 节点。这使得我们能够直接在对等节点层面 修改/丰富 闪电网络协议,同时确保在网络层面上是 100% 兼容闪电网络的。这也使得非对称激励机制成为可能,有时有利于用户的节点,有时有利于我们的节点。下面来看几个例子:

例 1:一个简单的例子是开启大型支付通道的能力。

例 2:由于我们对自己发现欺诈行为的能力很自信,我们决定不对 Phoenix 用户作任何通道保证金要求(我们自己还是会保留保证金)。这就是非对称激励机制的例子之一:Phoenix 用户可能不受利害关系束缚(因此欺诈行为对他们而言是零成本的),而我们的节点始终受制于利害关系。零保证金意味着你可以花费全部余额,而且可以实现无缝的拆分付款,因为正如你所期望的那样,你的总余额就是你在所有通道内的资金总和。

例 3:由于我们知道通往 Phoenix 钱包的路径总会经过我们的节点,我们可以提供额外的服务,例如,当用户没有支付通道或足够的入账流动性时,自动为该用户开启新的支付通道,以便其接收付款。

  • 在得到确认之前,通道充值带有信任属性,有点像是信任未确认的比特币钱包入账交易。请注意 Phoenix 的运行方式是,所有支付通道均由我们的节点充值一个非零的金额,接着会有一笔 Layer 1 或 Layer 2 付款入账。我们原本可以采用一个更高级的设计来让充值交易取决于 payment_preimage,但是这不仅会产生延迟(否则我们依然能够对这笔交易进行双重花费),还会让 turbo 通道变得不可行。另一方面,Phoenix 用户无法自行充值支付通道,因为他们没有 UTXO,而且我们也不信他们不会双花支付通道内的资金。

  • 互换操作需要信任(从根本上来说,我们先拿到钱,再进行互换交易)。深潜式(“免信任”)互换(submarine swap)确实是个好主意,但是不够完美。首先,这类互换并非 100% 无需信任:在进行换出交易时,你仍需本着对互换服务器的信任预先付款。此外,深潜式互换较为复杂,需要执行两笔链上交易,因此成本较高。最后,在换出场景中,深潜式互换要求收款钱包能够理解互换协议。你无法直接从 Phoenix 向一个普通的比特币钱包发送比特币。

没错,就少数几个操作和几个明确定义的时间段而言,确实需要某种程度的信任。我们相信在优质的用户体验面前,这些折中都是值得的。

这里还要强调的一点是,我们永远都不会将信任需求当作最佳选择,哪怕只是针对个别操作而言。这是一个缺憾,如果我们找到了能够减少信任需求的办法,会立即采取行动。

隐私性折中

目前,我们的节点会获取有关付款(目的地节点、金额)的信息。换言之,就隐私性而言,当前版本的 Phoenix 相比传统的托管式钱包并无优势。为什么会这样?Phoenix 依赖蹦床支付来将付款路径的计算外包出去。这项新技术的规范尚未完成。我们的节点是目前唯一支持蹦床支付的,因此存在隐私问题。

这显然不能令人满意,而且只能作为一种临时措施。我们的目标是大幅增加蹦床节点(*)的数量,使得蹦床支付的隐私性媲美(实际上是超越)非蹦床支付。你不是想问为什么人们会运行蹦床节点?因为这样可以让他们赚取更多手续费。蹦床支付催生了付款路径计算市场,这个话题容我们以后再探究。

与此同时,我们计划让 Phoenix 通过 Tor (*)连接(就像 Blockstream Green 那样),从而有效缓解问题。

(*)实际上是另一个折中,取决于你的居住地。

何时支持 iOS?

目前,Phoenix 只支持 Android,但是我们正在开发 iOS 版本,将于 2020 年上线。

Eclair Mobile 会如何?

Phoenix 并非 Eclair Mobile 的替代品,二者基于的假设不同,面向的目标用户也不同。我们打算在不久的将来继续支持 Eclair Mobile。

本文是介绍 Phoenix 的系列文章的第一弹。本系列还包括以下内容:

(完)