Stale share в майнинге: почему появляются «стэйлы» и как их снизить

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.
  • Смотрите сводные метрики пула и устраняйте аномалии на уровне площадки.

См. также

Модели выплат в пулах

Калькулятор ROI майнинга

J/TH (энергоэффективность)

Hashprice

Прошивка ASIC

Иммерсионное охлаждение

Stratum V2

Proof-of-Work

Difficulty adjustment

Task Runner