作者:?IgorMandrigin
翻譯:?阿劍
來源:以太坊愛好者
什么是“無狀態以太坊”?
如果您已經了解什么是“無狀態以太坊”以及“區塊見證數據”,可以跳過這一段。
為執行交易及驗證區塊,以太坊網絡的節點需要了解整條區塊鏈的當前狀態——也就是所有賬戶和合約的余額和存儲數據。這些數據一般來說是存儲在DB里面的,在需要用于驗證時才會加載到一棵默克爾樹中。
無狀態以太坊客戶端的工作思路則稍有區別。顧名思義,無狀態客戶端就是不使用硬盤DB來執行區塊。相反,無狀態客戶端依賴于“區塊見證數據”——就是一段特殊的數據,它會跟相應的區塊一起傳播;擁有了這段數據,客戶端就可以重建出一個默克爾子樹,該分支足可用于執行該區塊中的所有交易。
你可以在這篇文章中讀到關于無狀態客戶端的更深入的描述:https://blog.ethereum.org/2019/12/30/eth1x-files-state-of-stateless-ethereum/
當然咯,需要傳播區塊見證數據就意味著無狀態客戶端的網絡要求要比普通節點更高。
-見證數據大小折線圖-
現在人們已經提出了很多降低見證數據規模的思路:使用有效性/計算完整性證明、加入更多的壓縮手段,等等。其中一種辦法是將以太坊的默克爾樹從十六進制轉為二進制。
這就是本文想要探討的問題。
觀點:美聯儲加息周期接近結束,提振加密市場:7月29日消息,隨著全球市場風險偏好的復蘇以及對以太坊網絡升級的樂觀情緒,比特幣和以太坊或迎來自2021年以來表現最好的月份。行情顯示,比特幣7月份上漲了28%,以太坊上漲了72%。
美國經濟放緩正讓投資者認為,美聯儲將在年底前結束加息,并在2023年轉向降低借貸成本,為投機性資產創造更有利的流動性背景。
咨詢公司Venn Link Partners首席執行官Cici Lu表示:“有跡象表明,美聯儲可能正在接近加息周期的結束,這提振了所有風險資產,加密貨幣也從中受益。杠桿頭寸的平倉似乎已經結束,市場可能已經見底。”
加密貨幣正試圖從今年的暴跌中恢復過來,該暴跌導致MVIS CryptoCompare數字資產100指數下跌超過50%。而以太坊區塊鏈也將轉向更節能的權益證明系統。
Fundstrat技術策略主管Mark Newton表示,未來幾天,以太坊可能會漲至1915至2000美元,并稱以太坊在短期內看起來比比特幣更有吸引力。(彭博社)[2022/7/29 2:45:57]
為什么要使用二進制樹
默克爾樹的一大優良特性是,驗證樹根值正確與否并不要求你具有整棵樹所有的數據。只需把所有省略的非空路徑替代為相應的哈希值就可以可。
那么使用十六進制默克爾樹有什么不好呢?
設想整棵樹都已填滿數據。要驗證一個區塊,我們只需要一小部分默克爾樹節點的數據。那么,我們只需把其他路徑的數據替代為哈希值就可以了。
但是,每多加入一條哈希值,區塊見證數據就會大一些。
如果我們轉變為二進制默克爾樹,這個問題就可以得到緩解——因為默克爾樹上的每個節點都只有兩個子節點,所以至多只有一個字節點需要被替換為哈希值。
觀點:美國貨幣監理署發布穩定幣指南有利于金融創新:據此前報道,根據美國貨幣監理署(OCC)上周發布的新指南,美國聯邦特許銀行和聯邦儲蓄協會可以為穩定幣發行商持有儲備金。該決定適用于與“單一法定貨幣” 1:1掛鉤的穩定幣。
CoinDesk文章稱,這對市場很重要。首先,這標志著監管部門越來越接受穩定幣。OCC正在向銀行發出信號,穩定幣活動是合法的,儲備賬戶將得到與其他任何賬戶一樣的聯邦保護。這可能會激勵銀行積極尋求穩定幣業務,并以此擴大其客戶基礎和他們在加密市場的份額。由于市值第二大穩定幣USDC目前的主要使用案例之一是從DeFi平臺獲取收益,這可能是傳統金融開始以開放的態度看待區塊鏈金融應用程序正在進行的創新所需的激勵。新型儲蓄產品可以吸引新客戶,這反過來又可以加速傳統銀行業的轉型。
這也可能鼓勵新型穩定貨幣發行商進一步創新。對于在這個行業工作的人來說,似乎穩定幣發行商s無處不在。然而,從外部看,它們中的大多數要么很小,要么是離岸的,要么兩者都有。除了由Coinbase和Circle于2018年成立的USDC發行商CENTRE Consortium的成員之外,很少有大型美國公司在該領域開展商業活動。[2020/9/28]
這樣做也許能大幅降低見證數據的規模。
我們再舉例說明一下。
假設執行某個區塊只會影響一個賬戶:3B路徑下的Acc1。整棵樹是全滿的。
觀點:比特幣主要用于投機性投資 不具備貨幣基本功能:索邦大學(Pantheon-Sorbonne)經濟學副教授Christian Pfister最近在為法國央行(Banque de France)撰寫的一份文件中稱,比特幣主要用于進行投機性投資,以及用假名進行支付交易,這有助于保護隱私,但也為非法活動的融資提供了便利。比特幣也只部分地實現了貨幣的三種功能。它不是一種記賬單位(很少用于商品和服務,特別是勞動力和資本的定價),也不是支付手段(很少購買的商品和服務以比特幣結算),或存儲價值(它的匯率太不穩定)。(CryptoNews)[2020/8/18]
-二進制狀態樹與十六進制狀態樹的比較-
如果說二進制狀態樹看起來有點嚇人,那只是因為二進制樹我畫全了,但沒有把十六進制樹的所有代之以哈希值的節點都畫出來。
來數個數:
為創建出一棵二進制狀態樹,見證數據需要包含8個哈希值,7個分支節點和1個賬戶節點。也就是見證數據中有16個元素。
為創建出一棵十六進制狀態樹,我們只需1個分支節點,1個賬戶節點,但需要30個哈希值。也就是有32個元素。
所以,假設哈希值和分支節點在區塊見證數據中的所占的空間是一樣大的,在我們的例子中,使用二進制樹所需的見證數據大小只有十六進制下的一半。看起來不錯。
那么,理論上就是這樣。
我們來看看實際情況是如何。我們直接拿以太坊主網的數據來看看吧。
開始實驗
先說最緊要的:我們怎么知道自己構建出來的區塊見證數據是有用的呢?
測試方法如下:我們使用區塊見證數據來生成一棵默克爾子樹,在這棵樹上運行相應區塊中的所有交易,然后校驗結果是否與我們所知的一致。只要交易都能成功執行,等等),我們就可以斷定這個見證是足夠充分的。
觀點:3月穩定幣表現俱佳總值超過20億美元 或將推動加密市場迅速回升:數據顯示Binance交易所穩定幣數量穩步增長,表明散戶投資者正往交易所轉入穩定幣,原因可能是散戶投資者打算將其手上的比特幣等其他加密貨幣轉為穩定幣。而除此之外,CoinMetrics聯合創始人Nic Carter表示,不僅是USDT,過去幾周內,其他穩定幣數量都出現了上漲。3月穩定幣總值超過20億美元。這也是迄今為止,穩定幣表現最好的一個月。除USDT以外的穩定幣價值也增加了5億美元。整體而言,目前所有穩定幣總價值已超過80億美元,占整個加密市場市值的4.2%。而對此,有觀點認為,市場即將到達一個臨界點,即投資者想要拋售穩定幣而去持有比特幣,從而能推動加密貨幣市場迅速回升。(Bitcoinist )[2020/4/15]
-測試方法:1.執行區塊;2.從狀態樹中抽取出見證數據;3.使用見證數據構造出一棵子樹;4.禁用DB訪問、使用子樹來執行區塊(具體可見
github)-
其次,我們需要一些基準數據。因此,我們也使用500萬到850萬高度的區塊、在十六進制默克爾樹模式下生成了見證數據,并將見證數據大小的統計數據存在一個超級大的csv文件中。
我們嘗試的第一步是執行完一個區塊后就組裝出一棵十六進制樹,然后將它轉為二進制樹,再從這棵二進制樹中提取出見證數據。
這種方法有幾個好處:易于實現,而且驗證十六進制-二進制的轉換也很簡單。
不過,我們遇到了兩個問題,而且其中一個還不小。
聲音 | 觀點:未來區塊鏈在電網行業的發展方向主要包括電力交易等四個方面:目前,區塊鏈已成為社會關注的焦點,各行業企業均在探索區塊鏈的發展應用。在電力行業,區塊鏈在國家電網有限公司、南方電網公司均有落地項目,主要應用在交易類、存證類與授權管理類三類場景。按照電網專家們的設想,未來區塊鏈在電網行業的發展方向主要包括電力交易、產業金融服務、新興業務、產業上下游企業互通四個方面。多位專家認為,區塊鏈有助于電網企業提質增效,提升管理能力與客戶服務水平,主要體現在可以優化業務流程、提升工作效率、滿足升級客戶需求、促進數據共享、發揮數據價值、解決需求側響應問題、提升協同效率、保證客戶信息真實性等方面。(中國能源報)[2020/2/21]
第一個,正如我們上面證明的那樣,比起二進制樹,十六進制樹包含更多的賬戶節點,如果我們先生成十六進制樹再轉換,得到的結果就跟在二進制樹模式下直接生成所得到的見證數據不一樣。
為什么呢?
因為十六進制樹數據總是以1/2字節的速度增長,而二進制樹總是以1比特的速度增長,因此鍵的長度可以是奇數位。
實際上,見證數據中還包含一些額外的擴展節點,它們還要稍微大一點。不過即便對內容較多的區塊,體現在見證數據大小上的差別也非常之小。
關鍵的是性能。隨著樹的規模增長,轉換的速度會越來越慢。
用更具體的數字來說明一下:在我們的GoogleComputeEngine虛擬機上,處理速度約為每秒0.16個區塊,也就是每分鐘處理小于10個區塊,處理100萬個區塊要超過3個月!
所以,我們決定采取更復雜的辦法,開發出一個原生使用二進制默克爾樹的實驗性分支。也就是說,我們要把turbo-geth代碼庫例地所有十六進制狀態樹全部替換為二進制樹,然后區塊就是基于二進制樹來執行的了。
這種辦法的不利之處在于,部分哈希值的校驗只能被忽略掉。
但主要的驗證機制還是一樣的:我們需要能夠使用二進制樹來執行區塊、從見證數據中創建出默克爾子樹。
再來談談key。
為簡化起見,我們對key的編碼方式是非常低效的:1bytepernibble;一個key的每一比特就要占用1字節。這樣做大大簡化了代碼層面的改變,但區塊見證數據中的”key“部分會是我們使用bitset時候的8倍大。
因此,在進一步分析中,我會假設key的編碼方式是最優的。
Hexvs.Bin:結果
我的分析分為兩段,總共分析了以太坊主網上的200萬個區塊。
區塊高度500萬到650萬
我在這個github庫里面提供了使用python腳本來重復這一實驗的命令行:
https://github.com/mandrigin/ethereum-mainnet-bin-tries-data
首先我們來分析一下數據集。
pythonpercentile.pyhex-witness-raw.csvbin-stats-5m-6.5m.csv50000006500000adjust
-
一個箱型圖,箱體顯示上四分位到下四分位之間的數據,左右延伸出去的線條顯示上1%到下1%之間的數據
-百分比分析-
現在我們可以生成一些很酷的圖表了!
pythonxy-scatter-plot.pyhex-witness-raw.csvbin-stats-5m-6.5m.csv50000006500000adjust
-XY散點圖(橫軸為Hex下見證數據大小,縱軸為Bin下見證數據大小)-
可以看出,二進制見證數據的大小總是優于十六進制樹下的見證數據。
我們再加入另一個參數,用二進制見證數據大小除以十六進制見證數據大小,看看我們得到了怎樣的提升。
pythonsize-improvements-plot.pyhex-witness-raw.csvbin-stats-5m-6.5m.csv50000006500000adjust
-二進制見證數據的大小/十六進制見證數據的大小-
為更好地理解這張圖標,我們也輸出了平均值和百分位值。
平均值=0.51
P95=0.58
P99=0.61
在實際場景中這意味著什么?
對于99%的區塊,見證數據的大小可以降低至少39%。
對于95%的區塊,見證數據的大小可以降低至少42%。
平均來說,見證數據可節省49%。
我們也要考慮見證數據大小的絕對值。為使數據變得可讀,我們每1024個區塊取滑動平均值。
pythonabsolute-values-plot.pyhex-witness-raw.csvbin-stats-5m-6.5m.csv50000006500000adjust
-依時間順序繪制的見證數據大小折線圖,縱軸單位為MB-
再來看看最新區塊的情況。
區塊高度800萬到850萬
pythonpercentile.pyhex-witness-raw.csvbin-stats-8m-9m.csv80000008500000adjust
-箱型圖,箱表示上下四分位以內的數據,線表示上下1%以內的數據-
-800萬號到850萬號區塊的百分位分析-
還有XY散點圖。
pythonxy-scatter-plot.pyhex-witness-raw.csvbin-stats-8m-9m.csv80000008500000adjust
還有規模上的節約。
pythonsize-improvements-plot.pyhex-witness-raw.csvbin-stats-8m-9m.csv80000008500000adjust
-XY散點圖(橫軸為Hex下見證數據大小,縱軸為Bin下見證數據大小)-
平均值=0.53
P95=0.61
P99=0.66
最后,再來看看見證數據的絕對大小。
pythonabsolute-values-plot.pyhex-witness-raw.csvbin-stats-8m-9m.csv80000008500000adjust
-依時間順序繪制的見證數據大小折線圖,縱軸單位為MB-
結論
在使用以太坊主網數據做過測試以后,我們可以看到,切換為二進制樹模式可以大幅提升生成見證數據的效率。
另一個結論是,這種提升并沒有理論上那么顯著。原因可能在于主網區塊的實際數據。
也許,通過分析一些例外情況,我們可以知道更多優化見證數據規模的辦法。
試著使用別的原始數據來跑跑GitHub中的腳本吧:https://github.com/mandrigin/ethereum-mainnet-bin-tries-data
2019年,隨著新一輪科技革命和產業變革的到來,中國互聯網領域出現幾個承上啟下的關鍵節點,不僅進一步打開了行業發展的新空間,也進一步延展了互聯網賦能的邊界。 2019年被稱為“5G商用元年”.
1900/1/1 0:00:001月15日,在易趣財經、一本區塊鏈、《金融理財》雜志社聯合主辦的“破界?融合區塊鏈與數字金融高峰論壇”上,中國互聯網金融協會區塊鏈工作組組長、中國銀行原行長李禮輝發表了致辭.
1900/1/1 0:00:00昨日,由中國信息協會主辦的《圍繞一帶一路,服務海外華人》全球視野區塊鏈高峰論壇在北京召開。國務院發展研究中心研究員李廣乾以《中外區塊鏈產業發展的趨同趨勢》為題發表演講.
1900/1/1 0:00:00近日,中國人們銀行召開2020年工作會議,會上央行指出,在加強金融科技研發和應用方面,強調要繼續推進數字貨幣研發.
1900/1/1 0:00:00寫在前面:本文作者為區塊鏈開發者RonaldMannak。他在文章中通過簡單的描述說明了零知識證明對區塊鏈可擴展性的意義。很多人都寫過關于零知識證明的技術文章.
1900/1/1 0:00:002020年中國人民銀行工作會議1月2日至3日在北京召開。會議以習近平新時代中國特色社會主義思想為指導,深入學習貫徹黨的十九屆四中全會和中央經濟工作會議精神,總結2019年主要工作,分析當前經濟金.
1900/1/1 0:00:00