Phycos
Paid only for water that verifiably met the law.
Created on 20th September 2026
•
Phycos
Paid only for water that verifiably met the law.
The problem Phycos solves
Microalgae-based treatment systems clean industrial wastewater, capture CO₂ while doing it, and produce biomass that can be sold as biofertilizer. One process, three benefits — and every one of them is a claim proved today with a PDF.
The lab report showing the plant removed over 80% of BOD and COD, as Colombia's Resolución 0631/2015 requires, sits in an inbox. The carbon figure lives in a spreadsheet. The biofertilizer's provenance is the seller's word. Any of those can be edited, backdated, reissued or quietly lost.
The deeper problem is structural: the operator producing the evidence is the same party being paid for a good result. No amount of process discipline removes that conflict, and a regulator, an auditor or a carbon buyer has no way to check the chain without trusting the party at the end of it.
Phycos turns every treatment batch into one on-chain attestation that settles all three claims and binds them to the money. The regulatory threshold is enforced in the contract, not asserted in prose, and the per-cubic-metre payment is released in the same transaction as the compliance verdict. A batch that fails the standard pays nothing, issues no carbon, and is recorded permanently as a failure.
The operator cannot be paid for water it failed to treat. Compliance and revenue become the same event — which is what makes the attestation worth something to someone who does not trust the operator.
Challenges I ran into
Making the attestation impossible to game from the inside. The first design had the agent submit a removal percentage along with the readings. That is worthless — an agent that wants to be paid just submits a passing number. We moved the arithmetic into the contract, so the efficiency is derived from the raw influent and effluent values and the caller cannot supply it. The agent submits observations; the contract draws the conclusion.
Stack too deep. attestBatch originally took nine parameters and blew the EVM stack limit. Refactoring the readings into a calldata struct fixed it and left a cleaner API. A second instance came from an unexpected place: a public mapping of a 21-field struct generates a getter returning all 21 values. Making it private with an explicit view function solved it.
Compiling for HashKey Chain. OpenZeppelin 5.1 emits the mcopy opcode, which needs a Cancun-era EVM. Rather than assume HSK supports it, we pinned OpenZeppelin to 5.0.2 and compiled targeting paris, which is the conservative choice for any chain whose exact EVM version you have not verified yourself.
No production stablecoin on HSK testnet. We deployed a six-decimal mock so the interface numbers read exactly as they would against USDC or PYUSD, and documented it as a stand-in rather than pretending otherwise.
Marketplace approvals. Selling ERC-1155 biomass normally requires the seller to grant setApprovalForAll to a separate marketplace contract — an extra transaction and an extra attack surface. Putting the market inside the token contract lets it transfer on settlement without any external approval.
Keeping the demo honest. It was tempting to seed only passing batches. The batch that fails is the most important one in the build: it is the only way to show that a refusal costs the operator money, and it is what a judge should test first.
Tracks Applied (3)
AI × Ethereum & Agent Economy
Real-World Ethereum Applications
Track: Colombia Hackathon
Cheer Project
Cheering for a project means supporting a project you like with as little as 0.0025 ETH. Right now, you can Cheer using ETH on Arbitrum, Optimism and Base.