Блокчейн простыми словами

Привет! Сейчас уже практически каждый слышал про Bitcoin, Blockchain и криптовалюты. Пора съесть вишенку с торта хайпа Попробуем разобраться что же это за зверь такой? Возможность делать деньги из воздуха? Именно из-за роста популярности криптовалют пропали из продажи все мощные видеокарты. А может быть блокчейн это перспективная технология, которой в будущем будут пользоваться все? Или нет Так что же это? С этим вопросом я обратился в интернет. Блокчейн. Википедия. Понятно? Ни-ху-я Что ж, будем разбираться.

Блокчейн

Для начала нужно выделить:
Блокчейн - это распределённая база данных, то есть информация хранится сразу в нескольких местах. Распределённая сеть Таким образом становитcя ясно, что это просто технология, кирпичик, который позволяет построить дом. Например, создать Bitcoin и прочие криптовалюты.

Транзакция

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

Например, у нас в базе есть запись о том, что Алиса - девочка, но она решила сменить пол и стать Бобом. Изменение пола и имени в базе и есть транзакция. Транзакция

Блок

Новая транзакция рассылается всем компьютерам, с которыми есть связь, а далее они также рассылают её по цепочке.

Транзакции объединяются в блоки. Обычно блоки фиксированного размера, поэтому количество транзакций в блоке ограничено. Если транзакция не попала в текущий блок, она включается в следующий.

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

h1=hash(data + h0)

Хеш-функция

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

  1. На вход она принимает любую информацию
  2. В результате она возвращает число, при этом оно точно будет меньше определённой верхней границы
  3. Функция достаточно быстро выдаёт результат
  4. Определить по результату, что было подано ей на вход невозможно (Можно, но только перебирая входную информацию, что займёт очень много времени)

Приведённый выше пример про инстаграмм относится к хэш функциям, потому что:

  1. На вход подана информация (фотография)
  2. Максимальное количество лайков ограничено, хоть никто и не набирал максимум
  3. Мы можем сразу же увидеть количество лайков
  4. При этом по количеству лайков мы не можем определить фотографию, не перебрав все

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

Проверка блоков

Вернёмся к блокам. Каждый блок содержит сжатую информацию о предыдущем в виде хэша. Матрёшка То есть, если нехороший человек поменяет старый блок и попробует подсунуть его нам, мы после расчётов увидим, что нас где-то наёбывают обманывают.
Например, пусть кто-то подменил второй блок, а самый последний блок - пятый. В пятом блоке хранится: hash(h4 + data5). То есть результат выполнения хэш-функции от суммы хэша из 4 блока и данных. Если мы изменим второй блок, то h2 - хэш второго блока тоже изменится, а за ним и h3 = (h2 + data3), далее по цепочке изменятся h4 и h5. В этот момент мы сравним полученный хэш с известным нам h5, увидим, что они отличаются и пойдём бить морду не будем принимать данные.

Конфликт блоков

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

Есть несколько способов решения этой проблемы, так называемых алгоритмов принятия блоков. Их ещё называют алгоритмами консенсуса.
В криптовалютах обычно используется алгоритм под названием Proof of Work(PoW). В чём суть? Помимо данных и хеша предыдущего блока, мы передаём в хэш-функцию дополнительные данные. Обычно это число, а в нашем примере с инстаграммом это могут быть хэштеги. Делаем мы конечно это не просто так, у нас есть цель: мы должны подобрать такое число, чтобы результат хэш функции был меньше определённого значения. Как мы помним, сделать это можно только перебором. Что нам это даёт? Нельзя так просто взять и создать новый блок

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

Вот теперь наша база данных идеальна. Сильное заявление, проверять я его конечно не буду

В следующих сериях поговорим уже о применении блокчейна в криптовалютах и немного об асинхронном шифровании. Пожелания и комментарии пишите куда угодно, даже в инстаграмм можно, если найдёте)