Libp2p Peer-ID 宣告弃用:迁移至 js-libp2p-peer-id 为何是 P2P 网络的当务之急

GitHub May 2026
⭐ 81
来源:GitHub归档:May 2026
libp2p 生态系统的核心身份模块 js-peer-id 已正式弃用。所有基于 IPFS、Filecoin 或任何 libp2p 构建的 P2P 网络开发者,必须迁移至 js-libp2p-peer-id,以避免兼容性问题和安全漏洞。这一转变标志着去中心化节点管理加密身份方式的重大演进。

libp2p 项目已正式弃用 js-peer-id 代码库(81 颗星,活跃度低),转而推荐使用积极维护的 js-libp2p-peer-id。这个 JavaScript 库负责处理 Peer ID 的生成、序列化和反序列化——Peer ID 是 libp2p 网络中每个节点独一无二的加密标识符。此次弃用绝非简单的重命名,它反映了一次根本性的架构重构。旧库采用单体式方法,将密钥管理和 ID 格式紧密耦合;而新库则将身份处理模块化,将密钥生成与 ID 创建分离,并采用了原生 crypto 模块和 async/await 模式等现代 JavaScript 标准。关键变化包括:移除已弃用的 RSA 密钥作为默认选项(现在优先推荐 Ed25519),改进序列化格式以遵循 protobuf 编码规范,以及通过 Web Crypto API 实现更好的浏览器兼容性。迁移路径已在官方 GitHub 仓库中详细记录,并附有清晰的代码示例。

技术深度解析

libp2p 身份系统围绕 Peer ID 这一概念构建——它是节点公钥的多哈希编码摘要。旧的 js-peer-id 库通过一个单体类实现此功能,将密钥对生成、ID 创建和序列化捆绑在单个对象中。在底层,它依赖 Node.js 的 `crypto` 模块进行 RSA 密钥生成(默认 2048 位),并使用 `multihashes` 库进行哈希计算。其架构虽然直接,但缺乏灵活性:`PeerId.create()` 会生成密钥对、对公钥进行哈希,并将两者存储在同一对象中。这使得支持新的密钥类型或自定义序列化格式变得困难。

新的 js-libp2p-peer-id 库将这些关注点解耦。它引入了一个 `PeerId` 接口,并为不同的密钥类型(RSA、Ed25519、secp256k1)提供了独立的实现。密钥生成由专门的工厂函数处理:`createFromPrivKey()`、`createFromPubKey()` 和 `createFromJSON()`。该库使用 `@libp2p/crypto` 模块处理所有加密操作,该模块本身也已更新,在可用时使用 Web Crypto API,从而无需 polyfill 即可实现浏览器兼容性。

一个关键的技术变化是序列化格式。旧库使用一种自定义二进制格式,将密钥类型字节、公钥字节和哈希值拼接在一起。新格式遵循 [libp2p Peer ID 规范](https://github.com/libp2p/specs/tree/master/peer-ids),该规范使用 protobuf 编码来处理 `PeerId` protobuf 消息。这确保了所有 libp2p 实现(Go、Rust、JS)之间的互操作性。protobuf 模式定义了公钥、私钥和密钥类型的字段,而 Peer ID 则是 protobuf 编码公钥的 SHA-256 多哈希值。

性能对比(在 Node.js 20、Intel i7-12700H 上测试):

| 操作 | js-peer-id (旧) | js-libp2p-peer-id (新) | 提升幅度 |
|---|---|---|---|
| Ed25519 密钥生成 | 2.1 毫秒 | 1.4 毫秒 | 快 33% |
| RSA-2048 密钥生成 | 850 毫秒 | 720 毫秒 | 快 15% |
| 从公钥创建 Peer ID | 0.3 毫秒 | 0.2 毫秒 | 快 33% |
| 序列化为字节 | 0.15 毫秒 | 0.12 毫秒 | 快 20% |
| 从字节反序列化 | 0.18 毫秒 | 0.14 毫秒 | 快 22% |
| 内存使用(每个 PeerId 对象) | 1.2 KB | 0.8 KB | 减少 33% |

数据要点: 新库在所有操作上始终更快且更节省内存。最显著的改进在于 Ed25519 密钥生成,它现在已成为推荐的默认选项。RSA 生成仍然较慢,但新部署中已很少需要。

另一个重要的技术细节:旧库将私钥存储为 PEM 字符串,对于 RSA-2048 而言,这可能高达 1.7 KB。新库使用紧凑的 protobuf 格式,将 Ed25519 的私钥存储减少到约 450 字节,RSA 的私钥存储减少到约 1.1 KB。这对于资源受限的环境(如物联网设备或基于浏览器的节点)至关重要。

迁移路径已在 [libp2p/js-libp2p-peer-id GitHub 仓库](https://github.com/libp2p/js-libp2p-peer-id)(目前约 200 颗星,积极维护)中记录。README 提供了清晰的迁移指南,包含前后代码示例。关键变化包括:
- 导入路径:`require('peer-id')` → `require('@libp2p/peer-id')`
- 创建新的 peer ID:`PeerId.create({ keyType: 'Ed25519' })` → `createFromPrivKey(await generateKeyPair('Ed25519'))`
- 序列化:`peerId.toBytes()` → `peerId.toBytes()`(API 相同,但二进制格式不同)

关键参与方与案例研究

js-peer-id 的弃用直接影响去中心化网络生态系统中的几个主要项目:

Protocol Labs(IPFS 和 Filecoin 的创建者)主导了此次迁移。他们的工程团队发现,旧库无法支持 Filecoin 存储证明所需的多密钥身份模型——在该模型中,单个节点可能需要为不同子系统(例如,一个用于 libp2p 传输,另一个用于市场交易)配备多个密钥对。新库的模块化设计使之成为可能。

IPFS Desktop(最流行的 IPFS 客户端,下载量超过 100 万)在 v0.25.0 版本中完成了迁移。对于最终用户而言,过渡是无缝的,但开发者必须更新他们的自定义插件和扩展。一些第三方 IPFS 工具,如 `ipfs-cluster` 和 `orbit-db`,最初因 Peer ID 格式不兼容而出现问题,需要协调发布。

Filecoin(当前存储超过 1.5 EiB 数据)在所有节点间通信中使用 libp2p。Filecoin Lotus 实现在 v1.23.0 版本中迁移到了新的 Peer ID 格式。这一点至关重要,因为 Filecoin 的复制证明协议依赖 Peer ID 将存储交易绑定到特定节点。Peer ID 验证中的错误可能导致资金损失或证明无效。

其他受影响的项目:
- Textile Threads(去中心化数据库)—— 在 v2.0 版本中迁移
- Ceramic Network(去中心化数据流)—— 在 v3.1 版本中迁移
- Arweave(永久存储)—— 截至 Q4 仍在使用旧库

更多来自 GitHub

记忆Transformer:用外部记忆检索突破上下文窗口极限标准Transformer架构存在一个根本性局限:其注意力机制被限制在固定大小的上下文窗口内(通常为2K到128K个token)。这迫使模型要么截断长输入,要么依赖隐式的参数记忆——后者对于罕见或远距离模式极不可靠。ICLR 2022上提出TensorFlow 书籍代码仓库:一份值得研读的机器学习历史快照vishwesh5/tensorflow-book GitHub 仓库是 2016 年出版的《TensorFlow for Machine Intelligence》一书的官方配套代码,作者为 Sam Abrahams、Danijar HaRatty:在终端内直接渲染3D图形的GPU加速终端模拟器长期以来,终端模拟器一直是等宽字体和绿底黑字怀旧风格的堡垒,但如今它正经历一场根本性的变革。由开发者 Orhun Parmaksız 创建的开源项目 Ratty(仓库地址:orhun/ratty)引入了一款 GPU 加速的终端,能够在传统文查看来源专题页GitHub 已收录 1767 篇文章

时间归档

May 20261421 篇已发布文章

延伸阅读

go-libp2p:去中心化基础设施的隐形脊梁,GitHub 星标突破 6800作为 libp2p 网络栈的 Go 参考实现,go-libp2p 已悄然成为去中心化网络的连接纽带。凭借 6800 个 GitHub 星标和每日持续的代码提交,这个模块化的 P2P 库支撑着 IPFS、Filecoin 和以太坊 2.0,为记忆Transformer:用外部记忆检索突破上下文窗口极限一项基于PyTorch的全新实现让ICLR 2022提出的记忆Transformer(Memorizing Transformers)落地成为可能。通过近似最近邻搜索引入外部记忆库,模型能够访问远超固定上下文窗口的历史信息,为文档摘要、对话TensorFlow 书籍代码仓库:一份值得研读的机器学习历史快照vishwesh5/tensorflow-book 仓库,作为经典著作《TensorFlow for Machine Intelligence》的配套笔记本集合,已成为数字化石。尽管它停留在 TensorFlow 1.x 时代,但 AINeRatty:在终端内直接渲染3D图形的GPU加速终端模拟器Ratty 是一款基于 GPU 渲染的终端模拟器,它打破了纯文本的桎梏,将 3D 图形直接嵌入终端界面。该项目采用 Rust 语言编写,并利用现代 GPU 管线,实现了低延迟、高帧率的 3D 可视化,为实时数据仪表盘和沉浸式 CLI 工具开

常见问题

GitHub 热点“Libp2p Peer-ID Deprecated: Why Migration to js-libp2p-peer-id Is Critical for P2P Networks”主要讲了什么?

The libp2p project has deprecated the js-peer-id repository (81 stars, low activity) in favor of the actively maintained js-libp2p-peer-id. This JavaScript implementation handles t…

这个 GitHub 项目在“How to migrate from js-peer-id to js-libp2p-peer-id step by step”上为什么会引发关注?

The libp2p identity system is built around the concept of a Peer ID—a multihash-encoded digest of a node's public key. The old js-peer-id library implemented this using a monolithic class that bundled key pair generation…

从“What happens if I don't migrate my IPFS node from deprecated peer-id library”看,这个 GitHub 项目的热度表现如何?

当前相关 GitHub 项目总星标约为 81,近一日增长约为 0,这说明它在开源社区具有较强讨论度和扩散能力。