Coin Control 让你自行选择一笔付款要使用哪些资金。比特币余额由此前交易中尚未花费的各个输出组成,这些输出称为 UTXO。钱包通常会自动选择它们;使用 Coin Control,你可以接手这个决定。
Alice 收到了 120 000 sat 的工作报酬,又收到了 80 000 sat 的礼物。sat 是比特币的最小单位。钱包显示总额 200 000 sat,但在这个例子中,余额由两个独立的 UTXO 组成。付款时,她不必同时花掉两个。她可以打开 Coin Control 列表,只选择工作报酬。给它们标上“工作”和“礼物”便于识别;这些是钱包里的个人备注,并非资金来源证明。如果没有特别的选择理由,也可以让钱包自动处理。 [3]
Alice 选择价值 120 000 sat 的 UTXO,准备发送 100 000 sat。选中的输出会被整体花费,就像拿一张面额较大的纸币付款后收回找零。假设最终交易的虚拟大小为 200 vB,费率为 5 sat/vB。vB 是计算手续费时使用的大小单位,因此本例手续费为 1 000 sat。收款人得到 100 000 sat,余下的 19 000 sat 通过一个新的输出回到 Alice 的钱包,这就是 change,即找零。另一个 80 000 sat 的 UTXO 保持不变。这里预先设定了交易大小,并由发送方承担手续费;并不是所有付款都具有这个大小。 [4]
每个被花费的 UTXO 都会成为新交易的一个输入,并增加交易数据。在输入类型和费率相同的情况下,使用十笔小额收入付款,通常比使用一笔大额收入更贵。手续费不是转账金额的固定百分比,而是由交易大小和所选费率计算。把多个小额 UTXO 合成一个属于自己的输出,称为归集。低费率时归集可能简化日后的付款并降低日后的费用,但归集本身也需要手续费,还会公开关联所用资金。 [1]
如果 Alice 在同一笔交易中同时使用工作报酬和礼物,观察区块链的人可能推测两者由同一个人控制。区块链是公开的交易记录。别人看不到她的私人标签,却能看到输入被放在了一起。分别选择资金可以避免这一特定关联,但并不意味着匿名:其他联系可能早已为人所知。多个输入同时出现,也不能确凿证明它们只有一个所有者。例如,Payjoin 允许付款方和收款方共同为一笔付款提供输入。 [2]
Alice 的 19 000 sat 不是稍后通过另一笔交易退回的。change 输出就在这笔付款中生成,并由她的钱包控制。这部分余额也有历史:它来自工作报酬。如果以后把它和礼物一起花费,之前避免的关联仍可能出现。因此,也要留意找零输出,不要把新地址当作隐私上的全新起点。找零较多说明选中资金的价值明显高于付款额与手续费之和,本身不代表选错了资金。 [2]
签名前,Alice 应检查实际使用的输入、收款人的完整地址、付款金额、自己的找零和总手续费。签名是对一笔具体交易的授权;勾选列表中的几个项目,还不等于付款已经完成。选中资金必须足以支付金额和手续费。如果花费尚未确认的资金,新的付款就依赖于带来这笔资金的交易。若前一笔交易始终没有进入区块链,花费其输出的新付款也无法获得确认。手动选择应帮助你理解付款,而不是鼓励你修改不了解后果的设置。 [4]
这取决于软件及其版本。Bitcoin Core v29.0 的 fundrawtransaction 默认启用 add_inputs:如果预先指定的输入不够,就可以补充其他输入。若要只花费选中的 UTXO,必须检查该选项和最终交易草案。listunspent 可以查看可用输出。txid 标识此前的交易,vout 标识该交易中输出的位置;两者一起确定一个 UTXO。solvable 表示程序知道可以怎样花费它,并不表示程序持有所需私钥。构建交易本身不会补上缺失的签名。 [4] [3]
当你清楚为什么要分开某些收入,或想理解花费它们的成本时,Coin Control 很有帮助。它不能替代安全备份,不能改写资金历史,也不能抹去已经公开的联系。无需每次付款都使用它。重要的是判断自动选择何时符合需要、何时需要自己决定,然后检查生成的交易是否真正符合你的意图。 [3] [2]
要获得更完整的理解,请将本词条与以下词条结合阅读: UTXO, 钱包, Change Address, Bitcoin 隐私. 反向关联还来自: Change Address, CoinJoin, Bitcoin 隐私, Coin Selection.