區塊鏈的數字貨幣

數字貨幣:

   從技術角度來說, 這加密貨幣的賬本,如比特幣可以被看作爲一個狀態轉移的系統, 在這個系統裏, 有一個包含了現在所有已存在的比特幣的持有者的狀態,並且有一個“狀態轉移函數”可以使用一個狀態和一個交易來產生一個新的狀態。在一個標準的銀行體系裏, 這狀態就是一個資產負債表, 當一個交易要求把X$的錢,從A轉移到B時, 那麼它的狀態轉移函數就會從A的賬戶中減去數量爲$X的金額,然後在B的賬戶中增加數量爲$X的金額。如果A的賬戶中沒有$X的錢,那麼狀態轉移函數就會返回一個錯誤。所以,我們可以做如下定義:

//使用一個狀態和一個交易才生一個新狀態,或者返回錯誤
APPLY(S,TX) -> S' or ERROR
在銀行系統中,它可以定義成這樣:
APPLY({ Alice: $50, Bob: $50 },"send $20 from Alice to Bob") = { Alice: $30, Bob: $70 }

或者:

APPLY({ Alice: $50, Bob: $50 },"send $70 from Alice to Bob") = ERROR


     這“狀態” 在比特幣中是指所有的已經被挖出的但是還沒消費的硬幣的集合 (技術上, “沒有被花掉的交易的產出(unspent transaction outputs)” 或 UTXO) ,每個 UTXO都有一個面值和一個持有者 (持有者是由20個字節組成的地址,其本質是一個加密的公鑰). 一個交易包含了一個或多個輸入,每一個輸入都包含了對一個已存在的UTXO的引用,和用持有者的地址所關聯着的私鑰來產生的一個加密簽名, 並且會產生一個或多個輸出, 每一個輸出包含一個用於添加到狀態的新的UTXO。

    這狀態轉移函數 APPLY(S,TX) -> S' 可以被大概的定義如下:
1. 在 TX中的每個輸入:
o 如果被引用的UTXO不在 S裏,返回一個錯誤.
o 如果提供的簽名和UTXO的所有者匹配不上, 返回一個錯誤.
2. 如果所有的輸入的 UTXO 的面值的和少於所有輸出的UTXO的面值的和,返回一個錯誤.
3. 返回一個所有輸入的UTXO都被移除的,所有輸出的UTXO都被加進的新的 S' .

第一個步驟的前半部分防止交易的發送方消費不存在的硬幣, 第一步驟的後半部分阻止了交易的發送方使用別人的硬幣, 第二個步驟是強制的價值保護。爲了使用這種支付方式,協議如下。 假設 Alice 想發送11.7 BTC 給 Bob. 首先, Alice 要找到一組她自己擁有的有效的UTXO ,且總數要至少不低於 11.7 BTC. 實際上, Alice 不會恰巧剛好擁有11.7 BTC; 她得到的最小值是6+4+2=12,她然後使用這3個輸入和2個輸出創建了一個交易。 這第一個輸出是 11.7 BTC ,是輸出Bob,第二個輸出是剩下的 0.3 BTC “找零”。如果 Alice 沒有要求把這個找零發送到她自己的賬戶上, 那麼這礦工可以要求擁有這個零錢.


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