defi/nft/lp/dapp/pil代币合约质押挖矿分红开发源码丨defi/nft/lp/dapp/pil代币合约质押挖矿分红系统开发实现技术原理

简介: Liquid内置了一个该接口的实现——pubsub.ChainPubSub。ChainPubSub是基于应用协议实现的链级数据隔离消息发布及订阅服务。ChainPubSub代码在pubsub包中。

Liquid核心包有为PubSub定义接口,在core/broadcast/pubsub.go中broadcast.PubSub interface。

Liquid内置了一个该接口的实现——pubsub.ChainPubSub。ChainPubSub是基于应用协议实现的链级数据隔离消息发布及订阅服务。ChainPubSub代码在pubsub包中。

ChainPubSub将节点间连接关系划分为FullMsg、MetaDataOnly、FanOut三种状态。当某一节点发布消息时,FullMsg连接会传输全量数据;MetaDataOnly连接会传输元数据;FanOut连接会传输全量数据。元数据可以理解为仅包含消息的原始创建者和消息的编号,不包含详细信息。ChainPubSub使用类Gossip进行辅助传播等。

关于FanOut:假如有这样一个情况,节点A订阅了topicA,但是和A有连接的节点都没有订阅topicA,那A在该topic上发布一个消息,怎么传播到整个网络?答案就是FanOut。FanOut连接会传输全量数据,且允许连接中的一个节点没有订阅对应的topic。如果该节点由未订阅转换成已订阅,FanOut会立刻升级为FullMsg连接。同理处于FullMsg连接的节点如果取消订阅,则会降级为FanOut连接。这种连接状态在保持全量消息传输的同时,还起到了标识节点是否订阅的作用。

一个节点想要加入整个p2p网络,需要和种子节点创建连接,但是种子节点的数量有限,通常需要和其他非种子节点创建连接,才能达到足够的连接数量。如何让一个节点,发现其他节点的网络地址,就是节点发现服务需要实现的功能。

liquid的节点发现服务,其接口定义在core/discovery/discovery.go中discovery.Discovery interface。

Liquid内置了一个该接口的实现——protocoldiscovery.ProtocolBasedDiscovery。ProtocolBasedDiscovery是基于应用协议注册迭代查询实现的节点发现服务。ProtocolBasedDiscovery源代码在discovery/protocoldiscovery包中。

ChainMaker的P2P网络每一个节点即可以是客户端又可以是服务端,如果所有的节点都处于相同的网络环境中,一般不会出现问题。当不同的节点位于不同的内网环境中,节点与节点之间通信可能会遇到阻碍。例如下图所示:

假设node1和node2在内网1中,而node3和node4在内网2中,这时候node1和node2可以通过内网地址连接通信,node3和node4可以通过内网地址连接通信。但是内网1中的node1和node2,想要与内网2中的node3和node4建立P2P网络,就必须知道node3和node4的映射的外网地址,不然根本无法找到node3和node4与其通信。

Relay的功能
Liquid网络提供了中继转发的功能,当两个节点因为网络环境的原因,不能直接连接,可以利用中继节点,对流量数据进行转发,从而达到点对点传输的效果。如下图示:

Relay的基本流程
Relay的原理比较简单,假设中继节点为R,A节点可以拨号连接到中继节点R,B节点可以拨号连接到中继节点R,A节点通过中继节点R,将数据转发到B节点,这样使A和B节点也能做到数据交互。

下面引用libp2p中继流程描述:

phase I: Open a request for a relayed stream (A to R).

A dials a new stream sAR to R using protocol liquid-relay.

A sends a CircuitRelay message with { type: 'HOP', srcPeer: '/p2p/QmA', dstPeer: '/p2p/QmB' } to R through sAR.

R receives stream sAR and reads the message from it.

phase II: Open a stream to be relayed (R to B).

R opens a new stream sRB to B using protocol liquid-relay.

R sends a CircuitRelay message with { type: 'STOP', srcPeer: '/p2p/QmA', dstPeer: '/p2p/QmB' } on sRB.

R sends a CircuitRelay message with { type: 'STATUS', code: 'SUCCESS' } on sAR.

phase III: Streams are piped together, establishing a circuit

B receives stream sRB and reads the message from it

B sends a CircuitRelay message with { type: 'STATUS', code: 'SUCCESS' } on sRB.

B passes stream to NewConnHandler to be handled like any other new incoming connection.

相关文章
|
存储 小程序 前端开发
深入理解微信授权登录流程、用户信息获取和Emoji的存储
深入理解微信授权登录流程、用户信息获取和Emoji的存储
621 0
|
存储 数据采集 缓存
海量数据去重的Hash、bitmap、BloomFilter、分布式一致性hash
海量数据去重的Hash、bitmap、BloomFilter、分布式一致性hash
418 1
node-sass 安装失败 rebuild --verbose --libsass_ext= --libsass_cflags= --libsass_ldflags= --libs
检查一下有没有配置python2.7环境变量 npm install -g node-gyp npm install --global --production windows-build-tools(通过管理员打开) npm i -g node-sass
653 1
|
10月前
|
数据采集 机器学习/深度学习 人工智能
《AI 剧本生成与动画创作解决方案评测报告》
《AI 剧本生成与动画创作解决方案评测报告》
319 8
《AI 剧本生成与动画创作解决方案评测报告》
|
8月前
|
人工智能 安全 物联网
解析 OpenHarmony、HarmonyOS 与 HarmonyOS Next:优雅草卓伊凡的观点
解析 OpenHarmony、HarmonyOS 与 HarmonyOS Next:优雅草卓伊凡的观点
311 4
解析 OpenHarmony、HarmonyOS 与 HarmonyOS Next:优雅草卓伊凡的观点
|
10月前
|
Cloud Native Serverless 数据中心
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
阿里云ACK One:注册集群支持ACS算力——云原生时代的计算新引擎
306 10
|
11月前
|
数据采集 XML API
深入解析BeautifulSoup:从sohu.com视频页面提取关键信息的实战技巧
深入解析BeautifulSoup:从sohu.com视频页面提取关键信息的实战技巧
|
12月前
|
传感器 人工智能 算法
《C 语言赋能:物联网环境下人工智能应用的能耗优化之道》
在物联网与人工智能融合的时代,C 语言凭借其对硬件的精准控制和算法优化能力,成为解决能耗问题的关键工具。本文探讨了 C 语言在物联网设备中的应用,包括硬件资源管理、算法优化、数据预处理、模型精简和通信优化等方面,旨在实现更节能高效的物联网人工智能系统,推动其在智能家居、工业自动化、智能交通等领域的广泛应用。
207 7
|
Web App开发 JavaScript 前端开发
ChatGPT与基于GUI的自动化测试
ChatGPT与基于GUI的自动化测试,chrome浏览器+ cypress +HTML代码需要主机名脚本语言和测试目标的URL。
197 10
ERROR: Could not find a version that satisfies the requirement thop (from versions: none) ERROR: No
这篇文章介绍了在尝试安装`thop`包时遇到的"No matching distribution found"错误,并提供了通过直接从GitHub源码安装`thop`的解决方法。
ERROR: Could not find a version that satisfies the requirement thop (from versions: none) ERROR: No

热门文章

最新文章