比特幣交易所 比特幣交易所
Ctrl+D 比特幣交易所
ads
首頁 > SOL > Info

以太坊技術引介:準無狀態下的同步實驗_TAT

Author:

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

本實驗用到的原始數據和腳本:https://github.com/mandrigin/ethereum-mainnet-resolver-witness-stats引言有一種辦法也許能加速初始同步過程(initial sync process,指從創世塊開始的區塊鏈同步),就是使用區塊見證數據(witness)預先建構出緩存樹(cache trie),來避免速度較慢的狀態訪問。這樣做需要額外占用硬盤空間和網絡帶寬,但也許可以大幅加速同步過程。

其中的原理是,一般來說,要執行一個區塊,我們就需要默克爾樹上的一些數據。雖然在某個塊執行以前,默克爾樹上已經有一些數據了,但這些數據可能不足以執行區塊。所以,正常來說,我們還要從狀態數據庫(state db)中提取出數據并加到默克爾樹上,然后才能驗證交易。這個過程可能會很慢,因為 硬盤訪問/數據庫查詢 的速度比較慢。

根據這個問題描述,我們可以劃分出三種不同的方案:

1)正常流程(也就是當前在以太坊節點中使用的方案)

以太坊社區提案將Gelato Network內部DeFi用例G-UNI衍生為獨立項目:3月14日消息,以太坊社區中的一份提案提議將以太坊智能合約自動執行工具 Gelato Network 的內部 DeFi 用例 G-UNI 衍生為獨立項目。該提案提出:G-UNI 是由 Gelato 核心開發人員構建的內部 DeFi 應用程序,用于展示 Gelato 自動化基礎設施的功能。但截止目前,G-UNI 的 TVL 已經超過 5 億美元,是迄今為止 Uniswap v3 上最大的 LP,且許多主要的 DeFi 項目(MakerDAO、Aave、Fei、Frax、Angle 等)已經在使用該產品進行流動性挖掘。

提案中提到,一旦被通過,G-UNI 將更名為 Arrakis Finance,并將發布治理 Token SPICE。[2022/3/14 13:55:38]

在區塊 B 執行以前,我們有狀態樹 T1;

在需要執行 B 的時候,我們把 T1 中遺漏的數據添加到 T1 上,形成 T1',T1'',等等。每次遇到 T1 上沒有的信息,我們就在數據庫中查找(速度慢)。

執行完 B 之后,我們有了狀態樹 T2,T2 具備執行 B 所需的所有賬戶狀態。

當前以太坊全網未確認交易為77844筆:金色財經消息,據OKLink數據顯示,當前以太坊全網未確認交易為77844筆,當前全網算力為177.13TH/s,全網難度為2.37p,當前持幣地址為43,513,351個,同比增加153,130個,24h鏈上交易量為1,076,248.47ETH,當前平均出平均出塊時間為13s。[2020/7/5]

保持 T2,以備后續使用。

2)無狀態流程

在區塊 B 執行以前,我們并沒有狀態樹;不過,我們可以拿到一個見證數據 W,來重組執行這個區塊所需的狀態樹。

我們執行 W,獲得了狀態樹 T2。

在 T2 上執行區塊 B,不需要查找數據庫。

區塊執行完之后就把 T2 丟掉。

3)準無狀態流程(semi-stateless folw)(即本實驗要測試的方案)

在區塊 B 執行之前,我們有狀態樹 T1,見證數據 W1、W2、……,足以將 T1 轉成 T2

依次在 T1 上執行 W1、W2、……,最后獲得 T2,也不需要查詢數據庫。

動態 | 以太坊測試網提前激活伊斯坦布爾升級,并導致測試網Ropsten分裂:在激活伊斯坦布爾升級后,以太坊測試網絡Ropsten已分為兩個獨立的鏈。據報道,升級已于UTC時間9月30日3:40(北京時間23:40)提前到來,此前原定于10月2日在區塊高度6485846激活。根據以太坊基金會社區經理Hudson Jameson的說法,這是由于異常快速的區塊確認時間造成的。目前看來有兩個不同的鏈正在挖掘Ropsten測試網絡。有很多礦工在舊的Ropsten鏈上開采,有的礦工在新的鏈上開采。根據Hudson的說法,由于硬分叉提前到來,許多開發人員措手不及,因此Ropsten區塊鏈上的大多數礦工都沒有升級到最新軟件。目前尚不清楚這種暫時的分裂最終將如何影響在以太坊主網上激活伊斯坦布爾升級。以太坊核心開發人員將于本周五召開電話會議,討論伊斯坦布爾的測試網激活問題。(coindesk)[2019/10/1]

在 T2 上執行區塊 B,也不需要查詢數據庫。

留著 T2 以備后續使用。

在初始同步中使用準無狀態流程可以獲得無狀態流程的大部分好處 ?,又不需要傳輸那么多數據,因為我們重用了狀態樹緩存。

動態 | 慢霧區:以太坊智能合約Fountain(FTN)現溢出漏洞:以太坊智能合約 Fountain(FTN) 出現溢出漏洞,攻擊者通過調用 batchTransfers 函數進行溢出攻擊,漏洞具體出現在合約代碼 535 行的加法運算上,滿足 canPay 函數校驗后將巨額 token 轉向收款人

0x8cE6ae7e954A5A95ff02161B83308955Ebc832Cf

據介紹,簡書是 Fountain 的第一個,也是最重要的一個合作伙伴。[2018/12/27]

? 在準無狀態方案中,區塊的并行執行會受到更大的限制

那么,為了測試準無狀態方案的性能,我們需要測量兩件事:

這一方法需要額外占用多少 硬盤/帶寬?與完全富狀態的方法相比,它真的更好嗎?

其初始同步速度會快多少?

本文中我們會集中測試硬盤需求。

狀態樹(默克爾樹)的最大規模:100 萬個 node。一旦節點數超過這個值,我們就驅逐 LRU 節點,以釋放內存。用這種辦法,我們就能控制狀態樹對內存的使用。

部分見證數據會存儲在數據庫中(我們用的是 boltdb)。每個條目的結構如下:

動態 | 以太坊再迎全新升級 “君士坦丁堡”將至:以太坊開發者正在準備實施“君士坦丁堡(Constantinople)”代碼——以太坊網絡的下一個全系統升級。在周五的核心開發人員會議上,根據利益相關者的說法,作為一系列升級的第二部分,“君士坦丁堡”旨在提高以太坊網絡的效率和降低費用,該升級將在10月份的Devcon4以太坊會議之前的某個時間被激活。[2018/7/29]

key: byte // 區塊號 + 狀態樹上節點的最大數量value: []byte // 見證數據,按文檔中的描述予以序列化我們不會在見證數據里存儲合約代碼(這是我們當前架構的不足)。

數據按下述方法得到(需要一個同步好的 turbo-geth 節點)

(in the turbo-geth repository)make state./build/bin/state stateless \     — chaindata ~/nvme1/mainnet/mainnet/geth/chaindata \     — statefile semi_stateless.statefile \     — snapshotInterval 1000000 \     — snapshotFrom 10000000 \     — statsfile new_witness.stats.compressed.2.csv \     — witnessDbFile semi_stateless_witnesses.db \     — statelessResolver \     — triesize 1000000 \實驗結果存儲從創世塊開始同步 6, 169, 246 (619 萬)區塊,見證數據的數據庫(bolt db)達到了 99GB。

python quantile-analysis.py cache_1_000_000/semi_stateless_witnesses.db.stats.1.csv

平均值     0.038 MB中值       0.028 MB90 分位值    0.085 MB95 分位值    0.102 MB99 分位值    0.146 MB最大值       2.350 MB數據大小python absolute_values_plot.py cache_1_000_000/semi_stateless_witnesses.db.stats.1.csv從創世塊到 610 萬區塊高度的階段的見證數據大小,圖表在 1MB 處截頂了。按 1024 個塊取滑動平均值。

absolute_values_plot.py cache_1_000_000/semi_stateless_witnesses.db.stats.1.csv 3000000解決上海 DDoS 攻擊之后的見證數據大小,按 1024 個區塊取滑動平均值。

python ddos_zoom.py cache_1_000_000/semi_stateless_witnesses.db.stats.1.csv放大看 DDoS 攻擊對見證數據大小的影響(原始數據)。

可以看到,在 230 萬高度到 250 萬高度,以及 265 萬高度到 275 萬高度期間,見證數據的大小顯著增大。

python full_vs_semi.py cache_1_000_000/semi_stateless_witnesses.db.stats.1.csv

完全無狀態下的見證數據大小是根據準無狀態下的見證數據加上缺失的合約代碼部分調整得來的.

從這張圖可以看出,使用準無狀態方法,可以節約大量數據(與完全無狀態方法相比)。

加上一個無狀態解析器會讓每個區塊需要 傳輸/存儲 的數據量增加 0.4 MB。這個值與按區塊提供見證數據相比,節約太多,即使算上我們改變狀態樹模式能夠得到的增益相比,也節約非常多(關于十六進制樹和二進制樹模式下見證數據大小的區塊,可見我的上一篇文章)(譯者注:中譯本見文末超鏈接)。

如果這個性能還算可以,那么它顯然是加速初始同步的好辦法;而且它的數據需求比完全無狀態方法更小。

Tags:NBSBSPSTATATnbs幣官網BSPAYSTATE價格tat幣多少價格

SOL
金色前哨丨波卡將通過 Second State引入基于WebAssembly 的以太坊2.0虛擬機_區塊鏈

金色財經報道,2020年2月末,區塊鏈基礎軟件公司Second State獲得了Web3基金會的資金支持,雙方合作將把以太坊的WebAssembly虛擬機(Ewasm)引入波卡生態.

1900/1/1 0:00:00
行業研報:區塊鏈如何解決融資難題_ARE

Overview 概述 疫情之下,大量的企業都在艱難地維持運轉,根據《中歐商業評論》中的報道顯示,賬上現金余額能維持企業生存的時間,67.1%的企業可以維持兩個月.

1900/1/1 0:00:00
金色薦讀丨Alphabet:從投資到研發、應用 谷歌區塊鏈正在追趕_QUO

憑借搜索及廣告業務,谷歌(本文中"谷歌"指稱原搜索巨頭谷歌重組后的母公司Alphabet【1】)在互聯網領域一直處于"霸主"地位,最新數據顯示.

1900/1/1 0:00:00
Substrate 極簡概括:功能、特性與共識_TRA

今天我們將討論 Substrate,一個可以幫助你構建自己的自定義區塊鏈的庫。Substrate 是由 ParityTech 研發出來的,也為 Polkadot 提供了基礎.

1900/1/1 0:00:00
美國制藥行業24家公司提交試點報告 提出區塊鏈處方藥追蹤系統_GER

來自美國藥品供應鏈中的24家公司共同向美國食品藥品監督管理局(FDA)提交了MediLedger DSCSA試點項目最終報告,提出了用于美國處方藥的可互操作追蹤系統的區塊鏈系統.

1900/1/1 0:00:00
項目周刊 | 除了比特幣、以太坊本周其他項目進展如何?_區塊鏈

區塊鏈行業發展迅速,行業項目進展日益增多,為此金色財經特整理了本周主流項目以及明星項目的進展,包含二級市場、社區以及投融資等.

1900/1/1 0:00:00
ads