作者:craigraw

来源:https://damus.io/nevent1qqsrg3xsjwpt4d9g05rqy4vkzx5ysdffm40qtxntfr47y3annnfwpzgpp4mhxue69uhkummn9ekx7mqpz3mhxue69uhkummnw3ezummcw3ezuer9wcq3samnwvaz7tmjv4kxz7fwwdhx7un59eek7cmfv9kqz9rhwden5te0wfjkccte9ejxzmt4wvhxjmczyzl85553k5ew3wgc7twfs9yffz3n60sd5pmc346pdaemf363fuywvqcyqqqqqqgmgu9ev

原文为 Frigate v1.4.0 的发行公告,作者是著名比特币钱包软件 Sparrow 的初创人。如文中所述,Frigate 是一款扫描静默支付的服务端软件。

Frigate v1.4.0 带着巨大的性能提升发布了。这不是例行公事的发布,我给你讲讲为什么。

“静默支付(Silent payments)” 不仅仅是一个实现静态收款码的新方法。它是 2013 年出现 “确定性层级式钱包(HD wallets)” 以来,第一个优化地址派生系统的严肃竞争者。确定性层级式钱包显著胜过掌握单个单个私钥的钱包,静默支付也能带来类似的飞跃。

为什么这么说呢?首要的一点当然是,它提供了静态的收款码;再结合 BIP353,就能实现 “₿user@domain.com” 这样的收款码。一个总是要求收款方为每一笔支付来回发送消息才能保护收款方隐私性的支付系统早就过时了,所以我们是久旱逢甘霖。

译者注:如果不使用静默支付这样的静态支付码提议,收款方为了避免地址复用,就需要在每一次接收支付时,都给支付方提供一个新地址,整个流程就变成了 “支付方表达支付意愿 - 收款方手动发送新地址 - 支付方发起支付” 这样。而静默支付会在支付方向静态收款码发送支付时自动生成不可能重复的地址 —— 只要支付方的钱包软件支持静默支付。)

也许更加重要的是其后续效果:从此没有地址复用了。因为属于收款方的每一个实际上的收款地址都是用具体交易的输入计算出来的 —— 每个输入都只能花费一次啊 —— 所以每一个地址都一定是独一无二的,这就解决了白皮书中最早提到的隐私性问题。

还有一个额外奖励:“连续空地址限额(gap limit)” 也不再需要了。“连续空地址限额” 是 HD 钱包在复原钱包(扫描交易)时触发停止扫描的连续空地址数量,这就是为什么复原钱包可能会错过交易:用户的两个有交易的地址之间有太长的空白(超过了扫描时候的连续空地址限额)。

译者注:在 HD 钱包中,一个种子可以产生无数个地址,用户完全可能按顺序使用生成的地址,或者是有意无意地跳过一些生成好的地址。因为有可能产生无数个地址,在复原钱包时,软件不可能无穷无尽地扫描区块链,所以,通常它会有一个 “空白限额”,一旦连续的空地址队列达到这个长度,软件就停止扫描。用户通常可以手动配置这个限额来加速扫描或确保不要遗漏交易。

有这些好处,想必你会问:为什么静默支付还没有称为钱包的默认模式呢?原因在于一个看起来致命的缺陷:收款方要扫描自己收到的交易,需要大量的计算,因为区块内的每一笔交易都可能包含一个静默支付输出。

基本上,这意味着,你要检索每一个可能收到交易的区块、在每一个区块上要运行几千次计算,才能看出它里面是否包含发送给你的输出。这极度繁琐,而且根本行不通。

幸运的是,静默支付的 BIP 建议了一个立竿见影的提升:将扫描一个区块所需的信息,减少到了每笔交易只有一个公钥。这是一个巨大的颈部,将每个区块需要获得的数据量降低到了 50 ~ 100 KB 。

但这也还不够。因为连续几个月没上线之后,钱包软件要追上区块链的最新状态(扫描完离线期间产生的区块)需要一个小时的时间,但在移动设备上,必须将它压缩到及描述。用户一打开应用,看见用不了就会马上放弃,而且 iOS(苹果手机操作系统)对后台计算的限制非常严格。所以在实践中,这样的移动钱包体验是无法容忍的。

此外,为了扫描而下载以 MB 计的数据量,对于许多移动端用户来说太昂贵了。而且大部分手机甚至没有那么多运算量,可以在合理的时间内完成扫描。我决定尝试另一种方法。

Frigate 是一款实验性的 Electrum 服务端,用于扫描静默支付。将扫描的负担转移给服务端的同时,你也放弃了一些隐私性。但只要客户端的数据是临时的(不会保存到硬盘),隐私性就类似于在使用 HD 钱包时搭配 Electrum 服务端。

性能是最关键的。在所有区块数据上执行计算的最快的办法,就是将它们放在一个数据库中,然后创造一种定制化的数据库函数、在数据库内执行计算。这就避免了在每一次扫描时还要将它们复制出来。

这还只是第一步,它将扫描几个月区块的时间从一个小时缩减到了一分钟。看起来有戏,但还不够 —— 而且服务端的 CPU 耗尽了,对其它请求的响应速度会变慢。

第二步是在一个 GPU(显卡)上执行计算。因为每一笔交易都可以独立扫描,所以可以实现充分并行化的流水线。GPU 计算也被实现为一个数据库函数,从而将扫描几个月区块的时间降低到了几秒。

同样重要的是,CPU 可以解放出来做别的事情。同样看起来很有前景、但还不够 —— 它需要配置很高的硬件,而且依然只是勉强能用作一个公开的服务端。还需要更多优化。

解决方案依然是优化计算。优化通常只会带来微小的提升,但使用一个新的库(Ultrafastsecp256k1),在相同的 GPU 上带来了难以置信的大约 14 倍的提升。扫描几个月的区块只需要半秒钟。

这是一个突破,因为它让移动设备上的静默支付钱包变得更容易运行。一个带有几个 GPU 的公开服务端就可以应对几千台移动设备的请求,这些钱包软件可以立即完成同步。

还不止于此 —— Frigate 支持 CUDA、OpenCL 和 Metal GPU 后端。实际上,这就意味着,最近十年出厂的绝大部分显卡都可以派上用场 —— 核显、Apple Sillicon 和各种各样的英伟达和 AMD 显卡 —— 现有的节点可以利用闲置的 GPU 算力了。

Frigate 依然是实验性的。但它最先证明了静默支付钱包是可以大规模应用的。这不仅是比特币钱包的期待已久的升级,也是隐私性的重大进步。

这是它的 GitHub 仓库:https://github.com/sparrowwallet/frigate

(完)