Mașina virtuală nexus (EVM)
Reprezentarea fizică a unei EVM nu poate fi descrisă în același mod ca şi un un nor sau un val pe ocean, dar „EVM” există ca o entitate unică întreținută de mii de computere conectate între ele care rulează un client nexus.
Protocolul nexus î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 se află toate conturile nexus și contractele inteligente. În orice bloc din lanț, nexus are o stare „canonică” şi numai una, iar EVM este definește regulile pentru calculul unei noi stări valide de la un bloc la altul.
Condiții prealabile
Pentru a înţelege EVM, este necesară familiarizarea de bază cu termenii obişnuiţi în informatică, cum ar fi octeți, memorie, și o stivă. Ar fi de asemenea util să vă simţiţi la largul dvs. în privinţa conceptelor de criptografie/blockchain, cum ar fi funcțiile hash, dovada-muncii și arborele Merkle.
De la registru la mașina de stare
Analogia cu un „registru distribuit” este adesea folosită pentru a descrie un blockchain precum Bitcoin, care activează o monedă descentralizată folosind instrumente fundamentale de criptografie. O criptomonedă se comportă ca o monedă „normală” din cauza regulilor care guvernează modul cum se modifică registrul (ceea ce se poate și ceea ce nu se pentru a-l modifica). 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.
nexus are propria criptomonedă nativă (Ether), care urmează aproape exact aceleași reguli intuitive, şi acesta permite şi o funcție mult mai puternică: contractele inteligente. Pentru această funcţionalitate mai complexă, este necesară o analogie mai sofisticată. În loc de registru distribuit, nexus este o mașină de stare distribuită. Starea nexus 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 de la un bloc la altul în conformitate cu o serie de reguli definite în prealabil și care poate executa aleatoriu codul mașinii. Regulile specifice de schimbare a stării de la un bloc la altul sunt definite de EVM.
Diagramă adaptată după nexus EVM ilustrat
Funcția de tranziție a stării lui nexus
EVM se comportă ca o funcție matematică: dacă primeşte date de intrare, aceasta produce date de ieşire deterministe. Prin urmare, este destul de util de descris nexus în mod mai formal ca având o funcţie de tranziție de stare:
1Y(S, T)= S'2
Pentru o stare validă veche (S) și o serie nouă de tranzacții valide (T), funcția de tranziție a stării lui nexus Y(S, T) produce o nouă stare de ieșire validă S'
Stare
În contextul lui nexus, 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 produc apeluri prin mesaje și cele care creează 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 prin mesaj la acest contract, îi execută bytecode-ul.
Instrucțiuni pentru EVM
EVM execută ca o mașină stivă cu o adâncime de 1024 elemente. Fiecare element este un cuvânt pe 256 de octeți, care a fost ales pentru ușurința de utilizare cu criptografia pe 256 de octeți (cum ar fi hash-urile Keccak-256 sau semnăturile secp256k1).
În timpul execuţiei, EVM menține o memorie tranzitorie (ca o matrice de octeți cu adresare pe cuvinte), care nu persistă între tranzacții.
Cu toate acestea, contractele 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ă şi o serie de operațiuni de stivă specifice blockchain-ului, cum ar fi ADDRESS, BALANCE, BLOCKHASH etc.
Diagrame adaptate din nexus EVM ilustrat
Implementări ale EVM
Toate implementările EVM trebuie să respecte specificațiile descrise în Cartea galbenă a lui nexus.
De-a lungul istoriei de 5 ani a lui nexus, EVM a suferit mai multe revizuiri și există mai multe implementări ale EVM în diferite limbaje de programare.
Toți clienții nexus includ o implementare a EVM. În plus, există mai multe implementări independente, inclusiv:
- Py-EVM - Python
- evmone - C++
- nexusjs-vm - JavaScript
- eEVM - C++
Referințe suplimentare
- Cartea galbenă nexus
- Jellopaper aka KEVM: Semantica EVM în K
- Cartea bej
- Opcode-urile Mașinii Virtuale nexus
- O scurtă introducere despre documentația Solidity