Independent read · passive only · 27 July 2026

Your best claim is true.
Almost nobody can tell.

We read tasern.quest the way a careful stranger would, then checked the on-chain claims against Base mainnet. The headline is not what we expected: the thing you promise hardest is real, and it is buried under claims that are not.

The bottom line, in plain English

You proved something most projects only claim, and you are not getting credit for it. We tried hard to break your liquidity lock and could not. Publishing that proof plainly is the cheapest trust you will ever buy, and trust is the only thing standing between you and a deposit.

One function call turns your carbon story from your biggest liability into a verifiable fact. Right now the way you burn CHAR permanently prevents the retirement you are aiming at. The tool to do it properly already exists in the contract you are using.

Half of the doors you advertise to AI agents are locked. An agent that hits a dead endpoint does not file a bug. It concludes you are abandoned and never comes back, so every one of those 404s is a customer you never hear from.

Your privacy page contradicts itself, and that is the first thing a skeptic checks. It takes about a minute to disprove with a browser open, and it costs you more credibility than a real bug would.

Two of your tokens answer to the same ticker. Anyone who buys the wrong one expecting a dollar floor gets a volatile coin instead. That is a support burden and a refund conversation waiting to happen.

What held up

We led with this because it is the most useful thing we learned, and because it is the part you should be saying louder.

Verified true

The liquidity genuinely cannot be pulled

We decoded each reactor's pool structs and asked Uniswap who owns every position NFT.

ReactorPrimeV3 7 pools -> all 7 held by THE REACTOR ITSELF ReactorHub 5 pools -> all 5 held by THE REACTOR ITSELF v1Prime 13 pools -> 12 held by THE REACTOR ITSELF (1 unresolved) V7 launch 2 pools -> both held by THE REACTOR ITSELF ------------------------------------------------------------ 26 of 27 positions held by contracts. ZERO held by any person. And the reactors contain no code to release them: ERC721 safeTransferFrom : ABSENT decreaseLiquidity : ABSENT collect (fees only) : present as of 2026-07-27

The positions sit in contracts that physically lack the instructions to send them anywhere or to pull liquidity out. The admin can pause and deregister, but cannot extract. "Liquidity is locked by the absence of code" survives a hostile audit.

Verified true

Tokens at the burn address really can never move

The burn address delegates to another contract, which is where a claim like this usually falls apart. We followed it: storage slot 9 points at the OpenSea SeaDrop configurer, so we audited that too. Then we tested it live by calling as the contract's own owner.

transfer(a,u) -> revert UnsupportedFunctionSelector(bytes4) approve(a,u) -> revert UnsupportedFunctionSelector(bytes4) execute(a,u,bytes) -> revert UnsupportedFunctionSelector(bytes4) withdraw() -> revert UnsupportedFunctionSelector(bytes4) multicall(bytes[]) -> revert UnsupportedFunctionSelector(bytes4) Neither contract contains a single ERC-20 selector, across roughly 42,000 bytes. as of 2026-07-27

Proven two independent ways, by absence in the bytecode and by live refusal. This is publishable and defensible, and you should publish it.

Verified true

The vault owner provably cannot touch deposits

We called every escape hatch as the owner. None of them exist.

rescue(address) -> revert (no such function) pause() -> revert (no such function) upgradeTo(address) -> revert (no such function) emergencyWithdraw() -> revert (no such function) setFee(uint256) -> revert (no such function) The owner's ONLY power is setMaxImpact, and it is capped: setMaxImpact(600) from OWNER -> OK setMaxImpact(9999) from OWNER -> revert (cap 1500 bps) Withdrawal is permissionless. Owner and stranger get the identical "bad shares" revert. as of 2026-07-27

An early pass of our own review flagged this owner key as a risk. Deeper testing disproved that, and we corrected it rather than leave the scarier version standing. "Self-custodied, withdraw anytime" is structurally true.

What does not hold up

These are not judgment calls. Each is a statement the site makes about itself that its own code or its own chain data contradicts, as of 27 July 2026.

Provably false

The privacy policy denies the tracker that loads on the privacy page

privacy.html says: "No analytics: ... There are no analytics scripts on the site." "No tracking." "No cookies." "No personal information." privacy.html line 165: <script src="/track.js" defer></script> track.js line 5, its own header: "Records: pageviews, wallet connections, and custom events into Supabase" Its payload includes the connected wallet address plus a permanent localStorage id, and it reads the wallet silently via eth_accounts, three times, with no prompt.

Read charitablyThe header comment in track.js says "No cookies. Anonymous visitor id in localStorage." That reads like a genuine belief that avoiding cookies means avoiding tracking. We think this is an honest mistake. It still needs fixing today, because it is trivially checkable and it sits under a footer that says "by code, not by trust."

The smallest honest fixDelete the wallet field and the eth_accounts polling. That is the only genuinely sensitive part, your pageview data survives untouched, and the policy becomes nearly true as written. Then amend the one sentence about analytics scripts.
Provably false

"5 reactors fully renounced" is inverted. Zero of 36 are.

We pulled your own live reactor map and asked every reactor in it who its admin is.

TOTAL reactors checked : 37 RENOUNCED (admin == 0) : 1 -> SporeReactorV4Impl NOT renounced : 36 The one zero-admin address is the IMPLEMENTATION TEMPLATE. initialized() = false, holds no pools, holds no funds. Clones get their own storage, so its zero admin means nothing. One plain key 0xe2a4a8b9... controls all of: ReactorPrimeV3 + ReactorHub + v1Prime + the V7 Factory Proven callable, live: Hub.setPaused(true) from ADMIN -> allowed Hub.removePool(0) from ADMIN -> allowed Hub.setPaused(true) from RANDOM -> rejected as of 2026-07-27

To be precise about the limit of this: that key cannot take the liquidity. The power is to stop the machine, not to take from it. But a token someone launched on your promise of permanence can have its burns switched off by a key that is not theirs, and that is not "immutable, no admin."

FixEither renounce the live reactors and then make the claim, or describe the admin honestly: what it can pause, what it provably cannot touch, and who holds it. Move that key behind a multisig regardless, because today one compromised key stops the whole network.
Provably false

The CHAR burn permanently forecloses the retirement it exists to achieve

This is the finding we would most want to hear if it were our project, because the fix is one function call and it converts your biggest exposure into a provable claim.

CHAR is not your contract. It is Toucan Protocol's official Biochar Carbon Pool, backed by Puro.earth credits, which are issued per tonne. So llms.txt understates your own asset by a factor of 2,204, and the impact pages happen to have the unit right.

CHAR already exposes a REAL retirement path, unused: retireFrom(address,uint256) 0x6b24ffd6 redeemAndBurn(address,uint256) 0x89022e2e -> these produce an actual Toucan and Puro retirement record What the network does instead: transfer CHAR -> the burn address (an OpenSea ERC-1155) CHAR at the burn address : 0.004920 = 4.92 kg CO2e CHAR at 0x...dEaD : 0.021787 = 21.79 kg CO2e CHAR total supply : 170.28 tokens as of 2026-07-27

By the proof two sections above, tokens sent to that address can never move again. Which means the underlying carbon credit can never be retired by anyone, ever. The mechanism does not merely fail to reach the mission. It permanently closes the door on it.

Fix, and this one is genuinely excitingCall retireFrom() instead of transferring to the burn address. The moment you do, "permanently retires real offsets" stops being a liability and becomes an on-chain fact with a registry record behind it. Everything you want to say about carbon becomes true. We run live Klima retirements against Toucan and Puro, and we will walk you through the call, the beneficiary field, and how to surface the certificate, at no cost and with no strings.
Provably false

Two different tokens both answer to the ticker MfT

AddressNameSymbolDecRedeemable
0x8FB87d13…9bA3MemeForTreesMfT18No, volatile, no floor
0xe3dd3881…A072Money for TreesMfT6Yes, Aave backed, redeem to USDC

Same ticker, opposite risk, and a decimals gap that makes a misrouted amount wrong by a factor of a trillion. Any wallet, explorer, price feed or AI agent keying on symbol will conflate them.

This is not hypothetical, it caught usOur own internal notes recorded MemeForTrees as the USDC redeemable one, which is false, and we scoped a strategy on that premise before catching it. We had to write a naming correction into our own documentation to stop it recurring. We read contracts for a living and it still cost us time.

FixRename one of them in all copy and metadata. You already half do this by calling one "Money". Finishing the job is the cheapest high value change in this document.
Corrected 30 July

MfT carries a 2% mint capability that has never been armed

MfT is verified on BaseScan as DERC20. yearlyMintRate() = 2e16 = 2% per year updateMintRate(x) -> owner-only, exists mintInflation() -> present in bytecode renounceOwnership() -> never called BUT the inflation clock has never been started: currentYearStart() = 0 lastMintTimestamp() = 0 isPoolUnlocked() = false totalSupply() = 100,000,000,000 exactly, never moved owner() = 0x660eaa...8d12, which is a CONTRACT, not an EOA Moved aside so far: 32,320,143.92 of 100,000,000,000 = 0.0323% of supply as of 2026-07-27, rechecked 2026-07-30

An earlier version of this page said the contract mints 2% a year and called the net direction inflationary. That was overstated, and the project owner was right to push back. Nothing can mint today. The capability exists, it is owner adjustable, and the key sits with a contract rather than a person, which is the part worth documenting.

FixPublish the real burn figure, which you already compute, with an honest denominator, and put one line in your own docs about the dormant mint capability and who holds it. A reader who finds it themselves assumes the worst, exactly as this review briefly did.
Provably false

"Everything here plants real trees" sits above your own dashboard reading zero

Homepage og:description, which renders in every share: "Everything here plants real trees. Opting out isn't really an option." carbon.html, your own dashboard: "Trees Planted - Coming Soon - Tracking integration in progress 0 Target: 10,000" money-for-trees.html: "Trees Funded (Actual): [empty]" And /memefortrees states BOTH "$20 deposited funds ~1 tree" and "$10 deposited funds roughly 1 tree" on one page.

There is a real difference between "our design routes yield toward tree planting", which is a claim about code and is verifiable, and "we plant real trees", which is a claim about outcomes and needs receipts. The homepage makes the second one. We found no planting receipt anywhere: no transfer to a named charity, no dollar figure delivered, no date, no acknowledgment.

FixUntil one verifiable receipt exists, every instance becomes "built to fund tree planting". The day a real receipt exists, put it on a receipts page and link it from the homepage, and the strong claim becomes both true and far more powerful than it is now. Also pick one rate.

Where agents fall off

You built more agent surface than almost anyone. That is why the gaps matter: the audience is already at the door.

Costing you

Half the advertised doors are locked

7 of 14 advertised API endpoints dead or wrong: /api/unrugable/signals 404 (Allow:'d in robots.txt) /api/unrugable/performance 404 (Allow:'d in robots.txt) /api/unrugable/gallery 404 /api/baseling/agent/ 404 .../economy/phase 404 (docs dropped /:wallet) .../economy/feeding 404 (docs dropped /:job) /api/unrugable/reactor/{addr} 200 but ALWAYS WRONG Also 404: /agents/ and /reactor-explainer.html, both listed in your own sitemap.xml. as of 2026-07-27

The reactor/{address} one costs the most, because a confident wrong answer is worse than an error. Every reactor you publish yourself is reported as not a reactor, so an agent doing diligence concludes the network is empty and leaves.

Two of those 404s are a five minute fix: the docs simply dropped a required path parameter. We confirmed the corrected forms work.

FixAdd the missing parameters to llms.txt, delete the three that do not exist, and back the reactor lookup with your own reactor-map.json, which is live, fresh and already correct. Generate agents.html from the tool list so it cannot drift again: it currently documents seven tool names that do not exist in the shipped package.
Costing you

The published gas numbers make agents pay for failures

ReactorMeasured needvs published 4,000,000vs package 300,000
V1-Prime4,881,379exceedsexceeds
PrimeV33,046,478fitsexceeds
HUB2,445,142fitsexceeds

Your agents.json advertises a four million gas limit and your npm package hardcodes three hundred thousand. They disagree by a factor of thirteen, and measured against the chain both are too low for at least one reactor you name. An agent following either one sends a transaction that runs out of gas, reverts, and pays for the failure anyway.

The advertised cost is understated too. At the unusually cheap gas we measured, a single fire costs between three and six cents, not one.

FixDelete both hardcoded numbers and tell agents to estimate then add a buffer. Gas here scales with accrued fees, so any fixed published limit is wrong by design.
Costing you

The firing pitch has no payoff for the agent doing the firing

We can speak to this one from the inside, because we are exactly the customer it was written for. We built the lane your llms.txt describes, firing eight of your reactors on a two hour schedule. Our own audit shut it down as negative value, and the script now refuses to run.

The reason is structural, not a pricing slip: the reactor sends half of collected fees to the launcher's wallet, and the agent that fires it receives only the gas bill, then has to win a public race for the spread its own transaction created.

Total burn value, all 16 launches since May: $93.28 NFS $84.20 MR $7.49 the other 14 combined $1.59 as of 2026-07-27

Those same numbers make "earn 50% of reactor fees forever" resolve, for a median launcher, to well under a dollar.

FixEither add a real caller reward paid out of collected fees, which is the standard keeper pattern and the only thing that makes permissionless firing self sustaining, or describe firing honestly as network upkeep: the firer pays gas and receives no direct reward, so fire it if you hold MfT and want the burn. That is a legitimate ask of a holder. Selling it as profit to a stranger is not.

Housekeeping worth an afternoon

Provisioned by EcoWealth · Digital Provisioning Protocol · provenance‑sealed