10 / 736TX

交易

Bitcoin Transaction

发送比特币时发生了什么:金额从哪里来,找零去了哪里,付款什么时候才算确认。

当你付款给别人,或在自己的钱包之间转移比特币时,钱包会向网络发送一条消息,这就是 Bitcoin 交易。它指定使用哪些以前收到的金额,以及新生成的金额今后可以在什么条件下花费。网络会检查你是否有权转移这些资金,以及是否花费了超过可用数额的资金。按下“发送”并不等于付款已经确认。

你有一笔尚未花费的 100 000 sat,想发送 60 000 sat。Sat 是比特币的最小单位:1 BTC 包含 100 000 000 sat。钱包可以创建一笔交易,给收款人 60 000 sat,给你找回 39 000 sat,剩下 1 000 sat 作为矿工手续费。这有点像用一张大面额纸币付款,再收回找零。原来的 100 000 sat 会全部用掉,形成两笔新金额。找零通常发到你钱包中的一个新地址,而不是付给陌生人。手续费是使用的总金额与新建总金额之差,并不是单独的输出。如果遗漏找零,手续费可能意外变得很高。 [2]

Bitcoin 记录以前交易中尚未花费的输出,简称 UTXO。你可以把它们想成钱包能够使用的一笔笔金额。新交易的输入指向一个旧输出;新输出则指定金额和下次花费的条件。钱包可以合并多笔金额,也可以把一笔付款分给多个收款人。因此,输入并不只是写着某个发送地址,而是包含前一笔交易的标识符 txid 和其中那个输出的序号。两者组成 outpoint。所指的输出必须存在且可供花费。同一个输出不能花两次,也不能在同一笔交易中通过两个输入重复计入。 [1] [2]

普通付款中,钱包用私钥生成数字签名。签名证明转移资金的权限,别人无需知道私钥也能验证它。花费条件还可能要求多个签名,或等待到某个时间。从技术上说,交易通过 scriptSig,以及适用时独立的 witness 部分,提供必要数据;节点据此检查被花费输出的条件。SIGHASH 设置决定签名保护交易的哪些部分不被更改。但即使签名有效,也不能花费不存在的资金、增加总金额,或绕过尚未满足的时间锁。 [2]

签名后,钱包会广播交易。节点检查后,可以把它放入自己的 mempool,也就是未确认交易的等候区。进入等候区还不等于写入区块。交易被纳入有效区块后才获得第一次确认,后续每增加一个区块,就多一次确认。节点转发和保留待处理交易的规则可能不同,也不等同于区块有效性规则。待处理交易可能被另一笔花费相同资金的交易替换。即使已有确认,也可能在重组时失去:此时网络接受了另一条有效的历史分支。因此,请在自己的钱包里、在正确的网络上核对金额、收款目标和确认情况,而不要仅凭别人给的截图判断到账。 [4]

钱包通常显示 txid,用于查询交易。从技术上说,它是对不含 witness 数据的交易编码进行两次 SHA-256 计算得到的。另一个标识符 wtxid 包含 witness;如果交易没有 witness,两者就相同。它们只能标识记录,本身不能证明付款已确认。手续费主要取决于交易数据大小和选择的费率,而不是发送的比特币值多少法币。费率使用虚拟大小 vsize,即交易的所谓权重除以四并向上取整。因此,合并许多小输入,可能比转移一笔较大的金额更贵。 [3]

示例 · TX

输入减去输出就是手续费

如果一笔普通交易总共使用 250 000 sat,并为收款人和找零分配了 248 200 sat,剩下的 1 800 sat 就是矿工手续费。它不会单独发到某个手续费地址。

要获得更完整的理解,请将本词条与以下词条结合阅读: UTXO, Private Key, Mempool, Transaction Fees, SegWit. 反向关联还来自: Bitcoin Whitepaper, Timechain / Blockchain, Full Node, UTXO.

01已确认的 Bitcoin 交易可以撤销吗?

Bitcoin 没有撤销按钮,也没有管理员能应请求撤回已确认的转账。要拿回资金,通常需要收款人通过一笔新交易退还。这与链重组不同:重组可能让付款暂时失去确认。每增加一个区块,替换这段历史所需的矿工工作量,也就是 Proof of Work,就会增加。因此,更多确认能提高把握,但不是绝对保证。

02钱包为什么创建找零输出?

输入会完整花费 UTXO。当所选输入超过付款金额与手续费之和时,钱包通常创建一个新输出,把余额返回到自己控制之下。

DOC · 001Bitcoin Core v29.0: transaction validation一手来源 DOC · 002Bitcoin Developer Reference: Transactions一手来源 DOC · 003BIP 141: transaction identifiers and weight一手来源 DOC · 004Bitcoin Core v29.0: block validation一手来源
修订日期: 来源优先 · 非投资建议