Почему биткоин требует много электроэнергии

Сегодня постараюсь ответить на вопрос, куда уходит электричество в сети Биткоин и почему я считаю биткоин с одной стороны шедевром в ИТ-технологиях (чем глубже погружаешься, тем больше получаешь эстетическое наслаждение), с другой стороны - безобразно адским пожирателем наших ресурсов. "Ужасно красиво" - наверное наиболее точно описывает мое ощущение.

Для справки: Энергопотребление сети Bitcoin сравнимо с потреблением Чехии(на момент написания статьи) и постоянно растет (digiconomist.net/bitcoin-energy-consumption).

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

Блокчейн биткоина - это большой длинный файл(порядка 200 Гигабайт на момент написания статьи), который раз в 10 минут (в среднем) дополняется очередным блоком данных (размером до 1 Мбайта). Основная статистика - bitinfocharts.com/ru/bitcoin
В каждом блоке записан список "транзакций" - перемещение «денег» с адресов одних кошельков на другие кошельки. Для простоты я буду называть транзакции банковским термином «переводы».

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

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

Хеш может выглядеть, например, вот так:

45F8C3AF42FC31103F1FDC0151FA747FF87349A4714DF7CC52EA464E12DCD4E9

Примитивный пример хеш-функции - "сложить все цифры в числе". Давайте рассчитаем "хеш" для строки цифр «256789». Просуммируем 2+5+6+7+8+9=37. Хеш равен 37. Если кто-то попытается подделать строку, и переписать ее как 257789, то пересчитав хеш, мы получим 38, а не 37 и поймем, что строка была подделана.

Конечно, такая условная хеш-функция слишком проста, если вы сделаете две правки 257689 - то проверка ничего не выявит. Поэтому математики разработали более сложные алгоритмы, взломать которые за разумное время невозможно.

Итак, каждый майнер формирует блок "переводов", выбирая понравившиеся ему "заявки". Предположим сформирован такой список переводов(транзакций):

Вова перевел Саше 10 монет
Джон перевел Кларку 5 монет
Серик перевел Нурлану 12 монет

Вот пример онлайн сервиса по расчету хеш-функции SHA256 passwordsgenerator.net/sha256-hash-generator. Давайте скопируем и вставим наш список переводов и рассчитаем хеш.

Попробуйте изменить хотя бы один символ, поэкспериментируйте -  даже при малейшей корректировки хеш становится совершенно другим!

Ну хорошо, скажите вы, все мутно и почти непонятно, а где бабло и электроэнергия?!!

Спокойствие, мы подошли к финалу. Несложно заметить, что расчет хеш-функции занимает доли секунд. Но нам нужно, чтобы расчет занимал около 10 минут. Помните, я в самом начале писал, что блоки в файл блокчейна добавляются приблизительно раз в 10 минут? Почему именно 10 минут?  Данное время выбрано экспертным путем, чтобы вся система биткоина с одной стороны не была перегружена многочисленными мелкими блоками и информация о транзакциях успевала распространиться по сети среди участников системы, с другой стороны переводы совершались в разумное(условно) время. Т.е. нам нужно чтобы каждый новый блок записывался в блокчейн не чаще, чем раз в 10 минут  (в среднем). Значит нужно  добиться, чтобы хеш рассчитывался не доли секунд, а минуты. Как это сделать? Подумали-подумали и решили - а давайте заставим майнеров  рассчитывать хеш-функции много много много раз!

Достигнуто это следующим способом. В  список "переводов" добавлена еще  одна строчку:

Вова перевел Саше 10 монет
Джон перевел Кларку 5 монет
Серик перевел Нурлану 12 монет
Число для подбора: 1

Задано условие - господа майнеры, система примет от вас такой блок, в хеше которого первые 10 цифр должны быть нулями! Вот вам специальный параметр - "Число для подбора", ставьте туда любое значение до тех пор, пока не получится хеш с 10 нулями в начале.

На самом деле ставится условие - хеш должен быть меньше определенного числа, называемого "Сложность Майнинга". Эта сложность периодически пересматривается. Если статистика показывает, что время нахождения "правильного" хеша стало меньше 10 минут, сложность повышается, т.е. (чтобы окончательно запутать тех, кто дочитал) число, определяющее сложность майнинга уменьшается.

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

Попробуйте подбирая число добиться, чтобы первые 10 символов оказались нулями.

Сразу предупрежу - в силу своей сложности нет никакого разумного способа рассчитать данное число, кроме тупого перебора.

По этой причине куча майнеров со всего мира денно и нощно рассчитывают хеш-функции, перебирая числа, пока кому-то не повезет и у него вывалится хеш с нужным количеством нулей. Еще раз - майнеры не рассчитывают какую-то одну очень-очень сложную математическую операцию, для которой требуется много вычислительных ресурсов и времени. Они просто тупо перебирают результаты, в поисках красивого нужного количества нулей в начале хеша. Совершенно бессмысленная (с точки зрения стороннего наблюдателя) работа, так как 100%-1 рассчитанных по всему миру хешей никем и никогда не используются! С таким же успехом (но гораздо большей пользой), можно было заставить майнеров, например, приседать 600 раз (постепенно увеличивая это число по мере роста силы ног), вот только приседания проконтролировать сложнее.

Это один из ключевых моментов, важно в нем разобраться.
Итак, чтобы записать блок транзакций/переводов в блокчейн, нужно его подписать "цифровой подписью", на расчет которой уходят доли секунды, а электричества тратится столько, что лампочка даже не успеет моргнуть. Никаких сложных расчетов для работы системы в целом не нужно. Несколько лет назад, когда биткоин никому не был известен, система работала на слабеньких компьютерах и вполне себе нормально существовала. Для работы блокчейна не играет роли, сколько нулей будет в хеше в самом начале - десять,  пять или ни одного. Это никак не скажется на надежности хранения информации и защите от взлома.  Сложность создана искусственно, для увеличения времени попадания каждого блока в блокчейн до 10 минут.

Ответ на вопрос куда уходит электричество - на расчет миллиардов и миллиардов хеш-функций в поисках результата с нужным количеством нулей в начале.

Ну и самое важное - если майнер нашел хеш, удовлетворяющий требованиям, и если его блок записывается в блокчейн, система начисляет вознаграждение такому майнеру - несколько новых биткоинов (сейчас 12.5). Вот оно, то самое место, где появляются деньги! Ради этой награды жгут электричество и покупают видеокарты (уже нет). Именно так создаются новые биткоины в системе.
Также майнер зарабатывает на комиссиях от каждой проведенной им транзакции, но пока это не самые интересные доходы.

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

Можно ли что-нибудь сделать? Можно ли как-нибудь другим способом выдерживать эти 10 минут? Есть кое-какие предложения (Proof of Stake), как можно модифицировать протокола блокчейна в части криптовалют, предложения эти существуют уже давно, однако успешной практической реализации пока не получили.

Поэтому шуршим ноликами и греем атмосферу.

P.S.:
Если кто-то хочет почувствовать майнинговую удачу и найти правильный результат хеш-функции, предлагаю вам поиграться с фразой "Hello, world!»
Введите "Hello, world!0» в сервис по расчету хеш-функций => 1312af178c253f84028d480a6adc1e25e81caa44c749ec81976192e2ec934c64

теперь последовательно меняйте "нолик" на следующие цифры до тех пор, пока в начале хеша не выпадет 4 нуля.

Открываю тайну - правильный результат:

Надеюсь, что в процессе упрощения не выкинул "ребенка вместе с водой". Если у вас есть вопросы или дополнения, пишите в комментарии, постараюсь ответить.

Поделиться:
  • 34
  •  
  •  
  •  
  •  

УжасноПлохоНормальноХорошоОтлично (7 оценок, среднее: 5,00 из 5)

Смотри также разделы: Полезное, Технологии Тэги: #.
Подписаться на новости сайта: Электропочта -- Telegram -- Facebook -- YouTube

8
Отправить ответ

avatar
2 Comment threads
6 Thread replies
0 Подписчики
 
Most reacted comment
Hottest comment thread
4 Комментаторы:
АсланДастанВладимир СоболевДаниил Recent comment authors
Даниил
Гость
Даниил

Целая диссертация !!!!

Дастан
Гость
Дастан

Вова перевел Саше 10 монет
Джон перевел Кларку 5 монет
Серик перевел Нурлану 12 монет

Может быть и красиво, но все это больше напоминает байку про шапку и фальшивые рубли.