Memetakan arsitektur DApp dari frontend React/Next.js + wagmi, contract layer EVM/Solana, hingga infrastruktur RPC, indexer, dan IPFS, serta memahami alur kerja connect wallet, baca state, siar transaksi, dan update UI lewat event

Setelah di episode 2 kita memetakan arsitektur Web3 secara makro, pada episode ini kita mempersempit fokus: bagaimana sebuah DApp tunggal disusun dan bagaimana data mengalir di dalamnya. Ini adalah jembatan dari teori ke kode — mulai episode 9 kita akan membangunnya sungguhan.
Mengapa episode ini penting? Karena DApp adalah aplikasi hybrid: sebagian state ada on-chain (yang benar-benar desentral), sebagian lagi di server/frontend (yang praktis). Developer yang tidak paham batas ini akan membangun "aplikasi web biasa yang menempel tombol connect wallet" tanpa desain arsitektur yang benar.
Sebuah DApp terdiri dari tiga lapisan:
Antarmuka user. Ini tempat wagmi (hooks React) dan viem (low-level library) bekerja. Frontend tidak menyimpan data penting — ia menjadi "remote" yang menampilkan state on-chain dan memicu transaksi.
Logika bisnis yang berjalan on-chain. Di EVM ini smart contract Solidity; di Solana ini program Rust. Lapisan ini adalah satu-satunya bagian yang benar-benar terdesentralisasi — tidak bisa diubah sewenang-wenang oleh developer.
Lapisan pendukung: RPC node untuk komunikasi, indexer (The Graph) untuk query efisien, dan storage (IPFS/Arweave) untuk file besar. Infrastruktur ini biasanya disediakan pihak ketiga, sehingga DApp bisa berjalan tanpa menjalankan node sendiri.
Setiap interaksi DApp mengikuti empat langkah yang sama:
User menghubungkan wallet (MetaMask) ke frontend. Frontend kini tahu address user dan bisa membaca state atas nama mereka. Detail implementasi di episode 10.
Frontend memanggil fungsi read contract — misalnya balanceOf(address) atau totalSupply(). Read adalah eth_call: tidak butuh gas, tidak mengubah state, dan tidak menandatangani apa pun.
const balance = await publicClient.readContract({
address: tokenAddress,
abi: erc20Abi,
functionName: "balanceOf",
args: [userAddress],
})Untuk operasi yang mengubah state — transfer, approve, mint — user menandatangani transaksi di wallet lalu menyiarkannya. Operasi ini membayar gas dan butuh konfirmasi blok.
Setelah transaksi terkonfirmasi, frontend memperbarui UI. Bisa dengan menunggu receipt, atau mendengarkan event (misalnya event Transfer) yang dipancarkan contract.
| Operasi | Baca (read) | Tulis (write) |
|---|---|---|
| Gas | Tidak | Ya |
| Signature | Tidak | Ya |
| Mengubah state | Tidak | Ya |
| Contoh | balanceOf, totalSupply, ownerOf | transfer, approve, mint |
Jujur soal arsitektur: sebagian DApp tetap memakai bagian terpusat. Contoh sah yang umum:
Note
Aturan praktis menentukan "cukup terdesentralisasi": jika frontend mati, apakah user masih bisa mengakses aset/state mereka lewat wallet & explorer? Jika ya, DApp-nya sehat — karena yang kritis tersimpan on-chain, dan bagian terpusat hanyalah "jendela".
Rangkuman yang sudah kalian pelajari di episode 5:
Inti yang harus dibawa pulang:
Di episode 6 selanjutnya, kita mereview smart contract dasar (EVM) — storage/memory/calldata, ABI dan function selector, serta standar token ERC-20, ERC-721, ERC-1155, dan ERC-2981 yang akan kalian hadapi setiap hari sebagai developer DApp. Sampai jumpa di episode 6!