66Solarix is a universal Solana indexer built in Rust. Give it any Anchor program ID and it fetches the IDL directly from the blockchain, generates a typed PostgreSQL schema at runtime — no codegen, no recompile, no redeploy — then begins indexing transactions and account states through a concurrent backfill-plus-streaming pipeline. Decoded data is immediately queryable through a 13-endpoint REST API with typed filters, cursor pagination, and time-series aggregations. Built for the [ Superteam Ukraine bounty] ( https://earn.superteam.fun/ ) (Middle level, 500 USDG).
77
88```
9- POST /api/programs { "program_id": "JUP6LkMUje6dvM2FeAg8pUhfHayPdTHaFxVMLsXkICL " }
9+ POST /api/programs { "program_id": "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 " }
1010
1111 Solarix: fetch IDL on-chain --> CREATE SCHEMA + TABLES --> backfill + stream --> query API ready
1212```
@@ -200,13 +200,13 @@ For the full architecture deep-dive, see [docs/architecture.md](docs/architectur
200200 ``` bash
201201 curl -s -X POST http://localhost:3000/api/programs \
202202 -H " Content-Type: application/json" \
203- -d ' {"program_id":"JUP6LkMUje6dvM2FeAg8pUhfHayPdTHaFxVMLsXkICL "}' | jq
203+ -d ' {"program_id":"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 "}' | jq
204204 ```
205205
206206 ``` json
207207 {
208208 "data" : {
209- "program_id" : " JUP6LkMUje6dvM2FeAg8pUhfHayPdTHaFxVMLsXkICL " ,
209+ "program_id" : " JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 " ,
210210 "status" : " schema_created" ,
211211 "schema_name" : " jupiter_v6_jup6lkmu"
212212 }
@@ -217,16 +217,16 @@ For the full architecture deep-dive, see [docs/architecture.md](docs/architectur
217217
218218 ``` bash
219219 # Decoded swap instructions (cursor-paginated)
220- curl -s " http://localhost:3000/api/programs/JUP6LkMUje6dvM2FeAg8pUhfHayPdTHaFxVMLsXkICL /instructions/route?limit=5" | jq
220+ curl -s " http://localhost:3000/api/programs/JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 /instructions/route?limit=5" | jq
221221
222222 # Filter: swaps where in_amount > 1 SOL (1,000,000,000 lamports)
223- curl -s " http://localhost:3000/api/programs/JUP6LkMUje6dvM2FeAg8pUhfHayPdTHaFxVMLsXkICL /instructions/route?filter=data.in_amount_gt=1000000000&limit=10" | jq
223+ curl -s " http://localhost:3000/api/programs/JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 /instructions/route?filter=data.in_amount_gt=1000000000&limit=10" | jq
224224
225225 # Time-series swap count by hour
226- curl -s " http://localhost:3000/api/programs/JUP6LkMUje6dvM2FeAg8pUhfHayPdTHaFxVMLsXkICL /instructions/route/count?interval=hour" | jq
226+ curl -s " http://localhost:3000/api/programs/JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 /instructions/route/count?interval=hour" | jq
227227
228228 # Indexing statistics
229- curl -s http://localhost:3000/api/programs/JUP6LkMUje6dvM2FeAg8pUhfHayPdTHaFxVMLsXkICL /stats | jq
229+ curl -s http://localhost:3000/api/programs/JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 /stats | jq
230230 ```
231231
2322325 . Run the automated end-to-end demo:
@@ -288,20 +288,20 @@ Base URL: `http://localhost:3000`
288288# Register a program
289289curl -s -X POST http://localhost:3000/api/programs \
290290 -H " Content-Type: application/json" \
291- -d ' {"program_id":"JUP6LkMUje6dvM2FeAg8pUhfHayPdTHaFxVMLsXkICL "}' | jq
291+ -d ' {"program_id":"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 "}' | jq
292292# {
293293# "data": {
294- # "program_id": "JUP6LkMUje6dvM2FeAg8pUhfHayPdTHaFxVMLsXkICL ",
294+ # "program_id": "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 ",
295295# "status": "schema_created",
296296# "schema_name": "jupiter_v6_jup6lkmu"
297297# }
298298# }
299299
300300# Indexing statistics
301- curl -s http://localhost:3000/api/programs/JUP6LkMUje6dvM2FeAg8pUhfHayPdTHaFxVMLsXkICL /stats | jq
301+ curl -s http://localhost:3000/api/programs/JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 /stats | jq
302302# {
303303# "data": {
304- # "program_id": "JUP6LkMUje6dvM2FeAg8pUhfHayPdTHaFxVMLsXkICL ",
304+ # "program_id": "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 ",
305305# "total_instructions": 142831,
306306# "total_accounts": 9204,
307307# "last_processed_slot": 318472910
@@ -322,19 +322,19 @@ curl -s http://localhost:3000/api/programs/JUP6LkMUje6dvM2FeAg8pUhfHayPdTHaFxVML
322322
323323``` bash
324324# Query decoded swap instructions (cursor pagination)
325- curl -s " http://localhost:3000/api/programs/JUP6LkMUje6dvM2FeAg8pUhfHayPdTHaFxVMLsXkICL /instructions/route?limit=5" | jq
325+ curl -s " http://localhost:3000/api/programs/JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 /instructions/route?limit=5" | jq
326326
327327# Filter: swaps with in_amount > 1 SOL
328- curl -s " http://localhost:3000/api/programs/JUP6LkMUje6dvM2FeAg8pUhfHayPdTHaFxVMLsXkICL /instructions/route?filter=data.in_amount_gt=1000000000&limit=10" | jq
328+ curl -s " http://localhost:3000/api/programs/JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 /instructions/route?filter=data.in_amount_gt=1000000000&limit=10" | jq
329329
330330# Time-series count by hour
331- curl -s " http://localhost:3000/api/programs/JUP6LkMUje6dvM2FeAg8pUhfHayPdTHaFxVMLsXkICL /instructions/route/count?interval=hour" | jq
331+ curl -s " http://localhost:3000/api/programs/JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 /instructions/route/count?interval=hour" | jq
332332
333333# List account types
334- curl -s http://localhost:3000/api/programs/JUP6LkMUje6dvM2FeAg8pUhfHayPdTHaFxVMLsXkICL /accounts | jq
334+ curl -s http://localhost:3000/api/programs/JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 /accounts | jq
335335
336336# Query accounts with offset pagination
337- curl -s " http://localhost:3000/api/programs/JUP6LkMUje6dvM2FeAg8pUhfHayPdTHaFxVMLsXkICL /accounts/TokenLedger?limit=5&offset=0" | jq
337+ curl -s " http://localhost:3000/api/programs/JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 /accounts/TokenLedger?limit=5&offset=0" | jq
338338```
339339
340340### Observability
@@ -348,11 +348,11 @@ curl -s "http://localhost:3000/api/programs/JUP6LkMUje6dvM2FeAg8pUhfHayPdTHaFxVM
348348# Health check
349349curl -s http://localhost:3000/health | jq
350350# {
351- # "status": "ok ",
351+ # "status": "healthy ",
352352# "database": "connected",
353353# "programs": [
354354# {
355- # "program_id": "JUP6LkMUje6dvM2FeAg8pUhfHayPdTHaFxVMLsXkICL ",
355+ # "program_id": "JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 ",
356356# "pipeline_status": "indexing",
357357# "last_processed_slot": 318472910
358358# }
@@ -403,7 +403,7 @@ Combine multiple filters with `&`:
403403All errors return structured JSON:
404404
405405``` bash
406- curl -s " http://localhost:3000/api/programs/JUP6LkMUje6dvM2FeAg8pUhfHayPdTHaFxVMLsXkICL /instructions/route?filter=nonexistent_gt=1" | jq
406+ curl -s " http://localhost:3000/api/programs/JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4 /instructions/route?filter=nonexistent_gt=1" | jq
407407```
408408
409409``` json
0 commit comments