Mașina virtuală Ethereum (EVM)
O reprezentare fizică a unei EVM nu poate fi descrisă în același mod în care s-ar putea reprezenta un nor sau un val pe ocean, dar „EVM” există ca o singură entitate întreținută de mii de computere conectate care rulează un client Ethereum.
Protocolul Ethereum în sine există exclusiv în scopul menținerii funcționării continue, neîntrerupte și imuabile a acestei mașini speciale de stare; este mediul în care există toate conturile Ethereum și contractele inteligente. În orice bloc din lanț, Ethereum are o și numai o stare „canonică”, iar EVM este cea care definește regulile pentru calculul unei noi stări valide de la bloc la bloc.
Condiții prealabile
Unele familiarități de bază cu terminologia comună în informatică, cum ar fi octeți, memorie, și o stivă sunt necesare pentru a înțelege EVM. De asemenea, ar fi util să te simți confortabil cu conceptele de criptografie/blockchain, cum ar fi funcțiile hash, Dovada muncii (PoW) și Arborele Merkle.
De la Registru la Mașina de stare
Analogia unui „registru distribuit” este adesea folosită pentru a descrie un blockchain precum Bitcoin, care permite o monedă descentralizată folosind instrumente fundamentale de criptografie. O criptomonedă se comportă ca o monedă „normală” din cauza regulilor care guvernează ceea ce se poate și nu se poate face pentru a modifica registrul. De exemplu, o adresă Bitcoin nu poate cheltui mai mult Bitcoin decât a primit anterior. Aceste reguli stau la baza tuturor tranzacțiilor pe Bitcoin și pe multe alte blockchain-uri.
În timp ce Ethereum are propria criptomonedă nativă (Ether) care urmează aproape exact aceleași reguli intuitive, permite, de asemenea, o funcție mult mai puternică: contracte inteligente. Pentru această caracteristică mai complexă, este necesară o analogie mai sofisticată. În loc de un registru distribuit, Ethereum este o mașină de stare distribuită. Starea Ethereum este o structură mare de date care deține nu numai toate conturile și soldurile, ci și o mașină de stare, care se poate schimba din bloc în bloc în conformitate cu un set predefinit de reguli și care poate executa aleatoriu codul mașinii. Regulile specifice de schimbare a stării de la bloc la bloc sunt definite de EVM.
Diagramă adaptată după Ethereum EVM ilustrat
Funcția de tranziție a stării Ethereum
EVM se comportă ca o funcție matematică: având o intrare, aceasta produce o ieșire deterministă. Prin urmare, este destul de util să descrii mai formal Ethereum ca având o funcție de tranziție de stare:
1Y(S, T)= S'2
Având în vedere o stare veche (S)
și un nou set de tranzacții valide (T)
, funcția de tranziție a stării Ethereum Y(S, T)
produce o nouă stare de ieșire validă S'
Stare
În contextul Ethereum, starea este o structură de date enormă numită Trie Merkle Patricia modificat, care ține toate conturile legate prin hash-uri și reductibile la un singur hash rădăcină stocat pe blockchain.
Tranzacții
Tranzacțiile sunt instrucțiuni semnate criptografic din conturi. Există două tipuri de tranzacții: cele care au ca rezultat apeluri de mesaje și cele care au ca rezultat crearea de contracte.
Crearea contractului are ca rezultat crearea unui nou cont de contract care conține un contract inteligent compilat bytecode. Ori de câte ori un alt cont face un apel de mesaj la acest contract, el îi execută bytecode-ul.
Instrucțiuni EVM
EVM execută ca o mașină stivă cu o adâncime de 1024 elemente. Fiecare element este un cuvânt de 256 de biți, care a fost ales pentru compatibilitate maximă cu schema de hash SHA-3-256.
În timpul executării, EVM menține o memorie tranzitorie (ca o matrice de octeți cu adresare pe cuvinte), care nu persistă între tranzacții.
Contractele, cu toate acestea, conțin un spațiu de stocare Merkle Patricia trie (ca o matrice de cuvinte cu adresare pe cuvinte), asociat cu contul în cauză și o parte a stării globale.
Bytecode-ul compilat al contractului inteligent se execută ca un număr de opcoduri EVM, care efectuează operațiuni de stivă standard cum ar fi XOR
, AND
, ADD
, SUB
etc. EVM implementează, de asemenea, o serie de operațiuni de stivă specifice blockchain, cum ar fi ADDRESS
, BALANCE
, SHA3
, BLOCKHASH
etc.
Diagrame adaptate din Ethereum EVM ilustrat
Implementări EVM
Toate implementările EVM trebuie să respecte specificațiile descrise în Ethereum Yellowpaper.
De-a lungul istoriei de 5 ani a Ethereum, EVM a suferit mai multe revizuiri și există mai multe implementări ale EVM în diferite limbaje de programare.
Toți clienții Ethereum includ o implementare EVM. În plus, există mai multe implementări independente, inclusiv:
- Py-EVM - Python
- evmone - C++
- ethereumjs-vm - JavaScript
- eEVM - C++
- Hyperledger Burrow - Go