以太坊是僅次于比特幣的第二重要、最受歡迎的加密貨幣。通常被認為是比特幣在加密貨幣領(lǐng)域的競爭對手。
和比特幣一樣,以太坊也是分散式的,運行在區(qū)塊鏈技術(shù)上,是一個開源項目。然而,以太坊比比特幣更具靈活性和適應性。任何有知識的人都可以在該平臺上創(chuàng)建新的應用程序。隨著第二版本Ethereum Homestead的發(fā)布,這些應用程序已經(jīng)可以安全使用。
Homestead為用戶提供了創(chuàng)建任何他們想要的應用程序的自由,不管這些應用程序有多復雜。它還成為了一個平臺,用于啟動除加密貨幣之外的新的分散的區(qū)塊鏈應用程序。
所有這些過程的核心是以太坊虛擬機(EVM),這是一種準圖靈機,可以編寫任意復雜的隨機算法代碼。
什么是虛擬機及其工作原理
為了更好地理解EVM是什么以及它是如何工作的,我們需要理解術(shù)語“準圖靈”的含義。“準”是“部分”的意思,“圖靈”是指“現(xiàn)代計算機科學之父”、因為圖靈機器的創(chuàng)造者是艾倫·圖靈。
在計算機世界中,有許多訪問和修改數(shù)據(jù)的系統(tǒng)。這些系統(tǒng)包括中央處理單元和編程語言。
一個系統(tǒng)或機器,可以在數(shù)學上執(zhí)行任何計算或問題,被認為是圖靈完備。
以太坊虛擬機被標記為準圖靈機,因為它可以解決的計算是由gas約束的,這意味著它可以執(zhí)行的計算數(shù)量是有限的。
在以太坊網(wǎng)絡(luò)上,天然氣相當于一筆費用。你在以太坊網(wǎng)絡(luò)上進行的每筆交易都有一個價格,而gas就是支付方式。
以太坊網(wǎng)絡(luò)上的gas概念有兩個方面——gas和gas價格。gas是測量工具:它標識執(zhí)行特定計算所需的費用。天然氣價格是用戶愿意為每單位天然氣支付的以太幣。
Wei是汽油價格的計量單位。Wei以太幣的最小單位,一個以太幣=101?Wei。
在任何交易發(fā)生之前,必須設(shè)定燃氣限額和燃氣價格。如果你作為試圖完成交易的人,沒有足夠的燃氣,交易就會無效。
由于計算依賴于gas,因此EVM無法執(zhí)行某些計算。這些問題包括采空區(qū)瓦斯限值太低,計算非常復雜,在經(jīng)濟上被認為是不切實際的。
EVM編程語言稱為EVM字節(jié)碼。如果使用更高級的編程語言,比如以太坊的 Solidity,來編寫特定的代碼,那么這些代碼將被添加到EVM字節(jié)碼中,以便EVM能夠理解它。
EVM , 一個基于事務(wù)的狀態(tài)機
EVM有很多用途;其中兩個主要是處理網(wǎng)絡(luò)上的計算和內(nèi)部狀態(tài),以及處理與用戶姓名和地址、當前油價、余額和塊信息相關(guān)的帳戶信息。
EVM是基于事務(wù)的狀態(tài)機,這意味著它管理網(wǎng)絡(luò)上的內(nèi)部狀態(tài)。沒有EVM,就無法跟蹤完成事務(wù)所需每個組件的狀態(tài)。這些成分共同作用來調(diào)節(jié)復雜以太坊區(qū)塊鏈的變化水平。
作為基于事務(wù)的狀態(tài)機,EVM需要監(jiān)視帳戶狀態(tài)、世界狀態(tài)、存儲狀態(tài)、運行時環(huán)境信息和塊信息。
帳戶狀態(tài)
以太坊網(wǎng)絡(luò)由許多相互作用的小賬戶組成——合約賬戶或外部擁有的賬戶。
在兩個外部擁有的帳戶之間發(fā)生的通信稱為價值轉(zhuǎn)移。這兩個帳戶都可以使用私鑰通過數(shù)字簽名的事務(wù)相互發(fā)送消息。
外部擁有的帳戶與合約帳戶之間的通信使后者能夠使用其代碼執(zhí)行不同的操作,例如創(chuàng)建和傳輸代幣。
外部擁有的帳戶可以促使合約帳戶采取行動;合約帳戶是反應性的。這意味著它們不能發(fā)起事務(wù),只能響應它們接收到的其他事務(wù)。
合約帳戶具有與之關(guān)聯(lián)的代碼或編程語言,并且此合約代碼可以控制帳戶。
外部擁有的帳戶沒有代碼,但可以使用私鑰進行控制。
任何外部擁有的帳戶都可以向其他外部擁有的帳戶發(fā)送消息,也可以向合約帳戶發(fā)送消息。這種類型的帳戶有一個用于簽署帳戶事務(wù)的私鑰。
帳戶狀態(tài)有四個主要組件:nonce、balance、storageRoot和codeHash
- Nonce -在外部擁有的帳戶中,Nonce表示從帳戶地址發(fā)送的事務(wù)數(shù)量。在合約帳戶中,它是由該帳戶創(chuàng)建的合約數(shù)量。
- balance -賬戶地址所擁有的余額
- storageRoot - Merkle Patricia樹根節(jié)點的256位哈希值。默認情況下,樹是空的,它對帳戶的存儲內(nèi)容進行編碼。
- codeHash -這段代碼是不可變的:沒有人可以在它創(chuàng)建之后改變它。這個帳戶的EVM的codeHash也是在這個地址接收到消息調(diào)用時執(zhí)行的代碼。
World State
World State由帳戶狀態(tài)和160位地址標識符之間的映射組成。該信息存儲在Merkle Patricia樹中。
存儲狀態(tài)
存儲狀態(tài)是EVM上運行時管理的特定于帳戶的信息。
這是執(zhí)行事務(wù)所需的信息。它包括:
-來源-交易的原始發(fā)件人的地址
-調(diào)用方-執(zhí)行事務(wù)的帳戶的地址
-燃氣價格-交易發(fā)起者指定的燃氣的當前價格
-代碼大小-事務(wù)代碼庫有多大
塊的信息
這些是支持事務(wù)所必需的狀態(tài)值。信息包括:
- Blockhash -最近完成的塊的哈希
- Coinbase -收件人地址
-當前塊的時間戳
-當前塊的編號
-當前塊的難度級別
-電流塊的氣體極限