﻿---
title: "Ethereum Virtual Machine (EVM)"
description: "Panduan yang mempertimbangkan fork mengenai transaksi EVM, frame message call, bytecode, stack, memory, storage, gas, REVERT, DELEGATECALL, precompile, receipt, dan rekonsiliasi state."
image: "https://wiki.fcontext.com/og.png"
---

> Documentation Index
> Fetch the complete documentation index at: https://wiki.fcontext.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Ethereum Virtual Machine (EVM)

> Hanya untuk tujuan edukasi; bukan merupakan nasihat investasi atau rekomendasi investasi. Investasi dapat mengakibatkan kerugian.

<a id="answer"></a>

## Jawaban langsung

Ethereum Virtual Machine adalah mesin transisi state pada lapisan eksekusi yang menafsirkan bytecode berdasarkan aturan fork tertentu. Dengan pre-state valid, transaksi atau message tingkat teratas, lingkungan blok, dan spesifikasi fork yang sama, client eksekusi yang patuh harus menghitung post-state atau hasil kegagalan yang sama. EVM tidak memilih urutan transaksi, menyediakan finalitas konsensus, mengautentikasi antarmuka, ataupun membuat setiap chain yang kompatibel dengan EVM seaman Ethereum.

Transaksi yang ditandatangani secara eksternal adalah objek protokol tingkat teratas. Aktivitas antarkontrak terdiri atas message call dan call frame bertingkat, bukan transaksi independen yang memiliki nonce, receipt, atau hash transaksi sendiri. Setiap frame memiliki code, program counter, stack kata 256-bit, memory, calldata, returndata, gas, dan konteks eksekusi; persistent storage dimiliki akun, sedangkan transient storage memiliki masa hidup sepanjang transaksi berdasarkan aturan fork.

<a id="mechanism"></a>

## Cara kerjanya

1. Tetapkan snapshot eksekusi: chain dan `chainId`, jaringan, nomor dan hash blok, status canonical atau finalized, fork, client eksekusi dan revisi spesifikasi, pre-state atau state root, jenis transaksi, byte bertanda tangan mentah, hash transaksi, dan receipt. Determinisme bergantung pada konteks tepat ini.
2. Dekode envelope transaksi dan pisahkan validitas praeksekusi dari eksekusi. Verifikasi tanda tangan dan pengirim, nonce, tujuan atau pembuatan kontrak, value, calldata, gas limit, field biaya, access list, serta field khusus jenis transaksi. Transaksi yang ditolak sebelum dimasukkan berbeda dari transaksi yang dimasukkan, dieksekusi, lalu revert.
3. Susun message tingkat teratas dan call tree lengkap. Catat frame `CALL`, `STATICCALL`, `DELEGATECALL`, pembuatan kontrak, dan precompile; caller, context address, code address, `msg.sender`, `msg.value`, transfer value, calldata, returndata, gas yang diteruskan, dan flag keberhasilan. Label transaksi internal pada explorer adalah tampilan trace, bukan transaksi bertanda tangan.
4. Lacak program counter, stack, memory, calldata, returndata, log, persistent storage, dan jurnal transient storage setiap frame. `CALL` menggunakan alamat serta konteks storage callee; `DELEGATECALL` mengeksekusi code target dalam alamat dan konteks storage caller sambil mempertahankan sender dan value dari tingkat sebelumnya; `STATICCALL` melarang perubahan state.
5. Terapkan aturan gas fork target: intrinsic gas, biaya dinamis opcode, perluasan memory, akses cold dan warm, penerusan gas call, stipend, biaya precompile, refund, dan batas refund. Kemudian hitung biaya transaksi secara terpisah dari value menggunakan gas yang dipakai dan harga gas efektif. Estimasi gas bersifat kondisional, bukan jaminan.
6. Tentukan hasil frame berdasarkan cakupannya. `RETURN` meng-commit frame jika semua ancestor kemudian commit. `REVERT` mengembalikan frame dan descendant ke keadaan semula, mengembalikan data, dan tidak harus menghabiskan seluruh gas frame yang tersisa; exceptional halt berbeda. Parent dapat menangkap low-level call yang gagal dan melanjutkan, sehingga status receipt tingkat teratas dapat bernilai `1` meski child gagal. Kegagalan tingkat teratas yang sudah dimasukkan tetap memakai nonce pengirim dan gas yang dibayar.
7. Rekonsiliasikan status receipt, gas terpakai, log, alamat yang dibuat, dan return data terhadap saldo, nonce, code, persistent dan transient storage, ledger token, trace, serta block state root sebelum dan sesudah eksekusi. Jalankan ulang dengan client independen bila perlu, dan audit implementasi proxy, tata letak storage, precompile, target EVM compiler, serta peningkatan fork secara terpisah dari finalitas konsensus.

<a id="example"></a>

## Contoh terhitung

- **Revert tingkat teratas yang dimasukkan dan ledger biaya.** Transaksi tipe 2 memiliki gas limit `80,000`, gas terpakai `52,000`, base fee `20 gwei`, max priority fee `3 gwei`, dan max fee `40 gwei`. Harga gas efektif adalah `min(40, 20 + 3) = 23 gwei`; biaya aktual `52,000 * 23 gwei = 0.001196 ETH`, terdiri atas `52,000 * 20 gwei = 0.001040 ETH` yang dibakar dan `52,000 * 3 gwei = 0.000156 ETH` sebagai priority fee. `28,000 gas` yang tidak terpakai tidak dikenai biaya. Jika eksekusi tingkat teratas revert, efek storage, transfer value, dan log dikembalikan, tetapi nonce pengirim dan biaya aktual tetap berlaku.
- **Kegagalan child yang ditangkap.** Kontrak A bermula dengan `A.x = 5`. A memanggil B; B menulis `B.y = 9`, memancarkan log, lalu menjalankan `REVERT`. Penulisan dan log B dikembalikan. A melihat `success = false`, menulis `A.x = 7`, dan kembali secara normal. Status receipt akhir adalah `1`, `A.x = 7`, dan B mempertahankan nilai sebelumnya. Keberhasilan tingkat teratas tidak membuktikan setiap child call berhasil.
- **Konteks storage DELEGATECALL.** Proxy memiliki `slot0 = 5`; akun implementasi memiliki `slot0 = 99`. Code implementasi membaca slot 0, menambahkan `7`, lalu menyimpan hasilnya. Ketika dieksekusi melalui `DELEGATECALL`, proxy berubah menjadi `slot0 = 12`, sedangkan implementasi tetap `slot0 = 99`; alamat dan konteks storage proxy berlaku, serta sender dan value dari tingkat sebelumnya dipertahankan. Tata letak storage yang tidak kompatibel dapat merusak state proxy.
- **SELFDESTRUCT dalam cakupan fork.** Berdasarkan aturan EIP-6780, kontrak yang sudah ada dengan `2 ETH` menjalankan `SELFDESTRUCT` kepada penerima B. B menerima `2 ETH` dan saldo kontrak menjadi nol, tetapi akun, code, dan storage yang sudah ada tidak dihapus. Perilaku penghapusan hanya berlaku jika kontrak dibuat dan menghancurkan diri dalam transaksi yang sama. Ini perilaku spesifik fork, bukan aturan yang dapat diterapkan ke masa lalu atau semua chain EVM.

<a id="risks"></a>

## Risiko

- Menjalankan ulang pada chain, blok, fork, client, atau pre-state yang salah.
- Menganggap state nonkanonis atau yang terkena reorganisasi sebagai konteks final.
- Mencampuradukkan penolakan pravalidasi dengan execution revert yang dimasukkan.
- Mengasumsikan simulasi pending akan sama dengan state saat transaksi dimasukkan.
- Mengabaikan revert tingkat teratas, exceptional halt, atau kondisi out-of-gas.
- Melewatkan kegagalan child yang ditangkap parent.
- Salah membaca call context, code address, caller, sender, atau value.
- Merusak state proxy karena ketidakcocokan tata letak storage pada `DELEGATECALL`.
- Membiarkan reentrancy atau transfer value dan kendali eksternal yang tidak aman.
- Memercayai returndata, flag keberhasilan, atau custom error tanpa validasi.
- Menganggap log atau trace sebagai final state otoritatif.
- Salah menghitung akses cold dan warm, memory, atau gas yang diteruskan ke call.
- Salah menerapkan refund, batas refund, stipend, atau aturan `63/64`.
- Menggunakan alamat, input, aturan gas, atau semantik fork precompile yang salah.
- Mencampuradukkan masa hidup persistent storage, memory, dan transient storage.
- Mengharapkan perubahan state berhasil di dalam `STATICCALL`.
- Menerapkan asumsi penghapusan `SELFDESTRUCT` sebelum EIP-6780.
- Melewatkan perubahan implementasi proxy, admin, atau target compiler.
- Menjalankan aturan client eksekusi yang berbeda atau belum ditingkatkan.
- Menyimpulkan keamanan konsensus, bridge, token, tata kelola, atau finalitas dari kompatibilitas EVM.

<a id="misconceptions"></a>

## Kesalahpahaman umum

- Source code Solidity adalah objek yang langsung dieksekusi on-chain.
- Transaksi yang dimasukkan lalu revert tidak memerlukan biaya dan tidak mengubah nonce.
- Status receipt `1` membuktikan setiap internal call berhasil sesuai maksud.
- Event atau trace adalah state aset dan storage yang otoritatif.
- Kompatibilitas EVM menjamin opcode, gas, precompile, konsensus, dan keamanan yang identik.

<a id="related"></a>

## Topik terkait

- [Model berbasis akun](/id/crypto/account-based-model/)
- [Biaya gas](/id/crypto/gas-fee/)
- [Smart contract](/id/crypto/smart-contract/)

<a id="sources"></a>

## Sumber

- [Ethereum Virtual Machine (EVM)](https://ethereum.org/developers/docs/evm/) - Ethereum.org (diakses: 2026-08-12)
- [Ethereum Yellow Paper: a formal specification of Ethereum, a programmable blockchain](https://ethereum.github.io/yellowpaper/paper.pdf) - Ethereum Foundation (diakses: 2026-08-12)
- [Ethereum Execution Layer Specification](https://ethereum.github.io/execution-specs/) - Ethereum Execution Specs (diakses: 2026-08-12)
- [Introduction to Smart Contracts](https://docs.soliditylang.org/en/latest/introduction-to-smart-contracts.html) - Solidity Documentation (diakses: 2026-08-12)
- [EIP-7: DELEGATECALL](https://eips.ethereum.org/EIPS/eip-7) - Ethereum Improvement Proposals (diakses: 2026-08-12)
- [EIP-140: REVERT instruction](https://eips.ethereum.org/EIPS/eip-140) - Ethereum Improvement Proposals (diakses: 2026-08-12)
- [EIP-2929: Gas cost increases for state access opcodes](https://eips.ethereum.org/EIPS/eip-2929) - Ethereum Improvement Proposals (diakses: 2026-08-12)
- [EIP-6780: SELFDESTRUCT only in same transaction](https://eips.ethereum.org/EIPS/eip-6780) - Ethereum Improvement Proposals (diakses: 2026-08-12)

Source: https://wiki.fcontext.com/id/crypto/evm/index.mdx
