Track: Climate Data & Environmental Monitoring

How the project addresses the track: This track asks for reliable, accessible climate data systems and notes that environmental data is fragmented and hard to verify. MethaneLock is a climate data verification tool: it turns an analysis of open Sentinel-5P data into a self-describing Evidence Package whose SHA-256 hash is registered on a public blockchain, so anyone can check that a published result was not changed afterwards. It verifies integrity, not truth, and the limits of the data and method are documented.

Potential impact: If organizations published methane analyses this way, readers, auditors and journalists could cite a specific result and verify it independently, which supports environmental transparency. We make no claim to detect emissions or identify sources.

Inspiration

Methane is a strong greenhouse gas, and claims about regional methane increases are hard to check after the fact. Satellite data is public, but an analysis result is usually just a file or a chart. The method, parameters and data source are often not stated with it, and the file can be edited or silently replaced later. We wanted a result that carries its own method and that anyone can check for later changes.

What it does

MethaneLock covers one narrow workflow and states its limits openly.

  1. For a chosen bounding box, it takes the Sentinel-5P (TROPOMI) CH4 column average for one day from Google Earth Engine and compares it with a fixed 2020–2022 baseline using a z-score (threshold 2.5). There is no machine learning: it is a plain, documented statistical rule.
  2. It saves the result, with every parameter that produced it, as one JSON Evidence Package and computes its SHA-256 report_hash.
  3. On an explicit command, it registers that hash in a small Solidity contract (MethaneRegistry) on the Ethereum Sepolia testnet.
  4. A Streamlit dashboard shows the package, recomputes the hash to show whether it is unchanged, and queries isRecorded on the contract.

Anyone can verify a result: recompute the hash of the package, then call the public, read-only isRecorded function. Checking needs no account and no trust in us.

Who it is for: analysts, journalists, NGOs and auditors who need to cite a regional methane result in a way others can check. A package is a single JSON file, and recording costs one small transaction per result.

What the blockchain proves: that a given hash was registered, and an upper bound on when it existed. It does not prove that an anomaly is real, that the satellite data is correct, or who produced the package (the contract has no access control). Only the hash is on-chain.

How we built it

  • Data and analysis: Python with the Earth Engine API for Sentinel-5P daily values, a pooled 2020–2022 baseline, and the z-score rule.
  • Evidence Package: a JSON schema with a canonical serialization, so the SHA-256 hash is reproducible.
  • Contract: MethaneRegistry in Solidity, tested with Foundry. A hash can be recorded only once; a second attempt reverts.
  • Client: a Python command (web3.py) that validates the package, recomputes the hash, checks the chain id and whether the hash is already recorded, and only then sends the transaction.
  • Dashboard: Streamlit, with an integrity check and an optional on-chain lookup.
  • Tests: 53 offline Python tests plus the Foundry contract tests, so the pipeline can be checked without network access.

Challenges we ran into

  • Sepolia deployment: Foundry's local simulation estimated about 297k gas for the contract creation, while the network required about 1.97M. Two deploy transactions were mined but failed before we raised the gas estimate multiplier. The README runbook now documents this.
  • Library differences: a hashing library version change affected whether transaction hashes carry a 0x prefix, so the record command now always prints it.
  • Real satellite data: each image is one orbit's grid, so a day's value covers different parts of the box on different days. In a smoke test, per-orbit values for one box on one day spread by about twice the baseline standard deviation. We document this instead of hiding it.

Accomplishments that we're proud of

  • A working end-to-end path on real data: Sentinel-5P, analysis, Evidence Package, on-chain record, and verification in a dashboard.
  • A registry deployed and checked on Sepolia: the hash of one package is recorded, isRecorded returns true, and re-recording the same package is refused.
  • Reporting what we found as it is. The live run flagged nothing (|z| = 1.094 and 0.578 against the 2.5 threshold), and we did not adjust any parameter to produce a flag.
  • Limits written down: the README and docs/limitations.md state what the system does not prove.

What we learned

A hash shows that a result is unchanged, not that it is true. Keeping those two claims separate made the design simpler and the project more honest. A plain statistical rule with every parameter written into the package is easier to audit than an opaque model. Most of the practical effort went into reproducibility: canonical hashing, tests that need no network, and a runbook that works on a clean machine.

What's next for MethaneLock

These are known gaps, not commitments. Before anyone relies on the results, the analysis would need seasonal and trend correction of the baseline, a pixel-level quality filter, repeated observations instead of one day per region, and comparison with independent emission records. The hash rule has only been implemented in Python, so an independent implementation should reproduce it. The live analysis covers two regions and one observation day each, and the registry runs on a testnet, which is not a durable archive.

Built With

  • ethereum
  • foundry
  • google-earth-engine
  • pytest
  • python
  • sentinel-5p
  • sepolia
  • sha-256
  • solidity
  • streamlit
  • web3.py
Share this project:

Updates

Submission history