package connect4_v3 is a staked Connect 4 game. A creator posts an offer with a ugnot stake; anyone (or a named opponent) accepts with the same stake; the winner takes the pot minus a flat house fee.
The first mover is picked by commit-reveal: the creator offers with sha256(passphrase) and must Reveal the passphrase within 90s of Accept, or forfeit. The draw also mixes in the block height of Accept, which the creator cannot know when committing (so it cannot grind a passphrase for a known opponent), while the acceptor cannot use it without the passphrase. Randomness computed in Accept alone could be re-rolled by an acceptor who bundles [Accept, Play] in one atomic tx and lets it revert.
Calls signed by an account session key (Quick play) may only Play, Reveal, ClaimTimeout and Cancel: a stolen session key must not resign games, move stakes or act as the owner.
Every move has a 90s clock measured in block time. Nothing on-chain fires by itself, so an expired clock is settled by anyone calling ClaimTimeout: an unrevealed game is won by the acceptor, a game whose first mover never moved is void and both stakes are refunded, otherwise the player who ran out of time forfeits.