区块见闻 区块见闻
Ctrl+D收藏区块见闻

ELLO:精通Filecoin:Filecoin 源码之 Hello 协议_Double Helix

作者:

时间:

当调用Filecoin全节点的

start方法启动全节点时,调用hello协议的

New方法,这个方法的处理如下:

生成Hello对象。hello?:=?&Handler{

????host:??????????????h,

????genesis:???????????gen,

????chainSyncCB:???????syncCallback,

????getHeaviestTipSet:?getHeaviestTipSet,

????net:???????????????net,

????commitSha:?????????commitSha,

}

其中host对象为底层libp2提供的Host对象;genesis为创世区块的CID;chainSyncCB为全节点对象的syncCallBack函数,用于从远程节点同步区块;getHeaviestTipSet为porcelain.API对象的ChainHead方法,用于返回区块链头部的tipset;net表示当前的网络环境,比如测试网、正式网;

调用host对象的SetStreamHandler方法,设置自身的handleNewStream方法作为/fil/hello/1.0.0协议的处理器。h.SetStreamHandler(protocol,?hello.handleNewStream)

一鲸鱼投资PEPE在半个月时间内获利67万美元:金色财经报道,据链上分析师余烬监测,一鲸鱼投资PEPE在半个月时间内收获了67万美元的盈利:他在6月27日至7月5日从Binance提出39415亿枚PEPE(约634万美元),成本0.00000161美元。·1小时前他将PEPE全部转入Binance,以现在PEPE每枚0.00000178的价格,他应该实现了67万美元的收益(收益率10%)。[2023/7/14 10:54:47]

当连接建立时,通过后面注册的通知者,从而调用sayHello方法,在这个方法中打开一个hello协议的流,并发送hello消息。

调用Host对象的网络对象的Notify方法,把自身作为被通知者注册到网络对象上。h.Network().Notify((*helloNotify)(hello))

在这一步,通过调用host对象的Network方法,返回底层的swarm对象,然后把hello对象转化为helloNotify对象,最后调用swarm对象的Notify方法,从而当底层的swarm对象有任何事件发生时都会通知helloNotify对象。

在Hello协议中我们只关心建立连接事件,所以helloNotify类型只实现了这个方法,其他方法都为空实现,具体如下:

某鲸鱼地址再次以5万枚USDC买入8400万枚TURBO:5月12日消息, Lookonchain监测数据显示,曾因交易PEPE赚取1450万美元的聪明鲸鱼地址(0x9e037开头)在TURBO价格下跌后,再次以5万枚USDC买入8400万枚TURBO。该地址总共花了103万美元买入14.7亿枚TURBO,平均买入价为0.0006993美元。[2023/5/12 14:59:29]

type?helloNotify?Handler

func?(hn?*helloNotify)?hello()?*Handler?{????return?(*Handler)(hn。

const?helloTimeout?=?time.Second?*?10

func?(hn?*helloNotify)?Connected(n?net.Network,?c?net.Conn)?{????go?func()?{????????ctx,?cancel?:=?context.WithTimeout(context.Background(),?helloTimeout)????????defer?cancel()????????p?:=?c.RemotePeer()????????if?err?:=?hn.hello().sayHello(ctx,?p);?err?!=?nil?{????????????log.Warningf("failed?to?send?hello?handshake?to?peer?%s:?%s",?p,?err)????????}????}(。

数据:鲸鱼通过DeFi流动性挖矿获利颇丰:数据显示,鲸鱼通过DeFi流动性挖矿获利颇丰。Flipside Crypto的数据显示,yCRV库中的一个鲸鱼账户锁定了价值超过9700万美元的yCRV代币,并最终在三周后获利80万美元。另一个鲸鱼账户在同一个库中投资了4060万美元,并且在同一时期内获得了50万美元的利润。同期,第三个鲸鱼账户的存款超过1090万美元,并赚了大约17.7万美元。(cointelegraph)[2020/9/24]

当节点作为客户端,拨号连接到远程对等节点时,底层的swarm对象会调用自身的notifyAll方法,通知所有的Notify对象有连接被打开,即调用所有Notify对象的Connected方法,包括前面我们注册的通知对象。当调用helloNotify对象的Connected方法时,这个方法内部调用自身的hello方法,后者返回自身并强制转化为Handler类型,然后调用它的sayHello方法,对我们当前连接的远程进行打招呼。

与此同时,当远程节点作为服务器,接收到我们发送的连接请求生成连接时,它的swarm对象也会通知它的所有Notify对象,从而也会它的前面注册的通知对象,即调用服务器商的Connected方法,从而调用它的sayHello方法向我们发送它的区块情况;因为第二步中,我们把Hello对象的handleNewStream方法注册为Hello协议的处理器,所以当节点接收到远程节点发送区块情况时,就会调用这个方法进行处理,这个方法又会调用调用全节点的syncCallBack方法进行区块同步处理。

总体上来说,Hello协议通过

sayHello和

handleNewStream开启了区块同步,前者把自身的区块情况发送到远程节点,后者处理远程节点发送的区块情况。

sayHello方法处理如下:

调用Host对象的NewStream,生成一个处理Hello协议的流对象。s,?err?:=?h.host.NewStream(ctx,?p,?protocol)

if?err?!=?nil?{

????return?err

}

defer?s.Close()?//?nolint:?errcheck

调用自身的getOurHelloMessage方法,获取自身区块链顶端的信息。msg?:=?h.getOurHelloMessage()

这个方法内部执行流程如下:

调用自身getHeaviestTipSet方法,获取区块链顶端的信息这个方法是plumbing.API对象ChainHead方法的引用。

使用获取到的区块链信息,生成并返回消息对象Message。

通过流发送区块信息到远程节点。

handleNewStream方法处理如下:

生成消息对象Message,并从流中读取远程对等节点发送过来的内容到消息对象中。var?hello?Message

if?err?:=?cbu.NewMsgReader(s).ReadMsg(&hello);?err?!=?nil?{

????log.Debugf("bad?hello?message?from?peer?%s:?%s",?from,?err)

????helloMsgErrCt.Inc(context.TODO(),?1)

????s.Conn().Close()?//?nolint:?errcheck

????return

}

调用自身的processHelloMessage方法,处理远程节点发送的消息。这个方法代码如下:func?(h?*Handler)?processHelloMessage(from?peer.ID,?msg?*Message)?error?{

????if?!msg.GenesisHash.Equals(h.genesis)?{

????????return?ErrBadGenesis

????}

????if?(h.net?==?"devnet-test"?||?h.net?==?"devnet-user")?&&?msg.CommitSha?!=?h.commitSha?{

????????return?ErrWrongVersion

????}

h.chainSyncCB(from,?msg.HeaviestTipSetCids,?msg.HeaviestTipSetHeight)

return?nil

}

它的处理逻辑比较简单:

首先,检查远程节点发送的创世区块哈希是否自身的创世区块哈希相等。如果不等,直接返回错误。

然后,检查网络类型。

最终,调用自身的chainSyncCB方法,处理远程节点发送的区块信息。这个同步回调方法对象在全节点的启动方法Start中生成。它的主要生成就是根据远程节点发送的区块链最顶层的信息,生成一个types/SortedCidSet对象,然后调用chain/syncer.go中的HandleNewTipset方法来处理远程发送的区块信息。

根据前面处理消息的结果进行不同的处理。switch?err?:=?h.processHelloMessage(from,?&hello);?err?{

case?ErrBadGenesis:

????log.Debugf("genesis?cid:?%s?does?not?match:?%s,?disconnecting?from?peer:?%s",?&hello.GenesisHash,?h.genesis,?from)

????genesisErrCt.Inc(context.TODO(),?1)

????s.Conn().Close()?//?nolint:?errcheck

????return

case?ErrWrongVersion:

????log.Debugf("code?not?at?same?version:?peer?has?version?%s,?daemon?has?version?%s,?disconnecting?from?peer:?%s",?hello.CommitSha,?h.commitSha,?from)

????versionErrCt.Inc(context.TODO(),?1)

????s.Conn().Close()?//?nolint:?errcheck

????return

case?nil:?//?ok,?noop

default:

????log.Error(err)

}???

标签:HELLOELLOHELOTIHELLO价格Hello Art TokenDouble Helixcoti币怎么样

狗狗币价格热门资讯
区块链:上海将在11月22日前完成对虚拟货币交易场所的排摸工作_NEOS币

来源:中国证券报·中证网中国证券报记者独家获悉,上海市金融稳定联席办和人民银行上海总部互金整治办于11月14日联合下发《关于开展虚拟货币交易场所排摸整治的通知》.

比特币:鲸鱼动作频繁,这个新区块竟容纳90万个比特币,与中本聪的比特币持有量相当_BTC

过去一天,比特币鲸鱼活动加剧,区块链上进行了惊人的大笔交易。但是一个特别的区块引人注目。 图片来源:Pixabay一个区块包含了几乎所有比特币的5%在区块高度606,641,在这个10分钟窗口内.

比特币:在量子计算机面前,区块链一钱不值?量子计算机何时能摧毁区块链?_EPE

原创作者:千里眼社区——kangero11月6日下午,华为在深圳总部举行与任正非咖啡对话。当讨论到信息安全问题时,任正非表示,信息安全问题其实永远都是大问题,这和矛与盾一样,只要有矛就有盾.

HELLO:牛熊争霸,50周黄金线操作!11/30行情分析_CON

币价在“50周黄金线”附近多空双杀,BTC贴近50周线往往会形成趋势转折点。这张图是BTC的50周均线,可以看到一旦币价在下周筑底走强,就会形成最重要的牛抬头走势.

CFT:美国CTFC 2019年收缴超13亿美元行政罚款,加密领域“贡献”突出_加密货币是干什么用的

据Cointelegraph11月27日报道,美国商品期货交易委员会在2019财年获得了超过13亿美元的行政处罚,其中包括从加密货币运营商收缴的资金.

DAP:区块链安全月报 | 11月共发生安全事件16起,损失近5,600万美元_CFT价格

来源:PeckShield DApp?生态 11月份共发生5起DApp安全事件,其中EOS生态发生3起,ETH和TRON生态各发生1起.