# 精通ZCASH

本文由大宇翻译自[maxdesalle](https://maxdesalle.com/mastering-zcash/)

<figure><img src="https://1896207398-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FkndOd8yXPMu5IiCOU8TW%2Fuploads%2Fs01Mn1RxEvtRWpE8EDut%2Fimage.png?alt=media&#x26;token=3fb1132d-ca7d-474e-9f28-8727b7e94162" alt=""><figcaption></figcaption></figure>

（1989年圣诞节，伦纳德·伯恩斯坦指挥的“自由颂”音乐会庆祝柏林墙倒塌。乐团成员分别代表德国南北双方以及战后占领柏林的四个国家。这场音乐会通过电视直播，在超过20个国家吸引了约1亿观众收看。这象征着自由、民主和资本主义战胜了压迫、极权主义和共产主义。）

### **1. 引言** <a href="#id-1-introduction" id="id-1-introduction"></a>

除非你使用现金，否则你的每一笔消费信息都会被追踪并无限期存储。无论消费内容是什么，无论信息多么敏感，都无一例外。支撑线上线下商业活动的基础设施，实际上已经变成了一个无处不在的监控系统。

比特币刚问世时，人们曾寄予厚望，希望它能解决这个问题，但遗憾的是，它并没有。事实上，与许多人的认知相反，比特币极其透明，因为每一笔交易都会被永久保存，并且对所有人可见。诚然，钱包是匿名的，但为了接收比特币，你需要提供你的地址，这意味着你的所有交易记录和余额都会被发送给发送方。此外，像[Arkham](https://intel.arkm.com/)这样的服务使得追踪和识别钱包变得轻而易举，即使是普通用户也能轻松做到。

这就是当局纵容比特币的原因，因为对国家行为体而言，透明的区块链在很多方面都优于他们自己控制的数字货币（通常称为*央行数字货币*或*CBDC*）。由于民众对使用比特币没有抵触情绪，而且当局对区块链数据的使用也缺乏监管，这使得国家行为体能够完全不受惩罚地追踪一切。

在某些方面，比特币实际上比它试图取代的银行系统更糟糕。至少银行记录对公众来说是私密的；而比特币则不然。

正因如此，Zcash 采取了不同的策略：提供默认隐私保护，而非默认透明保护。这意味着，当您进行Zcash*加密*交易时，发送方、接收方和交易金额都会被加密。网络会验证交易的有效性，确认您拥有足够的资金且支出不超过您拥有的 ZEC，但不会获取任何关于交易本身的信息。

笔记ZEC 是 Zcash 的符号或代码，就像 BTC 是比特币的符号或代码一样。

乍一看，这似乎是不可能的。如何在不透露所证明之事的情况下证明其为真呢？答案是零知识证明，具体来说是一种称为*zk-SNARKs*的构造。本文将以浅显易懂的方式介绍 zk-SNARKs，使其更易于普通读者理解，因为它需要读者具备扎实的代数和承诺方案基础——这超出了本文的范围。

我们还将介绍 Zcash 在学术密码学中的起源、塑造它的哲学思想以及它如今的协议。

这篇关于 Zcash 的综合研究文章中，部分内容会比较专业。虽然我已经尽力让所有内容都清晰易懂，但如果您遇到任何概念上的困难，我建议您向 LLM 寻求解答，或者直接跳过该部分内容，稍后再来学习。如果以上方法都无法解决您的问题，欢迎[随时联系我。](https://signal.me/#eu/TST_2FkJznjly3Xkn2NnsNRDw32eoOTHwO0L9REt2N1A2fOQ_vdKEYb-C-KsvEW6)

<figure><img src="https://maxdesalle.com/chaum.jpg" alt=""><figcaption><p>大卫·乔姆，密码学先驱。</p></figcaption></figure>

### **2. 起源** <a href="#id-2-origins" id="id-2-origins"></a>

#### 2.1 大卫·乔姆与数字现金的诞生 <a href="#id-21-david-chaum-and-the-birth-of-digital-cash" id="id-21-david-chaum-and-the-birth-of-digital-cash"></a>

私人数字货币的概念远非新鲜事物，事实上，它起源于 1982 年。当时还是计算机科学博士候选人的 David Chaum 发表了一篇题为[*“用于不可追踪支付的盲签名”的论文。*](https://link.springer.com/chapter/10.1007/978-1-4757-0602-4_18)

本文的核心观点简洁而精妙：银行可以在不查看数字代币内容的情况下对其进行签名，就像在密封信封外签名一样。这样，当代币被使用时，银行可以通过自身的签名验证其有效性，但无法将消费与提款关联起来。

后来，在1989年，大卫·乔姆创立了[DigiCash](https://en.wikipedia.org/wiki/DigiCash)公司，旨在将这一理念商业化。该产品名为[电子现金（ecash）](https://en.wikipedia.org/wiki/Ecash)，使用户能够从银行账户提取数字代币，并在商家处消费，而不会留下任何将买家与购买联系起来的痕迹。包括德意志银行和瑞士信贷在内的多家银行都曾试用过这项技术。

可惜的是，DigiCash最终失败了，时机不对。要知道，它诞生于互联网商务普及之前，人们也尚未意识到网络隐私的重要性。该公司于1998年申请破产，但凭借电子现金（ecash），Chaum证明了私人数字货币是可行的。

#### 2.2 密码朋克 <a href="#id-22-the-cypherpunks" id="id-22-the-cypherpunks"></a>

不久之后，另一种运动开始形成。1992年，一群密码学家、黑客和自由意志主义者开始在旧金山湾区聚会，并通过电子邮件列表进行交流。他们自称为[*密码朋克*](https://en.wikipedia.org/wiki/Cypherpunk)。

密码朋克并非撰写论文的学者，而是编写代码的意识形态家。他们的创立前提是，在数字时代，隐私不会由政府或企业赋予，而必须由个人使用加密工具来构建、部署和捍卫。1993年，该组织成员[埃里克·休斯在](https://en.wikipedia.org/wiki/Eric_Hughes_\(cypherpunk\))[*《密码朋克宣言》*](https://www.activism.net/cypherpunk/manifesto.html)中将这一概念具体化：

*“在电子时代，隐私对于一个开放的社会至关重要……我们不能指望政府、企业或其他大型的、不露面的组织出于善意而赋予我们隐私……如果我们想要拥有隐私，就必须捍卫自己的隐私……密码朋克编写代码。”*

这个邮件列表成为了孕育未来三十年密码学发展理念的熔炉。成员包括[朱利安·阿桑奇](https://en.wikipedia.org/wiki/Julian_Assange)（[维基解密成立](https://en.wikipedia.org/wiki/WikiLeaks)之前）、[哈尔·芬尼](https://en.wikipedia.org/wiki/Hal_Finney_\(computer_scientist\))（后来收到了第一笔比特币交易）、[尼克·萨博](https://en.wikipedia.org/wiki/Nick_Szabo)（提出了[*比特黄金*](https://nakamotoinstitute.org/library/bit-gold/)，这是比特币的概念雏形）以及[魏戴](https://en.wikipedia.org/wiki/Wei_Dai)（他的[*b-money*](https://nakamotoinstitute.org/library/b-money/)提案曾被中本聪引用）。1997年，另一位成员[亚当·巴克](https://en.wikipedia.org/wiki/Adam_Back)发明了[*哈希现金*](https://en.wikipedia.org/wiki/Hashcash)，即后来被比特币采用*的工作量证明（PoW）*&#x7CFB;统。

密码朋克们并没有创造出成功的加密货币，或者说，他们真的做到了吗？比特币的诞生归功于化名中本聪的人，据传他是一位开发者，或者是一个与密码朋克群体有关联的开发者团队，但他已经十多年没有活动了。无论如何，我们确信的是，密码朋克们构建了使私人货币成为可能的文化、工具和理论框架。

笔记

这篇文章发表后不久，Zcash 的联合创始人 Zooko Wilcox 联系了我，并指出以下几点：

* 他*竟然*在密码朋克邮件列表里！这意味着密码朋克们*确实*成功创建了一种加密货币。我为这个疏忽感到愧疚。
* Zooko 在那里结识了多位创始人，其中包括创立加密无政府主义运动的[Tim May](https://en.wikipedia.org/wiki/Timothy_C._May) 、如前所述撰&#x5199;*《密码朋克宣言》的Eric Hughes、创建 BitTorrent 协议的*[Bram Cohen](https://en.wikipedia.org/wiki/Bram_Cohen)（他曾与 Bram Cohen 一起创办了一家专注于安全哈希链的初创公司）以及[电子前沿基金会的](https://en.wikipedia.org/wiki/Electronic_Frontier_Foundation)联合创始人[John Gilmore](https://en.wikipedia.org/wiki/John_Gilmore_\(activist\))。
* 密码朋克邮件列表对他的成长起到了至关重要的作用，例如，约翰·吉尔摩成为了他的朋友、导师和灵感来源。

#### 2.3 比特币：错误的权衡 <a href="#id-23-bitcoin-the-wrong-tradeoff" id="id-23-bitcoin-the-wrong-tradeoff"></a>

2008 年 10 月 31 日，中本聪在密码学邮件列表中发布了一篇题为[*“比特币：一种点对点电子现金系统”的论文。*](https://bitcoin.org/bitcoin.pdf)该论文描述了一个困扰数字货币设计者数十年的问题的解决方案：如何在不依赖中央机构的情况下防止双重支付？

中本聪提出的解决方案是区块链：一个由去中心化的矿工网络维护的公共账本，采用工作量证明（PoW）机制进行安全保障；这个方案非常巧妙，而且行之有效！比特币于2009年1月推出，人们第一次无需银行、中介机构或许可即可通过互联网转移价值。

笔记本文稍后将介绍矿工和工作量证明 (PoW) 是什么，以及它们在 Zcash 的背景下是如何工作的。

然而，正如上文所述，比特币存在一个显而易见的缺陷：它并不具备隐私性。区块链的设计初衷就是完全公开的：任何感兴趣的人都可以看到每一笔交易、每一个地址和每笔余额。中本聪在论文中也承认了这个问题，并建议用户可以通过为每笔交易使用新地址来保护部分隐私，但这只是一个权宜之计，因为地址可以被聚类，交易图谱可以被分析，并且可以通过交易所、商家和元数据将用户的真实身份关联起来。

[中本聪后来也承认](https://bitcointalk.org/index.php?topic=770.msg8637#msg8637)，一种保护隐私的比特币形式能够更清晰地实现该协议，但当时他无法想象如何用零知识证明来实现这一点。

问题在于，隐私问题多年来一直被忽视。早期的比特币用户认为假名就足以等同于匿名，但他们错了。到了2010年代初期，研究人员证明区块链分析可以高精度地识别用户身份。像[Chainalysis](https://en.wikipedia.org/wiki/Chainalysis)这样的公司（成立于2014年）将这项技术发展成一项业务，向执法机构、交易所甚至政府出售区块链取证服务。

比特币解决了双重支付问题，但却加剧了隐私问题。

#### 2.4 Zerocoin：附加组件的尝试 <a href="#id-24-zerocoin-the-bolt-on-attempt" id="id-24-zerocoin-the-bolt-on-attempt"></a>

2013 年，约翰·霍普金斯大学的密码学家[马修·格林](https://en.wikipedia.org/wiki/Matthew_D._Green)和两名研究生[伊恩·米尔斯](https://www.cs.umd.edu/~imiers/)和[克里斯蒂娜·加曼](https://www.cs.purdue.edu/homes/clg/)发表了论文[*《零币》，*](https://en.wikipedia.org/wiki/Zerocoin_protocol)提出了解决比特币问题的方案。

笔记Zooko Wilcox 在本文发表后分享了一个有趣的事实：Ian Miers 和 Christina Garman 后来成为 Zcash 公司的创始科学家（见第 2.6 节），Christina Garman 后来也加入了董事会。

他们的想法是在比特币之上增加一个隐私层，使用户可以将比特币兑换成*零币（zerocoin）*，这是一种没有交易记录的匿名代币。之后，当用户想要使用零币时，可以将其兑换回比特币。这种转换过程依赖于一种名为零知识证明的加密技术，该技术允许用户在不泄露零币来源的情况下证明其合法性。

Zerocoin理论上可行，但存在一些问题。首先，其证明文件非常庞大，比普通比特币交易所需的几百字节大了两个数量级。其次，其加密技术也存在局限性：虽然可以证明所有权，但无法隐藏交易金额。第三，也是最关键的一点，它需要比特币将其作为协议变更来采纳，但比特币保守的开发文化使得这种可能性微乎其微。

比特币社区对零币（Zerocoin）进行了讨论，最终决定放弃。该提案从未被纳入协议。

#### 2.5 Zerocash：重建 <a href="#id-25-zerocash-the-rebuild" id="id-25-zerocash-the-rebuild"></a>

2014 年，一篇新论文发表。作者名单扩大了，包括 Eli Ben-Sasson 和 Alessandro Chiesa，这两位密码学家一直在研究新一代零知识证明，以及 Eran Tromer 和 Madars Virza。

这篇论文的标题是[*《Zerocash：基于比特币的去中心化匿名支付》。*](https://ieeexplore.ieee.org/document/6956581)尽管标题可能会让你产生误解，但它并非只是比特币的一个扩展，而是一个彻底的重新设计。

这项关键创新在于使用了 zk-SNARKs，即*零知识简洁非交互式知识论证*。这些零知识证明体积小（仅几百字节），验证速度快（毫秒级），且表达力强，足以证明关于隐藏数据的复杂陈述。借助 zk-SNARKs，您不仅可以证明自己拥有一枚有效的加密货币，还可以证明整笔交易的有效性。这并非易事，这意味着系统可以在不泄露发送者、接收者或交易金额的情况下，验证交易金额是否正确、是否存在双重支付等问题。

然而，其中存在一个问题：zk-SNARKs 需要一个可信的设置。必须有人生成一组系统永久使用的公共参数，但如果此人保留了用于生成这些参数的秘密值（即所谓的“*有毒废物*”） ，他们就可以在不被察觉的情况下制造假币。尽管这令人担忧，但研究人员认为，通过精心设计仪式可以避免这种情况的发生。

#### 2.6 创世块 <a href="#id-26-the-genesis-block" id="id-26-the-genesis-block"></a>

[Zooko Wilcox](https://en.wikipedia.org/wiki/Zooko_Wilcox-O'Hearn)在隐私和密码学领域耕耘数十年。他曾在 20 世纪 90 年代就职于 DigiCash，并参与过[Tahoe-LAFS](https://www.tahoe-lafs.org/trac/tahoe-lafs)等具有强大隐私保护功能的去中心化存储项目。因此，当 Zerocash 的论文发表时，他立刻觉得这非常契合他的研究方向。

2016年，威尔科克斯创立了*Zcash公司*（后更名为*Electric Coin公司）*，并组建团队将Zerocash打造成一款量产加密货币。上文提到的几位学术作者也作为顾问和合作者加入了该项目。

上文提到的可信设置问题需要一个创造性的解决方案。团队设计了一个复杂的多方计算仪式：六位参与者分别身处世界各地，各自贡献随机数来生成公共参数；只要至少有一位参与者销毁了其秘密输入，这些“有毒废物”就无法恢复。该仪式于2016年末举行，参与者包括比特币核心开发者[Peter Todd](https://en.wikipedia.org/wiki/Peter_Todd_\(programmer\))以及记录整个过程的记者。为了确保仪式不被破坏，团队做了大量工作，详情请参见[此处](https://spectrum.ieee.org/the-crazy-security-behind-the-birth-of-zcash)。

2016年10月28日，[Zcash创世区块被挖出](https://www.youtube.com/watch?v=O8QA6Nvg8RI)。这是首个真正意义上提供加密隐私的加密货币。在David Chaum发表第一篇论文34年后，不可追踪的数字货币梦想终于在一个实际运行的网络上得以实现。

<figure><img src="https://maxdesalle.com/weimar.jpg" alt=""><figcaption><p>魏玛共和国时期的恶性通货膨胀。纸币贬值之厉害，甚至被用来做墙纸。</p></figcaption></figure>

### **3. Zcash是什么？** <a href="#id-3-what-is-zcash" id="id-3-what-is-zcash"></a>

#### 3.1 比特币入门 <a href="#id-31-a-bitcoin-primer" id="id-31-a-bitcoin-primer"></a>

提示如果您已经了解比特币的工作原理，请随意跳过本节，本节内容面向不熟悉比特币内部运作的读者。

比特币本质上是一个没有中央运营商的支付系统。它没有银行，没有公司，也没有可以指向的单一服务器。其去中心化机制通过遍布全球的数千台计算机运行，这些计算机维护着共享账本（称为*区块链）*&#x7684;相同副本，并遵循一套规则来保持同步。

区块链是一种仅可追加的数据结构，它本质上是由一系列区块组成的链，因此您可以添加新的条目（区块），但永远无法修改或删除旧区块。每个新区块都包含该区块创建时网络上发生的交易。此外，每个区块都引用其前一个区块，从而形成一条链。如果您想更改过去的某个交易，则必须重写后续所有区块，而随着时间的推移，这在计算上将变得不可能。我们稍后会解释原因。

**钥匙和所有权**

比特币钱包使用公钥加密技术。当你“创建钱包”时，实际上是在生成一对密钥：一个私钥（一个随机生成的大数，需要保密）和一个对应的公钥（通过数学方法从私钥推导而来）。比特币地址是通过对公钥进行哈希和编码生成的。

例子

以下是一个实际应用示例（使用缩写`...`）：

* 私钥：`1E99423A4ED27608A15...E6E9F3A1C2B4D5F6A7B8C9D0`
* 公钥：`03F028892BAD7ED57D2F...3A6A6C6E7F8C9D0A1B2C3D4E5F607182`
* 比特币地址：`1BoatSLRHtKNngkdXEeobR76b53LETtpyT`

私钥用于签署消息，而公钥则允许任何人验证签名是否来自相应的私钥，而无需泄露私钥本身。这种加密技术保障了私钥的隐私性，因为您可以使用私钥签署授权转账的消息，而网络可以使用您的公钥验证您的签名，而无需看到您的私钥。

这里的一个重要结论是，这意味着钱包实际上并不“持有”比特币。你的电脑上并没有存储比特币的文件。区块链记录着哪些地址控制着哪些交易输出，而你的钱包只是一个签名工具，它存储你的私钥并用它们来授权交易。如果你丢失了私钥，你就失去了对资金的访问权限；这并非因为比特币消失了，而是因为你无法再证明你拥有这些比特币。

**交易和UTXO**

交易是比特币价值流动的方式。当你发送比特币时，你实际上是在发布一条签名消息，这条消息的意思是：“我授权将这些比特币转移到这个地址”，但这些比特币究竟是什么呢？

比特币并不追踪余额，数据库中也不会记录“地址 X 拥有 3.5 个比特币”。相反，比特币使用*未花费交易输出（Unspent Transaction Outputs*，简称*UTXO*）。每笔交易都会消耗现有的输出，并创建新的输出。你控制但尚未花费的输出就是你的 UTXO。这意味着你的“余额”只是所有未花费输出的总和。这里没有持续更新的比特币数量，只有你控制的一系列离散的比特币。

例子

举个简单的例子：假设你有一张 20 美元的钞票，你想买一件 12 美元的商品。显然，你不能把钞票撕成两半，所以你付了 20 美元，然后收到了 8 美元的找零。

UTXO 的工作原理相同。如果您拥有一个价值 5 BTC 的输出，并想向某人发送 3 BTC，您需要消耗掉全部 5 BTC 的输出，并从中创建两个新的输出：3 BTC 发送给收款人，2 BTC 作为找零返还给您。您最初的 5 BTC 输出现在已被“花费”，无法再次使用。

因此，比特币交易是一种数据结构，其中包含一些元数据以及：

1. **输入内容：**&#x60A8;正在使用的UTXO的引用信息，以及证明您对这些UTXO拥有控制权的签名。
2. **输出：**&#x6B63;在创建新的UTXO，每个UTXO都锁定到接收者的公钥。

节点会验证输入内容是否存在、尚未被花费以及是否具有有效签名。如果一切正常，交易就会在网络中传递，等待被矿工打包到区块中。

例子

以下是实际交易的示例（哈希值和地址用缩写表示`...`）：

```
{
  "txid": "c1b4e693...cbdc5821e3",
  "inputs": [
    {
      "prev_txid": "7b1eabe...98a14f3f",
      "output_index": 0,
      "signature": "304402204e4...1a8768d1d09",
      "pubkey": "0479be66...ffb10d4b8"
    }
  ],
  "outputs": [
    {
      "amount": 3.0,
      "script": "OP_DUP OP_HASH160 89...ba OP_EQUALVERIFY OP_CHECKSIG"
    },
    {
      "amount": 1.99,
      "script": "OP_DUP OP_HASH160 12...78 OP_EQUALVERIFY OP_CHECKSIG"
    }
  ]
}
```

每个输入都通过引用交易 ID 和索引指向先前交易的输出，每个输出都指定一个金额。签名证明您对私钥拥有控制权。输入 5 BTC 与输出 3 BTC + 1.99 BTC 之间的 0.01 BTC 差额是矿工收取的交易手续费。

**挖矿和工作量证明（PoW）**

交易不会自动确认。它们会停留在名为内存池（mempool）的节点的等待区，直到矿工将其打包进区块。挖矿是将新区块添加到区块链的过程，其设计成本很高。这并非漏洞，而是一项特性，我们稍后会看到。

挖矿解决的问题是：在一个没有中央权威机构的去中心化网络中，谁来决定哪些交易有效？谁来决定交易的顺序？如果出现两笔冲突的交易，例如，有人试图两次花费相同的代币，谁来解决这种冲突？

比特币的解决方案是：为了创建一个有效的区块，矿工必须找到一个称为*nonce*的数字，使得当区块头（包含前一个区块的哈希值、时间戳等）与该 nonce 组合并进行哈希运算时，得到的哈希值必须低于某个目标值。由于加密哈希本质上是随机的，除了猜测之外，没有其他方法可以找到有效的 nonce，因此矿工每秒要进行数十亿次的猜测。

例子

例如，可以将一个区块想象成一页固定信息，上面有一个可调整的数字（随机数）。假设我们从 0 开始计数随机数`0`。

计算机将整个页面转换成一个称为哈希值的单个输出数字。哈希值可以是类似`6`10 ...`03a5b2003a5b203,824,416`

网络要求哈希值低于一个固定的阈值，如果高于阈值，矿工会更改随机数并重试。最终，当哈希值满足阈值要求时，随机数才会被接受。

例如，假设阈值为`5`。矿工拥有信息页，并以 开始生成随机数`0`。如果计算机返回`6`，该值大于`5`，则矿工再次尝试，这次`1`使用 。如果这次计算机返回`4`，该值小于`5`，则`1`被接受为随机数！

难度调整周期为每 2016 个区块（大约每两周一次），以维持平均出块时间为十分钟。如果出块速度过快，目标出块时间就会降低，增加难度；如果出块速度过慢，目标出块时间就会提高。正是这种难度调整机制，使得比特币的出块率即使在总算力波动的情况下也能保持稳定。

例子

这就是一个积木块的样子：

```
{
  "header": {
    "version": 536870912,
    "prev_block_hash": "0000000...de0e5c842",
    "merkle_root": "8b30c5ba1...1e0d5f8a2c1",
    "timestamp": 1701432000,
    "target": "0000004f2c0...0000000",
    "nonce": 2834917243
  },
  "transactions": [
    {
      "txid": "3a1b9c7e...7e8f9a0b1c",
      "inputs": [{ "coinbase": "03a5b20...706f6f6c" }],
      "outputs": [{ "amount": 6.25, "script": "OP_HASH160
        f1c3...4c6a8 OP_EQUAL" }]
    },
    { "txid": "c1b4e...5821e3" },
    { "txid": "7d5e8...b5c6d7e" }
  ]
}
```

哈希运算的对象是头部信息。矿工会不断递增 nonce 值，直到达到`SHA256(SHA256(header)) < target`目标值，也就是说，直到对头部信息应用两次 SHA256 哈希函数得到的哈希值低于目标值为止。第一笔交易始终是“coinbase”交易，它创建新的代币并向矿工支付报酬。

一旦矿工找到有效的随机数（nonce），就会广播该区块，其他节点会对其进行验证，检查哈希值是否符合目标值、所有交易是否有效，以及矿工创建的比特币数量是否超过允许值。如果验证通过，节点会将该区块添加到自己的区块链中，并开始处理下一个区块。矿工会获得区块奖励，奖励形式为新生成的比特币，以及该区块中包含的交易的手续费。

那么，这个系统是如何防止篡改历史数据的呢？因为每个区块的哈希值都是下一个区块的一部分，这意味着更改单个交易会更改该区块的哈希值，并立即破坏其后的所有区块。

例子假设有两个连续的区块 A 和 B。A 的哈希值为`5`，B 的哈希值为`6`。如果修改了 A 中的一个交易，A 的哈希值就会改变，因此 B 的哈希值也需要随之改变。由于 B 位于 A 之后，且 A 的哈希值包含在 B 中，所以 B 的哈希值会考虑 A 的哈希值。因此，`6`如果 A 中的一个交易被修改， B 的哈希值将不再是 。

为了使区块链再次有效，攻击者不仅需要对当前区块，还需要对后续的每个区块重新进行工作量证明（即寻找低于特定目标值的随机数等过程）。与此同时，诚实的矿工们正在不断挖矿，用新区块扩展“真实”的区块链。此外，比特币遵循累计工作量证明最多的区块链，这极大地阻碍了攻击者的攻击。

因此，一次成功的攻击需要攻击者拥有 51% 的算力，才能最终追上并成为“真正的”区块链。算力也称为*哈希算力*，因为矿工实际上只是每天每秒钟对信息进行无数次哈希运算。

**透明度权衡**

重要的是，为了使该系统能够在没有中央机构的情况下正常运行，每个人都必须能够验证所有信息。每个节点都会将每笔交易与链上的完整历史记录进行比对，每个UTXO都会被追踪，每个签名都会被验证。

但这会损害隐私，因为每一笔交易和地址余额都是公开的。从2009年的创世区块到最新挖出的区块，所有资金流动情况对任何下载区块链的人都是可见的。

所以，比特币解决了无需信任的数字货币问题，但并没有解决无需信任的私人数字货币问题。而Zcash正是填补这一空白的契机。

#### 3.2 比特币，但更私密 <a href="#id-32-bitcoin-but-private" id="id-32-bitcoin-but-private"></a>

Zcash 实际上类似于比特币，但增加了加密功能。事实上，许多人称其为*加密的比特币*，尽管它是一种完全不同的加密货币。

Zcash 的经济机制与比特币几乎完全相同，因此，如果您了解比特币的货币政策，也就能够理解 Zcash 的货币政策。Zcash 的硬顶为 2100 万 ZEC，与比特币的 BTC 硬顶相同。新代币通过挖矿奖励进入流通，其奖励大约每四年减半一次，与比特币的机制相同。

Zcash 的共识机制同样是工作量证明（PoW），但它使用的挖矿算法是 Equihash，而非比特币基于 SHA256 的系统。Equihash 的一个有趣之处在于，它的设计初衷就是为了抵制目前主导比特币挖矿的专用 ASIC 矿机，从而使拥有消费级 GPU 的用户也能参与挖矿。这一选择体现了 Zcash 早期对去中心化的重视，但随着 Equihash ASIC 矿机的出现，这一策略已不再适用。

ASIC 代表*专用集成电路（Application-Specific Integrated Circuit）*，你可以把它们理解为专门用于挖掘加密货币的计算机。目前市面上存在专门用于 SHA256 挖矿、Equihash 挖矿等的 ASIC。

ASIC 全天候对信息（交易块）进行哈希运算，希望能找到低于网络目标值的哈希值。

Zcash 的底层使用了与比特币相同的 UTXO 交易模型。

然而，Zcash 与比特币的不同之处在于 UTXO 的使用方式。比特币只有一个资金池：公链，而 Zcash 则有多个资金池，分为透明池和屏蔽池，但两个资金池都使用 ZEC 作为货币，并且可以在它们之间转移资金。透明池的工作方式与比特币完全相同：地址以“t”开头，交易完全可见，任何人都可以追踪资金流向。

屏蔽池与普通池完全不同，是 Zcash 独有的。共有三个屏蔽池：*Sprout*、*Sapling*和*Orchard*，其中 Orchard 是最新、最先进的。Sprout 和 Sapling 现在几乎已不再使用，因为它们可以追溯到之前的网络升级时期，并且依赖于*可信设置*，而 Orchard 则不需要；我们将在本文后面详细介绍这一点。屏蔽地址以 z 开头，交易不会泄露任何关于发送方、接收方或金额的信息。

从今以后，我们将 Zcash 池称为透明池和屏蔽池，尽管有多个屏蔽池，但在实践中它们被视为一个统一的整体，而 Orchard 池是目前主要使用的屏蔽池。

透明池的存在是为了兼容性和选择性。一些用户需要可审计性，一些应用程序甚至要求可审计性，交易所也经常使用透明地址以符合监管要求。在这种情况下，透明性是一项功能，而非缺陷，Zcash 在屏蔽池中依赖加密来保护隐私的做法不会因使用透明池而受到影响。

我们应该把透明池和屏蔽池看作是两个完全独立的系统，互不影响。人们常常误以为Zcash的透明特性会降低其隐私性，但这种说法是错误的。Zcash的匿名集在数学上与有多少ZEC位于透明地址中无关。因此，即使99%的ZEC是透明的，剩余1%的屏蔽ZEC的隐私性也仅由屏蔽池本身决定。

#### 3.3 根本问题 <a href="#id-33-the-fundamental-problem" id="id-33-the-fundamental-problem"></a>

在比特币中，验证交易非常简单。只需检查输入的数据是否存在且尚未被花费，签名是否有效，以及输出值是否超过输入值即可。验证这些条件所需的所有信息都记录在区块链上，任何人都可以查看。

正是这种透明性使得比特币无需信任。你无需信任任何人，因为你可以自行验证一切。如果你愿意，甚至可以运行一个节点来实现最大程度的无需信任。然而，这也使得比特币成为一种监控工具，因为用于验证的数据恰恰也是用于追踪的数据。

Zcash 想要兼顾两者：无需信任的验证和隐私保护，但这两者似乎相互矛盾。如果网络无法看到交易本身，又如何验证交易的有效性呢？

想想验证究竟需要什么：

1. 输入的货币是存在的，因为你不可能花费不存在的货币。
2. 这些投入物之前没有被使用过，所以不存在重复支出。
3. 由于您控制着私钥，因此您拥有支出授权。
4. 计算结果是正确的，产出不会超过投入。

在比特币中，节点和矿工通过查看数据来检查这四个标准。而在Zcash中，发送者、接收者和金额都被加密，数据不可见。那么，其他人如何才能检查这些标准呢？

答案是，Zcash 不会要求节点和矿工检查数据。相反，发送方会提供一个 zk-SNARK（一种加密证明），该证明可以证明交易有效，而不会泄露任何底层信息。矿工和节点不会知道输入是什么、接收方是谁或转账金额是多少，他们只会知道一件事：证明有效，因此交易有效。

这听起来很疯狂，我们无需亲眼看到交易内容就能验证其有效性！

以下各节将解释为什么这是可能的，包括 Zcash 如何表示价值和跟踪支出，以及零知识证明如何将一切联系起来。

#### 3.4 屏蔽注释 <a href="#id-34-shielded-notes" id="id-34-shielded-notes"></a>

如上所述，比特币使用UTXO。Zcash的屏蔽池使用一种概念上与之类似的机制，称为“笔记”；您可以将笔记理解为加密的UTXO。

那么，什么是记账本？记账本是一个加密对象，代表特定数量的 ZEC。它就像 UTXO 一样，是一块独立的价值单元，但与 UTXO 不同的是，它的内容是隐藏的。当您收到加密的 ZEC 时，系统会创建一个记账本。当您使用加密的 ZEC 时，该记账本会被消耗，并像 UTXO 一样，为收款人创建新的记账本，如果适用，还会为您的找零生成新的记账本。

例子

这就是解密后的Orchard笔记的样子：

```
{
  "addr": "u1pg2aaph7jp8rpf6...sz7nt28qjmxgmwxa",
  "v": 150000000,
  "rho": "0x9f8e7d6c5b4a...f8e7d6c5b4a39281706f5e4d3c2b1a0",
  "psi": "0x1a2b3c4d5e6f70...c4d5e6f708192a3b4c5d6e7f809",
  "rcm": "0x7a3b4c5d6e7b...d8e9f0a1b3d4e5f6a7b8c9d0e1f2a3b"
}
```

在这个例子中，值字段 v 显示为 1.5 ZEC（1.5 亿扎托西）。其他字段，`rho`例如`psi`和 ，`rcm`将在后面介绍。现在，你只需要知道它们使得 Zcash 票据的加密技术成为可能。

票据永远不会被修改，余额也不会更新。它们被创建、存在，并在被使用时被销毁。如果您有 10 个 ZEC，并花费了 3 个 ZEC，则最初的 10 个 ZEC 票据将被完全消耗，并创建两个新的票据：3 个 ZEC 支付给收款人，7 个 ZEC 返还给您，就像 UTXO 一样。

Zcash 的票据与比特币的 UTXO 之间的关键区别在于它们的可见性。比特币 UTXO 是公开的：任何人都可以看到它的价值、何时被花费等等。而 Zcash 票据是加密的：只有所有者以及与他们共享查看密钥的人才能看到其内容。区块链存储的是票据的加密承诺，而不是票据本身。

例子

区块链永远不会看到解密后的凭证。在 Orchard 系统中，每个“操作”都包含一笔支出和一笔支出。以下是实际记录的内容：

```
{
  "cv": "0x9a8b7c6d5...8d7e6f5a4b3c2d1e0f9a8b",
  "nullifier": "0x2c3d4e5f6a7b...d2e3f48e9f0a1b2c3d",
  "rk": "0x5e6f7a8b...5a6b7c8d9e0f1a2b3c4d5e6f",
  "cmx": "0x1a2b3c4d5e6f7...d3e4f5a6b7c8d9e0f1a2b",
  "ephemeralKey": "0x4d5e6f7a8b9...4f5a6b7c8d9e0f1a2b3c4d5e",
  "encCiphertext": "0x8f7e6d5c4b3...a29180f7e6d5c",
  "outCiphertext": "0x3c4d5e6f7a8...b9c0d1e2f3a4b5c"
}
```

如您所见，所有内容都已加密，我们稍后会详细介绍每个字段的具体情况。

你可能会想，如果笔记被隐藏了，网络如何知道它们的存在？或者如何知道它们何时被使用？这就涉及到承诺和无效化机制了。

#### 3.5 承诺和无效条款 <a href="#id-35-commitments-and-nullifiers" id="id-35-commitments-and-nullifiers"></a>

Zcash 的屏蔽池面临两个问题，而比特币通过透明性轻松解决了这两个问题：

1. **证明纸币存在：**&#x5F53;有人向你发送屏蔽的 ZEC 时，网络如何知道纸币是真实的？
2. **防止重复消费：**&#x5F53;你使用一张钞票时，网络如何知道你之前没有使用过它？

Zcash 的解决方案是两种加密机制的结合：承诺和无效化。

**承诺**

承诺值是通过对备注的各个字段进行哈希运算计算得出的。以下是它在 Orchard 中的显示方式：

```
cmx = Hash(addr, v, rho, psi, rcm) = 0x1a2b3c4d...9ca6b7c8d9e0f1a2b
```

“哈希”表示所使用的哈希函数。我们取屏蔽笔记的各个字段，将它们输入哈希函数，它会返回一个哈希值（在本例中`0x1a2b3c4d...9ca6b7c8d9e0f1a2b`）。

它之所以有用，有两个原因：

1. **单向性：**&#x7ED9;定返回的哈希，`0x1a2b3c4d...9ca6b7c8d9e0f1a2b`您无法恢复字段`addr`，，，，或，并且笔记的内容是隐藏的。`vrhopsircm`
2. **抗碰撞性：**&#x4F60;找不到两个不同的音符产生相同的承诺，每个音符都对应一个承诺。

每次创建笔记时，其承诺都会添加到承诺树（默克尔树）中，该承诺树包含网络上创建过的所有笔记承诺。

信息

Merkle 树是一种数据结构，它允许你在不透露该项或下载整个集合的情况下证明某项属于一个大集合。

具体操作如下。首先列出一些价值观（在本例中，指的是承诺事项）：`cm0` `cm1` `cm2` `cm3`

将它们两两配对，然后将每对配对结果合并：

* `H0 = Hash(cm0, cm1)`
* `H1 = Hash(cm2, cm3)`

现在你得到了两个哈希值。将它们配对并再次进行哈希运算：

`root = Hash(H0, H1)`

到目前为止，我们已经从原始集合中取出成对的元素，并使用哈希函数将每对元素组合起来。然后，我们将得到的哈希值分组，再次进行哈希运算，如此逐层重复此过程，直到得到最终的单个哈希值。这个最终值被称为根哈希值，或默克尔根。

这个根哈希值有效地概括了整个数据集：

```
                  root
                 /    \
                /      \
               H0       H1
              / \       / \
             /   \     /   \
            cm0  cm1  cm2  cm3
```

Merkle树的关键特性在于，如果你更改任何一个叶子节点（承诺节点），也就是其中的值`cm0`，那么`cm1`它上面的所有哈希值都会随之改变，一直追溯到根节点。根节点就像整棵树的指纹，如果根节点保持不变，那么整棵树也就保持不变。

此外，默克尔证明提供了一种有效的方法来检查树中的某个项目，而无需检查整棵树。

例如，要证明 cm1 在树中，并不需要披露所有承诺。为此，只需提供一条 Merkle 路径，即沿途到根节点的兄弟哈希值。对于 cm1 `cm1`，其 Merkle 路径为 \[此处应填写路径] `[cm0, H1]`。

以下是验证者可以检查的方法：

1. 取第一个元素`[cm0, H1]`，即`cm0`，并将其与`cm1`我们想要检查的项进行哈希运算，这样我们就得到了。`H0: Hash(cm0, cm1) = H0`
2. 将第一步的输出（`H0`）与以下项进行哈希运算`[cm0, H1]`，这意味着`H1`。这将得到`root`哈希值：`Hash(H0, H1) = root`。

如果结果与已知的根匹配，那么我们可以得出结论，它`cm1`在树中，重要的是，验证者永远不会看到`cm2`或`cm3`，验证不需要它。

承诺树包含了所有已创建的受保护票据承诺，总共有数百万个叶子节点（承诺）。因此，当你花费一张票据时，你（在 zk-SNARK 内部）证明了你知道一个承诺以及到达当前根节点的有效默克尔路径，而无需透露哪个承诺是你自己的承诺。

承诺树由节点存储，作为其维护的链状态的一部分。每个区块都会引入新的承诺，节点会将这些承诺添加到其本地树副本中，并相应地更新根节点。当前的根节点，称为锚点，是交易在证明成员资格时所引用的依据。

**无效化器**

承诺或许能解决生存问题，但同时也带来了新的问题：如何避免重复使用同一张钞票？

在比特币中，这很简单，因为当你花费一个UTXO时，你会直接引用它的交易标识和输出索引，这样所有人都能看到该UTXO已被花费。如果你尝试再次花费它，节点会拒绝该交易，因为该UTXO已被标记为已消耗。

Zcash 则无法做到这一点。如果使用一张票据需要指向其对应的承诺，那么就会泄露你正在使用哪笔票据，并将该票据与所有未来的交易关联起来，从而侵犯隐私。

在 Zcash 中，防止同一张钞票被重复使用的解决方案是*使用无效化符*。无效化符是从钞票中派生出来的值，并且只能由钞票的所有者计算得出。

例子

假设承诺树有 100 万条笔记，其中一条笔记是你的，具体来说是“承诺`0x1a2b...`”。

如果花掉这张钞票需要你说“我在花`0x1a2b...`”，那么：

所有人都知道那`0x1a2b...`是你的，它不再只是无数匿名承诺中的一份。它被标记为属于进行这笔交易的人，虽然他们不知道承诺的内容，但他们知道那是你的，这本身就存在问题。

现在，发送者可以追踪您的交易，因为发送 ZEC 的人知道他们创建了该笔交易的承诺。所以，当您消费并查看该笔交易记录时，他们就能看到款项已被使用，并了解您的资金转移时间。

随着时间的推移，消费记录可能会变得具有可比性。观察者或许能够根据消费模式、时间和目的地将交易关联起来，从而将你的消费记录归类为“很可能是同一个人所为”。

`0x2c3d...`无效化符可以解决这些问题。如果您发布了与承诺对应的无效化符`0x1a2b...`，那么在不知道您的私钥的情况下，就无法计算承诺到无效化符的映射关系。承诺在默克尔树中保持匿名，您的支出无法关联，发送方也无法得知其付款是否已被支出。

以下是 Orchard 中空值运算符的示例：

```
nullifier = Hash(nk, rho, psi) = 0x2c3d4e5f6a7b...d2e3f48e9f0a1b2c3d
```

nk 是空值派生密钥，只有你拥有这个密钥。`rho`和`psi`是笔记本身的值，如前所述。其他人无法计算此空值，因为其他人没有你的密钥`nk`。`Hash`，与之前的示例一样，是所使用的哈希函数（我们稍后会介绍）。

每次使用一张票据时，你也会同时发布它的无效标识符。网络维护着一个无效标识符集合，其中包含了所有已发布的无效标识符。因此，如果某个无效标识符已存在于该集合中，则该交易将被拒绝，从而防止双重支付。

例子

以下是无效化项集随时间增长的方式：

* 区块 1000000：`nullifier set = { }`
* 区块 1000001：`nullifier set = { 0x2c3d...3d }`
* 区块 1000002：`nullifier set = { 0x2c3d...3d, 0x8f7a...2b }`
* 区块 1000003：`nullifier set = { 0x2c3d...3d, 0x8f7a...2b, 0x1e4c...9a }`

每次花费都会恰好增加一个无效元素。该集合不会缩小，只会不断增长。

为了避免重复，我们再来探讨一下为什么不可链接性是关键属性。无效符不会透露它对应哪个承诺。观察者看到无效符出现，就知道某个承诺被消耗了，但无法确定是哪个承诺。承诺树可能包含数百万个承诺，而无效符可能对应其中任何一个承诺。

**把所有东西整合起来**

由于承诺永远不会被删除（因为承诺树是只追加的，并且会无限增长），即使笔记被花费，承诺仍然会保留在树中。

这正是Zcash匿名性如此强大的原因。消费需要证明“我知道这棵树中N百万个承诺中的一个”，但不能透露具体是哪个承诺。被消费的承诺与其他承诺混合在一起，因此即使观察者看到一个无效符出现，也无法缩小范围，确定它对应于数百万个承诺中的哪一个。

您的隐私设置包含了网络上创建的所有受保护笔记。

总而言之，每一笔受保护的交易都涉及：

1. 创建备注，将新的备注承诺添加到承诺树中。
2. 支出说明，发布并向无效符集添加无效符。

要构建交易，您必须提供一个 zk-SNARK 来证明：

* 你知道树中存在一条带有承诺的笔记，它通过一条有效的默克尔路径。
* 你知道计算该音符无效化所需的密钥。
* 你发布的无效化符与该注释相对应。
* 整个交易金额平衡；投入等于产出加上手续费。

网络会验证证明，检查无效符是否在集合中，然后接受交易。重要的是，它永远不会知道花费了哪个承诺，资金的发送者是谁，或者转账金额是多少。

#### 3.6 密钥和地址 <a href="#id-36-keys-and-addresses" id="id-36-keys-and-addresses"></a>

比特币采用简单的密钥模型：一个私钥、一个公钥和一个或多个地址。Zcash 的加密系统则更为复杂，因为不同的操作需要不同的访问权限。Zcash 利用密钥层级结构来应对这种复杂性。

**消费指南**

支出密钥（`sk`）是您的主密钥，它是一个长达 256 位的随机数。拥有此密钥的人可以随意支配您的资金，因为其他所有信息都源自支出密钥。

**完整观看指南**

完整的查看键（`fvk`）源自消费键，可让您查看钱包活动的全部信息：收款、付款、金额和备注字段，但无法处理消费。

完整查看密钥适用于您希望授予某人审计权限但又不希望其拥有控制权的情况。通过查看密钥，会计师可以核实您的交易记录，企业可以允许合规部门审查账簿，税务机关可以确认申报的收入；所有这些都无需担心审计人员会卷走资金。

**进出房间查看钥匙**

完整的查看图例还可以拆分为其组成要素：

接收查看密钥（`ivk`），用于检测和解密发送给您的笔记，但不能检测和解密您发送给其他人的笔记。发送查看密钥（`ovk`），用于解密发送的密文，以便您可以查看您发送的内容以及发送对象。

这种精细化管理之所以存在，是因为用户可能只想分享有限的信息。例如，您可能只想向某个服务提供您的收款密钥，以便该服务可以通知您收到的款项，但又不想透露任何关于您消费模式的信息。

**无效化派生键**

无效化密钥（`nk`）也由支出密钥派生而来，用于在支出时计算无效化密钥。这是将笔记标记为已支出所必需的，因此仅查看密钥无法授权交易——它们没有访问权限`nk`。

**地址**

在层级结构的最底层是地址：也就是你提供给别人以便他们向你付款的信息。在Orchard中，地址是通过一个多样化器从完整的查看密钥中派生出来的，而这个多样化器只是一小段随机数据。

多样化器支持创建多样化的地址，这意味着您可以从单个钱包生成数十亿个互不关联的地址。虽然每个地址都完全不同，但它们都指向同一组密钥。此外，您可以为与您互动的每个人或服务分配一个唯一的地址。

例子

假设您分别从雇主、客户和交易所收到款项。您为每笔款项提供不同的分散地址：

* 雇主支付给：`u1employer8jp8rpf6...qjmxgmwxa`
* 客户支付给：`u1clientaph7jp8rpf...sz7nt28qj`
* 交易所支付给：`u1exchng2aaph7jp8...gmwxasz7n`

这三个地址都属于你，你的钱包会收到每个发送者的付款，但雇主、客户和交易所无法通过比较他们的地址来推断他们是在向同一用户付款。

**关键层级**

以下是层级结构：

```
spending key (sk)
    |
    +---> full viewing key (fvk)
    |        |
    |        +---> incoming viewing key (ivk)
    |        |
    |        +---> outgoing viewing key (ovk)
    |        |
    |        +---> addresses (via diversifiers)
    |
    +---> nullifier deriving key (nk)
```

随着层级的降低，每一层级显示的信息都越来越少。支出键可以执行所有操作，完整查看键可以看到所有内容，但不能支出，而收款查看键只能看到收到的资金。最后，地址键不显示任何信息，它们只是目的地。

<figure><img src="https://maxdesalle.com/eli-ben-sasson.jpg" alt=""><figcaption><p>Eli Ben-Sasson，Zcash 的联合创始人，现任 StarkWare 的领导者。</p></figcaption></figure>

### 4. 交易生命周期 <a href="#id-4-transaction-lifecycle" id="id-4-transaction-lifecycle"></a>

本章将详细介绍您发送屏蔽 ZEC 时发生的一切，从您点击“发送”按钮到收款人看到余额更新为止。为了更好地说明这一点，我们将跟踪单笔交易的每个阶段，分析您的钱包计算的内容、网络接收到的信息以及最终记录在区块链上的信息。

#### 4.1 设置 <a href="#id-41-the-setup" id="id-41-the-setup"></a>

Alice 想给 Bob 发送 5 个 ZEC。她打开钱包，输入 Bob 的加密地址，指定金额，然后确认发送。接下来发生的事情会用到我们目前为止介绍过的所有机制：笔记、承诺、无效化符、密钥、默克尔证明和零知识证明 SNARK。

爱丽丝的钱包里有两张未使用的钞票：

* **注A：** 3 ZEC
* **注B：** 4 ZEC

她将花费这两笔钱（总共 7 ZEC）给 Bob 发送 5 ZEC，支付 0.001 ZEC 的手续费，并收到 1.999 ZEC 的找零。

#### 4.2 笔记选择与检索 <a href="#id-42-note-selection-and-retrieval" id="id-42-note-selection-and-retrieval"></a>

请记住，Alice 的钱包实际上并不存储 ZEC，它存储的是花费 ZEC 所需的信息：解密后的 ZEC 数据以及控制这些数据的密钥。当 Alice 同步她的钱包时，钱包会扫描区块链，尝试使用她收到的查看密钥解密每个屏蔽的输出，并将解密成功的输出存储起来。

以下是注释 A 的示例：

```
  {
    "addr": "u1alice...",
    "v": 300000000,          // 3 ZEC in zatoshis
    "rho": "0x7a8b9c...",
    "psi": "0x1d2e3f...",
    "rcm": "0x4a5b6c...",
    "position": 847291,      // Position in commitment tree
    "cmx": "0x9f8e7d..."     // The commitment
  }
```

位置字段至关重要，因为它告诉钱包此笔记在承诺树中的位置，这是构建默克尔证明所必需的信息。

#### 4.3 获取默克尔路径 <a href="#id-43-fetching-merkle-paths" id="id-43-fetching-merkle-paths"></a>

为了使用一张纸条，爱丽丝必须证明该纸条所代表的承诺存在于关系树中，但不能透露具体是哪条承诺。这需要证明从该承诺到关系树根节点存在一条默克尔路径。

Alice 的钱包会向一个完整节点查询每张纸币所在位置的 Merkle 路径。对于纸币 A，在深度为 32 的树中位于位置 847,291 处，该路径由 32 个兄弟哈希组成：

```
  merkle_path_A = [
    "0x1a2b3c...",  // Sibling at level 0
    "0x4d5e6f...",  // Sibling at level 1
    ...            // 30 more siblings
    "0x7g8h9i..."   // Sibling at level 31
  ]
```

任何有权访问此路径的人都可以`cmx_A`通过哈希运算追溯到根目录来验证它是否在树中。但是，在 zk-SNARK 内部，Alice 可以在不泄露`cmx_A`路径本身的情况下证明这一点。

钱包还会记录锚点——即路径检索时的默克尔根。交易会引用此锚点，节点可以使用它来验证该根是否为近期有效的根。

#### 4.4 计算无效因子 <a href="#id-44-computing-nullifiers" id="id-44-computing-nullifiers"></a>

爱丽丝已经有了她的笔记和它们的默克尔路径，现在她需要将它们标记为已用完。

回想一下 3.5 节的内容，无效化器解决了防止双重支付的根本问题，同时又不会泄露被花费的票据。在比特币中，你必须直接指向一个 UTXO，所有人都能看到它已被消耗；但在 Zcash 中，指向一个承诺会破坏隐私，因为这会将你与该特定票据关联起来。

Alice 为她花费的每张钞票计算一个无效化符，该无效化符由钞票数据和她的秘密无效化符派生密钥（`nk`）导出：

```
nullifier_A = Hash(nk, rho_A, psi_A) = 0x2c3d4e5f...
nullifier_B = Hash(nk, rho_B, psi_B) = 0x8f7a9b2c...
```

每张纸条的\` `rho`and\``psi`值都是独一无二的，也就是说，它们是在创建纸条时设置的。\`send\` 值`nk`源自爱丽丝的消费密钥，但只有她自己拥有。

该建筑具有两个关键特性：

1. **这是确定性的：**&#x6BCF;张纸条都会产生一个唯一的无效符。如果爱丽丝试图两次使用纸条 A，她就必须发布`0x2c3d4e5f...`两次。网络维护着一个包含所有已发布无效符的集合，因此第二次尝试会被拒绝，因为该无效符已经存在。
2. **它是不可链接的：**&#x6CA1;有人能计算出Alice笔记的无效化符，因为没有人拥有她的nk；更重要的是，没有人能从无效化符反推出其对应的承诺。因此，当`0x2c3d4e5f...`某个笔记出现在区块链上时，观察者会看到它被花费了，但无法确定它来自树中数百万个承诺中的哪一个。

这些无效化符将被包含在 Alice 的交易中并发布到链上，但它们是她消费的唯一公开记录。仅仅是两个不透明的 32 字节值，不会透露任何关于票据本身、金额或控制者的信息。

笔记无效化集合只会不断增长。与承诺树（仅追加，但会跟踪所有已创建的笔记）不同，无效化集合跟踪已使用的笔记。即使笔记已被使用，其承诺也会永远保留在树中。无效化集合中是否存在无效化符，就表明该笔记已被使用。

#### 4.5 创建输出注释 <a href="#id-45-creating-output-notes" id="id-45-creating-output-notes"></a>

爱丽丝要花费 7 ZEC（3 ZEC + 4 ZEC），需要开具两张新钞：一张 5 ZEC 给鲍勃，一张 1.999 ZEC 作为找零；交易手续费为 0.001 ZEC。

每张纸币都需要新的随机性，因此 Alice 的钱包会生成加密组件，使每张纸币都是独一无二的，并且只能由其指定的收款人使用。

**生成音符组件**

Bob 的 5 ZEC 注释：

```
{
	"addr": "u1bob...",           // Bob's shielded address
	"v": 500000000,               // 5 ZEC in zatoshis
	"rho": "0x3e4f5a6b...",       // Derived deterministically
	"psi": "0x7c8d9e0f...",       // Random
	"rcm": "0x1a2b3c4d..."        // Random (commitment randomness)
}
```

关于 Alice 的 1.999 ZEC 变更说明：

```
{
	"addr": "u1alice...",         // Alice's own address
	"v": 199900000,               // 1.999 ZEC in zatoshis
	"rho": "0x5f6a7b8c...",
	"psi": "0x9d0e1f2a...",
	"rcm": "0x4e5f6a7b..."
}
```

Orchard 中的值`rho`由交易确定性地导出，这可以防止某些类型的加密攻击。\`and\`值是新采样的随机数。`psi`这些`rcm`值共同确保即使 Alice 向 Bob 发送 5 ZEC 一千次，每次的票据承诺值也都会不同。

**计算承诺**

笔记组件准备就绪后，Alice 会计算每个输出的承诺金额：

```
cmx_bob = Hash(addr_bob, 500000000, rho_bob, psi_bob, rcm_bob)
					= 0x8a9b0c1d...
```

```
cmx_alice = Hash(addr_alice, 199900000, rho_alice, psi_alice, rcm_alice)
					= 0x2d3e4f5a...
```

这些承诺将被发布到链上并添加到承诺树中。它们本身并不透露任何关于承诺内容的信息，而是不透明的 32 字节哈希值，但任何知道底层值的人（具体来说是接收者）都可以验证某个承诺是否对应于特定的承诺。

**加密笔记**

承诺会上链，但鲍勃需要实际的票据数据才能稍后使用他的 5 个 ZEC。他需要知道价值、、`rho`和`psi`，`rcm`因为如果没有这些信息，承诺就毫无用处，他无法构造有效的无效符或证明所有权。

Alice会对每张纸条进行加密，以便只有预定的收件人才能阅读：

**对于鲍勃来说：**&#x7231;丽丝使用鲍勃的地址（其中包含他的公钥材料）对纸条进行加密。加密结果是`encCiphertext`密文：一段加密数据，只能使用鲍勃收到的查看密钥才能解密。当鲍勃的钱包扫描区块链并成功解密这段密文后，他得知自己收到了 5 个 ZEC，并将所有必要的消费数据存储起来。

**为了方便Alice记录：**&#x8FD8;有第二个密文，叫做`outCiphertext`：这个密文是用Alice的出站查看密钥加密的，这样她的钱包就能记住她发送了什么。如果没有这个密文，Alice就无法记录她的资金去向。它被加密而不是以明文形式存储，这样节点操作员和观察者就无法读取它。

```
{
	"cmx": "0x8a9b0c1d...",
	"ephemeralKey": "0x6b7c8d9e...",
	"encCiphertext": "0x9f8e7d6c5b4a...[512 bytes]...",
	"outCiphertext": "0x3c4d5e6f7a8b...[80 bytes]..."
}
```

这`ephemeralKey`是为此次加密生成的一次性公钥，Bob 可以将其与自己的私钥一起使用来解密`encCiphertext`。这是公钥加密的标准做法，但特别之处在于，整个过程发生在一个从未将 Bob 的地址与任何身份关联起来的系统中，而且密文不会向外部观察者泄露任何信息。

笔记zk-SNARK 的证明内容并不包括加密。加密是一个独立的层，确保只有收款人才能访问他们的资金，而证明则验证票据格式是否正确以及交易金额是否平衡。如果 Alice 加密错误（或恶意使用了错误的密钥），交易在链上仍然有效——但 Bob 将永远无法找到或使用他的票据。实际上，钱包会正确处理这种情况，收款人无法解密是钱包的漏洞，而不是协议违规。

至此，Alice 已具备输出所需的一切：两份发布承诺书和加密后的有效载荷，以便每位接收者都能领取自己的笔记。现在，难点来了：如何在不泄露任何内容的情况下证明其有效性。

#### 4.6 证明 <a href="#id-46-the-proof" id="id-46-the-proof"></a>

爱丽丝已经收集齐了所有要素：两张待花费的纸条、它们的默克尔路径、用于标记它们已被消耗的无效化符，以及两张包含承诺和加密有效载荷的全新输出纸条。现在，如何在不泄露细节的情况下让网络相信一切有效呢？

这时 zk-SNARK 就派上用场了。

**证据表明了什么**

该证明是一个密码学对象，它证明了以下所有条件均成立：

1. **输入的笔记是存在的。**&#x7231;丽丝知道承诺树中的两个承诺。她通过列出从这些承诺到锚点（树根）的有效默克尔路径来证明这一点。证明过程并没有透露爱丽丝引用的是哪些承诺，只是表明它们存在于数百万个承诺中的某个位置。
2. **爱丽丝控制着输入。**&#x5979;知道两张钞票的消费密钥，具体来说，她知道推导出无效化符和授权消费所需的秘密值。如果没有这些密钥，任何人都可以尝试使用其他人的钞票。
3. **这些无效符是正确的。**&#x5979;发布的无效符实际上与她花费的钞票相对应。爱丽丝不能随意发布无效符，它们必须使用正确的公式从她控制的真实钞票中计算得出。
4. **交易金额平衡。**&#x8F93;入值之和（3 + 4 = 7 ZEC）等于输出值之和（5 + 1.999 = 6.999 ZEC）加上手续费（0.001 ZEC）。ZEC 既没有被创造，也没有被消灭。这是该系统的基本守恒定律。
5. **输出承诺格式正确。**&#x5979;为 Bob 的备注和她自己的变更备注发布的承诺都是根据有效的备注数据正确计算得出的。她不能发布无意义的承诺——它们必须遵循正确的结构。

网络不会知道哪些钞票被花掉了，收款人是谁，或者金额从一方转移到另一方。它只会知道有人进行了一笔有效的交易：真实的输入、真实的输出、正确的计算以及适当的授权。这足以更新全局状态，即添加承诺和记录无效项，而无需了解交易本身的任何信息。

**真正的证据是什么？**

经历了如此复杂的推导之后，证明本身却显得有些虎头蛇尾：大约只有一到两千字节的数据——仅此而已！它只是一小块编码了数学论证的字节。

验证速度很快，即使在配置一般的硬件上也只需几毫秒。节点接收到证明后，运行验证算法，并返回一个二元结果：有效或无效。无需人为判断、启发式方法或概率猜测；数学计算结果要么正确，要么错误。

这种不对称性正是 zk-SNARKs 的精髓所在。创建证明需要耗费大量的计算资源，Alice 的钱包需要进行大量的运算，包括椭圆曲线运算和多项式计算。然而，验证证明的成本却很低。这种不对称性使得系统切实可行：网络上的每个节点都可以验证每一笔受保护的交易，而无需重复进行繁重的计算。

**电路**

爱丽丝究竟是如何得出这个证明的呢？她通过一个叫做“电路”的东西来处理她的交易数据——电路是对有效 Orchard 消费必须满足的确切条件的正式规范。

把电路想象成一个用数学约束编码的庞大清单。证明“默克尔路径必须有效”这一步骤变成了一系列必须产生正确输出的哈希计算；证明“零化因子必须正确推导”这一步骤变成了对某些值之间关系的约束；最后，“数值必须平衡”变成了一个必须成立的等式。

Alice 的钱包接收她的私人输入（笔记、密钥、路径、随机数），并通过这个电路进行运算，找到满足所有约束条件的值。然后，zk-SNARK 机制将整个满足约束条件的赋值压缩成一个任何人都可以验证的极小证明。

笔记电路在协议层面是固定的，所有 Orchard 交易都使用 Zcash 规范中定义的同一电路。Alice 无法修改规则，她只能证明自己遵守了这些规则。这使得系统无需信任：节点无需信任 Alice，只需验证她的证明是否符合约定的通用电路即可。

Alice 的钱包现在已经生成了一个证明：一个约 1.5 KB 的对象，它断言存在一笔有效的交易，但没有说明交易的具体内容。现在是时候将所有内容打包并发送到网络了。

#### 4.7 交易的组装 <a href="#id-47-assembling-the-transaction" id="id-47-assembling-the-transaction"></a>

Alice 拥有她的无效化器、输出注释、加密有效载荷和证明——现在她需要将所有内容打包成网络可以处理的交易。

**行动结构**

Orchard 使用一种称为“动作”（action）的结构。每个动作都包含一个支出（send）和一个输出（output），这是有意为之的设计选择。早期的 Zcash 协议（Sprout 和 Sapling）将支出和输出分开，但这会泄露交易结构的信息。如果你看到一笔交易包含三个支出和一个输出，你就能从中获取一些信息。Orchard 通过强制执行 1:1 的配对来消除这个问题。

爱丽丝花费了两张钞票，并产生了两个产出，因此她的交易包含两个动作：

* **行动 0：**&#x82B1;费 A 号票据（3 ZEC），创建 Bob 的票据（5 ZEC）
* **操作 1：**&#x82B1;费纸币 B（4 ZEC），生成 Alice 的找零纸币（1.999 ZEC）

每个动作内部的配对是任意的。动作 0 并不意味着 A 号钞票“变成了”鲍勃的 5 个 ZEC。数值不匹配，这没关系。重要的是全局约束：总投入等于总产出加上手续费。动作结构只是为了确保观察者无法推断交易形式。

笔记如果爱丽丝想花掉两张钞票，但只产生一个产出呢？为了做到这一点，她仍然需要两个行动，因此她必须在第二个行动中创建一个虚拟产出。虚拟产出是指一张价值为零的钞票，其存在的唯一目的就是平衡结构。反过来也一样：如果她只有一个投入但需要两个产出，她就需要添加一个虚拟支出。观察者无法区分真实行动和虚拟行动。

**链上发生了什么**

以下是Alice的交易实际内容：

```
{
	"anchor": "0x7f8e9d0c...",

	"actions": [
		{
			"cv": "0x9a8b7c6d...",
			"nullifier": "0x2c3d4e5f...",
			"rk": "0x5e6f7a8b...",
			"cmx": "0x8a9b0c1d...",
			"ephemeralKey": "0x6b7c8d9e...",
			"encCiphertext": "0x9f8e7d6c...[580 bytes]",
			"outCiphertext": "0x3c4d5e6f...[80 bytes]"
		},
		{
			"cv": "0x1b2c3d4e...",
			"nullifier": "0x8f7a9b2c...",
			"rk": "0x4d5e6f7a...",
			"cmx": "0x2d3e4f5a...",
			"ephemeralKey": "0x8c9d0e1f...",
			"encCiphertext": "0x7e8f9a0b...[580 bytes]",
			"outCiphertext": "0x5a6b7c8d...[80 bytes]"
		}
	],

	"proof": "0x1a2b3c4d...[~1.5 KB]",
	"bindingSig": "0x4e5f6a7b...[64 bytes]"
}
```

让我们来详细分析一下：

锚点：Alice 的证明所引用的默克尔根。这会将她的交易提交到承诺树的特定状态。节点会验证这是一个最新的、有效的根。如果 Alice 尝试使用一年前的锚点，则交易将被拒绝。

* **CV（价值承诺）：**&#x5BF9;每次操作中花费或创造的价值的加密承诺。这些承诺不会泄露实际金额。相反，它们的构造方式是，交易中所有 CV 值的总和编码了净流量。如果交易平衡（输入 = 输出 + 手续费），则计算结果正确。否则，验证失败。
* **无效化符：**&#x97F3;符 A 和音符 B 的无效化符。这些无效化符会被添加到无效化符集中，将这些音符标记为永久失效。
* **rk（随机验证密钥）：**&#x7528;于验证支出授权签名。这证明 Alice 授权了这笔特定交易，而无需透露她真实的支出密钥。
* **cmx：** Bob 的备注和 Alice 的变更备注的承诺。这些承诺会被添加到承诺树中。
* **ephemeralKey + encCiphertext + outCiphertext：**&#x52A0;密后的笔记数据，如第 4.5 节所述。这些不会影响共识，但如果没有它们，收款人将无法领取他们的资金。
* **证明：** zk-SNARK 证明一切有效。一个证明涵盖整个交易（两个操作）。
* **bindingSig：**&#x4E00;个将所有数据片段关联起来的签名。它证明所有操作的 cv 值总和正确（保证价值守恒），并且交易未被篡改。这是确保金额实际平衡的最终检查。

**费用**

你会注意到手续费并没有明确列出，因为它是隐含的。Alice 的输入总额为 7 ZEC，输出总额为 6.999 ZEC。差额 0.001 ZEC 就是交易手续费，由矿工收取。

价值承诺编码了净流量，因此当矿工验证绑定签名时，他们实际上是在确认输入减去输出等于所声明的费用。如果 Alice 试图声明她的输出总计为 7 ZEC，导致没有费用，则绑定签名将失败。如果她试图凭空创造额外的 ZEC，并声称从 7 ZEC 的输入中获得了 8 ZEC 的输出，则证明本身也将无效。

手续费是公开的。观察者可以看到处理交易支付了多少费用，但这是唯一可见的价值。输入金额、输出金额以及交易双方之间的价值转移均不公开。

#### 4.8 广播和内存池 <a href="#id-48-broadcasting-and-mempool" id="id-48-broadcasting-and-mempool"></a>

Alice 的钱包已经完成了全部交易，现在需要将其发送到网络。

**发送到网络**

发送过程如下：Alice 的钱包连接到一个或多个 Zcash 节点并广播交易。消息在点对点网络中传播，从一个节点跳转到另一个节点，直到到达矿工和更广泛的网络。发送过程与比特币完全相同，交易只是节点之间向对等节点传递的数据。

从爱丽丝的角度来看，这只需要一两秒钟。她会在钱包里看到“交易广播”的提示，然后只需等待确认即可。

**初步验证**

当节点收到 Alice 的交易时，它不会盲目接受。在将其转发或添加到内存池之前，节点会执行一系列检查：

1. **证明验证：**&#x8282;点对 Alice 的证明运行 zk-SNARK 验证器。这需要几毫秒时间。如果证明无效，交易将立即被拒绝。无需进一步检查。
2. **锚点检查：**&#x8282;点会验证 Alice 使用的锚点（即她证明中引用的 Merkle 根）是否有效。具体来说，它必须是承诺树中最近的根。Zcash 允许使用一定范围的近期锚点以适应网络延迟。如果 Alice 的锚点太旧或与任何已知的树状态都不匹配，则交易将被拒绝。
3. **无效符检查：**&#x8282;点会将两个无效符与其本地无效符集进行比对。如果其中一个无效`0x2c3d4e5f...`符`0x8f7a9b2c...`已存在于本地无效符集中，则表明 Alice 试图进行双花操作。交易将被拒绝。
4. **结构有效性：**&#x8282;点确认交易格式正确：字段长度正确、编码有效、绑定签名验证通过等等。格式错误的交易将被丢弃。

如果所有检查都通过，节点则认为该交易有效。然后，它会将该交易添加到其内存池（用于存放未确认交易的区域），并将其转发给其他节点。

**在内存池中等待**

内存池就像交易的炼狱。Alice 的交易和其他成百上千笔交易一起静静地躺在那里，等待矿工将它们挖出并打包进区块。

矿工会根据手续费从交易池中选择交易。手续费较高的交易通常会优先被选中。Alice 支付了 0.001 ZEC，这对于 Zcash 来说很正常，在正常的网络环境下，这足以让她的交易被打包到接下来的几个区块中。

在等待期间，Alice 的交易尚未确认。网络已经验证了这笔交易，但尚未将其写入区块链。Bob 的钱包可能会检测到这笔待处理的交易（有些钱包会显示未确认的传入交易），但他必须等到交易被“挖矿”后才能使用这些资金。

笔记内存池并非全局的，也不是同步的，每个节点都维护着自己的内存池。由于网络传播延迟，不同节点在任何给定时刻可能拥有略微不同的待处理交易集合。但这并不影响共识，重要的是哪些交易最终被打包进区块。

交易已广播。节点已验证该交易。现在，Alice 正在等待矿工完成最后的计算工作。

#### 4.9 块包含和最终性 <a href="#id-49-block-inclusion-and-finality" id="id-49-block-inclusion-and-finality"></a>

矿工从内存池中选择 Alice 的交易，将其与其他交易捆绑在一起，并开始挖出一个新区块。

**挖矿**

Zcash 和比特币一样，都采用工作量证明机制。矿工会构建一个区块头，其中包含前一个区块的哈希值、时间戳、区块内所有交易的默克尔根以及一个随机数（nonce）。然后，他们会不断尝试不同的随机数，直到找到一个能够生成低于目标难度的哈希值的随机数。

这个过程与我们在比特币入门教程（3.1 节）中介绍的过程完全相同，只有一个例外：Zcash 使用的是 Equihash 算法而不是 SHA256 算法。安全性方面，两者并无差异——找到一个有效的区块需要大量的计算工作，而验证这些工作则非常简单。

当矿工找到一个有效的随机数（nonce）时，他们会广播该区块，然后其他节点会对其进行验证：验证工作量证明是否有效、交易是否有效、结构是否正确。如果一切正常，节点会将该区块添加到他们的链中，Alice 的交易也成为永久记录的一部分。

**州情更新**

一旦区块被接受，网络状态就会发生变化：

* **承诺树不断增长：** Bob 的备注承诺`0x8a9b0c1d...`和 Alice 的找零备注承诺`0x2d3e4f5a...`被添加到承诺树中。现在，承诺树比之前多了两个叶子节点，并计算出一个新的默克尔根。该根节点成为未来交易的有效锚点。
* **无效符集扩展：** Alice 的两个无效符（`0x2c3d4e5f...`和`0x8f7a9b2c...`）被添加到无效符集中。这些笔记现在被永久标记为已花费。任何尝试使用这两个无效符的后续交易都将被拒绝。
* **区块奖励发放：**&#x77FF;工获得新铸造的 ZEC（区块补贴）加上区块中所有交易费用的总和，包括 Alice 的 0.001 ZEC。

这些状态更新是确定性的。每个处理区块的节点都会到达完全相同的新状态。承诺树在所有节点上都具有相同的新根节点。无效化集合在所有节点上都包含相同的条目。这使得网络无需中心协调即可保持一致性。

**确认**

Alice 的交易现已确认，但确认并不意味着最终完成。

与比特币类似，Zcash 使用纯粹的工作量证明机制，这种机制不具备加密最终性。累计工作量最多的链获胜，但没有任何机制能够阻止资源充足的攻击者构建更长的链来改写历史。如果孤立区块中的交易与攻击者的链发生冲突，这些交易要么返回到内存池，要么失效。

传统观点认为，经过六次确认后，逆转的可能性“微乎其微”，这种说法具有误导性。它将安全性视为一种统计属性，而实际上安全性是一种对抗性属性。这适用于所有纯工作量证明（PoW）链，包括比特币。面对拥有多数算力的攻击者，任何确认次数都无法提供密码学上的确定性——只有关于攻击者动机和算力成本的经济假设才能提供确定性。

笔记Zcash 的 75 秒出块时间意味着确认数积累得更快——六个确认大约需要七分半钟，而比特币则需要一个小时。虽然每个区块代表的工作量较小，但确认数的累积速度很快。

交易已被挖掘，状态已更新。Alice 的旧笔记已永久消失，取而代之的是承诺树中的两条新笔记。其中一条属于 Bob，现在他需要找到它。

#### 4.10 接收者检测 <a href="#id-410-recipient-detection" id="id-410-recipient-detection"></a>

Alice 的交易已上链。Bob 的 5 个 ZEC 作为一条承诺存在于链表中，但 Bob 目前还不知道这一点。他的钱包需要找到对应的承诺。

**扫描区块链**

Bob 的钱包会定期与网络同步，下载新区块并扫描收到的付款。问题在于 Bob 无法直接搜索自己的地址。加密输出中不包含明文地址，每个输出都类似于随机加密数据。

Bob 的钱包会尝试解密遇到的每一个屏蔽输出，因此对于`encCiphertext`每个区块的每个操作，钱包都会尝试使用 Bob 收到的查看密钥进行解密。大多数解密尝试都会失败，并产生无法使用的数据，但这也在意料之中，因为这些输出属于其他人。

最后，当 Bob 的钱包遇到 Alice 的交易并尝试解密 Action 0 中的密文时，解密成功，有效的笔记数据出现了。

**找回纸条**

解密成功后，Bob 的钱包就能恢复完整的明文笔记：

```
{
	"addr": "u1bob...",
	"v": 500000000,
	"rho": "0x3e4f5a6b...",
	"psi": "0x7c8d9e0f...",
	"rcm": "0x1a2b3c4d..."
}
```

鲍勃现在拥有了他所需的一切：

* **金额：** 5 ZEC（5亿扎托西）。他的钱包余额已相应更新。
* **笔记的组成部分：** Alice 生成的\`\<value>\` `rho`、`psi`\`\<value>\` 和 \` `rcm`\<value>\` 值。这些至关重要。如果没有它们，Bob 就无法计算承诺以验证其是否与链上的内容匹配，也无法推导出用于稍后花费笔记的无效符。
* **位置信息：** Bob 的钱包还会记录这条承诺在区块树中的位置。区块处理时，这条承诺会被添加到特定的叶索引处。Bob 需要这个位置信息来构建默克尔路径，以便最终进行消费。

**核实纸条**

Bob的钱包不会盲目信任解密后的数据。它会根据恢复的值重新计算承诺值：

```
cmx_check = Hash(addr_bob, 500000000, rho, psi, rcm)
```

如果与 Alice 交易中发布的链上信息`cmx_check`匹配`cmx`，则该笔记有效。如果不匹配，则说明存在错误（可能是数据损坏或发送者恶意），钱包会丢弃该笔记。

正常情况下，这项检查总是通过的。爱丽丝的钱包正确地生成了纸条，解密结果也完全恢复了她加密的内容。

**一张可消费的便条**

鲍勃现在拥有一张面值 5 ZEC 的可用钞票。他的钱包将钞票数据存储在本地，以便随时使用。届时，他将按照爱丽丝当初发送钞票的相同步骤进行操作：

1. 选择音符
2. 获取其默克尔路径
3. 计算其零化因子
4. 为他的收件人创建输出说明。
5. 生成证明
6. 广播交易

循环往复：鲍勃的消费会揭示一个无效符，将他的笔记标记为已消耗，新的承诺将被添加到树中，然后新的接收者将扫描、解密并发现他们的资金。

笔记对于屏蔽钱包而言，扫描是主要的性能瓶颈，因为离线数月的钱包需要尝试解密数百万条输出才能跟上进度。正因如此，轻客户端和优化的同步协议才显得尤为重要。第二节中提到的 Tachyon 项目旨在通过不经意同步显著改进追赶过程，使钱包能够在不泄露所查询信息的情况下向服务器查询相关数据。

Alice 向 Bob 发送了 5 个 ZEC。网络验证了这笔交易，但并未得知是谁向谁发送了什么，而 Bob 仍然能够收到这笔款项，其他人对此毫不知情。交易完成。

<figure><img src="https://maxdesalle.com/panopticon.jpg" alt=""><figcaption><p>杰里米·边沁于1791年设计的全景监狱。这种监狱的设计目的是让囚犯永远不知道自己是否被监视。他们学会了自我监视。</p></figcaption></figure>

### 5. 隐私哲学 <a href="#id-5-the-philosophy-of-privacy" id="id-5-the-philosophy-of-privacy"></a>

#### 5.1 隐私是进步的前提条件 <a href="#id-51-privacy-as-a-precondition-for-progress" id="id-51-privacy-as-a-precondition-for-progress"></a>

隐私并非秘密，因为秘密旨在掩盖令人羞耻的事情。隐私是指选择向谁透露哪些信息的权利。隐私是对自身信息的自主掌控，它是自由的基石。

这种区别至关重要，因为隐私的批评者常常将二者混为一谈。专制体制的惯用伎俩是“如果你没有什么可隐瞒的，你就没有什么可害怕的”，并假定隐私只对那些有不可告人秘密的人才有价值。然而，隐私对每个人都至关重要，因为它为我们所珍视的一切创造了条件：思想自由、言论自由、自由市场和进步。

**进步的条件**

卡尔·波普尔认为，进步依赖于批评。大胆的想法必须被提出、检验和修正，这样才能发现并摒弃错误。这一过程要求人们在提出大胆想法之前，不应因这些想法未经检验且存在错误风险而受到惩罚。全景监狱式的监控确保了异议在表达之前就被压制。创新需要许可，批评会受到惩罚——进步的机制因此崩溃。

大卫·多伊奇拓展了波普尔的洞见，认为人类的独特之处在于其作为普遍解释者的能力。我们创造知识、理解宇宙乃至改造宇宙的能力，使我们与众不同。然而，知识的创造需要实验，而实验则需要先在私下里经历失败，再在公开场合取得成功。监视会抑制实验的自由，因为当每一个行动都被观察和记录时，创造性思维就会被扼杀。

这些并非抽象的担忧，而是每个人在明知自己的言辞被监视的情况下进行自我审查的现实。每个人在明知捐款会公开透明、可追踪的情况下，选择不向有争议或新颖的事业捐款。每个人在明知查询会被记录的情况下，避免研究敏感话题。监视会改变行为，这是其主要功能之一。有时，改变行为就意味着限制思想，进而限制进步。

**货币作为最终垄断**

纵观历史，自由取决于我们拥有哪些工具来保护它。

印刷术促进了言论自由。在古腾堡之前，思想往往被抄写员和牧师束缚，被制度权威所垄断。印刷术打破了信息垄断。

互联网打破了地域的垄断。思想可以瞬间跨越国界传播。无需实际接触即可进行协调。信息能够绕过障碍，审查也变得更加困难。

火药打破了骑士和国王对暴力的垄断。一个手持火枪的农民就能挑战身披盔甲的领主。权力变得更加分散。

每一次，新工具都会打破旧的垄断。如今，只剩下一个垄断：金钱。

货币是人类迄今为止创造的最强大的协调技术。它承载着我们传递价值、分配资源和进行大规模合作的纽带，但它仍然受到诸多限制。货币是监控最严密、管控最严格的技术。每一笔交易都可能被监控。政府只需轻敲键盘就能冻结账户。银行一夜之间就能注销你的账户。而且，资本管制日益严格，甚至会阻止你提取自己的现金。

可以说，如果其他人可以看到你做的每一笔交易，决定是否批准，甚至之后决定撤销该决定并阻止你访问，那么你的钱就不是你的了。

**市场中的隐私**

自由市场需要隐私，这一结论源于对市场运作方式的理解：

市场通过价格聚合信息，这意味着参与者基于各自的私有信息做出决策，而价格则是由这些决策的总和构成的。这种机制只有在参与者能够基于私有信息做出决策，且不会过早泄露这些信息的情况下才能有效运作。如果交易者必须在建仓前公开所有仓位，就会被抢先交易；如果企业必须公开所有供应商关系，就会被低价竞争；如果捐赠者必须公开每一笔捐款，就会面临压力。

任何泄露，哪怕只是少量信息的泄露，都会改变市场，因为它会引入偏见并扭曲决策。一个系统中的监控越多，它面临的扭曲就越大。理想的市场需要参与者能够根据私密信息自由行事，而绝对监控使得这一点成为不可能。

你的净资产不应该成为公开的API。你的交易记录不应该成为一个可查询的数据库。你的财务生活不应该受到旁观者的监督。这些并非特殊情况或杞人忧天，而是市场正常运转和个人享有自由的基本要求。

#### 5.2 透明度陷阱 <a href="#id-52-the-transparency-trap" id="id-52-the-transparency-trap"></a>

加密货币本应使我们摆脱金融监控，但它却适得其反。

发起这场运动的密码朋克们深知其中的利害关系。他们明白，数字时代的隐私不会由政府或企业直接赋予，而是需要借助加密工具来构建、部署和捍卫。比特币正是在这种理念下诞生的，它成功地打破了政府的垄断，证明了货币可以独立于政府控制而存在。

然而，比特币存在一个重大缺陷：它默认是透明的。任何感兴趣的人都可以查看每一笔交易、每一个地址和每笔余额。区块链是一个永久的公共账本，记录了所有曾经发生过的经济活动。中本聪在其最初的白皮书中承认了这一局限性，并建议用户可以通过为每笔交易生成新地址来保护部分隐私。这在当时只是一个微不足道的缓解措施，而现在则显得荒谬可笑。

匿名性意味着您的身份与您的地址没有直接关联。然而，通过观察您的行为，例如您的交易时间、转账金额、互动地址以及您重复出现的模式，您的身份仍然可能泄露。随着数据点的增加，一个地址可能对应的身份集合会不断缩小，最终，在足够的限制条件下，该集合将只剩下一个身份。

在人工智能时代，匿名性只是暂时的隐私，它只是一种幻觉，终将被计算机技术所瓦解。

**商业需要不透明性**

透明度问题不仅限于个人，因为没有隐私，商业活动也无法正常进行。

试想一下，当你向一家位于透明支付链上的企业进行一次性付款时会发生什么。现在，你可以看到他们的地址，并有可能从该地址推算出他们的总收入、客户地址、供应商关系、员工工资，甚至现金流和资金周转情况。

人力资源部门将薪酬结构视为严守机密，企业不公开供应商合同，财务报表按季度以受控格式发布而非实时向公众公开，这其中自有缘由。竞争激烈的市场需要信息不对称。企业必须能够在不泄露给竞争对手的情况下利用内部信息采取行动。

同样的逻辑也适用于个人。如果你的消费模式能够揭示你的健康状况、政治倾向、宗教信仰和人际关系，那么每一笔交易都会成为一个数据点，用来描绘出你是谁、你的价值观以及你容易受到哪些影响或胁迫。

网络需要HTTPS才能实现线上商业运作。出于安全考虑，以明文形式传输信用卡号显然是不可接受的。互联网的支付层也需要同样的演进，正如明文交易只是原型一样，真正投入生产需要加密。

#### 5.3 隐私必须绝对保密 <a href="#id-53-privacy-must-be-absolute" id="id-53-privacy-must-be-absolute"></a>

半吊子的措施行不通，因为隐私是二元的——要么有，要么没有。

这听起来或许有些极端，但却符合信息的运作规律。秘密只有在泄露之前才是秘密，一旦泄露，就无法挽回。在永久存储、模式识别和人工智能分析盛行的时代，任何部分泄露都会演变成全面泄露。问题不在于剩余的信息是否会被提取，而在于何时会被提取。

**单比特问题**

想象一下，一个隐私系统可以隐藏你99%的交易数据，却泄露剩下的1%。这1%的泄露看似可以接受，但信息会不断累积。泄露一个比特会限制可能性，泄露两个比特则会进一步限制可能性。每一次泄露都会缩小你身份、行为和动机的可能性范围。

对手很有耐心。他们会随着时间的推移收集零散的信息，关联不同数据源，并运用统计技术从噪声中提取有效信号。虽然单个的时间关联、数量模式或网络图连接本身不足以识别你的身份，但一旦这些信息汇聚起来，就能做到。

请记住，这并非假设，而是链式分析、元数据分析以及所有现代监控系统的基本方法。认为小泄露永远不会造成太大影响的假设是错误的；小泄露会累积起来，最终构成完整的图像。

任何存在泄露的隐私系统都必须回答以下问题：当拥有无限时间和计算能力的攻击者针对这些泄露进行优化时会发生什么？如果答案是“他们最终会获胜”，那么该系统提供的并非隐私，而只是延迟了信息的泄露。

**混淆与加密**

隐藏信息有两种方法，要么对其进行混淆，使其更难在噪声中找到，要么对其进行加密，使其在没有密钥的情况下无法通过数学方法访问。

混淆就像大海捞针。这种方法在有人制造出更好的磁铁之前或许有效。但只要付出足够的努力，针依然存在，仍然可以找到。这种安全性是经济性的，而非数学性的。你是在赌找到这根针的成本会高于它的价值。但随着时间的推移，成本会下降。计算成本会降低。算法会变得更智能。攻击者会更有动力。今天隐藏的东西，明天可能就轻易暴露出来。

加密就是销毁指针，只保留对其的加密描述。没有密钥，这个描述就与随机噪声无异。没有任何磁铁可以帮你做到这一点。任何计算都无法从随机性中提取意义。安全是数学问题，而非经济问题。它不会随着时间推移而降低。假设加密技术是可靠的，那么2016年的加密信息在今天仍然和当时一样安全。

这种区别对金融隐私至关重要。基于混淆的方法会将您的交易与其他交易混合，将其隐藏在诱饵之中或向数据中添加噪声。虽然这些技术会增加分析成本，但并非完全不可能进行分析。随着分析技术的进步，保护力度会减弱。五年前足以保障隐私的措施，如今可能已被突破；而如今看似足够的隐私保护措施，也可能被2030年的技术手段所突破。

基于加密的方法隐藏了交易本身，因此无需分析交易，只需证明交易有效即可。数据并非简单地被模糊化，而是完全消失，因此不受未来分析技术发展的影响；你无法在不存在的数据中找到模式。

**为什么这决定了架构**

这就是为什么 Zcash 对交易进行加密而非混淆的原因。发送方、接收方和金额不会被隐藏在诱饵中或与噪声混合，而是被加密。区块链存储的是承诺和证明，而不是模糊的数据，因此网络所看到的内容在数学上与随机字节无法区分。

简而言之，如果你接受隐私必须是绝对的，部分泄露会累积成完全泄露，而且对手的能力只会随着时间的推移而增长，那么加密是唯一可行的永久解决方案，而混淆只是一种临时措施。

选择并非在更多隐私和更少隐私之间做选择，而是在能够长久维系的隐私和最终会失效的隐私之间做选择。没有中间路线。

#### 5.4 宏观案例 <a href="#id-54-the-macro-case" id="id-54-the-macro-case"></a>

迄今为止，关于隐私的争论主要集中在哲学层面。隐私促进进步、透明等同于监视、部分隐私终将失败——这些观点在任何时代都适用。然而，我们所处的时代并非寻常，在当今时代，宏观环境使得隐私不仅具有价值，而且迫在眉睫。

**历史并未终结**

现代西方社会的稳定或许使人们误判了这种稳定的持久性。纵观历史，放眼全球，稳定只是例外，而非普遍规律。政权会崩溃，货币会失效，债务周期会重置，资本管制可能一夜之间出现。这些并非罕见事件或遥远的历史，而是现代世界正在发生的现实，发生在某个地方的某个人身上。

仅在过去十年间，塞浦路斯在金融危机期间[就冻结了银行存款；](https://en.wikipedia.org/wiki/2012%E2%80%932013_Cypriot_financial_crisis)[希腊实施了资本管制](https://en.wikipedia.org/wiki/Capital_controls_in_Greece)，阻止公民提取自己的存款；[黎巴嫩的银行系统崩溃](https://en.wikipedia.org/wiki/Lebanese_liquidity_crisis)，导致储蓄被困在长达数年的取款限制之下；[阿根廷频繁遭遇货币危机](https://en.wikipedia.org/wiki/2018%E2%80%93present_Argentine_monetary_crisis)；[尼日利亚限制了外汇获取](https://www.cbn.gov.ng/out/2013/fprd/circular%20to%20all%20banks%20and%20other%20financial%20institutions-us$10,000.pdf)；[中国收紧了资本外逃管制](https://www.reuters.com/markets/asia/china-steps-up-scrutiny-capital-flows-yuan-depreciates-2025-02-27/)。

各国政府在面临财政压力时，往往会采取一系列金融管制措施。国民经济和中央银行允许冻结银行账户、限制取款、阻止转账以及扣押资产。因此，问题就变成了哪些资产可以被扣押，哪些不能。

黄金历来被视为应对财政不确定性的有效避险工具。它难以大规模没收，难以追踪，且在政权更迭中仍能保持价值。然而，在当今世界，黄金的使用体验却十分糟糕，因为它必须实物购买、真伪验证、安全存储，并且运输风险极高。这种繁琐的使用体验限制了黄金作为实用价值储存手段的效用。

比特币原本被认为是数字黄金。从某种意义上说，它的确如此，但其透明性也带来了另一种脆弱性。如果你的每一笔交易都记录在公共账本上，那么政府就能轻易识别你的资产，追踪你的行踪，并通过法律渠道施加压力。正是这种透明性使得比特币无需信任，但也使其更容易成为攻击目标。

**监视棘轮**

监控能力的发展只有一个方向：扩张。

各国政府积累数据、构建系统、聘请分析师并开发分析技术。政府可以跨机构甚至跨境共享信息。监控基础设施一旦建成，不会拆除，而是不断升级。

人工智能将极大地加速这些进步。过去需要分析师团队才能完成的模式匹配现在可以自动化。过去各自独立的元数据现在可以大规模关联。过去需要数月才能完成的行为分析现在可以实时进行。人均监控成本将降至接近于零。唯一的限制在于可供分析的数据量。

在透明的区块链上，数据就是一切。你进行的每一笔交易都会被永久保存，等待更强大的分析工具。区块链不会遗忘，那些试图从中挖掘信息的攻击者也不会。

你今天的所作所为，将会被明天的工具所分析。如今看似匿名的交易，五年后或许就能轻易追踪。如今隐藏在噪声中的模式，一旦算法改进，或许就会变成显而易见的信号。你在2026年做出的决定，必须考虑到2030年的隐私和分析状况。

**我们必须牢记的先例**

强制信息披露是威权控制最有效的手段之一。它并非始于没收财产，而是始于信息收集。登记你的宗教信仰，申报你的资产，报告你的社交活动。尽管这些要求被包装成行政和官僚程序，但它们往往预示着更糟糕的事情即将发生。

一旦信息披露成为强制性要求，就可以对人群进行划分，识别、分析和评估各个群体。他们是否信奉我们不认可的宗教？他们是否属于我们认为具有威胁性的组织？他们是否拥有我们可能觊觎的资产？这种分离和区分先于迫害，只有掌握了数据，才能采取有针对性的行动。

威权统治在我们有生之年就已出现，甚至在没有现代科技带来的规模化优势的情况下也曾发生过。纳粹使用纸质记录和文件柜。而如今，我们的数字工具使得大规模人口识别和目标锁定变得轻而易举。

持有私人资产就是拒绝这些威胁，就是拒绝“你的财务生活应该对权力透明”这一前提，就是反对一种已被证明在实施时会带来灾难性后果的理念。

人工智能驱动的监控正在不断扩张。法律体系被武器化以打击弱势群体的现象日益增多。随着财政压力不断增加，资本管制也变得越来越普遍。在发达民主国家，出于政治原因没收财产已不再是不可想象的事情。

您的财富安全不应取决于谁赢得选举。您的积蓄不应因一项政策的改变而面临被没收的风险。您的财务隐私不应依赖于那些已经展现出愿意曲解规则的机构的持续善意。

总之，隐私的宏观意义在于，坏事已经发生、正在发生并将继续发生。问题在于，当它们找上门来时，你是否做好了应对的准备。

#### 5.5 历史的岔路口 <a href="#id-55-the-fork-in-history" id="id-55-the-fork-in-history"></a>

我们正处于一个十字路口。货币体系正在重建。现在做出的选择将决定未来的可能性，而两条道路的走向也将截然不同。

**监控资金**

其中一条路径通往完全的财务透明化，每笔交易都会被记录，每一笔捐款都会被分析，每一次消费都会建立起个人档案。这正是我们当前系统的发展轨迹。

全球各地都在试点央行数字货币。例如，[中国的数字人民币](https://en.wikipedia.org/wiki/Digital_renminbi)已经大规模部署，[欧洲央行正在开发数字欧元](https://en.wikipedia.org/wiki/Digital_euro)，[美联储也研究过数字美元](https://www.federalreserve.gov/cbdc-faqs.htm)。重要的是，这些系统从设计之初就旨在实现监控，而非保护隐私。其目标是提高透明度：谁在何时何地向谁消费了什么。

可编程货币进一步拓展了财政控制的逻辑，它引入了货币到期日以强制消费、限制可购买商品类别、建立以行为评分决定金融准入的社会信用体系，以及只能在指定商家使用的刺激性支付。这一切都不需要阴谋，只需要基础设施已经建成，并且人们产生了使用它的动机。

透明区块链无需构建央行数字货币（CBDC）的额外成本，即可提供监控功能，从而满足基础设施的要求。当公民自愿将交易记录在公共账本上时，政府无需发行数字货币。最终结果是一样的：形成一个全景式监控系统，任何拥有读取工具的人都能清晰地了解经济活动。

完全的财务透明最终会将金钱变成一种控制手段。它不再是自愿协调的工具，而是社会管理的工具。消费“正确”就能免受干扰，消费“错误”则会被标记、限制甚至冻结。交易自由变成了老大哥赋予你的特权。

**自由货币**

另一种方式则导致资金无法被监控、审查或控制。交易默认是私密的，账户余额只有账户所有者才能看到，这使得经济活动对参与者而言清晰明了，而对旁观者而言却晦涩难懂。

值得注意的是，这条路径并非通往无政府状态，即没有规则的状态。这条路径的结果是规则，但这些规则是由数学而非机构强制执行的。双重支付是不可能的，因为密码学可以防止这种情况发生。货币供应量不可能被人为增加，因为协议禁止这样做。伪造交易是不可能的，因为你没有获得所需的密钥。这些规则嵌入在系统本身，由节点而非政府强制执行，而且重要的是，它们不受任何随意更改的影响。

在这样的未来中，市场运作不受观察的扭曲影响。群体协调依然可行，不受监视的影响。异议组织依然存在，因为资金来源无法追踪。创新依然可行，因为实验过程无法被监控。因此，5.1节所述的进步条件得以保留。

**加密先例**

仍然有理由相信，通往自由的道路尚未封闭。

上世纪90年代，美国政府曾试图禁止强加密技术。美国国家安全局（NSA）和联邦调查局（FBI）认为加密通信会助长犯罪分子和恐怖分子的活动，并力推密钥托管系统，认为这将为政府提供后门访问权限。这些联邦机构将加密软件归类为军需品，使其出口成为非法行为。

密码朋克们反对并挫败了这些措施，但加密技术仍然传播开来。研究人员发布了算法，开发者发布了软件，互联网采用了TLS协议。如今，加密不仅合法，而且是强制性的。HTTPS是银行、商业和通信的必要条件。曾经试图禁止加密的政府，如今为了保护公民，强制要求使用加密技术。

从“加密很危险”到“加密是必需的”这一转变用了大约二十年时间。私人资金很可能也会经历类似的转变。如今，金融隐私备受质疑：监管机构将其视为犯罪分子的工具，合规框架也默认透明。人们认为通信隐私合法且重要，而这些论点同样适用于金融隐私：个人需要免受监视，商业活动需要保密，否则将导致控制面无处不在。

Zcash 在美国是合法的，甚至可以在受监管的交易所进行交易。它已经运营了近十年而未被禁止。这并非偶然。它反映了与保护加密技术相同的法律和政治逻辑：使用加密工具的权利是站得住脚的，而且隐私的益处远远超出了那些可能滥用隐私的人。

**选择**

这两条路互不相容，你不可能既拥有监控资金又拥有自由资金。你不可能既拥有金融隐私又拥有普遍的交易监控。目前正在建设的基础设施将决定我们生活在哪个世界。

选择保护您的交易不仅仅是一项个人财务决策，更是对未来发展方向的一种选择。您的选择反映了您的偏好，因为保护池中的每一笔交易都会增强网络，而每一位采用私人货币的用户都会使其更具可行性。技术已经存在，现在我们必须决定如何使用它。

监控资金会导致未来经济自由成为强者授予的特权。自由资金则会带你进入一个经济自由是根本且由数学保障的世界。你会选择哪一个？

<figure><img src="https://maxdesalle.com/northern-rock.jpg" alt=""><figcaption><p>2007年9月，储户在北方岩石银行外排队。这是英国150年来首次银行挤兑。</p></figcaption></figure>

### 6. 进化与经济学 <a href="#id-6-evolution--economics" id="id-6-evolution--economics"></a>

#### 6.1 协议世代 <a href="#id-61-protocol-generations" id="id-61-protocol-generations"></a>

Zcash自推出以来已对其核心加密算法进行了两次升级，每一次升级都带来了更好的性能、更强的安全性以及更少的信任假设。如今的协议比2016年的协议有了显著的改进。

**萌芽（2016）**

最初的屏蔽池证明了私密加密货币是可能的，因为生产网络首次提供了由零知识证明支持的加密隐私。

Sprout 只是一个披着量产外衣的原型。创建一笔加密交易需要大约 40 秒的计算时间和几 GB 的内存。Sprout 无法在手机上使用，在笔记本电脑上也几乎无法使用。大多数交易仍然保持透明，仅仅是因为加密成本太高。

Sprout 还要求进行一个可信的设置仪式，六名参与者共同生成初始参数，每个人都采取了周密的预防措施来销毁自己贡献的秘密信息。仪式成功了，但却留下了一个令人不安的问题：如果有人偷偷地保留了这些有毒的废料怎么办？

**幼苗（2018）**

两年后，Sapling 用一种效率更高的加密算法取代了 Sprout 的加密算法。生成证明所需的时间从 40 秒缩短到几秒。内存需求也降至几十兆字节，屏蔽交易首次在移动设备上成为现实。

Sapling 还引入了一些增强隐私保护功能。例如，查看密钥功能允许用户共享其交易历史记录的读取权限，而无需暴露支出权限；而多样化地址功能则允许单个钱包生成数十亿个互不关联的接收地址。

重要的是，信任机制得以保留。一项名为“Tau之力”的新仪式历时数月，数百人参与，随后进入针对幼苗的专属阶段。规模更大的仪式增强了信心，但信任模式保持不变：相信至少有一位参与者是诚实的。

**果园（2022）**

Orchard 系统取代了原有的验证系统。它基于 Halo 2 的验证系统构建，无需可信设置，也无需任何仪式。因此，不会产生有害数据，也不会对多年前发生的事件抱有任何信任假设。

Orchard 的性能与 Sapling 相当，但证明规模略大，且无需任何设置。其密码学结构也不同，采用了一种专为递归证明设计的新型曲线循环（Pallas 和 Vesta）。

Orchard 才是 Zcash 真正应该拥有的平台。早期的几代产品代表了当时最先进的技术；而 Orchard 则是当研究成果最终与愿景相符时才得以实现的成果。

**今天**

Orchard 现在是新加密交易的默认支付钱包。一些钱包，例如 Zashi，会自动将用户路由到 Orchard，并在消费前自动加密透明资金。

Sapling 仍将继续得到支持，但正在逐步淘汰。它曾作为原型系统和量产系统之间的桥梁，但 Orchard 才是最终归宿。

Sprout 已被弃用，尽管资金池仍然存在于链上，钱包不再创建新的 Sprout 交易，我们鼓励在 Sprout 中有资金的用户迁移。

#### 6.2 旋转闸门 <a href="#id-62-turnstiles" id="id-62-turnstiles"></a>

隐私会带来审计难题。在透明的区块链上，你可以清点每一枚代币。代币供应量是所有余额的总和，任何人都可以查看。如果某个漏洞允许凭空创造代币，你就能看到总量的增加。

屏蔽资金池会隐藏余额。你无法简单地计算每个人的持币总额，因为你无法看到每个人的具体持币情况。那么，如果假币流入屏蔽资金池，你又该如何得知呢？

答案是旋转闸门。

**机制**

每个屏蔽池都有自己的旋转闸门，用于实时记录流入和流出池子的ZEC数量。当代币从透明池流入屏蔽池时，旋转闸门会记录存款；当代币流出屏蔽池时，旋转闸门会记录取款。

计算很简单。如果闸机显示有 100 万 ZEC 进入资金池，80 万 ZEC 流出，那么最多只剩下 20 万 ZEC。如果有人试图提取 30 万 ZEC，那肯定有问题，要么是加密系统出了故障，要么是有人试图进行欺诈。

旋转闸门并不能阻止伪造，而是检测伪造行为。更准确地说，旋转闸门会检测任何试图用假币兑换现金的行为。你可以在一个受保护的资金池中伪造ZEC（如果你能破解复杂的加密技术），但你无法在透明资金池中使用这些伪币而不被发现。

**萌芽虫**

2018年，Sprout加密技术被发现存在漏洞。该漏洞存在于证明系统中，可能允许攻击者在受保护的资金池内创建不被察觉的加密货币。

Zcash 团队在安全审计中发现了这个漏洞，并在任何利用发生之前进行了修复，但这一事件表明了旋转门的重要性。

如果攻击者利用了这个漏洞，他们可以在 Sprout 系统中随意铸造 ZEC，但他们无法悄无声息地提取这些代币。一旦他们试图将伪造的 ZEC 转移到透明池或其他受保护的池子中，系统就会崩溃，审计人员会发现从 Sprout 系统流出的 ZEC 数量超过了流入的数量。

旋转闸门能够有效限制任何攻击的影响范围，因为即使是灾难性的加密故障也不会造成无法察觉的通货膨胀。损失将受限于资金池的容量，任何试图兑现伪造价值的行为都会触发警报。

#### 6.3 资金筹集 <a href="#id-63-funding-development" id="id-63-funding-development"></a>

Zcash 在推出时做出了一个颇具争议的选择：寻求协议层面的开发资金。它不依赖捐款或企业赞助，而是将每个区块奖励的一部分直接捐赠给发展组织。

**创始人奖励（2016-2020）**

在前四年，所有区块奖励的 20% 通过所谓的“创始人奖励”分配给了创始人、早期投资者、员工和 Zcash 基金会。

尽管该安排在发布前已公开，且所有挖矿或购买ZEC的人都了解相关条款，但这项决定仍然引发了争议。一方面，批评者认为这是对矿工征税，并让内部人士获利。另一方面，支持者则认为这是为一项需要多年持续密码学研究的项目提供必要的资金。

创始人奖励已于 2020 年 11 月的第一次减半后结束，所有获奖者都收到了承诺的金额。创始人现在不再获得协议奖励。

**发展基金（2020-2024）**

在创始人奖励到期前，社区就后续计划展开了讨论。最终决定设立开发者基金，以不同的结构延续20%的资金分配比例。

新的分配方案将7%的区块奖励分配给Electric Coin Company（主要开发团队），5%分配给Zcash基金会（基础设施和治理），8%分配给由独立委员会管理的社区资助项目。创始人及早期投资者不再参与资金分配。

发展基金安排在 2024 年 11 月的第一个半数结算日和第二个半数结算日之间实施。

**扩展发展基金（2024-2025）**

随着第二次拨款期限的临近，社区再次对拨款进行了投票，并决定对开发基金进行一些修改后予以延长。

开发资金仍按区块奖励的 20% 分配，但现在一部分资金会进入一个由未来治理机制而非现有组织控制的“锁箱”。此举旨在逐步分散资金决策权，使代币持有者对开发资金的使用拥有更大的直接影响力。

#### 6.4 去中心化治理 <a href="#id-64-decentralized-governance" id="id-64-decentralized-governance"></a>

Zcash不受任何单一实体控制。其开发、基础设施和治理由多个独立的组织负责，这些组织拥有不同的管辖范围、资金来源和职责范围。

**这些组织**

Electric Coin Company (ECC) 是主要的协议开发团队。ECC 团队负责维护参考节点实现、开发 Zashi 钱包并推动核心研究。ECC 是 Bootstrap Project 的子公司，Bootstrap Project 是一家位于美国的 501(c)(3) 非营利组织。

Zcash 基金会负责基础设施、社区项目和拨款。该基金会的团队开发了 Zebra，这是一个用 Rust 编写的独立节点实现，确保网络不依赖于单一代码库。Zcash 基金会是一家 501(c)(3) 公益慈善机构，总部也设在美国，但在运营上独立于 ECC。

Shielded Labs专注于长期研究和生态系统发展。该机构总部位于瑞士，资金来源于捐赠而非协议奖励，这为其贡献者群体提供了地域和结构上的多样性。

由密码学家肖恩·鲍伊 (Sean Bowe) 领导的 Tachyon 项目正在构建 Zcash 的可扩展基础设施。鲍伊曾是 Halo 2 的架构师，并参与了 Zcash 大部分核心密码学的开发。Tachyon 项目旨在通过创新钱包与网络同步的方式，实现全球私密交易，避免信息泄露给服务器。

这四个组织开展合作，但彼此之间无需对簿公堂。它们可以持有不同意见，而且有时确实如此。这种目标和观点的多样性有助于防止利益冲突，并确保多种观点都能为协议决策提供参考。

**ZIP流程**

协议变更遵循 Zcash 改进提案 (ZIP) 流程，这意味着任何人都可以提出变更提案。提案会公开讨论，根据反馈进行完善，并根据技术价值和社区共识决定是否接受或拒绝。

重大决策无需经过 ZIP 流程，而是通过全社区投票决定。2020 年和 2024 年的开发者基金延期都经过了广泛的公众讨论和意见收集，并在实施前征求了代币持有者、矿工和社区成员的意见。

<figure><img src="https://maxdesalle.com/enigma.jpg" alt=""><figcaption><p>二战期间，纳粹德国使用恩尼格玛密码机对军事通信进行加密。操作员每天都会更改设置，生成的加密信息对于拦截者来说就像是随机的乱码。</p></figcaption></figure>

### 7. Zcash VS … <a href="#id-7-zcash-vs" id="id-7-zcash-vs"></a>

隐私源于静止状态下的价值，而非动态状态下的价值。

这条简单的原则解释了为什么大多数隐私解决方案都会失败，以及为什么底层加密是唯一有效的架构。一旦理解了这一点，隐私技术的全貌就清晰明了了。

#### 7.1 龙卷风现金和搅拌机 <a href="#id-71-tornado-cash-and-mixers" id="id-71-tornado-cash-and-mixers"></a>

想想你使用混币器时会发生什么。你存入资金，等待一段时间，然后将其提取到另一个地址。混币器的目的是切断输入和输出之间的联系，但存款和取款都是可见的。观察者可以看到资金何时流入和流出。混币器试图模糊哪个输入对应哪个输出，但这并不能保证隐私。

相反，它是在动态价值中添加隐私，但其根本原因在于入口和出口点会泄露信息，因此失败了。

存款会泄露时间和金额，取款也会泄露时间和金额。如果这些信息关联起来，隐私就会被破坏。例如，如果你存入 1.5 个 ETH，一小时后有人取款 1.5 个 ETH，两者之间的关联显而易见。混币器试图通过固定面额和延迟来解决这个问题，但信息泄露依然存在。只要有足够的数据和复杂的分析，就必然会发现其中的关联。

人工智能加剧了这些风险。曾经难以实现的模式匹配，如今借助时间分析、数量聚类和行为模式分析变得轻而易举。每台搅拌机都是一个谜题，等待算法开发出解决之道。

真正区分收款和付款交易的唯一方法是从时间和金额两个方面进行区分。收款交易不得导致付款交易。金额和交易时间必须互不相关。

因此，私人体系实际上发挥着价值储存的作用。资金存入，存放，时间流逝，生活变迁，最终，出于各种原因，一些互不相关的资金被取出。存款和取款并非同一操作的两个部分，而是两个独立的事件，中间隔着数月甚至数年的真实存储。

理论上，你可以使用像 Tornado Cash 这样的混合器来做到这一点，并将资金无限期地留在资金池中，但这不切实际，因为当这些资金放在那里时，你无法对这些资金进行任何操作。

此外，Tornado 的资金池面额固定，因此您无法在资金池内发送任意金额，也无法将资金从一个 Tornado 账户转移到另一个账户，更不能用它来支付他人或与任何应用程序交互。要使用您的资金做任何事情，您必须将其提现到透明的以太坊地址，这又会使您再次暴露在监控层之下。

Zcash 与众不同。屏蔽层之间的转账是原生支持的，因此您可以接收资金、持有资金、花费任意金额、找零，并再次进行交易，所有操作都无需触及透明层。您可以使用 Near Intents 将屏蔽池与其他链连接起来，以屏蔽的 ZEC 进行支付，而收款人则可以收到他们想要的任何资产。屏蔽池并非等待室，而是一个功能齐全的货币系统。

这就是关键的建筑学区别。混合器是透明系统的逃生通道——你进去，等待，然后离开。Zcash 的屏蔽池则是一个目的地——你可以在那里生活。

#### 7.2 门罗币 <a href="#id-72-monero" id="id-72-monero"></a>

除了 Zcash 之外，门罗币是使用最广泛的隐私加密货币。它代表了一种与 Zcash 截然不同的信息泄露问题解决方法。通过了解门罗币方法失败的原因，我们将阐明 Zcash 方法成功的原因。

门罗币采用的是环签名技术。当你花费资金时，你的交易会包含你的真实输入以及从区块链中随机抽取的 15 个诱饵。观察者可以看到 16 个可能的发送者，但无法分辨哪个是真实的。

这听起来很稳健。每笔交易有十六种可能性。真正的支出隐藏在众多虚假交易之中。但实际上，这仅仅意味着隐私是概率性的，而非加密性的。

执法机构已成功追踪到门罗币交易。甚至有[记录在案的案例显示，日本警方通过分析门罗币交易](https://cointelegraph.com/news/monero-transactions-japanese-authorities-arrest-18-scammers)，识别并逮捕了18名涉嫌诈骗者。

根本问题在于匿名集。每笔门罗币交易隐藏在 16 个输出结果中，而每笔 Zcash 屏蔽交易则隐藏在资金池中创建过的所有交易记录中。由于存在数百万条此类交易记录，Zcash 提供的隐私保护并非略胜一筹，而是绝对优于门罗币。

十六是个很小的数字，绝对小到可以用概率方法攻击，尤其是在现在可以利用时间分析、数量模式和行为启发式方法来缩小候选范围的情况下。十六这个数字小到足以保证，只要有足够的计算能力和数据，最终就能破解它。

针对包含数百万条笔记的隐私数据集，不存在任何概率攻击​​。因为没有任何笔记会被排除，所以不可能通过排除法缩小候选范围。你花掉的那条笔记将永远与其他数百万条笔记无法区分。

Monero 的开发者们了解这一局限性，并且正在积极研究用零知识证明取代环签名，实际上，它计划采用 Zcash 的方法；这隐含地承认了基于诱饵的隐私存在上限。

区别很简单：门罗币采用混淆技术，而 Zcash 采用加密技术。随着分析技术的进步，混淆技术的有效性会逐渐降低，而加密技术则不会。

除了技术上的缺陷，门罗币还背负着文化包袱。其社区普遍将其与非法用途联系起来，这使得它几乎不可能被机构采用。这也是门罗币几乎被所有主流交易所下架，而Zcash却仍然可以在Coinbase、Gemini等交易所交易的原因之一。隐私技术需要一条通往合法化的道路，而门罗币却让这条路变得异常艰难。

#### 7.3 隐私池 <a href="#id-73-privacy-pools" id="id-73-privacy-pools"></a>

隐私池提供了一种不同的隐私解决方案。它并非将资金隐藏在随机的诱饵中或对所有资金进行加密，而是允许用户证明自己与已知的恶意行为者无关。您可以从资金池中提取资金，同时证明您的资金并非来自受制裁的地址或被标记的交易。

这种设计很巧妙，关联集功能允许用户定义自己愿意与哪些人归为一组。这样，用户无需透露具体是哪笔存款，就能证明自己属于某个“干净”的关联集。监管机构可以放心资金未被挪用，用户也能获得一定的隐私保护，皆大欢喜。

但这颠倒了正当程序。

隐私池的前提是您必须证明自己的清白。您有责任证明您的资金与犯罪分子无关，并选择加入“优质”用户组，同时提供加密证据证明您属于该组。默认情况下，系统会对您抱有怀疑，而消除这种怀疑的责任在于您。

在运转良好的法律体系中，你无需证明自己无罪——控方必须证明你有罪。而隐私池则恰恰相反，它假定你有罪，直到你通过已批准的关联集证明自己无罪。

这其中的影响不胜枚举，因为你的隐私取决于他人选择披露的信息。如果你的社交圈成员开始证明自己被排除在各种活动之外以洗清嫌疑，剩余成员就会更加怀疑。他们会不断面临压力，被迫提供更多信息、披露更多内容，从而进一步缩小社交圈。这套系统的设计本身就造成了寒蝉效应。

目前并不存在“合规加密”的即时通讯方式。Signal 不会要求你证明你没有与恐怖分子通信，它承认通信隐私是一项权利，即使这意味着犯罪分子可以从中获利。

金融领域也理应如此。认为金钱特殊或金融隐私会助长犯罪的论点经不起推敲。犯罪分子会使用汽车、手机和互联网，但我们开车、打电话或上网时并不需要证明清白。

Privacy Pools 试图在监控和自由之间找到平衡点。它提供的隐私权以遵守规定为前提，需要证明自己有资格享有隐私权，如果无法说服他人相信自己的清白，隐私权可能会被撤销。

它是一种需要额外步骤的许可型融资。

#### 7.4 阿兹特克和私人 L2 <a href="#id-74-aztec-and-private-l2s" id="id-74-aztec-and-private-l2s"></a>

以太坊二层协议，如果辅以隐私功能，则代表着高超的工程技术。像 Aztec 这样的项目正在构建采用复杂加密技术的加密 Rollup。这项技术本身是可靠的，团队也才华横溢；这并非是对其技术能力的质疑。

从根本上讲，Aztec 和 Zcash 解决的是不同的问题。

Aztec 是一个智能合约平台。它的价值主张在于私有可编程性：加密的 DeFi、机密计算和私有应用程序。这非常有价值，因为它支持 Zcash 无法实现的用例。如果您想在不暴露持仓的情况下与复杂的金融协议交互，请使用加密的智能合约链。

Zcash 是一种货币。它的价值主张在于作为一种私密的价值储存手段和交换媒介。其概念很明确：它本质上是加密的比特币。人们可以放心地将财富私密地保存数年甚至数十年，因为该系统将持续存在并有效运行。

这些并非同一使用场景，因此它们的要求也不同。

价值储存手段必须像林迪那样可靠。它需要在恶劣环境下持续运行多年，经受住市场周期、监管压力和技术挑战而不崩溃。Zcash 已经积累了近十年的可靠历史。Aztec 是新兴的，尽管其加密技术可能完美无缺，但该系统尚未经过时间考验。这或许可以接受用于实验性应用，但对于财富安全而言则不然。

价值储存手段也需要模因强度。比特币的成功部分归功于“数字黄金”这一强大的概念，它易于理解和接受。“加密比特币”为Zcash提供了类似的支撑，它继承了比特币的货币属性，同时又弥补了比特币所缺乏的隐私性。Aztec则不具备这种概念，它仅仅是一个隐私基础设施层，而非货币网络。

除了技术设计之外，还存在社会层面。Zcash 社区围绕着对隐私的共同承诺而形成，并将隐私视为不可妥协的原则，近十年来，它抵制了来自法律、政治和声誉方面的压力，始终坚持这一承诺。相比之下，Layer-2 系统继承了 Layer-1 系统的最终规范和治理约束。以以太坊为例，如果面临监管压力，其更广泛的社区是否会始终如一地捍卫强加密和交易隐私尚不明朗。对于一种旨在作为长期价值储存手段的资产而言，这种不确定性本身就构成了风险。

Aztec 和类似项目可能会在私人应用领域找到巨大的需求，但对于私人资金的核心用途（财富可以无限期存放的地方），它们与 Zcash 的用途不同。

<figure><img src="https://maxdesalle.com/samizdat.jpg" alt=""><figcaption><p>地下出版物——苏联公民手工抄写和散发禁书，以规避国家审查。持有这些书籍意味着入狱。</p></figcaption></figure>

### 8. 误解 <a href="#id-8-misconceptions" id="id-8-misconceptions"></a>

#### 8.1 “Zcash 默认不是私密的” <a href="#id-81-zcash-is-not-private-by-default" id="id-81-zcash-is-not-private-by-default"></a>

这种误解混淆了钱包历史上的默认设置和协议设计。

关于默认隐私的误解源于早期钱包出于实用性考虑而默认使用透明地址。在 Sprout 和 Sapling 中，屏蔽交易的计算成本很高，而且交易所要求存款必须透明。因此，阻力最小的方案往往是透明的。

Orchard 现在提高了屏蔽交易的效率，像 Zashi 这样的钱包默认启用屏蔽功能，会在允许用户消费前自动将所有透明资金转移到屏蔽池中。用户体验已转变为以隐私为先。

透明选项仍然适用于特定用例，例如交易所兼容性、监管合规性和用户选择，但现代 Zcash 的默认路径从始至终都受到保护。

#### 8.2 “匿名集很小” <a href="#id-82-the-anonymity-set-is-small" id="id-82-the-anonymity-set-is-small"></a>

这种误解源于将 Zcash 与基于诱饵的系统混淆。

正如我们前面提到的，在门罗币（Monero）中，你的交易会隐藏在固定数量的诱饵交易中。如果有 16 个可能的发送者，那么你的匿名集就是 16。因此，许多批评者认为 Zcash 的工作原理类似：如果使用屏蔽池的人很少，那么你的交易就只会隐藏在少数其他交易中。

然而，这是错误的。Zcash 并不使用诱饵进行抽样，而是使用默克尔树成员资格证明。

当你使用一张受保护的票据时，你证明了它存在于包含所有已创建票据的承诺树中的某个位置，但不会透露具体是哪张票据。验证者只会知道你的票据是承诺树中数百万张票据中的一张，而不是成百上千张。

Orchard 池包含数百万个票据，这是每笔受保护交易的匿名集，它会随着每笔交易而增长，并且永远不会减少。

透明池的大小无关紧要，即使 99% 的 ZEC 都存储在透明地址中，那 1% 的屏蔽 ZEC 也拥有所有已创建的屏蔽票据的匿名集。这两个池在数学上是相互独立的。

#### 8.3 “可选透明度削弱隐私” <a href="#id-83-optional-transparency-weakens-privacy" id="id-83-optional-transparency-weakens-privacy"></a>

这种误解认为透明池会以某种方式污染屏蔽池。

透明ZEC和屏蔽ZEC是两个独立的系统，并行运行。透明端的交易不会泄露屏蔽端的任何信息。屏蔽交易的加密保证与透明地址中ZEC的数量无关。

您可以将其视为两个碰巧使用同一种货币的独立账簿；一个账簿上的活动不会影响另一个账簿的隐私属性。

透明选项之所以存在，是因为它能带来真正的价值。交易所可以使用透明地址进行充值和提现，既满足合规要求，又能继续上线ZEC。这使得需要可审计性的用户可以选择它，也使得需要透明度的应用可以基于它进行开发。

可选的透明功能并不会损害隐私保护，反而会提升 Zcash 的普及度，而这正是默认完全私密的区块链所缺乏的。门罗币 (Monero) 已被各大交易所下架，而 Zcash 仍保留在 Coinbase 和 Gemini 等交易所，便是最好的例证。

#### 8.4 “Zcash 使用可信设置” <a href="#id-84-zcash-uses-a-trusted-setup" id="id-84-zcash-uses-a-trusted-setup"></a>

这种误解一直未能与时俱进，它曾经是正确的，但现在已经过时了。

Sprout 和 Sapling 需要可信的设置仪式，参与者在仪式中生成加密参数并销毁用于创建这些参数的秘密值。如果有人掌握了这些秘密，他们就可以伪造证明并铸造假 ZEC。

如上所述，这些仪式十分繁琐，涉及多名参与者，机器之间采用物理隔离，甚至事后还会销毁硬件。尽管采取了这些严密的预防措施，信任模型仍然引发了一些疑虑。

Orchard 通过使用 Halo 2 解决了这个问题。Halo 2 是一个无需可信设置的验证系统。整个过程没有繁琐的仪式，没有产生有害废物，也不存在机密信息泄露的风险。现在，所有参数都来自公开且可验证的数据。

Zcash 的屏蔽池现在就像比特币一样无需信任，其安全性由密码学保证，而不是依靠对仪式参与者的信任。

#### 8.5 “曾有一座矿” <a href="#id-85-there-was-a-premine" id="id-85-there-was-a-premine"></a>

这种误解从根本上就是错误的。在创世区块之前根本不存在任何加密货币，也没有任何预挖矿。

这种误解源于创始人奖励机制。在 Zcash 诞生的头四年里，20% 的区块奖励分配给了创始人、投资者、员工和 Zcash 基金会。然而，这并非预挖矿，而仅仅是持续发行的一部分，通过挖矿产生，就像其他所有加密货币一样。

这种区别至关重要。预挖矿会在其他人参与之前创建代币，而创始人奖励则以与矿工奖励相同的速度创建代币，但分配方式不同。矿工获得每个区块80%的代币，创始人获得剩余的20%，重要的是，两者都来自相同的发行计划。

创始人奖励的条款在推出前已完全公开，白皮书和网站都解释了其原因和流程。因此，2016 年挖矿或购买 ZEC 的任何人都清楚其分配方式，不存在任何隐藏的分配、秘密储备或凭空出现的代币。

创始人奖励在 2020 年 11 月第一次减半后就结束了，当时，每个获奖者都收到了公开承诺的奖励，没有多余。

#### 8.6 “开发者获得20%的挖矿奖励” <a href="#id-86-devs-get-20-of-mining-rewards" id="id-86-devs-get-20-of-mining-rewards"></a>

这种误解将两个项目及其各自的受益者混为一谈。

创始人奖励计划从 2016 年持续到 2020 年，将 20% 的区块奖励分配给创始人、早期投资者、员工和 Zcash 基金会，并在第一次减半后结束。因此，自 2020 年以来，创始人未再获得协议奖励。

开发者基金取代了创始人奖励，运行时间为 2020 年至 2024 年。开发者基金也分配 20% 的区块奖励，但分配给不同的对象。ECC 获得 7% 用于协议开发，Zcash 基金会获得 5% 用于基础设施和赠款，而由独立社区管理的社区赠款则获得 8%。

与一些误解相反，开发者基金并非用于个人敛财。相反，它资助那些雇佣开发者、维护基础设施以及向生态系统项目提供资助的组织。该基金用于支持 Zcash 的持续改进。

另一种选择是比特币模式，它依赖捐赠和企业赞助——这种方式也有其自身的优缺点。Zcash 则采用了协议层面的资金支持来促进可持续发展，近九年的持续升级表明，这一选择是正确的。

#### 8.7 “Zcash基金会控制着Zcash” <a href="#id-87-the-zcash-foundation-controls-zcash" id="id-87-the-zcash-foundation-controls-zcash"></a>

这种误解未能理解Zcash并非由任何单一实体控制。

事实上，有四个独立的组织为该协议做出了贡献。Electric Coin Company (ECC) 构建了参考实现和 Zashi 钱包。Zcash 基金会维护着独立的节点实现 Zebra，并负责管理资助项目。Shielded Labs 在瑞士开展研究。由 Sean Bowe 领导的 Tachyon 团队则负责构建可扩展性基础设施。

这些组织在不同的司法管辖区运作，拥有不同的资金来源和不同的使命。尽管它们在协议制定方面进行合作，但在一些问题上可能存在分歧，而且它们并不隶属于同一权威机构。

这些组织的分离是经过深思熟虑的。万一其中一个组织受到压力、被俘或遭到入侵，其他组织仍能继续运作并维护系统。该协议不依赖于任何单一团队，两个独立的节点实现意味着不存在单一的权威代码库。

Zcash 的治理比大多数加密货币项目更加去中心化。可以说，它比比特币更加去中心化，因为比特币由单一的实现机制主导，少数维护者控制着哪些代码会被合并。

#### 8.8 “摩萨德是Zcash的幕后黑手” <a href="#id-88-the-mossad-is-behind-zcash" id="id-88-the-mossad-is-behind-zcash"></a>

这种误解纯属阴谋论，没有任何证据支持它。

这种阴谋论要么指向某些创始人与以色列有关联，要么指向学术密码学家参与了该项目。按照这种逻辑，任何部分由与某个国家有联系的人开发的技术，都受该国情报机构控制。

Zcash 是开源软件，每一行代码都公开透明，可审计；它的密码学原理基于已发表的数学模型，经过全球研究人员的同行评审和严格审查。如果存在后门，它会在代码和证明中暴露出来。

此外，四个独立组织（分别位于多个国家）也为该协议做出了贡献。该社区成员包括来自各大洲的开发者、研究人员和用户。仅仅因为早期贡献者中有人出身低微，就认为某个情报机构控制着一个全球分布式的开源项目，这种想法是完全不合逻辑的。

同样的阴谋论思维也可以用来攻击任何技术。Signal 的部分开发资金来自美国政府，这是否意味着中央情报局是 Signal 的幕后黑手？Linux 的贡献者来自各大政府和企业，这是否意味着多个政府都参与了 Linux 的开发？

代码是开源的，数学推导也是公开的，这两点都否定了阴谋论。

#### 8.9 “犯罪分子使用门罗币是有原因的” <a href="#id-89-criminals-use-monero-for-a-reason" id="id-89-criminals-use-monero-for-a-reason"></a>

这种误解认为，犯罪分子必然会找到最强大的隐私技术来掩盖他们的犯罪行为，但这高估了犯罪分子的能力。

犯罪分子并非密码学家。他们不会评估椭圆曲线的实现方式，也不会比较匿名集构造。相反，他们会使用那些他们熟悉且在各自圈子里已经享有盛誉的技术。

门罗币以“犯罪币”的形象打造品牌，因此吸引了犯罪分子。这表明，门罗币的品牌与犯罪分子使用门罗币之间存在强化关系，而非门罗币的技术优势。

门罗币 (Monero) 和 Zcash 的隐私能力对比显示，Zcash 更胜一筹。门罗币将交易隐藏在 16 个诱饵中，而 Zcash 则将交易信息隐藏在数百万条其他信息中。门罗币的诱饵可以通过链分析逐步消除，而 Zcash 的加密不可区分性使得这种链分析解密成为不可能。鉴于执法部门已经成功追踪到门罗币的交易（如上文提到的日本案例所示），出于隐私考虑，门罗币不可能成为犯罪分子的首选。

犯罪分子在作案过程中也会使用现金、预付费电话，甚至普通电子邮件，但没有人会认为这些手段是因为它们最安全。相反，它们之所以被使用，是因为它们最容易获取，也最为人所熟知。

犯罪分子的选择表明，他们的决策是基于市场营销和网络效应，而不是基于密码强度的理性决策。

#### 8.10 “门罗币更具隐私性，因为所有交易都是私密的” <a href="#id-810-monero-is-more-private-because-all-transactions-are-private" id="id-810-monero-is-more-private-because-all-transactions-are-private"></a>

这种误解认为，门罗币的强制隐私机制意味着它比Zcash的可选隐私模型更安全。这种混淆源于未能区分设计默认设置和加密强度。

如上所述，Zcash 默认也是私密的，因为现代钱包都强制执行加密保护。默认路径是完全加密的。

即使 Monero 和 Zcash 的默认路径不同，这种区别也不会决定它们的隐私优势。

机制比环境更重要。

门罗币的机制是：使用 16 个诱饵进行环签名，将您的交易隐藏在 16 个可能的发送者之中。随着链分析的进行，诱饵会逐渐被消除，匿名集也会随之缩小，交易关联最终会被追踪。

Zcash 的机制：基于数百万张钞票组成的默克尔树进行零知识证明。你的交易可能花费了其中的任何一张钞票，而且无法通过排除法追踪其来源。钞票集合只会不断增长，并且这种加密上的不可区分性是永久存在的。

默认所有门都使用弱锁，并不比默认重要门使用强锁，并允许为其他门添加锁更优。强制性的弱隐私保护就是弱隐私保护，可选的强隐私保护就是强隐私保护。

正确的问题不在于隐私是否是默认设置，而在于隐私保护能否经受住对抗性分析。Zcash 的隐私保护经得起考验，而 Monero 的隐私保护则经不起考验。

<figure><img src="https://maxdesalle.com/zcash-team.jpg" alt=""><figcaption><p>Zcash 早期的团队成员包括 Zcash 的联合创始人 Zooko Wilcox-O'Hearn，以及当时 Zcash 团队的初级开发人员 Jay Graber，后者后来成为 Bluesky 的首席执行官。</p></figcaption></figure>

### 9. 前路漫漫 <a href="#id-9-road-ahead" id="id-9-road-ahead"></a>

#### 9.1 超光速粒子计划 <a href="#id-91-project-tachyon" id="id-91-project-tachyon"></a>

Tachyon 解决了 Zcash 的三大扩展瓶颈：防止双花攻击、区块链扫描和交易规模。其中，防止双花攻击最为棘手，而 Tachyon 的解决方案也正是其真正突破之处，而非仅仅是又一次渐进式的优化。

**无效化问题**

Zcash 通过无效符来防止双重支付——当你花费一张票据时，你会显示一个无效符：一个看似随机的字符串，它充当撤销令牌。无效符不能与它撤销的票据关联，但如果你试图两次花费同一张票据，你显示的无效符相同，网络就会识别并拒绝重复的交易。

无效化符问题在于，每个验证节点都必须永久存储所有已披露的无效化符。删除旧的无效化符是不安全的，因为有人可能会决定重新使用旧的无效化符。假设每秒处理一百笔交易，那么每天就会产生大约 1 GB 的状态增长。如果你不了解区块链，那么与大多数区块链（包括像 Solana 这样的高吞吐量链）相比，这是一个极其庞大的数字。

**为什么简单的解决方案会失败**

密码学界多年来一直知道递归证明可以解决这个问题。递归证明允许用户证明自己没有双花交易，而不是让网络跟踪无效符。将证明附加到交易中，验证者验证证明后，会清除旧的无效符。

细节决定成败。

* **方法一：**&#x5C06;完整的区块链历史记录下载到您的钱包，并在本地构建证明。这种方法在密码学上可行，但在实际应用中却行不通，因为您的钱包需要承担所有其他用户每笔交易的带宽和计算成本，而手机无法处理如此庞大的交易量。
* **方法二：**&#x6DFB;加一个中间服务。将你的交易发送到该服务，让它使用完整的链历史构建证明，然后广播该证明。这种方法可行，但会引入巨大的延迟。该服务必须为每笔交易处理整个链，并且需要你信任该服务来处理你的交易数据。
* **方法三：**&#x63D0;前将无效化凭证发送给服务，收到验证结果后，再将这些验证结果附加到交易中并进行广播。这种方法看似巧妙，但却存在致命缺陷：服务能够观察到你准备花费哪些无效化凭证，从而将你的交易关联起来，最终将你的优先权泄露给中间方。

**无意识同步**

Tachyon 的解决方案是：一项服务，它通过执行计算来证明你没有双重支付，但不会查看最终交易的具体内容，也不会知道你使用了哪些无效化符。这项服务无法区分你的交易和其他任何人的交易。

从技术上讲，这被定义为一种“无感知”服务。该服务并不知道它代表您处理的实际数据，因此您可以在不信任该服务的情况下获得计算帮助。

其结果是验证器不会存储完整的无效化历史记录。因此，用户无需承担随网络总活动量而增加的成本，Zcash 的核心隐私属性——账本不可区分性——也得以保持完整。

**其他瓶颈**

区块链扫描，即识别哪些交易属于您的过程，是通过协议设计变更而非新的加密技术来解决的。目前对每笔交易进行试解密的要求将被更高效的支付协议所取代。

交易规模和验证时间均采用相同的递归证明技术。交易规模和验证时间的边际值降至与比特币相近的水平。因此，完全私密的 Zcash 交易最终在规模和速度上与透明的比特币交易大致相同。

**这能带来什么？**

Tachyon 实现后，Zcash 的扩展性限制将与其他区块链一样——带宽和延迟。曾经导致隐私成本高昂的加密开销将不复存在，甚至手机也能在无需处理完整链的情况下进行私密交易。节点无需存储数 GB 的无效状态即可完成验证。

长期以来，人们一直认为隐私和规模之间的权衡是加密货币的基本要素，但事实证明，这是一个工程问题，可以通过加密技术来解决。

#### 9.2 网络可持续性机制（NSM） <a href="#id-92-network-sustainability-mechanism-nsm" id="id-92-network-sustainability-mechanism-nsm"></a>

比特币面临一个迫在眉睫的问题：随着区块奖励减半直至接近于零，交易费用必须补偿矿工维护网络安全所付出的努力。交易费用是否足以弥补这一损失仍是未知数，但诸如尾部增发等预期方案将会突破 2100 万枚的上限。

Zcash 也存在这个问题，但[网络可持续性机制](https://shieldedlabs.net/nsm/)在不突破上限的情况下解决了这个问题。

**机制**

NSM允许销毁流通中的ZEC，并将其作为未来的区块奖励重新发行。销毁1个ZEC将导致未来四年内额外发行0.5个ZEC，再过四年将额外发行0.25个ZEC，以此类推。发行遵循指数衰减模型，与现有的四年减半机制近似。

短期内，这将导致流通供应量减少，稀缺性增加。长期来看，随着发行曲线的推进，将有更多 ZEC 可用于区块奖励，从而在不超过 2100 万上限的情况下维持矿工的激励机制。

**三个 ZIP**

[ZIP 233](https://zips.z.cash/zip-0233)引入了自愿销毁机制，这意味着用户可以直接向 Zcash 网络捐赠，而不是捐赠给组织或个人。钱包可以提供在交易时销毁 ZEC 的选项。可验证的销毁机制能够支持代币门控社区或身份徽章，以证明用户对网络可持续发展的贡献。

[ZIP 234](https://zips.z.cash/zip-0234)平滑了发行曲线，使发行量不再出现突然减半，而是持续衰减。这为重新发行销毁的代币提供了一种可预测的机制，避免了突然的供应冲击。

[ZIP 235](https://zips.z.cash/zip-0235)会消耗 60% 的交易手续费。目前，这相当于每年大约 210 ZEC，数额微不足道。关键在于趁着手续费低廉、矿工没有经济动机反对时建立起这一机制。未来的手续费结构仍将由社区在 NSM 正式上线后决定。

**未来应用**

NSM 为社区未来将遇到的各种用例创建基础设施：

* **ZSA 费用：**&#x94F8;造、交易或桥接 Zcash Shielded Assets 可能会销毁一部分 ZSA 以补偿 ZEC 持有者。
* **传统支持费用：**&#x5C06;资金存储在旧资金池中的用户可能需要支付费用，从而激励他们迁移到更新、更安全的资金池。
* **隐私激励费用：**&#x900F;明地址的使用可能会产生费用，以补偿匿名性降低带来的影响。
* **动态费用：** Shielded Labs 正在开发一种[基于市场的收费系统](https://fees.shieldedinfra.net/)，以取代目前固定的每次操作 10,000 zatoshi 费用。该机制根据前 50 个区块的中位数计算边际费用，并四舍五入到 10 的幂次方以保护隐私，同时在拥堵期间提供 10 倍优先通道。

**为什么是现在？**

目前交易费用极低，因此现在实施销毁机制可以避免以太坊在 EIP-1559 中遇到的政治难题——当时矿工有强烈的动机反对费用销毁。如果现在实施，等到 Zcash 的交易费用变得显著时，这一先例就已存在。

NSM 可以延续 Zcash 在比特币设计基础上进行改进的传统。隐私保护和开发者基金已经使 Zcash 脱颖而出，而此次升级将增加第三个差异化优势：一种比特币所不具备的长期网络可持续性机制。

#### 9.3 量子电阻 <a href="#id-93-quantum-resistance" id="id-93-quantum-resistance"></a>

Zcash 与量子计算的关系比大多数其他加密货币更为微妙。由于项目自创立之初就做出了精心的设计选择，该协议在常见场景下已经提供了显著的后量子时代隐私保护。

**已受保护的内容**

量子攻击无法破坏链上匿名性。Zcash 的无效化机制（防止双重支付的机制）使用基于对称加密的密钥伪随机函数，这些基本原理能够抵御量子攻击。因此，承诺方案完全隐藏，对称加密使用的密钥长度也专为后量子安全而设计。

这与其他隐私加密货币形成鲜明对比。门罗币的密钥图像（相当于无效化器）对量子攻击者而言是透明的，交易图也会被暴露。Zcash 的架构完全避免了这种漏洞。

**两大威胁**

量子计算机对隐私和可靠性构成威胁。

隐私问题主要集中在“先收集后解密”式的攻击上。攻击者可以今天收集加密的交易数据，然后在量子计算机普及后再进行解密。这主要影响带内秘密分发，即向接收方传输交易详情的机制。Tachyon 的设计完全消除了带内秘密分发，从而抵御了这种未来的威胁。

可靠性问题主要集中在椭圆曲线密码学上，这种密码学可能被量子计算机破解。虽然这会导致伪造或盗窃，但不会损害隐私。因此，隐私泄露和可靠性漏洞的紧迫性有所不同：隐私泄露具有追溯性（过去的交易会变得容易泄露），而可靠性漏洞通常不具有追溯性（只有当量子计算机出现时才能做出反应）。

**量子可恢复性**

ECC已在Orchard钱包中开发出“量子可恢复性”技术。在即将到来的钱包更新后，假设量子计算机出现，用户将能够通过一种特殊机制找回资金。该机制可以防止量子攻击者窃取资金，同时也能保护用户隐私。

钱包集成的计划时间表是 2026 年发布，因此，那些保护好自己的加密货币并等待这些改进的用户将会受到保护。

**今日最佳实践**

保护您的加密货币。受保护资金池的设计本身就具备强大的量子抗性，能够有效保障链上隐私。尽可能将地址视为秘密信息。最终防线依然是旋转闸门：即使发生伪造，当资金离开受保护资金池时，最终也会被检测到。

Zcash 的密码学家将始终走在技术发展的前沿，因为该协议的模块化设计隔离了易受攻击的原语，使得未来的升级无需彻底改造即可实现。

<figure><img src="https://maxdesalle.com/tank-man.jpg" alt=""><figcaption><p>1989年6月5日，在北京天安门广场附近，“坦克人”站在一列坦克前。</p></figcaption></figure>

### 10. 结论 <a href="#id-10-conclusion" id="id-10-conclusion"></a>

总之，本文开篇提出了一个简单的观点：除非你使用现金，否则你的每一笔消费都会被追踪并无限期地保存。比特币本可以解决这个问题，但它并没有。原本旨在将我们从金融监控中解放出来的区块链，最终却成为了有史以来最全面的监控工具。

Zcash 走了一条不同的道路。它没有默认透明，而是先解决了最棘手的问题：如何在不查看交易的情况下验证交易？

解决方案需要零知识证明、隐藏金额的承诺、无需关联交易即可防止双重支付的无效器，以及彻底打破交易图的票据模型。随后经历了九年的协议演进：Sprout 证明了隐私的可行性，Sapling 使隐私成为可能，而现在 Orchard 则实现了无需信任的隐私保护。

这种演进的结果是账本的不可区分性。两笔经过加密保护的交易无法区分，无论是观察者、验证者，还是拥有无限资源的国家都无法做到。数据并非只是被模糊处理或与诱饵混合，而是被加密了。网络所看到的数据在数学上与随机噪声无法区分。这才是真正的瑞士金库。

前路依然充满挑战。超光速粒子消除了限制规模的瓶颈。NSM 创造了可持续的经济模式。量子抗性是一个可以解决的问题，相关工作已经在进行中。基础已经奠定。密码学有效。隐私得到切实保障。

摆在我们面前的是两种未来：一种是每一笔交易都由掌权者可见、可控且可逆转；另一种是金钱像思想一样私密。

Zcash 让资金保持免费。
