Aragon最新研究:通過zk-Rollups進行安全的鏈下投票

本文來自Aragon,原文作者:Nate Williams & Pau Escrich,由 Odaily星球日報譯者 Katie 辜編譯。

Aragon最新研究:通過zk-Rollups進行安全的鏈下投票

本文提出了一個概念,利用zk-SNARKs來實現治理的下一個前沿方向:無gas費+經過驗證+綁定的鏈上治理。

背景

作為領先的數字治理項目,Aragon Labs在研究和創新治理模式方面投入了大量資金。我們已經確定了各種顯示出潛力的Layer 2治理解決方案,但也存在一些技術問題。我們已經能夠在我們專門的投票區塊鏈——Vochain上實現無gas手續費的投票過程,並設計和實現了一種使用以太坊存儲證明(Ethereum Storage proof)的方法,將基於ERC-20代幣的統計從以太坊跨鏈到Vochain。不過到目前為止,將跨鏈結果轉到以太坊的可能性一直是一個開放性的研究問題。

為此,Aragon Labs一直在進行一項新設計的實驗,該設計將允許鏈下投票過程的結果跨鏈到以太坊,而不使用主觀預言或任何其它可信組件。

該提議背後的核心創新是:我們所知的任何系統都無法在鏈下組織投票過程,並基於該過程的結果在以太坊上棉信任地執行操作。此建議的用例可能包括基於結果執行綁定操作的所有治理流程,例如(但不限於)對資產分配或智能合約更改的DAO投票。這些治理流程目前必須在以太坊主網上進行,這會給每個投票者帶來大量的gas費用。或者投票可以在鏈下進行,但要相信外部組件會準確、誠實地將結果轉發回以太坊。

我們的提議將允許完全在鏈下進行的投票過程,在以太坊上以與鏈上治理相同的完整性執行結果,成本僅為鏈上治理的一小部分。

投票協議概念驗證要求

在設計技術解決方案之前,我們定義了研究方案的參數:

投票協議的要求是:

  1. 免許可;
  2. 抗審查;
  3. 能夠在以太坊上綁定結果;
  4. 不產生gas手續費的投票者;
  5. 免於代幣跨鏈;
  6. 儘可能簡單(沒有側鏈);
  7. 可與ERC-20 / ERC-777和NFT一起用於投票。

作為概念驗證設計,我們接受以下限制:

  1. 沒有用戶匿名:投票可以綁定到一個以太坊地址;
  2. 並非沒有收據:購買選票是可能的;
  3. 不是為處理全國範圍的選舉而設計的:只針對DAO或ERC-20 / NFT持有者。因此,應該設置最大普查規模(取決於性能和成本);
  4. 對中繼者(relayers)沒有明確的激勵模式。

理想的提案

根據該提案的設計,當創建一個新的投票過程時,組織者向以太坊提交一個交易,指定ERC-20代幣的合約地址,用於投票者普查。此地址的存儲根哈希(Storage Root Hash)在指定的區塊高度上成為此進程的普查根(census root)。任何持有給定代幣的人都可以通過提供代幣餘額的Merkle Proof 證明(通過EIP-1186)來證明他們的資格。然後,他們可以通過將證明和簽名發送到zk-SNARK匯總中繼者進行投票,後者將計算最終結果的證明。

存在的潛在的問題是,理論上計算結果的zk-SNARK證明(協調者)的參與者可以通過決定排除投票來審查結果。我們通過允許任何人(不僅僅是協調者)提交新的投票來解決這個問題:如果他們檢測到協調者沒有將其包含在內,任何用戶都可以生成並提交包含他們投票的匯總。

我們的提案將運用zk-SNARKS於以下目的:

  • 驗證一個地址之前沒有通過默克爾樹(Merkle Tree)累加器投票;
  • 通過存儲證明驗證用戶擁有代幣;
  • 計算一批選票的部分結果;
  • 驗證選票簽名。

Aragon最新研究:通過zk-Rollups進行安全的鏈下投票

根據上述模式,我們可以發現兩個主要問題:

問題1:ERC20存儲證明驗證對SNARK不友好

ERC-20存儲證明在SNARK中驗證是非常複雜的。這部分是由於它們使用了遞歸長度前綴(Recursive Length Prefix, RLP)解析和多個Kecmack -256哈希驗證,這兩種方法在最先進的SNARK匯總技術中計算效率都很低。這個問題很難解決,所以目前我們使用optimistic驗證來解決這個問題。

問題2:ECDSA / Secp256k1簽名驗證對SNARK不友好

我們可以用來驗證用戶簽名的一種當前加密標準是ECDSA,該標準使用來自以太坊簽名的BabyJubJub密鑰,使用該簽名作為原始私鑰,允許用戶恢復其地址。由於此方法依賴於用戶簽名,因此很容易受到惡意代理的攻擊,這些代理會欺騙用戶在他們的Web3錢包中對欺詐性交易進行簽名。此漏洞存在於瀏覽器錢包用於簽署交易的任何地方。一個潛在的解決方案可能是使用web地址作為派生路徑來派生私鑰。

另一個挑戰是證明每個代幣所有者的以太坊地址批准了BabyJubJub公鑰,以便在投票過程創建的區塊高度進行投票。我們通過一個“單例”智能合約來實現這一點,該合約將以太坊地址映射到BabyJubJub公鑰,用戶必須通過標準交易將他們的密鑰添加到智能合約中。地址到密鑰的映射可以通過optimistic的存儲欺詐證明來實現。因為預計這些授權密鑰將在不同的投票過程中使用多次,此解決方案還通過可重用設計解決數據可用性問題。

總之,我們可以在SNARK中處理大多數驗證,但不包括:

  • 確認一個地址之前沒有通過默克爾樹(Merkle tree)累加器→SNARK進行投票;
  • 通過存儲證明(Storage proof)→Optimistic驗證用戶是否有代幣;
  • 計算部分投票結果→SNARK;
  • 驗證投票簽名→SNARK。

Aragon最新研究:通過zk-Rollups進行安全的鏈下投票

用戶

  • 創建一個源自以太坊簽名的BabyJubJub密鑰,並將其註冊到投票者註冊處(Voter Registry)智能合約。
  • 檢索其賬戶的投票信息和存儲證明,在投票包上生成簽名,並將其轉發給一個或一組中繼者(relayers)。

投票智能合約

註冊投票進程,包括:ERC-20智能合約地址,ERC-20地址的槽位索引→平衡映射,投票進程啟動塊的狀態根哈希,計算計票的進程參數。

通過zk-Rollup監聽新投票的註冊,SNARK將證明:

  • 結果計算;
  • 投票簽名是由BabyJubJub密鑰決定的;
  • 保持投票累加器更新;
  • 保持投票者名單的更新。

允許任何人質疑上次投票登記舞弊的證據。但必須具備以下條件之一:

  • 存儲證明,證明投票人的以太坊地址沒有代幣;
  • 存儲證明,證明投票人的以太坊地址沒有鏈接到一個BabyJubJub密鑰;
  • 證明BabyJubJub密鑰已經投票(該密鑰在“已投票”的默克爾樹中)。

中繼者(Relayer)

  • 階段0:在以太坊上創建選舉進程,並從可用中繼器列表中選擇一個中繼器。選舉組織者需要支付選舉費用(獎勵給協調者)。組織者提供EVM字節碼,這些字節碼需要在DAO智能合約的選舉之後執行,具體取決於結果。
  • 階段1:投票開始。任何人都可以向所選的協調器發送投票包(可以使用HTTPs或libp2p傳輸)。協調器將選中的結果分批捲起來,構建一個zk-SNARK證明,將這個證明和結果上傳到以太坊,收集用戶投出的選票,驗證它們,並將它們廣播給其它中繼者。
  • 階段2:檢測未加入投票的協調者可以捲起自己的投票,並向投票智能合約發送zk-SNARK有效性證明。此外,如果他們檢測到投票添加錯誤,他們可以發送欺詐證明,以證明之前添加的結果是無效的,產生該結果的協調者將被削減。
  • 階段3:當達到投票日期限制時:
    上傳的結果(由協調者和任何第三方)的總和被認為是有效的,獎勵將在協調者和包含更多投票(如果有的話)的參與者之間分配。
    任何人(通常是協調者)調用EVM字節碼執行,使用最終結果作為輸入。

線路和合約

zk-SNARK將匯總投票名單。zk-SNARK證明是基於給定的投票列表、普查根、選舉標識符(electionId)和聚合結果而有效的。

Aragon最新研究:通過zk-Rollups進行安全的鏈下投票

zk-SNARK的輸入:

  • 哈希輸入是為了減少SNARK驗證的gas成本;
  • 私人的選舉標識符;
  • 計算的投票結果;
  • 當前的空符根(nullifiers root );
  • 更新了的空符根;
  • 批量中的投票數;
  • 投票值和對應的BabyJubJub密鑰簽名。

用於上傳協調這結果的智能合約功能調用的輸入為:

  • 選舉標識符;
  • 該批中投票者公鑰的列表;
  • 更新了空符根;
  • 計算這批的投票結果;
  • SNARK證明。

概念實施的證明

我們已經實施了最小可行性的智能合約和線路,從而檢查解決方案的成本和可行性。該概念證明僅包括用戶註冊、投票匯總和舞弊證明驗證。

我們的測試產生了以下gas成本:

  • 用戶密鑰註冊表部署:258536
  • 註冊:68956
  • 投票部署:6673,159
  • 新投票:25989
  • 累計匯總:291801
  • 舞弊證明1 :574574(babyjubjub密鑰未註冊)
  • 舞弊證明2 :908822(賬戶ERC-20餘額為零)

未來的研究

在這個研究的基礎上,我們想更深入地探討以下想法:

  1. 通過SNARKs驗證標準kecak / ECDSA / Sec256k1簽名。我們相信很快,PLOOKUP將能夠驗證這些方案,這將帶來兩種可能性:
  2. 證明BabyJubJub密鑰是從Secp256k1密鑰派生出來的。
  3. 驗證投票簽名本身。
  4. 在SNARK內部驗證存儲證明。我們認為這種複雜的線路可以很容易地通過一個zkVM集成,儘管成本可能是巨大的。我們擔心以太坊客戶端會退出存檔節點,會優先考慮更高的gas費用限制,所以另一個研究領域是嘗試使用EIP1186以外的方法進行存儲證明。
  5. 為了計算計數,嵌入一些操作碼在zkVM中執行,使通用可編程投票線路可以運用。
  6. 在瀏覽器中生成投票證明,通過批處理混合,並遞歸聚合結果,類似於zk.money 協議。這將增加投票過程的隱私。
  7. 允許在瀏覽器級別以分佈式方式計算SNARKs,即使它們的計算代價很高。這節省了對高可見性服務器的依賴,而且完全實現P2P,將所有權力賦予投票者。
  8. 在網絡級別的投票協議中嵌入隱私和混合。
  9. 找到一個合理的、與以太坊2.0完全互操作的加密經濟學模型。
  10. 生成一個獨特的證明,並可以很容易地驗證。這為任何可編程L1和L2(無論是否是以太坊虛擬機——EVM)對任何以太坊投票結果做出反應打開了可能性。長期目標是能夠在任何鏈上投票,並在任何其它鏈上驗證結果。這可能成為某種通過SNARKs交叉rollup/鏈存儲證明驗證的黃金標準。

本文鏈接:https://www.8btc.com/article/6698598

轉載請註明文章出處