比特币和区块链(5):比特币的账户模型UTXO

区块链极客社区2019-06-17 09:11:09


我们已经介绍了比特币里常用的密码学知识,但是在我们正式讲解比特币账本结构之前,我们还需要理解一个概念–比特币的账户模型UTXO。UTXO全称是Unspent Transaction Output。这个是在比特币里面特有的,比特币之前不存在,比特币之后的一些区块链项目比如以太坊也没有采用的记账模式。


比特币记账模式
为了理解UTXO,我们先理解一下传统的账本是怎么记的。我们以银行为例。其实不管是银行,还是腾旭的Q币,或者是支付宝,记账模式都是差不多的。简单来说这个记账方法叫做余额记账法。简单来说,就是每个人的账户里有一个余额值,然后如果一方需要付钱给另外一方的话,两边的余额都会改变。

举个例子

张三要付给李四100块钱。张三账户上有200块,李四账户上也有200块,那么这个付账过程大致上是如此发生的:

  1. 检查张三账户上是不是有足够的钱,如果没有支付失败,否则扣100块

  2. 给李四的账户上加100块

  3. 提交


如果你熟悉数据库的概念,那么你一定知道这是一个数据库的事物。简单来说更改要么全部成功,要么系统恢复到更改前的状态。也就是说这个交易做完之后,要么账号上张三只剩100块,李四有300块,要么交易失败两者余额都没有改变。

如果要继续深入讨论下去的话,围绕着这个余额为基础的有一系列的关于事务处理的技术在里面。大凡对数据库系统和分布式系统有所了解的人,或多或少都知道这是个很复杂的领域。要不怎么计算机的最高奖图灵奖就曾经授予过在事务处理上做出过巨大贡献的Jim Gray呢。

无论如何,基于账户余额的记账方式,是我们每个人熟悉的方式。即使我不深入讲解,大家天天都在刷支付宝,给游戏币充值等等,相信这是很自然的,每个读者都能理解。



如果说基于账户余额的记账方式可以理解,那么比特币的UTXO记账方式就要难理解很多。Unspent Transaction Output简单翻译过来就是没有花费的交易输出。这话显然非常的不通俗易懂。我用俗话翻译一句:UTXO里记录的是交易本身,没有余额。我们考虑张三付给李四100块这个事情。为了便于解释,还是先假设张三有200块吧。这个假设我们会在下一部分再推翻。

举个例子

? ??如果张三有200块,付给李四100块,

????那么一条交易如下:

????输入:张三 200块

????输出:张三 100块?? ??李四 100块


我们可以看到一个合法的交易,有一个或者一个以上的输入,也有一个或者一个以上的输出,其基本规则是:输入的总金额等于输出的总金额。严格来讲,如果有手续费的情况下,输入的总金额=输出总金额+手续费。

好了这是一个普通的交易。但是钱不可能凭空而来,张三自己也没有余额。这是因为比特币系统还允许一种交易。这种交易是系统产生的交易,输入什么都没有,输出是给某某某多少比特币。所谓的创世区块,以及之后每次挖矿成功奖励的比特币都是这样凭空而来的。

这样一来,我们可以解释UTXO了。在UTXO的记账模式下,我们记录的是一笔一笔的交易。正常交易需要以其他的交易作为输入,然后产生输出。正常交易的输入总和等于输出总和+手续费。系统还可以产生特殊的交易。这类交易产生于创世区块以及此后每个区块。比特币对每个区块奖励50个比特币,这个奖励每隔4年衰减一半。现在我们是在第三个周期里, 比特币对每个生成的区块奖励12.5个比特币。所以,比特币的账本里,记录的都是一条又一条的这样的交易记录。而交易记录能够交易,初始的比特币则来源于每次区块的创建奖励的那些比特币。这样就解释了比特币记账的UTXO模型。



那么比特币为什么使用UTXO模型而不是正常的账本模型呢?

这个要理解起来其实也不复杂。UTXO是一个纯粹记录每笔交易的系统,这种系统是所谓的Append only的典范。用账本记录余额的话,就不免要对某些单元进行数据更改,而不只是简单的添加。这违背了比特币设计的初衷。



那么用了UTXO有什么麻烦呢?

其中一个麻烦就是每个人到底有多少钱,不是一个固定的数字,而是需要通过对所有的交易里面最终指向自己为输出,又没有再次被用为输入的那些交易做一个和。

第二个更大的麻烦是,当我们需要进行交易的时候,怎么样生成这个交易是需要一些额外的工作的。举个例子,张三想付钱给李四,5块钱,张三收到很多交易,但是没有一个是超过5块钱的。这个时候,张三的钱包在广播这个交易前,要选若干个交易,让其总和大于5,并且把这些作为输入才可以。所以交易多了碎片化的情况也严重了。


飞总:大数据专家,PHD,曾就职于微软大数据架构部门,现在就任于TABLEAU,公众号“飞总聊IT”作者。


极客社区:区块链极客社区起源于北美顶尖的工程师社群,核心成员来自于各大科技公司、顶尖学府。社区以打造世界级区块链生态为宗旨,以促进区块链技术的普及为己任,希望站在区块链时代的风口上将最优质的区块链资源分享给用户!在这里,你将获得最权威的区块链教程、最新鲜的区块链资讯,以及对接最顶级区块链生态圈的机会。


加入我们,与硅谷大牛、藤校学霸一起,把酒言欢,链上论道;


加入我们,拥抱区块链去中心化的朝阳,破旧立新,让思维碰撞,让智慧共享;


加入我们,肩负起区块链时代赋予我们的独特使命,不忘初心, 砥砺前行!


不割韭菜,只谈技术,专属于工程师的社区!