OKB.VN
VM · Smart Contract · Ethereum

EVM là gì?
Ethereum Virtual Machine

Máy tính ảo phi tập trung — nơi mọi smart contract được execute — đã trở thành chuẩn mực toàn cầu cho blockchain execution layer
📌 OKB.VN – Open Knowledge Base 📌 Cập nhật: 2025 📌 Lĩnh vực: VM / Smart Contract

TL;DR – Tóm tắt

EVM (Ethereum Virtual Machine) là máy tính ảo phi tập trung — nơi smart contract được execute đồng nhất trên mọi node Ethereum. EVM là stack machine với 256-bit word size, chạy EVM bytecode, dùng gas để đo lường computation. Hơn 30 blockchain lớn implement EVM compatibility — biến EVM thành chuẩn mực thực tế (de facto standard) của toàn ngành. So sánh chi tiết tại bài EVM vs SVM vs MoveVM.

IEVM là gì?

Ethereum Virtual Machine (EVM) là môi trường execution phi tập trung — một máy tính ảo chạy cùng một code và cho ra cùng một kết quả trên mọi node tham gia mạng Ethereum.

Tại sao cần EVM? Trong blockchain phi tập trung, hàng nghìn node phải đồng thuận về kết quả của computation. EVM đảm bảo điều đó bằng cách:

  • Deterministic: cùng input → cùng output trên mọi hardware, OS, kiến trúc CPU
  • Sandboxed: smart contract không thể truy cập network, filesystem hay OS ngoài EVM environment
  • Metered: mọi computation đều có chi phí gas — ngăn chặn infinite loop và tấn công DoS
  • Turing-complete: có thể biểu diễn bất kỳ computation logic nào (với giới hạn gas)

IIKiến trúc Stack Machine

EVM là stack-based machine — không dùng register như CPU thông thường. Mọi computation đều thông qua stack:

  • Stack depth tối đa: 1024 phần tử
  • Mỗi phần tử: 256-bit (32 bytes) — tối ưu cho Ethereum hash (keccak256) và address (20 bytes)
  • Hầu hết opcode lấy input từ stack và push result trở lại stack

EVM có ba vùng lưu trữ:

Vùng lưu trữScopeChi phíMô tả
StackExecutionRất thấpTạm thời, reset sau mỗi lệnh
MemoryTransactionThấp → tăng dầnByte array tạm thời, reset sau transaction
StoragePermanentRất caoPersistent key-value store của contract

Storage là vùng tốn kém nhất — SSTORE (write) tốn 20,000 gas so với ADD chỉ 3 gas. Tối ưu smart contract chủ yếu là giảm SSTORE operations.

IIIOpcodes và EVM Bytecode

Smart contract được viết bằng Solidity/Vyper → compile thành EVM bytecode — chuỗi opcode hex. Mỗi opcode là 1 byte (256 opcode có thể có).

Một số opcode quan trọng:

OpcodeMô tảGas
ADDCộng 2 giá trị trên stack3
SLOADĐọc từ storage2,100 (cold) / 100 (warm)
SSTOREGhi vào storage20,000 (new) / 2,900 (update)
CALLGọi contract khác700+
KECCAK256Hash 32 bytes30 + 6/word
LOGEmit event375 + 8/byte

Developer viết Solidity, không cần biết opcode trực tiếp. Nhưng hiểu opcode giúp tối ưu gas hiệu quả hơn — ví dụ tránh SLOAD nhiều lần bằng cách cache vào memory variable.

IVGas Model — Cơ chế Kinh tế của EVM

Gas là đơn vị đo lường computational work trong EVM. Mọi opcode đều có chi phí gas cụ thể. Gas model giải quyết hai vấn đề:

  • Halting problem: không thể biết trước computation sẽ kết thúc không — gas limit đảm bảo luôn kết thúc
  • Resource pricing: buộc user trả chi phí tương ứng computation họ yêu cầu

Sau EIP-1559, gas fee = base fee (đốt cháy) + priority tip (trả cho validator). Base fee tự điều chỉnh theo demand.

Gas limit vs Gas price: Gas limit là lượng gas tối đa user chấp nhận dùng. Gas price (sau EIP-1559: max fee per gas) là giá sẵn sàng trả mỗi đơn vị gas. Transaction cost = gas used × gas price. Nếu hết gas giữa chừng, transaction revert nhưng vẫn mất toàn bộ gas đã dùng.

VWorld State và Account Model

EVM duy trì World State — mapping từ địa chỉ (20 bytes) đến account state. Có hai loại account:

LoạiĐặc điểmCodeStorage
EOA (Externally Owned Account)Controlled bằng private key❌ Không có❌ Không có
Contract AccountControlled bằng code✅ EVM bytecode✅ Key-value store

Mỗi account có: nonce (số transaction đã gửi), balance (ETH), codeHash (hash của bytecode), storageRoot (Merkle root của storage).

World State được lưu trữ dưới dạng Merkle Patricia Trie — cấu trúc dữ liệu cho phép chứng minh hiệu quả rằng một account có state nhất định mà không cần đọc toàn bộ state.

VIExecution Flow của Smart Contract Call

  1. EOA gửi transaction đến địa chỉ contract với calldata (function selector + arguments)
  2. EVM load bytecode của contract từ World State
  3. EVM tạo execution context: caller address, value, calldata, gas available
  4. EVM bắt đầu execute bytecode từ đầu (hoặc từ function dispatch dựa trên function selector)
  5. Mỗi opcode được execute, gas decremented tương ứng
  6. Contract có thể CALL contract khác — tạo sub-context (call stack depth tối đa 1024)
  7. Transaction kết thúc: SUCCESS (STOP/RETURN) hoặc REVERT
  8. Nếu SUCCESS: World State được cập nhật, gas còn lại được refund
  9. Nếu REVERT hoặc hết gas: mọi state change bị rollback, gas đã dùng bị mất

VIIGiới hạn và Nhược điểm của EVM

  • 256-bit word size bất tiện: với số nhỏ (bool, uint8) phải pack thủ công để tiết kiệm storage — tốn công của developer
  • Sequential execution: transaction không thể execute song song — throughput bị giới hạn, trái với thiết kế của SVM (Solana)
  • Storage cost cao: SSTORE tốn kém khiến nhiều pattern hiệu quả trong lập trình thông thường lại không hiệu quả trong EVM
  • Reentrancy vulnerability: CALL opcode cho phép reentrant execution — nguồn gốc của nhiều lỗ hổng smart contract lịch sử (The DAO hack 2016)
  • Khó ZK-prove: EVM không được thiết kế cho ZK proof → zkEVM cần nhiều overhead, proof generation chậm

VIIIEVM Compatibility Ecosystem

EVM đã trở thành chuẩn mực thực tế của blockchain execution. Hơn 30 chain implement EVM compatibility:

ChainEVM Compatibility LevelGhi chú
Ethereum L1Native EVMReference implementation
ArbitrumEVM equivalentArbOS on top, custom precompiles
Optimism / BaseEVM equivalentOP Stack, minor differences
BNB ChainEVM compatibleGeth fork, custom consensus
Polygon PoSEVM compatibleBor client (Geth fork)
Avalanche C-ChainEVM compatibleSubnet EVM

Lý do EVM trở thành chuẩn mực: network effect — developer học Solidity một lần, deploy trên hàng chục chain. Tool (Hardhat, Foundry, Remix), library (OpenZeppelin), audit pattern đều chuẩn hóa cho EVM.

IXEVM vs SVM vs MoveVM

Xem phân tích chi tiết tại bài EVM vs SVM vs MoveVM. Tóm tắt:

VMExecutionƯu điểmDùng bởi
EVMSequentialEcosystem lớn nhất, tooling trưởng thànhEthereum và 30+ chain
SVMParallel (Sealevel)Throughput cao, tối ưu cho high-frequencySolana
MoveVMSequentialResource-oriented, an toàn hơn về tài sảnAptos, Sui

Câu Hỏi Thường Gặp

Có — EVM có thể run locally để test smart contract (Hardhat, Foundry, Ganache đều là local EVM implementations). Về lý thuyết, bất kỳ phần mềm nào cũng có thể embed EVM để chạy smart contract logic. Tuy nhiên để có tính phi tập trung và đồng thuận, cần đặt EVM trong context blockchain với nhiều node.

Ethereum được thiết kế để native support keccak256 hash (256-bit output) và ECDSA secp256k1 (256-bit key). Dùng 256-bit word size giúp hash và cryptographic operations thực hiện trong một opcode, không phải ghép nhiều word. Trade-off: bộ nhớ và gas tốn hơn cho số nhỏ, nhưng cryptographic operations hiệu quả hơn nhiều.

zkEVM là ZK Rollup có thể execute EVM bytecode và generate ZK proof cho execution đó. Đây là thách thức kỹ thuật lớn vì EVM không được thiết kế cho ZK proof. Các cấp độ EVM compatibility: Type 1 (bytecode identical — chậm nhất), Type 2 (behavior equivalent), Type 4 (Solidity transpile — nhanh nhất nhưng kém compatible nhất). Polygon zkEVM, Scroll, Taiko đang theo đuổi Type 1–2.

EVM bytecode của contract là immutable sau khi deploy. Nhưng có patterns cho phép "upgradeable": proxy pattern (contract A delegate call đến contract B có logic thực, B có thể thay đổi) và diamond pattern (nhiều implementation). Upgrade thường cần multisig hoặc DAO governance. Đây là trade-off giữa immutability (trustless) và upgradeability (fixable bugs).

📚Tài liệu tham khảo

  1. Ethereum Yellow Paper (2022). Ethereum: A Secure Decentralised Generalised Transaction Ledger. ethereum.github.io/yellowpaper/paper.pdf
  2. Ethereum Foundation (2023). Ethereum Virtual Machine (EVM). ethereum.org/en/developers/docs/evm
  3. Buterin, V. (2014). Ethereum Whitepaper. ethereum.org/en/whitepaper
  4. Perez, D. & Livshits, B. (2019). Smart Contract Vulnerabilities: Vulnerable Does Not Imply Exploited. USENIX Security 2021.
  5. EVM Codes (2024). EVM Opcodes reference. evm.codes
  6. Solidity Documentation (2023). solidity.readthedocs.io
📚 Khám phá thêm theo chủ đề
113 bài phân tích kỹ thuật — Blockchain Infrastructure từ nền tảng đến nâng cao
📋 Xem tất cả bài viết →