當調用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)
Blur創始人反駁Season 2用戶虧損達5萬枚ETH言論:8月5日消息,PROOF研究主管NFTstats.eth發推稱,Season 2用戶虧損達5萬枚ETH,這些用戶大多為空投Farmer。Blur創始人Pacman回復稱,因涉及NFT轉移、貸款和混合交易,盈虧計算非常復雜,市場上任何數據源在此時不會有準確數據。[2023/8/6 16:20:59]
當連接建立時,通過后面注冊的通知者,從而調用sayHello方法,在這個方法中打開一個hello協議的流,并發送hello消息。
調用Host對象的網絡對象的Notify方法,把自身作為被通知者注冊到網絡對象上。h.Network().Notify((*helloNotify)(hello))
在這一步,通過調用host對象的Network方法,返回底層的swarm對象,然后把hello對象轉化為helloNotify對象,最后調用swarm對象的Notify方法,從而當底層的swarm對象有任何事件發生時都會通知helloNotify對象。
在Hello協議中我們只關心建立連接事件,所以helloNotify類型只實現了這個方法,其他方法都為空實現,具體如下:
type?helloNotify?Handler
三箭資本創始人推出新風投基金3AC Ventures:金色財經報道,6月21日,針對破產加密貨幣實體的索賠交易平臺OPNX交易所宣布了一個名為3AC Ventures的新生態系統合作伙伴。據開發商稱,該合作伙伴關系將投資于在OPNX生態系統中構建的項目,并致力于實現去中心化的未來。在公司的登錄頁面上,顯示3AC Ventures專注于無杠桿的卓越風險調整回報。[2023/6/22 21:53:37]
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)????????}????}(。
數字身份公司Prove Identity和Experian合作進行身份驗證:金色財經報道,信息服務公司Experian和數字身份公司Prove Identity, Inc.(\"Prove\")今天宣布建立全球伙伴關系,通過先進的身份驗證技術促進全球金融包容性。作為合作關系的一部分,Prove將把以下解決方案(可能因地區而異)整合到Experian CrossCore中,這是一個數字身份和欺詐風險緩解平臺,使客戶能夠連接、訪問和協調利用多種數據源、驗證和認證能力以及高級分析的客戶決策和行動。這種合作關系將使Experian CrossCore的客戶能夠使用這些解決方案,這些解決方案可以與Experian的區域欺詐和身份識別產品整合。(businesswire)[2022/10/27 11:46:52]
當節點作為客戶端,撥號連接到遠程對等節點時,底層的swarm對象會調用自身的notifyAll方法,通知所有的Notify對象有連接被打開,即調用所有Notify對象的Connected方法,包括前面我們注冊的通知對象。當調用helloNotify對象的Connected方法時,這個方法內部調用自身的hello方法,后者返回自身并強制轉化為Handler類型,然后調用它的sayHello方法,對我們當前連接的遠程進行打招呼。
與此同時,當遠程節點作為服務器,接收到我們發送的連接請求生成連接時,它的swarm對象也會通知它的所有Notify對象,從而也會它的前面注冊的通知對象,即調用服務器商的Connected方法,從而調用它的sayHello方法向我們發送它的區塊情況;因為第二步中,我們把Hello對象的handleNewStream方法注冊為Hello協議的處理器,所以當節點接收到遠程節點發送區塊情況時,就會調用這個方法進行處理,這個方法又會調用調用全節點的syncCallBack方法進行區塊同步處理。
BitGo與Parallel Finance合作為美國機構推出首個NFT托管平臺:6月22日消息,數字資產安全和流動性提供商 BitGo 周三宣布,已與去中心化借貸和質押協議 Parallel Finance 合作為開發商、零售市場和機構推出了 NFT 熱錢包和托管解決方案。BitGo首席產品官Chen Fang表示,這是第一個可以與熱錢包配對的美國合格托管解決方案。客戶可以通過 BitGo 的新錢包服務與 OpenSea 和 LooksRare 等去中心化市場進行交互,類似于 MetaMask 用戶可以集成他們的錢包的方式。[2022/6/22 1:24:38]
總體上來說,Hello協議通過
sayHello和
handleNewStream開啟了區塊同步,前者把自身的區塊情況發送到遠程節點,后者處理遠程節點發送的區塊情況。
sayHello方法處理如下:
調用Host對象的NewStream,生成一個處理Hello協議的流對象。s,?err?:=?h.host.NewStream(ctx,?p,?protocol)
if?err?!=?nil?{
????return?err
}
Singularity NET 和 Singularity DAO獲得2500萬美元投資承諾:金色財經報道,Singularity NET 和 Singularity DAO已獲得全球投資集團 LDA Capital Limited 的 2500萬美元投資承諾,旨在加速產品路線發展、DeFi AI 工具部署、以及生態系統擴展。Singularity Net 是一個去中心化協議支持套件,允許 AI 以可擴展、可互操作的方式進行協調操作,去年推出的Singularity DAO衍生產品將社區治理引入了 DeFi 協議,該協議提供了人工智能驅動的工具來管理加密貨幣投資組合。(coindesk)[2022/5/20 3:29:09]
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)
}???
作者:31QU 2018年,國內首個正式授牌的區塊鏈產業試驗區在海南生態軟件成立。2019年12月1日,海南國際離岸創新創業試驗區揭牌,近日剛改名的歐科集團作為首批區塊鏈企業入駐.
1900/1/1 0:00:00來源:人民日報?原題《答好區塊鏈發展“應用題”》 作者:何鼎鼎 發展和利用區塊鏈技術,必須堅持守正創新,回歸技術應用的本原對企業、平臺而言,站在這樣一個新風口,樂觀展望容易,難的是守住邊界.
1900/1/1 0:00:00導讀 2019年11月,中國針對數字通證交易所發起新一輪監管浪潮。本周專題將總結國外合規交易所上架通證的特征,探究哪些項目能夠堅持至區塊鏈行業的春天到來.
1900/1/1 0:00:00記者:陳果靜 來源:中國經濟網-《經濟日報》編者注:原標題《期待中新兩國加強數字貨幣領域合作——訪新加坡金融管理局局長孟文能》在新加坡金融科技節與科技創新周活動期間.
1900/1/1 0:00:00本文為量子計算與區塊鏈廣州論壇紀實。2019年11月30日,“量子信息與區塊鏈技術”廣州論壇在華南理工大學成功召開.
1900/1/1 0:00:00文:秦曉峰 出品:Odaily星球日報隨著數字化技術的發展,電子證據的身影在訴訟案件中出現得越來越頻繁。根據《2018年中國電子證據應用白皮書》,全國民事案件超73%涉及電子證據.
1900/1/1 0:00:00