Lompat ke konten utama
Change page

Ethereum Virtual Machine (EVM)

Ethereum Virtual Machine (EVM) adalah lingkungan virtual terdesentralisasi yang mengeksekusi kode secara konsisten dan aman di seluruh node Ethereum. Node menjalankan EVM untuk mengeksekusi kontrak pintar, menggunakan "gas" untuk mengukur upaya komputasi yang diperlukan untuk operasi, memastikan alokasi sumber daya yang efisien dan keamanan jaringan.

Prasyarat

Beberapa pemahaman dasar tentang terminologi umum dalam ilmu komputer seperti bita (opens in a new tab), memori (opens in a new tab), dan tumpukan (stack) (opens in a new tab) diperlukan untuk memahami EVM. Akan sangat membantu juga jika Anda terbiasa dengan konsep kriptografi/rantai blok seperti fungsi hash (opens in a new tab) dan pohon Merkle (opens in a new tab).

Dari buku besar ke mesin state

Analogi 'buku besar terdistribusi' sering digunakan untuk menggambarkan rantai blok seperti Bitcoin, yang memungkinkan mata uang terdesentralisasi menggunakan alat dasar kriptografi. Buku besar tersebut memelihara catatan aktivitas yang harus mematuhi serangkaian aturan yang mengatur apa yang dapat dan tidak dapat dilakukan seseorang untuk memodifikasi buku besar tersebut. Misalnya, sebuah alamat Bitcoin tidak dapat membelanjakan lebih banyak Bitcoin daripada yang telah diterimanya sebelumnya. Aturan-aturan ini mendasari semua transaksi di Bitcoin dan banyak rantai blok lainnya.

Meskipun Ethereum memiliki mata uang kripto aslinya sendiri (ether) yang mengikuti aturan intuitif yang hampir sama persis, Ethereum juga memungkinkan fungsi yang jauh lebih kuat: kontrak pintar. Untuk fitur yang lebih kompleks ini, diperlukan analogi yang lebih canggih. Alih-alih buku besar terdistribusi, Ethereum adalah mesin state (opens in a new tab) terdistribusi. State Ethereum adalah struktur data besar yang tidak hanya menyimpan semua akun dan saldo, tetapi juga sebuah state mesin, yang dapat berubah dari blok ke blok menurut serangkaian aturan yang telah ditentukan sebelumnya, dan yang dapat mengeksekusi kode mesin arbitrer. Aturan spesifik untuk mengubah state dari blok ke blok ditentukan oleh EVM.

A diagram showing the make up of the EVM Diagram diadaptasi dari Ethereum EVM illustrated (opens in a new tab)

Fungsi transisi state Ethereum

EVM berperilaku seperti fungsi matematika: Diberikan sebuah input, ia menghasilkan output yang deterministik. Oleh karena itu, cukup membantu untuk mendeskripsikan Ethereum secara lebih formal sebagai memiliki fungsi transisi state:

Y(S, T)= S'

Diberikan state valid yang lama (S) dan serangkaian transaksi valid yang baru (T), fungsi transisi state Ethereum Y(S, T) menghasilkan state output valid yang baru S'

State

Dalam konteks Ethereum, state adalah struktur data yang sangat besar yang disebut Trie Merkle Patricia yang dimodifikasi, yang menjaga semua akun terhubung oleh hash dan dapat direduksi menjadi satu hash akar yang disimpan di rantai blok.

Transaksi

Transaksi adalah instruksi yang ditandatangani secara kriptografi dari akun. Ada dua jenis transaksi: yang menghasilkan panggilan pesan dan yang menghasilkan pembuatan kontrak.

Pembuatan kontrak menghasilkan pembuatan akun kontrak baru yang berisi kode bita kontrak pintar yang telah dikompilasi. Kapan pun akun lain melakukan panggilan pesan ke kontrak tersebut, ia akan mengeksekusi kode bitanya.

Instruksi EVM

EVM mengeksekusi sebagai mesin tumpukan (stack machine) (opens in a new tab) dengan kedalaman 1024 item. Setiap item adalah kata (word) 256-bit, yang dipilih untuk kemudahan penggunaan dengan kriptografi 256-bit (seperti hash Keccak-256 atau tanda tangan secp256k1).

Selama eksekusi, EVM memelihara memori sementara (sebagai array bita yang dialamatkan dengan kata), yang tidak bertahan di antara transaksi.

Penyimpanan sementara

Penyimpanan sementara adalah penyimpanan nilai-kunci per transaksi yang diakses melalui opcode TSTORE dan TLOAD. Penyimpanan ini bertahan di semua panggilan internal selama transaksi yang sama tetapi dihapus pada akhir transaksi. Tidak seperti memori, penyimpanan sementara dimodelkan sebagai bagian dari state EVM alih-alih bingkai eksekusi, namun tidak dikomit ke state global. Penyimpanan sementara memungkinkan berbagi state sementara yang hemat gas di seluruh panggilan internal selama transaksi.

Penyimpanan

Kontrak berisi trie penyimpanan Merkle Patricia (sebagai array kata yang dapat dialamatkan dengan kata), yang terkait dengan akun yang bersangkutan dan merupakan bagian dari state global. Penyimpanan persisten ini berbeda dari penyimpanan sementara, yang hanya tersedia selama durasi satu transaksi dan tidak membentuk bagian dari trie penyimpanan persisten akun tersebut.

Opcode

Kode bita kontrak pintar yang dikompilasi dieksekusi sebagai sejumlah opcode EVM, yang melakukan operasi tumpukan standar seperti XOR, AND, ADD, SUB, dll. EVM juga mengimplementasikan sejumlah operasi tumpukan khusus rantai blok, seperti ADDRESS, BALANCE, BLOCKHASH, dll. Kumpulan opcode juga mencakup TSTORE dan TLOAD, yang menyediakan akses ke penyimpanan sementara.

A diagram showing where gas is needed for EVM operations Diagram diadaptasi dari Ethereum EVM illustrated (opens in a new tab)

Implementasi EVM

Semua implementasi EVM harus mematuhi spesifikasi yang dijelaskan dalam kertas kuning Ethereum.

Selama sepuluh tahun sejarah Ethereum, EVM telah mengalami beberapa revisi, dan ada beberapa implementasi EVM dalam berbagai bahasa pemrograman.

Klien eksekusi Ethereum menyertakan implementasi EVM. Selain itu, ada beberapa implementasi mandiri, termasuk:

Bacaan Lebih Lanjut

Tutorial: Ethereum Virtual Machine (EVM) / Opcode di Ethereum