比特币的交易结构(UTXO)
什么是UTXO
上一篇文章简单说了下区块链和比特币之间的关系,在讲解比特币详细的交易流程之前,我们先来说说比特币的交易结构。
曾经在读相关的介绍文章时,看到过这样一句话,叫做“没有比特币,只有UTXO”,UTXO的全称是Unspent Transaction Output 翻译成中文就是未花费的交易输出,是比特币特有的一种账户结构。
当我们在现实生活中进行资金交易的过程中,整个交易的流程往往是这样的,小黄得到了现金10元,转给小牛2元,那么小黄的账户在现有基础上减去2元,小牛的加上2元;小牛和小黄又分别转给小王1元,小牛和小黄的账户分别减去1元,在小王的账户上加上2元,整个交易过程如下图所示。
传统账户体系下的转账而在比特币交易中,我们是这样记账的。依然是刚才的流程,小黄通过挖矿获得了10比特币,他向小牛转了2比特币。后来小牛和小黄又各自向小王转了1比特币。整个交易流程如下图。
比特币钱包地址中的交易记录而三个人的比特钱包地址中只记录了这几笔交易的流水,并没有余额的概念,如下图。
小王,小黄,小牛三人的交易记录每一个比特币交易都有若干个输入和输出组成,输入直白点讲就是你拿什么证明你能拿出这些比特币来给别人,那么这个证明就是前一个人给你的转帐记录。
小黄的比特币钱包地址中有两种交易类型,Coinbase是一种比较特殊的交易,是指小黄挖矿后的获得的奖励,这种交易实际上是没有输入只有输出的,输出的就是挖矿者小黄的比特币钱包地址,小黄此时要向小牛转2个比特币,那么输入就是小黄挖矿得来10比特币的这个交易,输出2个比特币给小牛,另外转8个比特币给自己。输出的数量必须小于等于输入的数量,若没有把多余的比特币转回给自己,那么很可能会作为手续费奖励给记账的矿工。后续流程类似,小牛转给小王1比特币的输入是小牛从小黄那得到的2比特币。这样包含若干输入和输出得交易数据结构被称为UTXO即未花费的交易输出。数据库中有专门的表记录UTXO,一旦未花费得作为输入产生了其他输出,则输入交易就从UTXO表中删除。
为什么这样做?
那么中本聪为什么要采用UTXO而不是账户体系呢,笔者能考虑的一个比较直接的好处是交易可以并行处理,举个例子,在银行的账户体系下,如果你和你男朋友都想操作他的某个银行卡账户,这两笔交易的处理时有先后的,例如,你想从你男朋友的账号里面转200块出来,而你男朋友想向账户里存100元。在他操作存款的时候,你操作了转出200元,那么页面上你也许看着是操作成功,进入银行处理状态了,但是银行在真实处理这两笔交易时是有明确的先后顺序的,如果你男朋友并不是存钱,而是将钱都取出来,那么过一会,你就会收到支付平台返回的操作失败的操作了,因为并没有足够的余额供你转出。而UTXO并不存在这样的问题,只要每笔钱都有来源,且来源是未被用过的,那么多少个操作同时向一个地址转帐,或者从同一个地址转出也是没关系的。