# What "idle" actually looks like on the wire

Measurements behind `SILENT_BYTES_PER_SEC` in `app/net_activity.py` (CashPilot-t6y). The bead was explicit that the threshold must come from real idle traffic rather than from assuming zero, so it does.

**Method.** Every `cashpilot.managed` container on a live host, two readings of `/proc/net/dev` inside the container 120 seconds apart, rate = delta / 120. Single host, single 2-minute window — enough to disprove "idle means zero", not enough to calibrate anything finer. Treat the number as a floor, not a tuned constant.

Date: 2026-08-02.

| Container | rx B/s | tx B/s |
| --- | ---: | ---: |
| mysterium | 815,589 | 15,275,715 |
| honeygain | 6,709 | 6,773 |
| proxylite | 5,971 | 1,394 |
| anyone-protocol | 2,490 | 2,591 |
| storj | 1,018 | 5,878 |
| earnfm | 546 | 661 |
| repocket | 525 | 571 |
| bitping | 117 | 118 |
| proxyrack | 36 | 22 |
| packetstream | 35 | 12 |
| earnapp | 19 | 12 |
| proxybase | 5.5 | 7.3 |
| **traffmonetizer** | **0.0** | **0.0** |
| **iproyal** | **0.0** | **0.0** |

## What this shows

**Idle is not zero.** Eleven of fourteen containers moved measurable traffic while earning little or nothing — keepalives, heartbeats, control-plane chatter. A threshold of zero would have called all of them active.

**Zero does happen, and it means something.** Two containers moved *literally nothing* in two minutes. That is the only distinction this data supports, so the threshold sits just above it (2 B/s) and the signal answers one question: did anything at all cross the wire?

**Traffic volume is not earnings.** Mysterium moved 15 MB/s because it is a dVPN exit carrying other people's traffic; Storj's 5.9 MB/s tx is customer data being served. Neither number tells you what was paid. This is why the signal can only ever weaken confidence in `app/producer_state.py`, never assert PRODUCING.

**Silence is not breakage.** Bandwidth resale is buyer-driven: a healthy node moves nothing while nobody is buying. Hence SILENT supports IDLE and never FAILING.

## The trap that shaped the code

Docker's `stats` API omits the `networks` key **entirely** for containers on the host network — no interfaces, no counters. On this fleet the single busiest service (mysterium, above) is host-networked, so a naive reading would score the best earner as zero traffic and call it dead.

The catalog does declare this one — `services/bandwidth/mysterium.yml` sets `network_mode: "host"` — but the code still decides at RUNTIME from what Docker actually reports. A container can be started host-networked by an override the catalog knows nothing about, and the counters are either present or they are not, whatever any YAML claims.
