Trang này chỉ dành cho mục đích thông tin. Một số dịch vụ và tính năng có thể không khả dụng ở khu vực pháp lý của bạn.
Bài viết này đã được dịch tự động từ ngôn ngữ gốc.

EVM là gì?

Ethereum Virtual Machine (EVM), tức máy ảo Ethereum, là một bộ quy tắc chung để thực thi hợp đồng thông minh. Các node Ethereum dùng phần mềm riêng của mình để hiện thực những quy tắc đó, tính toán trên cùng các giao dịch và cùng trạng thái ban đầu, nhờ vậy thu được kết quả mà node khác có thể kiểm tra lại.

EVM không phải một máy chủ vật lý nào đó, cũng không phải một ứng dụng đơn lẻ mà nhà phát triển thấy trên máy tính. Nó giống một bản hướng dẫn tính toán chính xác hơn: mã có thể thực hiện những thao tác cơ bản nào, dữ liệu đặt ở đâu, mỗi thao tác tiêu tốn bao nhiêu tài nguyên tính toán, và khi thực thi thành công hay thất bại thì trạng thái blockchain được cập nhật thế nào.

Từ mã nguồn tới bytecode có thể thực thi

Nhà phát triển thường viết hợp đồng bằng ngôn ngữ bậc cao như Solidity. Mã nguồn mà con người đọc được cần qua trình biên dịch để chuyển thành bytecode mà EVM thực thi được, tức một dãy chỉ thị máy sắp xếp theo định dạng cố định.

Khi triển khai hợp đồng, giao dịch tạo lập chứa đoạn mã dùng để sinh ra hợp đồng. Sau khi thực thi thành công, mạng lập địa chỉ cho hợp đồng và lưu phần bytecode sẽ chạy khi về sau nhận lệnh gọi. Mã vận hành của hợp đồng sau khi triển khai không phải cùng một dạng biểu diễn với tệp nguồn của nhà phát triển, nên mã nguồn công khai vẫn phải đối chiếu với bytecode trên chuỗi mới nói được rằng hai bên tương ứng với nhau.

Phiên bản và thiết lập của trình biên dịch có thể ảnh hưởng tới bytecode cuối cùng. Hai tệp nguồn trông na ná nhau cũng có thể sinh ra kết quả khác nhau; còn việc thấy cùng một tên hợp đồng thì càng không thay được việc đối chiếu mạng và địa chỉ hợp đồng.

Lệnh gọi cung cấp dữ liệu đầu vào cho hợp đồng

Khi người dùng gọi hợp đồng, họ gửi tới địa chỉ hợp đồng một giao dịch có kèm dữ liệu. Dữ liệu này thường cho biết cần gọi tính năng nào, và kèm tham số theo định dạng đã quy ước. Hợp đồng cũng có thể gọi một hợp đồng khác trong lúc thực thi, chuyển tiếp giá trị hoặc dữ liệu đi xa hơn.

EVM bắt đầu từ trạng thái blockchain hiện tại, đọc bên gọi, đích đến, giá trị kèm theo, dữ liệu đầu vào và những thông tin mà block hiện tại cho phép dùng, rồi thực thi lần lượt từng chỉ thị trong bytecode của hợp đồng đích. Mỗi chỉ thị sẽ thay đổi dữ liệu tạm thời của lần tính toán này theo quy tắc, hoặc yêu cầu đọc, ghi trạng thái lưu lâu dài của hợp đồng.

Hợp đồng không tự khởi động chỉ vì đã đến hạn. Phải có giao dịch hoặc lệnh gọi từ hợp đồng khác tạo thành điểm vào thực thi; phần "tự động chạy" hiển thị trên trang web thường vẫn cần một dịch vụ bên ngoài gửi giao dịch khi điều kiện được thỏa.

Opcode là những động tác cơ bản trong bytecode

Bytecode của EVM gồm từng opcode hợp lại. Có thể hiểu opcode là động tác nhỏ nhất mà máy ảo nhận biết, ví dụ làm số học, so sánh giá trị, đọc dữ liệu lệnh gọi, đọc hoặc ghi bộ lưu trữ, và gọi hợp đồng khác.

Các opcode khác nhau có quy tắc rõ ràng về đầu vào, đầu ra và mức tiêu tốn gas. Node không cần hiểu những tên gọi nghiệp vụ của hợp đồng; chỉ cần thực thi theo đúng thứ tự opcode là đã có thể kiểm tra kết quả mà node khác đưa ra có đúng giao thức hay không.

Một dòng trong ngôn ngữ bậc cao có thể được biên dịch thành nhiều opcode. Ngược lại, chỉ xem một opcode nào đó cũng không thể hiểu được toàn bộ ý định nghiệp vụ, nên việc soát hợp đồng thường còn phải kết hợp mã nguồn, thiết lập biên dịch, dữ liệu lệnh gọi và địa chỉ triển khai thực tế.

Dữ liệu tạm thời và trạng thái lưu lâu dài

Không phải mọi dữ liệu dùng trong lúc thực thi đều được ghi vĩnh viễn lên blockchain. Trước tiên có thể phân biệt ba vị trí:

  • dữ liệu lệnh gọi là phần đầu vào chỉ đọc mà lần gọi này mang vào;
  • bộ nhớ là vùng làm việc tạm thời dùng trong lần thực thi này, kết thúc là không giữ lại;
  • bộ lưu trữ thuộc về một hợp đồng cụ thể, sau khi ghi thành công sẽ trở thành một phần của trạng thái blockchain để các lệnh gọi sau đọc được.

EVM còn dùng một cấu trúc tính toán tạm thời theo kiểu vào sau ra trước, gọi là ngăn xếp. Opcode lấy giá trị ở đỉnh ngăn xếp, tính xong lại đặt kết quả vào. Người đọc phổ thông không cần tự theo dõi từng bước, nhưng cần biết rằng "thay đổi trong bộ nhớ" và "bộ lưu trữ của hợp đồng đã đổi" không phải cùng một việc.

Ghi vào bộ lưu trữ lâu dài thường tiêu tốn nhiều gas hơn so với chỉ tính toán tạm thời. Việc xóa hoặc thay đổi bộ lưu trữ cũng bị quy tắc giao thức ràng buộc, không thể coi trạng thái trên chuỗi như một tệp cục bộ mà chương trình thông thường muốn ghi đè thế nào cũng được.

Thay đổi trạng thái phải tính lại được

Các giao dịch trong cùng một block có thứ tự xác định. Node bắt đầu từ cùng trạng thái trước block, thực thi lần lượt cùng những giao dịch đó thì phải thu được cùng trạng thái sau block; nếu không, chúng không thể thống nhất về một quyển sổ chung.

Vì vậy, hợp đồng EVM khi thực thi không thể trực tiếp truy cập trang web bất kỳ, thời gian của thiết bị hay kết quả ngẫu nhiên từ một máy chủ nào đó. Khi cần giá, thông tin thời tiết hoặc dữ liệu ngoài chuỗi khác, một bên tham gia bên ngoài phải đưa dữ liệu đó lên chuỗi dưới dạng giao dịch trước. EVM có thể kiểm tra mã sử dụng phần đầu vào này thế nào, nhưng không thể tự động chứng minh sự thật ngoài chuỗi tương ứng là đúng.

Những thông tin do block cung cấp như thời gian hay số block cũng đến từ môi trường thực thi mà giao thức định nghĩa. Nhà phát triển có thể đọc chúng theo quy tắc, nhưng không nên coi những giá trị đó là một đồng hồ bên ngoài chính xác hay nguồn ngẫu nhiên bí mật không bị quá trình đề xuất block ảnh hưởng.

Gas giới hạn khối lượng công việc mỗi lần thực thi

Mỗi thao tác của EVM đều tiêu tốn một lượng gas nhất định. Gas là đơn vị đo công việc tính toán và lưu trữ, không phải một loại token riêng; trên mạng chính Ethereum, phí thực thi thực tế thường trả bằng tài sản gốc của mạng là ETH.

Bên gửi giao dịch sẽ đặt mức gas tối đa mà giao dịch này được tiêu tốn. Khi thực thi, EVM cộng dồn gas theo những thao tác thực sự chạy; nếu gas còn lại không đủ để hoàn thành bước tiếp theo, việc thực thi sẽ thất bại vì cạn gas.

Gas khiến vòng lặp vô hạn hay những lệnh gọi phức tạp bất thường không thể chiếm dụng miễn phí tài nguyên tính toán của mọi node. Nó cũng có nghĩa cùng một tính năng có thể tiêu tốn lượng khác nhau tùy đầu vào, trạng thái hiện tại và đường thực thi. Giao dịch số tiền lớn không chắc chạy nhiều mã hơn giao dịch số tiền nhỏ.

Thành công, hoàn tác và thất bại

Hợp đồng có thể kết thúc bình thường và trả về dữ liệu, cũng có thể chủ động hoàn tác, hoặc thất bại vì thao tác không hợp lệ, vì cạn gas và những lý do khác. Khi thất bại, các thay đổi trạng thái chưa được xác lập trên đường gọi này sẽ bị hủy theo quy tắc, nhưng phần tài nguyên tính toán mà giao dịch đã tiêu tốn vẫn có thể phát sinh phí.

Một giao dịch có thể kéo theo nhiều lớp lệnh gọi hợp đồng. Nếu lệnh gọi ở lớp trong thất bại, hợp đồng ở lớp ngoài có thể theo mã của nó mà tiếp tục xử lý kết quả trả về, cũng có thể làm cả giao dịch hoàn tác. Vì vậy, "một bước bên trong thất bại" và "cả giao dịch cuối cùng thất bại" cần được đánh giá cùng với kết quả của các lệnh gọi.

Việc hoàn tác trạng thái cũng không xóa đi sự thật rằng giao dịch đã được đưa vào block. Trình khám phá block vẫn có thể hiển thị giao dịch thất bại và lượng gas đã tiêu tốn; chỉ có điều những thay đổi trạng thái hợp đồng như dự kiến đã không có hiệu lực.

Đọc kết quả và gửi giao dịch

Ví hoặc ứng dụng có thể để một node mô phỏng cục bộ yêu cầu chỉ đọc rồi trả kết quả ngay. Kiểu đọc này không tạo ra đồng thuận mới của toàn mạng, cũng không làm thay đổi trạng thái trên chuỗi, nên thường không cần người dùng ký và trả phí trên chuỗi.

Còn thao tác cần thay đổi trạng thái thì phải hình thành giao dịch, được tài khoản ký và phát đi, rồi sau khi vào block sẽ do các node cùng thực thi. Việc mô phỏng trước khi gửi có thể giúp phát hiện những thất bại rõ ràng, nhưng kết quả cuối cùng vẫn có thể bị thứ tự giao dịch, thay đổi trạng thái, thiết lập gas và mạng đã chọn ảnh hưởng.

Vì vậy, giao diện ứng dụng hiện "dự kiến thành công" không đồng nghĩa với việc giao dịch đã được xác nhận. Muốn biết kết quả thật trên chuỗi thì phải xem trạng thái giao dịch, kết quả thực thi và trạng thái hợp đồng trên đúng mạng.

EVM và Ethereum không phải cùng một khái niệm

EVM chỉ mô tả một phần quy tắc về việc thực thi hợp đồng thông minh và chuyển đổi trạng thái. Ethereum còn bao gồm định dạng tài khoản và giao dịch, việc lan truyền block, đồng thuận bằng chứng cổ phần, giao tiếp mạng và những thành phần giao thức khác.

Các blockchain khác cũng có thể hiện thực EVM hoặc một môi trường thực thi rất giống, để dùng lại công cụ hợp đồng và bytecode. Chúng thường được gọi là mạng tương thích EVM, nhưng vẫn có lịch sử block, cách thu xếp xác thực, tài sản trả phí và ranh giới an ninh riêng.

Nên "chạy được hợp đồng EVM" không có nghĩa nó chính là Ethereum, cũng không bảo đảm cùng một địa chỉ thì trên các mạng khác nhau đều triển khai cùng đoạn mã. Khi dùng ứng dụng xuyên mạng, vẫn cần đối chiếu mạng cùng số hiệu mạng, địa chỉ hợp đồng và bytecode thực tế.

Thực thi chung không có nghĩa hợp đồng an toàn

Quy tắc xác định của EVM giúp node kiểm tra lại hợp đồng có chạy đúng theo mã hay không, nhưng không thể đánh giá mã đó có đúng với kết quả nghiệp vụ mà người dùng thật sự muốn hay không. Quyền hạn sai, hợp đồng bên ngoài gọi lại nhiều lần trước khi một thao tác trước đó kết thúc, vấn đề ở dữ liệu giá đầu vào, quyền kiểm soát nâng cấp hay giao diện dẫn dụ đều có thể khiến một giao dịch hoàn toàn đúng quy tắc EVM gây ra hậu quả ngoài ý muốn.

Biên dịch thành công, thực thi thành công trên chuỗi hay mã nguồn được công khai cũng không thay thế được việc rà soát an ninh. Khi đánh giá một hợp đồng cụ thể, cần kết hợp bytecode đã triển khai, trạng thái khởi tạo, quyền quản trị, phần phụ thuộc bên ngoài và đường gọi thực tế.

Câu hỏi thường gặp

EVM có phải một máy chủ đám mây?

Không. Nó là bộ quy tắc thực thi do phần mềm các node cùng hiện thực, không ứng với một máy cố định nào.

Mã Solidity có được EVM thực thi trực tiếp?

Thường là không. Mã nguồn Solidity trước tiên được trình biên dịch chuyển thành bytecode EVM, và node thực thi phần bytecode sau khi triển khai.

Đọc hợp đồng có nhất định phải trả phí gas?

Yêu cầu chỉ đọc tại chỗ thường không hình thành giao dịch trên chuỗi, nên không trực tiếp phát sinh phí trên chuỗi. Nếu việc đọc là một phần trong quá trình thực thi của một giao dịch khác có lên chuỗi, thì các thao tác liên quan vẫn được tính vào gas của giao dịch đó.

EVM có đọc trực tiếp được dữ liệu internet?

Không. Dữ liệu bên ngoài cần được một bên tham gia hoặc một dịch vụ đưa lên chuỗi qua giao dịch; EVM chỉ có thể xử lý theo quy tắc phần đầu vào đã được cung cấp.

Tương thích EVM là hợp đồng có thể chuyển sang mà không cần sửa?

Không bảo đảm. Mức độ tương thích, phiên bản giao thức, các opcode khả dụng, quy tắc phí, hợp đồng hệ thống và phần phụ thuộc bên ngoài có thể khác nhau, vẫn cần xác thực và kiểm thử trên mạng đích.

Khái niệm liên quan

Tìm hiểu thêm về Ethereum, hợp đồng thông minh, phí gas và blockchain, hoặc trở lại bảng thuật ngữ tiền mã hóa.

Nguồn

Tuyên bố miễn trừ trách nhiệm
Nội dung này chỉ nhằm mục đích cung cấp thông tin và có thể đề cập đến các sản phẩm không khả dụng tại khu vực của bạn. Nội dung này không nhằm mục đích cung cấp (i) lời khuyên hoặc khuyến nghị đầu tư; (ii) đề nghị hoặc chào mời mua, bán hoặc nắm giữ crypto/tài sản kỹ thuật số; hoặc (iii) tư vấn tài chính, kế toán, pháp lý hoặc thuế. Tài sản kỹ thuật số/crypto, bao gồm cả stablecoin, có mức độ rủi ro cao và có thể biến động mạnh. Bạn nên cân nhắc kỹ xem việc giao dịch hoặc nắm giữ crypto/tài sản kỹ thuật số có phù hợp với bạn hay không, dựa trên tình hình tài chính của mình. Vui lòng tham khảo ý kiến của chuyên gia pháp lý/thuế/đầu tư để được giải đáp câu hỏi về tình hình cụ thể của bản thân. Thông tin (bao gồm dữ liệu thị trường và thông tin thống kê, nếu có) trong bài viết này chỉ mang tính chất thông tin chung. Mặc dù đã thực hiện mọi biện pháp cẩn thận hợp lý khi chuẩn bị dữ liệu và biểu đồ này, chúng tôi không chịu trách nhiệm về bất kỳ sai sót thực tế hoặc thiếu sót nào trong tài liệu này.

© 2025 OKX. Bài viết này có thể được sao chép hoặc phân phối toàn bộ, hoặc trích dẫn các đoạn không quá 100 từ, miễn là không sử dụng cho mục đích thương mại. Mọi bản sao hoặc phân phối toàn bộ bài viết phải ghi rõ: “Bài viết này thuộc bản quyền © 2025 OKX và được sử dụng có sự cho phép.” Nếu trích dẫn, vui lòng ghi tên bài viết và nguồn tham khảo, ví dụ: “Tên bài viết, [tên tác giả nếu có], © 2025 OKX.” Một số nội dung có thể được tạo ra hoặc hỗ trợ bởi công cụ trí tuệ nhân tạo (AI). Nghiêm cấm các tác phẩm phái sinh hoặc hình thức sử dụng khác đối với bài viết này.

Bài viết liên quan

Xem thêm
what-is-blockchain

Blockchain là gì?

Blockchain là một sổ ghi chép kỹ thuật số do nhiều bên cùng duy trì. Bản ghi mới được sắp xếp vào các khối, sau đó các khối được nối theo thứ tự. Các máy tính tham gia mạng blockchain kiểm tra bản cập
29 thg 10, 2026
crypto-glossary-cover-v5.contentful

Thuật ngữ tiền mã hóa từ A đến Z: Blockchain và giao dịch

Khám phá các khái niệm về tiền mã hóa, blockchain và giao dịch qua định nghĩa ngắn gọn, được sắp xếp theo thuật ngữ tiếng Anh và kèm tên gọi tiếng Việt. [A](#a) · [B](#b) · [C](#c) · [D](#d) · [E](#e)
29 thg 10, 2026
Crypto adoption generic thumbnail

DeFi là gì?

Tài chính phi tập trung (decentralized finance, DeFi) là một loại ứng dụng cung cấp những chức năng tài chính như trao đổi tài sản và cho vay, chủ yếu thông qua blockchain và hợp đồng thông minh. Hợp
29 thg 10, 2026
decentralized-exchange-dex

DEX là gì?

Sàn giao dịch phi tập trung (decentralized exchange, DEX) là một loại hệ thống giao dịch cho phép người dùng trao đổi tài sản số thông qua giao thức blockchain hoặc hợp đồng thông minh. Hợp đồng thông
29 thg 10, 2026
thumbnail:dao

DAO là gì?

Tổ chức tự trị phi tập trung (decentralized autonomous organization, DAO) là một cách tổ chức để nhiều người cùng ra quyết định, quản lý ngân quỹ hoặc duy trì một dự án theo những quy tắc đã thống nhấ
29 thg 10, 2026
DApps generic thumb

DApp là gì?

Ứng dụng phi tập trung (decentralized application, DApp) là ứng dụng giao một phần quy tắc hoặc trạng thái cốt lõi của mình — ví dụ số dư, quyền sở hữu và bản ghi cấp phép — cho một mạng phi tập trung
29 thg 10, 2026
Xem thêm