比特币的账本模型 - UTXO
区块链的账本模型,是区块链存储技术的一部分,说到存储,大家就很容易联想到数据库,那么区块链到底是不是一个读不可控写不可控的分布式数据库?或者说区块链和数据库有什么区别?
首先来看什么是数据库,数据库是运行在计算机中,可以储存和访问组织好的数据的场所,从这个定义来看,区块链就是一个数据库,只不过在普遍印象中,数据库有超级用户,有权限控制,还可以增删改查所有数据,并且具有较高的性能。
所以区块链为什么不支持增删改查的部分操作,这是由区块链的基因决定的,数据库发展至今,大概有这么几种,关系型数据库,非关系型数据库,而区块链是基于非关系型数据库又做了一些改进,这使得数据库节点与节点之间的关系,由传统数据库的信任和协作,变为了怀疑和约束,所以区块链上的数据不允许删改。区块链生来不是解决高并发问题的,而且要解决信任问题。
话题继续回到标题,区块链中的数据,是如何存储的,是以什么结构存储的。
在传统数据库中,当我们记录一些东西,会有一个数据库表来把数据结构化,比如当我们需要一个用户表,会记录用户 ID,地址,名字,电话,余额等等。
但是在比特币的世界里就大不相同了,首先,比特币数据库分为两部分,一部分用来存实际的区块,区块中记录了每笔交易的哈希值;另一部分用来存 UTXO,UTXO 也就是接下来要讲到的账户模型。
UTXO 可以理解为纸币找零的过程,只不过这个‘纸币’可以是任意面额,举个例子,在一个新的区块链网络里,最开始没有比特币,也不存在 UTXO,当矿工挖到一个币,也就产生了一个面值为 12.5 的 UTXO,当矿工转账给别人的时候,12.5 面值的 UTXO 又会被拆分成三份,分别给接受者,记账矿工,以及剩余余额。
和普通的数据库模型相比,UTXO 的特点在于可以进行并行计算,因为不同 UTXO 是互相独立的,同时也能保证使用者的隐私,因为找零部分的 UTXO,接收人可以任意指定,这会使得比特币交易变得难以追踪。UTXO 的劣势也很明显,那就是他几乎不支持编程,这也使得比特币只能是一个记账工具,而不能成为一个可信任的计算平台。