如何开發出好用的輕量級客戶端?

2021-03-01 17:03:44

大約 5 年前,我們开始構建 Trinity —— 以太坊網絡上的新型 “輕量級客戶端”。那時候 Geth 剛剛發布了第一版 LES 協議,而我們曾心懷遠大的夢想。

遠大的夢想往往被現實所擊倒。這些年來,我們得到了一些教訓:

  • EVM 計算從根本上來說是 “繁重的”。

  • LES 如同茫茫沙漠,客戶端就是沙漠中渴求數據的旅人。

  • 同步並維護狀態的難度過高。

  • 區塊鏈上的歷史記錄在絕大多數情況下是無用的,卻是必不可少的。

  • 核心以太坊協議在本質上對 “輕量級” 不友好。

  • Python 太慢了。

我們的目標是遠大的,方法是有缺陷的。現在是該從頭再來的時候了。

訪問以太坊協議

如果你想要與以太坊協議交互,擺在你面前的是兩個選擇:

  1. 自己運行客戶端。

  2. 使用 Infura 等中心化提供商的服務。

上述兩個選擇可以滿足大多數用例的要求,但是它們位於兩個極端。以太坊客戶端需要消耗大量磁盤空間,花費數小時乃至數天時間進行同步,而且對 CPU 和內存的佔用通常很大。中心化提供商是一種簡單可靠的方案,但是要以犧牲隱私性、安全性和去中心化原則為代價。

為什么我們不能有介於二者之間的第三種選擇?互聯網已經證明過很多次了了,在困難模式和簡單模式之間,人們往往會選擇後者。

  • 自己托管郵件(難) vs. Gmail(易)

  • 購买 DVD 或 CD(難)vs. 盜版(易)

  • 盜版(難)vs. 流媒體(易)

  • 自己運行以太坊節點(難)vs. Infura(易)

我想過採用隱私保護型解決方案。然而,我的所有交易都是通過 MyCrypto 或 Metamask 完成的。這兩款錢包都來自中心化提供商。它們都支持用戶使用自己的節點,但是就現有的客戶端來說,我認為這么做成本太高。如果我們想與這些中心化解決方案爭奪市場份額,我們需要為用戶提供更好的選擇。

我們對客戶端的要求是:

  • 能夠在資源有限的設備上運行(1 CPU / 1GB RAM / 磁盤佔用量 <1GB)

  • 公开標准 “錢包” 應用所需的 API

  • 不需要同步

從用戶的角度來說,我希望讓客戶端時刻保持運行,而不會影響我的設備的性能。我希望在離线一段時間後,再上线時無需等待客戶端同步。

這就是我心中的 “聖杯”,是我舍命也要攀登的高峯。

錢包

我們這裏講的是如何為錢包構建一個完美的客戶端。錢包無處不在,而且主要由中心化提供商支持。總的來說,錢包要滿足以下需求:

  • 追蹤區塊鏈的最新區塊

  • 查看账戶余額和 nonce

  • 讀取合約信息(如代幣余額)

  • 估算交易的 gas limit

  • 發送交易

  • 監控需要打包的待處理交易

大多數錢包都採用標准化的 JSON-RPC API。根據上述需求轉化成的 JSON-RPC 端點如下所示:

  • eth_blockNumber用來追蹤鏈首塊

  • eth_getBalanceeth_getTransactionCount用來查看账戶信息

  • eth_call用來讀取合約信息

  • eth_estimateGas用來估算 gas limit

  • eth_sendRawTransaction用來發送交易

  • eth_getTransactionReceipt表示交易已經被挖出

如果我們更深入分析該功能的必備條件,就會得到更低一級的需求:

  • 訪問账戶和合約存儲以支持eth_calleth_estimateGaseth_getBalanceeth_getTransactionCount

  • 訪問gossip網絡來追蹤鏈首塊和eth_sendRawTransaction

  • 訪問鏈上歷史記錄來獲得eth_getTransactionReceipt

因此,如果我們可以滿足這些需求,就可以構建一個適合輕量級錢包的客戶端,不需要同步,也無需犧牲隱私性和安全性。

如今的以太坊網絡

目前,以太坊客戶端可以在以太坊協議和 LES DevP2P 協議之間進行選擇。

LES 協議採用服務器/客戶端模型。在該模型中,數據會根據要求從服務器流向客戶端。該協議不允許客戶端通過任何有意義的方式返回數據,這點可以從協議狀態看出。根據我的經驗來看,LES 協議中的服務器和客戶端在數量上嚴重失衡。運行服務器的成本很高,現有服務器的數量不足。這就導致 LES 變得不可靠,而且經常會變得完全不可用。

以太坊協議則另有缺陷。該協議很好地達到了目的,確保網絡中所有的節點都盡可能地復制了完整的歷史記錄和狀態數據。這對客戶端的要求很高。網絡中的每個節點都必須保存完整的歷史記錄和狀態。沒有保存這些數據的節點不太可能保持健康的點對點連接,可能會在無法滿足對等節點的數據要求時斷开連接。

在本系列文章中,我們想要解構以太坊協議這一 “龐然大物”。該協議包含了我們理想的客戶端類型的所必備的一切功能。它的設計適合全節點和礦工,但是不適合我們所概述的輕量級客戶端。

解構以太坊協議

讓我們將目光轉向以太坊協議……

我們需要解決這個問題。在與以太坊協議交互時,人們可選擇的方式有限,而且高度依賴中心化提供商。當前的網絡狀態就預示了未來可能發生的情況。

我們構想了另一種適用於以太坊錢包的輕量級客戶端。這一構想不只是一個想法,而是以實驗、原型以及我們對現有協議不斷深入的認知為基礎的。

我們正在研究的解決方案需要對核心以太坊協議進行一些修改,以便支持該用例。在該系列的下一篇文章中,我將概述需要修改和新增的部分,以及我們計劃如何去實現它們。最重要的是,我將講述我自己對這一新型輕量級客戶端的用戶體驗的期望。

原文鏈接:

https://snakecharmers.ethereum.org/the-winding-road-to-functional-light-clients/

作者: Piper Merriam

翻譯&校對: 閔敏 & 阿劍

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。

推薦文章

btc日內再次下跌 短线應當如何處理?

盡管以太坊現貨ETF獲批是個好消息,但市場反應卻不如預期。在消息公布後,以太坊價格出現了小幅下跌,...

加密蓮
67 1個月前

7月23日、BTC(合約)ETH(合約)行情分析及操作策略

昨日收益還是不錯的,日內給出的現價空單分別止盈我們目標點位,恭喜跟上的朋友喫肉。時間一晃到月底了,...

倪老師
67 1個月前

幣圈院士:血與淚的教訓!交易者為何總是撞死在同一棵樹上?

幣圈院士談。交易市場中的幾種“死法” 在幣圈市場鱗次櫛比的海洋,風起雲湧,時常讓人感到驚手不及。在...

幣圈院士
59 1個月前

7月23:Mt. Gox 比特幣錢包在市場緊縮的情況下轉移了價值 28.2 億美元的 BTC

7月23:Mt. Gox 比特幣錢包在市場緊縮的情況下轉移了價值 28.2 億美元的 BTC一個引...

168超神
66 1個月前

悅盈:比特幣68000的空完美落地反彈繼續看跌 以太坊破前高看回撤

一個人的自律中,藏着無限的可能性,你自律的程度,決定着你人生的高度。 人生沒有近路可走,但你走的每...

我是周悅盈
57 1個月前

btc完美盈利 晚間波動較大注意

昨日btc空單完美給到,最大化走出一千七百點空間~ btc: 日內开盤下跌繼續測試66000一线,...

加密蓮
60 1個月前