热门话题
#
Bonk 生态迷因币展现强韧势头
#
有消息称 Pump.fun 计划 40 亿估值发币,引发市场猜测
#
Solana 新代币发射平台 Boop.Fun 风头正劲
在我们等待Storm审判的裁决时,提醒一下,隐私池只是数学,并不难理解。
任何人都可以实现一个。
所以这里有一个关于它们如何工作的基本直觉的线程:
目标是建立一个系统,使每笔交易中的所有信息对用户完全保密。
我们对我们的交易系统不应有任何低于此的期望。
这是基本的人权——隐私权。
问题是,如果所有信息都是私密的,区块链如何知道交易是有效的?它如何知道用户实际上拥有他们打算发送的资金?他们没有进行双重支付?
显而易见的答案是:零知识证明(zk-proofs)。但真的是这么简单吗?
假设你有一个余额为10的账户。你想向Roman的防御发送5。因此,你制作了一个zk-proof,证明你有10,并且你的交易发送了5。看起来很简单!
但是等等!当你证明自己拥有10个时,这个证明是关于过去某个状态的,在你的交易被包含的最新区块之前。也许从那时起,你已经花光了所有的币!你如何证明在最新区块中你仍然拥有10个?
这实际上相当棘手,这也是为什么保护池在基于账户的系统中并不真正有效——没有简单可靠的方法可以实时向区块链证明最新状态。
解决方案?使用UTXO。比特币中著名的“未花费交易输出”。
在UTXO中,你没有一个可更新的账户,而是有单独的“票据”,这些票据只能被完全使用一次(就像真正的硬币)。UTXO系统在开发时通常有点麻烦,但这种“一次性使用”的特性使它们在保护池中非常有用。
在像比特币这样的UTXO系统中,当你去花费一个UTXO时,所有的全节点都可以检查该UTXO是否存在(它是在过去创建的)并且尚未被花费。这是直接的。但是如果UTXO中的所有数据都是加密的,我们该如何检查呢?
不仅数据是加密的,我们甚至不想透露*哪个* UTXO 被花费。如果我们这样做,那么发送给你的 UTXO 的人就会知道你何时花费它。在理想的隐私池设计中,交易不会泄露任何信息。
隐私池的核心技巧是引入一个可以公开揭示的“无效值”,但这个值是由每个 UTXO 的花费者唯一派生的。为了花费 UTXO,区块链会检查该无效值是否已经存在。这确保了每个 UTXO 只能被花费一次。
现在我们可以回到我们的 zk-proof。我们只需证明我们正在花费的 UTXO 确实存在于链上,并且我们为其揭示的 nullifier 是正确地从我们正在花费的 UTXO 中推导出来的。
就这样!
实际上,这意味着保护池系统通常保持两个不同的梅克尔树。一个包含UTXO的哈希(UTXO通常被称为“票据”,它们的哈希被称为“票据承诺”),另一个包含无效器。两个树都是仅追加的!
当新票据被创建时,它的哈希值会存储在票据的梅克尔树中。票据本身是加密的。当用户稍后去花费该票据时,他们会计算该票据的无效化器,并制作一个零知识证明,显示该票据在梅克尔树中且无效化器是正确的。
nullifier 被公开揭示,链检查它是否已经存在于 nullifier 树中。然后它被存储在那里,以便该票据不能再次被花费。实际上,没有人能知道哪个票据正在被花费,因为原始票据在票据树中保持不变!
这就是今天所有隐私池的基本设计,包括 @Zcash、@TornadoCash、@penumbrazone、@namada 等等。
当然,隐私池设计涉及的内容还有很多。请继续关注更多讨论,我们将深入探讨这些机制。
@AThryver @0xkaiserkarel 这里对“zk”一词的常见误解和可能误导的用法。请参见

2024年7月24日
TEE?ZKP?MPC?FHE?
关于加密领域最重要的三个字母缩略词,你需要知道的一切
或者,如何赢得朋友并影响他人 🧵
33.43K
热门
排行
收藏