㈠ 加密貨幣-最大供應量
加密貨幣的最大供應量是指將被創建的最大數量的硬幣或代幣。這意味著一旦達到最大供應量,就不會以任何其他方式開采、鑄造或生產任何新硬幣。
通常,最大供應量受到每個數字資產的底層協議定義的限制。因此,新幣的最大供應量和發行量通常是根據項目的源代碼(也定義了許多其他特性和功能)在 創世塊中定義的。
設置穩定的發行率和預定義的最大供應量對於控制加密貨幣的通貨膨脹率很有價值,這可能會導致資產的長期升值。一般來說,當達到最大供應量時,市場上可用的硬幣就會減少。預計這會造成市場稀缺,最終可能導致通貨緊縮(或 0% 的 通貨膨脹率)。
但是,一些加密貨幣沒有預定義的最大供應量,這意味著它們可以連續開采或鑄造。 以太坊是沒有預定最大供應量的加密貨幣系統的一個顯著例子。隨著新區塊的產生,以太幣的 供應量不斷增加。
如前所述,最大供應量的計算包括所有已經生產(或開采)的硬幣以及尚未發行的硬幣(未來)。另一方面, 總供應量僅包括已經生產的硬幣減去銷毀的單位,例如,在 硬幣燃燒事件中。
㈡ 死磕以太坊源碼分析之Fetcher同步
區塊數據同步分為被動同步和主動同步,Fetcher負責被動同步,主要任務包括接收新區塊廣播並進行同步。新產生的區塊通過NewBlockHashesMsg 和 NewBlockMsg 進行傳播,Fetcher對象通過接收這些消息發現新的區塊信息。Fetcher在內部將同步過程分為幾個階段,並為每個階段設置狀態欄位,用於記錄階段數據。首先同步區塊哈希,當接收到哈希時,會將哈希標記在遠程節點上,並在本地資料庫中查找是否存在該哈希,若不存在,則放入unknown列表,之後通過channel通知本地fetcher模塊請求該區塊的header和body。fetcher模塊根據接收的header和body狀態,在fetching和completing列表中進行管理。當確認fetching和completing列表中不存在指定區塊哈希時,將哈希放入到announced列表,並准備拉取header和body。fetcher模塊通過fetchTimer周期性地從announced列表中選擇區塊哈希,進行header的拉取。拉取header時,選擇要下載的區塊,從announced轉移到fetching中,並發送下載請求。header請求由遠程節點通過GetBlockHeadersMsg處理,並返回給本地節點。header處理包括過濾和通知downloader對象。header過濾主要步驟涉及校驗、過濾與本地資料庫的不匹配塊以及同步演算法的header等。過濾後的header放入complete或incomplete列表。body同步的過程涉及從complete列表中選擇哈希,進行同步body。body請求通過p.RequestBodies發送GetBlockBodiesMsg消息,並在downloader對象中處理。body過濾主要涉及過濾和同步邏輯,最終導入完整塊到資料庫。同步區塊哈希和區塊的整個流程涉及復雜的機制和邏輯,包括DOS攻擊的防範、區塊高度的限制、header和body的同步等,最終目標是確保本地區塊鏈與遠程節點保持同步狀態。
㈢ 區塊鏈源碼怎麼搭建(什麼叫區塊鏈開源代碼)
如何搭建自己的區塊鏈第一部分:從0到1建立自己的區塊鏈目錄:
1.1從模仿開始,初識區塊鏈
1.2區塊鏈的基礎:共識機制剖析
1.3共識機制的設計原理和設計方法
1.4如何快速克隆一條區塊鏈
1.5如何把比特幣變成自己的私鏈–分叉比特幣
1.6如何把以太坊變成自己的私鏈–分叉以太坊
1.7如何把Ripple變成自己的私鏈–分叉ripple
1.8如何把stellar變成自己的私鏈–分叉stellar1.9如何搭建一個礦池,並挖出自己的創始區塊
1.10如何開發自己的區塊鏈錢包(Windows和MAC)1.11如何開發自己的區塊鏈錢包(Android和IOS)1.12如何開發一個類似於blockchain.info的在線錢包1.13如何增加自己的區塊鏈網路的安全性和魯棒性1.14如何利用coind來處理充值提現業務
1.15如何利用資金池搭建一個混幣服務
1.16如何設計一種新的挖礦演算法
一般情況下都是這個流程,但一般人也是非常難以完成的。區塊鏈成熟的項目有以太坊、DECENT、比特幣等等。
使用AWS區塊鏈模版搭建HyperledgerFabricAWS區塊鏈模版號稱可以在幾分鍾內完成創建並部署區塊鏈網路。
使用AWS區塊鏈模版可以搭建兩種類型的區塊鏈網路:
具體搭建步驟可以參考AWSBlockchainTemplates開發人員指南,裡面有關於搭建Ethereum的詳細步驟,文檔中的「先決條件」設置項是用於搭建Ethereum網路的,對Fabric網路並不適用,所以這里說一下搭建超級賬本的Fabric。
在使用模版快速創建堆棧前,務必要提前設置好的相關內容:
說明:
以上的5個前提條件設置正確了,我們就可以用區塊鏈模版創建Fabric網路了,下面具體說一下畫紅框的比較難的兩個配置:
設置步驟:
點擊右下角的「ReviewPolicy」,設置這個許可權策略文件的名稱(myFabricPolicy)和描述(...),最後點擊「CreatePolicy」:
設置如下:
AWS控制台——服務——VPC——在VPC控制面板中點擊藍色的按鈕「LaunchVPCWizard」,選擇帶有單個公有子網的VPC:
設置VPC名稱、子網名稱,其他值為默認值。
在AWSBlockchainTemplates開發人員指南的HyperledgerFabric部分點擊啟動鏈接:
設置參考如下:
創建之後,喝一杯咖啡??等一會兒...
等狀態顯示為「CREATE_COMPLETE」就OKK了。???
2.創建區塊鏈並創建創世區塊不難發現,這個區塊鏈就是保存由若干個區塊組成的數組
此函數創建一個區塊鏈,並將創世區塊添加到這個鏈中。返回一個區塊鏈對象
為了更加好玩一點,我們繼續創建一個往區塊鏈中添加區塊的方法
通過main方法往鏈中添加區塊
我們在創世塊後追加了兩個區塊,那麼現在我們運行看下輸出信息
源碼:
區塊鏈網站怎麼搭建
網站早已不再神秘,再也不是什麼高技術活。普通用戶也可以輕松的建立出相對專業的網站。下面向大家簡單介紹一下個人建站的一些流程和注意事項。
一、域名
要想讓人家訪問自己的網站,域名是必不可少的。域名要盡可能的短、盡可能的方便記憶,比如.top域名,當然現在好記的、有特徵的域名已經不多了,這需要你自己進行考慮,只要覺得有一定的規律或便於用戶記憶即可。
二、空間
要建網站,其次必須要有一個空間,即存放網站的地方。對於個人用戶,建議購買虛擬主機。在購買虛擬主機時要看其服務、速度、響應時間等。一般選擇有一定名氣的服務商即可。
註:域名、空間目前國內比較好的服務商像阿里雲、西部數碼、中國數據等都是非常好的選擇。
三、網站程序
網站程序當然是選擇現成的,因為個人沒有必要去從頭開始編制一個網站程序,也沒有那個實力。現在網上有現成的網站管理系統,這類系統還有很多,可以在自己綜合試用的基本上進行選擇。
在選擇網站程序時,還必須考慮到其通用性和二次開發。對於通用性不好、不利於二期開發的,雖然功能強大但不建議選用,因為網站有了一定規模後需要進行個性化功能設計時會很麻煩。另外程序盡量選擇asp(asp.net),PHP、JSP等在國內不是特別流行;在asp和asp.net之間也盡量選用asp.net,畢竟其基於.net架構是發展的潮流。
四、網站設計
選擇好了網站程序後,則需要根據自己的需要進行網站設計。一般來說,如果有專業的美工和程序員進行修改自然最好。不過個人站長可能不一定具備這種條件,可以選擇服務商的智能建站。
如何搭建區塊鏈交易系統首先區塊鏈結合了多種技術,包括計算、經濟學、密碼學等,將這些學科結合起來做為區塊鏈的基底。
其次把區塊鏈與相對應的網路結合,然後運用數學知識將區塊鏈的關系建立。就使區塊鏈成為一個能獨立運作的系統。
區塊鏈交易系統由原來的單個中心系統控制變為靈活的社會化流通,使任何領域的資源都可以在此流通,並提高了工作效率。
區塊鏈數字資產搭建於各個網路平台,這些平台涉及到多個資產領域包括了發行方、交易方、交易所、流通渠道等機構。
㈣ 區塊鏈的項目編碼是什麼(區塊鏈代碼查詢)
區塊鏈一般概念摘要雖然是個前端開發,但是阻擋不了我八卦各種熱門的心。下面簡單匯總下一些學習到的概念性東西。
1、區塊鏈技術隨比特幣誕生,因此先了解比特幣概念
2、比特幣是什麼
(1)、基於分布式網路的數字貨幣
3、比特系統運行原理
(1)、所有節點都會保存完整賬本
(2)、賬本保持一致性
4、區塊鏈記賬原理
hash函數在區塊鏈技術中有廣泛的運用
(1)、哈希函數hash:任何信息hash後會得到一個簡短的摘要信息
(2)、hash特點:簡化信息、標識信息、隱匿信息、驗證信息
(3)、區塊鏈記賬會把時間節點的賬單信息hash,構成一個區塊
(4)、比特幣系統約10分鍾記賬一次,即每個區塊生成的時間間隔大約10分鍾
(5)、記錄下一個賬單時,會把上一個區塊的hash值和當前賬單的信息一起作為原始信息進行hash
(6)、每個區塊都包含了之前區塊的信息,這些區塊組合成了區塊鏈
5、比特幣的所有權-非對稱加密應用
比特幣系統使用了橢圓曲線簽名演算法,演算法的私鑰由32個位元組隨機數組成,通過私鑰可以計算出公鑰,公鑰經過一序列哈希演算法和編碼演算法得到比特幣地址,地址也可以理解為公鑰的摘要。
(1)、轉賬是把比特幣從一個地址轉移到另一個地址
(2)、地址私鑰是非對稱的關系,私鑰經過一系列的運算(其中包含兩次hash),就可以得到地址,但是從地址無法得到私鑰
(3)、轉賬成功後廣播其他節點,其他節點驗證成功後再轉發到相鄰的節點,廣播的信息包含了原始的信息和簽名信息
(4)、驗證,其他節點驗證簽名信息是不是付款方用私鑰對交易原始信息簽名產生的,如果是才記錄(再驗證有足夠余額)
6、比特幣如何挖礦
(1)、完成記賬的節點可以獲得系統給予的一定數量比特幣獎勵(這個獎勵過程也就是比特幣的發行過程,因此大家把記賬稱為挖礦)
(2)、一段時間內只有一人可以記賬成功,因此需要收集沒有被收集的原始交易信息,檢查有沒有餘額、正確簽名
(3)、為了提高記賬難度,十分鍾左右只有一人可以記賬,hash結果需要若干0開頭,並且進行hash時引入隨機數變數
(4)、隨著更多礦工的加入,游戲難度越來越大,計算難度加大,電力損耗等加大,國內電力成本低,中國算力占整個網路的一半以上
(5)、網路中只有最快解密的區塊,才會添加到賬本中,其他的節點復制,保證賬本的唯一性。如果有節點作弊,導致整個網路不通過,則會被丟棄再也不會記錄到總賬本中。因此所有節點都會遵守比特幣系統的共同協議。
【關於區塊鏈會延伸到那些領域的思考】:
由以上的概念可以總結出,區塊鏈技術存在這安全性、唯一性、去中心化。
原則上是可以避免部分信息泄露,讓確認方既可以確認你的身份,又無需暴露自己的真是用戶信息等。
目前區塊鏈技術集中被運用再比特幣,我覺得後續更大的意義應該在需要數據私密性、安全性的領域。
【關於區塊鏈目前發展的瓶頸和局限性思考】:
由於每個節點都參與了整個賬本記錄活動,難免造成資源的浪費和損耗。以及加大了每個節點的計算難度,後續的發展和普及需要每個節點的硬體提升。
區塊鏈編號是什麼意思?——區塊鏈編號,即區塊鏈咨詢服務名稱及備案編號。區塊鏈沒有通用協議,多是獨立運作,對區塊鏈進行備案編號,是建立通用協議配套制度的工作之一。
區塊編號作用是什麼用作是一個分類賬本,任何擁有許可權的人都可以分享並對其進行確認。
國家互聯網信息辦公室官網發布公告,披露第一批共197個境內區塊鏈信息服務名稱及備案編號。值得注意的是,「備案編號」並不能看做是給區塊鏈披上合法的「黃馬甲」,應正確認識「備案編號」的作用。
證券日報在文中指出,不可過度解讀「備案編號」的作用。網信辦表示,備案僅是對主體區塊鏈信息服務相關情況的登記,不代表對其機構、產品和服務的認可,並強調,任何機構和個人不得用於任何商業目的。
acm明星幣現在價格,有名氣嗎一.項目簡介:
Actinium(ACM)是一種基於區塊鏈技術的去中心化貨幣,旨在將密碼帶入每個客戶的口袋,每個商店,非常安全且易於使用。Actinium是一種閃電網路支持的加密貨幣,即時交易的手續費近乎為零。同時,具備原子交換功能以及許多其他的第二層解決方案。
二.項目信息(截止2019年9月6日)
·項目編碼:ACM
·總量:84,000,000
·流通量:13,516,241
·演算法:Lyra2z
·區塊時間:2.5分鍾
·區塊獎勵:50ACM
,交易所:CITEX.IO
三.點評
·Zerocash協議使得ACM能夠建立專門的ACM匿名交易,用以混淆每一個交易數據,包括交易金額、接發方識別信息等;
·ACM為了實現支付的便捷性,使用先進的閃電技術。
區塊鏈備案號碼是什麼
備案號是網站是否合法注冊經營的標志,可隨時到國家工業和信息化部網站備案系統上查詢該ICP備案的相關詳細信息。
根據《管理規定》要求,區塊鏈信息服務提供者應當在其對外提供服務的互聯網站、應用程序等顯著位置標明其備案編號。
備案僅是對主體區塊鏈信息服務相關情況的登記,不代表對其機構、產品和服務的認可,任何機構和個人不得用於任何商業目的。網信部門後續將會同各有關部門,依據《管理規定》對備案主體進行監督檢查,並督促未備案主體盡快履行備案義務。請尚未履行備案手續的相關機構和個人盡快申請備案。
第四批備案企業地區分布情況:
據備案清單顯示,第四批境內區塊鏈信息服務備案項目所在企業,有76家屬於北京企業,其餘的大部分企業集中在廣東、浙江、上海。
梳理發現,第四批名單中共有來自22個省直轄市自治區的企業。其中,北京、廣東、上海三家備案企業最多,分別為76家、57家、32家;上海緊隨其後為31家,江蘇以9家位列第五。
【深度知識】以太坊數據序列化RLP編碼/解碼原理RLP(RecursiveLengthPrefix),中文翻譯過來叫遞歸長度前綴編碼,它是以太坊序列化所採用的編碼方式。RLP主要用於以太坊中數據的網路傳輸和持久化存儲。
對象序列化方法有很多種,常見的像JSON編碼,但是JSON有個明顯的缺點:編碼結果比較大。例如有如下的結構:
變數s序列化的結果是{"name":"icattlecoder","sex":"male"},字元串長度35,實際有效數據是icattlecoder和male,共計16個位元組,我們可以看到JSON的序列化時引入了太多的冗餘信息。假設以太坊採用JSON來序列化,那麼本來50GB的區塊鏈可能現在就要100GB,當然實際沒這么簡單。
所以,以太坊需要設計一種結果更小的編碼方法。
RLP編碼的定義只處理兩類數據:一類是字元串(例如位元組數組),一類是列表。字元串指的是一串二進制數據,列表是一個嵌套遞歸的結構,裡面可以包含字元串和列表,例如["cat",["puppy","cow"],"horse",[[]],"pig",[""],"sheep"]就是一個復雜的列表。其他類型的數據需要轉成以上的兩類,轉換的規則不是RLP編碼定義的,可以根據自己的規則轉換,例如struct可以轉成列表,int可以轉成二進制(屬於字元串一類),以太坊中整數都以大端形式存儲。
從RLP編碼的名字可以看出它的特點:一個是遞歸,被編碼的數據是遞歸的結構,編碼演算法也是遞歸進行處理的;二是長度前綴,也就是RLP編碼都帶有一個前綴,這個前綴是跟被編碼數據的長度相關的,從下面的編碼規則中可以看出這一點。
對於值在[0,127]之間的單個位元組,其編碼是其本身。
例1:a的編碼是97。
如果byte數組長度l=55,編碼的結果是數組本身,再加上128+l作為前綴。
例2:空字元串編碼是128,即128=128+0。
例3:abc編碼結果是131979899,其中131=128+len("abc"),979899依次是abc。
如果數組長度大於55,編碼結果第一個是183加數組長度的編碼的長度,然後是數組長度的本身的編碼,最後是byte數組的編碼。
請把上面的規則多讀幾篇,特別是數組長度的編碼的長度。
例4:編碼下面這段字元串:
,IknowitbecauseIpre-designedit
這段字元串共86個位元組,而86的編碼只需要一個位元組,那就是它自己,因此,編碼的結果如下:
510510311010110032105116
其中前三個位元組的計算方式如下:
184=183+1,因為數組長度86編碼後僅佔用一個位元組。
86即數組長度86
84是T的編碼
例5:編碼一個重復1024次"a"的字元串,其結果為:18540979797979797...。
1024按bigendian編碼為0040,省略掉前面的零,長度為2,因此185=183+2。
規則1~3定義了byte數組的編碼方案,下面介紹列表的編碼規則。在此之前,我們先定義列表長度是指子列表編碼後的長度之和。
如果列表長度小於55,編碼結果第一位是192加列表長度的編碼的長度,然後依次連接各子列表的編碼。
注意規則4本身是遞歸定義的。
例6:["abc","def"]的編碼結果是200131979899131100101102。
其中abc的編碼為131979899,def的編碼為131100101102。兩個子字元串的編碼後總長度是8,因此編碼結果第一位計算得出:192+8=200。
如果列表長度超過55,編碼結果第一位是247加列表長度的編碼長度,然後是列表長度本身的編碼,最後依次連接各子列表的編碼。
規則5本身也是遞歸定義的,和規則3相似。
例7:
[",","IknowitbecauseIpre-designedit"]
的編碼結果是:
其中前兩個位元組的計算方式如下:
248=247+1
88=86+2,在規則3的示例中,長度為86,而在此例中,由於有兩個子字元串,每個子字元串本身的長度的編碼各佔1位元組,因此總共佔2位元組。
第3個位元組179依據規則2得出179=128+51
第55個位元組163同樣依據規則2得出163=128+35
例8:最後我們再來看個稍復雜點的例子以加深理解遞歸長度前綴,
["abc",[",","IknowitbecauseIpre-designedit"]]
編碼結果是:
24894131979899
列表第一項字元串abc根據規則2,編碼結果為131979899,長度為4。
列表第二項也是一個列表項:
[",","IknowitbecauseIpre-designedit"]
根據規則5,結果為
長度為90,因此,整個列表的編碼結果第二位是90+4=94,佔用1個位元組,第一位247+1=248
以上5條就是RPL的全部編碼規則。
各語言在具體實現RLP編碼時,首先需要將對像映射成byte數組或列表兩種形式。以go語言編碼struct為例,會將其映射為列表,例如Student這個對象處理成列表["icattlecoder","male"]
如果編碼map類型,可以採用以下列表形式:
[["",""],["",""],["",""]]
解碼時,首先根據編碼結果第一個位元組f的大小,執行以下的規則判斷:
1.如果f∈[0,128),那麼它是一個位元組本身。
2.如果f∈[128,184),那麼它是一個長度不超過55的byte數組,數組的長度為l=f-128
3.如果f∈[184,192),那麼它是一個長度超過55的數組,長度本身的編碼長度ll=f-183,然後從第二個位元組開始讀取長度為ll的bytes,按照BigEndian編碼成整數l,l即為數組的長度。
4.如果f∈(192,247],那麼它是一個編碼後總長度不超過55的列表,列表長度為l=f-192。遞歸使用規則1~4進行解碼。
5.如果f∈(247,256],那麼它是編碼後長度大於55的列表,其長度本身的編碼長度ll=f-247,然後從第二個位元組讀取長度為ll的bytes,按BigEndian編碼成整數l,l即為子列表長度。然後遞歸根據解碼規則進行解碼。
以上解釋了什麼叫遞歸長度前綴編碼,這個名字本身很好的解釋了編碼規則。
(1)以太坊源碼學習—RLP編碼()
(2)簡單分析RLP編碼原理
()
㈤ 以太坊區塊鏈大小多少(以太坊區塊高度是多少)
以太坊公鏈區塊高度根據之前的消息,以太坊區塊高度現在調整高度到4730660!以太坊是一個全新開放的區塊鏈平台,它允許任何人在平台中建立和使用通過區塊鏈技術運行的去中心化應用。
就像比特幣一樣,以太坊不受任何人控制,也不歸任何人所有——它是一個開放源代碼項目,由全球范圍內的很多人共同創建。和比特幣協議有所不同的是,以太坊的設計十分靈活,極具適應性。在以太坊平台上創立新的應用十分簡便,隨著Homestead的發布,任何人都可以安全地使用該平台上的應用。
以太坊是可編程的區塊鏈。它並不是給用戶一系列預先設定好的操作,而是允許用戶按照自己的意願創建復雜的操作。這樣一來,它就可以作為多種類型去中心化區塊鏈應用的平台。
以太坊區塊鏈大小
與比特幣網路不同,以太坊不會明確地按內存限制每個區塊的大小,而是通過區塊GasLimit強制規定每個區塊的大小。
以太坊的區塊GasLimit設置有效的限制了一個區塊中可以打包的交易量。GasLimit參數由以太坊礦工集體決定,即通過投票的方式來動態地增加或降低GasLimit數值。
最近的一次投票是2019年下半年,礦工們群體投票同意將以太坊的區塊GasLimit由原來的800萬Gas單位提高至1000萬,使每個區塊相比之前區塊的大小增加了25%左右,這從理論上提高了以太坊網路的TPS。
什麼是區塊鏈擴容?普通用戶能夠運行節點對於區塊鏈的去中心化至關重要
想像一下凌晨兩點多,你接到了一個緊急呼叫,來自世界另一端幫你運行礦池(質押池)的人。從大約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的塊。存儲也是一樣,提高運行節點的硬體要求並且限制專門的節點運行者並不是解決方案。對於去中心化的區塊鏈而言,普通用戶能夠運行節點並形成一種文化,即運行節點是一種普遍行為,這一點至關重要。
區塊鏈網路擁堵怎麼辦1
什麼是網路擁堵
通常指的是一種網路故障現象:某辦公區域網計算機使用一個帶路由功能的ADSLModem+HUB共享上網。當同一時間上網人數較少的時候網路比較通暢,上網人數多了以後網路會時斷時通,並且HUB的Collision指示燈會閃爍不停。
而在區塊鏈的應用程序中,無論是數字貨幣、智能合約、去中心的交易系統等,它們的網路都是由一個個獨立的節點組成的,發生在節點中的各種操作,比如轉賬交易、合約狀態的變更等,都會以交易事務的數據形式廣播到網路中,通過礦工打包到新的區塊,作為主鏈的一部分而最終確認所有的這些操作。
當節點很多,使用量很多的時候,大量發生的交易就會來不及在正常期望的時間內被打包,因為它們都擁堵在網路中,這些等待的被確認的交易數據通常會維持在節點的內存池中。這個就是區塊鏈的擁堵。
2
網路擁堵是怎麼發生的
目前比特幣區塊大小為1M,每秒大約只能處理7個交易。隨著交易量不斷增長,比特幣網路已經難以迅速地進行轉賬交易確認,區塊鏈網路時常出現擁堵。
區塊鏈網路上最高時有上萬筆交易積壓,某些轉賬交易手續費高達幾十美元,網路擁堵時,交易甚至需要花費好幾天才能被打包。
實際上對於每一類區塊鏈應用來說,這個問題都是存在的,造成不斷有用戶抱怨交易延遲的問題,但也側面證明了應用的廣泛,以及用戶體量的增加。
那麼發生這些問題,我們應該怎麼辦呢?
3
網路擁堵怎麼解決
解決的方法,無非有如下幾種。
第一種擴容,提高處理能力。
第二種截流,限制區塊鏈包的數量。
通過將上述兩種方法進行綜合。
悉尼大學研究者研發了一種新型的區塊鏈系統,在100台機器中能夠實現每秒44萬筆交易的吞吐量,而Visa每秒的交易處理器是5.6萬筆。相比之下,比特幣每秒的交易限制在7筆,以太坊區塊鏈則為20筆。
JadeChain公鏈系統上線後,將徹底解決JADE生態應用中的網路擁堵問題。