原文: Vitalik Buterin
作者:stvenyin
校對:? stvenyin
峰會鏈接:https://www.youtube.com/watch?v=Yo9o5nDTAAQ&feature=youtu.be
以下為Vitalik Buterin在Ethereum Devcon3上的演講《Ethereum in 25 minutes, vision 2017》的上半部分。
好的,那么晓猛,這個演講希望成為一種盡可能簡潔的介紹饿幅,與此同時,能夠涵蓋重要的部分戒职,比如栗恩,最基本的,從技術(shù)角度來說以太坊(Ethereum)協(xié)議在實際上看起來是什么樣的洪燥。
那么磕秤,我將直接切入,下沉到以太坊之所是捧韵,以背景市咆,即以太坊存在的理由,來開始基礎(chǔ)介紹再来∶衫迹回到我在2013年末寫出初始白皮書的時候,公眾芒篷、區(qū)塊鏈技術(shù)搜变、尤其是那些致力于使區(qū)塊鏈技術(shù)超越僅僅是比特幣(Bitcoin)貨幣的人們,已經(jīng)表現(xiàn)出大量的興趣≌肼現(xiàn)在挠他,人們正致力于開發(fā)以太坊應用、發(fā)行資產(chǎn)到區(qū)塊鏈上糊识、眾籌绩社、域名注冊、域名幣(Namecoin)這樣的項目赂苗、產(chǎn)權(quán)登記愉耙、投機、預測市場拌滋、物聯(lián)網(wǎng)(loT)應用朴沿、醫(yī)療應用。區(qū)塊鏈上有許多的應用败砂,超越了像“我有50個比特幣赌渣,我發(fā)20個比特幣給你,然后你就有了20個比特幣”這樣昌犹。
問題在于坚芜,那時候大多數(shù)存在的區(qū)塊鏈都是像這樣設計的。我的意思是斜姥,這種豆豆計算器有何意義呢鸿竖?它可以做到這件事沧竟,它也可以把這件事做得很棒,但這也是它唯一能做到的事缚忧。誠然悟泵,如果你有一臺超級棒的TI-80(譯者注:德州儀器發(fā)行的一款學生用科學計算器)或是別的,你或許能夠通過某種方式在上面編寫一個視頻游戲闪水,但沒有人會真的想這么做糕非。所以,普遍地來說球榆,它最后變成了能用來做一件事情的一個工具朽肥。
但是,如果我們想讓它做不止一件事情呢芜果?當然鞠呈,你可以為5個不同的目的買5種不同的設備,但這很快就會(回到原點)右钾。下一步是蚁吝,人們開始創(chuàng)造像瑞士軍刀一樣的協(xié)議。你可能會想象舀射,一群人走進一個房間窘茁,他們頭腦風暴了一個鐘,然后他們寫出了25個不同的區(qū)塊鏈應用脆烟,然后山林,他們達成了25種不同的交易類型。交易類型一邢羔,創(chuàng)建一個共籌驼抹;交易類型二,參與一個眾籌拜鹤;交易類型三框冀,創(chuàng)建一個保險合約;交易類型四敏簿,開一個雙人房明也;交易類型五,注冊一個域名惯裕;等等温数,乃至他們可以想到的每一種應用。這就是我使用“瑞士軍刀”的含義蜻势。
但問題又在于撑刺,如果你有了一個瑞士軍刀協(xié)議,你擁有這個在一個房間里孵化出25種不同項目的協(xié)議握玛,他們創(chuàng)建這一協(xié)議猜煮,放出這個協(xié)議次员,一個星期以后,一個芬蘭的小伙子寫出了第26個區(qū)塊鏈應用王带,然后,你必須更改整個協(xié)議市殷。
所以愕撰,為什么不創(chuàng)建一個像這個一樣的協(xié)議?(屏幕上是一臺Windows Phone醋寝,屏幕下方有一行字:特別感謝微軟(Microsoft)贊助本次大會搞挣。聽眾大笑)
為什么不做一個基本上像一臺智能手機一樣的區(qū)塊鏈協(xié)議,來取代那些僅支持很少一些應用音羞、你能做的也僅僅是這些應用的協(xié)議囱桨?因此,我們做了一個區(qū)塊鏈協(xié)議嗅绰,它支持編程語言舍肠,因此也給了你技能來創(chuàng)建應用。一個應用是什么呢窘面?其實翠语,任何人都可以寫一些代碼,打包這些代碼并上傳它财边,然后你就有一個app肌括!如果任何其他人想使用你的app,他們下載這個app酣难,然后它就會出現(xiàn)在他們的手機上谍夭,他們可以使用它,可以運行它憨募。對紧索,就是這樣,基本上這就是為什么一個手機可以打電話馋嗜、瀏覽網(wǎng)頁齐板、聽音樂、用文字與其他人會話葛菇、玩游戲甘磨;只是因為我們將數(shù)以千計的東西集成到一個設備上。這就是通用計算的力量眯停。這也是我想帶給區(qū)塊鏈世界的一種精神济舆。
概念
所以,首先莺债,以太坊是一個區(qū)塊鏈滋觉!耶~签夭!
加法
但是,你知道椎侠,我們增加了一些東西第租。首先,以太坊擁有一個內(nèi)置的通用編程語言我纪,允許你在其中編寫非常多的應用慎宾。
現(xiàn)在,在一個目的只在于支持貨幣轉(zhuǎn)移的區(qū)塊鏈上浅悉,那里將只有一種類型的賬戶趟据。這種類型的賬戶將成為這樣的一個賬戶:它被某些用戶所控制、它將保存貨幣术健。你將能夠從一個賬戶發(fā)送這些貨幣到另一個汹碱。但在以太坊上我們有兩種類型的賬戶。
第一種類型的賬戶是被用戶控制的荞估,所以你擁有一個加密私鑰咳促,你可以用它來代表你的地址、為執(zhí)行操作的信息打上電子簽名泼舱。這些操作被稱為交易等缀,它們可以被廣播到整個網(wǎng)絡;如果它們被包含到了一個區(qū)塊中娇昙,這些操作就會生效尺迂。
另一種類型的賬戶在根本上由一段運行在區(qū)塊鏈自身的代碼來控制。所以冒掌,你可以擁有一個被一個計算機程序控制的賬戶噪裕,這個計算機程序有一些規(guī)則,這些規(guī)則可能說的是:如果A發(fā)生了股毫,那就發(fā)一些幣給X膳音;如果B發(fā)生了,那就發(fā)一些幣給Y铃诬;如果C發(fā)生了祭陷,就僅僅保持現(xiàn)狀。如果你發(fā)送一些幣給這個賬戶趣席,這個賬戶的代碼就僅僅是這樣一個東西:它在那時候起有能力將這些幣轉(zhuǎn)移到別的地方去兵志。
從字面上來講,這些就是被一個計算機程序直接控制的電子資產(chǎn)宣肚。當然想罕,這些合約可以被用來做更多事情,不止于僅僅控制電子資產(chǎn)霉涨。它們可以被用來表示區(qū)塊鏈應用里面任意復雜的商業(yè)邏輯按价。這也包括了像ENS惭适,以太坊域名系統(tǒng)(Ethereum Name System)這樣的東西,它可以被用來跟蹤一些區(qū)塊鏈上的正在投票的方案楼镐;它也可以被用來跟蹤鏈上多種多樣的發(fā)行人背書資產(chǎn)癞志,還有很多不同的用例】虿基本上今阳,任何人都可以通過定義一個合約來創(chuàng)建一個應用或者任何規(guī)則。
DNS, the Hello World of Ethereum
DNS茅信,這個以太坊的Hello World,就是其中一個你可以寫出來墓臭,并且客觀來說仍然很有用的蘸鲸、最簡單的應用。重點在于窿锉,這是一段代碼酌摇,而我的意思是,你也許已經(jīng)注意到了嗡载,從去年開始代碼已經(jīng)發(fā)生了某種程度的變化窑多。根本上來說,這是因為在去年洼滚,你的代碼是用Serpent寫的埂息,而現(xiàn)在我們有了優(yōu)于Serpent的Viper,待會可能還會有人來談這個話題遥巴。因此千康,你有兩種函數(shù),而這兩種函數(shù)代表了通過合約你可以做的事情铲掐。
domains: {owner: address, ip: num}[bytes32]
def register(addr: bytes32):
if not self.domains[addr].owner:
? self.domains[addr].owner = msg.sender
def set_ip(addr: bytes32, ip: num):
if self.domains[addr].owner == msg.sender:
? self.domains[addr].ip = ip
(PPT上呈現(xiàn)的代碼)
首先拾弃,你有了一個關(guān)于該合約實際上儲存的東西的描述。這個合約儲存了關(guān)于一個域(domain)的映射摆霉,誰是這個域的所有者豪椿,這個域支持指向的IP地址是什么。然后携栋,有一個函數(shù)叫做注冊(register)搭盾,如果一個域還沒有一個所有者,所有者會被給這個域發(fā)送信息的人所確定刻两,無論TA是誰增蹭。所以無論是誰發(fā)送了交易,這個函數(shù)就被激活了磅摹。然后你還有另一個設置IP函數(shù)滋迈,激活這個函數(shù)也是非常簡單的霎奢,它僅僅只是檢查一下當你試圖為一個域設置IP地址的時候你是否擁有它,如果是饼灿,它就會把IP設置為任何你想要的地方幕侠。
所以,在一個合約中碍彭,所有信息都儲存在哪里呢晤硕?在一個簡單的區(qū)塊鏈上,你可以將區(qū)塊鏈記錄的狀態(tài)(state)認為是僅僅對賬戶的余額作了一個簡單的映射庇忌。地址12345擁有70個幣舞箍,地址B7884擁有2萬個幣,諸如此類皆疹。以太坊的狀態(tài)要略微豐富一點疏橄。但也仍然是對內(nèi)在于賬戶的東西的一個映射,但這些內(nèi)在于該賬戶的信息可以是復雜很多的略就。
所有捎迫,首先,你有賬戶余額表牢,就是這個賬戶有多少以太幣(ether)晋辆。你也有Nonce绘趋,基本上是一個用于重播攻擊保護(replay protection)的對沖措施。你有合約的代碼,如果該賬戶是一個合約的話习寸。你也有合約庫(contract storage)乘盖,合約庫就是一種小型的數(shù)據(jù)庫耳贬,任何以太坊上的合約都可以使用秕岛。在這個案例中,從域到誰擁有這個域折汞、它的IP地址是什么的映射倔幼,將在實際上被保存在合約庫里。區(qū)塊鏈上的歷史就是發(fā)生過的事情爽待,所以你擁有交易記錄损同。在以太坊上,你擁有這個叫做“收據(jù)(receipt)”的概念鸟款。就現(xiàn)在而言膏燃,所有全節(jié)點都儲存狀態(tài),一些全節(jié)點儲存歷史何什,而不存儲歷史的全節(jié)點也是有可能存在的组哩。
所以,那就是我們到達的地方。每一個賬戶對象都包括4段數(shù)據(jù)伶贰。我會打開它大概5秒鐘蛛砰,因為每個人都想拍下它。5黍衙,4泥畅,3,2琅翻,1位仁,下一張。
state
State consists of key value mapping addressed to account objects
Every account objest contains 4 pieces of data:
Nonce
Balance
Code hash(code = empty string for private key-controlled accounts )
Storage trie root
然而方椎,如果交易的目標包含代碼聂抢,也就是說如果交易的目標是一個合約,則目標地址的代碼就會運行棠众。代碼能夠做一系列的事情涛浙。因此合約也有能力發(fā)送以太幣給另一個合約。它有能力讀取和寫入一個合約內(nèi)部的庫摄欲。所以,如果你回顧這個例子(譯者注:上述domain例子)疮薇,一個對注冊函數(shù)(register function)的調(diào)用將變成一個交易胸墙,而這一交易將,你懂的按咒,導致前述域的所有者被確定迟隅,以及在庫中寫入該信息,以及励七,(如果有需要)該聲明從另一個庫中讀取信息智袭。綜上,它可以讀取也可以寫入庫掠抬,它甚至可以調(diào)用另一個合約吼野。這也被稱為一個內(nèi)部交易×讲ǎ基本上瞳步,合約可以與其它合約通信,其方式與外部用戶與合約通信的方式完全一致腰奋。每一個區(qū)塊鏈上的全節(jié)點都運行每一個交易并存儲全部狀態(tài)单起。我把它加粗了,因為這是重要的劣坊。
Gas
然后嘀倒,以太坊上的Gas。普遍來說,有一個東西被稱為“停機問題”(Halting Problem)测蘑,它的基本意思是灌危,你沒有辦法真正從原則上斷定一個程序會不會永遠跑個沒完。分辨該程序會不會在一系列步驟之后結(jié)束帮寻,或者將一直運行下去乍狐,是一個不管用此種還是彼種方式都不可能從數(shù)學上得到證明的東西。所以固逗,我們用的解決方案是這樣一個機制:我們根據(jù)交易消耗的運算步驟對交易收費浅蚪,而我們衡量運算步驟的單位就被叫做Gas。
每一筆交易都必須指定Gas限制烫罩,該交易必須明確它可以消耗的gas的最大數(shù)量惜傲;然后,當代碼運行的時候贝攒,運行開始使用Gas盗誊;如果代碼運行在Gas被耗盡之前停止了,那么萬事大吉隘弊;但如果代碼運行到達了一個所有Gas都被花費掉的點上哈踱,那么該交易會回復原狀,從空氣中消失梨熙,但交易的發(fā)送者仍然必須支付一筆費用开镣。
所以,以太坊上的Gas限制是比特幣上區(qū)塊大小限制的對應物咽扇,而它被設定的方式也是非常簡單的——基本上由礦工們投票來決定⌒安疲現(xiàn)在,Gas上限是6.7百萬單位质欲。如果我們到達了上限并且有必要提高它树埠,礦工們可以投票。非常簡單嘶伟。