您當前的位置:首頁 > 攝影

以最簡明的方式創造新世界: 關於以太坊,非技術的你值得了解的所有技術細節

作者:由 元天空之城 發表于 攝影時間:2022-04-22

同步發表公眾號: 元天空之城

寫在前面

一直醞釀著要寫這樣一篇文章。

這是一篇寫給非技術同學看的技術文。但本文企圖做得比大多數科普文更深入一些:我們探討以太坊的技術本質,希望讓具有大眾計算機使用水平的同學對以太坊的技術框架有一個初步的明確概念。

寫得很吃力,結果也不一定討好,初心倒是明確的。

如讀者不是隻想了解幾個時髦的Web3詞彙作為談天的資本,而是準備投身擁抱Web3,那麼無論本職工作是否做技術,能對以太坊的底層原理有本質性一些的理解,肯定不是壞事。

作者開始深入Web3和以太坊的時候,作為技術出身的人, 也深感這個世界眾多基礎概念的全新性。當然,也見過一些才學過人的朋友,比如團隊的產品經理帥哥,從零入門到成長為Web3區塊鏈的專家完全無障礙,不僅做得一手好產品設計,還能衝在最前線替技術部門做技術難點攻關。。。

但,這樣的人實在太少了。

對於大多數人,作者認為Web3的入門學習曲線可能是比較陡峭的。許多人或許還停留在知其然不知其所以然的階段。

因此,萌生了這個想法,寫一篇給所有非技術背景而需要真正理解Web3區塊鏈的朋友們,把非技術背景的朋友們值得了解的技術知識點, 用一種能聽得懂的方式講出來。

寫這樣的技術內容,還指望寫得深入淺出不枯燥, 挑戰真的很大。

想起從學生時代就很尊敬的一位臺灣技術專家作者, 能把一本純技術書籍寫得如有小說一般的蕩氣迴腸之感。不敢期望本文達到如許高度,但如果它確實小小幫助了那些不做技術的朋友們更深入的理解了以太坊,本文目的就達到了。

以太坊是一個計算機

以太坊是什麼?當然,已經有很多的文章講以太坊,讀者多少了解過的話,應知道以太坊是第二代區塊鏈網路(有別於第一代比特幣網路),以太坊的通用貨幣叫做以太幣。在以太坊之上能執行以智慧合約為基礎的分散式應用(dapp)。

先看看百度百科上以太坊的詞條:

以太坊

(英文Ethereum)是一個開源的有智慧合約功能的公共區塊鏈平臺,透過其專用加密貨幣以太幣(Ether,簡稱“ETH”)提供去中心化的以太虛擬機器(Ethereum Virtual Machine)來處理點對點合約。

這個解釋沒問題。大家也都知道以太坊是一個公共區塊鏈平臺。

但, 如果從技術角度深入一點點去理解以太坊,以太坊的本質本質,可能會讓讀者有些意外:

以太坊本質上是一個世界性的通用計算機。

這句話完全就是字面上的意思。沒看錯,以太坊本質上是一個計算機,而基於它的全球分散式特性,它無疑是世界性的。

為什麼說以太坊是計算機?

以太坊的締造者們從一開始就希望把以太坊網路打造用於通用計算目的。

這是一個非常美好的設想:使用分散式網路構建一個全世界人們都可以參與的通用計算系統。

注意,和現在的主流網際網路體系不同,以太坊分散式網路是統一的單一整體。在計算機科學上,我們說以太坊整體是一個圖靈完備的狀態機。

等等,“圖靈完備”這詞太學究了,讀者只需瞭解,這代表了可以進行通用計算的能力。這點以太坊和第一代比特幣網路是完全不同的: 比特幣網路沒有通用計算能力。

另外,所謂“狀態機”又是什麼呢?這個更好理解,用個人計算機做類比:當計算機運轉時,CPU從記憶體載入指令和資料進行運算,計算完畢後把中間運算結果儲存在記憶體(更新“狀態”),然後進行下一次的載入和計算。類似這種需要儲存狀態的邏輯機器就是狀態機。

儘管上面的解釋把計算機的執行方式做了特別簡化的描述,但現在的計算機系統本質上就是一個“計算-儲存狀態-再計算” 的所謂圖靈完備狀態機。

那麼以太坊呢,說它是一個通用計算機,也就是說以太坊整體上也是一個 “計算-儲存狀態-再計算”的邏輯機器。只是和個人計算機把狀態儲存在機器的記憶體(進而記錄在硬碟) 不同,以太坊的“狀態”,記錄在分佈全球的數以萬計的節點上。

以太坊的突破性創新在於,它把儲存程式計算機這樣的通用目的計算架構與去中心化區塊鏈相結合,因此建立了一個

分散式的單體狀態世界計算機

。無論以太坊的程式執行在任何地方,都能夠產生一致的狀態,透過全體共識規則確保資料正確和安全。

以太坊的資料記錄方式是在每個節點上都儲存同一份資訊。也就是說,任意一個以太坊節點, 都記錄著以太坊網路的全部資訊。特別形象的,這樣的節點叫做“

全節點

”。這意味著以太坊網路的全部狀態資訊都完整同步在每一個節點上。只要不是所有的全節點同時被摧毀,以太坊就可以重生。這是多麼強的生命力。

要裝下以太坊整個網路的資訊,全節點需要有多大呢,這個量級遠比讀者想象的要小得多:今天,以太坊全部區塊資訊的總大小是345GB。這個容量相對於今天個人計算機動則好幾個TB的硬碟容量實在是小意思。以太坊的總資訊容量每天都在不斷的增加,但速度不算特別快,因為在以太坊網路記錄資訊需要支付非常不菲的費用,這也是以太坊的重要特點:

所有的運算操作和資料記錄都是要花真金白銀的。

前面提到,“圖靈完備”這個詞描述了以太坊系統的通用計算特性。以太坊可以跑使用者定義的通用程式碼,這些程式碼就是所謂的

智慧合約

,這是以太坊區別於第一代比特幣網路的根本創新。

正由於智慧合約的支援,以太坊可以完成個人計算機所能完成的通用計算任務,從計算機科學理論看,以太坊就是通用計算機,也就是那種“計算-記錄狀態-再計算”的狀態機。

既然說以太坊是“狀態機“,不妨繼續問兩個問題:什麼時候以太坊的狀態會更新呢? 以太坊是不是像<終結者>裡的天網那樣自動執行呢?

答案或許又讓讀者意外了。以太坊雖然是世界計算機,全節點遍天下,但它的執行機制是徹底不併行的。以太坊是一個不折不扣的單執行緒系統。

也就是說,以太坊計算機先把一個任務計算完畢,然後計算結果“狀態”更新到全世界各個節點,它才會再繼續下一個任務。

以太坊使用者可以

併發(Concurrency)

的提交交易申請, 但以太坊不是

並行(Parallelism)

處理的。所有交易都試圖改變整個全域性狀態,以太坊選擇逐個處理交易。

讀者也許聽說過以太坊網路上越來越嚴重的擁堵排隊問題,現在可以理解了:這是以太坊的單執行緒任務處理機制的鍋。在以太坊上執行的任務,只能乖乖排隊按順序來,用的人多了不堵才怪。

如何解決以太坊的擁堵問題,是當今區塊鏈技術研究的一個熱點。比如大家可能聽過的Layer2/側鏈等新詞,主要目的都是為了規避以太坊的主鏈擁堵問題(以及高昂的執行費用)

回頭來看,從任務的執行機制角度,以太坊可比讀者手頭正在用的個人計算機甚至手機系統都簡單多了。現在的個人計算機系統都是各種實時多工,各種後臺前臺程式併發執行;以太坊除了資訊狀態同時存於分佈世界的各節點,在系統執行方式上,反而是特別簡單的單執行緒模式。

另外,以太坊底層有一個持續運作的所謂作業系統嗎,這個世界計算機是不是有點類似《終結者》裡的天網那樣自動和智慧化呢? 或者,至少有個類似計算機的作業系統來控制整體執行?

答案是:非也。

以太坊上完全沒有“背後自動執行”這種說法。以太坊的所有計算任務都以“交易”來驅動,交易由使用者持有的以太坊地址賬戶發起,只有成功和不成功兩種結果。交易成功, 則在以太坊記錄全域性狀態更新; 交易不成功, 則全域性狀態保持不變。

值得再重複一下,

以太坊是一個全域性的單體狀態機,交易是唯一能夠讓這臺狀態機向前推進並改變狀態的東西。

以太坊上的智慧合約程式碼不會自動執行。以太坊也不會在“後臺”執行。所有這一切,都是由使用者交易觸發的。

所以, 儘管同為通用計算機,但以太坊的執行模式和個人計算機系統是很不同的。

至於以太坊計算機是否有神秘的人工智慧, 甚至有沒有“天網”的雛形, 讀者也可以直接回答了:以太坊沒有任何自動執行機制,更不說人工智慧;它不是天網,只是一個很好的分散式平臺。從任務執行的底層機制來看,它恐怕比你桌面上的膝上型電腦還要簡單很多。

去中心化的本質和基礎

我們總說,以太坊為代表的Web3網路是去中心化的網路。

先來個三連: 什麼是去中心化?為什麼能去中心化?誰來保證去中心化交易的可信和安全呢?

所謂中心化,在當前的網際網路模式意義上,是指在網際網路上進行的使用者之間的互動,都基於一個可信的公司維護的網際網路服務。從技術上,就是典型的伺服器-客戶端模式。

比如一個看似簡單的點對點轉賬:使用者A透過手機微信或支付寶給另外一個使用者B當面掃碼轉賬100塊。實際上,需要A和B都信任的騰訊或螞蟻金服的後臺伺服器來操作雙方賬戶,伺服器把使用者A的賬戶金額減少100塊,把使用者B的賬戶金額增加100塊,並確保這兩個操作一起發生。因為微信支付或者支付寶已經有足夠廣泛的使用,使用者“信任”它們的後臺伺服器不會出差錯。

我們能看到,當前網際網路模式下,網際網路服務的特點是:

服務由特定的公司運營。如果伺服器宕機,使用者服務就可能中斷。當然,無數工程師嘔心瀝血確保了各種網際網路中心化服務的穩定性。

基於這些服務,使用者之間的互動,即使看起來是完全個人對個人的,都透過一箇中心伺服器完成。這背後的底層邏輯是,使用者“信任”這些公司伺服器是公正的,它們按照所承諾的方式服務使用者。

這也是當前大公司提供的網際網路服務看起來比小公司更“可靠”更有“信譽”的原因。因為大公司當前的使用者體量,服務的技術和運營能力更可能贏得使用者“信任”。

所以,在本質上,當前的網際網路應用模式,是

提供服務的公司做了保證, 使用服務的使用者選擇了相信。

那“去中心化”是什麼?最基本的一點,就是沒有中心化伺服器。以太坊上並沒有一個架設在眾生(眾節點)之上的總伺服器, 也沒有任何提供特定服務的伺服器。或者說,

以太坊上,並沒有面向特定應用的伺服器的概念。

只有完全平等的“全節點”,每一個都儲存著全網路的資訊狀態。

在以太坊上,任何使用者都可以直接發起和另一個使用者的交易,這個交易的合法性和正確性不需要一個大公司伺服器來保證;而也正是因為使用者互動可以徹底的點對點化,Web3使用者再也無需把自己的賬戶資訊交由某個大公司保管以完成服務。

使用者的賬戶資訊完全在自己手中,當用戶A和B發生了交易比如以太幣轉賬,這個操作由以太坊網路整體確保正確完成。

前面說過, 以太坊網路本質上是一個通用計算機;使用者發起的交易,是唯一驅動這個世界計算機產生“狀態變化”的機制。但前面也說過,以太坊並沒有超越的人工智慧;或更明確的,在以太坊上沒有任何掌控全域性的程式來擔任網際網路的伺服器仲裁者的角色。

那麼,問題來了:沒有人或AI去監管,又做到了交易的完全可信賴性。這麼妙不可言的事情,究竟是怎麼實現的呢?

答案是, 依靠的不是“信任”,更不是魔法,而是一種基礎和絕對可信的科學 — 數學。

哈哈,讀者不必擔心,本文不會指望大家一起重溫數學,以下用一種簡單的解釋來講一下,數學如何從最底層支援了這個美妙的去中心化系統。

有一種很有趣的數學,叫做

非對稱密碼學

大家稍微記住幾個名詞:公鑰,一個大的數字,一般用一串16進位制數來表示。私鑰,一個更大的數字,用一串更長的16進位制數字來表示。數字簽名,是一種資訊加工方式 ,把任意二進位制資訊透過“私鑰”進行數學運算處理,得到了一個被稱之為數字簽名的字串。

簡單類比一下,可以把公鑰看做是賬戶號碼,號碼對外公開;私鑰是密碼,只有使用者自己知道。公鑰和私鑰一一配對。一個奇妙的屬性是,知道私鑰,可以很簡單推出公鑰;但反過來不行,知道公鑰,是無法推匯出私鑰的。這也是“”非對稱“的來源。

“非對稱密碼學” 這種美妙的數學理論保證了一個結果:任何一個拿到公鑰和數字簽名信息的人,都能透過標準的數學方法來確認,這個數字簽名是這個公鑰所對應的私鑰加工或者說“簽名”而成的;並且數學理論確保了,只有這個私鑰才能得出這個數字簽名結果。

所以,數學理論給我們保證了,這個帶有數字簽名的資訊,確實是由擁有對應私鑰的人“簽名”發出來的, 其他人無法偽造。

有點意思, 但和我們說的去中心化交易有什麼關係呢?

在以太坊體系裡,

我們每個人的賬戶地址,是一個公鑰

。這不是比喻,而是字面意義上的。

如果讀者使用過以太坊相關軟體, 都知道以太坊的賬戶是以十六進位制地址來表示的, 這個地址不是別的,正是密碼學意義上的公鑰。

那麼, 使用者的私鑰在哪裡呢?

事實上, 每個第一次使用以太坊的人都會被Web3賬戶管理軟體提示, 要記住一串助記詞,並會被軟體反覆提醒,不要告知任何人助記詞,更不要丟失助記詞, 否則賬戶再也找不回來。這個助記詞,就是私鑰的某種對映;簡單一點來理解,這一串助記詞是私鑰本身。

Web3的賬戶管理軟體,也就是所謂的Web3“錢包”,正是替使用者在本地儲存管理私鑰,以及幫使用者生成經過私鑰數字簽名的交易請求發到以太坊,從而成為使用者Web3網路的事實入口。

(這裡還有個小細節,用過MetaMask等Web3錢包的讀者會知道, 要額外設定一個密碼進入錢包。但一定要注意,這個密碼並不是以太坊的密碼。以太坊賬戶沒有密碼,使用者的私鑰就是訪問賬戶的唯一和最高憑證。這個密碼僅僅用來保護在本地儲存的以太坊賬戶私鑰資訊,甚至密碼本身都不做聯網儲存同步:私鑰資訊本身不會同步到伺服器,錢包密碼就沒有任何理由做線上同步了。錢包工具是一個本地化軟體。)

當一個以太坊賬戶對另外一個賬戶發起交易時,這個交易請求的所有資訊會被賬戶的私鑰進行數字簽名,簽名信息連同交易請求資料本身以及賬戶地址(也就是公鑰),被一起廣播到以太坊上。

在以太坊上,這個發出來的交易請求並沒有任何中心化的伺服器來負責,大量收到廣播請求的全節點會同時確認這個交易的合法性。(這裡又隱藏了一點點細節:只有那些希望獲得系統獎勵的全節點才會主動去驗證使用者交易合法性, 並以工作量贏得系統獎勵的以太幣 - 這正是所謂的“挖礦”。)

以太坊交易的驗證方式正是用了前面介紹的密碼校驗機制:發起者的賬戶地址資訊是公鑰,同時又有了聲稱從這個地址發起的交易請求資訊和賬戶私鑰對交易資訊所做的數字簽名。那麼,任何一個全節點都可以透過公鑰+數字簽名的校驗,來確認交易請求確實來自於這個以太坊賬戶。

也就是說,以太坊任何一個節點都可以非常篤定的確認一個交易不是被偽造的而是真實來自於賬戶擁有者。確認這一點後,每個以太坊全節點都可以愉快的按照交易請求去執行操作,並把新的狀態結果記錄在以太坊資料鏈上了。

如果讀者到這裡還沒暈,那麼恭喜,你已經明白了以太坊區塊鏈最核心的密碼學通訊機制。

這種建立在密碼學理論上的可信賴通訊機制,從根本上做到了無需中間商,噢,不,無需中心伺服器也能讓任意兩個賬戶完成交易。

確實無需第三方的信任,所有操作都是點對點的;或者說,這個點對點交易的“可信任”,是由數學理論所支援的。

數學保證了,在以太坊上有人說給你一筆錢(發起一個交易), 你能立刻判斷, 這是一個騙子,還是天上掉了個餡餅。

最後我們可以相信的, 不是承諾, 而是數學:)

以太坊賬戶裡究竟有什麼

上一節已經提到了以太坊賬戶。如果對上一節關於 “以太坊建立在密碼學基礎上的可信賴通訊” 不覺厭煩, 甚至還和作者這般,有種“”竟如此巧妙“”的愉悅之感,那不妨再多聊幾句以太坊賬戶。

以太坊賬戶裡放著什麼?一句話回答,以太坊賬戶裡基本沒什麼內容。

以太坊的賬戶有兩種, 一種是人用的,叫

外部賬戶

;一種是智慧合約用的,叫

合約賬戶

“智慧合約”這個詞實在是顯得高深莫測,但實際上所謂智慧合約就是一段程式碼,而且在以太坊的機制下, 智慧合約程式碼一般非常的短 ,數百行的智慧合約就已經是龐然大物。

無論外部賬戶還是合約賬戶 ,在以太坊上都用一個地址來表示。

對於外部賬戶,即人所用的賬戶,裡面只有一個數據欄位,那就是這個賬戶所擁有的以太幣數額。

而對於智慧合約賬戶,資料稍多了一點點,除了以太幣數額欄位(沒錯,智慧合約賬戶本身也獨立擁有以太幣) 還有資料欄位儲存智慧合約的程式碼本身, 以及這個智慧合約所需的資料儲存區。

噢,是了。除了以太幣數額之外, 以太坊賬戶裡還有一個內部計數, 叫做nonce, 這是賬戶交易次數的統計, 每次交易後遞增加1。

這個計數很重要, 用來防止“可重用攻擊”。簡單的說,如果別有用心的人把這個賬戶曾經發出的交易資料複製一次再發出來,因為資料包裡的公鑰和簽名都為真,若使用者賬戶裡沒有這個單向遞增的交易計數供校驗,交易就有可能被重複執行多次。

以太坊賬戶的體系結構特別簡潔, 正如以太坊區塊鏈網路是由最簡明的密碼學通訊連線起來一樣。

智慧合約的程式碼也很簡潔,不過智慧合約的強大之處還在於,整個以太坊的程式碼都可以“為我所用”:每個智慧合約程式碼都可以自由呼叫另一個智慧合約。這特別類似搭樂高積木,每塊積木看起來平淡無奇,但無數積木組合在一起,可以構建一個輝煌的大廈。

以太坊這樣的架構讓人想起了螞蟻的社群組織。每一個螞蟻所能做到的很有限, 但整個蟻群在一起,彷彿就有了一個更高等級的智慧化存在。這存在不是人工智慧意義上的, 而是社會學意義上的。

以太坊的締造者們一定是一群理想主義的人,只有這樣的人,才會執著於構造出一個新世界,讓這個世界基於最簡明的規則來運作,卻能自行衍生出複雜而強大的社會功能邏輯。

在深入瞭解以太坊的過程中, 我們將一次又一次的感受到這一點。

以太幣,gas

前面多少涉及到了以太坊貨幣(簡稱“以太幣”)概念, 這裡繼續再掰掰清楚。

以太幣現在的價值不菲, 一個以太幣要好幾千美金。誠然, 這個價值波動比較大, 也有很多關於區塊鏈幣的價值真實性討論。但作者可以判斷,這個價值會波動,但以太幣的價值存在不會消亡。原因有很多種,這裡只討論一個技術性和根本性的:以太坊幣最基本的功能是用來做什麼。

是的,以太幣是以太坊生態上的通用貨幣, 它現在可以購買很多虛擬物品, 也可以兌換現實世界的貨幣,但以太幣的內在價值,在技術層面上,是設計為以太坊網路的計算資源購買力。

這裡需要談到以太坊運作的一個核心概念,

運作需要支付相應費用

大家已經知道,在以太坊上, 每個使用者可以自由發起全網同步的運算即“交易”。只是,這個交易消耗全網路計算資源,對應的費用,由發起賬戶支付。以太坊用一個單位

gas

(英文意思是汽油,特別形象)來衡量執行具體操作所要花費的計算和儲存資源。

和當前網際網路生態裡使用者基本免費的網路服務使用理念南轅北轍, 任何以太坊使用者希望發起一次交易,都需要先支付對應的gas費。對於特定操作gas費是個固定值,比如:相加兩個數值需要消耗 3gas計算一個雜湊值需要消耗 30gas傳送一個交易請求需要消耗 21000gas

以太坊上用來購買gas的不是其他東西, 正是以太幣。有趣的是,以太幣購買gas費的“匯率”還是浮動的。

因此, 如果我們確信以太坊網路有運轉下去的價值,那麼以太幣就永遠有價值,因為它對標了以太坊網路的運算資源。

聊到這裡,讀者有沒有想過,為什麼以太坊上的運算設計為需要付費呢?

天下沒有免費的午餐,使用者付費也算天經地義。不過, 這裡還有另外一層原因:以太坊是一個世界通用計算機,而一個通用計算機的運算是可以進入死迴圈的。

如果個人計算機迴圈死鎖了,那麼可以簡單拔插頭重來。但是以太坊網路可沒有插頭啊,怎麼避免以太坊的運作被惡意的迴圈死鎖呢?

除了在底層設計上一再注意,最重要的就是引入gas費用, 每次運算操作都需要支付費用, 這樣,無論如何都會有費用花完的那一刻,死迴圈計算也就自然而然終止了。

gas是以太坊極其重要的組成部分。建立交易的使用者需要表明他願意為交易執行所付出的價格,防止網路中無意或者惡意的無限迴圈以及其他形式的計算資源浪費。

一個美妙的設計,不需要設定複雜的規則來約束,只需要談談利益。

人性就是趨利的,這也是某種人性的弱點。

以太坊的設計反過來利用了人性來保證系統的運轉

。這個設計思路在整個以太坊系統設計裡不止一次的體現。

人慾即天理, 以太坊真正實踐了這句話。

錢包, 遠端客戶端

Web3錢包是區塊鏈網路使用者每天都打交道的工具,它是事實上的Web3入口。

第一次接觸Web3錢包的人, 大機率都會顧名思義把它類比成微信支付錢包或者支付寶錢包, 即一個服務端支援的存著某種貨幣的系統。

這是對Web3錢包的最大誤解。Web3錢包是一個本地化的區塊鏈賬戶管理工具,本地化意味著它並不聯網儲存個人賬戶資料。

有耐心看到這裡的讀者應該很清楚,使用者在以太坊上的所有活動都是透過自己的以太坊地址賬戶向以太坊網路傳送交易請求來驅動的。

那誰來幫使用者做這個事情呢,正是web3錢包軟體。

比如,當用戶打開了OpenSea(當今最大的NFT交易市場) ,下單購買一個NFT時, 網頁會調起瀏覽器的MetaMask錢包外掛。這個MetaMask外掛裡儲存著使用者的以太坊賬戶地址私鑰, MetaMask錢包幫助使用者打包好交易請求資料,並和使用者確認所需費用,然後把這個交易請求資訊發到以太坊網路上以完成交易。

有讀者會問,萬一使用者丟失了以太坊私鑰怎麼辦,答案是。。。涼拌。

如果還記得,私鑰是以一串助記詞的方式呈現給使用者的,如果這串助記詞丟了,而本地儲存金鑰的錢包軟體也不小心刪除了,對應的以太坊地址賬戶就永遠無法訪問了。

那麼,是否有可能出現一箇中心化的服務來託管使用者金鑰呢?

這樣的好處是,使用者還有機會透過傳統的身份找回方式把自己的賬戶金鑰從伺服器恢復回來。從易用性上考慮這是可行的,也已經有一些Web3產品比如

http://

MetaNotey。IO

正在在做這個事情 - 向用戶提供Web3賬戶的託管服務。

畢竟web3錢包也是有使用門檻的,託管之後使用者的Web3學習曲線會更平滑; 另一方面,如果允許一箇中心化伺服器託管自己的Web3賬戶,則又回到了傳統網際網路的命題,失去了100%的隱私安全。

隱私性和易用性很可能是無法同時100%被滿足的。我們終有取捨。

此外, 類似MetaMask這樣的賬戶管理工具有另外一個名稱:

遠端客戶端

在以太坊這樣的區塊鏈網路上,所有的節點都是所謂的客戶端(這名字也不盡準確,因為全節點也承載了對以太坊使用者服務的功能)。各全節點在以太坊裡的地位是平等的,都包含著整個以太坊的完整資訊。

但是,很多使用者並不想成為一個全節點, 而只想訪問使用以太坊網路。於是就衍生出了遠端客戶端的概念。遠端客戶端不需要本地儲存整個以太坊網路的資訊, 它們對以太坊的資訊都是透過訪問其他全節點完成的。遠端客戶端負責把賬戶發起的交易向以太坊廣播並接收結果。

MetaMask這樣的Web3錢包,本質上是一個遠端客戶端。

代幣

“代幣”是一個經常被提起的概念。是的, 又一個語義上不容易理解的詞。

代幣是英文token的直接翻譯, 指的是以太坊上使用者可以透過智慧合約自行釋出的虛擬幣。只要介面滿足一個協議ERC20標準,任何智慧合約都能成為某個代幣的發行方。

為什麼常說所謂發幣是“空氣幣”和“割韭菜行為”呢?道理其實很簡單,因為每個人都可以自由打造智慧合約,去“發行”某種代幣。

“發行”是個聽起來很高階的詞, 但在技術層面上,代幣合約做的事情可以非常簡單,就是幾句程式碼宣告某個數量的一種代幣,並且透過標準的ERC20介面,把代幣授予不同的以太坊賬戶。

這裡有個非常有趣的值得討論的細節:前面說過,每個以太坊帳戶都有一個欄位記錄著這個帳戶的以太坊幣數額。那麼, 這些授予的代幣數額,是不是也記錄在使用者自己的以太坊帳戶裡呢?

情理上貌似應該如此,但答案會出乎你的意料:並不是。

你的以太坊賬戶裡唯一一種數額記錄就是以太幣數額。而各種各樣的代幣授予以太坊各賬戶的代幣額度, 只記載在創造了這個代幣的智慧合約的資料區裡。

讀者可以想象一下,在這個代幣智慧合約的資料儲存區裡有一個表格, 表格裡的每一行都記錄著 “地址xxxxxx: 擁有xx個代幣”。

對,僅此而已,不可思議的簡單,甚至可以說有點簡陋。

但這就是全部的真相,代幣合約以一個最直觀的方式,把每個賬戶的代幣額度記錄在一個公開可見的表格裡。

如果深究一下,這種甚至並不記錄在個人賬戶裡的代幣數額,為什麼能夠得到公眾認可呢?這也得益於以太坊的資料公開性和不可篡改性。

基於ERC20協議的代幣合約程式碼公開,任何人都可以閱讀驗證;而代幣的資料記錄在技術上也是確定不可修改的。儘管資料只記錄在了智慧合約賬戶的資料區裡,但資料公開可見且不可篡改,所以也無所謂。以太坊網路的資料特性再一次幫助全體使用者認可了合約“發行”代幣這個操作的有效性。

當然,這指的是技術意義上的有效性,而不是經濟學意義上的。

講到代幣, 則肯定要再提一下現在炙手可熱的話題:NFT。NFT是個很大的話題,足以開一個系列文章來談。這裡只做一點簡單的技術探討。

NFT是 Non-Fungible Token(非同質化代幣)的縮寫。所以本質上, NFT也是一種代幣。這句話背後的一個意思是,NFT也是由某智慧合約建立和記錄的“虛擬幣”。

和上面所討論的代幣不同, 每一個NFT代幣都是不一樣的,這個“不一樣”在技術上的理解是,每個NFT都有自己獨特的元資料(metadata),指向不同的虛擬物品(一張頭像圖片,一個遊戲裝備,等等)且協議上不支援分割。

所有的“同質化”代幣,以及以太幣都可以拆分成小於1的額度比如0。01個來交易。這也容易理解:在資料記錄層面上,以太幣和各種代幣都只是某個數字額度, 這個額度可以支援小數點後的計數。而NFT是不支援拆分的。

值得提一下的是,有兩種主要的NFT協議。一種是ERC721,主要用來生成單個NFT;這也是現在大多數NFT的生成協議。還有另一種NFT協議,是為了解決類似遊戲物品的交易需求而生。遊戲內的虛擬物品, 很多是稱斤論打的, 比如說一組20個藥水, 10個草藥原材料, 等等。ERC721在支援這樣成組的虛擬物品上有些吃力, 因為它所描述的NFT都是單個生成的。因此另外一個協議 ERC1155被提出來,用來支援這種不同品類批次生成NFT。

NFT除了名字和“代幣”有關係,其他方面並沒有多少關聯。

NFT的核心認知其實是“權證”

, 這個權證使用一串字元, 或者更學究一點,一串雜湊值來對應某個虛擬物品,比如一個頭像圖或者一個影片,甚至現實的物品比如一雙襪子等等。這種對應關係由數學演算法生成。

一個NFT質疑者常挑戰的問題是:虛擬物品(更不用說現實世界的物品)的“所有權”如何和NFT元資料裡的一串字元產生100%不可分割的關係?

這個問題並沒有答案。

目前也沒有任何國家法律來保證NFT所對應的物權。NFT的當前價值仍是基於所有人對於NFT的共識,以及公開交易市場上所呈現的真金白銀上。

作者私以為,支援Web3的人不會過多爭論NFT的“價值”是什麼,正如遊戲玩家從來不會懷疑虛擬裝備有沒有價值一樣。

價值本質是一種“群體共識”,只要足夠多的人認可NFT作為“Web3時代的流通商品”的定位,只要特定NFT能和某種稀缺性的無形價值相關聯,再加上NFT本身的流通性,熱度還是會持續的。

智慧合約, DAO

智慧合約是以太坊的精髓所在。支援使用者自行釋出可執行程式碼,智慧合約機制讓以太坊上的應用(所謂分散式應用dapp)蓬勃生長。

以當前網際網路生態來對比智慧合約,相同的地方是,所有使用者都可以開發自己的應用併發布到網路(移動app V。S。 智慧合約);前者發到應用商店,後者直接部署到智慧合約賬戶裡。

但有個很不同的地方是,智慧合約程式碼是完全公開的,且具有相互呼叫的能力。這在當前封閉的移動網際網路模式下是不能想象的。我來呼叫一下微信app的內部能力? 呵呵。

以太坊智慧合約的這種聯動模式,有點類似AWS的發家史。最早的時候,亞馬遜了打通全公司技術能力, 強制推行各後臺技術團隊以統一介面開發模組,並在公司範圍內允許互相之間呼叫,這就是AWS雲服務的雛形。

這是典型的積木式體系構建思路。而以太坊更進一步,因為程式碼的公開特性, 整個以太坊生態技術的迭代都以一種特別透明和合作的方式呈現在世人面前。

在技術上沒有可以藏著掖著的地方, 需要了解別人怎麼做就直接去看看對方的智慧合約程式碼。在這種極致透明的設定下,一種全新的社群共創的技術文化正在欣欣向榮發展起來。

關於智慧合約有個熱點值得單提出來講講, 就是熱門新潮概念 DAO。

DAO這個詞很多人第一次聽說是源於紅杉在twitter發了一個推,要all in DAO。

未來是不是屬於DAO的,下定論還有點早,但DAO(去中心化自治組織)是一個有趣的概念, 雖然名字(又)有點繞,但其核心概念是容易理解的。

DAO把組織的管理和運營執行規則寫進了智慧合約程式碼,這個智慧合約發行的代幣很類似公司股票,不僅有經濟價值,也有股權價值。所有擁有DAO合約代幣的使用者透過合約程式碼所約定的投票機制來決定一個執行結果, 這就是所謂基於智慧合約的治理。

此外,智慧合約賬戶本身也擁有著以太坊幣額度,所以

DAO智慧合約完全可以看做一個有資金池和嚴格的投票治理制度的虛擬公司組織

。這個組織的程式執行基於以太坊機制,確保沒有人可以破壞既定的組織規則。

根據以太坊的特性, 智慧合約一旦部署就不能更改, 這意味著這個“智慧合約”DAO公司的運營機制必須在部署之前完全確認。任何的程式碼疏漏都可能成為未來的問題。

這其實不是DAO的問題,而是以太坊網路所有智慧合約所必須面對的挑戰。

有趣的是,正因為有這樣的“一次部署必須完全準確”的挑戰, 以太坊上的智慧合約程式碼都以一種特別簡單明瞭的方式來構築:既然越複雜的程式碼越容易出錯,那不妨就儘可能簡單些。

從現實利益出發,以太坊機引導了所有參與構建的開發者去遵循締造者的思路:

以最簡明的方式創造新世界。

如不遵循這樣的設計思路,則要承擔更高機率出錯且無可挽回的風險。

用人性和利益而非教條來驅動社群共同遵循一個方向,我們又一次看到了這種天才的構思。

共識機制和挖礦

共識機制, 本文最後一個玄乎的詞。

在瞭解以太坊的各種細節後,為什麼還要聊共識機制? 因為這是以太坊的決策基礎。

在一個沒有中心化管理的分散式網路裡,要讓整個網路節點達成統一的意見,比如決定一個新的資料區塊由誰生成,應該怎麼辦?這就是“共識機制”發揮作用的地方。

在計算機科學裡, “共識”這個術語比“區塊鏈”出現得更早,它泛指了在各種分散式系統裡的不同參與者對單個狀態達成一致。

共識是以太坊的關鍵屬性, 它之所以那麼關鍵,是因為這個承載著真金白銀的系統, 並沒有某個人某個組織或者團隊“掌控”;或者說,控制權分佈在廣泛的參與者之間。

共識的終極目的是打造一個嚴格按照規則來執行且沒有單一控制者的系統。

這簡直是技術的理想國。

共識演算法非常底層, 遠比智慧合約的抽象概念更加底層。對於讀者來說,不一定要理解其工作原理才能使用以太坊,正如使用網際網路也不需要理解路由原理一樣。但簡單瞭解共識這個機制順便可以幫助讀者進一步理解什麼是“挖礦”,一個大家聽得很多的概念。

最早區塊鏈(比特幣)的創造者發明了一種叫做工作量證明(Proof of Work,PoW)的共識演算法,工作量證明的一個通俗表述就是“挖礦”。

挖礦多有被誤解,很多人都以為挖礦的目的就是從系統獲得新的區塊鏈貨幣, 但事實上, 挖礦操作的本質目的是為了保證整個區塊鏈系統的去中心化, 保證整個系統以一種共識機制來執行。而遵循這個機制“挖礦”得到的獎勵則是區塊鏈所鑄造的貨幣。

這個機制有隱含的懲罰機制, 如果不遵循共識規則來得到區塊獎勵,則挖礦上花費的電力就有可能血本無歸。

這種實際利益驅動的規則遵循機制是各種共識演算法的核心思想。

有意思的是, PoW工作量證明儘管比較容易理解(。。。 真的嗎?),但它不是歷史上首個被提出的共識演算法。在PoW出現之前,有人就提出基於抵押金的共識演算法,就是所謂的權益證明(Proof of Stake,PoS)。

共識機制都透過系統的獎勵和懲罰來讓驗證者遵守共識規則:PoW工作量證明的懲罰是外部的,花費電力做了無用功沒有得到以太坊獎勵PoS權益證明的懲罰是區塊鏈內在性的,即失去了質押的以太幣。

很有意思, 嚴謹的計算機科學又一次利用了人性, 區塊鏈分散式網路上

最核心的需要全體維護的"共識規則",其校驗機制用人性來確保: 遵守者獲益,違反者被懲罰。

從最初,以太坊的創始者就希望有一天以太坊的共識機制能切換到權益證明, 因為工作量證明有一些明顯的缺點,比如浪費現實世界的能源。

所以,以太坊在建立之初埋下了一個“”難度炸彈“”機制,目的是迫使以太坊的PoW挖礦變得越來越難,最終不得不讓網路轉向PoS。而在本文發出之時,以太坊的PoW時代已是終章,以太坊正在過渡到它的PoS時代。

這個切換並不容易, 已經數次推遲。最新的訊息是以太坊網路將在今年內正式切換到PoS模式, 到時候,以太坊的“挖礦”將不復存在。

以太坊上龐大的應用體量對底層架構的效能和可擴充套件性的要求越來越高,這也是以太坊下定決心向PoS機制過渡的重要原因。

無論礦工對現在的以太坊有多麼留戀,以太坊網路將以不可逆的方式降下挖礦的帷幕。

寫在最後

如果讀者還能堅持看到最後, 對以太坊這個Web3時代最重要的基礎設施的技術概念應該有了一些初步的理解。

以太坊的技術構建,在每個細節上都閃耀著技術理想主義的光芒。以太坊的締造者期望用一種簡潔明瞭的方式, 構造一個所有使用者都能平等參與,自由構建的Web3新世界。

這個理想國新世界構築在嚴謹的數學理論和簡明的邏輯結構之上。無數技術天才正在為這個理想國添磚加瓦。瞭解越多,則會越傾向於相信,這個網路將擁有一個非凡和長久的價值。

標簽: 以太  賬戶  代幣  使用者  合約