Опубликован: 01.02.2018 | Доступ: свободный | Студентов: 1357 / 260 | Длительность: 17:50:00
Лекция 5:

Особенности майнинга

< Лекция 4 || Лекция 5: 12345 || Лекция 6 >
Аннотация: Цели и сложности майнинга. Поколения аппаратного обеспечения для майнинга: центральные процессоры общего назначения, GPU, программируемые пользователем вентильные матрицы, ASIC. Экологические аспекты биткоин-майнинга. Пулы совместного майнинга: цели создания и особенности распределения вознаграждения. Стратегии, применяемые майнерами.

Задача биткойн-майнеров

В данной лекции будут рассмотрены все аспекты майнинга: кто такие майнеры, что представляет собой бизнес-модель майнеров, какое влияние они оказывают на окружающую среду. Из предыдущих лекций известно, что Биткойн находится в достаточно сильной зависимости от майнеров, которые подтверждают каждую транзакцию и создают все блоки за вознаграждение.

Майнинг - это не схема быстрого обогащения, а очень длинный путь к заработку. Что необходимо сделать, чтобы стать биткойн-майнером? Для начала присоединиться к сети и стать Биткойн-нодой. Начать перехватывать и подтверждать все новые транзакции и блоки, поддерживать текущую цепочку блоков. Чтобы создать новый блок, нужно вычислить случайный одноразовый код (nonce), который позволит блоку считаться подтвержденным. Эта сложная вычислительная работа, которая является самой трудной задачей для майнера. Когда майнер путем долгих вычислений находит блок, он надеется, что все остальные майнеры признают этот блок, что они подтвердят его и начнут майнить, продолжая цепочку, и что они не признают блок конкурента вместо этого блока. И если все это совершится, то майнер получит вознаграждение в объеме более 25 биткойнов за блок. Это около $15,000 US.

Майнинг существует, чтобы осуществлять подтверждение транзакций. Остальное: вознаграждение и поиск блоков, - это всего лишь стимул, чтобы побудить майнеров осуществлять подтверждение, так как это необходимо для функционирования биткойн в качестве валюты.

Что собой представляет процесс поиска достоверного блока? Необходимо вспомнить о существовании 2 основных структур данных на основе хэша. Существует цепочка блоков (block chain), где каждый заголовок блока указывает на предыдущий заголовок блока в цепочке. В каждом блоке есть дерево Меркла, которое представляет собой бинарное дерево на основе хэша всех транзакций, включенных в блок.

Процесс поиска достоверного блока

Рис. 5.1. Процесс поиска достоверного блока

Первое, что делает майнер – собирает все транзакции, которые были получены от пула, ожидающего блоки, в это дерево.

Потом он создает блок с правильным заголовком, который указывает на предыдущий блок ( рис. 5.1). Далее майнеру необходимо решить самую сложную задачу – найти случайный код(nonce), чтобы хэш заголовка блока начинался с необходимого количества нулей. Майнер может начать со случайного одноразового кода (nonce), состоящего только из нулей (32-битное целое число) и, попробовав, получит неверный хэш. Тогда он перейдет следующему коду (nonce) с номером 1, и хэш также будет неверным. Затем код (nonce) номер 2, хэш также окажется неверным. Майнер будет пытаться использовать каждое возможное значение для этого 32-битного целого числа, и, возможно, ни в одном случае хэш не будет верным.

Тогда ему потребуется внести изменения.

Комиссионная транзакция (coinbase transaction) существует там, где майнеры фактически создают новые монеты и выдвигают свои права на них. В ней существует дополнительный параметр одноразового кода (nonce), содержащий только нули. После того, как майнер исчерпал все возможные одноразовые коды (nonce) в заголовке блока, он использует дополнительный код (extra nonce) в комиссионной транзакции, который изначально содержит только нули. Он перейдет к дополнительному коду (extra nonce) в комиссионной транзакции и изменит его на 1, и затем начнет поиск кодов (nonce) в заголовке блока заново.

При изменении этого параметра в комиссионной транзакции, все дерево транзакций Меркла меняется. Таким образом, изменения будут распространяться до конца. Изменение дополнительного кода (extra nonce) в комиссионной транзакции обойдется гораздо дороже, чем изменение одноразового кода (nonce) в заголовке, по этой причине майнер делает это как внешний цикл. А внутренний цикл, в котором он действительно трудится, - изменение кода (nonce) в заголовке блока.

Но в очередной раз первая попытка не сработет, так что майнеру придется перебирать возможные значения дальше. Поиск nonce это действительно сложный вычислительный процесс, так что подавляющее большинство кодов (nonce), которые проверяет майнер, не срабатывают.

В конечном счете, если майнер посвятит этому достаточно времени, он найдет правильную комбинацию дополнительного кода (extra nonce) в комиссионной транзакции и одноразового кода (nonce) в заголовке, и сгенерирует блок с хэшем, который начинается с достаточного количества нулей, чтобы считаться достоверным. Тогда он захочет объявить об этом так быстро, насколько может, и будет надеяться, что сможет извлечь из этого выгоду.

Рассмотрим, насколько сложно найти nonce.

Хэш любого подтвержденного блока должен быть менее 256 бит. Мы используем хэш-функцию (SHA-256), в которой, по крайней мере первые 64 бита хэша любого достоверного блока должны быть нулями.

В целом сложность на настоящий момент составляет 266 и это огромное число. Если попытаться написать его десятичным числом, то получится 84 квинтильона. Приближение к этому числу, которое можно представить, - это население Земли в квадрате. Другими словами, если бы каждый человек на Земле был бы сам по себе своей планетой Земля с 7 миллиардами человек на ней, то общее число людей было бы близко к этому числу.

Или другой пример, чтобы представить данное число, если бы все 7 миллиардов человек на Земле пожали бы друг другу руки. Меньше, чем 266 общих рукопожатий должно было осуществиться.

Как определяют сложность майнинга?

Как уже упоминалось ранее, сложность майнинга пересчитывается каждые 2 недели на основе эффективности работы майнеров в течение предыдущих 2 недель. Для этого берется время, затрачиваемое майнерами на поиск предыдущих 2016 блоков и делится на 2 недели.

Затем полученное отношение умножается на предыдущее значение сложности, чтобы получить следующее значение сложности. Таким образом, значение сложности регулярно пересчитывается, чтобы поддерживать постоянной среднюю скорость создания блоков (примерно 1 блок в 10 минут). Это константа, которая была установлена в самом начале развития Биткойн, и каждые 2 недели сложность переустанавливается, чтобы гарантировать, что это свойство поддерживается.

С течением времени сложность майнинга увеличивается ( рис. 5.2). И это не обязательно постоянное линейное или экспоненциальное увеличение. Сложность зависит от многих параметров: активности на рынке, количества новых майнеров, обменого курса и т.п. На текущий момент основным фактором является увеличение вычислительных мощностей майнеров в сети. Чем больше людей занимаются хэшированием, тем быстрее создаются новые блоки, и сложность корректируется. Таким образом, на создание новых блоков снова затрачивается 10 минут. На рис. 5.2 изображена скачкообразная функция сложности, даже несмотря на то, что общая скорость хэширования растет плавно, сложность меняется скачкообразно.

Динамика сложности майнинга

Рис. 5.2. Динамика сложности майнинга

Другой способ доказать скачкообразность функции сложности – это выяснить, сколько времени в среднем потребуется для создания нового блока. На рис. 5.3 показано, сколько прошло секунд между последовательно идущими блоками в цепочке блоков.

Соотношение времени, затрачиваемого на создание блока, и сложности

Рис. 5.3. Соотношение времени, затрачиваемого на создание блока, и сложности

Можно заметить, что линия затрат времени на создание нового блока постепенно снижается, затем быстро возрастает, и снова постепенно снижается. Это объясняется тем, что сложность сбрасывается каждые 2 недели, а средняя скорость создания новых блоков возвращается на уровень 10 минут (примерно). Затем чем больше мощностей привлекается в сеть, когда сложность остается прежней, тем быстрее майнеры создают новые блоки. По прошествии 2 недель сложность переустанавливается на 10 минут, и процесс начинается сначала.

Несмотря на то, что цель заключается в том, чтобы новый блок создавался каждые 10 минут, в среднем это значение ближе к 9 минутам, а к концу периода в 2 недели это значение снижается примерно до 8 минут.

< Лекция 4 || Лекция 5: 12345 || Лекция 6 >