CoinSwap 是什么?和 CoinJoin 一起被发明,却走了另一条隐私路 图 1
CoinSwap 是什么?和 CoinJoin 一起被发明,却走了另一条隐私路 · 图 1

同一年、同一个人的两个点子

2013 年,Greg Maxwell 在比特币论坛先后发布 CoinJoin 与 CoinSwap。十年后回看,CoinJoin 早已被 Sparrow、Whirlpool 等产品做成熟,CoinSwap 却几乎没被公众听说——不是想法输了,是工程难。两者目标一致:打断“这笔钱从 A 流到 B”的链上推断。手段截然不同:CoinJoin 让多方把输入输出拼进同一笔交易,用“谁的钱混在一起”稀释关联;CoinSwap 让 A 与 B 的资金各自走完全不相邻的两条路,链上根本不存在连接它们的那笔交易。

它怎么做到“没有交集”

设想 Alice 想让自己的资金换上一段全新历史,Bob 愿意把自己手头的币付给 Alice 指定的收款人,双方互不信任。协议先各建一份 2-of-2 多重签名担保交易(escrow),并用哈希锁绑定一个秘密:任何一方若提前反悔,另一方可以凭揭示秘密取回自己那份。正常路径是:秘密被按顺序揭示后,两侧担保相继打开。链上分析者看到的只是两条普通交易链——Alice 的钱进了一个双人合约再散开,Bob 的钱付给了目标地址,中间没有一条边把 Alice 和 Bob 连起来。这一构造与跨链原子交换同属哈希时间锁家族——比特币维基对 CoinSwap 的标准描述正是“基于原子交换思想、用合约消除任何一方 cheating 可能的非托管换币”。它确实像把两链原子交换改成了同币内部的接力。

为什么它比看起来难得多

第一,时间锁逼着对手方“要么守信要么丢钱”,但超时窗口里存在抢跑与费用博弈,参数调错会被人白嫖手续费。第二,实现要让担保合约在链上伪装成普通支付地址——原始方案用 2-of-2 multisig,一眼能认出来;2020 年 Chris Belcher 在bitcoin-dev mailing list 的设计稿提出用两方 ECDSA 把合约做成与单人地址无异的形态,才把匿名集做大。第三,撮合与超时管理的工程量巨大,需要像路由器一样长期监听,而 CoinJoin 可以“攒一批做一笔”。直到 2022 年前后才有社区实现走出原型阶段,普及度远不如前者。

与“混币”在叙事上的分野

外界常把 CoinSwap 与混币服务混谈,监管视角下差别值得注意:CoinSwap 是用户自己执行的点对点协议,没有把币交给一个中心服务停留;CoinJoin 介于两者之间——交易是公开合拼的,协调者是否可信各有方案。协议本身都不提供“洗白”功能,也不会改变资金在链上的可追溯历史(它改变的是“推断能力”)。任何把隐私工具当成逃避执法工具的用法,都在多数法域有明确的刑事风险。

一笔账:省下的隐私与多付的成本

CoinSwap 的隐私增益可以精确到结构:CoinJoin 完成后,分析者至少要在同笔交易的所有输入输出组合里猜配对,匿名集是“同批次参与者数量”;CoinSwap 完成后,链上没有任何可分析的公共节点,匿名集理论上扩到“全链所有看起来像普通转账的行为”。但成本同样可以列清单:至少两笔链上交易的手续费、双方必须各自在线一段超时窗口、对手方撮合等待,以及一旦超时路径被触发时白烧的定金手续费。这也是它没能像 CoinJoin 那样产品化的根本原因——隐私增益是渐近的,工程量与使用摩擦却是跳档的。

快速问答

它要付多少费? 相当于多笔链上交易的费用叠加,通常高于普通支付与 CoinJoin。对手方跑了怎么办? 超时路径让各方取回自己的担保,最坏损失是时间与链上手续费。和闪电 Submarine Swap 什么关系? 同为哈希时间锁家族,Submarine 换的是闪电与链上两种形态,CoinSwap 换的是同币两串历史。

常见误区

一是把 CoinSwap 与“交易所换币”挂钩,它完全不经过交易所。二是把“无交集”读成“绝对匿名”——时间相关性、对手方行为模式仍会被高级分析利用。三是说“CoinSwap 失败了”,更准确的说法是它以提案与原型形态活着,普及让位给了更简单的邻居。

风险提示:本文讲协议机制,不构成任何投资建议;隐私工具的合用与否受当地法规约束。