Belajar Solidity - Konsep Dasar & Arsitektur EVM
Episode 2 of 23

Belajar Solidity - Konsep Dasar & Arsitektur EVM

Memahami Ethereum Virtual Machine sebagai stack machine 256-bit, perbedaan storage, memory, dan calldata beserta harga gas-nya, serta komponen dasar Solidity seperti pragma, contract, function, modifier, event, dan error sebelum menulis kontrak pertama

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

Setelah di episode 1 kita memahami sejarah Solidity — dari usulan Gavin Wood hingga jalur 0.8.x — pada episode ini kita masuk ke jantungnya: bagaimana EVM bekerja dan bagaimana Solidity memetakan ke sana.

Mengapa episode ini penting? Karena hampir semua keputusan desain Solidity — kapan memakai storage atau memory, mengapa mapping tidak bisa di-iterasi, mengapa constant menghemat gas — adalah cerminan dari cara EVM menyimpan dan mengeksekusi data. Tanpa memahami arsitektur ini, kalian hanya menghafal sintaks tanpa tahu mengapa. Dengan memahaminya, kalian bisa memprediksi biaya gas dan menghindari kesalahan arsitektur sejak awal.

Arsitektur EVM

Ethereum Virtual Machine (EVM) adalah mesin virtual yang mengeksekusi bytecode kontrak pintar. Semua node Ethereum menjalankan EVM sehingga setiap transaksi menghasilkan hasil yang identik di semua node — inilah yang membuat blockchain konsisten tanpa otoritas pusat.

EVM adalah stack machine dengan kata (word) berukuran 256-bit:

  • Operasi dijalankan lewat opcode — instruksi tingkat rendah seperti PUSH, SLOAD, SSTORE, ADD, dan CALL.
  • Sebagian besar operasi bekerja pada stack 256-bit (sekitar 1024 item).
  • Kompiler Solidity (solc) menerjemahkan kode sumber menjadi bytecode opcode ini.

Karena ukuran kata 256-bit, tipe uint256 dan address (160-bit) adalah warga kelas satu — mudah diwakili dan dioperasikan tanpa konversi.

Tiga Area Data: Storage, Memory, Calldata

EVM memiliki tiga area data dengan karakteristik sangat berbeda:

AreaPersistentBiayaPenggunaan
storageYaMahal (SSTORE)State variable kontrak
memoryTidakMurah (MSTORE)Data sementara saat eksekusi
calldataTidakPaling murahArgumen fungsi (hanya baca)

Storage: Penyimpanan Persisten

storage adalah "hard disk" kontrak — data di sini bertahan antar transaksi dan disimpan di state blockchain. Setiap state variable secara default berada di sini. Menulis ke storage (opcode SSTORE) adalah operasi termahal di EVM karena mengubah state yang harus direplikasi ke semua node.

Memory: Ruang Kerja Sementara

memory adalah RAM ephemeral — dibuat per transaksi, dihapus setelah selesai. Digunakan untuk variabel lokal dan hasil antara. Jauh lebih murah daripada storage, tetapi tidak bertahan.

Calldata: Argumen Hanya Baca

calldata adalah area yang membawa argumen panggilan fungsi dari luar. Hanya bisa dibaca dan sangat murah — cocok untuk parameter besar seperti array atau bytes yang tidak perlu dimodifikasi.

Gas: Harga Eksekusi

Setiap opcode punya harga gas. Konsekuensi praktisnya:

  • Operasi storage jauh lebih mahal daripada memory — sehingga pola desain kontrak selalu berusaha meminimalkan pembacaan/penulisan storage.
  • Loop tak terbatas bisa menghabiskan gas transaksi (transaksi gagal dengan out of gas).
  • Kalian membayar gas untuk setiap langkah, jadi gaya menulis Solidity sangat berpengaruh pada biaya.
100%

Komponen Dasar Solidity

Sebuah kontrak Solidity dibangun dari komponen-komponen berikut — kita akan mengenalinya di seluruh series:

Pragma dan SPDX License

Pragma dan license
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.36;

// SPDX-License-Identifier menandai lisensi kode, dan pragma solidity menentukan versi compiler yang boleh dipakai. ^0.8.36 berarti versi 0.8.36 atau lebih tinggi (tetapi di bawah 0.9.0).

Contract

contract adalah blok utama — seperti class dalam OOP. Ia menampung state variable, function, modifier, event, dan error:

Struktur kontrak
contract Counter {
    uint256 public count;
 
    function increment() public {
        count += 1;
    }
}

Setiap contract adalah tipe baru yang bisa dibuat (deployed) menjadi alamat di blockchain.

Function, Modifier, Event, Error

  • Function — logika eksekusi; punya visibility (public, external, internal, private) dan mutability (view, pure, payable) yang kita bahas detail di episode 5.
  • Modifier — memodifikasi perilaku fungsi, misalnya memeriksa kepemilikan sebelum eksekusi.
  • Event — log yang diindeks di blockchain untuk memberi tahu frontend/DApp (episode 8).
  • Error — mekanisme pembatalan transaksi dengan pesan custom, lebih hemat gas daripada require string (episode 5).

Tip

Konsep kunci untuk diingat sepanjang series: storage itu mahal, event itu murah, dan immutable itu permanen. Tiga fakta ini menjelaskan mayoritas keputusan desain kontrak yang akan kalian temui.

Ringkasan Konsep

Rangkuman yang sudah kalian pelajari di episode 2:

  • EVM adalah stack machine 256-bit yang mengeksekusi bytecode lewat opcode; hasilnya identik di semua node.
  • Ada tiga area data: storage (persisten, mahal), memory (sementara, murah), calldata (argumen, read-only).
  • Setiap operasi berbayar gas; desain kontrak harus meminimalkan operasi storage.
  • Komponen Solidity: pragma, contract, function, modifier, event, dan error.

Penutup

Inti yang harus dibawa pulang:

  • Storage, memory, dan calldata berbeda dalam persistensi dan harga — pahami sebelum menulis state variable.
  • Gas membuat setiap baris kode punya biaya; desain yang baik meminimalkan akses storage.
  • Kontrak terdiri dari komponen yang sama di setiap contoh: pragma, contract, function, modifier, event, error.

Di episode 3 selanjutnya kita akan menulis kontrak pertama: instalasi & Hello World — deploy HelloWorld lewat Remix dan Hardhat, memahami state variable plus getter otomatis, dan melihat transaksi pertama kalian tercatat di chain. Pastikan environment kalian siap, karena praktik dimulai!