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

Odin语言:一款值得关注的现代C语言替代者Odin是一款开源编程语言,托管于GitHub上的odin-lang/odin仓库,星标数已超过10,900,单日增长达424颗,反映出社区关注度的急剧攀升。该语言由Ginger Bill创建,定位为C语言的现代替代方案,优先追求高性能、可Distilabel:架起研究与生产桥梁的合成数据管道Distilabel 由 Argilla 团队开发,是一个用于构建快速、可靠且可扩展的合成数据生成与 AI 反馈管道的 Python 框架。它将来自同行评审论文的方法论(如 Self-Instruct、UltraFeedback 和 Con开源SEO工具Open SEO横空出世,免费自托管挑战Ahrefs与Semrush垄断Open SEO,一个在GitHub上全新发布的开源项目,通过将自己定位为商业SEO巨头Semrush和Ahrefs的免费、自托管替代方案,迅速积累了超过3600个星标。该工具提供核心功能,包括关键词研究、反向链接分析、网站审计和竞争对手追查看来源专题页GitHub 已收录 3133 篇文章

时间归档

May 20263028 篇已发布文章

延伸阅读

Powergate悄然退场:Filecoin分层存储API的兴衰启示录Textile推出的Powergate,作为连接IPFS热存储与Filecoin冷存储的多层存储API,如今正式进入维护模式。本文深入剖析这一明星项目为何停滞不前,其技术遗产何在,以及它对去中心化存储生态的未来走向释放了哪些关键信号。go-libp2p:去中心化基础设施的隐形脊梁,GitHub 星标突破 6800作为 libp2p 网络栈的 Go 参考实现,go-libp2p 已悄然成为去中心化网络的连接纽带。凭借 6800 个 GitHub 星标和每日持续的代码提交,这个模块化的 P2P 库支撑着 IPFS、Filecoin 和以太坊 2.0,为Odin语言:一款值得关注的现代C语言替代者Odin是一门新兴编程语言,旨在以更简洁的语法、内置SIMD支持以及编译期元编程能力取代C语言,同时完全摒弃垃圾回收机制。其GitHub星标数已突破10,900,标志着来自游戏开发者与系统程序员群体的兴趣正在加速升温——他们渴望在掌控底层的Distilabel:架起研究与生产桥梁的合成数据管道Distilabel 是一个开源框架,能直接从经同行评审的研究论文中构建合成数据与 AI 反馈管道。它承诺弥合学术突破与生产级训练数据之间的鸿沟,但其与 Argilla 生态系统的深度绑定引发了关于独立性的质疑。

常见问题

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,这说明它在开源社区具有较强讨论度和扩散能力。