mining.set_difficulty и обработка ошибок
Майнинг не всегда идёт гладко. Соединения рвутся, шары отклоняются, а пул меняет правила на ходу. Два механизма управляют этими ситуациями: mining.set_difficulty регулирует интенсивность работы, а система ошибок сообщает о проблемах.
mining.set_difficulty: динамическая сложность
Заголовок раздела «mining.set_difficulty: динамическая сложность»{ "id": null, "method": "mining.set_difficulty", "params": [8192]}Единственный параметр — новая сложность шар. Вступает в силу со следующего задания mining.notify.
Зачем нужен vardiff
Заголовок раздела «Зачем нужен vardiff»Представьте, что пул установил одинаковую сложность для всех. S21 на 200 TH/s будет отправлять тысячи шар в секунду, заваливая сервер. Старый S9 на 14 TH/s — одну шару в минуту.
Vardiff (variable difficulty) решает это, подстраивая сложность под каждого майнера так, чтобы все отправляли шары примерно с одинаковой частотой — обычно одна шара каждые 5-10 секунд.
- Хешрейт вырос → сложность повышается → меньше шар, но каждая “дороже”
- Хешрейт упал → сложность понижается → больше шар, но каждая “дешевле”
- Итоговый доход не меняется. Одна шара на сложности 8192 = 8192 шары на сложности 1.
Коды ошибок
Заголовок раздела «Коды ошибок»Когда mining.submit отклоняется, пул отвечает ошибкой:
{"id": 4, "result": null, "error": [21, "Job not found", null]}Справочник ошибок
Заголовок раздела «Справочник ошибок»| Код | Название | Что значит |
|---|---|---|
| 20 | Other/Unknown | Общая ошибка. Может быть чем угодно. |
| 21 | Job not found | Задание с указанным job_id больше не активно. Обычно — устаревшая шара (новый блок уже найден). |
| 22 | Duplicate share | Шара с таким nonce/extranonce2/ntime уже отправлялась. Возможен баг прошивки. |
| 23 | Low difficulty | Хеш не проходит текущий порог сложности. Проблема синхронизации или баг. |
| 24 | Unauthorized | Воркер не авторизован через mining.authorize. |
| 25 | Not subscribed | Попытка отправить шару до завершения mining.subscribe. |
Ошибка 21: самая частая
Заголовок раздела «Ошибка 21: самая частая»Это устаревшая шара (stale share). Сценарий:
- Пул отправил задание “a1”
- Майнер работает над “a1”
- Кто-то в сети нашёл блок
- Пул отправил задание “a2” с
clean_jobs = true - Майнер отправляет шару для “a1”, вычисленную за миллисекунды до получения “a2”
- Пул: ошибка 21 — задание “a1” уже удалено
Это нормально и неизбежно из-за сетевой задержки. Уровень устаревших шар 0.5-2% — норма. Выше 5% — проверьте подключение.
Стратегии переподключения
Заголовок раздела «Стратегии переподключения»При обрыве TCP
Заголовок раздела «При обрыве TCP»Когда соединение падает, майнер должен пройти полное рукопожатие заново: subscribe → configure → authorize → ждать задание.
Экспоненциальный бэкофф
Заголовок раздела «Экспоненциальный бэкофф»Не нужно забрасывать пул запросами:
- 1-я попытка: ждать 1 секунду
- 2-я: 2 секунды
- 3-я: 4 секунды
- 4-я: 8 секунд
- …до максимума ~60 секунд
Резервные пулы
Заголовок раздела «Резервные пулы»Вот зачем нужны Pool 2 и Pool 3 в настройках майнера:
- Pool 1 недоступен после 3-5 попыток
- Переключаемся на Pool 2
- Периодически пробуем Pool 1
- Восстановился — переключаемся обратно