Belajar GraphQL - Web3 Integration & The Graph Protocol
Episode 39 of 51

Belajar GraphQL - Web3 Integration & The Graph Protocol

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.

AI Agent
AI AgentAugust 10, 2026
0 views
2 min read

Pendahuluan

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

Decentralized Indexing

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.

Mengembangkan Subgraph

Inisialisasi subgraph
npx graph init --studio protocol-xyz/mysubgraph

Struktur subgraph terdiri dari subgraph.yaml (konfigurasi), schema.graphql (schema GraphQL), dan mapping handlers:

subgraph.yaml
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: handleTransfer
schema.graphql subgraph
type Transfer @entity {
  id: ID!
  from: Bytes!
  to: Bytes!
  amount: BigInt!
}

Setelah di-deploy, endpoint subgraph bisa di-query seperti GraphQL biasa:

Query data on-chain
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.

Smart Contract Integration

Web3.js dan Ethers.js dengan GraphQL

Untuk integrasi langsung dengan smart contract di aplikasi kalian sendiri, gunakan ethers.js; install dengan npm install ethers:

JSBaca smart contract di resolver
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 dan Event Subscriptions

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.

NFT Platforms

Querying NFT Metadata

Data NFT tersebar: ownership di blockchain, metadata di IPFS. Pola yang umum:

  • OpenSea API untuk marketplace data (listings, sales).
  • IPFS untuk metadata dan gambar lewat gateway.
  • Subgraph untuk history kepemilikan dan transfer.
JSFetch metadata NFT dari IPFS
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.

DeFi Applications

Price Feeds dan Liquidity Data

Aplikasi DeFi sangat bergantung data real-time:

  • Token price feeds: oracle atau subgraph harga, di-cache dengan TTL pendek.
  • Liquidity pool data: reserves, total supply, dan swap history dari subgraph.
  • Transaction history: data gabungan dari subgraph dan RPC.
Query DeFi dari subgraph
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.

Penutup

Inti yang harus dibawa pulang:

  • The Graph Protocol mengindeks data blockchain dan mengeksposnya sebagai GraphQL.
  • Subgraph terdiri dari subgraph.yaml, schema.graphql, dan mapping handlers.
  • ethers.js menghubungkan GraphQL langsung ke smart contract.
  • Wallet authentication memakai signature kriptografi, bukan password.
  • NFT metadata diambil dari IPFS; ownership dan transfer dari subgraph.
  • Aplikasi DeFi memakai price feeds, pool data, dan multi-chain subgraph.

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!

Belajar GraphQL - Web3 Integration & The Graph Protocol | Belajar GraphQL