數字合約如何將所有權下放?

買賣虛擬貨幣

作者 |Giacomo Zucco

譯者 | 天道酬勤

責編 | 徐威龍

出品 | 區塊鏈大本營

在本文中,我們將基於使用數字拼圖作為重現稀缺性方式的思想,及基於供應控制機制以賦予數字貨幣一定硬度的重要性,以探索貨幣的概念。透過簽名和指令碼以及稱為CoinJoin的技術證明所有權。

證明所有權:簽名我們的資金計劃使我們第二次把注意力集中在人的話題和“誰”的問題上。你為發行新sat確定了條件,但轉讓它們又如何呢?誰有權更改共享資產負債表中的資料,轉移所有權呢?如果有一個負責重新分配sat的中央機構,則按照當前所有者的指示進行操作(例如,可以使用經典的使用者名稱和密碼方法登入系統,就像你之前的電子黃金實驗一樣), 脆弱的單點故障再次出現:為什麼還要從物理黃金轉移到基於PoW的“數字稀缺”呢?另一方面,如果每個使用者都具有重新分配所有權的平等權利,那麼你的系統將根本無法正常工作:所有人都會被鼓勵繼續將其他人的sat分配給自己。你需要某種一致的權威定義協議,每個人都可以獨立檢查。

解決方案是一種稱為數字簽名的加密技術。它是這樣工作的:首先,Alice選擇一個隨機數,稱為私鑰,她將這個數字絕對保密。然後,她透過一個特殊的數學函式將該數字傳遞給該數學函式,該函式易於在一個方向上應用,但幾乎不可能反轉。結果是另一個稱為公鑰的數字,Alice根本沒有保密,相反,她確保Bob知道它。最終,她透過第二個函式傳遞私鑰和訊息,該函式又很難逆轉,這導致一個很大的數字,稱為簽名。 Bob可以將第三個也是最後一個數學函式應用於訊息,簽名和Alice的公鑰,從而進行肯定或否定驗證。如果結果是肯定的,則他可以確定Alice授權了該訊息(身份驗證),她以後將無法拒絕該授權(不可否認性)並且該訊息在傳輸過程中沒有被更改(完整性)。

在某種程度上,它類似於手寫簽名(因此得名),每個人都可以很容易地檢查一些公開樣本,但是如果沒有”正確的手“的所有者,則很難複製。或者打蠟封印,每個人都很容易根據公章等即便進行檢查,但是如果沒有正確的蠟模,則很難複製。

因此,你可以更改協議,來使工作證明的一部分可以透過數字簽名獨立地重複使用。你實現的第一個模型很簡單:每個使用者獨立生成一個私鑰並建立一個公共帳戶,並標有相應的公共金鑰。當使用者想要轉讓所有權時,他們會建立一條訊息,其中包括他們的帳戶,接收帳戶以及他們想要轉讓的sat數量。然後,他們對訊息進行數字簽名和廣播,每個人都可以驗證。有趣的是,許多著名的(但可能是假名的)開發人員都可以使用類似的方案來對軟體的不同版本進行簽名,以便他們可以自由地更改,改進,修復,更新,稽覈和檢視軟體,以及系統的任何終端使用者。可以在執行各自的首選版本之前,利用最小化和零散的信任網路獨立地驗證所述簽名,而無需單一授權來集中分發軟體。此過程可實現真正的程式碼去中心化。

指令碼和智慧合約不過,你不希望在接受共享資產負債表中的任何更改之前將每個對等方必須檢查的條件限制為僅僅是數字簽名的有效性。你決定每個訊息還可以包含指令碼:一個描述說明接收帳戶(或多個帳戶)必須再次滿足才能再次花費的其他條件。例如,發件人可能需要幾個秘鑰的組合(連結或分離)或特定的等待時間才能消費。從這些非常簡單(且易於審計)的基本型別開始,可以構建複雜的智慧合約,即使在沒有中央參與者的情況下也可以有效地對資金程式設計。

耐用性(和可伸縮性)問題

與一個加密的訊息傳遞系統(如果Alice向Bob傳送一些訊息,只有Bob可以閱讀它們)不同,你的方案並未真正針對耐用性進行最佳化(如果Alice傳送Bob給sat,則必須在Bob之外顯示她的訊息,至少對以後將獲得相同sat的人而言)。

資金在迴圈。收款人不能信任任何轉賬,即使簽名正確,也不能驗證所轉讓的sat是否已真正轉移給該特定付款人,依此類推,從上游回到最初的基於PoW的發行。只要sat有足夠的流通量,活躍的同行就可以瞭解大量過去的交易,並且可以使用取證分析技術對數量,時間,後設資料和帳戶進行統計關聯,從而使許多使用者匿名,並消除他們的可否認性。

這是有問題的:正如在第2部分中所討論的,耐用性對於金錢來說是一種基本的品質,無論從經濟還是社會學的角度來看都是如此。

智慧合約使這個問題變得更加嚴重,因為特定的開銷條件可能被用來識別特定的軟體實現或特定的組織策略。

這種耐用性的缺乏比影響你先前的電子黃金實驗更為嚴重。那時,你將大多數交易後設資料儲存在中央伺服器上,但至少是隻有你自己,而不是任何人 (包括許多Mallory的代理商),誰可以訪問!此外,你可以實施一些特別高階的加密策略,以使自己至少部分看不見使用者之間實際發生的情況。

與此設計相關的還有一個小的規模問題:數字簽名非常大,為了驗證一切,收款人需要接收的傳輸鏈包括許多簽名,這可能會增加驗證的成本。此外,帳戶更改很難並行驗證。

一個新範例:“ CoinJoin”為了緩解此類問題,你決定將模型的基本實體從類似銀行的帳戶更改為未使用的交易輸出(UTXO)。與將sat從一個賬戶轉移到另一個賬戶的指令不同,現在每條訊息都包含一箇舊的UTXOs列表,這些舊的UTXOs來自於過去的交易,作為成分被消費,還有一個新UTXOs列表,作為產品“生成”,為未來的交易做好準備。Bob必須為他希望接收的每筆付款提供新的、一次性的公鑰,而不是釋出一個單一的、靜態的公鑰作為通用帳戶引用(如銀行IBAN或電子郵件地址)。當Alice付錢給他時,她簽署了一條資訊,解鎖以前建立的UTXO的一些sat,並將它們重新鎖定到一些新的UTXO中。

就像有現金一樣,可支出的賬單並不總是與付款請求匹配,因此經常需要進行更改。例如,如果Alice想向Bob支付1,000座衛星,但她僅控制幾個鎖定700座衛星的UTXO,她將簽署一項消耗700顆衛星的UTXO(解鎖總數為1,400座衛星)中的兩個並生成兩個交易新的UTXO:一個與Bob的金鑰相關聯,鎖定付款(1,000 sat),另一個與Alice的金鑰相關聯,鎖定更改(400 sat)。假設人們不會為了不同的支付而重複使用金鑰,那麼這種設計本身就增加了黑暗。但是,當您的使用者開始意識到由單個事務消費和生成的UTXOs並不一定來自兩個實體時,情況更是如此。Alice可以建立一條訊息,使用她控制的舊UTXOs並生成新的UTXOs(與Bob關聯),然後她可以將該訊息傳遞給Carol, Carol可以簡單地新增她想要消費的舊UTXOs和她想要建立的新UTXOs(與Daniel關聯)。最後,Alice和Carol都簽名並廣播了合成訊息(同時向Bob和Daniel付費)。UTXO模型的這種特殊用法稱為“CoinJoin”。(觸發警告:在比特幣的實際歷史中,這種用法並不是中本聰設計UTXO模型本身的依據,而是在UTXO釋出多年後,其他開發者在設計上發現了一個潛在的問題)。它打破了輸出之間的統計可連結性,同時保留了所謂的原子性:事務要麼完全有效,要麼無效,因此Alice和Carol不必相互信任。(如果其中一個試圖在新增自己的簽名之前更改部分簽名的訊息,則現有的簽名將無效。)

你的系統可能會進行更改,實際上可能會進一步改善這種情況:一種不同的數字簽名方案,可以替代你現在使用的數字簽名方案,它是線性簽名。這意味著:在獲取兩個私鑰(除了兩個數字之外什麼都沒有),對每個訊息簽名相同的訊息,然後將結果簽名(也就是兩個非常大的數字)加在一起,結果恰好是對應的正確簽名與兩個初始私鑰相關聯的兩個公鑰之和。這聽起來很複雜,但是含義很簡單:當CoinJoining時,Alice和Carol可以將其各自的簽名加起來,然後只廣播總和,每個人都可以對照他們的公鑰總和進行驗證。正如我們所說,由於簽名是交易中最重的部分,因此只廣播一個而不是多個廣播的可能性將節省大量資源。外部觀察者最終會懷疑每筆交易都是CoinJoin,因為許多使用者可能會追求效率提高。該假設將打破大多數法醫啟發式。 即使沒有進一步的改進,UTXO模型也已經以某種方式提高了可伸縮性:與帳戶模型中的狀態更改不同,它可以使驗證有效地進行批處理和並行化。

到目前為止,你已經瞭解到:你可以使用數字簽名進行所有權下放;你可以使用指令碼系統將交易轉換為可程式設計的智慧合約;稱為CoinJoin的更復雜的正規化可以進一步增加黑暗度和規模。但是,既然你的使用者可以完全去中心化的方式發行sat並轉移它們,它們如何才能確保遵循單一的年表,從而避免雙重支出的攻擊或試圖修改通貨膨脹時間表?這是留給大家的思考題,希望這篇文章對你有用。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;