MonadSentry

Smart-contract audit agent with ERC-8004 identity and reputation-gated pricing
Monad chain 143 Track 04

Identity registry

0x8004A169FB4a3325136EB29fA0ceB6D2e539a432
code on chainchecking…

Reputation registry

0x8004BAa17C55a88189AE136b182e5fdA19dE9b63
points at identitychecking…

MonadSentry contract

not deployed yet
statuspending deploy

Live agent state

agent id
agent wallet
feedback entries
audits anchored
Reads run straight against rpc.monad.xyz with eth_call. No wallet needed.

Price book

TierPriceMin feedbackOpen to you
0 · cold start0.5 MON0yes
1 · proven2.0 MON3needs 3
Tiers are enforced in requestAudit. Below the minimum the call reverts ReputationTooLow, read live from the canonical Reputation Registry.

Audit lifecycle

  1. registerAgent(agentURI)

    Canonical registry safeMints the agent NFT to this contract, so MonadSentry itself holds the identity and is the default agent wallet.

  2. setPriceTier(tierId, price, minFeedbackCount)

    Operator publishes the price book. Each tier carries a reputation floor.

  3. requestAudit(agentId, targetHash, targetURI, tierId)

    Client opens the audit and locks the target bundle hash. Reverts if the agent has not earned the tier.

  4. deliverAudit(auditId, reportHash, reportURI)

    Agent posts the report reference. Anyone can hash the artifact and compare.

  5. attestReport(auditId, feedbackValue)

    Client closes the record, then writes the reputation entry directly on the registry using feedbackParams(auditId).

Why the client writes the feedback

The canonical Reputation Registry rejects any caller for which isAuthorizedOrOwner(msg.sender, agentId) is true. MonadSentry holds the agent NFT, so it can never write feedback about its own agent. That guard is the point: reputation only exists if a counterparty put it there.

feedbackParams(auditId) returns the exact arguments to pass, so every MonadSentry entry carries tag1=monadsentry, tag2=audit, endpoint=audit:N and stays queryable as one reputation stream.

Integration constraints

evm versioncancun (proxies use PUSH0)
receiverIERC721Receiver required
setAgentWallet4-arg, EIP-712 by newWallet
NFT transferwipes agentWallet

Verification

4
unit tests vs mock registry
9
fork tests vs live mainnet registries
143
chain the fork suite runs against
forge test runs the mock suite offline; forge test --fork-url https://rpc.monad.xyz exercises registration, the reputation gate and the full audit lifecycle against the deployed registries.