- 區塊鏈108問
- 荊濤
- 1121字
- 2019-03-11 18:46:04
031.
交易的輸出和輸入是怎樣的?
比特幣交易的基本單位是未經使用的一個交易輸出,簡稱UTXO。UTXO是不能再分割、被所有者鎖住或記錄于區塊鏈中的、被整個網絡識別成貨幣單位的一定量的比特幣。
比特幣網絡監測著以百萬為單位的所有可用的(未花費的)UTXO,當一個用戶接收比特幣時,金額就會被當作UTXO記錄到區塊鏈里。如此,一個用戶的比特幣就會被當作UTXO分散到數百個交易和區塊中。其實,并沒有儲存比特幣地址或賬戶余額的地點,只有被所有者鎖住的、分散的UTXO。
“一個用戶的比特幣余額”是通過比特幣錢包應用創建的派生之物,比特幣錢包通過掃描區塊鏈并聚合所有屬于該用戶的UTXO來計算該用戶的余額。在比特幣的世界里既沒有賬戶,也沒有余額,只有分散到區塊鏈里的UTXO。
雖然UTXO可以是任意值,但只要被創造出來,就會不可再分。如果一個UTXO比一筆交易所需量大,會被當作一個整體而消耗掉,但會在交易中生成零頭。例如,用戶有20個比特幣的UTXO且想支付1個比特幣,用戶的交易就要消耗掉整個20個比特幣的UTXO且產生兩個輸出:一是支付了1比特幣給接收人,一是支付了19個比特幣的找零到用戶的錢包。如此,大部分比特幣交易都會產生找零。
比如,一位先生要買1.5元的飲料,他掏出自己的錢包并努力從所有硬幣和鈔票中找出一種組合來湊齊他要支付的1.5元。如果可能,他會選正好的零錢(如1張1元紙幣和5個1角硬幣)或小面額組合(如3個5角硬幣)。如果都不行,他會用一張較大面額鈔票,比如5元紙幣。如果他把過多的錢,比如5元給了商店老板,會拿到3.5元的找零,并把找零放回他的錢包以供未來使用。
同樣,一筆比特幣交易也可以有任意數值,但必須由用戶在可用的UTXO中創建。用戶不能再對UTXO進一步細分,就像不能把1元紙幣撕開而繼續當貨幣使用一樣。用戶錢包應用通常會從用戶可用的UTXO中選取多個可用的個體,拼湊出一個大于或等于一筆交易所需的比特幣量。
為了滿足付款需要,比特幣應用可以使用一些策略。比如,將若干小個體組合在一起,計算出準確的找零;使用一個比交易值大的個體進行找零。所有的這些組合,都是由用戶錢包自動完成的,并不為用戶所見。只有以編程方式用UTXO來構建原始交易,才與用戶有關。
被交易消耗的UTXO是一種交易輸入,由交易創建的UTXO是交易輸出。通過這種方式,一定量的比特幣價值就能在不同的所有者之間進行轉移,并在交易鏈中消耗和創建UTXO。一筆比特幣交易,不僅要通過使用者的簽名來解鎖UTXO,還要通過使用新的比特幣地址來鎖定并創建UTXO。
當然,對于輸出和輸入鏈來說,還有一個例外——Coinbase交易。這是一種特殊的交易類型,是各區塊中的首個交易。這種交易之所以會存在,主要是為了獎勵礦工。
輸入和輸出,究竟哪個是產生?嚴格來講,先產生輸出,因為可以創造新比特幣的Coinbase交易沒有輸入,但可以無中生有地產生輸出。