以太幣交易所 以太幣交易所
Ctrl+D 以太幣交易所
ads

觀點 | 無狀態以太坊:二進制狀態樹實驗_區塊鏈

Author:

Time:1900/1/1 0:00:00

作者:?IgorMandrigin

翻譯:?阿劍

來源:以太坊愛好者

什么是“無狀態以太坊”?

如果您已經了解什么是“無狀態以太坊”以及“區塊見證數據”,可以跳過這一段。

為執行交易及驗證區塊,以太坊網絡的節點需要了解整條區塊鏈的當前狀態——也就是所有賬戶和合約的余額和存儲數據。這些數據一般來說是存儲在DB里面的,在需要用于驗證時才會加載到一棵默克爾樹中。

無狀態以太坊客戶端的工作思路則稍有區別。顧名思義,無狀態客戶端就是不使用硬盤DB來執行區塊。相反,無狀態客戶端依賴于“區塊見證數據”——就是一段特殊的數據,它會跟相應的區塊一起傳播;擁有了這段數據,客戶端就可以重建出一個默克爾子樹,該分支足可用于執行該區塊中的所有交易。

你可以在這篇文章中讀到關于無狀態客戶端的更深入的描述:https://blog.ethereum.org/2019/12/30/eth1x-files-state-of-stateless-ethereum/

當然咯,需要傳播區塊見證數據就意味著無狀態客戶端的網絡要求要比普通節點更高。

-見證數據大小折線圖-

現在人們已經提出了很多降低見證數據規模的思路:使用有效性/計算完整性證明、加入更多的壓縮手段,等等。其中一種辦法是將以太坊的默克爾樹從十六進制轉為二進制。

這就是本文想要探討的問題。

觀點:區塊鏈技術能夠大大提高交易的效率 降低交易成本:1月2日消息,清華大學公共管理學院江小涓和孟麗君聯合刊文表示,區塊鏈技術能夠大大提高交易的效率,降低交易成本。例如,制造一架飛機需要來自全球的數萬個零部件,而數字技術可以幫助制造商迅速而又準確地了解這數萬個零部件背后的海量信息。有國際權威報告顯示,歐洲飛機制造商空中客車公司已經開始利用區塊鏈技術分析供應商及組件源頭,從而有效降低了空客零部件修復的時間與費用。(管理世界)[2021/1/2 16:16:11]

為什么要使用二進制樹

默克爾樹的一大優良特性是,驗證樹根值正確與否并不要求你具有整棵樹所有的數據。只需把所有省略的非空路徑替代為相應的哈希值就可以可。

那么使用十六進制默克爾樹有什么不好呢?

設想整棵樹都已填滿數據。要驗證一個區塊,我們只需要一小部分默克爾樹節點的數據。那么,我們只需把其他路徑的數據替代為哈希值就可以了。

但是,每多加入一條哈希值,區塊見證數據就會大一些。

如果我們轉變為二進制默克爾樹,這個問題就可以得到緩解——因為默克爾樹上的每個節點都只有兩個子節點,所以至多只有一個字節點需要被替換為哈希值。

這樣做也許能大幅降低見證數據的規模。

我們再舉例說明一下。

假設執行某個區塊只會影響一個賬戶:3B路徑下的Acc1。整棵樹是全滿的。

觀點:加密貨幣最初以隱私為導向的精神必須被傳播:9月4日消息,加密市場數據提供商Coin Metrics的報告顯示,專注于隱私的加密貨幣zcash (ZEC)、monero (XMR)和grin的交易總額僅占比特幣交易總額的6%。Zcash的隱私保護功能沒有得到充分利用,只有不到2%的交易得到完全保護。并且隱私幣的受歡迎程度仍然不高。報告作者認為,這些統計數據標志著對匿名的背離,匿名是虛擬資產最初設計的基本原則。隨著加密貨幣繼續被更廣泛的公眾所采用,加密貨幣最初的以隱私為導向的精神必須被傳播,以便其能夠生存下去。如果做不到這一點,就會導致最初的創建匿名交易系統的想法逐漸消失,并被有關加密貨幣用途的其他概念所取代。(news.bitcoin)[2020/9/4]

-二進制狀態樹與十六進制狀態樹的比較-

如果說二進制狀態樹看起來有點嚇人,那只是因為二進制樹我畫全了,但沒有把十六進制樹的所有代之以哈希值的節點都畫出來。

來數個數:

為創建出一棵二進制狀態樹,見證數據需要包含8個哈希值,7個分支節點和1個賬戶節點。也就是見證數據中有16個元素。

為創建出一棵十六進制狀態樹,我們只需1個分支節點,1個賬戶節點,但需要30個哈希值。也就是有32個元素。

所以,假設哈希值和分支節點在區塊見證數據中的所占的空間是一樣大的,在我們的例子中,使用二進制樹所需的見證數據大小只有十六進制下的一半。看起來不錯。

那么,理論上就是這樣。

我們來看看實際情況是如何。我們直接拿以太坊主網的數據來看看吧。

開始實驗

觀點:比特幣市場的成熟可能會讓交易所在功能上出現趨同現象:Kraken首席執行官Jesse Powell在Flippening博客中詳細闡述不斷發展的加密交易所領域以及交易所將看到越來越多整合的可能性。他強調,上述整合以及加密市場已達到一定成熟程度的事實,可能反過來意味著交易所可能具有類似的功能集。“我想你會看到基本上每個人在非常相似的功能集上趨同。然后競爭可能會歸結到執行和界面,甚至可能只是營銷和品牌。”

雖然大多數市場和行業都是如此,但這也引出一個問題:加密貨幣是否是成熟市場。與傳統金融機構相比,提供數字資產相關服務的交易所仍然是相對較新的現象。隨著交易所間的競爭減弱,交易所在規模和類似功能集方面的整合可能會對用戶產生負面影響。

根據Glassnode,過去6個月加密交易所的比特幣提取量穩步增加,這不僅反映市場普遍情緒,也反映用戶對交易所的看法。而Powell指出,加密交易所之間的轉移仍相當便宜,許多用戶傾向于根據需求來做這件事。“我不認為散戶投資者(他們對加密貨幣沒有深入了解)只是想買些比特幣并持有它。”

Powell表示,關于交易所之間的競爭,對于那些率先上線新代幣的交易所來說,仍然有著顯著的優勢。(AMBCrypto)[2020/7/12]

先說最緊要的:我們怎么知道自己構建出來的區塊見證數據是有用的呢?

測試方法如下:我們使用區塊見證數據來生成一棵默克爾子樹,在這棵樹上運行相應區塊中的所有交易,然后校驗結果是否與我們所知的一致。只要交易都能成功執行,等等),我們就可以斷定這個見證是足夠充分的。

動態 | 觀點:將區塊鏈技術引入政府部門是一個不可逆轉的趨勢:Cointelegraph今日發表分析師文章稱,在中國,區塊鏈技術已經找到了應用沃土。現有基礎設施的缺乏會刺激新技術的更快采用。政府對數字經濟的重視,以及對區塊鏈技術的謹慎但有希望的認可,是投資者應認真對待的重要信號。在其他國家,政府和金融機構也在考慮是否可以將區塊鏈應用于各種系統,以降低成本并促進公民對數據的訪問。2019年7月,七家大型韓國公司合作開發基于區塊鏈的移動識別系統,該系統計劃于2020年啟動,區塊鏈網絡已被命名為Initial DID Association。歐盟最近幾年也開始公開承認區塊鏈技術。將區塊鏈技術引入全球政府部門是一個不可逆轉的趨勢。值得回顧的是幾年前各國對區塊鏈的態度,以及現在正在發生的變化。[2019/11/25]

-測試方法:1.執行區塊;2.從狀態樹中抽取出見證數據;3.使用見證數據構造出一棵子樹;4.禁用DB訪問、使用子樹來執行區塊(具體可見

github)-

其次,我們需要一些基準數據。因此,我們也使用500萬到850萬高度的區塊、在十六進制默克爾樹模式下生成了見證數據,并將見證數據大小的統計數據存在一個超級大的csv文件中。

我們嘗試的第一步是執行完一個區塊后就組裝出一棵十六進制樹,然后將它轉為二進制樹,再從這棵二進制樹中提取出見證數據。

這種方法有幾個好處:易于實現,而且驗證十六進制-二進制的轉換也很簡單。

不過,我們遇到了兩個問題,而且其中一個還不小。

第一個,正如我們上面證明的那樣,比起二進制樹,十六進制樹包含更多的賬戶節點,如果我們先生成十六進制樹再轉換,得到的結果就跟在二進制樹模式下直接生成所得到的見證數據不一樣。

聲音 | V神:ASIC采礦硬件成本占主導可降低能耗的觀點是錯的:V神連發3條推特敘述ASIC采礦硬件成本與電力成本之間的關系稱,關于ASIC采礦的硬件成本與電力成本的長期比率,此前我做數學計算時,硬件占75%,電力占25%,我想知道這種情況是否已經或有望改變。這個問題很重要,因為如果硬件占主導地位,那么ASIC挖掘并不那么浪費,因為ASIC可以根據需要打開和關閉,以吸收閑置的電能,否則這些電能就會被閑置,或者作為加熱器同時使用,這種觀點是完全錯誤的。如果電力占主導地位,那么備用容量/供熱兩用的論點就更可信,但ASIC具有PoS的一些好處的論點就站不住腳了。[2019/9/23]

為什么呢?

因為十六進制樹數據總是以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

Tags:區塊鏈BINHEXTATvp幣區塊鏈價格Binamars Gamehex幣知乎STATE價格

比特幣行情
新年最大一筆區塊鏈融資來了,Lightnet獲得6家大型機構3120萬美元A輪融資資金_NET

2020年1月10日,總部位于泰國曼谷的金融科技公司Lightnet宣布已獲得A輪融資,籌集了3120萬美元的新資金.

1900/1/1 0:00:00
估值100億美元的瑞波如何做年終總結?看它的CEO怎么說_區塊鏈

2019年,瑞波公司取得了長足的發展。該公司的全球支付網絡RippleNet在全球范圍內的用戶增長至300多家,其中包括與速匯金建立戰略合作伙伴關系.

1900/1/1 0:00:00
美國國稅局又來了!單筆加密貨幣捐款超過5000美元需要進行稅務評估_比特幣

美國國稅局上周四更新了其常見問題解答,指明了向慈善機構捐贈5000美元以上加密貨幣的捐贈者,必須對其捐贈進行稅務評估。 這可能會影響到加密貨幣在慈善事業的蓬勃發展.

1900/1/1 0:00:00
央行部署2020年重點工作:出臺區塊鏈等金融科技系列監管規則_加密貨幣

來源:中國人民銀行 編者注:原標題為《人民銀行金融科技委員會召開會議研究部署2020年重點工作》日前,人民銀行金融科技委員會會議在北京召開.

1900/1/1 0:00:00
中國電信區塊鏈業務研發負責人解讀:電信運營商為什么要做區塊鏈?_區塊鏈

編者注:原標題為《中國電信梁偉:解讀區塊鏈界最關心的4大問題》“如果說芯片我們被別人卡脖子,那么區塊鏈這個領域我們和美國不分伯仲。”中國電信區塊鏈業務研發負責人梁偉說道.

1900/1/1 0:00:00
“鏈”上實體經濟,Lava是如何做的?_區塊鏈

“制造信任的機器。”《經濟學人》雜志在2015年首次報道區塊鏈時,將其這般比喻。區塊鏈基于密碼學手段建立了一套完備的可追溯、不可纂改的去中心化分布式賬本,依靠獨有的共識機制和激勵措施,讓原本陌生.

1900/1/1 0:00:00
ads