第9课 比特币钱包和现实中的钱包有什么本质差别? -- Transaction数据结构、UTXO、钱包 -- 详解

有兴趣朋友也可以进一步关注公众号“架构之道与术”, 获取原文。
或扫描如下二维码:
第9课 比特币钱包和现实中的钱包有什么本质差别? -- Transaction数据结构、UTXO、钱包 -- 详解_第1张图片

经过前面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。

相关链接:

《第8课 账号相关概念:公钥/私钥/Public Key Hash/P2PKH》

《第7课 币和交易,谁生成谁?先有鸡,还是先有蛋?》

《第6课 分叉与51%算力攻击》

《第5课:“挖矿”专业名词 – 算力/矿机/矿池》

《第4课 到底啥叫“挖矿”?》

《第3课 “区块链”到底长什么样?》

《第2课 走进 “区块链”与”比特币”的世界》

《第1课 掌握区块链技术需要的预备知识》

你可能感兴趣的:(区块链技术)