區(qū)塊鏈技術(shù)(十二):25分鐘認識以太坊(上)

原文: 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百萬單位质欲。如果我們到達了上限并且有必要提高它树埠,礦工們可以投票。非常簡單嘶伟。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末怎憋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子九昧,更是在濱河造成了極大的恐慌盛霎,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耽装,死亡現(xiàn)場離奇詭異愤炸,居然都是意外死亡,警方通過查閱死者的電腦和手機掉奄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門规个,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凤薛,“玉大人,你說我怎么就攤上這事诞仓$蜕唬” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵墅拭,是天一觀的道長活玲。 經(jīng)常有香客問我,道長谍婉,這世上最難降的妖魔是什么舒憾? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮穗熬,結(jié)果婚禮上镀迂,老公的妹妹穿的比我還像新娘。我一直安慰自己唤蔗,他們只是感情好探遵,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著妓柜,像睡著了一般箱季。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上棍掐,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天规哪,我揣著相機與錄音,去河邊找鬼塌衰。 笑死,一個胖子當著我的面吹牛蝠嘉,可吹牛的內(nèi)容都是我干的最疆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蚤告,長吁一口氣:“原來是場噩夢啊……” “哼努酸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起杜恰,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤获诈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后心褐,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舔涎,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年逗爹,在試婚紗的時候發(fā)現(xiàn)自己被綠了亡嫌。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖挟冠,靈堂內(nèi)的尸體忽然破棺而出于购,到底是詐尸還是另有隱情,我是刑警寧澤知染,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布肋僧,位于F島的核電站,受9級特大地震影響控淡,放射性物質(zhì)發(fā)生泄漏嫌吠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一逸寓、第九天 我趴在偏房一處隱蔽的房頂上張望居兆。 院中可真熱鬧,春花似錦竹伸、人聲如沸泥栖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吧享。三九已至,卻和暖如春譬嚣,著一層夾襖步出監(jiān)牢的瞬間钢颂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工拜银, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留殊鞭,地道東北人。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓尼桶,卻偏偏與公主長得像操灿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子泵督,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354

推薦閱讀更多精彩內(nèi)容