以太坊源码分析之 P2P网络(一、基础类或类型描述)

本文深入分析以太坊的P2P网络源码,详细讲解P2P在网络通信中的重要角色,以及为何从P2P入手便于理解区块链系统。文章通过类图和流程图的方式,探讨P2P网络的类型、重点环节和整体结构,包括Host、Network、NodeTable和Peer等关键类的解析。
摘要由CSDN通过智能技术生成

区块链特辑 :https://blog.csdn.net/fusan2004/article/details/80879343,欢迎查阅,原创作品,转载请标明!

从这篇开始,我们将会围绕着以太坊和eos的源码对一个区块链平台系统的不同组成展开进一步的源码级分析,之所以选择P2P开始我们的征程,主要有两个原因,一是我们部门目前正在进行内部区块链平台的开发,我本人正好负责了其中p2p及网络部分的研发任务,二是p2p作为区块链底层通信的重要组成部分,对于无论公链还是联盟链都有着极其重要的作用,但是p2p网络和其他组件的耦合度恰恰是最少的,从p2p网络开始,有利于我们熟悉以太坊的代码风格,较少的耦合也使得代码的阅读更加流畅自然。

为了更好更清晰的让大家了解p2p的源码,我本来打算用类图和流程图的方式来介绍,但是从我画出的类图来看,源码很复杂,过多的类图其实并不能很好的诠释代码的细节,因此我计划后面无论介绍哪一部分,可大致分为以下几个部分来说明:

  1. 类型或类说明,这部分单独拎出来介绍主要是因为很庞杂,如果没有一个快速检索的地方,后面介绍代码的时候需要来回查看,降低了效率
  2. 重点环节说明,至少会将主干流程完整的按照代码走一遍,可能涉及很多代码,如果只是说函数名走完流程的话,其实是丧失了很多细节,而且也无法体会作者的创新独到之处
  3. 整体结构分析及总结,这一点与我们分析各个部件来完成整个项目的了解如出一辙,对不同类、不同环节了解清楚之后,会自然而然对整个架构设计有了进一步的了解,由点及面,然后再从宏观角度去审视,可以感受到不一样的风景

我们查看的以太坊源码为c++版本的,关于p2p相关的文件均保存在cpp-ethereum中libp2p目录下,下面我们将会把该目录下重要的类或类型的代码贴到下方,并添加说明,便于大家后期检索。

首先从Common.h文件开始:

using NodeID = h512;  			              // 固定长度hash,h表示哈希,512表示长度

using CapDesc = std::pair<std::string, u256>;         // p2p上层功能描述类型,一个数据对
using CapDescSet = std::set<CapDesc>;                 // 描述集合
using CapDescs = std::vector<CapDesc>;                // 描述列表

enum PacketType                                       // 消息包的类型
{
    HelloPacket = 0,		                      // hello包
    DisconnectPacket,                                 // 断开连接
    PingPacket,                                       // ping
    PongPacket,                                       // pong, ping的回应
    GetPeersPacket,                                   // 获取其他peers的请求
    PeersPacket,                                      // 回复peers
    UserPacket = 0x10                                 // 自定义
};

enum DisconnectReason                                 // 断开连接的原因
{
    DisconnectRequested = 0,                          // 请求断开
    TCPError,                                         // tcp错误
    BadProtocol,                                      // 协议版本不对
    UselessPeer,                                      // 无效peer&
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值