Máy ảo TON (TVM, đôi khi TON VM) một máy ảo thực hiện các hợp đồng thông minh trong blockchain TONĐây là lớp thực thi của mạng: mỗi hợp đồng thông minh Máy xử lý tin nhắn đến, thay đổi trạng thái liên tục của hợp đồng và tạo ra tin nhắn đi ra cho các hợp đồng khác.
Kiến trúc TVM phụ thuộc vào ba yêu cầu: xác định hoàn toàn thực hiện (một đầu vào giống nhau mang lại kết quả giống nhau trên bất kỳ nút nào), mật độ mã cao (tối thiểu không gian trong blockchain) và tương thích ngược khi mở rộng bộ hướng dẫn.
Lịch sử#
TVM được phát triển bởi nhóm Telegram vào năm 2018 cùng với phiên bản đầu tiên của giao thức TON.:
- 2018 phiên bản đầu tiên của TVM được phát hành với mạng thử nghiệm TON.
- Tháng 3 năm 2020 xuất bản tài liệu kỹ thuật chi tiết với mô tả các loại dữ liệu, tối ưu hóa và hợp đồng hướng dẫn.
- 2020 (khởi động mainnet) TVM hỗ trợ một tập hợp đầy đủ các hoạt động và đảm bảo thực hiện xác định trong mạng sản xuất.
Sau khi chuyển dự án cho cộng đồng, phát triển TVM tiếp tục thông qua quá trình TEP cập nhật được đưa ra thông qua các đề xuất cải tiến và được kích hoạt thông qua sự đồng thuận của các nhà xác nhận.
Cơ sở#
TVM sử dụng các dòng bit như một biểu diễn cơ bản của dữ liệu.
- Biểu tượng mười sáu các dòng dài gấp bốn bit, được chia thành 4 nhóm, mỗi nhóm được ghi một chữ số mười sáu (0F). Nếu chiều dài không gấp bốn, một thẻ kết thúc đặc biệt được thêm vào để đánh dấu sửa đổi.
- Lưu tập theo ôctet dòng được chia thành các nhóm 8 bit và được ghi lại như một chuỗi byte; khi cần thiết, thêm sự cân bằng đến 8.
Mô hình ngăn xếp#
TVM là một máy ảo xếp chồng. Điều này có nghĩa là dữ liệu được lưu trữ trong cấu trúc stec (last-in-first-out), chứ không phải trong các biến hoặc registry có tên. Hầu hết các hoạt động (chiếm số, so sánh, chuyển các tham số) lấy các lập luận từ chồng và đặt kết quả vào đó. Mô hình chồng đơn giản hơn phương pháp đăng ký và cung cấp mã hóa hướng dẫn dày đặc hơn quan trọng để giảm lưu trữ on-chain.
Các loại giá trị
Bộ sưu tập TVM hoạt động với một tập hợp cố định các kiểu nguyên thủy:
- Integer 257-bit toàn bộ ký hiệu (chọn độ phân giải cho phép chứa 256-bit hash cộng với ký hiệu không mất).
- Cell Một đối tượng chứa tới 1023 bit dữ liệu và tới 4 liên kết đến các ô khác.
- Tuple một bộ sưu tập các giá trị có thứ tự của các loại khác nhau.
- Slice trên ô: chỉ ra phần còn lại của dữ liệu và liên kết khi đọc.
- Builder bộ đệm để liên tục xây dựng một Cell mới.
- Continuation trình bày điểm tiếp tục thực hiện; xem bên dưới.
- Null không có giá trị; dấu hiệu cho các trường không khởi tạo.
Các loại hướng dẫn
Các hướng dẫn TVM được nhóm theo mục đích:
- Đồ đậu và xe buýt thay thế ngăn xếp, các hoạt động với tuple;
- hằng số chèn các giá trị đã xác định vào ngăn xếp;
- số học các hoạt động số học tiêu chuẩn với kiểm tra tự động quá tải;
- Hoạt động với ô đọc Slice, ghi Builder, truy cập liên kết;
- điều khiển dòng chảy các chi nhánh, chu kỳ, sự gọi tiếp tục có điều kiện;
- các nguyên tố ứng dụng hoạt động chuyên môn TON: làm việc với địa chỉ, chữ ký, ứng dụng truyền tin.
Các ô và loại của chúng#
Cell (Cell) là đơn vị lưu trữ nguyên tử trong TVM và trong chính blockchain TON. Mỗi Cell chứa đến 1023 bit dữ liệu và đến 4 liên kết đến các Cell khác.
Loại ô
- Thông thường (loại 1) là một phương tiện truyền thông thông thường cho dữ liệu và liên kết.
- Những tế bào kỳ lạ (exotic cells) loại 2255 với đặc điểm giải mã và băm. Được sử dụng cho các nhánh cắt (truncated branches), liên kết đến thư viện và bằng chứng Merkle.
Các ô kỳ lạ cho phép, ví dụ, truyền một bản snapshot một phần của blockchain với bằng chứng mật mã cơ sở khách hàng TON dễ dàng.
Tiếp tục (Continuations)#
Continuation là một cấu trúc trung tâm của TVM để điều khiển luồng. Về cơ bản, nó là tính toán trì hoãn : dấu hiệu chứa mã để thực hiện, ngăn xếp hiện tại và trạng thái lưu trữ của các sổ đăng ký kiểm soát.
Continuation được xây dựng để gọi các chương trình con, các hoạt động có điều kiện, chu kỳ và xử lý ngoại lệ.
Loại phần mở rộng
- Thông thường chứa mã, ngăn xếp, danh sách các registry được lưu và trang mã (xem bên dưới).
- Đơn giản chỉ có mã và trang mã, không có dữ liệu lưu trữ trong ngăn xếp.
- Hiện tại (cc, current continuation) thể hiện mã đang được thực thi; một phần quan trọng của trạng thái máy.
Điều khiển được chuyển đổi giữa các tiếp tục bằng JMP (chuyển giao điều khiển) và RET (trở lại). Ngoại trừ các tiếp nối đặc biệt được kích hoạt khi có lỗi: chúng nhận được các thông số lỗi và xác định hành vi tiếp theo.
Các trang mã#
Mỗi continuation thông thường mang một code page (cp) 16 bit để xác định cách giải mã các hướng dẫn của nó.
Các hướng dẫn được mã hóa bằng mã tiền tố nhị phân cho phép giải mã rõ ràng và thể hiện mật độ. Nếu tiền tố không phù hợp với hướng dẫn cho phép của trang mã hiện tại, sẽ tạo ra ngoại lệ opcode không được phép.
Giữa các trang mã có thể tự động chuyển đổi tùy thuộc vào hoạt động được thực hiện điều này cho phép chuyên trang cho các hoạt động thường xuyên (làm thao tác với bộ chồng, xử lý dữ liệu) và giảm khối lượng mã.
TVM vs Ethereum Virtual Machine#
TVM và EVM cả hai đều là máy ảo xếp chồng cho các hợp đồng thông minh, nhưng có những khác biệt chính.
| Tính chất | TVM | EVM |
|---|---|---|
| Mô hình dữ liệu cơ bản | Graph ô (Cell, lên đến 1023 bit + 4 liên kết) | 256-bit từ + Merkle Patricia Trie |
| Kích thước Integer | 257 bit | 256 bit |
| Kiểm tra quá tải | Tự động | Bàn tay (Solidity ≥0.8) |
| Mã hóa | Curve25519, Weil pairings (zk-SNARKs), sha256 | secp256k1, keccak256 |
| Ngôn ngữ chính của hợp đồng | FunC (Static typing, ADT) | Solidity |
| Lưu trữ trạng thái | Phân bố theo ô hợp đồng | MPT toàn cầu |
Graph tế bào đơn giản hóa việc làm việc với các cấu trúc phức tạp (cây, DAG), đòi hỏi ít bộ nhớ và tài nguyên tính toán hơn MPT. Kiểm tra tự động quá tải làm giảm lớp lỗ hổng điển hình. Hỗ trợ Curve25519 và Weil pairings cung cấp các khả năng mã hóa không thể truy cập trong EVM out of the box.