260

Блокчейна мне, и побольше!

Когда я учился в девятом классе, у всех на слуху была Big Data. Айтишники носились с этим словом, как Герман Оскарович с Agile сегодня. Все хотели работать с Big Data, Big Data была везде: в ИТ компаниях, в консалтинговых фирмах, даже бабушки вязали свитера с надписью «Big Data».

Шли годы, одна хайповая тема сменяла другую, и так однажды все начали добывать какие-то биткоины. Клянусь, первый раз о биткоинах узнал из видео, где автор майнил их чайником! (Если что, видео было юмористического характера). С тех пор термин «блокчейн» вспоминают все реже. При этом, ведущие ИТ компании до сих пор занимаются исследованиями в этой области.

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

Деньги

Как мы платим с вами в магазине? Вы подходите к кассиру с банкой газировки. Продавец хочет узнать, достаточно ли у вас денег. Для этого вы достаёте рубль и показываете его продавцу. Важно, что платежеспособность рубля гарантирует центральный банк РФ, поэтому продавец доволен. Вы меняете рубль на газировку. Важно, что рубля этого у вас больше нет. Вы не сможете второй раз за тот же самый рубль купить еще одну банку.

Но всегда носить с собой деньги не так уж удобно. Все мы пользуемся кредитками. Как же всё устроено там? Примерно также, только появляется третья сторона — ваш банк. Банк выступает в роли гаранта, который подтверждает, что на вашем балансе есть какие-то деньги. Попробуем купить банку газировки. Вы подходите к продавцу с банкой и карточкой. Вставляете карточку в терминал. Магазин делает запрос в банк, банк подтверждает, что деньги на счету есть, и переводит их на счёт магазина. Вы получаете газировку. Рубля на счету у вас больше нет. Вы опять-таки не сможете тем же самым рублём приобрести другой товар.

В чем проблема? Дело в том, что деньги в такой системе вам не принадлежат, по сути. Банк в любой момент может сказать: «Нет, счета этого человека заблокированы». Да, это случается редко. Но всё-таки случается.

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

Толпа на площади

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


Допустим, у вас есть корабль, об этом знает вся толпа. Вы предлагаете свой корабль в обмен на дом. Человек, у которого в собственности есть дом, спрашивает толпу: «А у этого господина действительно есть корабль?». Толпа отвечает: «Да!». Тогда уже вы спрашиваете у толпы: «А у него есть дом?». Толпа снова отвечает, что всё в порядке. Вы обмениваетесь вещами и, что очень важно, толпа это запоминает. Теперь вы больше не сможете ещё раз корабль обменять на ещё один дом, толпа всё помнит!

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

Задача византийских генералов

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

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

Цифровая валюта

Итак, давайте попробуем реализовать воссоздать блокчейн. Для начала рассмотрим транзакции. Представьте таблицу в Excel, в котором есть куча записей о том, откуда и куда переводились деньги. В один файл помещается огромное количество записей, хранить всё это невозможно. Эта проблема решается с помощью хэш-функции. Хэш-функция — это алгоритм, который «шифрует» список транзакций в относительно небольшое число, которое и называется хэшем. У хэша есть некоторые важные свойства: его невозможно «расшифровать», то есть, вычислить из него исходные данные, на основе которых он был вычислен. Кроме того, даже при небольшом изменении во входных данных, хэш получается совсем другой. Но, в то же время, возможны случаи, когда два совершенно разных набора данных дают одинаковый хэш. Это называется «коллизией», и в идеале хэш-алгоритмы должны их избегать.

Проиллюстрирую на делении с остатком. Например, мы 11 делим на 10, получаем 1 в остатке. Если вам так удобнее, 1 = 11 (mod 10). При этом, 1 = 21 (mod 10). Единица является также и остатком от деления 21 на 10. Получается, зная остаток от деления единицы, невозможно восстановить исходные числа.

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

Именно для того, чтобы исключить подобные вещи, и добавляется слово чейн — цепочка. Дело в том, что каждый новый блок ссылается на старый. Это вводит ряд ограничений: например, мы не можем просто брать и переписывать старые блоки, так как это приведёт к несовпадению хэша у всех последующих.

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

Подтверждение блока

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

У хэша в блокчейне есть установленная максимальная длина — скажем, 128 битов. Чем больше последовательных нулей в начале (в левой части), то есть, чем короче его значимая — не состоящая целиком из нулей — часть, тем он «красивее». Для того, чтобы получить такой хэш, майнеры перебирают то самое свободное число, начиная с 0 — до тех пор, пока свободное число в комбинации со ссылкой на предыдущий блок и транзакциями не выдаст «красивый» хэш. Количество нулей в начале хэша, требуемое для признания его»красивым», называется его сложностью. В систему блокчейна встроен механизм саморегулирования, который увеличивает требуемую сложность хэша каждые n сгенерированных блоков.

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

В тот момент, когда майнер подобрал красивый хэш, блок считается подтвержденным и принимается всей сетью. В рассчитываемый блок обязательно дописывается транзакция, переводящая на кошелек майнера определённую сумму криптовалюты. Это единственные токены (единицы криптовалюты) в системе, которые берутся «из воздуха» — не появляются на одном кошельке в результата перевода с другого. И еще, эта сумма периодически уменьшается тем же механизмом саморегуляции — то есть, однажды, токены «закончатся». Это имитирует реальную жизнь, где деньги тоже не бесконечны — они должны быть подкреплены золотым запасом. Именно поэтому добыча криптовалюты называется «майнингом» — она как бы «добывается» в «шахте» из небесконечных «запасов».

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

Честность

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

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

Подводя итог

Надеюсь, теперь вы представляете, как выглядит блокчейн. Кстати, в этой статье я говорил об алгоритме подтверждения «Proof of Work». То есть, подтверждение работой. При этом, создаётся связь цифрового мира с физическим (с видеокартами и т. д). Существуют другие алгоритмы подтверждения — ставьте лайк, если хотите узнать о них больше!

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