Episode 39 mengintegrasikan GraphQL dengan blockchain dan Web3: The Graph Protocol untuk indeks data on-chain, pengembangan subgraph dengan subgraph.yaml, integrasi smart contract dengan ethers.js, querying NFT metadata dengan OpenSea dan IPFS, hingga aplikasi DeFi.

Blockchain adalah penyimpanan data yang tidak biasa: transparan, immutable, tetapi sulit di-query secara langsung. Episode 39 menghubungkan GraphQL dengan dunia Web3 — melalui The Graph Protocol dan integrasi smart contract.
Kita akan mempelajari The Graph dan pengembangan subgraph, integrasi smart contract dengan ethers.js, querying NFT metadata, dan contoh aplikasi DeFi.
The Graph Protocol adalah jaringan terdesentralisasi untuk meng-indeks data blockchain. Jaringan ini menjalankan subgraph — definisi indexing yang menentukan event apa yang dipantau dan bagaimana data disajikan — lalu mengeksposnya sebagai endpoint GraphQL.
Keunggulannya: data on-chain yang tidak mudah di-query langsung (event dan log) bisa diindeks menjadi API GraphQL yang cepat. Banyak aplikasi DeFi dan NFT dibangun di atas subgraph.
npx graph init --studio protocol-xyz/mysubgraphStruktur subgraph terdiri dari subgraph.yaml (konfigurasi), schema.graphql (schema GraphQL), dan mapping handlers:
specVersion: 1.0.0
schema:
file: ./schema.graphql
dataSources:
- kind: ethereum/contract
name: TransferContract
network: mainnet
source:
address: "0x..."
abi: TransferContract
mapping:
kind: ethereum/events
language: wasm/assemblyscript
entities:
- Transfer
eventHandlers:
- event: Transfer(address,address,uint256)
handler: handleTransfertype Transfer @entity {
id: ID!
from: Bytes!
to: Bytes!
amount: BigInt!
}Setelah di-deploy, endpoint subgraph bisa di-query seperti GraphQL biasa:
query Transfers {
transfers(first: 10) {
from
to
amount
}
}Subgraph menangani kebutuhan query on-chain: balance history, transfer, token ownership, dan data agregat — hal yang mustahil dilakukan langsung di smart contract.
Untuk integrasi langsung dengan smart contract di aplikasi kalian sendiri, gunakan ethers.js; install dengan npm install ethers:
import { ethers } from "ethers";
async function tokenBalance(_, args, ctx) {
const provider = new ethers.JsonRpcProvider(process.env.RPC_URL);
const contract = new ethers.Contract(
args.contractAddress,
["function balanceOf(address) view returns (uint256)"],
provider
);
const balance = await contract.balanceOf(args.owner);
return balance.toString();
}Wallet authentication memakai signature kriptografi: client meminta server mengirim pesan (challenge), client menandatanganinya dengan wallet, dan server memverifikasi — ini membuktikan kepemilikan wallet tanpa password. Untuk transaction monitoring, kombinasikan: subscription GraphQL untuk peristiwa dari subgraph, dan ethers.js untuk memantau status transaksi secara langsung saat dibutuhkan.
Data NFT tersebar: ownership di blockchain, metadata di IPFS. Pola yang umum:
async function nftMetadata(_, args, ctx) {
const uri = `https://ipfs.io/ipfs/${args.cid}`;
const res = await fetch(uri);
return res.json();
}Real-time NFT updates (listing baru, offer, sale) ditangani subscription pada subgraph atau webhook marketplace.
Aplikasi DeFi sangat bergantung data real-time:
query PoolInfo {
liquidityPool(id: "0x...") {
token0 { symbol price }
token1 { symbol price }
totalLiquidity
}
}Multi-chain support: deploy subgraph per chain atau pakai indexer lintas chain; tetap satu endpoint GraphQL di depan untuk abstraksi. Gabungkan dengan caching (episode 20) karena harga berubah cepat namun data on-chain lain bisa di-cache lebih lama.
Inti yang harus dibawa pulang:
Di episode 40 selanjutnya kalian akan mempelajari spec updates dan masa depan GraphQL — evolusi spesifikasi, direktif @defer dan @stream untuk incremental delivery, fitur mendatang seperti Client Controlled Nullability dan Fragment Arguments, hingga komunitas GraphQL Foundation. Kalian akan tahu arah teknologi ini!