比特幣的交易-電子貨幣(二)

在上篇文章中,著重介紹了數(shù)字簽名,在這篇文章中,深入到比特幣交易源碼的部分進行探究,并回答以下問題:

  • 如何給電子貨幣一個單位。
  • 如何將一個電子貨幣進行分割成多個電子貨幣。
  • 如何將多個電子貨幣進行整合成一個電子貨幣。
  • 如何表示一個沒有被花費電子貨幣。
  • 電子貨幣的交易流程是什么。

定義

有一些關鍵詞,翻譯成中文后,完全失去了原來的意思了。本文約定關鍵詞如下:

  • inputs: 交易輸入的集合,由一個或多個 input 組成
  • input: 一個交易輸入。一個交易輸入通常是由一個 UTXO 和數(shù)字簽名等信息組成
  • outputs: 交易輸出的集合
  • output: 交易輸出的新的電子貨幣。通常是由電子貨幣的值和驗證數(shù)字簽名的腳本組成
  • double-spend: 雙花。一枚電子貨幣可能被兩次或多次
  • UTXO: Unspent Transaction Output 的縮寫。通常引用一個 output
  • tx: Bitcoin transaction 的縮寫。交易。
  • txid: Transaction id 的縮寫。指的是交易的 hash 值。
  • satoshi: 1 BTC = 100,000,000 satoshi

電子貨幣

比特幣白皮書中對電子貨幣進行了定義:

將一枚電子貨幣定義為數(shù)字簽名鏈( a chain of digital signatures)。電子貨幣從所有者轉移給下一個人是通過,所有者使用私鑰,對交易 Transactions 和下一個人的公鑰進行數(shù)字簽名,并將數(shù)字簽名附在這枚電子貨幣(數(shù)字簽名鏈)的后面。收款人對數(shù)字簽名進行檢驗,就能校驗自己是否收到了電子貨幣。

一枚電子貨幣,從被創(chuàng)造出來開始,在不斷地被交易,被附上數(shù)字簽名。我們可以等價的認為一枚電子貨幣,就是一條數(shù)字簽名鏈。如:

  1. Owner 0 將他的數(shù)字簽名和 Owner 1 的公鑰附在了第一筆交易的尾端(從左到右)
  2. 比特幣系統(tǒng)驗證無誤后,這枚電子貨幣就屬于了 Owner 1。
  3. 此時 Owner 1 擁有的電子貨幣為: ... => Owner 0
  4. Owner 1 將他的數(shù)字簽名和 Owner 2 的公鑰附在了第二筆交易的尾端
  5. 比特幣系統(tǒng)驗證無誤后,這枚電子貨幣就屬于了 Owner 2。
  6. 此時 Owner 2 擁有的電子貨幣為: ... => Owner 0 => Owner 1
  7. 第三筆交易也是類似...
image.png

使用電子貨幣進行交易

在比特幣中,一枚電子貨幣的價值由 value 來衡量,單位是 satoshi。1 BTC = 100,000,000 satoshi。一筆交易本質就是價值的轉移,即所有者對他的一枚或多枚電子貨幣進行數(shù)字簽名,即 inputs。比特幣系統(tǒng)驗證后,創(chuàng)建一枚或多枚屬于收款人的電子貨幣,即 outputs。注意一枚電子貨幣,就像一張人民幣一樣,不能撕開成兩半用,但是可以將其兌換成若干個等值的電子貨幣。

舉個例子:Alice 支付 Bob 價值 0.2 BTC 的電子貨幣,Bob 收到一個 0.15 BTC 的電子貨幣,并且找零給 Alice 一個 0.05 BTC 的電子貨幣。

  1. Alice 創(chuàng)建一次交易。
  2. Alice 選擇一枚價值 0.2 BTC 的電子貨幣作為本次交易的 inputs。
  3. Alice 付給 Bob 一枚價值 0.15 BTC 的電子貨幣,并找零給自己 0.05 BTC 的電子貨幣,這部分是本次交易的 outputs。
  4. 比特幣系統(tǒng)驗證通過后,Bob 就收到了一枚 0.15 BTC 的電子貨幣。
image.png

當這筆交易結束后,Alice 那一枚 0.2 BTC 的電子貨幣,就被比特幣系統(tǒng)這個“造幣廠”作廢了,而“造幣廠”同時發(fā)行兩枚新的電子貨幣,一枚 0.15 BTC 的電子貨幣給了 Bob,一枚 0.05 BTC 的電子貨幣找零給了 Alice。只有不被“造幣廠”作廢的電子貨幣,才能用于交易,這樣就能夠防止 double-spend?!霸鞄艔S”發(fā)行的電子貨幣稱為 output,其中,沒有作廢的電子貨幣稱為 Unspent Transaction Output,縮寫為 UTXO。

交易的數(shù)據(jù)格式

下圖這是一筆早期比特幣交易。

image.png

主要包含四個獨立的部分:

  • 黃色部分表示的是:hash - txid(Transaction ID)
  • 藍色大括號表示的是:交易的描述信息和元數(shù)據(jù)
  • 粉紅色部分表示的是:inputs
  • 綠色部分表示的是:outputs

transaction 的一般格式

名稱 描述
version 比特幣系統(tǒng)的版本號
hash 本次交易的 hash 值
inputs 由 input 組成的數(shù)組
outputs 由 output 組成的數(shù)組
lockTime 值為 0,立刻執(zhí)行交易;值不為 0,在指定區(qū)塊高度或時間戳執(zhí)行交易。

output 的數(shù)據(jù)格式

名稱 描述
value 電子貨幣的價值,單位 BTC
scriptPubKey 通常是收款人公鑰等組成的鎖定腳本

input 的數(shù)據(jù)格式

名稱 描述
prevTxId 上一筆交易的 hash 值
outputIndex 上一筆交易 outputs 的 index
scriptSig 通常由付款人的數(shù)字簽名和收款人的公鑰等組成的解鎖腳本。

注意,input 實際上是一個引用。在計算交易時,是通過 prevTxId 和 outputIndex 屬性,找到上次交易的 output 作為本次交易實際的 input。這樣,每一個Tx Input都和之前的某個Tx Output關聯(lián)了起來。這就在代碼層面上定義了一條數(shù)字簽名鏈即一枚電子貨幣。

image.png

雖然本節(jié)談論的是電子貨幣,但重心卻在于交易,這是因為貨幣本身依附于交易而存在的。

我是這樣理解的貨幣的。財富是一切能夠滿足人類物質需求和精神需求的事物。在財富的需求端,人類對財富的種類需求各式各樣,張三需要吃飽,李四想要精神自由。在財富的生產(chǎn)端,由于生產(chǎn)要素的不同和社會分工的存在,生產(chǎn)的財富種類也各式各樣。貨幣的誕生,就是是為了滿足人類對財富交易的需求。因此我們可以說,貨幣的本源是交易,而不是一般等價物的本身。在探究比特幣系統(tǒng)的實現(xiàn)上,我們也可以發(fā)現(xiàn)它淡化了“貨幣”的概念,專注于“交易”本身。

參考文章:

Bitcoin: A Peer-to-Peer Electronic Cash System

Transaction

How a Bitcoin Transaction Works

揭秘比特幣和區(qū)塊鏈(五):深入理解比特幣交易的腳本

比特幣源碼研讀班-蔣宏偉

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容