作者:?IgorMandrigin
翻譯:?阿劍
來源:以太坊愛好者
什么是“無狀態以太坊”?
如果您已經了解什么是“無狀態以太坊”以及“區塊見證數據”,可以跳過這一段。
為執行交易及驗證區塊,以太坊網絡的節點需要了解整條區塊鏈的當前狀態——也就是所有賬戶和合約的余額和存儲數據。這些數據一般來說是存儲在DB里面的,在需要用于驗證時才會加載到一棵默克爾樹中。
無狀態以太坊客戶端的工作思路則稍有區別。顧名思義,無狀態客戶端就是不使用硬盤DB來執行區塊。相反,無狀態客戶端依賴于“區塊見證數據”——就是一段特殊的數據,它會跟相應的區塊一起傳播;擁有了這段數據,客戶端就可以重建出一個默克爾子樹,該分支足可用于執行該區塊中的所有交易。
你可以在這篇文章中讀到關于無狀態客戶端的更深入的描述:https://blog.ethereum.org/2019/12/30/eth1x-files-state-of-stateless-ethereum/
當然咯,需要傳播區塊見證數據就意味著無狀態客戶端的網絡要求要比普通節點更高。
-見證數據大小折線圖-
現在人們已經提出了很多降低見證數據規模的思路:使用有效性/計算完整性證明、加入更多的壓縮手段,等等。其中一種辦法是將以太坊的默克爾樹從十六進制轉為二進制。
這就是本文想要探討的問題。
觀點:加密礦企股價上漲可能是因為傳統投資者在購買比特幣時面臨限制:隨著比特幣價格的上漲,涉及加密領域公司的股價也在飆升,尤其是比特幣挖礦行業。加密研究公司Arcane的軟件開發人員Torkel Rogstad接受采訪時表示,進行比特幣挖礦的回報可能是“巨大的”,礦業公司股價的上漲可能是因為傳統投資者在購買比特幣時面臨限制。
“如果我必須指出一件事,那就是缺乏公開上市的比特幣投資機會。”Rogstad說道,“我個人可以投資任何我想投資的東西,但如果你投資你的養老金投資組合,可能只允許投資于股票。同樣的情況也適用于基金;在他們所謂的投資委托中,他們通常對可以投資什么有非常嚴格的規定。”他補充說:“因此,投資比特幣公司可能是傳統金融機構資金獲得比特幣敞口的一種方式,即使它們不被允許直接投資比特幣。”(Decrypt)[2020/12/30 16:04:46]
為什么要使用二進制樹
默克爾樹的一大優良特性是,驗證樹根值正確與否并不要求你具有整棵樹所有的數據。只需把所有省略的非空路徑替代為相應的哈希值就可以可。
那么使用十六進制默克爾樹有什么不好呢?
設想整棵樹都已填滿數據。要驗證一個區塊,我們只需要一小部分默克爾樹節點的數據。那么,我們只需把其他路徑的數據替代為哈希值就可以了。
但是,每多加入一條哈希值,區塊見證數據就會大一些。
如果我們轉變為二進制默克爾樹,這個問題就可以得到緩解——因為默克爾樹上的每個節點都只有兩個子節點,所以至多只有一個字節點需要被替換為哈希值。
這樣做也許能大幅降低見證數據的規模。
我們再舉例說明一下。
觀點:DEX交易量下降表明DeFi投資者正轉向比特幣:Cointelegraph發文稱,隨著比特幣持續攀升至2020年的新高,圍繞去中心化金融(DeFi)項目的炒作繼續減弱。數據顯示,去中心化交易所(DEX)的交易量正在迅速下降,這進一步表明DeFi行業的下滑。DEX每周交易量已從9月第一周的80億美元下降至10月19日至25日期間的30億美元,其中Uniswap仍以56%的市場份額領先。[2020/10/30]
假設執行某個區塊只會影響一個賬戶:3B路徑下的Acc1。整棵樹是全滿的。
-二進制狀態樹與十六進制狀態樹的比較-
如果說二進制狀態樹看起來有點嚇人,那只是因為二進制樹我畫全了,但沒有把十六進制樹的所有代之以哈希值的節點都畫出來。
來數個數:
為創建出一棵二進制狀態樹,見證數據需要包含8個哈希值,7個分支節點和1個賬戶節點。也就是見證數據中有16個元素。
為創建出一棵十六進制狀態樹,我們只需1個分支節點,1個賬戶節點,但需要30個哈希值。也就是有32個元素。
所以,假設哈希值和分支節點在區塊見證數據中的所占的空間是一樣大的,在我們的例子中,使用二進制樹所需的見證數據大小只有十六進制下的一半。看起來不錯。
那么,理論上就是這樣。
觀點:NEAR協議搶先實施EIP-1559 但效果可能適得其反:開放性網絡平臺NEAR Protocol (NEAR)已于近日迎來主網。該網絡目標是與以太坊競爭,爭奪智能合約開發者。與此同時,NEAR也采用了EIP-1559提案,而根據加密貨幣研究員Hasu的分析表明,NEAR所采用的設計可能存在嚴重的錯誤,這會導致市場有強烈的動機來規避其目前的機制,從而產生適得其反的效果。EIP-1559大大改變了當前以太坊的費用模型,其帶來了很多實質性的好處,其中之一是使用戶更容易預測費用,幾乎完全消除了出價過高的情況。乍一看,NEAR完全是復制了以太坊的EIP-1559。
例如,以太坊中每個區塊的最大費用變化為12.5%,區塊時間大約為12-13秒,而在NEAR中,每秒區塊時間的最大變化為1%。但再細看,NEAR所實施的EIP-1559有兩個大的不同:1.用戶無法在協議中打賞(激勵)區塊生產者;2.它向智能合約支付基礎費用的30%。綜合考慮,NEAR的解決方案不僅不能改善結果,反而會使結果變得更糟。通過禁止向區塊生產者支付費用,NEAR的解決方案會鼓勵形成一個交易優先權的“黑市”。通過向應用開發者增加一個強制租金,其只會強迫應用向用戶退款,甚至可能在此過程中破壞它的EIP-1559。(Deribit Insights)[2020/10/20]
我們來看看實際情況是如何。我們直接拿以太坊主網的數據來看看吧。
開始實驗
先說最緊要的:我們怎么知道自己構建出來的區塊見證數據是有用的呢?
測試方法如下:我們使用區塊見證數據來生成一棵默克爾子樹,在這棵樹上運行相應區塊中的所有交易,然后校驗結果是否與我們所知的一致。只要交易都能成功執行,等等),我們就可以斷定這個見證是足夠充分的。
觀點:美國國債收益率仍有可能降為負值,將有利于比特幣:7月10日,高盛前對沖基金銷售主管Raoul Pal在推特分享過去30年美國10年期國債收益率圖表。圖表表明,10年期國債收益率仍有望在未來數月和數年內降至0%以下。該圖表描繪了債券收益率在宏觀上呈下降趨勢,自20世紀80年代以來一直在下降。如果收益率為負,這將是美國歷史上高期限國債收益率首次低于零。
分析師們表示,這種情況對比特幣來說將非常有利。早在2019年,Gemini聯合創始人Cameron Winklevoss在評論全球已存在數萬億美元負收益債券時表示,“目前有17萬億美元的負利率債券。17萬億個你應該擁有比特幣的理由。”比特幣開發者Jimmy Song在今年3月表示,在負利率盛行的世界里,平等將會迅速減少。他認為比特幣是一種合乎邏輯的解決方案,因為與法定貨幣相比,它相對稀缺,因此可以減輕“坎蒂利翁效應”的影響。
注:坎蒂利翁效應(Cantillion Effect)是自由主義經濟學家/投資者中常見的概念,認為印鈔造成巨大的不平等。(Bitcoinist)[2020/7/12]
-測試方法:1.執行區塊;2.從狀態樹中抽取出見證數據;3.使用見證數據構造出一棵子樹;4.禁用DB訪問、使用子樹來執行區塊(具體可見
github)-
其次,我們需要一些基準數據。因此,我們也使用500萬到850萬高度的區塊、在十六進制默克爾樹模式下生成了見證數據,并將見證數據大小的統計數據存在一個超級大的csv文件中。
觀點:S2F模型顯示比特幣可能在2021年年中達到7萬美元:加密貨幣評級機構韋氏評級(Weiss Ratings)分析師Bruce Ng和Juan M. Villaverde表示,S2F模型現在顯示,比特幣價格可能在2021年年中達到7萬美元。“雖然基于與Weiss加密貨幣周期模型不同的方法,但S2F模型在加密世界廣受尊重。現在看來,在未來12個月左右的時間里,比特幣將出現強勁反彈。”黃金目前的S2F為62,而比特幣的S2F為56,這意味著比特幣在避險投資方面可能會與黃金相媲美。
兩位分析師表示,宏觀經濟因素也有利于BTC,美聯儲在過去13周里印刷2.9萬億美元的新紙幣。當投資者對紙幣失去信心時,有可能轉向投資比特幣。另外,機構資金大量流入比特幣。對沖基金巨頭Paul Tudor Jones投資2.1億美元BTC。灰度比特幣信托基金繼續以比BTC鑄造速度更快的速度購買。而風險資本家Andreessen Horowitz最近推出5.15億美元的新基金,用于投資加密網絡和業務。(The Daily Hodl)[2020/7/10]
我們嘗試的第一步是執行完一個區塊后就組裝出一棵十六進制樹,然后將它轉為二進制樹,再從這棵二進制樹中提取出見證數據。
這種方法有幾個好處:易于實現,而且驗證十六進制-二進制的轉換也很簡單。
不過,我們遇到了兩個問題,而且其中一個還不小。
第一個,正如我們上面證明的那樣,比起二進制樹,十六進制樹包含更多的賬戶節點,如果我們先生成十六進制樹再轉換,得到的結果就跟在二進制樹模式下直接生成所得到的見證數據不一樣。
為什么呢?
因為十六進制樹數據總是以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
作者寄語:歡迎來到頭等倉月報系列第一期。從2020年1月開始,我們將推出?隱私幣、Defi、跨鏈、DEX、云存儲?等領域的月報,為您總結過去一個月內最重要的進展和未來一個月最值得關注的熱點.
1900/1/1 0:00:00隨著區塊鏈技術的不斷發展,應用場景的不斷探索,區塊鏈技術逐步演化出三種基本架構形態:公鏈架構、聯盟鏈架構、私有鏈架構.
1900/1/1 0:00:00作者:0x29 來源:區塊律動BlockBeats非同質化代幣最近的熱度高漲,應該有兩個原因,自己發展的不錯,再加上「同行的襯托」,比如?just.game.
1900/1/1 0:00:00據外媒近日消息,澳大利亞儲備銀行表示,多年來一直密切監控比特幣等加密貨幣的發展,并認為目前尚不清楚國內是否會有強勁需求.
1900/1/1 0:00:00在沒有任何事先通知的情況下,新加坡加密貨幣交易所COSS今天宣布,將把大約20萬名客戶的資金鎖定一個月.
1900/1/1 0:00:00作者?|??SylvainSaurel 人們認為BTC發行減半是一個看漲事件,卻忽視了其網絡安全隱患;無論美元如何升值,BTC安全率(以礦工收入除以網絡價值)都將減半.
1900/1/1 0:00:00