主页 > imtoken钱包正确的下载地址 > 资深程序员告诉你为什么没有比特币余额只有UTXO? 什么是 UTXO?

资深程序员告诉你为什么没有比特币余额只有UTXO? 什么是 UTXO?

在比特币和区块链之前,没有UTXO这个词。

明确什么是UTXO?先介绍两个知识点,一个是什么是交易比特币钱包同步太慢,一个是什么是账户模型

1.什么是交易

交易更容易理解。 在英文中,Transaction 缩写为 TX。 按照我们平时对交易的理解,李四转了一笔50元给张三,也就是李四账户里的钱少了50元,张三账户里的钱多了50元; 张三又想到王五转账50元,这个过程叫做交易,那么这笔交易怎么记录保存在电脑里呢?

2. 什么是账户模型

目前的银行系统、证券交易系统、互联网第三方支付系统的核心都是基于账户设计,以MySQL、Oracle等关系型数据库为支撑。 这是最直接、最符合人类思维的直观方式。

为了照顾没有计算机和数据库基础知识的读者,这里对数据库知识做一个简单的介绍。

数据库是指以一定方式存储的、可被多个用户共享、独立于应用程序的数据集合。 简单的说,它可以看作是一个电子表格,用户可以在表格中进行数据的添加、更新、删除等操作。

可见,关系型数据库可以简单理解为表。 那么对于账户模型数据库,简单来说,可以设计成两张表:

账户表交易记录表

1 简化账户表格如下,用于记录所有者的银行卡号和余额信息。 实际情况会复杂得多:

比特币国际钱包网站_比特币钱包同步太慢_火币网查询自己的比特币钱包地址

比特币国际钱包网站_比特币钱包同步太慢_火币网查询自己的比特币钱包地址

2 交易记录表如下,用于记录所有转账记录

比特币国际钱包网站_比特币钱包同步太慢_火币网查询自己的比特币钱包地址

以上面李四给张三转账50元为例,在交易记录表中新增一条转账记录如下:

比特币钱包同步太慢_比特币国际钱包网站_火币网查询自己的比特币钱包地址

同时需要修改账户表单中的余额。 修改后的账户形式为

比特币钱包同步太慢_火币网查询自己的比特币钱包地址_比特币国际钱包网站

张三转账50元给王五后,两张表格的号码如下:

比特币钱包同步太慢_火币网查询自己的比特币钱包地址_比特币国际钱包网站

3.什么是UTXO模型

火币网查询自己的比特币钱包地址_比特币国际钱包网站_比特币钱包同步太慢

上面的账户模型其实是最直观、最直接、最容易理解的。 那么还有其他方式来表示交易吗? 中本聪设计的 UTXO 是一种表示交易的方式。

UTXO是Unspent Transaction Output的缩写,交易简称为TX,所以上面的词组简称为UTXO。 上面的账户模型由两个表组成。 UTXO 设计巧妙,不需要传统关系型数据库的支持。 UTXO 被翻译成未消费的交易输出。

我们知道比特币是挖出来的,假设张三、李四、王五都挖出了100个比特币

比特币钱包同步太慢_火币网查询自己的比特币钱包地址_比特币国际钱包网站

比特币钱包同步太慢_比特币国际钱包网站_火币网查询自己的比特币钱包地址

比特币钱包同步太慢_火币网查询自己的比特币钱包地址_比特币国际钱包网站

同样以上面李四转50元给张三为例

比特币国际钱包网站_比特币钱包同步太慢_火币网查询自己的比特币钱包地址

李四转账50元给张三.png

比特币国际钱包网站_比特币钱包同步太慢_火币网查询自己的比特币钱包地址

比特币钱包同步太慢_比特币国际钱包网站_火币网查询自己的比特币钱包地址

张三转账50元给王五后

解释以上图片的含义。

比特币的区块链账本记录着一笔一笔的交易。 每笔交易都有若干交易输入,即资金来源,以及若干交易输出,即资金去向。 一般来说,每笔交易都需要花费(spend)一个输入并产生一个输出,而产生的输出就是“未花费的交易输出”,即UTXO。

挖矿得到的奖励叫做coinbase,没有input source,所以张三、李四、王五的100个币(100个为了方便,其实按照减半机制,每个区块的奖励是2018年的比特币是12.5)都是挖矿的,假设TX哈希值分别是0x001、0x002、0x003。

李四转给张三50个币,转账交易的哈希号为0x004,输入TX号为0x001和0x002,输出为张三150个币,李斯50个币。 注意此处忽略交易打包费。

后来张三要转50个币给王五。 转账交易的哈希号为0x005。 如果你聪明,应该能猜出来。 输入为0x003和0x004,输出为张三100个硬币,王五150个硬币。 另外,这里忽略了交易打包费。

由此可见,UTXO交易遵循以下规则:

至此,你应该能理解为什么有人说:比特币网络没有账户,只有地址; 比特币不是余额,而是 UTXO。

你也可以理解为什么如果你想看到你的比特币钱包的最新余额,你必须同步到最高区块高度才能正确显示。

4、为什么要设计UTXO模型?

比特币国际钱包网站_火币网查询自己的比特币钱包地址_比特币钱包同步太慢

4.1 账户模型的缺点

一点题外话:其实对于大小的概念,人类的认知是不够的。 0.001秒对于人类来说是很短的时间,但是对于计算机来说却是很长的时间。 在计算机世界里,可能相当于人类的1天。 当我们嘲笑鱼的记忆力只有7秒时,如果电脑有意识,它可能还会嘲笑人类最长的记忆力,只有几十年,因为电脑的存储时间理论上是无限的。

让我先解释一下计算机的基础知识。

笔者上一篇文章讲解了图灵机(),其实我们现在所有的计算机都是图灵机。 从图灵机的模型我们知道,要修改一个数据,比如把一张银行卡的余额增加100元,需要三个步骤:

1.首先从账户中读取余额

2.余额值增加100元,得到新的余额值

3.将新余额写入账户

三步电脑操作在我们看来是瞬间完成(比如0.0001秒),但实际上在电脑内部需要一定的时间。 一步完成,多个CPU时钟内完成。

对于账户模型,上面我们已经了解到,需要两张表,在转账过程中,需要保证等式两边必须平衡。 所以发送的交易是给一个账户加钱,同时从另一个账户减钱,也就是修改两个账户的数据。 如果由于网络等原因交易被重发,将成为两笔重复扣款的交易。 ,这就是区块链中著名的“重放攻击”。

在分布式系统中,要保证加币和减币可以同时完成,就需要实现分布式事务。 相信做程序员的同学都会知道,这是一件非常非常困难和耗费资源的事情,同时也很容易。 有漏洞的地方,以太坊采用的是账户模型,所以以太坊智能合约经常因为编程不当导致被盗币

比特币国际钱包网站_比特币钱包同步太慢_火币网查询自己的比特币钱包地址

4.2 比特币没有开户流程,只有地址。

去中心化系统没有专门的机构让人们申请每个账户的产生和销毁。 这样的系统不需要记录和跟踪所有账户的信息。 使用 UTXO 而不是跟踪账户交易消耗更少的系统资源。 ,只要 UTXO 被跟踪比特币钱包同步太慢,就无法被篡改。

4.3 更好的匿名性

比特币的一个更好的特性是匿名性。 您可以为每笔交易交换一对公钥和私钥。 给自己输出的零钱往往输出到另一个账户。 UTXO迎合了这种需求,比如门罗币就是采用混币的方式来实现隐私。 使用帐户模型不太灵活。

4.4 更好的并行处理

UTXO 是一个独立的数据结构。 理论上,可以在不考虑交易问题的情况下,使用不同的 UTXO 并行发出多笔交易并广播到网络;

4.5 占用空间小

去中心化系统的考虑是全世界的人都可以使用它并打开多个地址。 从长远来看,UTXO不会因为地址的增加而增加额外的空间,所以数据占用更小,账户模型会越来越臃肿。

5. 来自UTXO的灵感

5.1 跳出人群思维。 比特币作为一种点对点的电子货币体系,跳出了传统货币体系的账户模型设计,采用全新的方式,以最低的成本解决了诸多分布式问题。

5.2 求等价,越简单越好。 等价是解决问题的一种非常有效的方法。 计算机领域有很多等价的例子,比如用二进制等于十进制,解决了机械运动直接计算十进制的非常复杂的情况; 又如人工智力问题等同于数学问题。 UTXO 将账户交易等同于一个简单的模型。 虽然不符合常规的思维方式,但是非常简洁,非常有美感。

5.3 学会做出一些妥协。 比特币最初的设计目的是让全世界的人都可以使用,而要具备去中心化、可追溯、不可篡改、匿名等特殊效果,就必须做出妥协。 例如,UTXO 设计很难实现 EVM 功能。 开发一个完整的智能合约是非常困难的。 这也是以太坊不采用 UTXO 模型的主要原因。