SolMask 背后的数学使得一笔提款在加密学上与其存款无法关联。但数学并不是观察者唯一拥有的信号。最简单、最廉价、也最强大的去匿名化工具是时钟。
如果您在 14:02:11 存入 5 SOL,而某人在 14:02:23 提取 5 SOL,外部分析师无需破解任何加密。他只需注意到您是这十二秒里唯一的存款人,而那笔唯一的提款通过排除法就是您的。ZK 证明完美地完成了它的工作;只是您一个人站在了舞台上。
隐私延迟,就是我们用来确保您不至于孤身一人的工具。
延迟究竟做了什么
存款时,您选择一个解锁 slot —— 一个未来的 Solana slot 编号,在此之前您的资金无法被提取。提款电路直接强制执行这一点。circuits/withdraw.circom 中对应的那一行大致意为 unlock_slot ≤ current_slot。如果您(或任何持有您 note 的人)试图在解锁 slot 之前生成证明,约束就会失败,不会有任何可提交的有效证明存在。
这是在 ZK 证明本身内部强制的,而不是依赖一个协议可以随时关闭的独立计时器。链上根本不知道您的解锁 slot 是多少 —— 它存在于您的承诺内部 —— 但链上知道,如果不遵守时间规则,证明根本无法存在。
SolMask 默认的隐私延迟是一小时,在主网上大约相当于 9,000 个 slot。界面提供更短和更长的选项(10 分钟、6 小时、1 天、3 天、1 周)。越长越私密。我们推荐一小时作为默认值,因为在我们的判断中,对大多数资产和金额而言,超过这一点之后人群规模的边际收益开始变得平缓。
"更多时间"为您换来什么
匿名集合的大小 —— 即您的提款可能合理对应的存款数量 —— 随您所等待的时间窗口增长。如果在您存款后的一小时内另外有五人存入 SOL,您的提款就是六分之一。如果是五十人,那就是五十一分之一。
这种关系并不完美线性。匿名集合的增长取决于池子的流量,会因资产、时段和周次而不同。冷清的池子增长缓慢。USDC 池在一小时内累积的存款会稳定地多于一个冷门 SPL 代币的池子,所以同样的延迟在 USDC 中买到的隐私比在长尾资产中更多。
SolMask 界面会在您确定延迟之前,向您展示实时的匿名集合估计。如果估计看起来薄弱 —— 比如所选窗口里合理存款少于十笔 —— 正确的做法是选择更长的延迟,或者等到流量更健康时再存款。
这种权衡是真实的
隐私延迟是一种摩擦。您锁定了无法访问的资金。对于工资发放或国库运营来说通常没问题 —— 这类操作本就是提前安排好的。对于紧急的个人转账,无论匿名集合的数学有多漂亮,一周的延迟都没有帮助。
正确的思考方式是:选择您能忍受的最长延迟。如果您可以等一天,就等一天。如果您真的需要在一小时内拿到资金,那就选一小时的延迟,并接受匿名集合会比等得更久时更小。协议无法强迫您耐心;它只能强制您在存款时所选定的最低值。
我们为什么不把最低值设得更长
我们曾考虑通过政策强制 24 小时最低延迟。我们最终没有这样做,因为隐私即摩擦往往会把用户推向更糟的替代方案 —— 跨链桥、OTC 桌台,或者干脆放弃。一小时的最低值足够短,可以应对大多数日常用例,也足够长,让链上在您存款之后已经流过数百万笔交易、几十个区块,并且(在健康池中)出现了几十笔与您无关的存款。
如果您希望获得比一小时更强的隐私,旋钮就在您手里。界面会展示真实的匿名集合数字,让您根据现实而非迷信来选择延迟。
延迟无法解决什么
仅靠延迟并不构成足够的隐私。如果您的提款地址已经通过其他链上活动与您的身份关联,或者您的 RPC 提供商记录了您的 IP,或者您在社交媒体上广播了您使用了该协议 —— 没有任何延迟能救您。延迟只防御一种特定攻击:被动链上观察者的时间相关性。本板块的其他文章涵盖了其他的攻击面。