Stale share — валидная по вычислениям шара, которая была отправлена в пул слишком поздно: к моменту её получения пул уже выдал новое задание (job) или сеть нашла новый блок. Такие шары не засчитываются в вашу долю вознаграждения и уменьшают эффективный хешрейт.
Базовые моменты
- Почему «просроченная». Пул переходит на новый шаблон блока (job) при обновлении шаблона транзакций либо при находке нового блока в сети; все шары по старому job становятся stale.
- Чем отличается от invalid. Invalid share — математически неверная (не выполняет таргет/структуру), тогда как stale — верная, но пришла после дедлайна для текущего job. Многие пулы в статусе «rejected» разделяют причины: stale / invalid / duplicate.
- Где это описано в протоколах. В Stratum-пулах рассылка новых заданий и политика их устаревания напрямую связаны со скоростью доставки job; в Stratum V2 одной из целей является снижение доли stale за счёт «header-only» обновлений и общей эффективности транспорта.
Как измерять: метрики и формулы
Stale rate, % — доля просроченных шар во входящем потоке: stale_rate = stale / (accepted + stale + invalid) (иногда считают только от accepted + stale). На панелях пулов показатель часто доступен по устройству и по аккаунту.
Эффективный хешрейт (приближённо): H_eff ≈ H_reported × (1 − stale_rate − invalid_rate) — ориентир, насколько просрочки и ошибки «съедают» вашу мощность.
Ориентир. Для стабильной площадки стремятся держать stale < ~1%; рост задержек, нестабильные сети или удалённый регион пула увеличивают долю stale.
Причины появления stale
| Группа причин | Что происходит | Почему это даёт stale |
|---|---|---|
| Сетевая задержка/потери | Долгий RTT до пула, перегруженные каналы, Wi-Fi/CGNAT. | Новые job и подтверждения шар приходят/уходят медленно; шары «прилетают» уже по старому job. |
| Медленная доставка/обновления job | Пул часто обновляет шаблон блока (новый блок/транзакции). | Окно «актуальности» короткое — запоздавшие шары становятся stale. |
| Прокси и «длинная цепочка» | Несколько хопов (майнер → локальный прокси → внешний прокси → пул). | К каждому хопу добавляется задержка/перегрузка. |
| Нестабильность/переключения пулов | Частые reconnection/переключения endpoint'ов. | Переотправка на старые job, всплески stale при переключениях. |
| Неподходящий регион пула | Далёкий дата-центр/маршрут. | Высокий пинг и вариативность задержек. |
Как уменьшить stale на практике
- Сократите путь до пула. Выбирайте региональный endpoint, ближний по задержке; проверьте альтернативные зеркала пула.
- Локальный прокси/агрегатор. Для кластеров используйте relay/proxy: одно соединение на пул + локальная раздача заданий уменьшает нагрузки и помогает при обрывах. (Напр., relays у операторов снижают вероятность stale и экономят трафик.)
- Стабильная сеть. Проводное подключение вместо Wi-Fi, качественный роутер, корректные MTU/Peering, мониторинг потерь/джиттера.
- Стратегия переключений. Избегайте частых «хопов» между пулами/endpoint'ами; используйте failover с разумными тайм-аутами.
- Протокол. По мере доступности переходите на Stratum V2 или используйте V2↔V1 переводчик — бинарные сообщения, «header-only» апдейты и другие оптимизации нацелены на снижение stale-ratio.
- Тайм-синхронизация. Держите точное время (NTP) на контроллерах, чтобы избежать рассинхронизаций и аномалий отправки шар. (Общее правило эксплуатации пулов.)
В контексте Stratum и эволюции протоколов
- Исторически Stratum V1 стал стандартом пул-майнинга: майнер подписывается, авторизуется, получает уведомления (notify) о новых job и отправляет submit с шарами. При каждом новом блоке/шаблоне все вычисления по старому job перестают иметь ценность для пула — так и появляются
- В Stratum V2 поставлены цели минимизации stale: более лёгкие «header-only» обновления, двоичный формат, мультиплексирование и иные улучшения транспорта. Это уменьшает задержки доставки job и повышает устойчивость к потерям, а следовательно, снижает долю просроченных шар (при прочих равных).
Пример расчёта
Вы видите на пуле за сутки: accepted = 98 000, stale = 1 500, invalid = 500. Тогда stale_rate = 1 500 / (98 000 + 1 500 + 500) = 1.5%. Если ваш H_reported = 200 TH/s, а invalid_rate = 0.5%, то H_eff ≈ 200 × (1 − 0.015 − 0.005) = 196 TH/s. На этой дистанции −2% выручки по сравнению с идеалом.
Частые вопросы (FAQ)
Stale = это «ошибка майнера»? Не обязательно. Чаще всего это сеть и задержки (ваша или пула). Но локальные причины (нестабильный роутер/прошивка) тоже влияют.
Какой уровень stale «нормальный»? Обычно стремятся к <1%; кратковременные всплески возможны при сетевых событиях/перезапусках. Стабильно высокое значение — сигнал к разбору сети/маршрута.
Поможет ли Stratum V2? Да, одна из дизайн-целей — снизить stale-ratio благодаря эффективному обмену заданиями (в т. ч. header-only). Фактический эффект зависит от поддержки SV2 пулом/прошивкой и качества канала.
Есть ли «магические» настройки майнера против stale? Нет. Главный эффект дают сеть/транспорт и правильный выбор endpoint’а. Тюнинг прошивки полезен косвенно (стабильность), но не заменяет работу с задержками.
Практика / чек-лист
- Проверьте пинг/потери до пула, попробуйте ближайшие регионы/зеркала.
- Разверните локальный прокси/relay; сведите майнеры к одному защищённому соединению.
- Перейдите на провод (без Wi-Fi), оптимизируйте сеть и оборудуйте мониторинг.
- Настройте failover без частых «пинг-понгов».
- По возможности используйте Stratum V2 (или переводчик) для более быстрых апдейтов job.
- Смотрите сводные метрики пула и устраняйте аномалии на уровне площадки.