January 25, 2021

Блокчейн изнутри: как устроен биткоин.

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

Тем не менее что это, как это работает, и зачем оно всё нужно? Чем это лучше существующих платежных систем и причем тут видеокарты? Об этом и не только будет идти речь в данной статье.

Основная идея

Представим себе двух партнеров: Васю и Колю. Коля очень любит вести учет всех своих сделок и для этих целей заводит себе дневник. Дневник представляет собой набор последовательных записей:

  1. Взял 50 денег у Саши
  2. Занял 8 денег Пете
  3. Занял 100 денег Васе
  4. Отдал 130 денег Маше
  5. Занял 36 денег Роме

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

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

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

Такая последовательность называется хэшем, а md5sum - хэш-функцией.

Чтобы уж наверняка, Коля решает: "Я подкину работу злоумышленникам: буду хэшировать и текст новой записи, и хэш предыдущей." То есть каждый новый хэш теперь связан с предшествующей записью! И куда без начального хэша (любой последовательности символов, например da7c8) для первой строки. Теперь таблица займов выглядит так:

  1. Взял 50 денег у Саши 69ab8
  2. Занял 8 денег Пете 27825
  3. Занял 100 денег Васе e709a
  4. Отдал 130 денег Маше fdb876
  5. Занял 36 денег Роме bd3d7

В первом пункте "69ab8" - хеш для начального хеша "da7c8" и записи "Взял 50 денег у Саши".

Во втором пункте "27825" - хеш для свежесформированного хеша "69ab8" и записи "Занял 8 денег Пете".

В третьем "e709a" - хеш для предыдущего хеша "27825" и текста данной строки "Занял 100 денег Васе".

И так далее аналогично.

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

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

  1. Взял 50 денег у Саши (210) 69a00
  2. Занял 8 денег Пете (172) ff800
  3. Занял 100 денег Васе (654) e7f00
  4. Отдал 130 денег Маше (323) a6c00
  5. Занял 36 денег Роме (901) bd300

В первом пункте "69a00" - хеш для начального хеша "da7c8" и записи "Взял 50 денег у Саши".

Во втором пункте "ff800" - хеш для свежесформированного хеша "69a00" и записи "Занял 8 денег Пете".

В третьем "e7f00" - хеш для предыдущего хеша "ff800" и текста данной строки "Занял 100 денег Васе".

И так далее.

Теперь нет необходимости прятать дневник, вся история публична, но изменить любую запись в ней слишком трудоемко для хакеров. Коля берет себе в напарники пять друзей, с которыми делится своим дневником. Для каждой новой записи они вместе начинают подбирать подходящий нонс, так быстрее. Тот, кто находит заветное число первым, вносит запись в дневник и получает за это небольшое вознаграждение. Чтобы угадавший получил награду, запись должна заканчиваться фразой "перевести X денег пользователю Y", где X - награда пользователю Y за подобранный нонс.

Окончательный вид дневника Коли и есть Биткоин. Это платежная система, использующая одноименную одноимённую единицу для учёта операций. Денежная операция, результат которой записывается в дневник есть транзакция. Последовательность записей в нем (каждая из которых называется блоком) в нем есть блокчейн. Процесс соревнования друзей Коли за подбор подходящего нонса есть майнинг, а сами участники - майнеры. Плата за запись блока - коммисия за транзакцию.

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