從UTXO理解比特幣機制

要了解UXTO,首先我們要理解狀態和事件:

確定的行爲一定導致確定的結果,這是同步的本質。這在程序裏面叫做事件與狀態。

狀態是無法同步的,因爲狀態的信息非常巨大,所以計算機同步的任何信息都是事件。


接着來看比特幣中UTXO的概念:

比如一百萬人的賬戶數字,是一個狀態,我不需要把這一百萬人的信息全部發過來。

我只需要發,現在誰的賬戶變動了,這就是事件。

基於同步的實際需要,同步的東西就應該是事件,而UTXO,就是這個事件。一個底層數據結構。

如果你要得到狀態,你需要遍歷所有的未使用事件,這是龐大的工作。


那麼什麼是UTXO

UTXO 是 Unspent Transaction Output 的縮寫,Transaction act發音簡寫爲X。既-未花費的輸出。

UTXO是中本聰最早在比特幣中採用的一個具體的技術方案。


在比特幣的設計中,並沒有賬戶概念,那麼如何回答如下問題:

用戶A有多少錢?

UTXO的答案是,看多少筆交易給了A錢並且A沒有花費掉,A就有多少錢。

以某個人爲例,每一筆交易有N個輸出,每個輸出都包括如下信息

{

    address,//給誰

    assetid,//什麼資產

    value,//多少

}

找出所有 交易輸出地址爲A的並且沒有花費的交易,即可回答用戶A有多少錢。

花費與未花費

花費是什麼概念,每一個Transaction Output都猶如現實中的一張紙幣,他只有兩種狀態,屬於你或者不屬於你。

未花費就是該張紙幣屬於你,已花費就是該張紙幣不屬於你。

以某個人爲例,每一筆交易有N個輸入,每個輸入都包括如下信息

{

    txid,//該輸入是哪一筆交易的輸出

    n,//該輸入是上述交易的第幾個輸出

}

txid 和 n 可以對應到相應的交易輸出上,只要有txid 和 n 對應到交易輸出上。 該交易輸出稱爲已花費交易輸出

沒有txid 和 n 對應到的交易輸出,稱爲未花費交易輸出

聰明如你一定發現了,是不是如紙幣一樣只能花一次呢,是的。

你一定也發現了,現實中經常有找零的問題,UTXO的花費是否也存在找零問題呢,是的

找零

每個UTXO 都是一次性的,當用戶A給用戶B轉賬時,一定會碰到想轉的數額和自己的UTXO數值不匹配的問題。

此時採用的方法是,用多個輸出,有一些輸出還給自己,例如:

輸入(from x GAS:10)

輸出[0](to y gas:2)

輸出[1](to x gas:8)

這個機制稱爲找零,其實並不只是找零,如果用兜裏一把零碎utxo去轉賬,反而是找回一個整的。

輸入輸出都是由客戶端自行決定的。 可以在一筆交易中產生大量的輸出找給自己。


本文參考了:https://github.com/NewEconoLab/Docs

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章