Verify a row
Paste any Groundtruth row. This machine recomputes the hash from the row's own fields and recovers the address that produced the signature. Both checks run locally with a vendored library. Nothing is sent anywhere — it works with the network off.
The hash is the row
Strip hash, address and signature, serialise what is left with keys sorted and no whitespace, then SHA-256 it. The result must equal the row's own hash.
The signature is that address
Rebuild the signed message from the row, take the EIP-191 digest, recover the public key from the signature. The address it produces must equal the address on the row.
Two lines, if you would
rather run it yourself
Nothing else is in it. No address, no site, no session — the message comes entirely from fields already public in the row.
Canonical means keys sorted alphabetically and no whitespace. That is the only convention you need.
That the address belongs to a distinct person. A signature proves a key produced a row and nothing more — one person can hold a thousand keys. Sybil resistance is a property of how a dataset is weighted, not of a signature, and any project telling you otherwise is selling you something.