WebAssembly和區(qū)塊鏈計算的未來區(qū)塊鏈
WebAssembly和區(qū)塊鏈計算的未來
2013年提出的以太坊的概念成為了區(qū)塊鏈技術(shù)的一個主要擴(kuò)展,將其從一個P2P資金的去中心化結(jié)算層,轉(zhuǎn)變?yōu)橐粋€程序執(zhí)行的無信任層,為應(yīng)用程序和可編程資產(chǎn)開創(chuàng)了一個全新的世界。
把自己概念化為一個“全球計算機(jī)”,以太坊的核心思想是很簡單易懂的:把區(qū)塊鏈技術(shù)的信任最小化的天然屬性應(yīng)用到計算機(jī)程序輸出的共識上。也就是說,開發(fā)者可以部署被稱為“智能合約”的代碼,它是完全確定性的,輸出可以被所有和它進(jìn)行交互的角色所信任。
各種各樣非常好的想法在一開始就被提了出來,包括使用以太坊智能合約創(chuàng)建公平拍賣或者樂透彩票,創(chuàng)建預(yù)測市場,去中心化交易所等等。這些用例中最廣為人知的是創(chuàng)建以太坊可編程token,這是各類公司通過首次代幣發(fā)行籌集資金的一種流行的方式。
以太坊內(nèi)核實現(xiàn)了一個圖靈完備的虛擬機(jī),即以太坊虛擬機(jī)(簡稱EVM)。它定義了一套通用的、確定性的指令,程序可以被編譯成這些指令,并且可以在全世界任何一臺計算機(jī)上運(yùn)行。在EVM上執(zhí)行的每一個操作和程序需要被以太坊網(wǎng)絡(luò)中的每一個全節(jié)點運(yùn)行,意味著這臺“世界計算機(jī)”需要有一種內(nèi)建的機(jī)制來制止惡意占用(spam)攻擊。為解決這個問題,EVM實現(xiàn)了gas(油費(fèi))的概念,可以理解為在這臺全球計算機(jī)上運(yùn)行每個基本操作需要消耗的“燃料”,這是需要預(yù)付的。
區(qū)塊鏈計算機(jī)是確定性的
圖靈完備意味著你可以在以太坊虛擬機(jī)上編寫和運(yùn)行任何你能想到的程序,只要你能為它的所有執(zhí)行步驟支付足夠的gas。昂貴的操作,例如訓(xùn)練機(jī)器學(xué)習(xí)算法,由于它的固有限制,在EVM上是完全不可行的。EVM中的每一條指令,被稱為OPCODE,都有一個特定的固定費(fèi)用。每個OPCODE都是確定的,對每個程序的輸出達(dá)成一致意見是在以太坊上達(dá)成全局共識的必要條件。
(以太坊從區(qū)塊創(chuàng)建到交易執(zhí)行的完整系統(tǒng),引用自StackExchange)
通過為opcode設(shè)置固定費(fèi)用,節(jié)點就可以確定執(zhí)行某個特定程序時用戶需要預(yù)付多少費(fèi)用。在這種情況下,gas的概念不僅僅被用于阻止惡意占用攻擊,還是一種確定性的指標(biāo)。例如,一個消耗gas X的程序總是會消耗X,不管是網(wǎng)絡(luò)中的哪個節(jié)點在執(zhí)行它。gas的單價依賴于整個平臺的供求關(guān)系,經(jīng)常會隨著以太坊網(wǎng)絡(luò)的交易負(fù)載量而發(fā)生變化。
EVM是如何設(shè)計的?為什么它是低效的?
l 架構(gòu)尺寸過大
傳統(tǒng)計算機(jī)包含的指令集只接受32位或者64位的輸入。EVM與此不同并且很特殊,它是一臺256位的計算機(jī),故意設(shè)計成這樣是為了更易于處理以太坊的哈希算法,它會明確產(chǎn)生256位的輸出。
然而,實際運(yùn)行EVM程序的計算機(jī)則需要把256位的字拆分成它們的本地架構(gòu)來執(zhí)行智能合約,從而使得整個系統(tǒng)變得非常低效和不實用。
另外,如果你想在以太坊上用它的基本OPCODES實現(xiàn)一個類似于SHA256的復(fù)雜算法,那你就自祈多福吧!為了解決通過指令集運(yùn)行復(fù)雜程序產(chǎn)生的高額gas問題,以太坊引入了預(yù)編譯的概念,把程序編譯進(jìn)EVM并且消耗固定的gas。一個值得關(guān)注的預(yù)編譯是以太坊哈希算法,因為如果在虛擬機(jī)中實現(xiàn)該算法,合約在調(diào)用時將會產(chǎn)生極其昂貴的費(fèi)用。
l 臃腫的預(yù)編譯
預(yù)編譯帶來的問題是它會不斷增加虛擬機(jī)的臃腫度和復(fù)雜度,而不能解決核心問題:當(dāng)前指令集和規(guī)范的低效而粗劣的設(shè)計。
如果我們能夠定義一種新的規(guī)范和指令集,不需要預(yù)編譯這些復(fù)雜程序,而只需要通過基本指令就可以高效實現(xiàn)呢?
走進(jìn)WebAssembly
WebAssembly是由W3C開發(fā)的一個高效輕量級指令集標(biāo)準(zhǔn),被譽(yù)為網(wǎng)絡(luò)和高性能的顛覆者,支持跨瀏覽器執(zhí)行。這意味著我們可以把包括C/C , Go, Rust等在內(nèi)的不同編程語言編譯成統(tǒng)一的標(biāo)準(zhǔn)格式,并將其作為JavaScript的替代品以近乎原生代碼的效率在瀏覽器中運(yùn)行。WebAssembly,或者簡稱為WASM,是內(nèi)存安全、平臺獨(dú)立的,可以完美高效地映射到所有類型的CPU架構(gòu)上。
這和區(qū)塊鏈有什么關(guān)系?
不依賴于EVM,現(xiàn)在我們有了一套優(yōu)秀并且高效的指令集,可以編譯各種類型的語言,并且有信心它們可以在不同類型的平臺上執(zhí)行且具有同等的性能 - 這對于去中心化應(yīng)用來說是非常理想的!更進(jìn)一步,通過去除浮點運(yùn)算指令,WASM指令集可以很容易地變成確定性指令集,從而很適合作為EVM的替代品。
EWASM團(tuán)隊已經(jīng)著手在以太坊上集成WebAssembly,從而保證以太坊2.0的執(zhí)行層更加高效、簡單,適合作為完全的去中心化計算平臺。https://github.com/ewasm
WASM已經(jīng)被許多其他項目接納為標(biāo)準(zhǔn),包括Dfinity和EOS都使用它來強(qiáng)化它們的執(zhí)行層。
Web的性能和智能合約平臺執(zhí)行層的未來一片光明。不僅dApp會具有更高的性能,集成WASM也可以讓那些熟悉Rust和Go之類的主流語言的魯棒性的人更容易進(jìn)行智能合約的開發(fā),而不是需要學(xué)習(xí)solidity的各種細(xì)節(jié)才能在以太坊上開發(fā)有用的應(yīng)用程序。
------
風(fēng)險警示:藍(lán)狐筆記所有文章都不構(gòu)成投資推薦,投資有風(fēng)險,投資應(yīng)該考慮個人風(fēng)險承受能力,建議對項目進(jìn)行深入考察,慎重做好自己的投資決策。
1.TMT觀察網(wǎng)遵循行業(yè)規(guī)范,任何轉(zhuǎn)載的稿件都會明確標(biāo)注作者和來源;
2.TMT觀察網(wǎng)的原創(chuàng)文章,請轉(zhuǎn)載時務(wù)必注明文章作者和"來源:TMT觀察網(wǎng)",不尊重原創(chuàng)的行為TMT觀察網(wǎng)或?qū)⒆肪控?zé)任;
3.作者投稿可能會經(jīng)TMT觀察網(wǎng)編輯修改或補(bǔ)充。