A carbon number is only as trustworthy as whoever signed it. Steel screws imported into the EU from 2026 carry a carbon cost: the importer surrenders CBAM certificates for the emissions embedded in them, first by 30 September 2027 (importers of no more than 50 t of CBAM goods a year are exempt). A Taiwanese screw maker that runs on lower-carbon steel can show it with a verified emissions value: in our demo (fictional company, illustrative value) 1.8 tCO2e per tonne, against the EU's 2026 default of 2.978 for Taiwan. At the Q3 2026 certificate price of €82.32, that gap is worth about €97 per tonne of screws to the importer (gross, before the free-allocation adjustment, illustrative). But only if the buyer trusts the number. CBAM is meant to reward producers outside the EU for cutting emissions, and that reward travels only through numbers buyers can trust.

Track: Sustainable Supply Chains. One concrete sustainability claim, the embedded emissions of steel screws from Taiwan into the EU under CBAM, made checkable at every hand-over: who signed the number, whether the signer was authorised when the report was registered, and how many verified tonnes are left within this deployment.

The problem. The installation's operator reports its emissions; an accredited verifier checks them and signs a verification report. In 2027, operators are not required to register in the CBAM Registry: they may send the verification report to their importers as an electronically signed PDF, which the importer uploads. Downstream buyers, banks and customers see only such copies. An e-signed PDF shows who signed it, but not whether that signer was an accredited verifier at the time, or whether already used for another buyer. The European Fastener Distributor Association already warns that "so-called verification certificates" in circulation do not meet CBAM's verification requirements. A buyer whn the default, and then the lower-carbonproducer's effort earns it nothing.

What CarbonLEI does. It attaches a digital credential to the verified value and keeps a public tally of its tonnes:

  • Who signed. The verification body signistered key, and its lead auditor anchors itin their own KERI key event log. Both hold vLEI credentials: verifiable IDs for organisations and the people acting for them, in the trust model of GLEIF, the G Foundation (a simulated root in this demo).Every buyer's verifier walks that chain to a pinned root.
  • Authorised at the time. A contract on report at a block; a watcher syncsrevocations on-chain, and a revocation counts from the block in which it was synced (reports registered in the 24 hours before are flagged for review).
  • Tonnes left. Each verified tonne can be claimed once among the importers that check this ledger (a voluntary cap of our design, not a CBAM rule): in the demo300 left, and a second importer's 400 tclaim is refused.

The supplier reveals only what it chooses: the demo proof shows 21 fields and hides 5, including process route, energy mix and cost.

Who checks what. The contract enforces*n allowlisted body whose auditor was notrevoked at the registering block, one report per installation and period, and no claim beyond the tonnes left. *The buyer's browser, with no wallet, reads the d checks the signature, the disclosed fieldsand the vLEI chain to a pinned root (simulated here; check 7, on exported evidence; witnesses are not queried). Still trusted: the allowlist operator's owner andrs and accreditation bodies (simulatedhere), the KERI witnesses, the RPC node, and the verifier's numbers.

Climate impact

How it connects. CBAM is meant to create "incentives for the reduction of emissions by operators in third countries" (Regulation (EU) 2023/956, Articla producer only through the verified numbersits buyers rely on. If a buyer cannot trust who signed, a lower verified value may earn its producer nothing; if one value can be stretched over more tonnes thanfier covered are priced as if they werelow-carbon. CarbonLEI makes both conditions checkable outside the Registry: who signed the value, and how many verified tonnes are left. - Per tonne. Each 0.1 tCO2e/t of lower vr about €8.23 per tonne of goods at €82.32(gross, illustrative). That value belongs to the verified value itself: CarbonLEI does not create it; it makes the conditions for relying on it checkable.

  • One over-claim, blocked. If the demo's 200 t batch were claimed a second time, goods no verifier covered would be declared at the low value, and about 181.uld go unpriced (assuming they emit at theunmarked default). The contract refuses the repeated batch, and any claim beyond the tonnes left. - The corridor. The EU imported 371,270 CN 7318) from Taiwan in 2025, 20.3% ofextra-EU imports by weight; in Taiwan about 2,600 firms are affected by CBAM. Each 1% of that tonnage declared on a verified value instead of the default moves d emissions from the default onto averifier's signature (2025 tonnes as a proxy; an upper bound, as they include imports under the 50 t exemption).

What we do not claim. CarbonLEI does not measure or cut emissions: these are declared amounts, not reductions, and we found no observed rate of over-claiming tor registered in the CBAM Registry, whichcan share its value with every declarant there, CarbonLEI's added effect is about zero; it serves the PDF route above and the buyers, banks and customers outsidesources](https://github.com/zuemen/carbon-lei/blob/main/docs/CLIMATE_IMPACT.md)).

Innovation

  1. Role authority, not just a company ID. The body's vLEI, a CBAM accreditation credential (our proposed schema) and the lead auditor's role credential, anchlog.
  2. A shared tonnage ledger with a clock. KERI has no shared clock; block time orders a registration against a revocation once the revocation is synced on-
  3. Could it be a real CBAM verification? (check 8). A signed report dated before accredited verifiers could issue reports, or missing a required site visit, flagged for review.
  4. One tier up (check 9). In the Commission's screws example the wire rod carries 1.843 of 2.039 tCO2e per tonne. CarbonLEI checks the steel mill's signed val same wire-rod tonnes from backing two screwmakers (on a local chain, not Sepolia).

Why a ledger. Several verification bodies and suppliers write, importers in different member states read, months later. The tonnage record shared across impoarty should keep; the allowlist is stillwritten by one operator, through single owner and watcher keys, and every change is public on-chain.

Why the trust path uses no AI. All checks (0–10) are deterministic rules: an importer may have to defend the record years later, and the same proof must

Prior work exists for each part (SiGREENEI Hackathon winner, Chainlink with GLEIF,Energy Web Green Proofs); we found no public project that combines vLEI role authority, the CBAM verification workflow and an on-chain tonnage ledger.

Built for the people who use it

  • **Supplier: verify once, share with many.*ed across EU customers. In Taiwan, about2,200 of the 2,600 affected firms export under 50 t a year, yet must still supply data when their EU buyer's total imports exceed the threshold.
  • Importer workbench. A year's proofs in one run, turned into a declaration plan: the verified value where the proof holds, the default and the reason whert, not a CBAM Registry filing).
  • Integration. Re-checks, a REST API (no authentication in this prototype), an ERP CSV example and a PACT export that passes the official schema.
  • Who runs and pays (our proposal, not tested). A trust-registry operator keeps the allowlist; verification bodies register reports and recover the cost in thes pay the gas for their claims; reading theledger costs buyers no gas.

Technical execution

Two source-verified Solidity contracts on Sepolia; one TypeScript verifier for the page, SDK and CLI; a watcher that syncs a lead auditor's revocation on-chain. 5 SDK, 55 verifier, 88 browser); 19 of 19tampered inputs (written by us) rejected by a named check or contract error; 412 of 412 non-equivalent mutants killed; fuzzing, Halmos, a bounded Maude model check CI. The EVM cannot cheaply verify KERI'sEd25519 signatures, so checks 6 and 7 run off-chain.

Six attacks, one lesson. One simulates a stolen allowlist key: the contract accepted the impostor body's report on Sepolia, because it checks the allowlist, noproof, because the impostor's chain leads to its own root. Each buyer's own check is the defence.

Known limits. Fictional companies, people and LEIs under a simulated GLEIF root; an accreditation credential of our own design; vLEI checks on exported evidr keys (a V2 that delays address rotationsand holds report revocations by a newly installed address for 72 hours is tested, not deployed); checks 9 and 10 run on a local chain, and check 10 (carbon price9 rules; batch IDs are not bound to physicalgoods; verified and claimed quantities are public on-chain, and so are the supplier's and the body's addresses (only the supplier LEI, installation ID, batch ID commitments); no check that the signed valueitself is correct. Next: a pilot with one verification body and one importer ([plan](https://github.com/zuemen/carbon-lei

Try it in 60 seconds

Hosted demo: press "Verify the demo proof" for 8 of 8 checks, then open Try to break it. **One-page judge brief (PDF) ·Repository: all code was committed after the submission period opened (HACKATHON.md).

AI usage disclosure

During development we used Claude (Anthropic) as a coding and writing assistant under the team's direction: it drafted contract and SDK code, tests, documentation and this submission text, and ran our adversarial reviews of the verifier and the contracts. Each change was run through the test suite and our local pre-push checks before it was pushed, and CI reruns the contract and SDK tests on GitHub; the team set the scope and the rules the text must follow. The video narration is a synthetic voice (Microsoft Edge TTS). Inside the product, none of the checks (0–10) uses AI; all are deterministic rules. Emissions values in the demo are illustrative fixtures, not model outputs. Companies, people and LEIs are fictional. Two commit messages (f1b1f29, 9b747f8) that mention an external or outside review refer to our own AI-run reviews; no outside party has reviewed this project (HACKATHON.md).

Built With

  • acdc
  • ed25519
  • eip-712
  • ethereum
  • foundry
  • github-actions
  • halmos
  • keri
  • keria
  • keripy
  • node.js
  • openzeppelin
  • pact
  • playwright
  • react
  • sepolia
  • signify-ts
  • slither
  • solidity
  • typescript
  • viem
  • vite
  • vitest
  • vlei
Share this project:

Updates

Submission history