Method
Method and limits
Assay records what asset issuers and attestors (independent checkers) say about their reserves, when they said it, and where. It does not judge issuers. This page explains what we check and where the checks stop.
First census: 12 October 2026, Stellar mainnet ledgers 64,905,745 to 64,906,749. Changes to this method are listed at the end of this page with their dates.
What we check
For every asset on Stellar whose issuer has set a home domain, the indexer:
- Reads the issuer’s
stellar.tomlfile, published under the SEP-1 standard, and finds the entry for that asset by its code and issuer. - Records what the issuer says about the asset: whether it is anchored
(backed by something off the blockchain), what it is anchored to, and its optional
attestation_of_reservelink to evidence of reserves. - Follows that link once and records what happened: the HTTP status, the kind of document, its size, and a SHA-256 fingerprint of what we received.
- Records a report’s date and figures only when the report states them in a machine-readable form, or when a person has transcribed them from the report (labelled “manually transcribed”).
Every figure on the board shows the ledger and time it was computed at, and a link to its source.
Which assets the board shows
Any issuer can write is_asset_anchored = true in its own file. In our
first census, 23,162 assets did. Most of them are tokens with a handful of
holders, many on domains that resemble institutions they are not part of.
So the board shows assets that claim backing (declared anchored, or publishing a reserve link) and meet one of these:
- At least 50 holders with a balance. Holder counts come from stellar.expert’s public API, because Stellar’s own Horizon API does not report how many holders have a balance.
- A reserve link on the issuer’s own domain. For example, a link on
app.etherfuse.comfor an issuer whose domain isetherfuse.com. A link to another company’s page, or to a block explorer, does not count.
In the first census, 270 assets met this rule. The full list of every self-declared anchored asset is in the indexer’s weekly census releases. We show every issuer’s domain exactly as the ledger records it.
Statuses
Each asset has one neutral status. None of them is a grade.
| On the board | Code | Meaning |
|---|---|---|
| No reserve link | NO_REPORT_LINK |
The stellar.toml has no attestation_of_reserve link. The field is optional, so this is a fact, not a fault. |
| Link did not load | LINK_BROKEN |
A link is published, but it did not return a document when we checked. The asset page says why, in plain words. |
| Report to read | UNSTRUCTURED_REPORT |
The link returns a document (a web page or PDF) that a person has to read. |
| Machine-readable report | STRUCTURED_REPORT |
The link returns a reserve report in Assay’s draft format that we can check automatically. |
When a link does not load, the asset page records why: the server refused automated requests (HTTP 403), the page was not found, the domain did not resolve, the request timed out, the link redirects in a loop, or the security certificate was not accepted. A link that did not load for us may load in a browser, and some sites block automated requests. We check each link once per census and show when.
Report age
Report age is the number of days between the date a report states and the time we checked it. It comes only from a date written in a machine-readable report or transcribed by hand from the report. A PDF’s own file date is shown as a “document date” but never used as the report’s age, and web server headers are never used. The board counts reports under 35 days old as recent: a monthly reporting cycle plus five days. Protocols using the guard set their own limit.
Coverage
Coverage is the reserves a report states, divided by the liabilities it
states. We compute it only when the two are in the same unit, or when the
liabilities are in the token itself and the issuer’s stellar.toml says
the token is anchored to the currency the reserves are in. Otherwise
coverage is unknown, and the asset page says why. We never estimate a
missing number and never convert between currencies.
The balance on the home page will show aggregate coverage once there are figures to aggregate: total stated reserves divided by total stated liabilities, across only the assets with a stated figure. It is value-weighted, so one large asset can move it a long way, and the caption always says how many assets it includes.
Supply
We compute each asset’s supply from Stellar’s Horizon API, but we do not publish it yet. For assets held in smart contracts, our figure and an independent source (stellar.expert) disagree, in both directions, by up to 0.4%. For assets with no contract holdings they agree exactly. We will publish supply once a third, independent count settles the difference.
Manual transcriptions
Some reports are PDFs or web pages. Where we copy a figure from one by hand, the board labels it “manually transcribed” and links to the page it came from, with the date and the person who transcribed it.
Limits
- Assay checks what is claimed, not what exists. A report can be wrong, and we cannot see a bank account.
- Report dates and ledger times differ. Supply on Stellar can change between a report’s date and our check.
- One check per census, once a week. A link may fail for us and work an hour later.
- Holder counts come from a third party (stellar.expert) and are recorded with the time we fetched them.
- Assay is not an audit and not investment advice. It is not a rating agency, and not an oracle (a service that feeds outside data to smart contracts).
Corrections
Every asset page has a correction link. Issuers and anyone else can tell us when an entry is wrong; we fix it and log the correction publicly with its date. You can also open a correction directly.
Changes to this method
- 12 October 2026. First census. Board rule: claims backing, and at least 50 holders with a balance or a reserve link on the issuer’s own domain.
Not an audit and not investment advice. Figures are as stated by issuers or attestors, with the source and the time we checked.