Внутри биткойна как раз находится технология блокчейн.
Иногда в Сети возникают споры: что же первично – биткойн или блокчейн? И кажется, что первичной должна быть технология сохранения информации, но, на самом деле, первичной была концепция криптовалюты и в ней была описана технология блокчейн.
Конечно, можно найти более ранние научные исследования и практические разработки, посвященные шифрованию и хранению информации. Точно так же, как есть более ранние описания концепции цифровых валют. Однако в едином, законченном и наиболее близком к актуальному состоянию криптовалюты и блокчейн были описаны в White Paper биткойна.
ВАЖНЫЙ ВЫВОД
Биткойн – это не то же самое, что блокчейн.
Блокчейн – это вообще необязательно криптовалюта.
Существуют блокчейны, которые используются не для финансовых расчетов, а, например, для хранения файлов или для построения распределенных вычислительных систем. Прежде чем мы перейдем к описанию работы блокчейна, давайте поговорим о том, для чего же он в принципе нужен. От чего весь технологический мир сходит с ума? Что же такое уникальное, неповторимое и суперпрогрессивное дает нам эта технология?
Физический мир и цифровая реальность
Когда появились компьютеры, физический мир вокруг нас начал дополняться цифровым. В физическом мире мы писали письмо на бумаге, отправляли по почте и ждали, пока оно переместится из одной точки пространства в другую. В цифровом мире мы набираем сообщение на смартфоне и мгновенно отсылаем, скорость доставки практически не зависит от расстояния между отправителем и получателем.
Цифровая реальность очень сильно упростила и ускорила нашу жизнь: мы переписываемся, общаемся, договариваемся, делаем покупки через Интернет. Но у цифрового мира всегда был очень серьезный недостаток: в нем очень легко изменить, удалить и подделать данные. Электронный документ очень просто отредактировать или удалить. Чтобы защитить цифровые данные, придумывают сложные и дорогостоящие системы безопасности.
Это сильно ограничивает автоматизацию и развитие цифрового мира вокруг нас.
Все серьезные действия и важные договоренности по-прежнему обязательно фиксируются на бумаге. Подделать бумажный документ во много раз сложнее, чем цифровой, а если и получится, то следы подделки будут заметны.
Блокчейн заменяет бумагу в цифровом мире
С появлением биткойна, а точнее с выделением блокчейна в отдельную технологию, цифровой мир получил новое направление развития. Сохраненные в блокчейне цифровые данные невозможно подделать или удалить. Внутри блокчейна информация защищена от подделки даже надежнее, чем если бы она была распечатана на бумаге. Бумажный экземпляр можно порвать или уничтожить каким-то более изощренным способом, а в блокчейне создается огромное количество копий каждой записи и уничтожение одной из них не приведет к серьезным последствиям. Блокчейн заменяет бумагу в цифровом мире и надежно защищает цифровые данные, как если бы они были сохранены на бумаге или любым другим способом в физическом мире.
В будущем появятся программы, которые объединят в огромную сеть все компьютеры мира. Любой желающий сможет воспользоваться возможностями такого сверхкомпьютера для своих вычислений.
Чтобы защитить результаты вычислений от подделок, их сохраняют в блокчейн. Блокчейн может взаимодействовать с цифровыми валютами, поэтому, получив результаты вычислений, можно будет сделать все необходимые денежные переводы и начисления.
Выплаты от страховой через несколько минут после ДТП
Например, в такой сети могла бы обрабатываться информация о страховых случаях по автомобильным авариям. Участники аварии загружают фотографии повреждений, записи видеорегистраторов, указывают дату и место аварии. Сверхкомпьютер обрабатывает эти данные, дополнительно собирает информацию с ближайших камер видеонаблюдения, высчитывает траектории движения, строит сценарий и схему аварии, выявляет нарушение ПДД, определяет виновника происшествия, на основе фотографий оценивает размер ущерба и тут же производит взаиморасчеты между участниками аварии.
Если учесть, что у компьютера есть вычислительные мощности всех компьютеров мира, то такая обработка займет всего несколько минут.
Аналогичные примеры можно придумать для медицины, образования, научных исследований, патентов, сделок с недвижимостью, логистики и большинства других отраслей. Блокчейн может стать той технологией, которая позволит объединить другие достижения человеческого разума: Big Data, нейронные сети, искусственный интеллект, – и создать на их основе нечто совершенно новое.
Именно потрясающие возможности для сближения физического и цифрового миров, скрытые внутри блокчейна, вдохновляют сейчас исследователей и разработчиков на изучение этой технологии и создание новых блокчейнов, решающих самые разные задачи.
Технически блокчейн похож на e-mail: у каждого пользователя есть свой уникальный адрес, он называется публичным. Все публичные адреса объединены в одну сеть, которую и называют сетью биткойн. Внутри этой сети владельцы адресов могут обмениваться сообщениями по специальному протоколу.
Мы уже сравнили блокчейн с интернет-банком и с электронной почтой, теперь расскажу про четыре важных отличия блокчейна от привычных нам технологий.
1. Блокчейн – это полностью автоматизированная система, в нем строго выполняются запрограммированные действия. Блокчейн никому не принадлежит. С одной стороны, это дает нам полную свободу действий, но, с другой стороны, «свобода порождает ответственность», поэтому внутри блокчейна мы можем полагаться только на себя. Здесь нет техподдержки, менеджеров или программистов, которые могут помочь в случае каких-то проблем: восстановить забытый пароль, отменить транзакцию, заблокировать счет мошенников и вернуть украденные средства.
2. При подключении к блокчейну нам не нужно указывать никакую информацию о себе. Здесь не нужны имена, фамилии, резервные адреса, телефон для восстановления пароля, девичья фамилии матери и т. д. По этой причине часто говорят об анонимности внутри блокчейна. Действительно, при создании аккаунта нет никакой явной возможности идентифицировать хозяина.
3. Блокчейн прозрачен – вся информация внутри него видна всем участникам сети. Любой желающий может посмотреть, что хранится у вас в кошельке, какие переводы и на какие адреса вы делали. Но, как следует из пункта 2, мы не знаем, кто стоит за этими адресами. Поэтому фактически в прозрачном мире блокчейна всегда можно посмотреть, что адрес А перевел адресу Б такую-то сумму. Согласитесь, в большинстве случаев это не очень информативно ☺.
4. В роли пароля от публичного адреса выступает приватный адрес. Пара из публичного и приватного адреса генерируется автоматически при подключении к блокчейну, то есть не нужно ничего придумывать самостоятельно. Но очень важно сохранить оба ключа в надежном месте. Если вы потеряете приватный ключ, то восстановить его не получится. Вместе с потерей приватного ключа вы полностью теряете и доступ к своему аккаунту.
Я уже несколько раз говорила, что вся информация внутри блокчейна сохраняется очень надежно. Давайте разберемся, каким образом достигается такой уровень защиты.
Ноды
Все очень просто – как включить телевизор ☺.
Чтобы начать работать с блокчейном, например с биткойном, нужно завести кошелек: скачать специальную программу на свой компьютер или смартфон. После установки некоторые кошельки в автоматическом режиме начинают скачивать весь блокчейн на ваш компьютер.
Устанавливая кошелек на компьютер, вы скачиваете полную копию блокчейна. Получается, что сколько кошельков установлено на разных компьютерах, столько резервных копий блокчейна существует.
Конечно, так делают не все, а только так называемые теплые, или толстые, кошельки. Подробнее про кошельки у нас есть отдельная глава, поэтому пока просто запомните, что скачивать себе на компьютер весь блокчейн не обязательно.
С технической точки зрения, участники блокчейн-сети, которые хранят у себя полную копию блокчейна, называются ноды. А с человеческой точки зрения, владельцев таких кошельков называют криптоэнтузиастами, так как блокчейн может занимать достаточно много места на компьютере.
Например, по состоянию на весну 2018 года один из самых популярных блокчейнов, Ethereum, занимает около 500 GB на жестком диске. Понятно, что не на всяком компьютере будет достаточно ресурсов для хранения полной ноды блокчейна.
Владельцы нод делают огромное и очень полезное дело для всего блокчейна: многократное копирование является одним из инструментов защиты данных внутри блокчейна. Если что-то произойдет с одной из нод, данные можно будет спокойно восстановить из другой. Чтобы действительно серьезно повредить блокчейну, нужно одновременно вывести из строя больше половины нод. А так как ноды находятся на компьютерах несвязанных участников, сделать это достаточно сложно.
Некоторые криптоэнтузиасты делают свои ноды публичными, то есть разрешают другим кошелькам подключаться к ним, чтобы совершать транзакции и получать актуальную информацию. Такие участники сети тоже приносят ощутимую пользу блокчейну, потому что огромное количество кошельков работает с блокчейном именно через ноды-посредники. С одной стороны, это менее безопасно, чем держать свою ноду и работать с блокчейном напрямую, а с другой – гораздо удобнее и не требует такого количества ресурсов на компьютере.
В чем опасность подключения через ноду-посредника? Подключаясь к чужой ноде, мы вынуждены доверять ей и надеяться, что владелец не строит коварных планов по перехвату наших транзакций и передаче нам ложных сведений о блокчейне.
Чтобы поддерживать данные в актуальном состоянии, ноды постоянно синхронизируют свою информацию с другими участниками сети. Для этого ноды устанавливают между собой peer-to-peer соединения. Похожий протокол используется в торрентах. Все, кто подключается к торренту, устанавливают специальную программу. Когда компьютер с такой программой подключен к сети, другие участники могут скачивать с него файлы. Чтобы дать другим людям доступ к файлам, их не надо никуда загружать, нужно просто установить торрент-программу и добавить файл в разрешенные для скачивания.
Примерно так же взаимодействуют ноды блокчейна: установленный кошелек скачивает обновленные данные о транзакциях с других нод и отдает информацию о своих. Для такой синхронизации у ноды должен быть доступ в Интернет. Если компьютер с нодой какое-то время был отключен от сети, то при запуске программы сначала произойдет синхронизация всех данных, и только после этого можно будет увидеть актуальный баланс и делать переводы.
Пара ключей: публичный и приватный
При создании кошелька для него автоматически создается пара из двух ключей: публичного и приватного. Публичный ключ, или публичный адрес, – это то, что вы передаете всем желающим отправить вам деньги. А вот приватный нужно хранить в секретном и очень надежном месте, так как для подтверждения владения кошельком и управления им обязательно нужен приватный (секретный) ключ. Фактически человек, у которого есть приватный ключ, является владельцем кошелька и может им полностью распоряжаться.
Криптовалютный кошелек можно сравнить с анонимной прозрачной ячейкой в банке: все видят ее содержимое, а принадлежать оно будет тому, у кого есть ключ. При этом ячейка защищена очень надежно, ее невозможно взломать и вытащить содержимое без ключа.
Представьте, что этот ключ от ячейки, где деньги лежат, был сломан или потерян. В этом случае доступ в ячейку не сможет получить никто, и все деньги, которые в ней лежат, останутся там навсегда.
А с другой стороны, если кто-то получил ключ, то он спокойно придет в ячейку и запросто заберет ее содержимое. Так как наша ячейка абсолютно прозрачна, то любой желающий может увидеть, что в ней хранится, и понять, стоит ли тратить время и силы, пытаясь завладеть ключом от этой ячейки.
Хэширование
Итак, мы знаем, что блокчейн – это сеть, участники сети называются нодами, для подключения к сети нужна специальная программа-кошелек. При создании кошелька мы получаем публичный и приватный ключи, которые очень важно сохранить. Эти ключи невозможно восстановить или сменить, они генерируются автоматически, поэтому нельзя установить свой приватный ключ, который будет проще запомнить.
Перевод криптовалюты с одного адреса на другой называется транзакция. Кстати, если речь идет о блокчейне, в котором хранятся файлы, а не деньги, то транзакцией будет называться запрос на загрузку или скачивание файла. В общем, любое сообщение, которое мы отправляем с одного блокчейнадреса на другой, – это транзакция.
Перед отправкой транзакции в сеть кошелек «подписывает» ее нашим приватным ключом.
Как он ее подписывает? Очень просто, выполняя всего три шага:
1. Все данные из нашей транзакции собираются в одну строку.
2. Эта строка обрабатывается при помощи специального шифровального алгоритма.
3. В результате получается строка-подпись. Она называется хэш (hash), а весь этот процесс называется хэширование.
Хэширование – это очень важная часть блокчейна, при этом она опять-таки не является его изобретением. Программисты достаточно давно используют хэши для безопасного хранения различных данных.
Например, когда вы регистрируетесь в каком-нибудь интернет-магазине и придумываете себе пароль, в базе данных магазина сохраняется не ваш пароль, а его обработанная версия – хэш. Когда вы вводите свой пароль, сайт хэширует его и сравнивает с хэшем, который уже хранится в базе данных. Если значения совпадут, значит, вы ввели правильный пароль.
Это нужно для того, чтобы даже сотрудники этого магазина не могли залезть в базу данных, подсмотреть ваш пароль и зайти с ним в ваш аккаунт. Из-за того, что в базе магазина нет вашего пароля, сайт не может прислать ваш старый пароль, если вы вдруг его забудете. Но он может прислать ссылку на ваш e-mail, по которой вы сможете придумать новый пароль.
У хэширования есть четыре очень важных свойства:
1. Алгоритм работает всегда одинаково: передавая одни и те же данные, мы всегда будем получать одинаковую хэш-строку в результате. Именно это свойство хэша используется при проверке данных, передаваемых из кошелька в блокчейн.
2. Хэширование – это необратимая функция, то есть ее невозможно расшифровать обратно. Даже зная алгоритм, по которому данные были зашифрованы, мы не можем вычислить, что же было в исходной строке.
3. Мы можем обрабатывать строку любой длины, при этом в результате всегда будет получен хэш одинаковой длины. Можем взять текст «Войны и мира» или всего одну цифру, – в результате хэширования будет получено одинаковое количество символов.
4. При малейшем изменении тех данных, которые мы хэшируем, результаты будут отличаться очень сильно.
Рис. 2. Как работает хэширование
На рисунке 2 видно, как изменится результат хэширования, если мы всего лишь уберем знак точки в конце исходной строки.
Реестр транзакций
Вернемся к нашей транзакции. Кошелек собирает все данные о транзакции, подписывает их при помощи приватного ключа и передает полученный хэш в единый реестр транзакций блокчейна.
В реестре все транзакции, подписанные кошельками, собираются в один длинный список и ждут своей очереди на проверку (верификацию, валидацию). Если очень сильно упростить процедуру, то суть проверки состоит в том, что участники сети берут исходные данные транзакции, добавляют к ним ваш публичный адрес и вычисляют хэш. Потом сравнивают полученный хэш с хэшем в реестре. Для всех вычислений и сравнений используются инструменты из высшей математики, которые заложены в алгоритмах блокчейна. Если все правильно, то транзакция считается валидной и будет добавлена в блок к другим «правильным» транзакциям.
Майнинг
Кто же выполняет проверки транзакций? Этой полезной работой занимается особая категория участников блокчейн-сети – они называются майнеры, а сама процедура проверки транзакции и добавления ее в блок таких же проверенных транзакций называется майнинг.
Майнерам для проверки транзакций и добавления их в блоки обязательно нужны две вещи: во-первых, хранить у себя полную ноду блокчейна, а во-вторых, иметь очень много вычислительных мощностей на компьютере.
Дело в том, что блокчейн создает среди майнеров очень сильную конкуренцию. Они все видят одинаковые транзакции в реестре. Все проверяют их и собирают в блоки.
Все высчитывают хэш для собранных блоков. А вознаграждение получит только один – тот, у кого будет самый красивый хэш блока. Как только появился новый блок, его автор получает свое вознаграждение, а все остальные начинают проверять новые транзакции, собирать их в блоки, высчитывать хэш и пытаться в этот раз выиграть и получить заветное вознаграждение.
Что же это за вознаграждение, которое так хотят получить майнеры? При создании нового блока в блокчейне «чеканится» новая монета этой сети. Кстати, правильнее будет называть ее не монета, а токен. Поэтому переформулируем: при формировании нового блока блокчейн генерирует новый токен и перечисляет его на адрес участника, создавшего блок. Фактически майнинг совмещает в себе три очень полезные функции: проверяет транзакции, надежно сохраняет их в блокчейне, создает новые токены (чеканит монеты).
Сколько токенов получит майнер, зависит от двух параметров:
1) от того, в каком блокчейне он проверяет транзакции;
2) от текущего уровня развития этого блокчейна.
Я думаю, что с первым параметром все понятно: если мы проверяем транзакции биткойна, то мы получаем вознаграждение в биткойнах, если эфира, то в эфире, и т. д.
А вот про уровень развития блокчейна давайте поговорим подробнее. Дело в том, что в основных блокчейнах заранее заложена так называемая бомба сложности. Это значит, что награда за блок периодически уменьшается. Например, в 2009 году, при старте сети биткойн за каждый новый блок майнер получал 50 ВТС. Такая величина награды сохранялась до 2012 года. А потом в определенный момент награда уменьшается ровно в 2 раза. С 2012 до 2016 года награда составляла 25 ВТС за блок. После уменьшения в 2016 году за каждый новый блок майнеры получают 12,5 ВТС.
Правила, по которым уменьшается награда за блок, запрограммированы внутри блокчейна и не могут быть изменены. Внутри биткойна действуют следующие правила: один блок формируется раз в 10 минут, через каждые 210 000 блоков награда уменьшается в два раза, максимально может быть сформирован 21 000 000 (21 млн) биткойнов.
Несложно подсчитать, что уменьшение награды за блок в два раза будет происходить раз в 4 года (ближайшее ожидается в 2020 году), а все биткойны будут намайнены примерно к 2140 году.
Очень часто Сатоши Накамото подвергают критике за такую бомбу сложности внутри биткойна, ведь она делает майнинг менее выгодным, а если майнеры не будут проверять транзакции и собирать их в блоки, то весь блокчейн перестанет работать. Однако, с другой стороны, уменьшение награды компенсируется ростом курса биткойна и увеличением комиссии за транзакцию.
Напомню, что первый опубликованный курс биткойна был 1 доллар США за 1000 ВТС. Соответственно, за создание одного блока майнер получал 5 центов. В июне 2018-го курс биткойна составляет 6500 долларов и за создание одного блока майнер получает 81 250 долларов.
На первый взгляд кажется, что майнинг – это очень выгодное занятие, в которое стоит инвестировать свое время и средства. Экономическая составляющая этого способа заработка на криптовалюте будет рассмотрена в главе «Десять способов заработка на криптовалютах. Плюсы и минусы». А в этой главе позвольте рассказать вам еще про несколько технических вводных, которые надо учитывать, чтобы понимать суть и выгодность майнинга.
Во-первых, давайте поговорим о красоте. Как уже упоминалось, в блокчейн включаются только блоки с красивыми хэшами. Как мы знаем, красота – понятие относительное, поэтому давайте определимся, какие хэши считаются красивыми в блокчейне.
Начнем с биткойна. Здесь самым красивым считается хэш, который начинается с цифры «О», чем больше нулей в начале строки хэша, тем красивее хэш. У этого есть простое логическое объяснение: чтобы получить хэш с большим количеством нулей, майнеру нужно предпринять больше вычислительных усилий. Как майнер формирует новый блок? Он проверяет транзакции, добавляет их в блок, высчитывает хэш блока. А мы помним, что при малейшем изменении хэшируемых данных мы будем получать разный результат.
Поэтому майнер берет транзакции, добавляет к ним какие-то произвольные данные, высчитывает их хэш; если результат не начинается с 0, то меняет добавленные произвольные данные и снова высчитывает хэш. И повторяет эти действия до тех пор, пока не получит хэш, который будет соответствовать представлениям биткойна о прекрасном. Соответственно, чтобы получить хэш с нужным количеством нулей в начале, майнеру нужно проделать очень много вычислительной работы или быть чертовски везучим ☺.
Если не рассматривать фактор удачи, то более успешными майнерами будут те, у кого есть более мощное оборудование, то есть те, кто за то же самое время сможет перебрать больше комбинаций.
Есть еще один фактор, непосредственно влияющий на майнинг.
Внутри биткойна существует параметр, который называется уровень сложности, или сложность майнинга. От него зависит, сколько нулей обязательно должно быть в начале хэша. Блокчейн биткойна следит, чтобы новые блоки появлялись раз в 10 минут. Статистика берется на примере 2016 блоков, их создание должно занимать 14 дней. Если 2016 блоков были созданы быстрее, то уровень сложности возрастает. Если медленнее, то уровень сложности снижается.
Чем выше уровень сложности, тем больше ресурсов требуется для получения красивыххэшей, а вознаграждение за создание одного блока является достаточно заманчивым, поэтому майнеры придумали объединяться в пулы. Ресурсы отдельных майнеров объединяются, вероятность получить нужный хэш становится выше, а полученное вознаграждение распределяется между участниками пула пропорционально вложенным ресурсам.
Консенсус
Таким образом, в биткойне новый блок создает тот майнер, который приложил для этого больше вычислительных усилий.
Правила, по которым блокчейн определяет, кто получит награду за создание блока, называются консенсус, или алгоритм достижения консенсуса.
Существует несколько видов таких алгоритмов. Внутри биткойна действует алгоритм «доказательство работы» (Proof-of-Work, PoW). Награду за блок получает тот, кто больше всех работал.
Основное достоинство этого вида консенсуса – он выглядит очень справедливым. Побеждает тот, у кого больше мощностей, но при этом есть элемент случайности, который создает равные условия для участников. Даже имея самое мощное оборудование из всех майнеров, нет никаких гарантий, что именноты будешь подписывать все блоки. А наличие случайности подключает еще и фактор удачи, благодаря которому создать блок может даже новичок с допотопным оборудованием.
Основными недостатками Proof-of-Work являются его скорость и высокая энергозатратность. Майнинг по этому алгоритму потребляет достаточно большое количество электроэнергии, а процесс перебора хэшей занимает много времени, что ограничивает пропускную способность блокчейна.
Другой вид консенсуса, который обычно противопоставляют Proof-of-Work, это Proof-of-Stake – «доказательство доли (состояния)». В этой системе если два майнера одновременно добавят в блокчейн новые блоки, будет принят блок того майнера у которого уже есть больше токенов этого блокчейна. Авторы этого алгоритма рассуждают очень просто: если у меня уже есть 100 500 миллионов токенов в этом блокчейне, буду ли я делать что-нибудь, что может повредить этому блокчейну и лишить меня моих токенов? Если я разумный человек, то, конечно же, нет.
Понятно, что алгоритм, основанный на психологии человека, менее надежен, чем строгие математические выкладки, которыми руководствуются разработчики PoW.
Тем не менее, алгоритм PoS в блокчейн-среде считается более продвинутым и перспективным. Многие блокчейны работают над задачей перехода непосредственно на этот алгоритм или на одну из его версий.
Достоинством алгоритма является его более высокая скорость: не нужно перебирать большое количество данных, поэтому, как только появился хэш нового блока, он сразу будет встроен в цепочку к другим блокам.
Есть два основных недостатка:
1) недоброжелатель блокчейна с PoS-консенсусом может купить на бирже достаточное количество токенов и начать влиять на данные внутри блокчейна, собирая в блоки невалидные транзакции и передавая их в блокчейн;
2) этот консенсус не выглядит справедливым: в нем богатые становятся богаче, а бедные – беднее, изменить этот расклад можно, только увеличив свое богатство.
Разработчики блокчейнов, которые хотят использовать Ро5-алгоритм, придумывают способы, как обойти эти недостатки. Например, в PoS-алгоритмах, актуальных на первую половину 2018 года, используется понятие ставка. Майнер замораживает определенное количество токенов и делает ставку на создание нового блока. Если его ставка больше других, то он получает награду за блок пропорциональную ставке.
На сегодняшний день команда разработчиков Ethereum, одного из самых популярных блокчейнов, работает над внедрением алгоритма Casper – это улучшенная версия Proof-of-Stake. Внедрение этого алгоритма позволит существенно увеличить количество транзакций, которые сможет обрабатывать Ethereum.
Существуют и более редкие виды консенсуса.
Delegated-Proof-of-Stake – «делегированное доказательство доли» – похож на Proof-of-Stake только названием. Важное отличие заключается в том, что все владельцы токенов могут выбрать представителя своих интересов внутри этого блокчейна. Фактически выбирается несколько нод от 21 до 100, которые проверяют блоки. Если выбранная нода работает плохо: добавляет невалидные транзакции, пропускает блоки, не обрабатывает транзакции, – то она будет удалена из списка майнеров и переизбрана. Этот алгоритм используют EOS, Steemit, BitShares. За счет объединения майнеров он позволяет существенно увеличить скорость проверки транзакций, а значит, и пропускную способность блокчейна. Например, EOS использует этот механизм для масштабирования до миллиона транзакций в секунду.
Proof-of-Activiti – доказательство активности. В таком блокчейне есть несколько нод-админов, которые проверяют транзакции и выдают результат всем остальным. Остальные просто копируют то, что проверили админы. Этот алгоритм носит очень централизованный характер: чтобы стать админом такой сети, нужно пройти проверку и подтверждение от уже действующих админов. Этот алгоритм чаще всего используется в непубличных закрытых блокчейнах, которые работают в замкнутом сообществе либо в компаниях. Примером такого блокчейна является Kovan. Kovan – это тестовый блокчейн для программистов, которые разрабатывают проекты на Ethereum. В Kovan существуют несколько администраторов, которые проверяют транзакции участников и бесплатно выдают токены, которые нужны участникам для проведения тестов.
Итак, при помощи консенсуса определяется, какой блок с транзакциями будет добавлен в блокчейн и какой майнер получит за это вознаграждение.
Блоки внутри блокчейна
А теперь давайте наконец-то разберемся, что такое блок и как он устроен?
Майнер собирает проверенные транзакции в блок, добавляет блоку заголовок (идентификатор) и подпись – это хэш блока. В разных блокчейнах структура блока и его отдельных частей может различаться. Например, в блоках биткойна есть еще место для тех самых дополнительных данных, которые майнеры могут менять, добиваясь нужного хэша. Общий принцип везде одинаковый: заголовок, транзакции, подпись.
Рис. 3. Структура блока
Сколько транзакций помещается в одном блоке, зависит от блокчейна, так как максимальный размер блока жестко запрограммирован. Например, в Bitcoin максимальный размер блока – 1 Мб. Из-за этого в биткойн-сообществе периодически появляются идеи, как можно увеличить размер блока. Во втором полугодии 2017 г. активно обсуждалась идея, как можно использовать место, зарезервированное в блоке для служебной информации, под транзакции, тем самым увеличив емкость блока практически в два раза.
Цепочки блоков
Из проверенных блоков формируется цепочка, в которой каждый новый блок ссылается на предыдущие.
Рис. 4. Цепочка блоков
Для блока № 1 формируется хэш из содержимого его транзакций. В хэш блока № 2 включены транзакции из этого блока + хэш блока № 1. В хэш блока № 3 кроме его транзакций попадет хэш блока № 2. Таким образом формируется цепочка. Если удалить какой-то из блоков или подменить транзакции внутри него, то изменятся хэши и такой блок выпадет из цепочки.
Если новый добавляемый блок не ссылается на предыдущий, то он автоматически будет отвергнут цепочкой, а значит, транзакции из него останутся в реестре непроверенных и будут замайнены другим майнером в последующих блоках.
Конкуренция цепочек
Итак, кошельки подписывают транзакции и отправляют их в реестр. Майнеры наперегонки проверяют эти транзакции и собирают их в блоки. Мы уже знаем, что в блокчейне есть консенсус, который выберет блок, если сразу несколько майнеров добавят блоки одновременно (такое случается постоянно, так как майнеров много и все стремятся успеть получить награду за блок).
Но при этом в блокчейне есть такое понятие – конкуренция цепочек блоков. Откуда же возникает конкуренция, если консенсус так красиво решает спорные ситуации?
Все дело в скорости. Бывают ситуации, когда блок с транзакциями был добавлен в цепочку, а уже после этого появился более красивый блок с таким же номером. В этом случае, подчиняясь правилам консенсуса, блокчейн переключится на этот более красивый блок. Вознаграждение, которое было начислено майнеру-владельцу несчастливого блока, исчезнет и появится новое вознаграждение у другого майнера.
Причем возможны ситуации, когда несчастливым оказывается не один блок, а цепочка из нескольких блоков.
Представьте: где-то живет гениальный программист, который собрал свой собственный супермощный компьютер и майниттранзакции биткойна. Допустим, у него произошел сбой отправки сообщений в Интернет. И вот его компьютер вычислил один блок, а передать эту информацию другим нодам в блокчейн не может. Потом его компьютер вычислил второй блок, за ним третий, и тут связь появилась, и кошелек выгрузил в блокчейн информацию сразу про три созданных блока. Если окажется, что в этой цепочке больше нулей в начале хэша, то блокчейн сразу же разрушит уже сложившуюся цепочку из трех последних блоков и переключится на нашу.
Именно по этой причине внутри блокчейна так важно количество подтверждений. Считается, что современная компьютерная техника не дает возможности собрать цепочку из шести более красивых хэшей.
Поэтому и существует правило, что перевод биткойна полностью завершен, когда у него есть шесть подтверждений. Это значит, что уже шесть блоков ссылаются на нашу транзакцию, а цепочка из шести блоков не может быть заменена на другую версию.
Конечно, остается вариант, что в один прекрасный день будет изобретен супермощный компьютер или прилетят инопланетяне со своей чудо-техникой и смогут моментально вычислять очень красивые цепочки гораздо длиннее шести блоков. Надо признать, что, конечно, существует риск прилета инопланетного компьютерного разума, мечтающего сломать наш блокчейн, или более вероятный риск – появление сверхмощных квантовых компьютеров, которые будут производить вычисления в разы быстрее, чем привычная нам техника.
Однако мне кажется, что такой разум столь же успешно сможет взломать и обычную банковскую систему, просто моментально подбирая самые сложные комбинации паролей.
Давайте соберем в одну картинку, как же работает блокчейн.
Рис. 5
Блокчейн – это сеть из участников. Когда появляется новый участник, он подключается к этой сети с помощью специальной программы-кошелька. Если при подключении к блокчейну участник скачивает весь архив с данными (весь блокчейн), то его кошелек начинает выполнять роль ноды. Бывают ноды, которые просто хранят информацию, а бывают ноды-майнеры, которые верифицируют транзакции и собирают их в блоки. Майнеры за свою работу получают награду – токены, монеты, используемые внутри блокчейна. Майнеры собирают проверенные транзакции в блоки и объединяют блоки в цепочки. Когда майнер
добавляет новый блок, все ноды сохраняют у себя информацию об этом блоке и платеж считается проведенным. Это вкратце общая схема работы. Если вас интересуют подробности, то можно посмотреть запись одного из докладов, посвященного устройству блокчейна:
Пока в примерах мы старались по возможности рассказывать только про биткойн, но криптовалют намного, намного больше. Можно сказать, что криптовалюты делятся на две группы: биткойн и все остальные. Все криптовалюты, кроме биткойна, называют одним общим термином – altcoins, alternative coins, альткойны.