技术笔记Compliant Privacy Stablecoin

隐私稳定币要走向现实,合规必须是原生能力

compliant-privacy-stablecoin 是我设计并实现的一个项目。

这个项目最重要的地方,不是“又做了一个隐私稳定币”,而是我从一开始就没有把“隐私”和“合规”当成对立面,而是尝试把两者一起写进协议路径里。

很多隐私项目的默认叙事是:先把匿名性做强,合规以后再补。这个项目的思路正好相反。我真正想解决的问题是:

如果稳定币既想保留链上交易隐私,又想进入真实支付与监管场景,那么合规能力必须是协议原生能力,而不是事后外挂。

这个项目到底在做什么

从结构上看,它是一个基于 ZK 证明、Merkle 树、门限审计和链下客户端协作的隐私稳定币协议。

项目核心由几部分组成:

  • ShieldedPool.sol 负责隐私资金池、存款、隐私转账和提款。
  • AuditRegistry.sol 负责审计节点名录、DKG 数据上链和全局审计公钥公示。
  • joinsplit 电路负责证明“这笔交易在隐私上是成立的,在金额上是守恒的,在双花上是安全的”。
  • Rust 客户端负责本地生成 Note、构造证明、执行门限审计加解密。

如果只看这些组件,它仍然像一个典型的“隐私资产协议”。

但我认为它真正的辨识度,不在隐私部分,而在合规设计被拆成了三层,而且每一层都不是口头上的合规,而是写进了实际流程里

第一层合规:资金进入前先拦截

这个项目的第一条合规轨道,是我在存款前放进去的前置审查机制。

ShieldedPool.sol 里,合约有一个 complianceSigner。如果启用这条路径,用户存款时不仅要提交 commitment 和金额,还要提交由合规签名者签发的 ECDSA 签名。合约会验证这份签名是否匹配当前用户、当前金额和当前 commitment。

这意味着什么?

这意味着我不是把黑钱先放进池子,再寄希望于后续识别;而是在资金进入隐私池之前,就先做一轮入口控制。

这条路径有两个很现实的特点:

  1. 它符合稳定币世界里常见的 KYC/AML 直觉。
    不是所有用户都能无条件进入隐私池,至少在协议设计上,发行方或合规服务商可以做前置放行。

  2. 它把“合规结果”从链下判断,变成链上可执行条件。
    合规审查本身可能发生在链下,但链上合约不会只信口头结果,而是要求一个可验证的签名结果。

这一点很重要。因为很多项目说自己“支持合规”,实际只是说“我们可以接一个合规 API”。而这里的思路更硬:没有签名,就不能进池。

第二层合规:提款时做资金清白证明

如果说第一层是“入口拦截”,第二层就是“出口约束”。

我在 transact 路径里引入了 cleanTreeRoot,也就是所谓的“干净资金树根”。合约会检查这个树根是否在 approvedCleanRoots 白名单内,然后把它作为公共输入送进 ZK 验证。

这背后的逻辑不是简单黑名单,而是一种更接近 Proof of Innocence 的思路:

  • 总 Merkle 树记录所有 commitment;
  • 干净树只记录被认定为“合规来源”的 commitment;
  • 用户提款或交易时,不仅要证明自己的 note 存在于总树中;
  • 还要证明它存在于干净树中。

也就是说,这个项目不是只问“你有没有钱”,还要问“你这笔钱是不是来自可接受的集合”。

这和传统隐私池有一个明显差别。

传统隐私池更强调“只要证明拥有某个 note,就可以花”。
这个项目强调的是:“你不仅要证明拥有它,还要证明它属于被认可的来源集合。”

这就是它“合规”两个字真正落地的地方。它不是在 UI 上加一个免责声明,而是把合规条件变成了证明系统本身的一部分。

第三层合规:隐私不等于无法审计

这个项目里,我没有把隐私理解成“任何人永远看不到”。

我选择的路线是:默认情况下隐藏交易细节,但在满足门限授权条件时,受认可的审计节点可以联合还原交易信息。

具体做法是:

  • 用户在发起隐私交易时,会生成一把一次性对称密钥;
  • 交易明文的一部分会在电路里被这把对称密钥加密,并与证明绑定;
  • 同时,这把对称密钥又会被全局审计公钥加密;
  • 对称密钥密文和审计密文会随交易事件上链;
  • 任何单个审计节点都无法独立解密;
  • 只有满足 3-of-5 门限的审计节点联合提供解密份额,才可以还原出交易明文。

这里的设计非常关键。

它不是“给管理员一把总钥匙”,也不是“部署一个中心化后门”。

我想实现的是一种分布式可审计隐私

  • 日常情况下,用户享有隐藏金额、发送者和接收者的隐私体验;
  • 但在司法、监管或合规调查需要时,可以通过多方联合授权恢复交易上下文;
  • 单点作恶或单点泄露都不足以解开全部隐私。

对稳定币来说,这比“绝对匿名”更接近现实世界的制度要求。

因为真正的问题从来不是“能不能做匿名”,而是“能不能在合法场景中保留隐私,同时在必要时接受审计”。

这个项目最有价值的地方:把合规写进协议,而不是写进公告

如果只用一句话概括这个项目,我会说:

这个项目最重要的贡献,不是证明隐私稳定币可以做,而是证明“合规隐私稳定币”可以被拆解成一组明确的协议机制。

这组机制大致是:

  1. 前置 KYC/AML 签名,控制谁可以入池。
  2. 干净树证明,控制哪些资金可以顺利流出或被认可使用。
  3. 门限审计解密,保证隐私不是绝对黑盒。

这三层叠在一起,项目表达的就不再是“匿名支付”,而更像是:

一种面向真实支付基础设施场景的、默认隐私但可受控审计的稳定币协议。

这比传统隐私协议更接近金融基础设施,而不是单纯的密码学实验。

为什么这条路比“纯匿名池”更现实

传统隐私池的问题,不只是监管不喜欢,而是它很难与稳定币发行方、支付机构、托管机构和合规服务商形成长期兼容。

原因很简单:

  • 稳定币发行方天然要面对冻结、制裁、AML、KYC 压力;
  • 支付场景要求风险可控、责任可追踪;
  • 如果隐私协议完全拒绝任何可审计性,那么它很难成为主流稳定币基础设施的一部分。

我做这个项目,本质上是在回答一个更现实的问题:

不是“如何把稳定币变得最匿名”,而是“如何让稳定币在保有隐私的前提下,仍然能被金融体系接受”。

这是一个更难的问题,但也更有长期价值。

我认为它还有哪些现实张力

我认同这个项目的方向,但它也保留了很明显的现实张力。

1. 合规权力仍然需要治理

比如:

  • 谁来担任 complianceSigner
  • 谁来维护 approvedCleanRoots
  • 谁来定义“干净资金”?
  • 谁来决定何时启动审计?

这些问题没有因为用了 ZK 或门限密码学就自动消失。它们只是从“后台人工审批”变成了“协议参数和治理权配置”。

换句话说,项目把合规做进了协议,但合规权力本身仍然需要制度安排

2. 门限审计降低单点风险,但不等于没有中心化风险

3-of-5 比单管理员后门强很多,但它仍然是一种受控权限结构。

如果 5 个审计节点高度同质、背后利益一致,或者治理结构过于集中,那么门限只是技术上的多签,不一定天然等于治理上的分权。

3. 干净树模式适合合规叙事,但会带来新的运维复杂度

干净树不是一劳永逸的。

它需要持续更新、同步、纠错和争议处理。
一旦某个地址后来被重新认定,或某笔资金的风险标签发生变化,干净树的维护逻辑就会变成一项长期工程,而不是一次性的技术动作。

所以这类协议最终成不成立,不只看密码学,也看治理和运营能力。

为什么我觉得这个项目值得写下来

因为它把一个很常见、但经常被说空的话题,做成了具体结构:

隐私和合规不是非此即彼,关键在于你把合规放在哪一层,以及是否愿意把它变成真正可执行的协议条件。

这个项目给出的答案是:

  • 隐私放在交易表现层;
  • 合规放在资金入口、资金出口和事后审计三个环节;
  • 审计能力不是管理员单点后门,而是门限联合能力;
  • 合规不是产品说明书,而是约束、签名、证明和事件数据的一部分。

即便它距离真正可大规模上线的金融级系统还有距离,这个方向本身已经很值得重视。

至少它说明了一件事:

下一代稳定币隐私协议,重点可能不再是“怎么更像 Tornado Cash”,而是“怎么在不走向完全透明的前提下,成为可被监管和支付体系接受的资产流转基础设施”。

结语

如果把这个项目只看成一个 ZK 稳定币 Demo,会低估它。

它真正有意思的地方,是试图回答一个更长期的问题:

稳定币的隐私能力,能不能从“监管冲突点”变成“合规金融基础设施的一部分”。

我的判断是,这个问题未来会越来越重要。

因为稳定币一旦真的进入支付、清算和跨境流通场景,市场需要的就不会是“绝对透明”或“绝对匿名”这两种极端,而是:

默认保护普通用户隐私,但在制度化授权下保留审计和执法接口。

而这个项目,就是我对这条路的一次具体实现。