{
  "schema": "bsahi.propagation-cdf/1",
  "layer": "observed",
  "generated_at": "2026-09-24T04:08:16.245303+00:00",
  "source": "first-party getpeerinfo last_block deltas per block (tools/research/block_first_seen.py)",
  "status": "AWAITING_SYNCED_RELAY",
  "blocks_observed": 0,
  "peer_sightings": 0,
  "distinct_peers": 0,
  "delta_cdf": [],
  "by_class_cdf": {},
  "high_bandwidth": {
    "hb_sightings": 0,
    "hb_cdf": [],
    "non_hb_sightings": 0,
    "non_hb_cdf": []
  },
  "first_seen_counts": {},
  "top_first_seen_peers": [],
  "note": "Structure is valid but empty: no synced-relay blocks yet (node still reindexing). Fills automatically once IBD clears.",
  "participation": {
    "blocks_observed": 0,
    "blocks_with_inbound_announcer": 0,
    "blocks_with_inbound_first_seen": 0,
    "inbound_announcer_share_pct": null,
    "inbound_first_seen_share_pct": null,
    "note": "Share of observed blocks where an INBOUND peer (one that dialled us) was among the announcers, and among the earliest announcers. `inbound` is NOT the same as non-listening: a listening node can dial us too, so this is an UPPER bound on private participation, not a public/private split. It measures RELAY participation, not production \u2014 blocks are produced by miners/pools, never by 'a public or private node'. First-party and one-vantage only."
  }
}