[Fiber] 从一个简单的用户故事看 Fiber 还缺什么

小王上周在 Google Play 上偶然刷到了一款叫 “Fiber Wallet” 的应用。

他之前就听说过 CKB 和 Fiber 网络,但一直没深入用过。这次看到有官方钱包,心想 “装一个试试”。点开 App,创建钱包、备份助记词,几秒钟就完事了。主界面简洁干净,底部三个 Tab:余额、收款、付款。

小王点了一下 “收款”,屏幕上弹出一个二维码。他把二维码截屏发到了朋友群里:“兄弟们扫我,转点 CKB 试试”。

朋友老李掏出手机扫了码,输入 500 CKB,点确认。几秒后,小王的钱包弹出一条通知:“你收到了 500 CKB”

“这也太丝滑了吧。” 小王心想,“跟微信支付一样简单。”

过了几天,小王又打开钱包,输入老李的地址转了 200 CKB 回去。点发送,几秒到账。一样丝滑。

小王以为故事到这里就结束了。但他不知道的是,这个看似简单的「扫码 → 付款 → 到账」流程,背后藏着一条长长的技术补全清单,因为小王刚才用的那个钱包,我们现在还造不出来。更准确地说不是造不了,而是要让小王真的能用上它,Fiber 还需要补好几块拼图。

第一块拼图:让 Fiber 跑在手机里

Fiber 目前已经有一套完整的桌面端实现:用 Rust 编写的 fiber-lib 核心库,以及命令行二进制 fnn。把它跑在服务器上做路由节点,完全没问题。

但小王的手机不是服务器。手机是 ARM 芯片,跑的是 Android 或 iOS。

把 Rust 代码编译成手机能用的东西,这件事本身不复杂,复杂的是把 Rust 的类型、函数、错误处理一比一映射到手机端原生语言里 — Android 需要 Kotlin/Java 绑定,iOS 需要 Swift 绑定。这个映射工作,需要一个叫作 FFI(Foreign Function Interface,跨语言接口) 的桥梁。

我们还需要把这套 FFI 能力集成到 Fiber 项目中,让 fiber-lib 在编译时就能同时产出桌面端和移动端的产物。

可以这样理解fiber-lib 是一台发动机,FFI 就是发动机的适配器。有了适配器,这台发动机不仅能装在卡车(Linux 服务器)上,还能装进轿车(iPhone)和 SUV(Android 手机)里。

到这里,小王的钱包 App 就有了一个能在手机里运行的 Fiber 核心。它建立了 P2P 连接、能打开通道、能收发支付。好消息是,Fiber 团队目前已经在着手做移动端的适配工作了,一切都在按部就班地推进。

但接下来才是真正的问题。

第二块拼图:新钱包怎么收第一笔款

小王刚下载完钱包,余额是 0,一个通道也没有。

这是所有支付通道网络的 “第一天悖论”:你想收款,就得先有通道;想开通道,就得先有资金;想有资金,就得先……收款。 死循环。

闪电网络在这个问题上已经摸索了近十年,催生出了一个关键角色:LSP(Lightning Service Provider,闪电网络服务提供商)

LSP 的核心逻辑很简单:一个拥有充足流动性的节点,向新用户 “借出” 通道容量,让用户能在没有任何初始资金的情况下接收第一笔支付。通道开通的成本(链上手续费、锁定资金的机会成本)由 LSP 先行垫付,然后从用户收到的支付金额中扣除一笔服务费。

类比一下:LSP 就像你刚搬到一个新小区时,邻居主动借你一套锅碗瓢盆。等你安顿好了、自己买了厨具,再把锅碗还给人家。你不需要事先拥有任何东西,唯一付出的是一点 “借用的成本”。

在闪电网络里,这套流程已被标准化成了两种模式 — 提前下单的 “预定模式” 和支付到达时当场开通道的 “即时模式”。

你可能会问:付款本身需要通道,通道还没开,付款方怎么付?答案是发票里藏了一条路由提示,它告诉付款方:“把钱先付给 LSP,他知道怎么转给我。” LSP 是网络中连接度很高的节点,付款方 → LSP 这段走的是已有通道,畅通无阻。LSP 收到付款后,当场为新用户开一条通道,再把钱转发进去,扣掉服务费。

类比一下:你刚搬进一栋公寓,门口还没装门铃。快递员不是直接敲你的门 — 他敲楼下大堂管理员的门(这个门一直存在)。管理员当场给你装好门铃,然后替你收了快递,再通过新门铃通知你下楼取。

通道是在支付到达时才开出来的,而不是提前等着支付来 — 这就是 “即时通道” 的含义。用户从头到尾只需要做一件事:点「收款」生成一个二维码,剩下的钱包全自动处理。

Fiber 要做的,就是设计和实现一套自己的 LSP 协议。协议的基本形态可以类比闪电网络的成熟方案,但承载它的消息层是 Fiber 自己的 P2P 网络,通道里流动的是 CKB 或者 UDT 资产,链上的确认节奏也比比特币快了近 50 倍(12 秒 vs 10 分钟)。

换句话说,Fiber 既需要 LSP 客户端,让钱包能用上 LSP 服务;也需要 LSP 服务端,让有人愿意来充当这个 “借锅碗瓢盆的邻居”。

第三块拼图:让支付在收款方不在线时也能到达

通道有了,但小王的手机不可能一直亮着。

他可能刚生成完二维码就把手机揣兜里了。朋友老李付款的时候,小王的节点可能根本不在线。

在传统区块链上这完全不是问题 — 转账只需要链上记账,你离线十年也无所谓。但在支付通道网络里,双向通道中的每一次支付都需要双方节点实时在线,交换并签名新的通道状态。这是协议级别的硬约束。

解决异步支付有两套思路,一旧一新,互为补充。

  • 第一套是 HTLC 截流。 这是目前闪电网络生态中已经广泛使用的方式。核心思路是让 LSP 充当收款方的缓冲层 — 当付款路由到 LSP 节点时,LSP 认出这笔付款的目标是自己管理的某个钱包,而此时钱包不在线,LSP 就先把这笔支付暂时 “截住”,等钱包上线后再释放过去。它本质上是一个应用层的补丁:协议本身要求双方在线,LSP 在中间 “争取时间”。

  • 第二套是 BOLT12 协议。 如果说 HTLC 截流是在协议外面打补丁,那 BOLT12 就是把异步支付直接做进了协议里。它的核心思路是:收款方提前发布一个静态的 “收款要约”(Offer),这个要约可以反复使用,不绑定金额,不要求收款方在线。付款方拿到要约后随时可以发起支付,路由过程中即使收款方离线,BOLT12 也能通过洋葱消息和盲化路径把支付信息暂存起来,等收款方上线后再送达。

两套思路的差别在于:HTLC 截流依赖 LSP,是应用层的权宜之计;BOLT12 是协议层的原生能力,不依赖特定服务商。对于 Fiber 来说,可以一步到位直接集成 BOLT12 的等效协议,毕竟没有历史包袱。

这就是支付网络的用户友好化:把 P2P 的复杂性关进后台,只在前台留下一个二维码和一个通知。

第四块拼图:让付款不烧手机

收款顺畅了,但付款的顺畅需要另一层保障。

一个容易被忽略的事实是:完整的 Fiber 节点不适合跑在手机上。标准 FNN 节点需要维护全网拓扑、同步 Gossip、为其他节点中转支付。这些工作对服务器来说稀松平常,放到手机上就是持续的网络 I/O 和 CPU 运算 — 哪怕什么都不做,光是把全网拓扑更新一遍,电池就默默掉了几个百分点。移动端钱包不需要知道整个城市的地图,它只需要知道自己家门口的路。

所以手机钱包需要一个轻量级节点模式:只管理自己的通道和支付,关掉 Gossip 同步和路由中转。fiber-lib 已经包含了所有需要的模块,我们只需要一个 “移动端开关” — 在编译时裁掉手机不需要的东西。

但这还不够。即使节点轻了,付款时的路径计算仍然躲不掉。在网络规模稍大的情况下,从全网拓扑中找到一条通往收款方的最优路径,对手机来说是一笔不小的算力开销。

这就是 Trampoline 蹦床路由 的用武之地。思路很简单:钱包只负责把支付请求送到 LSP 门口(也就是 “第一跳”),附带一个蹦床请求告诉 LSP “剩下的路你帮我算”。LSP 凭借自己的全网拓扑和算力,生成剩余路径继续转发。手机端只维护一条到 LSP 的连接,省内存、省 CPU、省电。

可以这样理解:你不是自己打开导航 App 从全国道路网里算路线,而是把目的地告诉楼下大堂管理员,他说 “你开到我门口就行,剩下的路我带你走。”

蹦床路由和 LSP 本质上是同一套服务体系的两个侧面:一个帮钱包解决入金通道,一个帮钱包解决出金寻路。Fiber 在设计 LSP 协议时,需要把蹦床路由一并纳入,让 LSP 节点能够解析蹦床请求并代为生成剩余路径。

第五块拼图:通道安全交给谁

还有一个容易被忽略的问题:通道对手方可能会作弊。

支付通道网络中,每一次支付都会在通道两方之间产生新的 “账本状态”。旧状态虽然作废了,但数据还在。如果对手方拿着一个旧状态去链上关闭通道(在那个旧版本里,他的余额比新版多),就可能盗走本不属于他的资金。

预防作弊的机制叫作 WatchTower(瞭望塔) — 用户把自己通道的历史状态数据加密后交给瞭望塔,瞭望塔持续监控链上,一旦发现对手企图用旧状态关通道,就立即执行惩罚交易,没收对方全部通道资金。

这个 “监控链上” 的动作需要 7×24 小时运行,显然不适合手机。所以瞭望塔天然是一个外挂在 LSP 身上的服务。事实上,LSP 为钱包用户提供 WatchTower 服务,已经成为闪电网络生态的事实标准

Fiber 目前已经实现了 WatchTower 模块,下一步要做的是把它变成 LSP 服务体系的一部分,让手机钱包用户无需自己跑瞭望塔,也能享受到同等级别的资金安全保障。

还有一条隐藏的暗线:跨链

以上聊的都是 “Fiber 网络内部的支付体验”,但如果老李不是 Fiber 用户,而是比特币闪电网络的用户呢?

如果老李持有的是 BTC,通过闪电网络扫描小王的二维码后,BTC 自动兑换成 CKB,再出现在小王的 Fiber 钱包里 — 这就是 跨链原子交换 的场景。

Fiber 目前已经实现了一个叫 CCH(Cross-Chain Hub,跨链枢纽) 的模块,使 Fiber 网络和比特币闪电网络之间能进行无信任级别的资产交换。CCH 目前在桌面端的原生环境下已经可以运行,未来如果能集成到 LSP 服务中,那 LSP 就不仅能提供 CKB/UDT 的通道流动性,还能提供跨链流动性 — BTC 从闪电网络进来,变成 CKB 或 USDT 进入 Fiber,反之亦然。

这将是一个连比特币闪电网络的 LSP 都做不到的事情,也是 Fiber 独有的结构性优势

拼图拼起来

现在我们回到小王的故事。 当以上所有拼图都就位之后:

  1. 小王从 Google Play 下载了 Fiber 钱包,FFI 绑定让 fiber-lib 在手机上以轻量节点模式运行 — 不维护全网拓扑,不参与路由中转,省电省流量
  2. 他创建钱包后,LSP 客户端自动为他向 Fiber LSP 服务商请求了一个即时通道
  3. 他点收款,钱包通过 LNURL 式的域名协议 生成了 [email protected] 二维码
  4. 朋友老李扫码付款,HTLC 截流机制让支付在 LSP 那里暂存,等小王的节点唤醒后释放
  5. 几天后小王给老李转回 200 CKB,钱包通过蹦床路由把路径计算丢给了 LSP,小王只发了一条消息,LSP 帮他完成了剩余寻路 — 手机不烫,秒级完成
  6. 同时,小王的通道状态数据已经悄悄同步到了 LSP 的 WatchTower,24 小时监控链上作弊行为
  7. 如果老李恰好用的是比特币闪电网络,CCH 跨链模块在 LSP 端默默完成了 BTC → CKB 的原子交换

小王从头到尾只做了几件事:下载、扫码、收钱、转账。他不知道 UniFFI 是什么,不知道 LSP 在后台拦截了 HTLC,不知道蹦床路由替他省了多少电。他只知道这个钱包跟微信支付一样快,而且不烫手。

这就是基础设施的意义:让复杂隐形。

思考:不急,但要有目标地走

闪电网络从 2017 年上线到今天,花了近十年时间才把上述这些体验打磨到相对可用。LSP 生态也不是一夜之间冒出来的,是无数团队在不同协议层上各自推进、相互踩坑、慢慢整合出来的。

Fiber 的发展时间远比闪电网络短,生态积累也远不在一个量级,所以比不上闪电网络是理所当然的。但这并不意味着 Fiber 只能做一个跟随者。

Fiber 有自己的底牌:

  1. 天生多资产:通道里能同时承载 CKB、RUSD、wBTC 等多种 UDT,LSP 提供的流动性天然比比特币 LSP 更丰富
  2. 12 秒出块:通道开启和关闭的等待时间远低于比特币,JIT 通道体验理论上优于闪电网络
  3. WASM 运行时:目前 Fiber 已经可以通过浏览器运行完整节点,这是闪电网络生态中几乎没人做到的事情。移动端原生 + 浏览器双路径,让 Fiber 的覆盖面对比纯原生方案有一个天然的扩展维度
  4. 未来的可编程性:如果通道内能运行自定义逻辑,Fiber 就不只是一个支付网络,而是一个原生去中心化应用平台。届时 LSP 不只能为钱包提供流动性,还能为 DApp 提供 “零门槛入场” 服务

这些底牌的存在,让 Fiber 的移动端之路不是 “追赶”,而是 “在追赶中沉淀差异化”

结语

Fiber 的移动端适配工作已经启动,LSP 协议的设计也是顺理成章的下一步。可以先从最核心的 UniFFI 集成入手,让移动端能跑起来;同时规划轻量节点模式,确保在手机上的资源消耗可控;然后设计一个最小可行的 LSP 协议,把入金通道 + 蹦床路由 + 异步支付打包为一套完整服务;接着逐步叠加域名式地址、WatchTower 服务化、以及跨链。

这是一个循序渐进的过程,每个阶段都能交付真实可用的价值。

小王用钱包收款和付款的那个瞬间,不会知道背后发生过什么。但正是那些他看不见的东西,才是 Fiber 真正需要构建的。

14 Likes

Hi Ckroamer, 很棒的文章!我根据你这篇文章,让AI做了个交互式游戏



8 Likes

从开发角度看: 关于移动端的 “Fiber Wallet”,目前一个可行方案是: fiber-js
它可以在手机端完成fiber的基本功能,不过因为浏览器的局限性无法长期驻留在后台。

同时我这边尝试了 Android 的 native 版,和你的思路一样目前是可以跑起来的,后续工作正在进行中。

fiber-ffi

demo

3 Likes

太棒了,期待后续可以直接为 Fiber 开发钱包应用,另外我想知道 Android 上跑的 Fiber 节点功能与 WASM 版本的类似吗,还是完全体版本的?

通俗易懂,感谢团队的解释,我觉得目前我们正走在一条正确的道路上

1 Like