Протокол биткоин: Как на самом деле работает протокол Биткоин / Хабр

Содержание

Как на самом деле работает протокол Биткойн (часть 1) |

Как работает Биткойн

Замечательное объяснение принципов работы сети Bitcoin авторства Michael Nielsen. Часть первая из трёх.

Было написано много тысяч статей с объяснения того, что Биткойн является — онлайновая, одноранговая (p2p) валюта. Большинство из этих статей поверхностно рассказывают суть криптографического протокола, опуская многие детали. Даже те статьи, которые «копают» глубже, часто замалчивают важные моменты. Цель этой публикации — объяснить основные идеи, лежащие в основе протокола Биткойна в ясной, легкодоступной форме. Мы начнем с простых принципов, далее перейдём к широкому теоретическому пониманию, как работает протокол, а затем копнем глубже, рассматривая сырые (raw) данные Биткойн-транзакции.

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

Я опишу такие концепции, как контракты, в следующих публикациях. Эта публикация концентрируется на объяснении начинки протокола Биткойна. Чтобы понять меня, вы должны быть знакомы с идеей публичного криптоключа, и с тесно связанной с ней идеей цифровой подписи. Я также предполагаю, что вы знакомы с криптографической хэш-функцией (изменение входных данных всего на один бит кардинально меняет хэш-сумму — прим. пер.). Всё это не представляет большой сложности. Основные идеи можно почерпнуть из программы первого курса ВУЗа по математике или классов по компьютерной информатике. Идеи красивы, так что если вы не знакомы с ними, рекомендую потратить несколько часов на ознакомление.

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

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

Эта стратегия работает медленнее, чем если бы я объяснил работу всего Биткойн-протокола сразу. Даже если вы можете понять механику Биткойна через такое залповое объяснения, будет трудно понять, почему Биткойн спроектирован таким вот образом. Преимущество медленного, итерационного объяснения в том, что это дает нам гораздо более чёткое понимание каждого элемента Биткойна.

Наконец, я должен упомянуть, что я новичок в Биткойне. Я наблюдаю за ним с 2011 года (а за криптовалютами с конца 1990-х годов), но серьёзно вник в детали Биткойн-протокола только в начале этого года. Так что пишите коменты, буду благодарен за исправления любых заблуждений с моей стороны. Кроме того, я в своем материале включил ряд «проблем для автора», — заметки для себя о вопросах, которые возникли у меня во время написания. Вы можете найти их интересными, но также можете их полностью пропустить, сосредоточившись на основном тексте.

Первые шаги: подписание протокола о намерениях

Так как мы можем спроектировать цифровую валюту?

На первый взгляд, цифровая валюта кажется чем-то невозможным. Представим себе человека — назовем её Алиса – у которой есть некоторые цифровые деньги, которые она хочет потратить. Если Алиса может использовать строку битов в качестве денег, как мы можем помешать ей использовать одну и ту же строку битов снова и снова, таким образом, создав неограниченное количество денег? Или, если мы можем как-то решить эту проблему, как мы можем предотвратить подделывания такой строки битов и использование её для кражи у Алисы?

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

В первой версии Инфокойн давайте найдем способ, чтобы Алиса могла использовать строку битов в (очень примитивной и неполной) форме денег, но таким образом, чтоб у неё была хоть какая-то защита от подделки. Предположим, Алиса хочет дать другому человеку, назовем его Боб, один инфокойн. Чтобы сделать это, Алиса записывает сообщение «Я, Алиса, даю Бобу один инфокойн». Затем она подписывает в цифровом формате сообщение с использованием закрытого ключа шифрования (криптоключ), и заявляет о подписанной строке битов всему миру.

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

Такой прототип цифровой валюты вас не очень впечатлит! Но у него есть некоторые достоинства. Любой человек в мире (в том числе и Боб) может использовать открытый ключ Алисы для проверки того, что Алиса на самом деле была человеком, который подписал сообщение «Я, Алиса, даю Бобу один инфокойн». Никто другой не смог бы создать эту строку битов, а значит Алиса не может повернуться и сказать: «Нет, я вовсе не имела в виду, что хочу отдать Бобу один инфокойн». Таким образом, протокол устанавливает, что Алиса действительно намерена дать Бобу один инфокойн. Такой же факт — никто не смог бы составить такое подписанное сообщение — дает Алисе некоторую ограниченную защиту от подделки. Конечно, после того, как Алиса опубликовала свое сообщение, существует возможность дублировать ее сообщение другими людьми, так что в некотором смысле подделка возможна. Но это не возможно с нуля. Эти два свойства — установление намерения со стороны Алисы и ограниченная защита от подделки – действительно примечательные особенности этого протокола.

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

Использование серийных номеров для маркировки монет

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

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

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

Более конкретно, давайте предположим, что Алиса приходит в банк и говорит: «Я хочу снять (withdraw) один инфокойн с моего счета». Банк уменьшает ее баланс счета на один инфокойн, и присваивает ему новый, никогда ранее не используемый серийный номер, скажем 1234567. Затем, когда Алиса хочет передать ее инфокойн Бобу, она подписывает сообщение «Я, Алиса, даю Бобу один инфокойн с порядковым номером 1234567». Но Боб не просто принимает инфокойн. Вместо этого, он вступает в контакт с банком, и проверяет, что: (а) инфокойн с этим серийным номером принадлежит Алисе; и (б) Алиса еще не потратила этот инфокойн. Если условия верны, то Боб информирует банк о том, что он хочет принять этот инфокойн, и банк обновляет свои записи, чтобы отображать, что инфокойн с этим серийным номером в настоящее время в распоряжении Боба и больше не принадлежит Алисе.

Создание банка совместными усилиями

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

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

Теперь предположим, что Алиса хочет передать инфокойн Бобу. Она подписывает сообщение «Я, Алиса, даю Бобу один инфокойн с порядковым номером 1234567», и отправляет подписанное сообщение Бобу. Боб может использовать свою копию цепочки блоков, чтобы проверить, действительно ли инфокойн принадлежит Алисе. Если это проверяется, то потом он посылает одновременно сообщение Алисы и своё сообщение о принятии сделки по всей сети и все обновляют свои копии цепочки блоков.

У нас ещё есть проблема «откуда берется серийный номер», но это, оказывается, довольно легко решить, и поэтому я отложу её на потом, когда будем обсуждать Биткойн. Более сложной проблемой является то, что этот протокол позволяет Алисе обманывать путём повторного расходования (double spending) её инфокойнов. Она отправляет подписанное сообщение «Я, Алиса, даю Бобу один инфокойн с порядковым номером 1234567» Бобу, и сообщение «Я, Алиса, даю один инфокойн, с [тем же] серийный номером 1234567» Чарли. Оба, Боб и Чарли, используют свою копию цепочки блоков для проверки того, что инфокойн принадлежит Алисе. При условии, что они делают эту проверку в то-же самое время (до того, как у них появилась возможность связаться друг с другом), они оба увидят, что да, цепочка блоков подтверждает принадлежность монеты Алисе. Итак, они оба принимают перевод и также вместе транслируют информацию о принятии сделки. Вот теперь у нас есть проблема. Как же другие люди должны обновлять свои цепочки блоков? Может быть не так уж и просто найти способ получения согласованной общей книги транзакций. И даже если все могут согласиться на постоянной основе обновлять свои цепочки блоков, есть ещё одна проблема в том, что кто-то из двух получателей — Боб или Чарли окажется обманутым.

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

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

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

У такого протокола, если бы он использовался в настоящее время, было бы много неточных элементов. Например, что значит сказать «достаточное количество людей должны транслировать это сообщение»? Что значит «достаточно»? Это не может означать всех в сети, так как мы априори не знаем, кто находится в сети Инфокойн. По той же причине, это не может означать некоторую фиксированную долю пользователей сети. Мы не будем пытаться разобраться в этом прямо сейчас. Вместо этого, в следующем разделе я укажу на серьезные проблемы в подходе, который мы описали. Обратив внимание на эту проблему, от прояснения как с ней бороться мы получим приятный побочный эффект.

Продолжение следует.

Перевод: Андрей Дубецкий, Игорь Корсаков

Источник

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

Related

Как на самом деле работает протокол Биткоин

Много тысяч статей было написано для того, чтобы объяснить Биткоин — онлайн, одноранговую (p2p) валюту. Большинство из этих статей поверхностно рассказывают суть криптографического протокола, опуская многие детали. Даже те статьи, которые «копают» глубже, часто замалчивают важные моменты. Моя цель в этой публикации объяснить основные идеи, лежащие в протоколе Биткоин в ясной, легкодоступной форме. Мы начнем с простых принципов, далее пойдем к широкому теоретическому пониманию, как работает протокол, а затем копнем глубже, рассматривая сырые (raw) данные в транзакции Биткоин.

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

Я опишу сценарии и концепции Биткоин, такие как умные контракты в следующих публикациях. Эта публикация концентрируется на объяснении внутренности протокола Биткоин. Чтобы понять меня, вы должны быть знакомы с идеей публичного криптоключа, и с тесно связанной идей о цифровой подписи. Я также предполагаю, что вы знакомы с криптографической хэш-функцией (изменение вводных данных всего на один бит кардинально меняет хэш-сумму, прим. пер.). Ничто из этого не представляет большой сложности. Основные идеи можно получить из программ первого курса по математике в университете или классов по компьютерной информатике. Идеи красивы, так что если вы не знакомы с ними, я рекомендую потратить несколько часов, чтобы ознакомиться.

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

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

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

Наконец, я должен упомянуть, что я новичок в Биткоин. Я наблюдаю за ним с 2011 года (и за криптовалютами с конца 1990-х годов), но серьёзно вник в детали протокола Биткоин только в начале этого года. Так что буду благодарен за исправления любых заблуждений с моей стороны. Кроме того, я в своем материале включил ряд «проблем для автора», — заметки для себя о вопросах, которые возникли у меня во время написания. Вы можете найти их интересными, но вы также можете пропустить их полностью, не теряя основного текста.
 

Первые шаги: подписан протокол о намерениях

Так как мы можем спроектировать цифровую валюту?

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

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

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

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

Такой прототип цифровой валюты вас не очень впечатлит! Но у него есть некоторые достоинства. Любой человек в мире (в том числе и Боб) может использовать открытый ключ Алисы для проверки, что Алиса на самом деле была человеком, который подписал сообщение «Я, Алиса, даю Бобу один инфокоин». Никто другой не смог бы создать эту строку битов, а значит Алиса не может повернуться и сказать: «Нет, я вовсе не имела в виду, что хочу отдать Бобу один инфокоин». Таким образом, протокол устанавливает, что Алиса действительно намерена дать Бобу один инфокоин. Такой же факт — никто не смог бы составить такое подписанное сообщение — дает Алисе некоторую ограниченную защиту от подделки. Конечно, после того, как Алиса опубликовала свое сообщение, существует возможность дублировать ее сообщение другими людьми, так что, в некотором смысле подделка возможна. Но это не возможно с нуля. Эти два свойства — установление намерения со стороны Алисы, и ограниченная защита от подделки – действительно примечательные особенности этого протокола.

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

Использование серийных номеров с целью обозначить монеты

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

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

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

Более конкретно, давайте предположим, что Алиса приходит в банк и говорит: «Я хочу снять (withdraw) один инфокоин с моего счета». Банк уменьшает ее баланс счета на один инфокоин, и присваивает ей новый, никогда ранее не используемый серийный номер, скажем 1234567. Затем, когда Алиса хочет передать ее инфокоин Бобу, она подписывает сообщение «Я, Алиса, даю Бобу один инфокоин, с порядковым номером 1234567». Но Боб не просто принимает инфокоин. Вместо этого, он вступает в контакт с банком, и проверяет, что: (а) инфокоин с этим серийным номером принадлежит Алисе; и (б) Алиса еще не потратила этот инфокоин. Если условия верны, то Боб информирует банк о том, что он хочет принять этот инфокоин, и банк обновляет свои записи, чтобы отображать, что инфокоин с этим серийным номером в настоящее время в распоряжении Боба, и больше не принадлежит Алисе.
 

Создавать банк совместными усилиями

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

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

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

У нас еще есть проблема «откуда берется серийный номер», но это, оказывается, довольно легко решить, и поэтому я отложу ее на потом, когда будем обсуждать Биткоин. Более сложной проблемой является то, что этот протокол позволяет Алисе обманывать через повторное расходование (double spending) ее инфокоинов. Она отправляет подписанное сообщение «Я, Алиса, даю Бобу один инфокоин, с порядковым номером 1234567» Бобу, и сообщение «Я, Алиса, даю Чарли один инфокоин, с [тем же] серийный номер 1234567» Чарли. Оба, Боб и Чарли, используют свою копию цепочки блоков для проверки того, что инфокоин принадлежит Алисе. При условии, что они делают эту проверку в тоже самое время (до того, как они имели возможность услышать друг от друга), оба увидят, что да, цепочка блоков показывает принадлежность монеты Алисе. И так, они оба принимают перевод, и также вместе транслируют информацию о принятие сделки. Вот теперь мы имеем проблему. Как другие люди должны обновлять свои цепочки блоков? Может быть не так уж просто найти способ получения согласующей общей книги транзакций. И даже если все могут согласиться на постоянной основе обновлять свои цепочки блоков, есть еще одна проблема, что или Боб, или Чарли могут быть обманутыми.

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

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

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

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

Доказательство работы

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

Существует способ избежать этой проблемы, используя идею, известную как доказательство правильности работы (proof-of-work). Идея парадоксальна и включает в себя сочетание двух других идей: (1) (искусственно) сделать подтверждение транзакций затратными для пользователей сети в виде компьютерных вычислений; и (2), вознаградить их за помощь проверки транзакций. Награда используется для того, чтобы люди в сети пробовали помочь проверить сделки, несмотря на необходимость тратить вычислительную мощность на этот процесс. Польза от того, что проверка транзакций требует затрат, помогает избежать зависимости от количества идентичностей (пользователей сети) подконтрольные кому-либо. Таким образом только общая вычислительная мощность может оказывать давление на проверку. Как мы увидим, используя некоторый умный дизайн, мы можем сделать так, чтобы мошеннику потребовались огромные вычислительные ресурсы для обмана, что делает это практически нецелесообразным.

Вот суть доказательства правильности работы. Но чтобы по-настоящему понять, мы должны присмотреться к деталям.

Предположим Алиса транслирует в сеть новость «Я, Алиса, даю Бобу один инфокоин, с порядковым номером 1234567».

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

Я, Том, даю Сью один инфокоин, с серийным номером 1201174.

Я, Сидней, даю Синтии один инфокоин, с серийным номером 1295618.

Я, Алиса, даю Бобу один инфокоин, с порядковым номером 1234567.

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

Тем не менее, прежде чем сделать это, как часть протокола проверки, Дэвиду требуется решить непростую вычислительную задачу — доказательство правильности работы. Без решения это

Биткоин и общественный договор — в чем истинная ценность криптовалюты?


У биткоина есть много критиков по всему миру. Одни с усмешкой называют его «фантиком», другие уверены, что криптовалюта приведет мир к экологической катастрофе, третьи утверждают, что это подходящий инструмент для преступников. Например, только летом прошлого года в известных СМИ насчитывалось более 300 «некрологов» биткоину.

Однако если биткоин настолько неэффективен, как об этом твердят критики, то почему же он существует уже более 10 лет, инфраструктура постоянно развивается, а его рыночный курс по-прежнему на уровне нескольких тысяч долларов? Почему в пребывающей в крайне сложном экономическом положении Венесуэле предпочитают биткоин, а не навязываемую правительством «обеспеченную нефтью» El Petro?

Чтобы выяснить истоки ценности биткоина, журнал ForkLog предлагает вниманию читателей материал на основе трех статей из цикла «Фреймворк для скептиков». Его авторы — независимый криптоисследователь Hasu и Су Жу, сооснователь сингапурской фирмы Sensus Markets и глава хедж-фонда Three Arrows Capital.

Часть первая: честный рассказ о фиатных деньгах

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

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

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

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

Преимущества суверенных денег

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

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

Инфляция

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

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

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

Фундаментальные проблемы

Хоть фиатная система и обладает многими положительными сторонами, в последние десятилетия выявились некоторые ее фундаментальные  проблемы.

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

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

Новый дискурс о деньгах

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

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

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

Часть вторая: общественный договор и биткоин

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

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

Эта парадигма может дать ответы на некоторые важные вопросы:

  • для чего появился биткоин?
  • кто определил его характеристики?
  • кто его контролирует сейчас?
  • может ли критический баг уничтожить биткоин?

Теория общественного договора

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

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

Деньги как общественный договор

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

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

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

Правила биткоина

Когда Сатоши Накамото создавал биткоин, он не изобретал новый общественный договор. Сатоши сделал кое-что другое — он использовал технологию для решения многих проблем, выявленных в предыдущих реализациях. Он нашел лучшее применение старому договору, установив следующие правила:

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

Биткоин как новый социальный институт

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

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

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

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

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

Кто может изменить правила биткоина?

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

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

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

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

Поэтому сеть биткоина может быть обновлена только в соответствии с волей ее участников. Также она чрезвычайно эффективно противостоит попыткам изменения правил со стороны недобросовестных участников.

Может ли баг в ПО уничтожить биткоин?

В сентябре 2018 года была выявлена программная ошибка в самой популярной реализации биткоина. У бага было два потенциальных вектора атаки:

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

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

  • какой вред это могло причинить?
  • может ли возросшая инфляция подорвать доверие к биткоину?

Сама по себе монета не имеет значения. Ценность формируется исключительно на социальном уровне.

Последствия бага можно исправить, перестроив блокчейн таким образом, чтобы нейтрализовать причиненный ущерб. Это разделило бы сеть биткоина на две цепи, после чего каждая из них имела бы свою монету [хардфорк — ForkLog]. Каждый обладатель биткоина получил бы эквивалентное количество монет другой цепи. Однако стоимость этих монет будет формироваться на рынке, и, следовательно, зависеть от того, сколько люди захотят заплатить за эти монеты.

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

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

Представляют ли форки угрозу принципу противодействия инфляции?

Еще один широко известный философский вопрос возникает в контексте самого понятия «форк».

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

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

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

Таким образом, ценность монет — это сугубо социальная категория. Источник стоимости токенов — социальный консенсус. Форк протокола не подразумевает форк общественного договора, следовательно, новая монета изначально лишена какой-либо ценности.

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

***

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

Часть третья: биткоин и гарантии прав собственности

Несомненно, биткоин — инновационный социально-экономический институт. Однако по-прежнему актуален вопрос: кто будет его использовать? Найдется ли место биткоину среди других институтов, а если да, то где будет его место? Может это всего лишь жутко неэффективный конкурент PayPal и Visa, как это внушают нам мейнстрим-медиа или все же нечто большее?

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

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

У кооперации есть проблема масштабирования

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

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

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

Кооперация через институты

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

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

Установление монополии на насилие также укрепляет общие нормы морали, превращая их в формализованную правовую систему. Правила становятся более эффективными, если есть сторона, способная взять верх над каждым, кто попытается поставить себя «выше закона».

Монополия на насилие и правовая система обеспечивают работу важнейшего из всех институтов — права на частную собственность.

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

Права собственности

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

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

Ниже представлена упрощенная схема институционального стека:

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

Институт биткоина

Если биткоин — инновационный институт, то какие права он открывает? Вспомним принципы свойственного биткоину общественного договора:

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

Выдержат ли эти правила испытание реальностью? Эрик Д. Чейсон в своей прекрасной книге «Как биткоин функционирует в качестве прав собственности» утверждает:

«Сатоши Накамото создал форму собственности, способную существовать, не полагаясь на государство, центральную власть и традиционные правовые структуры»

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

Новая эра прав собственности

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

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

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

Являясь первым нативным цифровым активом, биткоин открывает новый, альтернативный уровень для хранения и перемещения стоимости. Речь идет о способности актива существовать исключительно в цифровом мире, который и наделяет биткоин всеми его свойствами.

Выводы можно будет сделать лишь со временем. Однако уже сейчас мы можем предположить, что биткоин будет чрезвычайно полезен:

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

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

Прогресс через конкуренцию

Биткоин может принести пользу и тем, кто никогда его не использует. Он делает мировую финансовую систему более надежной.

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

Биткоин НЕ является конкурентом VISA или PayPal. Он конкурирует с правительствами, юридическими системами, а также имущественными правами — фундаментальными уровнями существующего стека, а не с платежными процессингами, расположенными на его вершине.

***

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

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

Подписывайтесь на новости ForkLog в Telegram: ForkLog Live — вся лента новостей, ForkLog — самые важные новости и опросы.

Нашли ошибку в тексте? Выделите ее и нажмите CTRL+ENTER

Математические основы биткойн-блокчейна / Блог компании Bitfury Group / Хабр

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

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

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

/ Изображение Hernán Piñera CC BY

Фундаментальной частью биткойна являются криптографические алгоритмы. В частности, алгоритм ECDSA — Elliptic Curve Digital Signature Algorithm, который использует эллиптические кривые (elliptic curve) и конечные поля (finite field) для подписи данных, чтобы третья сторона могла подтвердить аутентичность подписи, исключив возможность её подделки. В ECDSA для подписи и верификации используются разные процедуры, состоящие из нескольких арифметических операций.

Эллиптические кривые

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

y² = x³ + ax + b

Для коэффициентов a = 0 и b = 7 (используемых в биткойне), график функции принимает следующий вид:


Эллиптическая кривая

Эллиптические кривые имеют несколько интересных свойств, например, невертикальная линия, пересекающая две некасательные точки на кривой, пересечет третью точку на кривой. Суммой двух точек на кривой P + Q называется точка R, которая является отражением точки -R (построенной путем продолжения прямой (P; Q) до пересечения с кривой) относительно оси X.


Сумма двух точек на кривой (источник)

Если же провести прямую через две точки, имеющие координаты вида P (a, b) и Q (a, -b), то она будет параллельна оси ординат. В этом случае не будет третьей точки пересечения. Чтобы решить эту проблему, вводится так называемая точка на бесконечности (point of infinity), обозначаемая как O. Поэтому, если пересечение отсутствует, уравнение принимает следующий вид P + Q = O.

Если мы хотим сложить точку саму с собой (удвоить её), то в этом случае просто проводится касательная к точке Q. Полученная точка пересечения отражается симметрично относительно оси X.


Удвоение точки (источник)

Эти операции позволяют провести скалярное умножение точки R = k*P, складывая точку P саму с собой k раз. Однако отметим, что для работы с большими числами используются более быстрые методы.

Эллиптическая кривая над конечным полем

В эллиптической криптографии (ECC) используется такая же кривая, только рассматриваемая над некоторым конечным полем. Конечное поле в контексте ECC можно представить как предопределенный набор положительных чисел, в котором должен оказываться результат каждого вычисления.

y² = x³ + ax + b (mod p)

Например, 9 mod 7 = 2. Здесь мы имеем конечное поле от 0 до 6, и все операции по модулю 7, над каким бы числом они ни осуществлялись, дадут результат, попадающий в этот диапазон.

Все названные выше свойства (сложение, умножение, точка в бесконечности) для такой функции остаются в силе, хотя график этой кривой не будет походить на эллиптическую кривую. Эллиптическая кривая биткойна, y² = x³ + 7, определенная на конечном поле по модулю 67, выглядит следующим образом:


Эллиптическая кривая биткойна, определенная на конечном поле по модулю 67 (источник)

Это множество точек, в которых все значения х и у представляют собой целые числа между 0 и 66. Прямые линии, нарисованные на этом графике, теперь будут как бы «оборачиваться» вокруг поля, как только достигнут барьера 67, и продолжатся с другого его конца, сохраняя прежний наклон, но со сдвигом. Например, сложение точек (2, 22) и (6, 25) в этом конкретном случае выглядит так:


Сложение точек (2, 22) и (6, 25) (источник)

Если хотите посмотреть, как выглядят другие эллиптические кривые, то поэкспериментировать можно на этом сайте.

ECDSA в биткойне

В протоколе биткойна зафиксирован набор параметров для эллиптической кривой и её конечного поля, чтобы каждый пользователь использовал строго определенный набор уравнений. Среди зафиксированных параметров выделяют уравнение кривой (equation), значение модуля поля (prime modulo), базовую точку на кривой (base point) и порядок базовой точки (order). О вычислении порядка базовой точки вы можете почитать здесь. Этот параметр подбирается специально и является очень большим простым числом.

В случае биткойна используются следующие значения:

Уравнение эллиптической кривой: y² = x³ + 7

Простой модуль: 2256— 232 — 29 — 28 — 27 — 26 — 24 — 1 = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F

Базовая точка:

04 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8

Жирным шрифтом выделена координата X в шестнадцатеричной записи. За ней сразу следует координата Y.

Порядок: FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141

Этот набор параметров для эллиптической кривой известен как secp256k1 и является частью семейства стандартов SEC (Standards for Efficient Cryptography), предлагаемых для использования в криптографии. В биткойне кривая secp256k1 используется совместно с алгоритмом цифровой подписи ECDSA (elliptic curve digital signature algorithm). В ECDSA секретный ключ — это случайное число между единицей и значением порядка. Открытый ключ формируется на основании секретного: последний умножается на значение базовой точки. Уравнение имеет следующий вид:

Открытый ключ = секретный ключ * G

Это показывает, что максимальное количество секретных ключей (следовательно, биткойн-адресов) — конечно, и равняется порядку. Однако порядок является невероятно большим числом, так что случайно или намеренно подобрать секретный ключ другого пользователя нереально.

Вычисление открытого ключа выполняется с помощью тех же операций удвоения и сложения точек. Это тривиальная задача, которую обычный персональный компьютер или смартфон решает за миллисекунды. А вот обратная задача (получение секретного ключа по публичному) — является проблемой дискретного логарифмирования, которая считается вычислительно сложной (хотя строгого доказательства этому факту нет). Лучшие известные алгоритмы ее решения, вроде ро Полларда, имеют экспоненциальную сложность. Для secp256k1, чтобы решить задачу, нужно порядка 2128 операций, что потребует времени вычисления на обычном компьютере, сопоставимого со временем существования Вселенной.

Когда пара секретный/публичный ключ получена, её можно использовать для подписи данных. Эти данные могут быть любой длины. Обычно первым шагом выполняется хеширование данных с целью получения уникального значения с числом битов, равным битности порядка кривой (256). После хеширования, алгоритм подписи данных z выглядит следующим образом. Здесь, G — базовая точка, n — порядок, а d — секретный ключ.

  • Выбирается некоторое целое k в пределах от 1 до n-1
  • Рассчитывается точка (х, у) = k * G с использованием скалярного умножения
  • Находится r = х mod n. Если r = 0, то возврат к шагу 1
  • Находится s = (z + r * d) / k mod n. Если s = 0, то возврат к шагу 1
  • Полученная пара (r, s) является нашей подписью

После получения данных и подписи к ним, третья сторона, зная публичный ключ, может их верифицировать. Шаги для проверки подписи такие (Q — открытый ключ):

  • Проверка, что и r, и s находятся в диапазоне от 1 до n-1
  • Рассчитывается w = s-1 mod n
  • Рассчитывается u = z * w mod n
  • Рассчитывается v = r * w mod n
  • Рассчитывается точка (x, y) = uG + vQ
  • Если r = x mod n, то подпись верна, иначе — недействительна

В самом деле,

uG + vQ = u + vdG = (u + vd)G = (zs-1 + rds-1)G = (z + rd) s-1G = kG

Последнее равенство использует определение s на этапе создания подписи.

Безопасность ECDSA связана со сложностью задачи поиска секретного ключа, описанной выше. Помимо этого, безопасность исходной схемы зависит от «случайности» выбора k при создании подписи. Если одно и то же значение k использовать более одного раза, то из подписей можно извлечь секретный ключ, что и произошло с PlayStation 3. Поэтому современные реализации ECDSA, в том числе используемые в большинстве биткойн-кошельков, генерируют k детерминировано на основе секретного ключа и подписываемого сообщения.

P.S. Bitfury Group Russia в Vk и Fb.

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

Автор статьи Мигель Кунета, соучредитель Satoshi Citadel Industries, который занимается строительством биткоин-экосистемы на Филиппинах с 2014 года, рассуждает о пройденном пути и победах биткоина, а также даёт собственный оптимистичный прогноз о его будущем. Оригинал материала опубликован DecentralizeToday.

Недавно я посетил блокчейн-конференцию, и один из моих коллег сделал смелое заявление во время разговора о будущем криптовалют и технологии блокчейн. Он сказал: «Нам не придётся говорить о биткоине через три года».

Ещё три года назад, в 2014 и 2015 годах, когда цена биткоина падала, но последним писком моды на Уолл-стрит считалась волшебная технология блокчейн, такие утверждения звучали часто. Сегодня мы снова слышим это, и не от типов с Уолл-стрит, а всё чаще от людей из Кремниевой долины, представителей стартапов и специалистов по технологиям.

Ну и ладно, у меня тоже есть смелое заявление!

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

На смену денежным переводом придут денежные потоки — стримы.

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

Деньги через интернет-протокол

Биткоин — это просто сеть из компьютеров, которые постоянно согласовывают информацию о состоянии общей базы данных.

  • Сеть состоит из узлов, которые фактически представляют собой компьютеры, на которых запущено программное обеспечение биткоина. На сегодняшний день по всему миру насчитывается более 10 000 биткоин-узлов.
  • Все они достигают согласия при помощи набора определённых правил, которые не могут быть изменены без полного консенсуса между узлами. Правила помогают синхронизировать всех участников сети, тем самым сохраняя её целостность.
  • Совместная база данных — это блокчейн биткоина, публичная запись всех транзакций, ограждённая от несанкционированного доступа, хранящая всю историю биткоина в хронологическом порядке, а также защищённая с помощью алгоритма Proof-of-Work. Таким образом, все смотрят на всех и никто не может обмануть друг друга.

 

Простое изящество протокола биткоина — это именно то, что заставляет его работать. С этими тремя простыми компонентами и, конечно, с самим биткоином — единственной валютой, принятой в этой сети, мы получаем базовый протокол для p2p-переводов в интернете. Возможности для дополнительных приложений и протоколов, которые могут быть построены поверх этого базового уровня, бесконечны. Такие протоколы, как Lightning Network, позволяющие почти мгновенные и почти бесплатные транзакции, уже вводятся в действие и становятся реальностью. Подобно тому, как мы не могли представить себе Uber или Airbnb всего 15 лет назад, финансовые приложения, которые пока сложно вообразить, вырастают из цензуростойкой инновации, которую обеспечивает открытый исходный код биткоина.

Смерть, налоги и биткоин

Американский экономист и трейдер Нассим Николас Талеб говорит:

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

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

Он пережил множество сетевых атак, спама, социальных нападок, форков, правительственных преследований, FUD, атак при помощи хеш-мощностей и майнинга, а в последнее время — скоординированных нападений со стороны беспринципных группировок, которые тратят огромные деньги, чтобы попытаться уничтожить биткоин. Все эти «покушения» потерпели неудачу, а сеть стала ещё более устойчивой.

Снижение рисков

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

Недоработки протокола

Один из самых ранних рисков биткоина состоял в том, что у него могли обнаружиться фатальные недоработки на уровне протокола. В 2009-2010 годах, когда биткоин был в зачаточном состоянии, люди не были уверены в том, насколько надёжным окажется это программное обеспечение — просто потому, что оно ещё не сталкивалось с какими-либо серьёзными проблемами. Однако в 2011 году лучшие инженеры и эксперты по криптографии в мире уже знали, что этот риск сведён к нулю.

Правительственные риски

Начиная с 2013 года, во время второго хайпа биткоина, наибольший риск представляли правительства: а что если США запретят биткоины? Что если правительства объявят владение ими вне закона? Тогда принятое в штате Нью-Йорк законодательство, известное как BitLicense, установило зловещий прецедент; однако к концу 2013 года, по крайней мере в демократических странах, этот риск снизился почти до нуля.

Проблемы вторичного рынка

А в 2014-м произошёл взлом Mt. Gox. Тогда это была самая крупная и самая популярная биткоин-биржа в мире, которую обокрали на полмиллиарда долларов, поставив под угрозу целостность неоперившихся криптовалютных рынков. Риск потери ценных вторичных рынков для торговли биткоинами стал как никогда явным. Однако здравый смысл победил, и к 2017 году в мире появилось великое множество регулируемых и ликвидных биржевых платформ для криптовалют, которые следуют передовому опыту и лучшим протоколам безопасности. При этом биткоин стал выполнять роль резервной криптовалюты.

Социальные и технические риски

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

Несмотря на то, что основной причиной форка была недостаточная масштабируемость транзакций, сегодня криптовалюта по-прежнему функционирует отлично — даже при самых низких за последний год комиссиях. При этом признание обновлений базового уровня, таких как Segwit, уже достигло 30%. Приложения второго уровня, такие как Lightning Network, должны обеспечить транзакции в масштабах, сопоставимых с платёжной системой Visa. Специалисты, которые поддерживают и обновляют программное обеспечение биткоина, работают над улучшением всех аспектов его протокола.

Будущие вызовы

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

Может ли биткоин потерпеть неудачу? Да, нет ничего невозможного. Но на данный момент шансы этого довольно низкие (см. выше). Даже если он потерпит неудачу в своём нынешнем виде, технология очень гибкая, и программное обеспечение способно адаптироваться. Биткоин уже изобретён, и он останется с нами.

Как говорит Нассим Николас Талеб:

Он может потерпеть неудачу, но тогда он будет с лёгкостью изобретён заново, поскольку мы теперь знаем, как это работает.

Джакомо Зукко: протокол биткоина должен быть консервативным


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

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

Тем временем не успел рынок опомниться от новости об отмене хардфорка SegWit2x, как тут же объявился малоизвестный пул bitPico, заявивший о решительном намерении все же осуществить хардфорк на блоке 494784, который появится 16 ноября. Кроме того, разработчики Bitcoin Gold официально назначили запуск основной сети на 12 ноября в 19:00 UTC. Таким образом, вполне возможно, что в скором времени мы увидим еще две новых версии биткоина. Дополнительным бонусом станет недавно анонсированный хардфорк в сети Bitcoin Cash.

По такому случаю редакция ForkLog публикует интервью с одним из наиболее ярких спикеров в индустрии — CEO BHB Network и биткоин-максималистом Джакомо Зукко. В кулуарах конференции BlockchainUA он ответил на вопросы о будущем экосистемы, ближайших конкурентах биткоина и представил свой рейтинг лучших способов создать собственный блокчейн.

Photo: Pavel Sinagl

ForkLog: Несколько месяцев назад в Одессе на конференции BIP001 вы предсказали, что хардфорка не будет. Почему хардфорк Bitcoin Cash, на ваш взгляд, все-таки произошел?

Джакомо Зукко: Тогда в Одессе я ошибался. Вообще, я имел в виду хардфорк 2X (с увеличением блока до 2Мб), основанный на нью-йоркском соглашении. В то время майнеры могли совершить хардфорк и представить SegWit одновременно с увеличением размера блока. Этого не произошло. Они активировали нормальный SegWit, отложив хардфорк на ноябрь, но я все еще полагаю, что этот хардфорк не произойдет.

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

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

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

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


Смотрите интервью c Джакомо Зукко на YouTube-канале ForkLog

ForkLog: Какой, по вашему мнению, самый лучший способ хардфоркнуть биткоин?

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

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

Таким образом, чтобы запустить успешный хардфорк, вам нужно стопроцентное принятие сети, чтобы войти в игру. Я имею в виду не только майнеров, потому что майнеры идут за прибылью, а прибыль следует за рыночной капитализацией, так что вам необходимо 100% рыночной капитализации. Однако если вы собираетесь запустить софтфорк, такой как SegWit, тогда вам будет нужно иметь более 51% вычислительной мощности сети или, другими словами, 51% от рыночной капитализации.

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

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

Представьте ситуацию с The DAO, которая произошла в Ethereum. Сначала посредством софтфорка они цензурировали средства хакера, который атаковал The DAO (прим. ред: так, чтобы тот не мог их вывести). Однако хардфорк им позволил просто вторгнуться транзакцией в чужой кошелек и переместить средства на аккаунт Ethereum Foundation, чтобы потом раздать их. Так что хардфорки, в целом, более опасны.

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

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

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

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

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

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

Третий лучший способ — как у Bitcoin Cash. Конечно, лучше бы они поменяли символику, чтобы избежать путаницы с биткоином, но все же. И только потом идут альткоины.

Самый плохой из возможных способов — это пытаться нажиться на клиентах, используя фишинговую атаку, как в случае с 2X. Вопрос не только о SegWit, но о SegWit с увеличением размера блока. Потому что SegWit, в состоянии на момент поставки, содержит аналог увеличения размера блока приблизительно в четыре раза. В чем необходимость хардфорка даже до тестирования SegWit4X? Зачем нужно будет это ответвление? На это нет ни единой технической причины.

ForkLog: Похоже, что экосистема Ethereum развивается довольно быстро и возможно быстрее, чем экосистема биткоина. Было совершено много новых разработок, таких как Raiden Network, эксперимент с Polkadot от доктора Гэвина Вуда, предложение Plasma от Виталика с Джозефом Пуном и взлет токенсейлов на ERC20. Стал ли Ethereum угрозой биткоину?

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

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

В то же время с Ethereum тебе нечего терять, поэтому ты можешь совершать более, скажем, странные вещи. Однако я не думаю, что эта скорость, которая является осмысленным выбором в Ethereum, также соответствует лучшему или сравнимому качеству. Я полагаю, что общее техническое качество проектов в Ethereum на порядок ниже, чем в аналогичных биткоин-проектах. К примеру, BTC relay или эксперимент Polkadot не сравнимы с федерированными сайдчейнами или c Drivechain по уровню безопасности, в части продуманных атак и количества собранных данных. Тот же подход мы использовали в Lightning.

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

Есть несколько интересных проектов, таких как Raiden, который является аналогом Lightning Network для Ethereum. Поэтому объективно он интересен. Но когда мы говорим об ICO и всем этом движении, 99% таких проектов состоят только из маркетинга, а маркетинг развивается быстрее по определению, чем технологии. Потому что намного легче написать брошюру без заезженных слов, чем написать код, который работает. Такой технологический проект, как биткоин, никогда не поспевает за скоростью маркетинговых проектов, как большинство ICO или альткоинов.

Джозеф Пун является одним из создателей концепции Lighting Network. Я верю, что он вложит много усилий также и в Plasma. Это очень похожая концепция. Преимущество Ethereum в том, что он более выразительный, я имею в виду, что легче делать странные вещи с EVM (Виртуальной машиной Ethereum), чем при помощи Script — языка программирования транзакций биткоина. Прошло много времени, прежде чем у нас появились хорошие платежные каналы на биткоине, потому что Script очень консервативен, очень безопасен, очень надежен, очень минималистичен, в то время как на EVM это легко.

Джозеф Пун больше любит эксперименты и авангардный способ мышления, чем имплементацию того, что уже существует. Я понимаю, почему он старается сделать что-то в стиле научной фантастики. Однако я не думаю, что кто-то будет реально пользоваться Plasma. Я не думаю, что кто-либо по-настоящему использует Ethereum с каналами состояния или без.

Люди используют биткоин, потому что когда тебе не нужна устойчивость к цензуре, у тебя уже есть существующая система. А когда тебе нужна устойчивость к цензуре — этого нет в Ethereum сейчас и не наблюдается в перспективе.

Photo: Pavel Sinagl

ForkLog: Становится ли Litecoin тестовой площадкой для биткоина? Есть ли от этого польза для сети биткоина или нет?

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

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

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

Чем больше вычислительной мощности идет в Litecoin, тем больше рыночной капитализации идет в Litecoin — и тем больший вред наносится биткоину. Лучшей тестовой сетью, тестовой площадкой был бы сайдчейн. Например, в Litecoin раньше был внедрен SegWit. Но впервые он был имплементирован в сайдчейне Blockstream под названием Alpha Elements. Также в биткоин не так давно были внедрены подписи Шнорра, MAST, конфиденциальные транзакции и некоторые другие улучшения. Они были протестированы сначала в Alpha Elements.

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

ForkLog: Что если биткоин потерпит поражение в силу своей чрезмерной консервативности?

Джакомо Зукко: Думаю, что вряд ли биткоин потерпит поражение из-за чрезмерной консервативности. Я думаю, что проекты, нацеленные на безопасность, не могут провалиться вследствие консервативности.

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

Приведем пример: если я создаю игру Candy Crush на Facebook — если я не развиваюсь, не веду агрессивной конкуренции, то я проиграю другим играм на Facebook. Но если я Facebook, мне уже не нужно меняться столь стремительно, потому что я являюсь базовым слоем для каждого приложения. В таком случае мне нужно беречь сетевой эффект и меняться медленно. Facebook не меняется кардинально с течением времени. Если пойти дальше, то мы имеем всемирную сеть, которую использует Facebook. Стандарт WWW не особо меняется. У нас есть html-файлы, некоторые другие фишки, но все очень консервативно. Дальше мы можем спуститься к TCP (Transmission Control Protocol — протокол управления передачей), а еще дальше IP (Internet Protocol — межсетевой протокол).

Сейчас у нас четвертая версия IP, и совсем не похоже, что она терпит поражение. Тут нет конкуренции. Конкуренция была в 1990-х, но IP четвертой версии разрушил всю конкуренцию, потому что он не менялся. И сейчас мы хотим совершить улучшение протокола IP до шестой версии, но мы не можем обновиться до нее в течение, пожалуй, двадцати лет попыток.

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

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

Предположим, что Ethereum оставит Proof-of-Work, откажется от Proof-of-Stake и начнет соблюдать правило неизменности истории, избежит какого-нибудь политического разделения, хардфорка, Виталик Бутерин исчезнет, как Сатоши, будет создана по-настоящему децентрализованная разработка, будет изменен язык Solidity так, чтобы сделать код на его основе предсказуемым, детерминированным и безопасным, а также будет внедрена модель масштабирования посредством офчейн-состояний. Тогда Ethereum станет лучше биткоина. Не думаю, что это случится, и не думаю, что что-то лучшее может взять верх над TCP/IP после консолидации. Но если это случится, нам будет лучше. У нас будет лучший биткоин. Так что я не вижу причины изменять биткоин, чтобы оградить его от конкуренции.

Биткоину нужно быть консервативным, потому что иначе мы проиграем и не получим ничего взамен. Если вы правы в своем консерватизме, то у вас останется биткоин. Если же вы ошибаетесь, то вы перейдете на что-то еще. Я думаю, что как и интернет, большая часть протокола будет переведена в аппаратную часть. TCP/IP не был встроен в нашу операционную систему. Все это встроено в аппаратную часть роутеров и свитчей в рамках физической инфраструктуры. Я думаю, что то же самое будет и с биткоином.

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

Сейчас биткоин-кошельки напоминают интернет-браузер 94-го года, даже не Netscape, а может Mosaic — проще говоря, что-то очень неудобное в использовании. Их интерфейс ужасен, потому что сегодняшние инженеры не фокусируются на UX, они сосредоточены на обеспечении безопасности. И на данный момент это хорошо. Но когда мы увидим великолепные интерфейсы и совместимость, я думаю, что в течение десяти лет биткоин будет стоить уже несколько миллионов долларов. Мне кажется это вполне реалистичным.

Я также думаю о многих блокчейн-приложениях, о которых сейчас я утверждаю, что в них нет смысла — тогда в них появится смысл. Почему? Потому что когда уже существует фактический стандарт на рынке, который можно скопировать и пользоваться этим стандартом, то это будет иметь экономический смысл, даже в отсутствие технического смысла.

Сейчас, если мы захотим пообщаться в этой комнате и будем использовать Whatsapp, подключаясь к Wi-Fi, потом к какому-то свитчу в Китае, а затем обратно к телефонному оператору и 4G — технически это не будет эффективно. Это бессмысленно. Но так как есть интернет, то мы используем его. Пока биткоин не стал глобальным стандартом, не имеет смысла создавать собственный блокчейн.

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

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

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

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

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

Беседовал Eugene Muratov

Подписывайтесь на новости ForkLog в Telegram: ForkLog Live — вся лента новостей, ForkLog — самые важные новости и опросы.

Нашли ошибку в тексте? Выделите ее и нажмите CTRL+ENTER

Биткоин что же это? Передача данных или электронная валюта

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

Биткоин не имеет принадлежности к государству.

Децентрализованная валюта – именно так называют биткоин за счет отсутствия обеспечения любым из правительств. В настоящее время эту валюту может приобрести любой пользователь интернета, покупая из 16 миллионного резерва находящихся в обращении активов. Ежедневно этот актив увеличивается, в окончательном счете достигнув предусмотренного разработчиком через 13 лет предела в 21 миллион.
Контроль операций и история всех платежей или переводов биткоинов осуществляется в интернете. Специальные программы, которые используют владельцы криптовалюты, хранят некоторую часть информации об операциях. За счет продуманного алгоритма и взаимодействия между приложениями, можно любую часть этой всемирной бухгалтерской книги изучить в течение всего нескольких секунд.

Переводы и платежи.

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

Создание биткоина.

Создателем биткоина называют Satoshi Nakamoto. Разработчик не просто создал электронную валюту, а предусмотрел наиболее защищенное существование и развитие биткоина на долгие годы вперед. Основным контролирующим инструментом и управляющей системой для биткоина стал блокчейн. Этот инструмент также называют бухгалтерской книгой, так как он позволяет сохранить все транзакции, которые выполнялись на протяжении существования криптовалюты.
Объем блокчейна составляет 121 Гб, который не имеет централизованного хранилища. Информация разбита на «кусочки», которые хранит каждый из владельцев биткоинов или пользователь программы.
После отправления платежа, программа также отправляет в сеть инструкции, которые распространяются между компьютерами пользователей. Со временем этот платеж «усваивается» всей системой и сохраняется в одном из блоков блокчейна.

Отличия от традиционных валют в сети.

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

Технология и «добыча».

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

Отправляем перевод.

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

Валидаторы и майнеры.

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

Документация по протоколу

— Bitcoin Wiki

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

Имена типов, используемые в этой документации, взяты из стандарта C99.

Протокол, используемый в майнинге, см. В getblocktemplate.

Общие стандарты

Хеши

Обычно, когда хэш вычисляется в биткойне, он вычисляется дважды. В большинстве случаев используются хеши SHA-256, однако RIPEMD-160 также используется, когда желателен более короткий хеш (например, при создании адреса биткойнов).

Пример двойного SHA-256-кодирования строки «hello»:

 привет
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (первый раунд ша-256)
9595c9df

148eb06860365df33584b75bff782a510c6cd4883a419833d50 (второй раунд ша-256)

Для адресов биткойнов (RIPEMD-160) это даст:

 привет
2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (первый раунд - sha-256)
b6a9c8c230722b7c748331a8b450f05566dc7d0f (с ripemd-160)
 

Деревья Меркла

Деревья Меркла — это бинарные деревья хешей.Деревья Меркла в биткойне используют double SHA-256, хеш SHA-256 хеша SHA-256 чего-то.

Если при формировании строки в дереве (кроме корня дерева) она будет иметь нечетное количество элементов, последний двойной хеш дублируется, чтобы гарантировать, что строка имеет четное количество хешей.

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

Тогда строка над ней состоит из половины этого количества хешей.Каждая запись представляет собой двойной SHA-256 из 64-байтовой конкатенации соответствующих двух хешей под ней в дереве.

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

Например, представьте себе блок с тремя транзакциями a , b и c . Дерево Меркла:

 d1 = дхаш (а)
d2 = дхаш (б)
d3 = дхаш (с)
d4 = dhash (c) # a, b, c равны 3.это нечетное число, поэтому мы берем c дважды

d5 = dhash (d1 concat d2)
d6 = dhash (d3 concat d4)

d7 = dhash (d5 concat d6)
 

где

 дхаш (а) = ша256 (ша256 (а))
 

d7 — корень Меркла из 3 транзакций в этом блоке.

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

Подписи

Биткойн использует алгоритм цифровой подписи с эллиптической кривой (ECDSA) для подписи транзакций.

Для ECDSA используется кривая secp256k1 из http://www.secg.org/sec2-v2.pdf.

Открытые ключи (в скриптах) задаются как 04 , где x и y — 32-байтовые целые числа с прямым порядком байтов, представляющие координаты точки на кривой или в сжатом виде, заданные как знак < > , где — это 0x02, если y четное, и 0x03, если y нечетное.

подписи используют кодировку DER для упаковки компонентов r и s в один поток байтов (это также то, что OpenSSL производит по умолчанию).

Подтверждение транзакции

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

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

Каждый выход определяет, какой биткойн-адрес (или другие критерии, см. Скрипт) является получателем средств.

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

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

n.Цена

биткойн-протокола — график стоимости 1 биткойн к доллару — сколько сегодня стоит биткойн-протокол?

Стоимость протокола Биткойн

Хотите узнать последнюю цену протокола биткойнов? Вот он, а также другие полезные данные
об этом виде криптовалюты. В NEIRONIX мы собираем и предоставляем на нем любой ценный контент.
например, 1 BTP в доллар США, чтобы вы могли сделать выгодное вложение и получить
положительный результат.Мы приглашаем вас в мир ценности протокола Биткойн, давая реальное представление о его перспективах и достоинствах!

Все данные, которые могут вам понадобиться о перспективах и стоимости биткойн-протокола

Благодаря NEIRONIX вы будете в курсе всех последних новостей. Во-первых, все могут познакомиться
с ценой на протокол Биткойн сегодня — эти данные обновляются с высокой скоростью, так как мы ценим ваше желание
иметь под рукой актуальную информацию.Во-вторых, вы можете рассмотреть следующие важные аспекты:
рыночная капитализация показывает совокупную стоимость всех проданных монет, низкая / высокая стоимость демонстрирует минимальную и максимальную стоимость
1 монеты среди других бирж, а объем — это общая сумма сделок с акциями за день.
Таким образом, у вас не возникнет вопроса: «Сколько стоит биткойн-протокол?» Все данные тщательно анализируются и представляются для вашего
удобство!

Если вас интересует график цен на протокол Биткойн, мы предлагаем его — просто выберите нужный период (от 1 дня до максимального).
и получить полный анализ его падений и роста в соответствующий период.Кроме того, NEIRONIX избавляется от актуальных
новости о текущем курсе биткойн-протокола и его возможных изменениях, текущем значении биткойн-протокола с будущими прогнозами и ростом
перспективы.
Благодаря нам вы будете уведомлены о последних тенденциях на выбранном рынке криптовалют!

,Правила протокола

— Bitcoin Wiki

Правила для клиентов.

Вики существенно документирует протокол Биткойн, но не менее важны правила, используемые клиентом для обработки сообщений. Крайне важно, чтобы клиенты следовали определенным правилам, чтобы поддерживать согласованность в сети и защищать гарантии безопасности Биткойн.

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

Правила майнинга (генерации блоков) еще не представлены.

Структуры данных

Основными структурами данных являются транзакции и блоки. Блоки состоят из заголовка блока , за которым следуют транзакции в блоке.Транзакции идентифицируются по их хешу; блоки по хешу их заголовка. У блоков есть предыдущие указатели, которые связывают их в граф.

Концептуально клиент имеет следующие структуры данных:

транзакции

Есть два набора транзакций:

пул транзакций
неупорядоченный набор транзакций, которые не находятся в блоках в основной цепочке, но для которых у нас есть транзакции ввода
бесхозные транзакции
транзакций, которые не могут попасть в пул из-за отсутствия одной или нескольких транзакций ввода

Блоки

Есть 3 категории блоков:

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

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

См. Также Состояние блока.

Изменение сложности

Сложность меняется каждые 2016 блоков. Этот выбор должен происходить примерно каждые две недели.

2 недели / 10 минут = 14 * 24 * 60/10 = 2016

По достижении 2016 блоков мы возвращаемся назад, пока не дойдем до 2016-го блока перед текущим.Находим разницу во времени между текущим блоком и этим. Эта разница (называемая фактическим временным интервалом) ограничена пределами между [2 недели / 4, 2 недели * 4].

Затем мы получаем последнюю цель для этого старого двухнедельного окна и умножаем ее на соотношение фактический временной интервал / целевой временной интервал (2 недели в секундах).

новая цель = старая цель * время на 2016 блоков / 2 недели.

Если старый набор блоков завершился слишком быстро, то цель снижается (повышается сложность), поэтому на решение этих новых блоков уходит больше времени… и наоборот. Таким образом, сложность колеблется около идеальных 2 недель (и 10 минут на блок).

Плата за создание блока

Плата за создание блока меняется каждые 210000 блоков.
Плата за создание блока зависит от высоты блока в цепочке (генезис = 0) и рассчитывается с использованием 64-битных целочисленных операций.
(в сатоши) как:

(50 * 100000000) >> (высота / 210000)

Комиссия за создание блока началась с 50 BTC, упала до 25 BTC на блоке 210000, упала до 12.5 BTC в блоке 420000, до 6,25 в блоке 630000, будут уменьшаться вдвое каждые 210000 блоков (примерно 4 года) и, наконец, опустятся до 0 сатоши с блоком 6930000 примерно в 2140 году.
Комиссия за создание блока для всех транзакций Coinbase составит 20999999976

сатоши, практически 21 миллион BTC.

«tx» сообщения

Эти сообщения содержат одну транзакцию.

  1. Проверить синтаксическую корректность
  2. Убедитесь, что ни входящие, ни исходящие списки не пусты.
  3. Размер в байтах <= MAX_BLOCK_SIZE
  4. Каждое выходное значение, а также общая сумма должны находиться в допустимом денежном диапазоне
  5. Убедитесь, что ни один из входов не имеет hash = 0, n = -1 ( транзакций Coinbase )
  6. Убедитесь, что nLockTime <= INT_MAX [1] , размер в байтах> = 100 [2] и sig opcount <= 2 [3]
  7. Отклонить «нестандартные» транзакции: scriptSig делает что-либо, кроме помещения чисел в стек, или scriptPubkey не соответствует двум обычным формам [4]
  8. Отклонить, если у нас уже есть соответствующий tx в пуле или в блоке в основной ветке
  9. Для каждого входа, если указанный выход существует в любом другом tx в пуле, отклоните эту транзакцию. [5]
  10. Для каждого входа просмотрите основную ветвь и пул транзакций, чтобы найти указанную транзакцию вывода. Если выходная транзакция отсутствует для любого входа, это будет бесхозная транзакция. Добавьте к потерянным транзакциям, если подходящей транзакции там еще нет.
  11. Для каждого входа, если указанная выходная транзакция является Coinbase (т.е. только 1 вход с хешем = 0, n = -1), он должен иметь как минимум COINBASE_MATURITY (100) подтверждений; иначе отклонить эту транзакцию
  12. Для каждого входа, если указанный выход не существует (например,грамм. никогда не существовало или уже было потрачено), отклонить эту транзакцию [6]
  13. Используя указанные выходные транзакции для получения входных значений, проверьте, что каждое входное значение, а также сумма, находятся в допустимом денежном диапазоне
  14. Отклонить, если сумма входных значений <сумма выходных значений
  15. Отклонить, если комиссия за транзакцию (определенная как сумма входных значений минус сумма выходных значений) будет слишком низкой для попадания в пустой блок
  16. Убедитесь, что scriptPubKey принимает для каждого ввода; отклонить, если есть плохие
  17. Добавить в пул транзакций [7]
  18. «Добавить в кошелек, если мой»
  19. Ретрансляция транзакции к партнерам
  20. Для каждой потерянной транзакции, которая использует эту транзакцию в качестве одного из своих входов, рекурсивно выполните все эти шаги (включая этот) для этой сиротской транзакции

Объяснение некоторых правил

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

Эти сообщения содержат один блок.

  1. Проверить синтаксическую корректность
  2. Отклонить, если есть дубликат блока в любой из трех категорий
  3. Список транзакций должен быть непустым
  4. Хеш блока должен удовлетворять заявленным нБитам доказательство работы
  5. Временная метка блока не должна превышать двух часов в будущем.
  6. Первая транзакция должна быть на базе монеты (т.е. только 1 вход, с hash = 0, n = -1), остальные не должны быть
  7. Для каждой транзакции применять проверки «tx» 2-4
  8. Для транзакции coinbase (первой) длина scriptSig должна быть 2-100
  9. Отклонить, если сумма транзакций sig opcounts> MAX_BLOCK_SIGOPS
  10. Проверить хэш Меркла
  11. Проверить, находится ли предыдущий блок (соответствующий предыдущему хешу ) в основной ветви или побочных. Если нет, добавьте это к потерянным блокам, затем запросите однорангового узла, от которого мы получили это, для 1-го отсутствующего сиротского блока в цепочке , предшествующей ; сделано с блоком
  12. Убедитесь, что значение nBits соответствует правилам сложности
  13. Отклонить, если отметка времени является средним временем последних 11 блоков или до
  14. Для некоторых старых блоков (т.е.е. при начальной загрузке блока) проверьте, что хеш соответствует известным значениям
  15. Добавить блок в дерево. Возможны три случая: 1. блок расширяет основную ветку; 2. block расширяет боковую ветвь, но не добавляет сложности, чтобы она стала новой главной ветвью; 3. block расширяет боковую ветвь и делает ее новой главной ветвью.
  16. Для случая 1 добавление в основную ветку:
    1. Для всех транзакций, кроме операций с базой монет, примените следующее:
      1. Для каждого входа найдите в главной ветви указанную транзакцию вывода.Отклонить, если транзакция вывода отсутствует для любого ввода.
      2. Для каждого входа, если мы используем n -й выход предыдущей транзакции, но у него меньше, чем n + 1 выходов, отклоните.
      3. Для каждого входа, если указанная выходная транзакция является Coinbase (т.е. только 1 вход с хешем = 0, n = -1), он должен иметь как минимум COINBASE_MATURITY (100) подтверждений; иначе отклонить.
      4. Проверить криптографические подписи для каждого ввода; отклонить, если есть плохие
      5. Для каждого входа, если указанный выход уже был потрачен транзакцией в основной ветви, отклонить
      6. Используя указанные выходные транзакции для получения входных значений, проверьте, что каждое входное значение, а также сумма, находятся в допустимом денежном диапазоне
      7. Отклонить, если сумма входных значений <сумма выходных значений
    2. Отклонить, если стоимость монеты> сумма комиссии за создание блока и комиссии за транзакцию
    3. (Если мы не отклонили):
    4. Для каждой транзакции «Добавить в кошелек, если мой»
    5. Для каждой транзакции в блоке удалите любую совпадающую транзакцию из пула транзакций
    6. Блок реле к нашим аналогам
    7. Если мы отклонили, блок не считается частью основной ветви
  17. Для случая 2, добавляя в боковую ветвь, мы ничего не делаем.
  18. Для случая 3 боковая ветвь становится главной:
    1. Найдите блок вилки на главной ветви, которую эта боковая ветвь отводит от
    2. Переопределите основную ветвь, чтобы подняться только до этой вилки блок
    3. Для каждого блока на боковой ветви, от дочернего блока fork до листа, добавьте в основную ветвь:
      1. Сделать «ветку» проверки 3-11
      2. Для всех транзакций, кроме Coinbase, примените следующее:
        1. Для каждого входа найдите в главной ветви указанную транзакцию вывода.Отклонить, если транзакция вывода отсутствует для любого ввода.
        2. Для каждого входа, если мы используем n -й выход предыдущей транзакции, но у него меньше, чем n + 1 выходов, отклоните.
        3. Для каждого входа, если указанная выходная транзакция является Coinbase (т.е. только 1 вход с хешем = 0, n = -1), он должен иметь как минимум COINBASE_MATURITY (100) подтверждений; иначе отклонить.
        4. Проверить криптографические подписи для каждого ввода; отклонить, если есть плохие
        5. Для каждого входа, если указанный выход уже был потрачен транзакцией в основной ветви, отклонить
        6. Используя указанные выходные транзакции для получения входных значений, проверьте, что каждое входное значение, а также сумма, находятся в допустимом денежном диапазоне
        7. Отклонить, если сумма входных значений <сумма выходных значений
      3. Отклонить, если стоимость монеты> сумма комиссии за создание блока и комиссии за транзакцию
      4. (Если мы не отклонили):
      5. Для каждой транзакции «Добавить в кошелек, если мой»
    4. Если мы отклоняем в любой момент, оставьте основную ветвь такой, какой она была изначально, сделано с помощью блока
    5. Для каждого блока в старой основной ветви, от листа до дочернего блока fork :
      1. Для каждой транзакции в блоке, не связанной с монетарной базой:
        1. Примените проверки «tx» 2–9, за исключением шага 8, ищите дубликаты только в пуле транзакций, а не в основной ветви.
        2. Добавить в пул транзакций, если принято, иначе перейти к следующей транзакции
    6. Для каждого блока в новой главной ветви, от дочернего узла fork до листа:
      1. Для каждой транзакции в блоке удалите любую совпадающую транзакцию из пула транзакций
    7. Блок реле к нашим аналогам
  19. Для каждого сиротского блока, для которого этот блок является его предшествующим , рекурсивно выполните все эти шаги (включая этот) на этом сиротском блоке

См. Также

,

Протокол Биткойн: как это работает

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

Обмен

биткойнами осуществляется с использованием протокола Биткойн, построенного на принципах криптографии. Протокол определяет процедуру, которой следует биткойн-транзакция с момента ее создания до проверки и окончательного подтверждения.

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

Биткойн-транзакции

Биткойн-транзакция по существу содержит следующую информацию:

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

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

Image title Рисунок 1: Цепочка транзакций Биткойн

Подтверждение транзакции

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

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

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

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

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

Протокол Биткойн

С точки зрения процесса создания и проверки транзакции протокол Биткойн может быть указан ниже:

  • Новая транзакция транслируется всем участвующим узлам сети.
  • Каждый узел собирает новые транзакции в блок.
  • Каждый узел пытается проверить новую транзакцию и все предыдущие, находя решение для Proof of Work для блока.
  • Узел, который находит решение, транслирует решенный блок в сеть.
  • Узлы проверяют транзакции в блоке и принимают блок.
  • Узлы начинают работу на следующем блоке. Создается хэш последнего принятого блока, который используется в качестве ссылки в следующем блоке.

Сводка

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

,

Отправить ответ

avatar
  Подписаться  
Уведомление о