Bitcoin напоминает швейцарские механические часы: снаружи четко выполняет задачу, в понимании которой нет ничего сложного. Но если открыть заднюю крышку, то можно увидеть нетривиальный механизм, состоящий из множества шестеренок и прочих деталей. Однако полностью разобраться в том, как все это работает, технически подкованному человеку вполне реально.
Одно из первых подробных технических описаний Bitcoin на русском было опубликовано в начале 2011 года на Хабре в статье «Bitcoin. Как это работает». Как правильно пишет хабраюзер OpenMinded: «У Bitcoin есть такая особенность — чем больше начинаешь в нем разбираться, тем больше возникает новых вопросов. Есть только два выхода — либо разобраться до конца, либо просто научиться пользоваться интерфейсом программы. Иначе не будет покидать чувство, что где-то обязательно должен быть подвох».
Что такое криптовалюта? Если кратко, то это децентрализованная валюта с защитой от повторного использования, основанной на достижениях современной криптографии. Идея состоит в том, что каждая транзакция необратима и подтверждается вновь генерируемыми блоками, отвечающими определенным требованиям. Эти блоки вычисляются всем сообществом, объединяются в цепочку и доступны всем для просмотра в виде единой базы данных. Процедура вычисления блоков называется майнинг.
Сеть построена таким образом, что один блок находится с определенной периодичностью, независимо от вычислительных мощностей, — то есть сложность вычислений саморегулируется. При этом, пока сеть растет, каждый вновь сгенерированный блок содержит еще и новые монеты. В случае с Bitcoin и еще некоторыми видами криптовалют количество монет, которые могут находиться в обращении, ограничено на уровне протокола, и количество вновь добываемых монет постепенно уменьшается в геометрической прогрессии так, что оно никогда не превысит заданного лимита. Каждый пользователь, который сгенерировал блок, получает фиксированную награду, а также комиссию транзакций, которые он подтвердил, включив их в блок.
Технология Bitcoin является одним из первых успешных практических решений так называемой задачи о византийских генералах. Кратко она формулируется так: как установить доверие между сторонами, связанными только по каналу связи, которому нельзя доверять? Одним из ключевых моментов в решении служит криптографический метод proof-of-work — те самые «бесполезные» вычисления, которые заведомо должны проводиться долго, но доказательство того, что они были, должно проверяться моментально.
Bitcoin-клиенты делятся на два вида: толстые/тяжелые (Bitcoin-Qt, Armory) и тонкие/легкие (Electrum, Multibit). Отличие заключается в том, что толстые клиенты для своей работы требуют локальную копию всей базы данных с логом всех транзакций за все время существования сети, а тонкие клиенты выкачивают информацию из децентрализованной сети только по мере необходимости. Для существования сети необходимо наличие в ней толстых клиентов, однако и тонкие клиенты дают возможность полноценно использовать Bitcoin — например, это особенно логично на смартфонах.
Со временем размер базы данных будет только расти, так же как и емкость носителей информации. Из чего же состоит БД? БД — это блокчейн, цепочка блоков данных в формате JSON. Каждый блок содержит всю необходимую для функционирования сети информацию, свой порядковый номер и хеш-сумму предыдущего блока. Естественно, в самом первом блоке такой хеш-суммы нет. Причем к хешу (шестнадцатеричному числу) выдвигаются строгие требования: он должен начинаться с определенного количества нулей, а если точнее, должен быть меньше специального параметра под названием «bits». Обратно пропорциональный ему параметр называется «сложность». Этот механизм позволяет надежно хранить все прочие необходимые данные в распределенной сети, ведь если изменить хотя бы один символ в блоке, то его хеш изменится целиком и все нули моментально пропадут.
Что же за вычисления происходят при майнинге и как добиться таких красивых хешей, которые, по сути, являются абсолютно случайными числами? Майнинг — это не что иное, как брутфорс. Брутфорс, который осуществляется не с целью атаки, а с целью защиты. Система такова, что брутфорсить в ней с целью защиты намного выгоднее, чем с целью атаки. Просто потому, что с целью защиты брутфорсит большинство (а на практике все).
Несмотря на то что хеш-функция вычисляется по строгому математическому алгоритму, брутфорс с целью поиска красивого хеша возможен за счет параметра попсе. Программа-майнер просто перебирает различные значения попсе одно за другим, вычисляет хеш блока, и если в один прекрасный момент повезет и хеш будет отвечать параметру сложности, то счастливчик получит награду в виде новых биткоинов и комиссий всех транзакций, включенных в блок.
СЕБЕСТОИМОСТЬ БИТКОИНА
До монополии центробанков деньгами служили золото и серебро, у которых есть значительная себестоимость добычи, в то время как стоимость печати стодолларовой банкноты, не обеспеченной редким активом, в 800 раз ниже ее номинала. А себестоимость эмиссии цифрового доллара вообще нулевая.
У биткоинов же, несмотря на их цифровую сущность, существует значительная себестоимость, аналогично золотым и серебряным монетам. Причем чем больше биткоинов существует, тем эта себестоимость выше, аналогично тому, как золото или серебро со временем все сложнее добывать из-за их ограниченного количества.
Максимально возможное количество биткоинов также ограниченно, поскольку это сумма убывающей геометрической прогрессии, которая конечна. Стоимость необеспеченных бумажных денег существует только за счет законов, обязывающих принимать их в качестве оплаты и монополии центробанков. Если полностью демонополизировать печатный станок, бумажные или цифровые деньги не могли бы одновременно иметь стоимость и не иметь реального обеспечения, если печатные станки имели бы возможность осуществлять неограниченную эмиссию.
Именно поэтому в системе Bitcoin, в которой отсутствует какая-либо монополия, нет возможности неограниченной эмиссии. Даже нематериальность биткоинов — их преимущество как платежного средства перед золотом из-за отсутствия массы и объема, а также наличия неограниченной точной делимости (в данный момент делимость до восьмого знака после запятой, однако при необходимости ее можно увеличить), чтобы их точно «хватило на всех».
Но есть и недостаток. Биткоины уступают золоту в том, что они в данный момент не имеют тотального признания, государства пока еще не хранят в них свои резервы в отличие от золота (хотя Южная Осетия об этом однажды задумывалась). И даже наоборот — ряд центробанков открыто выступил против биткоинов. Но в серебре резервы государства или центробанки тоже не хранят.
МЕХАНИЗМЫ КОНТРОЛЯ
Итак, ограничение эмиссии Bitcoin осуществляется за счет сложности. Но может возникнуть вопрос: а как же регулируется этот параметр в никем не регулируемой системе? Во-первых, в блоки включается время в формате UNIX, то есть количество секунд, прошедших с полуночи первого января 1970 года (так называемая эра UNIX). Время берется из часов системы, на которой был найден блок. Этот параметр напрямую влияет на сложность майнинга: ее периодически пересчитывают так, чтобы среднее время между блоками оставалось равным десяти минутам.
Возникает вопрос: может ли майнер мухлевать со сложностью, специально подсовывая неправильное время? Нет, поскольку майнер, который найдет следующий блок цепочки, будет случайным. Небольшие отклонения в системном времени, конечно же, некритичны, но если отклонение сильное, то награда за нахождение блока с неправильным временем получена не будет, так как такой блок станет орфаном.
Блоки-орфаны — это еще один важный элемент в механизме самоконтроля Bitcoin. Они могут возникать даже при отсутствии неправильного времени — например, когда два разных блока найдены почти одновременно, это вполне штатная ситуация.
Допустим, два независимых друг от друга майнера одновременно нашли два блока с требуемыми хешами и о блоке-конкуренте узнали только после нахождения своего. У таких блоков будут одни и те же порядковые номера, но сами блоки вряд ли будут идентичными, поскольку адреса для зачисления награды в них будут разными. Но в блокчейне недопустимы блоки с одинаковыми порядковыми номерами. Какой же из них туда войдет? Дело в том, что, скорее всего, разные майнеры будут искать попсе для нового блока, включая в него разные хеши. В цепочку войдет тот блок, хеш которого раньше войдет в следующий.
А что, если почти одновременно найдены два новых блока с одинаковыми порядковыми номерами, но теперь уже с разными хешами предыдущего блока? OK, не проблема. Просто ищем следующий блок. Теоретически параллельные цепочки могут постоянно удлиняться, но чем больше длина, тем меньше вероятность существования таких раздвоений цепочки.
Согласно протоколу биткоина и заложенному алгоритму в программном коде Bitcoin-клиентов, награда за включенный в цепочку блок будет считаться полученной только после включения в цепочку 120 последующих блоков. То есть максимально допустимая длина временно раздвоенной цепочки — 120 блоков. На практике длина временного раздвоения цепочки редко достигает даже трех блоков, так что вероятность, что она достигнет 120, стремится к нулю. То же самое можно сказать и про коллизию адресов, но, чтобы вероятность коллизии можно было действительно считать нулевой, необходимо, чтобы генератор случайных чисел создавал действительно случайные числа.
УСЛОЖНЯЕМ ЗАДАЧУ: МАЙНЕРСКИЕ ПУЛЫ
Все, что я говорил выше о майнерах (например, про системное время), не относится к майнерам, объединяющимся в вычислительный пул, за исключением децентрализованного пула P2Pool. В случае майнинга на централизованном пуле непосредственным поиском блоков занимается сам пул, платя своим пользователям за предоставление ему вычислительных мощностей. В настоящее время в одиночку майнингом могут заниматься только специальные дата-центры.
Как же пул узнает о том, что пользователь ищет для него блок? Доказательством усиленного поиска блока служат присылаемые пользователем шары. Шара — это блок, хеш которого отвечает пониженному требованию сложности. Сеть, конечно же, такой блок не примет, и в блокчейн он не войдет. Шары требуются только пулу, чтобы удостовериться, что требуемый попсе в блоке действительно ищется.
ВОПРОСЫ?
Как я и предупреждал, чем больше говоришь о технологии Bitcoin, тем больше вопросов возникает. Я описал только часть базовых вещей, чтобы дать хотя бы небольшое представление о том, как же протокол справляется с возложенной на него задачей. Всем интересующимся советую обратиться, например, к англоязычной вики (bitcoin.it). В протоколе биткоина есть еще много интересных вещей, например, есть даже специальный скриптовый язык, который, скорее всего, будет использоваться на практике в будущем.
(c) Антон Дементьев