В 2017 году, когда после долгих лет затишья дух Биткойна стремительно вырвался из бутылки, цена на него внезапно резко подскочила с 1000 до почти 20000 долларов. Многие люди заново открыли себя как «профессиональные крипто-трейдеры».

Да, за короткий период времени можно было заработать большую кучу денег. Но давайте посмотрим правде в глаза — эта «вечеринка» закончилась.

Даже несмотря на то, что кровь у людей забурлила от избытка адреналина в основном из-за денег, на самом деле именно технология, прежде всего, подтолкнула развитие событий. И эта технология, блокчейн, всё ещё может содержать в себе огромный потенциал. Возможно, сейчас самое время для бизнес-разработчиков, предпринимателей и просто интересующихся лиц примкнуть к вдохновлённым последователям блокчейна и разделить их энтузиазм. Но для подобного вдохновения в первую очередь потребуется лучшее понимание того, как эта технология работает. К сожалению, большинство из существующих на сегодняшний день объяснений либо пресыщены сложным техническим жаргоном, либо в значительной степени поверхностны и не содержат исчерпывающей информации. Ни одно из них не предоставляет нам чёткого и ясного понимания технологии блокчейна. Итак, с чего же начать? Позвольте мне предложить вам начать прямо с этой статьи. Она займёт десять-пятнадцать минут вашего времени, но взамен раскроет вопрос, что же считается настолько революционным и фундаментальным в технологии блокчейна. Поверьте, это будет стоить потраченного времени. Приятного чтения!

Что за штука такая этот Блокчейн?

Прежде всего, блокчейн (англ. «blockchain», «block» – блок, «chain» – цепь) – это концепция из мира информационных технологий, представляющая собой способ хранения данных. Эти данные поступают в блокчейн в виде блоков, поэтому, представьте себе блоки цифровых данных. Блоки связываются друг с другом наподобие звеньев цепочки, тем самым делая данные в них защищёнными от изменений. Когда блок связан с другими блоками, данные, находящиеся в нём никогда больше не могут быть изменены. Этот блок будет в открытом доступе в том же самом виде, в котором он был изначально добавлен в блокчейн, если вдруг кто-то захочет его снова когда-нибудь просмотреть. Это весьма революционно, потому что позволяет вести учёт практически всего, о чём только можно подумать (вот вам несколько примеров: права собственности, удостоверения личности, баланс денежных средств, медицинские записи), без риска того, что некто сможет сфальсифицировать эти записи. Предположим, если прямо сейчас я куплю дом и добавлю фотографию прав собственности на него в блокчейн, я отныне и в любой момент в будущем смогу доказать, что в какой-то период времени я владел правами собственности на эту недвижимость. Никто не может изменить эту информацию после того, как она была добавлена в блокчейн (ладно, будем откровенными, на самом деле такой способ существует, но это довольно продвинутый материал, поэтому я предлагаю ознакомиться с ним позже, например, здесь и здесь). Итак, блокчейн – это один из способов хранить данные и защитить их, сделав их неизменяемыми. Звучит великолепно, не правда ли? Но главный вопрос, разумеется, заключается в следующем – как всё это работает?

Шаг 1 — Данные транзакции

Хорошо, давайте начнём с того, что для примера рассмотрим блокчейн Биткойна. Он является самым старым существующим блокчейном. Каждый блок в нём состоит из приблизительно 1 мегабайта (Мб) данных. На момент написания этой статьи Биткойн-блокчейн насчитывал около 525 тысяч блоков, или другими словами, что в нём содержалось примерно 525000 Мб данных. Блоки данных в блокчейне Биткойна состоят исключительно из транзакционных данных операций с биткойнами. Это огромная записанная история всех когда-либо произведённых транзакций с бикойнами, вплоть до самой первой сделки. В этой статье мы предположим, что в блокчейне хранятся данные транзакций, по аналогии с блокчейном Биткойна.

Шаг 2 — Присоединение блоков к цепочке (с хэшем)

Представьте себе кучу блоков с данными транзакций.

На этом рисунке мы видим три блока, содержащие некие данные различных транзакций. Пока вроде бы ничего особенного. Эти блоки можно сравнить с отдельными текстовыми документами, в которых просто описывается, какие происходили транзакции, и как это отразилось на балансах конкретных счетов. «Документ 1» будет описывать самые первые осуществлённые транзакции с суммарным объёмом данных до 1 Мб в хронологическом порядке, в то время как последующие транзакции объёмом от 1 Мб до 2 Мб, будут записаны в «Документ 2», и так далее. Эти документы как раз и являются теми самыми блоками данных. Потом блоки связываются друг с другом (другими словами – соединяются в цепочку). Для того, чтобы такое соединение произошло, каждый блок получает уникальную (цифровую) подпись, которая в точности соответствует строке данных в этом блоке. Если внутри блока происходят какие-либо изменения, даже если изменяется всего лишь один символ, этот блок получит новую цифровую подпись. Как это работает? Это достигается методом хэширования данных, которое мы подробно рассмотрим чуть позднее в шаге 3.

Предположим, что в блок 1 записываются две транзакции, транзакция 1 и транзакция 2. Представьте, что данные этих транзакций занимают 1 Мб дискового пространства (в действительности, разумеется, в 1 Мб можно записать гораздо больше транзакций). Этот блок теперь получает цифровую подпись для этой конкретной строки данных. Пусть такой подписью будет, например, «Х32». И вот как это будет выглядеть:

Запомните, что изменение даже одного символа в блоке 1 вызовет присвоение этому блоку абсолютно другой подписи! Данные из блока 1 затем присоединяются к блоку 2 через добавление цифровой подписи блока 1 к данным блока 2. Теперь подпись блока 2 частично состоит из подписи блока 1, так как она включена в строку данных в блоке 2. Вот как это выглядит:

Подписи связывают блоки друг с другом, образуя из них цепочку блоков. Давайте представим картину добавления нового блока – блока 3 – к существующей цепочке блоков. Это выглядит следующим образом:

Теперь представим, что данные в блоке 1 изменены. Допустим, что транзакция между Дэмиэном и Джорджем подделана, и теперь Дэмиэн якобы отправил Джорджу 500 биткойнов вместо 100. Строка данных в блоке 1 сейчас другая, что означает, что этот блок также получит новую подпись. Цифровая подпись «Х32» больше не соответствует изменившимся данным в блоке 1. Пусть для примера новой подписью станет «W10». И вот что мы имеем в результате:

Подпись «W10» больше не соответствует той подписи, что была ранее добавлена в блок 2. Блоки 1 и 2 теперь считаются не связанными друг с другом. Для других пользователей блокчейна это событие является сигналом, что какие-то данные в блоке 1 были изменены. А так как блокчейн должен быть неизменным, они отвергают это изменение путём возврата к предыдущему состоянию блокчейна, в котором все блоки все ещё были соединены друг с другом в цепочку (та запись, где Дэмиэн отправил Джорджу 100 биткойнов). Единственным вариантом, при котором изменение в блокчейне может остаться никем незамеченным, будет тот, при котором все блоки останутся связанными друг с другом. Значит, для того, чтобы изменение не было обнаружено, новая подпись блока 1 должна заменить собой старую в данных блока 2. Но, если данные в блоке 2 изменятся, это также повлечёт за собой изменения подписи блока 2. Предположим, что новой подписью блока 2 будет «PP4» вместо «9BZ». И что мы получим в итоге? А получим следующую ситуацию – блоки 2 и 3 больше не будут связаны друг с другом!

Любой желающий может ознакомиться с содержимым блоков в блокчейне. Таким образом, если предполагается, что изменение в блокчейне должно пройти никем незамеченным, все блоки должны оставаться правильно соединёнными друг с другом в цепочку (в противном случае люди смогут понять, что что-то не так, и некоторые блоки не связаны между собой должным образом). Это означает, что изменения одного блока потребует создания новой подписи для каждого следующего за ним блока, и так до самого конца цепочки. На практике такое почти невыполнимо. Для того, чтобы понять почему это практически невозможно, вам нужно узнать, как создаются подписи.

Шаг 3 — Как создаётся цифровая подпись (хэш)

Итак, давайте снова представим себе некий блок – блок 1. В этом блоке записана только одна единственная транзакция. Томас отправляет 100 биткойнов Дэвиду. Эта конкретная строка данных теперь требует цифровой подписи. В блокчейне такая подпись создаётся с помощью криптографической хэш-функции. В её основе лежит очень сложная формула, которая берёт любую строку ввода и преобразует её в уникальную 64-разрядную строку вывода. Например, вы можете вставить слово «Jinglebells» в этот онлайновый генератор хэшей (есть и другие варианты алгоритмов хэширования, но мы воспользуемся этим для данного конкретного примера), и вы увидите, что в результате преобразования на выходе для этой конкретной строки данных хэш-сумма будет представлять из себя следующую строку:

761A7DD9CAFE34C7CDE6C1270E17F773025A61E511A56F700D415F0D3E199868

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

B9B324E2F987CDE8819C051327966DD4071ED72D998E0019981040958FEC291B

Если снова убрать точку, то мы получим точно ту же строку, что и ранее:

761A7DD9CAFE34C7CDE6C1270E17F773025A61E511A56F700D415F0D3E199868

Алгоритм хэширования криптографической хэш-функции будет всегда выдавать один и тот же результат, до тех пор, пока входные данные не изменятся. Следовательно, при изменении входных данных результат обработки данных будет иным. Криптографическая хэш-функция используется Биткойн-блокчейном для создания цифровых подписей блоков. В этом случае в качестве входных данных используется содержимое блока, а выходными данными как раз и является соответствующая ему цифровая подпись. Давайте ещё раз взглянем на блок 1. Томас отправляет 100 биткойнов Дэвиду.

Предположим, что строка данных этого блока выглядит следующим образом:

Block 1 Thomas -100 David +100

Если ввести эту строку данных в алгоритм хэширования, то на выходе хэш (подпись) будет выглядеть так:

BAB5924FC47BBA57F4615230DDBC5675A81AB29E2E0FF85D0C0AD1C1ACA05BFF

Эта подпись затем добавляется к данным блока 2. Предположим, что теперь Дэвид переводит 100 биткойнов Джими. Блокчейн теперь выглядит следующим образом:

Строка данных блока 2 выглядит как:

Block 2 David -100 Jimi +100 BAB5924FC47BBA57F4615230DDBC5675A81AB29E2E0FF85D0C0AD1C1ACA05BFF

Если введём эти данные в генератор хэшей, то на выходе получим следующую подпись:

25D8BE2650D7BC095D3712B14136608E096F060E32CEC7322D22E82EA526A3E5

Таким образом мы получили подпись для блока 2. Криптографическая хэш-функция используется для создания цифровых подписей для каждого уникального блока. Существует большое разнообразие хэш-функций, но в блокчейне Биткойна в качестве хэш-функции используется алгоритм хэширования SHA-256. И каким же образом эти цифровые подписи могут помешать кому-либо просто добавить новую подпись в каждый последующий блок, после изменения одного из них (такое изменение не будет никем обнаружено, но при условии, что все блоки останутся связанными надлежащим образом, и люди его просто не заметят)? Ответ заключается в том, что блокчейном принимаются исключительно хэши (подписи), удовлетворяющие определённым требованиям самого блокчейна. Это контролируется процессом майнинга, объяснение которого приводится в шаге 4.

Шаг 4 — Когда подпись удовлетворяет требованиям, и кто подписывает блоки?

Дело в том, что подпись не всегда соответствует требованиям. Блок будет присоединён в блокчейн только при условии, что его подпись начинается, например, с некоторого количества идущих подряд нулей. Для пояснения данного примера, предположим, что только блоки, чьи подписи начинаются по меньшей мере с десяти нулей являются пригодными для добавления в блокчейн. Однако, как объяснялось в шаге 3, каждая строка данных имеет только один связанный с ней уникальный хэш. А что если подпись (хэш) блока не начинается с десяти нулей? Что ж, для того, чтобы подобрать блоку подпись, которая бы удовлетворяла требованиям блокчейна, строка данных блока должна быть неоднократно изменена, пока хэш-функция не выдаст подпись, начинающуюся с десяти нулей. Поскольку данные транзакции и её метаданные (номер блока, временная метка, и т.д.) должны оставаться неизменными, к каждому блоку добавляется небольшой специальный фрагмент данных, с единственной целью нахождения подходящей подписи путём многократного его изменения. Этот фрагмент данных блока называется «нонс» (nonce) или однократно используемый код. Nonce представляет из себя совершенно случайную строку из цифр (примечание: на рисунках показаны также и другие символы, но одноразовый код может состоять только из цифр). Подводя итог только что приведённому объяснению – блок теперь содержит следующую информацию: 1) данные транзакции, 2) подпись предыдущего блока и 3) nonce (одноразовый код). Процесс многократного изменения одноразового кода и хэширования данных блока для подбора отвечающей соответствующим критериям подписи называют майнингом, а тех, кто занимается майнингом – майнерами. Майнеры расходуют электроэнергию в виде вычислительной мощности, постоянно меняя состав блока (nonce) и хэшируя его, пока не найдут подходящие выходные данные (подпись). Чем больше вычислительных мощностей находится в их распоряжении, тем быстрее они смогут хэшировать различные композиции блоков, и тем больше вероятность того, что они быстрее других найдут подходящую подпись. Это своеобразный метод проб и ошибок или «метод научного тыка». Вышеописанный процесс можно проиллюстрировать следующим образом:

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

По завершению всех необходимых приготовлений, пользователь просто использует свои вычислительные мощности, чтобы попытаться решить nonce для блока. Вот пример блока транзакций, который недавно был добавлен в блокчейн Биткойна – блок 521477:

Как вы можете заметить, хэш (подпись) этого блока и хэш предыдущего блока оба начинаются с нескольких нулей. Подобный хэш найти нелегко, для этого потребуются большие затраты вычислительной мощности и времени или тонна удачи. Да, порой случается так, что майнеру невероятно везёт, и он находит подходящую подпись, используя очень малые вычислительные мощности и за считанные минуты. Чрезвычайно редкий пример такого события произошёл совсем недавно с блоком 523034. Какой-то мелкий майнер со слабыми мощностями за очень короткий срок нашёл требуемую подпись, в то время как все остальные майнеры в совокупности имели вычислительных мощностей в 7 триллионов раз больше. Для сравнения, шансы на выигрыш джекпота в лотерее Powerball составляют один из 292 миллионов. А это значит, что выиграть джекпот в лотерее Powerball в 24000 раз проще, чем было для этого майнера победить в соревновании по нахождению хэша против всех остальных участников сети. А вы говорите про количество каких-то нулей. В любом случае, из этой главы важно почерпнуть, что найти подходящую подпись для блока очень сложно.

Шаг 5 — Как это способствует незыблемости блокчейна?

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

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

Миллионы пользователей занимаются майнингом в блокчейне Биткойна, вследствие чего можно предположить, что ни один злоумышленник или некая организация в сети никогда не будет обладать большей, чем совокупная мощность всех остальных участников сети, вычислительной мощностью. Другими словами, сеть никогда не примет никаких изменений в блокчейн, делая блокчейн незыблемым. После того, как данные были добавлены в блокчейн, их уже никогда нельзя изменить. Однако имеется одно исключение. А что если у злоумышленника больше вычислительных мощностей, чем у всей остальной сети вместе взятой? Да, теоретически такое возможно. Это называется «атакой 51%» (подробнее об этой уязвимости можно прочитать в этой статье и ещё здесь), и в прошлом она происходила на различных блокчейнах. В действительности же, атака 51% на блокчейн Биткойна потребует намного больших затрат, по сравнению с ожидаемой прибылью от осуществления такой атаки. Подобная операция потребует не просто огромного количества аппаратного обеспечения, охлаждающего оборудования и места для размещения всей этой вычислительной мощности, но также сопряжена с риском судебного преследования, и, что ещё более важно, может кардинальным образом навредить экосистеме самого блокчейна, что приведёт к значительному уменьшению потенциальной прибыли из-за резкого падения цены Биткойна. Попытка проведения атаки 51% сравнима на практике со сражением против всех остальных пользователей данного блокчейна в одиночку. Это также является причиной того, что чем больше пользователей участвуют в процессе майнинга, тем более надёжно защищённым становится блокчейн.

Поздравляю с тем, что вы всё ещё здесь! Надеюсь, теперь вы понимаете, почему (крупный) блокчейн считается незыблемым. Однако теперь назревает один важный вопрос – как предотвращается добавление майнерами повреждённых блоков в блокчейн (например, сфальсифицированных транзакционных данных)? Это блокируется на техническом уровне, подробнее о транзакциях в блокчейне можно прочитать в этой статье.

Шаг 6 — Как регулируется блокчейн? Кто устанавливает правила?

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

В блокчейне Биткойна вся история транзакций и балансы кошельков являются общедоступной информацией (blockchain.info). Любой желающий может просмотреть любой кошелёк или транзакцию, которая когда-либо происходила вплоть до самой первой совершённой транзакции (3 января 2009 года). Хотя балансы кошельков могут быть проверены кем угодно в открытом доступе, владельцы эти кошельков остаются в основном анонимными. Вот пример кошелька, всё ещё содержащего 69000 биткойнов, что составляло на момент написания статьи порядка 500 миллионов долларов США. Последний раз он использовался в апреле 2015 года, но с тех пор никакой активности с ним не наблюдалось.

Финальный шаг, шаг 7 — А что по поводу криптовалют?

Криптовалюты – это по сути изменённая форма Биткойна. Большинство криптовалют строятся на основании своих собственных протоколов блокчейна, правила в которых могут отличаться от блокчейна Биткойна. Биткойн задумывался как валюта, то есть он явным образом должен функционировать в роли денег. Monero – это криптовалюта с той же функцией, но в её протоколе блокчейна реализованы некоторые дополнительные правила, которые делают её более конфедициальной валютой (транзакции в блокчейне Monero отслеживать намного сложнее). Криптовалютам, тем не менее, может быть присвоена любая форма ценности, в зависимости от их эмитента. Их также можно назвать «токенами». Такие токены могут предоставлять своим владельцам право на «что-то», начиная от игровой лицензии или доступа к социальным сетям и заканчивая доступом к ресурсам типа электроэнергии или воды, в общем, всего и не перечислить. Токену «криптовалюты» можно назначить ценность совершенно любого рода. Все транзакции с криптовалютами регистрируются на различных блокчейнах и они могут быть обменены онлайн через криптовалютные биржи и площадки p2p-обмена, такие как, например, HodlHodl. Это новые деньги интернета. Хорошим примером отрасли экономики, на которую они оказать существенное влияние, являются фондовые рынки. Существует большая вероятность того, что в будущем акции компаний и другие права собственности будут учитываться в виде токенов в блокчейне. Но применение блокчейнов отнюдь не ограничивается только регистрацией материальных ценностей в форме токенов. Блокчейны также обладают возможностями вести безопасный учёт данных, таких как медицинские записи, удостоверения личности, исторические сведения, налоговые записи и многого, многого другого. Вот поэтому технология настолько объёмна, а я ещё даже не упомянул децентрализацию (ещё один из наиболее значимых аспектов блокчейна).

Источник