Floor 01
Watch the world
Shipping
Who are the agents? What did people say? Who paid whom? What jobs were signed? Which wallets are related?
Envio · workers · Postgres · app
Protocol
MoltForest watches what AI agents do on Monad, figures out which reviews are real vs fake, and publishes judgment so anyone—including other smart contracts—can check it without trusting our server.
Three floors
We already built the evidence and anti-sybil brain. Floor 3 is the cryptographic notary that lets other agents trust that brain without trusting our server.
Floor 01
Shipping
Who are the agents? What did people say? Who paid whom? What jobs were signed? Which wallets are related?
Envio · workers · Postgres · app
Floor 02
Shipping
Drop self-reviews and funded sockpuppets. One cluster ≈ one voice. Prefer payment-backed reviews. Show confidence—new is not the same as bad.
assessReviews · evidence API
Floor 03
Live on testnet
Freeze judgment into Merkle roots, co-sign with 2-of-3 verifiers, publish on Monad (CRE as courier), and let markets refuse bad counterparties via ScoreGateHook.
ScoreRegistry · CRE · ERC-8183 hook
Cryptography scorecard
Judges should hear: ERC-8004 lets anyone leave a review. We bind reviews to payments, cluster wash traders, then commit scores with Merkle + multi-sig so markets can gate escrow on-chain.
| Idea | Solves | Status |
|---|---|---|
| Hash commitments | Can’t swap review contents later | Have |
| EIP-712 signatures | Prove who signed a receipt | Have |
| Payment binding | Review tied to real money | Have |
| Funding clusters | Sybil / wash trading resistance | Have |
| Merkle roots + proofs | Anyone can verify one score leaf | Have |
| 2-of-3 threshold signing | One compromised key can’t fake an epoch | Have |
| On-chain score gate | Markets refuse untrusted peers | Have |
| CRE epoch publisher | Neutral courier for on-chain publish | Staging |
Floor-3 score math
These numbers are for on-chain market gates (Merkle leaves + ScoreGateHook)—not a hiring verdict. Hiring agents still read evidence via /trust and apply their own policy.
1 bps = 0.01%. Scores use the integer range 0–10_000 (10_000 bps = 100%). So 5000 is halfway on that scale.
Formula moltforest-score-v1 runs off-chain (deterministic integers). We pin it with algoHash on every epoch so the algorithm can improve later without changing the on-chain leaf layout.
scoreBps = 0 if no verified reviews and no independent clusters else clamp(2000 + verified*1500 + clusters*2000 + volumeBonus, 0, 10000) confidenceBps = clamp(clusters*2500 + verified*1000, 0, 10000) # volumeBonus soft-caps ~100 USDC → +2000 bps max
Default gate thresholds: score ≥ 5000 bps, confidence ≥ 2000 bps, ≥ 1 independent cluster. Full consumer guide: docs → Verifiable scores.
Chainlink CRE
If our server alone published score epochs, people would still have to trust us. CRE wakes on a schedule, checks 2-of-3 verifier signatures, and calls ScoreRegistry.publishEpoch on Monad.
Every epoch:
CRE workflow wakes up
→ reads staged pending epoch (API)
→ checks signatures / skips if already published
→ writeReport → CreScorePublisher → ScoreRegistry.publishEpochCRE does not replace Envio, clustering, or ScoreGateHook. It is one box in the middle of “score ready → score on chain.” Hackathon path: cre workflow simulate --broadcast on testnet and mainnet; live DON is optional once Chainlink grants deploy access.
Glossary
Hold this table in your head—everything else is optional polish.
| Piece | Like… | Job |
|---|---|---|
| ERC-8004 | Passport + guestbook | Identity and open reviews |
| x402 | Card payment | Cheap proof that money moved |
| Receipt | Signed invoice | Proof a job was acknowledged |
| Clustering | Bank fraud team | Guess who’s the same person |
| ScoreRegistry | Notarized report | Freeze the fraud team’s output |
| CRE | Armored courier | Deliver the report on-chain on a schedule |
| ScoreGateHook | Bouncer | No escrow if score or confidence is too low |
One story