OREStats API v1
نقاط النهاية المدفوعة تحت /api/v1/*. جميعها تتطلب Authorization: Bearer ore_…. اشترك من /pricing.
الاشتراك عبر API
- POST /api/v1/subscribe مع
{ ownerPubkey }— يُعيد الخادم nonce فريداً + مبلغ ORE. - أرسل مبلغ priceOre من ORE من الخطوة 1 إلى عنوان الخزينة (يُعاد في نفس الاستجابة)، مع إرفاق nonce كتعليمة SPL Memo.
- PUT /api/v1/subscribe مع
{ nonce, txSig, ownerPubkey }— يتحقق الخادم على السلسلة، يفعّل الاشتراك، يُعيد مفتاح API. - استخدم
Authorization: Bearer ore_…ترويسة في كل استدعاءات /api/v1/*.
تفاصيل الدفع
A9HLwE6wCm7Hedo7771nwsX8TyArv7rgdVQMo9dgDGZForeoU2P8bN6jkk3jbaiVxYnG1dCXcYxwhwyK9jSybcp/api/v1/pricingعامالغرض: السعر الحالي (بـ ORE) لشهر واحد من الوصول. يتصاعد السعر مع انضمام مزيد من المشتركين — تخبرك الاستجابة أيضاً بالعتبة التالية والسعر بعدها.
{
"activeSubs": 17,
"oreNow": 0.1,
"nextThreshold": 100,
"oreAtNextThreshold": 0.2,
"treasury": "...",
"oreMint": "..."
}/api/v1/subscribeعامالغرض: الخطوة 1 من الاشتراك. تُعيد تعليمة تحويل SPL تستخدم مرة واحدة (memo + المبلغ) يجب عليك توقيعها بمحفظة المالك وبثها على Solana.
ownerPubkey— Solana pubkey بصيغة base58 سيمتلك مفتاح API
{ "ownerPubkey": "..." }{
"nonce": "ore-pay-...",
"priceOre": 0.1,
"instructions": { "to": "...", "memo": "ore-pay-...", "amountBaseUnits": "10000000000", "mint": "..." },
"expiresAt": "..."
}/api/v1/subscribeعامالغرض: الخطوة 2 من الاشتراك. بعد تأكيد تحويل SPL، أرسل توقيع المعاملة لإصدار مفتاح API. النص الصريح للمفتاح يُعرض مرة واحدة.
nonce— القيمة المُعادة من POST /subscribetxSig— توقيع تحويل SPL المؤكَّد الذي يحمل memo من الخطوة 1ownerPubkey— يجب أن تطابق المحفظة التي دفعت (والمُمررة إلى POST)
{ "nonce": "...", "txSig": "...", "ownerPubkey": "..." }{
"apiKey": "ore_xxx (shown ONCE)",
"subscriberId": "sub_...",
"paidUntil": "..."
}/api/v1/liveمدفوع (Bearer)الغرض: لقطة الجولة الحالية — ما تحتوي عليه كل خانة الآن، الثواني المتبقية، ونتيجة الجولة الأخيرة. رخيصة؛ آمنة للاستعلام كل 1-2 ث.
لقطة الجولة الحالية (deployed, count, secondsLeft, prevRound)
/api/v1/streamمدفوع (Bearer)الغرض: تدفق SSE لـ /live. يدفع لقطة جديدة كلما تغير حساب board أو round على السلسلة. أعد الاتصال في أي وقت — الحدث التالي هو دائماً أحدث حالة.
أحداث يرسلها الخادم؛ تدفع لقطة عند كل تغيير في حساب board / round على السلسلة
/api/v1/statsمدفوع (Bearer)الغرض: إحصاءات شبكة مجمَّعة: مربع كاي على الإصابات التراكمية، عدد الإصابات و SOL المنشور لكل خانة، إجمالي SOL المنشور على الإطلاق، حصة البيت الفعلية.
مجمَّعة (chi-squared, perGrid, totalDeployedSol, effectiveHouseEdge)
/api/v1/rounds?limit=100مدفوع (Bearer)الغرض: آخر N جولة مفهرسة، الأحدث أولاً. استخدم هذه للاستيعاب المجمَّع؛ ولتنبيهات الجولات الجديدة بزمن استجابة منخفض استخدم /events/stream.
limit— عدد الجولات المُعادة؛ الافتراضي 100، الأقصى 10000
آخر N جولة مفهرسة (id, deployed[25], count[25], winningSquare, totalDeployed, totalWinnings)
/api/v1/rounds/{id}مدفوع (Bearer)الغرض: تفاصيل جولة واحدة مع معرّفات prev/next للتنقل بمؤشر عبر التاريخ.
id— معرّف الجولة (مقطع المسار)
جولة واحدة + معرّفات prev/next
/api/v1/grid/{n}?limit=200مدفوع (Bearer)الغرض: إحصاءات لكل خانة بالإضافة إلى سلسلة الإصابات/الإخفاقات الأخيرة (1 = إصابة، 0 = إخفاق) لرسم المخططات.
n— فهرس الخانة 0..24 (مقطع المسار)limit— طول السلسلة؛ الافتراضي 200
إحصاء لكل خانة + سلسلة الإصابات/الإخفاقات الأخيرة (1 ≤ n ≤ 25)
/api/v1/events?since=N&limit=M&kind=Xمدفوع (Bearer)الغرض: سجل أحداث بالاستعلام الدوري. يشمل drought-broken وbig-round وعبور الدرجات والمعالم وتغيرات الاشتراك. اسحب الأحداث الأحدث من مؤشر `since`.
since— مؤشر معرّف؛ تُعاد فقط الأحداث ذات id > sincelimit— أقصى عدد للأحداث في الاستدعاء؛ الافتراضي 100kind— مرشّح اختياري: 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 },
...
]
}/api/v1/events/stream?since=N&kind=Xمدفوع (Bearer)الغرض: تدفق SSE لنفس سجل أحداث /events. يُعيد بث آخر 50 حدثاً (أو الأحداث منذ المؤشر) عند الاتصال، ثم يدفع كل حدث جديد مباشرةً.
since— مؤشر إعادة بث اختياري؛ إن حُذف، تُعاد آخر 50kind— مرشّح اختياري (نفس مجموعة /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).
/api/v1/dump?from=X&to=Y&limit=10000مدفوع (Bearer)الغرض: تصدير تاريخي مجمَّع — تصفّح كل الجولات المفهرسة عبر مؤشرات `from` / `nextFrom`. استخدم هذه لبدء قاعدة بياناتك الخاصة، ثم انتقل إلى /events/stream للتحديثات التدريجية.
from— معرّف الجولة الابتدائية (شامل)to— معرّف الجولة الختامية (اختياري، شامل)limit— حجم الصفحة؛ الافتراضي 5000، الأقصى 10000
{
"count": 5000,
"from": 228237,
"to": 233236,
"hasMore": true,
"nextFrom": 233237,
"rounds": [ { id, deployed[25], count[25], winningSquare, totalDeployed, totalWinnings }, ... ]
}/api/v1/reissueعامالغرض: الخطوة 1 من تدوير مفتاح API. تُعيد رسالة يجب عليك توقيعها بالمحفظة التي تملك الاشتراك الفعّال.
ownerPubkey— المحفظة التي اشتركت أصلاً
{ "ownerPubkey": "..." }{ "nonce": "ore-reissue-...", "message": "OREStats reissue ... @ ...", "expiresAt": "..." }/api/v1/reissueعامالغرض: الخطوة 2 من التدوير. أرسل توقيع المحفظة؛ يُلغى المفتاح القديم فوراً ويُعاد مفتاح جديد (يُعرض أيضاً مرة واحدة).
nonce— القيمة المُعادة من POST /reissueownerPubkey— نفس المحفظة في POSTsignatureBase64— توقيع ed25519 مُرمَّز base64 لنص الرسالة
{ "nonce": "...", "ownerPubkey": "...", "signatureBase64": "..." }{ "apiKey": "ore_xxx (NEW, old key revoked)", "subscriberId": "sub_...", "paidUntil": "..." }مختبر الاستراتيجيات
ابنِ واختبر رجعياً وأمامياً استراتيجيات معاملاتية. نقاط نهاية create / backtest / analytics تتشارك شكل DSL واحداً — راجع مرجع القيم في أسفل هذا القسم.
/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
}
}/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 }
},
...
]
}/api/v1/lab/strategies/{id}مدفوع (Bearer)الغرض: اجلب استراتيجية واحدة تملكها، مع عدد تنبؤاتها.
id— معرّف الاستراتيجية (مقطع المسار)
{ "strategy": { ... }, "predictionCount": 412 }/api/v1/lab/strategies/{id}مدفوع (Bearer)الغرض: أعد تسمية استراتيجية أو بدّل علم تفعيلها. الاستراتيجيات غير المفعَّلة تتوقف عن التنبؤ بالجولات الجديدة لكن تاريخها محفوظ.
name— اسم العرض الجديد (اختياري)active— true لاستئناف التنبؤ، false للإيقاف (اختياري)
{ "name": "renamed", "active": false }{ "strategy": { ... } }/api/v1/lab/strategies/{id}مدفوع (Bearer)الغرض: حذف نهائي لاستراتيجية تملكها. تُحذف كل التنبؤات المرتبطة؛ ويختفي إدخال لوحة المتصدرين (إن وُجد).
id— معرّف الاستراتيجية (مقطع المسار)
{ "ok": true }/api/v1/lab/strategies/{id}/forwardمدفوع (Bearer)الغرض: إحصاءات الاختبار الأمامي لاستراتيجية واحدة: صافي SOL، ROI، معدل الفوز، منحنى الأسهم، أقصى تراجع، أطول سلسلة خسارة، الجولات المعلَّقة.
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
}/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": [...]
}
}/api/v1/lab/analyticsمدفوع (Bearer)الغرض: حزمة تحليلات ثقيلة — فترات ثقة مونتي كارلو زائد أربعة اختبارات رجعية متداخلة عبر مسوحات للمعاملات. توقّع 3-6 ث في الاستدعاء الأول، أقل من ثانية في الذاكرة المؤقتة الدافئة. مفتاح التخزين هو DSL.
dsl— DSL الاستراتيجية (نفس شكل backtest)
{ "dsl": { ... } }{ "analytics": { ... } }/api/v1/lab/leaderboardعامالغرض: قائمة أفضل الاستراتيجيات العامة. يُكشف فقط ROI / حجم العينة؛ يُخفى DSL حتى يعرض المشترك نقطة نهاية التفاصيل.
{
"generatedAt": "...",
"minRoundsToQualify": 1000,
"count": 14,
"entries": [
{ "id": "...", "name": "...", "ownerShort": "abcd...wxyz", "roiPercent": ..., "roundsSettled": ... },
...
]
}/api/v1/lab/leaderboard/{id}مدفوع (Bearer)الغرض: DSL كامل لإدخال واحد من لوحة المتصدرين، بالإضافة إلى ملخص اختباره الأمامي ومنحنى أسهمه. مُتاح للمشتركين — المستخدمون العموميون لا يرون سوى ROI الرئيسي.
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 طلبات/ث (دفعة 60). 429 مع
Retry-Afterعند التجاوز. - مفتاح API في الترويسة نصّ صريح يُستخدم مرة واحدة: احفظه — لا يُحفظ لدينا سوى التجزئة.
- مشاركة المفاتيح قابلة للكشف (IPs متزامنة) وقد تستدعي الإلغاء.
- نقاط نهاية لوحة المعلومات (
/api/live*) تتطلب جلسة متصفح + تطابق Origin — ليست للاستخدام البرمجي.