九 Transaction資料結構 UTXO 錢包

2021-08-28 18:17:20 字數 2296 閱讀 2835

經過前面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。

php 事務transaction處理資料庫操作

pdo事務處理transaction 作用 出錯則還原 開啟事務處理 資料庫連線物件 begintransaction 結束事務處理 資料庫連線物件 commit 事務回滾操作 資料庫連線物件 rollback 必須配合事務處理和異常中斷操作 否則異常回滾後,還是會執行事務提交操作 異常中斷操作 資...

對資料進行操作 事務Transaction

事務是對訪問資料庫這一事物的稱呼 事務的四個特性 單位 狀態 過程和結果 1.單位 事務的原子性,事務是資料操作的最小單位,已經不可在分割 2.狀態 事務的一致性,由於原子性,所以操作要麼成功,要麼失敗,而且是保持一致的 3.過程 事務的隔離性,在操作過程中,對資料的本次操作進行隔離,免受其他操作的...

clickhouse insert的資料結構

clickhouse insert大致分為兩部分 1.sql語句部分 insert into table f1,f2 2.資料部分資料部分又分為3部分 頭,資料,尾 資料頭 資料塊1 資料塊2 資料塊n 資料尾從中可以看出 每個insert可以包含多個資料塊,每個資料塊可以包含多行。乙個完整的ins...