第9課 比特幣錢包和現實中的錢包有什麼本質差別? -- Transaction資料結構、UTXO、錢包 -- 詳解
有興趣朋友也可以進一步關注公眾號“架構之道與術”, 獲取原文。
或掃描如下二維碼:
經過前面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課 掌握區塊鏈技術需要的預備知識》