輕用戶端
輕用戶端是一種不需下載或執行整條鏈、就能檢查區塊鏈的軟體。全節點會重新執行歷史上的每一筆交易;輕用戶端則只下載小小的區塊標頭——也就是鏈的「目錄」——再向連線良好的全節點索取它真正在意的那幾筆資料,連同一份證明這些資料確實屬於該鏈的密碼學證明。其巧妙之處在於:標頭非常小(比特幣標頭每個僅 80 位元組,整條標頭鏈也只有數十 MB),卻透過默克爾根承諾了底下所有龐大的資料。
比特幣最初的輕用戶端設計稱為 SPV(簡易支付驗證),描述於比特幣最早的論文中。要確認一筆付款已入帳,SPV 錢包不需要完整帳本;它只檢查該交易的雜湊值落在某個區塊標頭的默克爾根底下(一份簡短的默克爾證明),且該標頭已被足夠的工作量證明所掩埋。錢包信任的是挖礦的經濟學:偽造一條帶有有效工作量證明的假標頭鏈代價極其高昂,因此一個有真實工作量背書的標頭極可能是誠實的。
權益證明的輕用戶端運作方式不同,因為沒有工作量證明可作為錨點。以太坊信標鏈的輕用戶端改為追蹤一個輪替的「同步委員會」(512 名驗證者),由其為每個標頭簽名;輕用戶端只需驗證該委員會聚合後的 BLS 簽章,並在每個週期追蹤委員會的交接,便能在幾乎不下載任何資料的情況下跟上規範鏈頭。這正是去信任跨鏈橋、以及在瀏覽器或手機內進行驗證得以實現的關鍵。
誠實地說,輕用戶端的保證比全節點弱。它能驗證資料確實被承諾、且(在 PoW 中)有工作量背書,但通常無法檢查每一次狀態轉換都有效、或沒有任何有效交易遭審查——它必須假設至少有一個對等節點是誠實的,並會在出問題時遞交證明。輕用戶端還有隱私代價:藉由向特定節點詢問特定地址,它可能洩漏自己關注哪些地址,除非採用技術來掩蓋查詢內容。
某行動錢包想確認你收到了 0.5 BTC。它只持有 80 位元組的標頭。它向全節點索取該交易以及默克爾樹上一路向上的兄弟雜湊清單,將它們逐層雜湊,再檢查結果是否等於它所信任的標頭內已有的默克爾根——如此即可確認交易被納入,而完全不必下載超過 600 GB 的整條鏈。
SPV 能證明一筆交易已被納入並被工作量掩埋,但它本身無法證明鏈的其餘部分遵守了每一條共識規則——這正是全節點所彌補的缺口。