Обзор Loopring 3.0: от A до zkSNARKs

Natali
Протокол LOOPRING
4 min readJul 2, 2019

Эта статья предназначена для предоставления краткого обзора того, как работает Loopring 3.0, и как мы используем zkSNARKs для обеспечения масштабируемого, безопасного DEX. Для детального изучения, вы можете обратиться к полному дизайну на GitHub.

Введение

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

Протокол 3.0 решает эту проблему, перемещая почти все данные офчейн, а также перемещая все вычисления для всех запросов также офчейн, используя доказательства с нулевым знанием (zkSNARKs).

Дерево Меркля

Данные хранятся в дереве Меркля с использованием модели аккаунтов. Каждый пользователь имеет один аккаунт с однозначным сопоставлением со своим Ethereum адресом. Эта учетная запись может хранить остатки по всем токенам, которые биржа хочет поддерживать, а также хранит все данные торговой истории пользователя. Запросы изменяют дерево Меркля, и переходы состояний проверяются ончейн с использованием доказательств.

Блоки

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

В настоящее время мы поддерживаем 5 различных запросов:

  1. Торговля
  2. Депозит
  3. Ончейн вывод
  4. Офчейн вывод
  5. Офчейн отмена ордера

Только первые три необходимы для построения полнофункционального DEX. Два других обеспечивают дополнительную гибкость для пользователей и бирж.

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

Доступность данных

Только корень дерева Меркля хранится ончейн. Этого достаточно для пользователей, чтобы доказать (используя доказательство Меркля), что они владеют определенным количеством токенов на DEX. Даже когда оператор DEX больше не отвечает, пользователи могут снимать любые средства, которые у них есть, в "режиме вывода".

Пользователи должны иметь возможность создать доказательство Меркля. Для этого они должны иметь доступ к полному дереву Меркля, а не только к корню Меркля. В лучшем случае эти данные предоставляются DEX, но нет никакой гарантии, что это действительно так. Чтобы убедиться, что все данные доступны для всех пользователей, эти данные отправляются ончейн (это делается с помощью CALLDATA, а не хранилища, что дешевле и более перспективно). В настоящее время это все ещё имеет высокую стоимость на Ethereum (хотя это улучшится в будущем), и это ограничивает максимальную пропускную способность, которая может быть достигнута. Вот почему мы также поддерживаем отключение доступности данных ончейн, DEX затем может реализовать некоторые решения офчейн.

Действия пользователя

Депозит

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

Торговля

Пользователь подписывает ордер один раз, и ордер содержит все данные, необходимые для DEX для его урегулирования. Протокол поддерживает:

  • Мейкер/тейкер ордера (по сути один ордер)
  • Рыночные ордера
  • Оплата комиссии DEX
  • Возврат платежей от DEX владельцу ордера
  • Автоматические ордера
  • Ордер частичного погашения
  • Двойная авторизация для предотвращения кражи ордеров и/или кольцевых расчетов

Как ордера выполняются полностью ответственность DEX, но урегулирование будет учитывать пожелания создателя ордера во всех случаях.

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

Вывод средств

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

О протоколе Loopring

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

Чтобы получить доступ к исходной статье, посетите официальный английский блог Loopring.

Для получения более актуальной информации, пожалуйста, присоединяйтесь к нам в социальных сетях:

⭑ Twitter: twitter.com/loopringorg
⭑ Reddit: reddit.com/r/loopringorg
⭑ Discord: discord.gg/KkYccYp
⭑ GitHub: https://github.com/Loopring
⭑ Telegram: t.me/loopring_en
⭑ Telegram: t.me/loopring_russian

--

--