主页 > imtoken平台 > 了解比特币的 UTXO、地址和交易

了解比特币的 UTXO、地址和交易

imtoken平台 2023-11-15 05:13:53

了解比特币的UTXO、地址和交易

标签:|

比特币中的 UTXO(未使用的交易输出)类似于以太坊中的账户模型。在比特币中,每笔交易的输入和输出实际上都是一个UTXO,输入的UTXO是上一笔交易的余数,更准确地说是上一笔交易的输出UTXO。

除了没有UTXO输入的coinbase交易(挖矿奖励)外,其他交易都有输入输出,可以是多个。

下图来自《白话区块链》一书

transactions

上图中有3笔交易:

比特币怎么比特币钱包_比特币qt钱包发币地址_比特币地址合并

第一笔交易来自挖矿比特币地址合并,没有输入,输出是Alice的地址,可以简单理解为一个UTXO。第二笔交易是 Alice 给 Bob 的转账,输入是 Alice 的地址比特币地址合并,输出是 Bob 的地址和 Alice 的地址,因为有余额的第三笔交易是 Bob 给 Lily 的转账,和之前的交易类似。

与实际使用有关。用户可以创建任意数量的地址,并且可以通过地址接收转账,或者转账给其他人。那么,地址和 UTXO 有什么关系呢?可见该地址可以重复使用。每次使用时,要么用作输入,要么用作输出。如果作为输入,未使用的余额会自动输出到地址,也就是找零的过程。

每笔交易的输入输出都是UTXO,输出生成UTXO,输入使用UTXO。

例如:Alice 有一个地址,Bob 和 Lily 分别转给 Alice。转账后,Alice 实际上有 2 个未使用的 UTXO 可以代替 1 个使用。比特币永远是一个地址中的UTXO不会被合并,每个UTXO都可以被追踪知道矿工挖出的coinbase交易。

虽然,我们在使用钱包或者交易所的时候,会看到地址下的地址的所有余额。

比特币地址合并_比特币怎么比特币钱包_比特币qt钱包发币地址

那么,看了上面的例子,是不是觉得所有的交易都会连成一条链呢?

我们来看看比特币白皮书中的交易是如何关联起来的。

我们将电子硬币定义为数字签名链。每个所有者通过对先前交易的哈希和下一个所有者的公钥进行数字签名并将它们添加到硬币的末尾来将硬币转移到下一个所有者。收款人可以验证签名以验证所有权链。

transaction chain

所以,看了白皮书中的图表,我进一步觉得所有的交易都会链接成一条链。

比特币怎么比特币钱包_比特币地址合并_比特币qt钱包发币地址

但如果你仔细想想,你会觉得它是错误的。比特币的产生就是每一个区块都会产生,而产生比特币的coinbase交易显然不是之前的交易。因此,很明显每个块都会被生成。区块链的第一个交易,coinbase 交易,将是一个交易链的头部(它只是头部,因为一个交易中可能有多个输入)。

下图取自比特币白皮书

multi input

看完下图可能会更清楚:

tx chains

比特币地址合并_比特币怎么比特币钱包_比特币qt钱包发币地址

我们来看看比特币地址

比特币地址是通过公钥处理的,是不可逆的,所以无法通过地址提取 公钥地址是公开的,任何人都可以查出地址中有多少比特币。但是,只有拥有与生成地址的公钥对应的私钥的人才能使用地址中的比特币

那么,再来看看交易的内容:

tx content

input、output可以有多个输入或输出,上例中只有一个,前面的tx表示输入UTXO是从哪个交易生成的,生成的序号(Index)是多少,所以,这样,前一个输出的UTXO被定位为本次的输入。

比特币qt钱包发币地址_比特币怎么比特币钱包_比特币地址合并

scriptSig包含两部分,交易中一些字段的签名和他的公钥,签名用于验证消费UTXO的人是否真的拥有对应的私钥;公钥用于验证输入的UTXO的地址是否属于这个公钥。

这里需要说明一下:你需要花费一个UTXO,然后你需要提供签名和公钥,验证你对UTXO所有权的过程如下:

从公钥计算地址,然后与UTXO地址进行比较,确保一致。这证明你确实有用公钥验证签名的地址。如果通过,就证明你有对应的私钥。

这样,通过验证后,就可以证明你对UTXO的所有权,并花费UTXO。

在输出中,对应每一个输出的UTXO,包括比特币输出的数量,以及scriptPubKey,即收款人的地址。这里不要以为是收款人的公钥,收款人的公钥的发送者是未知的。

综上所述,如果你想在一个地址中花费余额,你实际上可能花费了多个 UTXO,而这些细节对用户是隐藏的。

发布于 2018 年 6 月 2 日