经过前面1序列的铺垫,我们熟悉了各种基本概念,这1课,将进入最核心的原理的讲解:Transaction与UTXO。这2个东西,是整个区块链的核心的核心,后续一切,都基于对这个的深刻理解。
Transaction之间的网状关系:一切交易可追溯
考虑如下场景:用户A和用户B之间发生了一个交易T3,A向B转100元。
那这100元,哪来的呢? 来自T1:C向A转的80元 + T2:D向A转的30元(共110元,但A只转了100元给B,10元找零返回给A的账号)。
同理,C向A转的这80元,来自用户E、F的某次交易。。
D向A转的这30元,来自用户E的某次交易。。
举这个例子,是想说明1个问题:
交易与交易之间组成了网状关系,1个交易的输出,成为了下1个交易的输入;下1个交易的输出,又成了下下1个交易的输入。
所有的钱,在这个网络中流动,每1笔钱的去向、来源,都是可追溯的,而这也是区块链网络的一个重要特点。
多个付款人 + 多个收款人
在现实生活的交易中,通常1笔交易就是1个付款人,1个收款人。
但比特币网络的交易比这个灵活的多,支持1笔交易,有多个付款人 + 多个收款人,这个特性非常有用。
举个例子:
找零的场景:1个用户的钱包里面有100元(来自1个UTXO,什么是UTXO,稍后解释),现在他要买1瓶矿泉水,只需要1块钱,但是1个UTXO有且只能花费1次,也就是说,他要把100元1次性花出去!!!这怎么处理呢?
答案就是:
付款人:1个,该用户,100元
收款人:2个,卖家:1元 自己:99元
也就是,把100元,分成2部分,打给了2个人,1个是卖家,1个是自己。
对应到交易里面,就是这笔交易有1个输入,2个输出!
多个输入 + 多个输出
再次考虑最上面的场景:T3,A向B转账100元
这个交易就有2个输入,2个输出:
2个输入(也就是2个UTXO):
T1: C向A转的80元
T2:D向A转的30元
2个输出:
B:100元
A:10元(找零)
UTXO 与 UTXO Set
UTXO是一个非常非常核心的概念,搞明白了这个,也就搞明白了交易的内部结构、钱包等一系列东西。
UTXO,全称是Unspent Transaction Out,未花费的交易输出。
所有的钱都不是无源之水,别人给你的转账中(对应多笔交易的输出),有的被你花费了,有的没有被花费,没有被花费的叫UTXO。
下面这张图,在上面的示意图的基础上,更详细的展示了交易之间的关联关系:
有user1, user2, user3, user4, user5 5个用户,
考虑T4:user1要给user2转账37元。user1的37元来自哪呢??
来自T1,T2,T3 3个交易:
T1有1个Output(也就是1个UTXO,属于user1,5元),
T2有2个Output(也就是2个UTXO,1个属于user1,15元;1个属于user2,20元),
T3有3个Output (也就是3个UTXO,分别属于user5, 20元;user2,20元; user1,20元)
在T4里,要凑够这37元,user1需要1次性花费来自T1, T2, T3的3个UTXO(5+15+20 = 40元),同时产出了2个UTXO,1个给user2的37元,1个是自己找零的3元。
这找零的3元,有被花到了下1个交易T6。。。
通过上面的场景分析,我们知道了:
(1)任何1笔Transaction,会花费多个UTXO(Input),同时也产生多个新的UTXO(Output),属于多个不同的收款人。
(2)1个UTXO,具有如下的表达形式:
1个UTXO = 1个Transaction ID + Output Index
(3)旧的UTXO不断消亡,新的UTXO不断产生。所有的UTXO,组成了UTXO Set 的数据库,存在于每个节点
(4)任何1笔UTXO,有且仅可能被1个交易花费1次
钱包
深刻理解了UTXO的概念,钱包就很容易理解了:
某个人的钱包的余额 = 属于他的UTXO的总和
在这里,你会发现一个不同于现实世界的“银行”里的一个概念:
在银行里,会存储每个账号剩余多少钱。但这里,我们存储的并不是每个账号的余额,而存的是1笔笔的交易,也就是1笔笔的UTXO,每个账户的余额是通过UTXO计算出来的,而不是直接存储余额!!
总结
讲完了Transaction,UXTO,最后我们把整个的层次结构,用如下的示意图展示出来:
1个区块链,有多个区块;
1个区块,多笔交易(两三千笔);
每笔交易,多笔Input,多笔Output。
领取专属 10元无门槛券
私享最新 技术干货