木星链 木星链
Ctrl+D收藏木星链

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

作者:

时间:1900/1/1 0:00:00

当调用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)

美国SEC删除了对冲基金规则中对“数字资产”的第一个正式定义:金色财经报道,周三,美国证券交易委员会 (SEC) 删除了最新的对冲基金规则中对“数字资产”的第一个正式定义。虽然 SEC 最初在其 2022 年改革对冲基金强制披露的提案中包含了该定义,但证券监管机构在委员会批准的最终规则中取消了该定义。该机构包括一个脚注来解释自己,委员会和工作人员正在继续考虑这个术语,目前不会将数字资产作为该规则的一部分。

这一修订引起了业界和美国证券交易委员会五名委员中两名委员的尖锐批评,是最近几项旨在明确将加密纳入现有规则的政策举措之一。SEC 在 2 月份还提出了另一项提案,可能禁止投资顾问将资产存放在加密公司。[2023/5/4 14:41:20]

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

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

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

NFT市场Escher推出限量版NFT系列“Escher Exclusives”,3月30日启动投放:金色财经报道,NFT市场Escher推出限量版NFT系列“Escher Exclusives”,Escher由NFT碎片化协议Tessera创始人Andy Chorlian创立,专注于为“基于版本(edition-based)”的NFT提供支持,新推出的NFT系列将拟于下周在其平台上线。Escher透露该NFT系列将分季推出,首季Seaon 0将于3月30日启动投放,但赠品将会从当地时间本周日开始。[2023/3/26 13:27:39]

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

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)????????}????}(。

Aavegotchi发起关闭GHST联合曲线的提案投票:2月20日消息,Aave生态NFT项目Aavegotchi发起关闭协议Token GHST联合曲线的提案投票。提案认为Aavegotchi DAO经过两年的发展已经具备足够的成熟度和流动性来满足项目发展,因此提议关闭GHST联合曲线,将GHST与DAI脱钩,固定其供应,并使GHST成为自由流通的Token。

此外,曲线中的2000万枚DAI将用于项目的持续开发以及提高流动性,以促进GHST的推广使用。[2023/2/20 12:17:03]

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

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

BSN-DDC基础网络于6月29日的单日交易量首次超越以太坊:7月1日消息,据官方消息,6月29日,BSN-DDC基础网络(DDC网络)自正式运行以来首次单日生产环境应用的日交易数超过以太坊。当日DDC网络24小时达到了交易数974,517次,而以太坊24小时交易数则为938,166次。[2022/7/1 1:43:30]

总体上来说,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()

去中心化交易所Soma.Finance已提交加密货币及NFT相关商标申请:6月1日消息,据美国律师Mike Kondoudis的推文,去中心化交易所Soma.Finance已为其名称和Logo提交加密货币及NFT相关商标申请,范围涵盖NFT+加密收藏品、代币化和基于区块链的资产、交易加密货币/加密资产/NFT/数字代币。[2022/6/1 3:55:46]

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

调用自身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)

}???

标签:ELLOHELHELLOCONCastello CoinHEL币HELLO价格qtcon币总量

币赢交易所热门资讯
区块链:商业银行这样探路“区块链+”

经济日报-中国经济网记者钱箐旎来源:经济日报区块链技术作为金融科技核心技术之一,有着广泛应用场景,发展前途广阔.

1900/1/1 0:00:00
区块链:观点:没有社区的区块链只是一个数据库,没有章程的社区根本不是社区

作者:LaneRettig编者注:原文标题为《区块链项目的灵魂——章程》就像没有社区的区块链实际上只是一个数据库一样,没有章程的社区根本不是一个社区,它只是一群偶然的,没有联系的人恰好在一起.

1900/1/1 0:00:00
数字货币:瑞典央行联手埃森哲,推出电子克朗 e-krona 试点平台

据路透社12月13日报道据,瑞典中央银行计划创建一个名为电子克朗的数字货币试点平台。 瑞典央行副行长:5年内出现电子克朗的可能性很低:瑞典央行副行长史金斯利表示,在5年内出现央行数字货币电子克朗.

1900/1/1 0:00:00
比特币:加密交易所简史:管窥区块链行业最强势组织的演变历程

撰文:NathanielWhittemore&ClayCollins编译:卢江飞来源:链闻ChainNews一、序论加密货币行业鱼龙混杂,有理想主义者,也有机会主义者;有真正的信徒.

1900/1/1 0:00:00
EFI:数据能否作为DeFi中的抵押品?

作者:TrentMcConaghy编译:共享财经Neo摘要本文的问题是:数据可以作为金融资产使用吗?并将代币经济与新兴的数据经济联系起来.

1900/1/1 0:00:00
社会影响力: 数字资产市场结构的独特要素

作者:OKEx???翻译:LisaLiu??来源:加密谷 资本流动、供求变化以及技术面的分析,是数字资产投资者用来做出交易决策的关键指标。但是,在此过程中,社会因素经常被忽略.

1900/1/1 0:00:00