Prysm 中 libp2p 的自定义 Golang 实现

Prysm 团队计划开发一个内部的 p2p 通信库,目标是摆脱对第三方 go-libp2p 库的依赖。该项目将选择 libp2p 中 Prysm 使用的必要组件进行重新实现,移除冗余组件,同时保持性能。项目包括需求分析、组件开发、集成测试以及性能优化,最终目标是在 Holesky 网络上进行性能分析,并与官方 libp2p 实现进行对比。

Prysm 中 libp2p 的自定义 golang 实现

Prysm 客户端中 libp2p 协议必要部分的内部实现

动机

该项目旨在开发一个内部的 P2P 通信库,并利用现有 go-libp2p 库中的一些核心组件。go-libP2P 库(及其它语言的变体)几乎被所有共识客户端用于信标链节点之间的 P2P 网络通信。该项目的范围使 Prysm 团队能够独立于任何第三方来构建集成组件。它还允许消除 go-libp2p 中未被主动使用的冗余组件,同时实现相同的性能。实施该项目还包括深入理解 libP2P 和网络层。

项目描述

libP2P 协议有多个组件,例如:Noise、多路复用器、pubsub、ping 等。Prysm 并非使用所有这些组件,因此手头的主要任务或解决方案是:

  • 分离 libP2P 中 Prysm 使用的组件,这涉及明确标记:
    • 可以按原样使用的单个元素
    • 需要重构以仅包含 libP2P 使用的部分的元素
    • 可以完全消除的组件。
    • 感谢 @MaxDav 在他的 notes 中指出了一些需要的更改。
  • 实现一个包含 Prysm 使用的 libP2P 必要组件的包,与 CL 的 P2P 规范 同步。
  • 广泛测试该包。
  • 将 Prysm 中当前的 libP2P 实现切换到新开发的包。
  • 与 Holesky 网络上 Protocol Labs 的实现相比,对内部版本进行性能分析和优化。

规范

我们将遵循 CL 规范 来开发这个新包。

Prysm 中使用的主要组件:

路线图

第 1 个月:设计和初步开发

  • 深入研究共识规范中的 p2p-interface.md。彻底理解理论方面。
  • 开始检查以太坊信标链中使用的现有 libp2p 组件。确定 Prysm 使用哪些组件,哪些是不必要的。
  • 根据所研究的规范,开始设计 Prysm 的新 libp2p。概述架构并确定所有依赖项和所需的外部库。
  • 开始实现自定义 libp2p 的基本框架。专注于集成对 Prysm 功能至关重要的核心组件。

第 2 个月:持续开发

  • 继续构建 libp2p 实现,添加更复杂的功能并与 Prysm 的现有系统集成。
  • 开始对各个组件进行内部测试。使用 Prysm 的端到端开发工具Golang 原则 中的指南来制定编码和测试标准。

第 3 个月:测试和文档

  • 制定和实施广泛的测试计划。单独测试每个组件,然后与 Prysm 信标节点进行集成测试。
  • 开始为新实现编写文档。确保所有特性和修改都得到充分记录。

第 4 个月:部署和性能调整

  • 将新的 libp2p 实现集成到 Prysm 信标节点中,隐藏在功能标志之后。
  • 在 Holesky 测试网上进行全面的性能测试,将新的内部实现与外部 libp2p 版本进行比较。收集和分析性能数据,以发现任何问题或潜在的改进。

可能的挑战

由于 libP2P 已经在多个共识客户端中使用,因此我们的一个关键挑战将是保持与 libP2P 提供的相同性能。此外,该项目涉及对网络和实现以及重构几个组件的深入理解,这可能并不容易。

项目目标

  • 了解信标链中的 libP2P 网络包及其组件。
  • 开发和集成一个简化的包,该包根据 Prysm 对 libP2P 的特定要求进行定制,同时按原样包含一些核心依赖项。
  • 性能分析。

非目标

  • 重新实现可以按原样使用的核心依赖项。

合作者

研究员

导师

资源

相关代码库:

规范:

其他:

  • 原文链接: github.com/eth-protocol-...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
eth-protocol-fellows
eth-protocol-fellows
江湖只有他的大名,没有他的介绍。