Belajar Web3 - Smart Contract Dasar (Review EVM)
Episode 6 of 23

Belajar Web3 - Smart Contract Dasar (Review EVM)

Mereview dasar smart contract di EVM: perbedaan storage, memory, dan calldata, cara kerja ABI dan function selector, plus standar token ERC-20, ERC-721, ERC-1155, dan ERC-2981 yang menjadi bahasa publik ekosistem

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

Pendahuluan

Setelah di episode 5 kita memahami alur kerja DApp, pada episode ini kita menengok sisi contract-nya. Jika kalian mengikuti series Belajar Solidity, episode ini adalah penyegaran cepat; jika tidak, ini adalah fondasi yang cukup untuk membaca dan berinteraksi dengan kontrak sebagai developer DApp.

Mengapa episode ini penting? Karena frontend DApp berkomunikasi dengan kontrak melalui ABI dan function selector — dua hal yang sering terasa "ajaib" sampai kalian paham apa yang sebenarnya dikirim ke jaringan. Plus, hampir semua DApp berurusan dengan token, dan memahami standar ERC akan menyelamatkan kalian dari bug integrasi yang tak terhitung.

Tiga Area Data EVM

Kontrak EVM bekerja dengan tiga area data yang berbeda:

AreaPersistenBiayaPenggunaan
storageYaMahal (SSTORE)State variable — "hard disk" kontrak
memoryTidakMurah (MSTORE)Data sementara selama eksekusi
calldataTidakPaling murahArgumen fungsi, read-only

Konsekuensi praktis bagi developer DApp: fungsi view/pure yang hanya membaca state tidak memodifikasi storage sehingga tidak membayar gas besar; fungsi yang menulis state (misalnya mint) melakukannya. Inilah alasan perbedaan biaya read vs write yang kita bahas di episode 5.

Contoh penggunaan storage
uint256 public totalSupply;      // storage — persisten
address public owner;            // storage — persisten
 
function getOwner() public view returns (address) {
    return owner;                // hanya membaca storage
}

ABI dan Function Selector

ABI

ABI (Application Binary Interface) adalah kontrak antara frontend dan kontrak: daftar fungsi, parameter, dan tipe data yang bisa dipanggil. Saat kalian menyimpan abi di kode wagmi, kalian memberi tahu library cara meng-encode/decode data yang masuk ke dan keluar dari kontrak.

ABI adalah array definisi fungsi
const erc20Abi = [
  {
    type: "function",
    name: "balanceOf",
    stateMutability: "view",
    inputs: [{ name: "account", type: "address" }],
    outputs: [{ name: "", type: "uint256" }],
  },
] as const

Function Selector

Setiap fungsi punya selector: 4 byte pertama dari keccak256 nama + tipe parameter. Saat frontend memanggil balanceOf(address), ia mengirim data yang diawali 0x70a08231 (selector balanceOf(address)) diikuti argumen yang di-encode.

Lihat selector dengan cast
cast sig "balanceOf(address)"
cast sig "transfer(address,uint256)"

Ini menjelaskan mengapa ABI harus persis sama dengan kontrak: selector yang salah berarti memanggil fungsi yang tidak ada — transaksi akan gagal.

Standar Token

Standar token adalah "API publik" yang membuat seluruh ekosistem saling memahami.

ERC-20: Token Fungible

Token yang dapat dipertukarkan 1:1 (USDC, LINK, governance token). Fungsi kunci: balanceOf, totalSupply, transfer, approve, transferFrom, dan event Transfer/Approval.

ERC-721: NFT

Token non-fungible — setiap token unik (tokenId). Fungsi kunci: ownerOf, safeTransferFrom, tokenURI. Cocok untuk koleksi, tiket, dan sertifikat.

ERC-1155: Multi-Token

Satu kontrak untuk banyak jenis token: kombinasi fungible dan non-fungible. Cocok untuk game (banyak item dalam satu kontrak) dan hemat gas.

ERC-2981: Royalty

Standar royalti NFT: mendefinisikan persentase dan penerima royalti untuk penjualan sekunder. Marketplace membaca standar ini untuk menghitung fee otomatis.

StandarJenis TokenContoh Fungsi
ERC-20Fungibletransfer, approve
ERC-721Non-fungibleownerOf, safeTransferFrom
ERC-1155Multi (fungible + NFT)balanceOfBatch, mintBatch
ERC-2981Metadata royaltiroyaltyInfo

Tip

Sebagai developer DApp, kalian jarang menulis ERC-20 dari nol — pakai template teruji OpenZeppelin (@openzeppelin/contracts). Yang wajib kalian kuasai adalah membaca dan berinteraksi dengan standar ini lewat ABI, karena frontend-lah yang paling sering berurusan dengan mereka.

Ringkasan Konsep

Rangkuman yang sudah kalian pelajari di episode 6:

  • storage persisten & mahal; memory/calldata sementara & murah — ini menjelaskan biaya read vs write.
  • ABI mendefinisikan antarmuka; function selector (4 byte) adalah identitas fungsi dalam data transaksi.
  • Standar token: ERC-20 (fungible), ERC-721 (NFT), ERC-1155 (multi-token), ERC-2981 (royalty).
  • Selalu cocokkan ABI dengan kontrak target agar selector tidak salah.

Penutup

Inti yang harus dibawa pulang:

  • ABI dan selector adalah jembatan antara JavaScript dan Solidity — pahami cara meng-encode data.
  • Kenali empat standar token: mereka muncul di hampir semua DApp.
  • Fungsi view gratis; fungsi yang menulis state berbayar — desain UX di sekitar fakta ini.

Di episode 7 selanjutnya, kita membahas DeFi, NFT & DAO overview — DEX seperti Uniswap, lending Aave/Compound, stablecoin, yield farming, use case NFT, dan governance DAO dengan Snapshot serta multi-sig Safe. Ini memberi kalian kosakata domain untuk semua episode berikutnya. Sampai jumpa di episode 7!

Belajar Web3 - Smart Contract Dasar (Review EVM) | Belajar Web3