> ## Documentation Index
> Fetch the complete documentation index at: https://docs.intention.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Indexer

> Bagaimana blok yang dikomit menjadi data yang bisa dikueri — jalur streaming dari full node ke permukaan REST dan WebSocket.

Chain mengomit blok. Aplikasi mengajukan pertanyaan seperti *apa saja eksekusi akun ini minggu lalu* dan *seperti apa order book sekarang* — pertanyaan yang dijawab dengan buruk oleh catatan berbentuk blok. Indexer-lah yang mengubah bentuk yang satu menjadi bentuk yang lain.

Di kebanyakan chain, indexer adalah komponen infrastruktur yang kritis: chain menerbitkan event yang buram dan pihak ketiga merekonstruksi maknanya, sehingga apa yang dipercaya aplikasi Anda bergantung pada indexer mana yang dipercayainya. Di sini langkah rekonstruksi itu tidak ada. [Kernel](/id/protocol/architecture/kernel) menerbitkan output yang bertipe dan beratribusi — setiap perubahan state sudah terikat pada transaksi penyebabnya — sehingga indexer membentuk ulang data alih-alih menyimpulkannya.

Itu mengubah fungsi indexer. Indexer di sini adalah **lapisan penyajian**, bukan sumber kebenaran. Apa pun yang dilaporkannya bisa diperiksa terhadap chain, dan selisih apa pun adalah bug di indexer, bukan pertanyaan terbuka.

<h2 id="the-path">
  Jalurnya
</h2>

<div className="dg" data-dg="indexer-path">
  <div className="dg-c" style={{aspectRatio:"720 / 318"}}>
    <svg className="dg-w" viewBox="0 0 720 318" aria-hidden="true">
      <path className="dg-wire dg--blue dg-soft" d="M 123.00 102.00 L 155.98 75.97" />

      <path className="dg-head dg--blue" d="M 161.00 72.00 L 158.70 79.42 L 153.25 72.51 Z" />

      <path className="dg-wire dg--blue dg-soft" d="M 123.00 102.00 L 156.23 131.73" />

      <path className="dg-head dg--blue" d="M 161.00 136.00 L 153.30 135.01 L 159.16 128.45 Z" />

      <path className="dg-wire dg--sky dg-soft" d="M 349.00 72.00 L 381.98 98.03" />

      <path className="dg-head dg--sky" d="M 387.00 102.00 L 379.25 101.49 L 384.70 94.58 Z" />

      <path className="dg-wire dg--sky dg-soft" d="M 349.00 136.00 L 382.23 106.27" />

      <path className="dg-head dg--sky" d="M 387.00 102.00 L 385.16 109.55 L 379.30 102.99 Z" />

      <path className="dg-wire dg--green" d="M 536.00 102.00 L 551.60 102.00" />

      <path className="dg-head dg--green" d="M 558.00 102.00 L 551.60 106.40 L 551.60 97.60 Z" />
    </svg>

    <div className="dg-band" style={{left:"20.8333%",top:"8.1761%",width:"29.1667%",height:"47.7987%"}}><span className="dg-cap">menurut usia</span></div>
    <div className="dg-b dg--blue" style={{left:"0.0000%",top:"19.4969%",width:"16.3889%",height:"25.1572%"}}><span className="dg-t">Full node</span><span className="dg-s">blok terkomit, dialirkan sebagai data bertipe</span></div>
    <div className="dg-b dg--sky" style={{left:"23.0556%",top:"14.4654%",width:"24.7222%",height:"16.3522%"}}><span className="dg-t">Cache</span><span className="dg-s">terkini — dari memori</span></div>
    <div className="dg-b dg--sky" style={{left:"23.0556%",top:"34.5912%",width:"24.7222%",height:"16.3522%"}}><span className="dg-t">Penyimpan berkas</span><span className="dg-s">historis — tahan lama</span></div>
    <div className="dg-b dg--sky" style={{left:"54.4444%",top:"19.4969%",width:"19.4444%",height:"25.1572%"}}><span className="dg-t">Layanan data</span><span className="dg-s">keduanya sebagai satu aliran</span></div>
    <div className="dg-b dg--green" style={{left:"78.0556%",top:"19.4969%",width:"21.9444%",height:"25.1572%"}}><span className="dg-t">Gateway → REST · WebSocket</span><span className="dg-s">akses, kuota, perutean</span></div>
    <div className="dg-b dg-dashed dg-left" style={{left:"0.0000%",top:"67.2956%",width:"48.8889%",height:"27.6730%"}}><span className="dg-t">Alasan pemisahan</span><span className="dg-s">Mengikuti kepala chain sensitif latensi dan kecil; kueri historis sensitif throughput dan besar. Satu backfill di jalur bersama akan menghambat jalur langsung.</span></div>
    <div className="dg-b dg-dashed dg-left" style={{left:"51.1111%",top:"67.2956%",width:"48.8889%",height:"27.6730%"}}><span className="dg-t">Lapisan penyajian, bukan sumber kebenaran</span><span className="dg-s">Kernel menerbitkan output bertipe dan beratribusi, sehingga indexer membentuk ulang, bukan menyimpulkan. Selisih dengan chain adalah bug di indexer.</span></div>
  </div>
</div>

**Full node** adalah titik asalnya. Catatan trading dialirkan keluar darinya sebagai data bertipe alih-alih transaksi mentah yang butuh penafsiran.

**Cache dan penyimpan berkas** membagi aliran itu berdasarkan usia. Data terkini disajikan dari memori, karena itulah yang diinginkan sebagian besar konsumen dan latensinya penting. Data historis ditulis ke penyimpanan berkas yang tahan lama, karena menahan segalanya di memori bukan strategi. Konsumen yang meminta data lama dan konsumen yang mengikuti kepala chain dilayani dari tempat berbeda tanpa keduanya menyadarinya.

**Layanan data** menyajikan keduanya sebagai satu aliran. Klien meminta rentang yang dimulai dari mana pun; apakah rentang itu dilayani dari cache, dari berkas, atau dari keduanya bukan urusan klien.

**Gateway** menangani urusan yang berada di antara layanan dan internet publik: akses, kuota, dan perutean.

**Permukaan REST dan WebSocket** inilah yang benar-benar dipakai aplikasi — data pasar, riwayat order dan eksekusi, posisi, state akun, pembayaran funding, dan langganan langsung. Lihat [referensi API](https://testnet-openapi.intention.xyz/) untuk detail tingkat endpoint.

<h2 id="why-the-split-exists">
  Mengapa pemisahan ini ada
</h2>

Satu layanan yang sekaligus mengikuti kepala chain dan menjawab kueri historis tidak akan baik di keduanya. Mengikuti kepala chain bersifat sensitif latensi dan berukuran kecil; kueri historis bersifat sensitif throughput dan berukuran besar, dan satu backfill besar akan menghambat jalur langsung.

Memisahkan keduanya berarti mengisi ulang data konsumen baru dari beberapa bulan lalu tidak menurunkan kualitas feed seorang market maker yang mengikuti kepala chain, dan keduanya bisa diskalakan secara independen — dan itu memang dibutuhkan, karena profil bebannya sama sekali tidak mirip.

<h2 id="what-it-is-safe-to-rely-on">
  Apa yang aman dijadikan sandaran
</h2>

**Aman.** Apa pun yang disajikan indexer dan diturunkan dari blok yang dikomit: eksekusi, order, posisi, pembayaran funding, transfer, data pasar. Semua itu dibentuk ulang dari output chain.

**Bukan hal yang sama.** Apa pun yang belum dikomit. Order yang diterima ke [mempool](/id/protocol/architecture/mempool) belum diurutkan, dan indexer tidak punya keterangan apa pun tentangnya. Ketiadaan di indexer berarti belum dikomit, bukan ditolak.

**Dapat diverifikasi.** Kalau jawabannya cukup penting — sengketa penyelesaian, audit, rekonsiliasi akuntansi — jawaban itu bisa diperiksa langsung terhadap chain alih-alih diambil dari indexer. Menjalankan full node sendiri adalah bentuk terkuat dari ini, dan itulah yang harus dilakukan peserta yang tidak mampu menanggung kesalahan. Lihat [Menjalankan node](/id/developers/run-a-node).

<Note>
  Dua konsumen yang membaca rentang terkomit yang sama seharusnya mendapat jawaban yang sama. Jika tidak, selisihnya ada di jalur penyajian dan itu bug yang perlu dilaporkan — bukan sifat bawaan dari membaca chain lewat indexer.
</Note>

<h2 id="where-to-go-next">
  Ke mana selanjutnya
</h2>

<CardGroup cols={2}>
  <Card title="Model state" href="/id/protocol/architecture/state/model">
    Apa yang dibaca indexer, dan representasi mana yang otoritatif.
  </Card>

  <Card title="Developer" href="/id/developers/overview">
    Permukaan REST dan WebSocket, SDK, dan perkakas.
  </Card>

  <Card title="Menjalankan node" href="/id/developers/run-a-node">
    Memverifikasi sendiri terhadap chain, dan mengapa set validatornya tertutup.
  </Card>

  <Card title="Layanan program" href="/id/protocol/architecture/programs">
    Apa yang mengonsumsi aliran ini untuk menghitung state akun turunan.
  </Card>
</CardGroup>
