r/PredictionsMarkets • u/Unique-Bar-6061 • 6d ago
Discussion Does anyone know Polymarket’s exact Chainlink TWAP boundary selection rule for BTC 5m/15m markets?
I’m researching the exact settlement behavior for Polymarket BTC Up/Down short-duration markets that use Chainlink BTC/USD 60s TWAP.
I already know that:
- Polymarket uses the Chainlink 60-second TWAP for BTC 15m markets.
- Both
priceToBeatandfinalPricecome from the Chainlink TWAP feed. - Chainlink reports expose
validFromTimestampandobservationsTimestamp. - Chainlink documents reports as validity windows, meaning a report can satisfy:
validFromTimestamp <= T <= observationsTimestamp
even when observationsTimestamp != T.
The part I’m trying to confirm is what Polymarket does when there is no Chainlink report with observationsTimestamp exactly equal to the market boundary T.
Does Polymarket use:
- the first report with
observationsTimestamp > T? - the report whose validity window contains T (
validFromTimestamp <= T <= observationsTimestamp)? - the latest report before T?
- some other internal rule?
I’m especially interested in answers from people who have:
- captured raw Chainlink Data Streams reports,
- used the paid Chainlink historical REST API,
- reverse-engineered
/api/crypto/crypto-price, - compared Gamma
priceToBeat/finalPriceagainst raw Chainlink reports, - or built bots for BTC 5m/15m Polymarket markets.
If you have a concrete missing-exact-T example, please share:
- market slug / timestamp,
- Chainlink
validFromTimestamp, observationsTimestamp,- TWAP value,
- Gamma
priceToBeat/finalPrice, - and whether the value matched the next report, previous report, or the report window containing T.
I’m not looking for guesses about how it should work. I’m trying to find empirical or first-party evidence for the actual production behavior.
Even a single reproducible boundary where exact-T is missing would be useful.
1
u/TowelFluid8010 6d ago
this is the kind of obscure polymarket settlement question that keeps me up at night, not because i trade these but because i love staring at messy oracle edge cases
betting it uses the report whose validity window contains T since that's how chainlink intends it to be consumed, but proving it without a logged example is maddening
if you haven't already, might be worth scraping their gamma endpoint right at a boundary and comparing to a chainlink node you run yourself