CREATE2 如何防止隐私系统中的初始存款泄露
作者:佩曼‧莫梅尼,费尔布洛克
没人需要看到你在上牌桌前购买筹码。保密转帐、加密余额和私人支付管道通常专注于利用密码学隐藏金额和身分。然而,最大的隐私外泄之一却发生在任何加密或零知识证明开始之前。这种泄漏发生在创建新的链上钱包或金库的那一刻。
如果系统为每个使用者、每个商家或每个私有金库部署一个新合约,观察者就可以追踪合约的确切创建时间和首次存入的资金。这足以在许多使用场景下破坏隐私。透过观察合约部署和后续存款,可以推断出商家的支付量、用户的初始余额,甚至有人正在使用私有系统。
CREATE2 提供了一种强大的方法来修复这种元资料外泄问题。
常规部署中的隐私问题
在标准合约部署下,区块链揭示:
谁部署了该合约
合约部署时
第一笔存款是多少?
谁为初始余额提供了资金
即使资金在系统内部经过加密,第一笔存款仍然可见,因为它必须在合约创建后才能发送。这是在 CREATE 操作下不可避免的,因为地址在部署交易执行之前并不存在。
对于任何保密的稳定币系统、私人商家结算层或受保护的用户金库而言,这都会立即引发隐私问题。一旦部署钱包,全世界都会看到钱包的创建及其初始余额。
CREATE2 有哪些变化
CREATE2 让开发者在合约部署前很久就计算出合约的最终地址。此位址由四个输入参数产生:部署者位址、盐值、常数前缀和合约的初始化代码。此位址可以在链下计算并私下共享。
此功能具有重要的隐私优势:资产可以在合约生效之前发送到未来的地址。
换句话说,你可以将资金存入尚未部署的合约中。
为什么这会隐藏初始存款?
将代币存入尚未包含合约的地址,看起来与向一个随机的未使用地址发送代币并无区别。没有任何迹象显示该地址之后会成为金库、商家结算合约地址或私人稳定币容器。
这会破坏以下两者之间的关联:
存款时间
钱包创建时间
部署者的身份
当合约最终部署时,其中已包含余额。任何观察者都无法得知存款时间或初始金额。
这解决了保密支付系统中最大的实际隐私泄漏问题之一。
移除使用者与 Vault 之间的关联性。
借助 CREATE2,合约可以透过中立的中继器进行部署。用户完全无需使用钱包直接操作区块链。地址保密,资金以私密方式存入,部署透过匿名执行器完成。
这样就消除了通常将使用者的 EOA 与其打算使用的私人保险库连结起来的痕迹。
为了保护商家的隐私,这可以防止竞争对手或分析公司透过观察合约的产生并将其与早期存款进行匹配来猜测收入。
为了保护用户隐私,这可以防止区块链泄露某人已开始使用私人钱包。
将 CREATE2 与机密稳定币集成
在使用同态加密或零知识证明的系统中,首次存款的泄漏仍然可能泄漏敏感元资料。 CREATE2 透过隐藏钱包创建过程填补了最后一个漏洞。
典型的流程图如下图所示:
私有金库位址是透过链下 CREATE2 计算出来的。
用户或商家将私下收到未来的地址。
用户将保密的稳定币或加密金额存入该地址。
中继器会在需要时部署金库合约。
金库建成之初就已内建资金,且没有明显的创建标志。
每一步都无法从外部连结。
这与动态保密的理念相符。密码学可以隐藏金额和身分资讯。而 CREATE2 则能隐藏创造私密环境的瞬间。
非常适合加密支付基础设施
保密型稳定币和商家支付系统通常需要以不泄漏以下资讯的方式运作:
谁获得了多少
当他们收到它时
他们多久会收到一次付款
商家的日交易量有多大?
CREATE2 允许金库或结算合约在部署前就以私密方式存在。结合加密传输,这可以防止系统中最大的元资料外泄。
结果是形成了一种更完整的金融隐私形式,既涵盖了加密机密性,也涵盖了操作隐私性。





