幾個月以前,我加入了 Turbo-Geth 團隊,開始主動給 Trubo-Geth 客戶端貢獻代碼。Turbo-Geth 客戶端是 Geth 客戶端的一個另類版本(當前仍在開發),其目標是做得比原有的客戶端運行速度更快、更高效。那么 Turbo-Geth 實現這個目標的辦法包括下面幾項:
進一步優化數據庫結構
在需要與狀態數據交互的場合,減少對數據庫的讀、寫操作
優化狀態樹操作的效率(有可能需要改變現有狀態樹的數據結構)
在本文中,我會著重指出 Turbo-Geth 和 Geth 在數據庫上的不同之處。主要的區別在于:
不同的數據庫(使用 Bolt,而非 LevelDB)
按桶(bucket)來細分數據庫
孫宇晨:香港致力于為Web3提供開放和清晰的監管環境,非常令人鼓舞:6月8日,波場TRON創始人、火必Huobi全球顧問委員會成員孫宇晨發推表示,香港致力于為Web3提供開放和清晰的監管環境,非常令人鼓舞。波場TRON作為一部分,我們很高興看到這個旅程會帶我們去哪里。
據悉,在孫宇晨轉發的文章中,香港立法會議員吳杰莊在接受采訪中表示,香港對虛擬資產的監管政策較為明確。除了交易所和虛擬資產管理外,香港并未表示需要對其他方面進行監管。例如,不涉及證券和期貨的游戲代幣將不受監管,香港在發展Web3方面相對自由。
同時,《虛擬資產交易平臺經營者適用指引》于6月1日生效后,香港證監會開始接受虛擬資產交易平臺經營者申請牌照,允許散戶投資者使用持牌虛擬資產交易平臺。這一舉措無疑進一步顯示了香港對于虛擬資產的開放態度和推動Web3發展的決心。[2023/6/8 21:24:27]
那么,本文的主要內容也就跟這兩點相關。
《富爸爸窮爸爸》作者:將在市場崩盤時買入更多比特幣:金色財經報道,《富爸爸窮爸爸》作者羅伯特·清崎(Robert Kiyosaki)硅谷在2022年裁員144,000人,到2023年再裁員超66,000人,Stansberry Research已經預測了情人節大崩盤,一切都會崩潰,包括黃金、白銀、比特幣的價格。但不要恐慌,屆時我會用“假”美元購買更多黃金、白銀、比特幣等“真”錢。[2023/2/12 12:01:41]
Bolt 和 LevelDB 其實非常相似,兩者都是 “鍵-值對”(key-value)存儲,設計目標都是為不需要完整數據庫服務器的項目提供簡單、快捷且可靠的數據庫。Geth 選用的數據庫是 LevelDB,而 Turbo-Geth 選用的是 Bolt。
但兩者也有一個關鍵區別:組織數據的方式。LevelDB 是一個 LSM (Log-Structured Merged-Tree)數據庫,而 Bolt 使用 bucket,而且每一個 bucket 都包含著一個 B+- Tree 結構。我們可以把一個 bucket 當作 “大數據庫里的一個小數據庫”。
羅湖:適當放寬港人數字人民幣支付限額:金色財經報道,據羅湖發布消息,羅湖將對在當地工作、生活的港人適當放寬數字人民幣支付限額,深港深度融合發展區商戶可在跨境電子商務活動中使用數字人民幣支付結算,幫助跨境電商提升資金周轉效率,減少周轉時間和結算費用,實現“支付即結算”。此外,羅湖將啟動“數字人民幣深港消費先行示范技術測試”,面向深港兩地居民,面向羅湖全域消費場景,引領全國數字人民幣創新試點。[2022/11/13 12:56:36]
那么,兩者之間的主要區別在于:LSM 數據庫是為重度添加操作(appending)和范圍掃描操作(range scanning)優化的,而不是為隨機讀取的性能優化的;為了提供一致性,它不允許同時對數據庫執行讀、寫操作。也是出于性能考慮,這種數據庫是沒有實現原子性的。Bolt 則反之,插入操作(inserting)速度較慢,但是隨機讀取速度較快,實現了原子性,而且可以同時對數據庫讀寫。
安全團隊:Celsius向Aave協議償還2000萬枚USDC:7月11日消息,據派盾(PeckShield)監測顯示,被Etherscan標記為Celsius Network 的錢包地址(0x8aceab8167c80cb8b3de7fa6228b889bb1130ee8)向Aave協議償還2000萬枚USDC。[2022/7/11 2:04:53]
我們再稍微解釋一下原子性:
原子性:“原子” 意味著不可分割。假設現在我們要給一個數據庫存儲多個哈希值,而其中一個在插入數據庫時失敗了,如果此時所有哈希值的操作都會同時撤銷,這就叫做原子性。Turbo-Geth 就有這樣的特性,只有所有哈希值的插入操作都成功時,這個操作才能成功。而沒有實現原子性的數據庫(比如 LevelDB)則意味著,必須使用一個 workaround 以安全地將數據插入數據庫。換句話來說,在這個點上,我們覺得 Bolt 更好,因為他在給數據庫添加數據時更安全。
如前所述,Turbo-Geth 是切分成多個 bucket 的。每個 bucket 都是大數據庫中的一個小數據,各自包含了一個 B+-Tree 結構。
下面便是 Turbo-Geth 數據庫在區塊高度 9,346,492 處的切分:
- Turbo-Geth 的 Archive 節點的數據區分(區塊高度為 9,346,492)-
Geth 客戶端的 Archive 大小(區塊高度 9346492): 3.7 TBParity 客戶端的 Archive 大小(區塊高度 9346492): 3.6 TBTurbo-Geth 客戶端的 Archive 大小(區塊高度 9346492): 652.62 GB每一個部分都存儲在一個 bucket 里面。其中主要部分的簡要解釋如下:
原象(preimage):哈希值與地址之間的管理,以及存儲位置哈希值與存儲位置之間的關聯
收據(receipt):交易收據
合約存儲內容的歷史(History of Storage):合約存儲內容的變更歷史
賬戶歷史(History of Accounts):賬戶的變更歷史
區塊頭:每個區塊的區塊頭
區塊體:每個區塊的區塊體
合約存儲內容(Contract Storage):就是合約存儲內容
ChangeSet:數據庫變更歷史
賬戶:賬戶
使用這么多 bucket ,是為了讓構成大數據庫的各 B+-Tree 樹高不至于太高,這樣跟數據庫的交互就會比較容易。換句話說,這是在使用多個 bucket 來提高讀取數據庫的性能。
在切換到 Bolt 之后,Turbo-Geth 在處理隨機鍵(比如交易哈希值)時遇到了一些問題,因為 Bolt 會在提交數據之前對這些鍵進行排序(sort),又因為這些哈希值都是隨機的,而且數量很多,所以產生了大量的排序需求,然后導致大量的寫入放大現象(write amplification,實際寫入的物理數據量是寫入數據量的多倍)。而 BadgerDB 使用 log-structured-merge(LSM)模式,似乎是一個更好的選擇。這個問題仍在研究當中,不過,我們已經實現了一個 workaround 來解決這個問題。
這里有一個圖表,顯示了 BadgerDB 和 BoltDB 在整體性能上的對比(感謝 Alexey Akhunov 制圖):
Turbo-Geth 客戶端通過下列(數據庫)手段來優化以太坊的性能:
使用多個 bucket,以更迅速地檢索某些數據片
使用 B+-Tree 而非 LSM
如果你想給我們捐贈,可以通過 Gitcoin。
與中本聰在白皮書里面描述的方向「點對點電子現金系統」不同,經歷了十年左右的發展和沉淀,現如今比特幣成為了絕大多數人口中的——數字黃金.
1900/1/1 0:00:00整體市場趨勢 本周,全球加密貨幣總市值由上周2900億美元附近下降至當前約2150億美元,整體大幅約750億美元.
1900/1/1 0:00:00根據我得到的可靠消息,包括 The LAO 在內的幾個營利性 DAO 項目均將于本月底前正式推出,這是自2月14號 Moloch V2 智能合約部署完成之后,第一批實例化的項目落地.
1900/1/1 0:00:002020年2月26日,胡潤研究院發布《胡潤全球富豪榜》(Shimao Shenkong International Center·Hurun Global Rich List 2020).
1900/1/1 0:00:00美國第三大銀行富國銀行的投資部門已向區塊鏈分析公司Elliptic投資500萬美元。 據TheBlock報道,這筆投資也使得Elliptic的B輪融資總額達到2800萬美元.
1900/1/1 0:00:00根據 Skew 的最新數據,Bakkt 的實物結算期貨交易量超過了其現金結算產品的交易量。在過去一個月里,比特幣的日均交易量達到 1400萬美元,而本月稍早,以實物結算的 Bakkt 未平倉合約.
1900/1/1 0:00:00