Продолжая использовать наш сайт, вы даете согласие на обработку файлов cookie, которые обеспечивают правильную работу сайта. Благодаря им мы улучшаем сайт!
Принять и закрыть

Читать, слущать книги онлайн бесплатно!

Электронная Литература.

Бесплатная онлайн библиотека.

Читать: Блокчейн. Принципы и основы - Александр Магомедович Цихилов на бесплатной онлайн библиотеке Э-Лит


Помоги проекту - поделись книгой:

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

Когда банк переводит деньги с одного счета на другой, он проводит следующие три операции: вычитает сумму перевода и сумму комиссии за перевод со счета отправителя и добавляет сумму перевода на счет получателя. Комиссию же банк оставляет себе как оплату за совершенную посредническую услугу. В блокчейн-системах никаких посредников нет, равно как и средства ниоткуда физически не вычитаются и никуда не прибавляются. Владелец активов просто указывает в транзакции адреса одного или нескольких получателей, то есть опять же формирует ссылки. В итоге транзакция представляет собой набор ссылок на входящие поступления на адрес плательщика, а также набор ссылок на исходящие адреса получателей его платежей. Для таких транзакций в блокчейн-среде оперируют понятиями «входы» и «выходы». Существует правило, что сумма всех средств на «выходах» должна быть равна сумме средств на «входах». Если у владельца адреса нет необходимости тратить все средства на задействованных в транзакции «входах» полностью, он формирует дополнительный «выход» в виде сдачи самому себе, чтобы поддержать равный баланс «входов» и «выходов». Очевидно, что «выход» для отправителя будет являться «входом» для получателя, и он сможет потом на него, в свою очередь, сослаться, когда будет совершать собственные исходящие платежи.


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


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

Подобная система формирования транзакций и ведения балансов называется UTXO (Unspent Transaction Output – «непотраченные транзакционные выходы»). Как было указано выше, для расчета баланса, связанного с конкретным адресом в системе, необходимо найти и проверить все связанные с ним «входы» и «выходы» с самого начала базы блоков. Плюс этого метода в том, что не нужно отдельно хранить состояние балансов и постоянно их актуализировать, тем самым получая экономию свободного места на носителях. Минус – это время, которое постоянно затрачивается на расчет баланса, особенно если база блоков достаточно выросла в своих размерах. Поэтому ряд проектов все же хранит специальные базы «актуального состояния», где, в частности, находятся и данные о балансах адресов, которые можно быстро оттуда получить.

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

И последнее, что хотелось бы сказать о транзакциях в общем описании – это комиссия. Различные блокчейн-проекты взимают комиссию за транзакции, хотя бывают и такие, в которых все транзакции бесплатны. Комиссия существует для монетарной мотивации узлов, создающих блоки, – они забирают ее себе, наряду с основным вознаграждением за создание блока как такового. Об этом процессе мы подробно поговорим в главе о так называемом «майнинге», а здесь лишь упомянем, что комиссия в блокчейн-системах, как правило, не является фиксированной и каждый создатель транзакции сам решает, какую комиссию ему заплатить. Однако если эта комиссия окажется слишком низкой или вовсе нулевой, то транзакция может получить низкий приоритет при формировании новых блоков и будет включена в какой-то из них с большой временной задержкой. Что же касается непосредственной визуализации величины комиссии в теле транзакции, то здесь опять же применен подход максимальной практичности в организации хранения данных – никакой комиссии в транзакциях напрямую не указывается, а рассчитывается она как разница между суммой всех «входов» и «выходов», включая «сдачу», которая оказывается меньше как раз на величину комиссии.

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

Часть II

Практические реализации

Предыстория проекта биткоин

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

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

В 1976 году, еще в доинтернетовскую эпоху, известный австрийский экономист Фридрих Август фон Хайек представил свою книгу под названием «Частные деньги». В ней содержались серьезные рассуждения относительно возможного устранения государственной монополии в управлении денежными эмиссиями, в том числе и предложения по созданию конкурентных финансовых систем. Фон Хайек писал также о возможных негативных последствиях злоупотребления общественным доверием со стороны национальных правительств. Эти предупреждения впоследствии во многом воплотились в реальности, когда финансовый мир начал содрогаться от системных кризисов, порождаемых безответственной политикой крупных банков и финансовых регуляторов ряда государств. Идеи фон Хайека нашли отклик у некоторых криптографов-энтузиастов, которые начали серьезно размышлять над проектированием независимых электронных денежных систем. Их интересовала в первую очередь возможность децентрализовать, а заодно и анонимизировать денежное обращение, избавив его от посредников, находящихся в большинстве случаев под жестким государственным контролем.

В 1982 году американский криптограф Дэвид Чаум опубликовал работу под названием «Слепые подписи и неотслеживаемые платежи», которая стала продолжением его исследований в области зашифрованных коммуникаций. Концепцию слепой подписи мы рассматривали ранее, поэтому читатель уже должен иметь представление о принципах ее работы. Именно на базе этой формы ЭЦП Чаум впоследствии создал первую систему обращения электронных денег, которую назвал eCash. Данный проект использовал технологию «слепой цифровой подписи» для авторизации и проверки цифровых банкнот, которыми обменивались контрагенты. При этом сам авторизатор играл роль банка – централизованного сервиса, основной функцией которого являлось обеспечение защиты системы от угрозы повторного расходования цифровых денег. Вместе с тем подобная централизация могла привести к возможной фальсификации клиентских балансов, если бы у владельцев системы возникло такое желание. Тем не менее это был первый проект, в котором были применены алгоритмы асимметричной криптографии для создания электронной платежной системы.

Для обеспечения функционирования проекта eCash в 1990 году в Нидерландах была зарегистрирована компания DigiCash, которая в период 1990–1995 годов сотрудничала с банками и крупными платежными системами, в том числе и такими, как VISA. Даже компания Microsoft не осталась в стороне и пыталась интегрировать данный проект в свою на тот момент новейшую и во многом революционную операционную систему Windows 95. Считалось, что наличие интереса со стороны столь серьезных партнеров гарантирует компании DigiCash отличные перспективы развития. Однако просчеты Чаума в стратегии ведения бизнеса привели в 1998 году компанию к банкротству, после чего ее активы были проданы, а сам проект закрыт.

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

В целом 1998 год был богат на важные события в мировой финансовой индустрии. Глобальный финансовый кризис, зародившись в Азии, прошелся, как ураган, по всему миру, нанеся существенный ущерб экономикам некоторых развивающихся стран. Это заставило многих задуматься о том, что существующая мировая финансовая система, имеющая в большой степени централизованную природу, достаточно уязвима перед лицом экономических кризисов. Причины же, их порождающие, обусловлены либо чрезмерной государственной «зарегулированностью» национальных экономик, либо же банальной некомпетентностью руководителей крупнейших финансовых институтов. Причем как коммерческих, так и имеющих статус государственных структур, включая в том числе центральные банки. Возможно, именно тогда начали зарождаться идеи децентрализованного денежного обращения, позволяющего избежать исключительной зависимости от конъюнктурных решений конкретных персоналий, волею судеб держащих в руках политическую и экономическую власть в своих государствах. Как следствие, каждый новый появлявшийся проект, связанный с децентрализацией платежных процессов, впитывал в себя все эффективные методы, разработанные в этом секторе индустрии ранее, приближая, таким образом, создание решения, которое бы совершило настоящую революцию в системе денежных отношений.

Не исключением стал и проект Bit Gold, разработанный в том же году (хотя и публично представленный лишь в 2005) американским ученым венгерского происхождения Ником Сабо, специалистом в области криптографии, информатики и права. Созданная им система, помимо асимметричной криптографии, включала интересный элемент, который впоследствии сыграет важнейшую роль в технологии блокчейн, а именно – необходимость для пользователей системы решать сложные вычислительные задачи с целью формирования эмиссии электронных денег. Задача сводилась к поиску хешей специально заданного вида, где конечным результатом было нахождение строки данных, начинающейся с определенного количества бит с нулевым значением. Поскольку функция хеширования выдает алгоритмически зависимый, но заранее визуально непредсказуемый результат, необходимо перебрать достаточно большое количество различных исходных прообразов, чтобы в конечном итоге совершенно случайно получить такой хеш, вид которого будет удовлетворять условию задачи. В данном случае он должен содержать необходимое количество нулевых символов в начале строки данных.

Этот прием для формирования сложновычислимой задачи Ник Сабо позаимствовал у автора проекта Hashcash Адама Бэка, который еще в 1997 году задействовал похожий алгоритм в системе противодействия массовым рассылкам электронной почты. В проекте Бэка тоже было необходимо при отсылке каждого письма вычислять хеш, где первые 20 бит результата должны были являться нулями. Сама по себе задача, с вычислительной точки зрения, была несложной и подразумевала перебор максимум 220 вариантов (то есть примерно около 1 млн), на что обычному компьютеру требовалось всего несколько секунд. Однако подобную задачу необходимо было решать для каждого отсылаемого письма, и в случае, если количество адресатов в списке почтовой рассылки было значительным, то объем времени, затрачиваемый на расчеты, пропорционально увеличивался. Результат вычислений добавлялся к служебной информации, сопровождающей каждое электронное письмо, после он чего мог быть легко проверен компьютером получателя на «валидность» в части необходимого количества начальных нулей. Так спам-фильтрам было гораздо проще классифицировать полученное почтовое сообщение.

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

В 1999 году в статье за авторством криптографов Маркуса Якобсона и Ари Джуелса впервые было введено понятие Proof-of-Work, или «доказательство работы». Данный термин относился к решению криптографической задачи нахождения секретного изначального прообраза, хеш которого удовлетворял бы по сложности определенным требованиям. При этом любой другой участник сети, получив данный рассчитанный прообраз, мог бы легко проверить его валидность, пропустив через процедуру хеширования. Это позволяло получить однозначное доказательство того, что сложная вычислительная работа действительно была проведена узлом, который претендует на признание за ним этого факта.

Ник Сабо в своем проекте Bit Gold, используя большинство ранее разработанных методик, действительно очень близко подошел к решению задачи создания защищенных цифровых денег. Однако в его системе существовала уязвимость, которую называют «Атакой Сибиллы» – когда в условиях нахождения в распределенной сети какой-то конкретный узел может попасть в окружение ряда других узлов, контролируемых злоумышленниками. Тогда атакуемый узел может стать жертвой, которая получает исключительно ложную информацию о сетевых транзакциях, а ее собственные транзакции, отправляемые в сеть, могут быть модифицированы атакующими узлами. Помимо этого, существовали и другие проблемы, которые в конечном итоге не позволили Сабо реализовать свой проект на практике. Например, ему так и не удалось решить проблему инфляции цифровых денег, которая неизбежно бы возникала при постепенном увеличении вычислительной мощности узлов, входящих в сеть.

Тем не менее труды создателей вышеописанных систем не пропали даром. Спустя непродолжительное время эти принципы найдут отражение в документе, который был представлен миру автором, имя которого тогда было неизвестно никому, а сейчас известно очень многим. Речь идет о человеке, тайна существования которого не разгадана и по сей день – о загадочном создателе технологии блокчейн и, собственно, Биткоина как первого проекта, на ней построенного. Имя этого создателя – Сатоши Накамото, который 31 октября 2008 года представил криптографическому сообществу статью, описывающую принципы его революционного проекта, получившего спустя некоторое время мировую известность. Кто же такой этот Сатоши Накамото и в чем состояли главные отличия его проекта распределенных цифровых денег от подобных, ранее предложенных другими специалистами в области асимметричной криптографии?

Кто придумал биткоин

По мере того как проект Биткоин начал получать широкую известность, многие задались вопросом: кто такой Сатоши Накамото? Существует ли в реальности человек с таким именем или же мы имеем дело лишь с экзотическим псевдонимом? Если попытаться написать имя «Сатоши Накамото» на японском языке, то придется задействовать три иероглифа. «Сатоши» означает «находчивый», «мудрый», «ясное мышление», часть фамилии «Нака» – это «взаимосвязи», а «Мото» – это «основа» или «происхождение». Поскольку реальный Накамото не оставил ни одного технического описания на японском языке, а все коммуникации вел на безупречном английском, был сделан однозначный вывод, что таинственный изобретатель является уроженцем англоязычной среды.

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

Выпускник физического факультета Калифорнийского Политехнического Университета и увлекающийся железнодорожными моделями Дориан Сатоши Накамото однозначно обладает серьезными математическими способностями и даже владеет навыками программирования. Тем не менее сам он утверждает, что имеет достаточно слабое понятие о криптографии, а о самом проекте Биткоин узнал от журналистов лишь в тот самый день, когда они возникли на пороге его дома. Что, впрочем, не помешало ему тут же на всякий случай вызвать полицию. Кроме того, он заявил, что длительное время оставался безработным, перебиваясь случайными заработками, отчего его доходы сильно упали. Финансовые проблемы были столь серьезны, что, по его словам, он даже был вынужден отказаться от подключения к сети интернет у себя дома. В конечном итоге Накамото попросил «уважать право на личную жизнь и оставить его в покое», а на нескольких чрезмерно назойливых журналистов даже пытался подавать в суд. Но в то же время он выразил благодарность представителям криптосообщества – за моральную и даже материальную поддержку, которая ему была в определенной степени оказана. В итоге многие сделали вывод, что либо господин Накамото весьма искусно притворяется непричастным, либо он действительно говорит правду, и тогда придется затратить немалые усилия для поиска настоящего создателя Биткоина. Или «создателей» – если это не один человек, а целая группа людей, что также вполне вероятно.

Если предположить, что мы имеем дело с псевдонимом конкретного человека, то одним из лучших кандидатов на роль таинственного создателя технологии блокчейн был бы сам Ник Сабо, автор BitGold. Как известно, принципы построения обоих проектов были довольно схожи, причем Сабо остановился чуть ли не в одном шаге от успеха, который продемонстрировал Биткоин. Вместе с тем довольно подозрительным считался тот факт, что Сатоши Накамото в своем описании проекта Биткоин, цитируя многих предшественников по созданию цифровых денег, ни разу не упомянул Ника Сабо, хотя именно его проект был наиболее близок к творению Сатоши. Что же касается самого Ника Сабо, то он сразу решительно открестился от авторства и не предпринимал в дальнейшем никаких шагов для того, чтобы изменить существующее положение дел в этом вопросе. Вместе с тем Сабо выразил удовлетворение, что его исследования в области криптографии и цифровых денег получили столь успешное развитие в своем практическом применении. Правда, когда проект Биткоин только появился, Сабо его «как бы» не заметил и никоим образом не прокомментировал, хотя создание децентрализованных цифровых денег, было, без преувеличения, делом всей его жизни. Справедливости ради следует также отметить, что Ник Сабо действительно внес весомый вклад в создание технологии блокчейн, а также ввел в обиход понятие «умных контрактов», нашедших свое применение сперва в системе Ethereum (Эфириум), а затем и в других блокчейн-платформах.

Возвращаясь к вопросу поиска кандидатов на авторство Биткоина, надо сказать, что не все подозреваемые журналистами или представителями криптосообщества кандидаты отрицали эти предположения. В частности, в 2016 году австралийский ученый, программист и предприниматель Крейг Стивен Райт заявил, что именно он является автором проекта Биткоин. Однако он так и не смог предоставить убедительные доказательства своего авторства – когда его попросили сформировать цифровую электронную подпись на базе закрытого ключа, который использовался для подписи первых транзакций Биткоин (несомненно принадлежащих Сатоши Накамото), Райт это сделать отказался. За что ожидаемо был подвергнут общественному порицанию со стороны блокчейн-сообщества, которое обвинило его в банальном подлоге и обмане. Добавим также, что незадолго до декларации Райта об авторстве его дом в Сиднее посетила полиция, поскольку в отношении него имелись подозрения в отмывании денег. После чего, по всей видимости, он решил привлечь к себе внимание подобным, хотя и весьма сомнительным образом. Еще одним фактором является мнение ряда специалистов о том, что знакомство Райта с технической стороной проекта Биткоин является довольно поверхностным, что также играет не в пользу признания его авторства.

Если начать изучать статьи, посвященные поиску создателя Биткоина, поневоле удивляешься – кого только не подозревали в авторстве этого проекта. Очень многие известные люди в IT-индустрии удостоились подобных предположений. Назывались имена и Билла Гейтса, основателя Microsoft, и Стивена Джобса, основателя Apple, и даже Илона Маска, одного из cооснователей компаний PayPal, Tesla и Space X. Все они, разумеется, довольно быстро отклонили любые формы своей причастности к созданию Биткоина. Среди авторитетных представителей криптосообщества предполагаемыми авторами Биткоина в разное время считали Гэвина Андерсена, основателя Bitcoin Foundation (некоммерческой организации, занимающейся стандартизацией, защитой и поощрением использования Биткоин во всем мире), а также Чарли Ли – автора проекта Litecoin, созданного как альтернатива Биткоину, с использованием его кода как базовой основы.

На самом деле список потенциальных кандидатов на роль создателя Биткоина настолько велик, что мы не будем его приводить целиком и рассматривать каждую персоналию в отдельности. Что же касается конкретно Гэвина Андерсена, то он состоял в переписке с настоящим Сатоши Накамото около двух лет, до момента неожиданного исчезновения последнего из всех видов коммуникаций весной 2011 года. Как заявил сам Накамото, «он удаляется, чтобы заняться более важными делами». В процессе их общения Андерсен полагал, что имеет дело с талантливым человеком японского происхождения, хорошо говорящим по-английски. Впрочем, получив от Накамото программное обеспечение клиента сети Биткоин, Андерсену с коллегами пришлось переписать около 70 % кода, поскольку они посчитали его довольно «неряшливым». Кстати, именно этот фактор заставил их полагать, что Накамото создал Биткоин, скорее всего, в одиночку, в противном случае код не содержал бы столько ошибок и был бы более «читаемым». Впоследствии Андерсен какое-то время считал именно Крейга Райта тем человеком, с которым он общался как с автором Биткоина, но затем признал свою ошибку, и вопрос об авторстве вновь стал актуальным.

Наконец, поиском реального создателя занялась серьезная организация – Агентство Национальной Безопасности США. Специалисты этого ведомства провели лингвистический анализ всех текстов Накамото, которые тот помещал на различных форумах, посвященных тематике криптографии и создания цифровых платежных средств. В процессе анализа был использован метод так называемой «стилометрии», позволяющий исследовать стилистику написания текстов на основе статистического анализа повторений различных слов. Данный метод также называется «авторским инвариантом», отражающим некую количественную характеристику литературных текстов. Тексты Накамото сравнили с текстами других авторов, причем количество этих образцов исчислялось чуть ли не триллионами. В результате был получен уникальный «цифровой отпечаток» текстов Накамото, однозначно идентифицирующий его авторство. Обладая доступом к огромному хранилищу электронных сообщений, логов чатов и в целом архивов трафика центров обработки и хранения данных таких корпораций, как Google, Amazon и Facebook, специалисты АНБ получили возможность сравнить «отпечаток» Накамото с данными, принадлежащим не менее чем миллиарду человек. Известно, что на обработку данных ушло около месяца, и, по слухам, был получен положительный результат поисков, который АНБ тем не менее продолжает сохранять в секрете.

Почему же этот таинственный Сатоши Накамото решил сохранить инкогнито? На этот вопрос нет однозначного ответа, и мы можем лишь строить предположения о причинах, побудивших его к этому. Сделал он это лишь из природной скромности или руководствовался соображениями личной безопасности, понимая, что его изобретение может вызвать революцию в мире бизнеса и социальных взаимоотношений? Предполагал ли он, что правительства многих государств будут озабочены возникшей проблематикой децентрализации денежных эмиссий, анонимизации финансовых потоков и, как следствие, возможной утратой контроля над ними? В любом случае Сатоши Накамото исчез и никогда более не проявлял себя ни в интернете, ни в каких-либо СМИ. В последнем сообщении в ответ на предложение Андерсена принять приглашение от ЦРУ на встречу для разговора Накамото написал буквально следующее:

«Я надеюсь, что, поговорив с ними напрямую, мне удастся ответить на все их вопросы и развеять их сомнения. Я хочу попробовать убедить их в том, что Биткоин – это всего лишь более эффективное и не зависящее от действий политиков платежное средство. А не всемогущий, как они полагают, инструмент черного рынка, который будут использовать анархисты для борьбы с Системой».

Те, кому посчастливилось напрямую пообщаться с Накамото через интернет, отмечали его высокую образованность, а также серьезную квалификацию как специалиста в криптографии и программировании. Помимо этого, явно бросались в глаза либертарианские взгляды Накамото, а также его настороженность по отношению к правительствам государств, налогам, банкам и персонам, с ними связанным. Возможно, сохраняя свое настоящее имя в тайне, Накамото надеялся таким образом защитить Биткоин от вмешательства государства, результатом которого могло явиться то, что проект в конечном итоге так и не увидел бы свет. Сам Накамото упоминал, что работа по созданию концепта Биткоин заняла у него не менее семи лет и он был убежден, что наконец решил задачу, которая оказалась не по силам его предшественникам. В любом случае настало время нам рассмотреть в деталях – что же из себя представляет проект Биткоин и каково его технологическое устройство?

Как устроен биткоин

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

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


Биткоин использует форму данного уравнения в виде y2 = x3 + 7. Явное упрощение не должно вводить читателя в заблуждение – указанных коэффициентов вполне достаточно для того, чтобы создать значительную вычислительную сложность в части решения обратной задачи восстановления секретного ключа из публичного. Вообще данные для параметров эллиптических кривых взяты из рекомендаций консорциума SECG, который разработал «Стандарты для эффективной криптографии», использующиеся в том числе и в проекте Биткоин. Параметры рассчитаны таким образом, чтобы придать системе наименьшую уязвимость при попытке атаковать шифры, созданные на базе асимметричных криптографических методов. На текущий момент неизвестно ни об одной успешной попытке взлома алгоритма эллиптической криптографии, использующегося с параметрами, рекомендованными SECG. Возможно, эти задачи будут успешно решать квантовые компьютеры, но для этого им необходимо обзавестись достаточным количеством кубитов, а на это потребуется время, возможно, даже весьма значительное.

Вернемся к генерации ключей. Сначала случайным образом создается 256-битный закрытый ключ, а затем из него математически вычисляется публичный ключ точно такого же размера. Однако публичный ключ – это еще не совсем адрес Биткоин. Для того чтобы он стал адресом, с ним необходимо провести определенные процедуры. Сначала открытый ключ последовательно пропускают через два различных алгоритма хеширования (SHA-256 и MD5). В последнем случае его адрес укорачивается с 256 бит до 160. Затем к полученному результату в начало добавляют один байт идентификатора сети (основная сеть или тестовая), а в конец – четыре байта контрольной суммы адреса, которая также представляет собой часть хеша последнего результата. Контрольная сумма необходима для проверки, если ввод адреса осуществляется вручную: в случае ошибочного ввода система выдаст предупреждение. Транзакции в блокчейн являются безотзывными, поэтому отправитель криптосредств не имеет права на ошибку. Если адрес будет введен некорректно, средства отправителя уйдут «в никуда». А точнее – на адрес, от которого ни у кого из потенциальных пользователей сети не будет «отмычки» в виде секретного ключа. В результате никто не сможет предъявить права на эти средства, которые, таким образом, будут безвозвратно потеряны для системы.

Завершающий шаг в процедуре получения адреса Биткоин – его преобразование в более «читаемый» вид. Для этого блок данных в формате шестнадцатеричного кода (использующего цифры от 0 до 9 и буквы от A до F) преобразуется алгоритмом Base58 в строку, содержащую цифры, а также маленькие и большие латинские буквы. Данная процедура необходима, чтобы исключить из адреса символы, которые могут двояко трактоваться при ручном наборе: например, латинская маленькая l и большая латинская I или большая буква O и цифра 0. Все эти меры направлены на дополнительную защиту от ошибочного ввода адреса при совершении транзакций. По завершении всех необходимых процедур Биткоин-адрес может приобрести, например, следующий вид:


Теперь у пользователя есть свой адрес в сети Биткоин, хотя сама сеть об этом пока еще ничего не знает, поскольку пользователь осуществлял генерацию адреса на своем локальном устройстве. Но имея пару ключей и сформированный из них адрес, пользователь может получать на него криптосредства, а затем отправлять их на любой другой адрес, который пожелает. И тогда с первой транзакцией, по мере ее распространения по сети, об этом адресе начнут узнавать как о новом участнике системы. Возникает вопрос: куда именно попадет транзакция? Логично было бы предположить, что она должна быть включена в блок, который в данный момент формируется сетью. Однако это не совсем так – сначала транзакция рассылается по всей сети через прямые соединения между различными узлами. При этом каждый из узлов, получив новую транзакцию, осуществляет ее проверку на «валидность». Узлы проверяют, располагает ли в действительности отправитель той суммой, которую он желает переслать. Осуществить такую проверку возможно, вычисляя все «непотраченные выходы» по предыдущим транзакциям в пользу данного отправителя. Также математически проверяется соответствие цифровой электронной подписи отправителя указанному им своему открытому ключу. Это нужно для того, чтобы удостовериться, что отправитель транзакции обладает закрытым ключом от адреса, с которого он собирается потратить деньги. Если транзакция успешно прошла все необходимые проверки, то она попадает во временное хранилище, которое называется «мемпул» (mempool).

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

Если учесть тот факт, что размер блока в сети Биткоин ограничен одним мегабайтом, а средний размер транзакции составляет около 300 байт, то в один блок можно поместить около 4000 транзакций, что само по себе достаточно немного. Сеть Биткоин настроена таким образом, что каждый новый блок создается примерно один раз в десять минут, поэтому пропускная способность всей сети составляет около семи транзакций в секунду. В периоды повышенной нагрузки на сеть, когда количество транзакций может существенно возрасти, мемпул начинает сильно увеличиваться в своих размерах, в то время как скорость включения транзакций в блоки уменьшается. Поэтому, чтобы транзакция попала в новый блок как можно быстрее, отправители начинают увеличивать комиссию. В декабре 2017 года был отмечен рекордный размер мемпула – около 140 мегабайт, при этом количество транзакций, ожидающих обработки, превысило 200 000. Однако уже спустя полгода напряжение в сети Биткоин существенно снизилось, величина мемпула упала до единиц мегабайт, а комиссия за обработку транзакций вернулась к обычным значениям.

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

Все эти данные имеют существенный размер: по состоянию на весну 2019 года объем базы данных Биткоин составлял около 570 000 блоков и занимал около 250 гигабайт на дисковом пространстве. Для тех, кто не желает выделять место для хранения столь приличного объема данных, имеет смысл воспользоваться возможностью получить статус «легкого клиента», когда вместо всего объема информации он скачивает себе только заголовки блоков без списка транзакций. В этом случае ему необходимо получить на свое устройство всего лишь несколько сотен мегабайт информации, что несопоставимо легче и быстрее, чем синхронизировать себе полную базу. Однако в этом случае данный «легкий» узел сети не сможет участвовать в создании новых блоков. Впрочем, этим занимаются далеко не все участники сети – весной 2019 года в сети Биткоин насчитывалось около 10 000 полных узлов, а число уникальных активно используемых адресов составляло около 640 000.

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

Если мы хотим решить эту проблему, нам нужно рассмотреть процесс создания блока как такового. Чтобы создать блок, необходимо набрать из мемпула транзакций, пока хватает места в блоке, вычислить на их основе корневое значение дерева Меркла, на базе которого вместе с остальной служебной информацией будет сформирован заголовок блока. Далее следует поместить в заголовок создаваемого блока хеш заголовка предыдущего блока, чтобы продолжить непрерывность цепочки блоков, после чего новый блок готов и его можно отправить в сеть, чтобы остальные узлы включили его в свои цепочки. А теперь зададимся вопросом: а что, если достаточно большое количество узлов одновременно начнут предлагать свои блоки остальным участникам сети? Вне всякого сомнения, начнется полнейший хаос. Каналы связи будут перегружены пересылаемой для синхронизации информацией, неизбежно возникнет огромное количество различных вариантов разветвления цепочек – в общем, сеть фактически утратит целостность и, как следствие, работоспособность.

Чтобы избежать такого негативного сценария развития событий, необходимо сделать так, чтобы количество предлагаемых сети блоков для включения в цепочку было чрезвычайно малым. В идеале – чтобы в течение среднего временного интервала между созданием блоков (в сети Биткоин – около десяти минут) конкурирующие блоки в сети вообще отсутствовали. Но как этого достичь? Ответ прост: необходимо сделать процесс создания блоков настолько сложным, чтобы внутри кванта времени, выделяемого на создание нового блока, сети предлагалось минимальное количество новых блоков. В этом случае необходимым условием для их создания должно стать решение сложной вычислительной задачи – примерно такой, как описывалось в концепте «Доказательства работы», или Proof-of-Work. В сети Биткоин подобный процесс создания блока называется «майнингом», по аналогии с добычей полезных ископаемых, где необходимо затратить серьезные усилия, прежде чем можно будет извлечь драгоценный ресурс из шахты и реализовать его, получив материальную выгоду. Как же осуществляется цифровой майнинг в сети Биткоин?

Майнинг в сети биткоин

Занимаясь интеграцией концепта Proof-of-Work в свой проект Bit Gold, который многие считают «предтечей» Биткоина, Ник Сабо столкнулся с проблемой, когда фиксированная сложность вычислительной задачи вела к потенциальной уязвимости, которая с большой вероятностью проявилась бы в будущем. Дело в том, что совокупная вычислительная мощность сети будет со временем естественным образом расти. Произойдет это по двум причинам: во-первых, вырастет общее количество узлов, а во-вторых, согласно закону Мура, усредненная вычислительная мощность отдельно взятого узла системы будет также постепенно увеличиваться. Таким образом, через какое-то время заложенная в логике проекта фиксированная сложность вычислительной задачи перестанет быть для сети проблемой. В конечном итоге сетевые узлы превратятся в «печатные станки» для электронных денег, что неизбежно спровоцирует в системе гиперинфляцию. Стоит ли сомневаться, что после этого все узлы системы будут материально демотивированы и едва ли захотят в дальнейшем участвовать в подобном проекте.

Напомним, что суть сложновычислимой задачи в проекте Bit Gold состояла в переборе хешей различных прообразов. А конечной целью было нахождение такого хеша, который бы считался для всей сети валидным – то есть в данном случае содержал определенное количество нулей в начале строки данных. Статическая сложность вычислительной задачи стала для Сабо одним из непреодолимых препятствий, которое так и не позволило BitGold увидеть свет. Однако Сатоши Накамото в своем проекте Биткоин эту задачу решил, и, как мы сейчас убедимся, достаточно элегантно.

На самом деле для данной проблемы напрашивается очевидное решение: если статическая сложность задачи является барьером для экономической стабильности системы, то необходимо сделать ее динамической. Как нам уже известно, для того, чтобы получить n нулевых бит в начале строки хеша, надо перебрать для хеширования максимум 2n прообразов. Очевидно, что чем больше число n, тем сложность задачи экспоненциально увеличивается. Накамото предложил хешировать заголовок создаваемого блока, начав с самой маленькой сложности. В этом случае нужно было получить всего восемь нулевых символов в начале строки хеша заголовка. Поскольку один символ занимает четыре бита, то необходимо было перебрать не более 232 вариантов, то есть около 4,3 млрд. А затем, по мере увеличения количества узлов в сети, которые пытаются искать валидные хеши, пропорционально поднимать сложность, увеличивая требования к количеству стартовых нулей.

Когда Накамото запустил свою сеть Биткоин в начале января 2009 года, в ней, помимо самого создателя системы, не было других участников. Поэтому первые блоки «намайнил» именно сам Накамото. Когда в сети Биткоин стали появляться другие узлы, сложность сети начала постепенно увеличиваться. Логика управления сложностью была заложена следующая: сложность сети должна быть такова, чтобы вне зависимости от количества узлов, которые ищут блоки, а также от их вычислительной мощности новый блок можно было бы найти в среднем не более и не менее чем за десять минут. Сложность пересчитывалась каждые 2016 блоков, то есть примерно один раз в две недели. Совокупное, реально затраченное время нахождения всех 2016 блоков разделялось на их количество, и полученный результат сравнивался с десятиминутным эталоном. Если блоки находились в среднем быстрее, сложность увеличивалась – то есть поднимались требования к количеству нулей в хеше заголовка блока. Если медленнее – требования уменьшались.

Теперь следует сделать отступление, чтобы разобраться, каким образом перебираются хеши в процессе майнинга. Поскольку хешируется заголовок блока, это означает, что хешируемая информация довольно статична. А это, в свою очередь, говорит о том, что при неизменном прообразе мы будем все время получать один и тот же хеш. Что входит в противоречие с нашей целью – найти «золотой» хеш, чтобы он начинался с большого количества нулей. Давайте взглянем еще раз на структуру заголовка блока, чтобы понять: есть ли там какая-либо динамическая величина, которая будет меняться настолько быстро, чтобы у майнера была возможность хешировать миллионы, миллиарды или даже триллионы прообразов в секунду?

Порядковый номер блока – информация сугубо статичная, которая меняться не будет. Номер версии блока также представляет собой фиксированное значение. Теперь что касается времени создания блока, которое выражается в секундах, прошедших с 1 января 1970 года. Логично было бы предположить, что оно будет меняться не чаще раза в секунду, что для нашей задачи является крайне низкой динамикой. Число транзакций в блоке и вычисленное из них корневое значение дерева Меркла – информация также относительно постоянная. Однако бывают случаи, когда во время поиска валидного хеша майнеру поступают новые транзакции с более высокой комиссией, чем те, что он ранее включил в блок, – тогда блок будет иметь смысл пересобрать заново. Но данная процедура также имеет достаточно низкую динамику и проблем с необходимым разнообразием хешей не решает.

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

По сути, процедура майнинга и сводится к поиску подходящего значения этого самого нонса, который, будучи добавленным к заголовку блока, позволит майнеру вычислить валидный хеш, дающий ему право на создание нового блока, безусловно принимаемого всей сетью. Однако процедура поиска необходимого значения нонса достаточно сложна. В сети Биткоин используется алгоритм хеширования SHA-256, который предполагает два цикла по 64 итерации хеширования каждый. По состоянию на весну 2019 года сложность сети Биткоин требует наличия 18 первых нулевых символов для нахождения валидного хеша, соответствующим 72 нулевым битовым значениям. Что требует примерно 272 или около 5 · 1021 переборов хешей. Много это или мало? Давайте попробуем сравнить это число, скажем, с количеством песчинок на всех пляжах нашей планеты. Ученые сопоставляют количество песчинок с величиной, приближенной к 1018. Таким образом, сложность нахождения нужного нам валидного хеша с такими требованиями сопоставима с процедурой перебора всех песчинок примерно на 5000 планет, условно подобных Земле. Вот пример такого валидного хеша, с требованием по сложности в 18 начальных нулей:


Как уже упоминалось, первые блоки сети Биткоин Сатоши Накамото находил самостоятельно и использовал для этого обычный компьютер. Как, собственно, и другие участники сети, которые стали постепенно в ней появляться. И на том самом начальном уровне сложности обычного процессора компьютера вполне хватало, чтобы находить блок за положенные в среднем десять минут. Однако по мере роста количества участников сети сложность стала автоматически пересчитываться в сторону увеличения, и в какой-то момент для обычного компьютерного процессора вычислительная задача стала «неподъемной». Тем не менее майнеры быстро нашли выход – они задействовали для поиска блоков не центральный процессор, а тот, который был установлен на их видеокартах. В силу специфики своей вычислительной архитектуры графический процессор гораздо быстрее рассчитывал хеши, чем центральный. Но через определенное время сложность возросла настолько, что и графический процессор перестал справляться с майнингом блоков. Правда, решение было найдено довольно скоро: в июне 2012 года компания Butterfly Labs начала поставлять специальное программно-аппаратное обеспечение под названием ASIC (Application-Specific Integrated Circuit, или «интегральная схема специального назначения»). Фактически это был небольшой специализированный компьютер, полностью оптимизированный только под одну задачу – перебирать хеши по алгоритму SHA-256 и делать это исключительно быстро. Началась эра сначала частного, а затем и промышленного майнинга Биткоина с использованием самых новейших аппаратных средств, производимых различными компаниями, активно конкурирующих между собой.


Для того чтобы понять, насколько увеличилась сложность сети за первые десять лет ее существования, рассмотрим понятие скорости перебора хешей, или «хешрейт» (hashrate). Различают хешрейт как отдельного устройства, так и совокупный хешрейт всей сети. Очевидно, что чем выше общий хешрейт сети Биткоин, тем выше сложность нахождения валидного хеша для создания блока. Иначе майнеры находили бы блоки слишком быстро, что противоречит логике, заложенной в блокчейн-систему. Вот как менялся хешрейт на протяжении десяти лет существования сети Биткоин (на примере логарифмического графика):


Первые устройства ASIC работали с хешрейтом 4,5 Гигахеш в секунду. То есть если бы они использовались в самом начале работы сети Биткоин на минимальной сложности, они находили бы валидный хеш примерно за одну секунду. Эта скорость была в 600 раз выше той, на которой вычислял первые блоки сам Сатоши Накамото, используя процессор своего компьютера. Устройства ASIC образца весны 2019 года, поставляемые компанией Bitmain, осуществляют перебор хешей со скоростью до 53 Терахеш в секунду. Это более чем в 10 000 раз быстрее по сравнению с первыми устройствами, представленными почти за семь лет до этого. Однако совокупный хешрейт сети Биткоин на своих пиковых показателях достигал совершенно космических значений – примерно 60 эксахешей в секунду, что составляет величину перебора всей сетью 6 · 1019 хешей за одну секунду. И тем не менее сложность задачи поиска валидного хеша такова, что даже настолько огромная совокупная вычислительная мощность всей сети позволяет майнить один блок за те же в среднем десять минут. О чем это говорит?

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

Рассматривая майнинговые фермы, объединенные в вычислительные пулы, мы плавно подходим к основной проблеме майнинга на основе консенсуса Proof-of-Work – исключительно большому потреблению электричества при работе майнингового оборудования. Современный высокоскоростной ASIC типа Bitmain S17 Pro потребляет мощность 2250 Вт, что составляет значительную величину, особенно если учесть, что из таких устройств комплектуют целые майнинговые фермы. К тому же эти устройства в процессе работы довольно сильно нагреваются, и их необходимо постоянно охлаждать, на что также расходуется электроэнергия. Организуя свою майниговую ферму, предприниматель несет в первую очередь расходы на приобретение и доставку самого майнингового оборудования, а также на аренду и оснащение специального помещения, где будет функционировать ферма.

Но все же основной статьей расхода для «фермера» будет оплата потребленного на майнинг электричества. Именно его стоимость и является наиболее критичным параметром при расчете доходности от деятельности по майнингу различных криптовалют, в первую очередь Биткоина. Совокупное же годовое потребление электроэнергии всей сетью Биткоин сопоставимо с потреблением электроэнергии крупным государством, входящим в список первых 30 стран мира по данному параметру. Речь идет о величине в 30–35 тераватт-часов в год, что составляет примерно 0,5–0,6 % всего суммарного потребления электроэнергии во всем мире. Аналитики прогнозируют, что если динамика увеличения потребления электричества сетью Биткоин сохранится на текущем уровне, то через три – четыре года Биткоин-майнеры начнут потреблять всю производимую в мире электроэнергию. Понятно, что подобный сценарий едва ли имеет шанс на реализацию – государственные регуляторы просто не позволят майнерам его осуществить.

Учитывая вышеизложенные факторы, следует признать, что будущее майнинга на базе консенсуса Proof-of-Work представляется достаточно туманным. Весьма вероятно, что правительства многих стран начнут ограничивать майнеров в потреблении ими электричества, например, через установку нормативных квот, которые им придется приобретать на специальных аукционах. Не исключено также, что в каких-то странах с особым дефицитом электроэнергии майнинг будет и вовсе законодательно запрещен. Особенно проблематичным представляется то, что все потребленное электричество уходит на решение математической задачи, ценность которой каждые десять минут полностью утрачивается. Иными словами, как только новый блок создан, решение задачи начинается сначала. Очевидно, что это исключительно неэффективное использование такого ценного ресурса, как электроэнергия – она расходуется фактически впустую, не принося человеческой цивилизации никакой существенной пользы (за исключением владельцев и сотрудников энергетических компаний).

Гораздо разумнее было бы поставить столь значительную вычислительную мощность на службу решению действительно насущных задач, например, на расчеты, связанные с поиском новых медицинских препаратов, или решения иных научных проблем, для которых требуются серьезные вычисления. Возможно, майнинг криптовалют в будущем эволюционирует в более эффективную для мирового сообщества форму, когда вычислительная работа при нахождении блоков будет направлена на решение полезных научных задач. Подобные проекты уже существуют, хотя и не завоевали пока популярности. В противном случае криптосообществу придется перейти на гораздо менее энергозатратные, чем Proof-of-Work, формы достижения консенсуса при создании блоков. И такие протоколы также активно разрабатываются и тестируются, чтобы впоследствии они могли занять доминирующую позицию в технологическом процессе создания новых блоков.

Возвращаясь к проблематике майнинга блоков в сети Биткоин, мы приходим к выводу, что это довольно дорогостоящая процедура для тех, кто инвестирует в нее свои материальные активы. Поэтому для них должна существовать прямая монетарная мотивация, чтобы они могли и дальше этим заниматься. Как упоминалось ранее, майнеры, создав блок, отчисляют в свою пользу всю комиссию от транзакций, которые они поместили в тело созданного ими блока. Однако совокупная величина этих комиссий не так уж велика, чтобы оправдать понесенные затраты для тех, кто содержит дорогостоящие инфраструктуры для майнинга. Также до сих пор мы не заостряли внимание на достаточно важном аспекте: для того, чтобы начать осуществлять денежные транзакции в сети Биткоин, эти средства должны в сети изначально откуда-то появиться. Поэтому основным вознаграждением для тех, кому посчастливилось успешно осуществить создание блока, является так называемое «майнинговое вознаграждение». Речь идет о сумме, выраженной в цифровых монетах Биткоин, которую получает майнер в момент создания каждого нового блока. Теперь мы вплотную подошли к понятию «криптовалюта» на примере цифровых монет сети Биткоин. Что же это за монеты, как и в каком количестве они появляются в сети Биткоин и какова может быть их материальная ценность?

Биткоин как криптовалюта

Казалось бы, что может быть проще, чем процесс эмиссии электронных денег? Для этого не нужно расходовать ресурсы, подобные тем, что используются в процессе чеканки металлических монет или для печати бумажных банкнот. Если система обращения электронных денег уже создана и успешно функционирует, то задача непосредственного выпуска новых цифровых монет сводится к вводу желаемой суммы эмиссии в настройки системы субъектом, ее контролирующим. Однако при подобном централизованном управлении денежными эмиссиями нет никакой гарантии, что владельцы системы не увлекутся избыточным «печатанием» необеспеченных электронных денег, поскольку это неизбежно приведет к неконтролируемой гиперинфляции. А вместе с тем и неминуемой утрате ими какой-либо ценности как платежных средств одновременно с доверием со стороны пользователей системы.

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

В качестве начального условия Накамото установил, что в момент запуска системы вознаграждение за создание блока будет составлять 50 биткоинов. А затем каждые четыре года оно будет сокращаться вдвое до тех пор, пока общее число биткоинов в системе не достигнет величины в 21 млн монет. Согласно расчетам, последний биткоин в системе будет создан около 2140 года, при этом уже к 2036 году будет получено более 99 % всех монет. А после того как все монеты будут выпущены и вознаграждение за создание блока упадет до нуля, майнерам придется довольствоваться лишь транзакционной комиссией, которую они будут отчислять в свою пользу при создании новых блоков. Предполагается, что к тому моменту стоимость одного биткоина будет настолько велика, что даже отсутствие майнингового вознаграждения никак не скажется на мотивации майнеров, поскольку собираемая ими транзакционная комиссия с лихвой окупит все их издержки на майнинговые процедуры.

К середине 2018 года майнинговое вознаграждение уже дважды сокращалось от первоначально установленного Накамото значения – сначала в 2012 году до 25 биткоинов, а затем в 2016 до 12,5 монет. Следующее снижение вознаграждения ожидается в мае 2020 года, и его величина составит 6,25 биткоинов. При этом совокупная транзакционная комиссия может доходить до одного биткоина и даже более. Однако это происходит только во время повышенной нагрузки на сеть, когда транзакций становится слишком много и комиссия за их включение в блок растет. В обычное же время при отсутствии серьезной нагрузки совокупная комиссия всех транзакций в блоках составляет значительно меньшие суммы.

Ограничивая максимально возможный объем конечной эмиссии биткоинов величиной в 21 млн монет, Накамото преследовал в первую очередь цель защиты от инфляции. Создатель проекта надеялся, что стоимость биткоина в перспективе будет только расти и может в конечном итоге достичь весьма серьезных величин. Поэтому было определено, что каждый биткоин может дробиться на 100 млн частей, или, другими словами, иметь восемь знаков после запятой. Мельчайшую частичку в 0,00000001 биткоина впоследствии стали называть «сатоши» в честь создателя системы Биткоин. Очевидно, что если предел эмиссии жестко ограничен, то вместо инфляции система будет иметь дело с ее полной противоположностью – дефляцией, когда все товары и услуги, номинированные в биткоинах, будут со временем уменьшаться в абсолютных значениях своей стоимости. Но даже если когда-нибудь стоимость одного сатоши станет равна одному американскому центу, общая ценность всех монет биткоин составит около $21 трлн, что вполне позволит этой криптовалюте стать массовым платежным средством в мировом масштабе.

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

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

Во-первых, доминирование одного узла или их группы, объединенных общей целью, может привести к тому, что этот консорциум злоумышленников может взять под контроль весь майнинг блоков и, как следствие, все новые транзакции сети. Помимо того, что они фактически монополизируют доход от вознаграждения за майнинг, они смогут включать в блоки только угодные им транзакции. И в первую очередь будут включаться транзакции, которые допускают повторное использование одних и тех же монет, то есть осуществляют «двойную трату». Единственное, что они не могут сделать – это вмешиваться в данные ранее созданных блоков, для этого даже 51 % вычислительной мощности будет явно недостаточно. Дело в том, что в этом случае возникнет необходимость пересчитать все хеши блоков, начиная от изменяемого и заканчивая последним в цепочке с учетом внесенных модификаций. В результате нужно будет найти новые нонсы для всех пересобранных блоков и предложить сети новую цепочку довольно приличной глубины. В то же время вся остальная сеть продолжит обсчитывать и формировать блоки, начиная с последнего, принятого ранее всей сетью (то есть гораздо более позднего блока, нежели тот, который обсчитывают злоумышленники). Что же касается вопроса двойной траты, то это действительно может стать серьезной проблемой. Кстати, именно она в свое время не позволила создать децентрализованные цифровые деньги в «доблокчейновый» период. Для того чтобы понять, почему «атака 51 %» позволит осуществлять двойную трату, рассмотрим следующий пример.

Предположим, в сети имеется узел, обладающий большей вычислительной мощностью, чем все остальные узлы вместе взятые. Данный узел выбирает какой-то из блоков в качестве «точки отсчета» и начинает осуществлять от нее майнинг новых блоков, не демонстрируя их некоторое время всей остальной сети. Одновременно с этим он будет расходовать имеющиеся у него криптосредства в основной цепочке, пока не дождется, что все они будут однозначно подтверждены сетью. То есть в основной цепочке появится еще минимум пять блоков после того, в который были помещены расходные транзакции вредоносного узла. Затем узел раскроет всей сети параллельно созданную им альтернативную цепочку – более длинную, поскольку вычислительная мощность этого узла была совокупно больше, чем у всех остальных, и сеть будет вынуждена признать данное ответвление как истинное. При этом старые блоки, ранее рассчитанные и подтвержденные всей сетью, придется отбросить, то есть придать им статус так называемых «осиротевших блоков» (orphanedblocks), утративших связь с главной цепочкой. Понятно, что вместе с ними будут автоматически отброшены и все расходные транзакции вредоносного узла, как будто их и не существовало вовсе.

Нетрудно догадаться, что альтернативные блоки, предложенные сети самим узлом-мошенником, никаких принадлежащих ему расходных транзакций содержать не будут. Таким образом, несмотря на то, что злоумышленник потратил свои средства ранее в «предыдущей реальности» и получил за них какие-то товары, услуги или даже иную криптовалюту, он через какое-то время возвращает все свои активы назад, и сеть будет вынуждена с этим соглашаться. Казалось бы, для любой блокчейн-системы, создающей блоки по принципу Proof-of-Work, это убийственная проблема. Однако на практике реализовать подобный сценарий исключительно сложно – и организационно, и монетарно, а в ряде случаев это может даже не иметь практического смысла. Попробуем объяснить, почему.

Начнем с того, что организовать подобную атаку легко лишь в теории. Представим себе, какой объем вычислительной мощности нужно задействовать, чтобы перехватить на себя более половины хешрейта какой-либо сети, особенно если это сеть Биткоин, совокупная скорость перебора хешей которой измеряется астрономическими величинами. Для оценки эффективности подобных атак для злоумышленников необходимо оперировать понятием «стоимость атаки». Привлечение серьезных вычислительных мощностей – вообще операция крайне монетарно затратная. А если речь идет о порядках, требуемых для атаки на такую мощную сеть, как Биткоин, то здесь явным образом вырисовываются как минимум несколько практически не решаемых проблем.



Поделиться книгой:

На главную
Назад