宇宙链 宇宙链
Ctrl+D收藏宇宙链
首页 > 瑞波币 > 正文

精通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)

ApeCoin DAO特别委员会和工作组选举提名窗口已关闭:金色财经报道,ApeCoin DAO特别委员会和工作组选举提名窗口已经于美东时间5月21日晚间九点关闭,ApeCoin DAO的第二个选举季即将进行,正如此前披露,ApeCoin DAO正在寻求填补ApeCoin特别委员会的两个席位和新成立的工作组的两个管理职位,申请人将在今年夏天正式竞选这些职位。[2023/5/22 15:19:01]

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

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

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

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

type?helloNotify?Handler

加密基金公司Valkyrie 5月15日提交一份新的比特币期货ETF申请:金色财经报道,加密货币基金公司 Valkyrie 5月15日再次提交了一份新的比特币期货交易所交易基金(ETF)申请,该基金希望在纳斯达克交易,股票代码为“BTFD”。BTFD与已经进行交易的BTF基金不同,这只基金将被杠杆化。

据悉,Valkyrie 的两个以比特币为中心的基金都没有直接接触比特币。他们都使用CME交易的比特币期货。[2023/5/16 15:06:38]

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

Jack Dorsey :为社媒制定免费开放协议才有未来,为此将开放新的资助类别:12月14日消息,Twitter前联合创始人Jack Dorsey近日发文称,“Twitter作为社交媒体和公共对话工具有其自身缺陷,我们应聚焦在使用社交媒体服务的人,并且更快地朝着绝对透明的方向发展。”

此外他表示,为了加速开放互联网和协议的工作,他将开设一个新的资助类别:“开放互联网开发”。重点面向从事社交媒体和私人通信协议、比特币和纯网络移动操作系统的工程团队提供资助。下周将开始提供赠款,从每年给Signal100万美元开始。[2022/12/14 21:43:09]

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

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

HyperPay预以2000万美元收购中非数字银行:据官方消息,数字货币钱包HyperPay正在与中非数字银行洽谈收购事宜,HyperPay将以2000万美元收购中非数字银行,HyperPay全球CEO Gary已正式签约收购协议。Gary表示,本次收购将加速HyperPay钱包在全球市场的合规运营和业务拓展,使HyperPay钱包兼备传统银行和数字货币银行的业务能力,打通Cefi和Defi应用场景。[2022/10/29 11:54:08]

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

比特币矿企Genesis Digital已锁定708MW电力,以进行比特币采矿:金色财经报道,比特币矿企Genesis Digital Assets在周三的一份新闻稿中称,今年前六个月,该公司锁定了708兆瓦(MW)的电力,以进行比特币采矿。

这些电力容量分布在德克萨斯州西部以及北卡罗来纳州和南卡罗来纳州的站点。这家总部位于纽约的公司没有具体说明不同站点处于什么开发阶段或何时准备好开始运营。据悉,比特币挖矿站点可能需要几个月才能完成。

根据该公司的网站,该公司已经在瑞典签订了100MW的合同,在德克萨斯州签订了300MW的合同,在南卡罗来纳州签订了金额未透露的合同。(CoinDesk)[2022/8/11 12:19:10]

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

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

}???

标签:HELELLOHELLOCONSHEL币Doge Yellow CoinICHELLO Music TechnologyConvex CRV

瑞波币热门资讯
盘点:2019年最活跃的10支加密货币投资基金

根据Pitchbook的数据,盘点2019年在加密货币及区块链领域最活跃的10支基金。 作者:RYANTODD https://www.theblockcrypto.com/genesis/48382/mapping-out-the-.

1900/1/1 0:00:00
观点:为什么说“区块链不是比特币”类似在1800年代说“蒸汽机不是铁路”?

前言:比特币之所以起作用是因为它运用了一系列的技术,而不仅仅是区块的链接。本文作者认为仅有区块的链接并不能产生有效作用,要想有真正的影响,需要有一系列的技术组合起来才能发生作用.

1900/1/1 0:00:00
Telegram辩护被否,争取的“额外”6个月是否足够?

作者:LornaQ 来源:财经网链上财经 审理SEC起诉Telegram发行非法证券案件的美国纽约南区地方法院法官P.KevinCastel,决定保留SEC的动议,否决Telegram提出的“SEC的起诉违反不明确无效原则”的辩护.

1900/1/1 0:00:00
新加坡金融业为何能够突破科技孤岛?

文|新加坡国立大学客座教授与李白金融学院院长白士泮转自:新加坡主流华文报章--联合早报新加坡金融管理局对金融业倾向于平衡与原则监管,创造了一个开放、包容、稳定的金融环境,其金融科技创新发展是全球领先者之一.

1900/1/1 0:00:00
当60%的人都是亏的时候,比特币才会涨

作者:CoinMetrics团队以及KevinLu原文:CoinMetrics?编译:Odaily星球日报秦晓峰 要点: 出现泡沫后,只有当价格下跌到只有约?40%?的比特币持有者拥有「未实现收益」时,持币者才会感到最大的痛苦并投降.

1900/1/1 0:00:00
Coinbase早期产品经理:从 ZCash、Tezos、Melon 学习加密企业治理

原文标题:CryptoCorporateGovernance撰文:LindaXie,区块链投资机构ScalarCapital联合创始人.

1900/1/1 0:00:00