031.
交易的输出和输入是怎样的?
比特币交易的基本单位是未经使用的一个交易输出,简称UTXO。UTXO是不能再分割、被所有者锁住或记录于区块链中的、被整个网络识别成货币单位的一定量的比特币。
比特币网络监测着以百万为单位的所有可用的(未花费的)UTXO,当一个用户接收比特币时,金额就会被当作UTXO记录到区块链里。如此,一个用户的比特币就会被当作UTXO分散到数百个交易和区块中。其实,并没有储存比特币地址或账户余额的地点,只有被所有者锁住的、分散的UTXO。
“一个用户的比特币余额”是通过比特币钱包应用创建的派生之物,比特币钱包通过扫描区块链并聚合所有属于该用户的UTXO来计算该用户的余额。在比特币的世界里既没有账户,也没有余额,只有分散到区块链里的UTXO。
虽然UTXO可以是任意值,但只要被创造出来,就会不可再分。如果一个UTXO比一笔交易所需量大,会被当作一个整体而消耗掉,但会在交易中生成零头。例如,用户有20个比特币的UTXO且想支付1个比特币,用户的交易就要消耗掉整个20个比特币的UTXO且产生两个输出:一是支付了1比特币给接收人,一是支付了19个比特币的找零到用户的钱包。如此,大部分比特币交易都会产生找零。
比如,一位先生要买1.5元的饮料,他掏出自己的钱包并努力从所有硬币和钞票中找出一种组合来凑齐他要支付的1.5元。如果可能,他会选正好的零钱(如1张1元纸币和5个1角硬币)或小面额组合(如3个5角硬币)。如果都不行,他会用一张较大面额钞票,比如5元纸币。如果他把过多的钱,比如5元给了商店老板,会拿到3.5元的找零,并把找零放回他的钱包以供未来使用。
同样,一笔比特币交易也可以有任意数值,但必须由用户在可用的UTXO中创建。用户不能再对UTXO进一步细分,就像不能把1元纸币撕开而继续当货币使用一样。用户钱包应用通常会从用户可用的UTXO中选取多个可用的个体,拼凑出一个大于或等于一笔交易所需的比特币量。
为了满足付款需要,比特币应用可以使用一些策略。比如,将若干小个体组合在一起,计算出准确的找零;使用一个比交易值大的个体进行找零。所有的这些组合,都是由用户钱包自动完成的,并不为用户所见。只有以编程方式用UTXO来构建原始交易,才与用户有关。
被交易消耗的UTXO是一种交易输入,由交易创建的UTXO是交易输出。通过这种方式,一定量的比特币价值就能在不同的所有者之间进行转移,并在交易链中消耗和创建UTXO。一笔比特币交易,不仅要通过使用者的签名来解锁UTXO,还要通过使用新的比特币地址来锁定并创建UTXO。
当然,对于输出和输入链来说,还有一个例外——Coinbase交易。这是一种特殊的交易类型,是各区块中的首个交易。这种交易之所以会存在,主要是为了奖励矿工。
输入和输出,究竟哪个是产生?严格来讲,先产生输出,因为可以创造新比特币的Coinbase交易没有输入,但可以无中生有地产生输出。