區塊鏈鼻祖比特幣之4:獨特交易設計

尹成發表於2018-04-26

在上面的一個簡單的交易中,我們通過數字簽名解決了訊息是誰發出的。我們沒有考慮一個問題,那就是如果尹成是個屌絲,他根本就沒有5個BTC怎麼辦?也許你很容易就想到了,驗證一下他的賬戶中的餘額是不是大於5BTC不就可以了嗎?但是比特幣中其實沒有賬戶餘額的概念,而只有交易,每個人都有歷史的所有的交易。


某人的收入並且沒有的花費的所有交易:

抽象:



對於小鄭來說,我有尹成的所有歷史交易記錄,所以我會知道他曾經收到過兩筆款7.0BTC,並且沒有支付出去,這個時候,小鄭當然就知道,尹成的錢是夠的,我可以放心的把我的牛交換給他。

一筆特殊的交易,找零給自己,所以輸出的地址為自己的:


交易鏈:


比特幣交易的基本單位是未經使用的一個交易輸出,簡稱 UTXOUTXO 不能再分割、被所有者鎖住或記錄於區塊鏈中的並被整個網路識別成貨幣單位的一定量的比特幣貨幣。比特幣網路監測著以百萬為單位的所有可用的(未花費的)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 交易。這是每個區塊中的首個交易。這種交易存在的原因是作為對挖礦的獎勵而產生全新的可用於支付的比特幣給贏家礦工。



網址:http://www.qukuailianxueyuan.io/



欲領取造幣技術與全套虛擬機器資料

區塊鏈技術交流QQ群:756146052     加群註明CSDN

尹成學院微信:加群註明CSDN


相關文章