Введение в технологию Блокчейн - Тимур Сергеевич Машнин 10 стр.


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

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

Боб предположительно запускает свой биткойн-узел, и это будет честный узел.

Узел Боба отклонит эту ветвь как недействительную, так как она содержит недействительную транзакцию.

Эта ветка недействительна, потому что подписи не проходят проверку.

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

И из-за этого, недостаточное подорвать консенсус.

И из-за этого, недостаточное подорвать консенсус.

Вы должны подорвать криптографию, чтобы украсть биткойны.

Таким образом, мы делаем вывод, что эта атака невозможна для 51-процентного злоумышленника.

Следует отметить, что все это всего лишь мысленный эксперимент.

Если бы были фактические признаки 51-процентной атаки, то, вероятно, разработчики заметят это и отреагируют на это.

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

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

Давайте рассмотрим еще одну атаку.

Может ли 51-процентный злоумышленник сдерживать некоторые транзакции?

Скажем, есть некий пользователь, Кэрол, которого нападающий очень не любит.

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

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

Злоумышленник может также отказаться не только от создания, но и от использования блоков, содержащих такие транзакции.

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

Злоумышленник не может остановить передачу транзакции большинству узлов.

Может ли злоумышленник изменить вознаграждение блока?

То есть, может ли злоумышленник притвориться, что награда за блок, вместо 12.5 биткойнов, составляет 100 биткойнов?

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

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

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

Наконец, может ли атакующий каким-то образом уничтожить доверие к Биткойну?

Давайте представим, что произойдет.

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

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

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

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

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

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

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

Дальше мы будет рассматривать детали и нюансы биткойна.

Bitcoin транзакции

Далее мы рассмотрим механизм Биткойна более детально.

Мы рассмотрим реальные структуры данных и реальные скрипты.

Для начала вспомним, где мы остановились в прошлый раз.

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

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

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

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

И все потому, что мы предположили, что эта валюта может мотивировать этих майнеров.

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

На данный момент мы будем использовать упрощенную модель реестра.

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



Как мы можем построить валюту на основе такой книги или реестра?

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

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

А затем позже вы можете эти монеты передавать дальше.

Транзакция будет содержать что-то вроде «мы передаем 17 монет от Алисы к Бобу», и эта транзакия будет подписана Алисой.

И эта информация о транзакции будет содержаться в книге.

В этом примере, после того как Алиса получила 25 монет в первой транзакции, затем передает 17 монет Бобу во второй транзакции, и у нее осталось еще 8 биткойнов на ее счете.

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

В этом примере, что нужно сделать, чтобы понять, есть ли у Алисы 15 монет, которые она пытается передать Дэвиду?

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

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

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

Поэтому Bitcoin не использует модель на основе учетной записи.

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



Транзакции указывают количество входов и количество выходов.

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

Для транзакций, в которых создаются совершенно новые монеты, нет монет, которые потребляются.

Каждая транзакция имеет уникальный идентификатор.

Выходы индексируются, начиная с 0.

В этом примере, первая транзакция не имеет входа, потому что эта транзакция создает новые монеты, и у нее есть выход из 25 монет, отправляемых Алисе.

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

Теперь предположим, что Алиса хочет отправить некоторые из этих монет Бобу.

Для этого она создает новую транзакцию, вторую транзакцию в нашем примере.

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

Здесь она ссылается на выход 0 транзакции 1 (единственный выход транзакции 1), который присвоил Алисе 25 битконов.

Она также должна указать выходные адреса в этой транзакции.

В этом примере Алиса указывает два выхода, 17 монет Бобу и 8 монет Алисе.

И, конечно же, эта транзакция подписывается Алисой, так что мы знаем, что Алиса разрешает эту транзакцию.

Почему Алиса должна отправить деньги самой себе в этом примере?

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

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

Алиса хочет заплатить Бобу только 17 биткойнов, но выход, который у нее есть, стоит 25 биткойнов.

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

Это может отличаться от адреса, которому принадлежат 25 биткойнов, но он должен принадлежать ей. Это называется изменение адреса или change address.

Когда новая транзакция добавляется в реестр, как можно легко проверить, что она является валидной?

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

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

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

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

Так как транзакции могут иметь много входов и много выходов, разделять и объединять значения легко.

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

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

Назад Дальше