比特幣交易的基本單位是未經使用的一個交易輸出,簡稱UTXO。UTXO是不能再分割、被所有者鎖住或記錄於區塊鏈中的並被整個網路識別成貨幣單位的一定量的比特幣貨幣。比特幣網路監測著以百萬為單位的所有可用的(未花費的)UTXO。當一個使用者接收比特幣時,金額被當作UTXO記錄到區塊鏈裡。這樣,一個使用者的比特幣會被當作UTXO分散到數百個交易和數百個區塊中。實際上,並不存在儲存比特幣地址或賬戶餘額的地點,只有被所有者鎖住的、分散的UTXO。“一個使用者的比特幣餘額”,這個概念是一個透過比特幣錢包應用建立的派生之物。比特幣錢包透過掃描區塊鏈並聚合所有屬於該使用者的UTXO來計算該使用者的餘額。
在比特幣的世界裡既沒有賬戶,也沒有餘額,只有分散到區塊鏈裡的UTXO。
一個UTXO可以是一“聰”的任意倍。就像美元可以被分割成表示兩位小數的“分”一樣,比特幣可以被分割成表示八位小數的“聰”。儘管UTXO可以是任意值,但只要它被創造出來了,就像不能被切成兩半的硬幣一樣不可再分了。如果一個UTXO比一筆交易所需量大,它仍會被當作一個整體而消耗掉,但同時會在交易中生成零頭。例如,你有20比特幣的UTXO並且想支付1比特幣,那麼你的交易必須消耗掉整個20比特幣的UTXO並且產生兩個輸出:一個是支付了1比特幣給接收人,另一個是支付19比特幣的找零到你的錢包。這樣的話,大部分比特幣交易都會產生找零。
想象一下,一位顧客要買1.5元的飲料。她掏出她的錢包並努力從所有硬幣和鈔票中找出一種組合來湊齊她要支付的1.5元。如果可能的話,她會選剛剛好的零錢(比如一張1元紙幣和5個一毛硬幣)或者是小面額的組合(比如3個五毛硬幣)。如果都不行的話,她會用一張大面額的鈔票,比如5元紙幣。如果她把過多的錢,比如5元,給了商店老闆,她會拿到3.5元的找零,並把找零放回她的錢包以供未來使用。
類似的,一筆比特幣交易可以有任意數值,但必須從使用者可用的UTXO中創建出來。使用者不能再把UTXO進一步細分,就像不能把一元紙幣撕開而繼續當貨幣使用一樣。使用者的錢包應用通常會從使用者可用的UTXO中選取多個可用的個體來拼湊出一個大於或等於一筆交易所需的比特幣量。
就像現實生活中一樣,比特幣應用可以使用一些策略來滿足付款需要:組合若干小的個體,算出準確的找零;或者使用一個比交易值大的個體然後進行找零。所有這些複雜的、由可支付的UTXO完成的組合,都是由使用者的錢包自動完成,並不為使用者所見。只有當你以程式設計方式用UTXO來構建原始交易時,這些才與你有關。
被交易消耗的UTXO被稱為交易輸入,由交易建立的UTXO被稱為交易輸出。透過這種方式,一定量的比特幣價值在不同所有者之間轉移,並在交易鏈中消耗和建立UTXO。一筆比特幣交易透過使用所有者的簽名來解鎖UTXO,並透過使用新的所有者的比特幣地址來鎖定並建立UTXO。
對於輸出和輸入鏈來說,有一個例外,它是一種特殊的交易型別,稱為Coinbase交易。這是每個區塊中的首個交易。這種交易存在的原因是作為對挖礦的獎勵而產生全新的可用於支付的比特幣給“贏家”礦工。這也就是為什麼比特幣可以在挖礦過程中被創造出來,我們將在第8章中進行詳述。
輸入和輸出,哪一個是先產生的呢?先有雞還是先有蛋呢?嚴格來講,先產生輸出,因為可以創造新比特幣的coinbase交易沒有輸入,但它可以無中生有地產生輸出。
#歐易OKEx##比特幣[超話]##數字貨幣#