Full-Node
欺詐證明的想法在現實中是否可行?
我曾經在 Twitter 上讀到過這個,核心開發者 Luke Dashjr 說:
最初的設計是讓全節點創建無效塊的證明,以提醒 SPV 節點注意它們。然後 SPV 節點將驗證這些證明並拒絕無效塊。但事實證明,不可能證明一個塊是無效的。
所以我想知道欺詐證明的想法是否真的可行?如果不是,為什麼?
白皮書稱,SPV 客戶將通過更改違規、下載區塊並自行檢查來避免接受違反區塊的規則。這在今天存在的協議中實際上是不可能的,因為承諾結構意味著對於許多規則,您必須下載以判斷一個塊是否實際上無效的最小數據量是整個鏈——即使您有一個對等點知道無效在哪裡。例如:如果交易花費了一個在鏈中從未存在過的 vin txid,那麼您需要驗證它不存在的聲明所需的最小數據量是整個鏈。
早在 2012/2013 年,我提出了一組額外的承諾,通過允許警報對等方指出無效性(因此稱其為“欺詐證明”),使白皮書描述的內容成為可能。對於上述無效 vin 範例,通過讓每個塊送出到其輸入來自鏈中的哪個位置並簡單地將這些承諾顯示給查詢的 lite 客戶端來證明欺詐。不幸的是,即使這樣還不夠:產生無效塊的礦工可以決定只提供 SPV 請求,並將無效部分隱藏在每個可能提醒其他人注意無效的完整節點之外。
在 2014/2015 年,我建議客戶端從本地可解碼的糾錯程式碼中採樣,以使惡意塊難以在不間接服務於整個塊的情況下服務於部分塊。不幸的是,結果成本很高,只能實現相對較低的安全級別,以防止錯誤地接受無效塊,因此目前比特幣領域似乎沒有人對進一步探索這個子想法感興趣。