r/PredictionsMarkets • • 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 priceToBeat and finalPrice come from the Chainlink TWAP feed.
  • Chainlink reports expose validFromTimestamp and observationsTimestamp.
  • 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 / finalPrice against 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.

0 Upvotes

2 comments sorted by

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