erc-8004 · monad mainnet · freshness

Every number here is a measurement at a time.

This page says which time. A page that reports a figure that was true when it was written, with no way to tell how long ago that was, is the failure mode this exists to prevent.

10,424
agents we hold
10,424
the registry's own count
0
gap
40
verdicts that have changed

freshness

index last wrote its population
17 min ago
index at block
120,040,000
newest feedback indexed at block
119,315,525
registry says
10,424 agents
we hold
10,424 agents
gapⓘ
0
newest verdict
24 min ago
verdicts recorded, all time
20,376
claims carrying a current verdict
1,319
claims with a URI and no verdictⓘ
0
registration documents asked
2,150 of 2,151
documents never asked
1
re-derive this
SELECT
  (SELECT "atBlock"     FROM "IndexState" WHERE "chainId" = $1 LIMIT 1) AS index_block,
  (SELECT "updatedAt"   FROM "IndexState" WHERE "chainId" = $1 LIMIT 1) AS index_updated,
  (SELECT max("blockNumber") FROM "Feedback" WHERE "chainId" = $1)      AS feedback_block,
  (SELECT count(*) FROM fovea.verdict)                                  AS verdicts_total,
  (SELECT count(*) FROM fovea.verdict_latest)                           AS with_verdict,
  (SELECT count(*) FROM "Feedback" f WHERE f."chainId" = $1 AND f."feedbackUri" <> ''
     AND NOT EXISTS (SELECT 1 FROM fovea.verdict v WHERE v.feedback_id = f.id)) AS without_verdict,
  (SELECT min(checked_at) FROM fovea.verdict)                           AS oldest,
  (SELECT max(checked_at) FROM fovea.verdict)                           AS newest

workers and what schedules them

A worker that is not scheduled is a worker that does not run. The schedule lives in the repository and the deploy installs it, rather than living in somebody's memory.

Retina, the indexercontinuous, following the head

Follows the ERC-8004 registries on Monad and writes Agent, AgentRecord and Feedback rows. The evidence pointer exists only in a non-indexed log field, so without this there is nothing to check.

population checkevery 10,000 blocks from block 105,000,000

Reads the registry's own counter slot and records it against the block it was read at. The registry is not enumerable, so this is the only source of population truth.

Fovea, the verdict sweepnew claims hourly (kanmani-sweep). Documents that can change plus every unknown rechecked every 6 hours (kanmani-recheck). Every check is kept

Walks every claim without a verdict down the ladder and appends one. Never updates one. A cited transaction missing from Monad is searched for on the other chains we can read, so a mislabelled network is told apart from a missing payment.

the record probedaily at 03:30 UTC, systemd timer kanmani-probe (ops/systemd)

Asks each distinct registration document whether it still answers. Deduplicated by record hash, per host, serial, with a gap, because a handful of hosts carry most of the documents.

usage countsevery 10 minutes, systemd timer kanmani-usage (ops/systemd)

Turns the access log into daily counts per surface and reads on-chain use of our contracts. Salted daily hashes, no IP stored.

the indexer · retina on hypersync

What Retina has processed and where the two chains cross.

Read live from Envio's own tables, so a reader with psql gets the same numbers by running the strings below. BSC and the cross-chain merge come live after the one pending resync, so until then they read Monad only rather than blank. A schema dropped mid-resync reads unknown rather than zero.

per chain · head, lag, events

BNB Smart Chaincaught up to head
head132,109,046
processed132,109,046
lag0
events2,347,963
Monadcaught up to head
head120,043,443
processed120,043,443
lag0
events54,598
re-derive this
SELECT chain_id,
       block_height                            AS head,
       latest_processed_block                  AS processed,
       (block_height - latest_processed_block) AS lag,
       latest_fetched_block_number             AS fetched,
       num_events_processed                    AS events,
       is_hyper_sync                           AS is_hyper_sync,
       timestamp_caught_up_to_head_or_endblock AS caught_up_at
FROM public.chain_metadata
ORDER BY chain_id

rows per entity

entityBNB Smart ChainMonad
Agent408,72310,424
AgentRecord252,9892,244
AgentRecordOwner384,60110,148
Feedback30,1569,436
Validationunknown5
ChiasmRecord246,512 cross-chain, one row set
ChiasmPresence246,517 cross-chain, one row set
re-derive this
SELECT 'Agent'            AS entity, "chainId", count(*) AS n FROM "Agent"            GROUP BY "chainId"
UNION ALL SELECT 'AgentRecord',      "chainId", count(*) FROM "AgentRecord"      GROUP BY "chainId"
UNION ALL SELECT 'AgentRecordOwner', "chainId", count(*) FROM "AgentRecordOwner" GROUP BY "chainId"
UNION ALL SELECT 'Feedback',         "chainId", count(*) FROM "Feedback"         GROUP BY "chainId"
UNION ALL SELECT 'Validation',       "chainId", count(*) FROM "Validation"       GROUP BY "chainId"
UNION ALL SELECT 'ChiasmRecord',     NULL::integer, count(*) FROM "ChiasmRecord"
UNION ALL SELECT 'ChiasmPresence',   NULL::integer, count(*) FROM "ChiasmPresence"
ORDER BY entity, "chainId" NULLS FIRST

events per handler

Rows each handler wrote, not a raw log count. MetadataSet and URIUpdated mutate an Agent in place and keep no counter of their own, so they fold into the Agent row. An exact per-event-name count needs Envio's raw_events table, which this deployment keeps off. See indexer/README.md.

BNB Smart Chain
registered408,723
transfers (later)2,618
metadata updates406,588
new feedback30,156
feedback revoked1
responses8
validation requests0
validation responses0
Monad
registered10,424
transfers (later)87
metadata updates10,471
new feedback9,436
feedback revoked2
responses0
validation requests5
validation responses5
re-derive this
SELECT c."chainId",
       COALESCE(a.registered, 0)           AS registered,
       COALESCE(a.later_transfers, 0)      AS later_transfers,
       COALESCE(a.metadata_updates, 0)     AS metadata_updates,
       COALESCE(f.new_feedback, 0)         AS new_feedback,
       COALESCE(f.feedback_revoked, 0)     AS feedback_revoked,
       COALESCE(f.responses, 0)            AS responses,
       COALESCE(v.validation_requests, 0)  AS validation_requests,
       COALESCE(v.validation_responses, 0) AS validation_responses
FROM (SELECT "chainId" FROM "Agent"
      UNION SELECT "chainId" FROM "Feedback"
      UNION SELECT "chainId" FROM "Validation") c
LEFT JOIN (SELECT "chainId", count(*) AS registered,
                  sum("transferCount") AS later_transfers,
                  sum("metadataUpdateCount") AS metadata_updates
           FROM "Agent" GROUP BY "chainId") a ON a."chainId" = c."chainId"
LEFT JOIN (SELECT "chainId", count(*) AS new_feedback,
                  count(*) FILTER (WHERE revoked) AS feedback_revoked,
                  count(*) FILTER (WHERE "responseUri" IS NOT NULL) AS responses
           FROM "Feedback" GROUP BY "chainId") f ON f."chainId" = c."chainId"
LEFT JOIN (SELECT "chainId", count(*) AS validation_requests,
                  count(*) FILTER (WHERE response IS NOT NULL) AS validation_responses
           FROM "Validation" GROUP BY "chainId") v ON v."chainId" = c."chainId"
ORDER BY c."chainId"

merged on record hash · the two chains cross

246,512
documents indexed
5
referenced on both chains
0
key collisions
BNB Smart Chain: 2Monad: 1
BNB Smart Chain: 2Monad: 1
data:application/json;enc=gzip;level=6;base64,H4sIAHXNhWkAA61XT2/bNhS/91MI3jW2lDhJ7d6KYAN2GFaguw2D8Ew9yZwpUiMpJ+rQ794fJceWFcWJ0/ggWY/v/3/+/yGKJr6pePIpmqy9r9ynOGZZuRn7NVuuy5mxRfzr71++BvB0kSTXv1gupPOWvDR6ur2cXAQmmsqWyWdrjY7uZlEHztgJK6uAGk4j0qSabxxl5OkiKmnDF4BlET+wqD1HudSkhSQVZSykA5m7iDJpWXjVRFJ7tiS81EV0L/06WikjNmJNUkcsjGuc59J1kmVJxZFZwF3NggFOkJ5RVcXXnNB8wZwsP94k2SKfXybJIv94STe3SXYpcr5lQbdzEvNVkiyTq2V+nc9v5vPlckE5Lxezf6uiE+bYbqVgB3l/4zuKgmPDb++XPz9//a3FbaGss8rAmr5+BQyqVzNhypgK7UUTG3J5fCDasg0OCTTbZLaYJYcjt5FKHaS3MJivfWqsWPNjtGJrFKfknCx0idM9g4AeIuOlIJV23OKSkAN4tDDL5IyG41twem9sllbWrNSjw9/C5in4TawKNiV727yJuKotp61NpkJyBTe9YJAwGQh7X5x6k2ZGwM04OJ/aoD5K+a2Vfb5oLitFHrl3BqXnBx+UDhzOlHj4epO7ATSWy5A720G8V+S4o+5DQ6dIWRdSMwf3xi3gv5qU9E3IZXZumMvjNEIxDXMs462pXFoqPGOpc0sIYi18SIpWxVBxA5rCoBJDm2L4D86X4W9cGSVFg0yqqlfhW+k2UCkUYw4fDWNf1srLtDQZqZjqTJqgDjqMa524C5+rmMW6T6YJqsPhinRRowP0qXoxOsRjDPhTDHP05xQGj1p1Nrddi0mdUcN0OcUL06tltB8Y6H0rSQi09LI4Sy0khbEhj42GXqhw3oYkbzQy2UnX2Yt47MS8F9sXzt9LzEabe8UZiN6dtWPC7JnsmP2zn1WZKTGvB8OKs7rLlnj/r69H7zhFFdthlo6QQxeP4tBGmeJoMrBmWzRx93r2AIWsYfCws+xwKnPPNsWA3U2MERSL9z0hedGInkraSqxJgXlwmZAcOoJQ2Fk8ItF9v0xwDO0a0LlUJerMm9AkX0EpRpw5huhq5xFjWsnQpPv43X6HHURn6apGHiGZ4hXpzUCBUbwd8LV4R8AXiaTeYk8KhqT7be4lGqQ9yaNptWZSfi3Iclxy1vag8Sxc10gw1I0ztYWoeG3BumuAR3KHeGHam4YZIEz94bIyxA7zhrXrirRVHcmYS3+SaPB9ChV7ua1l67VTaGiOMpRsqwJGLmPcDmmkzpA1Fqt/KL06tNW6nd1Ue3SMYZU9i46BYYZORLtBGzua0mPFrbjAtA0zQylcOLBihH6HrfA4hzu09vkMOJjedb+n54cB9NgZ2/f3DvPJveGPuy+nrw0ULly4ZmG3CZe20evCVXJ1M01up5eLTuhzwu7gUlOelpeb3Aia9cXiMrCBsBkiG+8E4Nl2/En/stj2/A7s6qoy1nP2l4XMwzAAflX7frQnwjaVN1M0H21KKR7BnnlKHnvvDnsvMczhbTAHixy3kIfr5GoncAf+8P0HKc0IPvoOAAA=2 agents · 2 chains
BNB Smart Chain: 1Monad: 1
re-derive this
SELECT count(*)                                              AS documents,
       count(*) FILTER (WHERE "chainCount" >= 2)             AS on_both_chains,
       count(*) FILTER (WHERE "chainCount" >= 2
                        AND "uriConflict")                   AS key_collisions
FROM "ChiasmRecord"


SELECT r.id AS uri_hash, r.uri, r."chainCount", r."chainIds", r."agentCount",
       r."firstSeenChainId", r."uriConflict",
       p."chainId", p."agentCount" AS agents_on_chain, p."firstAgentId"
FROM "ChiasmRecord" r
JOIN "ChiasmPresence" p ON p.record_id = r.id
WHERE r."chainCount" >= 2 AND NOT r."uriConflict"
ORDER BY r."agentCount" DESC, r.id, p."chainId"

who uses this

Counted without tracking anyone: public chain events, software and site names plus daily counts whose distinct-client figure is a salted hash that cannot be linked across days. Requests: 2026-11-01 to 2026-11-07.

on chain, anyone can check

0

actions on our contracts by addresses that are not ours (ours: 13)

None yet. Every job, bond and passkey binding so far is ours.

0 agents registered by others with a URI our registration check produced (34 URIs checked, 13 registered in all).

software that called us

  • brickbluebotMCP client · 118 calls · 6d
  • taifoon-harvesterMCP client · 18 calls · 7d
  • mcpMCP client · 6 calls · 6d
  • taifoonharvestertool · 684 calls · 7d
  • taifoon-seller-probetool · 294 calls · 7d
  • taifoon-autoconnecttool · 290 calls · 7d
  • kanmani-doctortool · 122 calls · 6d
  • taifoon-link-sweeptool · 73 calls · 6d
  • taifoon-content-probetool · 6 calls · 6d
  • defigent-research-probetool · 4 calls · 1d
  • ziwei-s6tool · 1 calls · 1d

requests

browser-like clients (not a count of people)
10,841 client-days · 49,220 page views
of those, made one request and left
at least 0 (0%)
api:service:read
687 · 51 client-days
well-known
634 · 44 client-days
api:service:call
489 · 20 client-days
mcp
138 · 44 client-days
feed
88 · 44 client-days
llms.txt
65 · 45 client-days
api:verify:call
47 · 28 client-days
webhook
45 · 29 client-days
crawlers (not use)
63,662
Not measured: Who anyone is. No IP, user agent string or cookie is stored; distinct clients are salted hashes that are unlinkable across days. Whether a browser-like client is a person. Scrapers that present a browser user agent are counted with readers. Most of these clients make one request and leave. The floor shown is derived from the stored counts; it is not a count of people. Use that never reaches us: someone reading a copy of our data or running the verifier from the repo. Sites that embed us with a no-referrer policy: their calls count, their name does not. Registrations built with the studio or the API and then edited before sending: the URI no longer matches. Self-traffic from our own tests is excluded only where it runs in a headless browser; our own curl calls count as software. Machine-readable: GET /api/usage.

verdicts that have changed · 40

Either we were wrong and corrected it or somebody fixed their document and the page moved on its own. Both are worth showing and neither is visible in a store that updates in place.

unknown→true57 checks · 2026-11-07 00:37Zhttps://monadvision.com/tx/0x7e816f672e9d399cde5ec0ec2381c2dbd0d8cae40c0b9a1fcc80a5eef6aa73d4unknown→true57 checks · 2026-11-07 00:37Zhttps://monadvision.com/tx/0x3bd2ad87f709aaa2cbf274894c3a203e19f069339c467d47c4d2136c156faa3eunknown→true57 checks · 2026-11-07 00:37Zhttps://monadvision.com/tx/0x32327b352ae094647abc0ec0a437f72422b271b897af5792994a116fa68409c8unknown→true57 checks · 2026-11-07 00:37Zhttps://monadvision.com/tx/0x3a8ef5d0d355787c7e875854fc18b1d8799f6af320a769a983504fef9d11d214unknown→true59 checks · 2026-11-07 00:37Zhttps://monadvision.com/tx/0x50181fa24f8f8d2cd80b528c0d1b27224ccfd7564a9ea50d5dfa00a5ae0019e8unknown→true59 checks · 2026-11-07 00:37Zhttps://monadvision.com/tx/0x89c641582b8ee77581e5526f8382ff5cca40c6134d888776ff6454d7fd8e4526unknown→true59 checks · 2026-11-07 00:37Zhttps://monadvision.com/tx/0x20e1932fc2dbff0683a0f907c29f6c9278249ee8f32dea807800e171759cf135unknown→true63 checks · 2026-11-07 00:37Zhttps://monadvision.com/tx/0x8c5d25b82168004ff4be4d218b3f566d7a6c553fb90f3db96354c484a5a2febbunknown→true65 checks · 2026-11-06 18:38Zhttps://monadvision.com/tx/0x664e6a42b6c0f444498b32c6aed5603e433e7a0e77a9112b4d59db8069e46644unknown→true65 checks · 2026-11-06 18:38Zhttps://monadvision.com/tx/0x216973ddc6e9f06ce13f5d3fcbb8576300d4722ce412f0c8d9ff052f4ed228fefalse→true84 checks · 2026-11-06 18:37Zhttps://execution.market/feedback/85e10385-0ce1-4680-8138-13f2f5b44911/executor_rates_requester_1790536619.jsonfalse→true84 checks · 2026-11-06 18:37Zhttps://execution.market/feedback/50c5c80d-5340-4e4c-8a16-5fbb1ed1c390/executor_rates_requester_1790536144.jsonunknown→true83 checks · 2026-11-06 18:37Zhttps://gateway-mainnet-production.up.railway.app/reputation/0x0e85f01d3f69ae94d2c7223792ce152637482fe6959736899368a4854bd5a2ccunknown→true83 checks · 2026-11-06 18:37Zhttps://gateway-mainnet-production.up.railway.app/reputation/0xf3bf61febd6e582590671a4082f00c032cf0170d66999ea4e7f2413333c838b7unknown→true83 checks · 2026-11-06 18:37Zhttps://gateway-mainnet-production.up.railway.app/reputation/0xca35d60dbd99ec922b2cd7b017777c79b981c32f701203eb6beda83e8b1fcc1cfalse→true84 checks · 2026-11-06 18:37Zhttps://execution.market/feedback/bd89dd3e-96fa-4ba8-9cd6-f63261ca0bfc/executor_rates_requester_1790536131.jsonfalse→true84 checks · 2026-11-06 18:37Zhttps://execution.market/feedback/b7a91117-5c1e-4a7d-bcc3-ae17ad9fe8f7/executor_rates_requester_1790535807.jsonfalse→true84 checks · 2026-11-06 18:37Zhttps://execution.market/feedback/83c45500-13c6-4021-b4ec-1c224be66d15/executor_rates_requester_1790535189.jsonfalse→true84 checks · 2026-11-06 18:37Zhttps://execution.market/feedback/ba56b89f-e8b7-4ca1-9272-4f27815647fc/executor_rates_requester_1790535030.jsonfalse→true84 checks · 2026-11-06 18:37Zhttps://execution.market/feedback/c68d0f03-bee2-4ceb-9cb9-c21330a7fd89/executor_rates_requester_1790534745.jsonfalse→true84 checks · 2026-11-06 18:37Zhttps://execution.market/feedback/93aa7647-500d-42e2-b746-f687c597e3b9/seller_rates_buyer_1790534395.jsonfalse→true84 checks · 2026-11-06 18:37Zhttps://execution.market/feedback/2588a171-b26f-4f35-b74f-d5a2227c23b9/seller_rates_buyer_1790534383.jsonfalse→true84 checks · 2026-11-06 18:37Zhttps://execution.market/feedback/1628ff0d-4ff3-4713-80e1-5a85796cb56b/seller_rates_buyer_1790534370.jsonfalse→true84 checks · 2026-11-06 18:37Zhttps://execution.market/feedback/e37ffdc4-3de8-465f-97c7-147c590768dc/seller_rates_buyer_1790534357.jsonfalse→true84 checks · 2026-11-06 18:37Zhttps://execution.market/feedback/78911bd3-cea7-441e-acde-51cac1cf55a0/seller_rates_buyer_1790534345.jsonfalse→true84 checks · 2026-11-06 18:37Zhttps://execution.market/feedback/ae2615fe-552e-4717-a415-d2c81de136ff/executor_rates_requester_1790533666.jsonfalse→true84 checks · 2026-11-06 18:37Zhttps://execution.market/feedback/ab186656-bbd6-4ede-a72d-4df07867f1cc/executor_rates_requester_1790533653.jsonfalse→true84 checks · 2026-11-06 18:37Zhttps://execution.market/feedback/53bc0f72-d044-4367-8646-23adaf40172d/executor_rates_requester_1790533553.jsonfalse→true83 checks · 2026-11-06 18:37Zhttps://execution.market/feedback/a035304b-3a85-4e2c-af7a-36b60f8dd125/executor_rates_requester_1790538350.jsonfalse→true83 checks · 2026-11-06 18:37Zhttps://execution.market/feedback/ca7885da-d7f6-4634-b648-e0531776fed5/executor_rates_requester_1790537630.jsonfalse→true83 checks · 2026-11-06 18:37Zhttps://execution.market/feedback/977539e7-52a1-4874-bcf8-8009bdaae0a5/executor_rates_requester_1790537558.jsonfalse→true83 checks · 2026-11-06 18:37Zhttps://execution.market/feedback/c04c14f1-e167-4b4c-b068-af926fb860fa/executor_rates_requester_1790537296.jsonfalse→true83 checks · 2026-11-06 18:37Zhttps://execution.market/feedback/dc666e74-f2a1-4a41-84ae-1c6458d46df6/executor_rates_requester_1790537281.jsonfalse→true83 checks · 2026-11-06 18:37Zhttps://execution.market/feedback/bc25da86-f2ab-4314-99c3-ebbe7463cf66/executor_rates_requester_1790536799.jsonfalse→true83 checks · 2026-11-06 18:37Zhttps://execution.market/feedback/bd8c4369-12b5-41cb-acee-4b94686fa795/executor_rates_requester_1790536786.jsonunknown→no claim2 checks · 2026-09-19 12:28Zdata:text/plain,Order%20placed%20but%20shipping%20was%20slow.unknown→no claim2 checks · 2026-09-19 12:28Zdata:text/plain,Worked%2C%20but%20picked%20wrong%20variant%20once.unknown→no claim2 checks · 2026-09-19 12:28Zdata:text/plain,Consistently%20good%20performance.unknown→no claim2 checks · 2026-09-19 12:28Zdata:text/plain,Excellent%20order%20handling%20and%20confirmation.unknown→no claim2 checks · 2026-09-19 12:28Zdata:text/plain,Reliable%20agent%2C%20smooth%20transaction.
re-derive this
WITH ends AS (
  SELECT feedback_id,
         min(checked_at) AS first_at,
         max(checked_at) AS last_at,
         count(*)        AS checks,
         (array_agg(outcome ORDER BY checked_at ASC,  id ASC))[1] AS first_outcome,
         (array_agg(outcome ORDER BY checked_at DESC, id DESC))[1] AS last_outcome,
         (array_agg(feedback_uri ORDER BY checked_at DESC, id DESC))[1] AS uri
  FROM fovea.verdict GROUP BY feedback_id
)
SELECT * FROM ends WHERE first_outcome IS DISTINCT FROM last_outcome
ORDER BY last_at DESC LIMIT $1

what this site does not know

  • 0claims carry a URI and have never been checked. Unchecked is not clean.
  • 1registration documents have never been asked whether they still answer.
  • 824registration documents answered in a way we could not read: a rate limit, a timeout, a server error or a document past our own size cap. Ours, not theirs.
  • 5validation requests exist in the Validation Registry on Monad, against 9,436 feedbacks. Only an agent's owner can open one, which is why this half of ERC-8004 stays nearly empty next to the feedback half.