Load registry records and claims
CSV exports never leave your browser. Start with the synthetic sample (fictional registries, projects and companies) or use your own files in the documented format.
Findings
| ID | Severity | Check | Tonnes | What we found | Actions |
|---|
Serial map
Each lane shows serial numbers from left to right for one registry, project and vintage. Red marks are conflicts found by the checks.
- Issued
- Retired
- Cancelled for transfer
- Corporate claim
- Conflict
Create a claim receipt
A company publishes one short fingerprint (a Merkle root) for all the serials it claims. Anyone can later check that a specific claim is part of it, and spot the same serials in another company's receipt.
Verify a receipt
Paste a receipt (JSON) or load a file. Verification recomputes every hash locally.
Tamper-evident audit log
Every import, analysis and receipt is appended to a hash chain. Each entry contains the hash of the previous one, so changing any past entry breaks every link after it.
| # | Time (UTC) | Event | Summary | Entry hash | Previous |
|---|
Why SerialGuard?
A carbon credit is only worth something if each tonne is issued once, retired once and claimed once. Registries publish exports, companies publish offset claims, but nobody checks the two against each other serial by serial. SerialGuard does exactly that, in the browser, without uploading anything.
Checks
Smart contract
The repository includes contracts/RetirementRegistry.sol: a minimal registry contract that refuses overlapping issuance and double retirement on-chain, lets companies anchor claim-receipt roots, and verifies inclusion proofs with the same SHA-256 construction as this app. It is covered by Foundry tests, including a cross-check against a proof generated by this app.
CSV format
Records: record_id, registry, project_id, vintage, status, serial_start, serial_end, quantity, party, date, note. Status is issued, retired (party = beneficiary) or cancelled_transfer (party = destination registry).
Claims: claim_id, claimant, registry, project_id, vintage, serial_start, serial_end, tonnes, reporting_year, claim_type.
Serial numbers are normalised integers within one registry, project and vintage. Real registry serial formats need a small adapter that maps them to this form.
Limits
SerialGuard checks consistency, not project quality: it cannot tell whether a tonne was really avoided or removed. The sample data is synthetic. Findings are leads for review, not proof of fraud.