dojo-indexer
Torii インデクサーをセットアップして、GraphQL クエリ、gRPC サブスクリプション、SQL アクセスに対応させることができます。デプロイしたワールドをクライアントクエリやリアルタイム更新用にインデックスする際に使用します。
description の原文を見る
Set up and configure Torii indexer for GraphQL queries, gRPC subscriptions, and SQL access. Use when indexing your deployed world for client queries or real-time updates.
SKILL.md 本文
Dojo インデクサー (Torii)
ワールド状態への効率的なクエリとリアルタイムサブスクリプション用に、DojoのインデクサーであるToriiをセットアップして使用します。
このスキルを使用する場合
- 「Toriiインデクサーをセットアップしたい」
- 「ワールド用にGraphQLを設定したい」
- 「エンティティ更新のサブスクリプションを作成したい」
- 「ワールド状態を効率的にクエリしたい」
このスキルでできること
Toriiインデクサーを管理します:
- Toriiの起動と設定
- GraphQLクエリの作成
- リアルタイムサブスクリプションのセットアップ
- SQLデータベースへの直接アクセス
クイックスタート
Toriiを起動:
torii --world <WORLD_ADDRESS>
デフォルト設定でToriiが起動します:
- GraphQL API (
http://localhost:8080/graphql) - gRPC API (
http://localhost:8080) - インメモリデータベース (開発用)
コントローラーインデックス有効時 (推奨):
torii --world <WORLD_ADDRESS> --indexing.controllers
本番環境設定:
torii --world <WORLD_ADDRESS> --db-dir ./torii-db --indexing.controllers
Toriiとは?
Toriiはドージョのインデクサーで、以下の機能を提供します:
- ブロックチェーンのワールドイベントを監視
- モデル状態変化をインデックス
- クエリ用GraphQL APIを提供
- サブスクリプション用gRPC APIを提供
- 複雑なクエリ用SQLアクセスを提供
Toriiを使用する理由:
- 直接RPC クエリより高速
- 複雑なクエリ (フィルタ、ページネーション)
- リアルタイムサブスクリプション
- タイプセーフなGraphQLスキーマ
GraphQL API
ToriiはGraphQLエンドポイント http://localhost:8080/graphql を提供します
ブラウザーのGraphiQL IDEを使用して、スキーマを探索してクエリをテストできます。
スキーマ構造
Toriiは2種類のクエリを生成します:
汎用クエリ:
entities- フィルタリング可能なすべてのエンティティにアクセスmodels- モデル定義を取得transactions- インデックス済みトランザクションをクエリ
モデル固有クエリ:
{modelName}Models- 各モデル用のカスタムクエリ- 例:
positionModels、movesModels
基本的なクエリ
モデルのすべてのエンティティを取得:
query {
movesModels {
edges {
node {
player
remaining
last_direction
}
}
}
}
モデルメタデータを取得:
query {
models {
edges {
node {
id
name
classHash
contractAddress
}
}
totalCount
}
}
ページネーション
カーソルベースのページネーション:
query {
entities(first: 10) {
edges {
cursor
node {
id
}
}
pageInfo {
hasNextPage
endCursor
}
}
}
次のページを取得:
query {
entities(first: 10, after: "cursor_value") {
edges {
cursor
node { id }
}
}
}
オフセット/リミットベースのページネーション:
query {
entities(offset: 20, limit: 10) {
edges {
node { id }
}
totalCount
}
}
リアルタイムサブスクリプション
WebSocket経由でワールド状態変化をサブスクライブします。
エンティティ更新
subscription {
entityUpdated(id: "0x54f58...") {
id
updatedAt
models {
__typename
... on Position {
vec {
x
y
}
}
... on Moves {
remaining
}
}
}
}
イベントストリーム
すべてのワールドイベントをモニタリング:
subscription {
eventEmitted {
id
keys
data
transactionHash
}
}
モデル登録
新しいモデル登録をリッスン:
subscription {
modelRegistered {
id
name
namespace
}
}
SQLアクセス
Toriiはデータ をSQLiteに保存し、複雑なクエリでアクセスできます。
データベースに接続:
sqlite3 torii.db
クエリの例:
-- エンティティ数をカウント
SELECT COUNT(*) FROM entities;
-- カスタム集計
SELECT AVG(value) FROM model_data WHERE model_name = 'Health';
クライアント統合
JavaScript/TypeScript
import { createClient } from '@dojoengine/torii-client';
const client = await createClient({
rpcUrl: "http://localhost:5050",
toriiUrl: "http://localhost:8080",
worldAddress: WORLD_ADDRESS,
});
// エンティティをクエリ
const positions = await client.getEntities({
model: "Position",
limit: 10
});
// 更新をサブスクライブ
await client.onEntityUpdated(
[{ model: "Position", keys: [playerId] }],
(entity) => console.log("Position updated:", entity)
);
Apollo Client (GraphQL)
import { ApolloClient, InMemoryCache, gql } from '@apollo/client';
const client = new ApolloClient({
uri: 'http://localhost:8080/graphql',
cache: new InMemoryCache(),
});
const { data } = await client.query({
query: gql`
query GetMoves {
movesModels {
edges {
node {
player
remaining
}
}
}
}
`
});
設定オプション
| オプション | 説明 | デフォルト |
|---|---|---|
--world | ワールドコントラクトアドレス | 任意 (Torii 1.6.0以降) |
--rpc | RPC エンドポイントURL | http://localhost:5050 |
--db-dir | データベースディレクトリ | インメモリ |
--config | TOML設定ファイルへのパス | なし |
--http.cors_origins | CORS origins | * |
スロットデプロイメント (リモート)
Slotはホスト型Toriiインスタンスを提供します。Slotはtomol設定ファイルが必要です。
設定を作成
# torii.toml
world_address = "<WORLD_ADDRESS>"
rpc = "<RPC_URL>"
[indexing]
controllers = true
すべてのTOML オプション (インデックス、ポーリング、名前空間など) については、Torii設定ガイドを参照してください。
デプロイ
slot auth login
slot deployments create <PROJECT_NAME> torii --config torii.toml --version <DOJO_VERSION>
管理
# ログをストリーム
slot deployments logs <PROJECT_NAME> torii -f
# 削除して再作成 (安全 — すべてのデータはオンチェーン)
slot deployments delete <PROJECT_NAME> torii
開発ワークフロー
ターミナル 1: Katanaを起動
katana --dev --dev.no-fee
ターミナル 2: ワールドをデプロイ
sozo build && sozo migrate
ターミナル 3: Toriiを起動
torii --world <WORLD_ADDRESS> --http.cors_origins "*"
トラブルシューティング
「接続が拒否された」
- Toriiが実行中であることを確認
- ポート (デフォルト 8080) を確認
- ファイアウォールルールを確認
「ワールドが見つからない」
- ワールドアドレスが正しいことを確認
- RPC URLにアクセス可能であることを確認
- ワールドがデプロイされていることを確認
「クエリが遅い」
- 汎用
entitiesの代わりにモデル固有クエリを使用 - ページネーションを使用
- 必要なフィールドのみをリクエスト
次のステップ
Toriiセットアップ後:
- クライアント (
dojo-clientスキル) と統合 - 最適化されたクエリを作成
- サブスクリプションをセットアップ
- パフォーマンスを監視
関連スキル
- dojo-deploy: 最初にワールドをデプロイ
- dojo-client: クライアントでToriiを使用
- dojo-world: Toriiがインデックスする内容を設定
- dojo-migrate: マイグレーション後Toriiを再起動
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- dojoengine
- リポジトリ
- dojoengine/book
- ライセンス
- MIT
- 最終更新
- 2026/5/1
Source: https://github.com/dojoengine/book / ライセンス: MIT