連載序言:
以太坊(Ethereum)是世界上第一個也是迄今為止最大的基于區(qū)塊鏈技術(shù)的智能合約平臺喜庞。這份手冊是其第一個生產(chǎn)版本Homestead的技術(shù)手冊么鹤,主要目的是幫助初中級用戶和開發(fā)者了解以太坊的方方面面和相關(guān)客戶端终娃、開發(fā)工具的使用。它是由以太坊社區(qū)在Github上共同維護(hù)的午磁。Github地址:https://github.com/ethereum/homestead-guide.git
我個人從今年4月中旬開始尝抖,用業(yè)余時間對這份手冊進(jìn)行了翻譯,期間因為工作原因時有中斷迅皇,到現(xiàn)在才基本完成昧辽。我計劃在最后一個月的校對和語言潤色過程中,節(jié)選部分與技術(shù)細(xì)節(jié)登颓、客戶端或開發(fā)工具無關(guān)的搅荞,關(guān)于以太坊所涉及的一些相關(guān)概念的介紹章節(jié),作為獨立的文章在我個人的簡書上進(jìn)行連載。節(jié)選的時候咕痛,我會在不影響閱讀的前提下痢甘,去掉外部網(wǎng)站資源鏈接或這份在線文檔內(nèi)的引用。有興趣的讀者可以訪問我個人的Github取得完整的翻譯稿源代碼自行編譯為html文檔茉贡。Github地址:https://github.com/riversyang/homestead-guide-cn.git
此外塞栅,相信很多朋友都會對今年上半年國內(nèi)的區(qū)塊鏈(虛擬貨幣ICO)熱潮以及9月初央行聯(lián)合各金融管理機構(gòu)聯(lián)合發(fā)布的ICO非法的公告造成的影響有些許了解,但I(xiàn)CO和以以太坊為代表的智能合約平臺并沒有關(guān)系腔丧,ICO也不是區(qū)塊鏈應(yīng)用的唯一出路放椰。(關(guān)于區(qū)塊鏈的基本概念及其應(yīng)用的話題,我也會擇機另行撰文探討愉粤。)我個人依然很看好區(qū)塊鏈技術(shù)在個人業(yè)務(wù)領(lǐng)域結(jié)合智能合約砾医,以及在企業(yè)業(yè)務(wù)領(lǐng)域作為基礎(chǔ)數(shù)據(jù)存儲革新的市場前景,因為這代表著“未來”的去中心化自由經(jīng)濟(jì)趨勢和更高的安全性衣厘、技術(shù)級別的可信性如蚜。所以我決定開始這個連載,幫助可能的用戶和開發(fā)者了解以太坊及智能合約的概念影暴。而這也是我在開博隨筆中提到的今年做的另一件真正有意義的事情错邦。同時我也希望各層次的讀者都能在這個連載中有所收獲。
對文章內(nèi)容或者相關(guān)概念有任何疑問坤检、意見或者建議兴猩,都可以在簡書中給我留言,我會酌情回復(fù)早歇;當(dāng)然,也可以通過Github與我聯(lián)系讨勤。期待與大家的更多互動箭跳。
2017年11月
以太坊是什么?
以太坊(Ethereum)是一個開放的區(qū)塊鏈平臺,可以讓任何人都能夠創(chuàng)建和使用基于區(qū)塊鏈技術(shù)的去中心化應(yīng)用程序潭千。與比特幣一樣谱姓,沒有人控制或擁有以太坊,它是一個由全世界的許多人所共通創(chuàng)建的開源項目刨晴。 不同于比特幣的是屉来,以太坊被設(shè)計成靈活的、可根據(jù)需求修改的模式狈癞。在以太坊平臺上創(chuàng)建應(yīng)用是很容易的茄靠,在Homestead這個版本中,所有人使用這些應(yīng)用程序都已經(jīng)很安全了蝶桶。
下一代的區(qū)塊鏈
區(qū)塊鏈技術(shù)是比特幣的基礎(chǔ)技術(shù)慨绳,在神秘的作者中本聰(Satoshi Nakamoto)于2008年發(fā)表的的白皮書"Bitcoin: A Peer-to-Peer Electronic Cash System"中被首次描述。盡管在這篇最初的論文中已經(jīng)提及了區(qū)塊鏈技術(shù)的泛用性,但區(qū)塊鏈作為通用術(shù)語出現(xiàn)脐雪,還是在幾年之后的事厌小。區(qū)塊鏈?zhǔn)且粋€分布式的計算架構(gòu),每個網(wǎng)絡(luò)節(jié)點都執(zhí)行和記錄同樣的交易流水战秋,這些流水?dāng)?shù)據(jù)被組織到所謂區(qū)塊之中璧亚。在同一時間,只有一個區(qū)塊可以被添加到區(qū)塊鏈中脂信;每個區(qū)塊都包含一個數(shù)學(xué)證明涨岁,來證實它是在它之前的所有區(qū)塊之后產(chǎn)生的。用這種方法吉嚣,使區(qū)塊鏈的“分布式數(shù)據(jù)庫”在整個網(wǎng)絡(luò)中達(dá)到共識梢薪。用戶與賬本(交易流水)的交互通過強大的加密方式保證其安全性。負(fù)責(zé)維持和校驗整個網(wǎng)絡(luò)狀態(tài)的節(jié)點尝哆,將獲得基于編碼到協(xié)議中的經(jīng)濟(jì)學(xué)獎勵算法計算得出的獎勵秉撇。
對于比特幣而言,分布式數(shù)據(jù)庫被設(shè)想成通過比特幣代幣在賬戶間的轉(zhuǎn)移來使個人用戶間的去信任金融變?yōu)榭赡艿囊环N賬戶結(jié)算表秋泄、賬本和交易流水的集合琐馆。但隨著比特幣吸引了越來越多的開發(fā)者和技術(shù)專家,一些新奇的項目開始用比特幣網(wǎng)絡(luò)來做一些代幣價值轉(zhuǎn)移以外的工作恒序。其中一些項目采用了"alt coins"的模式瘦麸,通過改進(jìn)原始的比特幣協(xié)議形成自己的加密貨幣,從而將區(qū)塊鏈分離以增加新的特性和功能歧胁。在2013年底滋饲,以太坊(Ethereum)的發(fā)明人Vitalik Buterin正式提出了一個設(shè)想,這是一個具有再編程能力的喊巍、用來執(zhí)行任意復(fù)雜計算的單一區(qū)塊鏈屠缭,可以將很多其他的項目納入其內(nèi)。
在2014年崭参,以太坊(Ethereum)的創(chuàng)始人Vitalik Buterin, Gavin Wood和Jeffrey Wilcke就開始致力于構(gòu)建下一代的區(qū)塊鏈技術(shù)的工作呵曹,以實現(xiàn)一個通用的、完全去信任的智能合約平臺(smart contract platform)何暮。
以太坊虛擬機
以太坊是一個可編程的區(qū)塊鏈奄喂。以太坊允許用戶根據(jù)自己的設(shè)想創(chuàng)建任意復(fù)雜的操作,而不是只給用戶一些預(yù)設(shè)好的操作(例如比特幣的交易操作)海洼。用這種方法跨新,它成為了一個支撐許多不同類型的去中心化區(qū)塊鏈應(yīng)用的平臺,包含但不僅限于加密貨幣贰军。
狹義上說玻蝌,以太坊是定義了去中心化應(yīng)用平臺的一套協(xié)議蟹肘。其核心就是可以運行任意的復(fù)雜計算代碼的以太坊虛擬機(Ethereum Virtual Machine,即EVM俯树,后續(xù)連載中會有更詳盡的介紹帘腹,譯者注) 。用計算機科學(xué)術(shù)語來講许饿,以太坊是“圖靈完備”的阳欲。開發(fā)者可以使用友好的編程語言在EVM上創(chuàng)建應(yīng)用程序,比如使用JavaScript或Python陋率。
與其他任何區(qū)塊鏈一樣球化,以太坊也包含一個P2P(peer-to-peer)網(wǎng)絡(luò)協(xié)議。以太坊區(qū)塊鏈數(shù)據(jù)庫瓦糟,由眾多的連接到此網(wǎng)絡(luò)的節(jié)點維護(hù)和更新筒愚。每個節(jié)點都會運行EVM并執(zhí)行相同的操作序列。因此菩浙,以太坊有時也被形象的描述為“全球計算機”(“world computer”)巢掺。
這種跨越整個以太坊網(wǎng)絡(luò)的超大規(guī)模并行計算,并不會使計算更加高效劲蜻。事實上陆淀,這樣的過程,使在以太坊上進(jìn)行的普通的計算遠(yuǎn)比使用傳統(tǒng)的“計算機”來的更慢先嬉、更昂貴轧苫。但是,由于每個以太坊節(jié)點都會運行EVM來在區(qū)塊鏈上達(dá)成共識疫蔓,這種去中心化的共識含懊,也給了以太坊極致的容錯性(fault tolerance)、零宕機時間(zero downtime)鳄袍、使存儲在區(qū)塊鏈上的數(shù)據(jù)永遠(yuǎn)無法更改(forever unchangeable)和抗審查(censorship-resistant绢要,即不怕審查,因為數(shù)據(jù)一直是真實的拗小,無法篡改的,譯者注)樱哼。
以太坊平臺本身是無特性(featureless)或價值未知(value-agnostic)的哀九。與編程語言一樣,是企業(yè)家和開發(fā)者決定它應(yīng)該用來做什么搅幅。然而根據(jù)以太坊本身的能力阅束,某些特定的應(yīng)用顯然要比其他類型更能受益。具體來講茄唐,以太坊 適合于那些旨在解決點到點之間直接交互息裸,或者跨網(wǎng)絡(luò)的團(tuán)體協(xié)作問題的應(yīng)用程序蝇更。 例如特定的點到點(peer-to-peer)交易市場應(yīng)用,或者自動化的復(fù)雜金融合約應(yīng)用等等呼盆。 比特幣年扩,允許個人在不引入任何中介,像金融機構(gòu)访圃、銀行或政府的情況下進(jìn)行貨幣交易厨幻。而以太坊的影響會更加深遠(yuǎn)。從理論上講腿时,任意復(fù)雜度的金融交互或交易(financial interactions or exchanges)都可以使用以太坊上的代碼來自動化的况脆、可靠的實現(xiàn)。而除金融應(yīng)用以外批糟,任何注重信任格了、安全、持久性的場合徽鼎,比如資產(chǎn)注冊盛末、投票、管轄和物聯(lián)網(wǎng)纬傲,都可以大范圍的嵌入以太坊平臺满败。
以太坊是如何運作的?
以太坊中包含了很多比特幣用戶很熟悉的特性和技術(shù)叹括,同時它也引入了很多的修改和創(chuàng)新算墨。
與比特幣區(qū)塊鏈中單純的交易流水不同,以太坊區(qū)塊鏈中的基礎(chǔ)單元是賬戶(account汁雷,在后續(xù)連載中會有更詳盡的介紹净嘀,譯者注)。以太坊區(qū)塊鏈跟蹤每個賬戶的狀態(tài)侠讯;以太坊區(qū)塊鏈上的所有狀態(tài)轉(zhuǎn)換挖藏,都是賬戶間的價值或者信息的轉(zhuǎn)移。以太坊中的賬戶有兩種類型:
- 由私鑰控制的外部賬戶(Externally Owned Account厢漩,即EOA)
- 由自身的合約代碼控制的合約賬戶膜眠,這種賬戶只能由EOA“激活”(Activate)
對大多數(shù)用戶來講,它們最基礎(chǔ)的區(qū)別就是人控制EOA溜嗜,因為人能通過私鑰控制EOA上的行為宵膨;而合約賬戶則由它們內(nèi)部的代碼來管理。對于合約賬戶炸宵,我們也可以說他們是有人“控制”的辟躏,因為他們 被編制為由一個有特定地址的EOA所控制,而這個EOA則由掌握其私鑰的“人”所控制土全。當(dāng)一個交易發(fā)送到合約賬戶上時捎琐,合約賬戶中的特定代碼會被觸發(fā)并執(zhí)行会涎,這些代碼即是通常意義上的“智能合約”。用戶可以在區(qū)塊鏈上發(fā)布代碼來創(chuàng)建新的合約瑞凑。
僅當(dāng)合約賬戶接到一個EOA的指示的時候末秃,它才會去執(zhí)行一個操作。所以合約賬戶不可能去做一些自發(fā)的操作拨黔,比如生成隨機數(shù)或調(diào)用API蛔溃,除非被EOA指定去做。這是因為以太坊中的節(jié)點需要一個嚴(yán)格確定的執(zhí)行確認(rèn)篱蝇,來認(rèn)證外來的計算要求贺待。
與比特幣一樣,用戶為了完成一個交易零截,需要向網(wǎng)絡(luò)支付小額的交易費麸塞。這個機制是用來保護(hù)以太坊網(wǎng)絡(luò)不被一些無價值或惡意的計算任務(wù)所影響,比如DDoS攻擊或者無限循環(huán)涧衙。交易的發(fā)送者必須為他們所激活的每一步“程序”支付相應(yīng)的費用哪工,包括計算和存儲。這些費用是用一定量的以太坊原生代幣——以太幣來體現(xiàn)的弧哎。
這些交易費用雁比,是由驗證整個網(wǎng)絡(luò)的節(jié)點們所收取的。這些以太坊網(wǎng)絡(luò)中接受撤嫩、傳播偎捎、驗證和執(zhí)行交易的節(jié)點,即是所謂的“礦工”序攘。包含了以太坊區(qū)塊鏈中賬戶“狀態(tài)”變動的所有交易信息茴她,由礦工們歸集到“區(qū)塊”中,然后開始互相競爭程奠,以使 他們自己產(chǎn)生的區(qū)塊成為區(qū)塊鏈中的下一個區(qū)塊丈牢。礦工每成功挖到一個礦(即把自己生成的區(qū)塊添加到區(qū)塊鏈上,譯者注)瞄沙,都將獲得獎勵己沛。這就是對那些為以太坊網(wǎng)絡(luò)貢獻(xiàn)硬件和算力的人的經(jīng)濟(jì)上的激勵。
與比特幣網(wǎng)絡(luò)一樣距境,礦工們想要成功“挖到”一個區(qū)塊也需要解決一個復(fù)雜的數(shù)學(xué)問題泛粹。這就是被熟知的“工作量證明”("Proof of Work")。任何一個通過算法解決問題所消耗的資源大于驗證結(jié)果所消耗的資源的計算問題肮疗,都是工作量證明的良好選擇。為了弱化比特幣網(wǎng)絡(luò)中使用特定硬件(比如 ASICs扒接,一種專門用于計算的集成電路硬件伪货,譯者注)所帶來的中心化趨勢们衙,以太坊選擇了一個強內(nèi)存需求(memory-hard)的計算問題。如果解決一個問題就像需求CPU一樣需求內(nèi)存碱呼,那可以支撐的硬件會更趨近于通常的計算機蒙挑。這使以太坊的工作量證明“抗ASIC”;并且與比特幣的可能受制于特定硬件的挖礦過程相比愚臀,這種工作量證明更加有利于去中心化分布的安全性(即在一定程度上避免由于過多的區(qū)塊都由一小部分計算能力非常強的節(jié)點所產(chǎn)生而導(dǎo)致的中心化趨勢忆蚀,譯者注)。
待續(xù)姑裂。