Wisdom Public Chain(WDC)公链P2P网络结构设计浅析说明



P2P,也就是peer to peer,翻译过来是点对点的意思,这是一种对等网络结构,我们知道,在网络中的服务系统,很多都是服务器-客户端模式,也就是说某些节点是充当服务器的角色,这些服务器对外公布接口地址以及服务调用方式,而其他的客户端可以通过调用这些接口来完成一些工作,在这种模型下,服务者和调用者并不是一种平等的结构设计,如果服务器出了问题或者拒绝服务,客户端就什么也干不了了,其结构如下:


图1 服务器-客户端


如图1所示,服务器是提供功能服务的唯一的中心,这种结构的风险也是显而易见的,那就是如果这个服务器有任何问题,则网络服务随即停止。与此相对的是点对点的网络结构,在这种网络结构中,没有一个专门的服务器,每个节点都可以是服务器,每个节点也都是客户端,其大概的网络结构如下所示:


图2 点对点结构


如图2所示,每个节点都既充当服务器也充当客户端,在这样的一个网络结构中,没有一个专门的服务器,节点可以任意加入也可以任意退出,不存在单点故障。当然,为此也就有了新的问题:

1)、没有明确的服务器,节点如何互相连成网络

2)、如何确保节点间数据的传递安全

对于第一个问题,涉及到P2P网络中节点发现的机制,其大概是这么一个过程:

1)、网络中设置部分种子节点,用于节点的初始连接

2)、节点对自己已有的邻居节点进行访问,获得更新的其他节点的连接信息

3)、保持一个更新频率,保证自己总是能与部分节点进行连接

通过这三个步骤,基本就可以部署一个P2P网络了,然而,节点之间的互相发现并不只是随机的进行选择连接,还可以有其他结构化的方案,比如:

1)、将本节点与邻居节点之间的IP地址进行一个异或计算,计算出距离,从而将邻居节点根据距离进行一个结构化,组织成比如一棵二叉树,通过这种机制,可以尽可能将离自己近的节点加入到邻居节点中

2)、将邻居节点按照IP地址的哈希值,映射到一个圆环上,这种做法在分布式集群的一致性哈希的场合比较常用,也是一种对节点的管理方式

需要注意的是,因为任何一个节点都不是服务器配置,因此是不能假设邻居节点总是能连接上的,所以需要一个心跳过程来进行连接的保活,还需要注意的是,在P2P网络中,是通过一个数据协议来进行节点身份的鉴别的,只要节点能够提供符合协议的通信数据,就会被认为是一个合法的节点,即便对方是伪装的,这就带来一个问题,怎么确保P2P网络中通信的安全性。

对于区块链系统来说,这里有几个原则,如下:

1)、P2P网络中只能验证数据是否有效处理,而不能验证是否无效

2)、尽量少设计内部触发的合约程序

3)、尽量分布网络中的流量

对于第一点,很好理解,比如WDC公链,如果某条交易事务广播后,由于种种原因,一直没有被打包,这并不一定是公链的问题,而可能是本机节点所在的网络被阻隔或者其他什么原因,此时这条广播出去的事务到底还会不会被处理,什么时候算是撤销,这是不能被验证的,但是我们可以观察若干区块比如观察12个区块,若还是没有被打包,则可以认为本条事务没有被验证为有效,但是不能说一定无效,大家一定要注意这块的理解。

第二点,对于图灵完备的智能合约系统,或者说对于一个可以灵活编程的智能合约系统,一定是不安全的,很简单,因为没有人能够不出错,当合约程序复杂一些的时候,其可能存在的隐患和漏洞,很难被完整的检测出来,而智能合约的虚拟机执行系统,在出错的时候,遇到内部处罚的程序出错,大概率会导致资产损失,因此WDC公链完全避免了这种设计。

第三点,这个也很好理解,当p2p网络系统设计的比较中心化的时候,就不能保证足够的安全性了,比如共识节点只有若干个超级节点,这样的网络系统通常是无法持续运行的,随着时间的推移,很难保证超级节点一直能够很好的持续服务,分布的才是安全的,在资产安全面前,性能和易用性都可以打折扣,唯独安全性不能打折扣。

以上是对P2P网络模块的一些解构,后续会继续进行深度的阐述,让大家理解WDC公链的网络模块设计。


声明:所有在本站发表的文章,本站都具有最终编辑权。本站全部作品均系币力财经原创或来自网络转载,转载目的在于传递更多信息,并不代表本站赞同其观点和对其真实性负责,所产生的纠纷与本站无关。如涉及作品内容、版权和其它问题,请尽快与本站联系,联系邮箱huiccsu@qq.com。