鏈客Talk|YOUChain 首席架構師 何暢彬:YOUChain技術白皮書首次亮相,首席架構師深度解讀

今天「鏈客Talk」邀請YOUChain首席架構師何暢彬來到鏈客直播間,和你們一塊兒探討YOUChain技術白皮書首次亮相,首席架構師深度解讀這一話題。node

何暢彬 :YOUChain 首席構架師。畢業於北京大學,在分佈式計算和高併發系統構架上有紮實的理論功底和豐富的實踐經驗。擅長十億級 PV 的分佈式系統設計實現與調優,是微服務和容器化的深度實踐者。在加盟YOUChain 前,做爲聯合創始人&CTO 創立業內知名的開發者服務平臺 Bugtags,服務數萬企業客戶。在此以前曾於多家國內一線互聯網公司擔任技術專家。算法

 如下是AMA問答內容:編程

 主持人:首先,請何總簡要的介紹一下YOUChain是怎樣的一個項目?安全

何暢彬:YOUChain(有鏈)核心團隊來自螞蟻金服、騰訊、微軟、比特大陸等公司,致力於研發可承載大規模商業應用的公鏈系統及其繁榮生態。服務器

 YOUChain 具備四大技術突破。YPoS(Caravel)  支撐海量節點進行快速共識;超級路由實現了複雜網絡的穿透和高效通信;存儲壓縮讓移動設備成爲節點,實現徹底去中心化。網絡

 主持人:共識投票分爲三類,其中的NextIndex投票是共識失敗時纔會被用到,共識成功時會不會產生額外的通訊消耗,影響整個鏈的運行?數據結構

 何暢彬:驗證者進行NextIndex投票的主要做用在於告訴其它驗證者,若這一輪共識失敗,下一輪共識它將會繼續對某個區塊進行投票。若超過2/3的驗證者對同一個區塊進行了NextIndex投票,就意味着下一輪的區塊提議者不會造成新的區塊並廣播到全網,進而節省了通訊消耗。架構

 若這一輪共識成功,NextIndex投票機制也是有益的。因爲全部的驗證者並不能保證處於同一輪共識的同一階段,有些驗證者頗有多是處於超前狀態,而另外一部分的驗證者處於滯後狀態。超前狀態的驗證者頗有可能將來得及收集到滯後狀態驗證者的Precommit投票,從而超時並斷定共識失敗,開始下一輪的共識。但驗證者只要收集到了足夠多的Prevote投票,到了固定時間就會進行NextIndex投票。因此超前狀態的驗證者頗有可能收集到某個區塊超過2/3的NextIndex投票的。由此一來,超前狀態的驗證者進入下一輪共識後,不會再一次打包交易造成新的區塊並廣播出去,進而減小對帶寬的損耗。併發

 在咱們技術白皮書的複雜度分析章節,經過對比提議一個新區塊須要的通訊消耗,與進行一輪NextIndex投票所須要的通訊消耗,咱們能夠得知,當區塊size超過382kB,使用NextIndex機制就能夠下降通訊消耗。因此,即時共識成功,只要能減小哪怕一個新區塊在全網的廣播,全部驗證者進行一輪的NextIndex投票也是值得的。分佈式

 主持人:共識成功後,並不像其餘共識算法同樣在commit階段會將commit信息廣播到全網,這樣會不會影響到節點的同步?

 何暢彬:首先,驗證者在commit階段將commit信息廣播到全網的目的是爲了通知其餘驗證者,它承認了某個區塊。而咱們的共識中沒有這個環節主要是由於驗證者只有同時收集到某個區塊超過2/3的Prevote投票及Precommit投票,纔會承認該區塊。因此再進行一輪commit投票顯得多餘,由於若其它驗證者也收集到了該區塊超過2/3的Prevote投票及Precommit投票,天然也會承認這個區塊。

 在咱們技術白皮書的安全性證實章節,能夠得知在同一輪共識中,不可能出現兩個區塊會同時擁有超過2/3的Prevote及Precommit投票。因此,若其它驗證者沒有收集到足夠多的投票,而收集到了足夠多投票的驗證者將commit信息廣播出去,有兩種可能。1、commit信息中包含了它所收集到的全部投票信息,其它驗證者天然能夠憑藉這些投票信息,對該區塊達成共識。可是,那會極大的增長整個網絡的通訊消耗。2、commit信息中不包含所收集到的Prevote及Precommit投票信息,則其它收到commit信息的驗證者也沒法根據該信息來作出承認這個區塊的決定。所以,在commit階段廣播commit信息顯得多餘。

 咱們實際測試過程當中發現,單個投票消息包大小不超過300B,大部分節點是能收集到足夠多票數的,只有少數網絡環境很差或嚴重落後的節點纔會出現沒法收集到足夠多票數的狀況。對於這些節點,咱們在共識模塊外有額外的區塊同步機制,來保證節點能快速同步。

 主持人:可否進一步解釋一下,數據同步與存儲技術是如何支持「手機即節點」這個目標的?

 何暢彬:「手機即節點」是咱們努力的方向,手機這種設備,能夠對應於技術白皮書中的「輕節點」的概念。關於輕節點,咱們基於一些基本的約束條件以及功能要求來考慮數據同步與存儲技術對輕節點的支持,即:1. 輕節點的存儲資源比較受限,沒法提供大容量存儲;2. 輕節點加入和離開網絡可能比較頻繁,在其加入網絡的時候,應該要能快速跟上當前的區塊高度;3. 輕節點能夠參與共識投票。

 基於上述考慮,咱們從一開始就考慮了快速同步的問題。

 首先,在區塊數據結構以及共識機制上,就爲快速同步的實現打下了基礎,即經過CHT的概念,將已共識完成的區塊的區塊號與區塊哈希組織起來,造成一棵樹,而後按固定的區塊間隔,將CHT樹根存儲在特定的區塊頭上,而後經過額外的一輪共識投票對其附加了見證。從而新的節點經過跨越式的方式,經過驗證附加見證,就能夠驗證CHT樹根是否可信,進而經過該樹根就能造成對一大批歷史區塊的背書。

 其次,對於較近的一些區塊,可能尚未CHT對其進行背書,可是基於caravel共識的特性,咱們在快速同步區塊時也能夠跳躍式的對區塊的合法性進行驗證。上述兩種機制加以結合,就是咱們快速同步技術的核心,其技術細節以及安全性和性能論證,感興趣的能夠進一步查閱技術白皮書 2.四、2.五、2.6等章節。

 而後,在上述快速同步的基礎上,就能讓輕節點較好地實現輕量級數據存儲。

 首先,對一個新加入網絡的輕節點來講,咱們還提供了輕同步的模式,輕同步跟快速同步原理上同樣,不一樣點在於對較舊的大量歷史區塊,能夠不一樣步其數據以及世界態,而只在同步到最新的若干區塊的時候,纔會同步相關的數據。這就極大地減輕了輕節點對歷史數據的存儲負擔。

 其次,在輕節點參與共識以後,是須要持續存儲數據的,可是隨着區塊的增加,咱們也有按期刪除一些對輕節點來講沒必要要繼續存儲的舊數據,從而輕節點的數據存儲量是遠小於全節點的。

 主持人:大家的快速同步跟以太坊的快速同步有什麼不一樣?

 何暢彬:咱們的同步技術跟以太坊的同步技術有相似的地方,咱們確實也從以太坊學習借鑑了一些思路。可是在一些關鍵機制上來講,咱們有不少首創之處:

 首先,咱們從區塊數據結構以及共識層面就對數據同步問題作了考慮,增長了機制上的支持,咱們的跨越式同步技術,是獨創的。像以太坊以及其餘一些項目,最可能是依賴於可信檢查點的機制實現首次的大跨度追趕(可信檢查點以前的歷史數據就不要了或不檢查了)。

 其次,咱們的快速同步技術,是肯定性的,是基於共識機制可驗證的。而以太坊的快速同步,也有跳躍式驗證的邏輯,但它這個跳躍式驗證的安全性是基於機率的,不是肯定性的。

 最後,以太坊依賴的可信檢查點機制,必定程度上說,是中心化的;而咱們的數據同步技術,是沒有任何中心化控制的,是任何新加入的節點都即時可用的。

 綜上,咱們的數據同步技術具備全新的考慮,可以爲節點快速加入網絡提供很是好的支持。對於一個無許可的區塊鏈網絡來講,任意節點快速加入網絡的能力是很重要的,而咱們很好地提供了這個能力。

 主持人:爲何要使用QUIC代替TCP?

 何暢彬:Caravel是一種交互式的共識協議,因此在共識過程當中會產生大量的數據,佔用比較高的網絡消耗。在實際的公網中,數據包的丟失是不可避免的,TCP協議的核心在於"丟包必須處理",在丟包發生時,鏈接會進行阻塞,從而等待數據包的恢復,這是因爲TCP協議的擁塞控制機制決定的。TCP使用滑動窗口用來動態調整發送速率,而丟包恢復的過程當中,滑動窗口總有停等的時刻,會消耗一個RTT,至關於50~100msg的時間。另外在丟包時會發送速率會減半,因此帶寬利用率也不高。QUIC協議在鏈接上進行了IO多路複用,針對每一個數據傳輸流提供了獨立的丟包恢復機制和滑動窗口機制,若單個傳輸流發生丟包,不會影響其餘的數據傳輸,更好的提升了數據的傳輸效率和帶寬的利用。

 QUIC默認支持TLS加密技術,而且鏈接創建消耗一個RTT優於TCP的TLS加密鏈接創建。

 移動網絡設備一直是咱們的重點,移動網絡中的設置IP和端口會跟隨鏈接的基站進行變化的,TCP協議使用了四元組(源IP,源端口,目的IP,目的端口)來惟一標識鏈接,如四元組中的任何一個元素髮生改變,鏈接都須要從新創建。QUIC在鏈接創建後會生成一個ID來表示鏈接,當節點的IP或端口發生改變後,能夠無需從新創建鏈接,經過ID繼續進行數據通訊,對移動設備的用戶體驗正好。

 主持人:爲何NAT優化會提升鏈接成功率?

何暢彬:咱們每一個人都有一個身份證號碼以識別我的身份,而互聯網上的每臺設備也有一個」身份」—IP來識別,IP是internet Protocol(網際互連協議)的縮寫,是TCP/IP體系中的網絡層協議。咱們熟知的IPv4,誕生在1970年,意思是網際協議的第4版(internet Protocol version 4),是TCP/IP協議使用的數據報傳輸機制。雖然IPv4設計的很好,但隨着互聯網的發現,它的缺點也逐漸暴露了出來,其中最致命的是—數量有限。IPv4地址由點號分隔的四組數字表示,每一個數字都是8位二進制數,所以IPv4總共有32位,表示的IP地址大約爲43億個。在2019年11月26日,全球全部43億IPv4地址都已分配完畢,這意味着沒有更多的IPv4地址可使用了。爲了解決IPv4地址耗盡問題,人們提出並設計了一種新的技術NAT技術來解決此問題,NAT全名網絡地址轉換(Net Address Translate),他的主要做用就是對IP地址進行轉換。NAT一般部署在一個組織的網絡出口位置,經過將內部網絡的IP地址替換爲出口的公網IP地址提供公網可達性和上層協議的鏈接能力。當前NAT的應用很是普遍,遍及網絡的每一個角落,他能夠更好的利用有限的IPv4地址。有研究報告指出70%的P2P用戶位於NAT之內,這個數字意味着大多數的PC設備須要經過NAT鏈接到互聯網中。可是不一樣的NAT設備對IP地址轉換的策略不同,造成了6種不一樣的NAT類型,這就形成了不一樣的設備在經過NAT鏈接到互聯網中後,因其NAT類型不一樣而沒法進行鏈接的問題。所以咱們在節點的發現過程,作了針對NAT類型的優化,在發現過程當中保證節點收到的鄰居節點的NAT類型與其節點自己的NAT類型是匹配的,能夠進行鏈接的。因此節點路由中的鄰居節點均可以進行鏈接,這樣,大大的提升了鏈接的成功率。避免了鏈接資源的浪費。

 主持人:白皮書裏看到有個rewards level的概念,能夠介紹一下嗎?

 何暢彬:rewards level是咱們在獎勵結算中引入的一個概念,意在最大限度的避免產生沒必要要的數據,從而進一步減小對節點存儲的壓力。

 咱們在獎勵計算中會對每種節點各有一個全局的rewards level,對於一個節點,它只須要用本節點歷史結算的level快照,跟當前最新的rewards level比較,就能夠知道這段時間它可得的獎勵並進行結算。

 主持人:節點怠工是怎麼判斷的?有什麼代價?若是服務器要重啓,會被斷定成怠工嗎?

 何暢彬:咱們以節點的活躍程度來判斷衆議節點是否怠工。在一段特定的區塊區間內,若是衆議節點沒有參與足夠的區塊投票,則會被認定爲怠工,並被懲罰必定額度的抵押。

 若是服務器須要維護,能夠發送一個節點離線的操做,待生效後便可關閉服務器了。待維護完畢,要記得從新讓節點上線,這樣才能參與到共識中獲取區塊獎勵。

 主持人:主網什麼時候上線,用戶如何參與挖礦?

 何暢彬:官方主網,將於 2020-05-18 上線;

進入https://node.iyouchain.com/ 節點管理平臺進行抵押能夠成爲節點,或者上線以後,進行鏈上抵押,就能夠進行參與驗證者,分得獎勵。

 主持人:對於開發者招募有何計劃?另外YouChain代碼是否友好,社區開發者須要掌握哪些開發語言?須要專門的培訓嗎?

 何暢彬:咱們將會拿出豐厚的 YOU 做爲獎勵,與開發者共建公鏈生態。

YOUChain 將會完全開源;支持主流語言的 SDK;編程模型與 eth/tron 相似。因此入門成本極低,現有的 DApp 遷移成本也極低。

相關文章
相關標籤/搜索