以太幣交易所 以太幣交易所
Ctrl+D 以太幣交易所
ads
首頁 > DOT > Info

精通Filecoin:Filecoin 源碼之 Hello 協議_ELLO

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)

Barry Silbert:目前沒有PoW代幣被美國證券交易委員會起訴:金色財經報道,The Block編輯Frank Chaparro在社交媒體羅列了迄今為止被美國證券交易委員會起訴的代幣列表,包括SOL、ADA、MATIC等。對此灰度母公司DCG創始人兼首席執行官Barry Silbert回應稱,截至目前還沒有PoW(工作量證明)代幣被美國證券交易委員會起訴,包括比特幣、萊特幣、XMR、ETC、ZEC等。盡管加密KOL Cobie指出DASH也遭到起訴,但Barry Silbert回應稱DASH可能存在質押組件。[2023/6/6 21:19:41]

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

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

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

?IMF:加密貨幣不應被授予法定貨幣地位,需要聯合監管框架:金色財經報道,國際貨幣基金組織提出,為維護貨幣主權和穩定,加密資產不應被授予官方貨幣或法定貨幣地位。當地時間2月23日,國際貨幣基金組織(IMF)官網發布新聞稿稱,國際貨幣基金組織執行董事會評估了一份名為《加密資產有效政策要素》的文件,并同意該文件中擬議的政策框架及要素。[2023/2/24 12:27:11]

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

美股開盤,三大股指全線下跌:金色財經報道,美股開盤,三大股指全線下跌,道瓊斯指數2月1日(周三)開盤下跌196.26點,跌幅0.58%,報33889.78點;標普500指數2月1日(周三)開盤下跌10.75點,跌幅0.26%,報4065.85點;納斯達克綜合指數2月1日(周三)開盤下跌11.71點,跌幅0.10%,報11572.84點。[2023/2/1 11:41:31]

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

與此同時,當遠程節點作為服務器,接收到我們發送的連接請求生成連接時,它的swarm對象也會通知它的所有Notify對象,從而也會它的前面注冊的通知對象,即調用服務器商的Connected方法,從而調用它的sayHello方法向我們發送它的區塊情況;因為第二步中,我們把Hello對象的handleNewStream方法注冊為Hello協議的處理器,所以當節點接收到遠程節點發送區塊情況時,就會調用這個方法進行處理,這個方法又會調用調用全節點的syncCallBack方法進行區塊同步處理。

今日恐慌與貪婪指數為29,恐慌程度較昨日有所下降:金色財經報道,今日恐慌與貪婪指數為29(昨日為26),恐慌程度較昨日有所下降,等級仍為恐慌。

注:恐慌指數閾值為0-100,包含指標:波動性(25%)+市場交易量(25%)+社交媒體熱度(15%)+市場調查(15%)+比特幣在整個市場中的比例(10%)+谷歌熱詞分析(10%)。[2022/12/19 21:53:42]

總體上來說,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()

FTX將持續開放ETH交易:9月5日消息,ETH合并期間FTX將持續開放ETH交易。FTX將在下列時間暫停以下Wrappers和Layer 2的充值與提現:

- Arbitrum One ETH: 2022年09月07日 00:00 (UTC)

- Solana (Wormhole) ETH: 2022年09月15日 00:00 (UTC)

- Binance Smart Chain(BSC)ETH:2022年09月15日 00:00 (UTC)[2022/9/5 13:10:02]

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

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

}???

Tags:ELLOHELHELLOCONELLO價格HELIOS價格HELLO價格Lepricon

DOT
巴比特專欄 | 淺析不同類型的通證監管方向_區塊鏈

作者:蒙特卡洛 目前,國家已經把區塊鏈提升到了戰略的高度,各地配合區塊鏈的發展已經成了一件正確的事,無論是從輿論的角度,還是從資本的角度,還是從企業開展區塊鏈業務意愿的角度來看.

1900/1/1 0:00:00
DappReview被收購,幣安獨家回應:DApp是區塊鏈大規模落地的重要賽道_APP

今日,加密貨幣交易所幣安宣布收購北京區塊鏈數據初創公司DappReview,后者收錄并追蹤了建立在13個公有區塊鏈上的近4000個去中心化應用,包括以太坊和EOS等.

1900/1/1 0:00:00
BTC反彈逐步企穩,周線級回調接近尾聲_BTC

作者|哈希派分析團隊 火幣行情播報丨BTC昨晚一路沖高 上升行情持續中:據火幣行情顯示,BTC昨晚繼續小幅放量抬升,最高至13789.73USDT,之后在高位附近持續橫盤.

1900/1/1 0:00:00
IBM全球央行數字貨幣調查:零售型中央銀行數字貨幣——下一個支付邊界_區塊鏈

譯者:浦東改發院金融研究室主任劉斌、趙云德 來源:點滴科技資訊厄瓜多爾乳制品生產商El Orde?o加入基于區塊鏈的IBM試點計劃:金色財經報道.

1900/1/1 0:00:00
2020前瞻:區塊鏈的這5個趨勢不可錯過_區塊鏈

編者注:原文刊于《企業家項目》,這是一個幫助首席信息管和IT領導者解決各種問題的社區。作者為凱文·凱西,作者曾獲得美國商業出版編輯協會頒發的Azbee獎,曾是“小型企業影響力獎”的獲獎者.

1900/1/1 0:00:00
MIT技術評論:光子芯片能“拯救”比特幣嗎?_比特幣

來源:MITTechnologyReview 編譯:頭等倉 加密貨幣對能源的渴求是出了名的,尤其是基于工作量證明的區塊鏈.

1900/1/1 0:00:00
ads