TON Virtual Machine (TVM, kadang disebut TON VM) — mesin virtual yang mengeksekusi smart contract di blockchain TON. Ini adalah lapisan eksekusi jaringan: setiap smart contract disimpan dan dijalankan sebagai program untuk TVM. Mesin memproses pesan masuk, mengubah state permanen kontrak, dan membentuk pesan keluar untuk kontrak lain.
Arsitektur TVM tunduk pada tiga persyaratan: determinisme penuh dalam eksekusi (input yang sama menghasilkan output yang sama pada setiap node), kepadatan kode tinggi (meminimalkan ruang di blockchain), dan kompatibilitas mundur saat memperluas set instruksi.
Sejarah#
TVM dikembangkan oleh tim Telegram pada tahun 2018 bersamaan dengan versi pertama protokol TON. Pengembangan berlangsung secara bertahap:
- 2018 — versi pertama TVM, dirilis bersama testnet TON. Fokus utama — fungsionalitas smart contract dan integrasi dengan protokol.
- Maret 2020 — publikasi dokumentasi teknis terperinci dengan deskripsi tipe data, optimasi, dan set instruksi.
- 2020 (peluncuran mainnet) — TVM mendukung set operasi lengkap dan menyediakan eksekusi deterministik di jaringan produksi.
Setelah proyek diserahkan ke komunitas, pengembangan TVM berlanjut melalui proses TEP — pembaruan diperkenalkan lewat proposal perbaikan dan diaktifkan melalui konsensus validator.
Dasar-dasar#
TVM menggunakan string bit sebagai representasi data fundamental. Mereka direpresentasikan dalam dua notasi:
- Notasi heksadesimal — string dengan panjang kelipatan empat bit, dibagi menjadi grup 4 bit, masing‑masing ditulis dengan satu digit heksadesimal (0–F). Jika panjang tidak kelipatan empat, ditambahkan tag khusus penutup untuk menandai modifikasi.
- Serialisasi dalam oktet — string dibagi menjadi grup 8 bit dan ditulis sebagai urutan byte; bila diperlukan ditambahkan padding hingga 8.
Model Stack#
TVM — mesin virtual berbasis stack. Artinya, data disimpan dalam struktur “stack” (last-in-first-out), bukan dalam variabel bernama atau register. Kebanyakan operasi (aritmetika, perbandingan, pengiriman parameter) mengambil argumen dari stack dan menaruh hasil kembali ke stack. Model stack lebih sederhana dibanding pendekatan berbasis register dan menghasilkan encoding instruksi yang lebih padat — penting untuk mengurangi penyimpanan on‑chain.
Tipe Nilai
Stack TVM bekerja dengan set tipe primitif tetap:
- Integer — bilangan bulat bertanda 257‑bit (ukuran ini memungkinkan menampung hash 256‑bit plus tanda tanpa kehilangan).
- Cell — objek yang berisi hingga 1023 bit data dan hingga 4 tautan ke sel lain. Dasar memori TVM.
- Tuple — koleksi terurut nilai dengan tipe berbeda.
- Slice — “potongan” sel: pointer ke sisa data dan tautan saat membaca.
- Builder — buffer untuk membangun Cell baru secara berurutan.
- Continuation — representasi titik lanjutan eksekusi; lihat di bawah.
- Null — tidak ada nilai; penanda untuk field yang belum diinisialisasi.
Kategori Instruksi
Instruksi TVM dikelompokkan berdasarkan tujuan:
- stack dan tuple — permutasi stack, operasi pada tuple;
- konstanta — menyisipkan nilai pra‑definisi ke stack;
- aritmetika — operasi aritmetika standar dengan pemeriksaan overflow otomatis;
- operasi sel — membaca Slice, menulis Builder, mengakses tautan;
- kontrol alur — percabangan bersyarat, loop, pemanggilan continuation;
- primitif aplikasi — operasi khusus TON: bekerja dengan alamat, signature, aktuator pesan.
Sel dan Tipe‑nya#
Cell — unit penyimpanan atomik di TVM dan di blockchain TON. Setiap Cell berisi hingga 1023 bit data dan hingga 4 tautan ke Cell lain. Graf sel yang terbentuk melalui tautan merupakan Directed Acyclic Graph (DAG): siklus tidak diizinkan. Semua data blockchain (smart contract, state, pesan, blok) disimpan sebagai graf semacam ini.
Tipe Sel
- Biasa (tipe‑1) — media standar untuk data dan tautan.
- Eksotik (exotic cells) — tipe 2–255 dengan karakteristik khusus dalam deserialisasi dan hashing. Digunakan untuk cabang terpotong (truncated branches), tautan ke library, dan bukti Merkle.
Sel eksotik memungkinkan, misalnya, mentransfer snapshot parsial blockchain dengan bukti kriptografis — dasar klien ringan TON.
Continuations#
Continuation — konstruksi pusat TVM untuk kontrol alur. Pada dasarnya ini adalah “perhitungan tertunda”: penanda yang berisi kode untuk dieksekusi, stack saat ini, dan state register kontrol yang disimpan. Continuation dapat diletakkan di stack, diteruskan sebagai parameter, diaktifkan — dan melanjutkan eksekusi dari titik yang telah difiksasi.
Pada continuation dibangun pemanggilan sub‑program, operasi bersyarat, loop, dan penanganan eksepsi. Analogi dalam bahasa yang lebih familiar adalah first‑class functions; di TVM continuation lebih kuat karena juga mencakup kelanjutan program yang tidak lengkap.
Tipe Continuation
- Biasa — berisi kode, stack, daftar register yang disimpan, dan code page (lihat di bawah).
- Sederhana — hanya kode dan code page, tanpa data stack yang disimpan.
- Current (cc, current continuation) — mencerminkan kode yang sedang dieksekusi; bagian penting dari state mesin.
Pengelolaan berpindah antar continuation dilakukan oleh instruksi JMP (pindah kontrol) dan RET (kembali). Eksepsi — continuation khusus yang diaktifkan saat terjadi error: mereka menerima parameter error dan menentukan perilaku selanjutnya. Struktur bersyarat dan iteratif (IF, WHILE, REPEAT) diimplementasikan di atas continuations.
Code Pages#
Setiap continuation biasa membawa field code page 16‑bit (cp) yang menentukan cara mendekode instruksinya. Ini adalah mekanisme kompatibilitas mundur: secara bersamaan di jaringan dapat ada kontrak yang dikompilasi untuk versi set instruksi TVM yang berbeda.
Instruksi dikodekan dengan binary prefix code — memberikan dekoding yang tidak ambigu dan representasi yang padat. Jika prefix tidak cocok dengan instruksi yang valid pada code page saat ini, akan dihasilkan eksepsi opcode tidak sah.
Antara code pages dapat terjadi perpindahan otomatis tergantung pada operasi yang dijalankan — memungkinkan spesialisasi page untuk operasi yang sering (manipulasi stack, pengolahan data) dan mengurangi ukuran kode.
TVM vs Ethereum Virtual Machine#
TVM dan EVM — keduanya mesin virtual berbasis stack untuk smart contract, namun memiliki perbedaan utama.
| Properti | TVM | EVM |
|---|---|---|
| Model data dasar | Graf sel (Cell, hingga 1023 bit + 4 tautan) | Kata 256‑bit + Merkle Patricia Trie |
| Dimensi Integer | 257 bit | 256 bit |
| Pemeriksaan overflow | Otomatis | Manual (Solidity ≥0.8) |
| Kriptografi | Curve25519, Weil pairings (zk‑SNARKs), sha256 | secp256k1, keccak256 |
| Bahasa utama kontrak | FunC (tipe statis, ADT) | Solidity |
| Penyimpanan state | Terdistribusi di sel kontrak | MPT dengan state global |
Graf sel mempermudah kerja dengan struktur kompleks (pohon, DAG), membutuhkan lebih sedikit memori dan sumber daya komputasi dibanding MPT. Pemeriksaan overflow otomatis mengurangi kelas kerentanan umum. Dukungan Curve25519 dan Weil pairings memberi kemampuan kriptografi yang tidak tersedia di EVM “out‑of‑the‑box”.
Lihat jugaLihat juga#
- The Open Network
- FunC
- Smart contracts
- Toncoin