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

在没有比特币,区块链之前是没有UTXO这个词语的。
要说清楚UTXO是什么?先给大家介绍两个知识点,一是什么是交易,二是什么是账号模型

1、 什么是交易

交易比较好理解,英文是Transaction 被简称为 TX。以我们平时对交易的理解,李四给张三转账了一笔50块钱,那就是李四的账上的钱少了50块,张三账上的钱多了50块;张三再想王五转账50元,这样的过程就叫做交易,那么在计算机中怎么来记录和保存这笔交易呢?

2、 什么是账号模型

现在的银行系统、证券交易系统、互联网第三方支付系统等,其核心都是基于账户的设计,由关系数据库比如MySQL,Oracle来支撑的。这是最直接最直观符合人类思维的方式。
为了照顾没有计算机和数据库基础知识的读者,简单介绍下数据库知识。

数据库指的是以一定方式储存起来,能为多个用户共享,与应用程序彼此独立的数据集合。简单来说可视为电子化的表格,用户可以对表格中的数据运行新增、更新、删除等操作。

可以看出,关系数据库可以简单理解成一张表格。那么对于账户模型的数据库,简单来讲可以设计成两个张表格:

  1. 账户表
  2. 交易记录表

1 简化的账户表格如下,用来记录所有人的银行卡号及余额信息,实际情况会复杂很多:

编号 开户人 开户卡号 余额
1 张三 62xxx001 100
2 李四 62xxx002 100
3 王五 62xxx003 100
... ... ... ...

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

编号 转账人 接收人 转账金额
... ... ... ...

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

编号 转账人 接收人 转账金额
1 李四 张三 50

同时需要在账号表格中做下余额修改,修改后的账户表格为

编号 开户人 开户卡号 余额
1 张三 62xxx001 150
2 李四 62xxx002 50
3 王五 62xxx003 100
... ... ... ...

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

编号 转账人 接收人 转账金额
1 李四 张三 50
2 张三 王五 50

修改后的账户表格为

编号 开户人 开户卡号 余额
1 张三 62xxx001 100
2 李四 62xxx002 50
3 王五 62xxx003 150
... ... ... ...

3、什么是UTXO模型

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

UTXO是Unspent Transaction Output(未花费交易输出)的简写,transaction 被简称为 TX,所以上面这个短语缩写为 UTXO。上面的账户模型是两张表格组成,UTXO经过巧妙的设计不需要传统的关系数据库来支撑,UTXO被翻译成未消费交易输出,由点拗口,怎么理解呢?
我们知道比特币是挖出来的,假设张三、李四、王五都挖出了100个比特币


张三.png
李四.png
王五.png

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


李四给张三转账50元.png

张三给王五转账50元后


张三给王五转账50元.png

解释下上面的几个图的意思。
比特币的区块链账本里记录的是一笔又一笔的交易。每笔交易都有若干交易输入,也就是资金来源,也都有若干笔交易输出,也就是资金去向。一般来说,每一笔交易都要花费(spend)一笔输入,产生一笔输出,而其所产生的输出,就是“未花费交易输出”,也就是 UTXO。
挖矿所得的奖励叫做coinbase,没有输入来源,所以张三、李四、王五的100个币(为方便说明为100个,实际上根据减半机制,比特币在2018每个区块奖励是12.5个)均来自于挖矿,假设TX hash编号分别为0x001,0x002,0x003。

李四给张三转50个币,转账交易的hash编号为0x004,输入的TX编号为0x001和0x002,输出为张三150个币,李四为50个币。注意这里忽略了交易打包费。

在后来,张三要给王五转50个币,转账交易的hash编号为0x005,聪明如你应该能猜出来,输入是0x003和0x004,输出为张三100币,王五150个币。同样这里忽略了交易打包费。

由此,可以看出UTXO交易遵守下面规则:

  1. 除了 coinbase 交易之外,所有的资金来源都必须来自前面某一个或者几个交易的 UTXO,就像链条一样,一个接一个,钱就在交易之间流动起来了。
  2. 任何一笔交易的交易输入总量必须等于交易输出总量,等式两边必须配平。

至此你应该能明白为什么有人说:比特币网络中没有账户,只有地址;比特币不是余额,而是UTXO。
你也能理解为什么你想看到比特币钱包的最新余额,必须要同步到最高的区块高度才能正确显示。

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

4.1 账户模型的缺点

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

先给大家解释下计算机基础知识。
笔者前面的文章解释了图灵机(https://www.jianshu.com/p/c07d83c4f3a1),其实我们现在的所有计算机都是图灵机,从图灵机的模型我们知道要修改一个数据,比如银行卡余额增加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 找出等价性,越简单越美。 等价性是一种很厉害的解决问题的方式,在计算机领域有很多等价性的例子,比如用二进制来等价十进制,解决机械运动直接计算10进制非常复杂的情况;又比如把人工智能问题等价成数学问题。UTXO把账户交易用一种简单的模型进行等价,虽然不符合人常规思考方式,但非常简单,非常具有美感。

5.3 要学会某些妥协。 比特币设计之初就是给全世界人民使用的,并且要具有去中心化、可溯源、不可篡改、匿名等特效,就必须要所妥协,比如UTXO设计要实现EVM功能就非常困难,即实现图灵完备的智能合约非常难。这也是以太坊没有采用UTXO模型的主要原因。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容