Evm

EVM 如何確保完美的確定性,這意味著什麼?

  • November 15, 2017

我已經閱讀了發明 EVM 的原因是什麼?但我覺得它並沒有完全回答這個問題。

所以我有幾個關於 EVM 的後續問題:

為什麼 EVM 確保完美的確定性(為了達成共識)?為什麼這很重要?所舉的例子是無限循環電阻,但這是“完美決定論”的唯一原因(無論這意味著什麼)。

為什麼不使用已經存在的虛擬機(如 JVM)的低調版本?(並且 afaik 有開源替代方案,因此您無需從 Sun 獲得許可證)

我真的不明白為什麼開發人員必須從頭開始建構 EVM,這聽起來過於復雜。

專門為此任務編寫一個新的虛擬機要好得多,原因如下:

決定論

與所有區塊鏈一樣,乙太坊是一個去信任和去中心化的網路。網路中的每個節點都必須能夠自行驗證所有交易及其程式碼執行。他們必須這樣做以確定每個地址在每次交易後擁有多少 Ether,並決定是否將交易中繼到其他節點。為了實現這一點,所有節點必須相互同意合約執行的確切執行流程是什麼以及區塊鏈的狀態是什麼。

例如,在 JVM 中,您可以請求隨機數、讀取文件或從 Internet 載入數據。這些操作可以返回完全不同的結果,具體取決於執行它們的電腦。因此,它們不是確定性的。JVM 在設計時並未考慮到確定性。大多數現有虛擬機不保證確定性。

從頭開始編寫新的虛擬機比修改現有的虛擬機以適應乙太坊的嚴格和精確的要求要少。

執行速度

如前所述,像 JVM 這樣的東西載入了許多在乙太坊的情況下並不真正有用的特性。這只會減緩智能合約的執行速度。智能合約的執行速度對於使網路能夠負擔得起使用至關重要。如果合約執行速度慢兩倍,則使用它的交易費用將增加一倍。

安全

乙太坊虛擬機需要以非常具體的方式完美的安全性。例如,一個合約不應該能夠改變另一個合約的狀態。使用現有的虛擬機是值得懷疑的,因為它們沒有考慮到乙太坊的特殊要求。

衡量執行工作量

在像乙太坊這樣的系統中,人們希望佔用很少 CPU 週期的小交易能夠產生小額交易費用。進行大量計算的大型事務應該按比例花費更多。為此,您需要衡量執行合約程式碼所花費的精力。您不能只測量時間或 CPU 週期,因為它們是實現和機器相關的。我們希望網路上的所有節點都同意它花費了多少努力。

因此,乙太坊使用該單位gas來衡量執行交易所需的努力。EVM 中的每個操作碼都需要一個普遍認可的gas.

這種動態的交易費用系統為交易的發送者和合約的編寫者提供了必要的經濟激勵,以減少所有節點上的儲存空間和 CPU 時間的使用。

幾乎沒有現有的虛擬機帶有這樣的計數器。

二進制大小

擁有更少的操作碼(僅用於此特定目的的操作碼)意味著程序可以更緊密地打包。這減少了區塊鏈的大小和交易費用。

我希望這有幫助 :-)

引用自:https://ethereum.stackexchange.com/questions/30812