智慧合約與可程式化
以太坊虛擬機
以太坊虛擬機(EVM)是以太坊內部那台用來真正執行智慧合約的「想像中的電腦」。沒有哪一台實體機器是「那台 EVM」;相反,網路裡的每個節點都模擬出完全相同的這台電腦,並一步一步地讓每份合約在其中執行。可以把它想成一台密封、標準化的引擎,成千上萬的營運者各自按同一份規格把它造出來,於是無論把相同的指令和輸入餵給其中哪一台,都總會得到相同的結果。它要解決的問題是「達成一致」:一個遍布全球的網路,怎樣才能確信大家算出的結果分毫不差?
智慧合約用對人友好的語言寫成,再被編譯成一長串稱為位元組碼的微小指令,供 EVM 理解,就像一份食譜被拆解成基本的廚房步驟。EVM 一次處理一條指令,邊走邊讀取並更新區塊鏈上保存的資料;它被刻意設計成確定性的:給定相同的起點,它不會「跑偏」,在不同機器上給出不同答案。每條指令還有固定的成本,用 gas 來計量,由呼叫者支付;用光了 gas 預算的合約會被中止並回滾。這樣就能防止任何單個程式無休止地執行、把網路凍住。
EVM 的重要意義在於,它是讓合約可移植、可預測的共同標準。正因為有這麼多人理解並採用了它,其他區塊鏈也造出了各自相容 EVM 的引擎,於是一份只寫一次的合約,往往能幾乎不加改動地在多條網路上執行。這個共同的地基,是智慧合約生態能如此迅速壯大的重要原因:開發者學會一台機器、一套工具,他們的成果就能廣為流傳。
當你發送一筆呼叫合約的交易時,你的節點和其他每個節點都會把合約的位元組碼載入 EVM,並用相同的輸入執行它。每個節點都獨立得出完全一致的新餘額和資料,然後把這份共同的結果記錄到鏈上。
許多其他區塊鏈執行相容 EVM 的引擎,這正是同一份合約程式碼常常能部署到多條網路上的原因。
又稱
另見