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