Technical disclosure | Updated July 2026
Market methodology
The clock, price source, outcome rule, refund conditions, fee, and payout calculation used by Flashpoly's current high-frequency prediction market.
Summary
Current Bitcoin market parameters
- Question
- Will BTC/USD finish above or below its lock price after five seconds?
- Server clock
- 1 second preparation, 3 seconds entry, 5 seconds resolution, 1.6 seconds result display
- Price feed
- Pyth Hermes BTC/USD stream with latest-price polling as a backstop
- Price feed ID
- Crypto.BTC/USD stable feed ending in 415b43
- Outcome
- UP when final price is higher; DOWN when lower; tie within $0.005
- Pool fee
- 3% of a mixed pool, capped at the losing pool; no fee on ties, voids, or one-sided pools
- Freshness protection
- Real-money entry requires a live non-synthetic feed; an in-flight real-money round voids if the latest price is stale at settlement
Server-authoritative timing
The Flashpoly server creates each round and publishes exact timestamps for preparation, entry close, resolution, and result display. Clients render those server timestamps and compensate for clock offset; a browser does not decide when its own call locks or when a result becomes final.
The server checks the round state every 50 milliseconds. At the transition from entry to resolution it records the latest observed price as the lock price. At the transition to result it records the latest observed price as the final price and settles once.
Price source
The production BTC/USD source is the Pyth Hermes price service. Flashpoly consumes the live Hermes stream and uses the latest-price endpoint as a backstop when no stream update has arrived for 2.5 seconds.
The interface may resample or smooth points for display, but settlement uses the raw latest price observed by the server. Display interpolation cannot change the lock price, final price, or result.
Outcome calculation
The result is the final price minus the lock price. A positive difference produces UP. A negative difference produces DOWN. An absolute difference of $0.005 or less produces a tie. If either required price is missing or invalid, the result is void.
Feed failure protection
Real-money calls are unavailable when the feed is disconnected, synthetic, or not fresh. If a real-money round is already in progress and the feed is not fresh at settlement, Flashpoly marks the round void and returns all stakes. Local development can use a visibly labeled synthetic feed; synthetic prices cannot settle production real-money participation.
Flashpoly does not infer a missing result, carry forward an uncertain value, or let a synthetic development price settle a real-money round.
Pool and fee calculation
UP and DOWN stakes form the total pool. When both a winning side and a losing side exist, the fee is 3% of the total pool, capped at the losing pool. The cap prevents the distributable amount from falling below the winning side's original stake.
The amount remaining after the fee is distributed among correct calls in proportion to each call's share of the winning side. Payouts include stake return. Incorrect calls receive zero.
Integer-cents settlement
All pool accounting uses integer cents. Each proportional payout is first rounded down; any remaining cents are then assigned in order of the largest fractional remainder. This ensures that winning payouts plus the fee equal the total staked amount exactly.
Refund matrix
When a round does not transfer value
| Condition | Result | Fee | Player treatment |
|---|---|---|---|
| Price difference within $0.005 | Tie | $0 | All stakes returned |
| Missing or invalid settlement price | Void | $0 | All stakes returned |
| Stale feed on a real-money settlement | Void | $0 | All stakes returned |
| No stake on the correct side | Refund | $0 | All stakes returned |
| No stake on the incorrect side | Refund | $0 | All stakes returned |
References
Primary documentation
Flashpoly's implementation is described above; Pyth's own documentation describes the external data service.
Contact support@flashpoly.com with your player name and the approximate time of the round.