Как работает майнинг в пуле и чем он отличается от соло-майнинга?
В этой статье мы объясним, в чем разница между пулом и соло-майнингом. Мы уже говорили о майнинге в пуле и соло-майнинге. Но сейчас мы бы хотели осветить эту тему немного глубже.
Мы говорили о Proof of Work в этой статье. Мы узнали, что майнер использует число nonce для манипулирования выходом хеш до тех пор, пока не будет найдено правильное решение. Это только (частично) применимо в случае, когда майнер занимается соло-майнингом — участвует в решении/подтверждении блока транзакций самостоятельно — старый способ майнинга до пулов.
Если мы говорим о майнинге в пуле, все становится немного сложнее. Вся работа, проделанная майнером при соло-майнинге, должна быть распределена между другими майнерами и нельзя допускать, чтобы два или более майнера решали один и тот же nonce.
Как только вы поймете принцип распределения работы от пула к майнерам, станет ясно и понятно, какова задача майнинга.
Как майнер угадывает числа nonce при соло-майнинге?
Во-первых, давайте освежим наши знания о соло-майнинге.
Узел (который по сути является майнером в блокчейне) будет «собирать» все транзакции, ожидающие обработки, и включать их в блок. Это так называемый блок транзакций. Он будет включать только определенное количество транзакций, так как блок Биткоина имеет ограничение на количество транзакций, которые могут быть включены в блок.
Затем майнер начнет угадывать число nonce до тех пор, пока выход хэша транзакций и число nonce не начнутся с определенного количества нулей (сложность сети).
Как только правильный выход хэша найден, майнер передает решение в сеть, и если все верно, он получает вознаграждение за блок.
Вы можете использовать приведенную ниже форму и угадывать число nonce, пока не будет найден правильный выход хэша. Начните с ввода случайного набора данных в поле DATA, а затем угадывайте число nonce, пока форма не станет зеленой. Или вы можете нажать кнопку MINE, чтобы найти число nonce автоматически.
Как майнер угадывает числа nonce при майнинге в пуле?
Хорошо, теперь мы знаем, что майнер должен угадывать/манипулировать числами nonce, чтобы получить правильный выход хэша. Но что произойдет, если требуемая сложность (количество нулей в приведенной форме) станет слишком большой? У майнера, который занимается соло-майнингом, будет меньше шансов найти правильное число nonce и, следовательно, меньше шансов найти блок.
Соло-майнер придумывает решение и просит своих друзей начать майнинг в группе — группа майнеров известна как пул. Теперь пул майнеров становится более сильным в блокчейне и имеет больше шансов найти правильное число nonce и получить вознаграждение за блок, тем самым увеличив частоту выплат.
Но как оператор пула может убедиться, что майнеры не угадывают один и тот же nonce? Если два или более майнеров угадывают один и тот же диапазон nonce или у них одинаковая стартовая позиция (например, все они начинают угадывать nonce с 0 и увеличивают его на 1), то они будут угадывать одно и то же число nonce. Если бы все майнеры имели одинаковую скорость угадывания (хешрейт), то не было бы никакого смысла в майнинге вместе, так как все они нашли бы решение примерно в одно и то же время.
Вместо этого оператор пула будет давать «стартовую позицию» nonce каждому воркеру. Пул может распределить работу между всеми воркерами, разделив число nonce на две части. Это позволяет пулу отправлять одну часть диапазона nonce первому майнеру, а другую часть — второму майнеру. Таким образом, больший диапазон покрывается быстрее.
Детальное объяснение
Как видно из формы выше, nonce — это случайное число, которое угадывается. Для упрощения примера мы будем говорить, что число nonce, которое решает воображаемый блок транзакции, может находиться в диапазоне от 0 до 100 000.
Если у нас есть один майнер, занимающийся соло-майнингом, он начнет угадывать nonce с 0 и дойдет до 100 000. Один из чисел nonce от 0 до 100 000 создаст выход хэша, соответствующий целевой сложности (количество нулей в начале выхода хэша). Как только майнер находит правильный nonce, он получает вознаграждение.
Если пул распределяет работу между несколькими майнерами, пул разделит диапазон nonce на две части. Первая часть сообщения будет фиксированным значением, которое получает майнер, например, 20 000 (диапазон 20 тысяч). Вторая часть сообщения (переменная часть) будет 20 000 (сотен), которой майнер может манипулировать. Майнер будет ответственен только за угадывание второй части.
Пример nonce, который будет угадывать один из майнеров в нашем случае: 20+001, 20+002, 20+003, вплоть до 20+999. Второй майнер может угадывать nonce в диапазоне 30 000 (30 тысяч). Например 30+001, 30+002 до 30+999. В нашем гипотетическом примере к пулу может быть подключено в общей сложности 99 (от 01 000 до 99 000) майнеров.
Как делится nonce?
Nonce делится на две части, называемые extranonce1 и extranonce2.
Первое сообщение называется extranonce1, и оно всегда разное, но фиксированное для каждого майнера, подключенного к пулу.
Второе сообщение называется extranonce2, и это часть nonce, которой должен манипулировать майнер, чтобы попытаться решить входные данные блока.
Можно сказать, что разница в хэшировании между соло-майнингом и майнингом в пуле заключается в том, что майнер при соло-майнинге угадывает полный диапазон nonce, в то время как майнер, занимающийся майнингом в пуле, угадывает только одну часть диапазона nonce.
Другой важной частью майнинга в пуле является сложность. При соло-майнинге майнер заботится только о целевой сложности сети. В то время как майнеры в пуле используют целевую сложность, предоставляемую пулом, а не сетью. Целевая сложность пула всегда ниже, чем целевая сложность сети.
Например, если целевая сложность сети требует 10 нулей в начале выхода хэша, целевая сложность пула может потребовать только 2 нуля в начале выхода хэша. В этом случае выход хэша должен начинаться с 2 нулей, но не именно с 2 нулей. Nonce, соответствующий сложности пула, может также соответствовать сложности сети. Если это произойдет, пул найдет блок и распределит вознаграждение между всеми майнерами в зависимости от проделанной работы.
В случае, если майнер исчерпал весь диапазон nonce, назначенный ему пулом, прежде чем нашел решение, то целевая сложность пула слишком высока для майнера (или, наоборот, хешрейт майнера очень высок)
Вы можете использовать эту форму и посмотреть, как майнеры вносят свой вклад в пул. Сперва введите случайный набор данных в поле Transaction Data, затем выберите желаемую сложность сети и нажмите MINE.
Майнеры будут угадывать или перебирать все доступные extranonce2, пока не будет найдено решение. Если решение не будет найдено, необходимо увеличить extranonce1.
Обратите внимание, что в форме отсутствует сложность пула для упрощения демонстрации. Сложность пула позволит майнерам находить шары быстрее и, таким образом, получать принятые шары до того, как будет найден блок (сложность сети). Если сложность пула подходит, это не обязательно означает, что и сложность сети будет подходящей. Но можеть быть и такое. Принятые шары позволяют пулу узнать, сколько работы вложил каждый майнер, и справедливо распределить вознаграждение.
Обратите внимание, что приведенные выше примеры чрезмерно упрощены и используются для простоты демонстрации.
Как всегда, присоединяйтесь к нашему серверу Discord и сабреддиту!