# METHOD — Solana ERC-8004-adjacent program census, 2026-09-02

Companion to `dataset.csv`, `dataset.jsonld`, `DATA-DICTIONARY.md`, and
the raw JSON at
`https://onchainagentintel.io/data/solana_8004_census.json`. Documents
what was probed on-chain, how the account set was filtered, how the
headline aggregates are derived, and what this is NOT.

## What this measures

For a single Solana program on `mainnet-beta`, at a frozen slot, the
total count of registration accounts, the number of distinct creators,
the top-1 / top-10 / top-20 creator-share percentages, the share of
accounts carrying a non-empty `agent_uri`, the prefix histogram of
those URIs, and the share of accounts matching a specific observational
"claw" byte-pattern.

**This measures program-account count + creator concentration +
agentUri population on a frozen Solana slot, not agent quality,
revenue, or any Base/Ethereum readiness tier.** No agent is scored,
ranked, or bucketed by this dataset. Readiness / Trust scoring and the
published methodology are unchanged. This probe does NOT re-run on a
schedule and is NOT part of Agent Zero's indexed data set. The live
product covers Base + Ethereum only.

## Scope and ecosystem note

Agent Zero's live product scans and reports **Base + Ethereum**. Solana
is a separate ecosystem with a different address format, program model,
and account layout; it is not part of Agent Zero's indexed universe.
This probe is published for cross-ecosystem comparison alongside the
companion EVM census at
[`/data/erc-8004-four-chain-census-2026-09/`](https://onchainagentintel.io/data/erc-8004-four-chain-census-2026-09/).
The target Solana program is **ERC-8004-adjacent**, not an ERC-8004
registry — ERC-8004 is an EVM standard. The target program is
observationally similar in intent (per-agent registration accounts with
a URI field) but is a Solana-native program with its own account
discriminator and schema.

## Source

- The underlying probe was a
  one-time observational scan whose raw JSON is already live on the
  site.
- Raw JSON (publicly served):
  `https://onchainagentintel.io/data/solana_8004_census.json`.

## Target program

| Field | Value |
|---|---|
| `rpc_endpoint` | `https://api.mainnet-beta.solana.com` |
| `program_id` | `8oo4dC4JvBLwy5tGgiH3WwK4B9PWxL9Z4XjA2jzkQMbQ` |
| `agent_account_discriminator` | `[241, 119, 69, 140, 233, 9, 112, 50]` |

The `agent_account_discriminator` is the 8-byte Anchor-style account
discriminator used to filter the program's accounts down to just the
registration-account variant.

## Probe window

| Field | Value |
|---|---|
| `measured_at` | `2026-09-02T15:44:02.752004Z` |
| `generated_at` | `2026-09-02T15:44:02.752004Z` |
| `slot` | `443734027` |
| `limit_applied` | `null` (no cap bite) |

The slot is the Solana slot height observed by the RPC endpoint at the
moment the account set was fetched. All counts below are evaluated
against the account set returned at exactly this slot. Re-probing at a
later slot will see a different set.

## Account filtering

Starting from `getProgramAccounts` for the target `program_id`:

1. `total_program_accounts` = **1515** — all accounts owned by the
   target program at `slot = 443734027`.
2. Accounts whose first 8 bytes equal the
   `agent_account_discriminator` are kept as **registration accounts**.
3. The remainder are discarded (they are other account variants of the
   same program, not registration accounts).
4. Each registration account is Anchor-decoded; accounts that fail
   decode are counted in `decode_failures` and excluded from the
   headline aggregates.

Resulting registration-account set:

| Field | Value |
|---|---|
| `total_program_accounts` | `1515` |
| `registration_accounts` | `1477` |
| `decode_failures` | `0` |

All downstream aggregates (`distinct_creators`, top-N shares,
`populated_agent_uri_*`, `uri_prefix_histogram`,
`claw_pattern_match_*`) are evaluated over the **1477** successfully
decoded registration accounts.

## Headline aggregates

Values lifted verbatim from the raw JSON:

| Field | Value | Definition |
|---|---:|---|
| `registration_accounts` | `1477` | Decoded registration accounts at the frozen slot. |
| `decode_failures` | `0` | Registration accounts that failed Anchor decode. |
| `distinct_creators` | `185` | Number of distinct creator pubkeys across all registration accounts. |
| `top1_share_pct` | `22.0718` | `top_1_creator_count / registration_accounts × 100`. |
| `top10_share_pct` | `78.673` | `sum(top_10_creator_counts) / registration_accounts × 100`. |
| `top20_share_pct` | `85.6466` | `sum(top_20_creator_counts) / registration_accounts × 100`. |
| `populated_agent_uri_count` | `1468` | Registration accounts whose decoded `agent_uri` string is non-empty. |
| `populated_agent_uri_pct` | `99.3907` | `populated_agent_uri_count / registration_accounts × 100`. |
| `claw_pattern_match_count` | `331` | Registration accounts whose decoded fields match the observational claw byte-pattern. |
| `claw_pattern_match_pct` | `22.4103` | `claw_pattern_match_count / registration_accounts × 100`. |

### Distinct-creator definition

For each registration account, the **creator** is the account creator
pubkey recorded on-chain for that registration. `distinct_creators` is
the cardinality of the set of creator pubkeys across all 1477
registration accounts.

### Top-N share definition

Creators are ranked by their count of registration accounts, descending.

- `top1_share_pct` = `top_1_creator_count / registration_accounts × 100`.
- `top10_share_pct` = `sum(top_10_creator_counts) / registration_accounts × 100`.
- `top20_share_pct` = `sum(top_20_creator_counts) / registration_accounts × 100`.

The 20 top creators (pubkey + count + per-creator pct) are listed in
the index page's top-20 table and in the raw JSON
`top20_creators` field.

### `agent_uri` population

A registration account's `agent_uri` is the UTF-8 string stored in the
`agent_uri` field of the Anchor-decoded registration account.
`populated_agent_uri_count` is the number of registration accounts
whose `agent_uri` is a non-empty string.
`populated_agent_uri_pct` is that count divided by
`registration_accounts`.

The `uri_prefix_histogram` is a bucketing of each populated
`agent_uri` by its scheme / host prefix:

- `ipfs://` — URIs starting with that scheme.
- `data:` — RFC 2397 data URIs.
- `inline-json` — a non-URI JSON object stored inline in the `agent_uri`
  field.
- `http(s)://<host>` — HTTP or HTTPS URIs, grouped by DNS host.
- `(empty)` — the field was present but held the empty string.
- `other` — URIs whose scheme did not match any of the above
  categories.

### Claw-pattern match

`claw_pattern_match_count` captures the number of registration accounts
whose decoded bytes match a specific observational pattern associated
with a known deployer tool-chain. It is a **byte-pattern match, not an
endorsement, affiliation claim, or security finding**. The pattern is
observational; agents authored with the matching tool-chain are not
scored, ranked, or flagged by this dataset.

## What this is NOT

- **Not an endorsement, score, or ranking.** Each registration account
  was decoded once at the frozen slot; nothing more.
- **Not a liveness guarantee.** We did not fetch any `agent_uri`; the
  histogram is a prefix count only. A URI's presence in the set is not
  a claim that it resolves, is current, or belongs to a working agent.
- **Not a Solana scoring product.** Agent Zero does not scan or report
  Solana as part of its live product (coverage is Base + Ethereum).
- **Not a methodology change.** This probe does not add, remove, or
  re-define any Agent Zero readiness tier, ranking rule, bucket
  threshold, or published methodology.
- **Not an ERC-8004 registry.** ERC-8004 is an EVM standard; this
  program is a Solana-native ERC-8004-adjacent program. The companion
  EVM census is at `/data/erc-8004-four-chain-census-2026-09/`.
- **Not a payment outcome.** This probe never paid.

## Reproducing a row

Given a Solana archival RPC endpoint that can serve `slot = 443734027`:

1. Call `getProgramAccounts` for `program_id = 8oo4dC4JvBLwy5tGgiH3WwK4B9PWxL9Z4XjA2jzkQMbQ`.
2. Keep accounts whose first 8 bytes equal the
   `agent_account_discriminator` `[241, 119, 69, 140, 233, 9, 112, 50]`.
3. Anchor-decode each kept account; discard decode failures.
4. Aggregate as defined in § Headline aggregates.

Because `getProgramAccounts` is slot-dependent on an archival RPC, a
non-archival endpoint will see a different, more-recent slot and will
not reproduce these counts exactly. The frozen slot is the ground
truth for every number in this dataset.

## License

[Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/).
Free to reuse, remix, and redistribute — including commercially — with
attribution.

> On-Chain Agent Intel (2026). Solana ERC-8004-adjacent program census,
> 2026-09-02. CC BY 4.0.
> https://onchainagentintel.io/data/solana-erc-8004-adjacent-census-2026-09-02/
