эксперт
Несмотря на рост популярности Bitcoin, об этой криптовалюте продолжают слагаться мифы. С «монетами» (их обозначают BTC) связывают какие-то уникальные числа, которых почему-то ограниченное количество. При этом совершенно забывается роль Bitcoin-сообщества. Мне кажется, что всем будет полезно отдать себе отчет в том, что это не технологическая, а социальная инновация. Принципы работы Bitcoin очень остроумно составлены и при этом просты для понимания. Социальные идеи проекта стали возможны благодаря развитию технологий. Прежде всего — коммуникационных и криптографических.
Если вы не собираетесь самостоятельно анализировать защищенность криптовалюты или создавать программы, реализующие протоколы Bitcoin, то не придется и вникать в подробности используемых криптографических алгоритмов — достаточно поверить в их надежность (для работы выбраны алгоритмы, которым не первый год доверяют весьма уважаемые эксперты, а используют их крупнейшие финансовые организации). Для понимания работы нам потребуется освоить всего несколько базовых элементов. Чтобы не утонуть в подробностях, мы в дальнейшем не будем оговаривать различные вариации действий (на самом деле протокол Bitcoin довольно открыт и может быть существенно расширен при необходимости). Рассмотрим лишь самые простые операции.
Транзакции
В основе всей работы лежит понятие транзакции. В общем-то, оно мало отличается от общепринятого. Все транзакции публичны и доступны всем пользователям.
Протокол Bitcoin определяет, что транзакция — это раздел данных, который описывает перевод отправителем монет (BTC), ранее переведенных ему, новому получателю, который соответствует некоторым условиям, например, имеет определенный Bitcoin-адрес (можно также указать несколько получателей и причитающиеся каждому из них суммы). Под «ранее переведенными монетами» подразумевается результат подтвержденных транзакций, на которые даются ссылки и доказательства, что отправитель в новой транзакции являлся получателем в предшествующих транзакциях. Как минимум одна уже свершившаяся транзакция должна быть указана как «вход», но если вы получали монеты в результате нескольких транзакций, то вы вольны все их объединить и перераспределить одной транзакцией, просто перечислив во входящей части несколько соответствующих ссылок. Широковещательная рассылка по всем пользователям проекта транзакции (то есть раздела данных, описывающего переводы) и составляет начало процесса платежа.
Для того чтобы платеж стал необратимым, а результатом перевода можно было воспользоваться, транзакция нуждается в подтверждении. Таким подтверждением служит включение её в запечатанный блок. Вот в этот момент и проявляется социальный характер проекта, так как создание блоков (и подтверждение транзакций) — процесс, добровольно выполняемый сообществом пользователей Bitcoin.
Блоки и их цепочки
Часть пользователей Bitcoin принимает участие в генерации блоков (на сегодняшний день это примерно каждый четвертый пользователь). Генерация блоков вознаграждается (за каждый сгенерированный блок его создатели получают вновь «добытые» монеты и комиссии за транзакции, которые включены в блок). Блоки нумеруются и связываются в цепочку (каждый следующий блок содержит информацию о предыдущем блоке, позволяющую легко проверить, не был ли подменен предыдущий блок). Каждый пользователь получает доступ ко всей цепочке блоков и, таким образом, у каждого пользователя хранятся все транзакции, которые происходили в сообществе. До тех пор, пока честных пользователей больше, чем мошенников, подменить блок или транзакцию нереально.
Необходимость взаимодействия большого числа пользователей при создании блоков определяется сложностью создания блока. Дело в том, что в структуру блока, кроме списка транзакций, которые произошли за время генерации блока, включаются еще и специальные поля. Значения этих полей у действительного блока должны удовлетворять столь сложным условиям, что найти эти значения по силам только обладателю невероятной вычислительной мощи. Сложность задачи поиска может легко изменяться и всегда удерживается на таком уровне, чтобы время поиска блока всем сообществом составляло около 10 минут. В настоящее время суммарная производительность тех, кто участвует в генерации блоков, составляет тысячи петафлопс, то есть количество операций с плавающей запятой, необходимых для генерации блока, определяется числом с 21 нулем!
Итак, сообщество примерно каждые десять минут генерирует новый блок и включает в него все произошедшие с момента окончания генерации предыдущего блока транзакции, удовлетворяющие требованиям протокола Bitcoin. Сгенерированный блок присоединяется к цепочке (рассылается всем участникам проекта). Транзакции становятся подтвержденными с этого момента, все получатели, упомянутые в транзакциях, могут тратить деньги (создавать свои транзакции), а сообщество начинает поиск следующего блока. Динамику процесса создания блоков можно посмотреть на многих специализированных сайтах проекта, например, на сайте Bitcoin watch.
Сложность создания блоков является своего рода гарантией от их подделки и рассылки фальшивок, поскольку проверить, соответствует ли блок требованиям протокола Bitcoin — довольно просто, а найти значения полей блока, удовлетворяющих этим требованиям с измененными значениями транзакций — невероятно сложно.
Вознаграждение за создание блока снижается вдвое после генерации каждых 210000 блоков. Поскольку темп генерации поддерживается примерно постоянным (блок за десять минут), то известно, что вознаграждение «за добычу» снижается примерно раз в четыре года. В настоящий момент вознаграждение составляет 25 BTC (это значение действует с 28.11.2012, до этого дня вознаграждение составляло 50 BTC). Общее количество добытых монет определяется суммой геометрической прогрессии и никогда не превысит 210000*50*2=21000000 монет.
Bitcoin-адреса и их владельцы
Последнее понятие, которое нам необходимо, чтобы не путаться в представлениях о работе криптовалюты — это Bitcoin-адреса. Программное обеспечение, поддерживающее работу с Bitcoin-сетью, генерирует для пользователя пары криптографических ключей: в каждой паре два ключа: открытый и секретный. Сгенерированная пара сохраняется в так называемом кошельке пользователя (файл wallet.dat). Открытый ключ длиной 512 бит преобразуется в Bitcoin-адрес, состоящий из цифр и букв латинского алфавита так, что проверить соответствие открытого ключа адресу — очень просто, а получить из адреса значение ключа — практически нереально. Секретный ключ остается неизвестным никому и хранится только у пользователя. При создании транзакции, на входе которой получение монет на Bitcoin-адрес, пользователь объявляет свой публичный ключ, что позволяет подтвердить, что он был получателем в предшествующей транзакции, а также подписывает при помощи секретного ключа характеристики этой транзакции. Проверить подпись (и корректность создаваемой транзакции) позволяет открытый ключ, а сгенерировать подпись можно только владея секретным ключом. Таким образом, доступ к переведенным деньгам, несмотря на то, что все транзакции видны всем, имеет лишь владелец секретного ключа.
Каждый пользователь может иметь неограниченное количество Bitcoin-адресов и соответствующих им ключей. Более того, рекомендуется использовать новый ключ для каждой новой транзакции, чтобы сохранять анонимность распространения монет. В частности, в транзакции, в которой вы тратите не все полученные на входе ее деньги, остаток вы можете зачислять на новый собственный адрес, таким образом, никто из внешних наблюдателей не может оценить, у кого из пользователей накапливаются монеты, и сколько их у него.