比特幣區塊鏈能否消除智能合約中對可信計算的需求?
讓我先說我是新手,但這是我對比特幣區塊鏈如何工作的粗略理解。(這主要基於類似這樣的部落格文章。)如果 A 想將一定數量的比特幣轉移給 B,他會使用他的私鑰簽署一條授權轉移的消息。未成年人可以檢查消息,並使用執行某種數學運算的程序,可以驗證人 A 確實簽署了消息。但問題是,我們怎麼知道礦工確實做了驗證簽名所需的計算工作?這可以通過一種稱為“工作量證明”的協議來解決,礦工可以通過該協議證明他進行了驗證計算。
當我聽到“外部狀態合約”的概念時,我想起了這一切. 在外部國家契約中,關於世界客觀特徵的某些爭議可以自動解決,而不是委託第三方人類仲裁員公平裁決。例如,契約可以規定,在體育博彩發生爭議時,將自動執行一個電腦程序(具有契約中指定的原始碼),該程序會查詢體育數據庫,確定誰贏得了賭注,而比特幣是相應地自動轉移。但是比特幣維基文章描述了一個問題:你如何確定應該解決爭議的電腦程序實際上已經執行,如果是,執行它的電腦是否公平地報告了程序的輸出?這篇文章建議使用一個或多個被稱為預言機的“可信電腦”,
但我突然想到,外部狀態契約的問題類似於我上面描述的通過區塊鏈解決的問題。那麼在這種情況下,為什麼你不能以同樣的方式解決它呢?也就是說,正如工作量證明協議可以用來證明礦工執行了確定簽名是否真實的程式碼一樣,為什麼不能讓礦工執行外部狀態合約的爭議解決程式碼,以及然後確定他們是否真的使用工作量證明協議執行程式碼?這將消除對可信電腦的需求。
這兩種情況之間是否有任何顯著差異會使這不可行?這已經完成了嗎?
任何幫助將不勝感激。
先感謝您。
…您如何確定應該解決爭議的電腦程序實際上已經執行,如果是,那麼執行它的電腦是否公平地報告了程序的輸出?…
但我突然想到,外部狀態契約的問題類似於我上面描述的通過區塊鏈解決的問題。那麼在這種情況下,為什麼你不能以同樣的方式解決它呢?
如果我理解正確,您要問的問題是:為什麼不能擴展區塊鏈信任/協調系統來解決有關計算輸出有效性(或觀察有效性,例如“誰贏了這場比賽?”)。畢竟,如果區塊鏈讓每個人都同意交易記錄,為什麼不就世界的任意主張達成一致呢?
簡而言之,答案是區塊鏈將其“證明”的“主張”限制在可以通過建構提供(強有力的)證據的“主張”。這些聲明依賴於特殊的加密屬性,這些屬性(據我們所知)不能推廣到關於世界的任意聲明。
更具體地說,區塊鏈聲稱(並獲得網路協調)類似於“這些交易按此順序發生”。它通過說:“交易 T30 一定已經被已經看過交易 T29、T28 的人看到了……並且在它上面花費了 9000 個工作單位(例如,SHA-256 的計算)。” 反過來,SHA-256 如何具有已知的計算難度證明了這一點,並且交易 T30 的工作證明是從先前的交易中唯一生成的。
這是一個非常不同的問題,而不是證明某個(系列)計算具有某個結果。對於這個問題(正如 Nate Eldredge 提到的),您將需要使用零知識證明,這是一個活躍的研究領域。但是那些 a) 只適用於“純函式”,而不是關於真實世界的任意問題,並且 b) 需要計算和驗證之間的某種不對稱性——即,驗證它們必須比進行計算容易得多,否則你什麼都沒有保存:只需自己進行計算,而不是相信別人的報告!
它離“證明”真實世界觀察的問題越來越遠。所以,是的,我們最好的加密方法是在某些事情上指定一個受信任的地址,然後檢查其簽名的有效性。
在驗證真實世界的聲明方面,我們最好的辦法就是檢查該聲明的所有含義,這只是老式的事實檢查。以球賽為例,這將檢查諸如“報紙對比賽的報導是什麼?聯盟記錄是怎麼說的?誰參加了比賽?” 這在實踐中很好——就像在博彩公司解決問題一樣。但它不提供加密證明,它必須對攻擊者俱有強韌性,例如偽造新聞報導等。
好吧,我現在已經逛夠了。我回答你的問題了嗎?
恐怕你的第一段不准確。
礦工提供的工作證明並不能證明“我已經驗證了簽名”。驗證簽名是一項廉價的計算任務,網路上的每個客戶端都可以(並且確實)自己驗證區塊鏈中的每個簽名都是有效的。他們不必依賴礦工來驗證他們的簽名。事實上,如果我們需要做的只是驗證每筆交易都得到了適當的授權,那麼我們就根本不需要礦工了。
挖礦解決了一個不同的問題,稱為“雙花問題”:可能有兩個不同的交易,都經過適當的授權,因為它們試圖花費相同的硬幣而發生衝突。社區需要能夠就應該接受兩者中的哪一個達成共識。可以任意做出選擇,但為了讓社區堅持該選擇,協議需要工作證明來證明該交易被接受。如果社區(或其中的某個人)後來想要返回並改變其接受哪個交易的想法,他們將不得不重做同時完成的所有工作,這本來是非常昂貴的。已完成的計算工作本身並無用處;工作證明除了證明之外什麼都不證明一些工作已經完成。
您稍後描述的內容在我看來更像是零知識證明。