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

# インデクサー

> コミット済みブロックが照会可能なデータになるまで、フルノードからRESTとWebSocketの提供面へ至るストリーミング経路です。

チェーンがコミットするのはブロックです。一方でアプリケーションは、*このアカウントの先週の約定は何か*、*いま板はどうなっているか*といった問いを投げます。ブロック形式の記録が答えるのが苦手な問いです。インデクサーは、一方をもう一方へ変換するものです。

ほとんどのチェーンでは、インデクサーはインフラとして決定的な位置を占めます。チェーンは不透明なイベントを出し、第三者がそこから意味を再構成するので、アプリケーションが何を信じるかは、どのインデクサーを信頼するかに左右されます。ここでは、その再構成のステップが存在しません。[カーネル](/ja/protocol/architecture/kernel)は型付きで帰属の付いた出力を出し、あらゆる状態変化はすでに、それを引き起こしたトランザクションに結び付いています。そのためインデクサーは、意味を推論するのではなくデータを整形し直すだけです。

これはインデクサーの役割そのものを変えます。インデクサーは真実の源ではなく、**提供レイヤー**です。インデクサーが報告する内容はすべてチェーンに対して検証でき、食い違いがあれば、それは未解決の問いではなくインデクサーの不具合です。

<h2 id="the-path">
  経路
</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">新しさで分割</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">フルノード</span><span className="dg-s">コミット済みブロックを型付きレコードで配信</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">キャッシュ</span><span className="dg-s">直近データ、メモリから</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">ファイルストア</span><span className="dg-s">履歴データ、永続化</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">データサービス</span><span className="dg-s">両方をひとつのストリームに</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">ゲートウェイ → REST · WebSocket</span><span className="dg-s">アクセス、クォータ、ルーティング</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">分離している理由</span><span className="dg-s">先頭の追跡は遅延に敏感で規模が小さく、履歴の問い合わせはスループットに敏感で規模が大きいため、大きなバックフィルがひとつ走るだけでライブ経路が止まります。</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">真実の源ではなく提供レイヤー</span><span className="dg-s">カーネルは型付きで帰属の付いた出力を出すため、インデクサーは意味を推論せず整形し直すだけです。チェーンとの食い違いは、インデクサーの不具合です。</span></div>
  </div>
</div>

**フルノード**が起点です。取引記録は、解釈が必要な生のトランザクションではなく、型付きデータとしてそこから流し出されます。

**キャッシュとファイルストア**はストリームを新しさで分けます。直近のデータはメモリから提供されます。ほとんどの利用者が求めるのはそれであり、遅延が効いてくるからです。履歴データは永続的なファイルストレージへ書き出されます。すべてをメモリに保持し続けるのは戦略とは呼べないからです。古いデータを求める利用者と、チェーンの先頭を追う利用者は、どちらもそれと気づかないまま別の場所から提供を受けます。

**データサービス**は両方をひとつのストリームとして見せます。クライアントは任意の地点から始まる範囲を要求でき、その範囲がキャッシュから来るのか、ファイルから来るのか、両方から来るのかは、クライアントの関知するところではありません。

**ゲートウェイ**は、サービスと公開インターネットの間に属する関心事を扱います。アクセス、クォータ、ルーティングです。

**RESTとWebSocketの提供面**が、アプリケーションが実際に使うものです。マーケットデータ、注文と約定の履歴、ポジション、アカウント状態、資金調達の支払い、リアルタイム購読を提供します。エンドポイント単位の詳細は[APIリファレンス](https://testnet-openapi.intention.xyz/)を参照してください。

<h2 id="why-the-split-exists">
  分離している理由
</h2>

チェーンの先頭を追いながら履歴の問い合わせにも答える単一のサービスは、そのどちらもうまくこなせません。先頭の追跡は遅延に敏感で規模が小さく、履歴の問い合わせはスループットに敏感で規模が大きいため、大きなバックフィルがひとつ走るだけでライブ経路が止まります。

分離しておけば、新しい利用者に数か月前からのデータをバックフィルしても、先頭を追うマーケットメイカーへの配信は劣化しません。両者は独立にスケールでき、負荷の性質にまったく共通点がない以上、そうでなければ困ります。

<h2 id="what-it-is-safe-to-rely-on">
  どこまで頼ってよいか
</h2>

**頼ってよいもの**。インデクサーが提供するもののうち、コミット済みブロックから導かれるものすべてです。約定、注文、ポジション、資金調達の支払い、送金、マーケットデータ。これらはチェーンの出力を整形し直したものです。

**同じではないもの**。まだコミットされていないものです。[メモリプール](/ja/protocol/architecture/mempool)に受け入れられた注文はまだ順序づけられておらず、インデクサーはそれについて何も言えません。インデクサーに現れないことは、拒否されたという意味ではなく、まだコミットされていないという意味です。

**検証できるもの**。答えの重みが十分に大きい場合（決済上の争い、監査、会計上の突合）は、インデクサーから受け取るのではなく、チェーンに対して直接検証できます。その最も強い形が自分でフルノードを運用することであり、間違いが許されない参加者が取るべき手段です。[ノードを運用する](/ja/developers/run-a-node)を参照してください。

<Note>
  同じコミット済み範囲を読めば、どの利用者も同じ答えを得るはずです。そうならない場合、その食い違いは提供経路にあり、報告すべき不具合です。インデクサー越しにチェーンを読むことの本質的な性質ではありません。
</Note>

<h2 id="where-to-go-next">
  次に読む
</h2>

<CardGroup cols={2}>
  <Card title="ステートモデル" href="/ja/protocol/architecture/state/model">
    インデクサーが何を読んでいるのか、どの表現が正なのかです。
  </Card>

  <Card title="開発者向け" href="/ja/developers/overview">
    RESTとWebSocketの提供面、SDK、ツールです。
  </Card>

  <Card title="ノードを運用する" href="/ja/developers/run-a-node">
    自分でチェーンに対して検証する方法と、バリデータセットが閉じている理由です。
  </Card>

  <Card title="プログラムサービス" href="/ja/protocol/architecture/programs">
    このストリームを消費して、派生的なアカウント状態を計算する仕組みです。
  </Card>
</CardGroup>
