术语表 /隐私与安全
币控
- 币控是什么?
- 币控是钱包的一项功能,可让您准确选择在一笔交易中花费哪些已有的币,而不是由钱包代为选择。
账户余额并不是一个单一的数字,而是一堆彼此独立的“碎片”,每一块都是此前某笔付款转入您钱包后留下的,而每次支出都会整块地消耗这些碎片。向一笔交易中再多加一块碎片,大约要多付68虚拟字节的手续费,并且会让任何查看区块链的人知道这两块碎片属于同一个所有者。币控(coin control)就是让您把这项决定权拿回自己手中的功能。
运作方式
每个钱包本来就会替您选择币。当您输入金额并点击发送时,算法会在您未花费的输出中寻找能够覆盖该金额的组合。Bitcoin Core 自版本0.17.0(2018年)起使用 Murch 的分支定界求解器,它会寻找与目标金额足够接近的一组输入,从而完全省去找零输出。它优化的是手续费,并不知道您希望不去动哪些币。
启用币控后,这种猜测就被一份清单取代。在 Bitcoin Core 中,您在设置里勾选 "Enable coin control features",发送界面就会多出一个输入选择器;该功能自版本0.9.0(2014年)起已包含在图形界面钱包中。Sparrow、Electrum、Wasabi 和 BlueWallet 都以 UTXO 标签页的形式提供同样的功能,每一枚币都会显示其金额、确认数以及您为它设置的标签。
它带来三项控制。您可以手动选择输入,使交易只花费您勾选的币。您可以冻结某枚币,使自动选择永久无法看到它。您还可以在币到账时为其添加标签,这一步是人们常常跳过、事后又后悔的,因为一个存放了六个月却没有标签的输出,只是一个没有任何来历的数字。
选择输入的同时也决定了找零。花费一枚250,000聪的币来支付200,000,会产生一枚新币,其价值为剩余金额减去手续费,并且继承您刚刚花掉的所有币的历史。
购买比特币时为何重要
从交易所提币,会在某个合规数据库中把您的身份与一个地址写在一起。本站收录的每一家大型平台都会先验证身份,因此到达您钱包的币,在任何进行链上分析的人看来,一开始就带有“属于您”的标记。币控就是阻止这一标记扩散的方法。如果您日后在其他地方获得比特币,例如通过点对点交易或作为工作报酬,让这些币不与您的交易所提币出现在同一笔交易中,就是两个相互独立的故事与一个故事之间的区别。
第二个原因是成本基础。定期定额投资会产生大量小额币:River 对定期购买不收取任何费用,而每周提币的习惯会让您每年留下52个独立的输出,每个输出的买入价格各不相同。大多数国家的税收规则允许您指明处置的是哪些单位,而币控加上每枚到账币上带日期的标签,能使这种指明做到可以证明,而不只是理论上成立。卖出2,000美元的那枚币而不是200美元的那枚币,会使税单产生实际差别。
第三,它保护您向交易对手披露的信息。您的付款对象可以看到您使用的每一个输入,从而知道您所花费的那些币的总价值。用一个2 BTC 的储蓄输出来支付一张40美元的账单,会让收款方知道您持有多少。用一枚专门的小额币来支付,则不会透露任何信息。
为一笔200,000聪的付款挑选输入
假设您的钱包里有三枚币:来自 Swan 购买的40,000聪,从 Kraken 提出的250,000聪,以及您多年前设置的一个硬件钱包中的5,000,000聪长期储蓄。您需要支付某人200,000聪,而内存池很空闲,费率为8 sat/vB。
如果放任不管,钱包可能会把40,000的那枚币和250,000的那枚币一起选中,因为这种组合浪费最少。结果是2个输入和2个输出,约209虚拟字节,手续费约1,672聪,并且永久公开地表明 Swan 的那枚币和 Kraken 的那枚币属于同一个人。
使用币控,您只勾选250,000聪的那枚币。这是1个输入和2个输出,约141虚拟字节,手续费约1,128聪,找零48,872聪。您少付了544聪,并且只暴露了一个来源而不是两个。5,000,000聪的储蓄币则保持冻结,对算法不可见,这正是应有的状态。
币控 vs UTXO 合并
币控是方向盘,合并只是其中一个特定的目的地。合并是指有意把许多币花费到一个输出中,以降低未来的手续费,这是您主动选择的一次归并。币控则是做出选择的一般能力,而大多数时候您用它来做相反的事,即让算法本来会合并的币保持分开。
币控 vs CoinJoin
币控是一种记账纪律,除了注意力之外不需要任何成本。它能防止产生新的关联,但无法抹去链上已经存在的关联。CoinJoin 是与陌生人共同参与的、主动协调的交易,它为历史已经公开的币增加模糊性。两者互为补充,而币控是首先要做的,因为一次随意的输入选择,就能在一笔支出中使 CoinJoin 的效果化为乌有。