В этой статье мы рассмотрим общий дизайн и инфраструктуру системы Биткойн на основе контекстуального и технического обзора.
А. Контекстный обзор
Перенесемся в прошлое. В 1983 году криптографическая валюта была впервые введена как система для наличных денег, выпущенных банком, где монеты подписывались вслепую, а незаслепленные версии монет передавались клиентам и трейдерам. Эти монеты были погашены после того, как банк подтверждал их валидацию. Точно так же система Биткойн предоставила слепые подписи, чтобы запретить банкам с поддержкой криптовалюты биткойн привязывать эти монеты к клиентам. На протяжении 1990-х годов в систему Биткойн было введено несколько инфраструктурных расширений и корректировок, включая, помимо прочего, удаление требования о том, чтобы биткойн-банк был в сети во время операции покупки, а так же воплощение возможности делить монеты на мелкие единицы.
В начале 1990-х годов была введена концепция смарт-контракта, позволяющая различным сторонам в системе Биткойн официально назначать обязательное криптографическое соглашение и предвидеть возможности сценариев. Последняя крупная революция произошла в 2008 году, когда было объявлено о Биткойне, а неизвестный технический документ был опубликован под псевдонимом Сатоши Накамото в списке рассылки шифропанков. Этот выпуск также включал исходный код аутентичного эталонного клиента. Затем в начале 2009 года был добыт первоначальный блок системы Биткойн, и считается, что первый официальный выпуск системы состоялся в мае 2010 года, когда пользователь разместил заказ на доставку пиццы, обменяв 10000 биткойнов. После этого этапа количество пользователей стало резко увеличиваться ежедневно, как и количество надежных услуг, таких как обмен товарами на месте.
Именно система Биткойн таксономически рассматривается как сеть узлов, которые постоянно поддерживают электронный реестр, называемый блокчейном. Эта система использует токены, называемые биткойнами, для привлечения и мотивации пользователей (клиентов) к участию посредством транзакций. Новые биткойны чеканятся всякий раз, когда генерируется новый блок в форме поощрения, что важно для управления системой транзакций. Эти транзакции предназначены для хранения информации о владельце биткойнов, а также количества биткойнов (то есть средств), хранящихся в блокчейне. Более того, у каждого пользователя есть возможность проверить содержимое блокчейна, клонированного на всех узлах сети.
Б. Технический обзор
1) Децентрализация
Биткойн - это самая первая распределенная криптовалютная система, полностью децентрализованная система цифровой валюты, в которой денежная власть не контролируется какой-либо стороной. Получив от размыва централизованную экономическую систему, неизвестный изобретатель Биткойн создал ее децентрализованным образом. Однако эта децентрализованная архитектура по-прежнему имеет несколько серьезных ограничений:
- Журнал транзакций должен быть публично сохранен каждым узлом.
- Операции должны быть проверены и узаконены распределенной сетью, а не централизованным органом или стороной.
- В отличие от централизованных экономических систем, новые биткойны могут генерироваться любым подключенным субъектом.
- Операции обмена биткойнов полностью динамичны, и для их обработки не требуется никакого централизованного контроля.
Биткойн — это распределенная система цифровой валюты, основанная на сетевой системе P2P и децентрализованном вероятностном консенсусном протоколе, где все платежи и обмены осуществляются в электронном виде посредством транзакций между клиентами. Адреса в системе Биткойн также создаются путем выполнения последовательных необратимых криптографических хеш-схем с использованием открытого ключа пользователя. А именно, один клиент может сгенерировать несколько открытых ключей, чтобы иметь более одного адреса, где каждый отдельный адрес будет назначен одному или нескольким кошелькам. Закрытый ключ клиента необходим для расходования биткойнов через биткойн-транзакции с цифровой подписью. Эти транзакции реестра также выполняются для проверки и подтверждения их подлинности и целостности набором распределенных сетевых объектов, т. е. майнерами. Эти майнеры отвечают за объединение многочисленных транзакций в реестре, которые ожидают доступа к сети, выполняемой одним объектом (подразделением), называемым блоком. Чтобы объявить вознаграждение за майнинг, узел майнера объявит блок в сети Биткойн, как только обработка блока будет завершена и проверена. Затем остальные (или большинство) подключенных к сети майнерских узлов в системе проверят и подтвердят этот блок майнинга, прежде чем он будет добавлен в общедоступную децентрализованную книгу под названием блокчейн. Узел майнера, выигравший блок, получит вознаграждение, как только добытый блок будет полностью присоединен к этой цепочке блоков.
2) Транзакции и скрипты
Биткойн-транзакции используются для передачи цифровых монет между разными клиентскими кошельками. В частности, эти монеты передаются в виде транзакции или последовательной серии транзакций. В целом, список транзакций постоянно увеличивается, и в системе нет встроенных концепций более высокого уровня для управления балансами активных счетов или даже личностями клиентов. Вместо этого эта информация может быть получена только из списка записей опубликованных транзакций.
- Формат транзакции. Каждая биткойн-транзакция имеет многомерный список или массив входных и массив выходных записей, как показано на рисунке. Транзакция полностью хэшируется с помощью SHA-256, а полученное хеш-значение в основном служит уникальным глобальным идентификатором транзакции. Затем транзакция объявляется в специальном двоичном формате. Кроме того, выходные записи представляют собой набор целых чисел, которые отражают количество биткойн-валют. Эти выходные записи также представляют собой краткий код в форме определенного языка сценариев с именем ScriptPubKey. Он отражает параметры, необходимые для проверки погашения транзакций, которые будут добавлены к более позднему вводу (транзакции).
- Сценарий транзакции. В контексте транзакция ScriptPubKey назначает хэш открытого ключа. Используется открытый ключ на основе алгоритма цифровой подписи (на основе эллиптических кривых (ECDSA)) вместе с процедурой ее проверки. Вкратце, ScriptPubKey - это короткий скрипт, иллюстрирующий, какие условия должны быть выполнены, чтобы претендовать на владение биткойнами. Вся эта операция называется транзакцией pay-to-pub-key-hash, в то время как транзакция выкупа также должна быть подписана ключом с этим назначенным хешем. Кроме того, развернутый язык сценариев определяется его реализацией в биткойне, специальный язык стека, который имеет около 200 команд, называемых кодами операций. Этот язык поддерживает криптографические операции, такие как хеширование информации и проверка подписей. Кроме того, этот язык сценариев также позволяет записям ввода транзакций указывать на предыдущие транзакции, используя их соответствующий хэш. Теперь, чтобы потребовать погашения ранее подтвержденной транзакции, и ScriptSig, и ScriptPubKey должны быть выполнены через один и тот же стек. Однако, за исключением сделок вида с оплатой в pay-to-pub-key-hash, ScriptSig будет открытым ключем в сочетании с подписью.
- От транзакции к владению. Чтобы лучше понять процесс транзакций в системе Биткойн, мы приводим здесь наглядный пример. Предположим, клиент 1 хочет передать биткойны клиенту 2. Для оплаты клиенту 2, клиент 1 должен использовать программное обеспечение на стороне сети Биткойн, а также собственный закрытый ключ и биткойн-адрес клиента 2. Хотя любой клиент в сети Биткойн может переводить средства (т. е. деньги) на конкретный адрес Биткойн, биткойны высвобождаются со счета только с помощью уникальной подписи, сгенерированной с помощью закрытого ключа. В этом случае клиенту 1 нужно доказательство права собственности на эти переведенные монеты, то есть он должен подписать транзакцию своим криптографическим ключом. Когда клиент 1 заканчивает транзакцию, все майнеры в сети Биткойн будут проинформированы о новой транзакции. Наконец, узлы майнера должны проверить, что клиент 1 имеет достаточно средств для завершения этой транзакции и правильность цифровой подписи. Кроме того, формат транзакции имеет несколько ключевых свойств. Прежде всего, по своей сути не существует укоренившейся концепции личности или единственной клиентской учетной записи, владеющей биткойнами. Право собственности в контексте Биткойн относится исключительно к знанию закрытого ключа, чтобы предоставить возможность сделать подпись для определенного погашения вывода (т. е. проверки погашения). Кроме того, хэши открытых ключей считаются псевдонимными идентификаторами клиентов, как указано в транзакциях с оплатой за публичный хеш-ключ. Эти идентификаторы клиентов также называются адресами, где не требуются подлинные имена или настоящие идентификаторы. Публичный, поскольку система Биткойн интегрирует криптографические приложения вместе с сетями P2P, чтобы гарантировать децентрализованную среду цифровой криптовалюты, она сохраняет полную историю транзакций в общедоступной цепочке блоков. Таким образом, биткойн-клиенты могут быть подвержены утечке финансовой информации. Однако это в основном связано с существующими подходами и решениями, направленными на деанонимизацию и сопоставление реальных идентификаторов пользователей с общедоступной историей транзакций.
3) Протокол консенсуса блокчейна и майнинг
Блокчейн — это общедоступная структура, основанная только на добавлении, которая сохраняет историю транзакций в распределенной системе Биткойн в виде отдельных блоков с использованием дерева Меркла (вместе с безопасной отметкой времени и хешем ранее проверенного блока транзакций). Новый блок успешно добавляется в их цепочку только в том случае, если узлы майнера проверяют его, решая сложную головоломку с доказательством работы (PoW). Блокчейн также позволяет эффективно обходить эти блоки, чтобы найти право собственности на биткойн, поскольку блоки сохраняются в заданном порядке. Более того, манипулирование блоками невозможно, потому что фальсификация только одного блока изменит все его хэш-значение, и фальсификация будет обнаружена, поскольку каждый отдельный блок содержит хэш-значение предыдущего.
С другой стороны, в блокчейне процесс проверки блоков имеет распределенный характер. Это означает, что потенциально может быть найдено более одного действительного решения одновременно. Однако это приведет к действительным разветвлениям блокчейна с аналогичной длиной. Теперь, когда происходит более одного форка, майнерские узлы смогут подобрать форк и продолжить добычу поверх него. Поскольку такая ситуация может быть распространенной, в сети, вероятно, существует блокчейн с более длинной версией (и остальные узлы майнеров в конечном итоге начнут строить свои соответствующие блоки поверх этой более длинной версии).
Кроме того, поскольку процесс майнинга в сети носит непрерывный характер, блокчейн всегда будет увеличиваться в размерах. Следовательно, операция добавления нового блока будет следующей:
1. Узел майнера добавит новый блок в свою локальную цепочку блоков и объявит о решении, как только будет определено действительное хеш-значение (т. е. его хэш-значение такое же или меньше чем значение хеш-функции цели);
2. Узлы майнера быстро проверят полученное решение действительного блока и обновят свою локальную цепочку блоков, если объявленное решение действительно (в противном случае он будет отброшен). Что касается вознаграждений, победивший узел майнера всегда будет награждаться набором новых биткойнов в качестве поощрения, а выигрышный хешированный блок будет рекламироваться и публиковаться в публичном распределенном реестре.
Из-за децентрализованного характера блокчейна Биткойн авторизация не применяется ни к одному TTP до обработки какой-либо транзакции. В частности, активные узлы в сети могут создавать цепочку блоков совместно и независимо от какого-либо централизованного органа. Распределенные объекты могут давать сбои, вредоносную работу, или даже плохую сетевую связь между этими объектами, что может привести к прерыванию обслуживания. Следовательно, чтобы гарантировать непрерывный сервис, сетевые узлы должны предоставить гарантию того, что все они согласны и добавляют действительные записи в цепочку блоков. Все узлы майнеров вынуждены соблюдать правила, установленные в протоколе распределенного консенсуса, для добавления нового блока блокчейна. Алгоритм PoW используется для того, чтобы позволить системе Биткойн реализовать полностью распределенный консенсус, который представляет собой уникальный тип биткойн-транзакций, созданных узлом майнера
Многие существующие исследования биткойнов сосредоточены на алгоритме консенсуса, поскольку они открывают различные вопросы и исследовательские проблемы, включая, помимо прочего, стабильность, повреждение вычислительных ресурсов и масштабируемость. С другой стороны, с точки зрения потребления энергии и ресурсов протокол консенсуса PoW в блокчейне считается неэффективным. Поэтому несколько исследовательских усилий также были направлены на решение этой проблемы путем представления новых согласованных протоколов, таких как Proof-of-Stake (PoS), практическая византийская отказоустойчивость (PBFT), Proof of Storage, и так далее. Эти недавно предложенные протоколы отличаются от PoW в отношении расходуемых ресурсов и управляются потребляемыми внутренними ресурсами, а не внешним использованием (как в PoW). Обратите внимание, что это инфраструктурное изменение устанавливает совершенно другую серию стимулов и, следовательно, мутирует модели безопасности в системе Биткойн.
4) Одноранговая (P2P) коммуникационная сеть
Биткойн использует неструктурированную сеть на основе P2P вместе с надежным транспортным соединением на основе TCP. Неструктурированная сеть подходит Биткойну из-за необходимости быстрого распространения данных для достижения консенсуса в блокчейне. Тем не менее, здесь возникают различные проблемы, и их можно преодолеть несколькими способами, например, с помощью основной сети, работающей для подключения к системе Биткойн. Здесь все объекты (т. е. узлы) должны хранить список IP-адресов своих потенциальных партнеров. Этот список будет загружаться через DNS-сервер, где дополнительные IP-адреса разрешены для обмена между другими подключенными одноранговыми узлами. Все одноранговые узлы стремятся поддерживать как минимум 8 незашифрованных TCP-подключений в оверлейной сети и использовать порт 8333 для прослушивания входящих подключений. Как только входящее соединение обнаружено, одноранговые узлы должны запустить приложение, основанное на рукопожатии уровня, где обмениваемые пакеты (сообщения) состоят из метки времени синхронизации, версии протокола и IP-адреса узла. По умолчанию каждый пиринговый узел выбирает своих относительных одноранговых узлов случайным образом, и обновленный список одноранговых узлов составляется через постоянный интервал времени. Этот конфигурационный процесс помогает снизить риск разделения сети (угроза), т. е. когда злоумышленник может установить противоречивое представление о блокчейне через скомпрометированный объект.
Узлы майнинга прослушивают входящие объявления о новых блоках, которые рекламируются с помощью сообщений Inventory Vector (INV), составляющих хеш-значение вновь добытого блока. Пакет GETDATA будет передан смежному узлу в случае, если майнер обнаружит, что у него нет недавно объявленного блока, и поэтому смежный узел ответит нужными данными через пакет BLOCK. Ожидается, что желаемый блок прибудет в течение максимум 20 минут. В противном случае узел майнера, запрашивающий информацию, отключится от не отвечающего смежного майнера и потребует ту же информацию от другого смежного майнера. Преимущество использования неструктурированной P2P-сети в Биткойн заключается в обеспечении быстрого распространения данных во всей ее сети.
С точки зрения устойчивости инфраструктуры Биткойн очень зависит от последовательного и эффективного состояния консенсуса на основе PoW и блокчейна в целом. Несогласованное состояние блокчейна, скорее всего, приведет к уязвимости двойного расходования средств в случае, если оно будет успешно использовано пользователями. По этой причине коммуникационная сеть P2P должна гарантировать надежную масштабируемость. Более того, в Биткойне типичные пользователи используют схему упрощенной проверки платежей (SPV), чтобы проверить, добавлена ли конкретная транзакция к конкретному блоку, то есть без загрузки всего блока. Однако эта операция очень затратна и может привести к другим угрозам безопасности, в частности к атакам типа «отказ в обслуживании» (DoS).
5) Эфириум: преодоление ограничений инфраструктуры Биткойна
Эфириум был впервые представлен Виталиком Бутериным и др., как общедоступная распределенная операционная система и вычислительная платформа с открытым исходным кодом в виде блокчейна. Эта предлагаемая система поддерживает скорректированную версию протокола Накамото и обеспечивает эффективные функции и функциональность смарт-контрактов. Кроме того, эта платформа на основе блокчейна решает несколько критических проблем и ограничений в структуре блокчейна и языке сценариев Биткойн, таких как полнота по Тьюрингу. Еще поддерживает состояние транзакции для всех возможных видов вычислений, включая циклы, но не ограничиваясь ими. Наконец, эфириум (Ethereum) предлагает абсолютный уровень, позволяющий пользователям создавать и разрабатывать собственный формат транзакций, возможность перехода состояний и правила владения с помощью встроенной функции Turning-Complete. Однако эти привилегии предоставляются за счет использования концепции смарт-контрактов в Ethereum, а криптографические правила выполняются только до тех пор, пока выполняются определенные инструкции.