πŸ‡―πŸ‡΅ ζ—₯本θͺžη‰ˆγ―準備中。 EN version below is the source-of-truth until the JA translation pass is reviewed.

Methodology

This document describes exactly what data the Cardano Delegation Observatory collects, how the values shown on the site are computed, what is deliberately not included, and how anyone can reproduce the published results from public data.

This page is the legitimacy core of the project. Every operational decision is documented here. If you find an inconsistency between this page and what the site shows, this page is the authoritative description; please open an issue.

1. What this site does

The Cardano Delegation Observatory takes a daily snapshot of voting weight delegated to active Cardano DReps and publishes:

All data is derived from the Cardano blockchain via the Koios API. No private data sources are used.

2. What this site does not do

The site does not compute or display:

If a future version of the site is considered for any of these, this document and the project's changelog (Β§11) will be updated before the feature is shipped, and a comment period will be provided.

3. Data sources

Primary: Koios API β€” a community-run REST interface over Cardano db-sync. Free tier is sufficient for the daily snapshot pattern this site uses.

Endpoints used (reproducible from the source at etl/snapshot.py):

DRep metadata content is consumed via Koios's drep_metadata endpoint and its is_valid flag; see Β§8 for the full handling chain and the v0.2 plan for independent fetch + verification.

4. Update cadence

The observatory has two cadences. The daily layer is canonical for everything reported as "Data through {date}"; the live telemetry layer (described in Β§14) is supplemental and refreshes more often but writes a narrower set of data.

The daily ETL runs once a day at 02:00 UTC.

Each daily run captures live DRep state at the moment of the run. The site displays the daily snapshot under the label "Data through {YYYY-MM-DD}". Daily updates happen at most once per day, so lag from any on-chain event to its appearance in the daily layer is at most approximately 24 hours.

If the daily ETL run fails, the prior daily snapshot remains displayed unchanged. No partial or potentially inconsistent daily data is ever published. The site's "Last successful update" timestamp signals staleness if the daily data is older than 36 hours.

The live telemetry layer runs every 10 minutes via a separate cron entry; its cadence, scope, and limitations are defined in Β§14.

5. Selection criteria

The 30 DReps shown on the main page are selected by:

This selection is fully deterministic and reproducible from public data. There is no manual curation, no featured selection, and no operator-influenced ranking. The ranking criteria above are the only criteria; changes to them will be documented in Β§11 with rationale.

6. Fields displayed per DRep

7. Fields not displayed

This list is exhaustive for v0.1. Any addition requires a Β§11 changelog entry written before the change ships:

8. Metadata handling

DRep metadata URLs may return arbitrary content. In v0.1, metadata content is consumed via the Koios drep_metadata endpoint, which fetches the off-chain JSON, hashes it, and applies CIP-100/CIP-119 validation. The observatory uses Koios's is_valid flag as the validation gate.

In v0.2, the observatory may move to fetching metadata directly from the on-chain URL with independent SHA-256 verification, removing Koios from the trust path for metadata content. This is a v0.2 candidate, not a v0.1 commitment.

9. Right of reply

A DRep who wants to add context to their entry on this site should update their on-chain metadata. The observatory fetches the latest metadata each day and the new content will appear on the next snapshot.

There is no operator-mediated channel for adding text, links, badges, or commentary to any DRep's entry. This is deliberate: the moment the operator can edit per-DRep content, the site has an editorial dimension.

If a DRep believes a published number is computationally incorrect, please open an issue on the GitHub repository with the snapshot date, the field in question, and the value you expect. Computational corrections will be made publicly, with the changelog noting the affected dates.

10. Operator

This observatory is operated by cryptoleo79, an independent Cardano stake pool operator and DRep.

Conflicts of interest disclosure:

The source code, deployment configuration, and data schema are all public in the GitHub repository under Apache 2.0. The published data is CC0. Anyone can independently reproduce all results from the cited public endpoints.

11. Changelog

For the canonical record, see METHODOLOGY.md in the repository. The summary below is mirrored from there:

DateVersionChange
2026-05-28 v0.2 Deployment + scope expansion. Site live at observatory.asy.life via nginx + Let's Encrypt. Daily ETL cron at 02:00 UTC, git-pull deploy cron every 5 min. Added: governance actions index page (/actions.html) with DRep vote tally per action; public CSV export of top-30 snapshot (/data/snapshots/top30.csv); permalinkable per-DRep page (/drep.html?id=...) with full vote history and 90-day chart. New Β§13 documents pages and exports.
2026-05-28 v0.1.5 Added vote ingestion via /proposal_list and /vote_list. last_vote_epoch populated. Revote ordering fix applied (chronologically latest vote per (action, drep) kept). Β§3, Β§6, Β§11, Β§12 updated.
2026-05-27 v0.1 (real-data adjustments) First live ETL run completed. Β§4 lag wording corrected to "up to ~24h". Β§5 expanded with exclusion of default-delegation targets and deterministic drep_id tie-break. Β§8 updated to describe Koios-mediated metadata path. Β§12 added for scope limitations.
2026-05-27 v0.1 Initial draft.

13. Pages and public exports

The observatory comprises four pages:

Public data exports (all CC0, regenerated by the daily ETL at 02:00 UTC):

The format is stable within a major version. Any field additions or removals are recorded in the Β§11 changelog before the change ships.

Vote tally semantics (in actions.json): the counts drep_yes_count, drep_no_count, drep_abstain_count for each action represent the most recent vote each DRep has cast on that action. When a DRep has revoted on the same action, only their chronologically latest vote is counted (see Β§6 for the revote-ordering rule). The counts are facts, not interpretations; they do not constitute approval or rejection signals.

14. Live telemetry layer

In addition to the daily snapshot, the observatory runs a live telemetry ETL every 10 minutes to surface near-real-time governance pulse. This layer is deliberately narrow.

What the live layer fetches each run:

What the live layer does NOT fetch or change:

What the live layer writes:

The daily ETL at 02:00 UTC is the source of truth and reconciles any divergence on its next run.

15. Eventual consistency

Because two ETL processes share the same SQLite database, brief inconsistencies are possible:

Reconciliation rule: the daily layer is canonical. If a discrepancy is observed between live and daily reports of the same fact, the daily value is the one to cite. The live layer exists to shorten the visibility lag, not to replace the daily layer.

The site UI labels live-layer-sourced fields with an explicit "Live" indicator. Daily-layer fields have no such indicator; absence of label = canonical daily data.

16. Koios rate-limit discipline

The observatory is a polite consumer of the Koios free tier. Estimated combined load with the live layer at 10-minute cadence:

This is well under typical free-tier limits. If Koios returns a 429 or persistent 5xx error, individual call retries use exponential backoff up to 2 retries (same as the daily layer). If retries fail, the run aborts cleanly, writes a failure record to etl_runs, and leaves all existing files in place. The next 10-minute cron tick is independent and will retry. There is no behavior that polls more aggressively under failure.

17. Live-only data exports

All paths below are under /data/snapshots/live/, are CC0 licensed, and are regenerated by each successful live ETL run (every ~10 minutes). Format is stable within a major version.

The live exports do not duplicate any field that the daily layer publishes. They complement, never replace.

12. v0.1 scope limitations

The site is deliberately narrow at v0.1. The following are out of scope for this version and disclosed here transparently rather than masked with synthetic or interpolated values:

These limitations resolve over time. They are not concealed and are not approximated.