OREStats

OREStats API v1

Ücretli uç noktalar /api/v1/* altındadır. Hepsi Authorization: Bearer ore_… gerektirir. Şuradan abone olun: /pricing.

API üzerinden abonelik

  1. POST /api/v1/subscribe — gövde: { ownerPubkey } — sunucu benzersiz bir nonce + ORE miktarı döner.
  2. 1. adımdan gelen priceOre miktarını hazine adresine (aynı yanıtta dönülür) gönderin; nonce'u SPL Memo komutu olarak ekleyin.
  3. PUT /api/v1/subscribe — gövde: { nonce, txSig, ownerPubkey } — sunucu zincir üstü doğrular, aboneliği etkinleştirir, API anahtarınızı döner.
  4. Tüm /api/v1/* çağrılarında Authorization: Bearer ore_… başlığını kullanın.

Ödeme ayrıntıları

Hazine cüzdanı: A9HLwE6wCm7Hedo7771nwsX8TyArv7rgdVQMo9dgDGZF
ORE mint: oreoU2P8bN6jkk3jbaiVxYnG1dCXcYxwhwyK9jSybcp
: Solana mainnet-beta
GET/api/v1/pricinghalka açık

amaç: Bir aylık erişim için mevcut fiyat (ORE cinsinden). Daha fazla abone katıldıkça fiyat kademeli yükselir — yanıt ayrıca bir sonraki eşiği ve ötesindeki fiyatı da söyler.

yanıt:
{
  "activeSubs": 17,
  "oreNow": 0.1,
  "nextThreshold": 100,
  "oreAtNextThreshold": 0.2,
  "treasury": "...",
  "oreMint": "..."
}
POST/api/v1/subscribehalka açık

amaç: Aboneliğin 1. adımı. Sahip cüzdanla imzalayıp Solana'da yayınlamanız gereken tek seferlik bir SPL transfer komutu (memo + miktar) döner.

parametreler:
  • ownerPubkeyAPI anahtarına sahip olacak base58 Solana pubkey
istek gövdesi:
{ "ownerPubkey": "..." }
yanıt:
{
  "nonce": "ore-pay-...",
  "priceOre": 0.1,
  "instructions": { "to": "...", "memo": "ore-pay-...", "amountBaseUnits": "10000000000", "mint": "..." },
  "expiresAt": "..."
}
PUT/api/v1/subscribehalka açık

amaç: Aboneliğin 2. adımı. SPL transferi onaylandıktan sonra, API anahtarınızı oluşturmak için tx imzasını gönderin. Düz metin anahtar yalnızca BİR KEZ gösterilir.

parametreler:
  • noncePOST /subscribe'den dönen değer
  • txSig1. adımdaki memo'yu taşıyan onaylanmış SPL transfer imzası
  • ownerPubkeyödeyen cüzdanla (ve POST'a geçirilenle) eşleşmelidir
istek gövdesi:
{ "nonce": "...", "txSig": "...", "ownerPubkey": "..." }
yanıt:
{
  "apiKey": "ore_xxx (shown ONCE)",
  "subscriberId": "sub_...",
  "paidUntil": "..."
}
GET/api/v1/liveücretli (Bearer)

amaç: Mevcut tur anlık görüntüsü — her karenin şu an ne tuttuğu, kalan saniyeler ve son turun sonucu. Hafiftir; 1-2 sn aralıkla yoklamak güvenlidir.

yanıt:
mevcut tur anlık görüntüsü (deployed, count, secondsLeft, prevRound)
GET/api/v1/streamücretli (Bearer)

amaç: /live için SSE akışı. Zincir üstü tahta veya tur hesabı her değiştiğinde taze anlık görüntü iter. İstediğiniz an yeniden bağlanın — bir sonraki olay her zaman en güncel durumdur.

yanıt:
sunucu tarafı olaylar; her zincir üstü tahta / tur hesabı değişikliğinde anlık görüntü iter
GET/api/v1/statsücretli (Bearer)

amaç: Toplu ızgara istatistikleri: kümülatif isabetler üzerinde ki-kare, kare başına isabet sayısı ve yatırılan SOL, şimdiye dek yatırılan toplam SOL, etkin salon avantajı.

yanıt:
toplu (ki-kare, perGrid, totalDeployedSol, effectiveHouseEdge)
GET/api/v1/rounds?limit=100ücretli (Bearer)

amaç: Son N indekslenmiş tur, en yenisi önce. Toplu içe alım için bunu kullanın; düşük gecikmeli yeni tur uyarıları için /events/stream'i kullanın.

parametreler:
  • limitdöndürülecek tur sayısı; varsayılan 100, maks 10000
yanıt:
indekslenmiş son N tur (id, deployed[25], count[25], winningSquare, totalDeployed, totalWinnings)
GET/api/v1/rounds/{id}ücretli (Bearer)

amaç: Tek tur ayrıntısı, geçmişte imleçle gezinme için önceki/sonraki id'lerle birlikte.

parametreler:
  • idtur id (yol segmenti)
yanıt:
tek tur + önceki/sonraki id'ler
GET/api/v1/grid/{n}?limit=200ücretli (Bearer)

amaç: Kare başına istatistik artı grafik için son isabet/ıska serisi (1 = isabet, 0 = ıska).

parametreler:
  • nkare indeksi 0..24 (yol segmenti)
  • limitseri uzunluğu; varsayılan 200
yanıt:
ızgara başına istatistik + son isabet/ıska serisi (1 ≤ n ≤ 25)
GET/api/v1/events?since=N&limit=M&kind=Xücretli (Bearer)

amaç: Yoklamalı olay günlüğü. drought-broken, big-round, tier-crossing, milestones, abonelik değişikliklerini içerir. `since` imlecinden daha yeni olayları çekin.

parametreler:
  • sinceid imleci; yalnızca id > since olan olaylar döner
  • limitçağrı başına maks olay; varsayılan 100
  • kindisteğe bağlı filtre: drought_broken | big_round | tier | milestone | subscription
yanıt:
{
  "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ücretli (Bearer)

amaç: /events ile aynı olay günlüğünün SSE akışı. Bağlanınca son 50 olayı (veya imleçten beri olanları) tekrar oynatır, ardından her yeni olayı canlı iter.

parametreler:
  • sinceisteğe bağlı tekrar oynatma imleci; atlanırsa son 50 oynatılır
  • kindisteğe bağlı filtre (/events ile aynı küme)
yanıt:
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ücretli (Bearer)

amaç: Toplu tarihsel dışa aktarma — tüm indekslenmiş turları `from` / `nextFrom` imleçleriyle sayfalayın. Bunu kendi veritabanınızı bootstrap etmek için kullanın, ardından artımlı güncellemeler için /events/stream'e geçin.

parametreler:
  • frombaşlangıç tur id (dahil)
  • toisteğe bağlı bitiş tur id (dahil)
  • limitsayfa boyutu; varsayılan 5000, maks 10000
yanıt:
{
  "count": 5000,
  "from": 228237,
  "to": 233236,
  "hasMore": true,
  "nextFrom": 233237,
  "rounds": [ { id, deployed[25], count[25], winningSquare, totalDeployed, totalWinnings }, ... ]
}
POST/api/v1/reissuehalka açık

amaç: API anahtarı rotasyonunun 1. adımı. Aktif aboneliğe sahip cüzdanla imzalamanız gereken bir mesaj döner.

parametreler:
  • ownerPubkeybaşlangıçta abone olan cüzdan
istek gövdesi:
{ "ownerPubkey": "..." }
yanıt:
{ "nonce": "ore-reissue-...", "message": "OREStats reissue ... @ ...", "expiresAt": "..." }
PUT/api/v1/reissuehalka açık

amaç: Rotasyonun 2. adımı. Cüzdan imzasını gönderin; eski anahtar derhal iptal edilir ve yeni bir anahtar dönülür (yine yalnızca BİR KEZ gösterilir).

parametreler:
  • noncePOST /reissue'den dönen değer
  • ownerPubkeyPOST ile aynı cüzdan
  • signatureBase64mesaj dizesinin base64 kodlu ed25519 imzası
istek gövdesi:
{ "nonce": "...", "ownerPubkey": "...", "signatureBase64": "..." }
yanıt:
{ "apiKey": "ore_xxx (NEW, old key revoked)", "subscriberId": "sub_...", "paidUntil": "..." }

Strateji Lab'ı

Parametreli stratejiler oluşturun, geriye dönük ve ileri test edin. create / backtest / analytics uç noktaları tek bir DSL şeklini paylaşır — bu bölümün altındaki değer referansına bakın.

POST/api/v1/lab/strategiesücretli (Bearer)

amaç: Bir strateji oluşturun. Aktif olduğunda OREStats her yeni tur için otomatik olarak kâğıt-ticaret tahmini kaydeder ve ileri test istatistiklerini sunar.

parametreler:
  • namegörünen etiket, boş olmayan dize
  • dsltam Strateji DSL — base_strategy, params, isteğe bağlı filters[]. Aşağıdaki değer referansına bakın.
istek gövdesi:
{
  "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 }
    ]
  }
}
yanıt:
{
  "strategy": {
    "id": "...", "owner": "...", "name": "...",
    "dsl": { "base_strategy": "...", "params": { ... }, "filters": [ ... ] },
    "createdAt": "...", "updatedAt": "...", "active": true
  }
}
GET/api/v1/lab/strategiesücretli (Bearer)

amaç: Sahip olduğunuz stratejileri canlı ileri test istatistikleriyle birlikte listele (sonuçlanan turlar, kazanma sayısı, gerçek tur sonuçlarına dayalı ROI).

yanıt:
{
  "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}ücretli (Bearer)

amaç: Sahip olduğunuz tek bir stratejiyi tahmin sayısıyla birlikte getirin.

parametreler:
  • idstrateji id (yol segmenti)
yanıt:
{ "strategy": { ... }, "predictionCount": 412 }
PATCH/api/v1/lab/strategies/{id}ücretli (Bearer)

amaç: Bir stratejiyi yeniden adlandırın veya aktif bayrağını değiştirin. Pasif stratejilerin yeni turlarda tahmini durur ancak geçmişleri korunur.

parametreler:
  • nameyeni görünen ad (isteğe bağlı)
  • activetahminlere devam etmek için true, duraklatmak için false (isteğe bağlı)
istek gövdesi:
{ "name": "renamed", "active": false }
yanıt:
{ "strategy": { ... } }
DELETE/api/v1/lab/strategies/{id}ücretli (Bearer)

amaç: Sahip olduğunuz bir stratejiyi tamamen silin. Bağlı tüm tahminler kaldırılır; varsa liderlik tablosu girdisi kaybolur.

parametreler:
  • idstrateji id (yol segmenti)
yanıt:
{ "ok": true }
GET/api/v1/lab/strategies/{id}/forwardücretli (Bearer)

amaç: Bir strateji için ileri test istatistikleri: net SOL, ROI, kazanma oranı, sermaye eğrisi, maksimum drawdown, maksimum kayıp serisi, bekleyen sonuçlanmamış turlar.

parametreler:
  • idstrateji id (yol segmenti)
yanıt:
{
  "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ücretli (Bearer)

amaç: Bir DSL'i indekslenmiş tarihsel turlar üzerinde yeniden oynatın. Tur başına PnL, kare başına katkı, sermaye eğrisi ve erken çıkış sebebi dahil tam BacktestResult döner.

parametreler:
  • dslStrateji DSL (create ile aynı şekil)
  • fromRoundIdisteğe bağlı yeniden oynatma penceresinin dahil alt sınırı
  • toRoundIdisteğe bağlı dahil üst sınır
istek gövdesi:
{
  "dsl": { "base_strategy": "...", "params": { ... }, "filters": [ ... ] },
  "fromRoundId": 200000,
  "toRoundId": 247000
}
yanıt:
{
  "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ücretli (Bearer)

amaç: Ağır analitik paketi — Monte-Carlo güven aralıkları artı parametre taramaları üzerinde iç içe dört geriye dönük test. İlk çağrıda 3-6 sn, sıcak önbellekte saniye altı bekleyin. Önbellek anahtarı DSL'dir.

parametreler:
  • dslStrateji DSL (backtest ile aynı şekil)
istek gövdesi:
{ "dsl": { ... } }
yanıt:
{ "analytics": { ... } }
GET/api/v1/lab/leaderboardhalka açık

amaç: Halka açık en iyi stratejiler listesi. Yalnızca ROI / örneklem boyutu açıktır; DSL, bir abone ayrıntı uç noktasını görüntüleyene kadar gizlidir.

yanıt:
{
  "generatedAt": "...",
  "minRoundsToQualify": 1000,
  "count": 14,
  "entries": [
    { "id": "...", "name": "...", "ownerShort": "abcd...wxyz", "roiPercent": ..., "roundsSettled": ... },
    ...
  ]
}
GET/api/v1/lab/leaderboard/{id}ücretli (Bearer)

amaç: Tek bir liderlik tablosu girdisinin tam DSL'i, ileri test özeti ve sermaye eğrisi. Abonelere kapatılmıştır — halka açık kullanıcılar yalnızca üst düzey ROI'yi görür.

parametreler:
  • idstrateji id (yol segmenti)
yanıt:
{
  "strategy": {
    "id": "...", "name": "...", "ownerShort": "abcd...wxyz",
    "dsl": { ... },
    "createdAt": "..."
  },
  "forwardTest": {
    "roundsSettled": ...,
    "netProfitSol": ...,
    "equityCurve": [{ "round": ..., "balanceLamports": ... }, ...]
  }
}

Strateji DSL — kabul edilen değerler

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.* sayısal aralıklar (sunucu menzil dışı değerleri kırpar):
  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

kotalar:
  max 100 strategies per account

Limitler ve adil kullanım

  • API anahtarı başına: 5 istek/sn (patlama 60). Aşımda Retry-After ile 429.
  • Başlıktaki API anahtarı tek kullanımlık düz metindir: saklayın — yalnızca özet (hash) tutulur.
  • Anahtar paylaşımı algılanabilir (eşzamanlı IP'ler) ve iptale yol açabilir.
  • Panel uç noktaları (/api/live*) tarayıcı oturumu + Origin eşleşmesi gerektirir — programatik kullanım için değildir.