為什麼在ZK公鏈上開發錢包應用的實現難度很大?

Engilsh

區塊鏈錢包是數字貨幣生態系統中至關重要的一部分,它們允許用戶安全地存儲、接收和發送數字資產,它們也是用戶部署和介入web3應用的入口。隨著數字貨幣市場的不斷發展和zk技術的不斷成熟,越來越多新湧現出來的公鏈開始使用zk技術來提高安全性和隱私性。然而,這些zk公鏈的錢包實現難度非常大。因為zk技術不僅涉及到許多高級密碼學和數學概念,還需要高度的技術實力和復雜的優化算法。本文將以Aleo這條公鍊為例,探討zk公鏈的錢包的實現難點,以及背後的原因。

解構錢包實現

我們先從底層語言角度來思考區塊鏈錢包到底是什麼?用一句話簡單概括,就是區塊鏈全節點API的wrapper,同時提供一個安全的本地環境來保存和使用用戶的公私私鑰對。通常為了便於開發,全節點會提供大量API給開發者使用,如下圖所示。

而錢包的工作就是屏蔽這些API的細節並進行高度抽象,給用戶提供簡單的UI來跟鏈上進行交互,並在高度抽象的同時,提供安全性和可用性。

當我們發起一筆轉賬時,錢包實際上為我們做了這些:

  1. 在Local Env,生成對應的交易
  2. 在Local Env,使用私鑰給交易簽名
  3. 在Local Env,使用API,操作鏈節點廣播交易
  4. 在Remote Env,鏈節點處理交易並廣播

很明顯當我們處理一筆交易的時候,我們的操作涉及兩種環境,一個是不安全的遠程環境,一個是安全的本地環境。錢包就是將全節點API中涉及隱私和安全性,且比較輕量化的東西(如涉及用戶私鑰的操作)封裝到本地的易於使用的操作環境例如網頁瀏覽器或者移動客戶端。而一些負重大的,像是需要全節點存儲以及大量p2p調用的功能由遠程的服務器去承擔例如雲服務商。

為什麼實現ZK公鏈錢包應用的難度更大?

在ZK公鏈中,一切都變得不同。與傳統公鏈相比,ZK公鏈廣播的不再是簽名的交易(signed transaction),而是已驗證的證明(verified proof)。這裡簡單介紹一下零知識證明技術或者說zksnark技術,通俗的講,zksnark是一種能將計算本質(輸入,過程,結果)隱藏起來,並生成對應的可驗證證明的技術,即證明(輸入,過程,結果)是成立且統一的。

這裡的計算本質可以是任意的編程語言,但通常在區塊鏈中我們指的是對應的ZK智能合約編程語言,例如Aleo中的Leo、StarkNet中的Cairo等。

一切看起來很美好,不僅帶來了安全性,還帶來了隱私性,zkSNARK Succinct的特性還能為傳統區塊鏈做二層的擴容,但世界上沒有免費的午餐。

1.生成證明的過程十分緩慢

生成證明的時間太長了,需要大量的計算資源參與,才會有更好的使用體驗,因為生成證明涉及大量數學運算例如基於多項式的NTT (Number Theoretic Transform)計算和在橢圓曲線上進行的MSM (Multi-Scalar Multiplication)計算。在上文中,我們說過錢包的主要運行環境就是輕量化的移動客戶端和網頁瀏覽器,而這些場景很可能缺乏生成證明的環境例如對應智能合約的虛擬機(VM),並且也通常缺少所需的計算資源。

那我們是否可以把虛擬機編譯成WASM放在web環境裡?確實可行,但是計算資源的硬性要求依就無法解決,為了一筆轉賬交易,你可能需要讓你本就“孱弱”的手機不斷高負荷運行一分鐘才能完成。

當然,終極的解決辦法是有的,Aleo團隊在他們的ZEXE的論文中提到了一種Delegatable Transaction的解決方案,大致能理解為通過使用密碼學方式,在不洩露隱私的情況下,將生成證明委託給第三方計算服務商,再將證明交還給客戶進行類似簽名的操作後再提交上鍊。這樣就讓許多輕節點設備能夠快速且無負擔的操作ZK智能合約。 (圖注 ZEXE Delegable DPC scheme)

2. ZK 隱私權衡

為了保證隱私性,ZK公鏈也需要在底層數據模型上做很多改變,比如Aleo基於比特幣的UTXO模型設計的RNK(the records nano-kernel)模型。

它在不犧牲可編程性的同時,又保證了隱私性,但同時也帶來了許多複雜性。如果普通的、dApp開發者想要在此基礎上開發應用,就不得不對鏈的全節點開發瞭如指掌。因為實際上全節點暴露出來的接口往往是raw的,你不得不在這個基礎上考慮事務的原子性、更合適的接口抽象,甚至不得不為其做性能優化。這對於只專注於合約開發的開發者來說無疑是一種負擔。

解決方法也是類似的,將這部分服務外包給一個AaaS(API-as-a-Service)服務商,由他們來提供高可用、高性能的鏈交互接口,這樣在不失去性能的前提下,極大的減少了開發的複雜度。

ZK未來架構

從上文中,我們能大致地窺探到未來的ZK世界可能會有的架構。圍繞著開發者和ZK公鏈會產生大量的服務提供商,這些服務提供商承擔了開發者和鏈交互的出入口,就如同Web2的雲服務商一樣。 ZKRush 作為零知識賽道上的基礎設施服務提供商,目前主要的工作重心在於 zkp 的算法和硬件層面的加速,努力在生成證明的過程中實現性能大幅提升,能耗顯著降低。隨著時間的推移,以及 ZK生態的發展,鏈服務也將成為我們的構建方向。

鏈接已復制!