Squad Oracle Network (SON) is a decentralized, multi-feed price oracle for the SquadSwap ecosystem. Operators stake SQUAD tokens, fetch prices from exchanges and DEX pools, reach consensus via cryptographic signatures, and post results on-chain.
Consumer contracts read prices through the familiar Chainlink AggregatorV3Interface, so any existing integration works without code changes.
Every feed goes through the same 5-step pipeline, once per heartbeat or whenever the price deviates enough to trigger an early update.
Every value you see across the dashboard maps to one of these terms.
The same parameters serve very different risk profiles depending on where price discovery happens. Here's the current production tuning:
| Parameter | XMR (CEX Agg) | SQUAD (DEX TWAP) | Why |
|---|---|---|---|
| Heartbeat | 1h | 5m | CEX liquidity is deep → hourly refresh is fine. DEX pools drift faster → 5m keeps consumers current. |
| Deviation | 0.5% | 1.0% | 0.5% matters on a liquid CEX book. On thin DEX pools it's just noise; 1% filters spam updates. |
| Staleness | 2h | 15m | Always ≈ 2 × heartbeat. Short DEX window prevents arbitrage windows on low-liquidity assets. |
| Circuit Breaker | 20% | 10% | Logic inverts: 20% XMR move is panic worth pausing. 10% SQUAD move already looks like pool manipulation. |
| Min Ops | 3 | 2 | XMR is a critical integration target — higher quorum. SQUAD is ecosystem-internal — 2-of-N acceptable for now. |
All parameters are governance-tunable. These values will evolve as feeds gain integrations and historical data.
Operators are the network. Each one fetches prices independently, signs them, and gossips with peers over libp2p — the contract accepts a price only when 2/3+1 of subscribed operators sign the same value. Adding more honest operators directly raises the cost of attacking any feed.
The mainnet node is open-source and packaged for one-command install on any Linux host. Public IP detection, libp2p announce-addresses, and peer auto-discovery are all handled for you — operators do not need to exchange IP addresses out-of-band.
curl -fsSL https://raw.githubusercontent.com/SquadSwapDeFi/SquadSwapOracleNetwork/main/setup.sh | sudo bashProduction environments should download the script, review it, and only then execute. The full setup README — minimum requirements, firewall notes, log access tokens, update procedure — lives in the public-node-setup repository. Once your wallet is funded, complete steps 3 and 4 on the Staking page.
Any contract that reads Chainlink can read SON. Point the aggregator address at the per-feed adapter (listed on the Feeds page) and use the standard interface:
import { AggregatorV3Interface } from
"@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";
contract MyConsumer {
AggregatorV3Interface public immutable oracle;
constructor(address xmrUsdAdapter) {
oracle = AggregatorV3Interface(xmrUsdAdapter);
}
function latestPrice() external view returns (int256) {
(, int256 price, , uint256 updatedAt, ) = oracle.latestRoundData();
require(block.timestamp - updatedAt < 2 hours, "stale");
return price; // 8 decimals, e.g. 35498000000 == $354.98
}
}Prices use 8 decimals, matching Chainlink convention. The adapter reverts on stale or paused feeds, so your contract doesn't need extra liveness checks beyond the staleness requirement shown above.