1Choose a pumping plan
Upload or edit a plan
- Start
- 12,000 m³
- Minimum
- 4,000 m³
- Capacity
- 24,000 m³
- Pump
- 6,000 m³/h
Values are never repaired. A CSV in m³ is converted exactly to litres; anything ambiguous is rejected.
A plan can look greener just by not refilling the tank. Tomorrow’s Reserve checks the whole day, and a smart contract refuses claims that don’t hold water.
The rule: a plan can’t claim a carbon saving by leaving tomorrow’s water missing. Here, the tank must be back at 12,000 m³ by midnight.
Values are never repaired. A CSV in m³ is converted exactly to litres; anything ambiguous is rejected.
Re-checks every hour, then accepts or refuses the claim.
Across 25 days
Modelled attributed CO₂ reduction over 25 simulated February days, including failed days. The AI and weekly rows are numerical checks; both rule plans were also run on the contract. The AI plan’s smaller safety margins do not prove equal safety.
How it’s used
Proposed next step: a read-only shadow trial alongside a utility’s own pump, energy and tank meters. Not yet done.
Method
One day of hourly pumping, one declared tank policy, and a contract that accepts or refuses the carbon claim. Everything below is what a reviewer needs to repeat the check.
A day’s carbon saving counts only if all of these hold:
These are this experiment’s declared values, fixed in the contract when it is deployed.
Each hour’s pumped water uses energy (0.5 kWh per m³ here), multiplied by that hour’s grid carbon intensity. The plan is compared over all 24 hours with normal pumping, which pumps what the town uses each hour.
Equal volumes use equal energy, so this measures timing: attributed CO₂, not electricity saved or proven avoided emissions.
Measured German hourly water demand, paired by hour with GB grid carbon intensity (NESO Carbon Intensity API, CC BY 4.0), for 25 source-complete days in February 2020.
The tank, pumps and pumping plans are simulated. Sources are pinned by hash in every evidence file.
npm run verify. Any edit breaks the signatures; a verified refusal stays a refusal.npm run verify reports the evidence as valid.Forecast replay
A trained forecaster predicts the day’s water demand. The planner moves pumping to cleaner hours and still refills the tank. Pick a day to replay it.
— kg
Across the complete 24 hours— m³
Checking hourly balanceA cheap-looking schedule can stop early and leave a depleted reservoir. Tomorrow’s Reserve requires the same starting and ending volume, so deferred pumping cannot masquerade as a carbon benefit.
The replay includes idealised within-hour flow feedback. It reports failures rather than treating a forecast as a guarantee.
Network test
A separate test on a published water network (EPA’s Net3): does moving pumping to cleaner hours still keep water and pressure everywhere?
No tank may end the day lower than it started, or lower than the existing controls leave it.
Every tank must end at least as full as both its starting state and the native-control comparator. A surplus in one tank cannot hide a deficit in another.
| Tank | Start m³ | Existing controls end | Our plan ends | Margin |
|---|
Solid: selected · dashed: native controls · orange: 20 m threshold
We test 40 pumping windows against the existing controls and only accept one that delivers the water.
The search tests 40 source-pump operating windows, preserving the second pump’s tank-level controls and its bypass. Planning uses the previous day’s grid profile. It may recommend keeping the original controls. Actual-day emissions, service and each closing tank balance decide whether the result qualifies. Carbon-first cases may raise the illustrative bill; bill-protected cases refuse any increase. Both policies are shown below.
Energy comes from simulated flow × head gain at the network’s assumed 75% efficiency. The bill is a sensitivity scenario: £0.35/kWh from 17:00–21:00 and £0.18 otherwise, with no demand charges. It is not a utility tariff or a commercial savings estimate.
Every February day, including the ones that fail.
All complete current/prior-day grid profiles from 1–28 February 2020, plus declared demand-stress and adverse controls. This is an exploratory benchmark, not an untouched out-of-sample validation of the controller.
| Case | Raw CO₂ difference | Scenario bill difference | Admission result |
|---|
Download the saved run and re-solve it yourself.
The browser explores a saved hydraulic run; it does not run the solver. Download the results and run python scripts/hydraulics.py --verify /path/to/results.json in the supplied project. The verifier re-solves every schedule and checks every metric and verdict. Startup hashes the network, source profiles, replay script and results before serving this snapshot.
The existing Solidity receipt checks the separate single-tank accounting experiment. This lab does not issue a hydraulic safety certificate or claim on-chain verification of network physics. Model calibration, genuine meter identities, utility operating permissions and a field pilot remain necessary.
Results · 25 days in February 2020
The only difference between the two rule-based plans is the evening refill. Every plan that skips it leaves tomorrow 7,000 m³ short, so none can be accepted.
Figures include failed days. Equal safety of the model’s smaller margins is not established.
Gross reduction includes failed and negative days. Forecast-specific margins change both storage buffer and pump headroom; equivalent operational safety has not been established. This is exploratory retrospective evidence.
Every depleted-storage fixture ends 7,000 m³ short. All traces are simulated. Model/persistence contract counts in this table refer only to this comparison report.
Show your work
Real inputs. Visible assumptions.
Results that include the difficult days.
140 gradient-boosted trees predict the next day’s hourly demand using calendar features and earlier consumption. The pump schedule is a constrained linear programme, not an AI-generated instruction.
Missing, non-positive and duplicate-hour days are excluded from the raw source. No future weather and no test observations are used to fit the model. Empirical intervals are not safety guarantees.
Every replay day, including failures.
All source-complete days from 1–28 February 2020. The controller was developed on the first period and then tested unchanged on 15–28 February. Planning uses yesterday’s carbon profile. Failed days retain their raw emissions difference, but earn no receipt.
| Replay day | Modelled difference | Change | Short-sighted water debt | Receipt eligible |
|---|
Both datasets are CC BY 4.0. German demand and GB carbon are deliberately paired as a transfer scenario, not observations from a single utility.
Try to break the claim
Each experiment uses an isolated local contract.
The rejected transaction is real.
Each attempt runs on a real local contract.
Uses a successful default replay day so the chosen attack is the reason for rejection. The operator and auditor are separate local addresses controlled by this demo server.
A shared contract applies the same rule for every party; it cannot make the input data true.
A utility, flexibility buyer and auditor can share the same day-level accounting rules and see the same settled receipt. Solidity recomputes all 24 water balances and the carbon arithmetic. It cannot authenticate a physical sensor, make a dishonest auditor honest, or prevent a claim in an unrelated deployment. Production use needs metering, identity governance and a shared asset registry.