買比特幣 買比特幣
Ctrl+D 買比特幣
ads

OTI:精通Filecoin:Filecoin 源碼之 Hello 協議_Heluss

Author:

Time: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)

Edelcoin AG宣布推出穩定支付代幣EDLC:金色財經報道,Edelcoin AG宣布推出Edelcoin (EDLC),Edelcoin是一種由一籃子貴金屬和賤金屬支持的穩定支付代幣,比單一的基于法定或金屬的穩定幣具有更高的穩定性,并且具有與其他數字貨幣相同的多功能性。[2023/7/24 15:54:54]

當連接建立時,通過后面注冊的通知者,從而調用sayHello方法,在這個方法中打開一個hello協議的流,并發送hello消息。

調用Host對象的網絡對象的Notify方法,把自身作為被通知者注冊到網絡對象上。h.Network().Notify((*helloNotify)(hello))

在這一步,通過調用host對象的Network方法,返回底層的swarm對象,然后把hello對象轉化為helloNotify對象,最后調用swarm對象的Notify方法,從而當底層的swarm對象有任何事件發生時都會通知helloNotify對象。

在Hello協議中我們只關心建立連接事件,所以helloNotify類型只實現了這個方法,其他方法都為空實現,具體如下:

type?helloNotify?Handler

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

瑞士政府:聯邦行政機構遭受DDOS攻擊:金色財經報道,瑞士政府表示,聯邦行政機構遭受DDOS攻擊。一些網站和應用程序不可用。[2023/6/12 21:31:27]

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

當節點作為客戶端,撥號連接到遠程對等節點時,底層的swarm對象會調用自身的notifyAll方法,通知所有的Notify對象有連接被打開,即調用所有Notify對象的Connected方法,包括前面我們注冊的通知對象。當調用helloNotify對象的Connected方法時,這個方法內部調用自身的hello方法,后者返回自身并強制轉化為Handler類型,然后調用它的sayHello方法,對我們當前連接的遠程進行打招呼。

Bitfinex宣布即將上線Sui (SUI):據官方公告,Bitfinex宣布即將上線Sui (SUI),很快將公布其充值和交易時間。[2023/5/2 14:38:26]

與此同時,當遠程節點作為服務器,接收到我們發送的連接請求生成連接時,它的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?{

工業元宇宙創新發展三年行動計劃:打造100個工業元宇宙標桿應用:11月4日消息,工業元宇宙協同發展組織、工業和信息化部工業文化發展中心發布《工業元宇宙創新發展三年行動計劃(2022-2025)》。該計劃提出力爭通過3年的努力,以工業元宇宙的技術儲備、標準研制、應用培育和生態構建為目標,通過創新能力提升等四項行動,實現3個 100:形成100個可復制的典型案例,為應用推廣提供標準模板;打造100個工業元宇宙標桿應用,提供元宇宙在工業領域的高水準落地示范;建設100個賦能創新中心,并推動建設一批“工業元宇宙+垂直行業”的工業元宇宙開放平臺。[2022/11/4 12:17:53]

????return?err

}

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

調用自身的getOurHelloMessage方法,獲取自身區塊鏈頂端的信息。msg?:=?h.getOurHelloMessage()

這個方法內部執行流程如下:

調用自身getHeaviestTipSet方法,獲取區塊鏈頂端的信息這個方法是plumbing.API對象ChainHead方法的引用。

使用獲取到的區塊鏈信息,生成并返回消息對象Message。

摩根士丹利:加息50個基點仍然是市場主要預期,但25個基點的可能性很小:金色財經消息,摩根士丹利財富管理首席投資官Lisa Shalett表示,7月CPI較前值高點有所下降,這在一定程度上緩解了美聯儲的壓力,但核心通脹目前仍保持在接近6%的水平附近,這是美聯儲2%目標的三倍,遠遠不是一個可持續的水平。在聯邦基金利率接近核心CPI之前,美聯儲很難放慢加息步伐。加息50個基點仍然是市場主要預期,但25個基點的可能性很小。最近市場的反彈只是一次熊市反彈。政策減緩了經濟增長,而在這樣的背景下,企業利潤將會出現下降。如果標普500指數的利潤在未來12個月內下降10%至15%,那整體情況也不算太糟糕。(金十)[2022/8/14 12:24:25]

通過流發送區塊信息到遠程節點。

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)

}???

Tags:ELLOHELHELLOOTISwelloHelussHello Art TokenOtium Technologies

幣安下載
EOS:昨天Upbit交易所34萬ETH被盜,居然是這個服務器被攻擊了……_UPB

作者:成都鏈安 據行業媒體報道,11月27日下午1時左右,韓國知名加密貨幣交易所UpBit?安全系統遭到破壞,34200個以太幣失竊.

1900/1/1 0:00:00
數字貨幣:加密貨幣的需求可能會飆升!德意志銀行報告《暢想2030》還有何暗示?_區塊鏈

來源:小蔥區塊鏈 德意志銀行報告《暢想2030》表示,隨著通脹加劇,人們對政府支持的貨幣的可持續性越來越懷疑,這可能會促使更多的人購買數字資產。報告對未來10年的24種替代方案進行了分析.

1900/1/1 0:00:00
ELON:Coinbase早期產品經理:從 ZCash、Tezos、Melon 學習加密企業治理_MEL

原文標題:CryptoCorporateGovernance撰文:LindaXie,區塊鏈投資機構ScalarCapital聯合創始人.

1900/1/1 0:00:00
FIG:Figure Technologies獲5800萬美元融資,Morgan Creek、DFG曾參投_區塊鏈

據TheBlock12月2日報道,SoFi創始人兼前CEO邁克·卡尼成立的區塊鏈金融服務初創公司FigureTechnologies,在新一輪融資中籌集了約5900萬美元.

1900/1/1 0:00:00
FABRIC:在Fabric、 Quorum以及Corda之間實現跨鏈,超級賬本的集成框架是這樣的_FAB

當前區塊鏈平臺的數量正在迅速增長,這對于行業而言無疑是一件好事,但區塊鏈之間信息孤島的問題,一直是個未解難題.

1900/1/1 0:00:00
NAR:一文看懂DeFi的下一個潮流:安全與隱私_FLUNAR價格

自2009年以比特幣之名現世以來,區塊鏈技術給無數去中心化基礎設施的應用帶來了啟發。盡管其中許多區塊鏈應用都顯示出巨大的潛力,但其中最值得注意是,去中心化金融已迅速成為資金聚集最雄厚的細分市場之.

1900/1/1 0:00:00
ads