Ⅰ 區塊鏈安全六大問題是什麼
區塊鏈技術現存問題有哪些?1.性能問題
體積問題
區塊鏈對數據備份的要求對存儲空間提出挑戰。區塊鏈要求在一筆交易達成後向全網廣播,系統內每個節點都要進行數據備份。
以比特幣為例,自創世區塊至今的區塊數據已經超過60GB,並且區塊鏈數據量還在不斷增加,這將給比特幣核心客戶端的運行帶來很大挑戰。
處理速度問題
比特幣區塊鏈目前最高每秒處理6.67筆交易,一次確認時間大約為10分鍾,容易造成大量交易的堵塞延遲,可能會限制小額多次交易和對時間敏感度較高交易的應用。
盡管目前有了一些克服手段,但全面解決交易效率的方法仍然亟待發掘。
耗能過高
第三,挖礦過程中的算力並不產生額外的實際社會價值,還會浪費大量的電子資源,隨著比特幣的日益普及,區塊鏈逐漸成為高耗能的資本密集型行業。
2.中心化問題
節點的不平等
第一,理論上,分布式網路中每個節點應當被平等對待,但是為了挖礦獲得回報,各節點可能會增加算力進行硬體競賽,從而導致節點的不平等,破壞區塊鏈記賬權的隨機性。
產業化、規模化挖礦產生了礦池
理論上如果礦池通過共謀掌握51%以上的算力進行系統供給,就可以實現雙重支付,實際過程中盡管其成本遠超收益,但不能否認合謀供給存在的可能性。
3.隱私安全問題
私鑰容易被竊取
第一,目前區塊鏈採用的是非對稱密鑰機制,盡管具有很高的安全性,但是私鑰保存在用戶本地,容易被黑客竊取。
區塊鏈數據的透明性容易造成隱私泄露
公有鏈中每個參與者都可以獲得完整的數據備份,整個系統是公開透明的,比特幣通過隔斷交易地址和持有人真實身份的關聯保護隱私。
當區塊鏈需要承載更多的業務時,節點如何驗證信息執行命令就需要更多的考慮。
4.升級和激勵問題
公有鏈中參與節點的數量龐大
無論是升級還是修復錯誤都無法關閉系統集中進行,可能需要考慮放鬆去中心化的問題。
各個節點之間存在著競爭博弈
要求激勵相容機制的完善,如何使去中心化系統中的自利節點能夠自發開展區塊數據驗證及記賬工作,並設計合理的懲罰函數抑制非理性競爭,是區塊鏈面臨的另一挑戰。
區塊鏈面臨哪些風險需要解決的?雖然在資本和人才湧入的推動下,區塊鏈行業迎來快速發展,但是作為一個新興產業,其安全漏洞頻繁示警的狀況引發了人們對區塊鏈風險的擔憂。
國家信息技術安全研究中心主任俞克群指出,對於隱私暴露、數據泄露、信息篡改、網路詐騙等問題,區塊鏈的出現給人們帶來了很多期望。但區塊鏈的安全問題依然存在諸多的挑戰。
俞克群表示,目前區塊鏈還處在初級階段,存在著密碼演算法的安全性、協議安全性、使用安全性、系統安全性等諸多的挑戰。
國家互聯網應急中心運行部主任嚴寒冰也指出,區塊鏈如果要在全球經濟佔有重要地位,必須首先解決其面臨的安全問題。
嚴寒冰指出,區塊鏈安全問題包含多個方面。比如說傳統的安全問題,包括私鑰的保護,包括應用層軟體傳統的漏洞等。另外,新的協議層面也有一些新的協議帶來的漏洞。
去中心化漏洞平台(DVP)提供的數據也顯示區塊鏈安全問題的嚴峻性。DVP負責人吳家志透露,自7月24日來的一周內,DVP就已經收到白帽子所提供的312個漏洞,涉及175個項目方。其中包括智能合約、知名公鏈,交易所等一系列項目。高危漏洞達122個,占所有漏洞的39.1%,中危漏洞53個,占所有漏洞的17%。
中國信息安全測評中心主任助理李斌分析說,當前區塊鏈分為公有鏈、私有鏈、聯盟鏈三種,無論哪一類在演算法、協議、使用、時限和系統等多個方面都面臨安全挑戰。尤為關鍵的是,目前區塊鏈還面臨的是51%的攻擊問題,即節點通過掌握全網超過51%的算例就有能力成功的篡改和偽造區塊鏈數據。
值得注意的是,除了外部惡意攻擊風險,區塊鏈也面臨其內生風險的威脅。俞克群提醒說,如何圍繞著整個區塊鏈的應用系統的設備、數據、應用、加密、認證以及許可權等等方面構築一個完整的安全應用體系,是各方必須要面臨的重要問題。
吳家志也分析說,作為新興產業,區塊鏈產業的從業人員安全意識較為缺乏,導致目前的區塊鏈相關軟硬體的安全系數不高,存在大量的安全漏洞,此外,整個區塊鏈生態環節眾多,相較之下,相關的安全從業人員力量分散,難以形成合力來解決問題。迎接上述挑戰需要系統化的解決方案。
內容來源中新網
區塊鏈技術的六大核心演算法區塊鏈技術的六大核心演算法
區塊鏈核心演算法一:拜占庭協定
拜占庭的故事大概是這么說的:拜占庭帝國擁有巨大的財富,周圍10個鄰邦垂誕已久,但拜占庭高牆聳立,固若金湯,沒有一個單獨的鄰邦能夠成功入侵。任何單個鄰邦入侵的都會失敗,同時也有可能自身被其他9個鄰邦入侵。拜占庭帝國防禦能力如此之強,至少要有十個鄰邦中的一半以上同時進攻,才有可能攻破。然而,如果其中的一個或者幾個鄰邦本身答應好一起進攻,但實際過程出現背叛,那麼入侵者可能都會被殲滅。於是每一方都小心行事,不敢輕易相信鄰國。這就是拜占庭將軍問題。
在這個分布式網路里:每個將軍都有一份實時與其他將軍同步的消息賬本。賬本里有每個將軍的簽名都是可以驗證身份的。如果有哪些消息不一致,可以知道消息不一致的是哪些將軍。盡管有消息不一致的,只要超過半數同意進攻,少數服從多數,共識達成。
由此,在一個分布式的系統中,盡管有壞人,壞人可以做任意事情(不受protocol限制),比如不響應、發送錯誤信息、對不同節點發送不同決定、不同錯誤節點聯合起來干壞事等等。但是,只要大多數人是好人,就完全有可能去中心化地實現共識
區塊鏈核心演算法二:非對稱加密技術
在上述拜占庭協定中,如果10個將軍中的幾個同時發起消息,勢必會造成系統的混亂,造成各說各的攻擊時間方案,行動難以一致。誰都可以發起進攻的信息,但由誰來發出呢?其實這只要加入一個成本就可以了,即:一段時間內只有一個節點可以傳播信息。當某個節點發出統一進攻的消息後,各個節點收到發起者的消息必須簽名蓋章,確認各自的身份。
在如今看來,非對稱加密技術完全可以解決這個簽名問題。非對稱加密演算法的加密和解密使用不同的兩個密鑰.這兩個密鑰就是我們經常聽到的」公鑰」和」私鑰」。公鑰和私鑰一般成對出現,如果消息使用公鑰加密,那麼需要該公鑰對應的私鑰才能解密;同樣,如果消息使用私鑰加密,那麼需要該私鑰對應的公鑰才能解密。
區塊鏈核心演算法三:容錯問題
我們假設在此網路中,消息可能會丟失、損壞、延遲、重復發送,並且接受的順序與發送的順序不一致。此外,節點的行為可以是任意的:可以隨時加入、退出網路,可以丟棄消息、偽造消息、停止工作等,還可能發生各種人為或非人為的故障。我們的演算法對由共識節點組成的共識系統,提供的容錯能力,這種容錯能力同時包含安全性和可用性,並適用於任何網路環境。
區塊鏈核心演算法四:Paxos演算法(一致性演算法)
Paxos演算法解決的問題是一個分布式系統如何就某個值(決議)達成一致。一個典型的場景是,在一個分布式資料庫系統中,如果各節點的初始狀態一致,每個節點都執行相同的操作序列,那麼他們最後能得到一個一致的狀態。為保證每個節點執行相同的命令序列,需要在每一條指令上執行一個「一致性演算法」以保證每個節點看到的指令一致。一個通用的一致性演算法可以應用在許多場景中,是分布式計算中的重要問題。節點通信存在兩種模型:共享內存和消息傳遞。Paxos演算法就是一種基於消息傳遞模型的一致性演算法。
區塊鏈核心演算法五:共識機制
區塊鏈共識演算法主要是工作量證明和權益證明。拿比特幣來說,其實從技術角度來看可以把PoW看做重復使用的Hashcash,生成工作量證明在概率上來說是一個隨機的過程。開采新的機密貨幣,生成區塊時,必須得到所有參與者的同意,那礦工必須得到區塊中所有數據的PoW工作證明。與此同時礦工還要時時觀察調整這項工作的難度,因為對網路要求是平均每10分鍾生成一個區塊。
區塊鏈核心演算法六:分布式存儲
分布式存儲是一種數據存儲技術,通過網路使用每台機器上的磁碟空間,並將這些分散的存儲資源構成一個虛擬的存儲設備,數據分散的存儲在網路中的各個角落。所以,分布式存儲技術並不是每台電腦都存放完整的數據,而是把數據切割後存放在不同的電腦里。就像存放100個雞蛋,不是放在同一個籃子里,而是分開放在不同的地方,加起來的總和是100個。
區塊鏈使用安全的問題該怎麼解決?這里需要提到區塊鏈的基本系統結構有以下幾種
①網路路由②密碼演算法③腳本系統③共識機制
區塊鏈安全問題的話,主要是由腳本系統來完成的腳本系統,在區塊鏈技術,當中是一個相對來說抽象的概念也是極其重要的一個功能,區塊鏈中,之所以能形成一個有價值的網路依靠的就是腳本系統,就像發動機一樣驅動的,區塊鏈,不斷地進行數據的收發所謂腳本就是指一組成規則再確認系統中某些系統的程序,規則是固定的,比如在比特幣系統中只能進行比特幣發送與接收發送與接收,就是通過比特幣的腳本程序來完成的,系統允許用戶自主編程序規則,好了之後就可以部署,到區塊鏈賬本中,這樣就可以擴展整個區塊鏈系統的功能,如以太坊就是通過這一套自定義的腳本系統,從而實現了智能合約的功能,那麼具體的場景應用或者說實際生活案例比如說訂單物流信息供應鏈信息。
區塊鏈技術安全都需要了解哪些問題
區塊鏈技術相信大家應該都不陌生了,而今天我們就一起來了解一下,在區塊鏈技術安全領域都有哪些問題是需要我們注意的,下面就開始今天的主要內容吧。目前,企業內部進行的大多數區塊鏈項目都是所謂的「帶許可權的私有鏈」。與公有鏈不同的是,私有鏈只能由選定的用戶組訪問,這些用戶有權在該賬本上進行輸入、驗證、記錄和交換數據。當然,對於一個從未獲准加入的「局外人」而言,這樣的網路幾乎不可能被攻陷的。但隨著私有鏈的出現,另一個問題就出現了:為了提高隱私性和安全性,我們真的需要舍棄去中心化嗎?來自《麻省理工科技評論》(MITTechnologyReview)的MikeOrcutt寫道,私有鏈系統「可能會讓它的所有者感到更安全,但它實際上只是給予了他們更多的控制權,這意味著無論其他網路參與者是否同意,他們都可以進行更改。」這類系統需要提出平衡機制,為不同的用戶組授予不同級別的許可權,並對驗證者進行身份檢查,以確保他們是自己所聲稱的那個人。這就是為什麼許多公司都在尋找兩者兼備的方法——公有鏈的去中心化和私有鏈的額外安全性。由IBM、Corda、Ripple等主要廠商開發的聯盟鏈,目前看來似乎是好的安全選擇。簡而言之,它們為企業提供了訪問集中式系統的許可權,且系統本身又具有一定程度的加密可審計性和安全性。其他企業也在考慮如何通過調整公有鏈來滿足他們的安全需求。例如,以太坊區塊鏈已經提供了一些機制,可以利用這些機制來確保網路參與者的隱私,包括環簽名、隱身地址和存儲公有鏈的私有數據。總的來說,區塊鏈領域正在朝著為公有鏈、私有鏈、聯盟鏈網路定義技術粒度隱私層的新解決方案穩步發展。IT培訓發現各家公司正在積極調查和修補已知漏洞,並採用新的機制來確保各方都受到保護,任何惡意的駭客都無法攻破並利用賬本中的漏洞。
區塊鏈安全問題應該怎麼解決?區塊鏈項目(尤其是公有鏈)的一個特點是開源。通過開放源代碼,來提高項目的可信性,也使更多的人可以參與進來。但源代碼的開放也使得攻擊者對於區塊鏈系統的攻擊變得更加容易。近兩年就發生多起黑客攻擊事件,近日就有匿名幣Verge(XVG)再次遭到攻擊,攻擊者鎖定了XVG代碼中的某個漏洞,該漏洞允許惡意礦工在區塊上添加虛假的時間戳,隨後快速挖出新塊,短短的幾個小時內謀取了近價值175萬美元的數字貨幣。雖然隨後攻擊就被成功制止,然而沒人能夠保證未來攻擊者是否會再次出擊。
當然,區塊鏈開發者們也可以採取一些措施
一是使用專業的代碼審計服務,
二是了解安全編碼規范,防患於未然。
密碼演算法的安全性
隨著量子計算機的發展將會給現在使用的密碼體系帶來重大的安全威脅。區塊鏈主要依賴橢圓曲線公鑰加密演算法生成數字簽名來安全地交易,目前最常用的ECDSA、RSA、DSA等在理論上都不能承受量子攻擊,將會存在較大的風險,越來越多的研究人員開始關注能夠抵抗量子攻擊的密碼演算法。
當然,除了改變演算法,還有一個方法可以提升一定的安全性:
參考比特幣對於公鑰地址的處理方式,降低公鑰泄露所帶來的潛在的風險。作為用戶,尤其是比特幣用戶,每次交易後的余額都採用新的地址進行存儲,確保有比特幣資金存儲的地址的公鑰不外泄。
共識機制的安全性
當前的共識機制有工作量證明(ProofofWork,PoW)、權益證明(ProofofStake,PoS)、授權權益證明(DelegatedProofofStake,DPoS)、實用拜占庭容錯(,PBFT)等。
PoW面臨51%攻擊問題。由於PoW依賴於算力,當攻擊者具備算力優勢時,找到新的區塊的概率將會大於其他節點,這時其具備了撤銷已經發生的交易的能力。需要說明的是,即便在這種情況下,攻擊者也只能修改自己的交易而不能修改其他用戶的交易(攻擊者沒有其他用戶的私鑰)。
在PoS中,攻擊者在持有超過51%的Token量時才能夠攻擊成功,這相對於PoW中的51%算力來說,更加困難。
在PBFT中,惡意節點小於總節點的1/3時系統是安全的。總的來說,任何共識機制都有其成立的條件,作為攻擊者,還需要考慮的是,一旦攻擊成功,將會造成該系統的價值歸零,這時攻擊者除了破壞之外,並沒有得到其他有價值的回報。
對於區塊鏈項目的設計者而言,應該了解清楚各個共識機制的優劣,從而選擇出合適的共識機制或者根據場景需要,設計新的共識機制。
智能合約的安全性
智能合約具備運行成本低、人為干預風險小等優勢,但如果智能合約的設計存在問題,將有可能帶來較大的損失。2016年6月,以太坊最大眾籌項目TheDAO被攻擊,黑客獲得超過350萬個以太幣,後來導致以太坊分叉為ETH和ETC。
對此提出的措施有兩個方面:
一是對智能合約進行安全審計,
二是遵循智能合約安全開發原則。
智能合約的安全開發原則有:對可能的錯誤有所准備,確保代碼能夠正確的處理出現的bug和漏洞;謹慎發布智能合約,做好功能測試與安全測試,充分考慮邊界;保持智能合約的簡潔;關注區塊鏈威脅情報,並及時檢查更新;清楚區塊鏈的特性,如謹慎調用外部合約等。
數字錢包的安全性
數字錢包主要存在三方面的安全隱患:第一,設計缺陷。2014年底,某簽報因一個嚴重的隨機數問題(R值重復)造成用戶丟失數百枚數字資產。第二,數字錢包中包含惡意代碼。第三,電腦、手機丟失或損壞導致的丟失資產。
應對措施主要有四個方面:
一是確保私鑰的隨機性;
二是在軟體安裝前進行散列值校驗,確保數字錢包軟體沒有被篡改過;
三是使用冷錢包;
四是對私鑰進行備份。
Ⅱ 區塊鏈最高能長到多少
最長區塊鏈才是正確的區塊鏈?什麼是最長鏈?為什麼是正確的區塊鏈?
比特幣白皮書規定,節點永遠認為最長鏈是正確的區塊鏈,並將持續在它上面延長。所有礦工都在最長鏈上挖礦,有利於區塊鏈賬本的唯一性。如果給你轉賬的比特幣交易不記錄在最長鏈上,你將有可能面臨財產損失。
怎樣算是「最長的區塊鏈」呢?因為全世界的礦工同時在挖礦,有可能同時有2個礦工算出了正確的答案,那麼區塊鏈就會形成分叉,剩下的礦工有可能在其中任意一條分叉上繼續挖礦,延長區塊鏈。
所以我們通常要求在比特幣轉賬被打包之後,還需要經歷6個區塊的確認,確保礦工不會再回到另一條分叉上挖礦時,才算真正的轉賬成功。
【科普】如何選擇區塊鏈的最長鏈本文由幣車HIT(biche.yaofache.com)大V養成計劃支持。
基於逐利,節點就會自發的遵守協議。共識就是數以萬計的獨立節點遵守了簡單的規則(通過非同步交互)自發形成的。
比特幣沒有中心機構,幾乎所有的完整節點都有一份公共總帳本,那麼大家如何達成共識:確認哪一份才是公認權威的總賬本呢?
為什麼要遵守協議
這其實是一個經濟問題,在經濟活動中的每個人都是自私自利的,追求的是利益的最大化,一個節點工作量只有在其他的節點認同其是有效的(打包的新區塊,其他的節點只有驗證通過才會加入到區塊鏈中,並在網路上傳播),才能夠過得收益,?而只有遵守規則才會得到其他的節點認同。?因此,基於逐利,節點就會自發的遵守協議。共識就是數以萬計的獨立節點遵守了簡單的規則(通過非同步交互)自發形成的。
去中心化共識
實際上,比特幣的共識由所有節點的4個獨立過程相互作用而產生:
每個節點(挖礦節點)依據標准對每個交易進行獨立驗證;挖礦節點通過完成工作量證明,將交易記錄獨立打包進新區塊;每個節點獨立的對新區塊進行校驗並組裝進區塊鏈;每個節點對區塊鏈進行獨立選擇,在工作量證明機制下選擇累計工作量最大的區塊鏈;共識最終目的是保證比特幣不停的在工作量最大的區塊鏈上運轉,工作量最大的區塊鏈就是權威的公共總帳本。
最長鏈的選擇
先來一個定義,把累計了最多難度的區塊鏈。在一般情況下,也是包含最多區塊的那個鏈稱為主鏈
每一個(挖礦)節點總是選擇並嘗試延長主鏈。
分叉
當有兩名礦工在幾乎在相同的時間內,各自都算得了工作量證明解,便立即傳播自己的「獲勝」區塊到網路中,先是傳播給鄰近的節點而後傳播到整個網路。每個收到有效區塊的節點都會將其並入並延長區塊鏈。?當這個兩個區塊傳播時,一些節點首先收到#3458A,?一些節點首先收到#3458B,這兩個候選區塊(通常這兩個候選區塊會包含幾乎相同的交易)都是主鏈的延伸,分叉就會產生,這時分叉出有競爭關系的兩條鏈。兩個塊都收到的節點,會把其中有更多工作量的一條會繼續作為主鏈,另一條作為備用鏈保存(保存是因為備用鏈將來可能會超過主鏈難度稱為新主鏈)。
分叉解決
收到#3458A的(挖礦)節點,會立刻以這個區塊為父區塊來產生新的候選區塊,並嘗試尋找這個候選區塊的工作量證明解。同樣地,接受#3458B區塊的節點會以這個區塊為鏈的頂點開始生成新塊,延長這個鏈(下面稱為B鏈)。?當原本以#3458A為父區塊求解的節點在收到#3458B,?#3459B之後,會立刻將B鏈作為主鏈(因為#3458A為頂點的鏈已經不是最長鏈了)繼續挖礦。節點也有可能先收到#3459B,再收到#3458B,收到#3459B時,會被認為是「孤塊「(因為還找不到#3459B的父塊#3458B)保存在孤塊池中,一旦收到父塊#3458B時,節點就會將孤塊從孤塊池中取出,並且連接到它的父區塊,讓它作為區塊鏈的一部分。
比特幣將區塊間隔設計為10分鍾,是在更快速的交易確認和更低的分叉概率間作出的妥協。更短的區塊產生間隔會讓交易確認更快地完成,也會導致更加頻繁地區塊鏈分叉。與之相對地,長的間隔會減少分叉數量,卻會導致更長的確認時間。
什麼是區塊鏈擴容?
普通用戶能夠運行節點對於區塊鏈的去中心化至關重要
想像一下凌晨兩點多,你接到了一個緊急呼叫,來自世界另一端幫你運行礦池(質押池)的人。從大約14分鍾前開始,你的池子和其他幾個人從鏈中分離了出來,而網路仍然維持著79%的算力。根據你的節點,多數鏈的區塊是無效的。這時出現了余額錯誤:區塊似乎錯誤地將450萬枚額外代幣分配給了一個未知地址。
一小時後,你和其他兩個同樣遭遇意外的小礦池參與者、一些區塊瀏覽器和交易所方在一個聊天室中,看見有人貼出了一條推特的鏈接,開頭寫著「宣布新的鏈上可持續協議開發基金」。
到了早上,相關討論廣泛散布在推特以及一個不審查內容的社區論壇上。但那時450萬枚代幣中的很大一部分已經在鏈上轉換為其他資產,並且進行了數十億美元的defi交易。79%的共識節點,以及所有主要的區塊鏈瀏覽器和輕錢包的端點都遵循了這條新鏈。也許新的開發者基金將為某些開發提供資金,或者也許所有這些都被領先的礦池、交易所及其裙帶所吞並。但是無論結果如何,該基金實際上都成為了既成事實,普通用戶無法反抗。
或許還有這么一部主題電影。或許會由MolochDAO或其他組織進行資助。
這種情形會發生在你的區塊鏈中嗎?你所在區塊鏈社區的精英,包括礦池、區塊瀏覽器和託管節點,可能協調得很好,他們很可能都在同一個telegram頻道和微信群中。如果他們真的想出於利益突然對協議規則進行修改,那麼他們可能具備這種能力。以太坊區塊鏈在十小時內完全解決了共識失敗,如果是只有一個客戶端實現的區塊鏈,並且只需要將代碼更改部署到幾十個節點,那麼可以更快地協調客戶端代碼的更改。能夠抵禦這種社會性協作攻擊的唯一可靠方式是「被動防禦」,而這種力量來自去一個中心化的群體:用戶。
想像一下,如果用戶運行區塊鏈的驗證節點(無論是直接驗證還是其他間接技術),並自動拒絕違反協議規則的區塊,即使超過90%的礦工或質押者支持這些區塊,故事會如何發展。
如果每個用戶都運行一個驗證節點,那麼攻擊很快就會失敗:有些礦池和交易所會進行分叉,並且在整個過程中看起來很愚蠢。但是即使只有一些用戶運行驗證節點,攻擊者也無法大獲全勝。相反,攻擊會導致混亂,不同用戶會看到不同的區塊鏈版本。最壞情況下,隨之而來的市場恐慌和可能持續的鏈分叉將大幅減少攻擊者的利潤。對如此曠日持久的沖突進行應對的想法本身就可以阻止大多數攻擊。
Hasu關於這一點的看法:
「我們要明確一件事,我們之所以能夠抵禦惡意的協議更改,是因為擁有用戶驗證區塊鏈的文化,而不是因為PoW或PoS。」
假設你的社區有37個節點運行者,以及80000名被動監聽者,對簽名和區塊頭進行檢查,那麼攻擊者就獲勝了。如果每個人都運行節點的話,攻擊者就會失敗。我們不清楚針對協同攻擊的啟動群體免疫的確切閾值是多少,但有一點是絕對清楚的:好的節點越多,惡意的節點就越少,而且我們所需的數量肯定不止於幾百幾千個。
那麼全節點工作的上限是什麼?
為了使得有盡可能多的用戶能夠運行全節點,我們會將注意力集中在普通消費級硬體上。即使能夠輕松購買到專用硬體,這能夠降低一些全節點的門檻,但事實上對可擴展性的提升並不如我們想像的那般。
全節點處理大量交易的能力主要受限於三個方面:
算力:在保證安全的前提下,我們能劃分多少CPU來運行節點?
帶寬:基於當前的網路連接,一個區塊能包含多少位元組?
存儲:我們能要求用戶使用多大的空間來進行存儲?此外,其讀取速度應該達到多少?(即,HDD足夠嗎?還是說我們需要SSD?)
許多使用「簡單」技術對區塊鏈進行大幅擴容的錯誤看法都源自於對這些數字過於樂觀的估計。我們可以依次來討論這三個因素:
算力
錯誤答案:100%的CPU應該用於區塊驗證
正確答案:約5-10%的CPU可以用於區塊驗證
限制之所以這么低的四個主要原因如下:
我們需要一個安全邊界來覆蓋DoS攻擊的可能性(攻擊者利用代碼弱點製造的交易需要比常規交易更長的處理時間)
節點需要在離線之後能夠與區塊鏈同步。如果我掉線一分鍾,那我應該要能夠在幾秒鍾之內完成同步
運行節點不應該很快地耗盡電池,也不應該拖慢其他應用的運行速度
節點也有其他非區塊生產的工作要進行,大多數是驗證以及對p2p網路中輸入的交易和請求做出響應
請注意,直到最近大多數針對「為什麼只需要5-10%?」這一點的解釋都側重於另一個不同的問題:因為PoW出塊時間不定,驗證區塊需要很長時間,會增加同時創建多個區塊的風險。這個問題有很多修復方法,例如BitcoinNG,或使用PoS權益證明。但這些並沒有解決其他四個問題,因此它們並沒有如許多人所料在可擴展性方面獲得巨大進展。
並行性也不是靈丹妙葯。通常,即使是看似單線程區塊鏈的客戶端也已經並行化了:簽名可以由一個線程驗證,而執行由其他線程完成,並且有一個單獨的線程在後台處理交易池邏輯。而且所有線程的使用率越接近100%,運行節點的能源消耗就越多,針對DoS的安全系數就越低。
帶寬
錯誤答案:如果沒2-3秒都產生10MB的區塊,那麼大多數用戶的網路都大於10MB/秒,他們當然都能處理這些區塊
正確答案:或許我們能在每12秒處理1-5MB的區塊,但這依然很難
如今,我們經常聽到關於互聯網連接可以提供多少帶寬的廣為傳播的統計數據:100Mbps甚至1Gbps的數字很常見。但是由於以下幾個原因,宣稱的帶寬與預期實際帶寬之間存在很大差異:
「Mbps」是指「每秒數百萬bits」;一個bit是一個位元組的1/8,因此我們需要將宣稱的bit數除以8以獲得位元組數。
網路運營商,就像其他公司一樣,經常編造謊言。
總是有多個應用使用同一個網路連接,所以節點無法獨占整個帶寬。
P2P網路不可避免地會引入開銷:節點通常最終會多次下載和重新上傳同一個塊(更不用說交易在被打包進區塊之前還要通過mempool進行廣播)。
當Starkware在2019年進行一項實驗時,他們在交易數據gas成本降低後首次發布了500kB的區塊,一些節點實際上無法處理這種大小的區塊。處理大區塊的能力已經並將持續得到改善。但是無論我們做什麼,我們仍然無法獲取以MB/秒為單位的平均帶寬,說服自己我們可以接受1秒的延遲,並且有能力處理那種大小的區塊。
存儲
錯誤答案:10TB
正確答案:512GB
正如大家可能猜到的,這里的主要論點與其他地方相同:理論與實踐之間的差異。理論上,我們可以在亞馬遜上購買8TB固態驅動(確實需要SSD或NVME;HDD對於區塊鏈狀態存儲來說太慢了)。實際上,我用來寫這篇博文的筆記本電腦有512GB,如果你讓人們去購買硬體,許多人就會變得懶惰(或者他們無法負擔800美元的8TBSSD)並使用中心化服務。即使可以將區塊鏈裝到某個存儲設備上,大量活動也可以快速地耗盡磁碟並迫使你購入新磁碟。
一群區塊鏈協議研究員對每個人的磁碟空間進行了調查。我知道樣本量很小,但仍然...
此外,存儲大小決定了新節點能夠上線並開始參與網路所需的時間。現有節點必須存儲的任何數據都是新節點必須下載的數據。這個初始同步時間(和帶寬)也是用戶能夠運行節點的主要障礙。在寫這篇博文時,同步一個新的geth節點花了我大約15個小時。如果以太坊的使用量增加10倍,那麼同步一個新的geth節點將至少需要一周時間,而且更有可能導致節點的互聯網連接受到限制。這在攻擊期間更為重要,當用戶之前未運行節點時對攻擊做出成功響應需要用戶啟用新節點。
交互效應
此外,這三類成本之間存在交互效應。由於資料庫在內部使用樹結構來存儲和檢索數據,因此從資料庫中獲取數據的成本隨著資料庫大小的對數而增加。事實上,因為頂級(或前幾級)可以緩存在RAM中,所以磁碟訪問成本與資料庫大小成正比,是RAM中緩存數據大小的倍數。
不要從字面上理解這個圖,不同的資料庫以不同的方式工作,通常內存中的部分只是一個單獨(但很大)的層(參見leveldb中使用的LSM樹)。但基本原理是一樣的。
例如,如果緩存為4GB,並且我們假設資料庫的每一層比上一層大4倍,那麼以太坊當前的~64GB狀態將需要~2次訪問。但是如果狀態大小增加4倍到~256GB,那麼這將增加到~3次訪問。因此,gas上限增加4倍實際上可以轉化為區塊驗證時間增加約6倍。這種影響可能會更大:硬碟在已滿狀態下比空閑時需要花更長時間來讀寫。
這對以太坊來說意味著什麼?
現在在以太坊區塊鏈中,運行一個節點對許多用戶來說已經是一項挑戰,盡管至少使用常規硬體仍然是可能的(我寫這篇文章時剛剛在我的筆記本電腦上同步了一個節點!)。因此,我們即將遭遇瓶頸。核心開發者最關心的問題是存儲大小。因此,目前在解決計算和數據瓶頸方面的巨大努力,甚至對共識演算法的改變,都不太可能帶來gaslimit的大幅提升。即使解決了以太坊最大的DoS弱點,也只能將gaslimit提高20%。
對於存儲大小的問題,唯一解決方案是無狀態和狀態逾期。無狀態使得節點群能夠在不維護永久存儲的情況下進行驗證。狀態逾期會使最近未訪問過的狀態失活,用戶需要手動提供證明來更新。這兩條路徑已經研究了很長時間,並且已經開始了關於無狀態的概念驗證實現。這兩項改進相結合可以大大緩解這些擔憂,並為顯著提升gaslimit開辟空間。但即使在實施無狀態和狀態逾期之後,gaslimit也可能只會安全地提升約3倍,直到其他限制開始發揮作用。
另一個可能的中期解決方案使使用ZK-SNARKs來驗證交易。ZK-SNARKs能夠保證普通用戶無需個人存儲狀態或是驗證區塊,即使他們仍然需要下載區塊中的所有數據來抵禦數據不可用攻擊。另外,即使攻擊者不能強行提交無效區塊,但是如果運行一個共識節點的難度過高,依然會有協調審查攻擊的風險。因此,ZK-SNARKs不能無限地提升節點能力,但是仍然能夠對其進行大幅提升(或許是1-2個數量級)。一些區塊鏈在layer1上探索該形式,以太坊則通過layer2協議(也叫ZKrollups)來獲益,例如zksync,Loopring和Starknet。
分片之後又會如何?
分片從根本上解決了上述限制,因為它將區塊鏈上包含的數據與單個節點需要處理和存儲的數據解耦了。節點驗證區塊不是通過親自下載和執行,而是使用先進的數學和密碼學技術來間接驗證區塊。
因此,分片區塊鏈可以安全地擁有非分片區塊鏈無法實現的非常高水平的吞吐量。這確實需要大量的密碼學技術來有效替代樸素完整驗證,以拒絕無效區塊,但這是可以做到的:該理論已經具備了基礎,並且基於草案規范的概念驗證已經在進行中。
以太坊計劃採用二次方分片(quadraticsharding),其中總可擴展性受到以下事實的限制:節點必須能夠同時處理單個分片和信標鏈,而信標鏈必須為每個分片執行一些固定的管理工作。如果分片太大,節點就不能再處理單個分片,如果分片太多,節點就不能再處理信標鏈。這兩個約束的乘積構成了上限。
可以想像,通過三次方分片甚至指數分片,我們可以走得更遠。在這樣的設計中,數據可用性采樣肯定會變得更加復雜,但這是可以實現的。但以太坊並沒有超越二次方,原因在於,從交易分片到交易分片的分片所獲得的額外可擴展性收益實際上無法在其他風險程度可接受的前提下實現。
那麼這些風險是什麼呢?
最低用戶數量
可以想像,只要有一個用戶願意參與,非分片區塊鏈就可以運行。但分片區塊鏈並非如此:單個節點無法處理整條鏈,因此需要足夠的節點以共同處理區塊鏈。如果每個節點可以處理50TPS,而鏈可以處理10000TPS,那麼鏈至少需要200個節點才能存續。如果鏈在任何時候都少於200個節點,那可能會出現節點無法再保持同步,或者節點停止檢測無效區塊,或者還可能會發生許多其他壞事,具體取決於節點軟體的設置。
在實踐中,由於需要冗餘(包括數據可用性采樣),安全的最低數量比簡單的「鏈TPS除以節點TPS」高幾倍,對於上面的例子,我們將其設置位1000個節點。
如果分片區塊鏈的容量增加10倍,則最低用戶數也增加10倍。現在大家可能會問:為什麼我們不從較低的容量開始,當用戶很多時再增加,因為這是我們的實際需要,用戶數量回落再降低容量?
這里有幾個問題:
區塊鏈本身無法可靠地檢測到其上有多少唯一用戶,因此需要某種治理來檢測和設置分片數量。對容量限制的治理很容易成為分裂和沖突的根源。
如果許多用戶突然同時意外掉線怎麼辦?
增加啟動分叉所需的最低用戶數量,使得防禦惡意控制更加艱難。
最低用戶數為1,000,這幾乎可以說是沒問題的。另一方面,最低用戶數設為100萬,這肯定是不行。即使最低用戶數為10,000也可以說開始變得有風險。因此,似乎很難證明超過幾百個分片的分片區塊鏈是合理的。
歷史可檢索性
用戶真正珍視的區塊鏈重要屬性是永久性。當公司破產或是維護該生態系統不再產生利益時,存儲在伺服器上的數字資產將在10年內不再存在。而以太坊上的NFT是永久的。
是的,到2372年人們仍能夠下載並查閱你的加密貓。
但是一旦區塊鏈的容量過高,存儲所有這些數據就會變得更加困難,直到某時出現巨大風險,某些歷史數據最終將……沒人存儲。
要量化這種風險很容易。以區塊鏈的數據容量(MB/sec)為單位,乘以~30得到每年存儲的數據量(TB)。當前的分片計劃的數據容量約為1.3MB/秒,因此約為40TB/年。如果增加10倍,則為400TB/年。如果我們不僅希望可以訪問數據,而且是以一種便捷的方式,我們還需要元數據(例如解壓縮匯總交易),因此每年達到4PB,或十年後達到40PB。InternetArchive(互聯網檔案館)使用50PB。所以這可以說是分片區塊鏈的安全大小上限。
因此,看起來在這兩個維度上,以太坊分片設計實際上已經非常接近合理的最大安全值。常數可以增加一點,但不能增加太多。
結語
嘗試擴容區塊鏈的方法有兩種:基礎的技術改進和簡單地提升參數。首先,提升參數聽起來很有吸引力:如果您是在餐紙上進行數學運算,這就很容易讓自己相信消費級筆記本電腦每秒可以處理數千筆交易,不需要ZK-SNARK、rollups或分片。不幸的是,有很多微妙的理由可以解釋為什麼這種方法是有根本缺陷的。
運行區塊鏈節點的計算機無法使用100%的CPU來驗證區塊鏈;他們需要很大的安全邊際來抵抗意外的DoS攻擊,他們需要備用容量來執行諸如在內存池中處理交易之類的任務,並且用戶不希望在計算機上運行節點的時候無法同時用於任何其他應用。帶寬也會受限:10MB/s的連接並不意味著每秒可以處理10MB的區塊!也許每12秒才能處理1-5MB的塊。存儲也是一樣,提高運行節點的硬體要求並且限制專門的節點運行者並不是解決方案。對於去中心化的區塊鏈而言,普通用戶能夠運行節點並形成一種文化,即運行節點是一種普遍行為,這一點至關重要。