1. 程式人生 > >區塊鏈與狀態機

區塊鏈與狀態機

區塊鏈與狀態機

前言

在學數字邏輯的時候接觸過狀態機,區塊鏈, 以太坊智慧合約中也提到了狀態機,想把這兩個概念融合在一起理解清楚。

狀態機

狀態機的關鍵是轉移,會把轉移的狀態表現出來。而狀態機一般以狀態圖的形式呈現。
像參考中說的一樣,狀態機程式設計有點像系統程式設計,在windows程式設計中,一個視窗有多種狀態,簡單一點就是兩個狀態:選中和非選中狀態。當滑鼠點選視窗內部(事件發生,或者理解成一個觸發器trigger)時,視窗的狀態改變,由非選中變成了選中,而視覺化視窗看到的就是灰色的選單欄變亮。這就是一個簡單的狀態機。
現在讓我們放開想象,切換一下視角(或者專業一點,切換檢視view),假設我們成了windows這個龐大系統中的一個小程序,系統中還有千百個程序處於不同的狀態,或中止,或掛起,或正在執行。
現在,再切換一下視角,成為龐大網際網路中的一個小主機,想象一下蜘蛛網的樣子,每臺主機的狀態也有不同,或關機,或傳輸資料,或被攻擊,每臺主機都有不同的狀態。

github貪吃蛇
github貪吃蛇的狀態機示例

區塊鏈

區塊鏈中將各個節點視為狀態機,整個網路是在不斷動態變化的,通過狀態機可以把握整個網路的動態。

狀態機在區塊鏈中的應用

切換成區塊鏈內部視角,區塊鏈除了各個區塊外,本質上還是離不開網路。可以將區塊生產節點理解為生態系統中的生產者,其他節點基於區塊完成交易,驗證,廣播等各個動作,可以理解為消費者。每個節點都有不同的狀態,通過狀態機我們能描述清楚區塊鏈的網路節點部分。

  • 智慧合約接收外界輸入,內部執行程式碼(執行動作,進行狀態轉換),最終達到一個新的狀態

狀態機與共識演算法

達到共識,也就是節點之間達成一致。達成一致是一種動態的平衡,可以理解為是一種狀態。共識演算法要求節點每隔一段時間達成一次共識,從狀態機的角度上來看就是每隔一段時間達到某種狀態。

區塊鏈生態

生態,也可以理解為一個系統。僅僅從技術層面看,區塊鏈不止是區塊和鏈,還有網路,規則等一系列衍生。稍稍有點理解為什麼很多公司在關注區塊鏈生態了。

參考

狀態機理解
狀態機理解2