以最簡明的方式創造Web3新世界: 技術小白的以太坊技術入門

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

如讀者不是隻想了解幾個時髦的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去監管,又做到了交易的完全可信賴性。這麼妙不可言的事情,究竟是怎麼實現的呢?

答案是, 依靠的不是“信任”,更不是魔法,而是一種基礎和絕對可信的科學——數學。以下用一種簡單的解釋來講一下,數學如何從最底層支持了這個美妙的去中心化系統。

有一種很有趣的數學,叫做非對稱密碼學。

大家稍微記住幾個名詞:

簡單類比一下,可以把公鑰看作是賬戶號碼,號碼對外公開;私鑰是密碼,只有用戶自己知道。公鑰和私鑰一一配對。

一個奇妙的屬性是,知道私鑰,可以很簡單推出公鑰;但反過來不行,知道公鑰,是無法推導出私鑰的。這也是“非對稱”的來源。

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

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

但這和我們說的去中心化交易有什麼關係呢?

在以太坊體系裡,我們每個人的賬戶地址,是一個公鑰。這不是比喻,而是字面意義上的。如果讀者使用過以太坊相關軟件, 都知道以太坊的賬戶是以十六進制地址來表示的, 這個地址不是別的,正是密碼學意義上的公鑰。

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

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

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

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

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

在以太坊上,這個發出來的交易請求並沒有任何中心化的服務器來負責,大量收到廣播請求的全節點會同時確認這個交易的合法性。

(這裡又隱藏了一點點細節:只有那些希望獲得系統獎勵的全節點纔會主動去驗證用戶交易合法性,並以工作量贏得系統獎勵的以太幣——這正是所謂的“挖礦”。)

以太坊交易的驗證方式正是用了前面介紹的密碼校驗機制:

發起者的賬戶地址信息是公鑰,同時又有了聲稱從這個地址發起的交易請求信息和賬戶私鑰對交易信息所做的數字簽名。那麼,任何一個全節點都可以通過公鑰+數字簽名的校驗,來確認交易請求確實來自於這個以太坊賬戶。

也就是說,以太坊任何一個節點都可以非常篤定地確認一個交易不是被僞造的而是真實來自於賬戶擁有者。確認這一點後,每個以太坊全節點都可以愉快地按照交易請求去執行操作,並把新的狀態結果記錄在以太坊數據鏈上了。這就是以太坊區塊鏈最核心的密碼學通信機制。

這種建立在密碼學理論上的可信賴通信機制,從根本上做到了無需中心服務器也能讓任意兩個賬戶完成交易。確實無需第三方的信任,所有操作都是點對點的;或者說,這個點對點交易的“可信任”,是由數學理論所支持的。

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

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

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

以太坊的賬戶有兩種,一種是人用的,叫外部賬戶;一種是智能合約用的,叫合約賬戶。

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

無論外部賬戶還是合約賬戶,在以太坊上都用一個地址來表示。對於外部賬戶,即人所用的賬戶,裡面只有一個數據字段,那就是這個賬戶所擁有的以太幣數額。而對於智能合約賬戶,數據稍多了一點點,除了以太幣數額字段(沒錯,智能合約賬戶本身也獨立擁有以太幣) 還有數據字段儲存智能合約的代碼本身,以及這個智能合約所需的數據儲存區。

除了以太幣數額之外, 以太坊賬戶裡還有一個內部計數, 叫做nonce, 這是賬戶交易次數的統計, 每次交易後遞增加1。這個計數很重要, 用來防止“可重用攻擊”。

簡單的說,如果別有用心的人把這個賬戶曾經發出的交易數據複製一次再發出來,因爲數據包裡的公鑰和簽名都爲真,若用戶賬戶裡沒有這個單向遞增的交易計數供校驗,交易就有可能被重複執行多次。

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

智能合約的代碼也很簡潔,不過智能合約的強大之處還在於,整個以太坊的代碼都可以“爲我所用”:每個智能合約代碼都可以自由調用另一個智能合約。

這特別類似搭樂高積木,每塊積木看起來平淡無奇,但無數積木組合在一起,可以構建一個輝煌的大廈。

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

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

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

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

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

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

這裡需要談到以太坊運作的一個核心概念,運作需要支付相應費用。

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

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

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

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

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

爲什麼以太坊上的運算設計爲需要付費呢?天下沒有免費的午餐,使用者付費也算天經地義。不過, 這裡還有另外一層原因:以太坊是一個世界通用計算機,而一個通用計算機的運算是可以進入死循環的。

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

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

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

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

人性就是趨利的,這也是某種人性的弱點。以太坊的設計反過來利用了人性來保證系統的運轉。這個設計思路在整個以太坊系統設計裡不止一次的體現。

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

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

第一次接觸Web3錢包的人,大概率都會顧名思義把它類比成微信支付錢包或者支付寶錢包, 即一個服務端支持的存着某種貨幣的系統。這是對Web3錢包的最大誤解。

Web3錢包是一個本地化的區塊鏈賬戶管理工具,本地化意味着它並不聯網儲存個人賬戶數據。以太坊上的所有活動都是通過自己的以太坊地址賬戶向以太坊網絡發送交易請求來驅動的。那誰來幫用戶做這個事情呢,正是web3錢包軟件。

比如,當用戶打開了一個NFT交易市場 ,下單購買一個NFT時, 網頁會調起瀏覽器的MetaMask錢包插件。這個MetaMask插件裡儲存着用戶的以太坊賬戶地址私鑰,MetaMask錢包幫助用戶打包好交易請求數據,並和用戶確認所需費用,然後把這個交易請求信息發到以太坊網絡上以完成交易。

萬一用戶丟失了以太坊私鑰怎麼辦,答案是——涼拌。私鑰是以一串助記詞的方式呈現給用戶的,如果這串助記詞丟了,而本地儲存密鑰的錢包軟件也不小心刪除了,對應的以太坊地址賬戶就永遠無法訪問了。

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

這樣的好處是,用戶還有機會通過傳統的身份找回方式把自己的賬戶密鑰從服務器恢復回來。從易用性上考慮這是可行的,也已經有一些Web3產品比如MetaNotey.IO正在在做這個事情——向用戶提供Web3賬戶的託管服務。

畢竟web3錢包也是有使用門檻的,託管之後用戶的Web3學習曲線會更平滑; 另一方面,如果允許一箇中心化服務器託管自己的Web3賬戶,則又回到了傳統互聯網的命題,失去了100%的隱私安全。隱私性和易用性很可能是無法同時100%被滿足的。我們終有取捨。

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

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

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

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

“代幣”是一個經常被提起的概念。代幣是英文token的直接翻譯, 指的是以太坊上用戶可以通過智能合約自行發佈的虛擬幣。只要接口滿足一個協議ERC20標準,任何智能合約都能成爲某個代幣的發行方。

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

"發行"是個聽起來很高級的詞, 但在技術層面上,代幣合約做的事情可以非常簡單,就是幾句代碼聲明某個數量的一種代幣,並且通過標準的ERC20接口,把代幣授予不同的以太坊賬戶。

前面說過,每個以太坊帳戶都有一個字段記錄着這個帳戶的以太坊幣數額。那麼,這些授予的代幣數額,是不是也記錄在用戶自己的以太坊帳戶裡呢?情理上貌似應該如此,但答案會出乎你的意料:並不是。

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

讀者可以想象一下,在這個代幣智能合約的數據儲存區裡有一個表格, 表格裡的每一行都記錄着“地址xxxxxx:擁有xx個代幣”。代幣合約以一個最直觀的方式,把每個賬戶的代幣額度記錄在一個公開可見的表格裡。

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

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

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

講到代幣,則肯定要再提一下現在炙手可熱的話題: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本身的流通性,熱度還是會持續的。

智能合約是以太坊的精髓所在。支持用戶自行發佈可執行代碼,智能合約機制讓以太坊上的應用(所謂分佈式應用dapp)蓬勃生長。

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

但有個很不同的地方是,智能合約代碼是完全公開的,且具有相互調用的能力。這在當前封閉的移動互聯網模式下是不能想象的。

以太坊智能合約的這種聯動模式,有點類似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新世界。

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