RPC & node provider — Infura, Alchemy, QuickNode
Ini titik di mana Fase 1 dan 2 (yang sepenuhnya di dalam Remix/browser) berpindah ke dunia backend sungguhan. Java atau PHP-mu tidak pernah 'terhubung ke blockchain' secara ajaib — ia mengirim HTTP request JSON-RPC biasa ke satu node tertentu.
Intisari
- JSON-RPC adalah protokol komunikasi standar ke node Ethereum — payload JSON biasa lewat HTTP POST, persis seperti REST API yang sudah kamu kenal.
- Kamu punya dua pilihan: jalankan node sendiri (kontrol penuh, biaya operasional dan storage besar) atau pakai node provider terkelola (Infura, Alchemy, QuickNode) — bayar per request, tanpa mengurus infrastruktur.
- Untuk mayoritas aplikasi backend, node provider terkelola adalah pilihan default — sama seperti kamu tidak menjalankan cluster Elasticsearch sendiri kalau layanan terkelola sudah cukup.
- API key node provider harus diperlakukan seperti kredensial database — tidak pernah di frontend, selalu lewat backend.
- Selalu ada endpoint terpisah untuk mainnet (uang sungguhan) dan testnet (mis. Sepolia, uang percobaan gratis) — tertukar endpoint adalah kesalahan konfigurasi paling umum dan paling mahal.
Bentuk mentah satu panggilan JSON-RPC
curl -X POST https://eth-sepolia.g.alchemy.com/v2/API_KEY_KAMU \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "eth_getBalance",
"params": ["0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984", "latest"],
"id": 1
}'
{
"jsonrpc": "2.0",
"id": 1,
"result": "0x1bc16d674ec80000"
}
Tidak ada keajaiban di sini — ini HTTP POST biasa, body JSON biasa, respons JSON biasa. Semua pustaka integrasi (web3j, web3.php, ethers.js) pada akhirnya cuma membungkus panggilan seperti ini dengan API yang lebih nyaman dipakai dari bahasa masing-masing.
Jalankan node sendiri vs pakai provider terkelola
| Node sendiri | Provider terkelola | |
|---|---|---|
| Setup | Sinkronisasi penuh blockchain — bisa >1 TB storage, berhari-hari | Daftar, dapat API key, langsung pakai |
| Biaya | Server + storage + bandwidth berkelanjutan | Per request / langganan bulanan |
| Uptime jadi tanggung jawab | Timmu sendiri | Provider (dengan SLA) |
| Kontrol penuh data & privasi query | Ya | Tidak — provider bisa melihat pola query-mu |
| Cocok untuk | Skala sangat besar, kebutuhan compliance ketat | Mayoritas aplikasi — titik mulai yang wajar |
Method JSON-RPC yang paling sering dipakai backend
| Method | Untuk apa |
|---|---|
eth_call | Memanggil fungsi view/pure — baca data, gratis, instan (Fase 3 lanjutan) |
eth_sendRawTransaction | Mengirim transaksi yang sudah ditandatangani — state-changing, berbayar gas |
eth_getTransactionReceipt | Memeriksa status transaksi (sukses/gagal) dan event log-nya setelah masuk block |
eth_getLogs | Mengambil event log dalam rentang block tertentu — dasar dari indexing (materi terakhir fase ini) |
eth_blockNumber | Block terbaru yang diketahui node — dipakai untuk cek kesehatan koneksi |
eth_estimateGas | Simulasi eksekusi untuk memperkirakan gas sebelum kirim transaksi sungguhan |
API key bukan rahasia yang "agak" penting — perlakukan seperti password database. Kalau API key provider bocor ke frontend (dipanggil langsung dari JavaScript browser, misalnya), siapa pun bisa memakainya sampai kuota habis atau tagihanmu membengkak. Pola yang benar: frontend memanggil backend milikmu, backend yang menyimpan API key dan meneruskan panggilan ke node provider — persis pola proxy yang sudah kamu kenal untuk API key pihak ketiga lain.
Mainnet vs testnet: dua dunia, dua endpoint
| Mainnet | Testnet (mis. Sepolia) | |
|---|---|---|
| Native coin | ETH sungguhan, bernilai uang | ETH percobaan, gratis dari faucet |
| Konsekuensi bug | Kehilangan aset sungguhan | Tidak ada — reset kapan saja |
| Endpoint provider | eth-mainnet... | eth-sepolia... |
| Kapan dipakai | Produksi, setelah audit (Fase 4) | Seluruh development dan testing |
Latihan: daftar akun gratis di satu node provider (Alchemy atau Infura), buat endpoint Sepolia,
lalu jalankan perintah curl di atas dengan address wallet testnet-mu sendiri. Bandingkan hasil
eth_getBalance-nya dengan saldo yang ditampilkan MetaMask untuk akun yang sama — keduanya
harus identik, karena MetaMask pun sebenarnya melakukan panggilan JSON-RPC yang sama persis di baliknya.
Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.