Skip to main content
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 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.

Jalurnya

menurut usia
Full nodeblok terkomit, dialirkan sebagai data bertipe
Cacheterkini — dari memori
Penyimpan berkashistoris — tahan lama
Layanan datakeduanya sebagai satu aliran
Gateway → REST · WebSocketakses, kuota, perutean
Alasan pemisahanMengikuti kepala chain sensitif latensi dan kecil; kueri historis sensitif throughput dan besar. Satu backfill di jalur bersama akan menghambat jalur langsung.
Lapisan penyajian, bukan sumber kebenaranKernel menerbitkan output bertipe dan beratribusi, sehingga indexer membentuk ulang, bukan menyimpulkan. Selisih dengan chain adalah bug di indexer.
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 untuk detail tingkat endpoint.

Mengapa pemisahan ini ada

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.

Apa yang aman dijadikan sandaran

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 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.
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.

Ke mana selanjutnya

Model state

Apa yang dibaca indexer, dan representasi mana yang otoritatif.

Developer

Permukaan REST dan WebSocket, SDK, dan perkakas.

Menjalankan node

Memverifikasi sendiri terhadap chain, dan mengapa set validatornya tertutup.

Layanan program

Apa yang mengonsumsi aliran ini untuk menghitung state akun turunan.