Содержание статьи
Bitcoin напоминает швейцарские механические часы: снаружи четко выполняет задачу, в понимании которой нет ничего сложного. Но если открыть заднюю крышку, то можно увидеть нетривиальный механизм, состоящий из множества шестеренок и прочих деталей. Однако полностью разобраться в том, как все это работает, технически подкованному человеку вполне реально.
Одно из первых подробных технических описаний Bitcoin на русском было опубликовано в начале 2011 года на Хабре в статье «Bitcoin. Как это работает». Как правильно пишет хабраюзер OpenMinded: «У Bitcoin есть такая особенность — чем больше начинаешь в нем разбираться, тем больше возникает новых вопросов. Есть только два выхода — либо разобраться до конца, либо просто научиться пользоваться интерфейсом программы. Иначе не будет покидать чувство, что где-то обязательно должен быть подвох».
Что такое криптовалюта? Если кратко, то это децентрализованная валюта с защитой от повторного использования, основанной на достижениях современной криптографии. Идея состоит в том, что каждая транзакция необратима и подтверждается вновь генерируемыми блоками, отвечающим определенным требованиям. Эти блоки вычисляются всем сообществом, объединяются в цепочку и доступны всем для просмотра в виде единой базы данных. Процедура вычисления блоков называется майнинг.
Сеть построена таким образом, что один блок находится с определенной периодичностью, независимо от вычислительных мощностей, — то есть сложность вычислений саморегулируется. При этом, пока сеть растет, каждый вновь сгенерированный блок содержит еще и новые монеты. В случае с Bitcoin и еще некоторыми видами криптовалют количество монет, которые могут находиться в обращении, ограничено на уровне протокола, и количество вновь добываемых монет постепенно уменьшается в геометрической прогрессии так, что оно никогда не превысит заданного лимита. Каждый пользователь, который сгенерировал блок, получает фиксированную награду, а также комиссию транцакций, которые он подтвердил, включив их в блок.
Первая криптовалюта
Как заметил Марк Андрессен (один из создателей первого графического интернет-браузера NCSA Mosaic и основатель венчурного фонда, активно инвестирующего в Bitcoin-стартапы), Bitcoin стал результатом двух десятилетий интенсивных исследований и разработок почти анонимных энтузиастов. И действительно, первая электронная наличность DigiCash появилась в 1990 году благодаря усилиям криптографа Дэвида Чома. Однако система DigiCash имела три существенных недостатка по сравнению с Bitcoin: она была централизованной, закрытой и слишком сильно опередила свое время, ведь даже NCSA Mosaic появился только в 1993 году, а фирма Чома обанкротилась в 98-м как раз перед массовым распространением и коммерциализацией интернета.
Технология Bitcoin является одним из первых успешных практических решений так называемой задачи о византийских генералах. Кратко она формулируется так: как установить доверие между сторонами, связанными только по каналу связи, которому нельзя доверять? Одним из ключевых моментов в решении служит криптографический метод proof-of-work — те самые «бесполезные» вычисления, которые заведомо должны проводиться долго, но доказательство того, что они были, должно проверяться моментально.
Bitcoin-клиенты делятся на два вида: толстые/тяжелые (Bitcoin-qt, Armory) и тонкие/легкие (Electrum, Multibit). Отличие заключается в том, что толстые клиенты для своей работы требуют локальную копию всей базы данных с логом всех транзакций за все время существования сети, а тонкие клиенты выкачивают информацию из децентрализованной сети только по мере необходимости. Для существования сети необходимо наличие в ней толстых клиентов, однако и тонкие клиенты дают возможность полноценно использовать Bitcoin — например, это особенно логично на смартфонах.
20 Гб — текущий объем базы данных обо всех операциях в Bitcoin
![Объём базы данных каждые 10 минут немного увеличивается](https://xakep.ru/wp-content/uploads/2014/11/blockchain_size.png)
Со временем размер базы данных будет только расти, так же как и емкость носителей информации. Из чего же состоит БД? БД — это блокчейн, цепочка блоков данных в формате JSON. Каждый блок содержит всю необходимую для функционирования сети информацию, свой порядковый номер и хеш-сумму предыдущего блока. Естественно, в самом первом блоке такой хэш-суммы нет. Причем к хешу (шестнадцатеричному числу) выдвигаются строгие требования: он должен начинаться с определенного количества нулей, а если точнее, должен быть меньше специального параметра под названием «bits». Обратно пропорциональный ему параметр называется «сложность». Этот механизм позволяет надежно хранить все прочие необходимые данные в распределенной сети, ведь если изменить хотя бы один символ в блоке, то его хеш изменится целиком и все нули моментально пропадут.
Что же за вычисления происходят при майнинге и как добиться таких красивых хешей, которые, по сути, являются абсолютно случайными числами? Майнинг — это не что иное, как брутфорс. Брутфорс, который осуществляется не с целью атаки, а с целью защиты. Система такова, что брутфорсить в ней с целью защиты намного выгоднее, чем с целью атаки. Просто потому, что с целью защиты брутфорсит большинство (а на практике все).
Несмотря на то что хеш-функция вычисляется по строгому математическому алгоритму, брутфорс с целью поиска красивого хеша возможен за счет параметра nonce. Программа-майнер просто перебирает различные значения nonce одно за другим, вычисляет хеш блока, и если в один прекрасный момент повезет и хеш будет отвечать параметру сложности, то счастливчик получит награду в виде новых биткоинов и комиссий всех транзакций, включенных в блок.
Себестоимость биткойна
До монополии центробанков деньгами служили золото и серебро, у которых есть значительная себестоимость добычи, в то время как стоимость печати стодолларовой банкноты, не обеспеченной редким активом, в 800 раз ниже ее номинала. А себестоимость эмиссии цифрового доллара вообще нулевая.
У биткоинов же, несмотря на их цифровую сущность, существует значительная себестоимость, аналогично золотым и серебряным монетам. Причем чем больше биткоинов существует, тем эта себестоимость выше, аналогично тому, как золото или серебро со временем все сложнее добывать из-за их ограниченного количества.
Максимально возможное количество биткоинов также ограниченно, поскольку это сумма убывающей геометрической прогрессии, которая конечна. Стоимость необеспеченных бумажных денег существует только за счет законов, обязывающих принимать их в качестве оплаты и монополии центробанков. Если полностью демонополизировать печатный станок, бумажные или цифровые деньги не могли бы одновременно иметь стоимость и не иметь реального обеспечения, если печатные станки имели бы возможность осуществлять неограниченную эмиссию.
Именно поэтому в системе Bitcoin, в которой отсутствует какая-либо монополия, нет возможности неограниченной эмиссии. Даже нематериальность биткоинов — их преимущество как платежного средства перед золотом из-за отсутствия массы и объема, а также наличия неограниченной точной делимости (в данный момент делимость до восьмого знака после запятой, однако при необходимости ее можно увеличить), чтобы их точно «хватило на всех».
Но есть и недостаток. Биткоины уступают золоту в том, что они в данный момент не имеют тотального признания, государства пока еще не хранят в них свои резервы в отличие от золота (хотя Южная Осетия об этом однажды задумывалась). И даже наоборот — ряд центробанков открыто выступил против биткоинов. Но в серебре резервы государства или центробанки тоже не хранят.
Механизмы контроля
Итак, ограничение эмиссии Bitcoin осуществляется за счет сложности. Но может возникнуть вопрос: а как же регулируется этот параметр в никем не регулируемой системе? Во-первых, в блоки включается время в формате UNIX, то есть количество секунд, прошедших с полуночи первого января 1970 года (так называемая эра UNIX). Время берется из часов системы, на которой был найден блок. Этот параметр напрямую влияет на сложность майнинга: ее периодически пересчитывают так, чтобы среднее время между блоками оставалось равным десяти минутам.
Возникает вопрос: может ли майнер мухлевать со сложностью, специально подсовывая неправильное время? Нет, поскольку майнер, который найдет следующий блок цепочки, будет случайным. Небольшие отклонения в системном времени, конечно же, некритичны, но если отклонение сильное, то награда за нахождение блока с неправильным временем получена не будет, так как такой блок станет орфаном.
Блоки-орфаны — это еще один важный элемент в механизме самоконтроля Bitcoin. Они могут возникать даже при отсутствии неправильного времени — например, когда два разных блока найдены почти одновременно, это вполне штатная ситуация.
Допустим, два независимых друг от друга майнера одновременно нашли два блока с требуемыми хешами и о блоке-конкуренте узнали только после нахождения своего. У таких блоков будут одни и те же порядковые номера, но сами блоки вряд ли будут идентичными, поскольку адреса для зачисления награды в них будут разными. Но в блокчейне недопустимы блоки с одинаковыми порядковыми номерами. Какой же из них туда войдет? Дело в том, что, скорее всего, разные майнеры будут искать nonce для нового блока, включая в него разные хеши. В цепочку войдет тот блок, хеш которого раньше войдет в следующий.
А что, если почти одновременно найдены два новых блока с одинаковыми порядковыми номерами, но теперь уже с разными хешами предыдущего блока? ОК, не проблема. Просто ищем следующий блок. Теоретически параллельные цепочки могут постоянно удлиняться, но чем больше длина, тем меньше вероятность существования таких раздвоений цепочки. Согласно протоколу биткоина и программному коду Bitcoin-клиентов, награда за включенный в цепочку блок будет считаться полученной только после включения в цепочку 120 последующих блоков. То есть максимально допустимая длина временно раздвоенной цепочки — 120 блоков. На практике длина временного раздвоения цепочки редко достигает даже трех блоков, так что вероятность, что она достигнет 120, стремится к нулю. То же самое можно сказать и про коллизию адресов, но, чтобы вероятность коллизии можно было действительно считать нулевой, необходимо, чтобы генератор случайных чисел создавал действительно случайные числа.
![Более короткие цепочки отсекаются. Пока временное раздвоение существует, транцакции в параллельных цепочках как правило дублируются.](https://xakep.ru/wp-content/uploads/2014/11/blockchain.png)
Усложняем задачу: майнерские пулы
Все, что я говорил выше о майнерах (например, про системное время), не относится к майнерам, объединяющимся в вычислительный пул, за исключением децентрализованного пула P2Pool. В случае майнинга на централизованном пуле непосредственным поиском блоков занимается сам пул, платя своим пользователям за предоставление ему вычислительных мощностей. В настоящее время в одиночку майнингом могут заниматься только специальные дата-центры.
Как же пул узнает о том, что пользователь ищет для него блок? Доказательством усиленного поиска блока служат присылаемые пользователем шары. Шара — это блок, хеш которого отвечает пониженному требованию сложности. Сеть, конечно же, такой блок не примет, и в блокчейн он не войдет. Шары требуются только пулу, чтобы удостовериться, что требуемый nonce в блоке действительно ищется.
![Текущее распределение вычислительных мощностей между пулами.](https://xakep.ru/wp-content/uploads/2014/11/pools.png)
Вопросы?
Как я и предупреждал, чем больше говоришь о технологии Bitcoin, тем больше вопросов возникает. Я описал только часть базовых вещей, чтобы дать хотя бы небольшое представление о том, как же протокол справляется с возложенной на него задачей. Всем интересующимся советую обратиться, например, к англоязычной вики. В протоколе биткоина есть еще много интересных вещей, например, есть даже специальный скриптовый язык, который, скорее всего, будет использоваться на практике в будущем.
Интереcные форки
Большинство форков Bitcoin, включая вторую по популярности криптовалюту Litecoin, лучше подходящую для микроплатежей аналогично серебру, мало чем отличаются от оригинала. Существует около сотни мусорных клонов Bitcoin, шансы на значительное признание у которых крайне низки.
- Litecoin появился в 2011 году. В отличие от Bitcoin, где в качестве алгоритма хеширования используется SHA-256, Litecoin использует scrypt, который более требователен к памяти, что затрудняет разработку ASIC-майнеров. Помимо этого, общее количество монет, находящихся в обращении, в четыре раза больше, чем у Bitcoin, что составляет 750 миллионов. Еще стоит заметить, что периодичность нахождения блоков у Litecoin составляет две с половиной минуты против десяти минут у Bitcoin.
- PPCoin, он же Peercoin (август 2012), отличается от Bitcoin тем, что использует не только криптогафический метод защиты proof-of-work, использующий вычислительную мощность, но и proof-of-stake, использующий монеты, которые долго лежат без движения, за которые также начисляют награду. Для того, что пробить защиту proof-of-stake нужно заполучить половину всей внутренний денежной массы системы. Но если кто-то начнёт её скупать, то по закону рынка пиркоины сразу же начнут расти в цене, что очень сильно усложнит их скупку. Кроме того, нужно отметить, что конечного верхнего предела общего количества пиркоинов нет, хотя скорость их появления конечно же строго ограничена. Автор посчитал, что не стоит излишне стимулировать накопления как в Bitcoin.
- Dogecoin — яркий пример того, что криптовалюты еще не устоялись. Появившись в конце ноября — начале декабря 2013 года, Dogecoin объединил один из интернет-мемов с криптовалютой, приобретя тем самым бешеную популярность. С технической же точки зрения Dogecoin от Litecoin почти ничем не отличается. Не исключено, что к моменту выхода номера про данную валюту уже забудут, — точно так же, впрочем, не исключено и обратное.
- Primecoin — еще одна криптовалюта от автора Peercoin. На этот раз он реализовал криптовалюту с полезными вычислениями — поиском простых чисел. Кстати, за нахождение ранее неизвестных простых чисел даже объявлены денежные вознаграждения (не в рамках данной системы, а вообще, то есть за доллары/фиат). Так как система появилась недавно, сомнительно, что с помощью нее были найдены ранее неизвестные простые числа.