Explorer API

xrs-node 0.1.1port 50008

JSON-RPC 2.0 at /, REST under /v2.

Base

Basehttp://<host>:50008
Wrapper{"success":true,"data":…}
Error{"success":false,"error":"…"}, HTTP 200
Lists add"pagination":{total,page,page_size,total_pages}
page_size1–100
Account historypage_size ≤ 200, page ≤ 50, cursor before
Registry routesafter / next_after, 32 per page
Lookups by signature or hashthe newest 1,000 blocks
/v2/block/slot/{n}reaches disk
CORS*

JSON-RPC

MethodParamsResult
getBalance[address]{context:{slot}, value: lamports}
getAccountInfo[address]value:{lamports, owner:"system", executable:false, stake, isValidator}
getSlot—newest slot
getBlockHeight—chain height
getLatestBlockhash, alias getRecentBlockhash—value:{blockhash: hex, lastValidBlockHeight: slot + 150}
getBlock[slot]{blockhash, parentSlot, blockTime, blockHeight, transactions: count}
getTransaction[signature]{slot, blockTime, meta:{err, fee, instructionOutcomes}, transaction}
getSignaturesForAddress[address, {limit}]one row per receipt, newest first; limit ≤ 200
getHealth—"ok"
getVersion—{"solana-core": "1.0.0", "xeriscoin": "1.0.0"}, hard-coded
curl -s -X POST http://138.197.116.81:50008/ \ -H 'Content-Type: application/json' \ -d '{"jsonrpc":"2.0","id":1,"method":"getLatestBlockhash"}' # {"jsonrpc":"2.0","id":1,"result":{"context":{"slot":…},"value":{"blockhash":"<hex>","lastValidBlockHeight":…}}}
jsonrpc and id are required. Errors come back in result.error, never at the top level. @solana/web3.js Connection fails here: sendTransaction, requestAirdrop, getEpochInfo answer Unknown method.

REST v2

/v2/statsheight, slot, totals, tps_estimate
/v2/blocks?page=&page_size=newest first; hash hex
/v2/block/slot/{slot}block detail; rows read included
/v2/block/hash/{hash}same, memory only
/v2/transactions?page=&page_size=newest first
/v2/tx/{signature}status, instructions[], confirmations
/v2/account/{address}balance, stake, is_validator; never 404
/v2/account/{address}/transactions?page=&page_size=&before=receipts; cursor
/v2/validatorsstake, stake_percentage, blocks_proposed
/v2/tokens?after=&limit=tokens; next_after
/v2/token/{id}/holdersholders[], holder_count
/v2/rwaRWA tokens
/v2/rwa/{id}token, rwa, contract, holders
/v2/contractscontract_id, type, owner, is_active
/v2/contract/{id}?page=&page_size=contract; registries paged, limit 32
/v2/poolsreserve_a, reserve_b, fee_bps; prices as strings

The legacy /blocks, /balances, /stakes and /wallet/{address} still answer, unwrapped.

curl -s 'http://138.197.116.81:50008/v2/account/<address>/transactions?page_size=5' # {"success":true,"data":[…],"pagination":{"total":…,"page":1,"page_size":5,"total_pages":…},"cursor":…}

Transaction status

confirmedevery instruction committed
partialsome did
failednone did, or the payer could not cover the fee
includedin a block; outcome not indexed
Receipt storemeta.errinstructionOutcomes
none"OutcomeUnknown"null
no rows"ExecutionFailed"[]
all oknull[{index, ok:true}…]
some failed{"InstructionError":[index,"ExecutionFailed"]}full list

confirmations is current_slot − block_slot. Past 64 the block is final on the public path. Submit: POST /submit; layout: envelope.

Shapes

GET /v2/stats { "success": true, "data": { "block_height": usize, "current_slot": u64, "total_transactions": usize, "total_accounts": usize, "total_staked": u64, "validator_count": usize, "tps_estimate": f64 } }
GET /v2/tx/{signature} { "success": true, "data": { "signature": "<base58>", "block_slot": u64, "block_hash": "<hex>", "poh_timestamp": u128, "from": "<str>", "to": "<str>", "amount": u64, "amount_xrs": f64, "tx_type": "<str>", "details": object | null, "status": "confirmed" | "partial" | "failed" | "included", "instructions": [ { "index": u32, "status": "confirmed" | "failed" } ], "confirmations": u64 } }
GET /v2/account/{address} { "success": true, "data": { "address": "<str>", "balance": u64, "balance_xrs": f64, "stake": u64, "is_validator": bool, "blocks_proposed": u64 } }

Units

poh_timestampUnix ms
blockTimeUnix s
amountlamports
amount_xrsXRS
amount on attest_reputationscore
amount on oracle_submitvalue
amount on open_dispute, dispute_dealbond
amount on open_channeldeposit

tx_type is contract_call:<method> in live views and contract_call in receipts; account history prefixes sent: or received:.