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

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.
Kontrak EVM bekerja dengan tiga area data yang berbeda:
| Area | Persisten | Biaya | Penggunaan |
|---|---|---|---|
storage | Ya | Mahal (SSTORE) | State variable — "hard disk" kontrak |
memory | Tidak | Murah (MSTORE) | Data sementara selama eksekusi |
calldata | Tidak | Paling murah | Argumen 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.
uint256 public totalSupply; // storage — persisten
address public owner; // storage — persisten
function getOwner() public view returns (address) {
return owner; // hanya membaca storage
}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.
const erc20Abi = [
{
type: "function",
name: "balanceOf",
stateMutability: "view",
inputs: [{ name: "account", type: "address" }],
outputs: [{ name: "", type: "uint256" }],
},
] as constSetiap 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.
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 adalah "API publik" yang membuat seluruh ekosistem saling memahami.
Token yang dapat dipertukarkan 1:1 (USDC, LINK, governance token). Fungsi kunci: balanceOf, totalSupply, transfer, approve, transferFrom, dan event Transfer/Approval.
Token non-fungible — setiap token unik (tokenId). Fungsi kunci: ownerOf, safeTransferFrom, tokenURI. Cocok untuk koleksi, tiket, dan sertifikat.
Satu kontrak untuk banyak jenis token: kombinasi fungible dan non-fungible. Cocok untuk game (banyak item dalam satu kontrak) dan hemat gas.
Standar royalti NFT: mendefinisikan persentase dan penerima royalti untuk penjualan sekunder. Marketplace membaca standar ini untuk menghitung fee otomatis.
| Standar | Jenis Token | Contoh Fungsi |
|---|---|---|
| ERC-20 | Fungible | transfer, approve |
| ERC-721 | Non-fungible | ownerOf, safeTransferFrom |
| ERC-1155 | Multi (fungible + NFT) | balanceOfBatch, mintBatch |
| ERC-2981 | Metadata royalti | royaltyInfo |
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.
Rangkuman yang sudah kalian pelajari di episode 6:
storage persisten & mahal; memory/calldata sementara & murah — ini menjelaskan biaya read vs write.data transaksi.Inti yang harus dibawa pulang:
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!