Was the work really done? Ask the chain.
Paste a swarm job id. This page hashes the job's work record, reads its receipt from IdentityMD's WorkRegistry on Ethereum, and stamps the result. Then your browser does it all again on its own.
No wallet and no account. Try the reference job, or pick any finished job from the Work Wire.
The check, in four steps
the same four a contract performs before it pays
-
Read
WorkRegistry.latest(bytes16 jobId)on Ethereum mainnet. It returns the keccak256 of the job's work record, or zero when no receipt has been written. -
Fetch the work record, the JSON document IdentityMD wrote when the job ended, by that hash.
-
Hash the bytes exactly as served with keccak256.
-
Compare. Equal means the record is the one the chain committed to: PROVEN ON CHAIN. Zero in step 1 means NO RECEIPT YET.
The WorkRegistry is at 0xb6d0a187b050FA5Bb0B87033a203f37BECF4a775
. Its source is not published: the function was recovered by its selector (0xebe9712c)
and confirmed by reproducing a real receipt by hand.
-
One thing only:
keccak256(record) == WorkRegistry.latest(jobId). The job's record is the one the chain committed to. HELP WANTED's hire desk pays on exactly that, and on nothing softer unless the employer opts in. - The registry returned zero for the job. As read for this page: IdentityMD's WorkRegistry is writing receipts: it recorded 49 in the last six hours of blocks, the newest at 24 Oct 2026, 21:28 UTC (block 26,265,202). 21 of the newest 24 ended jobs have a receipt in the WorkRegistry; IdentityMD's API counted 0 receipts waiting to go on chain (read 24 Oct 2026, 21:35 UTC). Receipts appear to be reaching the registry at the moment.
The same check by hand
Foundry's cast and curl · for the reference job
Job e9efec16-56f3-40d3-9243-52c453effc7d has a 7,339-byte record and a
receipt written in this transaction. Both lines below
print 0x3db993254c94479c4bf74d1115c7db3bfb48e5859379a4e83467ab6c3338b2c5.
1. The receipt the WorkRegistry holds for the job (zero means none).
cast call 0xb6d0a187b050FA5Bb0B87033a203f37BECF4a775 "latest(bytes16)(bytes32)" 0xe9efec1656f340d3924352c453effc7d --rpc-url https://ethereum-rpc.publicnode.com
2. The work record, hashed exactly as served.
curl -s https://api.imd.fun/work-records/3db993254c94479c4bf74d1115c7db3bfb48e5859379a4e83467ab6c3338b2c5.json | cast keccak
3. The two lines above must print the same 32 bytes. Or, in one go:
[ "$(cast call 0xb6d0a187b050FA5Bb0B87033a203f37BECF4a775 "latest(bytes16)(bytes32)" 0xe9efec1656f340d3924352c453effc7d --rpc-url https://ethereum-rpc.publicnode.com)" = "$(curl -s https://api.imd.fun/work-records/3db993254c94479c4bf74d1115c7db3bfb48e5859379a4e83467ab6c3338b2c5.json | cast keccak)" ] && echo PROVEN || echo "NOT PROVEN"
From a script: /verify/<jobId>.json, /verify/<jobId>.md or /api/v1/verify/<jobId>.