Vitalik: 25分鐘認(rèn)識(shí)以太坊(下)
hongji|23. Nov, 2017| ?? ? ? ? ? 607 次閱讀
編者按:以下為Vitalik Buterin在Ethereum Devcon3上的演講《Ethereum in 25 minutes, vision 2017》的下半部分。以下中文皆直接從視頻中聽(tīng)寫并譯出,如有錯(cuò)失,請(qǐng)不吝賜教。
附:干貨 | Vitalik: 25分鐘認(rèn)識(shí)以太坊(上)
交易
以太坊上的交易有7個(gè)部分:
交易nonce,基本上就是一種反交易重播措施,如果你正在發(fā)送交易,讓我們假設(shè)如果我發(fā)送了10個(gè)以太幣給Bob,它(nonce)防止Bob提取這一交易并在區(qū)塊鏈上包含它100次,那樣的話我就發(fā)送1000個(gè)了以太幣給Bob。每一個(gè)交易都最多只能被包含一次。
Gas價(jià)格,就是你為你的交易所占用每一單位的gas付出的以太幣數(shù)量,這就是給予礦工的交易費(fèi)用。
Startgas,交易可以使用的gas最大數(shù)量限制,也就是該交易可以消耗的計(jì)算資源的最大數(shù)量。
To,就是目標(biāo)。
價(jià)值(Value),交易發(fā)送的以太幣數(shù)量。
數(shù)據(jù),就是說(shuō),如果你的交易有一個(gè)合約目標(biāo),那么該合約就可以讀取數(shù)據(jù)。所以,接著就是一種做比如明確函數(shù)爭(zhēng)議這樣的事情的方式。
V,R,S,就是一個(gè)ECDSA簽名,這是為解密者設(shè)計(jì)的。V在這兒因?yàn)槟阈枰~外的一個(gè)部分以從簽名中還原公鑰。所以,我們做的是公鑰恢復(fù),而非任何種類的驗(yàn)證,我們說(shuō)那是比特幣做事情的方式。
Log
Log是一種只可添加、而不可被合約所讀取的庫(kù)的形式。關(guān)于Log的重點(diǎn)是,讓我們假設(shè),現(xiàn)在有一個(gè)事件在合約運(yùn)行過(guò)程中發(fā)生了,我們希望讓人們搜索這些事件以及偵測(cè)這些已經(jīng)發(fā)生的事件變得非常容易。所以一個(gè)Log可以長(zhǎng)達(dá)4個(gè)“topic”(32
bytes),并且,這里有一個(gè)布隆過(guò)濾器(Bloom
Fliter)所以你可以非常容易地搜尋topic。同時(shí)這也允許你存儲(chǔ)任意數(shù)量的數(shù)據(jù)。這些Log被放進(jìn)了一棵默克爾樹,它允許非常高效的通往Log的輕客戶端通道。如果你有一個(gè)輕客戶端,你可以通過(guò)Log來(lái)搜索,你可以拿topic當(dāng)作關(guān)鍵詞,這也允許你非常容易地搜索到合約已經(jīng)創(chuàng)建的一種特定類型的事件。這對(duì)于分散化應(yīng)用(Dapp)編程來(lái)說(shuō)是非常有用的。
以太坊虛擬機(jī)
以太坊虛擬機(jī)(Ethereum Virtual Machine,EVM)。一開始,你有一個(gè)堆棧,數(shù)字可以被加入(push)棧以及從棧中輸出(pop)。你擁有內(nèi)存,內(nèi)存就是一個(gè)虛擬機(jī)可以進(jìn)入的臨時(shí)數(shù)據(jù)組。所以內(nèi)存只能在我短暫地處于運(yùn)行環(huán)境中的時(shí)候才能存在,一旦運(yùn)行結(jié)束,內(nèi)存也就停止存在了。庫(kù)(stortage),就像合約數(shù)據(jù)庫(kù)一樣,是永久的存儲(chǔ)空間。環(huán)境變量,以太坊虛擬機(jī)上的合約可以獲得像是區(qū)塊數(shù)量或是時(shí)間戳這樣的東西。而且你還有Log和次級(jí)調(diào)用(sub-calling)所以合約有能力通過(guò)發(fā)送我們說(shuō)的“內(nèi)部交易”來(lái)調(diào)用其他合約。
大多數(shù)時(shí)候,你并不準(zhǔn)備直接寫作EVM代碼,因?yàn)橐苯訉慐VM代碼是非?,嵥榈摹O喾?,你將用高級(jí)語(yǔ)言寫作,然后編譯成EVM代碼。這里有一些這樣的高級(jí)語(yǔ)言,你可以用Viper,Solidity,LLL,還有Bamboo。再一次地你可能注意到,Serpent不再被放在這個(gè)列表中了,如果你還在用Serpent,我建議你轉(zhuǎn)換到Viper。
ABI
這就是函數(shù)調(diào)用得到被編譯或說(shuō)其代碼被寫到交易數(shù)據(jù)中的方式。所以如果你正在調(diào)用一個(gè)合約,那么實(shí)際上發(fā)生的事情就是它做了一個(gè)函數(shù)調(diào)用,以及,額,抱歉,如果你調(diào)用了一個(gè)函數(shù),那么實(shí)際上發(fā)生的事情就是它創(chuàng)建了一個(gè)交易,并且該交易包含了在這一公式中被指定的數(shù)據(jù)。所以一開始有4byte是函數(shù)ID,然后32byte是一個(gè)要求,再來(lái)32byte是另一個(gè)要求。如果你試圖請(qǐng)求一個(gè)合約中的一個(gè)函數(shù),那么你的客戶端將創(chuàng)建這個(gè)交易,廣播這一交易到網(wǎng)路上,然后合約代碼就可以讀取交易數(shù)據(jù),然后它將交易數(shù)據(jù)的初始4個(gè)byte解析為被調(diào)用的函數(shù),而其它byte就是其他聲明。所以,基本上這就是如何簡(jiǎn)單調(diào)用函數(shù)的。
默克爾樹(Merkle tree)
(PPT上放著Ralph Merkle的照片)讓我們都向Ralph Merkle(譯者注:Merkle樹的發(fā)明人。)鞠躬、祈禱!
Ralph Merkle,他的Merkle樹是唯一真正讓輕客戶端成為可能的東西,所以,這在技術(shù)上是非常重要的突破,它值得人們賦予崇高的敬意。
重點(diǎn)是,默克爾樹允許一個(gè)交易被包含在一個(gè)區(qū)塊中的證據(jù)成為可高效驗(yàn)證的,或者說(shuō),普遍性地允許任何特定的數(shù)據(jù)片段被包含在在一個(gè)非常大的數(shù)據(jù)塊中的證據(jù)成為可高效驗(yàn)證的。所以,如果你擁有一大塊的數(shù)據(jù),你可以從你的數(shù)據(jù)中創(chuàng)建這個(gè)叫做“Merkle樹”的數(shù)據(jù)結(jié)構(gòu),有了這棵默克爾樹之后,你可以為任何在這棵樹上的數(shù)據(jù)片段創(chuàng)建叫做“默克爾分支”的東西,也就是組成了默克爾樹的這種哈希值。
加上所有這些中間層,通過(guò)把哈希值相互匹配,你就可以判斷這段數(shù)據(jù)是不是真的在這棵樹上,對(duì)吧?
所以,為了建立起這棵樹,你可以拿來(lái)你的數(shù)據(jù),把兩個(gè)片段的數(shù)據(jù)放在一起哈希;為每?jī)善瑪?shù)據(jù)做完哈希之后,再把得到的(兩個(gè))哈希值放在一起哈希;如是反復(fù),最終將只剩下一個(gè)哈希值在頂端。要證明其中存在任何特定的數(shù)據(jù),你只要得到這些哈希值的分支,然后讓它們相互匹配。如果是否存在一個(gè)錯(cuò)誤的話,(也就是說(shuō))如果你想證明一段數(shù)據(jù)并不在那里的話,那么至少其中一個(gè)哈希值將是無(wú)法匹配的。
在以太坊上,我們使用它以證明一些特定的交易是包含在區(qū)塊中的,但也存在一些叫做“狀態(tài)樹(State
Tree)”的東西。狀態(tài)樹就是整個(gè)以太坊狀態(tài)的一棵默克爾樹。所以,每一個(gè)賬戶、每一個(gè)合約,余額,Nonce,合約代碼,合約庫(kù),以太坊上的所有數(shù)據(jù)的全部狀態(tài)都被哈希在這棵樹的結(jié)構(gòu)中,而這棵樹的根哈希值將成為區(qū)塊頭,這就是所謂的“狀態(tài)根”。所以,從任何一個(gè)區(qū)塊到下一個(gè)區(qū)塊,總是會(huì)有一部分狀態(tài)被修改,然后默克爾樹就會(huì)改變。但我們有一種特定類型的樹叫做“默克爾帕特里夏樹(Merkle
Patricia
tree)”,意味著當(dāng)狀態(tài)發(fā)生改變的時(shí)候,默克爾樹上必須做出的更新的數(shù)量實(shí)際上是非常小的。它是像對(duì)數(shù)那樣變化的。有了這個(gè),一個(gè)輕客戶端就可以要求網(wǎng)絡(luò),“給我一個(gè)特定賬戶的默克爾分支”;而一些全節(jié)點(diǎn)可以用這一分支來(lái)回復(fù);輕客戶端自己就可以從頭到尾檢查該分支的哈希值。如果所有的哈希值都相互匹配,那么,太棒了!然后輕客戶端就可以接受并且證實(shí)顯示賬戶余額的特定數(shù)據(jù)、或者一些庫(kù)的鑰匙,是確實(shí)在默克爾樹上的。
所以,在以太坊中,默克爾樹是用在交易、狀態(tài)和收據(jù)上的。帕特里夏樹則允許高效的插入和刪除操作。區(qū)塊頭則包含了這三種樹。
拜占庭版本(Byzantium)中的更新
拜占庭是我們做的一個(gè)硬分叉,從10月16號(hào)開始運(yùn)行,它引入了一系列新的很棒的隱私保護(hù)措施。拜占庭中有三種主要的、可能也是最讓人感興趣的特性。理論上來(lái)說(shuō),當(dāng)然還有其他特性,但這三種讓人感興趣的東西是因?yàn)榘菡纪ブ械男绿匦圆懦蔀榭赡艿模瑢?duì)吧?這里包括我們叫做“預(yù)編譯(pre-compile)”的東西,可以充分利用虛擬合約。虛擬合約的功能是做橢圓曲線編輯(eliptic
curve edition)、橢圓曲線標(biāo)量乘法(eliptic curve multiplication)、橢圓曲線配對(duì)(eliptic
curve pairing)還有大數(shù)計(jì)算。這也允許你在以太坊上寫合約來(lái)做一些事情,比如:驗(yàn)證環(huán)簽名(Ring
Signature),驗(yàn)證ZK-SNARKs,驗(yàn)證RSA簽名(RSA
signature),所以,這也可以被用來(lái)提升以太坊跟使用公鑰、授權(quán)證書以及其他東西的現(xiàn)有系統(tǒng)的兼容性。接下來(lái)你還將聽(tīng)到這些東西。
除了這些,還有一系列很重要的特性,比如說(shuō):靜態(tài)調(diào)用操作碼(STATICCALL
opcode),它允許你寫作沒(méi)有同等程度可變性的安全合約,以及在一些情況下重新進(jìn)入(出現(xiàn))問(wèn)題(的地方),它同樣允許你更容易去做純粹功能性的變成。你擁有一個(gè)回返數(shù)據(jù)備份、恢復(fù)原狀操作碼(REVERT
opcode),幫助你節(jié)約Gas,以及讓EVM在某些情況下更高效的操作碼,還有一系列更小的提升。但我會(huì)說(shuō),拜占庭硬分叉的主題是把這類強(qiáng)大的密碼學(xué)加進(jìn)去,以使強(qiáng)大的隱私保護(hù)應(yīng)用成為可能。還有非常有有意思的的東西正在被建構(gòu)到上面,比如說(shuō),你知道的,
建立在聲譽(yù)系統(tǒng)上的ZK-SNARK(我昨天才聽(tīng)到這個(gè)東西)。這些都在非??焖俚赝巴七M(jìn)。
未來(lái)的方向
Casper,你們可以看Changwu的演講,就在下一場(chǎng)。Vlad也準(zhǔn)備展示他自己的Casper版本,稱為“Casper CBC”。
分片(Sharding),可以看今天結(jié)束的時(shí)候我的演講。雖然,我會(huì)說(shuō)它不僅僅是關(guān)于分片的,它的主題在實(shí)際上比分片要廣泛得多。它同樣也是EVM更新的尾巴,一個(gè)小很多的協(xié)議升級(jí)。
現(xiàn)在,比起以太坊區(qū)塊鏈核心技術(shù)的未來(lái)方向,可以被建設(shè)在以太坊上的第二層(second
layer,數(shù)據(jù)鏈路層)架構(gòu)、中間工具和系統(tǒng)有一個(gè)大得多的關(guān)于未來(lái)方向的列表。這包括可擴(kuò)展性方案,比如Plasma;也包括可以被建設(shè)在環(huán)簽名上的所有東西,你已經(jīng)知道了,橢圓曲線乘法、匹配,ZK-SNARK;還包括多種其他多種隱私保護(hù)協(xié)議。還有狀態(tài)通道(State
Channel)系統(tǒng)。所有這些都是很棒的,也是非常重要的改進(jìn),我希望我們將聽(tīng)到更多關(guān)于它們的消息。
那么,謝謝你們。再一次,希望你能享受這次大會(huì)。
視頻鏈接:https://www.youtube.com/watch?v=Yo9o5nDTAAQ&feature=youtu.be
作者:Vitalik Buterin
翻譯&校對(duì):阿劍 & Elisa