主页 > imtoken钱包版本vf > 区块链 |比特币的账户模型----UTXO

区块链 |比特币的账户模型----UTXO

imtoken钱包版本vf 2023-01-17 03:36:44

在比特币中,没有中心化的组织来结算和清算比特币交易,自然也没有中心化的数据库来管理用户账户。事实上,比特币系统中并没有账户的概念。相反,UTXO(未使用的交易输出)是未使用的交易输出。这是中本聪非常天才的设计。通过UTXO方案,比特币交易可以在无第三方系统中完成。

在了解比特币的UTXO模型之前,我们先来看看基于账户的银行、证券等系统是如何处理用户交易的。

假设A和B在某家银行各有一个账户,现在A需要向B转账100元,那么银行会执行:

1.查看A账户余额是否充足,小于100元则终止交易并向A报告“余额不足”

2. 如果余额充足,则从A的账户中扣除100元

3.给B的账户加100元

这一切都是在银行的中央数据库中完成的。

现在还能注册比特币账号

现在让我们看看没有中心化数据库的比特币是如何使用UTXO来代替交易记录的账户模型的。

我们先抛开UTXO模型的三个原则:

1.所有交易都以coinbase交易开始(即以挖矿奖励开始)

2.除了coinbase的交易,所有的交易输入都必须来自之前一笔或几笔交易的UTXO输出(就像连接一根水管,一个接一个,一个接一个,一进一出,资金在交易之间无休止地流动)。

3.每笔交易的总支出等于总交易收入。

这里只是一个简单的概念,接下来我们结合实例详细体验这个过程。

理解 UTXO 最简单的方法是描述比特币从诞生到商业世界的起起落落的经历。让我们假设这样一个场景:张三,作为一名矿工,挖出 12.5 个比特币。几天后,他将其中的2.5个付给了李斯。几天后,他和李四各捐出2.5个比特币,凑成5个比特币支付给王舞。

现在还能注册比特币账号

我们来看看这些交易是如何通过UTXO实现的:

我们先来回顾一下区块链的Block结构:

图1中的交易信息为图2中区块结构中记录的交易字段

然后我们结合UTXO的三个原理和图片,继续解读。

1.我们之前已经了解到,挖矿是产生比特币的唯一方式。每个区块的第一笔交易称为 Coinbase 交易。此处生成每个区块的奖励,指向矿工的地址(张三),即该矿工的挖矿收益为12.5BTC。

现在还能注册比特币账号

2.现在张三想把他的12.5比特币2.5转给李斯。注意,在传统账户模式下,您只需要增加或减少各自的账户即可。 UTXO 的机制不同。每个 UTXO 都是一个整体,不可分割(好比一个 UTXO 是一枚硬币,无论面值如何,都要花掉),这是系统默认的找零机制。

即张三地址中的12.5个比特币全部转出,其中2.5个转入李四地址,其余10个比特币转入张三地址。 (这个地址可以是新地址,也可以是原地址,转账时请注意,不填写,剩余比特币全部成为矿工手续费)。

有人会问,你为什么要这样做,只转移2. 5个硬币现在还能注册比特币账号,其余的不动?这就是 UTXO 和账户模式的区别。除 coinbase 交易外,所有交易输入必须是之前一笔或多笔交易的 UTXO 输出,且每笔交易的总交易支出等于总交易收入。

注意:每笔交易前面都标有资金来源。也就是据说比特币系统中没有余额的概念。获取用户余额的方法是将当前用户地址的所有UTXO相加。这样做的目的是为了有很多优点,比如更高的安全性和隐私性,同时也能有效防止双花攻击等。

3.同样,张三和李四要给王舞5个比特币2.。然后张三或李四发起了#3001事务。在交易输入部分,有两个资金来源,分别是#2001(1)和#2001(2)),分别代表交易#2001.1)的(<@)和item(< @2)UTXO。然后在这个交易的输出部分做同样的事情,给王舞5个比特币,把张三剩下的7.5个比特币还给自己。以后如果王舞要花他的 5 个比特币,他必须在交易中注明资金来源是#3001(1).

到目前为止,我们了解 UTXO 是什么。为什么,一个比特币是从挖矿到持续交易产生的。事实上,整个系统中有很多 UTXO。还有一种说法:其实没有比特币,有的是UTXO。是的,因为这就是比特币的交易方式。比特币没有实物,只有数据,UTXO就是它存在的东西。

我自己 12.5 个比特币转2.5 给李斯。注意,在传统的账户模型中,只需要在各个账户中增减,UTXO的机制不同。每个 UTXO 都是一个整体,不可分割(同理,一个 UTXO 就是一枚硬币,无论面值如何,都要花掉),这是系统默认的找零机制。

现在还能注册比特币账号

即张三地址中的12.5个比特币全部转出现在还能注册比特币账号,其中2.5转入李四地址,其余10个比特币转入张三三地址. (这个地址可以是新地址,也可以是原地址,需要转账时请注意,不填写,剩余比特币全部成为矿工手续费)。

有人会问,你为什么要这样做,只转移2.5个硬币,其余的不动?这就是 UTXO 和账户模式的区别。除coinbase交易外,所有交易输入必须来自之前一笔或多笔交易的UTXO输出,且每笔交易的总交易支出等于总交易收入。

注意:每笔转账都标有资金来源。也就是说,比特币系统中没有余额的概念。获取用户余额的方法是将当前用户地址的所有UTXO相加。这样做的目的有很多好处,比如更高的安全性和隐私性,也能有效防止双花攻击。

3.同样,张三和李四要各分出2.5个BTC给王舞。然后张三或李四发起事务#3001。在交易输入部分,有两个资金来源,分别是#2001(1)和#2001(2),代表#2001的交易。(1)和(<@ 2) UTXO 项。然后在这个交易的输出部分做同样的事情,给王舞 5 个比特币,把张三剩下的 7.5 个比特币发还给自己。如果王舞要花掉他的 5 个比特币以后他必须在交易中注明资金来源是#3001(1).

到目前为止,我们将了解 UTXO 是什么。一个 BTC 是由挖矿产生并持续交易的。事实上,整个系统中有很多 UTXO。还有一种说法:其实没有比特币,有的是UTXO。这实际上是正确的,因为这就是比特币的交易方式。比特币没有实物,只有数据,UTXO是它的存在形式。

总结一下,UTXO的三个原则

1)所有交易都从coinbase开始(即从挖矿奖励开始);

现在还能注册比特币账号

2)除了 coinbase 交易外,所有交易输入必须来自之前的一笔或多笔交易的 UTXO 输出。

3)每笔交易的总支出等于交易总收入;

UTXO和支付系统账户模型有什么区别?

1)在比特币系统中,没有账户的概念,所以也没有余额的概念。有些只是UTXO。在比特币交易系统中,通过一系列相关的交易来计算,一个地址下有多少个UTXO(类似于账户系统中的账户概念),通过这个UTXO的计算值来判断一个地址是否具有转移交易的能力。

2)区别

在支付系统账户模型中,账户具有账户名(账户唯一ID)和密码,通过账户ID和密码认证,获得账户的使用权和操作权。也就是说,账户中的所有资产都归经过密码安全认证的人所有。

在比特币交易系统中,没有账户ID和账户密码,也没有账户余额计算。但是有一个公钥(钱包地址)和一个私钥,可以理解为一个简单的类比:公钥是账户ID,私钥是账户密码。在比特币交易系统中,知道对方的公钥,就可以转账给对方进行交易。拥有私钥就意味着有权使用和控制该地址下的所有UTXO。

PS:如前所述,在支付系统账户模型中,会有常见的“双重”Spend攻击”,在比特币交易系统中,没有账户余额Amount的概念,但有净未花费的数量某个地址的交易输出,这个数值计算,从上到下扫描同一个地址的所有进出,建议立即等待,您只需要等待6个区块的确认时间,以确保您将不能双花,因为这笔交易已经被全网确认;