Майнинг биткоинов. Задача майнеров биткоина
Данная глава посвящена вопросам майнинга. Мы уже кое-что знаем о майнерах и о том, как от них зависит биткоин — они подтверждают каждую транзакцию, строят и сохраняют все блоки, и они достигают консенсуса о том, какие блоки должны войти в блокчейн. Также нам уже известно, что майнеры получают за это некоторое вознаграждение. Однако, многие вопросы мы так и оставили без обсуждения. Кто такие майнеры? Как они стали этим заниматься? Как они вообще работают? В чём состоит их бизнес-модель? Как они влияют на среду? В этой главе мы ответим на все эти вопросы.
Задача майнеров биткоина. Хотите разобраться в майнинге как следует? Если да — не хотим разочаровывать вас, но имейте в виду, что майнинг весьма сильно напоминает золотую лихорадку. Исторические золотые лихорадки видели немало молодых людей, которые срывались бог знает куда наудачу, и зачастую теряли всё, что у них было. Повезло лишь немногим, но даже им пришлось вкалывать как проклятым. Ввязаться в золотую лихорадку — не самый лёгкий способ разбогатеть, и в биткоин-майнинге наблюдается аналогичная тенденция. Как мы увидим в этом разделе, майнинг никоим образом не похож на схему стремительного обогащения.
Но для начала давайте познакомимся с техническими нюансами. Чтобы стать майнером, нужно присоединиться к биткоин-сети и подключиться к другим узлам. После этого перед вами встанет шесть задач:
1. Слушать транзакции. Первым делом вы слушаете транзакции в сети и валидируете их, проверяя подписи и отсутствие прежних трат по данным выходам.
2. Поддерживать блокчейн и слушать новые блоки. Ваша обязанность — поддерживать блокчейн. Сначала вы требуете у других узлов данные по имеющимся блокам — ещё до того, как присоединиться к сети. Затем вы слушаете новые блоки, которые передаются по сети. Каждый из полученных блоков нужно подтверждать путём подтверждения каждой транзакции в блоке и проверки наличия достоверной выборки в блоке. К этой проверке мы вернёмся чуть ниже.
3. Собирать новые блоки. Получив актуальную версию блокчейна, вы строите свои блоки. Для этого нужно сгруппировать полученные транзакции в новые блоки, которые подключаются к последнему известному вам блоку. Каждая включённая в блок транзакция должна быть валидной.
4. Найти выборку, которая делает ваш блок валидным. Это самый трудоёмкий этап, и именно тут у майнеров начинаются основные сложности. Ниже мы коротко познакомимся с этим этапом.
5. Надеяться, что блок примут. Даже если вы нашли блок, нет гарантии, что он станет частью общей цепи. Тут всегда есть элемент случайности — нужно надеяться, что другие майнеры примут ваш блок и станут строить цепь от него, а не от другого.
6. Прибыль. Если все майнеры примут ваш блок, вы победили! На момент написания книги (начало 2015), награда за блок — 25 биткоинов, то есть больше 6000 долларов. Кроме этого, если в транзакциях по блоку были комиссии, майнер получит и их. Все шаги майнера можно разбить на две категории. Некоторые из них — подтверждение транзакций и блоков — помогают сети и необходимы для её существования.
Они — та самая причина, по которой биткоин-протоколу нужны майнеры. Другие — гонка за блоками и прибыль — не имманентны сети самой по себе, но нужны для поощрения майнеров в выполнении необходимых шагов. Конечно, и то и другое необходимо, чтобы биткоин работал как валюта, поскольку майнерам нужен стимул, чтобы делать определённые вещи.
Нахождение валидного блока. Вернёмся к вопросу о нахождении выборки, которая делает блок валидным. В главе 3 мы видели, что существует две основных хэш-структуры — блокчейн, где заголовок каждого блока указывает на предыдущий блок в цепи, и дерево Меркла в каждом блоке для записи всех включённых в него транзакций.
Первое, что вы делаете как майнер — это собираете все транзакции, находящиеся на ожидании в вашем пуле, в дерево Меркла.
Затем вы создаёте блок с заголовоком, который указывает на предыдущий блок. В заголовке есть 32-битное поле для чисел, и вы подбираете разные выборки в поисках той, которая выводит под цель хэш этого блока — обычно можно начинать с необходимого количества нулей. Майнер может взять выборку по нулям и последовательно увеличивать их на единицу, пока не найдет выборку, которая делает блок валидным (см. рис. 5.1).
Рис. 5.1: Нахождение валидного блока. В этом примере майнер пробует выборку из всех нулей. Это не создаёт валидного выхода хэша, поэтому ему придётся пробовать другую выборку
Как правило вам придётся попробовать каждую из возможных 32-битных комбинаций выборки, и почти ни одна не подойдёт. Здесь можно внести некоторые изменения. Обратите внимание, что на рисунке есть ещё одна выборка в coinbase-транзакции, которую тоже можно менять. Исчерпав все возможные выборки для заголовка, вы меняете эту дополнительную выборку — например, увеличив её на 1, и тогда начинаете искать выборки заново.
Когда вы меняете параметр выборки в coinbase-транзакции, всё дерево Меркла из транзакций должно измениться (см. рис. 5.2). Так что изменение этой выборки распространяется вверх, а поскольку вам придётся обновлять все хэши, изменение дополнительной выборки гораздо дороже, чем просто подборка по заголовку. По этой причине майнеры тратят больше времени на заголовки, а к coinbase обращаются, только исчерпав все 232 выборки в заголовке.
Рис. 5.2: Изменение выборки в транзакции coinbase влияет на всё дерево Меркла Подавляющая часть выборок не сработает, но если работать достаточно долго, то в итоге найдётся та самая комбинация дополнительной выборки в coinbase-транзакции и выборки в заголовке, которые создадут блок с нужным хэшем. Найдя его, вы должны будете объявить об этом как можно скорее и надеяться на прибыль
Все решают одну и ту же задачу? Можно подумать — если каждый майнер просто увеличивает числа, разве не решают они одну и ту же задачу? Выигрывать, получается, должен просто самый быстрый майнер? Ответ — нет! Во-первых, маловероятно, что все майнеры будут работать над одним и тем же блоком, так как вводить они будут как минимум не одни и те же транзакции, и порядок этих транзакций будет разным.
Но, что более важно, даже если два разных майнера будут работать над блоком с одинаковыми транзакциями, блоки всё равно будут отличаться. Вспомним coinbase- транзакцию — в ней майнеры задают свой собственный адрес. Это изменение распространяется вверх, что меняет все хэши дерева Меркла — а это гарантирует, что никакие два майнера не хэшируют одни и те же вводы.
Сложность. Насколько сложно найти валидный блок? По состоянию на март 2015 сложность майнинга в шестнадцатиричной системе счисления составляла: 00000 0000000 0000172EC0 000000000 00000000 000000000 00000000 00000000
Так что хэш любого валидного блока должен быть меньше этого значения. Иными словами, сработает только одна из примерно 267 выборок, а число очень большое. Оно примерно равно квадрату населения всей Земли — то есть, если бы каждый человек сам был планетой с семимиллиардным населением, общее население всех этих планет было бы примерно равно этому числу.
Определение сложности. Сложность майнинга меняется каждые 2016 блоков — это изменяется в зависимости от эффективности майнеров на предыдущих 2016 блоках по формуле: следующая сложность = прежняя сложность * 2 недели / время на майнинг последних 2016 блоков.
Две недели — это то время, которое нужно для майнинга 2016 блоков, если они создаются каждые 10 минут. Так что эта формула показывает, как растёт сложность нахождения блоков в среднем каждые 10 минут. В двух неделях нет ничего принципиального — это просто компромисс. Если бы период был короче, сложность зависела бы от случайных вариаций по количеству блоков, найденных в каждый период.
Если бы период был длиннее, хэш- мощность (hashrate — прим.пер) сети вышла бы далеко за пределы возможностей решения. Каждый майнер независимо вычисляет сложность и принимает только те блоки, которые соответствуют вычисленному значению. Майнеры на разных ветвях могут не вычислять одно и то же значение сложности, но любые два майнера, работающие поверх одного и того же блока, соглашаются в том, какова должна быть сложность. Это и обеспечивает возможность консенсуса.
На рисунке 5.3 видно, что со временем сложность майнинга только растёт. Это необязательно стабильный линейный рост — всё зависит от активности рынка. То, сколько новых майнеров входит в игру в свою очередь может зависеть от курса обмена биткоина, но при этом влияет на сложность майнинга.
Рис. 5.3: Изменение сложности майнинга со временем (на середину 2014). Отметим, что ось ординат начинается на уровне 80,000 ТХ/с
В целом, чем больше майнеров выходят в сеть, тем быстрее находятся блоки, и тем быстрее возрастает сложность, так что для нахождения блока снова нужно около 10 минут. На рис. 5.3 видно, что красная линия представляет собой ступенчатую функцию сложности, хотя общий хэш сети растёт плавно. Дискретность возникает из-за того, что сложность возрастает только каждые 2016 блоков.
Ещё можно посмотреть, как долго в среднем ищется блок. На рис. 5.4 показано, сколько секунд проходит между двумя последовательно идущими блоками в блокчейне. Видно, что этот промежуток постепенно снижается, поднимается, а затем снова снижается. Это происходит, конечно, потому, что каждые 2016 блоков сложность обновляется, и среднее время возвращается к 10 минутам. В следующий период сложность не меняется, но всё больше майнеров выходят в сеть. Так как хэш-мощность увеличилась, а сложность — нет, блоки находятся быстрее, пока наконец сложность не обновится после 2016 блока — то есть, примерно через две недели.
Рис. 5.4. Время на нахождения блока (начало 2014). Отметим, что ось ординат начинается на уровне 460 с
Хотя цель состоит в нахождении блока каждые 10 минут, фактически это происходит примерно каждые 9 минут, а в конце двухнедельного цикла время доходит до 8 минут. Это происходит при быстром росте хэшрейта. Если он не увеличивается настолько же быстро, среднее время остаётся более стабильным.
В истории биткоина были случаи и уменьшения сложности — что происходило, впрочем, редко по сравнению с увеличениями. Один из возможных сценариев кончины биткоина - «спираль смерти», при которой падение курса делает майнинг невыгодным для некоторых майнеров, вызывает их уход, что обрушивает цену ещё сильнее. И хотя таких катастрофических снижений майнинговой мощности пока не случалось, нет ни одной имманентной причины для постоянного увеличения сложности.
Дата добавления: 2023-05-18; просмотров: 412;