Skip to main content

Bagian 1: Pengenalan Blockchain Indexer

๐ŸŽฏ Tujuan Bagian Iniโ€‹

Setelah menyelesaikan bagian ini, Anda akan:

  • โœ… Memahami apa itu blockchain indexer dan use case-nya
  • โœ… Mengerti masalah tanpa indexer (dengan cerita menarik!)
  • โœ… Tau kenapa aplikasi Web3 populer WAJIB pakai indexer
  • โœ… Mengenal framework Ponder dan keunggulannya
  • โœ… Siap untuk mulai membangun indexer sendiri

๐Ÿ“– Cerita: Bayangkan Anda Seorang Detektifโ€‹

๐Ÿ” Kasus: "Analitik DEX yang Lambat"โ€‹

Skenario:
Bos Anda bilang: "Buat dashboard analytics untuk SimpleDEX! Tampilkan volume 24h, total swaps, dan history semua swap dalam 6 bulan terakhir!"

โŒ CARA 1: Tanpa Indexer (Query Langsung ke Blockchain)โ€‹

// Anda harus melakukan ini:

// Langkah 1: Dapatkan nomor block 6 bulan lalu
const currentBlock = await provider.getBlockNumber(); // Block 1,000,000
const blocksIn6Months = 6 * 30 * 24 * 60 * 5; // ~1,296,000 blocks
const startBlock = currentBlock - blocksIn6Months; // Block 0

// Langkah 2: Loop SETIAP block untuk cari Swap events (1 juta+ blocks!) ๐Ÿ˜ฑ
const swaps = [];
for (let i = startBlock; i <= currentBlock; i++) {
// Query Swap events dari setiap block
const logs = await dexContract.queryFilter('Swap', i, i);

swaps.push(...logs);

// Juga perlu query reserves untuk hitung price & TVL
const reserves = await dexContract.getReserves(); // RPC call lagi!

// Kena rate limit RPC? Tunggu dulu...
await sleep(100); // Perlambat untuk hindari rate limit
}

// Langkah 3: Hitung volume 24h (scan lagi!)
const oneDayAgo = currentBlock - (24 * 60 * 5); // 24 jam = ~7200 blocks
let volume24h = 0;
for (let i = oneDayAgo; i <= currentBlock; i++) {
const logs = await dexContract.queryFilter('Swap', i, i);
logs.forEach(log => {
volume24h += parseFloat(log.args.amountBOut || log.args.amountBIn);
});
}

console.log(`Ditemukan ${swaps.length} swaps!`);
console.log(`Volume 24h: ${volume24h} USDC`);

Hasil:

โฑ๏ธ Waktu: 36 JAM (1 juta blocks ร— 0.13 detik/block)
๐Ÿ’ธ Biaya: ~$500 kredit RPC (atau kena ban karena rate limit)
๐Ÿ˜ญ Status: Timeout, error, frustrasi!
๐Ÿ”ฅ Laptop: Panas kayak kompor

Quote Developer:

"Ini gila! Gak mungkin aplikasi production pakai cara ini. Users bakal kabur duluan sebelum data load!" - Setiap Web3 Developer


โœ… CARA 2: Dengan Indexer (Menggunakan Ponder)โ€‹

// Ponder sudah index semua data DEX di background!
// Anda tinggal query database:

// Query 1: Pool Statistics (instant!)
const { poolState } = await client.query({
query: gql`
query GetPoolStats {
poolState(id: "POOL") {
tvl
totalSwaps
totalVolume
volume24h
price
}
}
`
});

// Query 2: Recent Swaps (instant!)
const { swapEvents } = await client.query({
query: gql`
query GetRecentSwaps {
swapEvents(
orderBy: "timestamp"
orderDirection: "desc"
limit: 100
) {
items {
user
amountAIn
amountBOut
priceImpact
timestamp
}
totalCount
}
}
`
});

console.log(`TVL: $${poolState.tvl} USDC`);
console.log(`Volume 24h: $${poolState.volume24h} USDC`);
console.log(`Total Swaps: ${poolState.totalSwaps}`);
console.log(`Recent Swaps: ${swapEvents.totalCount}`);

Hasil:

โฑ๏ธ Waktu: 50 MILIDETIK! โšก
๐Ÿ’ธ Biaya: $0 (query ke database lokal/cloud)
๐Ÿ˜Ž Status: Lancar & instant
โœจ Users: Senang & terkesan!

Quote Developer:

"WOW! Ini seperti sulap! Data langsung muncul tanpa loading!" - Anda, setelah pakai Ponder


๐Ÿค” Apa Itu Blockchain Indexer?โ€‹

Definisi Sederhana:โ€‹

Blockchain Indexer adalah sistem yang:

  1. Listen ke blockchain 24/7 untuk event baru
  2. Transform raw blockchain data menjadi format yang mudah di-query
  3. Store data tersebut di database (biasanya Postgres)
  4. Serve data via API (GraphQL/REST) untuk aplikasi Anda

Analogi: Google untuk Blockchainโ€‹

KonsepTanpa IndexerDengan Indexer
Mencari WebBuka setiap website satu-satuKetik di Google โ†’ hasil instant
Cari BukuCek setiap rak perpustakaanCari di katalog digital
BelanjaKe setiap toko fisikBuka Tokopedia/Shopee
Data BlockchainQuery setiap block satu-satu ๐ŸŒQuery indexer โ†’ instant! โšก

Indexer = Google-nya Data Blockchain!


๐Ÿ’ก Masalah Tanpa Indexer: 5 Pain Pointsโ€‹

1. โฐ LAMBAT BANGET!โ€‹

Contoh Kasus Real:

Tugas: Tampilkan top 100 pemegang token

Tanpa Indexer:
- Scan SEMUA event Transfer (bisa jutaan+)
- Kalkulasi balance satu-satu
- Sort berdasarkan balance
โฑ๏ธ Waktu: 10-30 MENIT (atau timeout!)

Dengan Indexer:
- Query database: "SELECT * FROM accounts ORDER BY balance DESC LIMIT 100"
โฑ๏ธ Waktu: 10 MILIDETIK!

2. ๐Ÿ’ธ MAHAL!โ€‹

Breakdown Biaya RPC:

Alchemy Free Tier: 300 juta compute units/bulan
1 panggilan getLogs: ~250 compute units

Cari data 6 bulan tanpa indexer:
- 1 juta blocks ร— 250 CU = 250 JUTA CU
- Gratis tier? Habis dalam 1 hari!
- Paket berbayar: $199/bulan untuk 600 juta CU
- 1 query = $80+! ๐Ÿ˜ฑ

Dengan Indexer:
- Setup: 1 kali index (pakai tier gratis)
- Query: UNLIMITED, GRATIS! ๐ŸŽ‰

3. ๐Ÿšซ TIDAK SCALABLEโ€‹

Skenario:
Aplikasi Anda punya 1000 user bersamaan:

Tanpa Indexer:
- 1000 users ร— 1000 panggilan RPC masing-masing
- = 1 JUTA panggilan RPC
- Hasil: Rate limited, app down! โŒ

Dengan Indexer:
- 1000 users ร— query ke database ANDA
- Database handle ribuan query/detik
- Hasil: App berjalan lancar! โœ…

4. ๐Ÿ˜ต KOMPLEKS & RAWAN ERRORโ€‹

Kompleksitas Kode:

// Tanpa Indexer: Anda harus handle SEMUANYA
- Reorganisasi block (chain reorg)
- Missing data / request gagal
- Rate limiting & backoff
- Pagination & manajemen memori
- Konsistensi data
- Optimasi fetching paralel

= 500+ baris kode yang rawan error ๐Ÿ˜“

// Dengan Indexer (Ponder): Framework handle semuanya!
ponder.on("Token:Transfer", async ({ event, context }) => {
// Cukup handle logika bisnis
await context.db.insert(transfers).values({
from: event.args.from,
to: event.args.to,
amount: event.args.value,
});
});

= Clean, simple, maintainable! ๐ŸŽ‰

5. ๐Ÿ“Š DATA TIDAK TERSTRUKTURโ€‹

Data Blockchain Mentah:

// Event: Transfer
event Transfer(address indexed from, address indexed to, uint256 value);

// Di blockchain tersimpan sebagai:
{
topics: [
"0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
"0x000000000000000000000000a1b2c3...", // from
"0x000000000000000000000000d4e5f6...", // to
],
data: "0x000000000000000000000000000000000000000000000000000000003b9aca00" // value
}

// ๐Ÿ˜ต Sulit dibaca & tidak ada konteks!

Dengan Indexer (Data Terstruktur):

// Data tersimpan di database dengan schema jelas:
{
id: "transfer-123",
from: "0xa1b2c3...",
to: "0xd4e5f6...",
amount: "1000000000", // 1 USDC
amountFormatted: "1.00", // Mudah dibaca manusia
timestamp: "2025-01-15T10:30:00Z",
blockNumber: 1234567,
transactionHash: "0xabc123...",
token: {
name: "USD Coin",
symbol: "USDC",
decimals: 6
}
}

// โœจ Terstruktur, mudah dibaca, siap ditampilkan!

๐ŸŒŸ Use Cases Real di Industriโ€‹

1. Analitik Uniswap ๐Ÿ“Šโ€‹

Tanpa Indexer:

  • Mustahil track semua swap, liquidity, volume real-time
  • Data terlalu banyak (ribuan swap per menit)
  • Query reserves untuk setiap request = lambat & mahal

Dengan Indexer (Subgraph Uniswap v3):

  • Track SEMUA pool, swap, position real-time
  • Kalkulasi TVL, volume, fees otomatis
  • Dukung dashboard seperti info.uniswap.org
  • Ini yang akan kita bangun untuk SimpleDEX!

Tech: The Graph (pendahulu Ponder) โ†’ Kita pakai Ponder untuk SimpleDEX!


2. Marketplace NFT OpenSea ๐Ÿ–ผ๏ธโ€‹

Tanpa Indexer:

  • Load setiap metadata NFT satu-satu? Impossible!
  • Pencarian & filter? Nightmare!

Dengan Indexer:

  • Index semua NFT listings, bids, sales
  • Pencarian cepat berdasarkan koleksi, traits, harga
  • Sort berdasarkan rarity, floor price, volume

Impact: UX yang lancar, users senang, penjualan meningkat!


3. Protokol Lending Aave ๐Ÿ’ฐโ€‹

Use Case:

  • Track deposit, borrow, liquidasi user
  • Kalkulasi health factor real-time
  • Notifikasi user sebelum liquidation

Dengan Indexer:

query UserPositions($user: String!) {
deposits: deposits(where: { user: $user }) {
asset
amount
apy
}
borrows: borrows(where: { user: $user }) {
asset
amount
healthFactor # <-- CRITICAL!
}
}

Hasil: Users bisa monitoring posisi & hindari liquidation!


4. Explorer Domain ENS ๐ŸŒโ€‹

Tantangan:

  • Track semua registrasi domain .eth
  • Monitor expiration & renewal
  • Pencarian berdasarkan domain atau owner

Solusi (dengan Indexer):

  • Index event NameRegistered, NameRenewed, Transfer
  • Simpan data terstruktur: domain, owner, expiry, price
  • Dukung UI seperti ens.domains

๐Ÿš€ Kenapa Ponder? (vs The Graph & Alternatif Lain)โ€‹

Perbandingan Lengkap:โ€‹

Ponder ๐ŸŒŸโ€‹

Kelebihan:

  • โšก 10x lebih cepat dari The Graph (benchmark terbukti!)
  • ๐Ÿ”ฅ Hot reload - Feedback instant saat development
  • ๐Ÿ’ป Full TypeScript - Type-safe dari ujung ke ujung
  • ๐Ÿ—„๏ธ Akses Postgres langsung - Fleksibilitas query maksimal
  • ๐Ÿ  Self-hosted - Tanpa vendor lock-in, deploy dimana saja
  • ๐Ÿ“ฆ Database lebih kecil - 35x lebih kecil dibanding The Graph!
  • ๐Ÿ†“ Gratis - Tanpa biaya hosting

Kekurangan:

  • ๐Ÿ†• Lebih baru (tapi didukung tim yang kuat)
  • ๐Ÿ“š Komunitas lebih kecil (tapi bertumbuh cepat!)

Cocok Untuk:

  • Aplikasi dApp production yang butuh performa
  • Proyek yang butuh kustomisasi
  • Developer yang familiar TypeScript
  • Infrastruktur self-hosted

The Graph ๐Ÿ“Šโ€‹

Kelebihan:

  • ๐Ÿ† Standar industri (digunakan Uniswap, Aave, dll)
  • ๐ŸŒ Network terdesentralisasi (hosted service + network)
  • ๐Ÿ“š Ekosistem matang & komunitas besar
  • ๐Ÿ“– Dokumentasi ekstensif

Kekurangan:

  • ๐ŸŒ Sync lebih lambat (6 menit vs 37 detik untuk ERC-20)
  • ๐Ÿ—„๏ธ Database bloat (1.1 GB vs 31 MB untuk ERC-20)
  • ๐Ÿ’ฐ Biaya hosting ($$$)
  • ๐Ÿ”ง Tanpa hot reload (harus deploy untuk test)
  • ๐Ÿ“ Kurang type-safe (butuh codegen)

Cocok Untuk:

  • Proyek yang butuh desentralisasi
  • Prototype cepat (hosted service)
  • Mengikuti standar industri

Indexer Custom (DIY) ๐Ÿ› ๏ธโ€‹

Kelebihan:

  • ๐ŸŽจ Fleksibilitas ultimate
  • ๐Ÿ”ง Kontrol penuh

Kekurangan:

  • โฐ Waktu development: Minggu/bulan
  • ๐Ÿ› Banyak edge case yang harus di-handle
  • ๐Ÿ’ฐ Biaya maintenance tinggi
  • ๐Ÿ”ฅ Ciptakan ulang roda

Cocok Untuk:

  • Requirements unik yang framework lain tidak support
  • Tim dengan resources & expertise

Matrix Keputusan:โ€‹

KebutuhanPonderThe GraphCustom
Waktu sync cepatโœ…โœ…โœ…โš ๏ธ๐Ÿคท
Biaya rendahโœ…โŒโš ๏ธ
Type safetyโœ…โš ๏ธ๐Ÿคท
Development cepatโœ…โœ…โŒ
TerdesentralisasiโŒโœ…โŒ
Kustomisasiโœ…โš ๏ธโœ…
Development aktifโœ…โœ…๐Ÿคท

Rekomendasi untuk Workshop:
โœ… Ponder - Sempurna untuk belajar, development cepat, dan production-ready!


๐Ÿ—๏ธ Arsitektur Ponder: Cara Kerjanyaโ€‹

Arsitektur High-Level:โ€‹

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ BLOCKCHAIN (Lisk Sepolia) โ”‚
โ”‚ Smart Contracts โ†’ Events โ†’ Data Transaksi โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚
โ”‚ Koneksi RPC
โ†“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ FRAMEWORK PONDER โ”‚
โ”‚ โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ 1. SYNC ENGINE (Pendengar Event) โ”‚ โ”‚
โ”‚ โ”‚ - Dengarkan blockchain 24/7 โ”‚ โ”‚
โ”‚ โ”‚ - Fetch logs & transaksi โ”‚ โ”‚
โ”‚ โ”‚ - Handle reorgs & finality โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚ โ”‚ โ”‚
โ”‚ โ†“ โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ 2. FUNGSI INDEXING (Kode Anda!) โ”‚ โ”‚
โ”‚ โ”‚ - ponder.on("Event", handler) โ”‚ โ”‚
โ”‚ โ”‚ - Transform data blockchain โ”‚ โ”‚
โ”‚ โ”‚ - Logika bisnis โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚ โ”‚ โ”‚
โ”‚ โ†“ โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ 3. LAYER DATABASE (Postgres) โ”‚ โ”‚
โ”‚ โ”‚ - Simpan data ter-index โ”‚ โ”‚
โ”‚ โ”‚ - Migrasi otomatis โ”‚ โ”‚
โ”‚ โ”‚ - Query yang dioptimasi โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚ โ”‚ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚
โ†“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ 4. API SERVER (Auto-Generated) โ”‚
โ”‚ - GraphQL API (port default: 42069) โ”‚
โ”‚ - SQL over HTTP (opsional) โ”‚
โ”‚ - Custom API routes (opsional) โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚
โ”‚ HTTP/GraphQL
โ†“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ FRONTEND (Next.js / React) โ”‚
โ”‚ Query data โ†’ Tampilkan ke users โ†’ ๐ŸŽ‰ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Alur Data Contoh (Event Transfer):โ€‹

1. USER TRANSFER TOKEN
โ†’ Transaksi di Lisk Sepolia

2. PONDER DETEKSI EVENT
โ†’ Sync engine tangkap event Transfer

3. KODE ANDA PROSES
ponder.on("Token:Transfer", async ({ event, context }) => {
// Update balance pengirim
await context.db.update(accounts)
.set({ balance: balance - amount })
.where({ address: event.args.from });

// Update balance penerima
await context.db.update(accounts)
.set({ balance: balance + amount })
.where({ address: event.args.to });

// Simpan record transfer
await context.db.insert(transfers).values({
from: event.args.from,
to: event.args.to,
amount: event.args.value,
timestamp: event.block.timestamp,
});
});

4. DATA TERSIMPAN DI POSTGRES
โ†’ Tersedia langsung via GraphQL!

5. FRONTEND QUERY DATA
โ†’ User lihat balance ter-update instant! โœจ

๐ŸŽ“ Konsep Kunci di Ponderโ€‹

1. Konfigurasi Contracts (ponder.config.ts)โ€‹

Definisikan smart contract yang mau di-index:

import { createConfig } from "ponder";
import { http } from "viem";
import { ERC20Abi } from "./abis/ERC20Abi";

export default createConfig({
// Definisikan network blockchain
chains: {
mainnet: {
id: 1,
rpc: http(process.env.PONDER_RPC_URL_1),
},
},

// Definisikan contracts yang akan di-index
contracts: {
Token: {
chain: "mainnet",
address: process.env.USDC_TOKEN_ADDRESS as `0x${string}`,
abi: ERC20Abi,
startBlock: 13142655,
},
},
});

2. Schema (ponder.schema.ts)โ€‹

Definisikan struktur data:

import { onchainTable } from "ponder";

export const accounts = onchainTable("accounts", (t) => ({
address: t.hex().primaryKey(),
balance: t.bigint().notNull(),
transactionCount: t.integer().notNull().default(0),
}));

export const transfers = onchainTable("transfers", (t) => ({
id: t.text().primaryKey(),
from: t.hex().notNull(),
to: t.hex().notNull(),
amount: t.bigint().notNull(),
timestamp: t.integer().notNull(),
blockNumber: t.integer().notNull(),
}));

3. Fungsi Indexing (src/index.ts)โ€‹

Transform event menjadi data:

import { ponder } from "ponder:registry";
import { accounts, transfers } from "ponder:schema";

ponder.on("MyToken:Transfer", async ({ event, context }) => {
// Logika bisnis Anda di sini!
// context.db = Akses database
// event = Data event blockchain
});

4. GraphQL API (Ter-generate otomatis!)โ€‹

Query data yang sudah di-index:

query {
accounts(orderBy: "balance", orderDirection: "desc", limit: 10) {
items {
address
balance
transactionCount
}
}
}

๐Ÿ’ช Kenapa Harus Belajar Indexer?โ€‹

1. Skill yang Dicari Industri ๐Ÿ’ผโ€‹

Lowongan Kerja di Web3:
- "Pengalaman dengan The Graph atau solusi indexing sejenis"
- "Pengetahuan infrastruktur data blockchain"
- "Familiar dengan GraphQL API untuk data blockchain"

โ†’ Skill indexer = Keunggulan kompetitif! ๐Ÿš€

2. Bangun dApps Lebih Baik ๐Ÿ—๏ธโ€‹

Tanpa Indexer:
- Loading lambat
- UX buruk
- Users frustrasi
โ†’ App gagal โŒ

Dengan Indexer:
- Data instant
- UX lancar
- Users senang
โ†’ App sukses! โœ…

3. Peluang Karir ๐ŸŒŸโ€‹

Peran yang butuh pengetahuan indexer:
- Full-stack Web3 Developer
- Blockchain Data Engineer
- Developer dApp
- Protocol Developer
- Web3 Infrastructure Engineer

Range gaji: $80k - $200k+ ๐Ÿ’ฐ

4. Skill Future-Proof ๐Ÿ”ฎโ€‹

Pertumbuhan Web3 โ†’ Lebih banyak dApps โ†’ Lebih banyak data โ†’ Lebih banyak indexers!

Market cap The Graph: $2.6 miliar
Ponder: Leader yang sedang berkembang
โ†’ Peluang besar! ๐Ÿš€

๐ŸŽฏ Kuis: Test Pemahaman Anda!โ€‹

Pertanyaan 1:โ€‹

Apa masalah UTAMA tanpa menggunakan indexer?

A) Blockchain tidak bisa diakses
B) Smart contract tidak bisa di-deploy
C) Query data lambat dan mahal ๐Ÿ’ก
D) Tidak bisa membuat frontend

Lihat Jawaban

Jawaban: C

Tanpa indexer, setiap query harus scan blockchain secara langsung yang sangat lambat (bisa menit/jam) dan mahal (biaya RPC). Indexer mengatasi ini dengan pre-processing data dan menyimpan ke database yang cepat di-query!

Pertanyaan 2:โ€‹

Kenapa Ponder lebih cepat dari The Graph?

A) Ponder pakai bahasa pemrograman yang lebih cepat
B) Arsitektur lebih efisien & database lebih kecil ๐Ÿ’ก
C) Ponder tidak index semua data
D) The Graph sengaja dibuat lambat

Lihat Jawaban

Jawaban: B

Arsitektur Ponder lebih modern dan efisien. Database footprint 35x lebih kecil (31 MB vs 1.1 GB) dan waktu sync 10x lebih cepat (37s vs 5m 28s) untuk contract ERC-20 yang sama!

Pertanyaan 3:โ€‹

Aplikasi Web3 mana yang WAJIB pakai indexer?

A) UI transfer token sederhana
B) DEX dengan trading charts & analytics ๐Ÿ’ก
C) Website faucet
D) Generator wallet

Lihat Jawaban

Jawaban: B

DEX dengan analytics (seperti Uniswap) butuh track ribuan swap, kalkulasi volume, TVL, dan price charts real-time. Mustahil tanpa indexer! Opsi lain bisa bekerja tanpa indexer karena kebutuhan data lebih sederhana.


โœ… Checklist: Apakah Anda Siap Lanjut?โ€‹

Sebelum lanjut ke Bagian 2, pastikan Anda sudah:

  • Memahami masalah tanpa indexer (lambat, mahal, tidak scalable)
  • Tau apa itu blockchain indexer (sistem yang listen, transform, store, serve data)
  • Memahami use cases indexer (Uniswap, OpenSea, Aave, dll)
  • Tau kenapa Ponder (10x lebih cepat, type-safe, gratis, self-hosted)
  • Memahami arsitektur Ponder (sync engine โ†’ kode Anda โ†’ database โ†’ API)
  • Excited untuk membangun! ๐Ÿš€

Jika semua sudah โœ…, mari lanjut setup Ponder!


๐Ÿš€ Langkah Selanjutnyaโ€‹

Sekarang Anda sudah paham KENAPA indexer itu penting dan BAGAIMANA Ponder bekerja.

Selanjutnya, kita akan:

  1. Install framework Ponder
  2. Setup environment pengembangan
  3. Konfigurasi network Lisk Sepolia
  4. Buat proyek pertama Anda!

๐Ÿ“– Bagian 2: Setup & Konfigurasi Ponder โ†’


๐Ÿ“š Sumber Daya Tambahanโ€‹

Untuk Dibaca:

Video (Opsional):

  • Cari di YouTube: "Ponder blockchain indexer tutorial"
  • Lihat: Talks ETHGlobal tentang indexing

Komunitas:


Sampai jumpa di Bagian 2! Selamat belajar! ๐ŸŽ‰