中文字幕亚洲一区婷婷,图片区日韩欧美亚洲,爱福利极品盛宴色一区,不卡一区二区在线观看

當(dāng)前位置: 首頁(yè) > IPFS > 區(qū)塊鏈存儲(chǔ)爆炸:?jiǎn)栴}、分析與優(yōu)化

區(qū)塊鏈存儲(chǔ)爆炸:?jiǎn)栴}、分析與優(yōu)化

時(shí)間:2022-07-01 14:46:12 作者:QuarkChain 夸克鏈 中文社區(qū) 閱讀:4401次

(編按:本文為QuarkChain創(chuàng)始人兼CEO周期博士撰寫(xiě)的技術(shù)文章,并以此文章問(wèn)依據(jù),在DApp Learning進(jìn)行了技術(shù)分享講座,中文講座視頻請(qǐng)點(diǎn)擊文章第二篇推送?)

背景

DeFi、GameFi等去中心化應(yīng)用的蓬勃發(fā)展,極大地增加了對(duì)低交易費(fèi)用的高性能區(qū)塊鏈的需求。然而,構(gòu)建高性能區(qū)塊鏈的一個(gè)關(guān)鍵挑戰(zhàn)是存儲(chǔ)爆炸。下圖是取自 Etherscan 的圖表,它說(shuō)明了一個(gè)以太坊全節(jié)點(diǎn)(存檔)的區(qū)塊鏈數(shù)據(jù)大小。

從圖中我們可以看出,節(jié)點(diǎn)的鏈數(shù)據(jù)規(guī)模穩(wěn)步增長(zhǎng),現(xiàn)在已經(jīng)達(dá)到~9TB。由于去中心化區(qū)塊鏈的一個(gè)目標(biāo)是允許普通配置的計(jì)算機(jī)運(yùn)行節(jié)點(diǎn),因此在普通配置的計(jì)算機(jī)上強(qiáng)制要求 9TB+ 存儲(chǔ)會(huì)難以達(dá)到。

分解存儲(chǔ)開(kāi)銷(xiāo)

如果我們進(jìn)一步分析存儲(chǔ)使用情況,我們可以發(fā)現(xiàn)區(qū)塊數(shù)據(jù)只占了約300GB的數(shù)據(jù)(從區(qū)塊高度0到13.6M),這一數(shù)字遠(yuǎn)小于9TB。那么剩下的8.7TB數(shù)據(jù)從何而來(lái)呢?

實(shí)際上,存檔節(jié)點(diǎn)執(zhí)行所有塊并保留所有歷史數(shù)據(jù),包括:

  • 區(qū)塊

  • 狀態(tài)

  • 交易收據(jù)

這其中,狀態(tài)是這 8.7TB 的主要組成部分。所以有時(shí),我們將存儲(chǔ)爆炸稱(chēng)為“狀態(tài)爆炸”。但是為什狀態(tài)會(huì)如此之大?

什么是以太坊狀態(tài)?

以太坊狀態(tài)是一個(gè)Merkle Patrica樹(shù)(MPT),其中

  • 葉子節(jié)點(diǎn)是地址 (0x...) =>帳戶(hù)的映射,其中帳戶(hù)存儲(chǔ)與地址關(guān)聯(lián)的余額、nonce等

  • 內(nèi)部節(jié)點(diǎn)維護(hù)樹(shù)結(jié)構(gòu),以便可以快速計(jì)算整個(gè)樹(shù)的哈希根

由于存檔節(jié)點(diǎn)將保留所有區(qū)塊的所有歷史狀態(tài),這意味著 MPT 中的任何更新都將創(chuàng)建 O(log(N)) 個(gè)內(nèi)部節(jié)點(diǎn),并且不會(huì)刪除舊的內(nèi)部節(jié)點(diǎn)。

Geth 的全節(jié)點(diǎn)

為了解決存檔節(jié)點(diǎn)狀態(tài)爆炸的問(wèn)題,Geth 的天才工程師們創(chuàng)建了一種稱(chēng)為“修剪”模式的新模式,該模式僅定期存儲(chǔ) MPT。這里我們舉一個(gè)簡(jiǎn)化的例子,其中節(jié)點(diǎn)只保存每 3 個(gè)區(qū)塊的MPT。(注意,為了獲得一個(gè)不包含任何狀態(tài)區(qū)塊的狀態(tài),節(jié)點(diǎn)必須獲得該區(qū)塊之前最近的狀態(tài),并重放接下來(lái)的交易)。

通過(guò)定期存儲(chǔ) MPT,狀態(tài)的存儲(chǔ)大小顯著減少。據(jù) Etherscan 數(shù)據(jù),目前 Geth 全節(jié)點(diǎn)的區(qū)塊鏈數(shù)據(jù)大小約為 1TB。

Geth 的可快速同步的全節(jié)點(diǎn)

通過(guò)從創(chuàng)世區(qū)塊開(kāi)始重放所有交易來(lái)運(yùn)行節(jié)點(diǎn)的一個(gè)問(wèn)題是,重放所有交易會(huì)占用很長(zhǎng)時(shí)間。一般來(lái)說(shuō),建立這樣一個(gè)節(jié)點(diǎn)需要數(shù)周時(shí)間才能從創(chuàng)世區(qū)塊趕上網(wǎng)絡(luò)的最新?tīng)顟B(tài)。為了加速節(jié)點(diǎn)的啟動(dòng)過(guò)程,Geth 進(jìn)一步提供了一種快速同步模式,可以下載最新的穩(wěn)定區(qū)塊的 MPT,而無(wú)需重放和維護(hù)區(qū)塊之前的歷史 MPT。下載完 MPT 后,它會(huì)像全節(jié)點(diǎn)一樣重放新區(qū)塊(帶有定期狀態(tài)存儲(chǔ))。

在不存儲(chǔ)歷史 MPT(有時(shí)甚至是歷史區(qū)塊主體)的情況下,一個(gè) Geth 節(jié)點(diǎn)的存儲(chǔ)大小可以進(jìn)一步減少到 447G(截至 2021/12/06)。通過(guò)減去 300GB 的區(qū)塊數(shù)據(jù),我們推斷狀態(tài)大小約為 150GB。

問(wèn)題

以目前以太坊 447GB 的存儲(chǔ)大小和 15 TPS,我們預(yù)計(jì)具有 1TB SSD 的普通配置計(jì)算機(jī)應(yīng)該能夠運(yùn)行以太坊節(jié)點(diǎn)相當(dāng)長(zhǎng)的一段時(shí)間(比如數(shù)年)。那么存儲(chǔ)爆炸或狀態(tài)爆炸真的存在嗎?或許未來(lái)幾年以太坊并不會(huì),但假如我們可以將以太坊的虛擬機(jī) (EVM) 擴(kuò)展到數(shù)百或數(shù)千 TPS 呢?

讓我們將目光轉(zhuǎn)向另一個(gè)基于 EVM 的鏈,幣安智能鏈(BSC)。截至 2021 年 12 月 8 日,BSC 已有:

  • 約 984 GB 鏈上數(shù)據(jù),其中區(qū)塊約占 550 GB,狀態(tài)約占 400 GB。

  • 20.6623 億筆交易,100 TPS

如果我們進(jìn)一步用交易數(shù)量來(lái)預(yù)測(cè)數(shù)據(jù)大小,我們可以得到:

如果 TPS 為 100,即 ~3,153 M TPY

  • 1 年后,總 TX ~5,219M,區(qū)塊 ~ 1.375 TB,狀態(tài) ~ 1.085TB

  • 3 年后,總 TX ~11,525M,區(qū)塊 ~3.025TB,狀態(tài) ~2.387 TB

如果 TPS 為 150(觀察到的峰值 TPS),即 ~4,730 M TPY

  • 1 年后,總 TX ~6,796M,區(qū)塊 ~1.809 TB,狀態(tài) ~1.427 TB

  • 3 年后,總 TX ~16,256M,區(qū)塊 ~4.327 TB,狀態(tài) ~3.414TB

綜上所述,對(duì)于BSC來(lái)說(shuō),如果保持目前的速度甚至更高,則很快就會(huì)達(dá)到以太坊存檔節(jié)點(diǎn)相同的存儲(chǔ)大小,這是普通計(jì)算機(jī)幾乎無(wú)法運(yùn)行的。

具有極高 TPS 區(qū)塊鏈的存儲(chǔ)爆炸問(wèn)題

如果我們對(duì)一個(gè)極高 TPS 的區(qū)塊鏈(比如像 QuarkChain 能夠做到的那樣)做一個(gè)更大膽的假設(shè),這個(gè)數(shù)字會(huì)變成多少?我們來(lái)考慮一個(gè)具有 1000 TPS 的區(qū)塊鏈并分析其區(qū)塊和狀態(tài)大小,將是:

  • 假設(shè) tx 大小約為 100 字節(jié),每年區(qū)塊所需的存儲(chǔ)量為 1000 (TPS) * 100(每 tx 字節(jié)數(shù))* 365 * 24 * 3600 = 2.86 TB

  • 假設(shè) MPT 有 100 億賬戶(hù)(超過(guò)世界人口!),我們預(yù)計(jì)狀態(tài)大小將為 150G(以太坊狀態(tài)大?。?0.18B(以太坊唯一地址)* 10B =8.3 TB

將這些數(shù)字放在一起,我們很容易得出一個(gè)結(jié)論,這是大多數(shù)普通配置計(jì)算機(jī)將 無(wú)法承受的要求!

優(yōu)化

為了優(yōu)化存儲(chǔ)成本,我們必須將限制放寬為兼容 EVM 而不是兼容以太坊。即,我們必須構(gòu)建/運(yùn)行另一個(gè)支持 EVM 的鏈,而不是高度優(yōu)化的以太坊客戶(hù)端。

狀態(tài)存儲(chǔ)優(yōu)化

我們提出的第一個(gè)優(yōu)化是使用普通的 KV 而不是 MPT。當(dāng) MPT 很大時(shí),MPT 中的所有內(nèi)部節(jié)點(diǎn)可能非常昂貴。而我們的優(yōu)化將去掉 MPT 中的所有內(nèi)部節(jié)點(diǎn)。假設(shè)每個(gè)賬戶(hù)的數(shù)據(jù)大約是 50 字節(jié)(20 個(gè)地址 + 2 個(gè)nonce + 12 個(gè)賬戶(hù) + 其他),我們可以節(jié)省下100億賬戶(hù)的數(shù)據(jù)為:

  • ~ 10B * 50 + 100GB(代碼)= 600 GB,大約是MPT版本的1/10!

雖然使用普通 KV 會(huì)帶來(lái)巨大的好處,但一個(gè)主要問(wèn)題是我們無(wú)法在如此短的區(qū)塊間隔內(nèi)計(jì)算每個(gè)區(qū)塊的狀態(tài)后哈希,這意味著我們將失去以太坊的以下好處:

  • 快速同步:下載任何區(qū)塊的狀態(tài)并通過(guò)重放剩余的區(qū)塊來(lái)快速同步網(wǎng)絡(luò)

  • 分叉檢測(cè)(或拜占庭檢測(cè)):來(lái)自對(duì)等方新創(chuàng)建的區(qū)塊是否會(huì)導(dǎo)致與本地執(zhí)行區(qū)塊的狀態(tài)不同。

為了啟用快速同步,我們有一個(gè)周期性的快照區(qū)塊(快照間隔 = epoch = 例如,14 周)。一個(gè)快照區(qū)塊包含前狀態(tài)哈希這一附加信息,即前一個(gè)快照區(qū)塊的后狀態(tài)哈希(執(zhí)行交易之后的狀態(tài)哈希):

  • 非快照區(qū)塊不維護(hù)狀態(tài)哈希,而是具有增量哈希,其中包含該區(qū)塊的所有交易事務(wù)的原始數(shù)據(jù)庫(kù)操作(刪除、更新)的哈希。這使得分叉檢測(cè)成為可能!

  • 我們使用交易前狀態(tài)哈希來(lái)代替以太坊中區(qū)塊的交易后狀態(tài)哈希。原因是節(jié)點(diǎn)不能立即計(jì)算狀交易后的狀態(tài)哈希,但是通過(guò)使用交易前狀態(tài)哈希,節(jié)點(diǎn)可以使用整個(gè)epoch間隔來(lái)計(jì)算哈希。例如,假設(shè)狀態(tài)哈希計(jì)算每秒處理 10M 的狀態(tài)數(shù)據(jù),那么計(jì)算 600 GB 的整個(gè)狀態(tài)將需要 600 GB / 10 M ~ 16.67 小時(shí)(vs. epoch = 14 周)

計(jì)算狀態(tài)前哈希的流程如下:

1. 當(dāng)一個(gè)快照區(qū)塊被接收并最終確定時(shí),它的 KV 狀態(tài)被快照,并創(chuàng)建一個(gè)后臺(tái)線程來(lái)迭代所有 KV 條目(地址 =>帳戶(hù))并計(jì)算哈希。

2. 當(dāng)下一個(gè)快照區(qū)塊被創(chuàng)建時(shí),計(jì)算出的狀態(tài)前哈希值將存儲(chǔ)在該區(qū)塊中。同樣,節(jié)點(diǎn)將創(chuàng)建 KV 的另一個(gè)快照并在后臺(tái)計(jì)算其哈希。

3.當(dāng)下一個(gè)快照區(qū)塊被創(chuàng)建時(shí),節(jié)點(diǎn)除了存儲(chǔ)狀態(tài)前哈希之外,節(jié)點(diǎn)現(xiàn)在可以釋放快照區(qū)塊的KV快照,這意味著來(lái)自快照區(qū)塊以來(lái)所有被刪除/更新的數(shù)據(jù)將被自動(dòng)垃圾回收(例如,在 levelDB 中壓縮)

其結(jié)果意味著,要存儲(chǔ)狀態(tài),節(jié)點(diǎn)只需要最多兩個(gè) KV 快照(很可能是一個(gè)帶增量和一個(gè) KV 快照)。

區(qū)塊存儲(chǔ)優(yōu)化

使用快照區(qū)塊,我們可以通過(guò)僅存儲(chǔ)以下數(shù)據(jù)來(lái)進(jìn)一步減少節(jié)點(diǎn)中所需的區(qū)塊數(shù)據(jù):

  • 最新的快照區(qū)塊的交易執(zhí)行前狀態(tài)快照,即(最新 —? 1)快照區(qū)塊的交易執(zhí)行后狀態(tài)

  • (最新 — 1)快照區(qū)塊之后的完整區(qū)塊?

我們可以對(duì)存儲(chǔ)成本進(jìn)行簡(jiǎn)單的數(shù)學(xué)計(jì)算:假設(shè) epoch 持續(xù)時(shí)間為 2 周,則區(qū)塊重放大小為

  • 2 * 14(天)* 24(小時(shí))* 3600(秒)* 100 * 1000(TPS)= 224 GB!

而且,這里的數(shù)字不會(huì)隨著時(shí)間的推移而增長(zhǎng)!

總結(jié)

我們分析了以太坊當(dāng)前的存儲(chǔ)使用情況:

  • 不僅是區(qū)塊,狀態(tài)存儲(chǔ)消耗了很多的空間

  • 當(dāng) TPS >1000 時(shí),存儲(chǔ)空間用量高得令人望而卻步

我們提出對(duì)區(qū)塊和狀態(tài)進(jìn)行優(yōu)化:

  • 區(qū)塊大小從每年 2.86 TB 減少到 224 GB

  • 狀態(tài)大?。▇10B 帳戶(hù))從 8.3 TB 減少到 600 GB

  • 一臺(tái) 2TB 的普通配置計(jì)算機(jī)應(yīng)該能滿(mǎn)足長(zhǎng)時(shí)間運(yùn)行節(jié)點(diǎn)的條件

  • 缺點(diǎn):輕節(jié)點(diǎn)無(wú)法驗(yàn)證狀態(tài)中的一個(gè)數(shù)據(jù)(必須是全節(jié)點(diǎn))

致謝

感謝 dapp-learning 主辦此次活動(dòng)。教學(xué)全程視頻可點(diǎn)擊公眾號(hào)第二條推送觀看。

tag: IPFS 分析師
免責(zé)聲明:鑫鏈財(cái)經(jīng)作為開(kāi)放的信息發(fā)布平臺(tái),所有資訊僅代表作者個(gè)人觀點(diǎn),與鑫鏈財(cái)經(jīng)無(wú)關(guān)。如文章、圖片、音頻或視頻出現(xiàn)侵權(quán)、違規(guī)及其他不當(dāng)言論,請(qǐng)?zhí)峁┫嚓P(guān)材料。
風(fēng)險(xiǎn)提示:本站所提供的資訊不代表任何投資暗示。投資有風(fēng)險(xiǎn),入市須謹(jǐn)慎。

上一篇:去中心化存儲(chǔ)協(xié)議是否能取代中心化云存儲(chǔ)?

下一篇:IPFS:讓數(shù)據(jù)存儲(chǔ)更加安全

相關(guān)文章
网站地图秦icp备18810132号