區塊鏈 | 詳解以太坊的工作原理
簡介
不管你們知不知道以太坊是什么,但是你們大概都聽說過以太坊。最近在新聞里出現過很多次,包括一些專業雜志的封面,但是如果你們對以太坊到底是什么沒有一個基本的了解的話,看這些文章就會感覺跟看天書一樣。 所以,什么是以太坊?本質上,就是一個保存數字交易***記錄的公共數據庫。重要的是,這個數據庫不需要任何中央權威機構來維持和保護它。相反的它以一個“無信任”的交易系統來運行——一個個體在不需要信任任何第三方或對方的情況下進行點對點交易的架構。
依然感到很困惑?這就是這篇文章存在的理由。我的目標是在技術層面來解釋以太坊的工作原理,但是不會出現很復雜的數學問題或看起來很可怕的公式。即使你不是一個程序員,我希望你看完之后最起碼對技術有個更好的認識。如果有些部分技術性太強不好理解,這是非常正常的,真的沒有必要完全理解每一個小細節。我建議只要宏觀的理解一下事物就行了。
這篇文章中的很多議點都是以太坊黃皮書中討論過的概念的細分。我添加了我自己的解釋和圖表使理解以太坊更加簡單一點。那些足夠勇敢的人可以挑戰一下技術,去閱讀一下以太坊的黃皮書。
好了, 讓我們開始吧!
區塊鏈定義
區塊鏈就是一個具有共享狀態的密碼性安全交易的單機。這有點長,是吧?讓我們將它分開來看:
- “密碼性安全”是指用一個很難被解開的復雜數學機制算法來保證數字貨幣生產的安全性。將它想象成類似于防火墻的這種。它們使得欺騙系統近乎是一個不可能的事情(比如:構造一筆假的交易,消除一筆交易等等)。
- “交易的單機”是指只有一個權威的機器實例為系統中產生的交易負責任。換句話說,只有一個全球真相是大家所相信的。
- “具有共享狀態”是指在這臺機器上存儲的狀態是共享的,對每個人都是開放的。
以太坊實現了區塊鏈的這個范例。
以太坊模型說明
以太坊的本質就是一個基于交易的狀態機。在計算機科學中,狀態機 是指可以讀取一系列的輸入,然后根據這些輸入,會轉換成一個新的狀態出來的東西。
根據以太坊的狀態機,我們從創世紀狀態開始。這差不多類似于一片空白的石板,在網絡中還沒有任何交易的產生狀態。當交易被執行后,這個創世紀狀態就會轉變成最終狀態。在任何時刻,這個最終狀態都代表著以太坊當前的狀態。
以太坊的狀態有百萬個交易。這些交易都被“組團”到一個區塊中。一個區塊包含了一系列的交易,每個區塊都與它的前一個區塊鏈接起來。
為了讓一個狀態轉換成下一個狀態,交易必須是有效的。為了讓一個交易被認為是有效的,它必須要經過一個驗證過程,此過程也就是挖礦。挖礦就是一組節點(即電腦)用它們的計算資源來創建一個包含有效交易的區塊出來。
任何在網絡上宣稱自己是礦工的節點都可以嘗試創建和驗證區塊。世界各地的很多礦工都在同一時間創建和驗證區塊。每個礦工在提交一個區塊到區塊鏈上的時候都會提供一個數學機制的“證明”,這個證明就像一個保證:如果這個證明存在,那么這個區塊一定是有效的。
為了讓一個區塊添加到主鏈上,一個礦工必須要比其他礦工更快的提供出這個“證明”。通過礦工提供的一個數學機制的“證明”來證實每個區塊的過程稱之為工作量證明。
證實了一個新區塊的礦工都會被獎勵一定價值的獎賞。獎賞是什么?以太坊使用一種內在數字代幣——以太幣作為獎賞。每次礦工證明了一個新區塊,那么就會產生一個新的以太幣并被獎勵給礦工。
你也許會在想:什么能確保每個人都只在區塊的同一條鏈上呢?我們怎么能確定不會存在一部分礦工創建一個他們自己的鏈呢?
前面,我們定義了區塊鏈就是一個具有共享狀態的交易單機。使用這個定義,我們可以知道正確的當前狀態是一個全球真相,所有人都必須要接受它。擁有多個狀態(或多個鏈)會摧毀這個系統,因為它在哪個是正確狀態的問題上不可能得到統一結果。如果鏈分叉了,你有可能在一條鏈上擁有 10 個幣,一條鏈上擁有 20 個幣,另一條鏈上擁有 40 個幣。在這種場景下,是沒有辦法確定哪個鏈才是最”有效的“。
不論什么時候只要多個路徑產生了,一個”分叉“就會出現。我們通常都想避免分叉,因為它們會破壞系統,強制人們去選擇哪條鏈是他們相信的鏈。
為了確定哪個路徑才是最有效的以及防止多條鏈的產生,以太坊使用了一個叫做“GHOST 協議”的數學機制。
GHOST = Greedy Heaviest Observed Subtree
簡單來說,GHOST 協議就是讓我們必須選擇一個在其上完成計算最多的路徑。一個方法確定路徑就是使用最近一個區塊(葉子區塊)的區塊號,區塊號代表著當前路徑上總的區塊數(不包含創世紀區塊)。區塊號越大,路徑就會越長,就說明越多的挖礦算力被消耗在此路徑上以達到葉子區塊。使用這種推理就可以允許我們贊同當前狀態的權威版本。
現在你大概對區塊鏈是什么有個理性的認識,讓我們在再深入地了解一下以太坊系統主要組成部分:
- 賬戶
- 狀態
- 損耗和費用
- 交易
- 區塊
- 交易執行
- 挖礦
- 工作量證明
在開始之前需要注意的是:每當我說某某的哈希, 我指的都是 KECCAK-256 哈希,以太坊就是使用這個哈希算法。