-
Notifications
You must be signed in to change notification settings - Fork 0
Description
Summary
The REST API endpoints (e.g. /sequencer/txs, /sequencer/ready,
/rollup/sync-status) on mainnet.rpc.solaxy.io are unreachable. All HTTP
requests — regardless of path — are routed to the JSON-RPC handler, making it
impossible for community node operators to submit sovereign module calls (such
as sequencer or prover registration).
Background
In the Sovereign SDK, the HTTP server serves both:
- JSON-RPC (nested under /rpc via router.nest("/rpc", rpc_router) in
sov-stf-runner/src/http.rs:37) - REST API (on the root router: /sequencer/txs, /ledger/slots/latest, etc.)
The sendTransaction JSON-RPC method wraps transactions as Auth::Svm (regular
Solana VM transactions). Sovereign module calls (like
sequencer_registry::register) require Auth::Mod wrapping, which is only done
by the REST endpoint POST /sequencer/txs.
Current behavior
JSON-RPC works fine
curl -X POST https://mainnet.rpc.solaxy.io
-H "Content-Type: application/json"
-d '{"jsonrpc":"2.0","id":1,"method":"getSlot","params":[]}'
→ {"jsonrpc":"2.0","id":1,"result":21106547}
REST endpoint gets intercepted by JSON-RPC handler
curl -X POST https://mainnet.rpc.solaxy.io/sequencer/txs
-H "Content-Type: application/json"
-d '{"body":"AAAA"}'
→ {"jsonrpc":"2.0","id":null,"error":{"code":-32700,"message":"Parse
error"}}
Even GET requests to REST paths hit JSON-RPC
curl https://mainnet.rpc.solaxy.io/sequencer/ready
→ "Used HTTP Method is not allowed. POST is required"
All paths return JSON-RPC responses. The reverse proxy in front of the node
appears to rewrite all request paths to /rpc, effectively shadowing the entire
REST API.
Additionally, port 8899 (the direct HTTP port) is firewalled — only ports
80/443 are open on the mainnet servers.
Impact
Community node operators cannot:
- Register as sequencer — requires POST /sequencer/txs with a sovereign
module TX - Register as prover — same mechanism
- Query sequencer readiness — GET /sequencer/ready
- Access the OpenAPI spec — GET /openapi-v3.json
- Use the Swagger UI — GET /swagger-ui/
The only alternative is submitting blobs directly to Celestia DA
(forced/emergency registration), but this path has its own limitations with
multi-blob processing per DA height.
Suggested fix
Either:
- Fix the reverse proxy to pass paths through to the backend instead of
rewriting everything to /rpc - Expose port 8899 directly (or a separate port for REST)
- Add a JSON-RPC method for sovereign module call submission (e.g.
sequencer_submitModuleCall) that wraps with Auth::Mod internally
Option 1 is likely the simplest — the backend already serves both REST and
JSON-RPC correctly on port 8899. The proxy just needs to stop rewriting paths.
Environment
- Mainnet RPC: mainnet.rpc.solaxy.io
- Resolves to: 16.59.168.245, 3.136.1.175
- Open ports: 80, 443 only
- Backend: Sovereign SDK with SVM authenticator on port 8899