November 21, 2022

Что такое Блокчейн?

Блокчейн: зачем нам вообще нужно что-то настолько сложное?

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

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

Представьте себе, что Джо - ваш лучший друг. Он путешествует за границей, и на пятый день своего отпуска он звонит вам и говорит: "Чувак, мне нужно немного денег. Они у меня закончились"

Вы отвечаете: "Сейчас пришлю" - и кладете трубку.

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

Ваш менеджер по работе с клиентами отвечает: "Да, сэр".

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

Регистр транзакций
Примечание: Мы не говорим о компьютерах, только для того, чтобы упростить ситуацию.

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

Что только что произошло? И вы, и Джо доверили банку управлять вашими деньгами. Для перевода денег не было реального перемещения физических купюр. Все, что было необходимо, - это запись в реестре. Или, точнее, запись в реестре, которую ни вы, ни Джо не контролируете и не владеете ею.

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

Чтобы установить доверие между собой, мы зависим от отдельных третьих сторон.

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

Проблема в том, что они единичны. Если в общество нужно внести хаос, достаточно, чтобы один человек/организация стали коррумпированными, намеренно или ненамеренно.

• Что если регистр, в котором была зарегистрирована операция, сгорит во время пожара?

• Что, если по ошибке ваш менеджер по работе с клиентами написал $1500 вместо $1000?

• А что, если он сделал это специально?

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

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

Чтобы ответить на этот вопрос, нам придется углубиться в тему и задать себе вопрос получше (ведь только лучшие вопросы приводят к лучшим ответам).

Задумайтесь на секунду, что означает перевод денег? Просто запись в реестре. Тогда лучшим вопросом будет -

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

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

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

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

Да, но скажите мне, как это работает?

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

"Возможно, имеет смысл просто получить немного Биткойна на случай, если это приживется. Если достаточное количество людей думает так же, это станет самоисполняющимся пророчеством". - Сатоши Накамото в 2009 году

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

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

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

2. Когда происходит транзакция

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

Итак, если №2 хочет отправить $10 на №9.

Чтобы совершить транзакцию, #2 кричит и говорит всем: "Я хочу перевести $10 на #9". Итак, все, пожалуйста, запишите это на своих страницах".

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

Первая транзакция на странице

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

3. Сделки продолжают совершаться

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

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

Когда страница заполняется

Пришло время убрать страницу в папку, достать новую страницу и повторить процесс с шага 2 выше.

4. Убираем страницу

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

Это называется "майнинг" на странице для ее защиты, но для простоты мы будем продолжать называть это "запечатыванием".
Ранее третья сторона/посредник давали нам доверие, что все, что они записали в реестр, никогда не будет изменено. В распределенной и децентрализованной системе, подобной нашей, доверие будет обеспечивать эта печать.

Интересно! Как же тогда запечатать страницу?

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

Волшебная машина

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

Эта машина называется 'Хэш функция', но мы не в настроении быть слишком техничными. Итак, на сегодня это "Волшебные машины".
Волшебная машина (она же - функция хэширования)

Предположим, если послать в нее слева число 4, то справа она выплюнет следующее слово: 'dcbea'.

Как она преобразовала число 4 в это слово? Никто не знает. Более того, это необратимый процесс. Учитывая слово "dcbea", невозможно сказать, что было подано машине слева. Но каждый раз, когда вы будете подавать машине число 4, она всегда будет выплевывать одно и то же слово "dcbea".

хэш(4) == dcbea

Учитывая слово 'dcbea', невозможно определить, что было подано машине слева. Но каждый раз, когда вы будете подавать машине число 4, она всегда будет выплевывать одно и то же слово "dcbea".

Давайте попробуем поместить другое число. Как насчет 26?

хэш(26) == 94c8e

На этот раз мы получили '94c8e'. Интересно! Значит, слова тоже могут содержать числа.

А что, если я сейчас задам вам следующий вопрос:

"Подскажите, пожалуйста, что я должен поместить с левой стороны машины, чтобы с правой стороны получить слово, начинающееся с трех ведущих нулей? Например, 000ab или 00098, или 000fa, или любое другое".

Прогнозирование входных данных

Задумайтесь над вопросом на мгновение.

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

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

Попробуйте все, чтобы вычислить входные данные

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

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

Как вы думаете, насколько сложным будет ответ, если я дам вам число, скажем 72533, и задам вопрос: "Выдает ли это число при подаче в машину слово, начинающееся с трех ведущих нулей?".

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

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

Мы будем помнить об этом свойстве Волшебных машин (или Хэш-функций) до конца этого поста:

Учитывая выход, чрезвычайно трудно вычислить вход, но, учитывая вход и выход, довольно легко проверить, ведет ли вход к выходу.

Как использовать эти машины для запечатывания страницы?

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

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

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

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

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

Запечатанный номер
Запечатывающее число называется 'Proof Of Work', что означает, что это число является доказательством того, что были приложены усилия для его расчета. Для наших целей нам удобно называть его "числом запечатывания".

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

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

Наконец, запечатывание нашей страницы...

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

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

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

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

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

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

Но что, если для кого-то, скажем, для №7, объявленный номер запечатывания не приносит требуемого результата? Такие случаи не редкость. Возможными причинами этого могут быть:

• Он мог неправильно расслышать транзакции, которые были объявлены в сети

• Он мог неправильно написать транзакции, которые были объявлены в сети

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

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

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

Тогда зачем все тратят ресурсы на расчеты, если знают, что кто-то другой рассчитает и объявит им об этом? Почему бы не сидеть сложа руки и не ждать объявления?

Отличный вопрос. Именно здесь и появляются стимулы. Каждый, кто является частью блокчейна, имеет право на вознаграждение. Тот, кто первым вычислит номер запечатывания, получит бесплатные деньги за свои усилия (т.е. потраченную мощность процессора и электроэнергию).

Представьте себе, если #5 вычисляет номер запечатывания страницы, он получает вознаграждение в виде бесплатных денег, скажем, $1, которые чеканятся из воздуха. Другими словами, баланс счета №5 увеличивается на $1 без уменьшения баланса счета кого-либо еще.

Именно так появился биткойн. Это была первая валюта, операции с которой проводились на блокчейне (т.е. распределенных реестрах). А взамен, чтобы поддерживать усилия в сети, люди получали Биткойны.

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

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

А когда все убирают страницу в свои папки, они достают новую чистую страницу и повторяют весь процесс заново - и так до бесконечности.

Считайте, что одна страница - это блок транзакций, а папка - цепочка страниц (блоков), что превращает ее в блокчейн.

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

Только вот есть одна маленькая вещь, о которой я вам не сказал.

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

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

Защита модификаций номеров пломбирования

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

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

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

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

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

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

Самая длинная цепочка в сети - это честная цепочка.
Самая длинная цепочка в сети - это честная цепочка

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

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

В этом случае протокол падает на лопатки. Это явление известно как "Атака 51%". Если большинство людей в сети решат стать нечестными и обмануть остальных участников сети, протокол не сможет выполнить свою задачу.

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

И это, друзья мои, все, что касается блокчейн. Если вы когда-нибудь встретите кого-то, кто чувствует себя обделенным и задается вопросом: "Что такое блокчейн?", вы знаете, куда его направить.


📱 Telegram | 💻 Teletype

📱 YanZen | 📱 VC


Перевод подготовлен Owl Crypto

Оригинал статьи вы можете найти по ссылке