P08-L07 · P08 · P08-M02
Normalize account-level holdings and explain owner aggregation limits
Prerequisites: P08-L06
Learning objectives
- Filter and deduplicate a coherent target-mint export.
- Reconcile raw balances and aggregate supported owners.
- Publish concentration sensitivity without inventing beneficiaries.
EN source master · P08-L07 · 45 minutes estimated · needs_review
Why this matters
A token-account leaderboard is not an owner leaderboard, and an owner leaderboard is not a list of humans. Failing to reconcile those layers can hide concentration, double-count balances or attach a pool's inventory to a project team.
This lesson normalizes raw holdings, deduplicates an export and aggregates only supported account owners. P07 focused on launch-specific concentration; here the skill is making the accounting dataset coherent before interpreting it.
Explanation
Define the unit of analysis
Write whether rows represent token accounts, owner addresses, application positions or humans. Solana token-account enumeration by owner is an owner-scoped query, with a mint or program filter [S08-OWNERS]. It does not enumerate every human beneficiary.
A largest-account query returns twenty token accounts [S08-LARGEST]. It is not a complete owner census. An owner might have several small accounts outside that set, so aggregating only returned rows can understate that owner's total. Mark coverage and do not call a partial export exhaustive.
The fixture is deliberately exhaustive for one mint at one context. That completeness is a supplied educational assumption, not something inferred from a website. In real work, document collection method, filters, pagination and context consistency before claiming full coverage.
Filter before summing
First verify network and mint on every row. A program-wide export can contain several mints. Summing all its rows can produce an impressive but meaningless “total holdings.” Different assets cannot share a supply denominator merely because their decimals match.
Then distinguish raw amounts and displayed units using the verified decimal count. Preserve integer strings. A duplicated row is not a second balance. If the same account appears twice at the same snapshot, deduplicate only when the records are demonstrably identical. Conflicting values require an unresolved conflict or a defined snapshot choice.
Accounts at different contexts must not be casually added. They may represent the same balance before and after a transfer. A merged export is not automatically a snapshot. Pin records to a coherent boundary or label the result as incomplete and time-mixed.
Aggregate supported owners
After filtering and deduplication, group token accounts by the supplied owner authority field for the exact mint. This is an account-level relationship, not a discovery of human identity. Record how the owner field was decoded and verify that it is not the base program-owner field.
An owner authority can represent custody or an application. A custody address can hold balances for many beneficiaries; their distribution is unknown unless records establish it. Conversely, several owner addresses may have one controller, but that is not established by this aggregation alone.
Do not merge owners because they share funding, timing or a label. Those relationships may motivate a separate hypothesis. The denominator and supplied accounting result should remain reproducible without speculative clustering. Unsupported merges can transform a concentration statistic into an accusation.
Reconcile the supply boundary
For a complete standard accounting snapshot, compare filtered raw balances with the independently supplied total. If they reconcile, that supports internal consistency of this dataset. It does not establish authenticity of the fictional values, nor does reconciliation prove there are no special transfer behaviors.
If the sum is smaller, identify unreturned accounts, incompatible contexts or omitted accounting components. If larger, test duplicates, wrong-mint rows and unit mistakes. Never force equality by inserting an unnamed residual that is then treated as a real holder.
A declared residual can be useful in a partial dataset, but it remains an aggregate of unknown composition. It must not be ranked as one human or owner. The exercise's no-residual model makes the correction exact; later investigations may require a separate unresolved-coverage panel.
Keep categories and denominator policies transparent
Pool inventory and custodial balances remain holdings in the raw distribution. An analytical policy may exclude them for a specific question, but it does not remove tokens from supply. Show original and adjusted denominators and give a reason for every exclusion.
“Non-pool owner concentration” and “beneficiary concentration” are different. Excluding a verified pool account can answer the first. Excluding custody without knowing beneficiaries may conceal concentration rather than resolve it. Provide a sensitivity view instead of naming the adjusted number as uniquely correct.
Rank account rows and owner totals separately. An owner can lead the aggregate ranking even when no individual account is the largest. This is the key transfer skill: correct arithmetic applied to the wrong unit still answers the wrong question.
Report limits alongside percentages
Include numerator, denominator, unit of aggregation and snapshot. Avoid a single badge saying “top holder40%” without the owner/account distinction. A stronger sentence says “Owner authority A holds400 displayed units across two accounts,40% of the supplied1000-unit total at S0.”
Nothing in this calculation identifies an insider, forecasts selling or estimates beneficiary wealth. A large owner authority can be observed without knowing human control. The exercise is graded on accounting and scope, not whether the analyst assigns a bullish or bearish verdict.
Key terms
- Deduplication: removing proven repeated records.
- Owner aggregation: grouping accounts by supported owner authority.
- Coverage: extent of included records.
- Residual: unallocated difference, not necessarily one holder.
- Beneficiary: underlying claimant whose holdings may differ from custody authority.
- Sensitivity view: recalculation under an explicitly different policy.
Historical example
ILLUSTRATIVE — FIX-P08-07. SIM-SOL-A / MINT-D, d=2, S0. Unique target rows are exhaustive for the standard accounting fixture. Raw supply 100,000 means 1000 displayed tokens.
| Row | Account | Mint | Owner authority | Raw amount | Supplied category |
|---|---|---|---|---|---|
| H1 | A1 | MINT-D | A | 25,000 | ordinary |
| H2 | A2 | MINT-D | A | 15,000 | ordinary |
| H3 | B1 | MINT-D | B | 20,000 | ordinary |
| H4 | P1 | MINT-D | POOL-P | 30,000 | verified fictional pool inventory |
| H5 | C1 | MINT-D | CUSTODY-C | 10,000 | custody, beneficiaries unknown |
| H6 | A2 | MINT-D | A | 15,000 | exact repeated H2 export row |
| H7 | Z1 | MINT-Z | Z | 50,000 | different mint, same export |
Policy E excludes P1 only. A separate sensitivity policy F also excludes C1; no beneficiary data support a person-level ranking.
What the evidence proves
OBSERVED in fixture: H6 repeats H2; H7 has the wrong mint. A is the supplied owner authority for two token accounts of the target.
INFERRED: Unique target balances total 100,000 raw units. A's400 tokens exceed each individual ordinary account; its raw-supply share is 40%.
What the evidence does not prove
UNKNOWN: Custody beneficiaries, A's human identity and any shared control with B.
INSUFFICIENT EVIDENCE: Funding relationships or labels cannot justify further owner merges. Exclusion policies do not establish person-level circulating holdings.
Common mistakes
Summing wrong-mint rows, counting duplicate export entries, grouping by program owner, ranking a residual as one person, merging on labels and hiding exclusions behind a holder percentage.
Practical exercise
Filter/deduplicate the export, reconcile to supply and rank unique accounts and owner authorities. Calculate A's share under total supply, policy E and sensitivity F. State which ranking can be called a human-holder ranking.
Show worked correction
Worked correction and expected reasoning
Remove H7 because its mint differs. Remove H6 because it is the same account/value/context as H2. Unique target raw sum25,000+15,000+20,000+30,000+10,000=100,000. Display balances are250,150,200,300,100.
Unique account ranking is P1(300),A1(250),B1(200),A2(150),C1(100). Owner ranking is A(400),POOL-P(300),B(200),CUSTODY-C(100). Aggregation changes the top entry without changing total holdings.
A's total share=400/1000=40%. E removes300 pool units, denominator 700:400/700=57.1429%. F also removes100 custody units, denominator 600:400/600=66.6667%. The extra exclusion increases A's stated proportion; it does not establish who owns the custody balance.
No ranking is a human-holder ranking. All are account or owner-authority statistics with unknown beneficial control. A bounded report names each policy and leaves custody unresolved.
Score out of ten: filtering/deduplication (two), exact reconciliation (two), two rankings (two), three percentages/policies (three), human-identity boundary (one).
Checklist
- Filter exact network and mint.
- Deduplicate only proven repeats.
- Normalize raw units.
- Group the correct owner field.
- Reconcile coherent coverage.
- Publish both exclusions and denominator.
- Keep human attribution separate.
Summary
Distribution analysis starts with dataset integrity. Correct filtering and owner aggregation can change rankings without changing supply.
Summary
Accounts, owner authorities and humans are different units. Adjusted denominators are policies. Reconciliation supports internal consistency, not identity or intent.
Visual specifications
Show input rows with H6/H7 visibly rejected for distinct reasons; reconciled raw total 100,000. Side-by-side account and owner rankings. Three A-share panels40%,57.1429%,66.6667% with denominators1000/700/600 and custody unknown note.
Illustrative account and owner-authority distribution; no human-control attribution.
Use deterministic SVG/HTML or charts with text alternatives, dark navy/black and restrained cyan, electric blue and violet. Label every quantity and uncertainty. At 390px stack panels; 768px/desktop and Arabic RTL verification remain future asset work. Keep identifiers LTR and factual axes/edge directions unchanged. Use only the official supplied ZECOIN mark if branding is added. Both records are specifications, not delivered assets.
Tools
Use RADAR for the lesson's bounded educational purpose only if network support, exact identity, fields and provenance are verified. No runtime endpoint or provider capability is asserted by this content. Use the embedded offline fixture without paid access. Missing data stays unknown; no wallet connection, transaction signature, token launch or live trade is required. Academy progress, payments and referrals never change Radar evidence. A Diagnostic Passport preserves observations and limits, not a price prediction or safety certificate.
Sources & claim boundaries
- Solana getTokenLargestAccounts — Twenty largest token accounts; not exhaustive human-holder distribution. Checked 2026-09-30.
- Solana getTokenAccountsByOwner — Owner-scoped enumeration filtered by mint or program. Checked 2026-09-30.
- Solana getTokenSupply — Raw supply, decimals and RPC response context; not a circulating-supply definition. Checked 2026-09-30.
Documentation supports mechanisms, not fictional dataset values. All examples and exercise records are original ILLUSTRATIVE material, frozen in this file. S0/S1 are synthetic context labels; observedAt is null because no live or historical ledger measurement was collected. Re-review documentation and actual deployed behavior before any publication or integration.
Next lesson
P08-L08 after the worked exercise and quiz review.
Visual specifications
P08-L07-V01
How do filtering, owner aggregation and exclusions alter rankings?
Illustrative account and owner-authority distribution; no human-control attribution.
Show input rows with H6/H7 visibly rejected for distinct reasons; reconciled raw total 100,000. Side-by-side account and owner rankings. Three A-share panels40%,57.1429%,66.6667% with denominators1000/700/600 and custody unknown note.
After removing duplicate and wrong-mint rows, five accounts total 1000 tokens; A aggregates400; percentages differ only by exclusion policy.
390px stacked panels with text equivalent; later verify 768px and desktop
RTL labels and navigation; identifiers isolated LTR; preserve numeric axes, event order and factual edge direction.
FIX-P08-07
P08-L07-V02
Which claim is supported, conditional, unknown or unsupported?
Illustrative evidence boundaries; no safety or investment verdict.
Four labelled OBSERVED/INFERRED/UNKNOWN/INSUFFICIENT EVIDENCE rows tied to this lesson's claims and record IDs. Observations are supplied fictional records, not live measurements.
Four evidence-state rows with record locators and next verification steps.
390px stacked panels with text equivalent; later verify 768px and desktop
RTL labels and navigation; identifiers isolated LTR; preserve numeric axes, event order and factual edge direction.
FIX-P08-07
Sources & claim boundaries
S08-LARGEST · official_documentation_or_standard
Solana getTokenLargestAccounts
- Supported claim
- Twenty largest token accounts; not exhaustive human-holder distribution.
- Verification boundary
- Primary page inspected for editorial mechanism support; no deployed asset or ledger fixture independently measured.
- Checked at
- 2026-09-30
https://solana.com/docs/rpc/http/gettokenlargestaccounts
S08-OWNERS · official_documentation_or_standard
Solana getTokenAccountsByOwner
- Supported claim
- Owner-scoped enumeration filtered by mint or program.
- Verification boundary
- Primary page inspected for editorial mechanism support; no deployed asset or ledger fixture independently measured.
- Checked at
- 2026-09-30
https://solana.com/docs/rpc/http/gettokenaccountsbyowner
S08-SUPPLY · official_documentation_or_standard
Solana getTokenSupply
- Supported claim
- Raw supply, decimals and RPC response context; not a circulating-supply definition.
- Verification boundary
- Primary page inspected for editorial mechanism support; no deployed asset or ledger fixture independently measured.
- Checked at
- 2026-09-30
https://solana.com/docs/rpc/http/gettokensupply
Dataset provenance
id: FIX-P08-07
dataStatus: ILLUSTRATIVE
observedAt: null
source: Original frozen educational fixture embedded in lesson
timeBasis: Synthetic S0/S1 snapshots, not UTC observations or real blocks
identifiers: Deliberately invalid fictional network, asset and account labels; never use as transaction targets
scope: Exhaustive fictional target-mint account export with duplicate and wrong-mint noise.