How it works
A day, from midnight to the shutter.
Three acts on chain, one signature from you, and a record small enough that nobody has to pay for it. Everything below is what the contracts do, not a description of what they are meant to do.
Act one. Commit.
A sealed salt, a day early.
The operator publishes keccak256(salt) for a day that has not started. A commit for today is refused, because a salt chosen after seeing how the day is going is not a commitment to anything.
Settings are snapshotted here too, so changing the window length later can never reach a day that is already committed.
Act two. Stir.
Anyone adds the other half.
From midnight until stirring closes, anybody may call stir. Each call folds the block hash, the caller and the previous seed together, so a contribution can be added to but never removed.
The operator holds the salt, but the seed is not theirs, so at commit time the moment is unknown even to them.
Act three. Open.
The reveal has to land on time.
The salt is revealed and the contract recomputes fireTime = f(salt, seed), refusing the reveal unless the block it lands in sits inside the grace window after it.
The countdown starts when the reveal lands, so a reveal forty seconds late still gives everybody the full window rather than forty seconds less of one.
The residual
Whoever holds the salt can compute the moment once stirring closes, which is some hours before it fires. They cannot move it, fake it, or announce it early. They could tell somebody, and no amount of contract design removes that.
The defence is that the last stir wins. Anybody stirring late in the phase pushes the moment somewhere new, and the operator learns the answer at the same time anyone else could. The stir count and the second each one landed are on chain for every day.
A day the operator simply never opens costs that day and nothing else. Streaks count consecutive opened days, and every opened day stores the opened day before it, so going quiet is not a way to punish anybody.
Posting
One signature, and no gas.
You sign an EIP-712 message covering your address, the day, the photo hash and the take number. A relayer collects those and writes a whole window in one transaction.
The relayer can drop you. It cannot forge you, because the signature is the only thing that authorises a post, and it cannot replay you, because the take number moves every time you submit.
If it drops you anyway, the same contract takes a post straight from your key, with nobody's permission and no relayer in the path.
The first submission of a day is the one that is timed and scored. Later ones move the hash and not the clock, and the count is public, so a person who took eleven tries has eleven on their day next to their first timestamp.
The tape
Every moment has a price on it.
This runs on a chain full of tokenised equities, so the moment reads the market on its way past. When the window opens, the clock takes one look at the Uniswap v4 pools and stores what it saw.
One read a day, shared by everybody, so being anchored to the tape costs a post nothing. A tape that reverts, runs out of gas, or is unset costs the day nothing either.
Questions
