code

2017年6月26日 星期一

Bitcoin筆記 5 - Decentralization

Centralization vs Decentralization

多數系統是混合式的,只是兩者占比多寡。以web email為例,雖然protocol是decentralized,但是現在商業世界中已經演變成幾家寡佔的局面,這事實上變成了一個centralized scheme。

Bitcoin在 “decentralization <-> centralization 光譜”的設計:
1. Peer to peer - 這很明顯是pure decentralization,因為任何人都可以加入bitcoin的系統(成為一個bitcoin node,之後應該會說明這是什麼),而不用經過其他人的允許。

2. 採礦(mining) - 在技術上是pue decentralization,但是就跟創業一樣,人人可以當老闆,但是很多行業有資本進入障礙。bitcoin採礦需要大量的資本,少數擁有大量資本的採礦者佔有了多數的bitcoin,以此觀點來看,採礦權是somewhat centralized。

3. 系統更新與開發 - bitcoin是一個分散式軟體系統,但還是得有少數核心開發者來維護和更新整個系統,目前是採取信任制度,所以這是絕對centralized。

Distributed Consensus

分散式系統的管理一直是一個大問題,例如facebook擁有大量的分散式節點(servers),每次有人按讚,記錄這個讚的所有節點必須要嘛都正確儲存,要嘛就都全部都不儲存(如果某些節點發生問題的話),必須達成共識(consensus)。Bitcoin的設計也面臨相同的問題,事實上bitcoin或多或少解決了這個問題,他本質上是一個distributed key-value store,用bitcoin的架構除了能生出其他類似bitcoin的虛擬貨幣,也能將這個distributed consensus架構應用在不同的領域。

定義distributed consensus如下。在一個擁有固定數量n節點的系統中,每個節點都會對系統產生input,並且遵守consensus protocol,而此protocol必須:

  • (1) 能結束,且結束時所有正確運行的節點要對input value達成共識 
  • (2) 此共識值必須是某個節點的input

從Bitcoin的角度來說,首先它是一個peer to peer system。當Alice要送coin給Bob,她會對所以其他peer to peer連接的nodes形成的網路進行broadcast,broadcast此次的交易,資料結構就是一個block chain:

所以Bob要收到coin的前提就是他也在這個bitcoin 網路中,監聽任何廣播出來的交易,看有沒有自己的名字在內,不過就算Bob沒連上網路來收coin,這個交易也註明了Bob的產權。

可以想見這個bitcoin網路一直有交易在廣播,每個節點必須對這些交易達成共識,考量效率因素,多筆交易會被放入同一個block中,實務上每個節點的共識最小單位會是一個block ,在任何時間點,每個網路中的節點都有一堆達成共識的blocks (of transactions),彼此透過block chain結構串連起來。例如下圖這一系列的3個blocks可以是所有節點目前都有共識的blocks:

當然受制於廣播機制的限制,任意時間點上的每個節點上達成共識的block chain可能有些許不同,例如以下三個人可能同時廣播某個包含幾筆交易的block,其中一個block會被系統選為先達成共識的block:


沒在這時間點被選中的blocks,將會在之後的時間點加入共識block chain:

以上是傳統的distributed consensus運作方式,但是Bitcoin不太一樣!

Consensus is hard

因為要在一個有延遲的網路達到所有節點的consensus是一件困難的事! 有延遲代表無法對某些事物在時間順序性上達到共識,這對設計consensus protocol來說很困難。此外peer to peer network本身就有很多管理上的問題,每個節點可能會crash,會是惡意的,並非都連結再一起,都對這個系統產生共識增加困難度。

Bitcoin並沒有特別解決distributive consensus的問題,針對節點惡意性來說,bitcoin利用人們願意使用貨幣系統的動機,來增加每個節點的誠實度(?),這在貨幣系統的使用情境下才會成立(有待之後解釋)。

針對時間共識性來說,bitcoin採取擁抱機率的approach,某個block加進去consensus block chain的機率,隨著時間拉長而指數性成長,實務上通常約一小時左右,所以他不用保證每個節點達成consensus的時間,而每個節點對某事物的共識則可以有信心地隨著時間拉長而建立。


沒有留言:

張貼留言