【區塊鏈科普】從來沒有什麼比特幣,有的只是UTXO

2020-11-05 17:46:56

在很多小白的認知中,比特幣的交易邏輯和現實世界中的銀行賬戶交易邏輯是一致的。實際上,作為一個去中心化的現金系統,比特幣採用的並不是銀行賬戶模型,而是UTXO模型。甚至有這樣一種說法廣為流傳:從來沒有什麼比特幣,有的只是UTXO。

 

什麼是UTXO?

 

UTXO是Unspent Transaction Output的縮寫,直譯過來就是未花費的交易輸出。要理解這個概念,先要弄明白比特幣等UTXO系幣種的交易邏輯。

 

為了方便大家理解,在這裡我們不放那些「非人言」的專業解釋,直接上例子。

 

假設張三有1000元,李四有2000元,王五有3000元

 

三個人之間有生意往來,因此經常會互相轉賬

 

轉賬1:王五向張三轉賬1000元

轉賬2:李四向張三轉賬500元

轉賬3:張三向王五轉賬800元

 

現實世界中,我們的轉賬收款都基於兩個基本概念:賬戶和餘額。銀行等第三方系統只需要根據我們發出的轉賬申請在不同的賬戶之間划賬餘額數量,並保證其總量不變即可。

 

 

以轉賬1為例,如果是在現實世界中,這時候銀行或者支付寶之類的第三方系統就會校驗王五的賬戶內是否有至少1000元的餘額,如果餘額不足,則直接打回轉賬請求,交易失敗;如果餘額足夠,就在王五的賬戶內減去1000元,並在張三的賬戶內加上1000元。

 

同理,經過了3次轉賬之後,張三的賬戶餘額變成了1700元,李四的賬戶餘額為1500元,王五的賬戶餘額為2800元。

 

 

而在UTXO模型下,系統會將張三的1000元、李四的2000元、王五的3000元都視為UTXO。 

 

 

依舊以轉賬1為例,當轉賬發起時,系統會將王五的3000元UTXO作為一筆交易輸入,然後將這筆輸入一分為二,張三的地址下增加一筆1000元UTXO交易輸出,王五的地址下增加一筆2000元UTXO輸出。此時張三的地址並不是有一筆2000元的UTXO,而是有兩筆1000元的UTXO。

 

 

轉賬2發生時,李四的2000元UTXO作為輸入,張三的地址下增加一筆500元UTXO輸出,李四的地址下增加一筆1500元UTXO輸出。此時,張三的地址有兩筆1000元UTXO和一筆500元UTXO。

 

 

轉賬3發生時,張三的一筆1000元UTXO作為輸入,王五的地址下增加一筆800元UTXO輸出,張三的地址下增加一筆200元UTXO輸出。

 

三筆轉賬結束後,三個人地址下的UTXO會變成這樣。

 

 

如果覺得上面的例子還不夠通俗易懂,那我們可以將UTXO類比於現實世界中的現金鈔票。

 

假設一件商品的價格是90元,張三看上了這件商品,現在他手頭有100元、50元、20元、20元四張紙幣。

 

現實世界中是沒有90元紙幣的,張三也不可能將一張100元紙幣撕個90%出來進行支付。這個時候張三可以使用一張50元、兩張20元進行支付,也可以使用一張100元進行支付,同時收回商家找零的10元。

 

無論是50元、20元、100元還是10元,我們都可以將其視為UTXO。由於我們沒有90元的UTXO,因此我們可以使用多筆小的UTXO作為交易輸入,也可以輸入一筆大的UTXO,一部分輸出給對方,一部分輸出給自己。

 

與現金系統不同的是,UTXO每次使用過後就會銷毀並形成新的UTXO。這個做法其實很好理解,UTXO名稱的含義就是未花費的交易輸出,一旦消費過了,那就不再是UTXO。

 

比如張三使用100元進行支付,那這筆100元的UTXO就變成「已花費」,並形成了90元和10元兩筆新的UTXO;若張三使用一張50元和兩張20元進行支付,那這三筆UTXO也會變成「已花費」,形成一筆90元的新UTXO。

 

找零地址

 

類似於現金系統,UTXO也是有找零概念的。張三支付100元,90元輸出給商家,10元輸出給自己,輸入給自己的這部分就相當於是找零。這時候張三需要設置一個找零地址來接收這10元輸出,找零地址可以是原先發出交易的地址,也可以是一個新的地址。

 

看到這裡,有的朋友可能會疑惑,為什麼要設置一個新的找零地址呢?像銀行體系一樣只用同一個賬戶不行嗎?

 

答案是可以,但不安全。

 

俗話說,財不露白,大部分人都不願意將自己的財富暴露在大庭廣眾之下。

 

由於包括比特幣在內的大部分UTXO系幣種的交易數據都是公開可查且可溯源的,多次使用同一地址收款會降低用戶隱私。

 

一旦用戶在某次交易中不小心暴露了自己的真實信息,那麼這個地址的真實歸屬也會暴露。壞人可以直接查看到這個地址中的餘額總數,嚴重者有可能帶來直接的人身安全問題。

 

設想一下如果哪天李老師暴露了一個真的有6位數的比特幣地址,會有多少法外狂徒盯上他。

 

如果你設置一個與發起轉賬地址不同的找零地址,安全性將得到極大的提升。因為找零地址會混在數個(至少是兩個)收款地址之中,壞人只能確定發起轉賬的地址是你的,但不知道你現在還有沒有錢,即使知道你有,也沒辦法確定錢是在哪個地址里,有多少。

 

如何切換地址?

 

通過CoinEx Wallet,您可以開啓UTXO模型幣種自動切換收款地址功能,不僅僅是收取找零資產,您在每次收款時都將使用不同的子地址,隱私性技能直接點滿。

 

開啓自動切換收款地址後,您也不需擔心地址過多難以管理,使用CoinEx Wallet這樣的HD錢包,您只需要掌握好助記詞就可以控制所有的子地址。

 

該功能目前支持BTC、BCH、BSV、LTC、DASH、ZEC、DOGE、DCR、LBC等UTXO模型幣種公,以BTC為例:

 

1. 打開CoinEx Wallet錢包,點擊進入BTC錢包,點擊【收款】進入BTC收款頁面

 

 

2. 點擊右上角【...】,點擊下方【切換地址】進入切換地址頁面

 

 

3. 在切換地址頁面,您可以看到當前BTC錢包的所有子地址及是否曾被使用。點擊右上角【+】可創建新的子地址,打開【自動切換】按鈕,您的每次收款都會自動切換地址。