Mining Pool координирует нескольких майнеров и распределяет доход по согласованным правилам. Отдельный майнер может получать доход ещё до того, как именно его устройство найдёт блок. Пул не снижает сложность Bitcoin и не гарантирует прибыль: прежде всего он меняет способ учёта работы и выплаты вознаграждений.
У Анны одна машина для майнинга. Электричество она оплачивает каждый день, но при самостоятельной добыче может очень долго ждать своего блока. Если она найдёт блок, который сеть примет, награда достанется ей; до этого от такой добычи она ничего не получает. Долгое ожидание не означает, что успех уже близко. При неизменных условиях каждая новая попытка имеет ту же вероятность. В пуле её машина работает вместе с другими. Пул может платить и майнеру, который не нашёл конкретный блок: он измеряет вклад участников и применяет согласованную модель вознаграждений. Анна отказывается от возможности оставить себе весь доход своего блока в обмен на меньшие, обычно более регулярные суммы. Сложность сети от этого не снижается, дополнительные награды не появляются. Пул, как правило, ещё и берёт комиссию. Покроет ли доход электричество и оборудование — отдельный вопрос. [6] [7]
Пул не видит каждого вычисления машины Анны. Но ему нужно проверять, что она работает, и примерно оценивать её вклад. Поэтому он задаёт более лёгкое условие, чем сеть Bitcoin. Результат, который ему соответствует, называется Mining Share, или share. Так машина регулярно отправляет проверяемые результаты, даже не найдя блока. По принятым shares и их сложности пул статистически оценивает работу. Это не точный счётчик всех попыток. Если двум устройствам назначена разная сложность shares, сравнивать одно лишь число результатов нельзя. Обычный share не создаёт блок Bitcoin и не подтверждает платёж. Только редкий результат, выполняющий также условие сети, позволяет представить блок; тот должен пройти и остальные проверки. Share подтверждает работу для пула, а не является только что произведённым кусочком биткоина. [7] [9]
Анна может подключить одну машину к разным пулам и увидеть разную картину начислений. Одна из причин — модель расчёта. PPS, Pay Per Share, начисляет за принятый share заранее определённую ожидаемую сумму с учётом его сложности. Анне не нужно ждать удачного блока своего пула: риск случайных колебаний находок берёт оператор. Это не гарантирует его платёжеспособность и не означает фиксированную почасовую оплату. Количество shares и условия добычи продолжают меняться. FPPS, Full Pay Per Share, обычно добавляет оценку транзакционных комиссий к ожидаемой доле новых биткоинов. PPLNS, Pay Per Last N Shares, распределяет доход реально найденных блоков по работе в определённом недавнем окне. Вознаграждение сильнее зависит от удачи пула. Границы окна задаются его правилами; это не обязательно просто последний час. Одной аббревиатуры для сравнения мало. Важны комиссии, метод оценки, размер окна и учёт блоков вне основной истории — Stale Block. Модель определяет право на вознаграждение и его расчёт; график переводов в кошелёк — отдельное правило. [7] [8]
Анна видит, как растёт баланс счёта. Пока деньги не пришли в её кошелёк, она полагается на правильный учёт и выплату со стороны пула. Нужно знать срок выплаты, возможный минимум, комиссии и адрес получателя. Условия сервисов различаются: автоматическое начисление не означает немедленный перевод. Следить стоит и за работой: принятыми и отклонёнными shares, их сложностью Share Difficulty, доступностью серверов и резервными соединениями. Firmware — это управляющее программное обеспечение майнера, которое должно работать с пулом. Сравнение отчётов пула за достаточно долгий период с собственными журналами работы и реальными выплатами помогает заметить расхождения. Найденные блоки можно проверить в блокчейне, но всей внутренней бухгалтерии пула он не показывает. Важны также возможность сменить пул и понимание того, кто выбирает транзакции. [8] [9]
Если задание изменилось до прихода результата, пул может его уже не засчитать. Латентность здесь означает задержку связи между устройством и пулом. Share может быть отклонён как устаревший (stale), дублирующийся, неправильно сформированный или не соответствующий назначенному заданию. Большая задержка между майнером и пулом, медленные обновления заданий и сбои сети увеличивают потери работы. Доля stale shares характеризует эффективность соединения майнера с пулом; это не то же самое, что Stale Block в блокчейне. [9]
Награда за блок записывается в особой первой транзакции — Coinbase Transaction. Её выходы задают суммы и условия, при которых эти средства можно будет потратить. Поэтому награда может предназначаться одному или нескольким получателям. Block Template — проект блока с выбранными транзакциями. В обычном пуле оператор, как правило, составляет Block Template и определяет получателя выхода coinbase. Майнер в основном перебирает разные значения в назначенном задании, ища результат, который соответствует условию сети. Это даёт пулу влияние на выбор транзакций, но не возможность навязать некорректный блок: каждый Full Node независимо проверяет блок. Full Node — программа, проверяющая блоки и транзакции по правилам Bitcoin. [6] [10]
Помимо суммы выплаты важно, кто решает, какие платежи войдут в блоки. Исключение определённых транзакций может задерживать подтверждение. Концентрация пулов важна, поскольку небольшое число координаторов может влиять на включение транзакций, внедрение ПО и краткосрочное распределение Hashrate — числа вычислений майнинга в секунду. Hashrate пула не равнозначен владению оборудованием: операторы ASIC, специализированных устройств для майнинга, могут подключать их к другому пулу. Риск растёт, если затраты на смену пула, договоры или прошивка ограничивают такую возможность. [6] [10]
Stratum определяет обмен сообщениями между майнером и пулом. Шифрование защищает передаваемые сообщения, а аутентификация помогает проверить другую сторону. Stratum V1 служит для назначения работы, а контроль шаблона обычно остаётся у пула. Stratum V2 яснее разделяет роли и поддерживает зашифрованную и аутентифицированную связь. Необязательный Job Declaration Protocol позволяет майнеру представлять собственный шаблон со своим выбором транзакций, если нужные компоненты поддерживают и майнер, и пул. Mining Protocol в Stratum V2 может работать без этой возможности; сама отметка Stratum V2 не гарантирует независимого выбора транзакций. [10]
Для тех, кому интересна техника: Block Template — это предложенное содержимое блока. Worker обозначает подключённую машину или учётную запись, к которой относят её работу; заголовок содержит краткие сведения о блоке. Задание майнинга основывается на Block Template или аналогичном построении блока-кандидата. BIP22 описывает getblocktemplate, а BIP23 — его расширения для майнинга в пуле. Протокол пула передаёт воркерам нужные поля, данные транзакции coinbase и пространство поиска. ASIC Miner перебирает разные заголовки и вычисляет их хеш — числовой отпечаток. Чтобы выполнить требование Proof of Work, доказательства вычислительной работы, этот хеш должен быть меньше или равен сетевому порогу, называемому target. Блок также должен соответствовать остальным правилам Bitcoin. [1] [2] [5]
Техническая деталь: target — числовая граница, которую хеш, результат вычисления, не должен превышать; равенство тоже подходит. VarDiff означает переменную сложность shares. Пул задаёт более лёгкий порог shares, чтобы получать результаты достаточно часто для измерения. Порогу сети Bitcoin соответствовать гораздо труднее. Принятый share, удовлетворяющий только порогу пула, учитывается по правилам вознаграждения этого пула; если тот же хеш удовлетворяет сетевому порогу, можно представить блок-кандидат. VarDiff меняет сложность shares и тем самым их частоту, а не консенсусную Difficulty Bitcoin. [9]
Для полной картины прочитайте эту статью вместе с Майнинг, Hashrate, Braiins Pool, Stratum V2, Mining Share, Pay Per Share. На эту статью также ссылаются Coinbase-транзакция, ASIC Miner, Hashrate, Nonce.