基于 fiber-js 的 Demo 开发

在进入主题之前,我觉得有必要先用较为通俗的语言描述一下 Fiber 当前的一些大多数用户可能会关心的功能设定:

  1. 每一个 Fiber 节点都是 “节点 + 钱包” 的组合体,节点模块有自己的身份 ID,钱包模块则提供 CKB 链上资产的操作权限。

  2. 让 Fiber 节点关联 CKB 钱包有两种方式,一种是你直接提供私钥文件并设置一个解锁密码,以后都要提供正确的密码才能启动节点,这是内置钱包模式;另一种是节点发你 CKB 交易,你自己拿去签名,然后将签名信息发回节点即可,这是外置钱包模式。

  3. 要自己在机器上运行 Fiber 节点,要么下载 Fiber 的源代码来编译可执行程序,要么直接下载已经编译好的可执行程序。

  4. Fiber 团队还提供了 Fiber 的 Wasm 版本,也就是可以直接在浏览器里运行 Fiber 节点,这是目前能让非技术用户直接运行 Fiber 节点的最佳方式,但由于技术原因,这个版本砍掉了部分功能。

  5. 在 Fiber 里你无法像 CKB 网络那样直接向某个地址转账,流程是需要目标节点先成一个收款 “发票”,然后你通过向这个发票付款来完成转账,也就是对方不想收款,那你就没法向他付款,并且交易双方的节点都要求同时在线并互相可感知。

  6. Fiber 团队提供了 fiber-cli,支持像 ckb-cli 那样通过终端或命令行来与 Fiber 节点交互。

  7. Fiber 目前还在持续开发当中,上述提到的技术细节都有可能在未来的版本迭代中发生改变,但大部分都集中在技术细节优化和提供新功能上,对基础的技术框架一般不会做太大改动。

  8. Fiber 的技术优势主要体现在 “高频交易” 场景中,尤其是小额且高频的,对于大额或低频的交互场景,其优势就很难发挥出来。

什么是 fiber-js

https://www.npmjs.com/package/@nervosnetwork/fiber-js

一个封装了 Fiber Wasm 版本的 TypeScript 开发包,将 Rust 版本的 Fiber 删减一些功能后编译到 Wasm 二进制,再通过一些基本的封装工作将其封装起来并提供一个简单好用的编程接口。

我们可以通过 fiber-js 直接在浏览器里运行一个阉割版的 Fiber 节点,由于 Fiber 现已支持外置钱包模式,所以可以不用传入你的钱包私钥,直接使用常用的 CKB 钱包,比如 JoyID、UTXOGlobal 等。

当前版本(v0.8.1)的 fiber-js 受限于浏览器运行环境,有以下几个特点:

  • 没有 RPC 服务,毕竟浏览器里也没法运行服务器

  • 没有 RocksDB 数据库,直接使用浏览器中内置的 IndexedDB 服务

  • 没有 WatchTower 服务,无法实时侦测异常操作

  • 只能通过 443/WSS 协议连接 Rust 版本的 Fiber 节点,WASM 版本的 Fiber 节点无法被主动连接

fiber-js 的应用场景

受限于浏览器运行环境的限制,集成了 fiber-js 的 Web3 应用程序无法针对 P2P 场景进行业务构建,例如 P2P 对战、P2P 聊天、P2P 支付等,但 CS 场景是没问题的,即基于 Client 与 Server 的业务模式,比如按流量扣费的在线视频平台、按 Token 计费的 AI Agent 服务等。

Fiber 为了自身网络信息传输的稳定性与有效性,会尽可能的期望节点是常驻运行的,而这一点 fiber-js 所涉及的应用场景都是很难做到的,因为很难想象一个网页会长时间打开且不关闭的情况,所以目前可以这么理解:

  • Rust 版本的 Fiber 同时针对 Client + Server 应用场景,但缺点是需要显式的运行一个 Fiber 节点

  • Wasm 版本的 Fiber 只针对 Client 应用场景,但优点是支持直接在浏览器里隐式的运行一个 Fiber 节点,让普通用户对 Fiber 节点的存在无感

基于 fiber-js 的 demo

该 Demo 是直接集成在 CCC 里的,用于全面的展示 fiber-js 所提供的大部分功能,包括连接节点、创建通道、生成发票和发送支付等,直接使用该 demo 来测试 Fiber 的相关操作流程,不过受限于 fiber-js 的限制,无法体验完全版的 Fiber 功能。

Demo 功能简介:

注:此 Demo 会跟着 CCC 的版本更新来发布

关于 Fiber 的一些个人建议

我在开发 Demo 的过程中,积累了一些使用 Fiber 的经验和感受,Fiber 是一个很有潜力的项目,并且仍在紧锣密鼓的开发当中,我希望就我观察到的一些问题进行探讨,起到抛砖引玉的效果。

Fiber 的官网设计还是以面向开发者群体为主,忽略了非技术群体的感受

官网上充斥着大量的技术性说明与介绍,生态项目板块指向也都是项目的 Github 地址,而不是项目的使用入口或者演示视频,非技术群体用户无法直接通过官网建立对 Fiber 生态的感性认知,我觉得这一点是有待斟酌的。

当前的设计固然有它的道理:尽可能的服务开发者,期望降低开发者在 Fiber 生态中开发应用的门槛。但这样的设计忽略了一个重要的现实情况,那就是应用开发出来后并没有为它们设置向普通非技术用户展示的途径,开发出来的 Fiber 应用很可能就此石沉大海,无法触及普通用户,也就无法对开发者形成正向激励。

降低开发门槛就好像售前服务,开发完成后帮助向用户展示就好像售后服务,两者缺一不可,我们目前的主要精力都放在了售前服务上,却忽略了售后服务的重要性。

运行 Fiber 节点的门槛较高

几乎所有的 Fiber 应用都会要求用户在本地启动一个 Fiber 节点,但让非技术群体用户自己从 Github 上下载 Fiber 二进制文件并在命令行终端里进行配置和启动节点是一件门槛极高的操作。

其实如果能提供一个桌面端 Fiber 节点应用并集成钱包功能,就像 Neuron 那样,打开就能直接启动节点,在应用里调整节点配置和调用 RPC 接口等,将极大的降低非技术类用户启动 Fiber 节点的门槛,如果有这样的桌面应用存在,那就可以直接参考传统区块链钱包的做法,集成一个 Fiber 应用市场,打造成 Fiber 生态的入口。

fiber-js 的潜力还有更多可挖的空间

fiber-js 运行着一个阉割版的 Fiber 节点,但其在浏览器中运行的特点,即带来了方便但也受限于不少技术问题,如果能够尽可能解决大部分技术问题,我相信 Wasm 版本的 Fiber 对开发者将更有吸引力。

官方文档中缺少对 fiber-js 的相关介绍和引导,可能会导致一些开发者都不知道其存在的问题。

10 Likes

:+1: :+1:

官方文档中缺少对 fiber-js 的相关介绍和引导,可能会导致一些开发者都不知道其存在的问题。

Yes we should add this part in docs

1 Like