B2POOL подключение…

Собирайте свои блоки сами.

На этом пути вы не направляете майнер на нас. Вы запускаете узел Bitcoin Knots и шлюз DATUM на собственной машине; ваш узел решает, какие транзакции попадут в блок, а пул отвечает лишь на один вопрос — кому сколько платить. Нам этот путь милее прочих, и именно он продолжит платить после того, как Bitcoin Knots перестанет платить за блоки, которые майнер не строил.

Комиссия пула
1 %
столько же на обычном stratum
Порт шлюза
28915
все четыре региона
Prime ID
4243
как вас называют обозреватели
Минимальная выплата
10 000 сат
ниже этого — переносится
Диск для узла
~40 GB
обрезанная, не вся цепь
Сначала прочитайте это Ваш узел должен быть Bitcoin Knots 29.4.2 или новее. Более старая сборка не знает правила долгого созревания coinbase и охотно положит в шаблон преждевременную трату coinbase — а любой блок, собранный на таком шаблоне, сеть отвергнет. Вы потеряете не только свой блок: раунд потерян для каждого майнера в пуле. Пятнадцать блоков уже потеряно именно так в этой цепи, и ни один из них не наш. Сделать старый узел безопасным здесь невозможно, поэтому проверьте версию прежде всего остального.

Почему мы советуем именно этот путь.

Не потому, что он сложнее. А из-за того, кто собирает шаблон.

На наших обычных stratum-портах шаблон блока собираем мы. Это работает, выплаты те же, и для одного майнера на столе это разумный выбор. Но это значит, что транзакции выбираем мы, а вы принимаете наш выбор на доверии — вместе с той политикой, которая у нас включена на этой неделе. Пул, который собирает каждый шаблон, — это пул, на который в принципе можно надавить.

Со своим шлюзом шаблон принадлежит вам. Правила ретрансляции вашего узла, ваш мемпул, ваш порог комиссии. Мы никогда не видим блок до того, как он возникнет, и не можем цензурировать то, чего не строим. Пул добавляет только раздел выплат — список адресов и сумм, который ваш шлюз записывает в coinbase. Комиссия составляет 1 %, ровно столько же, сколько сегодня платит обычный stratum.

Честная цена — это узел, который вы содержите. Ему нужно около 40 ГБ, ему нужно оставаться включённым, и первая синхронизация занимает день-три. Дальше он справляется сам. Как платит пул — одинаково на обоих путях: прямо из coinbase блока, без баланса и без вывода.

Что нужно до начала.

Машина, которая не выключается
Любая 64-битная машина с Linux (x86-64 или ARM64), Mac или Windows. Двух ядер более чем достаточно. Raspberry Pi 5 с SSD подойдёт; SD-карта — нет.
Около 40 ГБ свободно
Цепь, обрезанная. Один только набор UTXO занимает сегодня 11 ГБ и продолжает расти; остальное — ваш бюджет обрезки и запас на первую синхронизацию.
8 ГБ ОЗУ, с запасом
4 ГБ хватит при меньшем dbcache. Это важно только во время первой синхронизации.
От одного до трёх дней
На первую синхронизацию. Всё остальное можно настроить пока она идёт, но шлюз не выдаёт работу, пока узел не догонит цепь.
Ваш адрес BTCB2
Нативный SegWit-адрес (bc1q…) из кошелька, которым владеете вы. Пул пишет его прямо в блок — здесь нет аккаунта и нечего регистрировать.

Шесть шагов.

Команды — для Linux. На Mac и Windows отличается только способ скачать два файла.

01Установить Bitcoin Knots

Это клиент, который знает цепь BLAKE2b. Берите его у проекта, проверяйте контрольную сумму и не подставляйте сборку Bitcoin Core — в Core этого форка нет.

V=29.4.2.knots20260508
cd /tmp
curl -fsSLO https://bitcoinknots.org/files/29.x/$V/bitcoin-$V-x86_64-linux-gnu.tar.gz
curl -fsSLO https://bitcoinknots.org/files/29.x/$V/SHA256SUMS
sha256sum --ignore-missing -c SHA256SUMS
sudo tar -xzf bitcoin-$V-x86_64-linux-gnu.tar.gz -C /opt
sudo ln -sf /opt/bitcoin-$V/bin/bitcoind  /usr/local/bin/bitcoind
sudo ln -sf /opt/bitcoin-$V/bin/bitcoin-cli /usr/local/bin/bitcoin-cli
bitcoind --version | head -1

На ARM64 замените x86_64 на aarch64. Последняя строка должна содержать 29.4.2 и упоминать Knots. Если sha256sum не печатает OK — остановитесь и скачайте файл заново: обычная причина — обрыв загрузки.

02Настроить узел

Запишите это в ~/.bitcoin/bitcoin.conf. Пароль не придумывайте, а сгенерируйте: openssl rand -hex 24.

~/.bitcoin/bitcoin.conf

server=1
rpcbind=127.0.0.1
rpcallowip=127.0.0.1
rpcuser=datum
rpcpassword=PASTE_THE_RANDOM_HEX_HERE

prune=10000
dbcache=2048

blockreservedweight=32000
blocknotify=curl -fsS -o /dev/null http://127.0.0.1:7152/NOTIFY

blockreservedweight=32000 — настройка, которую больше никто не документирует, и её отсутствие молча стоит денег вашим соседям по пулу. Вот почему. Пул передаёт вашему шлюзу список выплатных выходов — последнее время от 160 до 250. Они должны уместиться в coinbase, а единственное место, которое шаблон оставляет для coinbase, — это резерв. По умолчанию он равен 8000 единицам веса: около 40 выходов. Всё сверх того просто отбрасывается, его стоимость уходит на адрес пула, и потом её приходится выплачивать вручную. У нас 32 000 на всех четырёх узлах — измерено в работе, это место для 246 выходов вместо 153 — и ничего не теряется. Повышайте, а не понижайте.

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

Остальное — обычное. prune=10000 оставляет 10 ГБ блоков: на этом пути старая история не нужна никому, а txindex здесь и вовсе пустая трата диска. blocknotify — это то, что заставляет шлюз переключаться на новую вершину быстрее чем за секунду, а не ждать следующего опроса; он указывает на шлюз, который вы поставите на следующем шаге. Затем запустите узел и дайте ему синхронизироваться:

bitcoind -daemon
bitcoin-cli getblockchaininfo | grep -E 'blocks|headers|verificationprogress'

Когда verificationprogress дойдёт до 1, вы готовы. До тех пор шлюз запускается, но работу не выдаёт — и это правильно.

03Установить шлюз

Компилировать ничего не нужно. ratum-gateway поставляется одним статическим файлом примерно на 2,4 МБ, вообще без зависимостей.

V=0.1.57
cd /tmp
curl -fsSLO https://github.com/iohzrd/ratum/releases/download/v$V/ratum-gateway-$V-x86_64-linux-musl.tar.gz
curl -fsSLO https://github.com/iohzrd/ratum/releases/download/v$V/ratum-gateway-$V-x86_64-linux-musl.tar.gz.sha256
sha256sum -c ratum-gateway-$V-x86_64-linux-musl.tar.gz.sha256
tar -xzf ratum-gateway-$V-x86_64-linux-musl.tar.gz
sudo install -m0755 ratum-gateway-$V-x86_64-linux-musl/ratum-gateway /usr/local/bin/
ratum-gateway --version

В релизах есть также aarch64-linux-musl, x86_64-macos, aarch64-macos и x86_64-windows.zip. Версия 0.1.57 — та, которую мы сейчас видим работающей с нашим пулом; если вам ближе реализация на C, CONVOY DATUM gateway читает тот же самый файл настроек, и его мы тоже принимаем.

04Направить шлюз на B2Pool

Один файл. Замените две отмеченные строки своим адресом и паролем на ваш выбор; всё остальное может остаться точно как есть.

gateway.json

{
  "bitcoind": {
    "rpcurl": "http://127.0.0.1:8332",
    "rpcuser": "datum",
    "rpcpassword": "THE_SAME_HEX_AS_IN_BITCOIN_CONF",
    "work_update_seconds": 40,
    "notify_fallback": true
  },
  "stratum": {
    "listen_addr": "0.0.0.0",
    "listen_port": 23334,
    "vardiff_min": 2048,
    "require_address_username": true
  },
  "mining": {
    "pool_address": "YOUR_OWN_bc1q_ADDRESS",
    "coinbase_tag_secondary": "your-name-here"
  },
  "api": {
    "listen_addr": "127.0.0.1",
    "listen_port": 7152,
    "admin_password": "PICK_SOMETHING"
  },
  "datum": {
    "pool_host": "de.b2pool.io",
    "pool_port": 28915,
    "pool_pubkey": "8ba1f7693d117620b1e5a46828f1cd187efe81114e9cee6a063bfbbe2f1b6cff0fc681d3c1ca7cb19c0e0dbddfbea65d5509e974e7f0000112dd07cba744a716",
    "pool_url": "https://b2pool.io",
    "pool_pass_workers": true,
    "pool_pass_full_users": true,
    "pooled_mining_only": true
  }
}

Выбирайте хост с наименьшей задержкой до вас — de, hel, ord или hkg, все на .b2pool.io:28915. Это один и тот же пул и один и тот же учёт; различается только расстояние. Панель измеряет задержку прямо из вашего браузера, если вы не уверены.

Открытый ключ привязывает соединение. Шлюз с неверным ключом не получит сессию и не будет выдавать работу — в этом и смысл: никто не сможет незаметно встать между вами и пулом. Скопируйте его точно. Поле можно оставить пустым, чтобы ключ получили автоматически, но тогда вы доверяете первому полученному ответу. Не надо так.

coinbase_tag_secondary — это ваше имя в блоке. Основной тег ставим мы сами: так принято в DATUM, и только благодаря этому обозреватели вообще относят блок к пулу. Но вторая строка — ваша, и мы её никогда не перезаписываем. Именно она видна в обозревателях рядом с нашим именем, и именно поэтому ваши блоки читаются как DATUM miners via B2Pool, а не просто с названием пула.

Затем запустите:

ratum-gateway -c /etc/ratum/gateway.json

Когда всё заработает, оформите systemd-юнит, чтобы шлюз поднимался после перезагрузки. Одно замечание о pooled_mining_only: при true ваши майнеры простаивают, если пул недоступен. При false они продолжают майнить, и любой найденный в это время блок платит 100 % на ваш собственный mining.pool_address, а не в распределение. Оба варианта разумны: первый предсказуем, второй никогда не останавливается.

05Направить майнеры на шлюз

Теперь ваше оборудование разговаривает с вашей машиной, а не с нами. Используйте локальный адрес хоста со шлюзом:

stratum+tcp://192.168.1.50:23334
Имя пользователя
bc1q…вашадрес.rig-01 — ваш выплатной адрес, при желании точка и имя воркера
Пароль
любой, он не проверяется
Минимальная сложность
2048. Ниже этого пул ничего не начисляет, поэтому оставьте vardiff_min как есть

Часть до первой точки должна быть настоящим адресом этой цепи — пул начисляет работу именно этой строке, а всё остальное возвращается как BadUsername. Какой адрес получит выплату, решают две настройки шлюза:

Настройка шлюзаЧто получает пулКому платят
pool_pass_full_users: true собственное имя пользователя каждого майнера, без изменений на собственный адрес каждого майнера, отдельно
pool_pass_workers: true
pool_pass_full_users: false
ваш mining.pool_address, затем точку и имя воркера вам — имя воркера это просто метка

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

pool_pass_full_users имеет приоритет. Когда он включён, pool_pass_workers игнорируется, поэтому включить оба - как в примере выше - означает первую строку, а не смесь двух. От этого зависит и то, что сможет показать страница пула: пул видит только то имя пользователя, которое отправил ваш майнер. Майнер, который авторизуется одним адресом и ничем больше, приходит как одна единственная учётная запись: одна общая сумма, без списка воркеров и без числа майнеров. Дайте каждому майнеру <адрес>.<любое имя> - и имена появятся. Во второй строке шлюз делает это за вас: он добавляет собственное имя каждого майнера к вашему адресу, а безымянных подписывает по их локальному IP, так что вы увидите 192x168x1x50, где точки заменены на x, потому что точка - разделитель.

06Убедиться, что всё работает

Четыре проверки, в этом порядке. Каждая исключает свою причину отказа.

  1. 01
    У шлюза есть сессия

    Вскоре после старта в логе появляется hello ok. Нет строки — значит неверны хост, порт или открытый ключ.

  2. 02
    Работа выдаётся

    По строке на каждую новую вершину: Updating standard stratum job for block …. Тишина здесь означает, что узел ещё не досинхронизировался.

  3. 03
    Шары принимаются

    Собственная страница вашего майнера показывает растущее число принятых шар и отсутствие отказов.

  4. 04
    Вы видны в пуле

    В течение нескольких минут ваш адрес появится на странице майнеров, а ваша собственная страница /miner/<адрес> начнёт заполняться.

Когда что-то не работает.

Пять вещей, которые действительно ломаются, и что каждая из них означает.

Что вы видитеЧто это значит
работа вообще не выдаётся Узел ещё не дошёл до правила BLAKE2b или всё ещё синхронизируется. Пока шаблон не содержит !blake2b, шлюз осознанно не выдаёт ничего, вместо того чтобы отдавать работу для не той цепи.
BadUsername Имя пользователя до первой точки не является адресом, который принимает эта цепь. Проверьте его командой bitcoin-cli validateaddress <адрес> на своём узле. Обратите внимание, КАКОЕ имя пользователя имеется в виду: при pool_pass_full_users: true шлюз передаёт имя самого майнера, поэтому исправлять нужно в майнере, а не в datum.pool_username - у шлюза с безупречным собственным адресом всё равно будут отклонены все шары, если одна машина авторизуется как rig-3. Пока это так, работа не зачисляется, и такой майнер работает впустую. Наша сторона журнала называет это наоборот: payout address "rig-3" cannot be paid: not a valid address.
NoSplit Ваш шлюз добыл coinbase, который не выплатил ничего из распределения, присланного пулом. Это признак устаревшего или неправильно собранного шлюза, а не вашей ошибки — обновите его.
StaleBlock Шара пришла на вершину, которая уже сменилась. Несколько штук в день — норма. Постоянный поток означает, что blocknotify не доходит до шлюза.
выходы не попали в блок blockreservedweight слишком мал, в coinbase не хватило места для всего распределения. Поднимите до 32 000 и перезапустите узел.

Со всем остальным приходите в Discord и приносите строку из лога шлюза. Обычно дело в одной настройке.

Вопросы, которые стоит задать заранее.

Заработаю ли я меньше, чем майнеры на обычных портах?

Нет — столько же за ту же работу. Оба пути делятся из одного и того же скользящего окна недавней работы пула — восьмикратной сложности сети — и оба платятся прямо из coinbase блока. Комиссия на обоих — 1 %. Здесь вы получаете шаблон: транзакции выбираете вы.

Можно ли запустить это на машине, рядом с которой уже стоит мой майнер?

Да, и так обычно и делают. Шлюз крошечный; диск нужен узлу. Подойдёт любая постоянно включённая машина в той же сети, в том числе Raspberry Pi 5 с настоящим SSD. Только не SD-карта — chainstate её износит.

Нужно ли открывать порт в интернет?

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

Может ли мой узел быть обрезанным?

Да. Для сборки шаблонов нужны набор UTXO и мемпул, а не старые блоки. Обрезка здесь — рекомендуемая конфигурация, и мы сами работаем так же. txindex вам тоже не нужен: он съедает диск и на этом пути ничего не даёт.

Что будет, если мой узел или шлюз выключится?

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

Видит ли пул, какие транзакции я включаю?

Только потом, как и все остальные, когда блок опубликован. Пулу отдают блок для передачи в сеть; выбора, что в него войдёт, он не получает никогда. В этом и весь смысл такой схемы.

Почему основной тег coinbase ставит пул, а не я?

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

Есть ли минимальная выплата?

10 000 сатоши. Выход меньше этого стоит дороже потратить, чем он несёт, поэтому он не записывается в блок — он переносится и выплачивается с вашей следующей долей. Страница майнера показывает обе величины.