Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Основы технологии блокчейн и криптовалют для менеджеров. Учебное пособие
.pdf
101
В нынешнем виде эгоистичный майнинг по-прежнему является
эффективным способом получения большей прибыли с учетом того,
что у вас есть значительный объем хеш-мощности, но при использовании идеи защиты майнинга «Опубликовать или уничтожить» его сложнее осуществить. У этой идеи тоже есть много ограничений. Во-первых,
она предполагает синхронность, а биткоин асинхронен. Бесполезно
определять верхнюю границу времени распространения блока, потому
что вы никогда не можете быть уверены, все ли блоки на определенной
длине цепи были доставлены или нет. Это присуще большим распределенным системам, таким как биткоин.
Например, для любого параметра отказоустойчивости k>1 злоумышленник может транслировать свои блоки прямо перед опозданием. Это может вызвать противоречия среди честных майнеров, так
как некоторые будут видеть блоки по времени, а некоторые – с опозданием, в зависимости от того, сколько времени потребовалось этим блокам для распространения по сети. Кроме того, поскольку идея защиты
майнинга «Опубликовать или уничтожить» будет развернута как обновление программного обеспечения для биткоин-майнеров, не все
майнеры будут обновлять свое программное обеспечение одновременно. В период перехода от FRP по умолчанию к взвешенному FRP
злоумышленники потенциально могут воспользоваться ситуацией и запустить атаки с двойным расходом на сбитых с толку пользователей.
Еще одно ограничение идеи защиты майнинга «Опубликовать или уничтожить» – игнорирование некоторых факторов реального мира. Из-за
задержки сети часто возникают естественные вилки, но они не разрешены в этой модели.
Комиссия за транзакции не рассматривается как дополнительный
стимул к вознаграждениям за блок. И также не учитывается, когда существует несколько эгоистичных майнеров, как они будут взаимодействовать друг с другом и с остальной частью сети. Однако анализ идеи
защиты майнинга «Опубликовать или уничтожить» и всех других работ, которые мы просмотрели, – очень хорошее начало в разработке
лучшей защиты майнинга биткоин. Возможно, использование асинхронной модели вместо идеи защиты майнинга «Опубликовать или
уничтожить» – хорошая возможность, чтобы найти защиту от эгоистичных майнеров.
Отступив от анализа индивидуальных средств защиты, важно понять работу реальной сети биткоин. В конце концов, как мы видели
в случае идеи «Опубликовать или уничтожить», что звучало

102
действительно здорово в теории, в конечном итоге это не работает на
практике из-за предположений об определенных свойствах сети биткоин, особенно о синхронности.
Итак, во-первых, сеть биткоин является одноранговой, и нет центрального объекта, отправляющего и получающего сообщения для нас.
Сообщения по сети отправляются через «протокол сплетен», который
также называется лавинной рассылкой. Обычно, если я хочу отправить
транзакцию, я должен сообщить обо всех узлах, к которым я подключен, которые мы называем своими соседями. Все мои соседи рассказывают своим соседям, а их соседи рассказывают своим соседям и т. д.
Также следует отметить, что, как мы обсуждали в разделе механики биткоин, мое сообщение будет иметь цифровую подпись. Вы подключаетесь и присоединяетесь к сети биткоин в первую очередь с помощью рекурсивной процедуры. В базовое программное обеспечение
биткоин жестко запрограммирован список начальных пиров (исходных
узлов), к которым вы подключаетесь изначально.
Вы спрашиваете у этих исходных узлов о наличии соседей, выбираете некоторых из них в качестве узлов, запрашиваете у этих узлов
их соседей и повторяете это, пока не решите, что у вас достаточно случайный набор соединений. Биткоин позволяет каждому узлу иметь максимум 125 соединений, и обычно у вас есть 8 исходящих соединений
и 117 входящих.
В биткоин нам нужна ровная топология, т. е. мы хотим, чтобы
каждый узел имел примерно одинаковый вес, мощность майнинга, имел
случайные соединения и выглядел довольно однородно. Но на самом
деле это не так. Как известно, между узлами мощности майнинга огромная разница. Это означает, что некоторые узлы более влиятельны, чем
другие. Так действительно ли сеть биткоин настолько децентрализована и распределена, как мы думаем? Разумеется, нет. Допустим, у Дениса невероятно высокая скорость хеширования. Возможно, он управляет майнинг-фермой или пулом. Мы не можем точно сказать, поскольку майнинговые фермы и пулы иногда хотят оставаться в секрете,
чтобы майнеры не атаковали их. Денис, возможно, более влиятельный,
чем другие узлы в сети.
Сравните хеш-мощность Дениса и других майнеров, которые
просто являются узлом SPV (упрощенная проверка платежей, и это
обычно контрастирует с «запуском полного узла»), находящимся
в сети, или узлом, который является просто майнером-одиночкой.
У Дениса гораздо больше хеш-мощности, чем у любого из них. И нет

простого способа определить топологию сети. Если у Дениса есть майнинг-пул, его майнеры вообще не обязательно должны быть напрямую
подключены к сети биткоин. Они могли просто подключаться к узлу
Дениса напрямую через какой-то легкий протокол. Таким образом, все
майнеры, связанные с Денисом, по сути составляют секретный подграф
(секретную часть полного графа. Граф – математическая абстракция реальной системы объектов любой природы, обладающих парными
связями. Граф как математический объект есть совокупность двух множеств – множества самих объектов, называемого множеством вершин, и множества их парных связей, называемого множеством ребер).
И оказывается, что из-за этой топологии скрытого графа и того факта,
что Денис может управлять несколькими узлами в сети и, возможно,
несколькими пулами, Денис потенциально может скрыть тот факт, что
у него есть более 50 % хеш-мощности сети. И, что еще страшнее, Денису не нужно даже 50 % хеш-мощности сети.
Как мы видели ранее на примере атак и защиты, биткоин страдает
от некоторых проблем с выравниванием стимулов, особенно в случае
эгоистичного майнинга. Как выясняется, сеть биткоин может оказаться
под угрозой, если у пула Дениса (или даже набора пулов) будет 33 %
хешрейта сети или пусть даже меньше 25 %. Возможно, существует
еще необнаруженная атака или эгоистичная схема майнинга, которая
снижает порог прибыли еще ниже.
Помимо топологии сети, нам также нужно беспокоиться о задержке сети. Как мы видели в модели защиты майнинга «Опубликовать
или уничтожить», эгоистичный майнер может опубликовать свои секретные блоки, пока не стало слишком поздно. Некоторые узлы увидят
этот процесс вовремя, а другие увидят поздно. И это довольно хороший
пример того, как задержка в сети является здесь проблемой.
Как и раньше, идет гонка за распространение, и в конечном итоге
победит майнер, который лучше подключен к сети и имеет более быстрое время распространения. Это приводит к непропорциональной прибыли майнеров. Майнеры, которые лучше связаны с сетью, видят происходящие изменения быстрее и могут отправлять сообщения и блоки
быстрее. Между тем вполне возможно, что плохо подключенный майнер может потратить все это время на поиск блока, и когда он наконец
найдет его, время его распространения может быть настолько медленным из-за задержки сети, что за это время другой майнер уже нашел бы
и отправил конкурирующий блок для большей части сети.
103

Вернемся к разделу, где обсуждали атаки Сибиллы и то, как нецелесообразно иметь больше идентификаторов, потому что в Proof-ofWork мы делаем вычислительную мощность ограничивающим фактором. Что ж, если будем достаточно умны, можем запустить атаку Сибиллы другим способом, используя то, что мы только что рассмотрели,
а именно топологию сети и задержку.
Допустим, у Дениса есть способность наводнять сеть узлами. Это
могут быть либо его майнеры, либо, если он достаточно умен, он может
даже написать вредоносное программное обеспечение, заставляющее
компьютеры жертв работать как узлы с нулевым энергопотреблением:
они просто сидят и слушают сеть биткоин и передают информацию обратно Денису. Они будут действовать как сенсоры. Денис мог атаковать
честных майнеров, используя свое господство на сетевом уровне. Допустим, Денис также занимается эгоистичным майнингом и уже имеет
некоторые секретные блоки, которые распределены по всем его узлам
с нулевой мощностью. Когда узлы Дениса узнают о следующем честном блоке X, Денис может проигнорировать блок X и опубликовать
свой секретный блок P. Если блок P достигает майнера до блока X, то
майнер по умолчанию майнит блок P. Таким образом, в этой атаке Денис использует как задержку сети, так и топологию.
Денис хорошо связан, имеет меньшую задержку и может распространять свой секретный блок P быстрее, чем если бы он контролировал
только один узел. Он также является уникальным владельцем топологии сети, поскольку владеет множеством узлов в сети, а также потому,
что ему принадлежит значительная часть мощности майнинга сети.
Итак, помимо того, что мы рассмотрели в этой главе, существует
гораздо больше средств атак и средств защиты, таких как атаки eclipse
и упорный майнинг, которые учитывают задержку сети, топологию
и многое другое.
104

105
Г л а в а 6 . E T H E R E U M КАК ПЛАТФОРМА
С М А Р Т - К О Н Т Р А К Т О В
В этой главе рассмотрим варианты использования Ethereum
и блокчейн. Понимание того, что может предложить биткоин, позволяет нам лучше понять, какой ценностью является Ethereum как платформа смарт-контрактов. Помните важность четырех ключевых компонентов биткоина: идентичности, транзакций, ведения записей и консенсуса. И именно, тщательный дизайн и сочетание этих компонентов действительно отличало вначале биткоин от других технологий. Однако
идеи, заложенные в биткоин, оказались более фундаментальными, чем
сам биткоин, и это поможет нам понять ключевые компоненты
Ethereum.
Еще раз рассмотрим, что делает биткоин таким особенным. Вопервых, это важность идентичности, особенно для обеспечения аутентификации и целостности. Для этого был использован ECDSA, алгоритм цифровой подписи с эллиптической кривой. Пользователи генерируют свой закрытый ключ случайным образом или каким-то трудно
угадываемым способом, например с помощью хеширования или используя «мнемонику с растянутым ключом». Затем были использованы односторонние функции для создания общедоступного адреса.
Конечно, основная идея биткоин заключалась в том, чтобы иметь
возможность отправлять транзакции между пользователями. Использование кошельков UTXO упростило обеспечение более высокой степени
конфиденциальности, например, если вы отправили все свои изменения
UTXO на разные адреса, находящиеся под вашим контролем. С другой
стороны, чтобы рассчитать весь ваш баланс в биткоинах, вам нужно будет просуммировать все ваши UTXO. Кроме того, потенциально вам
также придется ссылаться на более чем один UTXO при совершении
транзакции, что в некоторых случаях нежелательно. Тем не менее внедрение UTXO было нововведением, которое сделало возможным транзакции в биткоинах, и оно хорошо работает, несмотря на принятые компромиссные решения.
Далее, конечно же, у нас есть блокчейн: известная структура данных, которая позволяет вести записи в сети. У каждого полного узла
сети есть копия блокчейн. Мы сделали это, чтобы избежать централизации власти: чтобы не было центрального банка, мы сделали всех банками. И блокчейн построен таким образом, чтобы его нельзя было

106
подделать. Каждый блок в цепочке блоков ссылается на хеш заголовка
предыдущего блока. Кроме того, внутри каждого блока мы создаем корень Меркла, который представляет собой «сводку» всех транзакций
в этом блоке. Таким образом, каждый раз, когда в цепочке блоков изменяется предыдущая транзакция, это изменяет хеш транзакции, который всплывает, чтобы изменить корень Меркла, который затем изменяет хеш заголовка блока.
Таким образом, с помощью цепочки блоков существует эффективный способ не только хранить данные, но и гарантировать, что эти
данные реальны. И это очень важно, особенно с учетом того, что работа
осуществляется в публичных сетях, где нет уверенности, что все будут
честны.
И, наконец, у нас есть консенсус Proof-of-Work. Узлам в сети биткоин нужен был способ прийти к консенсусу по поводу обновлений блокчейн, поэтому была внедрена система голосования, которую сделать
было не так просто, как присвоить каждому пользователю один голос, поскольку очень просто создать новые идентификаторы. Итак, мы удостоверились в необходимости присваивании веса нашим голосам.
Инновация заключалась в том, чтобы каждый решал криптографическую хеш-головоломку, поощряемую вознаграждением за блок.
И поэтому тот, кто первым решил криптографическую хеш-головоломку и представил доказательства того, что решение правильное,
предложит новое обновление для блокчейн. И чем больше у вас вычислительной мощности, тем больше вероятность, что вы сначала решите
хеш-головоломку и предложите новый блок. Таким образом, право голоса ограничено вычислительной мощностью – физическим ограничением, а не количеством идентификаторов, которыми владеет пользователь. И, тщательно спроектировав биткоин, мы получаем определенные
преимущества:
1) В биткоин используется псевдоним, вымышленной имя. Крип-
тографические идентификаторы обеспечивают целостность и аутентификацию, что также означает, что мы несем ответственности в том
смысле, что если кто-то пытается удвоить расходы или сделать что-то
злонамеренное, мы можем это определить.
2) Биткоин демократичен в том смысле, что решения, принимаемые на основе консенсуса Proof-of-Work, не требуют от нас возникновения чувства доверия к кому-либо в сети. Мы просто должны доверять
математике, лежащей в основе консенсуса, и тому, что в сети есть честное большинство, чтобы сеть функционировала нормально. Кроме того,

107
мы видим, что блокчейн – это неизменный реестр истины. Все видят
одну и ту же версию истины, поскольку у нас есть консенсус. В блокчейн сохраняется структура данных, поэтому никто не может просто
войти и изменить историю.
3) Биткоин был разработан так, чтобы не поддаваться цензуре.
Для цензуры транзакций нам придется контролировать большую часть
сети, и для любой из сторон это будет значительно затруднительно.
4) Биткоин способен распространяться, поскольку имеется сеть
для его распространения и нет центральной точки отказа. Выполнение
транзакций зависит от сети майнеров, расположенных по всему миру.
Рассмотрим смарт-контракты и то, как они попадают в пространство блокчейн. Контракт – это письменное или устное соглашение, обязательное для исполнения. Особое внимание следует обратить на то,
что контракт должен быть согласован и подлежит исполнению по закону. Таким образом, нам нужен какой-то консенсус в системе смартконтрактов. И посредством консенсуса мы должны иметь возможность
согласовать как содержание контракта, так и его выполнение.
Теперь возникает вопрос: что делает смарт-контракт таким «умным»? Смарт-контракт – это фрагмент кода, который облегчает, проверяет или обеспечивает выполнение переговоров или выполнение цифрового контракта. Чтобы достичь консенсуса, доверенный объект должен запустить этот код. В конце концов мы должны быть уверены, что
цифровой контракт выполняется правильно. Подобно традиционному
контракту, он содержит набор условий, которые должны быть выполнены. Разница в том, что исполнение осуществляется с помощью тщательно разработанных алгоритмов, а не в соответствии с законом. Впервые использование смарт-контрактов было предложено на платформе
Ethereum.
Как и биткоин, Ethereum – это платформа, которая постоянно меняется. Она активно разрабатывается не только официальной командой
Ethereum Foundation, но и большим сообществом разработчиков программного обеспечения с открытым исходным кодом. На протяжении
многих лет он формировался под влиянием текущих событий и сообщества. И усовершенствования программного обеспечения и предложения на протяжении многих лет, как и в случае с биткоин, являются свидетельством большой базы пользователей, а также демократичности
программного обеспечения.
Поскольку все больше и больше людей начинают использовать
Ethereum для создания приложений, Ethereum необходимо все больше

108
и больше адаптироваться. На веб-сайте Ethereum говорится, что
Ethereum – это децентрализованная платформа, предназначенная для
запуска смарт-контрактов. Короче говоря, это распределенный компьютер, расположенный среди множества узлов по всему миру, который
выполняет код, запускающий определенные приложения. Приложения
выполняются точно так, как запрограммировано, без какой-либо возможности простоя, цензуры, мошенничества или вмешательства третьих лиц. Ethereum использует блокчейн, который основан на учетной
записи, а не на основе UTXO, как биткоин.
Формально Ethereum – это распределенный конечный автомат,
а транзакции в сети изменяют глобальное состояние системы. Узлы
в Ethereum отслеживают и приходят к консенсусу в отношении состояния глобальной системы, которое включает данные о том, кто чем владеет. Выполнение транзакций переводит нас из предыдущего состояния
в новое, поэтому эти транзакции являются функциями перехода между
состояниями.
Собственный актив Ethereum – «эфир», который является основой стоимости в экосистеме Ethereum, а также имеет решающее значение для согласования стимулов. По сути, у Ethereum есть все то, что
есть у биткоин: отсутствует необходимость в наличии доверия между
сторонами, неизменяемый, не подвергающийся цензуре, использует
псевдоним, не имеет центральной точки отказа и стремится к политике
«один процессор – один голос», но это другой вариант использования
технологии блокчейн.
До создания Ethereum Виталик Бутерин, создатель Ethereum,
утверждал, что биткоин нужен язык сценариев более общего назначения, но он не получил особой поддержки своего предложения в сети
биткоин. В результате он создал Ethereum, важной особенностью которого является то, что он поддерживает полный язык сценариев
Тьюринга.
Ethereum и Bitcoin – две самые популярные платформы блокчейн
в мире на сегодня, но преследуют они две разные цели. Биткоин – это
«золотой стандарт» блокчейн. Он существует дольше всех, и его протокол успешно поддерживал огромное количество транзакций за последние годы. Его цель – осуществить транзакцию с биткоин, его собственным активом.
С другой стороны, Ethereum – это платформа блокчейн смартконтрактов, распределенный мировой компьютер, имеющий собственный актив «эфир», который существует для финансирования

109
вычислений и согласования стимулов. Его основная цель – не действовать как средство обмена ценностями.
Биткоин прост и надежен. Это глобальная платежная система.
Это все, что компания действительно намеревается сделать.
Ethereum имеет гораздо более широкое видение и поэтому поддерживает гораздо больше функций, например гораздо более мощный
язык сценариев.
Биткоин имеет примитивный язык сценариев на основе стека, который не является полным по Тьюрингу, а значит, приложения, которые мы можем создавать на биткоин, довольно ограниченны.
В Ethereum, с другой стороны, есть язык сценариев, полный по
Тьюрингу, что в первую очередь является одним из факторов, побуждающих к созданию приложений в среде Ethereum. Таким образом, на
Ethereum можно создавать более широкий спектр приложений, чем на
Bitcoin, что делает его более удобным для разработчиков.
Еще одно ключевое различие состоит в том, что биткоин основан
на UTXO, тогда как Ethereum – на аккаунте.
В биткоин закрытые ключи подтверждают право собственности
на UTXO. Когда вы тратите биткоины, вы тратите их из предыдущих
транзакций. И чтобы рассчитать свой текущий баланс, должны просуммировать все UTXO, которые у вас есть. Причина, по которой биткоин
использует UTXO, заключается в том, что они упрощают совершение
транзакций и предотвращают двойные расходы.
В Ethereum закрытые ключи подтверждают владение учетной записью, которая отслеживает текущий баланс. Учетные записи более эффективны, чем UTXO, поскольку для расчета баланса нужно только
ссылаться на свою учетную запись, а не суммировать все ваши UTXO.
Кроме того, поскольку нашей конечной целью является поддержка
смарт-контрактов, гораздо дешевле и проще искать баланс учетной записи, а также осуществлять перевод между учетными записями, когда
у нас есть модель учетной записи, а не модель UTXO.
В Ethereum есть два типа учетных записей: внешние и контрактные.
Учетные записи, принадлежащие извне, как следует из их названия, – внешние, принадлежат некоторой внешней организации (за пределами сети Ethereum). Это может быть человек, группа людей, корпорация или что-то еще.
Внешние аккаунты содержат адрес, который они используют,
чтобы люди могли отправлять им эфир, а также баланс эфира. Этот тип

110
учетной записи может отправлять транзакции для передачи эфира или
запуска кода контракта, который находится в контрактных счетах.
Контрактные счета принадлежат смарт-контрактам. Контрактные счета содержат адрес, связанный код контракта, а также постоянное хранилище. Код контрактного счета выполняется, когда внешние
аккаунты или другие контрактные аккаунты совершают транзакции для
запуска вызовов функций их кода.
Смарт-контракты в Ethereum похожи на автономных агентов, которые живут внутри сети Ethereum, в то время как обычные пользователи, управляющие внешними учетными записями, – нет. Смарт-контракты реагируют на внешний мир, когда к ним подключаются транзакции, вызывающие определенные функции. Смарт-контракты имеют
прямой контроль над внутренним балансом эфира, внутренним состоянием контракта, а также над постоянным хранилищем.
Смарт-контракты Ethereum обычно служат четырем основным
целям:
1) Их можно использовать для хранения и обслуживания данных.
Данные, представляющие что-то полезное для пользователей или других контрактов. Например, может существовать смарт-контракт, определяющий новую валюту токена или, возможно, членство в определенной организации, за получение которого вы должны заплатить определенную сумму.
2) Смарт-контракты также могут использоваться для управления
контрактом или отношениями между пользователями, которые не доверяют друг другу. Это, пожалуй, наиболее понятное использование
смарт-контрактов, поскольку это просто обычный контракт, но в распределенной сети Ethereum. Например, у вас могут быть смарт-контракты для управления финансовыми контрактами, условным депонированием или страхованием.
3) Смарт-контракты также могут предоставлять дополнительные
функции другим контрактам. Вы можете писать контракты, которые
вызывают другие контракты, возможно используя их как программную
библиотеку, используя функциональность существующего контракта.
4) И, наконец, смарт-контракты можно применять для сложных
сценариев использования аутентификации. Например, вы можете определить m из n мультиподписей, что мы также рассматривали, когда изучали биткоин.
Известно, как смарт-контракты могут быть выражены в коде, но
как они выполняются в сети Ethereum? Что происходит внутри, что
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
