← back to app

Polaris

A fully-collateralized binary prediction market on XLM/USD, settled by Pyth Lazer.

What this is

Bet YES or NO on whether XLM/USD will be at or above a strike price at a fixed expiry. Every stake is minted as a matched YES+NO share pair against locked collateral (native XLM) — never a shared pool you hope has a winner on the other side. A constant-product AMM between the YES and NO reserves gives continuous, live-updating implied odds and lets you exit a position before expiry, not just hold to resolution.

At expiry, anyone can submit a Pyth Lazer-signed price update; the contract verifies the signature on-chain and marks the winning side. If nothing ever gets settled — the oracle is down, whatever — anyone can permissionlessly cancel after a grace period, and both sides redeem 1:1. There is no scenario where funds are stuck.

Signing in

No browser extension, no seed phrase. “Sign in with passkey” registers a WebAuthn credential (Face ID / Touch ID / Windows Hello / a hardware key) and deploys a Soroban smart-wallet contract for it — a custom account whose __check_auth verifies your passkey’s secp256r1 signature on-chain. The app pays the deploy fee and every trade’s transaction fee; you never need to hold XLM just to interact.

The trade mechanics

What “portfolio” actually shows

Position values here are either an exact redeemable amount (for a resolved or cancelled market — this matches what redeem() would actually pay, exactly) or a mark-to-market estimate at the current AMM price (for an open market — actually selling a large position would move the price, so this is an estimate, not a guaranteed exit value). This build doesn’t index historical trades, so it can’t show cost-basis-based realized P&L across a position you’ve partially bought and sold over time — that would need an event indexer this system doesn’t have.

Trust model

Repos

polaris-contracts (Rust/Soroban), polaris-oracle (NestJS settlement automation + passkey relay), polaris-frontend (this app). Each has its own README with the details this page glosses over.