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

Сторонники Bitcoin возлагали на первую децентрализованную электронную валюту огромные надежды. Удастся ли их оправдать — большой вопрос, особенно в России. Дело идет к тому, что в нашей стране Bitcoin просто запретят. Но даже в том случае, если сбудутся самые пессимистические прогнозы, Bitcoin рано сбрасывать со счетов. Самое интересное в нем — это технология, а не деньги.

 

Бухгалтерия Дикого Запада

В основе Bitcoin лежит так называемая цепочка блоков транзакций, или блокчейн (blockchain), — грандиозная база данных, в которой хранятся сведения обо всех операциях, совершенных с этой валютой. Блокчейн можно сравнить с гроссбухом — главной бухгалтерской книгой, где фиксируют приход и расход средств на балансе организации.

В настоящем гроссбухе каждая строка представляет собой проводку — запись об изменении баланса организации. В столбце «Дебет» бухгалтер указывает, насколько уменьшился ее баланс. В столбце «Кредит» — насколько он вырос.

Записи в блокчейне очень похожи. У каждой отраженной в нем проводки, или, если использовать жаргонное наименование, «транзакции», есть «входы» и «выходы». Баланс отправителя транзакции сокращается на сумму, которая указана на ее входах. Выходы сообщают, насколько увеличится баланс получателей.

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

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

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

Для банков и платежных систем такая ситуация немыслима. Если бы в их базах данных могли копаться посторонние, этим тут же воспользовались бы мошенники. Ничто не помешало бы им переписать себе средства с чужих счетов или расплатиться деньгами, которых у них нет.

Но блокчейн — это не обычная база данных. Он с самого начала рассчитан на использование в тех ситуациях, когда никому нельзя доверять. Именно это и делает его интересным.

 

Скованные одной цепью

Главное свойство блокчейна — его неизменяемость. Если однажды туда попали сведения о проведенной сделке, то они останутся там навсегда. Их нельзя ни удалить, ни отредактировать. И не потому, что это запрещено. Просто блокчейн устроен так, что даже мизерная правка требует невероятных вычислительных ресурсов.

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

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

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

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

 

Золотая лихорадка

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

Они независимо друг от друга составляют из принятых и проверенных транзакций новый блок, а затем наперегонки выполняют «доказательство выполнения работы» (proof of work). Это самый долгий и трудоемкий этап создания блока, но именно его продолжительность и трудоемкость гарантируют незыблемость блокчейна.

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

Это гонка, в которой есть победители и проигравшие. Вознаграждение получит лишь тот майнер, который первым закончил работу, а остальные останутся ни с чем. Сейчас награда составляет 25 биткойнов (около 715 тысяч рублей) плюс «чаевые», прилагающиеся к каждой транзакции. К июлю эта сумма, скорее всего, сократится вдвое.

Когда блок готов, победитель распространяет его по сети. Получив новый блок, другие участники сети проверяют его. Только в том случае, если и с ним, и с образующими его транзакциями все в порядке, они добавят его в свои копии блокчейна.

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

 

Программируемый нотариус

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

Сослаться на чужие деньги не дают замысловатые танцы с электронными подписями и криптографическими ключами. Для нас в данном случае интерес представляет не столько крипто, сколько тот факт, что условия сделки встроены в саму транзакцию и представляют собой программы на примитивном стековом языке, напоминающем Forth. Можно сказать, что в Bitcoin скрипты играют роль контрактов.

Скрипты делятся на два типа: запирающие (scriptPubKey) и отпирающие (scriptSig). Запирающий скрипт находится на одной стороне ссылки, соединяющей выход старой транзакции с входом новой, а отпирающий — на другой. Чтобы ссылка сработала, отпирающий скрипт получателя денег должен подойти к запирающему скрипту отправителя.

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

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

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

 

Умные контракты

Продолжение доступно только подписчикам

Вариант 1. Оформи подписку на «Хакер», чтобы читать все материалы на сайте

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

Вариант 2. Купи один материал

Заинтересовала информация, но нет возможности оплатить подписку? Тогда этот вариант для тебя! Обрати внимание: этот способ покупки доступен только для материалов, опубликованных более двух месяцев назад.


3 комментария

  1. ivanrussia

    19.04.2016 at 19:14

    отличная статья

  2. pasha

    24.04.2016 at 14:29

    Великолепно описано спасибо

  3. Pavlo

    24.04.2016 at 15:14

    Кратко и емко. Спасибо

Оставить мнение

Check Also

WWW: Zulip — опенсорсная замена для Slack и других групповых чатов

Разработчики Slack четыре года назад практически заново открыли миру чаты. В какой-то моме…