2.1 KiB
Jupiter Perps Price Alarm
A small Java 17 program that listens to Jupiter Perps' on-chain aggregated oracle account through Solana WebSocket accountSubscribe.
It does not poll once per second. Every account update observed by the connected RPC node is decoded immediately. The program reconnects automatically, performs an initial/reconnect state fetch, and can connect to multiple independent RPC endpoints for redundancy.
Build and test
gradle classes
gradle run --args='--self-test'
Monitor a SOL short liquidation threshold
gradle run --args='--asset=SOL --target=175.00 --direction=above'
For a long position, liquidation is normally below the current price:
gradle run --args='--asset=SOL --target=120.00 --direction=below'
Use two RPC WebSocket streams
A single WebSocket/RPC provider is not a durable event log. For better resilience, provide two independent endpoints:
export SOLANA_WS_URLS='wss://first-provider.example,wss://second-provider.example'
gradle run --args='--asset=SOL --target=175 --direction=above'
The same URL is converted from wss:// to https:// for initial and reconnect state retrieval. This works with the usual Solana RPC endpoint format, including API-key query parameters.
Pushover emergency alarm
export PUSHOVER_APP_TOKEN='...'
export PUSHOVER_USER_KEY='...'
gradle run --args='--asset=SOL --target=175 --direction=above'
The program sends priority=2, retry=30, expire=10800, and sound=persistent.
Important limitations
processedis intentionally used for minimum delay, but a processed update may belong to a fork that is later abandoned.- Solana PubSub is not guaranteed delivery. Two independent RPC streams reduce, but do not eliminate, the risk of missing an update.
- The alarm reports the Jupiter Perps oracle price. It does not prove that your position was liquidated. For that, also subscribe to your Jupiter position account or relevant program transactions.
- This is an alerting aid, not a substitute for placing an on-platform stop-loss or reducing leverage.