Quick Take

  • Масштабирование Ethereum — беспрецедентная задача, Plasma — это масштабирующая среда уровня 2, целью которой является повышение пропускной способности транзакций.
  • Часть 2 посвящена контрольным точкам, доказательству сжатия, деревьям меркла и многим другим

Эта статья является второй статьей из серии из нескольких частей, объясняющей плазму, написанной Дэниелом Голдманом.


Ранее в разделе «Понимание плазмы»

Прочитайте Часть 1 здесь

В первой части мы начали исследовательскую работу по Plasma — поиску высокопроизводительной платежной системы, обеспечивающей безопасность цепочки Ethereum с помощью лишь единичных транзакций постоянного размера внутри цепочки. Мы остановились на конструкции Plasma Cash, которая дала нам много функций, которые мы искали, хотя и принесла с собой два больших недостатка: «Монеты» Plasma Cash — это, по сути, неуглимируемые токены (ограничивающие гибкость номиналов платежей), и это требует пользователи могут хранить большой, постоянно растущий набор данных.

Здесь мы рассмотрим некоторые дополнительные функции и механизмы, которые основаны на Plasma Cash (и / или переосмысливают), предназначенные для обхода — или, по крайней мере, смягчения — этих недостатков.

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

С этим, вперед:


Меньше данных на стороне клиента, стратегия 1: контрольные точки

Что мы увидели в (что мы будем называть здесь) Vanilla Plasma Cash, так это то, что объем данных, которые требуется хранить каждому клиенту, линейно растет с течением времени; то есть для каждой монеты требуется одно доказательство Меркле либо включения (монета была потрачена), либо исключения (монета оставлена ​​на месте) для каждого блока плазмы. это полная история Это необходимо, потому что невозможно сказать, какой из этих компонентов пользователю может понадобиться для разрешения спора. Хранение всех этих данных — это боль, и передача их следующему владельцу каждый раз, когда оплата производится, тем более.

Чтобы облегчить эту боль, представьте себе, что если через некоторые регулярные интервалы — скажем, каждые две недели или каждые 500 плазменных блоков — происходит какое-то «событие в цепочке», которое официально устанавливает право собственности на некоторые (или все) монеты Plasma Cash. Идея состоит в том, что, как только эта «вещь о цепочке» будет завершена, она станет историческим контрольным пунктом: будущие доказательства права собственности теперь должны вернуться только к этой точке; споры, связанные с какой-либо предшествующей историей, не допускаются. Таким образом, доказательства Merkle всех предыдущих блоков могут быть безопасно отброшены навсегда. Это установит конкретную верхнюю границу размера необходимых данных на стороне клиента. Большая победа.

Первое, что нам нужно, чтобы эти контрольные точки работали, — это способ, которым оператор Plasma (или кто-либо еще, но мы предполагаем, что оператор для простоты) подтвердит полное состояние владения монетой в данном блоке Plasma. Как вы уже, наверное, догадались, это будет связано с деревом Merkle: оператор создает дерево, которое просто сопоставляет каждую монету с адресом ее владельца, а затем отправляет корень Merkle в основную цепочку; каждый владелец получает свой соответствующий филиал Merkle; если через 2 недели (или что-то еще) все это не оспаривается, мы считаем этот контрольно-пропускной пункт государственным должностным лицом. (Для этого требуется, чтобы каждый пользователь был в сети, чтобы получать эти данные и контролировать цепочку, но помните, что для Plasma, как и для любой другой конструкции второго уровня, эта жизнеспособность в любом случае требуется.)

Мы все готовы тогда? Увы, жизнь не так проста. К сожалению, механизм контрольных точек, как описано выше, вводит довольно неприятный крайний случай. Предположим, что злонамеренный / скомпрометированный / скучающий оператор передает в корень Merkle контрольную точку, но затем не может предоставить пользователям какие-либо данные, подтверждающие Merkle. Что теперь? Любой подход, который позволяет пользователям заставлять оператора предоставлять эти данные, приводит нас к территории, эквивалентной ошибкам говорящего-слушателя, с обычными векторами и осложнениями. Мы могли бы отметить, что у пользователей все еще есть возможность безопасно выводить свои средства обратно на главную цепочку, что технически верно. Но проблема в том, что теперь каждый пользователь должен будет бегать по главной цепи, и он должен будет делать это в каком-то ограниченном двухнедельном окне. из-за контрольных точек, которые мы только что представили. Угол «массового выхода» ковра, который мы так ловко прижали в первой части, снова появляется.

Но еще не все потеряно; мы можем сохранить вещи с помощью дополнительной работы в форме «криптоэкономических совокупных сигнатур» (обещаю, менее пугающе, чем кажется). По сути, мы немного модифицируем аттестацию владельца, так что оператор требует подписи владельца каждой монеты на контрольно-пропускном пункте; иными словами, оператор может проверять монету только с явного согласия его владельца. Затем оператор также публикует некоторые дополнительные данные о цепочке: подтверждение того, какие монеты включены в контрольный пункт (представьте, что каждая монета представлена ​​в списке двоичных цифр, где «1» означает согласие / включение и «0» исключение).

Это может показаться нелогичным, но этого вполне достаточно для решения проблем! Ключевое наблюдение здесь заключается в том, что каждая монета имеет немного действительный владелец; этот владелец знает, кто он, и также знает, согласны ли они с данным контрольным пунктом или нет. Таким образом, единственный случай, о котором им нужно беспокоиться, это тот, в котором они не отпишитесь на контрольной точке одной из их монет, но все еще видите «1» в слоте монеты. В этом случае они просто бросают вызов — вызов, который, как они знают, пройдут успешно, и лишают законной силы контрольный пункт. Массовых выходов избегают, контрольно-пропускные пункты в целости и сохранности.

Пуристы 2-го уровня тут же заметят, что требование цепочки здесь не является «строго плазменным» подходом; размер растровых данных линейно коррелирует с количеством монет. Прагматически говоря, однако, эта стоимость должна быть довольно минимальной, особенно потому, что в большинстве случаев данные могут быть значительно сокращены с помощью простых методов сжатия битового поля. Кроме того, контрольная точка приносит выгоду всем нотариусам, которые она заверяет, поэтому в идеале стоимость транзакции в сети будет амортизироваться всеми владельцами монеты. Добавьте ко всему этому тот факт, что контрольно-пропускные пункты являются добровольными, и это в конечном счете (возможно) довольно конкретная победа.


Меньше данных на стороне клиента, стратегия 2: сжатие доказательства

Другой, более продвинутый подход для минимизации требований к хранилищу состоит в том, чтобы эффективно сжать множество проверок плазменных блоков в одно. Еще раз напомним, что для монеты Vanilla Plasma Cash требуется одно исключение или включение доказательства Merkle на блок. Идея теперь состоит в том, чтобы добавить требование для включение: мы не только нуждаемся в корне Merkle и вне ветви Merkle, мы также требовать цепного «накопителя RSA» (вторичный способ доказательства членства с использованием теории чистых чисел) и внепланового «доказательства знания» (подробности объяснены в ближайшее время, просто сверните его сейчас). Поскольку оба они необходимы для доказательства включение, только один обязан доказать исключение; монета либо включена в блок, либо нет; других возможностей нет, и отрицание «A и B (для включения)» — «A или B (для исключения)».

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

(Предупреждение: математика поступает)

С изобилием упрощений, вот как это работает: как и в обычном Plasma Cash M.O., каждой монете будет присвоен идентификатор в виде натурального числа, но теперь мы введем дополнительное требование, чтобы все эти идентификаторы были простыми числами. Аккумулятор RSA (G), который фиксируется с каждым блоком плазмы, сам по себе является просто числом; он обновляется с каждым блоком плазмы в соответствии с монетами, которые были переданы.

По сути, G получает значение идентификатора каждой потраченной монеты в текущем блоке. Например, в блоке 101 были переданы монеты с идентификаторами 5, 7, 17, 53 и 83 (все простые числа, # Don’tTrustVerify). Давайте назовем значение аккумулятора, зафиксированное в сотом блоке G₁₀₀ (какое-то большое число); значение аккумулятора для блока 101 вычисляется следующим образом:

Это новый G₁₀₁значение передается в основной цепи.

В внеплановом мире второго уровня, для Алисы (которая, скажем, владеет монетой «17»), чтобы получить уверенность в том, что ее монета находится в накопителе, ей нужен только кофактор 17 в экспоненте — 5 * 7 * 53 * 83 (что составляет 153 965. Между прочим). Она приобретает G₁₀₁ а также G₁₀₁на главной цепочке, и проверяет для себя, что:

Это подтверждает, что номер ее монеты 17 был поглощен аккумулятором. Она также получает обычное обязательство филиала Меркле; Как только она это подтвердит, она готова.

Теперь давайте рассмотрим Боба, владельца монеты с ID 11, монеты, которая, обратите внимание, была не переведен в блок 101. Чтобы получить подтверждение отсутствия, Боб получает доказательство того, что его номер 11 не коэффициент 153 965. Для этого ему просто нужен кофактор, чтобы показать, что 11 является фактором некоторого числа близко до 5 * 7 * 17 * 53 менее чем на 11. Опять же, все, что ему нужно, по сути, это одно число. Как только он сделал это, он сделал; Опять же, учитывая «или / или» характер наших требований, доказательство исключения не требует, чтобы Боб вообще беспокоился о каком-либо бизнесе Меркле.

И вот, наконец, ключ: учитывая свойства возведения в степень и простую факторизацию, вышеуказанный процесс является ассоциативным для любого числа блоков; то есть точный процесс, описанный выше для Боба, может быть выполнен для блоков, которые не являются последовательными. Другими словами, доказательство невключения между блоками 100 и 101 выглядит точно так же, как доказательство невключения между блоками 100 и 1 000 000; оба требуют, чтобы Боб сохранил только один номер.

(Конец математики)

И если вы подумаете об этом, можно с уверенностью сказать, что за время существования данной монеты она, скорее всего, будет переведена только изредка; для подавляющего большинства плазменных блоков он, вероятно, будет сидеть на месте. С механизмом, который мы только что рассмотрели, интервалы между переводами монет теперь требуются только данные постоянного размера (только число или два); так что теперь хранение данных на стороне клиента увеличивается только с каждым переводом монет. Это большое дело.

Некоторые предостережения повторно. Упрощение выше: как описано, значение G быстро станет астрономически огромным. Деталь, которую мы помахали рукой, состоит в том, что значение имеет верхнюю границу в некотором модуле M; это по модулю позволяет нам ограничить рост значения аккумулятора, сохраняя при этом всю необходимую нам информацию о главном множителе. Кроме того, однако, даже с этой верхней границей, для Алисы и Боба, чтобы выполнить их шаг проверки, они должны были бы выполнить некоторую довольно здоровенную арифметику. Это, оказывается, преодолимо: есть несколько компактные схемы корректуры доступны, которые можно использовать, что означает, короче говоря, они могут проверить результат, который им небезразличен, фактически не выполняя полного, громоздкого вычисления.

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

Таким образом, по крайней мере, это потребует от оператора наличия более тяжелого серверного оборудования. Можно надеяться, что мы сможем найти какой-нибудь способ распараллелить операции и, возможно, перенести часть работы на несколько операторов или даже на базу пользователей цепочки Plasma. Кроме того, в какой-то странной космической случайности другие исследования Эфириума и экосистемы вызвали интерес к Проверяемая функция задержки ASICS, которые также требуют вычисления больших стеков экспонент и, таким образом, могут быть полезны здесь. Наконец, все еще изучаются другие подходы, похожие на конструкцию RSA Accumulator, но с различными математическими / криптографическими подробностями — включая векторные обязательства и варианты типа ZK-SNARK / STARK. Однако пока неясно, дадут ли эти направления исследований какой-либо способ экономически преодолеть узкое место в вычислительной сфере.


Платежные платежи: мышление в диапазонах

Наконец, мы переключимся на смягчение более фундаментального ограничения Plasma Cash: неуглеродности его активов. Создайте монету 5-Ether Plasma Cash, которую нельзя разделить или объединить; на протяжении всего жизненного цикла он остается монетой с 5 эфирами.

Чтобы начать думать о том, как преодолеть это, мы можем сначала переформулировать то, как мы думаем о Plasma Cash, фактически не меняя его функциональность (пока!). Давайте представим цепочку Plasma Cash, в которой каждая монета представляет собой фиксированную номинальную стоимость одного актива, который заменим на основной цепи (скажем, Ether). Ранее мы говорили о том, что каждая монета должна рассматриваться как не заменимый токен с уникальным идентификатором; Монета Алисы № 2342 может представлять ровно 20 эфира. Функционально эквивалентный способ думать об этом — представить, что весь эфир в цепочке плазмы существует в виде числа; если в цепочке в общей сложности 5000 эфира, линия увеличивается от 0 до 5000; Эфирный эфир Алисы не обозначается не каким-то уникальным (хотя и произвольным) идентификатором монеты, а скорее как некоторый сегмент на числовой линии, т. Е. «Эфир от 520 до 540». Чтобы гарантировать надлежащее владение эфиром каждого, контракт просто должен обеспечить, чтобы при создании нового «диапазона» он существовал в интервале, ранее не занятом любым другим диапазоном. Пока это верно, у нас есть модель Plasma Cash, изоморфная старой.

Пока все хорошо — теперь, обновление: скажем, Алиса тратит свою «монету», что теперь означало бы передачу права собственности на ее «диапазон» другой стороне. Что если при этом она не только назначит диапазон новому владельцу, но и изменит конечные точки диапазона? Если бы это было возможно, у нее была бы свобода платить Бобу номинал эфира менее 20, то есть «только Эфир от 520 до 523.»

Чтобы приспособиться к этому, мы возьмем конструкцию Plasma Cash и немного ее перевернем: мы сохраним понятие «монеты»; каждая монета будет представлять какой-то бит числовой линии в наименьшей единице эфира, которую мы хотим поддержать (допустим, 0,00001 эфира). Но теперь эти «монеты» существуют только как абстракция — они, в буквальном смысле, не составляют содержание наших плазменных блоков; вместо этого каждый блок теперь является деревом сделки, каждая из которых тратит все монеты в заданном диапазоне. Если хотя бы одна из «монет» в данном диапазоне принадлежит стороне, которая не является спонсором, истинный владелец может бросить вызов, а мы решаем проблемы, используя своего рода криптоэкономические игры-вызовы, знакомые по Vanilla Plasma Cash.

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

Чтобы попасть туда, мы представляем … еще один вариант дерева Меркле! Мы называем эту новую структуру данных деревом индексов Меркле. Листья — это сами транзакции, каждая из которых представляет перевод ряда монет; Что нового в дереве индексов Merkle, так это то, что теперь каждому узлу в дереве также присваивается номер. Два правила:

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

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

Таким образом, приведенная выше конструкция позволяет Алисе отправлять только часть диапазона, которым она владеет, что позволяет ей, в некотором смысле, «разделить» свой эфир. Далее, мы хотим, чтобы пользователи могли «сливать» свой эфир; скажем, у Боба всего 12 эфира, эфир «520–523», который он получил от Алисы, а также эфир в диапазоне «1001–1010». Мы хотим, чтобы у Боба была возможность отправлять все 12 эфира в виде единого атомарного платежа.

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

Чтобы бороться с этим, партии могут «дефрагментировать» свои диапазоны, когда размер истории начинает приближаться к проблемным уровням. Они делают это, просто меняя диапазоны (равной ценности) с другими сторонами, чтобы диапазоны начинали консолидироваться в максимально возможной степени; можно думать об этом как об аналоге стратегии перебалансирования каналов в сетях платежных каналов. Оператор, который имеет глобальное представление о всей сети, является очевидным кандидатом для содействия этому. Несколько cryptoeconomic механизмы а также алгоритмы дефрагментации для выполнения этого были обсуждены, но это, вероятно, потребует тестирования в дикой природе, чтобы увидеть, что работает лучше всего.

(Примечание: другое семейство конструкций, а именно, гибридные модели канала / плазмы — может также дать нам, среди прочего, большую платежеспособность. Они будут рассмотрены в части 3).


Заключение

Поздравляю, вы сделали это! Так где же тогда обстоят дела с плазмой? Была ли взломана плазменная головоломка? Тяжело сказать; ничто из описанного выше не кажется решением для серебряной пули, которое кажется неудовлетворительным; в то же время, использование различных методов, имеющихся в нашем наборе инструментов, в конечном итоге может оказаться достаточным для обеспечения работоспособности плазменной цепи. Время покажет; в любом случае, исследования и разработки развиваются с угрожающей скоростью, поэтому к тому времени, когда вы читаете это, уже есть больше вещей, с которыми нужно считаться (извините). До следующей встречи, удачи.

Спасибо Бену Роузу, Дэну Робинсону и Георгиосу Константополусу за полезные обсуждения и отзывы

Автор: Даниэль Голдман