▶ Установка нод для соло майнинга — от Ubuntu до первого блока
★ Реальный опыт :: DOGE нода :: патч 500 пиров :: Spiral Pool :: 25мс до сети ★

Как мы разогнали DOGE ноду до 25мс — патч 500 пиров и Spiral Pool

[ Наш L3+ в работе — BestShare 1,994,783,451 ]
Antminer L3+ Spiral Pool

Вот как выглядит наш Antminer L3+ подключённый к Spiral Pool. 0.38 TH/s, температура 46°C, BestShare уже перевалил за 1.99 миллиарда. Uptime 72 часа — нода и пул работают стабильно без единого перезапуска.

Blocks: 0 — да, блок ещё не найден. Но мы не торопимся — математика на нашей стороне. BestShare растёт, шары принимаются, всё работает как надо.

[ Откуда вообще взялась эта идея ]

Когда ставишь ноду и подключаешь к ней майнер — кажется что всё готово. Нода синхронизировалась, майнер молотит, шары летят. Но если копнуть глубже и замерить задержки — картина неприятная.

Типичная история: нода Dogecoin из коробки подключается к 8-25 пирам. Это стандартное ограничение в коде — разработчики считают что большее число соединений будет нагружать ноду и замедлять её. Логика понятна — для обычного пользователя этого хватает.

Но для соло майнинга это катастрофа. Мало пиров = нода медленно узнаёт о новых блоках = ты продолжаешь майнить на устаревшем шаблоне = потраченный хешрейт впустую.

"Пока твоя нода с 8 пирами узнаёт о новом блоке за 2-3 секунды — нода с 500 пирами уже отправила майнеру новый шаблон через 50 миллисекунд."
[ Теория — зачем нужны пиры ]

Bitcoin и все его форки (DOGE, LTC и другие) — это P2P сеть. Каждый новый блок распространяется по сети как волна — от ноды к ноде. Чем больше у тебя прямых соединений с другими нодами — тем быстрее ты получаешь информацию о новом блоке.

Представь: нашли блок где-то в Азии. Информация идёт по цепочке нод. Если у тебя 8 пиров — возможно что среди них нет никого кто стоит близко к источнику. Если у тебя 500 пиров — среди них наверняка есть кто-то кто уже получил информацию.

Вывод: Больше пиров = быстрее получаешь новый блок = быстрее отправляешь майнеру новый шаблон = не тратишь хешрейт на уже найденный блок.

На практике — разница между 8 пирами и 500 пирами это примерно 2-5 секунд против 50-100 миллисекунд. На первый взгляд немного. Но если блоки находят каждую минуту — ты теряешь несколько секунд полезного хешрейта на каждом блоке.

[ Патч ноды Dogecoin на 500 пиров ]

В коде Dogecoin Core ограничение на исходящие соединения прописано константой MAX_OUTBOUND_FULL_RELAY_CONNECTIONS. По умолчанию стоит 8. Меняем на 500.

# Скачиваем исходники Dogecoin
$ git clone https://github.com/dogecoin/dogecoin.git
$ cd dogecoin
# Находим нужный файл
$ grep -r "MAX_OUTBOUND_FULL_RELAY" src/
src/net.h:static const int MAX_OUTBOUND_FULL_RELAY_CONNECTIONS = 8;
# Патчим — меняем 8 на 500
$ sed -i 's/MAX_OUTBOUND_FULL_RELAY_CONNECTIONS = 8/MAX_OUTBOUND_FULL_RELAY_CONNECTIONS = 500/' src/net.h
# Проверяем
$ grep "MAX_OUTBOUND_FULL_RELAY" src/net.h
static const int MAX_OUTBOUND_FULL_RELAY_CONNECTIONS = 500;
# Устанавливаем зависимости и собираем
$ sudo apt install -y build-essential libtool autotools-dev automake pkg-config libssl-dev libevent-dev bsdmainutils libboost-all-dev libzmq3-dev
$ ./autogen.sh && ./configure --without-gui --with-zmq
$ make -j$(nproc)
... компиляция 20-40 минут ...
✓ Готово! src/dogecoind собран с патчем

После запуска патченой ноды смотрим сколько пиров подключилось:

$ dogecoin-cli getconnectioncount
487
# Было 8-25, стало 487 — нода знает о блоках почти мгновенно
⚠️ Важно: После патча нода потребляет больше RAM и CPU на поддержание 500 соединений. На слабом железе (менее 8GB RAM) могут быть проблемы. Наш сервер Xeon E5-2683 v3 с 32GB RAM справляется без проблем.
[ Патч Spiral Pool — убираем задержки ]

Половину дела сделали — нода быстро получает новые блоки. Но есть вторая проблема: пул должен максимально быстро отправить майнеру новый шаблон блока как только получил уведомление от ноды.

Стандартный Spiral Pool имеет встроенные задержки в коде — небольшие паузы между получением уведомления от ноды и отправкой шаблона майнеру. Убираем их:

# В конфиге Spiral Pool находим параметры задержки
# Обычно это что-то вроде blockRefreshInterval
$ grep -r "interval\|delay\|timeout" config/ | grep -i block
# Также важно настроить ZMQ уведомления в ноде
# dogecoin.conf:
zmqpubhashblock=tcp://0.0.0.0:28332
zmqpubrawblock=tcp://0.0.0.0:28332
zmqpubrawtx=tcp://0.0.0.0:28333

ZMQ (ZeroMQ) — это система мгновенных уведомлений. Когда нода получает новый блок — она мгновенно отправляет ZMQ сообщение пулу. Пул моментально генерирует новый шаблон и отправляет майнеру. Без ZMQ пул узнавал о новом блоке через RPC polling с задержкой 1-5 секунд.

Ключевая фишка: Нода и пул работают на одном сервере. Нет сетевой задержки между ними — всё через localhost. ZMQ уведомление приходит за 0 миллисекунд.
[ Результат — цифры ]

Итого что мы получили на нашем сервере Xeon E5-2683 v3 / 32GB RAM:

📊 Задержки до и после оптимизации
Пиров до патча 8-25 пиров
Пиров после патча 450-500 пиров
Задержка нода→сеть (до) 2000-5000 мс
Задержка нода→сеть (после) 25 мс
Задержка нода→пул 0 мс (localhost)
Задержка пул→майнер ~1-3 мс (локалка)
Итого от сети до майнера 25-30 мс
"Xeon E5-2683 v3 с 32GB RAM против крупных пулов. Они берут числом майнеров — мы берём скоростью. По задержкам мы не уступаем никому."

Крупные пулы имеют преимущество в суммарном хешрейте тысяч майнеров — это факт. Но по скорости реакции на новый блок наша конфигурация не уступает им. Каждый наш майнер получает новый шаблон за 25-30 миллисекунд — это уровень профессиональных пулов.

Это особенно важно при соло майнинге — каждая секунда потраченная на устаревшем шаблоне это потраченный хешрейт. Умножь на количество блоков в день — и получишь ощутимые потери.

[ Задай вопрос ] LIVE

Есть вопросы по патчу или настройке? Пиши — отвечаем из реального опыта.

✓ Вопрос отправлен!
DOGE патч пиров 500 пиров Spiral Pool ZMQ соло майнинг задержка Xeon E5-2683