欧易OKEx
数字资产服务平台

区块链是如何记账的,UTXO和账户余额模型又是什么东西

前面我们说到,区块链是一个分布式的公共账本。既然它是一个账本,那么它总有个记账的方式吧。这里我们就给大家介绍介绍区块链它是怎么记账的。

UTXO模型

我们先来看一个故事。

这是炎热小镇慵懒的一天。太阳高挂,街道无人,每个人都债台高筑,靠信用度日。

这时,从外地来了一位有钱的旅客,他进了一家旅馆,拿出一张1000元钞票放在柜台,说想先看看房间,挑一间合适的过夜。

就在此人上楼的时候,店主抓了这张1000元钞,跑到隔壁屠户那里支付了他欠的肉钱。

屠夫有了1000元,横过马路付清了猪农的猪本钱。

猪农拿了1000元,出去付了他欠的饲料款。那个卖饲料的老兄,拿到1000元赶忙去付清他召妓的钱(经济不景气,当地的服务业也不得不提供信用服务)。有了1000元,这名妓女冲到旅馆付了她所欠的房钱。旅馆店主忙把这1000元放到柜台上,以免旅客下楼时起疑。

此时那人正下楼来,拿起1000元,声称没一间满意的,他把钱收进口袋,走了。这一天,没有人生产了什么东西,也没有人得到什么东西,可全镇的债务都清了,大家很开心。这本来是说流通的重要性。但是我在这里要对这个故事中的流通做一个记账。我们可以这么记:

交易1:店主还给屠夫1000元,我们可以记为 {输入:店主的1000元,输出:屠夫的1000元}

交易2:屠夫还给猪农1000元,{输入:屠夫的1000元,输出:猪农的1000元}

交易3:猪农还给卖饲料的1000元,{输入:猪农的1000元,输出:卖饲料的1000元}

交易4:卖饲料的还给妓女1000元,{输入:卖饲料的1000元,输出:妓女的1000元}

交易5:妓女还给店主1000元,{输入:妓女的1000元,输出:店主的1000元}

当然最初的那个店主拿来人的1000元,我们可以勉强记为交易0:{输入:旅客的1000元,输出:店主的1000元}

我们会发现,在这个记账中有个特点,每个交易的输入都是其它交易的输出,什么意思呢?简单来说就是每笔交易中钱的来源都是其它交易的去脉(就是其它交易的输出)。那么我们我们采用这种记账的方法,只看这个交易数据,就可以知道那个时刻的资金情况,所有交易连起来,我们就知道资金流动的情况,这样,我们就可以对整个资金的来龙去脉进行追溯验证。

现在,我们再来看什么是UTXO。UTXO全称是unspent transaction out,意思是未花费的交易输出。UTXO的模型是这样的:

UTXO模型中的交易,每一笔交易的输入,都是一个UTXO,就是一个未花费的交易,什么意思呢,例如店家转1000元给屠夫,还没有进行交易2的时候,这个时候交易1对于屠夫来说就是一个未花费的交易输出。对于交易2来说,输入的实际上是交易1的输出。所以简单来讲,在UTXO模型中,实际上就是可以花的钱,一定是来自之前别人花的钱。

账户余额模型

那么我们再来看账户余额模型,这个就比较简单了,同样是上面的故事,大概记账如下:

交易1发生时,店主账户减1000,屠夫账户加1000;

交易2发生时,屠夫账户减1000,猪农账户加1000;

交易3发生时,猪农账户减1000,卖饲料的账户加1000;

交易4发生时,卖饲料的账户减1000,妓女账户加1000;

交易5发生时,妓女账户减1000,店主账户加1000.

这个就比较符合我们平时记账的习惯,账簿上始终只记录每个人拥有的资金的最终的状态,这个就是账户余额模型。

总结

从上面的例子中可以看到,账户余额模型实际上是存量的模型,它是对每个时刻每个账户拥有的资金进行记录描述,而UTXO模型则是一个流量的模型,它实际上是对资金的流动过程进行描述,即某个时刻某些资金在某个账户上。比特币使用的是UTXO模型,而以太坊使用的是账户余额模型。UTXO模型相对来说更好追溯,能够看到每一笔钱是怎么来的,又是怎么流动的。而账户余额模型则是记录简单,记录的数据相对要少。

猜你喜欢