cricket
Use

Verify a round

The verifier in src/engine/beacon.mjs returns every step so a page can show them. Same order in the contract.

The steps

StepWhat is checkedIf it fails
messagesha256(round), 8 bytes big-endianCannot fail.
signature48 bytes decode to a point of the G1 subgroupWrong length, wrong flags, off the curve, or outside the subgroup: rejected before any pairing.
keythe network key is a valid G2 pointCannot fail with the built-in key.
hashhash_to_curve of the message onto G1Cannot fail.
pairinge(signature, G2) = e(hash, key)The signature is not the network's for this round.

Try to break it

The home page offers three attacks and all three are refused at the pairing step: flip one bit, claim the signature belongs to round + 1, use another round's signature. The contract tests include the same cases plus malformed encodings.

What "valid" means

Valid means: the network key signed exactly this round number. It does not mean the round is recent. A year-old round is valid forever. Freshness is the job of the contract that uses it, which is why the draw contract compares the round to block.timestamp.

Speed

In JavaScript, one verification takes about 50 ms on a laptop (measured with Node 24). The page shows the time it measured on your machine.

ROUND --
next --
$CRICKET 0xb11e...bb13 X