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

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

.pdf
Скачиваний:
6
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
111
обеспечивает распределенное и децентрализованное выполнение смарт-контрактов? Чтобы понять это, необходимо рассмотреть вирту­альную машину Ethereum. Это сердце Ethereum, которое позволяет про­граммировать блокчейн Ethereum.
Смарт-контракты Ethereum обычно пишутся на языках програм-
мирования высокого уровня. Самым популярным из них является Solidity, который выглядит как смесь C ++ и JavaScript. Также суще­ствует Vyper – новый язык, находящийся в стадии разработки. Смарт­контракты, написанные на этих языках программирования высокого уровня, должны быть скомпилированы до кода виртуальной машины Ethereum (Ethereum Virtual Machine) – сокращенно кода EVM.
Таким образом, мы переходим с более высокого уровня, удобо-
читаемого языка, и компилируем его в код EVM, который является бо­лее простым языком более низкого уровня – гораздо более простым для понимания и выполнения машиной. После того как код скомпилирован в код EVM, каждый узел в сети Ethereum выполняет его. И все узлы выполняют код одинаково, если у них установлена последняя версия программного обеспечения EVM.
Ethereum – это распределенный компьютер, потому что каждый узел выполняет смарт-контракты Ethereum. Затем узлы приходят к кон­сенсусу по поводу нового состояния системы. Это должно быть до­вольно знакомо, поскольку каждый полный узел в биткоин хранит свою собственную бухгалтерскую книгу, что делает каждый узел банком. В биткоин узлы приходят к консенсусу относительно того, кто какими UTXO владеет.
А в Ethereum после выполнения кода EVM узлы приходят к консен­сусу в отношении общего состояния сети. И как на самом деле узлы при­ходят к консенсусу? С помощью Proof-of-Work. Тот же протокол распре­деленного консенсуса, который используется в биткоин, также использу­ется в Ethereum. Конечно, есть различия между реализациями Proof-of­Work Ethereum и Bitcoin, но общие концепции определенно похожи.
Помните, что Proof-of-Work требует от майнеров расходовать вы­числительные мощности, чтобы увеличить свои шансы на предложение блоков сети. Нет настоящего разумного способа решить хеш-голово­ломку, поэтому майнерам приходится применять грубую силу, т. е. пе­ребирать все возможные варианты. А связав право голоса с вычисли­тельной мощностью, физическим ресурсом реального мира, мы можем предотвратить атаки Сибиллы.
112
Вот некоторые различия между алгоритмами Proof-of-Work бит­коин и Ethereum. В Ethereum время создания блока составляет 15 се­кунд, а в биткоине – 10 минут. Это позволяет довольно быстро выпол­нять и дорабатывать смарт-контракты. Однако такое быстрое время блока действительно увеличивает количество естественных форков и потерянных блоков, но это учитывается в протоколе Ethereum.
Ранее мы рассматривали алгоритм доказательства работы бит­коин, а также то, как он связан вычислениями и использует sha-256. В Ethereum алгоритм доказательства работы называется Ethash. Ethash привязан к памяти и утверждает, что устойчив к ASIC. Однако скорость хеширования сети Ethereum значительно ниже, чем у биткоин.
Майнеры в Ethereum конкурируют с созданием блоков, выполняя код EVM и ища решение задачи. Как и раньше, Proof-of-Work – это со­ревнование, и только один майнер может добавить блок в цепочку блоков Ethereum и получить соответствующее вознаграждение. Proof-of-Work – это, по сути, способ случайного выбора в зависимости от доли хеш-мощ­ности, результата выполнения одного узла для добавления в блокчейн.
Каждый узел Ethereum запускает виртуальную машину Ethereum как часть процедуры проверки блока. Как и прежде, сетевой консенсус устраняет необходимость в доверенном третьем лице. Чтобы нарушить смарт-контракты, придется разрушить всю сеть. Таким образом, это позволяет реализовать одноранговые соглашения, которые навсегда остаются в цепочке блоков.
Код контракта выполняется виртуальной машиной Ethereum, или сокращенно EVM, как упоминалось ранее. Код контракта компилируется, и код, который фактически выполняется на каждом узле, является кодом EVM. А код EVM – это язык байт-кода на основе стека низкого уровня.
Если вы знакомы с JVM (Java Virtual Machine – виртуальная ма­шина Java, основная часть исполняющей системы Java), это похоже на то, как языки JVM, такие как Java, Scala и Groovy, компилируются до байт­кода JVM. Тот факт, что мы можем скомпилировать сложный код смарт­контракта в простые понятные для машины инструкции в форме кода EVM, который все узлы в сети могут выполнять одним и тем же детерми­нированным образом, обеспечивает основу для консенсуса в Ethereum.
Поскольку каждый узел в сети Ethereum выполняет смарт-кон­тракты, мы сталкиваемся с одной непосредственной проблемой: что, если контракт имеет бесконечный цикл? Контракт помещается в сеть Ethereum, и кто-то вызывает функцию, в которой есть бесконечный цикл, и все узлы видят эту транзакцию и начинают выполнять
113
бесконечно эту функцию. Таким образом, каждый узел в сети застрял бы в выполнении этого бесконечного цикла.
А благодаря проблеме остановки, когда даны описание проце­дуры и ее начальные входные данные и требуется определить, завер­шится ли когда-либо выполнение процедуры с этими данными либо эта процедура все время будет работать без остановки, мы знаем, что не­возможно заранее определить, будет ли когда-либо прекращен данный контракт. И все это приводит к очень простому способу для злоумыш­ленников запускать атаки отказа в обслуживании: путем захвата компь­ютеров по всему миру бесконечным циклом, что делает их неспособ­ными выполнять другие, более значимые контракты.
К счастью, разработчики Ethereum подумали об этом и реализо­вали решение – в виде так называемого газа. До сих пор мы особо не обсуждали концепцию газа в Ethereum, но она играет центральную роль в том, как работают транзакции и как майнеры стимулируются для про­верки блоков в цепочке блоков Ethereum. Газ – это то, что способствует выполнению данного контракта. Газ – это схема измерения Ethereum, которая учитывает используемую полосу пропускания, стоимость хра­нения и стоимость вычислений в блокчейне Ethereum.
Каждая вычислительная операция в EVM потребляет газ, а раз­личные вычисления, например сложение или умножение, потребляют разное количество газа. В Ethereum имеется список расхода газа для различных операций и расчетов. Все операции во время выполнения транзакции, включая чтение и запись базы данных, сообщения и каж­дый вычислительный шаг, выполняемый виртуальной машиной, по­требляют определенное количество газа. Следовательно, для каждой инициируемой транзакции должна существовать гарантия, что атаки типа «отказ в обслуживании» в сети могут быть предотвращены и что майнеры получат вознаграждение за добавление транзакции в блок. По­этому каждому операционному коду EVM для выполнения требуется «газ», тем самым предотвращается упомянутая атака отказа в обслужи­вании с бесконечным циклом.
Таким образом, каждая транзакция определяет два параметра: «начальный газ», или максимальное количество «газа», которое тран­закция желает потреблять, и «цена газа», или комиссия в монетах «эфира», которую контракт готов платить за единицу газа. Выглядит это следующим образом:
1) Каждая транзакция должна указывать количество «газа», кото-
рое она готова потреблять (вызывается startgas), чтобы покрыть
114
использование вычислений EVM и любое используемое хранилище или полосу пропускания.
2) Отправитель транзакции также должен указать комиссию, ко­торую он готов платить за единицу «газа» (gasprice). В начале выпол­нения «эфир», как произведение startgas*gasprice, удаляется со счета отправителя транзакции, чтобы гарантировать, что майнер получит ко­миссию, даже если учетная запись пользователя обанкротится на пол­пути во время выполнения.
3) Если операция gas_rem транзакции выполнена полностью, и при этом было использовано меньше «газа», чем указанный лимит, то в конце выполнения отправитель транзакции получает возмеще­ние, произведение gas_rem*gasprice, а майнер блока получает награду произведение (startgas–gas_rem)*gasprice. Как упоминалось ранее, эта «комиссия майнера» откладывается в самом начале транзакции.
4) Если в середине выполнения транзакции «заканчивается газ», то все выполнение возвращается, но транзакция тем не менее действи­тельна, и единственный результат транзакции – передать всю сумму произведения (startgas * gasprice) майнеру.
Весь этот «газовый бизнес» состоит в том, чтобы убедиться, что злонамеренный узел или хакер не может просто загрузить сеть Ethereum вредоносными транзакциями (такими, как бесконечный цикл), не неся слишком дорогих затрат. Идея здесь заключается в том, что, хотя выполнение контракта отменяется, кто-то в сети должен был вложить вычислительную мощность для выполнения кода EVM. И как только газ израсходован, это доказательство того, что кто-то выполнил программу. Таким образом, это дает нам два конечных состояния: либо программа завершается, либо заканчивается «газ». Ethereum по-преж­нему позволяет кому-то писать бесконечный цикл в смарт-контракте. Тем не менее злоумышленник, пытающийся атаковать сеть, должен за­платить достаточно эфира для финансирования DoS-атаки.
В некотором смысле вы можете думать о покупке «газа» как о цене, которую вы должны заплатить за использование этой распреде­ленной и не требующей наличия чувства доверия вычислительной мощ­ности. Таким образом, это лишает пользователей стимулов к запуску дорогостоящих вычислений без достаточных средств. Поскольку каж­дое вычисление требует «газа», злоумышленнику, осуществляющему DoS-атаку в сети, потребуется абсурдно большое количество эфира, а поскольку атака настолько дорогостоящая, это в значительной сте­пени препятствует атаке такого типа.
115
Мы упоминали, что узлы приходят к консенсусу по состоянию сети и выполнение кода в EVM изменяет состояние. В некотором смысле можно думать о EVM как о базовом механизме перехода между состояниями. Когда мы выполняем транзакцию, мы переходим из предыдущего состояния в новое. И в любой момент времени конечное состояние представляет текущее состояние сети Ethereum.
Итак, вы начинаете с текущего состояния блока, требуемого «газа», текущей памяти, транзакции, вызывающей контракт, сообще­ния, которое в основном содержит метаданные транзакции, код кон­тракта, а также счетчик стека и программы – практически все, что нужно для правильного выполнения транзакции. И вы вводите это в EVM и получаете новое состояние блокировки со всеми обновлен­ными балансами счетов и внутренним состоянием, а также новой стои­мостью «газа», которая возвращается.
Итак, некоторые выводы об архитектуре высокого уровня Ethereum. Основная цель Ethereum – не оптимизировать вычислительную эффективность, а обеспечить возможность распределенных вычислений без необходимости наличия доверия к другой стороне. Каждый узел в сети должен выполнять одни и те же вычисления, поэтому Ethereum яв­ляется избыточно параллельным. И все это для эффективного достижения консенсуса по состоянию системы без использования доверенных тре­тьих сторон. И поскольку выполнение контрактов дублируется на всех узлах, выполнение является дорогостоящим. Например, вам не следует обучать модели машинного обучения или делать что-либо еще дорого­стоящее с вычислительной точки зрения непосредственно на смарт-кон­трактах. Можно надеяться, что это не будет стимулом использовать блок­чейн для вычислений, которые могут выполняться вне сети.
Далее мы ознакомимся как с базовыми, так и с расширенными вариантами использования смарт-контрактов. В этих случаях рассмот­рим, как можно использовать конкретное свойство цепочки блоков, для того чтобы продемонстрировать уникальные и значимые функции, предоставляемые блокчейном.
Первый возможный вариант использования – это интеллектуаль­ный актив, или токен, построенный на основе существующей в настоя­щее время цепочки блоков. Это буквально создает вашу собственную валюту поверх другой валюты. Все, что нужно сделать, – это убедиться, что пользователь, который хочет потратить деньги, имеет средства, прошел аутентификацию и не тратит дважды.
Протоколы аутентификации и двойного расходования встроены в Ethereum, поэтому единственная логика, которую должен
116
обрабатывать смарт-контракт, – это проверка средств. Таким образом, для работы требуются только две основные функции: структура хране­ния для связывания адресов с активами и функция send () для передачи активов. Это демонстрирует, что создание приложения на основе блок­чейн Ethereum позволяет вам использовать существующие в настоящее время протокол и процедуры блокчейн. Все, что нужно предоставить пользователю, – это базовая безопасная логика для воплощения в жизнь желаемого варианта использования блокчейн.
Следует отметить, что создание функциональных смарт-контрак­тов и создание безопасных смарт-контрактов – это две совершенно раз­ные вещи. Защита смарт-контрактов невероятно сложна, как вы могли догадаться из последних новостей о взломах смарт-контрактов.
Еще один значимый вариант использования смарт-контрактов – кошельки с мультиподписью. Теперь мы можем включить ту же функ­циональность в Ethereum в удобочитаемой форме. Здесь можем исполь­зовать встроенные протоколы аутентификации для создания кошелька для многосторонней аутентификации. Эта функция позволяет нам иметь схему подписи m из n, в которой m адресов из общего числа n владельцев кошелька должны подписываться при каждой транзакции. Это гарантирует, что никто не может контролировать средства. Не­смотря на то что логику достаточно легко описать, реализация Solidity довольно сложна. Компания Parity, создавшая кошельки с мультипод­писью, дважды была взломана из-за необнаруженных уязвимостей.
Допустим, мы придумали новый термин и желаем доказать, что придумали его раньше всех, но пока не хотим раскрывать это модное слово публике. Как сделать это, чтобы все доверяли? Можно это сде­лать, только объединив хеш-функции и надежный блокчейн. Мы хра­ним хеш нашего документа в блокчейне. Поступая таким образом, мо­жем доказать всем в любой момент позже, что именно мы включили этот хеш в блокчейн и что наша информация не была изменена. Таким образом, мы «доказали существование» некоторой информации в опре­деленный момент времени.
С Proof-of-Existence (доказательство существования) используем как публичную возможность аудита, так и неизменяемость блокчейн. Кроме того, есть возможность внедрить децентрализованную систему DNS. «DNS» означает «система доменных имен», и его единственная цель – связать URL-адреса с IP-адресами. В смарт-контракте мы можем легко разработать схему, которая создает ассоциации между именами и значениями.
117
Г л а в а 7 . К О Р П О Р А Т И В Н Ы Е Б Л О К Ч Е Й Н - П Л А Т Ф О Р М Ы
Прежде чем оценить возможность создания и сценарии исполь­зования корпоративных блокчейн-платформ, необходимо ответить на множество вопросов, например таких как: Что такое корпоративный блокчейн? Какие проблемы мы пытаемся решить, используя блокчейн­платформы? И может быть, эти проблемы можно решить, используя традиционные методы? Что лучше: открытые децентрализованные или надежные централизованные корпоративные блокчейн-платформы?
Начнем с истории корпоративного блокчейн. По мере того как блокчейн и созданные на его основе криптовалюты, например биткоин, становились все более популярными, банки и крупные корпорации начали обращать внимание на потенциальные возможности примене­ния этой новой технологии. И это несмотря на то что в самой идее бит­коин заложено стремление устранить потребность в банках, создав об­щедоступный распределенный реестр. Банки же хотят использовать ту же технологию блокчейн, однако сохранив свои экономическую силу и общественное влияние посредством создания «закрытых блокчейн» или частных сетей, в которых некий центральный орган контролирует, кто может, а кто не может принимать участие в консенсусе и подтвер­ждать транзакции в сети, по сути предлагая сохранить существующую финансовую систему.
Это желание финансовых структур в конечном итоге привело к появлению «закрытых» корпоративных блокчейн, которые не были открытыми и не имели экономических стимулов для своего развития. Однако на самом деле цель создания корпоративных блокчейн-плат­форм заключалась не в создании еще одной общедоступной сети блок­чейн, такой как биткоин, а в отделении технологии блокчейн от крип­товалют с целью посмотреть, как технология блокчейн может приме­няться в бизнесе для повышения его конкурентоспособности. Подходы были совершенно разные. Одни разработчики в корпоративных блок­чейн-платформах увидели только криптографию с открытым ключом, которая способствовала проведению пиар-мероприятий, повышению трафика и цен на акции. В то же время другие поощряли исследования фундаментальных технологий блокчейн, поскольку они более совме­стимы и лучше подходят для корпоративного использования, чем свя­занные с ними общедоступные системы блокчейн.
118
Несмотря на то что для корпоративных блокчейн существует множество вариантов использования, большинство проблем, которые корпоративный блокчейн пытается решить, попадают в три основные категории:
– устранение сбоев координации;
– горизонтальная интеграция систем;
– создание самостоятельных децентрализованных систем.
Сейчас множество компаний хотят воспользоваться преимуще­ствами технологии блокчейн, однако пока нет общепризнанных стан­дартов, а существующие корпоративные блокчейн-решения часто но­сят ситуационный характер.
В своем текущем состоянии блокчейн делает отдельный компь­ютер значительно менее эффективным, поскольку каждый компьютер как узел в сети должен выполнять те же вычисления, что и все осталь­ные узлы сети. Чтобы прийти к консенсусу, эти узлы должны затем свя­зываться с другими узлами по всему миру, что дополнительно вызывает проблемы с задержкой. В результате блокчейн гораздо менее масшта­бируем, чем традиционные системы. В итоге это приводит к тому, что корпоративный блокчейн ограничен определенными требованиями к масштабированию и вариантам использования, которые сделали бы решение, не связанное с блокчейн, невозможным.
Существующий опыт применения технологии блокчейн в про­мышленности показал, что корпоративные блокчейн-платформы наибо­лее оптимально использовать для устранения сбоев координации, гори­зонтальной интеграции различных систем (производственных, логисти­ческих) и создания самостоятельных распределенных и децентрализован­ных сетей. Сбои в координации между несколькими сторонами, стремя­щимися к совместной работе, часто возникают из-за проблем с доверием, которую можно решить с помощью технологии блокчейн.
Блокчейн также является технологией интеграции – он объединяет разрозненные хранилища данных в единую интегрированную систему, которая обеспечивает большую экономию на масштабе. Обеспечивая неизменность, целостность, возможность аудита подлинности данных, блокчейны применяют общие стандарты данных (например API), позво- ляя сразу же взаимодействовать между несколькими системами. Нако­нец, блокчейн предоставляет новые децентрализованные модели для ра­боты наряду с существующими централизованными, тем самым предот­вращая возможность централизованного изменения данных.
119
На самом базовом уровне блокчейн – это просто узкоспециали­зированная база данных. Рассмотрим очень обобщенную классифика­цию баз данных. По сути, у нас могут быть централизованные или рас­пределенные базы данных. Централизованные базы данных управля­ются одной организацией (например, компанией), которая обрабаты­вает все запросы и данные. Конечно, при наличии централизованной базы данных мы должны доверять одной базе данных, и здесь консен­суса достичь невозможно, поскольку нет еще как минимум одного ис­точника, подтверждающего подлинность полученных данных.
В случае с распределенными базами данных идея доверия стано­вится более важной. Распределенные базы данных управляются груп­пой узлов хранения данных, которые связаны друг с другом и работают для поддержания согласованного общего представления всей системы. В некоторых системах узлы способны полностью доверять друг другу. В распределенных базах данных может быть реализована сеть надеж­ных отказоустойчивых баз данных. Однако в распределенных базах данных мы также можем иметь распределенные реестры, которые обычно подразумевают более слабые гарантии доверия. Они позволяют сторонам, которые не полностью доверяют друг другу, прийти к кон­сенсусу.
И наконец, блокчейн – это подкласс распределенных реестров. Распределенные реестры – это определенный тип распределенной базы данных, в которой информация организована в хронологическом по­рядке, имитируя традиционный реестр. Чаще всего узлы хранения не могут полностью доверять друг другу. Вместо этого они должны внед­рить некоторую форму консенсусного протокола, чтобы иметь после­довательное представление о системе.
Теперь некоторые замечания. Одно замечание заключается в том, что необходимо отличать термин «распределенный», который характе­ризует пространственные аспекты базы данных, от термина «централи­зованный/децентрализованный», который характеризует способы «по­литического» устройства базы данных. Например, мы можем называть системы баз данных организации централизованными, потому что все они управляются одной организацией, а значит, они политически цен­трализованы. А с точки зрения географии и пространства мы могли бы иметь единую «центральную» базу данных или несколько баз данных, географически централизованных или децентрализованных.
Централизованные базы данных, такие как сервер с одним паро­лем, размещаются, хранятся и обслуживаются в одном месте
120
и управляются одной центральной организацией, обрабатывающей все запросы и обработку данных. В этом есть определенные преимущества: простота конструкции, немедленное обновление данных, экономиче­ская эффективность и минимальное резервирование. Однако централи­зованные базы данных также имеют множество недостатков:
– склонны к возникновению узких мест, когда производитель­ность, или пропускная способность системы ограничена одним или не­сколькими компонентами или ресурсами;
– отсутствуют возможности одновременного доступа нескольких пользователей для записи к одному и тому же набору данных;
– могут действовать как единая точка отказа, отчего база данных становится менее отказоустойчивой.
С другой стороны, распределенные базы данных состоят из групп узлов, которые взаимодействуют и доверяют друг другу, чтобы пока­зать наличие системы в целом и поддерживать ее работу. Поскольку больше нет единой точки отказа, система становится более отказо­устойчивой и может справиться с большим спросом, равномерно рас­пределяя нагрузку по всем узлам. Однако для распределенных баз дан­ных характерны повышенные сложность, стоимость и избыточность, а также большее количества точек отказа. Все это повышает издержки, связанные с распространением данных.
Особым типом распределенной базы данных является распреде­ленный реестр. Он содержит узлы, управляемые разными организаци­ями, которые могут доверять или не доверять друг другу. Хотя для рас­пределенных реестров существует множество механизмов консенсуса, те протоколы консенсуса, которые специально реализуют цепочку бло- ков в своих записях, известны как блокчейн.
Блокчейны также можно разделить на категории в зависимости от их архитектуры, а также доверия и доступа – разрешения, которыми обладает обычный пользователь. В большинстве случаев все блок­чейны относятся либо к общедоступной, либо к закрытой категории.
Еще в 2015 г. Виталий Бутерин, один из основателей системы Ethereum, определил три разных типа блокчейн в зависимости от их ти­пов доступа:
– публичный блокчейн;
– блокчейн консорциума: «цифровая книга», принадлежащая консорциуму, которая может быть запрограммирована на запись любых транзакций; все транзакции там координируются узлами, выбранными консорциумом;
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]