MAP开源协议的网络部分

通用的区块链节点通讯协议

  现有的区块链底层节点发现以及数据传输算法是不互通的,比特币的节点是无法直接和以太坊的节点通过p2p节点发现算法找到彼此并建立TCP连接的。但是,我们的MAP协议需要所有的区块链P2P网络可以相互沟通,因此,我们需要一个统一的标准化的p2p通讯协议。而ProtocolLab提出的libp2p协议正好可以满足我们的需求,libp2p是一个以p2p网络构建的基础模块。它高度抽象了主流的传输协议,使得应用层构建时完全不必关心底层的具体实现最终实现跨环境,跨协议的p2p节点互联。目前ETH2.0,Polkadot等项目都宣布会使用libp2p作为他们的底层算法节点发现算法。我们MAP协议也选取了libp2p算法作为我们的节点发现算法。

Libp2p节点通讯协议

  在过去,开发互联网应用时,只需要关注应用的上层逻辑,而不需要重新实现底层通讯协议(TCP/IP)。Libp2p设计的初衷就是为了支持未来的去中心化网络协议,它的宗旨是让开发者进行去中心化应用时不必关注底层的具体实现。最终实现跨环境,跨协议的设备互联。

  在分布式对等网络,节点间的关系不再是传统的服务器-客户端模型,这要求每个节点既能承担服务器的角色处理响应,也能承担客户端的角色发送请求。在这种复杂的情形之下,我们需要一个可以支持多种通讯协议的通用通讯协议来支持任意的节点之间的互联。该通讯协议即需要支持传统的未加密的TCP/IP通讯,也要支持加密的通讯协议,例如TLS等。该协议既需要包含节点发现,也需要包含建立长短连接,同时还要包含数据加密传输等一系列的功能。而LibP2P正是一个满足了上述所有要求的一个通用协议。

  Libp2p是MAP协议栈工程实现中最为重要的模块,负责MAP数据的网络通信、路由、交换等功能。Libp2p原本是协议实验室(Protocol Lab)IPFS项目的网络层,后来因为其具有颠覆传统互联网架构的能力在2018年的全球IPFS开发者大会的时候被独立成一个单独的项目。Libp2p有潜力成为未来点对点传输应用、区块链和物联网的基础设施。它高度抽象了主流的传输协议,使得上层应用搭建时完全不必关注底层的具体实现,最终实现跨环境、跨协议的设备互联。

  Libp2p可以说是一个异构兼容器,Libp2p能够让你连接各个设备节点的网络通讯库,这些设备上运行着不同的操作系统硬件和网络环境非常复杂。比如在我国的网络环境下,需要多种NAT穿越;还有某些场景下,可能用不了TCP连接,同时也存在协议变迁的情况,只要它们有物理上连接的可能性,那么Libp2p就会帮你完成这个连接。同时,Libp2p还是一个工具库。我们平常在做软件开发的时候,不仅要关注底层(例如:TCP连接),还需要关注连接状态等信息。Libp2p抽象集成了所有开发者基本都需要的一些工具属性功能。这些工具的功能主要包括节点之间的链接复用;节点信息之间的互相交换;指定中继节点;网络地址转换(NAT);分布式哈希表(dht)寻址;消息往返时延(RTT)统计等。

  Libp2p在网络中主要负责的是数据的传递功能,即路由,网络,交换等。Libp2p是一个模块化的网络堆栈,libp2p结合了各种传输和点对点协议。开发人员可以轻松的构建大型的p2p网络。是点对点传输协议的底层。实现去中心化的传输需求。Libp2p从它的实质上说就是链接节点的。任意两个节点不管在哪里,不管处于什么环境,运行什么操作系统不管是不是在NAT之后只要有物理上链接的可能性,libp2p都会帮你完成链接。Libp2p作为MAP的网络层,MAP里面的很多功能就是对libp2p的一个简单的抽象和封装。为了解决NAT节点不可连接问题,libp2p 提供了一个名为 Relay 的协议,该协议允许一个节点充当两个其他节点之间的代理。所有通信都经过加密,并且验证了远程操作的身份,因此代理不能充当中间人。

  基于MAP协议搭建的多链互操作生态之中,会涉及到不同的链的节点之间的节点发现以及节点通讯,因此,所有链的节点之间必须支持一个通用的通讯协议,也即就是说所有的节点处于一个大型的p2p网络之中。与此同时,同时,由于不同链之间的节点的特殊性要求他们处于不同的子网结构之下。因此,生态之中的网络结构应该是多层次,结构化的网络拓扑结构。而Libp2p中支持结构化,非结构化,混合以及中心化的网络拓扑结构,恰好也符合我们的需求。

基于IBLT可逆式布隆查找表的区块链传输协议

  MAP协议的区块传输协议是基于IBLT的,目的是解决区块链传输时交易的二次传输问题,提高整个交易系统的通讯传输效率。

  目前区块链的设计中,交易的收集和区块打包交易是异步的,所有的交易首先会被每个节点独立收集并且收入内存池中。之后如果某个节点成功打包交易进入区块之后,需要广播区块,区块中的交易也会被一同广播。然而,该区块中的大部分交易其实已经存在于大多数节点的交易池中。这就是区块链传输里的交易二次传输问题。为了解决这个问题,比特币和以太坊社区提出了Compact Block方案,也就是传输区块的时候,只传输区块头以及交易的哈希摘要列表,接收节点根据这个哈希摘要列表来比对自己的交易池,如果缺少哪个交易就请求发送节点再次发送缺少的交易的完整内容。因为哈希摘要会比交易的原始数据小很多,因此可以节省大量带宽。但是这个摘要列表是随区块大小线性增长的,因此面对大区快的时候仍然是非常耗费网络资源的。

  而Goodrich提出的新的数据结构Invertible Bloom Lookup Tables可逆式布隆查找表则可以进一步优化区块的传输协议。该数据结构一般用于set reconciliation之上。该数据结构可以确保通讯双方获取对方集合时需要的数据量只与双方集合的差异量相关,与双方集合的总量无关。举个例子,假设节点A打包的区块里包含有1000个交易,而节点B交易池里也有10000个交易,同时区块里只有100个交易是B节点交易池里没有的,那么在传统的传输协议或者Compact Block协议之下,节点A需要发送一个和100000个交易正相关规模的数据(无论是10000个交易还是10000个交易摘要)。然而使用MAP公链的区块链传输协议,我们可以将节点A的100000个交易压缩成一个相当于100个交易左右数量IBLT发送给B节点,B节点可以根据该IBLT以及自己的交易池反解出整个交易列表,获取到整个区块的完整信息/这样的方案可以极大的提高区块的传输效率,获取整个系统的可扩展性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值