以最簡明的方式創(chuàng)造新世界:關(guān)于以太坊,非技術(shù)的你值得了解的所有技術(shù)細節(jié)
“以太坊是什么坊、挖礦挖的是什么礦......”,很多人對Web 3感興趣,但被許多新名詞新概念攔住了步伐,作為對技術(shù)沒有太多了解的非技術(shù)人群,看完這篇科普文,也許能讓你對以太坊的技術(shù)框架有一個初步的明確概念。歡迎閱讀~
寫在前面
一直醞釀著要寫這樣一篇文章,一篇寫給非技術(shù)同學看的技術(shù)文。
但本文企圖做得比大多數(shù)科普文更深入一些:我們探討以太坊的技術(shù)本質(zhì),希望讓具有大眾計算機使用水平的同學對以太坊的技術(shù)框架有一個初步的明確概念。
寫得很吃力,結(jié)果也不一定討好,初心倒是明確的。
如讀者不是只想了解幾個時髦的Web3詞匯作為談天的資本,而是準備投身擁抱Web3,那么無論本職工作是否做技術(shù),能對以太坊的底層原理有本質(zhì)性一些的理解,肯定不是壞事。
作者開始深入Web3和以太坊的時候,作為技術(shù)出身的人,也深感這個世界眾多基礎(chǔ)概念的全新性。
當然,也見過一些才學過人的朋友,比如團隊的產(chǎn)品經(jīng)理帥哥,從零入門到成長為Web3區(qū)塊鏈的專家完全無障礙,不僅做得一手好產(chǎn)品設(shè)計,還能沖在最前線替技術(shù)部門做技術(shù)難點攻關(guān)……
但,這樣的人實在太少了。
對于大多數(shù)人,作者認為Web3的入門學習曲線可能是比較陡峭的。許多人或許還停留在知其然不知其所以然的階段。
因此,萌生了這個想法,寫一篇給所有非技術(shù)背景而需要真正理解Web3區(qū)塊鏈的朋友們,把非技術(shù)背景的朋友們值得了解的技術(shù)知識點, 用一種能聽得懂的方式講出來。
寫這樣的技術(shù)內(nèi)容,還指望寫得深入淺出不枯燥,挑戰(zhàn)真的很大。
想起從學生時代就很尊敬的一位臺灣技術(shù)專家作者,能把一本純技術(shù)書籍寫得如有小說一般的蕩氣回腸之感。不敢期望本文達到如許高度,但如果它確實小小幫助了那些不做技術(shù)的朋友們更深入的理解了以太坊,本文目的就達到了。
01 以太坊是一個計算機
以太坊是什么?
當然,已經(jīng)有很多的文章講以太坊,讀者多少了解過的話,應知道以太坊是第二代區(qū)塊鏈網(wǎng)絡(有別于第一代比特幣網(wǎng)絡),以太坊的通用貨幣叫做以太幣。在以太坊之上能運行以智能合約為基礎(chǔ)的分布式應用(dapp)。
先看看百度百科上以太坊的詞條:
以太坊(英文Ethereum)是一個開源的有智能合約功能的公共區(qū)塊鏈平臺,通過其專用加密貨幣以太幣(Ether,簡稱“ETH”)提供去中心化的以太虛擬機(Ethereum Virtual Machine)來處理點對點合約。
這個解釋沒問題。大家也都知道以太坊是一個公共區(qū)塊鏈平臺。
但,如果從技術(shù)角度深入一點點去理解以太坊,以太坊的本質(zhì)本質(zhì),可能會讓讀者有些意外:以太坊本質(zhì)上是一個世界性的通用計算機。
這句話完全就是字面上的意思。沒看錯,以太坊本質(zhì)上是一個計算機,而基于它的全球分布式特性,它無疑是世界性的。
為什么說以太坊是計算機?
以太坊的締造者們從一開始就希望把以太坊網(wǎng)絡打造用于通用計算目的。
這是一個非常美好的設(shè)想:使用分布式網(wǎng)絡構(gòu)建一個全世界人們都可以參與的通用計算系統(tǒng)。
注意,和現(xiàn)在的主流互聯(lián)網(wǎng)體系不同,以太坊分布式網(wǎng)絡是統(tǒng)一的單一整體。在計算機科學上,我們說以太坊整體是一個圖靈完備的狀態(tài)機。
等等,“圖靈完備”這詞太學究了,讀者只需了解,這代表了可以進行通用計算的能力。這點以太坊和第一代比特幣網(wǎng)絡是完全不同的: 比特幣網(wǎng)絡沒有通用計算能力。
另外,所謂“狀態(tài)機”又是什么呢?
這個更好理解,用個人計算機做類比:當計算機運轉(zhuǎn)時,CPU從內(nèi)存載入指令和數(shù)據(jù)進行運算,計算完畢后把中間運算結(jié)果保存在內(nèi)存(更新“狀態(tài)”),然后進行下一次的載入和計算。類似這種需要保存狀態(tài)的邏輯機器就是狀態(tài)機。
盡管上面的解釋把計算機的運行方式做了特別簡化的描述,但現(xiàn)在的計算機系統(tǒng)本質(zhì)上就是一個“計算-保存狀態(tài)-再計算” 的所謂圖靈完備狀態(tài)機。
那么以太坊呢,說它是一個通用計算機,也就是說以太坊整體上也是一個 “計算-保存狀態(tài)-再計算”的邏輯機器。
只是和個人計算機把狀態(tài)保存在機器的內(nèi)存(進而記錄在硬盤) 不同,以太坊的“狀態(tài)”,記錄在分布全球的數(shù)以萬計的節(jié)點上。
以太坊的突破性創(chuàng)新在于,它把存儲程序計算機這樣的通用目的計算架構(gòu)與去中心化區(qū)塊鏈相結(jié)合,因此創(chuàng)建了一個分布式的單體狀態(tài)世界計算機。
無論以太坊的程序運行在任何地方,都能夠產(chǎn)生一致的狀態(tài),通過全體共識規(guī)則確保數(shù)據(jù)正確和安全。
以太坊的數(shù)據(jù)記錄方式是在每個節(jié)點上都保存同一份信息。
也就是說,任意一個以太坊節(jié)點,都記錄著以太坊網(wǎng)絡的全部信息。特別形象的,這樣的節(jié)點叫做“全節(jié)點”。這意味著以太坊網(wǎng)絡的全部狀態(tài)信息都完整同步在每一個節(jié)點上。
只要不是所有的全節(jié)點同時被摧毀,以太坊就可以重生。這是多么強的生命力。
要裝下以太坊整個網(wǎng)絡的信息,全節(jié)點需要有多大呢,這個量級遠比讀者想象的要小得多:今天,以太坊全部區(qū)塊信息的總大小是345GB。
這個容量相對于今天個人計算機動則好幾個TB的硬盤容量實在是小意思。
以太坊的總信息容量每天都在不斷的增加,但速度不算特別快,因為在以太坊網(wǎng)絡記錄信息需要支付非常不菲的費用,這也是以太坊的重要特點:所有的運算操作和數(shù)據(jù)記錄都是要花真金白銀的。
前面提到,“圖靈完備”這個詞描述了以太坊系統(tǒng)的通用計算特性。以太坊可以跑用戶定義的通用代碼,這些代碼就是所謂的智能合約,這是以太坊區(qū)別于第一代比特幣網(wǎng)絡的根本創(chuàng)新。
正由于智能合約的支持,以太坊可以完成個人計算機所能完成的通用計算任務,從計算機科學理論看,以太坊就是通用計算機,也就是那種“計算-記錄狀態(tài)-再計算”的狀態(tài)機。
既然說以太坊是“狀態(tài)機“,不妨繼續(xù)問兩個問題:
什么時候以太坊的狀態(tài)會更新呢?
以太坊是不是像<終結(jié)者>里的天網(wǎng)那樣自動運行呢?
答案或許又讓讀者意外了。
以太坊雖然是世界計算機,全節(jié)點遍天下,但它的運行機制是徹底不并行的。以太坊是一個不折不扣的單線程系統(tǒng)。
也就是說,以太坊計算機先把一個任務計算完畢,然后計算結(jié)果“狀態(tài)”更新到全世界各個節(jié)點,它才會再繼續(xù)下一個任務。
以太坊用戶可以并發(fā)(Concurrency)的提交交易申請,但以太坊不是并行(Parallelism)處理的。所有交易都試圖改變整個全局狀態(tài),以太坊選擇逐個處理交易。
讀者也許聽說過以太坊網(wǎng)絡上越來越嚴重的擁堵排隊問題,現(xiàn)在可以理解了:這是以太坊的單線程任務處理機制的鍋。在以太坊上執(zhí)行的任務,只能乖乖排隊按順序來,用的人多了不堵才怪。
如何解決以太坊的擁堵問題,是當今區(qū)塊鏈技術(shù)研究的一個熱點。比如大家可能聽過的Layer2/側(cè)鏈等新詞,主要目的都是為了規(guī)避以太坊的主鏈擁堵問題(以及高昂的運行費用)
回頭來看,從任務的執(zhí)行機制角度,以太坊可比讀者手頭正在用的個人計算機甚至手機系統(tǒng)都簡單多了。
現(xiàn)在的個人計算機系統(tǒng)都是各種實時多任務,各種后臺前臺程序并發(fā)運行;以太坊除了信息狀態(tài)同時存于分布世界的各節(jié)點,在系統(tǒng)運行方式上,反而是特別簡單的單線程模式。
另外,以太坊底層有一個持續(xù)運作的所謂操作系統(tǒng)嗎,這個世界計算機是不是有點類似《終結(jié)者》里的天網(wǎng)那樣自動和智能化呢? 或者,至少有個類似計算機的操作系統(tǒng)來控制整體運行?
答案是:非也。
以太坊上完全沒有“背后自動運行”這種說法。以太坊的所有計算任務都以“交易”來驅(qū)動,交易由用戶持有的以太坊地址賬戶發(fā)起,只有成功和不成功兩種結(jié)果。交易成功, 則在以太坊記錄全局狀態(tài)更新; 交易不成功, 則全局狀態(tài)保持不變。
值得再重復一下,以太坊是一個全局的單體狀態(tài)機,交易是唯一能夠讓這臺狀態(tài)機向前推進并改變狀態(tài)的東西。以太坊上的智能合約代碼不會自動運行。以太坊也不會在“后臺”運行。所有這一切,都是由用戶交易觸發(fā)的。
所以,盡管同為通用計算機,但以太坊的運行模式和個人計算機系統(tǒng)是很不同的。
至于以太坊計算機是否有神秘的人工智能,甚至有沒有“天網(wǎng)”的雛形,讀者也可以直接回答了:以太坊沒有任何自動運行機制,更不說人工智能;它不是天網(wǎng),只是一個很好的分布式平臺。從任務執(zhí)行的底層機制來看,它恐怕比你桌面上的筆記本電腦還要簡單很多。
02 去中心化的本質(zhì)和基礎(chǔ)
我們總說,以太坊為代表的Web3網(wǎng)絡是去中心化的網(wǎng)絡。
先來個三連:什么是去中心化?為什么能去中心化?誰來保證去中心化交易的可信和安全呢?
所謂中心化,在當前的互聯(lián)網(wǎng)模式意義上,是指在互聯(lián)網(wǎng)上進行的用戶之間的互動,都基于一個可信的公司維護的互聯(lián)網(wǎng)服務。從技術(shù)上,就是典型的服務器-客戶端模式。
比如一個看似簡單的點對點轉(zhuǎn)賬:用戶A通過手機微信或支付寶給另外一個用戶B當面掃碼轉(zhuǎn)賬100塊。實際上,需要A和B都信任的騰訊或螞蟻金服的后臺服務器來操作雙方賬戶,服務器把用戶A的賬戶金額減少100塊,把用戶B的賬戶金額增加100塊,并確保這兩個操作一起發(fā)生。因為微信支付或者支付寶已經(jīng)有足夠廣泛的使用,用戶“信任”它們的后臺服務器不會出差錯。
我們能看到,當前互聯(lián)網(wǎng)模式下,互聯(lián)網(wǎng)服務的特點是:
- 服務由特定的公司運營。如果服務器宕機,用戶服務就可能中斷。當然,無數(shù)工程師嘔心瀝血確保了各種互聯(lián)網(wǎng)中心化服務的穩(wěn)定性。
- 基于這些服務,用戶之間的交互,即使看起來是完全個人對個人的,都通過一個中心服務器完成。這背后的底層邏輯是,用戶“信任”這些公司服務器是公正的,它們按照所承諾的方式服務用戶。
- 這也是當前大公司提供的互聯(lián)網(wǎng)服務看起來比小公司更“可靠”更有“信譽”的原因。因為大公司當前的用戶體量,服務的技術(shù)和運營能力更可能贏得用戶“信任”。
所以,在本質(zhì)上,當前的互聯(lián)網(wǎng)應用模式,是提供服務的公司做了保證,使用服務的用戶選擇了相信。
那“去中心化”是什么?最基本的一點,就是沒有中心化服務器。
以太坊上并沒有一個架設(shè)在眾生(眾節(jié)點)之上的總服務器,也沒有任何提供特定服務的服務器。或者說,以太坊上,并沒有面向特定應用的服務器的概念。只有完全平等的“全節(jié)點”,每一個都保存著全網(wǎng)絡的信息狀態(tài)。
在以太坊上,任何用戶都可以直接發(fā)起和另一個用戶的交易,這個交易的合法性和正確性不需要一個大公司服務器來保證;而也正是因為用戶互動可以徹底的點對點化,Web3用戶再也無需把自己的賬戶信息交由某個大公司保管以完成服務。
用戶的賬戶信息完全在自己手中,當用戶A和B發(fā)生了交易比如以太幣轉(zhuǎn)賬,這個操作由以太坊網(wǎng)絡整體確保正確完成。
前面說過,以太坊網(wǎng)絡本質(zhì)上是一個通用計算機;用戶發(fā)起的交易,是唯一驅(qū)動這個世界計算機產(chǎn)生“狀態(tài)變化”的機制。
但前面也說過,以太坊并沒有超越的人工智能;或更明確的,在以太坊上沒有任何掌控全局的程序來擔任互聯(lián)網(wǎng)的服務器仲裁者的角色。
那么,問題來了:沒有人或AI去監(jiān)管,又做到了交易的完全可信賴性。這么妙不可言的事情,究竟是怎么實現(xiàn)的呢?
答案是,依靠的不是“信任”,更不是魔法,而是一種基礎(chǔ)和絕對可信的科學 — 數(shù)學。
哈哈,讀者不必擔心,本文不會指望大家一起重溫數(shù)學,以下用一種簡單的解釋來講一下,數(shù)學如何從最底層支持了這個美妙的去中心化系統(tǒng)。
有一種很有趣的數(shù)學,叫做非對稱密碼學。
大家稍微記住幾個名詞:
- 公鑰,一個大的數(shù)字,一般用一串16進制數(shù)來表示。
- 私鑰,一個更大的數(shù)字,用一串更長的16進制數(shù)字來表示。
- 數(shù)字簽名,是一種信息加工方式 ,把任意二進制信息通過“私鑰”進行數(shù)學運算處理,得到了一個被稱之為數(shù)字簽名的字符串。
簡單類比一下,可以把公鑰看做是賬戶號碼,號碼對外公開;私鑰是密碼,只有用戶自己知道。公鑰和私鑰一一配對。
一個奇妙的屬性是,知道私鑰,可以很簡單推出公鑰;但反過來不行,知道公鑰,是無法推導出私鑰的。這也是“”非對稱“的來源。
“非對稱密碼學” 這種美妙的數(shù)學理論保證了一個結(jié)果:任何一個拿到公鑰和數(shù)字簽名信息的人,都能通過標準的數(shù)學方法來確認,這個數(shù)字簽名是這個公鑰所對應的私鑰加工或者說“簽名”而成的;并且數(shù)學理論確保了,只有這個私鑰才能得出這個數(shù)字簽名結(jié)果。
所以,數(shù)學理論給我們保證了,這個帶有數(shù)字簽名的信息,確實是由擁有對應私鑰的人“簽名”發(fā)出來的,其他人無法偽造。
有點意思,但和我們說的去中心化交易有什么關(guān)系呢?
在以太坊體系里,我們每個人的賬戶地址,是一個公鑰。這不是比喻,而是字面意義上的。
如果讀者使用過以太坊相關(guān)軟件,都知道以太坊的賬戶是以十六進制地址來表示的,這個地址不是別的,正是密碼學意義上的公鑰。
那么,用戶的私鑰在哪里呢?
事實上,每個第一次使用以太坊的人都會被Web3賬戶管理軟件提示,要記住一串助記詞,并會被軟件反復提醒,不要告知任何人助記詞,更不要丟失助記詞,否則賬戶再也找不回來。這個助記詞,就是私鑰的某種映射;簡單一點來理解,這一串助記詞是私鑰本身。
Web3的賬戶管理軟件,也就是所謂的Web3“錢包”,正是替用戶在本地儲存管理私鑰,以及幫用戶生成經(jīng)過私鑰數(shù)字簽名的交易請求發(fā)到以太坊,從而成為用戶Web3網(wǎng)絡的事實入口。
(這里還有個小細節(jié),用過MetaMask等Web3錢包的讀者會知道,要額外設(shè)置一個密碼進入錢包。但一定要注意,這個密碼并不是以太坊的密碼。以太坊賬戶沒有密碼,用戶的私鑰就是訪問賬戶的唯一和最高憑證。這個密碼僅僅用來保護在本地儲存的以太坊賬戶私鑰信息,甚至密碼本身都不做聯(lián)網(wǎng)儲存同步:私鑰信息本身不會同步到服務器,錢包密碼就沒有任何理由做線上同步了。錢包工具是一個本地化軟件。)
當一個以太坊賬戶對另外一個賬戶發(fā)起交易時,這個交易請求的所有信息會被賬戶的私鑰進行數(shù)字簽名,簽名信息連同交易請求數(shù)據(jù)本身以及賬戶地址(也就是公鑰),被一起廣播到以太坊上。
在以太坊上,這個發(fā)出來的交易請求并沒有任何中心化的服務器來負責,大量收到廣播請求的全節(jié)點會同時確認這個交易的合法性。
(這里又隱藏了一點點細節(jié):只有那些希望獲得系統(tǒng)獎勵的全節(jié)點才會主動去驗證用戶交易合法性,并以工作量贏得系統(tǒng)獎勵的以太幣 – 這正是所謂的“挖礦”。)
以太坊交易的驗證方式正是用了前面介紹的密碼校驗機制:
發(fā)起者的賬戶地址信息是公鑰,同時又有了聲稱從這個地址發(fā)起的交易請求信息和賬戶私鑰對交易信息所做的數(shù)字簽名。那么,任何一個全節(jié)點都可以通過公鑰+數(shù)字簽名的校驗,來確認交易請求確實來自于這個以太坊賬戶。
也就是說,以太坊任何一個節(jié)點都可以非常篤定的確認一個交易不是被偽造的而是真實來自于賬戶擁有者。確認這一點后,每個以太坊全節(jié)點都可以愉快的按照交易請求去執(zhí)行操作,并把新的狀態(tài)結(jié)果記錄在以太坊數(shù)據(jù)鏈上了。
如果讀者到這里還沒暈,那么恭喜,你已經(jīng)明白了以太坊區(qū)塊鏈最核心的密碼學通信機制。
這種建立在密碼學理論上的可信賴通信機制,從根本上做到了無需中間商,噢,不,無需中心服務器也能讓任意兩個賬戶完成交易。
確實無需第三方的信任,所有操作都是點對點的;或者說,這個點對點交易的“可信任”,是由數(shù)學理論所支持的。
數(shù)學保證了,在以太坊上有人說給你一筆錢(發(fā)起一個交易),你能立刻判斷,這是一個騙子,還是天上掉了個餡餅。
最后我們可以相信的,不是承諾,而是數(shù)學:)
03 以太坊賬戶里究竟有什么
上一節(jié)已經(jīng)提到了以太坊賬戶。如果對上一節(jié)關(guān)于 “以太坊建立在密碼學基礎(chǔ)上的可信賴通信” 不覺厭煩,甚至還和作者這般,有種“竟如此巧妙”的愉悅之感,那不妨再多聊幾句以太坊賬戶。
以太坊賬戶里放著什么?一句話回答,以太坊賬戶里基本沒什么內(nèi)容。
以太坊的賬戶有兩種:
- 一種是人用的,叫外部賬戶;
- 一種是智能合約用的,叫合約賬戶。
“智能合約”這個詞實在是顯得高深莫測,但實際上所謂智能合約就是一段代碼,而且在以太坊的機制下,智能合約代碼一般非常的短 ,數(shù)百行的智能合約就已經(jīng)是龐然大物。
無論外部賬戶還是合約賬戶 ,在以太坊上都用一個地址來表示。
對于外部賬戶,即人所用的賬戶,里面只有一個數(shù)據(jù)字段,那就是這個賬戶所擁有的以太幣數(shù)額。
而對于智能合約賬戶,數(shù)據(jù)稍多了一點點,除了以太幣數(shù)額字段(沒錯,智能合約賬戶本身也獨立擁有以太幣) 還有數(shù)據(jù)字段儲存智能合約的代碼本身,以及這個智能合約所需的數(shù)據(jù)儲存區(qū)。
噢,是了。除了以太幣數(shù)額之外,以太坊賬戶里還有一個內(nèi)部計數(shù),叫做nonce,這是賬戶交易次數(shù)的統(tǒng)計,每次交易后遞增加1。
這個計數(shù)很重要,用來防止“可重用攻擊”。
簡單的說,如果別有用心的人把這個賬戶曾經(jīng)發(fā)出的交易數(shù)據(jù)復制一次再發(fā)出來,因為數(shù)據(jù)包里的公鑰和簽名都為真,若用戶賬戶里沒有這個單向遞增的交易計數(shù)供校驗,交易就有可能被重復執(zhí)行多次。
以太坊賬戶的體系結(jié)構(gòu)特別簡潔,正如以太坊區(qū)塊鏈網(wǎng)絡是由最簡明的密碼學通信連接起來一樣。
智能合約的代碼也很簡潔,不過智能合約的強大之處還在于,整個以太坊的代碼都可以“為我所用”:每個智能合約代碼都可以自由調(diào)用另一個智能合約。
這特別類似搭樂高積木,每塊積木看起來平淡無奇,但無數(shù)積木組合在一起,可以構(gòu)建一個輝煌的大廈。
以太坊這樣的架構(gòu)讓人想起了螞蟻的社群組織。每一個螞蟻所能做到的很有限,但整個蟻群在一起,仿佛就有了一個更高等級的智慧化存在。這存在不是人工智能意義上的,而是社會學意義上的。
以太坊的締造者們一定是一群理想主義的人,只有這樣的人,才會執(zhí)著于構(gòu)造出一個新世界,讓這個世界基于最簡明的規(guī)則來運作,卻能自行衍生出復雜而強大的社會功能邏輯。
在深入了解以太坊的過程中,我們將一次又一次的感受到這一點。
04 以太幣,gas
前面多少涉及到了以太坊貨幣(簡稱“以太幣”)概念,這里繼續(xù)再掰掰清楚。
以太幣現(xiàn)在的價值不菲,一個以太幣要好幾千美金。誠然,這個價值波動比較大,也有很多關(guān)于區(qū)塊鏈幣的價值真實性討論。但作者可以判斷,這個價值會波動,但以太幣的價值存在不會消亡。原因有很多種,這里只討論一個技術(shù)性和根本性的:以太坊幣最基本的功能是用來做什么。
是的,以太幣是以太坊生態(tài)上的通用貨幣,它現(xiàn)在可以購買很多虛擬物品,也可以兌換現(xiàn)實世界的貨幣,但以太幣的內(nèi)在價值,在技術(shù)層面上,是設(shè)計為以太坊網(wǎng)絡的計算資源購買力。
這里需要談到以太坊運作的一個核心概念,運作需要支付相應費用。
大家已經(jīng)知道,在以太坊上,每個用戶可以自由發(fā)起全網(wǎng)同步的運算即“交易”。只是,這個交易消耗全網(wǎng)絡計算資源,對應的費用,由發(fā)起賬戶支付。
以太坊用一個單位gas(英文意思是汽油,特別形象)來衡量執(zhí)行具體操作所要花費的計算和儲存資源。
和當前互聯(lián)網(wǎng)生態(tài)里用戶基本免費的網(wǎng)絡服務使用理念南轅北轍,任何以太坊用戶希望發(fā)起一次交易,都需要先支付對應的gas費。對于特定操作gas費是個固定值,比如:
- 相加兩個數(shù)值需要消耗 3gas
- 計算一個哈希值需要消耗 30gas
- 發(fā)送一個交易請求需要消耗 21000gas
以太坊上用來購買gas的不是其他東西,正是以太幣。有趣的是,以太幣購買gas費的“匯率”還是浮動的。
因此,如果我們確信以太坊網(wǎng)絡有運轉(zhuǎn)下去的價值,那么以太幣就永遠有價值,因為它對標了以太坊網(wǎng)絡的運算資源。
聊到這里,讀者有沒有想過,為什么以太坊上的運算設(shè)計為需要付費呢?
天下沒有免費的午餐,使用者付費也算天經(jīng)地義。不過,這里還有另外一層原因:以太坊是一個世界通用計算機,而一個通用計算機的運算是可以進入死循環(huán)的。
如果個人計算機循環(huán)死鎖了,那么可以簡單拔插頭重來。
但是以太坊網(wǎng)絡可沒有插頭啊,怎么避免以太坊的運作被惡意的循環(huán)死鎖呢?
除了在底層設(shè)計上一再注意,最重要的就是引入gas費用,每次運算操作都需要支付費用,這樣,無論如何都會有費用花完的那一刻,死循環(huán)計算也就自然而然終止了。
gas是以太坊極其重要的組成部分。創(chuàng)建交易的用戶需要表明他愿意為交易執(zhí)行所付出的價格,防止網(wǎng)絡中無意或者惡意的無限循環(huán)以及其他形式的計算資源浪費。
一個美妙的設(shè)計,不需要設(shè)置復雜的規(guī)則來約束,只需要談談利益。
人性就是趨利的,這也是某種人性的弱點。以太坊的設(shè)計反過來利用了人性來保證系統(tǒng)的運轉(zhuǎn)。這個設(shè)計思路在整個以太坊系統(tǒng)設(shè)計里不止一次的體現(xiàn)。
人欲即天理,以太坊真正實踐了這句話。
05 錢包,遠程客戶端
Web3錢包是區(qū)塊鏈網(wǎng)絡用戶每天都打交道的工具,它是事實上的Web3入口。
第一次接觸Web3錢包的人,大概率都會顧名思義把它類比成微信支付錢包或者支付寶錢包,即一個服務端支持的存著某種貨幣的系統(tǒng)。
這是對Web3錢包的最大誤解。Web3錢包是一個本地化的區(qū)塊鏈賬戶管理工具,本地化意味著它并不聯(lián)網(wǎng)儲存?zhèn)€人賬戶數(shù)據(jù)。
有耐心看到這里的讀者應該很清楚,用戶在以太坊上的所有活動都是通過自己的以太坊地址賬戶向以太坊網(wǎng)絡發(fā)送交易請求來驅(qū)動的。
那誰來幫用戶做這個事情呢,正是web3錢包軟件。
比如,當用戶打開了OpenSea(當今最大的NFT交易市場) ,下單購買一個NFT時,網(wǎng)頁會調(diào)起瀏覽器的MetaMask錢包插件。這個MetaMask插件里儲存著用戶的以太坊賬戶地址私鑰,MetaMask錢包幫助用戶打包好交易請求數(shù)據(jù),并和用戶確認所需費用,然后把這個交易請求信息發(fā)到以太坊網(wǎng)絡上以完成交易。
有讀者會問,萬一用戶丟失了以太坊私鑰怎么辦,答案是……涼拌。
如果還記得,私鑰是以一串助記詞的方式呈現(xiàn)給用戶的,如果這串助記詞丟了,而本地儲存密鑰的錢包軟件也不小心刪除了,對應的以太坊地址賬戶就永遠無法訪問了。
那么,是否有可能出現(xiàn)一個中心化的服務來托管用戶密鑰呢?
這樣的好處是,用戶還有機會通過傳統(tǒng)的身份找回方式把自己的賬戶密鑰從服務器恢復回來。從易用性上考慮這是可行的,也已經(jīng)有一些Web3產(chǎn)品比如MetaNotey.IO 正在在做這個事情 – 向用戶提供Web3賬戶的托管服務。
畢竟web3錢包也是有使用門檻的,托管之后用戶的Web3學習曲線會更平滑; 另一方面,如果允許一個中心化服務器托管自己的Web3賬戶,則又回到了傳統(tǒng)互聯(lián)網(wǎng)的命題,失去了100%的隱私安全。
隱私性和易用性很可能是無法同時100%被滿足的。我們終有取舍。
此外,類似MetaMask這樣的賬戶管理工具有另外一個名稱:遠程客戶端。
在以太坊這樣的區(qū)塊鏈網(wǎng)絡上,所有的節(jié)點都是所謂的客戶端(這名字也不盡準確,因為全節(jié)點也承載了對以太坊用戶服務的功能)。各全節(jié)點在以太坊里的地位是平等的,都包含著整個以太坊的完整信息。
但是,很多用戶并不想成為一個全節(jié)點,而只想訪問使用以太坊網(wǎng)絡。于是就衍生出了遠程客戶端的概念。遠程客戶端不需要本地儲存整個以太坊網(wǎng)絡的信息,它們對以太坊的信息都是通過訪問其他全節(jié)點完成的。遠程客戶端負責把賬戶發(fā)起的交易向以太坊廣播并接收結(jié)果。
MetaMask這樣的Web3錢包,本質(zhì)上是一個遠程客戶端。
06 代幣
“代幣”是一個經(jīng)常被提起的概念。是的,又一個語義上不容易理解的詞。
代幣是英文token的直接翻譯,指的是以太坊上用戶可以通過智能合約自行發(fā)布的虛擬幣。只要接口滿足一個協(xié)議ERC20標準,任何智能合約都能成為某個代幣的發(fā)行方。
為什么常說所謂發(fā)幣是“空氣幣”和“割韭菜行為”呢?道理其實很簡單,因為每個人都可以自由打造智能合約,去“發(fā)行”某種代幣。
“發(fā)行”是個聽起來很高級的詞,但在技術(shù)層面上,代幣合約做的事情可以非常簡單,就是幾句代碼聲明某個數(shù)量的一種代幣,并且通過標準的ERC20接口,把代幣授予不同的以太坊賬戶。
這里有個非常有趣的值得討論的細節(jié):
前面說過,每個以太坊帳戶都有一個字段記錄著這個帳戶的以太坊幣數(shù)額。那么,這些授予的代幣數(shù)額,是不是也記錄在用戶自己的以太坊帳戶里呢?
情理上貌似應該如此,但答案會出乎你的意料:并不是。
你的以太坊賬戶里唯一一種數(shù)額記錄就是以太幣數(shù)額。而各種各樣的代幣授予以太坊各賬戶的代幣額度,只記載在創(chuàng)造了這個代幣的智能合約的數(shù)據(jù)區(qū)里。
讀者可以想象一下,在這個代幣智能合約的數(shù)據(jù)儲存區(qū)里有一個表格,表格里的每一行都記錄著 “地址xxxxxx: 擁有xx個代幣”。
對,僅此而已,不可思議的簡單,甚至可以說有點簡陋。
但這就是全部的真相,代幣合約以一個最直觀的方式,把每個賬戶的代幣額度記錄在一個公開可見的表格里。
如果深究一下,這種甚至并不記錄在個人賬戶里的代幣數(shù)額,為什么能夠得到公眾認可呢?
這也得益于以太坊的數(shù)據(jù)公開性和不可篡改性。
基于ERC20協(xié)議的代幣合約代碼公開,任何人都可以閱讀驗證;而代幣的數(shù)據(jù)記錄在技術(shù)上也是確定不可修改的。盡管數(shù)據(jù)只記錄在了智能合約賬戶的數(shù)據(jù)區(qū)里,但數(shù)據(jù)公開可見且不可篡改,所以也無所謂。以太坊網(wǎng)絡的數(shù)據(jù)特性再一次幫助全體用戶認可了合約“發(fā)行”代幣這個操作的有效性。
當然,這指的是技術(shù)意義上的有效性,而不是經(jīng)濟學意義上的。
講到代幣,則肯定要再提一下現(xiàn)在炙手可熱的話題:NFT。
NFT是個很大的話題,足以開一個系列文章來談。這里只做一點簡單的技術(shù)探討。
NFT是 Non-Fungible Token(非同質(zhì)化代幣)的縮寫。
所以本質(zhì)上,NFT也是一種代幣。這句話背后的一個意思是,NFT也是由某智能合約創(chuàng)建和記錄的“虛擬幣”。
和上面所討論的代幣不同,每一個NFT代幣都是不一樣的,這個“不一樣”在技術(shù)上的理解是,每個NFT都有自己獨特的元數(shù)據(jù)(metadata),指向不同的虛擬物品(一張頭像圖片,一個游戲裝備,等等)且協(xié)議上不支持分割。
所有的“同質(zhì)化”代幣,以及以太幣都可以拆分成小于1的額度比如0.01個來交易。這也容易理解:在數(shù)據(jù)記錄層面上,以太幣和各種代幣都只是某個數(shù)字額度,這個額度可以支持小數(shù)點后的計數(shù)。
而NFT是不支持拆分的。
值得提一下的是,有兩種主要的NFT協(xié)議。
一種是ERC721,主要用來生成單個NFT;這也是現(xiàn)在大多數(shù)NFT的生成協(xié)議。
還有另一種NFT協(xié)議,是為了解決類似游戲物品的交易需求而生。
游戲內(nèi)的虛擬物品,很多是稱斤論打的,比如說一組20個藥水,10個草藥原材料,等等。ERC721在支持這樣成組的虛擬物品上有些吃力,因為它所描述的NFT都是單個生成的。因此另外一個協(xié)議 ERC1155被提出來,用來支持這種不同品類批量生成NFT。
NFT除了名字和“代幣”有關(guān)系,其他方面并沒有多少關(guān)聯(lián)。NFT的核心認知其實是“權(quán)證”,這個權(quán)證使用一串字符,或者更學究一點,一串哈希值來對應某個虛擬物品,比如一個頭像圖或者一個視頻,甚至現(xiàn)實的物品比如一雙襪子等等。這種對應關(guān)系由數(shù)學算法生成。
一個NFT質(zhì)疑者常挑戰(zhàn)的問題是:虛擬物品(更不用說現(xiàn)實世界的物品)的“所有權(quán)”如何和NFT元數(shù)據(jù)里的一串字符產(chǎn)生100%不可分割的關(guān)系?
這個問題并沒有答案。
目前也沒有任何國家法律來保證NFT所對應的物權(quán)。NFT的當前價值仍是基于所有人對于NFT的共識,以及公開交易市場上所呈現(xiàn)的真金白銀上。
作者私以為,支持Web3的人不會過多爭論NFT的“價值”是什么,正如游戲玩家從來不會懷疑虛擬裝備有沒有價值一樣。
價值本質(zhì)是一種“群體共識”,只要足夠多的人認可NFT作為“Web3時代的流通商品”的定位,只要特定NFT能和某種稀缺性的無形價值相關(guān)聯(lián),再加上NFT本身的流通性,熱度還是會持續(xù)的。
07 智能合約,DAO
智能合約是以太坊的精髓所在。
支持用戶自行發(fā)布可執(zhí)行代碼,智能合約機制讓以太坊上的應用(所謂分布式應用dapp)蓬勃生長。
以當前互聯(lián)網(wǎng)生態(tài)來對比智能合約,相同的地方是,所有用戶都可以開發(fā)自己的應用并發(fā)布到網(wǎng)絡(移動app V.S. 智能合約);前者發(fā)到應用商店,后者直接部署到智能合約賬戶里。
但有個很不同的地方是,智能合約代碼是完全公開的,且具有相互調(diào)用的能力。這在當前封閉的移動互聯(lián)網(wǎng)模式下是不能想象的。我來調(diào)用一下微信app的內(nèi)部能力? 呵呵。
以太坊智能合約的這種聯(lián)動模式,有點類似AWS的發(fā)家史。最早的時候,亞馬遜了打通全公司技術(shù)能力,強制推行各后臺技術(shù)團隊以統(tǒng)一接口開發(fā)模塊,并在公司范圍內(nèi)允許互相之間調(diào)用,這就是AWS云服務的雛形。
這是典型的積木式體系構(gòu)建思路。而以太坊更進一步,因為代碼的公開特性,整個以太坊生態(tài)技術(shù)的迭代都以一種特別透明和合作的方式呈現(xiàn)在世人面前。
在技術(shù)上沒有可以藏著掖著的地方,需要了解別人怎么做就直接去看看對方的智能合約代碼。在這種極致透明的設(shè)定下,一種全新的社區(qū)共創(chuàng)的技術(shù)文化正在欣欣向榮發(fā)展起來。
關(guān)于智能合約有個熱點值得單提出來講講, 就是熱門新潮概念 DAO。
DAO這個詞很多人第一次聽說是源于紅杉在twitter發(fā)了一個推,要all in DAO。
未來是不是屬于DAO的,下定論還有點早,但DAO(去中心化自治組織)是一個有趣的概念, 雖然名字(又)有點繞,但其核心概念是容易理解的。
DAO把組織的管理和運營執(zhí)行規(guī)則寫進了智能合約代碼,這個智能合約發(fā)行的代幣很類似公司股票,不僅有經(jīng)濟價值,也有股權(quán)價值。所有擁有DAO合約代幣的用戶通過合約代碼所約定的投票機制來決定一個執(zhí)行結(jié)果,這就是所謂基于智能合約的治理。
此外,智能合約賬戶本身也擁有著以太坊幣額度,所以DAO智能合約完全可以看做一個有資金池和嚴格的投票治理制度的虛擬公司組織。這個組織的程序執(zhí)行基于以太坊機制,確保沒有人可以破壞既定的組織規(guī)則。
根據(jù)以太坊的特性,智能合約一旦部署就不能更改,這意味著這個“智能合約”DAO公司的運營機制必須在部署之前完全確認。任何的代碼疏漏都可能成為未來的問題。
這其實不是DAO的問題,而是以太坊網(wǎng)絡所有智能合約所必須面對的挑戰(zhàn)。
有趣的是,正因為有這樣的“一次部署必須完全準確”的挑戰(zhàn),以太坊上的智能合約代碼都以一種特別簡單明了的方式來構(gòu)筑:既然越復雜的代碼越容易出錯,那不妨就盡可能簡單些。
從現(xiàn)實利益出發(fā),以太坊機引導了所有參與構(gòu)建的開發(fā)者去遵循締造者的思路:以最簡明的方式創(chuàng)造新世界。如不遵循這樣的設(shè)計思路,則要承擔更高概率出錯且無可挽回的風險。
用人性和利益而非教條來驅(qū)動社區(qū)共同遵循一個方向,我們又一次看到了這種天才的構(gòu)思。
08 共識機制和挖礦
共識機制,本文最后一個玄乎的詞。
在了解以太坊的各種細節(jié)后,為什么還要聊共識機制? 因為這是以太坊的決策基礎(chǔ)。
在一個沒有中心化管理的分布式網(wǎng)絡里,要讓整個網(wǎng)絡節(jié)點達成統(tǒng)一的意見,比如決定一個新的數(shù)據(jù)區(qū)塊由誰生成,應該怎么辦?
這就是“共識機制”發(fā)揮作用的地方。
在計算機科學里,“共識”這個術(shù)語比“區(qū)塊鏈”出現(xiàn)得更早,它泛指了在各種分布式系統(tǒng)里的不同參與者對單個狀態(tài)達成一致。
共識是以太坊的關(guān)鍵屬性,它之所以那么關(guān)鍵,是因為這個承載著真金白銀的系統(tǒng),并沒有某個人某個組織或者團隊“掌控”;或者說,控制權(quán)分布在廣泛的參與者之間。共識的終極目的是打造一個嚴格按照規(guī)則來運行且沒有單一控制者的系統(tǒng)。
這簡直是技術(shù)的理想國。
共識算法非常底層,遠比智能合約的抽象概念更加底層。對于讀者來說,不一定要理解其工作原理才能使用以太坊,正如使用互聯(lián)網(wǎng)也不需要理解路由原理一樣。但簡單了解共識這個機制順便可以幫助讀者進一步理解什么是“挖礦”,一個大家聽得很多的概念。
最早區(qū)塊鏈(比特幣)的創(chuàng)造者發(fā)明了一種叫做工作量證明(Proof of Work,PoW)的共識算法,工作量證明的一個通俗表述就是“挖礦”。
挖礦多有被誤解,很多人都以為挖礦的目的就是從系統(tǒng)獲得新的區(qū)塊鏈貨幣,但事實上,挖礦操作的本質(zhì)目的是為了保證整個區(qū)塊鏈系統(tǒng)的去中心化,保證整個系統(tǒng)以一種共識機制來運行。而遵循這個機制“挖礦”得到的獎勵則是區(qū)塊鏈所鑄造的貨幣。
這個機制有隱含的懲罰機制,如果不遵循共識規(guī)則來得到區(qū)塊獎勵,則挖礦上花費的電力就有可能血本無歸。這種實際利益驅(qū)動的規(guī)則遵循機制是各種共識算法的核心思想。
有意思的是,PoW工作量證明盡管比較容易理解(……真的嗎?),但它不是歷史上首個被提出的共識算法。在PoW出現(xiàn)之前,有人就提出基于抵押金的共識算法,就是所謂的權(quán)益證明(Proof of Stake,PoS)。
共識機制都通過系統(tǒng)的獎勵和懲罰來讓驗證者遵守共識規(guī)則:
PoW工作量證明的懲罰是外部的,花費電力做了無用功沒有得到以太坊獎勵
PoS權(quán)益證明的懲罰是區(qū)塊鏈內(nèi)在性的,即失去了質(zhì)押的以太幣。
很有意思,嚴謹?shù)挠嬎銠C科學又一次利用了人性,區(qū)塊鏈分布式網(wǎng)絡上最核心的需要全體維護的“共識規(guī)則”,其校驗機制用人性來確保:遵守者獲益,違反者被懲罰。
從最初,以太坊的創(chuàng)始者就希望有一天以太坊的共識機制能切換到權(quán)益證明,因為工作量證明有一些明顯的缺點,比如浪費現(xiàn)實世界的能源。
所以,以太坊在創(chuàng)建之初埋下了一個“難度炸彈”機制,目的是迫使以太坊的PoW挖礦變得越來越難,最終不得不讓網(wǎng)絡轉(zhuǎn)向PoS。而在本文發(fā)出之時,以太坊的PoW時代已是終章,以太坊正在過渡到它的PoS時代。
這個切換并不容易,已經(jīng)數(shù)次推遲。最新的消息是以太坊網(wǎng)絡將在今年內(nèi)正式切換到PoS模式,到時候,以太坊的“挖礦”將不復存在。
以太坊上龐大的應用體量對底層架構(gòu)的性能和可擴展性的要求越來越高,這也是以太坊下定決心向PoS機制過渡的重要原因。
無論礦工對現(xiàn)在的以太坊有多么留戀,以太坊網(wǎng)絡將以不可逆的方式降下挖礦的帷幕。
寫在最后
如果讀者還能堅持看到最后,對以太坊這個Web3時代最重要的基礎(chǔ)設(shè)施的技術(shù)概念應該有了一些初步的理解。
以太坊的技術(shù)構(gòu)建,在每個細節(jié)上都閃耀著技術(shù)理想主義的光芒。
以太坊的締造者期望用一種簡潔明了的方式,構(gòu)造一個所有用戶都能平等參與,自由構(gòu)建的Web3新世界。
這個理想國新世界構(gòu)筑在嚴謹?shù)臄?shù)學理論和簡明的邏輯結(jié)構(gòu)之上。無數(shù)技術(shù)天才正在為這個理想國添磚加瓦。了解越多,則會越傾向于相信,這個網(wǎng)絡將擁有一個非凡和長久的價值。
作者:城主;來源公眾號:Web3天空之城(ID:Web3SkyCity)
原文鏈接:https://mp.weixin.qq.com/s/tMwgIhdPC252V7YQjR1VFg
本文由@Web3天空之城 授權(quán)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自Unsplash,基于CC0協(xié)議
該文觀點僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺僅提供信息存儲空間服務。
謝謝,看了一些,這篇講的好好懂。以太坊是公認的智能契約交易處理機
大佬試圖在教會我,我嘗試假裝自己看懂了