One claim, end to end
The specifications describe each piece separately. This page follows a single document from the moment a professional signs it to the moment a client decides whether to send money, using the example files published on this site. Nothing here is new: it is the same artefacts, in order.
The content is invented. There is no Northpier Property, no licence 4102938, and the register address resolves to nothing. The signatures and digests are real, produced by throwaway keys, so every step below can be reproduced.
The situation
A buyer is three days from settlement. An email arrives with payment instructions, from a domain one character away from the agency they have been dealing with, quoting a real licence number belonging to the real agent. At the level of appearance the message is perfect.
Everything that follows exists so the buyer can tell the two apart in the thirty seconds they actually have.
This is not hypothetical framing. It is the fraud pattern the payment router funding this lab exists to reduce, and the reason the lab is funded at all.
The agent signs a claim
The agent writes down what they are asserting: the trade, the jurisdiction, the licence reference exactly as the authority writes it, their registered legal name, the business domain, and a window with an end date.
{
"rvw": 1,
"subject": "0xa805a67f59cccc9869d5dcb4ffc02fc697b5819d",
"trade": "real-estate-agent",
"jurisdiction": "AU-QLD",
"authority": "au-qld-fair-trading",
"licence": "4102938",
"legal_name": "Northpier Property Pty Ltd",
"domain": "northpier.example",
"register": "https://register.example.qld.gov.au/licence/4102938",
"issued": "2026-11-09T00:00:00Z",
"expires": "2027-05-09T00:00:00Z"
}Twelve months is the cap and six is encouraged. The window is the point: a claim that never expires is a claim nobody has to maintain, and nobody should believe.
The document gets a name
The claim is reduced to one canonical byte sequence, then hashed. That digest is the name of the document. It does not depend on where the file is stored, which is why no registry is needed to find it.
jq -cS . claim.json | tr -d '\n' | shasum -a 256Two tools that were already on the machine. If a future version of this specification needs software you have to install in order to check a claim, that version is wrong.
The agent signs the name, not the document
The subject signs EIP-712 typed data over the identifier and the window. The document itself is not signed directly, so the signature can travel without the document and still bind to it.
EIP-712 typed data
domain = {
name: "Revow",
version: "1",
chainId: 1
}
Claim(
bytes32 claimId,
uint64 issuedAt,
uint64 expiresAt
)
claimId = sha256(canonical claim document)
issuedAt = the issued field, as a unix timestamp
expiresAt = the expires field, as a unix timestamp
For the document above, signed by the subject key:
digest = 0x16553507701ee06320612aa0913000d308a55c7d20197997f247a214e3511f87
signature = 0xfc53b87067d4e4fdfbfadff6746d2992ced057c21305884402e41877f38c8c393e
e58c490a53c338e03ac954fe55902bd7fcc087fde965d6d0560199466ff3141cRecovering the address from this signature must return the subject field in the claim. If it does not, stop: the document and the signature do not belong together.
The key is published on the real domain
The agency publishes the subject key in DNS, on the domain its clients already know, and the claim names that domain. Now the two have to agree.
_revow.northpier.example. 3600 IN TXT "v=revow1; key=0xa805a67f59cccc9869d5dcb4ffc02fc697b5819d"
Optional, to narrow a key to one claim:
_revow.northpier.example. 3600 IN TXT "v=revow1; key=0xa805a67f...; claim=fba0fc855026ba97"This is the step that defeats the lookalike. The fraudster controls a domain one character away and can copy every byte of the claim, but cannot produce this record on the real domain. That is level 1, and it needs nothing from the authority.
Somebody checks the register and signs what they saw
An independent checker looks the licence up on the public register, sees what is there, and signs a statement describing exactly that. The attestation carries the weight of whoever signed it and no more.
{
"rvw": 4,
"claim": "fba0fc855026ba9758a1bbb2a41b3a4a5ebe54be5aca29b07c034d5c0e04ae10",
"attester": "0x9d08da60aab239e1f6acd6d2617aa37e5c4e13ca",
"method": "register-page",
"result": "match",
"evidence": "sha256:5b19b99093d3d45892eb2351c909627fe8db0c144009edc9048d952c757fb9e8",
"source": "https://register.example.qld.gov.au/licence/4102938",
"checked": "2026-11-09T09:14:00Z",
"expires": "2026-12-09T09:14:00Z"
}Note what it does not say. It does not say the agent is verified. It says a named party checked a named source on a named date and this is what the page showed. A consumer decides whether that party is worth anything to them.
What the buyer actually sees
The consumer resolves the DNS record, recovers the signature, checks the window, looks for a withdrawal, and gathers whatever attestations exist from attesters it has chosen to care about. Then it renders age, not a verdict.
Something like: this claim was signed by a key published on northpier.example, it expires in four months, and one checker looked at the register nine days ago and found a match.
Three things the consumer must never do: show a tick, show a score, or render a failed lookup as a negative finding about the subject. A register being down is a fact about the register.
The reference wording is on the levels page.
What the fraudster can and cannot do
- Can copy the licence number
It is public text. Nothing in this protocol tries to stop that, and any design that depends on a licence number being secret has already failed.
- Can sign a claim quoting it
And that claim is permanent, dated, and attributable to a key. The lie becomes evidence, which is the point.
- Cannot produce the DNS record
Not without control of the real domain, which is exactly what a lookalike does not have.
- Cannot produce the attestations
Not without getting the real register to list them, under the name they are claiming.
- Cannot make any of it disappear
Only the subject and the issuing authority can withdraw a claim. Nobody else, including this lab.
What is still missing
Everything above works today and none of it required anybody permission. What it still does not prove is that the person behind the key holds the licence, as opposed to having copied a real number and signed it.
Closing that gap takes one thing: the issuing authority publishing the list, on its own domain, signed. One file. That is open problem OP-1 and it is the reason this lab exists.