以太坊真全節點不足100個?這背後的故事鮮為人知

買賣虛擬貨幣

關於比特幣和以太坊的節點對比,社羣最常用的方法,是使用節點統計網站的資料,例如,當前bitnodes.earn.com統計的比特幣節點數是10459個,而ethernodes.org統計的以太坊節點數則是8580個。乍看之下,兩大區塊鏈網路似乎平分秋色。

(比特幣節點數)

(以太坊節點統計數)

實則不是這樣。

我們首先需要了解的背景是,當前,完整的比特幣區塊鏈交易資料大小約為200 GB,而完整的以太坊區塊鏈資料則達到了比特幣的10倍,接近2TB

以太坊的狀態爆炸,使得使用者要完整儲存資料變得不現實,也因此,當前以太坊的8000多個節點,絕大多數是修剪過的全驗證節點,當然,為了好聽一些,以太坊官方還是將這類全驗證節點簡稱為全節點,而把完整儲存歷史狀態資料的節點稱為檔案節點(Archive Node),而在今天,以太坊全網的檔案節點已不足100個了。

而比特幣的全節點,其實就相當於以太坊的“檔案節點”,當然,比特幣也有類似的修剪節點,這是在Bitcoin Core 0.12.0 版本客戶端之後提供的一種功能。

而這種修剪節點,同樣可獨立完成比特幣轉賬確認,但是它並沒把整個區塊鏈都儲存到本地,也就無法提供完整的區塊鏈給其它節點。

可以說,無論是比特幣的全節點,還是以太坊的檔案節點,它們都是各自網路的主心骨,如果網路完全失去了它們,網路的安全性將大大降低,而這類節點數越多,就代表著網路的抵抗性越強。

下面分享一個關於真以太坊全節點(來自BlockCypher CEO )的悲劇故事:

“由於君士坦丁堡硬分叉,BlockCypher的以太坊API幾乎被淘汰了一個月。本文會解釋發生了什麼,我們吸取了什麼教訓,以及我們正在做什麼,以防止將來發生這種型別的停機事故。

為君士坦丁堡硬分叉提前做準備

以太坊團隊在2018年12月份中旬宣佈,以太坊將在19年1月份進行君士坦丁堡硬分叉。開發者稱即將到來的分叉,將是以太坊歷史上最不重要的分叉。對此,我們不同意,這次硬分叉影響了數百個原始檔。按照以太坊官方概述的協議,我們主動開始遵循他們的指示,這也涉及到修改我們的備份儲存。我們團隊在聖誕節期間加班,並在2019年1月份的第一週完成了這項工作。

我們以為已經準備好了。

到了1月8日,發生了大問題

1月8日晚上,我們意識到我們的以太坊狀態出現了問題,但我們不知道發生了什麼,我們只知道一些小資料丟失了。以太坊狀態是不可解讀的,所有資料都經雜湊存入樹結構當中,這使得我們不可能找出到底發生了什麼問題。

我們嘗試了多個恢復過程,但都沒有成功。我們一直遭遇丟失資料錯誤(一個Trie節點)。

由於多次嘗試後仍未能發現和恢復丟失的資料,我們開始了“快速”同步過程:完成“快速”同步需要2天多的時間。不幸的是,它沒有幫助我們恢復丟失的資料,也沒有恢復我們的狀態。

你們可能會問:

為什麼快速同步不起作用?因為它只包含整個區塊鏈資料的一小部分。為了可靠地提供和操作我們的API,我們需要所有的資料

為什麼我們不在君士坦丁堡更新之前備份我們的狀態?我們做了,但它因還原而部分損壞了。另外,以太坊狀態不是一個可以簡單備份和修補的資料庫。它不能在以太坊節點線上的情況下完成,也不能以增量的方式完成(遠超過1 TB)。

(經驗教訓1:以太坊狀態與其他區塊鏈非常不同。它不能使用任何傳統的備份方法進行恢復。)

漫長的完全同步遊行開始了。

作為最後的手段,我們在1月12日開始對超過2 TB的以太坊狀態進行“完全”同步。由於知道了我們必須應對的規模,我們升級到了最大的可用機器,試圖讓同步工作更快,但幫助並不大。

我們無能為力地等待和檢查。

1月14日,君士坦丁堡硬分叉計劃在生效前一天被推遲了,顯然,安全審計發現了一個漏洞,允許潛在攻擊者從智慧合約中竊取加密貨幣。最後一分鐘的取消,令我們非常沮喪。如果我們等到君士坦丁堡生效後才開始實施,我們就可以節省大量的工作、焦慮和開支……而且我們的ETH API將一直工作。

(經驗教訓2:不要提前計劃以太坊升級,先等他們發生。)

兩週後,我們瞭解到“完全”同步實際上不是完全狀態修復。

兩個多星期後,我們的以太坊狀態恢復了,但這並不是我們災難的結束。結果,完全同步預設為不包括完整的Trie狀態。如果你正在進行完全同步,為什麼預設設定不包括所有內容?這違背了邏輯,我們的下一個挑戰是如何將Trie狀態新增到“完整”狀態。

Vitalik,請幫忙!

在研究了我們能想到的,將Trie狀態新增到以太坊狀態的所有方法之後,我們請求Vitalik提供幫助。他給我們的第一個回覆是:“哦,你們是少數幾個執行那些大的、可怕節點的運營者之一。” 我們問他是否知道有其他人執行一個“大的、可怕的節點”,看看我們是否可能與他們同步,但Vitalik不知道任何人,儘管以太坊基金會也保留了以太坊區塊鏈的完整存檔副本。我們無奈之下再次開始完全同步,這次包括Trie狀態。

(經驗教訓3:如果進行鏈重組,我們可能是唯一瞭解以太坊交易歷史的公司)

……

而另一種只下載區塊頭交易或狀態資料的節點,我們稱之為簡化支付驗證(SPV)節點,又稱輕節點,而比特幣和以太坊,都擁有此類節點。(目前,研究者們又提出了簡化版SPV節點,又稱超輕節點,例如

在正常情況下,SPV輕節點的執行是良好的,但當多數全節點出現不誠實行為的情況下,輕節點的安全保障就會變得較弱。例如,儘管在比特幣或以太坊網路中的多數非誠實節點,目前只能審查、反轉或重排序交易,如果所有的客戶端都使用的是輕節點,多數共識將能夠相互勾結,產生包含憑空創造貨幣的交易區塊,而輕節點將無法檢測到這一點。另一方面,全節點將立即拒絕掉那些無效區塊。

而由於以太坊的資料太過龐大,其會遇到的挑戰也就越大,為此,以太坊創始人等研究者就提出了欺詐證明方案和資料可用性證明系統(論文:欺詐證明:透過多數非誠實節點,實現最大化輕客戶端安全性並擴充套件區塊鏈)。

簡單說,如果以太坊網路有一個誠實的全節點,它願意生成在最大網路延遲的情況下傳播的欺詐證明,然後輕客戶端就能夠接收和驗證來自全節點的無效區塊欺詐證明,而資料可用性證明系統,則負責讓輕客戶端能夠保證全節點生成欺詐證明所需的區塊資料是可用的。

透過這種方式,使得以太坊輕客戶端的安全程度能夠向全節點靠近,當然,這只是在理論上的。

總的來說,就目前的情況而言,比特幣的節點健康度是要好於以太坊的,而後者想要解決這個問題,就需要付出更多的努力。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;