OREStats

OREStats API v1

有料エンドポイントは /api/v1/* 配下にあります。すべて Authorization: Bearer ore_… が必須です。購読は /pricing から。

API 経由で購読する

  1. POST /api/v1/subscribe に以下を送信します { ownerPubkey } — サーバーは一意の nonce と ORE 数量を返します。
  2. ステップ 1 で指定された priceOre 分の ORE を、同じレスポンスで返されたトレジャリーアドレスに送信し、SPL Memo インストラクションとして nonce を添付してください。
  3. PUT /api/v1/subscribe に以下を送信します { nonce, txSig, ownerPubkey } — サーバーはオンチェーンで検証し、購読を有効化し、API キーを返します。
  4. 以降、すべての /api/v1/* 呼び出しで以下を Authorization: Bearer ore_… ヘッダーに付けて使用してください。

支払いの詳細

トレジャリーウォレット: A9HLwE6wCm7Hedo7771nwsX8TyArv7rgdVQMo9dgDGZF
ORE mint: oreoU2P8bN6jkk3jbaiVxYnG1dCXcYxwhwyK9jSybcp
ネットワーク: Solana mainnet-beta
GET/api/v1/pricing公開

用途: 1 か月分のアクセス権の現在価格(ORE 建て)。購読者数が増えるごとに価格が段階的に上昇します — レスポンスには次の閾値と、その先の価格も含まれます。

レスポンス:
{
  "activeSubs": 17,
  "oreNow": 0.1,
  "nextThreshold": 100,
  "oreAtNextThreshold": 0.2,
  "treasury": "...",
  "oreMint": "..."
}
POST/api/v1/subscribe公開

用途: 購読のステップ 1。1 回限りの SPL 転送インストラクション(memo + 金額)を返します。これをオーナーウォレットで署名し、Solana にブロードキャストする必要があります。

パラメータ:
  • ownerPubkeyAPI キーを所有する base58 形式の Solana 公開鍵
リクエストボディ:
{ "ownerPubkey": "..." }
レスポンス:
{
  "nonce": "ore-pay-...",
  "priceOre": 0.1,
  "instructions": { "to": "...", "memo": "ore-pay-...", "amountBaseUnits": "10000000000", "mint": "..." },
  "expiresAt": "..."
}
PUT/api/v1/subscribe公開

用途: 購読のステップ 2。SPL 転送が確認された後、トランザクション署名を送信して API キーを発行します。平文のキーは一度しか表示されません。

パラメータ:
  • noncePOST /subscribe が返した値
  • txSigステップ 1 の memo を含む、確認済みの SPL 転送署名
  • ownerPubkey支払いに使ったウォレット(POST 時に指定したもの)と一致する必要があります
リクエストボディ:
{ "nonce": "...", "txSig": "...", "ownerPubkey": "..." }
レスポンス:
{
  "apiKey": "ore_xxx (shown ONCE)",
  "subscriberId": "sub_...",
  "paidUntil": "..."
}
GET/api/v1/live有料(Bearer)

用途: 現在ラウンドのスナップショット — 各マスの現在の保持額、残り秒数、前ラウンドの結果。負荷が小さいので 1–2 秒ごとのポーリングが可能です。

レスポンス:
現在ラウンドのスナップショット(deployed、count、secondsLeft、prevRound)
GET/api/v1/stream有料(Bearer)

用途: /live の SSE 版。オンチェーンのボードまたはラウンドアカウントが変化するたびに最新のスナップショットをプッシュします。いつ再接続しても構いません — 次のイベントは常に最新の状態です。

レスポンス:
サーバー送信イベント(SSE)。オンチェーンのボード/ラウンドアカウントが変化するたびに最新スナップショットをプッシュします
GET/api/v1/stats有料(Bearer)

用途: 集計済みのマス統計:累積当選回数のカイ二乗、マス別当選回数 & 投入 SOL、累計投入 SOL、実効ハウスエッジ。

レスポンス:
集計値(カイ二乗、perGrid、totalDeployedSol、effectiveHouseEdge)
GET/api/v1/rounds?limit=100有料(Bearer)

用途: 直近 N ラウンドの収録データ(新しい順)。バッチ取り込み用途に。低レイテンシで新規ラウンドを通知したい場合は /events/stream を使用してください。

パラメータ:
  • limit返却するラウンド数。デフォルト 100、最大 10000
レスポンス:
直近 N ラウンドの収録データ(id、deployed[25]、count[25]、winningSquare、totalDeployed、totalWinnings)
GET/api/v1/rounds/{id}有料(Bearer)

用途: 単一ラウンドの詳細+前後の id(履歴をカーソルで辿るため)。

パラメータ:
  • idラウンド id(パスセグメント)
レスポンス:
単一ラウンド + 前後の id
GET/api/v1/grid/{n}?limit=200有料(Bearer)

用途: マスごとの統計に加え、直近の当選/不当選シリーズ(1 = 当選、0 = 不当選)を返します(チャート描画用)。

パラメータ:
  • nマスインデックス 0..24(パスセグメント)
  • limitシリーズ長。デフォルト 200
レスポンス:
マスごとの統計+直近の当選/不当選シリーズ(1 ≤ n ≤ 25)
GET/api/v1/events?since=N&limit=M&kind=X有料(Bearer)

用途: ポーリング型のイベントログ。ドラウト終了、大型ラウンド、価格階層クロス、マイルストーン、購読変更などを含みます。`since` カーソルより新しいイベントを取得します。

パラメータ:
  • sinceid カーソル。id > since のイベントのみが返されます
  • limit1 回あたりの最大件数。デフォルト 100
  • kind任意フィルタ:drought_broken | big_round | tier | milestone | subscription
レスポンス:
{
  "count": 12,
  "lastId": 47,
  "events": [
    { "id": 47, "ts": "...", "kind": "drought_broken", "grid": 8, "drought": 91, "roundId": 247101 },
    { "id": 48, "ts": "...", "kind": "big_round", "roundId": 247155, "deployedSol": 8.94, "thresholdSol": 8.15, "multiplier": 1.10, "winningSquare": 12, "totalMiners": 209 },
    ...
  ]
}
GET/api/v1/events/stream?since=N&kind=X有料(Bearer)

用途: /events と同じイベントログの SSE 版。接続時に直近 50 件(または since 以降のイベント)をリプレイし、その後は新規イベントをリアルタイムでプッシュします。

パラメータ:
  • since任意のリプレイカーソル。省略時は直近 50 件をリプレイ
  • kind任意フィルタ(/events と同じセット)
レスポンス:
server-sent events; replays last 50 (or events since cursor) on connect, then pushes each new event as it fires (drought / streak / big round / tier / milestone / subscription).
GET/api/v1/dump?from=X&to=Y&limit=10000有料(Bearer)

用途: 履歴の一括エクスポート — `from` / `nextFrom` カーソルで全収録ラウンドをページネーション取得します。独自データベースの初期同期に使い、その後は /events/stream で増分更新に切り替えるのを推奨します。

パラメータ:
  • from開始ラウンド id(含む)
  • to任意の終了ラウンド id(含む)
  • limit1 ページあたりの件数。デフォルト 5000、最大 10000
レスポンス:
{
  "count": 5000,
  "from": 228237,
  "to": 233236,
  "hasMore": true,
  "nextFrom": 233237,
  "rounds": [ { id, deployed[25], count[25], winningSquare, totalDeployed, totalWinnings }, ... ]
}
POST/api/v1/reissue公開

用途: API キーローテーションのステップ 1。アクティブな購読を所有するウォレットで署名すべきメッセージを返します。

パラメータ:
  • ownerPubkeyもともと購読したウォレット
リクエストボディ:
{ "ownerPubkey": "..." }
レスポンス:
{ "nonce": "ore-reissue-...", "message": "OREStats reissue ... @ ...", "expiresAt": "..." }
PUT/api/v1/reissue公開

用途: ローテーションのステップ 2。ウォレット署名を送信すると、旧キーは即座に無効になり、新しいキーが返されます(同じく一度のみ表示)。

パラメータ:
  • noncePOST /reissue が返した値
  • ownerPubkeyPOST 時と同じウォレット
  • signatureBase64メッセージ文字列に対する ed25519 署名を base64 エンコードしたもの
リクエストボディ:
{ "nonce": "...", "ownerPubkey": "...", "signatureBase64": "..." }
レスポンス:
{ "apiKey": "ore_xxx (NEW, old key revoked)", "subscriberId": "sub_...", "paidUntil": "..." }

戦略ラボ

パラメータ化された戦略を構築、バックテスト、フォワードテストします。create / backtest / analytics の各エンドポイントは同じ DSL 形式を共有します — 各値の対応表はこのセクションの末尾を参照してください。

POST/api/v1/lab/strategies有料(Bearer)

用途: 戦略を作成します。アクティブになると、OREStats は新しいラウンドのたびに自動的にペーパートレード予測を記録し、フォワードテスト統計を提供します。

パラメータ:
  • name表示用ラベル。空文字列不可
  • dsl完全な戦略 DSL — base_strategy、params、オプションの filters[]。値の対応表は下記を参照してください。
リクエストボディ:
{
  "name": "my cold-5",
  "dsl": {
    "base_strategy": "cold",
    "params": {
      "bet_size_lamports": 200000,
      "num_squares": 5,
      "sizing_mode": "flat",
      "max_bet_per_square_lamports": 5000000,
      "tx_fee_lamports": 10000
    },
    "filters": [
      { "metric": "current_drought_min", "op": ">=", "value": 30 }
    ]
  }
}
レスポンス:
{
  "strategy": {
    "id": "...", "owner": "...", "name": "...",
    "dsl": { "base_strategy": "...", "params": { ... }, "filters": [ ... ] },
    "createdAt": "...", "updatedAt": "...", "active": true
  }
}
GET/api/v1/lab/strategies有料(Bearer)

用途: 所有する戦略の一覧と、リアルタイムのフォワードテスト統計(結算済みラウンド数、当選数、実ラウンド結果に基づく ROI)を返します。

レスポンス:
{
  "count": 3,
  "strategies": [
    {
      "id": "...", "name": "...", "dsl": { ... }, "active": true,
      "stats": { "roundsSettled": 412, "roundsWon": 88, "netProfitSol": 0.123, "roiPercent": 4.7 }
    },
    ...
  ]
}
GET/api/v1/lab/strategies/{id}有料(Bearer)

用途: 所有する単一の戦略を、予測件数とともに取得します。

パラメータ:
  • id戦略 id(パスセグメント)
レスポンス:
{ "strategy": { ... }, "predictionCount": 412 }
PATCH/api/v1/lab/strategies/{id}有料(Bearer)

用途: 戦略の改名、またはアクティブフラグの切り替えを行います。非アクティブな戦略は新規ラウンドで予測を行いませんが、履歴は保持されます。

パラメータ:
  • name新しい表示名(任意)
  • activetrue で予測再開、false で一時停止(任意)
リクエストボディ:
{ "name": "renamed", "active": false }
レスポンス:
{ "strategy": { ... } }
DELETE/api/v1/lab/strategies/{id}有料(Bearer)

用途: 所有する戦略をハード削除します。関連するすべての予測が削除され、リーダーボードのエントリも消えます。

パラメータ:
  • id戦略 id(パスセグメント)
レスポンス:
{ "ok": true }
GET/api/v1/lab/strategies/{id}/forward有料(Bearer)

用途: ある戦略のフォワードテスト統計:純 SOL、ROI、勝率、権益曲線、最大ドローダウン、最長連敗、未結算ラウンド。

パラメータ:
  • id戦略 id(パスセグメント)
レスポンス:
{
  "strategyId": "...",
  "roundsObserved": 432,
  "roundsBet": 412, "roundsWon": 88,
  "squaresBet": 2060, "squaresWon": 92,
  "netProfitSol": 0.12, "totalStakeSol": 2.6,
  "roiPercent": 4.7, "winRate": 0.21, "perSquareWinRate": 0.045,
  "maxDrawdownSol": 0.08, "maxStreak": 12,
  "equityCurve": [{ "round": 247001, "balanceLamports": 0 }, ...],
  "pendingCount": 1
}
POST/api/v1/lab/backtest有料(Bearer)

用途: DSL を収録済みの履歴ラウンドに対してリプレイします。完全な BacktestResult を返します(ラウンドごとの PnL、マスごとの寄与、権益曲線、早期終了理由を含む)。

パラメータ:
  • dsl戦略 DSL(create と同じ形式)
  • fromRoundIdリプレイウィンドウの下限(含む)。任意
  • toRoundId上限(含む)。任意
リクエストボディ:
{
  "dsl": { "base_strategy": "...", "params": { ... }, "filters": [ ... ] },
  "fromRoundId": 200000,
  "toRoundId": 247000
}
レスポンス:
{
  "result": {
    "totalRounds": 47000, "roundsBet": 9200, "roundsWon": 1800,
    "squaresBet": 46000, "squaresWonOn": 1900,
    "netProfitLamports": ..., "netProfitSol": ...,
    "totalStakeLamports": ..., "totalStakeSol": ...,
    "totalRecoveryLamports": ..., "totalRecoverySol": ...,
    "roiPercent": ..., "winRate": ..., "perSquareWinRate": ...,
    "maxStreak": ..., "capHits": ..., "totalCapLossSol": ...,
    "minWalletSol": ..., "maxDrawdownSol": ...,
    "rangeMin": 200000, "rangeMax": 247000,
    "exitedEarly": null,
    "exitRoundId": 0,
    "equityCurve":   [{ "round": ..., "balanceLamports": ... }, ...],
    "perSquare":     [{ "square": 0, "betCount": ..., "winCount": ..., "netLamports": ... }, ...],
    "perRoundPnlLamports": [...],
    "streakRunLengths":    [...]
  }
}
POST/api/v1/lab/analytics有料(Bearer)

用途: 重量級の分析バンドル — モンテカルロ法による信頼区間に加え、パラメータスイープにわたる 4 つのネストされたバックテスト。初回呼び出しは 3–6 秒、ウォームキャッシュ後はサブ秒で応答。キャッシュキーは DSL です。

パラメータ:
  • dsl戦略 DSL(backtest と同じ形式)
リクエストボディ:
{ "dsl": { ... } }
レスポンス:
{ "analytics": { ... } }
GET/api/v1/lab/leaderboard公開

用途: 公開トップ戦略リスト。公開されるのは ROI / サンプル数のみで、DSL は購読者が詳細エンドポイントを参照するまで隠されます。

レスポンス:
{
  "generatedAt": "...",
  "minRoundsToQualify": 1000,
  "count": 14,
  "entries": [
    { "id": "...", "name": "...", "ownerShort": "abcd...wxyz", "roiPercent": ..., "roundsSettled": ... },
    ...
  ]
}
GET/api/v1/lab/leaderboard/{id}有料(Bearer)

用途: リーダーボードの単一エントリの完全な DSL、フォワードテストの要約、権益曲線。購読者限定 — 公開ユーザーはトップラインの ROI しか見られません。

パラメータ:
  • id戦略 id(パスセグメント)
レスポンス:
{
  "strategy": {
    "id": "...", "name": "...", "ownerShort": "abcd...wxyz",
    "dsl": { ... },
    "createdAt": "..."
  },
  "forwardTest": {
    "roundsSettled": ...,
    "netProfitSol": ...,
    "equityCurve": [{ "round": ..., "balanceLamports": ... }, ...]
  }
}

戦略 DSL — 受け入れ可能な値

base_strategy cold, spread, drought, custom_squares, hot, top_hit_rate, bottom_hit_rate, recent_winners, anti_spread, min_miners, corners, edges, center_block, diagonal_main, diagonal_anti, row, column, checkerboard, all_25

params.sizing_mode flat, martingale, reverse_martingale, fibonacci, dalembert, kelly

filters[].metric rounds_since_last_big, consecutive_losses, current_drought_min, current_drought_max, total_deployed_pctile, total_miners, rounds_since_big_round, chi_square_p_recent

filters[].op < , <= , > , >= , ==

params.* の数値範囲(範囲外の値はサーバー側で自動的にクランプされます):
  bet_size_lamports             required, (0, 1e8]
  num_squares                   1..25
  drought_threshold             1..1000
  custom_squares                int[] in 0..24
  hit_rate_lookback             50..20000
  row_index, column_index       0..4
  martingale_multiplier         1..10
  loss_streak_threshold         1..100
  dalembert_step_lamports       1..1e6
  kelly_fraction                0.0001..1
  kelly_bankroll_lamports       >= 1
  max_bet_per_square_lamports   1..1e8
  tx_fee_lamports               0..1e7
  stop_loss_streak              1..1000
  cooldown_after_loss_rounds    0..500
  take_profit_lamports          >= 0
  session_stop_loss_lamports    >= 0

クオータ:
  max 100 strategies per account

利用制限とフェアユース

  • API キーごと:5 req/秒(バースト 60)。超過時は HTTP 429 を返し、Retry-After ヘッダーに待機秒数を付与します。
  • ヘッダー内の API キーは一度しか平文表示されない使い切りです:必ず保管してください — サーバー側にはハッシュ値しか保存されません。
  • キーの共有は検出可能であり(同時刻に複数 IP からのアクセスなど)、失効の対象となることがあります。
  • ダッシュボード専用エンドポイント(/api/live*)はブラウザセッション+ Origin の一致が必要で、プログラムからの呼び出しには対応していません。