{
  "canonical_url": "https://art3mis.cloud/record.json",
  "version": "2026-09-14",
  "purpose": "Machine-readable form of the due-diligence record at https://art3mis.cloud/llms.txt: identifiers, sources of record and verification commands. No point-in-time figures. Current values: https://art3mis.cloud/record.live.json (unsigned).",
  "methodology": {
    "see": "https://art3mis.cloud/llms.txt, section Methodology and basis of assessment"
  },
  "signature": {
    "detached_signature_url": "https://art3mis.cloud/record.json.asc",
    "public_key_url": "https://art3mis.cloud/pgp.asc",
    "fingerprint": "8E5DAE8C18B42016E27207B95C6631681B91055A",
    "independent_key_sources": [
      "https://keys.openpgp.org/vks/v1/by-fingerprint/8E5DAE8C18B42016E27207B95C6631681B91055A",
      "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x8E5DAE8C18B42016E27207B95C6631681B91055A"
    ],
    "verify": "gpg --keyserver keys.openpgp.org --recv-keys 8E5DAE8C18B42016E27207B95C6631681B91055A && gpg --verify record.json.asc record.json",
    "verify_note": "compare the fingerprint printed by gpg with the one above before trusting the result"
  },
  "entity": {
    "legal_name": "ART3MIS.CLOUD Limited",
    "brand": "ART3MIS.CLOUD",
    "short_name": "A3MC",
    "company_number": "2195776",
    "jurisdiction": "British Virgin Islands",
    "founded": "2016",
    "website": "https://art3mis.cloud",
    "contact_email": "a3mc@protonmail.com",
    "pgp_fingerprint": "8E5DAE8C18B42016E27207B95C6631681B91055A",
    "pgp_key_url": "https://art3mis.cloud/pgp.asc",
    "security_txt": "https://art3mis.cloud/.well-known/security.txt",
    "x": "https://x.com/art3mis_cloud",
    "github": "https://github.com/a3mc"
  },
  "validator": {
    "network": "solana-mainnet-beta",
    "identity_pubkey": "GwHH8ciFhR8vejWCqmg8FWZUCNtubPY2esALvy5tBvji",
    "vote_pubkey": "3iPuTgpWaaC6jYEY7kd993QBthGsQTK3yPCrNJyPMhCD",
    "vote_account_created": {
      "time": "2020-11-14T11:42:21Z",
      "slot": 48927929,
      "epoch": 113,
      "transaction": "33kY45ywMw3xfKr9t87RZWkEdnYVoZQX8bdaDfTwFxsXketNCx25Wzjo1MfAThjjQK6MVrKKP9jtMSb8JtrNcayH",
      "explorer_url": "https://explorer.solana.com/tx/33kY45ywMw3xfKr9t87RZWkEdnYVoZQX8bdaDfTwFxsXketNCx25Wzjo1MfAThjjQK6MVrKKP9jtMSb8JtrNcayH",
      "verify": "how_to_verify[0]"
    },
    "availability_target": {
      "annual_pct_min": 99.995,
      "about": "26 minutes per year",
      "counting_rule": "delinquency episodes of 60 seconds or longer, from the observatory event log (delinquency_change true/false pairs, event_time difference)",
      "verify": "how_to_verify: Stability over the observatory's coverage"
    },
    "commission_policy": {
      "inflation_commission_pct": 0,
      "mev_commission_bps": 0,
      "verify": [
        "RPC getVoteAccounts: commission field of the vote account",
        "https://trent.art3mis.cloud/fin/mev: per-epoch mev_commission_bps and take_actual_lamports against tips_flow_lamports, full settled history"
      ]
    }
  },
  "infrastructure": {
    "hosting": "own colocation, dedicated hardware",
    "address_history": "see https://art3mis.cloud/llms.txt, section Infrastructure ownership and control, and how_to_verify (Infrastructure)",
    "asn": "AS51088",
    "asn_organization": "A2B IP B.V.",
    "city": "Amsterdam",
    "country": "Netherlands",
    "facility": {
      "name": "DC1.AMSTERDAM",
      "url": "https://dc1.amsterdam/en/about-us",
      "address": "Science Park 402, 1098 XH Amsterdam, Netherlands",
      "attestations": [
        "SOC 1",
        "SOC 2",
        "SOC 3",
        "PCI DSS",
        "ISO/IEC 27001",
        "ISO 9001",
        "ISO 14001",
        "ISO 45001",
        "ISO 50001"
      ]
    },
    "verify": [
      "https://get.art3mis.cloud/api/validators?asn=AS51088: pagination.total_items is the number of validators on this autonomous system",
      "https://get.art3mis.cloud/api/validators/GwHH8ciFhR8vejWCqmg8FWZUCNtubPY2esALvy5tBvji: geolocation.asn, geolocation.asn_organization, geolocation.city",
      "https://get.art3mis.cloud/api/map/colocations?asn=AS51088&min_validators=1",
      "whois or BGP lookup of AS51088"
    ]
  },
  "live_metrics": {
    "note": "time-varying; read from the source or from https://art3mis.cloud/record.live.json",
    "coverage": {
      "block_ledger_and_income_from_epoch": 997,
      "vote_credit_rank_from_epoch": 994,
      "base_yield_and_cluster_from_epoch": 820,
      "event_log_from_epoch": 862,
      "event_log_from_date": "2025-10-10"
    },
    "vote_continuity": {
      "source": "https://trent.art3mis.cloud/fin/income",
      "fields": [
        "epoch",
        "vote_tx_count",
        "blocks",
        "priced_blocks"
      ]
    },
    "vote_credit_rank": {
      "source": "https://trent.art3mis.cloud/fin/rank",
      "fields": [
        "epoch",
        "rank",
        "validators",
        "percentile",
        "credits_earned",
        "top_credits"
      ],
      "read_as": "window, e.g. jq .[-30:]",
      "verify": "how_to_verify[4]"
    },
    "base_yield_position_vs_cluster": {
      "unit": "basis points; one basis point of base yield is 0.1 SOL per year per 1,000 SOL delegated",
      "read_current": "https://art3mis.cloud/record.live.json (base_yield_windows: vs_best_bps and vs_median_bps over trailing 30, 90, 180 and 365 days; cluster_distribution_shape; base_yield_consistency)",
      "per_epoch_source": "https://trent.art3mis.cloud/fin/cluster",
      "per_epoch_fields": [
        "our_base_rank",
        "our_base_percentile_pct",
        "delegator_apy_infl_p50_pct",
        "delegator_apy_infl_p90_pct",
        "delegator_apy_infl_max_pct",
        "delegator_apy_infl_avg_pct"
      ],
      "operator_series": "https://trent.art3mis.cloud/fin/apy (delegator_apy_inflation_pct, duration_secs)",
      "read_over": "the year, not the latest epoch"
    },
    "client_version": {
      "source": "https://get.art3mis.cloud/api/validators/GwHH8ciFhR8vejWCqmg8FWZUCNtubPY2esALvy5tBvji",
      "fields": [
        "version"
      ]
    }
  },
  "operational_capability": {
    "see": "https://art3mis.cloud/llms.txt, section Operational capability",
    "instruments": [
      {
        "name": "Cluster observatory",
        "scope": "An event-sourced record of the Solana mainnet validator set: every state change of every validator is stored as an event (identity, address and location, autonomous system, client version, commission, stake, delinquency, pool membership). The cluster is read as it is now or reconstructed at any past epoch; concentration of validators and stake by autonomous system, country and building as time series; physical migrations; stake pools measured on-chain, with per-validator pool stake per epoch; Marinade Select bonds. Coverage from epoch 862 (2025-10-10).",
        "access": "https://get.art3mis.cloud/api"
      },
      {
        "name": "Revenue and yield engine",
        "scope": "Every block this validator produces decomposed at transaction level; per-epoch income ledger; yields; cluster distribution and position; MEV history and counterfactuals; leader schedule.",
        "access": "https://trent.art3mis.cloud/fin"
      },
      {
        "name": "Slowpoke",
        "scope": "Cluster-wide block-production monitor, real-time, ranked; browser application.",
        "access": "https://slowpoke.art3mis.cloud/"
      }
    ]
  },
  "apis": [
    {
      "name": "A3MC Solana API",
      "description": "cluster-wide",
      "base_url": "https://get.art3mis.cloud/api",
      "health_url": "https://get.art3mis.cloud/api/health",
      "documentation": "https://art3mis.cloud/api/a3mc-solana-api.md",
      "auth": "none",
      "cors": "*",
      "format": "JSON"
    },
    {
      "name": "ValidatorFinances API",
      "description": "this validator",
      "base_url": "https://trent.art3mis.cloud/fin",
      "health_url": "https://trent.art3mis.cloud/fin/health",
      "documentation": "https://art3mis.cloud/api/validator-finances.md",
      "auth": "none",
      "cors": "*",
      "format": "JSON"
    }
  ],
  "analyst_interfaces": {
    "audience": "humans only; a fetch returns an application shell without data; machine readers use the APIs",
    "main_dashboard": {
      "name": "ART3MIS.CLOUD validator analytics dashboard",
      "url": "https://performance.art3mis.cloud/",
      "purpose": "the validator analytics dashboard: per-block revenue, per-epoch income, delegator yield attribution against the full validator set, MEV history, block production, leader schedule",
      "data_source": "https://trent.art3mis.cloud/fin",
      "requires": "JavaScript"
    },
    "observatory": {
      "name": "Big Brother",
      "url": "https://bigbrother.art3mis.cloud/",
      "purpose": "the cluster observatory interface for examining any validator: state, full change history, stake pools, geography, colocation, migrations",
      "this_validator": "https://bigbrother.art3mis.cloud/?v=GwHH8ciFhR8vejWCqmg8FWZUCNtubPY2esALvy5tBvji",
      "data_source": "https://get.art3mis.cloud/api",
      "requires": "JavaScript",
      "views": [
        {
          "view": "Atlas",
          "url": "https://bigbrother.art3mis.cloud/",
          "contents": "the validator set on a globe with stake, autonomous-system and country layers; epoch playback; movement arcs; colocation markers; search across validators, pools and providers."
        },
        {
          "view": "Validator dossier",
          "url": "https://bigbrother.art3mis.cloud/validator/<identity>",
          "contents": "every recorded change of name, description, website and identity key; delinquency episodes with the one-minute threshold; stake history from stake_change events, direct and pooled; pool membership and per-pool stake over time; address history with autonomous system and city, and co-tenancy with other identities on the same address; colocation, city and autonomous-system peers; client version history including regressions; current-epoch skip rate."
        },
        {
          "view": "Providers",
          "url": "https://bigbrother.art3mis.cloud/providers",
          "contents": "autonomous systems nested under the announcing provider; validators and stake per provider split by city; sole-occupant share; the smallest set of autonomous systems whose combined stake exceeds one third (Nakamoto coefficient by autonomous system)."
        },
        {
          "view": "Concentration",
          "url": "https://bigbrother.art3mis.cloud/concentration",
          "contents": "stake concentration by autonomous system, country, data centre and provider; Nakamoto coefficient per dimension; effective validator count (inverse stake HHI); least-concentrated locations; scoped to a pool on request."
        },
        {
          "view": "Clusters",
          "url": "https://bigbrother.art3mis.cloud/clusters",
          "contents": "shared-infrastructure patterns; correlated events across validators, addresses reused by several identities, same-autonomous-system-and-city groups, delinquency waves with per-validator downtime."
        },
        {
          "view": "Pools",
          "url": "https://bigbrother.art3mis.cloud/pools",
          "contents": "stake pools measured on-chain; leaderboard; pool stake by infrastructure independence and by autonomous system, country and data centre; joins, leaves and stake movement per member; pools staking the same validators; comparison of pinned pools; the smallest set of pools whose combined stake exceeds one third of pooled stake."
        },
        {
          "view": "Activity",
          "url": "https://bigbrother.art3mis.cloud/activity",
          "contents": "the live feed of infrastructure changes across the cluster; address, autonomous system, client version, commission, delinquency and identity events, by hour and by epoch."
        },
        {
          "view": "Marinade Select",
          "url": "https://bigbrother.art3mis.cloud/marinade-select",
          "contents": "bond membership, collateral snapshots, events and per-bond history."
        }
      ]
    }
  },
  "explorer_pages": [
    {
      "name": "Solana Explorer, vote account",
      "url": "https://explorer.solana.com/address/3iPuTgpWaaC6jYEY7kd993QBthGsQTK3yPCrNJyPMhCD"
    },
    {
      "name": "Solana Explorer, identity",
      "url": "https://explorer.solana.com/address/GwHH8ciFhR8vejWCqmg8FWZUCNtubPY2esALvy5tBvji"
    }
  ],
  "programs": {
    "animal_support": {
      "name": "Verified Animal Support Program",
      "reports_url": "https://a3mc-slide-widget.pages.dev/"
    }
  },
  "how_to_verify": [
    {
      "claim": "Operating history: the same vote account and identity from 2020-11-14 to the present",
      "steps": [
        {
          "command": "curl -s https://api.mainnet-beta.solana.com -X POST -H 'content-type: application/json' -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"getTransaction\",\"params\":[\"33kY45ywMw3xfKr9t87RZWkEdnYVoZQX8bdaDfTwFxsXketNCx25Wzjo1MfAThjjQK6MVrKKP9jtMSb8JtrNcayH\",{\"encoding\":\"json\",\"maxSupportedTransactionVersion\":0}]}'",
          "expect": "result.slot = 48927929; result.blockTime = 1605354141 (2020-11-14T11:42:21Z); accountKeys[0] = GwHH8ciFhR8vejWCqmg8FWZUCNtubPY2esALvy5tBvji; accountKeys[1] = 3iPuTgpWaaC6jYEY7kd993QBthGsQTK3yPCrNJyPMhCD; meta.err = null",
          "note": "archival read; the public mainnet RPC returns it"
        },
        {
          "command": "curl -s https://trent.art3mis.cloud/fin/cluster | jq '[.[] | select(.our_base_percentile_pct != null)] | {epochs: length, first: .[0].epoch, last: .[-1].epoch}'",
          "expect": "a contiguous per-epoch series for this vote account up to the latest closed epoch; epochs = last - first + 1; the response states its first epoch"
        },
        {
          "command": "curl -s 'https://get.art3mis.cloud/api/history?validator=GwHH8ciFhR8vejWCqmg8FWZUCNtubPY2esALvy5tBvji&event_type=identity_change&page_size=1' | jq .pagination.total_items",
          "expect": "0: no identity rotation recorded across the observatory's full coverage"
        },
        {
          "command": "curl -s https://api.mainnet-beta.solana.com -X POST -H 'content-type: application/json' -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"getVoteAccounts\",\"params\":[{\"votePubkey\":\"3iPuTgpWaaC6jYEY7kd993QBthGsQTK3yPCrNJyPMhCD\"}]}' | jq '.result.current[0].nodePubkey'",
          "expect": "GwHH8ciFhR8vejWCqmg8FWZUCNtubPY2esALvy5tBvji, under result.current (not result.delinquent): the series ends on the same identity"
        }
      ]
    },
    {
      "claim": "Fee policy over its history: zero inflation commission, zero MEV commission",
      "steps": [
        {
          "command": "curl -s 'https://get.art3mis.cloud/api/history?validator=GwHH8ciFhR8vejWCqmg8FWZUCNtubPY2esALvy5tBvji&event_type=commission_change&page_size=1' | jq .pagination.total_items",
          "expect": "0: no inflation-commission change recorded across the observatory's full coverage"
        },
        {
          "command": "curl -s 'https://trent.art3mis.cloud/fin/mev' | jq '{rows: (.rows | length), truncated: .truncated, first_epoch: .rows[0].epoch, zero_bps_from: ([.rows[] | select(.mev_commission_bps == 0)] | .[0].epoch), take_at_zero_bps: ([.rows[] | select(.mev_commission_bps == 0) | .take_actual_lamports] | add)}'",
          "expect": "truncated = false and first_epoch is the first epoch of the ledger; from the epoch the zero policy took effect, every row has mev_commission_bps = 0 and take_at_zero_bps = 0 while tips_flow_lamports is non-zero; the setting in force before the policy is in the same rows"
        }
      ]
    },
    {
      "claim": "Liveness: vote credits, and the raw vote and block ledgers",
      "steps": [
        {
          "command": "curl -s https://trent.art3mis.cloud/fin/income | jq '{epochs: length, first: .[0].epoch, last: .[-1].epoch, min_vote_tx_count: (map(.vote_tx_count) | min), blocks_equal_priced: all(.[]; .blocks == .priced_blocks)}'",
          "expect": "min_vote_tx_count above 99% of the 432,000 slots of an epoch in every closed epoch of the series; an interruption would show as a lower count in that epoch and as a credit loss in the base-yield series; blocks_equal_priced = true"
        },
        {
          "command": "curl -s 'https://trent.art3mis.cloud/fin/blocks?limit=1' | jq '.rows[0] | {slot, blockhash}'  # then: curl -s https://api.mainnet-beta.solana.com -X POST -H 'content-type: application/json' -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"getBlock\",\"params\":[<slot>,{\"encoding\":\"json\",\"transactionDetails\":\"none\",\"rewards\":true,\"maxSupportedTransactionVersion\":0}]}'",
          "expect": "getBlock returns the same blockhash and lists GwHH8ciFhR8vejWCqmg8FWZUCNtubPY2esALvy5tBvji as the block's leader (rewards[] entry with rewardType Fee); repeat for any slot in the ledger"
        }
      ]
    },
    {
      "claim": "Infrastructure: own autonomous system, single validator; address history disclosed",
      "steps": [
        {
          "command": "curl -s 'https://get.art3mis.cloud/api/validators?asn=AS51088&page_size=5' | jq '.pagination.total_items, .data[0].identity_pubkey'",
          "expect": "1 and GwHH8ciFhR8vejWCqmg8FWZUCNtubPY2esALvy5tBvji"
        },
        {
          "command": "curl -s 'https://get.art3mis.cloud/api/history?validator=GwHH8ciFhR8vejWCqmg8FWZUCNtubPY2esALvy5tBvji&event_type=ip_change&page_size=100' | jq '[.data[] | .metadata.new_geolocation.asn] | unique'",
          "expect": "[\"AS213896\", \"AS51088\"]: AS51088 is the operator's network; AS213896 is the operator's standby site in Frankfurt, used only in the three disclosed periods (2025-11-23 to 2026-01-11); autonomous system from ip_change metadata, as asn_change does not record these transitions"
        },
        {
          "command": "curl -s 'https://get.art3mis.cloud/api/history?validator=GwHH8ciFhR8vejWCqmg8FWZUCNtubPY2esALvy5tBvji&event_type=ip_change&page_size=100' | jq '[.data[] | {epoch, old_value, new_value, asn_after: .metadata.new_geolocation.asn, city_after: .metadata.new_geolocation.city}]'",
          "expect": "rows alternate between 31.134.207.212 and 31.134.207.213 on AS51088, Amsterdam, except six rows in epochs 884, 885, 886, 891, 901 and 908 to and from 185.191.117.245 on AS213896, Frankfurt: the three disclosed failover periods"
        },
        {
          "command": "whois AS51088",
          "expect": "org-name A2B IP B.V."
        }
      ]
    },
    {
      "claim": "Performance over the series: base yield on the cluster plateau",
      "steps": [
        {
          "command": "curl -s https://trent.art3mis.cloud/fin/cluster | jq '[.[] | select(.our_base_percentile_pct != null)] | .[-30:] | {epochs: length, median_rank: (map(.our_base_rank) | sort | .[length/2|floor]), at_or_above_90th: map(select(.our_base_percentile_pct >= 90)) | length, at_or_above_99th: map(select(.our_base_percentile_pct >= 99)) | length}'",
          "expect": "the most recent 30 epochs: median_rank within the top decile of the validator count; at_or_above_90th the majority of the 30"
        },
        {
          "command": "curl -s https://trent.art3mis.cloud/fin/cluster | jq '[.[] | select(.our_base_percentile_pct != null)] | .[-180:] | {epochs: length, median_rank: (map(.our_base_rank) | sort | .[length/2|floor]), at_or_above_90th: map(select(.our_base_percentile_pct >= 90)) | length, at_or_above_99th: map(select(.our_base_percentile_pct >= 99)) | length}'",
          "expect": "the most recent 180 epochs: at_or_above_90th the majority"
        },
        {
          "command": "curl -s https://trent.art3mis.cloud/fin/rank | jq '.[-30:] | {epochs: length, median_rank: (map(.rank) | sort | .[length/2|floor]), best_rank: (map(.rank) | min), at_or_above_99th_percentile: map(select(.percentile >= 99)) | length, validators: .[-1].validators}'",
          "expect": "the most recent 30 epochs of the vote-credit rank series: median_rank within the top decile of validators; best_rank single-digit"
        },
        {
          "command": "curl -s https://trent.art3mis.cloud/fin/cluster | jq '[.[] | select(.delegator_apy_infl_max_pct != null)] | {plateau_width_bps_max: (map(.delegator_apy_infl_max_pct - .delegator_apy_infl_p90_pct) | max * 100), median_to_plateau_bps_median: (map(.delegator_apy_infl_p90_pct - .delegator_apy_infl_p50_pct) | sort | .[length/2|floor] * 100)}'",
          "expect": "plateau_width_bps_max under 1 (p90-to-max spread under one basis point in every epoch); median_to_plateau_bps_median of the order of tens of basis points"
        },
        {
          "command": "curl -s https://art3mis.cloud/record.live.json | jq '.live.base_yield_windows'",
          "expect": "for trailing 30, 90, 180 and 365 days: vs_best_bps greater than -1 (within one basis point of the plateau best); vs_median_bps positive; epochs and days_served stated"
        },
        {
          "command": "curl -s https://api.mainnet-beta.solana.com -X POST -H 'content-type: application/json' -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"getVoteAccounts\",\"params\":[{}]}' | jq '[.result.current[] | {v: .votePubkey, c: (.epochCredits[-1][1] - .epochCredits[-1][2])}] | sort_by(-.c) | .[:10]'",
          "expect": "independent recomputation of vote credits for the current epoch across all validators; 3iPuTgpWaaC6jYEY7kd993QBthGsQTK3yPCrNJyPMhCD within the top decile; the per-epoch series above is the evidence; this is a spot check"
        }
      ]
    },
    {
      "claim": "Comparison with any validator: base yield from the chain alone",
      "steps": [
        {
          "command": "curl -s https://api.mainnet-beta.solana.com -X POST -H 'content-type: application/json' -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"getVoteAccounts\",\"params\":[{}]}' | jq --arg me 3iPuTgpWaaC6jYEY7kd993QBthGsQTK3yPCrNJyPMhCD --arg other <vote_pubkey_under_comparison> '[.result.current[] | select((.epochCredits | length) >= 2) | {v: .votePubkey, y: ((.epochCredits[-2][1] - .epochCredits[-2][2]) * (1 - .commission/100))}] | (map(.y) | max) as $best | (map(.y) | sort | reverse | .[(length / 10 | floor)]) as $p90 | {closed_epoch: \"epochCredits[-2]\", validators: length, plateau_width_pct: (($best - $p90) / $best * 100), top_decile_size: (map(select(.y >= $p90)) | length), me_below_best_pct: ((($best - (map(select(.v==$me))[0].y)) / $best) * 100), me_on_plateau: ((map(select(.v==$me))[0].y) >= $p90), other_below_me_pct: ((((map(select(.v==$me))[0].y) - (map(select(.v==$other))[0].y)) / $best) * 100), other_on_plateau: ((map(select(.v==$other))[0].y) >= $p90)}'",
          "expect": "delegator base yield of every validator for the latest closed epoch, as credits earned times one minus commission, normalised to the best; the plateau is the spread from the 90th percentile to the best (plateau_width_pct), and on_plateau is membership in it. Basis points = percentage times the base APY in percent (delegator_apy_inflation_pct from https://trent.art3mis.cloud/fin/apy; at 5% base APY, 1% is 5 basis points). A 7% commission alone puts a validator about 35 basis points below a zero-commission validator with the same credits. Repeat over consecutive closed epochs (epochCredits holds the last five) and intersect the on-plateau sets"
        }
      ]
    },
    {
      "claim": "Network concentration: one validator per autonomous system, and the network's exposure to hosting providers",
      "steps": [
        {
          "command": "curl -s 'https://get.art3mis.cloud/api/map/distribution?group_by=asn&page_size=100' | jq '([.data[].validators_count] | add) as $tot | {asns: .pagination.total_items, top6_share_pct: (([.data[].validators_count] | sort | reverse | .[0:6] | add) / $tot * 100), single_validator_asns: ([.data[] | select(.validators_count == 1)] | length), a2b: ([.data[] | select(.geo_key == \"AS51088\") | {label: .label, validators_count: .validators_count}] | .[0])}'",
          "expect": "top6_share_pct: the share of validators on the six largest autonomous systems (page through all pages for the exact figure); single_validator_asns: the number of autonomous systems hosting exactly one validator; a2b.validators_count = 1. Look up any validator's autonomous system at https://get.art3mis.cloud/api/validators/<identity> (geolocation.asn) and read its validators_count here"
        },
        {
          "command": "curl -s 'https://get.art3mis.cloud/api/map/distribution?group_by=asn&page_size=100' | jq '([.data[].stake_lamports] | add) as $tot | ([.data[] | .stake_lamports] | sort | reverse) as $s | {autonomous_systems_holding_over_one_third_of_stake: ([range(1; ($s|length)+1) as $n | ($s[:$n] | add)] | map(select(. > $tot/3)) | length | ($s|length) - . + 1), stake_share_top6_networks_pct: (($s[:6] | add) / $tot * 100)}'",
          "expect": "autonomous_systems_holding_over_one_third_of_stake: the smallest set of autonomous systems whose combined stake exceeds one third of the geolocated total, the network's liveness threshold. Any delegation to a validator on one of those networks adds to that exposure; a validator alone on its autonomous system adds none"
        }
      ]
    },
    {
      "claim": "Stability over the observatory's coverage: delinquency episodes, identity, address",
      "steps": [
        {
          "command": "curl -s 'https://get.art3mis.cloud/api/history?validator=GwHH8ciFhR8vejWCqmg8FWZUCNtubPY2esALvy5tBvji&event_type=delinquency_change&page_size=1000' | jq '[.data[] | {t: .event_time, v: .new_value}] | sort_by(.t) | . as $r | [range(0; length) as $i | select($r[$i].v == true and $r[$i+1] != null and $r[$i+1].v == false) | {down: $r[$i].t, up: $r[$i+1].t, seconds: (($r[$i+1].t | sub(\"\\\\.[0-9]+Z$\"; \"Z\") | fromdate) - ($r[$i].t | sub(\"\\\\.[0-9]+Z$\"; \"Z\") | fromdate))}] | {all_episodes: length, incidents_60s_or_longer: (map(select(.seconds >= 60)) | length), incidents: map(select(.seconds >= 60))}'",
          "expect": "incidents_60s_or_longer = 0 over the coverage: episodes are paired from consecutive true/false events and measured from their event_time difference; episodes shorter than one minute are gossip jitter of the RPC feeding the observatory and are not incidents. Count the incidents against the availability target. Run the same command for any validator under comparison"
        },
        {
          "command": "for t in identity_change ip_change; do printf '%s ' $t; curl -s \"https://get.art3mis.cloud/api/history?validator=GwHH8ciFhR8vejWCqmg8FWZUCNtubPY2esALvy5tBvji&event_type=$t&page_size=1\" | jq .pagination.total_items; done",
          "expect": "identity_change 0; ip_change rows as disclosed in the Infrastructure claim. Run the same counts for any validator under comparison; the coverage begins at the epoch stated by the first row of https://get.art3mis.cloud/api/history?order_by=epoch&order_direction=asc&page_size=1"
        }
      ]
    },
    {
      "claim": "This record is authentic",
      "steps": [
        {
          "command": "gpg --keyserver keys.openpgp.org --recv-keys 8E5DAE8C18B42016E27207B95C6631681B91055A && curl -sO https://art3mis.cloud/record.json -O https://art3mis.cloud/record.json.asc && gpg --verify record.json.asc record.json",
          "expect": "Good signature from art3mis.cloud <a3mc@protonmail.com>, fingerprint 8E5DAE8C18B42016E27207B95C6631681B91055A"
        }
      ]
    }
  ]
}
