MethaneClause “Marked Absent” case
Real data Simulated
Checks run in your browser… Story map Ethereum Sepolia · loading…

A speed camera for methane, written into the gas contract between an EU gas importer and its supplier.

Satellites confirm a leak → the seller's bond pays the buyer. No new leak on later passes → the seller earns money back in steps, up to the rebate, from a sponsor's pool (for example its lender's). No one runs the payout: once enough independent witnesses sign the same sighting and the appeal window passes, the contract pays the buyer from the bond. The seller can appeal — then the witnesses must confirm it again — but cannot delete the sighting or hold the money.

A judge's 10-minute path: read the clause live from Sepolia, break a signature (tamper A–C), open the reverted transactions on the explorer, sign with your own key. The full path, step by step →

Amounts are representative test values; a production clause sets them in euros in the parties' policy.

In this demo one person runs every role; in production each witness is a separate organisation with its own keys.

Who pays whom Two public satellites look down at a gas facility. Witnesses fetch the public record of their sightings, sign it, and it goes into the clause, on chain, where they are kept for good. A red arrow: on a confirmed leak, the seller's bond pays the buyer a rebate. A green arrow: on clean passes, the sponsor's pool pays the seller back part of it. public satellite another public satellite drawn sky path gas facility witnesses fetch the publicrecord, each signs it The clause, on chain every sighting kept for good Seller posts a bond Buyer gets the rebate Sponsor funds the earn-back pool confirmed leak rebate clean passes earn-back
Red: the seller's bond pays the buyer when a leak is confirmed. Green: a sponsor (the seller's lender, as a sustainability-linked margin step, or the buyer) pays the seller back from its pool, in steps, for clean passes; a new confirmed leak cancels only the unpaid steps.

Penalty and earn-back, step by step

Who pays whom, and when

Four parties and three paths. The sightings come from Carbon Mapper and UNEP MARS; the money moves in real transactions on Ethereum Sepolia and in a recorded local run.

  1. seen→confirmed→paid
  2. clean passes→earn-back in steps
  3. new leak→the earn-back stops

The 60-second proof

Try to cheat it

Three edits a seller might try. Every check runs in your browser (RFC 8785 + SHA-256, EIP-712 ECDSA, ML-DSA-44); a rebate and an earn-back fail the same way.

  1. 1The seller edits the signed leak rate
  2. 2Both witnesses' signatures fail
  3. 3The contract refuses; the bond does not move

See the signature checks ↓

A · Edit the rate of the signed sighting

The record two witnesses signed for the plume the clause settles. Change the rate and watch both signatures fail.

Committed evidenceHash (what both witnesses signed)
Recomputed in your browser from the signed record shown here (RFC 8785 + SHA-256)

    B · Delete a sighting from the list

    The seller hides a sighting from the provider's list; the witness's re-fetch receipt no longer matches, so it refuses to sign.

    Witness's re-fetch receipt (hash of the list the provider serves)
    Recomputed in your browser from the list shown here (RFC 8785 + SHA-256)

      C · Make a cloudy scene look clear (the earn-back side) MOCK data

      The seller edits a scene's cloud fields to earn money back; the signed sceneHash changes and both witnesses' signatures fail.

      Committed sceneHash (inside the signed clean pass)
      Recomputed in your browser from the scene record shown here (RFC 8785 + SHA-256)

        Your own key

        Become a witness

        Sign the TKM_S_276 sighting with your own browser test wallet in the public judge sandbox on Ethereum Sepolia.

        How it works

        Your key joins the registry as witness organisation OBS_JUDGE, your signature is one of the two the clause needs, and the contract — not this page — decides. The page asks your wallet to sign and to send; it never sees your key.

          (needs MetaMask + Sepolia test ETH)
          a throwaway key made in this tab signs the same record; nothing is sent

            No browser wallet? The same flow runs from a terminal: make judge-local (a local chain, no test ETH needed) or make judge-attest then make judge-propose with JUDGE_PK set (Ethereum Sepolia).