CREATE2 如何防止隱私系統中的初始存款洩露
作者:佩曼‧莫梅尼,費爾布洛克
沒人需要看到你在上牌桌前購買籌碼。保密轉帳、加密餘額和私人支付管道通常專注於利用密碼學隱藏金額和身分。然而,最大的隱私外洩之一卻發生在任何加密或零知識證明開始之前。這種洩漏發生在創建新的鏈上錢包或金庫的那一刻。
如果系統為每個使用者、每個商家或每個私有金庫部署一個新合約,觀察者就可以追蹤合約的確切創建時間和首次存入的資金。這足以在許多使用場景下破壞隱私。透過觀察合約部署和後續存款,可以推斷出商家的支付量、用戶的初始餘額,甚至有人正在使用私有系統。
CREATE2 提供了一種強大的方法來修復這種元資料外洩問題。
常規部署中的隱私問題
在標準合約部署下,區塊鏈揭示:
誰部署了該合約
合約部署時
第一筆存款是多少?
誰為初始餘額提供了資金
即使資金在系統內部經過加密,第一筆存款仍然可見,因為它必須在合約創建後才能發送。這是在 CREATE 操作下不可避免的,因為地址在部署交易執行之前並不存在。
對於任何保密的穩定幣系統、私人商家結算層或受保護的用戶金庫而言,這都會立即引發隱私問題。一旦部署錢包,全世界都會看到錢包的創建及其初始餘額。
CREATE2 有哪些變化
CREATE2 讓開發者在合約部署前很久就計算出合約的最終地址。此位址由四個輸入參數產生:部署者位址、鹽值、常數前綴和合約的初始化代碼。此位址可以在鏈下計算並私下共享。
此功能具有重要的隱私優勢:資產可以在合約生效之前發送到未來的地址。
換句話說,你可以將資金存入尚未部署的合約中。
為什麼這會隱藏初始存款?
將代幣存入尚未包含合約的地址,看起來與向一個隨機的未使用地址發送代幣並無區別。沒有任何跡象顯示該地址之後會成為金庫、商家結算合約地址或私人穩定幣容器。
這會破壞以下兩者之間的關聯:
存款時間
錢包創建時間
部署者的身份
當合約最終部署時,其中已包含餘額。任何觀察者都無法得知存款時間或初始金額。
這解決了保密支付系統中最大的實際隱私洩漏問題之一。
移除使用者與 Vault 之間的關聯性。
借助 CREATE2,合約可以透過中立的中繼器進行部署。用戶完全無需使用錢包直接操作區塊鏈。地址保密,資金以私密方式存入,部署透過匿名執行器完成。
這樣就消除了通常將使用者的 EOA 與其打算使用的私人保險庫連結起來的痕跡。
為了保護商家的隱私,這可以防止競爭對手或分析公司透過觀察合約的產生並將其與早期存款進行匹配來猜測收入。
為了保護用戶隱私,這可以防止區塊鏈洩露某人已開始使用私人錢包。
將 CREATE2 與機密穩定幣集成
在使用同態加密或零知識證明的系統中,首次存款的洩漏仍然可能洩漏敏感元資料。 CREATE2 透過隱藏錢包創建過程填補了最後一個漏洞。
典型的流程圖如下圖所示:
私有金庫位址是透過鏈下 CREATE2 計算出來的。
用戶或商家將私下收到未來的地址。
用戶將保密的穩定幣或加密金額存入該地址。
中繼器會在需要時部署金庫合約。
金庫建成之初就已內建資金,且沒有明顯的創建標誌。
每一步都無法從外部連結。
這與動態保密的理念相符。密碼學可以隱藏金額和身分資訊。而 CREATE2 則能隱藏創造私密環境的瞬間。
非常適合加密支付基礎設施
保密型穩定幣和商家支付系統通常需要以不洩漏以下資訊的方式運作:
誰獲得了多少
當他們收到它時
他們多久會收到一次付款
商家的日交易量有多大?
CREATE2 允許金庫或結算合約在部署前就以私密方式存在。結合加密傳輸,這可以防止系統中最大的元資料外洩。
結果是形成了一種更完整的金融隱私形式,既涵蓋了加密機密性,也涵蓋了操作隱私性。





