OREStats API v1
Các endpoint trả phí dưới /api/v1/*. Tất cả yêu cầu Authorization: Bearer ore_…. Đăng ký tại /pricing.
Đăng ký qua API
- POST /api/v1/subscribe với
{ ownerPubkey }— server trả về một nonce duy nhất + số lượng ORE. - Gửi số lượng priceOre của ORE từ bước 1 đến địa chỉ treasury (trả về trong cùng phản hồi), kèm nonce như một instruction SPL Memo.
- PUT /api/v1/subscribe với
{ nonce, txSig, ownerPubkey }— server xác minh on-chain, kích hoạt gói, trả về khóa API của bạn. - Dùng
Authorization: Bearer ore_…header trên tất cả các lệnh gọi /api/v1/*.
Chi tiết thanh toán
A9HLwE6wCm7Hedo7771nwsX8TyArv7rgdVQMo9dgDGZForeoU2P8bN6jkk3jbaiVxYnG1dCXcYxwhwyK9jSybcp/api/v1/pricingcông khaimục đích: Giá hiện tại (tính bằng ORE) cho một tháng truy cập. Giá tăng theo bậc khi nhiều người đăng ký tham gia — phản hồi cũng cho biết ngưỡng tiếp theo và giá sau đó.
{
"activeSubs": 17,
"oreNow": 0.1,
"nextThreshold": 100,
"oreAtNextThreshold": 0.2,
"treasury": "...",
"oreMint": "..."
}/api/v1/subscribecông khaimục đích: Bước 1 của việc đăng ký. Trả về một instruction chuyển SPL dùng một lần (memo + amount) mà bạn phải ký bằng ví chủ sở hữu và phát lên Solana.
ownerPubkey— pubkey Solana base58 sẽ sở hữu khóa API
{ "ownerPubkey": "..." }{
"nonce": "ore-pay-...",
"priceOre": 0.1,
"instructions": { "to": "...", "memo": "ore-pay-...", "amountBaseUnits": "10000000000", "mint": "..." },
"expiresAt": "..."
}/api/v1/subscribecông khaimục đích: Bước 2 của việc đăng ký. Sau khi lệnh chuyển SPL xác nhận, gửi chữ ký giao dịch để cấp khóa API. Khóa plaintext chỉ hiện MỘT LẦN.
nonce— giá trị trả về từ POST /subscribetxSig— chữ ký lệnh chuyển SPL đã xác nhận mang memo từ bước 1ownerPubkey— phải khớp với ví đã trả tiền (và đã truyền cho POST)
{ "nonce": "...", "txSig": "...", "ownerPubkey": "..." }{
"apiKey": "ore_xxx (shown ONCE)",
"subscriberId": "sub_...",
"paidUntil": "..."
}/api/v1/livetrả phí (Bearer)mục đích: Snapshot vòng hiện tại — mỗi ô đang giữ bao nhiêu ngay lúc này, số giây còn lại, và kết quả vòng trước. Rẻ; an toàn để poll mỗi 1-2 s.
snapshot vòng hiện tại (deployed, count, secondsLeft, prevRound)
/api/v1/streamtrả phí (Bearer)mục đích: Feed SSE của /live. Đẩy snapshot mới mỗi khi tài khoản board hoặc round on-chain thay đổi. Có thể kết nối lại bất cứ lúc nào — sự kiện kế tiếp luôn là trạng thái mới nhất.
server-sent events; đẩy snapshot mỗi khi tài khoản board / round on-chain thay đổi
/api/v1/statstrả phí (Bearer)mục đích: Thống kê lưới tổng hợp: chi bình phương trên tổng số lần trúng, số lần trúng & SOL triển khai theo từng ô, tổng SOL đã từng triển khai, biên nhà cái hữu hiệu.
tổng hợp (chi bình phương, perGrid, totalDeployedSol, effectiveHouseEdge)
/api/v1/rounds?limit=100trả phí (Bearer)mục đích: N vòng đã lập chỉ mục gần nhất, mới nhất trước. Dùng cho batch ingest; với cảnh báo vòng mới độ trễ thấp dùng /events/stream.
limit— số vòng cần trả về; mặc định 100, tối đa 10000
N vòng đã lập chỉ mục gần nhất (id, deployed[25], count[25], winningSquare, totalDeployed, totalWinnings)
/api/v1/rounds/{id}trả phí (Bearer)mục đích: Chi tiết một vòng với id prev/next để duyệt lịch sử theo cursor.
id— id vòng (đoạn path)
một vòng + id prev/next
/api/v1/grid/{n}?limit=200trả phí (Bearer)mục đích: Thống kê theo ô cùng chuỗi hit/miss gần nhất (1 = trúng, 0 = trượt) để vẽ biểu đồ.
n— chỉ số ô 0..24 (đoạn path)limit— độ dài chuỗi; mặc định 200
thống kê từng ô + chuỗi hit/miss gần nhất (1 ≤ n ≤ 25)
/api/v1/events?since=N&limit=M&kind=Xtrả phí (Bearer)mục đích: Log sự kiện theo polling. Bao gồm drought-broken, big-round, tier-crossing, milestone, thay đổi subscription. Lấy các sự kiện mới hơn cursor `since`.
since— cursor id; chỉ trả về các sự kiện có id > sincelimit— tối đa sự kiện mỗi lần gọi; mặc định 100kind— bộ lọc tùy chọn: 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=Xtrả phí (Bearer)mục đích: Feed SSE của cùng log sự kiện với /events. Phát lại 50 sự kiện gần nhất (hoặc các sự kiện kể từ cursor) khi kết nối, sau đó đẩy từng sự kiện mới trực tiếp.
since— cursor replay tùy chọn; nếu bỏ qua, phát lại 50 sự kiện gần nhấtkind— bộ lọc tùy chọn (cùng tập với /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=10000trả phí (Bearer)mục đích: Xuất lịch sử hàng loạt — phân trang qua tất cả các vòng đã lập chỉ mục bằng cursor `from` / `nextFrom`. Dùng để khởi tạo cơ sở dữ liệu riêng, sau đó chuyển sang /events/stream để cập nhật tăng dần.
from— id vòng bắt đầu (bao gồm)to— id vòng kết thúc tùy chọn (bao gồm)limit— cỡ trang; mặc định 5000, tối đa 10000
{
"count": 5000,
"from": 228237,
"to": 233236,
"hasMore": true,
"nextFrom": 233237,
"rounds": [ { id, deployed[25], count[25], winningSquare, totalDeployed, totalWinnings }, ... ]
}/api/v1/reissuecông khaimục đích: Bước 1 của việc xoay khóa API. Trả về một tin nhắn bạn phải ký bằng ví sở hữu gói đăng ký đang hoạt động.
ownerPubkey— ví đã đăng ký ban đầu
{ "ownerPubkey": "..." }{ "nonce": "ore-reissue-...", "message": "OREStats reissue ... @ ...", "expiresAt": "..." }/api/v1/reissuecông khaimục đích: Bước 2 của xoay khóa. Gửi chữ ký ví; khóa cũ bị thu hồi ngay lập tức và một khóa mới được trả về (cũng chỉ hiện MỘT LẦN).
nonce— giá trị trả về từ POST /reissueownerPubkey— cùng ví với POSTsignatureBase64— chữ ký ed25519 mã hóa base64 của chuỗi tin nhắn
{ "nonce": "...", "ownerPubkey": "...", "signatureBase64": "..." }{ "apiKey": "ore_xxx (NEW, old key revoked)", "subscriberId": "sub_...", "paidUntil": "..." }Strategy Lab
Xây dựng, backtest và forward-test các chiến lược có tham số. Các endpoint create / backtest / analytics chia sẻ chung một dạng DSL — xem tham chiếu giá trị ở cuối phần này.
/api/v1/lab/strategiestrả phí (Bearer)mục đích: Tạo một chiến lược. Khi đã active, OREStats tự động ghi nhận một dự đoán paper-trading cho mỗi vòng mới và đưa ra thống kê forward-test.
name— nhãn hiển thị, chuỗi không rỗngdsl— Strategy DSL đầy đủ — base_strategy, params, filters[] tùy chọn. Xem tham chiếu giá trị bên dưới.
{
"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/strategiestrả phí (Bearer)mục đích: Liệt kê các chiến lược bạn sở hữu với thống kê forward-test trực tiếp (số vòng đã settle, số lần thắng, ROI trên kết quả vòng thực tế).
{
"count": 3,
"strategies": [
{
"id": "...", "name": "...", "dsl": { ... }, "active": true,
"stats": { "roundsSettled": 412, "roundsWon": 88, "netProfitSol": 0.123, "roiPercent": 4.7 }
},
...
]
}/api/v1/lab/strategies/{id}trả phí (Bearer)mục đích: Lấy một chiến lược bạn sở hữu, kèm số lượng dự đoán.
id— id chiến lược (đoạn path)
{ "strategy": { ... }, "predictionCount": 412 }/api/v1/lab/strategies/{id}trả phí (Bearer)mục đích: Đổi tên một chiến lược hoặc bật/tắt cờ active. Các chiến lược inactive ngừng được dự đoán trên các vòng mới nhưng lịch sử của chúng được giữ lại.
name— tên hiển thị mới (tùy chọn)active— true để tiếp tục dự đoán, false để tạm dừng (tùy chọn)
{ "name": "renamed", "active": false }{ "strategy": { ... } }/api/v1/lab/strategies/{id}trả phí (Bearer)mục đích: Xóa cứng một chiến lược bạn sở hữu. Tất cả dự đoán liên kết bị xóa; bản ghi bảng xếp hạng (nếu có) biến mất.
id— id chiến lược (đoạn path)
{ "ok": true }/api/v1/lab/strategies/{id}/forwardtrả phí (Bearer)mục đích: Thống kê forward-test cho một chiến lược: SOL ròng, ROI, tỉ lệ thắng, đường cong vốn, max drawdown, chuỗi thua dài nhất, vòng chưa settle.
id— id chiến lược (đoạn path)
{
"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/backtesttrả phí (Bearer)mục đích: Phát lại một DSL trên các vòng lịch sử đã lập chỉ mục. Trả về BacktestResult đầy đủ gồm PnL theo từng vòng, đóng góp theo từng ô, đường cong vốn và lý do thoát sớm.
dsl— Strategy DSL (cùng dạng với create)fromRoundId— cận dưới bao gồm của cửa sổ phát lại tùy chọntoRoundId— cận trên bao gồm tùy chọn
{
"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/analyticstrả phí (Bearer)mục đích: Gói phân tích nặng — khoảng tin cậy Monte Carlo cộng với bốn backtest lồng nhau qua các quét tham số. Dự kiến 3-6 s ở lần gọi đầu, dưới một giây khi cache nóng. Khóa cache là DSL.
dsl— Strategy DSL (cùng dạng với backtest)
{ "dsl": { ... } }{ "analytics": { ... } }/api/v1/lab/leaderboardcông khaimục đích: Danh sách chiến lược hàng đầu công khai. Chỉ ROI / cỡ mẫu được lộ; DSL bị ẩn cho đến khi người đăng ký xem endpoint chi tiết.
{
"generatedAt": "...",
"minRoundsToQualify": 1000,
"count": 14,
"entries": [
{ "id": "...", "name": "...", "ownerShort": "abcd...wxyz", "roiPercent": ..., "roundsSettled": ... },
...
]
}/api/v1/lab/leaderboard/{id}trả phí (Bearer)mục đích: DSL đầy đủ của một mục bảng xếp hạng, kèm tóm tắt forward-test và đường cong vốn. Giới hạn cho người đăng ký — người dùng công khai chỉ thấy ROI top-line.
id— id chiến lược (đoạn path)
{
"strategy": {
"id": "...", "name": "...", "ownerShort": "abcd...wxyz",
"dsl": { ... },
"createdAt": "..."
},
"forwardTest": {
"roundsSettled": ...,
"netProfitSol": ...,
"equityCurve": [{ "round": ..., "balanceLamports": ... }, ...]
}
}Strategy DSL — giá trị được chấp nhận
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.* khoảng số (server kẹp giá trị vượt ngoài): 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 quotas: max 100 strategies per account
Giới hạn & sử dụng hợp lý
- Mỗi khóa API: 5 req/giây (burst 60). 429 với
Retry-Afterkhi vượt quá. - Khóa API trong header là plaintext dùng một lần: hãy lưu lại — chúng tôi chỉ giữ hash.
- Chia sẻ khóa có thể phát hiện được (IP đồng thời) và có thể bị thu hồi.
- Các endpoint của bảng điều khiển (
/api/live*) yêu cầu session trình duyệt + khớp Origin — chúng không dành cho sử dụng lập trình.