上一篇文章我介紹了密碼學,通過簡單易懂的例子說明數字貨幣中應用的加密技術。今天會繼續幫大家搞清楚其它相關技術,數字貨幣是如何產生的。
數字貨幣需要考慮兩方面:貨幣的創造和貨幣的交易。
貨幣的創造
我們假設在一個簡單的數字貨幣中,銀行A可以隨意定義一個字符串uniqueCoinID作為幣。
這個幣用數字形式表達:
Coin0 = Enc(創建幣 + uniqueCoinID,銀行A的私鑰)
備註:Enc代表加密函數
實質上就是銀行A用自己的私鑰對"創建幣+uniqueCoinID"進行加密,這樣就是一個數字貨幣了。
如果銀行A把這個數字貨幣賣給用戶B, 那麼銀行A可以創造一個新的交易數據:
Coin1 = Enc(支付給 + 用戶B公鑰 + H(Coin0),銀行A私鑰)
備註:H代表哈希函數
在這裡使用用戶B的公鑰表示用戶B的身份。
用戶B可以任意創建公鑰來表示自己的身份,這個就是數字貨幣的匿名性。
這個數據公布之後,就表示用戶B收到了銀行A給他的數字貨幣。
同樣的,用戶B把數字貨幣賣給用戶C,那麼用戶B可以創造一個新的交易數據:
Coin2 = Enc(支付給 + 用戶C公鑰 + H(Coin1),用戶B的私鑰)
這個數據公布之後,就表示用戶C收到了用戶B給他的數字貨幣。
其實所謂某個人給了某個人的數字貨幣,只不過就是在帳本上記錄了這些交易記錄,然後修改每個人的餘額,上面的Coin0、Coin1、Coin2其實僅僅是一個交易記錄。
貨幣的交易
如果我們把很多的交易記錄放到一起,那麼就形成了一個區塊。可以認為一個區塊就是一個子帳本,子帳本裡面記錄了很多不同人之間的交易。
通過追溯,我們就可以知道誰給了誰錢,然後就知道每個人帳戶裡面有多少錢。
但是這個會造成一個問題,就是多重支付:
用戶B可以把這個幣Coin1支付給用戶C之後,在用戶D還沒收到這項交易通知時,由於網絡傳遞存在延遲,用戶B還可以把Coin1支付給用戶D。
這樣用戶B就可以用同樣的數字貨幣進行多重消費而無法避免。
為了解決雙重支付的問題,我們需要修改一下數字貨幣協議的內容。
下圖顯示了數字貨幣產生和貨幣交易的過程:
其中顯示了要消耗的幣的代號以及需要交易的價值和接收者。transID73 代表了一個帳本(區塊),代號73。
左圖在貨幣產生過程中,一共產生了三次貨幣,金額分別是 3.2、1.4、7.1。產生的貨幣分別給了三個人,用recipient(接收者)標出。
右圖顯示了交易,產生的貨幣,通過交易給了不同的人。交易的區塊最後有一個發送方的籤名,就是用發送方的私鑰加密這個區塊,用來確認這個確實是發送方發出來的。
在這種情況下,銀行A就可以建立起一個區塊鏈,如下圖所示:
每個區塊鏈都表示產生貨幣或者交易貨幣。每個區塊鏈都包含著上一個區塊鏈的哈希值。
當新的區塊產生的時候,銀行A會來驗證區塊裡面的每一項交易是不是有多重支付的嫌疑。如果每個交易都是合法的,那麼銀行A就會把新的區塊加到鏈上,從而形成區塊鏈。
大家可以認為區塊是一個小帳本,把小帳本合起來變成了一個大帳本,也就是區塊鏈。
這個可以解決雙重支付的問題, 但是需要銀行A來執行,並沒有去中心化。
預告:下一篇文章我會介紹比特幣是如何實現去中心化的。
我會持續分享和區塊鏈相關的乾貨,還會有一些投資建議和挖礦技巧,讓小白也能看得懂。想上車的小夥伴們請多多關注、評論、點讚、轉發,非常非常感謝!