交易(Transaction)是比特币的核心,它不仅是比特币流转的记录,而且 比特币本身也隐含在交易当中。下图表示了两个交易之间比特币的流转过程:
通常一个交易总是包含输入(vin)和输出(vout)两个部分,其中的输入 用来引用其他交易的输出。但用来记录挖矿奖励的币基交易/coinbase transaction 是个例外:它只有输出部分。例如,上图中的交易1111是一个币基交易,其 输出部分记录了挖矿奖励的50个币转入了地址x。
交易2222则记录了地址x的持有者向地址y转40个币的事实。在这个交易 的输入部分,可以看到它引用了交易1111的第0个输出,就是说,将把交易 1111的第0个输出所表示的比特币转给地址y。
交易输出在没有被其他交易使用之前,被称为未消费交易输出/Unspent Transaction Output, 简称为UTXO。UTXO的一个重要特点是不可以拆分消费:要么不使用它,要么完全使用它。 这有点像现钞:你不能把一张50元的钞票撕成40元和10元。 因此,虽然只需要给地址y转40个比特币,但是交易1111中的这个面值50个币的UTXO 会完全消耗掉,不再可用。
交易的输入总额与输出总额的差值,就是支付给矿工的交易费/Transaction Fee。 因此对于上面的交易我们还需要构造第二个交易输出来处理多出来的10个比特币,只把 其中一小部分支付交易费,剩下的使用x持有人控制的另一个地址z来回收 —— 就 像找零钱一样,因此这个地址z通常被称为找零地址/change address。当然,也 可以将这部分比特币转给另一个外部地址。
当交易2222被确认后,交易1111的第0个输出就被消耗掉了,不再可用;产生 的两个新的UTXO,则分别属于地址y和地址z,而这一事实,被记录在 交易2222中写入区块链。