code

2017年6月25日 星期日

Bitcoin 筆記 4 - A simple Cryptocurrency

一個最簡單的cryptocurrency

  • 至少要有製作coin的能力,此coin跟真實鈔票一樣要有編號
  • 要能驗證真的是某人製作出來的coin,透過digital signature scheme
  • 要能交易,每個交易statement都要使用digital signature scheme
  • 所有錢幣都是immutable! 一但被創造就不能更動任何資訊,只能被消耗毀滅
以下圖來說,首先Goofy(其identity為其某一組public key) 製作了一個coin,且有唯一獨特的編號,旁人可以透過Goofy的identity來驗證此錢幣的數位簽章的真偽。

Goofy可以把coin送給Alice,這個交易也需要Goofy的數位簽章,並且使用hash pointer指向前一個交易block(亦即Goofy創造錢幣這件事),需要hash pointer的原因在於證明此coin在交易鍊中最後的擁有者是誰,可以想做是真實世界中所有的產權交易紀錄。

此時Alice變成是這個錢幣的擁有者(藉由觀察之前的交易紀錄),當然她也可以交易賣給Bob。Alice簽署了交易的文件,並且也新增一個交易block,利用hash pointer指向前一個交易。




設計難題1: Double-spending attack

如果alice一幣兩賣呢? 以上面這種簡單的規範,是可以發生的,會變成下面的交易紀錄chain:


這是一個cryptocurrency要解決的難題!

一個解決辦法就是對整個交易紀錄的block chain做簽名,並且公佈出來,有了交易歷史資料,Alice就不可能一幣兩賣。



交易種類

1. 製作新錢幣
每個public id都可以製作自己的錢幣,在同一個製作錢幣的交易紀錄中,可以一次製作多個錢幣,每個錢幣有(編號, 面值, 擁有者)三個屬性,例如下面這個73號交易製作了三個錢幣,編號分別是73(0) 73(1) 73(2):

2. 給付
一個給付交易中,由於錢幣是immutable的,所以可能會消耗掉幾個創造出來的錢幣,然後同時又創造出幾個新的錢幣。例如以下#73交易:有三個尚未被消耗掉的有效錢幣68(1), 42(0), 72(3),在本次交易中將被消耗掉,而這三個錢幣的擁有者必須都簽署(每一個錢幣都要簽署一次,即便擁有者是同一人)此交易記錄,證明他們的確授權錢幣被消耗。這三枚錢幣的幣值總和假設是n,則本次#73交易必須創造出總和等值n的錢幣給予新的擁有者,才算是合法的交易。


設計難題2: Decentralization

上面改良過的錢幣系統,只依賴錢幣發行者,如果他不誠實,或是不玩了,整個系統就掛點,也就是說這是一個centralized system。而已經實做出來的Bitcoin是一個decentralized system,所以我們還得要加上些什麼機制,才能擺脫centralized authority。待下回分曉。


沒有留言:

張貼留言