blockchain

Это третья часть статьи, где специалист по программному обеспечению Притхи Касиредди (Preethi Kasireddy) делится своими взглядами на проблемы технологии блокчейн и способы их решения. С первой и второй частями можно ознакомиться здесь.

3. Отсутствие формальной верификации контрактов

Формальная верификация смарт-контрактов остается СЕРЬЕЗНОЙ проблемой. Прежде всего давайте выясним, что вообще представляет собой формальная верификация контракта. Для этого необходимо понять, что такое формальное доказательство. В математике это математическое доказательство, которое было проверено компьютером с помощью фундаментальных математических аксиом и примитивных правил вывода.

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

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

Так почему же важно формально верифицировать программы, зашифрованные в смарт-контрактах?

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

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

Реальность такова, что создать заслуживающие доверия смарт-контракты, свободные от серьезных программных ошибок, нелегко, независимо от того, какие меры предосторожности принимаются. В случае эфириума, например, верифицировать код децентрализованной виртуальной машины эфириума (EVM) очень непросто, что объясняется устройством EVM. Таким образом, создание решений формальной верификации для эфириума — это еще более сложная задача.

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

Решения проблемы формальной верификации

Мне хотелось бы продемонстрировать в этом разделе больше публично доступных решений, но, к сожалению, они немногочисленны. Я обнаружила набор инструментов, созданный Ёити Хираи, инженером по формальной верификации Ethereum foundation. Он находится еще на очень ранней стадии. Ёити сумел добиться первых результатов в верификации нескольких смарт-контрактов, включая маленький формальный договор. Это первый на моей памяти реальный контракт, проанализированный в среде доказательства теорем.

Сам Ёити говорит:

«Полученные результаты далеки от совершенства. Я по-прежнему нахожу больше изъянов в настройках верификации, чем в верифицированных контрактах. Я уже говорю об этом публично, поскольку данный проект — хороший пример того, какой объем работы (и насколько кропотливой) необходим, чтобы верифицировать смарт-контракт с помощью логического умозаключения, полученного благодаря машине. На данный момент, если бы мне предложили внедрить смарт-контракт стоимостью более $100 000 и доверили составить график, я бы рассмотрел возможность взяться за это (другой вариант — сперва попробовать внедрить контракт с меньшими значениями)».

Есть и другие команды (например, Tezos), которые полностью отказываются от использования Solidity в качестве языка, а EVM — в качестве виртуальной машины. Вместо этого они создают собственные языки программирования смарт-контрактов и виртуальные машины, осуществляющие формальную верификацию.

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

4. Требования к размеру хранилища данных

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

Однако хранение информации в публичном блокчейне означает, что данные:

  1. хранятся каждым полным узлом в сети;
  2. хранятся неопределенно долго, поскольку база данных блокчейна предназначена лишь для добавления и неизменяема.

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

Решения проблемы хранения данных

В нескольких молодых проектах используются различные стратегии разделения данных на сегменты и хранения их распределенным образом на участвующих в обработке данных узлах (то есть распределенного хранения). Базовый принцип состоит в том, что каждый узел не хранит все: наборы узлов расщепляют или «распределяют» данные в своей среде. Приведу несколько примеров таких проектов.

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

Storj: решение, в котором файлы и данные вначале сегментируются, зашифровываются, а затем распределяются по многочисленным узлам таким образом, что каждый узел хранит лишь малую часть данных, то есть происходит распределенное хранение. Storj Coin (SCJX) используется для оплаты хранения и действует в качестве вознаграждения для узлов, хранящих часть пользовательских файлов или данных.

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

Decent: децентрализованная платформа совместного использования контента, позволяющая пользователям загружать, монетизировать и совместно использовать свои работы (видео, музыку, электронные книги и т. д.), не полагаясь на централизованную третью сторону. Пользователям облегчается доступ к контенту, поскольку промежуточные стороны отсутствуют, а узлы, хранящие контент, награждаются комиссиями.

5. Ненадежные механизмы достижения консенсуса

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

Механизм, в течение долгого времени использовавшийся в не требующем доверия блокчейне и способный достаточно эффективно противостоять атакам, называется протоколом консенсуса. Протоколы консенсуса не являются новой функцией, возникшей вместе с блокчейном и биткоином. Например, в 1992 году Дворк и Наор создали одну из первых систем Proof-of-Work (PoW, доказательства выполнения работы), в рамках которой можно создавать криптографическое доказательство вычислительных затрат, чтобы получить доступ к ресурсу без необходимости полагаться на доверие. Эту систему использовали для борьбы со спамом. Позже, в 1997-м, Адам Бэк создал схожую систему под названием Hashcash. Затем, в 2003 году, Вишнумурти и другие впервые использовали Proof-of-Work с целью обезопасить валюту. В том случае токен использовался не в качестве общей валюты, а с целью поддержать p2p-систему обмена файлами.

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

Консенсус Proof-of-Work

Proof-of-Work — это схема, состоящая из решения проблем, которые трудно решить, но легко верифицировать. Майнеры выполняют сложные ресурсоемкие расчеты, используя свои вычислительные мощности, а система биткоина награждает их новыми биткоинами и комиссиями за транзакции. Чем больше у майнера вычислительных мощностей, тем большим «весом» он обладает в деле принятия решения по консенсусу.

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

Слабые места протокола Proof-of-Work

Специальному оборудованию отдается преимущество. К недостаткам консенсуса Proof-of-Work относится необходимость использовать специальное аппаратное оборудование. В 2013 году появились устройства, называемые интегральными схемами прикладной ориентации (микросхемы ASIC). Они были разработаны исключительно для майнинга биткоина, увеличив его эффективность в 10-50 раз.

С тех пор майнинг с обычным процессором стал совершенно невыгодным: майнить можно только посредством устройства ASIC, сделанного самостоятельно или купленного у производителя. Это противоречит децентрализованной сущности блокчейна, где у каждого есть возможность вносить вклад в безопасность сети.

Чтобы уменьшить масштабы этой проблемы, эфириум предпочел сделать свой алгоритм PoW (Ethhash) последовательно требовательным к объему памяти. Алгоритм спроектирован таким образом, что вычисления требуют больших объемов памяти и большой пропускной способности одновременно. Такие требования не позволяют даже сверхбыстрому одновременно решать множество задач. Благодаря этому уменьшается риск централизации и создается более однородная конкурентная среда для узлов, осуществляющих верификацию.

Конечно, это не означает, что в будущем не появится ASIC для эфириума. Специализированное оборудование остается источником серьезного риска для алгоритмов PoW.

Централизация майнинговых пулов. Концепция майнинг-пула состоит в том, что пользователи, вместо того чтобы майнить для себя с крошечными шансами получить награду за создание блока, майнят для пула. Пул бесперебойно посылает им их часть награды пропорционально их вкладу. Проблема майнинг-пулов заключается в том, что, поскольку они больше «весят» в сети, их прибыль стабильнее, чем у отдельных пользователей. Со временем несколько пулов начинают контролировать большую часть сети. В настоящее время, например, пяти ведущим майнинговым пулам принадлежит до 70% всего объема хеша. Это, мягко говоря, пугает.

Энергозатраты. Майнеры задействуют компьютеры огромной мощности, осуществляя вычисления в рамках алгоритма Proof-of-Work, но, к несчастью, вся эта вычислительная работа не представляет для общества ценности.

Согласно индексу потребления энергии биткоином, опубликованному сайтом Digiconomist, сейчас расчетное годовое потребление электроэнергии составляет 29,05 ТВт·ч, что представляет 0,13% глобального расхода электроэнергии. Чтобы дать вам представление о том, насколько это много, скажу, что майнинг биткоина тратит больше электричества, чем 159 отдельно взятых стран мира.

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

Решения проблемы консенсуса

«Полезное» доказательство выполнения работы. Один из способов решения проблемы «пустых» трат энергии состоит в том, чтобы сделать функцию Proof-of-Work средством одновременного решения некоей полезной задачи. Например, представьте сценарий, в рамках которого майнеры тратят свои вычислительные мощности на решение сложных алгоритмов искусственного интеллекта вместо того, чтобы решать случайную SHA256-задачу, требуемую протоколом.

Переход на Proof-of-Stake (доказательство доли владения). Один из способов решить проблему централизации майнинга состоит в том, чтобы полностью отказаться от майнинга и перейти к другому механизму расчета «веса» каждого узла в консенсусе. Эту цель преследует протокол Proof-of-Stake (PoS, доказательство доли владения).

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

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

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

Проблема «ничего на кону» (Nothing-at-Stake). Если в сети происходит форк (случайный или злонамеренный), лучшая стратегия для узлов, обрабатывающих транзакции, — одновременно голосовать за несколько разных блоков на одной высоте. Они способны это делать, поскольку не увеличивают физические вычислительные затраты и просто голосуют своими долларами. Это означает, что майнеры в системе PoS получат вознаграждения независимо от того, какая из цепочек выиграет (то есть они «ничего не ставят на кон» и ничто не мешает им майнить в обоих блокчейнах).

Атака дальнего действия (Long-range attack). Когда происходит форк блокчейна с PoW, майнер начинает новую цепочку за несколько блоков позади нынешней «головы» основной цепи, иначе потребуются нереальные вычислительное мощности. В случае PoS майнер может начать форк с любого места, поскольку единственное, что для этого требуется, — доля, то есть деньги. Это означает, что майнер может получить валидаторы предыдущих участников и создать миллионы блоков в новом блокчейне, мешая пользователям понять, какой из блокчейнов является «правильным».

Образование картеля. В децентрализованной системе, управляемой экономическими стимулами, в высшей степени реален риск формирования олигополии посредством координации усилий участников. Как говорит исследователь из команды эфириума Влад Замфир:

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

Чтобы более эффективным образом заменить Proof-of-Work на Proof-of-Stake, мы нуждаемся в алгоритме, который решит проблему «ничего на кону» и устранит возможность атаки дальнего действия, не создавая новые риски тайных соглашений.

Значительного прогресса в этом удалось добиться командам эфириума и Tendermint. В Tendermint одними из первых адаптировали традиционную передачу двоичных файлов для использования в блокчейнах, создав жизнеспособный аппарат консенсуса PoS. Однако Tendermint присущи определенные изъяны (тема для другого поста). Схожим образом в эфириуме достигли значительного прогресса в деле внедрения PoS, но реальность такова, что пока в «живой» сети это не работает в необходимом масштабе.

В отличие от Proof-of-Work, Proof-of-Stake имеет меньше обоснований и сложнее для понимания. Осознание различных преимуществ и недостатков различных проектных решений требует дальнейших исследований и экспериментов. Таким образом, присутствует настоятельная потребность в сотрудничестве ради создания более эффективных, быстрых и надежных систем консенсуса, основанных на том, что уже сделано.

Будь в курсе! Подписывайся на Криптовалюта.Tech в Telegram