Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

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

.pdf
Скачиваний:
6
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
101
В нынешнем виде эгоистичный майнинг по-прежнему является эффективным способом получения большей прибыли с учетом того, что у вас есть значительный объем хеш-мощности, но при использова­нии идеи защиты майнинга «Опубликовать или уничтожить» его слож­нее осуществить. У этой идеи тоже есть много ограничений. Во-первых, она предполагает синхронность, а биткоин асинхронен. Бесполезно определять верхнюю границу времени распространения блока, потому что вы никогда не можете быть уверены, все ли блоки на определенной длине цепи были доставлены или нет. Это присуще большим распреде­ленным системам, таким как биткоин.
Например, для любого параметра отказоустойчивости k>1 зло­умышленник может транслировать свои блоки прямо перед опозда­нием. Это может вызвать противоречия среди честных майнеров, так как некоторые будут видеть блоки по времени, а некоторые – с опозда­нием, в зависимости от того, сколько времени потребовалось этим бло­кам для распространения по сети. Кроме того, поскольку идея защиты майнинга «Опубликовать или уничтожить» будет развернута как об­новление программного обеспечения для биткоин-майнеров, не все майнеры будут обновлять свое программное обеспечение одновре­менно. В период перехода от FRP по умолчанию к взвешенному FRP злоумышленники потенциально могут воспользоваться ситуацией и за­пустить атаки с двойным расходом на сбитых с толку пользователей. Еще одно ограничение идеи защиты майнинга «Опубликовать или уни­чтожить» – игнорирование некоторых факторов реального мира. Из-за задержки сети часто возникают естественные вилки, но они не разре­шены в этой модели.
Комиссия за транзакции не рассматривается как дополнительный стимул к вознаграждениям за блок. И также не учитывается, когда су­ществует несколько эгоистичных майнеров, как они будут взаимодей­ствовать друг с другом и с остальной частью сети. Однако анализ идеи защиты майнинга «Опубликовать или уничтожить» и всех других ра­бот, которые мы просмотрели, – очень хорошее начало в разработке лучшей защиты майнинга биткоин. Возможно, использование асин­хронной модели вместо идеи защиты майнинга «Опубликовать или уничтожить» – хорошая возможность, чтобы найти защиту от эгоистич­ных майнеров.
Отступив от анализа индивидуальных средств защиты, важно по­нять работу реальной сети биткоин. В конце концов, как мы видели в случае идеи «Опубликовать или уничтожить», что звучало
102
действительно здорово в теории, в конечном итоге это не работает на практике из-за предположений об определенных свойствах сети бит­коин, особенно о синхронности.
Итак, во-первых, сеть биткоин является одноранговой, и нет цен­трального объекта, отправляющего и получающего сообщения для нас. Сообщения по сети отправляются через «протокол сплетен», который также называется лавинной рассылкой. Обычно, если я хочу отправить транзакцию, я должен сообщить обо всех узлах, к которым я подклю­чен, которые мы называем своими соседями. Все мои соседи рассказы­вают своим соседям, а их соседи рассказывают своим соседям и т. д.
Также следует отметить, что, как мы обсуждали в разделе меха­ники биткоин, мое сообщение будет иметь цифровую подпись. Вы под­ключаетесь и присоединяетесь к сети биткоин в первую очередь с по­мощью рекурсивной процедуры. В базовое программное обеспечение биткоин жестко запрограммирован список начальных пиров (исходных узлов), к которым вы подключаетесь изначально.
Вы спрашиваете у этих исходных узлов о наличии соседей, вы­бираете некоторых из них в качестве узлов, запрашиваете у этих узлов их соседей и повторяете это, пока не решите, что у вас достаточно слу­чайный набор соединений. Биткоин позволяет каждому узлу иметь мак­симум 125 соединений, и обычно у вас есть 8 исходящих соединений и 117 входящих.
В биткоин нам нужна ровная топология, т. е. мы хотим, чтобы каждый узел имел примерно одинаковый вес, мощность майнинга, имел случайные соединения и выглядел довольно однородно. Но на самом деле это не так. Как известно, между узлами мощности майнинга огром­ная разница. Это означает, что некоторые узлы более влиятельны, чем другие. Так действительно ли сеть биткоин настолько децентрализо­вана и распределена, как мы думаем? Разумеется, нет. Допустим, у Де­ниса невероятно высокая скорость хеширования. Возможно, он управ­ляет майнинг-фермой или пулом. Мы не можем точно сказать, по­скольку майнинговые фермы и пулы иногда хотят оставаться в секрете, чтобы майнеры не атаковали их. Денис, возможно, более влиятельный, чем другие узлы в сети.
Сравните хеш-мощность Дениса и других майнеров, которые просто являются узлом SPV (упрощенная проверка платежей, и это обычно контрастирует с «запуском полного узла»), находящимся в сети, или узлом, который является просто майнером-одиночкой. У Дениса гораздо больше хеш-мощности, чем у любого из них. И нет
простого способа определить топологию сети. Если у Дениса есть май­нинг-пул, его майнеры вообще не обязательно должны быть напрямую подключены к сети биткоин. Они могли просто подключаться к узлу Дениса напрямую через какой-то легкий протокол. Таким образом, все майнеры, связанные с Денисом, по сути составляют секретный подграф (секретную часть полного графа. Граф – математическая абстрак­ция реальной системы объектов любой природы, обладающих парными связями. Граф как математический объект есть совокупность двух мно­жеств – множества самих объектов, называемого множеством вер­шин, и множества их парных связей, называемого множеством ребер). И оказывается, что из-за этой топологии скрытого графа и того факта, что Денис может управлять несколькими узлами в сети и, возможно, несколькими пулами, Денис потенциально может скрыть тот факт, что у него есть более 50 % хеш-мощности сети. И, что еще страшнее, Де­нису не нужно даже 50 % хеш-мощности сети.
Как мы видели ранее на примере атак и защиты, биткоин страдает от некоторых проблем с выравниванием стимулов, особенно в случае эгоистичного майнинга. Как выясняется, сеть биткоин может оказаться под угрозой, если у пула Дениса (или даже набора пулов) будет 33 % хешрейта сети или пусть даже меньше 25 %. Возможно, существует еще необнаруженная атака или эгоистичная схема майнинга, которая снижает порог прибыли еще ниже.
Помимо топологии сети, нам также нужно беспокоиться о за­держке сети. Как мы видели в модели защиты майнинга «Опубликовать или уничтожить», эгоистичный майнер может опубликовать свои сек­ретные блоки, пока не стало слишком поздно. Некоторые узлы увидят этот процесс вовремя, а другие увидят поздно. И это довольно хороший пример того, как задержка в сети является здесь проблемой.
Как и раньше, идет гонка за распространение, и в конечном итоге победит майнер, который лучше подключен к сети и имеет более быст­рое время распространения. Это приводит к непропорциональной при­были майнеров. Майнеры, которые лучше связаны с сетью, видят про­исходящие изменения быстрее и могут отправлять сообщения и блоки быстрее. Между тем вполне возможно, что плохо подключенный май­нер может потратить все это время на поиск блока, и когда он наконец найдет его, время его распространения может быть настолько медлен­ным из-за задержки сети, что за это время другой майнер уже нашел бы и отправил конкурирующий блок для большей части сети.
103
Вернемся к разделу, где обсуждали атаки Сибиллы и то, как не­целесообразно иметь больше идентификаторов, потому что в Proof-of­Work мы делаем вычислительную мощность ограничивающим факто­ром. Что ж, если будем достаточно умны, можем запустить атаку Си­биллы другим способом, используя то, что мы только что рассмотрели, а именно топологию сети и задержку.
Допустим, у Дениса есть способность наводнять сеть узлами. Это могут быть либо его майнеры, либо, если он достаточно умен, он может даже написать вредоносное программное обеспечение, заставляющее компьютеры жертв работать как узлы с нулевым энергопотреблением: они просто сидят и слушают сеть биткоин и передают информацию об­ратно Денису. Они будут действовать как сенсоры. Денис мог атаковать честных майнеров, используя свое господство на сетевом уровне. До­пустим, Денис также занимается эгоистичным майнингом и уже имеет некоторые секретные блоки, которые распределены по всем его узлам с нулевой мощностью. Когда узлы Дениса узнают о следующем чест­ном блоке 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? Что происходит внутри, что
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]