輕客戶端是區塊鏈生態系統中的關鍵要素。它們幫助使用者以安全和去中心化的方式訪問並與區塊鏈互動,而無需同步整個區塊鏈。在本文中,我將用簡單的語言解釋什麼是輕客戶端,什麼不是,以及它從何而來。
在討論什麼是輕客戶端之前,讓我們先從說清楚什麼是客戶端開始。電腦科學中的客戶端是連線到伺服器的硬體或軟體的一部分。例如,internet 瀏覽器是一個連線到網站的伺服器以請求其內容的客戶端。在區塊鏈的語境中,客戶端是以點對點的方式連線到其他客戶端的軟體。因為所有這些客戶端都相互通訊,所以它們形成了一個網路,其中每個客戶端都是一個節點。這就是為什麼節點這個術語也被用來代替客戶端的原因。
在以太坊的案例中,過去只有一種型別的節點,現在稱為全節點。這個軟體負責驗證和轉播網路上的交易和區塊。由於無信任環境(開放的網際網路)和區塊鏈的性質,每個全節點需要下載並驗證每個區塊,所以就是在每個區塊中驗證每一筆交易。
parity ethereum 和 geth 這兩個最受歡迎的以太坊客戶端,今天都可以在一臺中等功率的膝上型電腦上執行。然而,下載和驗證整個區塊鏈的區塊是需要時間和資源的。例如,現在需要使用 ssd 來完全同步以太坊區塊鏈。hdd 無法跟上每秒所需的輸入/輸出操作。
全節點使用案例
現在,組織和個人執行全節點是因為他們的業務需要。想想礦工、區塊瀏覽器、交易所。個人使用者可能希望執行全節點,因為這是與區塊鏈互動的最安全方式。在一個更小的範圍內,他們也可能是純粹的利他主義來幫助網路。7*24 小時全天候的執行一個全節點需要良好的知識和資源水平,大多數使用者不願意投資是可以理解的。除了礦工,沒有什麼內建的激勵來執行一個全節點,儘管這部分基礎設施對網路至關重要。
因此,大多數與區塊鏈互動的使用者,不管是否自願,都會使用一箇中心的基礎設施。最流行的軟體錢包預設依賴於第三方託管的節點。這些客戶端連線到遠端節點,並以非密碼驗證的方式完全信任其響應。它的積極方面顯然是增強了使用者體驗,因為這些錢包的使用者不需要執行自己的節點。但是,它們被迫信任第三方節點。預設情況下,metamask、myetherwallet 和 mycrypto 連線到遠端節點,但如果使用者願意,仍然允許他們連線到自己的本地節點。這不是 jaxx 或 exodus 錢包的情況,它們預設連線到遠端節點,而沒有連線到使用者自己的本地節點的選項。這裡沒有提到移動錢包,因為手機無法執行全節點。
像 infura 這樣的公司致力於執行全節點,並免費提供給那些需要它們的人。抽象出同步一個全節點的麻煩,允許任何使用者輕鬆地訪問區塊鏈。這樣的解決方案有助於讓更多使用者能夠訪問以太坊。然而,儘管這一舉措是對生態系統的一個重大補充,但它代表了一箇中心化的單一失敗點,與去中心化的區塊鏈理念背道而馳。直到幾個月前,錢包開發商還沒有其他選擇。
“我們的目標是建立一個相容不同程度‘輕’的協議,從幾乎不儲存任何內容的客戶端到幾乎儲存所有內容的客戶端。”
— pip, parity light protocol(https://wiki.parity.io/the-parity-light-protocol-%28pip%29)
輕量級替代方案:輕客戶端
輕客戶端或輕節點是連線到全節點與區塊鏈互動的軟體。與全節點對應節點不同,輕節點不需要執行 24/7 或讀寫區塊鏈上的大量資訊。事實上,輕客戶端並不直接與區塊鏈互動,而是使用全節點作為中介。輕客戶端依賴於全節點去執行許多操作,從請求最新的區塊頭到請求帳戶中的餘額。
輕客戶端協議的設計方式允許它們以最小信任的方式與全節點互動。這是一個需要理解的關鍵方面,因此讓我們回顧一下以太坊區塊鏈的基礎知識:
1. 普通使用者使用全節點、輕節點或受信任的遠端節點在網路上傳送交易。
2. 全節點從網路上的對等節點接收交易,檢查這些交易的有效性,並將它們廣播到網路。
3. 礦工是連線到特定軟體的全節點。他們像一個普通的全節點一樣從網路上接收和驗證交易,但是會額外投入大量的精力來尋找問題的解決方案,才會被允許生成下一個區塊。礦工使用的全節點透過應該將哪個區塊新增到區塊鏈並構建在其上達成共識。任何在其上構建了至少 10 個塊的塊都被認為是安全的,因為它包含的交易被還原的概率非常低。
現在,回到我們的輕客戶端。作為起點,輕客戶端需要下載區塊鏈的區塊頭。輕客戶端不需要為它對全節點的每個請求去信任全節點。這是因為區塊頭包含一個名為 merkle 樹根的資訊。merkle 樹根就是區塊鏈上有賬戶餘額和智慧合約儲存的所有資訊的指紋。如果有任何微小的資訊改變,這個指紋也會改變。假設大多數礦工都是誠實的,那麼區塊頭和他們所包含的指紋就被認為是有效的。輕客戶端可能需要從全節點請求資訊,例如特定帳戶的餘額。輕客戶端知道每個區塊的指紋,就可以驗證全節點給出的答案是否與其擁有的指紋匹配。這是一個強有力的工具,可以在事先不知情的情況下證明資訊的真實性。
由於輕客戶端需要傳送多個請求來執行簡單的操作,因此所需的總體網路頻寬高於全節點的頻寬。另一方面,所需的資源和儲存量比全節點的資源和儲存量低幾個數量級,同時實現了非常高的安全級別。只需要大約 100mb 的儲存空間和較低的計算能力,輕節點就可以在移動裝置上執行!這意味著手機可以以去中心化的方式訪問區塊鏈。
因為只需要一個全節點的一小部分資訊,所以一個輕節點可以更快地與區塊鏈同步。目前,將整個以太坊主網區塊鏈同步,輕客戶端大約只需要一個小時,但節點同步超過幾秒對任何應用程式來說都太多了。為輕客戶端開發的解決方案可以快速與區塊鏈頂部同步,儘管這些解決方案通常需要權衡。目前,輕客戶端在其程式碼中內建了一個可信的區塊鏈檢查點。正因為如此,客戶端只需要下載最新的區塊標頭檔案,就可以在幾秒鐘內實現同步。輕客戶端使用者信任客戶端開發人員整合有效的檢查點。這種折衷被認為是可以接受的,因為使用者已經需要信任客戶端實現的開發人員。為了以去中心化的方式快速執行同步,parity technologie 目前開發了一種替代解決方案,允許輕客戶端以與全節點類似的方式執行扭曲同步(https://wiki.parity.io/warp-sync)。
未來,輕客戶端會遍佈各地。 — marty mcfly
輕客戶端的挑戰
輕客戶端非常適合主流應用,例如傳送一些交易和驗證帳戶餘額。對輕客戶端的主要批評是,輕客戶端不能直接幫助網路。它們不驗證除自己需要的資訊以外的任何其他資訊,也不從網路向其他對等節點提供或轉播資訊,它們使用來自全節點的資源,而不提供任何的回報。
與全節點相比,輕客戶端提供了更好的終端使用者體驗,同時允許終端使用者以去中心化的和安全的方式訪問區塊鏈。關鍵是要找到一種激勵個人和機構的方式去執行全節點、服務輕節點、懲罰服務壞資料的惡意全節點。使輕客戶端可持續發展的一種方法是讓他們對全節點發出的每個請求執行小額支付。在不久的將來,輕客戶端將在以太坊分片中扮演重要角色,讓驗證節點快速同步不同的分片。輕客戶端還可用於報告惡意參與者(驗證節點或 plasma 許可權)。輕客戶端對全節點的激勵是一個活躍的研究領域,因為激勵是生態系統穩定的關鍵。
有一些很有前途的想法可以讓輕客戶端快速同步,同時避免前面提到的折衷方案。一種想法是允許全節點提供最新的已知區塊頭的零知識證明(例如,zk-stark https://eprint.iacr.org/2018/046.pdf)。然後,輕客戶端可以驗證它並與鏈的頂部同步,而無需事先知道區塊鏈的狀態。
總之,在短期內,輕客戶端將成為去中心化應用程式的骨幹,這對使用者友好的分散式生態系統來說是一個非常好的訊息。
原文:https://www.parity.io/what-is-a-light-client/