Конференция по Data Science! 02 ноября 2023 Участвовать →

Что еще за блокчейн? Нормальным русским языком о блокчейне

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

Blockchain: зачем он вообще такой сложный?

“На каждую сложную проблему всегда есть простое, ясное и неправильное решение.” — Генри Луис Менкен

В отличие от всех остальных постов в сети, я не буду с самого начала давать определение Блокчейна, а рассмотрю проблемы, которые он решает.

Представьте: Джо — ваш лучший друг. Он уехал в отпуск, и на пятый день путешествий он звонит вам и говорит: “Чувак, мне деньги нужны. Я на мели.”

Вы отвечаете: “Сейчас пришлю”, и вешаете трубку.

Затем вы звоните своему банковскому менеджеру и говорите:” Пожалуйста, переведите 1000$ с моего счета на счет Джо.”

И менеджер отвечает: “Сейчас, секундочку.”

Он открывает реестр и проверяет, есть ли на вашем счету 1000$ для Джо. Так как вы богаты, у вас там намного больше. Поэтому он вносит в реестр следующую запись:

Реестр транзакций


Примечание: В этом примере мы не рассматриваем компьютеры чтобы не усложнять картину.

Вы звоните Джо и говорите ему: “Я перевел деньги. Когда в следующий раз пойдешь в банка, сможешь снять эту тысячу”.

Что же произошло? Вы с Джо доверили банку обращение со своими деньгами. Не произошло никакого физического перемещения денег или счетов. Было достаточно одной записи в реестре. Точнее, записи в реестре, который неподконтролен и не принадлежит ни вам, ни Джо.

В этом и заключается проблема современной системы.

Доверие между двумя сторонами достигается при помощи третьей стороны.

Годами наши доверительные взаимоотношения зависили от этого посредника. Вы спросите: “Ну и в чем проблема, что мы от него зависим?”

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

  • А что, если реестр с транзакциями сгорит в огне?
  • А что, если ваш менеджер случайно напишет 1500$, а не 1000$?
  • А что, если он это сделает специально?
Годами мы складывали все свои деньги в одну кучку, а потом отдавали ее кому-то.

Возможна ли система, в которой мы сможем делать переводы без помощи банка?

Для ответа на этот вопрос нам надо углубиться и задать себе более сложный вопрос (ведь только сложные вопросы ведут к ответам).

Задумайтесь на секунду что вообще такое — денежный перевод? Просто запись в реестре. Так что сложным вопросом будет:

Можем ли мы сами вести реестр без посторонней помощи?

Вот так лучше, этот вопрос уже интересно обсуждать. И ответ вы наверняка уже знаете. Блокчейн отвечает на этот вопрос.

Это — метод ведения реестра самостоятельно без посторонней помощи.

Вы еще тут? Отлично. Потому что сейчас, когда у вас начали возникать вопросы, мы выясним, как работает этот распределенный реестр.

Ну так скажи, как она работает?

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

“Имеет смысл достать несколько биткоинов, если он “зайдет”. Если достаточно людей будет думать подобным образом, он станет работать сам собой.” — Сатоши Накамото, 2009.

“Достаточно” — это сколько? Как минимум, три. Скажем, у нас есть десять человек, которые хотят отказаться от услуг банков и других третьих лиц. По взаимному согласию, они всегда знают подробности реестров всех остальных реестров, но при этом не знают их личностей.


1. Пустая папка

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

2. Транзакция

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

Сейчас №2 хочет переслать 10$ для №9.

Чтобы осуществить транзакцию, №2 кричит всем: “Я хочу перевести десять долларов девятому номеру. Так что записываем перевод на свои бумажки.”


Перевод $10 от №2 для №9

Все проверяют, есть ли у №2 достаточно денег для перевода 10$ для №9. И если у двойки хватает денег, все записывают транзакцию в своих листочках.


Первая запись на листочке.

И после этого транзакция считается завершенной.

3. Транзакции продолжаются

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

Так продолжается, пока у всех не заканчивается место на листочке. Если на листочке есть место для десяти транзакций, место заканчивается на десятой транзакции.


Когда листочек заполнен.

Пора положить листочек в папку, вытащить новый и повторить процесс со второй шага.

4. Убираем листочек

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

[Минутка терминов] Вообще-то этот процесс называется “майнинг”, но для простоты мы будем называть его “запечатыванием”.
Раньше, неприкосновенность реестра гарантировалась посредниками и прочими представителями третьей стороны. В такой распределенной и децентрализованной системе как у нас, именно печать гарантирует неприкосновенность.

Интересненько! И как мы тогда используем печать?

До того как мы узнаем, как запечатывать страницу, нам нужно понять, как печать работает. А для этого необходимо узнать о штуке, которую я называю….

Чудо-машина

Представьте себе некую машину в изолированной комнате с толстыми стенами. Если снаружи отправить в машину коробку с одним содержимым, она взамен выдаст другую коробку с иным содержимым.

[Минутка терминов] Машина называется “Хэш функцией”, но нам лень возитсья с техническими терминам. Так что сегодня мы называем ее чудо-машиной.


Чудо-машина (или Хэш-функция)

Предположим, что вы в нее слева загружаете цифру 4. Справа она вам выдаст загадочное слово ‘dcbea’.

Как она переделала цифру 4 в это слово? Никто не знает. Кроме того, это необратимый процесс.


hash(4) == dcbea

Исходя из слова ‘dcbea’ невозможно понять, что в машину загрузили слева. Но каждый раз, когда вы загружаете в нее цифру 4, она выдает слово ‘dcbea’.

А давайте попробуем загрузить в нее другое число. Может, 26?


hash(26) == 94c8e

В этот раз у нас получилось 94c8e. Интересненько! Получается, слова могут содержать и цифры.

И тут я вам задаю вопрос:

“Что мне такое слева загрузить в машину, так чтобы она справа выдала слово, которое начинается с трех нулей? Например 000ab или 00098 или 000fa что-нибудь такое. “


Предсказание ввода

Подумайте немного над следующим вопросом.

Я вам уже сказал, что у машины есть особенность: мы не можем рассчитать, что именно должны загрузить в машину, чтобы получить желаемый ответ. Как мы с такой машиной можем ответить на заданный вопрос?

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


Пробуем все, чтобы рассчитать ввод

Мы оптимисты, поэтому надеемся, что после нескольких тысяч машина выдаст желаемое слово.


Было очень сложно высчитать вводные данные по выходным. Но в то же самоеВ то де самое время безумно просто предсказать, что выдаст машина, зная входные данные: машина выдает одно и то же слово при вводе того или иного числа.

Если я вам дам число 72533 и спрошу: “Если загрузить это число в машину, даст ли оно слово, начинающееся с трех нулей?”, вам будет сложно найти ответ?

Вам всего лишь нужно будет ввести это слово в машину и посмотреть на результат. Всего-то делов!

Самое важное качество этой машины заключается в том, что:

Очень сложно вычислить вводные данные по выходным, но очень просто подтвердить, что вводные данные дают тот или иной результат.

Надо держать это правило в уме, пока читаете пост.

Как же машина запечатывает страницу?

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

Представьте, что я даю вам две коробки. Первая коробка содержит число 20893. Затем я спрашиваю вас: Можете высчитать число, сумма которого с числом из первой коробки превращалась бы в машине в слово с тремя нулями в начале?”


Эта ситуация похожа на предыдущую. Мы уже знаем, что мы можем вычислить это число, только перепробовав все числа на свете.

После нескольких тысяч попыток мы натыкаемся на число, пусть это будет 21191, которое после сложения с 20893 (21191 + 20893 = 42084) и подачи в машину дает искомое слово.


В этом случае, число 21191 становится печатью для числа 20893. Предположим, что на нашем листочке написано число 20893. С целью запечатать этот листок (чтобы никто не мог менять содержимое листка), мы на него вешаем бирку с номером 21191. До тех пор, пока бирка находится на листочке, страница остается запечатанной.


Число-печать

[Минутка терминов] Число-печать называется “Доказательство выполнения работы” (англ. Proof Of Work), т.е. число доказывает, что были были затрачены усилия, чтобы его рассчитать. Сойдет, если мы его будем здесь называть его “числом-печатью”.

Если нужно проверить, не было изменено содержание листочка, будет достаточно всего лишь сложить содержание странички с “числом-печатью”. Если машина выдаст слово с тремя нулями, значит содержание не трогали. А если полученное слово не удовлетворяет нашим требованиям, мы можем выкинуть листочек, так как его содержание испортили и он бесполезен.

Потихоньку мы применим этот механизм чтобы запечатать все листочки и убрать их в нужные папки.

Наконец, мы запечатали листочек.

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


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

Как только число рассчитано и на вычисления потрачены время и энергия, страница запечатывается этим числом. Если кто-нибудь попытается изменить содержание листочка, при помощи “числа-печати” можно проверить целостность страницы.

Теперь, когда мы узнали о “числе-печати”, мы путешествуем во времени в тот момент, когда у мы записали десятую транзакцию и у нас закончилось место на листочке.

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


Как только все слышат объявление “числа-печати”, все проверяют, дает ли оно необходимый результат, или нет. Если да, все помечают свои листочки этим числом и убирают в папки.

А вдруг у кого-нибудь, скажем, у номера 7, “число-печать” не дает нужного результат. Такое бывает. Могут быть следующие причины:

  • Он мог не так услышать о транзакции в сети.
  • Он мог не так записать транзакцию в сети.
  • Он мог попытаться смухлевать в свою или в пользу кого-нибудь еще в сети.

Не важно почему, у №7 есть только один выход — выкинуть свой листочек, скопировать листочек у кого-нибудь еще, и убрать в свою папку. Пока он не уберет его в папку, он не сможет продолжать записывать транзакции и перестанет быть частью сети.

“Число-печать” становится легитимным, если его таким признает большинство.

Зачем же тогда тратить ресурсы на вычисления, если понятно, что кто-нибудь еще его вычислит и объявит? Почему не посидеть спокойной и не подождать объявления?

Хороший вопрос. И тут появляется поощрение. Каждый, кто состоит в блокчейне, могут получить награду. Тот, кто первый вычисляет “число-печать”, одаривает деньгами за его труды (т.е. Потраченные ресурсы ЦПУ и электричество).

Просто представьте: пятый номер вычисляет “число-печать” и получает немного денег, например, один доллар, который появляется из воздуха. Другими словами, счет пятого номера увеличивается на один доллар, но счета других участников при этом не уменьшаются.

Вот так и появился Bitcoin. Это первая валюта, которая была передана по блокчейну (т.е. распределенным реестрам). И многие люди были одарены биткоинами, просто чтобы поддержать активность в блокчейне.

Когда достаточно большое количество людей овладевает биткоинами, ценность биткоина увеличивает и на него появляется спрос, что еще больше увеличивает на него спрос. В результате, еще больше людей хотят биткоинов, отчего его ценность увеличивается, и так далее.

Вознаграждение заставляет всех продолжать работать в сети.

И как только все убирают свои листочки в папку, они достают новый листочек, процесс начинается сначала, и так далее до бесконечности.

[Минутка терминов] Лучше представлять отдельный листочек как блок транзакций, а папку как цепь (chain) страниц, и все вместе становится блокчейном.

Вот так-то, друзья моя, блокчейн и работает.

###

Правда, я вам не сказал одну маленькую вещь. Еще не сказал.

Предположим, у нас в папке уже есть пять страниц, они все запечатаны числом. Что будет, если я возьму вторую страницу и изменю запись там в свою пользу? “Число-печать” позволит всем выявить нарушения в этой транзакции, так? А что, если я подумаю заранее и вычислю новое “число-печать” для всех измененных транзакций и помечу им измененные страницы?

Для того, чтобы никто не мог вернуться и изменить листочек (блок) вместе с “числом-печатью”, есть небольшой трюк с вычислением “числа-печати”.

Защита “чисел-печатей” от изменений

Помните, как я давал вам две пустые коробки: одну для числа 20893 и вторую для ваших вычислений? В реальности, в блокчейне для вычисления “числа-печати” нужно не две коробки, а три — два заполненные и одна пустая.

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

Мы знаем, что у нас есть коробка со списком транзакций и коробка с “числом-печатью”. Третья коробка содержит результаты работы чудо-машины для предыдущего листочка.


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

Если кто-то из тех десятерых, кого мы представили в начале, попытается смухлевать и изменить содержание блокчейна (папки с листочками, в которых хранятся списки транзакций), ему придется сменить несколько страниц и вычислить для них все новые “числа-печати”. Мы знаем, насколько сложно вычислить одно “число-печать”. Ровно поэтому нечестный парень в нашей сети не сможет обдурить девять четных ребят.

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

Чем длиннее цепь, тем она честнее.


Чем длиннее цепь, тем она честнее.

Вас ничего не напрягло, когда я сказал, что они нечестный парень не может обдурить девять честных ребят?

А что если шесть ребят станут вести себя нечестно?

Тогда протокол рухнет плашмя на землю. Произойдет т.н. “Атака 51%”. Если большинство участников решит начать вести себя бесчестно и обмануть остальных, протокол не справится со своей задачей.

И это единственная и, к тому же весьма маловероятная причина, по которой блокчейн может упасть. Как вы видите, это вряд ли возможно, но мы должны знать уязвимости этой системы. Она построена на предположении, что большинство пользователей честны.

Вот и все, друзья мои, о блокчейне. Если кто-нибудь рядом с вами впадет уныние и замешательство и вопрошает, “Что еще за блокчейн?”, вы знаете куда их направить.

Оригинал статьи: wtf-is-the-blockchain

Поделиться записью
Вверх