曌鏈MIT底層技術(shù)基石之虛擬機(jī)---MIT Virtual Machine區(qū)塊鏈
MIT虛擬機(jī)希望把主流的編程語言比如C++、C#,Java引入進(jìn)智能合約體系里。因為我們認(rèn)為目前我們在智能合約生態(tài)里不是需要更多看起來很光鮮的工具,而是編程的穩(wěn)定性和可預(yù)測。基本上意思是編譯器本來就可以用,唯一需要做的就是把類似C++、C#等的編譯器引入到MIT的智能合約操作系統(tǒng)中。
什么是虛擬機(jī)?
以太坊的智能合約的部署和調(diào)用結(jié)構(gòu),EVM 就是虛擬機(jī)。簡單來說,以太坊虛擬機(jī)是建立在以太坊區(qū)塊鏈上的一個代碼運(yùn)行環(huán)境,但虛擬機(jī)本身并沒有存儲在區(qū)塊鏈內(nèi),而是和區(qū)塊鏈一樣同時存儲于各個節(jié)點(diǎn)計算機(jī)上。每個參與以太坊網(wǎng)絡(luò)中的校驗節(jié)點(diǎn)都會運(yùn)行虛擬機(jī),并將其作為區(qū)塊有效性校驗協(xié)議的一部分。每個節(jié)點(diǎn)都會對合約的部署和調(diào)用進(jìn)行相同的計算,并存儲相同的數(shù)據(jù),以確保將最權(quán)威(最真實(shí))的結(jié)果記錄在區(qū)塊鏈內(nèi)。
以太坊虛擬機(jī)是一個圖靈完備的 256 位虛擬機(jī),這說明以太坊虛擬機(jī)可以進(jìn)行任何種類的計算。但為了防止惡意用戶設(shè)計無限循環(huán)代碼使虛擬機(jī)的運(yùn)行癱瘓,以太坊虛擬機(jī)中執(zhí)行的代碼嚴(yán)格受到一個參數(shù)的制約,這個參數(shù)就是 GAS。
MIT虛擬機(jī)
現(xiàn)在介紹一下我們正在研發(fā)虛擬機(jī)的一些設(shè)計理念,預(yù)計2019年中旬或下旬能出原型或測試版。我們希望把主流的編程語言比如C++、C#,Java引入進(jìn)智能合約體系里。因為我們認(rèn)為目前我們在智能合約生態(tài)里不是需要更多看起來很光鮮的工具,而是編程的穩(wěn)定性和可預(yù)測。MIT虛擬機(jī)支持i686指令集。基本上意思是編譯器本來就可以用,唯一需要做的就是把類似C++、C#等的編譯器引入到MIT的智能合約操作系統(tǒng)中。虛擬機(jī)也是運(yùn)行在去中心化的分布在區(qū)塊鏈上,所以也可以使用時間戳和其他功能。MIT虛擬機(jī)最突出的有點(diǎn)就是會比以太坊虛擬機(jī)(EVM)在調(diào)用和引入智能合約時更快、代碼運(yùn)行成本更低。因為需要調(diào)用節(jié)點(diǎn)的資源更少,所以代碼運(yùn)行成本費(fèi)用更低。
圖1:MIT虛擬機(jī)結(jié)構(gòu)
鼓勵高效的智能合約
在項目開發(fā)過程中遇到的一個最頭疼的問題就是所有的東西都是開放的,所以我們在設(shè)置代碼運(yùn)行成本的時候需要假定開發(fā)者會適用我們提供給他們的所有功能。在這個假設(shè)下,MIT虛擬機(jī)對那些設(shè)置了限制同時定義所需功能的智能合約給與代碼運(yùn)行成本折扣。我們鼓勵開發(fā)者優(yōu)化和簡化智能合約。假定一個DAPP每天有100筆交易,那我們所指定的這個獎勵機(jī)制就會幫開發(fā)團(tuán)隊省下一筆可觀的錢。具體包括依賴關(guān)系提示、僅適用于靜態(tài)、不可重入、non-payable等等。可以顯示是用了哪種依賴,可能有一個智能合約需要查詢這個主鏈上的某個智能合約,或者這個主鏈上的某個庫。如果把這些依賴關(guān)系都明確出來,那主鏈在運(yùn)行該合約的時候就會很清楚哪些能夠并行運(yùn)行,兩者之間沒有共享可變狀態(tài)。僅適用靜態(tài),是指合約沒有可以執(zhí)行的狀態(tài),唯一的狀態(tài)就是返回的任何狀態(tài)。 我們將利用這些手段讓所有的智能合約開發(fā)者和DAPP開發(fā)者在這個生態(tài)系統(tǒng)中自然而然地通過自由市場手段走到一起,確保開發(fā)環(huán)境的便潔。
可信庫
在以太坊生態(tài)系統(tǒng)中另一個常見的麻煩是delegate call系統(tǒng)。這實(shí)際上也是是Parity multi-sig虧損了一億美元的原因。他們有一個delegate call系統(tǒng),這意味著他們擁有一個核心智能合約,是其他智能合約的基礎(chǔ)。而這個為數(shù)百個其他賬戶提供依賴的主合約自毀,不再存在。所以導(dǎo)致錢仍然在,但確定誰可以訪問它自已的合約不存在,所以沒有人可以訪問它。這個問題的答案是可信庫(Trusted Library)。一個可信庫合約本身非常明確,可以預(yù)先給自己設(shè)定不同的限制。這樣做的目的是一旦寫完了,所有的東西都可以由節(jié)點(diǎn)甚至手工進(jìn)行簡單的預(yù)編譯。Trusted Library不能被支付,因為沒有必要;這個庫不能存儲狀態(tài),因為理想的情況是它只存儲功能的結(jié)果,然后返回合約所需要的結(jié)果。可以執(zhí)行非常簡單的code,比如確定字符串名稱,或者非常復(fù)雜的code比如加密算法。這背后的想法是,我們用去中心化治理協(xié)議(MGP)來讓某些功能更快,用更少的MIT。我們把這個可信庫特殊處理,它執(zhí)行的是本地代碼,速度非常快。通過MGP,在不用分叉或者任何強(qiáng)制性的節(jié)點(diǎn)升級或者導(dǎo)致任何生態(tài)系統(tǒng)終端的前提下,我們可以把執(zhí)行該合約的MIT設(shè)定在某個固定的值,而不是一些動態(tài)的。
錯誤處理
另外,MIT虛擬機(jī)實(shí)際上可以處理錯誤。如果在Solidity程序中有錯誤,那么基本上沒有什么可以補(bǔ)救的。它會消耗掉所有代碼運(yùn)行成本的MIT,沒法預(yù)先捕捉到錯誤,或從故障中恢復(fù)或恢復(fù)代碼運(yùn)行成本的MIT。相反,MIT具有錯誤處理功能,可以預(yù)先捕捉錯誤并確定錯誤發(fā)生的位置,并確定要做什么,是保留所有的代碼運(yùn)行成本的MIT,還是可以恢復(fù)狀態(tài),將剩下的MIT返還給執(zhí)行合約的賬戶。這與“MIT提示”類似。智能合約開發(fā)類似于實(shí)時操作系統(tǒng)開發(fā)。時間沒有限制,但是MIT有限。如果合約需要比預(yù)期更多的MIT,那么MIT將最終用完,而且將無法恢復(fù)它。因此部署一個計時器系統(tǒng),提醒MIT消耗量,以及確定要做什么。這樣如果合約運(yùn)行完全出乎意料,或者M(jìn)IT不夠,可以回到某種緊急狀態(tài)。這一塊是MIT項目方目前重點(diǎn)研究的方向。
個人認(rèn)為以太坊使用的WebAssembly非常有趣,但是它非常年輕,而且在設(shè)計上并不完善和完整,還只是一個pre-α的預(yù)測試版本。在安全性能上寫起來更加復(fù)雜,因為這是非傳統(tǒng)方法。 從他們的核心開發(fā)團(tuán)隊也能看得出來,基本沒有智能合約虛擬機(jī)開發(fā)背景的人員。所以大致可以看出來它還是主要針對瀏覽器,而不是智能合約。
對MIT虛擬機(jī)的介紹就到這里,如果對曌鏈MIT的技術(shù)感興趣請關(guān)注我們的每周快訊和開發(fā)簡報,會及時更新項目開發(fā)進(jìn)度。
聯(lián)系方式:
網(wǎng)址: mit.club
曌鏈公眾號QR碼:
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ǔ)充。