Ethereum & Smart Contracts — Web3

Ethereum & Smart Contracts Ethereum bukan sekadar cryptocurrency — ini adalah programmable blockchain. Kamu bisa menulis kode (smart contract) yang berjalan…

Ethereum adalah blockchain yang bisa menjalankan program. Program itu disebut smart contract: kode yang disimpan di sebuah alamat di blockchain, lalu dijalankan oleh semua node setiap kali ada transaksi yang memanggilnya. Bayangin mesin penjual minuman di depan Toko Kaos Raka. Aturannya tertulis di mesin dan sama untuk semua orang: masukkan uang, tekan tombol, minumannya keluar, tanpa kasir. Mesin itu punya lokasi (alamat), punya isi (storage), dan tiap tekan tombol ada biayanya (gas). Kontrak POIN Raka bekerja seperti itu: siapa pun bisa membaca aturannya, dan gak ada yang bisa diam-diam mengubahnya.

🧪 Tebakan cepat: cuma Raka yang boleh membagi POIN. Dinda nekat memanggil earn() sendiri, dan transaksinya gagal (revert). Apakah Dinda tetap membayar gas? Tebak dulu, jawabannya ada di bagian "Gas: biaya tiap langkah".

Dua jenis akun: EOA dan contract

EOA (Externally Owned Account) Contract account
Dikendalikan oleh private key, dipegang manusia lewat wallet kodenya sendiri
Bisa memulai transaksi ya gak, cuma bereaksi saat dipanggil
Punya kode dan storage gak ya
Di contoh kita Raka 0xf39F...2266, Dinda 0x7099...79C8 PoinRaka 0x5FbDB2315678afecb367f032d93F642f64180aa3

Alamat contract dihitung dari alamat pembuatnya dan nonce-nya (jumlah transaksi yang sudah dikirim akun itu). Transaksi pertama akun #0 di chain lokal yang baru selalu menghasilkan 0x5FbD...0aa3, jadi alamat PoinRaka sama di laptop siapa pun.

Kontrak gak pernah jalan sendiri. Gak ada "kalau jam 12 malam, bagi POIN": selalu harus ada transaksi atau panggilan yang memicunya. Yang otomatis adalah aturannya: begitu dipanggil, kode dijalankan persis seperti tertulis, tanpa perantara. Itu juga beda utamanya dengan Bitcoin, yang dirancang untuk mengirim nilai, dengan script sederhana untuk aturan transfer, bukan untuk program umum.

State dan transaksi

State adalah keadaan seluruh akun saat ini: saldo ETH, nonce, kode dan isi storage tiap contract. Transaksi adalah pesan bertanda tangan dari sebuah EOA yang mengubah state. Isinya: from, to, value (ETH yang dikirim), data (fungsi yang dipanggil beserta argumennya), nonce, batas gas dan harga gas.

Ini yang berubah waktu Raka memanggil earn(Dinda, 95000) untuk Kaos Sablon Kopi Dinda, dengan harga contoh 11 gwei per gas:

Sebelum Sesudah
Nonce Raka 1 2
Saldo ETH Raka X X - 0,000788469 ETH (biaya gas)
balanceOf[Dinda] di PoinRaka 0 95 POIN
totalSupply di PoinRaka 0 95 POIN

Raka gak mengirim ETH ke contract (value 0). Yang dia bayar cuma gas.

EVM: komputer yang dijalankan semua node

EVM (Ethereum Virtual Machine) adalah mesin yang menjalankan kode contract di tiap node. Kode Solidity dikompilasi jadi bytecode, deretan instruksi kecil (opcode) seperti ADD atau SSTORE. EVM bersifat deterministik: input sama di node mana pun menghasilkan state yang sama persis, karena itu ribuan node bisa sepakat. Tiap opcode punya harga gas: ADD 3 gas, menyimpan nilai baru ke storage sekitar 20.000 gas. Jadi sebuah contract adalah kode plus storage di sebuah alamat. Kode PoinRaka 2.790 byte, dan storage-nya berupa slot 32 byte: slot 0 menyimpan owner (alamat Raka), slot 1 menyimpan totalSupply.

Gas: biaya tiap langkah

Gas adalah satuan kerja di EVM. Biaya transaksi = gas yang terpakai × harga per gas. Sejak EIP-1559 (2021), harga per gas terdiri dari dua bagian:

Kamu juga memasang maxFeePerGas, batas harga tertinggi yang rela kamu bayar. Kamu cuma membayar base fee + tip, sisanya gak terpakai. Satuannya: 1 ETH = 10^18 wei, 1 gwei = 10^9 wei.

Gas terpakai ini diukur di chain lokal Hardhat 3 untuk contract POIN:

Transaksi Gas terpakai
Kirim 0,01 ETH dari Raka ke Dinda 21.000
Deploy PoinRaka 677.526
earn(Dinda, 95000) pertama kali 71.679
earn(Dinda, 95000) kedua kali 37.479
earn() dikirim Dinda (gagal) 24.729

earn pertama lebih mahal karena mengisi dua slot storage yang masih kosong. Hitungan biayanya dengan base fee 10 gwei dan tip 1 gwei:

71.679 gas × (10 + 1) gwei = 788.469 gwei = 0,000788469 ETH
dibakar:        71.679 × 10 gwei = 716.790 gwei
ke validator:   71.679 × 1 gwei  =  71.679 gwei

Dan transaksi Dinda yang gagal? Ini catatan asli node Hardhat-nya:

eth_sendTransaction
  Contract call:       <UnrecognizedContract>
  Transaction:         0xe67d265ec0f15ae0b7f5bac3702d27316df8f8b42ac8b21ecc1638839316d68c
  From:                0x70997970c51812dc3a010c7d01b50e0d17dc79c8
  To:                  0x5fbdb2315678afecb367f032d93f642f64180aa3
  Value:               0 ETH
  Gas used:            24729 of 100000
  Block #7:            0x9484ac31571c17133b904362e69d64444b44acb9d846ee8e284af0f170443d54

  Error: reverted with reason string 'Only owner'

Transaksinya masuk block #7, semua perubahannya dibatalkan, tapi 24.729 gas tetap dibayar dan nonce Dinda tetap naik. Jadi ya, Dinda tetap bayar. Itu jawaban tebakannya. Kerja EVM sampai titik revert sudah terjadi dan harus dibayar. Untungnya, wallet dan library mensimulasikan transaksi dulu (eth_estimateGas), dan di sini simulasinya langsung gagal dengan execution reverted: "Only owner". Transaksi tadi cuma masuk block karena dikirim paksa dengan batas gas 100.000.

Di chain lokal itu, transfer 0,01 ETH Raka memakai harga efektif 972.120.420 wei per gas (sekitar 0,97 gwei), jadi biayanya 0,00002041452882 ETH. ETH test, gak ada harganya. Di mainnet, angka yang sama dibayar dengan ETH asli.

Immutable, dan cara "meng-upgrade"

Kode contract yang sudah di-deploy gak bisa diubah. Ada bug? Gak ada tombol edit. Pilihannya: deploy contract baru dan pindahkan datanya, atau dari awal memakai pola proxy, yaitu contract kecil yang menyimpan data dan meneruskan panggilan ke contract logika yang bisa diganti (misalnya lewat OpenZeppelin Upgrades). Proxy berarti ada pihak yang bisa mengganti aturan, jadi pengguna harus percaya pada pemegang kunci upgrade itu. Karena itu contract diuji habis-habisan di chain lokal dan testnet sebelum mainnet.

Testnet dan chain lokal

Jaringan Chain ID Dipakai untuk
Hardhat / Anvil (lokal) 31337 belajar dan testing di laptop, instan, bisa di-reset
Sepolia 11155111 testnet publik untuk aplikasi, ETH test gratis dari faucet
Hoodi 560048 testnet untuk validator dan staking, bukan untuk aplikasi
Mainnet 1 uang asli, gak dipakai di track ini

Holesky sudah dihentikan sejak September 2025. Per Oktober 2026 ethereum.org masih menyebut Sepolia testnet default untuk aplikasi, dan upgrade jaringan dicoba di sana lebih dulu. Developer inti sudah membahas testnet pengganti dan rencana mematikan Sepolia sekitar 2027, jadi cek halaman Networks di ethereum.org sebelum memulai project baru.

⚠️ Jebakan yang sering ketemu

TL;DR: Ethereum adalah blockchain yang menjalankan program. EOA dikendalikan private key dan bisa memulai transaksi; contract account berisi kode plus storage di sebuah alamat, dan cuma jalan saat dipanggil. Transaksi mengubah state (saldo, nonce, storage), dan EVM menjalankannya secara deterministik di semua node. Biaya = gas terpakai × (base fee + tip): base fee dibakar, tip ke validator, maxFeePerGas jadi batas atas. Transfer ETH 21.000 gas, earn() pertama untuk Dinda 71.679 gas, dan transaksi yang revert tetap membayar gas (24.729 untuk Dinda). Contract gak bisa diedit, cuma diganti atau lewat proxy. Belajar di chain lokal (31337) dan Sepolia (11155111); Holesky sudah mati, Hoodi untuk validator, mainnet berarti uang asli.

Yang akan kamu pelajari